tx · Fp8MBeMkygTfLAMnFb1R2VC3nid6t4ryUgBSzUhm9uHq

3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh:  -0.01000000 Waves

2023.05.17 10:30 [2581656] smart account 3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh > SELF 0.00000000 Waves

{ "type": 13, "id": "Fp8MBeMkygTfLAMnFb1R2VC3nid6t4ryUgBSzUhm9uHq", "fee": 1000000, "feeAssetId": null, "timestamp": 1684308687684, "version": 2, "chainId": 84, "sender": "3N4ziXSMRverXyxHDUKKMR9MHXnB3TyU3Yh", "senderPublicKey": "EU9obW1yVhR8qug3EmXPeew3DMagvJFQzY5Ku8bmcsU7", "proofs": [ "46B6rbeeAUSazAmFcUXKQjRqGxyxbNYwgXLEz8yGXgyeAux7te4VSPn3AgAHFstPvBBSrtYwhmZB8LcUUtKx7PY5" ], "script": "base64:BgIeCAISBgoECAgBARIAEgMKAQESABIDCgEBEgQKAggIGQAJc2VwYXJhdG9yAgJfXwAOa2V5RXBvY2hMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAgtlcG9jaExlbmd0aAUDbmlsBQlzZXBhcmF0b3IAE2tleUVtaXNzaW9uQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBlbWlzc2lvbkNvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgATa2V5Qm9vc3RpbmdDb250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICEGJvb3N0aW5nQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yAAxrZXlUaHJlc2hvbGQJALkJAgkAzAgCAgIlcwkAzAgCAg92b3RpbmdUaHJlc2hvbGQFA25pbAUJc2VwYXJhdG9yAA9rZXlSYXRlUGVyQmxvY2sJALkJAgkAzAgCAgQlcyVzCQDMCAICDHJhdGVQZXJCbG9jawkAzAgCAgdjdXJyZW50BQNuaWwFCXNlcGFyYXRvcgASa2V5UmF0ZVBlckJsb2NrTWF4CQC5CQIJAMwIAgIEJXMlcwkAzAgCAg9yYXRlUGVyQmxvY2tNYXgJAMwIAgIHY3VycmVudAUDbmlsBQlzZXBhcmF0b3IAEWtleVJhdGVDaGFuZ2VTdGVwCQC5CQIJAMwIAgICJXMJAMwIAgIOcmF0ZUNoYW5nZVN0ZXAFA25pbAUJc2VwYXJhdG9yAQ9nZXRTdHJpbmdPckZhaWwBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICBQNrZXkCDyBpcyBub3QgZGVmaW5lZAEMZ2V0SW50T3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQNrZXkJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBDmtleVN0YXJ0SGVpZ2h0AAkAuQkCCQDMCAICAiVzCQDMCAICC3N0YXJ0SGVpZ2h0BQNuaWwFCXNlcGFyYXRvcgEPa2V5Vm90aW5nUmVzdWx0AAkAuQkCCQDMCAICAiVzCQDMCAICDHZvdGluZ1Jlc3VsdAUDbmlsBQlzZXBhcmF0b3IBCnRvdGFsVm90ZXMDDXRvdGFsSW5jcmVhc2UJdG90YWxOb25lDXRvdGFsRGVjcmVhc2UJALkJAgkAzAgCAgYlZCVkJWQJAMwIAgUNdG90YWxJbmNyZWFzZQkAzAgCBQl0b3RhbE5vbmUJAMwIAgUNdG90YWxEZWNyZWFzZQUDbmlsBQlzZXBhcmF0b3IBB2tleVZvdGUBDHZvdGVyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIEdm90ZQkAzAgCBQx2b3RlckFkZHJlc3MFA25pbAUJc2VwYXJhdG9yAQxrZXlWb3RlVmFsdWUCCWd3eEFtb3VudAR2b3RlBANrZXkDCQAAAgUEdm90ZQABCQC5CQIJAMwIAgIEJWQlcwkAzAgCBQlnd3hBbW91bnQJAMwIAgIIaW5jcmVhc2UFA25pbAUJc2VwYXJhdG9yAwkAAAIFBHZvdGUA////////////AQkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICCGRlY3JlYXNlBQNuaWwFCXNlcGFyYXRvcgkAuQkCCQDMCAICBCVkJXMJAMwIAgUJZ3d4QW1vdW50CQDMCAICBG5vbmUFA25pbAUJc2VwYXJhdG9yBQNrZXkAEGJvb3N0aW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQ9nZXRTdHJpbmdPckZhaWwBBRNrZXlCb29zdGluZ0NvbnRyYWN0ABBlbWlzc2lvbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAQUTa2V5RW1pc3Npb25Db250cmFjdAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkDCQEJaXNNYW5hZ2VyAQUBaQYJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhtmYWlsZWQgdG8gY2FzdCBpbnRvIEludGVnZXIBC2NhbGNOZXdSYXRlAw9yYXRlUGVyQmxvY2tNYXgMcmF0ZVBlckJsb2NrCmNoYW5nZVN0ZXAECm1heEFsbG93ZWQJAGsDAGQFD3JhdGVQZXJCbG9ja01heAB4BA1pbmNyZWFzZWRSYXRlCQCXAwEJAMwIAgkAawMJAGQCAGQFCmNoYW5nZVN0ZXAFDHJhdGVQZXJCbG9jawBkCQDMCAIFCm1heEFsbG93ZWQFA25pbAQNZGVjcmVhc2VkUmF0ZQkAlgMBCQDMCAIJAGsDCQBlAgBkBQpjaGFuZ2VTdGVwBQxyYXRlUGVyQmxvY2sAZAkAzAgCAAAFA25pbAkAlQoDBQ1pbmNyZWFzZWRSYXRlBQxyYXRlUGVyQmxvY2sFDWRlY3JlYXNlZFJhdGUGAWkBC2NvbnN0cnVjdG9yBBNib29zdGluZ0NvbnRyYWN0UHJtE2VtaXNzaW9uQ29udHJhY3RQcm0Rdm90aW5nRHVyYXRpb25Qcm0JdGhyZXNob2xkBAZjaGVja3MJAMwIAgMJAQlpc0RlZmluZWQBCQCmCAEFE2Jvb3N0aW5nQ29udHJhY3RQcm0GCQACAQIhSW52YWxpZCBib29zdGluZyBjb250cmFjdCBhZGRyZXNzCQDMCAIDCQEJaXNEZWZpbmVkAQkApggBBRNlbWlzc2lvbkNvbnRyYWN0UHJtBgkAAgECIUludmFsaWQgZW1pc3Npb24gY29udHJhY3QgYWRkcmVzcwkAzAgCAwkAZgIFEXZvdGluZ0R1cmF0aW9uUHJtAAAGCQACAQIXSW52YWxpZCB2b3RpbmcgZHVyYXRpb24JAMwIAgMJAGYCBQl0aHJlc2hvbGQAAAYJAAIBAhFpbnZhbGlkIHRocmVzaG9sZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUTa2V5Qm9vc3RpbmdDb250cmFjdAUTYm9vc3RpbmdDb250cmFjdFBybQkAzAgCCQELU3RyaW5nRW50cnkCBRNrZXlFbWlzc2lvbkNvbnRyYWN0BRNlbWlzc2lvbkNvbnRyYWN0UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rZXlFcG9jaExlbmd0aAURdm90aW5nRHVyYXRpb25Qcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFDGtleVRocmVzaG9sZAUJdGhyZXNob2xkBQNuaWwFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcZ2V0UmF0ZUNoYW5nZUFtb3VudHNSRUFET05MWQAED3JhdGVQZXJCbG9ja01heAkBEUBleHRyTmF0aXZlKDEwNTApAgUQZW1pc3Npb25Db250cmFjdAUSa2V5UmF0ZVBlckJsb2NrTWF4BAxyYXRlUGVyQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFEGVtaXNzaW9uQ29udHJhY3QFD2tleVJhdGVQZXJCbG9jawQOcmF0ZUNoYW5nZVN0ZXAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtleVJhdGVDaGFuZ2VTdGVwCQCUCgIFA25pbAkBC2NhbGNOZXdSYXRlAwUPcmF0ZVBlckJsb2NrTWF4BQxyYXRlUGVyQmxvY2sFDnJhdGVDaGFuZ2VTdGVwAWkBBHZvdGUBB2luRmF2b3IEEnZvdGluZ0ZpbmlzaEhlaWdodAkAZAIJAQV2YWx1ZQEJAJ8IAQkBDmtleVN0YXJ0SGVpZ2h0AAkBBXZhbHVlAQkAnwgBBQ5rZXlFcG9jaExlbmd0aAQGY2hlY2tzCQDMCAIDCQBmAgUSdm90aW5nRmluaXNoSGVpZ2h0BQZoZWlnaHQGCQACAQIQdG9vIGxhdGUgdG8gdm90ZQkAzAgCAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgABCQDMCAIAAAkAzAgCAP///////////wEFA25pbAUHaW5GYXZvcgYJAAIBAhJub3QgdmFsaWQgYXJndW1lbnQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQJZ3d4QW1vdW50CQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFEnZvdGluZ0ZpbmlzaEhlaWdodAUDbmlsBQNuaWwEB25vdFplcm8DCQBmAgkBBWFzSW50AQUJZ3d4QW1vdW50AAAGCQACAQISeW91IGRvbid0IGhhdmUgZ3d4AwkAAAIFB25vdFplcm8FB25vdFplcm8EBHZvdGUEByRtYXRjaDAJAKIIAQkBB2tleVZvdGUBCQClCAEIBQFpBmNhbGxlcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAEBHZvdGUJALUJAgUBcwUJc2VwYXJhdG9yBAl2b3RlVmFsdWUJAJEDAgUEdm90ZQABBAh2b3RlVHlwZQkAkQMCBQR2b3RlAAIEEWlzVm90ZVR5cGVTaW1pbGFyAwMDCQAAAgUIdm90ZVR5cGUCCGluY3JlYXNlCQAAAgUHaW5GYXZvcgABBwYDCQAAAgUIdm90ZVR5cGUCCGRlY3JlYXNlCQAAAgUHaW5GYXZvcgD///////////8BBwYDCQAAAgUIdm90ZVR5cGUCBG5vbmUJAAACBQdpbkZhdm9yAAAHBBJpc1ZvdGVWYWx1ZVNpbWlsYXIDBRFpc1ZvdGVUeXBlU2ltaWxhcgkAAAIJAQVhc0ludAEFCWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUHBBBpc05ld1ZvdGVTaW1pbGFyAwMFEWlzVm90ZVR5cGVTaW1pbGFyBRJpc1ZvdGVWYWx1ZVNpbWlsYXIHCQACAQIReW91IGFscmVhZHkgdm90ZWQJAPwHBAUEdGhpcwIKY2FuY2VsVm90ZQUDbmlsBQNuaWwFEGlzTmV3Vm90ZVNpbWlsYXIDCQABAgUHJG1hdGNoMAIEVW5pdAQBdQUHJG1hdGNoMAUBdQkAAgECC01hdGNoIGVycm9yAwkAAAIFBHZvdGUFBHZvdGUEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAQQLdm90ZXNUb05vbmUJAJEDAgUMdm90aW5nUmVzdWx0AAIED3ZvdGVzVG9EZWNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQbbmV3UG9zaXRpdmVBbmROZWdhdGl2ZVZvdGVzAwkAAAIFB2luRmF2b3IAAQQQbmV3UG9zaXRpdmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQUPdm90ZXNUb0luY3JlYXNlCQEFYXNJbnQBBQlnd3hBbW91bnQJAMwIAgkApAMBBRBuZXdQb3NpdGl2ZVZvdGVzCQDMCAIFC3ZvdGVzVG9Ob25lCQDMCAIFD3ZvdGVzVG9EZWNyZWFzZQUDbmlsAwkAAAIFB2luRmF2b3IA////////////AQQQbmV3TmVnYXRpdmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQULdm90ZXNUb05vbmUJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCBQ92b3Rlc1RvSW5jcmVhc2UJAMwIAgULdm90ZXNUb05vbmUJAMwIAgkApAMBBRBuZXdOZWdhdGl2ZVZvdGVzBQNuaWwEDG5ld05vbmVWb3RlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQULdm90ZXNUb05vbmUJAQVhc0ludAEFCWd3eEFtb3VudAkAzAgCBQ92b3Rlc1RvSW5jcmVhc2UJAMwIAgkApAMBBQxuZXdOb25lVm90ZXMJAMwIAgUPdm90ZXNUb0RlY3JlYXNlBQNuaWwEB3ZvdGVLZXkJAQdrZXlWb3RlAQkApQgBCAUBaQZjYWxsZXIECXZvdGVWYWx1ZQkBDGtleVZvdGVWYWx1ZQIJAKQDAQkBBWFzSW50AQUJZ3d4QW1vdW50BQdpbkZhdm9yCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVZvdGluZ1Jlc3VsdAAJAQp0b3RhbFZvdGVzAwkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAAkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAQkAkQMCBRtuZXdQb3NpdGl2ZUFuZE5lZ2F0aXZlVm90ZXMAAgkAzAgCCQELU3RyaW5nRW50cnkCBQd2b3RlS2V5BQl2b3RlVmFsdWUFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjYW5jZWxWb3RlAAQLdXNlckFkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkApQgBCAUBaQZjYWxsZXIEBmNoZWNrcwkAzAgCAwkBCWlzRGVmaW5lZAEJAKIIAQkBD2tleVZvdGluZ1Jlc3VsdAAGCQACAQIHbm8gdm90ZQUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAR2b3RlCQC1CQIJAQV2YWx1ZQEJAKIIAQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUJc2VwYXJhdG9yBAl2b3RlVmFsdWUJAJEDAgUEdm90ZQABBAh2b3RlVHlwZQkAkQMCBQR2b3RlAAIEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAQQLdm90ZXNUb05vbmUJAJEDAgUMdm90aW5nUmVzdWx0AAIED3ZvdGVzVG9EZWNyZWFzZQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQHYWN0aW9ucwMJAAACBQh2b3RlVHlwZQIIaW5jcmVhc2UEEG5ld0luY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzVG9JbmNyZWFzZQkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5Vm90aW5nUmVzdWx0AAkBCnRvdGFsVm90ZXMDCQCkAwEFEG5ld0luY3JlYXNlVm90ZXMFC3ZvdGVzVG9Ob25lBQ92b3Rlc1RvRGVjcmVhc2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUDbmlsBQR1bml0AwkAAAIFCHZvdGVUeXBlAglkZXNjcmVhc2UEEG5ld0RlY3JlYXNlVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFD3ZvdGVzVG9EZWNyZWFzZQkBDXBhcnNlSW50VmFsdWUBBQl2b3RlVmFsdWUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5Vm90aW5nUmVzdWx0AAkBCnRvdGFsVm90ZXMDBQ92b3Rlc1RvSW5jcmVhc2UFC3ZvdGVzVG9Ob25lCQCkAwEFEG5ld0RlY3JlYXNlVm90ZXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVZvdGUBBQt1c2VyQWRkcmVzcwUDbmlsBQR1bml0BAxuZXdOb25lVm90ZXMJAGUCCQENcGFyc2VJbnRWYWx1ZQEFC3ZvdGVzVG9Ob25lCQENcGFyc2VJbnRWYWx1ZQEFCXZvdGVWYWx1ZQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlWb3RpbmdSZXN1bHQACQEKdG90YWxWb3RlcwMFD3ZvdGVzVG9JbmNyZWFzZQkApAMBBQxuZXdOb25lVm90ZXMFD3ZvdGVzVG9EZWNyZWFzZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Vm90ZQEFC3VzZXJBZGRyZXNzBQNuaWwFBHVuaXQFB2FjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMc2V0VGhyZXNob2xkAQxuZXdUaHJlc2hvbGQEBmNoZWNrcwkAzAgCCQELbXVzdE1hbmFnZXIBBQFpCQDMCAIDCQBmAgUMbmV3VGhyZXNob2xkAAAGCQACAQIRaW52YWxpZCB0aHJlc2hvbGQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrZXlUaHJlc2hvbGQFDG5ld1RocmVzaG9sZAUDbmlsBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplAg1hbW91bnRBc3NldElkDHByaWNlQXNzZXRJZAQSdm90aW5nRmluaXNoSGVpZ2h0CQBkAgkBBXZhbHVlAQkAnwgBCQEOa2V5U3RhcnRIZWlnaHQACQEFdmFsdWUBCQCfCAEFDmtleUVwb2NoTGVuZ3RoBAZjaGVja3MJAMwIAgMJAGcCBQZoZWlnaHQFEnZvdGluZ0ZpbmlzaEhlaWdodAYJAAIBAiJpbnN1ZmZpY2llbnQgaGVpZ2h0IGZvciBjb21wbGV0aW9uBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDHZvdGluZ1Jlc3VsdAkAtQkCCQEFdmFsdWUBCQCiCAEJAQ9rZXlWb3RpbmdSZXN1bHQABQlzZXBhcmF0b3IED3ZvdGVzVG9JbmNyZWFzZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAABBAt2b3Rlc1RvTm9uZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDHZvdGluZ1Jlc3VsdAACBA92b3Rlc1RvRGVjcmVhc2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQx2b3RpbmdSZXN1bHQAAwQIYWxsVm90ZXMJAGQCCQBkAgUPdm90ZXNUb0luY3JlYXNlBQt2b3Rlc1RvTm9uZQUPdm90ZXNUb0RlY3JlYXNlBAl0aHJlc2hvbGQJAQxnZXRJbnRPckZhaWwBBQxrZXlUaHJlc2hvbGQEB2FjdGlvbnMDAwkAZwIFCGFsbFZvdGVzBQl0aHJlc2hvbGQGBwUDbmlsBQNuaWwFB2FjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4A0FLFGQ==", "height": 2581656, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FpMcHXZKes1tdv5PDmm3WTWjR1gUqfVCZYoVgmH6Y5DW Next: HqH4q7b9MnoFm2K46edyUPLitFdVdorLF8Xx1PL3z5Gj Diff:
OldNewDifferences
118118
119119
120120 @Callable(G)
121-func constructor (T,U,V,W,X) = {
122- let Y = [if (isDefined(addressFromString(T)))
121+func constructor (T,U,V,W) = {
122+ let X = [if (isDefined(addressFromString(T)))
123123 then true
124124 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(U)))
125125 then true
126- else throw("Invalid emission contract address"), if ((W > 0))
126+ else throw("Invalid emission contract address"), if ((V > 0))
127127 then true
128- else throw("Invalid voting duration"), if ((X > 0))
128+ else throw("Invalid voting duration"), if ((W > 0))
129129 then true
130130 else throw("invalid threshold")]
131- if ((Y == Y))
132- then $Tuple2([StringEntry(d, T), StringEntry(c, U), IntegerEntry(b, W), IntegerEntry(e, X)], unit)
131+ if ((X == X))
132+ then $Tuple2([StringEntry(d, T), StringEntry(c, U), IntegerEntry(b, V), IntegerEntry(e, W)], unit)
133133 else throw("Strict value is not equal to itself.")
134134 }
135135
139139 func getRateChangeAmountsREADONLY () = {
140140 let N = getIntegerValue(x, g)
141141 let O = getIntegerValue(x, f)
142- let Z = getIntegerValue(this, h)
143- $Tuple2(nil, M(N, O, Z))
142+ let Y = getIntegerValue(this, h)
143+ $Tuple2(nil, M(N, O, Y))
144144 }
145145
146146
147147
148148 @Callable(G)
149-func vote (aa) = {
150- let ab = (value(getInteger(l())) + value(getInteger(b)))
151- let Y = [if ((ab > height))
149+func vote (Z) = {
150+ let aa = (value(getInteger(l())) + value(getInteger(b)))
151+ let X = [if ((aa > height))
152152 then true
153- else throw("too late to vote"), if (containsElement([1, 0, -1], aa))
153+ else throw("too late to vote"), if (containsElement([1, 0, -1], Z))
154154 then true
155155 else throw("not valid argument")]
156- if ((Y == Y))
156+ if ((X == X))
157157 then {
158- let u = invoke(w, "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), ab], nil)
159- let ac = if ((J(u) > 0))
158+ let u = invoke(w, "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), aa], nil)
159+ let ab = if ((J(u) > 0))
160160 then true
161161 else throw("you don't have gwx")
162- if ((ac == ac))
162+ if ((ab == ab))
163163 then {
164164 let v = {
165165 let B = getString(r(toString(G.caller)))
167167 then {
168168 let C = B
169169 let v = split(C, a)
170- let ad = v[1]
171- let ae = v[2]
172- let af = if (if (if ((ae == "increase"))
173- then (aa == 1)
170+ let ac = v[1]
171+ let ad = v[2]
172+ let ae = if (if (if ((ad == "increase"))
173+ then (Z == 1)
174174 else false)
175175 then true
176- else if ((ae == "decrease"))
177- then (aa == -1)
176+ else if ((ad == "decrease"))
177+ then (Z == -1)
178178 else false)
179179 then true
180- else if ((ae == "none"))
181- then (aa == 0)
180+ else if ((ad == "none"))
181+ then (Z == 0)
182182 else false
183- let ag = if (af)
184- then (J(u) == parseIntValue(ad))
183+ let af = if (ae)
184+ then (J(u) == parseIntValue(ac))
185185 else false
186- let ah = if (if (af)
187- then ag
186+ let ag = if (if (ae)
187+ then af
188188 else false)
189189 then throw("you already voted")
190190 else invoke(this, "cancelVote", nil, nil)
191- ah
191+ ag
192192 }
193193 else if ($isInstanceOf(B, "Unit"))
194194 then {
195- let ai = B
196- ai
195+ let ah = B
196+ ah
197197 }
198198 else throw("Match error")
199199 }
200200 if ((v == v))
201201 then {
202- let aj = split(value(getString(m())), a)
203- let ak = aj[1]
204- let al = aj[2]
205- let am = aj[3]
206- let an = if ((aa == 1))
202+ let ai = split(value(getString(m())), a)
203+ let aj = ai[1]
204+ let ak = ai[2]
205+ let al = ai[3]
206+ let am = if ((Z == 1))
207207 then {
208- let ao = (parseIntValue(ak) + J(u))
209-[toString(ao), al, am]
208+ let an = (parseIntValue(aj) + J(u))
209+[toString(an), ak, al]
210210 }
211- else if ((aa == -1))
211+ else if ((Z == -1))
212212 then {
213- let ap = (parseIntValue(al) + J(u))
214-[ak, al, toString(ap)]
213+ let ao = (parseIntValue(ak) + J(u))
214+[aj, ak, toString(ao)]
215215 }
216216 else {
217- let aq = (parseIntValue(al) + J(u))
218-[ak, toString(aq), am]
217+ let ap = (parseIntValue(ak) + J(u))
218+[aj, toString(ap), al]
219219 }
220- let ar = r(toString(G.caller))
221- let ad = t(toString(J(u)), aa)
222- $Tuple2([StringEntry(m(), n(an[0], an[1], an[2])), StringEntry(ar, ad)], unit)
220+ let aq = r(toString(G.caller))
221+ let ac = t(toString(J(u)), Z)
222+ $Tuple2([StringEntry(m(), n(am[0], am[1], am[2])), StringEntry(aq, ac)], unit)
223223 }
224224 else throw("Strict value is not equal to itself.")
225225 }
232232
233233 @Callable(G)
234234 func cancelVote () = {
235- let as = if ((G.caller == this))
235+ let ar = if ((G.caller == this))
236236 then toString(G.originCaller)
237237 else toString(G.caller)
238- let Y = [if (isDefined(getString(m())))
238+ let X = [if (isDefined(getString(m())))
239239 then true
240240 else throw("no vote")]
241- if ((Y == Y))
241+ if ((X == X))
242242 then {
243- let v = split(value(getString(r(as))), a)
244- let ad = v[1]
245- let ae = v[2]
246- let aj = split(value(getString(m())), a)
247- let ak = aj[1]
248- let al = aj[2]
249- let am = aj[3]
250- let at = if ((ae == "increase"))
243+ let v = split(value(getString(r(ar))), a)
244+ let ac = v[1]
245+ let ad = v[2]
246+ let ai = split(value(getString(m())), a)
247+ let aj = ai[1]
248+ let ak = ai[2]
249+ let al = ai[3]
250+ let as = if ((ad == "increase"))
251251 then {
252- let au = (parseIntValue(ak) - parseIntValue(ad))
253- $Tuple2([StringEntry(m(), n(toString(au), al, am)), DeleteEntry(r(as))], unit)
252+ let at = (parseIntValue(aj) - parseIntValue(ac))
253+ $Tuple2([StringEntry(m(), n(toString(at), ak, al)), DeleteEntry(r(ar))], unit)
254254 }
255- else if ((ae == "descrease"))
255+ else if ((ad == "descrease"))
256256 then {
257- let av = (parseIntValue(am) - parseIntValue(ad))
258- $Tuple2([StringEntry(m(), n(ak, al, toString(av))), DeleteEntry(r(as))], unit)
257+ let au = (parseIntValue(al) - parseIntValue(ac))
258+ $Tuple2([StringEntry(m(), n(aj, ak, toString(au))), DeleteEntry(r(ar))], unit)
259259 }
260260 else {
261- let aq = (parseIntValue(al) - parseIntValue(ad))
262- $Tuple2([StringEntry(m(), n(ak, toString(aq), am)), DeleteEntry(r(as))], unit)
261+ let ap = (parseIntValue(ak) - parseIntValue(ac))
262+ $Tuple2([StringEntry(m(), n(aj, toString(ap), al)), DeleteEntry(r(ar))], unit)
263263 }
264- at
264+ as
265265 }
266266 else throw("Strict value is not equal to itself.")
267267 }
269269
270270
271271 @Callable(G)
272-func setThreshold (aw) = {
273- let Y = [I(G), if ((aw > 0))
272+func setThreshold (av) = {
273+ let X = [I(G), if ((av > 0))
274274 then true
275275 else throw("invalid threshold")]
276- if ((Y == Y))
277- then $Tuple2([IntegerEntry(e, aw)], unit)
276+ if ((X == X))
277+ then $Tuple2([IntegerEntry(e, av)], unit)
278278 else throw("Strict value is not equal to itself.")
279279 }
280280
281281
282282
283283 @Callable(G)
284-func finalize (ax,ay) = {
285- let ab = (value(getInteger(l())) + value(getInteger(b)))
286- let Y = [if ((height >= ab))
284+func finalize (aw,ax) = {
285+ let aa = (value(getInteger(l())) + value(getInteger(b)))
286+ let X = [if ((height >= aa))
287287 then true
288288 else throw("insufficient height for completion")]
289- if ((Y == Y))
289+ if ((X == X))
290290 then {
291- let aj = split(value(getString(m())), a)
292- let ak = parseIntValue(aj[1])
293- let al = parseIntValue(aj[2])
294- let am = parseIntValue(aj[3])
295- let az = ((ak + al) + am)
296- let X = k(e)
297- let at = if (if ((az >= X))
291+ let ai = split(value(getString(m())), a)
292+ let aj = parseIntValue(ai[1])
293+ let ak = parseIntValue(ai[2])
294+ let al = parseIntValue(ai[3])
295+ let ay = ((aj + ak) + al)
296+ let W = k(e)
297+ let as = if (if ((ay >= W))
298298 then true
299299 else false)
300300 then nil
301301 else nil
302- at
302+ as
303303 }
304304 else throw("Strict value is not equal to itself.")
305305 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = makeString(["%s", "epochLength"], a)
77
88 let c = makeString(["%s", "emissionContract"], a)
99
1010 let d = makeString(["%s", "boostingContract"], a)
1111
1212 let e = makeString(["%s", "votingThreshold"], a)
1313
1414 let f = makeString(["%s%s", "ratePerBlock", "current"], a)
1515
1616 let g = makeString(["%s%s", "ratePerBlockMax", "current"], a)
1717
1818 let h = makeString(["%s", "rateChangeStep"], a)
1919
2020 func i (j) = valueOrErrorMessage(getString(this, j), (j + " is not defined"))
2121
2222
2323 func k (j) = valueOrErrorMessage(getInteger(this, j), (j + " is not defined"))
2424
2525
2626 func l () = makeString(["%s", "startHeight"], a)
2727
2828
2929 func m () = makeString(["%s", "votingResult"], a)
3030
3131
3232 func n (o,p,q) = makeString(["%d%d%d", o, p, q], a)
3333
3434
3535 func r (s) = makeString(["%s%s", "vote", s], a)
3636
3737
3838 func t (u,v) = {
3939 let j = if ((v == 1))
4040 then makeString(["%d%s", u, "increase"], a)
4141 else if ((v == -1))
4242 then makeString(["%d%s", u, "decrease"], a)
4343 else makeString(["%d%s", u, "none"], a)
4444 j
4545 }
4646
4747
4848 let w = addressFromStringValue(i(d))
4949
5050 let x = addressFromStringValue(i(c))
5151
5252 func y () = "%s__managerPublicKey"
5353
5454
5555 func z () = "%s__managerVaultAddress"
5656
5757
5858 func A () = {
5959 let B = getString(z())
6060 if ($isInstanceOf(B, "String"))
6161 then {
6262 let C = B
6363 addressFromStringValue(C)
6464 }
6565 else this
6666 }
6767
6868
6969 func D () = {
7070 let E = A()
7171 let B = getString(E, y())
7272 if ($isInstanceOf(B, "String"))
7373 then {
7474 let C = B
7575 fromBase58String(C)
7676 }
7777 else if ($isInstanceOf(B, "Unit"))
7878 then unit
7979 else throw("Match error")
8080 }
8181
8282
8383 func F (G) = {
8484 let B = D()
8585 if ($isInstanceOf(B, "ByteVector"))
8686 then {
8787 let H = B
8888 (G.callerPublicKey == H)
8989 }
9090 else if ($isInstanceOf(B, "Unit"))
9191 then (G.caller == this)
9292 else throw("Match error")
9393 }
9494
9595
9696 func I (G) = if (F(G))
9797 then true
9898 else throw("permission denied")
9999
100100
101101 func J (K) = {
102102 let B = K
103103 if ($isInstanceOf(B, "Int"))
104104 then {
105105 let L = B
106106 L
107107 }
108108 else throw("failed to cast into Integer")
109109 }
110110
111111
112112 func M (N,O,P) = {
113113 let Q = fraction(100, N, 120)
114114 let R = min([fraction((100 + P), O, 100), Q])
115115 let S = max([fraction((100 - P), O, 100), 0])
116116 $Tuple3(R, O, S)
117117 }
118118
119119
120120 @Callable(G)
121-func constructor (T,U,V,W,X) = {
122- let Y = [if (isDefined(addressFromString(T)))
121+func constructor (T,U,V,W) = {
122+ let X = [if (isDefined(addressFromString(T)))
123123 then true
124124 else throw("Invalid boosting contract address"), if (isDefined(addressFromString(U)))
125125 then true
126- else throw("Invalid emission contract address"), if ((W > 0))
126+ else throw("Invalid emission contract address"), if ((V > 0))
127127 then true
128- else throw("Invalid voting duration"), if ((X > 0))
128+ else throw("Invalid voting duration"), if ((W > 0))
129129 then true
130130 else throw("invalid threshold")]
131- if ((Y == Y))
132- then $Tuple2([StringEntry(d, T), StringEntry(c, U), IntegerEntry(b, W), IntegerEntry(e, X)], unit)
131+ if ((X == X))
132+ then $Tuple2([StringEntry(d, T), StringEntry(c, U), IntegerEntry(b, V), IntegerEntry(e, W)], unit)
133133 else throw("Strict value is not equal to itself.")
134134 }
135135
136136
137137
138138 @Callable(G)
139139 func getRateChangeAmountsREADONLY () = {
140140 let N = getIntegerValue(x, g)
141141 let O = getIntegerValue(x, f)
142- let Z = getIntegerValue(this, h)
143- $Tuple2(nil, M(N, O, Z))
142+ let Y = getIntegerValue(this, h)
143+ $Tuple2(nil, M(N, O, Y))
144144 }
145145
146146
147147
148148 @Callable(G)
149-func vote (aa) = {
150- let ab = (value(getInteger(l())) + value(getInteger(b)))
151- let Y = [if ((ab > height))
149+func vote (Z) = {
150+ let aa = (value(getInteger(l())) + value(getInteger(b)))
151+ let X = [if ((aa > height))
152152 then true
153- else throw("too late to vote"), if (containsElement([1, 0, -1], aa))
153+ else throw("too late to vote"), if (containsElement([1, 0, -1], Z))
154154 then true
155155 else throw("not valid argument")]
156- if ((Y == Y))
156+ if ((X == X))
157157 then {
158- let u = invoke(w, "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), ab], nil)
159- let ac = if ((J(u) > 0))
158+ let u = invoke(w, "getUserGwxAmountAtHeightREADONLY", [toString(G.caller), aa], nil)
159+ let ab = if ((J(u) > 0))
160160 then true
161161 else throw("you don't have gwx")
162- if ((ac == ac))
162+ if ((ab == ab))
163163 then {
164164 let v = {
165165 let B = getString(r(toString(G.caller)))
166166 if ($isInstanceOf(B, "String"))
167167 then {
168168 let C = B
169169 let v = split(C, a)
170- let ad = v[1]
171- let ae = v[2]
172- let af = if (if (if ((ae == "increase"))
173- then (aa == 1)
170+ let ac = v[1]
171+ let ad = v[2]
172+ let ae = if (if (if ((ad == "increase"))
173+ then (Z == 1)
174174 else false)
175175 then true
176- else if ((ae == "decrease"))
177- then (aa == -1)
176+ else if ((ad == "decrease"))
177+ then (Z == -1)
178178 else false)
179179 then true
180- else if ((ae == "none"))
181- then (aa == 0)
180+ else if ((ad == "none"))
181+ then (Z == 0)
182182 else false
183- let ag = if (af)
184- then (J(u) == parseIntValue(ad))
183+ let af = if (ae)
184+ then (J(u) == parseIntValue(ac))
185185 else false
186- let ah = if (if (af)
187- then ag
186+ let ag = if (if (ae)
187+ then af
188188 else false)
189189 then throw("you already voted")
190190 else invoke(this, "cancelVote", nil, nil)
191- ah
191+ ag
192192 }
193193 else if ($isInstanceOf(B, "Unit"))
194194 then {
195- let ai = B
196- ai
195+ let ah = B
196+ ah
197197 }
198198 else throw("Match error")
199199 }
200200 if ((v == v))
201201 then {
202- let aj = split(value(getString(m())), a)
203- let ak = aj[1]
204- let al = aj[2]
205- let am = aj[3]
206- let an = if ((aa == 1))
202+ let ai = split(value(getString(m())), a)
203+ let aj = ai[1]
204+ let ak = ai[2]
205+ let al = ai[3]
206+ let am = if ((Z == 1))
207207 then {
208- let ao = (parseIntValue(ak) + J(u))
209-[toString(ao), al, am]
208+ let an = (parseIntValue(aj) + J(u))
209+[toString(an), ak, al]
210210 }
211- else if ((aa == -1))
211+ else if ((Z == -1))
212212 then {
213- let ap = (parseIntValue(al) + J(u))
214-[ak, al, toString(ap)]
213+ let ao = (parseIntValue(ak) + J(u))
214+[aj, ak, toString(ao)]
215215 }
216216 else {
217- let aq = (parseIntValue(al) + J(u))
218-[ak, toString(aq), am]
217+ let ap = (parseIntValue(ak) + J(u))
218+[aj, toString(ap), al]
219219 }
220- let ar = r(toString(G.caller))
221- let ad = t(toString(J(u)), aa)
222- $Tuple2([StringEntry(m(), n(an[0], an[1], an[2])), StringEntry(ar, ad)], unit)
220+ let aq = r(toString(G.caller))
221+ let ac = t(toString(J(u)), Z)
222+ $Tuple2([StringEntry(m(), n(am[0], am[1], am[2])), StringEntry(aq, ac)], unit)
223223 }
224224 else throw("Strict value is not equal to itself.")
225225 }
226226 else throw("Strict value is not equal to itself.")
227227 }
228228 else throw("Strict value is not equal to itself.")
229229 }
230230
231231
232232
233233 @Callable(G)
234234 func cancelVote () = {
235- let as = if ((G.caller == this))
235+ let ar = if ((G.caller == this))
236236 then toString(G.originCaller)
237237 else toString(G.caller)
238- let Y = [if (isDefined(getString(m())))
238+ let X = [if (isDefined(getString(m())))
239239 then true
240240 else throw("no vote")]
241- if ((Y == Y))
241+ if ((X == X))
242242 then {
243- let v = split(value(getString(r(as))), a)
244- let ad = v[1]
245- let ae = v[2]
246- let aj = split(value(getString(m())), a)
247- let ak = aj[1]
248- let al = aj[2]
249- let am = aj[3]
250- let at = if ((ae == "increase"))
243+ let v = split(value(getString(r(ar))), a)
244+ let ac = v[1]
245+ let ad = v[2]
246+ let ai = split(value(getString(m())), a)
247+ let aj = ai[1]
248+ let ak = ai[2]
249+ let al = ai[3]
250+ let as = if ((ad == "increase"))
251251 then {
252- let au = (parseIntValue(ak) - parseIntValue(ad))
253- $Tuple2([StringEntry(m(), n(toString(au), al, am)), DeleteEntry(r(as))], unit)
252+ let at = (parseIntValue(aj) - parseIntValue(ac))
253+ $Tuple2([StringEntry(m(), n(toString(at), ak, al)), DeleteEntry(r(ar))], unit)
254254 }
255- else if ((ae == "descrease"))
255+ else if ((ad == "descrease"))
256256 then {
257- let av = (parseIntValue(am) - parseIntValue(ad))
258- $Tuple2([StringEntry(m(), n(ak, al, toString(av))), DeleteEntry(r(as))], unit)
257+ let au = (parseIntValue(al) - parseIntValue(ac))
258+ $Tuple2([StringEntry(m(), n(aj, ak, toString(au))), DeleteEntry(r(ar))], unit)
259259 }
260260 else {
261- let aq = (parseIntValue(al) - parseIntValue(ad))
262- $Tuple2([StringEntry(m(), n(ak, toString(aq), am)), DeleteEntry(r(as))], unit)
261+ let ap = (parseIntValue(ak) - parseIntValue(ac))
262+ $Tuple2([StringEntry(m(), n(aj, toString(ap), al)), DeleteEntry(r(ar))], unit)
263263 }
264- at
264+ as
265265 }
266266 else throw("Strict value is not equal to itself.")
267267 }
268268
269269
270270
271271 @Callable(G)
272-func setThreshold (aw) = {
273- let Y = [I(G), if ((aw > 0))
272+func setThreshold (av) = {
273+ let X = [I(G), if ((av > 0))
274274 then true
275275 else throw("invalid threshold")]
276- if ((Y == Y))
277- then $Tuple2([IntegerEntry(e, aw)], unit)
276+ if ((X == X))
277+ then $Tuple2([IntegerEntry(e, av)], unit)
278278 else throw("Strict value is not equal to itself.")
279279 }
280280
281281
282282
283283 @Callable(G)
284-func finalize (ax,ay) = {
285- let ab = (value(getInteger(l())) + value(getInteger(b)))
286- let Y = [if ((height >= ab))
284+func finalize (aw,ax) = {
285+ let aa = (value(getInteger(l())) + value(getInteger(b)))
286+ let X = [if ((height >= aa))
287287 then true
288288 else throw("insufficient height for completion")]
289- if ((Y == Y))
289+ if ((X == X))
290290 then {
291- let aj = split(value(getString(m())), a)
292- let ak = parseIntValue(aj[1])
293- let al = parseIntValue(aj[2])
294- let am = parseIntValue(aj[3])
295- let az = ((ak + al) + am)
296- let X = k(e)
297- let at = if (if ((az >= X))
291+ let ai = split(value(getString(m())), a)
292+ let aj = parseIntValue(ai[1])
293+ let ak = parseIntValue(ai[2])
294+ let al = parseIntValue(ai[3])
295+ let ay = ((aj + ak) + al)
296+ let W = k(e)
297+ let as = if (if ((ay >= W))
298298 then true
299299 else false)
300300 then nil
301301 else nil
302- at
302+ as
303303 }
304304 else throw("Strict value is not equal to itself.")
305305 }
306306
307307

github/deemru/w8io/c3f4982 
90.01 ms