tx · 95Qmh2UMcxgtRYrLNxj1Hhv9eJE4krhpttBxDFRi5SiR

3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h:  -0.05000000 Waves

2023.03.29 10:12 [2510917] smart account 3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h > SELF 0.00000000 Waves

{ "type": 13, "id": "95Qmh2UMcxgtRYrLNxj1Hhv9eJE4krhpttBxDFRi5SiR", "fee": 5000000, "feeAssetId": null, "timestamp": 1680074003694, "version": 2, "chainId": 84, "sender": "3NCWFHDzdPHZC6636ZkMLNDup9mjpbTLs7h", "senderPublicKey": "3z8Q6Zu3KppVmn6fJJvrLc1Wo3krVHSvfaNcerm82md2", "proofs": [ "3XgS9TubgTJHZ3Zcyj8KHMDeEHyoobyc3A8wMN3NE361rBszHtrPVTRverHXdT1gsGr7ataWBsKyQDJXBng6NHK3" ], "script": "base64:BgIJCAISAwoBARIAEgAMY29udHJhY3RGaWxlAglyZWJhbGFuY2UAD2tleXNUYXJnZXRSYXRpbwIPJXNfX3RhcmdldFJhdGlvABRrZXlBZGRpdGlvbmFsQmFsYW5jZQIaJXNfX2FkZGl0aW9uYWxXYXZlc0JhbGFuY2UAGmtleVNXYXZlc0FkZGl0aW9uYWxCYWxhbmNlAhElc19fc1dhdmVzQmFsYW5jZQAQa2V5U1dhdmVzQXNzZXRJZAIRJXNfX3NXYXZlc0Fzc2V0SWQAD2tleVByb3h5QWRkcmVzcwIQJXNfX3Byb3h5QWRkcmVzcwANa2V5TWluQmFsYW5jZQITJXNfX21pbldhdmVzQmFsYW5jZQAGTVVMVDEyAICglKWNHQEQZ2V0SW50ZWdlck9yWmVybwEKaW50ZWdlcktleQQHJG1hdGNoMAkAmggCBQR0aGlzBQppbnRlZ2VyS2V5AwkAAQIFByRtYXRjaDACA0ludAQDdmFsBQckbWF0Y2gwBQN2YWwAAAEQZ2V0U3RyaW5nT3JUaHJvdwEJc3RyaW5nS2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFCXN0cmluZ0tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBCQCsAgIJAKwCAgIBWwUJc3RyaW5nS2V5AgpdIGlzIGVtcHR5AQ5nZXRUYXJnZXRSYXRpbwAEByRtYXRjaDAJAJ8IAQUPa2V5c1RhcmdldFJhdGlvAwkAAQIFByRtYXRjaDACA0ludAQFcmF0aW8FByRtYXRjaDAJAJcDAQkAzAgCAGQJAMwIAgkAlgMBCQDMCAIAAAkAzAgCBQVyYXRpbwUDbmlsBQNuaWwAAAENZ2V0TWluQmFsYW5jZQAEByRtYXRjaDAJAJ8IAQUNa2V5TWluQmFsYW5jZQMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAJAJYDAQkAzAgCAAAJAMwIAgUBaQUDbmlsAAABB2dldFJhdGUABAVwcm94eQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEGdldFN0cmluZ09yVGhyb3cBBQ9rZXlQcm94eUFkZHJlc3MEA2ludgkA/AcEBQVwcm94eQIHZ2V0UmF0ZQUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEByRtYXRjaDAFA2ludgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJAQ1wYXJzZUludFZhbHVlAQUBcwkAAgECEFJhdGUgaXMgemVybyAoMCkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BD2dldFByb3h5QWRkcmVzcwAJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARBnZXRTdHJpbmdPclRocm93AQUPa2V5UHJveHlBZGRyZXNzAQtnZXRTV2F2ZXNJZAAJANkEAQkBEGdldFN0cmluZ09yVGhyb3cBBRBrZXlTV2F2ZXNBc3NldElkAQdkZXBvc2l0AQt3YXZlc0Ftb3VudAQFcHJveHkJAQ9nZXRQcm94eUFkZHJlc3MABBhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UJARBnZXRJbnRlZ2VyT3JaZXJvAQUUa2V5QWRkaXRpb25hbEJhbGFuY2UDCQAAAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UEFGN1cnJlbnRTV2F2ZXNCYWxhbmNlCQEQZ2V0SW50ZWdlck9yWmVybwEFGmtleVNXYXZlc0FkZGl0aW9uYWxCYWxhbmNlAwkAAAIFFGN1cnJlbnRTV2F2ZXNCYWxhbmNlBRRjdXJyZW50U1dhdmVzQmFsYW5jZQMJAGYCBQt3YXZlc0Ftb3VudAAABA1kZXBvc2l0SW52b2tlCQD8BwQFBXByb3h5AgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC3dhdmVzQW1vdW50BQNuaWwDCQAAAgUNZGVwb3NpdEludm9rZQUNZGVwb3NpdEludm9rZQQHJG1hdGNoMAUNZGVwb3NpdEludm9rZQMJAAECBQckbWF0Y2gwAgNJbnQEDnJlY2VpdmVkU1dhdmVzBQckbWF0Y2gwBBRuZXdBZGRpdGlvbmFsQmFsYW5jZQkAZAIFGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZQULd2F2ZXNBbW91bnQEEG5ld1NXYXZlc0JhbGFuY2UJAGQCBRRjdXJyZW50U1dhdmVzQmFsYW5jZQUOcmVjZWl2ZWRTV2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtleUFkZGl0aW9uYWxCYWxhbmNlBRRuZXdBZGRpdGlvbmFsQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUaa2V5U1dhdmVzQWRkaXRpb25hbEJhbGFuY2UFEG5ld1NXYXZlc0JhbGFuY2UFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCHdpdGhkcmF3AQt3YXZlc0Ftb3VudAQFcHJveHkJAQ9nZXRQcm94eUFkZHJlc3MABBhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UJARBnZXRJbnRlZ2VyT3JaZXJvAQUUa2V5QWRkaXRpb25hbEJhbGFuY2UDCQAAAgUYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UEFGN1cnJlbnRTV2F2ZXNCYWxhbmNlCQEQZ2V0SW50ZWdlck9yWmVybwEFGmtleVNXYXZlc0FkZGl0aW9uYWxCYWxhbmNlAwkAAAIFFGN1cnJlbnRTV2F2ZXNCYWxhbmNlBRRjdXJyZW50U1dhdmVzQmFsYW5jZQQQY3VycmVudFByb3h5UmF0ZQkBB2dldFJhdGUAAwkAAAIFEGN1cnJlbnRQcm94eVJhdGUFEGN1cnJlbnRQcm94eVJhdGUEEHNlbmRTV2F2ZXNBbW91bnQJAGsDBQZNVUxUMTIFC3dhdmVzQW1vdW50BRBjdXJyZW50UHJveHlSYXRlAwkAZgIFEHNlbmRTV2F2ZXNBbW91bnQAAAQOd2l0aGRyYXdJbnZva2UJAPwHBAUFcHJveHkCCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQtnZXRTV2F2ZXNJZAAFEHNlbmRTV2F2ZXNBbW91bnQFA25pbAMJAAACBQ53aXRoZHJhd0ludm9rZQUOd2l0aGRyYXdJbnZva2UEByRtYXRjaDAFDndpdGhkcmF3SW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQNcmVjZWl2ZWRXYXZlcwUHJG1hdGNoMAQUbmV3QWRkaXRpb25hbEJhbGFuY2UJAGUCBRhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UFDXJlY2VpdmVkV2F2ZXMEEG5ld1NXYXZlc0JhbGFuY2UJAGUCBRRjdXJyZW50U1dhdmVzQmFsYW5jZQUQc2VuZFNXYXZlc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5QWRkaXRpb25hbEJhbGFuY2UFFG5ld0FkZGl0aW9uYWxCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRprZXlTV2F2ZXNBZGRpdGlvbmFsQmFsYW5jZQUQbmV3U1dhdmVzQmFsYW5jZQUDbmlsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERcmViYWxhbmNlSW50ZXJuYWwBC3RhcmdldFJhdGlvBA5yZWd1bGFyQmFsYW5jZQkAlgMBCQDMCAIAAAkAzAgCCQBlAggJAO8HAQUEdGhpcwdyZWd1bGFyCQENZ2V0TWluQmFsYW5jZQAFA25pbAMJAAACBQ5yZWd1bGFyQmFsYW5jZQUOcmVndWxhckJhbGFuY2UEEWFkZGl0aW9uYWxCYWxhbmNlCQEQZ2V0SW50ZWdlck9yWmVybwEFFGtleUFkZGl0aW9uYWxCYWxhbmNlAwkAAAIFEWFkZGl0aW9uYWxCYWxhbmNlBRFhZGRpdGlvbmFsQmFsYW5jZQQMd2hvbGVCYWxhbmNlCQBkAgUOcmVndWxhckJhbGFuY2UFEWFkZGl0aW9uYWxCYWxhbmNlBBd0YXJnZXRBZGRpdGlvbmFsQmFsYW5jZQkAawMFC3RhcmdldFJhdGlvBQx3aG9sZUJhbGFuY2UAZAQEZGlmZgkAZQIFEWFkZGl0aW9uYWxCYWxhbmNlBRd0YXJnZXRBZGRpdGlvbmFsQmFsYW5jZQMJAAACBQRkaWZmAAAFA25pbAMJAGYCAAAFBGRpZmYED3NlbmRXYXZlc0Ftb3VudAkBAS0BBQRkaWZmCQEHZGVwb3NpdAEFD3NlbmRXYXZlc0Ftb3VudAQOZ2V0V2F2ZXNBbW91bnQFBGRpZmYJAQh3aXRoZHJhdwEFDmdldFdhdmVzQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAgFpAQ5yZWJhbGFuY2VSYXRpbwELdGFyZ2V0UmF0aW8JARFyZWJhbGFuY2VJbnRlcm5hbAEFC3RhcmdldFJhdGlvAWkBCXJlYmFsYW5jZQAJARFyZWJhbGFuY2VJbnRlcm5hbAEJAQ5nZXRUYXJnZXRSYXRpbwAA712fTQ==", "height": 2510917, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Hce4aPAvmT9eMwmJomxYJuuLHT6io955KnNVFzDv8tB Next: 9B5o6xrQxZesRAhzUguYrZiAsQDiEBE8rwd8j9ahfLaN Diff:
OldNewDifferences
4646 let q = k
4747 min([100, max([0, q])])
4848 }
49- else 80
49+ else 0
5050 }
5151
5252
7272 let o = k
7373 parseIntValue(o)
7474 }
75- else throw("ZERO rate")
75+ else throw("Rate is zero (0)")
7676 }
7777 else throw("Strict value is not equal to itself.")
7878 }
7979
8080
81-func w (x) = {
82- let u = addressFromStringValue(m(f))
83- let y = i(c)
84- if ((y == y))
81+func w () = addressFromStringValue(m(f))
82+
83+
84+func x () = fromBase58String(m(e))
85+
86+
87+func y (z) = {
88+ let u = w()
89+ let A = i(c)
90+ if ((A == A))
8591 then {
86- let z = i(d)
87- if ((z == z))
88- then if ((x > 0))
92+ let B = i(d)
93+ if ((B == B))
94+ then if ((z > 0))
8995 then {
90- let A = invoke(u, "deposit", nil, [AttachedPayment(unit, x)])
91- if ((A == A))
96+ let C = invoke(u, "deposit", nil, [AttachedPayment(unit, z)])
97+ if ((C == C))
9298 then {
93- let k = A
99+ let k = C
94100 if ($isInstanceOf(k, "Int"))
95101 then {
96- let B = k
97- let C = (y + x)
98- let D = (z + B)
99-[IntegerEntry(c, C), IntegerEntry(d, D)]
102+ let D = k
103+ let E = (A + z)
104+ let F = (B + D)
105+[IntegerEntry(c, E), IntegerEntry(d, F)]
100106 }
101107 else nil
102108 }
109115 }
110116
111117
112-func E (x) = {
113- let u = addressFromStringValue(m(f))
114- let F = fromBase58String(m(e))
115- if ((F == F))
118+func G (z) = {
119+ let u = w()
120+ let A = i(c)
121+ if ((A == A))
116122 then {
117- let y = i(c)
118- if ((y == y))
123+ let B = i(d)
124+ if ((B == B))
119125 then {
120- let z = i(d)
121- if ((z == z))
126+ let H = t()
127+ if ((H == H))
122128 then {
123- let G = t()
124- if ((G == G))
129+ let I = fraction(h, z, H)
130+ if ((I > 0))
125131 then {
126- let H = fraction(h, x, G)
127- if ((H > 0))
132+ let J = invoke(u, "withdraw", nil, [AttachedPayment(x(), I)])
133+ if ((J == J))
128134 then {
129- let A = invoke(u, "withdraw", nil, [AttachedPayment(F, H)])
130- if ((A == A))
135+ let k = J
136+ if ($isInstanceOf(k, "Int"))
131137 then {
132- let k = A
133- if ($isInstanceOf(k, "Int"))
134- then {
135- let I = k
136- let C = (y - I)
137- let D = (z - H)
138-[IntegerEntry(c, C), IntegerEntry(d, D)]
139- }
140- else nil
138+ let K = k
139+ let E = (A - K)
140+ let F = (B - I)
141+[IntegerEntry(c, E), IntegerEntry(d, F)]
141142 }
142- else throw("Strict value is not equal to itself.")
143+ else nil
143144 }
144- else nil
145+ else throw("Strict value is not equal to itself.")
145146 }
146- else throw("Strict value is not equal to itself.")
147+ else nil
147148 }
148149 else throw("Strict value is not equal to itself.")
149150 }
153154 }
154155
155156
156-@Callable(s)
157-func rebalanceRatio (J) = {
158- let K = max([0, (wavesBalance(this).regular - r())])
159- if ((K == K))
157+func L (M) = {
158+ let N = max([0, (wavesBalance(this).regular - r())])
159+ if ((N == N))
160160 then {
161- let L = i(c)
162- if ((L == L))
161+ let O = i(c)
162+ if ((O == O))
163163 then {
164- let M = (K + L)
165- let N = fraction(J, M, 100)
166- let O = (L - N)
167- if ((O == 0))
164+ let P = (N + O)
165+ let Q = fraction(M, P, 100)
166+ let R = (O - Q)
167+ if ((R == 0))
168168 then nil
169- else if ((0 > O))
169+ else if ((0 > R))
170170 then {
171- let P = (O * -1)
172- w(P)
171+ let S = -(R)
172+ y(S)
173173 }
174174 else {
175- let Q = O
176- E(Q)
175+ let T = R
176+ G(T)
177177 }
178178 }
179179 else throw("Strict value is not equal to itself.")
182182 }
183183
184184
185+@Callable(s)
186+func rebalanceRatio (M) = L(M)
187+
188+
189+
190+@Callable(s)
191+func rebalance () = L(p())
192+
193+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "rebalance"
55
66 let b = "%s__targetRatio"
77
88 let c = "%s__additionalWavesBalance"
99
1010 let d = "%s__sWavesBalance"
1111
1212 let e = "%s__sWavesAssetId"
1313
1414 let f = "%s__proxyAddress"
1515
1616 let g = "%s__minWavesBalance"
1717
1818 let h = 1000000000000
1919
2020 func i (j) = {
2121 let k = getInteger(this, j)
2222 if ($isInstanceOf(k, "Int"))
2323 then {
2424 let l = k
2525 l
2626 }
2727 else 0
2828 }
2929
3030
3131 func m (n) = {
3232 let k = getString(this, n)
3333 if ($isInstanceOf(k, "String"))
3434 then {
3535 let o = k
3636 o
3737 }
3838 else throw((("[" + n) + "] is empty"))
3939 }
4040
4141
4242 func p () = {
4343 let k = getInteger(b)
4444 if ($isInstanceOf(k, "Int"))
4545 then {
4646 let q = k
4747 min([100, max([0, q])])
4848 }
49- else 80
49+ else 0
5050 }
5151
5252
5353 func r () = {
5454 let k = getInteger(g)
5555 if ($isInstanceOf(k, "Int"))
5656 then {
5757 let s = k
5858 max([0, s])
5959 }
6060 else 0
6161 }
6262
6363
6464 func t () = {
6565 let u = addressFromStringValue(m(f))
6666 let v = invoke(u, "getRate", nil, nil)
6767 if ((v == v))
6868 then {
6969 let k = v
7070 if ($isInstanceOf(k, "String"))
7171 then {
7272 let o = k
7373 parseIntValue(o)
7474 }
75- else throw("ZERO rate")
75+ else throw("Rate is zero (0)")
7676 }
7777 else throw("Strict value is not equal to itself.")
7878 }
7979
8080
81-func w (x) = {
82- let u = addressFromStringValue(m(f))
83- let y = i(c)
84- if ((y == y))
81+func w () = addressFromStringValue(m(f))
82+
83+
84+func x () = fromBase58String(m(e))
85+
86+
87+func y (z) = {
88+ let u = w()
89+ let A = i(c)
90+ if ((A == A))
8591 then {
86- let z = i(d)
87- if ((z == z))
88- then if ((x > 0))
92+ let B = i(d)
93+ if ((B == B))
94+ then if ((z > 0))
8995 then {
90- let A = invoke(u, "deposit", nil, [AttachedPayment(unit, x)])
91- if ((A == A))
96+ let C = invoke(u, "deposit", nil, [AttachedPayment(unit, z)])
97+ if ((C == C))
9298 then {
93- let k = A
99+ let k = C
94100 if ($isInstanceOf(k, "Int"))
95101 then {
96- let B = k
97- let C = (y + x)
98- let D = (z + B)
99-[IntegerEntry(c, C), IntegerEntry(d, D)]
102+ let D = k
103+ let E = (A + z)
104+ let F = (B + D)
105+[IntegerEntry(c, E), IntegerEntry(d, F)]
100106 }
101107 else nil
102108 }
103109 else throw("Strict value is not equal to itself.")
104110 }
105111 else nil
106112 else throw("Strict value is not equal to itself.")
107113 }
108114 else throw("Strict value is not equal to itself.")
109115 }
110116
111117
112-func E (x) = {
113- let u = addressFromStringValue(m(f))
114- let F = fromBase58String(m(e))
115- if ((F == F))
118+func G (z) = {
119+ let u = w()
120+ let A = i(c)
121+ if ((A == A))
116122 then {
117- let y = i(c)
118- if ((y == y))
123+ let B = i(d)
124+ if ((B == B))
119125 then {
120- let z = i(d)
121- if ((z == z))
126+ let H = t()
127+ if ((H == H))
122128 then {
123- let G = t()
124- if ((G == G))
129+ let I = fraction(h, z, H)
130+ if ((I > 0))
125131 then {
126- let H = fraction(h, x, G)
127- if ((H > 0))
132+ let J = invoke(u, "withdraw", nil, [AttachedPayment(x(), I)])
133+ if ((J == J))
128134 then {
129- let A = invoke(u, "withdraw", nil, [AttachedPayment(F, H)])
130- if ((A == A))
135+ let k = J
136+ if ($isInstanceOf(k, "Int"))
131137 then {
132- let k = A
133- if ($isInstanceOf(k, "Int"))
134- then {
135- let I = k
136- let C = (y - I)
137- let D = (z - H)
138-[IntegerEntry(c, C), IntegerEntry(d, D)]
139- }
140- else nil
138+ let K = k
139+ let E = (A - K)
140+ let F = (B - I)
141+[IntegerEntry(c, E), IntegerEntry(d, F)]
141142 }
142- else throw("Strict value is not equal to itself.")
143+ else nil
143144 }
144- else nil
145+ else throw("Strict value is not equal to itself.")
145146 }
146- else throw("Strict value is not equal to itself.")
147+ else nil
147148 }
148149 else throw("Strict value is not equal to itself.")
149150 }
150151 else throw("Strict value is not equal to itself.")
151152 }
152153 else throw("Strict value is not equal to itself.")
153154 }
154155
155156
156-@Callable(s)
157-func rebalanceRatio (J) = {
158- let K = max([0, (wavesBalance(this).regular - r())])
159- if ((K == K))
157+func L (M) = {
158+ let N = max([0, (wavesBalance(this).regular - r())])
159+ if ((N == N))
160160 then {
161- let L = i(c)
162- if ((L == L))
161+ let O = i(c)
162+ if ((O == O))
163163 then {
164- let M = (K + L)
165- let N = fraction(J, M, 100)
166- let O = (L - N)
167- if ((O == 0))
164+ let P = (N + O)
165+ let Q = fraction(M, P, 100)
166+ let R = (O - Q)
167+ if ((R == 0))
168168 then nil
169- else if ((0 > O))
169+ else if ((0 > R))
170170 then {
171- let P = (O * -1)
172- w(P)
171+ let S = -(R)
172+ y(S)
173173 }
174174 else {
175- let Q = O
176- E(Q)
175+ let T = R
176+ G(T)
177177 }
178178 }
179179 else throw("Strict value is not equal to itself.")
180180 }
181181 else throw("Strict value is not equal to itself.")
182182 }
183183
184184
185+@Callable(s)
186+func rebalanceRatio (M) = L(M)
187+
188+
189+
190+@Callable(s)
191+func rebalance () = L(p())
192+
193+

github/deemru/w8io/169f3d6 
52.41 ms