tx · 9yRGktn9YvxTe56Pw1EtAxoRueg1FPKiCbqguNuwuBh9 3N4ynz2uyA7cErymQd46zgwVJEEfXYDRXtA: -0.01500000 Waves 2023.08.04 11:45 [2695613] smart account 3N4ynz2uyA7cErymQd46zgwVJEEfXYDRXtA > SELF 0.00000000 Waves
{ "type": 13, "id": "9yRGktn9YvxTe56Pw1EtAxoRueg1FPKiCbqguNuwuBh9", "fee": 1500000, "feeAssetId": null, "timestamp": 1691138753022, "version": 2, "chainId": 84, "sender": "3N4ynz2uyA7cErymQd46zgwVJEEfXYDRXtA", "senderPublicKey": "CiRX9ubobzbD36ZwTyuBFiPnPkmzMQ7GDsF3hMoVbcVR", "proofs": [ "H5tBqHFQhLMehuFstHfCmN9nYYrFUZYpPRKETpBLQT1d8z94qfLzkksecsAUrkB1HBJs3Hkmgb4RpTFyFH4NxFh" ], "script": "base64:AAIFAAAAAAAAABEIAhIICgYBAQEBAQQSAwoBAQAAAAwAAAAAI3ByZXNhbGVfdGltZXN0YW1wX2NvbnRyb2xsZXJfcHVia2V5AQAAACDjrdey1Io21qI8AxObYBZMNWPHMCK947HpXHsKae68IwAAAAASY29udHJvbGxlcl9hZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAACNwcmVzYWxlX3RpbWVzdGFtcF9jb250cm9sbGVyX3B1YmtleQAAAAAHdHNlcnJvcgIAAAA8RW5kIFRpbWVzdGFtcCBjYW4ndCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gU3RhcnQgVGltZXN0YW1wAAAAAApwcmljZWVycm9yAgAAACZUb2tlbiBQcmljZSBjYW4ndCBiZSBsZXNzIHRoYW4gb3IgWmVybwAAAAAIY2FwZXJyb3ICAAAAM1NvZnQgQ2FwIEFtb3VudCBjYW4ndCBiZSBtb3JlIHRoYW4gSGFyZCBDYXAgQW1vdW50LgAAAAAIb3JkZXJtc2cCAAAAKjxoMT5PcmRlciBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5ITwvaDE+PGJyPgAAAAAQcHJlc2FsZV9pbml0X21zZwIAAAA3PGgxPlByZVNhbGUgUGFyYW1ldGVycyBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5ITwvaDE+PGJyPgAAAAAJcHltdGVycm9yAgAAACtEQXBwIE5lZWQgV0FWRVMgVG9rZW4gYXMgQXR0YWNoIHBheW1lbnRbMV0uAAAAAA5vcmRlcnB5bXRlcnJvcgIAAAAtQXR0YWNoZWQgcGF5bWVudFsxXSBpcyBsZXNzIHRoYW4gdG9rZW4gcHJpY2UgAAAAAAxsYXVuY2hfZXJyb3ICAAAAJkRhcHAgd2lsbCBzdGFydCBQcmUtU2FsZSBhdCBUaW1lc3RhbXAgAAAAAAttaW5iYWxlcnJvcgIAAABmTWluaW11bSAwLjEgV0FWRVMgcmVxdWlyZWQgb24gWW91ciBBZGRyZXNzLCBQbGVhc2UgaG9sZCBtaW4uIDAuMSBXQVZFUyBvbiB5b3VyIEFkZHJlc3MgdG8gcGxhY2Ugb3JkZXIuAAAAAA9wcmVzYWxlX2VuZF9lcnICAAAAIFByZS1TYWxlIGlzIG92ZXIgZm9yIHRoaXMgUm91bmQuAAAAAgAAAAFpAQAAABRTZXRQcmVTYWxlUGFyYW1ldGVycwAAAAYAAAAXUHJlc2FsZV9TdGFydF9UaW1lU3RhbXAAAAAVUHJlc2FsZV9FbmRfVGltZVN0YW1wAAAAC1Rva2VuX1ByaWNlAAAAD1NvZnRfQ2FwX0Ftb3VudAAAAA9IYXJkX0NhcF9BbW91bnQAAAAMQWxsb3dfUmVmdW5kBAAAAAdTdGFydFRTBQAAABdQcmVzYWxlX1N0YXJ0X1RpbWVTdGFtcAQAAAAFRW5kVFMFAAAAFVByZXNhbGVfRW5kX1RpbWVTdGFtcAQAAAAScmVhZF9mdW5kaW5nX3JvdW5kBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMCAAAAFUN1cnJlbnRfRnVuZGluZ19Sb3VuZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAA1jdXJyZW50X3JvdW5kCQAAZAAAAAIFAAAAEnJlYWRfZnVuZGluZ19yb3VuZAAAAAAAAAAAAQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAASY29udHJvbGxlcl9hZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACVUaGlzIEFkZHJlc3MgaXMgbm90IEF1dGhvcml6ZWQuIE9ubHkgCQAEJQAAAAEFAAAAEmNvbnRyb2xsZXJfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAQAAAAIhPQAAAAIJAAExAAAAAQkAAaQAAAABBQAAABdQcmVzYWxlX1N0YXJ0X1RpbWVTdGFtcAAAAAAAAAAADQkAAAIAAAABAgAAAG9TdGFydCBUaW1lc3RhbXAgaXMgV3JvbmcuIFBsZWFzZSBFbnRlciBhIFZhbGlkIFRpbWVzdGFtcC4gUHJvYmFibHkgeW91IGVudGVyZWQgYW4gVGltZXN0YW1wIGxlc3MgdGhhbiAxMyBDaGFycy4DCQEAAAACIT0AAAACCQABMQAAAAEJAAGkAAAAAQUAAAAVUHJlc2FsZV9FbmRfVGltZVN0YW1wAAAAAAAAAAANCQAAAgAAAAECAAAAbUVuZCBUaW1lc3RhbXAgaXMgV3JvbmcuIFBsZWFzZSBFbnRlciBhIFZhbGlkIFRpbWVzdGFtcC4gUHJvYmFibHkgeW91IGVudGVyZWQgYW4gVGltZXN0YW1wIGxlc3MgdGhhbiAxMyBDaGFycy4DCQAAZgAAAAIAAAAAAAAAAAEFAAAAC1Rva2VuX1ByaWNlCQAAAgAAAAEFAAAACnByaWNlZXJyb3IDCQAAZwAAAAIFAAAAB1N0YXJ0VFMFAAAABUVuZFRTCQAAAgAAAAEFAAAAB3RzZXJyb3IDCQAAZgAAAAIFAAAAD1NvZnRfQ2FwX0Ftb3VudAUAAAAPSGFyZF9DYXBfQW1vdW50CQAAAgAAAAEFAAAACGNhcGVycm9yCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABVDdXJyZW50X0Z1bmRpbmdfUm91bmQFAAAADWN1cnJlbnRfcm91bmQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAA1jdXJyZW50X3JvdW5kAgAAABhfUHJlc2FsZV9TdGFydF9UaW1lU3RhbXAFAAAAB1N0YXJ0VFMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAA1jdXJyZW50X3JvdW5kAgAAABZfUHJlc2FsZV9FbmRfVGltZVN0YW1wBQAAAAVFbmRUUwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAADWN1cnJlbnRfcm91bmQCAAAADF9Ub2tlbl9QcmljZQUAAAALVG9rZW5fUHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAA1jdXJyZW50X3JvdW5kAgAAABBfU29mdF9DYXBfQW1vdW50BQAAAA9Tb2Z0X0NhcF9BbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAA1jdXJyZW50X3JvdW5kAgAAABBfSGFyZF9DYXBfQW1vdW50BQAAAA9IYXJkX0NhcF9BbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAA1jdXJyZW50X3JvdW5kAgAAABFfSW5pdGlhdGVkX0hlaWdodAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAANY3VycmVudF9yb3VuZAIAAAANX0FsbG93X1JlZnVuZAUAAAAMQWxsb3dfUmVmdW5kCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAB21lc3NhZ2UFAAAAEHByZXNhbGVfaW5pdF9tc2cFAAAAA25pbAAAAAFpAQAAABFQbGFjZVByZXNhbGVPcmRlcgAAAAEAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAQAAAAWcmVhZF9yb3VuZF90b2tlbl9wcmljZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAAxfVG9rZW5fUHJpY2UCAAAALVRva2VuIFByaWNlIG5vdCBGb3VuZCBmb3IgdGhpcyBQcmVzYWxlIFJvdW5kLgQAAAATcmVhZF9yb3VuZF9zdGFydF90cwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABhfUHJlc2FsZV9TdGFydF9UaW1lU3RhbXACAAAAMVN0YXJ0IFRpbWVzdGFtcCBub3QgRm91bmQgZm9yIHRoaXMgUHJlc2FsZSBSb3VuZC4EAAAAEXJlYWRfcm91bmRfZW5kX3RzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAFl9QcmVzYWxlX0VuZF9UaW1lU3RhbXACAAAAL0VuZCBUaW1lc3RhbXAgbm90IEZvdW5kIGZvciB0aGlzIFByZXNhbGUgUm91bmQuBAAAABRyZWFkX1NvZnRfQ2FwX0Ftb3VudAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABBfU29mdF9DYXBfQW1vdW50AgAAADFTb2Z0IENhcCBBbW91bnQgbm90IEZvdW5kIGZvciB0aGlzIFByZXNhbGUgUm91bmQuBAAAABRyZWFkX0hhcmRfQ2FwX0Ftb3VudAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABBfSGFyZF9DYXBfQW1vdW50AgAAADFIYXJkIENhcCBBbW91bnQgbm90IEZvdW5kIGZvciB0aGlzIFByZXNhbGUgUm91bmQuBAAAABFyZWFkX0FsbG93X1JlZnVuZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAA1fQWxsb3dfUmVmdW5kAgAAAClSZWZ1bmQgaXMgbm90IHNldCBmb3IgdGhpcyBQcmVzYWxlIFJvdW5kLgQAAAAFV0FWRVMFAAAABHVuaXQEAAAACmN1cnJlbnRLZXkJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAEFAAAACXB5bXRlcnJvcgQAAAAVcmVhZF9mdW5kc19jb2xsZWN0aW9uBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABFfRnVuZHNfQ29sbGVjdGlvbgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABZ0b3RhbF9mdW5kc19jb2xsZWN0aW9uCQAAZAAAAAIFAAAAFXJlYWRfZnVuZHNfY29sbGVjdGlvbggFAAAAA3BtdAAAAAZhbW91bnQEAAAAD3JlYWRfdG90YWxfdHhucwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAALX3RvdGFsX3R4bnMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAKdG90YWxfdHhucwkAAGQAAAACBQAAAA9yZWFkX3RvdGFsX3R4bnMAAAAAAAAAAAEEAAAAH3JlYWRfdXNlcl90b3RhbF9mdW5kc19kZXBvc2l0ZWQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAABXwUAAAAKY3VycmVudEtleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABp1c2VyX3RvdGFsX2Z1bmRzX2RlcG9zaXRlZAkAAGQAAAACBQAAAB9yZWFkX3VzZXJfdG90YWxfZnVuZHNfZGVwb3NpdGVkCAUAAAADcG10AAAABmFtb3VudAQAAAAWcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwkAAGUAAAACBQAAABRyZWFkX1NvZnRfQ2FwX0Ftb3VudAUAAAAWdG90YWxfZnVuZHNfY29sbGVjdGlvbgQAAAAWcGVuZGluZ19oYXJkY2FwX3N0YXR1cwkAAGUAAAACBQAAABRyZWFkX0hhcmRfQ2FwX0Ftb3VudAUAAAAWdG90YWxfZnVuZHNfY29sbGVjdGlvbgMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQUAAAAJcHltdGVycm9yAwkAAGYAAAACBQAAABZyZWFkX3JvdW5kX3Rva2VuX3ByaWNlCAUAAAADcG10AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA5vcmRlcnB5bXRlcnJvcgIAAAABWwkAAaQAAAABBQAAABZyZWFkX3JvdW5kX3Rva2VuX3ByaWNlAgAAAAcvMTBeOC5dAwkAAGYAAAACBQAAABNyZWFkX3JvdW5kX3N0YXJ0X3RzCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAIFAAAADGxhdW5jaF9lcnJvcgkAAaQAAAABBQAAABNyZWFkX3JvdW5kX3N0YXJ0X3RzAwkAAGYAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAARcmVhZF9yb3VuZF9lbmRfdHMJAAACAAAAAQUAAAAPcHJlc2FsZV9lbmRfZXJyAwMJAABmAAAAAgUAAAAWcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwAAAAAAAAAAAAkAAGYAAAACBQAAABZwZW5kaW5nX2hhcmRjYXBfc3RhdHVzAAAAAAAAAAAABwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAEV9GdW5kc19Db2xsZWN0aW9uBQAAABZ0b3RhbF9mdW5kc19jb2xsZWN0aW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAAFfBQAAAApjdXJyZW50S2V5BQAAABp1c2VyX3RvdGFsX2Z1bmRzX2RlcG9zaXRlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAC190b3RhbF90eG5zBQAAAAp0b3RhbF90eG5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAAXX3BlbmRpbmdfc29mdGNhcF9zdGF0dXMFAAAAFnBlbmRpbmdfc29mdGNhcF9zdGF0dXMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABdfcGVuZGluZ19oYXJkY2FwX3N0YXR1cwUAAAAWcGVuZGluZ19oYXJkY2FwX3N0YXR1cwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAAPX3NvZnRjYXBfc3RhdHVzAgAAAAJObwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAAPX2hhcmRjYXBfc3RhdHVzAgAAAAJObwkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAADV9BbGxvd19SZWZ1bmQFAAAAEXJlYWRfQWxsb3dfUmVmdW5kCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAB21lc3NhZ2UFAAAACG9yZGVybXNnBQAAAANuaWwDAwkAAGcAAAACAAAAAAAAAAAABQAAABZwZW5kaW5nX3NvZnRjYXBfc3RhdHVzCQAAZgAAAAIFAAAAFnBlbmRpbmdfaGFyZGNhcF9zdGF0dXMAAAAAAAAAAAAHCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAARX0Z1bmRzX0NvbGxlY3Rpb24FAAAAFnRvdGFsX2Z1bmRzX2NvbGxlY3Rpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAAV8FAAAACmN1cnJlbnRLZXkFAAAAGnVzZXJfdG90YWxfZnVuZHNfZGVwb3NpdGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAALX3RvdGFsX3R4bnMFAAAACnRvdGFsX3R4bnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABdfcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwUAAAAWcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAF19wZW5kaW5nX2hhcmRjYXBfc3RhdHVzBQAAABZwZW5kaW5nX2hhcmRjYXBfc3RhdHVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAA9fc29mdGNhcF9zdGF0dXMCAAAAA1llcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAAPX2hhcmRjYXBfc3RhdHVzAgAAAAJObwkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAADV9BbGxvd19SZWZ1bmQHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAAB21lc3NhZ2UFAAAACG9yZGVybXNnBQAAAANuaWwDAwkAAGcAAAACAAAAAAAAAAAABQAAABZwZW5kaW5nX3NvZnRjYXBfc3RhdHVzCQAAZwAAAAIAAAAAAAAAAAAFAAAAFnBlbmRpbmdfaGFyZGNhcF9zdGF0dXMHCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAARX0Z1bmRzX0NvbGxlY3Rpb24FAAAAFnRvdGFsX2Z1bmRzX2NvbGxlY3Rpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAAV8FAAAACmN1cnJlbnRLZXkFAAAAGnVzZXJfdG90YWxfZnVuZHNfZGVwb3NpdGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAALX3RvdGFsX3R4bnMFAAAACnRvdGFsX3R4bnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAABdfcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwUAAAAWcGVuZGluZ19zb2Z0Y2FwX3N0YXR1cwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAE0VudGVyX1ByZXNhbGVfUm91bmQCAAAAF19wZW5kaW5nX2hhcmRjYXBfc3RhdHVzBQAAABZwZW5kaW5nX2hhcmRjYXBfc3RhdHVzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAA9fc29mdGNhcF9zdGF0dXMCAAAAA1llcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAGkAAAAAQUAAAATRW50ZXJfUHJlc2FsZV9Sb3VuZAIAAAAPX2hhcmRjYXBfc3RhdHVzAgAAAANZZXMJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABNFbnRlcl9QcmVzYWxlX1JvdW5kAgAAAA1fQWxsb3dfUmVmdW5kBwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAAdtZXNzYWdlBQAAAAhvcmRlcm1zZwUAAAADbmlsCQAAAgAAAAECAAAABkVycm9yLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V58Rok+Q==", "height": 2695613, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6uWedbKzQcVALPPWuzi2XNVCYoj2f7mFB9DiZ4nC32ud Next: 7Jibi6PwQYbnjLc22B49PiCURZnSwycn1DMETTcDQ7u5 Diff:
Old | New | Differences | |
---|---|---|---|
23 | 23 | ||
24 | 24 | let minbalerror = "Minimum 0.1 WAVES required on Your Address, Please hold min. 0.1 WAVES on your Address to place order." | |
25 | 25 | ||
26 | - | let | |
26 | + | let presale_end_err = "Pre-Sale is over for this Round." | |
27 | 27 | ||
28 | 28 | @Callable(i) | |
29 | 29 | func SetPreSaleParameters (Presale_Start_TimeStamp,Presale_End_TimeStamp,Token_Price,Soft_Cap_Amount,Hard_Cap_Amount,Allow_Refund) = { | |
95 | 95 | then throw((((orderpymterror + "[") + toString(read_round_token_price)) + "/10^8.]")) | |
96 | 96 | else if ((read_round_start_ts > lastBlock.timestamp)) | |
97 | 97 | then throw((launch_error + toString(read_round_start_ts))) | |
98 | - | else if (if ((pending_softcap_status > 0)) | |
99 | - | then (pending_hardcap_status > 0) | |
100 | - | else false) | |
101 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "No"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), read_Allow_Refund), StringEntry("message", ordermsg)] | |
102 | - | else if (if ((0 >= pending_softcap_status)) | |
98 | + | else if ((lastBlock.timestamp > read_round_end_ts)) | |
99 | + | then throw(presale_end_err) | |
100 | + | else if (if ((pending_softcap_status > 0)) | |
103 | 101 | then (pending_hardcap_status > 0) | |
104 | 102 | else false) | |
105 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), " | |
103 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "No"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), read_Allow_Refund), StringEntry("message", ordermsg)] | |
106 | 104 | else if (if ((0 >= pending_softcap_status)) | |
107 | - | then ( | |
105 | + | then (pending_hardcap_status > 0) | |
108 | 106 | else false) | |
109 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "Yes"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
110 | - | else throw("Error.") | |
107 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
108 | + | else if (if ((0 >= pending_softcap_status)) | |
109 | + | then (0 >= pending_hardcap_status) | |
110 | + | else false) | |
111 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "Yes"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
112 | + | else throw("Error.") | |
111 | 113 | } | |
112 | 114 | ||
113 | 115 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let presale_timestamp_controller_pubkey = base58'GKmJ6BchUgQfwKp4mp5eX8Y9xLioYRm6e1gDfFgdAcCr' | |
5 | 5 | ||
6 | 6 | let controller_address = addressFromPublicKey(presale_timestamp_controller_pubkey) | |
7 | 7 | ||
8 | 8 | let tserror = "End Timestamp can't be less than or equal to Start Timestamp" | |
9 | 9 | ||
10 | 10 | let priceerror = "Token Price can't be less than or Zero" | |
11 | 11 | ||
12 | 12 | let caperror = "Soft Cap Amount can't be more than Hard Cap Amount." | |
13 | 13 | ||
14 | 14 | let ordermsg = "<h1>Order Submitted Successfully!</h1><br>" | |
15 | 15 | ||
16 | 16 | let presale_init_msg = "<h1>PreSale Parameters Submitted Successfully!</h1><br>" | |
17 | 17 | ||
18 | 18 | let pymterror = "DApp Need WAVES Token as Attach payment[1]." | |
19 | 19 | ||
20 | 20 | let orderpymterror = "Attached payment[1] is less than token price " | |
21 | 21 | ||
22 | 22 | let launch_error = "Dapp will start Pre-Sale at Timestamp " | |
23 | 23 | ||
24 | 24 | let minbalerror = "Minimum 0.1 WAVES required on Your Address, Please hold min. 0.1 WAVES on your Address to place order." | |
25 | 25 | ||
26 | - | let | |
26 | + | let presale_end_err = "Pre-Sale is over for this Round." | |
27 | 27 | ||
28 | 28 | @Callable(i) | |
29 | 29 | func SetPreSaleParameters (Presale_Start_TimeStamp,Presale_End_TimeStamp,Token_Price,Soft_Cap_Amount,Hard_Cap_Amount,Allow_Refund) = { | |
30 | 30 | let StartTS = Presale_Start_TimeStamp | |
31 | 31 | let EndTS = Presale_End_TimeStamp | |
32 | 32 | let read_funding_round = match getInteger(this, "Current_Funding_Round") { | |
33 | 33 | case a: Int => | |
34 | 34 | a | |
35 | 35 | case _ => | |
36 | 36 | 0 | |
37 | 37 | } | |
38 | 38 | let current_round = (read_funding_round + 1) | |
39 | 39 | if ((i.caller != controller_address)) | |
40 | 40 | then throw((("This Address is not Authorized. Only " + toString(controller_address)) + " is Authorized Address to Sign it.")) | |
41 | 41 | else if ((size(toString(Presale_Start_TimeStamp)) != 13)) | |
42 | 42 | then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.") | |
43 | 43 | else if ((size(toString(Presale_End_TimeStamp)) != 13)) | |
44 | 44 | then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.") | |
45 | 45 | else if ((1 > Token_Price)) | |
46 | 46 | then throw(priceerror) | |
47 | 47 | else if ((StartTS >= EndTS)) | |
48 | 48 | then throw(tserror) | |
49 | 49 | else if ((Soft_Cap_Amount > Hard_Cap_Amount)) | |
50 | 50 | then throw(caperror) | |
51 | 51 | else [IntegerEntry("Current_Funding_Round", current_round), IntegerEntry((toString(current_round) + "_Presale_Start_TimeStamp"), StartTS), IntegerEntry((toString(current_round) + "_Presale_End_TimeStamp"), EndTS), IntegerEntry((toString(current_round) + "_Token_Price"), Token_Price), IntegerEntry((toString(current_round) + "_Soft_Cap_Amount"), Soft_Cap_Amount), IntegerEntry((toString(current_round) + "_Hard_Cap_Amount"), Hard_Cap_Amount), IntegerEntry((toString(current_round) + "_Initiated_Height"), height), BooleanEntry((toString(current_round) + "_Allow_Refund"), Allow_Refund), StringEntry("message", presale_init_msg)] | |
52 | 52 | } | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | ||
56 | 56 | @Callable(i) | |
57 | 57 | func PlacePresaleOrder (Enter_Presale_Round) = { | |
58 | 58 | let read_round_token_price = valueOrErrorMessage(getInteger(this, (toString(Enter_Presale_Round) + "_Token_Price")), "Token Price not Found for this Presale Round.") | |
59 | 59 | let read_round_start_ts = valueOrErrorMessage(getInteger(this, (toString(Enter_Presale_Round) + "_Presale_Start_TimeStamp")), "Start Timestamp not Found for this Presale Round.") | |
60 | 60 | let read_round_end_ts = valueOrErrorMessage(getInteger(this, (toString(Enter_Presale_Round) + "_Presale_End_TimeStamp")), "End Timestamp not Found for this Presale Round.") | |
61 | 61 | let read_Soft_Cap_Amount = valueOrErrorMessage(getInteger(this, (toString(Enter_Presale_Round) + "_Soft_Cap_Amount")), "Soft Cap Amount not Found for this Presale Round.") | |
62 | 62 | let read_Hard_Cap_Amount = valueOrErrorMessage(getInteger(this, (toString(Enter_Presale_Round) + "_Hard_Cap_Amount")), "Hard Cap Amount not Found for this Presale Round.") | |
63 | 63 | let read_Allow_Refund = valueOrErrorMessage(getBoolean(this, (toString(Enter_Presale_Round) + "_Allow_Refund")), "Refund is not set for this Presale Round.") | |
64 | 64 | let WAVES = unit | |
65 | 65 | let currentKey = toBase58String(i.caller.bytes) | |
66 | 66 | let pmt = if ((size(i.payments) == 1)) | |
67 | 67 | then i.payments[0] | |
68 | 68 | else throw(pymterror) | |
69 | 69 | let read_funds_collection = match getInteger(this, (toString(Enter_Presale_Round) + "_Funds_Collection")) { | |
70 | 70 | case a: Int => | |
71 | 71 | a | |
72 | 72 | case _ => | |
73 | 73 | 0 | |
74 | 74 | } | |
75 | 75 | let total_funds_collection = (read_funds_collection + pmt.amount) | |
76 | 76 | let read_total_txns = match getInteger(this, (toString(Enter_Presale_Round) + "_total_txns")) { | |
77 | 77 | case a: Int => | |
78 | 78 | a | |
79 | 79 | case _ => | |
80 | 80 | 0 | |
81 | 81 | } | |
82 | 82 | let total_txns = (read_total_txns + 1) | |
83 | 83 | let read_user_total_funds_deposited = match getInteger(this, ((toString(Enter_Presale_Round) + "_") + currentKey)) { | |
84 | 84 | case a: Int => | |
85 | 85 | a | |
86 | 86 | case _ => | |
87 | 87 | 0 | |
88 | 88 | } | |
89 | 89 | let user_total_funds_deposited = (read_user_total_funds_deposited + pmt.amount) | |
90 | 90 | let pending_softcap_status = (read_Soft_Cap_Amount - total_funds_collection) | |
91 | 91 | let pending_hardcap_status = (read_Hard_Cap_Amount - total_funds_collection) | |
92 | 92 | if (isDefined(pmt.assetId)) | |
93 | 93 | then throw(pymterror) | |
94 | 94 | else if ((read_round_token_price > pmt.amount)) | |
95 | 95 | then throw((((orderpymterror + "[") + toString(read_round_token_price)) + "/10^8.]")) | |
96 | 96 | else if ((read_round_start_ts > lastBlock.timestamp)) | |
97 | 97 | then throw((launch_error + toString(read_round_start_ts))) | |
98 | - | else if (if ((pending_softcap_status > 0)) | |
99 | - | then (pending_hardcap_status > 0) | |
100 | - | else false) | |
101 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "No"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), read_Allow_Refund), StringEntry("message", ordermsg)] | |
102 | - | else if (if ((0 >= pending_softcap_status)) | |
98 | + | else if ((lastBlock.timestamp > read_round_end_ts)) | |
99 | + | then throw(presale_end_err) | |
100 | + | else if (if ((pending_softcap_status > 0)) | |
103 | 101 | then (pending_hardcap_status > 0) | |
104 | 102 | else false) | |
105 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), " | |
103 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "No"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), read_Allow_Refund), StringEntry("message", ordermsg)] | |
106 | 104 | else if (if ((0 >= pending_softcap_status)) | |
107 | - | then ( | |
105 | + | then (pending_hardcap_status > 0) | |
108 | 106 | else false) | |
109 | - | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "Yes"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
110 | - | else throw("Error.") | |
107 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "No"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
108 | + | else if (if ((0 >= pending_softcap_status)) | |
109 | + | then (0 >= pending_hardcap_status) | |
110 | + | else false) | |
111 | + | then [IntegerEntry((toString(Enter_Presale_Round) + "_Funds_Collection"), total_funds_collection), IntegerEntry(((toString(Enter_Presale_Round) + "_") + currentKey), user_total_funds_deposited), IntegerEntry((toString(Enter_Presale_Round) + "_total_txns"), total_txns), IntegerEntry((toString(Enter_Presale_Round) + "_pending_softcap_status"), pending_softcap_status), IntegerEntry((toString(Enter_Presale_Round) + "_pending_hardcap_status"), pending_hardcap_status), StringEntry((toString(Enter_Presale_Round) + "_softcap_status"), "Yes"), StringEntry((toString(Enter_Presale_Round) + "_hardcap_status"), "Yes"), BooleanEntry((toString(Enter_Presale_Round) + "_Allow_Refund"), false), StringEntry("message", ordermsg)] | |
112 | + | else throw("Error.") | |
111 | 113 | } | |
112 | 114 | ||
113 | 115 | ||
114 | 116 | @Verifier(tx) | |
115 | 117 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
116 | 118 |
github/deemru/w8io/026f985 41.33 ms ◑