tx · DnDqbQmvr2vAMYSyGzb6STzYwVk6hTd6FtobZxZy3FS5

3N86AryjXNvAuNs3mV9xKPTjXnAYQimiHDF:  -0.01000000 Waves

2023.09.18 17:11 [2760931] smart account 3N86AryjXNvAuNs3mV9xKPTjXnAYQimiHDF > SELF 0.00000000 Waves

{ "type": 13, "id": "DnDqbQmvr2vAMYSyGzb6STzYwVk6hTd6FtobZxZy3FS5", "fee": 1000000, "feeAssetId": null, "timestamp": 1695046321531, "version": 2, "chainId": 84, "sender": "3N86AryjXNvAuNs3mV9xKPTjXnAYQimiHDF", "senderPublicKey": "7Zo8C4qkZishvcPg5SUixQPySKeM49Jeui21Tih7iPr9", "proofs": [ "5JwrFfrGoyBStpG7xLvhik5fwTLw9mzNkK4fir1pYAnaGyasuRbrWQbUaATMQ3ZkwQ7RQWRGHkyHCSW5vZ4fJpuu" ], "script": "base64:BgIbCAISABIDCgEBEgQKAgICEgQKAggIEgQKAgEEGAADU0VQAgJfXwAPcmVwdXRhdGlvbkFzc2V0ASBp6x+DcpBVAG0dTZ5QIAuA7CaS8wuiEOK6KQOBSERbTgAMcHJvcG9zYWxUaW1lCQBoAgkAaAIJAGgCCQBoAgDoBwA8ADwAGAADAQtwcm9wb3NhbEtleQECaWQJALkJAgkAzAgCAgFwCQDMCAIJAKQDAQUCaWQFA25pbAUDU0VQAQtzZXRQcm9wb3NhbAcCaWQHY3JlYXRvcgV0aXRsZQR0ZXh0EXRpbWVzdGFtcENyZWF0aW9uDWNvdW50Vm90ZXNGb3IRQ291bnRWb3Rlc0FnYWluc3QJAQtTdHJpbmdFbnRyeQIJAQtwcm9wb3NhbEtleQEFAmlkCQC7CQIJAMwIAgkA3AQBCAUHY3JlYXRvcgVieXRlcwkAzAgCBQV0aXRsZQkAzAgCBQR0ZXh0CQDMCAIJAKQDAQURdGltZXN0YW1wQ3JlYXRpb24JAMwIAgkApAMBBQ1jb3VudFZvdGVzRm9yCQDMCAIJAKQDAQURQ291bnRWb3Rlc0FnYWluc3QFA25pbAUDU0VQAQtnZXRQcm9wb3NhbAECaWQEC3NhdmVkU3RyaW5nCQC1CQIEByRtYXRjaDAJAJ0IAgUEdGhpcwkBC3Byb3Bvc2FsS2V5AQUCaWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIScHJvcG9zYWwgbm90IGZvdW5kBQNTRVAJAJgKBgkA3QQBCQCRAwIFC3NhdmVkU3RyaW5nAAAJAJEDAgULc2F2ZWRTdHJpbmcAAQkAkQMCBQtzYXZlZFN0cmluZwACCQC2CQEJAJEDAgULc2F2ZWRTdHJpbmcAAwkAtgkBCQCRAwIFC3NhdmVkU3RyaW5nAAQJALYJAQkAkQMCBQtzYXZlZFN0cmluZwAFARJ1bmxvY2tUaW1lc3RhbXBLZXkBB2FkZHJlc3MJALkJAgkAzAgCAgJ1dAkAzAgCCQDYBAEFB2FkZHJlc3MFA25pbAUDU0VQARFjb3VudFByb3Bvc2Fsc0tleQACAmNwARBwcm9wb3NhbFRpdGxlS2V5AQJpZAkAuQkCCQDMCAICA3B0aQkAzAgCCQCkAwEFAmlkBQNuaWwFA1NFUAEPcHJvcG9zYWxUZXh0S2V5AQJpZAkAuQkCCQDMCAICA3B0ZQkAzAgCCQCkAwEFAmlkBQNuaWwFA1NFUAEccHJvcG9zYWxUaW1lc3RhbXBDcmVhdGlvbktleQECaWQJALkJAgkAzAgCAgNwdGMJAMwIAgkApAMBBQJpZAUDbmlsBQNTRVABGHByb3Bvc2FsQ291bnRWb3Rlc0ZvcktleQECaWQJALkJAgkAzAgCAgRwY3ZmCQDMCAIJAKQDAQUCaWQFA25pbAUDU0VQARxwcm9wb3NhbENvdW50Vm90ZXNBZ2FpbnN0S2V5AQJpZAkAuQkCCQDMCAICBHBjdmEJAMwIAgkApAMBBQJpZAUDbmlsBQNTRVABE3VzZXJQcm9wb3NhbFZvdGVLZXkCB2FkZHJlc3MCaWQJALkJAgkAzAgCAgN1cHYJAMwIAgkApAMBBQJpZAkAzAgCCQDYBAEFB2FkZHJlc3MFA25pbAUDU0VQARh1c2VyUHJvcG9zYWxWb3RlUG93ZXJLZXkCB2FkZHJlc3MCaWQJALkJAgkAzAgCAgR1cHZwCQDMCAIJAKQDAQUCaWQJAMwIAgkA2AQBBQdhZGRyZXNzBQNuaWwFA1NFUAEScG10UmVwdXRhdGlvbkFzc2V0AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFD3JlcHV0YXRpb25Bc3NldAYJAAIBAhZvbmx5IHJlcHV0YXRpb24gYXNzZXRzCQACAQIOb25seSAxIHBheW1lbnQBEmdldFVubG9ja1RpbWVzdGFtcAEHYWRkcmVzcwQHJG1hdGNoMAkAmggCBQR0aGlzCQESdW5sb2NrVGltZXN0YW1wS2V5AQUHYWRkcmVzcwMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEOY291bnRQcm9wb3NhbHMABAckbWF0Y2gwCQCaCAIFBHRoaXMJARFjb3VudFByb3Bvc2Fsc0tleQADCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABDWNvdW50Vm90ZXNGb3IBAmlkBAckbWF0Y2gwCQCaCAIFBHRoaXMJARhwcm9wb3NhbENvdW50Vm90ZXNGb3JLZXkBBQJpZAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAERY291bnRWb3Rlc0FnYWluc3QBAmlkBAckbWF0Y2gwCQCaCAIFBHRoaXMJARxwcm9wb3NhbENvdW50Vm90ZXNBZ2FpbnN0S2V5AQUCaWQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABDmNvdW50Vm90ZXNVc2VyAgdhZGRyZXNzAmlkBAckbWF0Y2gwCQCaCAIFBHRoaXMJARh1c2VyUHJvcG9zYWxWb3RlUG93ZXJLZXkCBQdhZGRyZXNzBQJpZAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAEWYmFsYW5jZVJlcHV0YXRpb25Bc3NldAEHYWRkcmVzcwQHJG1hdGNoMAkAmggCBQR0aGlzCQDYBAEFB2FkZHJlc3MDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAABGXByb3Bvc2FsVGltZXN0YW1wQ3JlYXRpb24BAmlkBAckbWF0Y2gwCQCaCAIFBHRoaXMJARxwcm9wb3NhbFRpbWVzdGFtcENyZWF0aW9uS2V5AQUCaWQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhCQACAQIUcHJvcG9zYWwgbm90IGNyZWF0ZWQBD2lzUHJvcG9zYWxBbGl2ZQECaWQDAwkAZgIJAQ5jb3VudFByb3Bvc2FscwAFAmlkCQBmAgkAZAIJARlwcm9wb3NhbFRpbWVzdGFtcENyZWF0aW9uAQUCaWQFDHByb3Bvc2FsVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXAHBgkAAgECEHByb3Bvc2FsTm90QWxpdmUFAWkBB2RlcG9zaXQABAZjaGVja3MJAMwIAgkBEnBtdFJlcHV0YXRpb25Bc3NldAEFAWkFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50CQEWYmFsYW5jZVJlcHV0YXRpb25Bc3NldAEICAUBaQZjYWxsZXIFYnl0ZXMECW5ld0Ftb3VudAkAZAIFDWN1cnJlbnRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpjdXJyZW50S2V5BQluZXdBbW91bnQFA25pbAkAAgECE29ubHlSZXB1dGF0aW9uQXNzZXQBaQEId2l0aGRyYXcBBmFtb3VudAQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFCmN1cnJlbnRLZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAECW5ld0Ftb3VudAkAZQIFDWN1cnJlbnRBbW91bnQFBmFtb3VudAMJAGYCAAAFBmFtb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCCQESZ2V0VW5sb2NrVGltZXN0YW1wAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAAIBAgZMb2NrZWQDCQBmAgAABQluZXdBbW91bnQJAAIBAhJOb3QgZW5vdWdoIGJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCmN1cnJlbnRLZXkFCW5ld0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAUPcmVwdXRhdGlvbkFzc2V0BQNuaWwBaQERY3JlYXRlUHJvcG9zYWxOZXcCBXRpdGxlBHRleHQEBWNvdW50CQEOY291bnRQcm9wb3NhbHMACQDMCAIJAQtzZXRQcm9wb3NhbAcFBWNvdW50CAUBaQZjYWxsZXIJANwEAQUFdGl0bGUJANwEAQUEdGV4dAgFCWxhc3RCbG9jawl0aW1lc3RhbXAAAAAABQNuaWwBaQEOY3JlYXRlUHJvcG9zYWwCBXRpdGxlBHRleHQEBWNvdW50CQEOY291bnRQcm9wb3NhbHMACQDMCAIJAQtTdHJpbmdFbnRyeQIJARBwcm9wb3NhbFRpdGxlS2V5AQUFY291bnQFBXRpdGxlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9wcm9wb3NhbFRleHRLZXkBBQVjb3VudAUEdGV4dAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHHByb3Bvc2FsVGltZXN0YW1wQ3JlYXRpb25LZXkBBQVjb3VudAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJARFjb3VudFByb3Bvc2Fsc0tleQAJAGQCBQVjb3VudAABBQNuaWwBaQEEdm90ZQICaWQEdm90ZQMJAQ9pc1Byb3Bvc2FsQWxpdmUBBQJpZAQKdW5sb2NrVGltZQkAlgMBCQDMCAIJAGQCCQEZcHJvcG9zYWxUaW1lc3RhbXBDcmVhdGlvbgEFAmlkBQxwcm9wb3NhbFRpbWUJAMwIAgkBEmdldFVubG9ja1RpbWVzdGFtcAEICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAQBdQQHJG1hdGNoMAkAmwgCBQR0aGlzCQETdXNlclByb3Bvc2FsVm90ZUtleQIICAUBaQZjYWxsZXIFYnl0ZXMFAmlkAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWEFByRtYXRjaDADBQFhCQEMSW50ZWdlckVudHJ5AgkBGHByb3Bvc2FsQ291bnRWb3Rlc0ZvcktleQEFAmlkCQBlAgkBDWNvdW50Vm90ZXNGb3IBBQJpZAkBDmNvdW50Vm90ZXNVc2VyAggIBQFpBmNhbGxlcgVieXRlcwUCaWQJAQxJbnRlZ2VyRW50cnkCCQEccHJvcG9zYWxDb3VudFZvdGVzQWdhaW5zdEtleQEFAmlkCQBlAgkBDWNvdW50Vm90ZXNGb3IBBQJpZAkBDmNvdW50Vm90ZXNVc2VyAggIBQFpBmNhbGxlcgVieXRlcwUCaWQFBHVuaXQDCQAAAgUEdm90ZQYJAMwIAgkBDEludGVnZXJFbnRyeQIJARhwcm9wb3NhbENvdW50Vm90ZXNGb3JLZXkBBQJpZAkAZAIJAQ1jb3VudFZvdGVzRm9yAQUCaWQJARZiYWxhbmNlUmVwdXRhdGlvbkFzc2V0AQgIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEnVubG9ja1RpbWVzdGFtcEtleQEICAUBaQZjYWxsZXIFYnl0ZXMFCnVubG9ja1RpbWUJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARN1c2VyUHJvcG9zYWxWb3RlS2V5AggIBQFpBmNhbGxlcgVieXRlcwUCaWQFBHZvdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJARh1c2VyUHJvcG9zYWxWb3RlUG93ZXJLZXkCCAgFAWkGY2FsbGVyBWJ5dGVzBQJpZAkBFmJhbGFuY2VSZXB1dGF0aW9uQXNzZXQBCAgFAWkGY2FsbGVyBWJ5dGVzBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJARxwcm9wb3NhbENvdW50Vm90ZXNBZ2FpbnN0S2V5AQUCaWQJAGQCCQERY291bnRWb3Rlc0FnYWluc3QBBQJpZAkBFmJhbGFuY2VSZXB1dGF0aW9uQXNzZXQBCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESdW5sb2NrVGltZXN0YW1wS2V5AQgIBQFpBmNhbGxlcgVieXRlcwUKdW5sb2NrVGltZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBE3VzZXJQcm9wb3NhbFZvdGVLZXkCCAgFAWkGY2FsbGVyBWJ5dGVzBQJpZAUEdm90ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGHVzZXJQcm9wb3NhbFZvdGVQb3dlcktleQIICAUBaQZjYWxsZXIFYnl0ZXMFAmlkCQEWYmFsYW5jZVJlcHV0YXRpb25Bc3NldAEICAUBaQZjYWxsZXIFYnl0ZXMFA25pbAkAAgECEHByb3Bvc2FsTm90QWxpdmUBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5Olhx1A==", "height": 2760931, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EKUehtgSnFhGt85ikXFZNBcZFG7v332sTWvg6Gs7BNrZ Next: 64e2puVpfDrwBNNJqpKT399YncThTazbBgdqWawMYaPJ Diff:
OldNewDifferences
1010 func d (e) = makeString(["p", toString(e)], a)
1111
1212
13-func f (e,g,h,i,j,k,l) = StringEntry(d(e), makeString([toBase16String(g.bytes), h, i, toString(j), toString(k), toString(l)], a))
13+func f (e,g,h,i,j,k,l) = StringEntry(d(e), makeString_11C([toBase16String(g.bytes), h, i, toString(j), toString(k), toString(l)], a))
1414
1515
1616 func m (e) = {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = base58'88Tkdpqchhiqc9tNNG3SWQ2gfhZB4rBJKhMNS5Xmxhqw'
77
88 let c = ((((1000 * 60) * 60) * 24) * 3)
99
1010 func d (e) = makeString(["p", toString(e)], a)
1111
1212
13-func f (e,g,h,i,j,k,l) = StringEntry(d(e), makeString([toBase16String(g.bytes), h, i, toString(j), toString(k), toString(l)], a))
13+func f (e,g,h,i,j,k,l) = StringEntry(d(e), makeString_11C([toBase16String(g.bytes), h, i, toString(j), toString(k), toString(l)], a))
1414
1515
1616 func m (e) = {
1717 let n = split({
1818 let o = getString(this, d(e))
1919 if ($isInstanceOf(o, "String"))
2020 then {
2121 let p = o
2222 p
2323 }
2424 else throw("proposal not found")
2525 }, a)
2626 $Tuple6(fromBase16String(n[0]), n[1], n[2], parseInt(n[3]), parseInt(n[4]), parseInt(n[5]))
2727 }
2828
2929
3030 func q (r) = makeString(["ut", toBase58String(r)], a)
3131
3232
3333 func s () = "cp"
3434
3535
3636 func t (e) = makeString(["pti", toString(e)], a)
3737
3838
3939 func u (e) = makeString(["pte", toString(e)], a)
4040
4141
4242 func v (e) = makeString(["ptc", toString(e)], a)
4343
4444
4545 func w (e) = makeString(["pcvf", toString(e)], a)
4646
4747
4848 func x (e) = makeString(["pcva", toString(e)], a)
4949
5050
5151 func y (r,e) = makeString(["upv", toString(e), toBase58String(r)], a)
5252
5353
5454 func z (r,e) = makeString(["upvp", toString(e), toBase58String(r)], a)
5555
5656
5757 func A (B) = if ((size(B.payments) == 1))
5858 then if ((B.payments[0].assetId == b))
5959 then true
6060 else throw("only reputation assets")
6161 else throw("only 1 payment")
6262
6363
6464 func C (r) = {
6565 let o = getInteger(this, q(r))
6666 if ($isInstanceOf(o, "Int"))
6767 then {
6868 let D = o
6969 D
7070 }
7171 else 0
7272 }
7373
7474
7575 func E () = {
7676 let o = getInteger(this, s())
7777 if ($isInstanceOf(o, "Int"))
7878 then {
7979 let D = o
8080 D
8181 }
8282 else 0
8383 }
8484
8585
8686 func k (e) = {
8787 let o = getInteger(this, w(e))
8888 if ($isInstanceOf(o, "Int"))
8989 then {
9090 let D = o
9191 D
9292 }
9393 else 0
9494 }
9595
9696
9797 func F (e) = {
9898 let o = getInteger(this, x(e))
9999 if ($isInstanceOf(o, "Int"))
100100 then {
101101 let D = o
102102 D
103103 }
104104 else 0
105105 }
106106
107107
108108 func G (r,e) = {
109109 let o = getInteger(this, z(r, e))
110110 if ($isInstanceOf(o, "Int"))
111111 then {
112112 let D = o
113113 D
114114 }
115115 else 0
116116 }
117117
118118
119119 func H (r) = {
120120 let o = getInteger(this, toBase58String(r))
121121 if ($isInstanceOf(o, "Int"))
122122 then {
123123 let D = o
124124 D
125125 }
126126 else 0
127127 }
128128
129129
130130 func I (e) = {
131131 let o = getInteger(this, v(e))
132132 if ($isInstanceOf(o, "Int"))
133133 then {
134134 let D = o
135135 D
136136 }
137137 else throw("proposal not created")
138138 }
139139
140140
141141 func J (e) = if (if ((E() > e))
142142 then ((I(e) + c) > lastBlock.timestamp)
143143 else false)
144144 then true
145145 else throw("proposalNotAlive")
146146
147147
148148 @Callable(B)
149149 func deposit () = {
150150 let K = [A(B)]
151151 if ((K == K))
152152 then {
153153 let L = toBase58String(B.caller.bytes)
154154 let M = H(B.caller.bytes)
155155 let N = (M + B.payments[0].amount)
156156 [IntegerEntry(L, N)]
157157 }
158158 else throw("onlyReputationAsset")
159159 }
160160
161161
162162
163163 @Callable(B)
164164 func withdraw (O) = {
165165 let L = toBase58String(B.caller.bytes)
166166 let M = {
167167 let o = getInteger(this, L)
168168 if ($isInstanceOf(o, "Int"))
169169 then {
170170 let D = o
171171 D
172172 }
173173 else 0
174174 }
175175 let N = (M - O)
176176 if ((0 > O))
177177 then throw("Can't withdraw negative amount")
178178 else if ((C(B.caller.bytes) > lastBlock.timestamp))
179179 then throw("Locked")
180180 else if ((0 > N))
181181 then throw("Not enough balance")
182182 else [IntegerEntry(L, N), ScriptTransfer(B.caller, O, b)]
183183 }
184184
185185
186186
187187 @Callable(B)
188188 func createProposalNew (h,i) = {
189189 let P = E()
190190 [f(P, B.caller, toBase16String(h), toBase16String(i), lastBlock.timestamp, 0, 0)]
191191 }
192192
193193
194194
195195 @Callable(B)
196196 func createProposal (h,i) = {
197197 let P = E()
198198 [StringEntry(t(P), h), StringEntry(u(P), i), IntegerEntry(v(P), lastBlock.timestamp), IntegerEntry(s(), (P + 1))]
199199 }
200200
201201
202202
203203 @Callable(B)
204204 func vote (e,Q) = if (J(e))
205205 then {
206206 let R = max([(I(e) + c), C(B.caller.bytes)])
207207 let S = {
208208 let o = getBoolean(this, y(B.caller.bytes, e))
209209 if ($isInstanceOf(o, "Boolean"))
210210 then {
211211 let D = o
212212 if (D)
213213 then IntegerEntry(w(e), (k(e) - G(B.caller.bytes, e)))
214214 else IntegerEntry(x(e), (k(e) - G(B.caller.bytes, e)))
215215 }
216216 else unit
217217 }
218218 if ((Q == true))
219219 then [IntegerEntry(w(e), (k(e) + H(B.caller.bytes))), IntegerEntry(q(B.caller.bytes), R), BooleanEntry(y(B.caller.bytes, e), Q), IntegerEntry(z(B.caller.bytes, e), H(B.caller.bytes))]
220220 else [IntegerEntry(x(e), (F(e) + H(B.caller.bytes))), IntegerEntry(q(B.caller.bytes), R), BooleanEntry(y(B.caller.bytes, e), Q), IntegerEntry(z(B.caller.bytes, e), H(B.caller.bytes))]
221221 }
222222 else throw("proposalNotAlive")
223223
224224
225225 @Verifier(T)
226226 func U () = sigVerify(T.bodyBytes, T.proofs[0], T.senderPublicKey)
227227

github/deemru/w8io/3ef1775 
46.36 ms