zkjson 0.6.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +537 -0
  2. package/assets/collection.png +0 -0
  3. package/assets/db.png +0 -0
  4. package/assets/encode.png +0 -0
  5. package/assets/query.png +0 -0
  6. package/assets/rollup.png +0 -0
  7. package/assets/structure.png +0 -0
  8. package/assets/weavedb.png +0 -0
  9. package/assets/zkjson.png +0 -0
  10. package/benchmark/components/ui/avatar.jsx +49 -0
  11. package/benchmark/components/ui/checkbox.jsx +17 -0
  12. package/benchmark/components/ui/close-button.jsx +20 -0
  13. package/benchmark/components/ui/color-mode.jsx +89 -0
  14. package/benchmark/components/ui/dialog.jsx +54 -0
  15. package/benchmark/components/ui/drawer.jsx +44 -0
  16. package/benchmark/components/ui/field.jsx +22 -0
  17. package/benchmark/components/ui/input-group.jsx +39 -0
  18. package/benchmark/components/ui/popover.jsx +49 -0
  19. package/benchmark/components/ui/provider.jsx +12 -0
  20. package/benchmark/components/ui/radio.jsx +17 -0
  21. package/benchmark/components/ui/slider.jsx +107 -0
  22. package/benchmark/components/ui/tooltip.jsx +35 -0
  23. package/benchmark/jsconfig.json +7 -0
  24. package/benchmark/lib/cbor.js +387 -0
  25. package/benchmark/lib/msgpack.js +651 -0
  26. package/benchmark/next.config.mjs +6 -0
  27. package/benchmark/package.json +22 -0
  28. package/benchmark/pages/_app.js +9 -0
  29. package/benchmark/pages/_document.js +13 -0
  30. package/benchmark/pages/api/hello.js +5 -0
  31. package/benchmark/pages/index.js +438 -0
  32. package/benchmark/public/favicon.ico +0 -0
  33. package/benchmark/public/file.svg +1 -0
  34. package/benchmark/public/globe.svg +1 -0
  35. package/benchmark/public/next.svg +1 -0
  36. package/benchmark/public/vercel.svg +1 -0
  37. package/benchmark/public/window.svg +1 -0
  38. package/benchmark/yarn.lock +2448 -0
  39. package/circom/collection/collection.circom +32 -0
  40. package/circom/collection/compile.sh +10 -0
  41. package/circom/collection/gen.js +34 -0
  42. package/circom/collection/generateInput.js +10 -0
  43. package/circom/collection/index.circom +4 -0
  44. package/circom/collection/test.js +21 -0
  45. package/circom/collection/verifier.sol +247 -0
  46. package/circom/db/compile.sh +10 -0
  47. package/circom/db/db.circom +39 -0
  48. package/circom/db/gen.js +30 -0
  49. package/circom/db/generateInput.js +10 -0
  50. package/circom/db/index.circom +4 -0
  51. package/circom/db/test.js +21 -0
  52. package/circom/db/verifier.sol +261 -0
  53. package/circom/ipfs/calculate_total.circom +17 -0
  54. package/circom/ipfs/compile.sh +10 -0
  55. package/circom/ipfs/gen.js +18 -0
  56. package/circom/ipfs/generateInput.js +10 -0
  57. package/circom/ipfs/index.circom +4 -0
  58. package/circom/ipfs/ipfs.circom +62 -0
  59. package/circom/ipfs/parse.circom +289 -0
  60. package/circom/ipfs/sha256.circom +99 -0
  61. package/circom/ipfs/test.js +167 -0
  62. package/circom/ipfs/verifier.sol +261 -0
  63. package/circom/json/compile.sh +10 -0
  64. package/circom/json/gen.js +22 -0
  65. package/circom/json/gen2.js +21 -0
  66. package/circom/json/generateInput.js +20 -0
  67. package/circom/json/index.circom +4 -0
  68. package/circom/json/json.circom +81 -0
  69. package/circom/json/test.js +100 -0
  70. package/circom/json/verifier.sol +247 -0
  71. package/circom/query/compile.sh +10 -0
  72. package/circom/query/gen.js +28 -0
  73. package/circom/query/generateInput.js +11 -0
  74. package/circom/query/index.circom +4 -0
  75. package/circom/query/query.circom +58 -0
  76. package/circom/query/test.js +20 -0
  77. package/circom/query/verifier.sol +177 -0
  78. package/circom/rollup/compile.sh +10 -0
  79. package/circom/rollup/gen.js +36 -0
  80. package/circom/rollup/generateInput.js +11 -0
  81. package/circom/rollup/index.circom +4 -0
  82. package/circom/rollup/rollup.circom +43 -0
  83. package/circom/rollup/test.js +35 -0
  84. package/circom/rollup/verifier.sol +240 -0
  85. package/circom/scripts/ceremony.js +39 -0
  86. package/circom/scripts/ceremony.sh +6 -0
  87. package/circom/scripts/compile.js +113 -0
  88. package/circom/scripts/compile.sh +16 -0
  89. package/circom/utils/uint.circom +512 -0
  90. package/circom/utils/utils.circom +628 -0
  91. package/demos/arweave/jsconfig.json +7 -0
  92. package/demos/arweave/lib/ZKArweave.json +617 -0
  93. package/demos/arweave/lib/encoder.js +375 -0
  94. package/demos/arweave/next.config.js +6 -0
  95. package/demos/arweave/package.json +26 -0
  96. package/demos/arweave/pages/_app.js +9 -0
  97. package/demos/arweave/pages/_document.js +19 -0
  98. package/demos/arweave/pages/api/arweave.js +31 -0
  99. package/demos/arweave/pages/api/hello.js +5 -0
  100. package/demos/arweave/pages/index.js +869 -0
  101. package/demos/arweave/public/circuit.wasm +0 -0
  102. package/demos/arweave/public/circuit_final.zkey +0 -0
  103. package/demos/arweave/public/verification_key.json +149 -0
  104. package/demos/arweave/vercel.json +7 -0
  105. package/demos/arweave/yarn.lock +2510 -0
  106. package/demos/simple/jsconfig.json +7 -0
  107. package/demos/simple/lib/encoder.js +375 -0
  108. package/demos/simple/next.config.js +6 -0
  109. package/demos/simple/package.json +24 -0
  110. package/demos/simple/pages/_app.js +9 -0
  111. package/demos/simple/pages/_document.js +13 -0
  112. package/demos/simple/pages/api/hello.js +5 -0
  113. package/demos/simple/pages/index.js +342 -0
  114. package/demos/simple/public/circuit.wasm +0 -0
  115. package/demos/simple/public/circuit_final.zkey +0 -0
  116. package/demos/simple/public/verification_key.json +149 -0
  117. package/demos/simple/yarn.lock +2519 -0
  118. package/docs/README.md +17 -0
  119. package/docs/simple-zkjson.md +210 -0
  120. package/docs/solidity-contracts.md +216 -0
  121. package/docs/zk-circuits.md +125 -0
  122. package/docs/zkdb-rollup.md +218 -0
  123. package/docs/zkjson-sdk.md +254 -0
  124. package/docs/zkjson-v1_5.md +365 -0
  125. package/package.json +16 -7
  126. package/{contracts → sdk/contracts}/NORollup.sol +0 -2
  127. package/sdk/package.json +15 -0
  128. package/sdk/yarn.lock +881 -0
  129. package/solidity/README.md +13 -0
  130. package/solidity/arguments.js +4 -0
  131. package/solidity/contracts/NORollup.sol +13 -0
  132. package/solidity/contracts/OPRollup.sol +14 -0
  133. package/solidity/contracts/ZKIPFS.sol +95 -0
  134. package/solidity/contracts/ZKJson.sol +21 -0
  135. package/solidity/contracts/ZKQuery.sol +286 -0
  136. package/solidity/contracts/ZKRollup.sol +35 -0
  137. package/solidity/contracts/apps/NORU.sol +66 -0
  138. package/solidity/contracts/apps/SimpleJSON.sol +64 -0
  139. package/solidity/contracts/apps/SimpleOPRU.sol +67 -0
  140. package/solidity/contracts/apps/SimpleRU.sol +67 -0
  141. package/solidity/contracts/apps/Token.sol +12 -0
  142. package/solidity/contracts/apps/ZKArweave.sol +89 -0
  143. package/solidity/contracts/apps/ZKBridge.sol +74 -0
  144. package/solidity/contracts/apps/ZKNFT.sol +63 -0
  145. package/solidity/contracts/verifiers/verifier_db.sol +275 -0
  146. package/solidity/contracts/verifiers/verifier_ipfs.sol +464 -0
  147. package/solidity/contracts/verifiers/verifier_json.sol +261 -0
  148. package/solidity/contracts/verifiers/verifier_rollup.sol +240 -0
  149. package/solidity/package.json +27 -0
  150. package/solidity/scripts/deploy.js +33 -0
  151. package/solidity/test/NORU.js +66 -0
  152. package/solidity/test/ZKArweave.js +97 -0
  153. package/solidity/test/arweave.js +55 -0
  154. package/solidity/test/bridge.js +71 -0
  155. package/solidity/test/simple.js +76 -0
  156. package/solidity/test/simpleOPRU.js +98 -0
  157. package/solidity/test/simpleRU.js +94 -0
  158. package/solidity/test/zknft.js +98 -0
  159. package/solidity/yarn.lock +4152 -0
  160. package/test/test.js +304 -0
  161. /package/{circomlibjs.js → sdk/circomlibjs.js} +0 -0
  162. /package/{collection.js → sdk/collection.js} +0 -0
  163. /package/{contracts → sdk/contracts}/OPRollup.sol +0 -0
  164. /package/{contracts → sdk/contracts}/ZKIPFS.sol +0 -0
  165. /package/{contracts → sdk/contracts}/ZKJson.sol +0 -0
  166. /package/{contracts → sdk/contracts}/ZKQuery.sol +0 -0
  167. /package/{contracts → sdk/contracts}/ZKRollup.sol +0 -0
  168. /package/{contracts → sdk/contracts}/apps/SimpleJSON.sol +0 -0
  169. /package/{contracts → sdk/contracts}/apps/SimpleOPRU.sol +0 -0
  170. /package/{contracts → sdk/contracts}/apps/SimpleRU.sol +0 -0
  171. /package/{contracts → sdk/contracts}/apps/Token.sol +0 -0
  172. /package/{contracts → sdk/contracts}/apps/ZKArweave.sol +0 -0
  173. /package/{contracts → sdk/contracts}/apps/ZKBridge.sol +0 -0
  174. /package/{contracts → sdk/contracts}/apps/ZKNFT.sol +0 -0
  175. /package/{contracts → sdk/contracts}/verifiers/verifier_db.sol +0 -0
  176. /package/{contracts → sdk/contracts}/verifiers/verifier_ipfs.sol +0 -0
  177. /package/{contracts → sdk/contracts}/verifiers/verifier_json.sol +0 -0
  178. /package/{contracts → sdk/contracts}/verifiers/verifier_rollup.sol +0 -0
  179. /package/{db.js → sdk/db.js} +0 -0
  180. /package/{doc.js → sdk/doc.js} +0 -0
  181. /package/{encoder-v1_5.js → sdk/encoder-v1_5.js} +0 -0
  182. /package/{encoder.js → sdk/encoder.js} +0 -0
  183. /package/{index.js → sdk/index.js} +0 -0
  184. /package/{json.js → sdk/json.js} +0 -0
  185. /package/{nft.js → sdk/nft.js} +0 -0
  186. /package/{parse.js → sdk/parse.js} +0 -0
  187. /package/{uint.js → sdk/uint.js} +0 -0
@@ -0,0 +1,617 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "ZKArweave",
4
+ "sourceName": "contracts/ZKArweave.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "address",
10
+ "name": "_verifier",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "address",
15
+ "name": "_validator",
16
+ "type": "address"
17
+ }
18
+ ],
19
+ "stateMutability": "nonpayable",
20
+ "type": "constructor"
21
+ },
22
+ {
23
+ "inputs": [
24
+ {
25
+ "internalType": "uint256",
26
+ "name": "x",
27
+ "type": "uint256"
28
+ }
29
+ ],
30
+ "name": "digits",
31
+ "outputs": [
32
+ {
33
+ "internalType": "uint256",
34
+ "name": "",
35
+ "type": "uint256"
36
+ }
37
+ ],
38
+ "stateMutability": "pure",
39
+ "type": "function"
40
+ },
41
+ {
42
+ "inputs": [
43
+ {
44
+ "internalType": "uint256[5]",
45
+ "name": "path",
46
+ "type": "uint256[5]"
47
+ },
48
+ {
49
+ "internalType": "uint256[100]",
50
+ "name": "raw",
51
+ "type": "uint256[100]"
52
+ }
53
+ ],
54
+ "name": "getBool",
55
+ "outputs": [
56
+ {
57
+ "internalType": "bool",
58
+ "name": "",
59
+ "type": "bool"
60
+ }
61
+ ],
62
+ "stateMutability": "pure",
63
+ "type": "function"
64
+ },
65
+ {
66
+ "inputs": [
67
+ {
68
+ "internalType": "bytes32",
69
+ "name": "_messageHash",
70
+ "type": "bytes32"
71
+ }
72
+ ],
73
+ "name": "getEthSignedMessageHash",
74
+ "outputs": [
75
+ {
76
+ "internalType": "bytes32",
77
+ "name": "",
78
+ "type": "bytes32"
79
+ }
80
+ ],
81
+ "stateMutability": "pure",
82
+ "type": "function"
83
+ },
84
+ {
85
+ "inputs": [
86
+ {
87
+ "internalType": "uint256[5]",
88
+ "name": "path",
89
+ "type": "uint256[5]"
90
+ },
91
+ {
92
+ "internalType": "uint256[100]",
93
+ "name": "raw",
94
+ "type": "uint256[100]"
95
+ }
96
+ ],
97
+ "name": "getInt",
98
+ "outputs": [
99
+ {
100
+ "internalType": "int256",
101
+ "name": "",
102
+ "type": "int256"
103
+ }
104
+ ],
105
+ "stateMutability": "pure",
106
+ "type": "function"
107
+ },
108
+ {
109
+ "inputs": [
110
+ {
111
+ "internalType": "string",
112
+ "name": "txid",
113
+ "type": "string"
114
+ },
115
+ {
116
+ "internalType": "uint256",
117
+ "name": "hash",
118
+ "type": "uint256"
119
+ }
120
+ ],
121
+ "name": "getMessageHash",
122
+ "outputs": [
123
+ {
124
+ "internalType": "bytes32",
125
+ "name": "",
126
+ "type": "bytes32"
127
+ }
128
+ ],
129
+ "stateMutability": "pure",
130
+ "type": "function"
131
+ },
132
+ {
133
+ "inputs": [
134
+ {
135
+ "internalType": "uint256[5]",
136
+ "name": "path",
137
+ "type": "uint256[5]"
138
+ },
139
+ {
140
+ "internalType": "uint256[100]",
141
+ "name": "raw",
142
+ "type": "uint256[100]"
143
+ }
144
+ ],
145
+ "name": "getNull",
146
+ "outputs": [
147
+ {
148
+ "internalType": "bool",
149
+ "name": "",
150
+ "type": "bool"
151
+ }
152
+ ],
153
+ "stateMutability": "pure",
154
+ "type": "function"
155
+ },
156
+ {
157
+ "inputs": [
158
+ {
159
+ "internalType": "uint256[5]",
160
+ "name": "path",
161
+ "type": "uint256[5]"
162
+ },
163
+ {
164
+ "internalType": "uint256[100]",
165
+ "name": "raw",
166
+ "type": "uint256[100]"
167
+ }
168
+ ],
169
+ "name": "getString",
170
+ "outputs": [
171
+ {
172
+ "internalType": "string",
173
+ "name": "",
174
+ "type": "string"
175
+ }
176
+ ],
177
+ "stateMutability": "pure",
178
+ "type": "function"
179
+ },
180
+ {
181
+ "inputs": [
182
+ {
183
+ "internalType": "uint256[5]",
184
+ "name": "path",
185
+ "type": "uint256[5]"
186
+ },
187
+ {
188
+ "internalType": "uint256[100]",
189
+ "name": "_json",
190
+ "type": "uint256[100]"
191
+ }
192
+ ],
193
+ "name": "getVal",
194
+ "outputs": [
195
+ {
196
+ "internalType": "uint256[100]",
197
+ "name": "",
198
+ "type": "uint256[100]"
199
+ }
200
+ ],
201
+ "stateMutability": "pure",
202
+ "type": "function"
203
+ },
204
+ {
205
+ "inputs": [
206
+ {
207
+ "internalType": "string",
208
+ "name": "txid",
209
+ "type": "string"
210
+ },
211
+ {
212
+ "internalType": "uint256[5]",
213
+ "name": "path",
214
+ "type": "uint256[5]"
215
+ },
216
+ {
217
+ "internalType": "uint256[20]",
218
+ "name": "zkp",
219
+ "type": "uint256[20]"
220
+ },
221
+ {
222
+ "internalType": "bytes",
223
+ "name": "sig",
224
+ "type": "bytes"
225
+ }
226
+ ],
227
+ "name": "qBool",
228
+ "outputs": [
229
+ {
230
+ "internalType": "bool",
231
+ "name": "",
232
+ "type": "bool"
233
+ }
234
+ ],
235
+ "stateMutability": "view",
236
+ "type": "function"
237
+ },
238
+ {
239
+ "inputs": [
240
+ {
241
+ "internalType": "string",
242
+ "name": "txid",
243
+ "type": "string"
244
+ },
245
+ {
246
+ "internalType": "uint256[5]",
247
+ "name": "path",
248
+ "type": "uint256[5]"
249
+ },
250
+ {
251
+ "internalType": "uint256[20]",
252
+ "name": "zkp",
253
+ "type": "uint256[20]"
254
+ },
255
+ {
256
+ "internalType": "bytes",
257
+ "name": "sig",
258
+ "type": "bytes"
259
+ }
260
+ ],
261
+ "name": "qFloat",
262
+ "outputs": [
263
+ {
264
+ "internalType": "uint256[3]",
265
+ "name": "",
266
+ "type": "uint256[3]"
267
+ }
268
+ ],
269
+ "stateMutability": "view",
270
+ "type": "function"
271
+ },
272
+ {
273
+ "inputs": [
274
+ {
275
+ "internalType": "string",
276
+ "name": "txid",
277
+ "type": "string"
278
+ },
279
+ {
280
+ "internalType": "uint256[5]",
281
+ "name": "path",
282
+ "type": "uint256[5]"
283
+ },
284
+ {
285
+ "internalType": "uint256[20]",
286
+ "name": "zkp",
287
+ "type": "uint256[20]"
288
+ },
289
+ {
290
+ "internalType": "bytes",
291
+ "name": "sig",
292
+ "type": "bytes"
293
+ }
294
+ ],
295
+ "name": "qInt",
296
+ "outputs": [
297
+ {
298
+ "internalType": "int256",
299
+ "name": "",
300
+ "type": "int256"
301
+ }
302
+ ],
303
+ "stateMutability": "view",
304
+ "type": "function"
305
+ },
306
+ {
307
+ "inputs": [
308
+ {
309
+ "internalType": "string",
310
+ "name": "txid",
311
+ "type": "string"
312
+ },
313
+ {
314
+ "internalType": "uint256[5]",
315
+ "name": "path",
316
+ "type": "uint256[5]"
317
+ },
318
+ {
319
+ "internalType": "uint256[20]",
320
+ "name": "zkp",
321
+ "type": "uint256[20]"
322
+ },
323
+ {
324
+ "internalType": "bytes",
325
+ "name": "sig",
326
+ "type": "bytes"
327
+ }
328
+ ],
329
+ "name": "qNull",
330
+ "outputs": [
331
+ {
332
+ "internalType": "bool",
333
+ "name": "",
334
+ "type": "bool"
335
+ }
336
+ ],
337
+ "stateMutability": "view",
338
+ "type": "function"
339
+ },
340
+ {
341
+ "inputs": [
342
+ {
343
+ "internalType": "string",
344
+ "name": "txid",
345
+ "type": "string"
346
+ },
347
+ {
348
+ "internalType": "uint256[5]",
349
+ "name": "path",
350
+ "type": "uint256[5]"
351
+ },
352
+ {
353
+ "internalType": "uint256[20]",
354
+ "name": "zkp",
355
+ "type": "uint256[20]"
356
+ },
357
+ {
358
+ "internalType": "bytes",
359
+ "name": "sig",
360
+ "type": "bytes"
361
+ }
362
+ ],
363
+ "name": "qRaw",
364
+ "outputs": [
365
+ {
366
+ "internalType": "uint256[100]",
367
+ "name": "",
368
+ "type": "uint256[100]"
369
+ }
370
+ ],
371
+ "stateMutability": "view",
372
+ "type": "function"
373
+ },
374
+ {
375
+ "inputs": [
376
+ {
377
+ "internalType": "string",
378
+ "name": "txid",
379
+ "type": "string"
380
+ },
381
+ {
382
+ "internalType": "uint256[5]",
383
+ "name": "path",
384
+ "type": "uint256[5]"
385
+ },
386
+ {
387
+ "internalType": "uint256[20]",
388
+ "name": "zkp",
389
+ "type": "uint256[20]"
390
+ },
391
+ {
392
+ "internalType": "bytes",
393
+ "name": "sig",
394
+ "type": "bytes"
395
+ }
396
+ ],
397
+ "name": "qString",
398
+ "outputs": [
399
+ {
400
+ "internalType": "string",
401
+ "name": "",
402
+ "type": "string"
403
+ }
404
+ ],
405
+ "stateMutability": "view",
406
+ "type": "function"
407
+ },
408
+ {
409
+ "inputs": [
410
+ {
411
+ "internalType": "bytes32",
412
+ "name": "_ethSignedMessageHash",
413
+ "type": "bytes32"
414
+ },
415
+ {
416
+ "internalType": "bytes",
417
+ "name": "_signature",
418
+ "type": "bytes"
419
+ }
420
+ ],
421
+ "name": "recoverSigner",
422
+ "outputs": [
423
+ {
424
+ "internalType": "address",
425
+ "name": "",
426
+ "type": "address"
427
+ }
428
+ ],
429
+ "stateMutability": "pure",
430
+ "type": "function"
431
+ },
432
+ {
433
+ "inputs": [
434
+ {
435
+ "internalType": "bytes",
436
+ "name": "sig",
437
+ "type": "bytes"
438
+ }
439
+ ],
440
+ "name": "splitSignature",
441
+ "outputs": [
442
+ {
443
+ "internalType": "bytes32",
444
+ "name": "r",
445
+ "type": "bytes32"
446
+ },
447
+ {
448
+ "internalType": "bytes32",
449
+ "name": "s",
450
+ "type": "bytes32"
451
+ },
452
+ {
453
+ "internalType": "uint8",
454
+ "name": "v",
455
+ "type": "uint8"
456
+ }
457
+ ],
458
+ "stateMutability": "pure",
459
+ "type": "function"
460
+ },
461
+ {
462
+ "inputs": [
463
+ {
464
+ "internalType": "uint256",
465
+ "name": "size_json",
466
+ "type": "uint256"
467
+ },
468
+ {
469
+ "internalType": "uint256[5]",
470
+ "name": "json",
471
+ "type": "uint256[5]"
472
+ }
473
+ ],
474
+ "name": "toArr",
475
+ "outputs": [
476
+ {
477
+ "internalType": "uint256[100]",
478
+ "name": "",
479
+ "type": "uint256[100]"
480
+ }
481
+ ],
482
+ "stateMutability": "pure",
483
+ "type": "function"
484
+ },
485
+ {
486
+ "inputs": [
487
+ {
488
+ "internalType": "uint8[]",
489
+ "name": "charCodes",
490
+ "type": "uint8[]"
491
+ }
492
+ ],
493
+ "name": "toString",
494
+ "outputs": [
495
+ {
496
+ "internalType": "string",
497
+ "name": "",
498
+ "type": "string"
499
+ }
500
+ ],
501
+ "stateMutability": "pure",
502
+ "type": "function"
503
+ },
504
+ {
505
+ "inputs": [
506
+ {
507
+ "internalType": "string",
508
+ "name": "txid",
509
+ "type": "string"
510
+ },
511
+ {
512
+ "internalType": "uint256[5]",
513
+ "name": "path",
514
+ "type": "uint256[5]"
515
+ },
516
+ {
517
+ "internalType": "uint256[20]",
518
+ "name": "zkp",
519
+ "type": "uint256[20]"
520
+ },
521
+ {
522
+ "internalType": "bytes",
523
+ "name": "sig",
524
+ "type": "bytes"
525
+ }
526
+ ],
527
+ "name": "validateQuery",
528
+ "outputs": [
529
+ {
530
+ "internalType": "uint256[100]",
531
+ "name": "",
532
+ "type": "uint256[100]"
533
+ }
534
+ ],
535
+ "stateMutability": "view",
536
+ "type": "function"
537
+ },
538
+ {
539
+ "inputs": [],
540
+ "name": "validator",
541
+ "outputs": [
542
+ {
543
+ "internalType": "address",
544
+ "name": "",
545
+ "type": "address"
546
+ }
547
+ ],
548
+ "stateMutability": "view",
549
+ "type": "function"
550
+ },
551
+ {
552
+ "inputs": [],
553
+ "name": "verifier",
554
+ "outputs": [
555
+ {
556
+ "internalType": "address",
557
+ "name": "",
558
+ "type": "address"
559
+ }
560
+ ],
561
+ "stateMutability": "view",
562
+ "type": "function"
563
+ },
564
+ {
565
+ "inputs": [
566
+ {
567
+ "internalType": "uint256[20]",
568
+ "name": "zkp",
569
+ "type": "uint256[20]"
570
+ }
571
+ ],
572
+ "name": "verify",
573
+ "outputs": [
574
+ {
575
+ "internalType": "bool",
576
+ "name": "",
577
+ "type": "bool"
578
+ }
579
+ ],
580
+ "stateMutability": "view",
581
+ "type": "function"
582
+ },
583
+ {
584
+ "inputs": [
585
+ {
586
+ "internalType": "string",
587
+ "name": "txid",
588
+ "type": "string"
589
+ },
590
+ {
591
+ "internalType": "uint256",
592
+ "name": "_message",
593
+ "type": "uint256"
594
+ },
595
+ {
596
+ "internalType": "bytes",
597
+ "name": "signature",
598
+ "type": "bytes"
599
+ }
600
+ ],
601
+ "name": "verifyMessage",
602
+ "outputs": [
603
+ {
604
+ "internalType": "bool",
605
+ "name": "",
606
+ "type": "bool"
607
+ }
608
+ ],
609
+ "stateMutability": "view",
610
+ "type": "function"
611
+ }
612
+ ],
613
+ "bytecode": "0x60806040523480156200001157600080fd5b50604051620038713803806200387183398181016040528101906200003791906200012a565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000171565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f282620000c5565b9050919050565b6200010481620000e5565b81146200011057600080fd5b50565b6000815190506200012481620000f9565b92915050565b60008060408385031215620001445762000143620000c0565b5b6000620001548582860162000113565b9250506020620001678582860162000113565b9150509250929050565b6136f080620001816000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806395a4b6f0116100c3578063d4aa69161161007c578063d4aa691614610460578063e401c8c714610490578063e4e004d3146104c0578063e5e6483a146104f0578063f6dd6f3914610520578063fa540801146105505761014d565b806395a4b6f01461033e57806397aba7f91461036e578063a01176961461039e578063a7bb5803146103ce578063b6c11f5314610400578063c7ddd56f146104305761014d565b80633c671755116101155780633c6717551461021e5780633e7993291461024e57806377af7dd91461027e5780637b23c90d146102ae5780637b6864dc146102de578063905aac3f1461030e5761014d565b8063072f10f21461015257806319d1390f146101825780632b7ac3f3146101b25780633048d44b146101d05780633a5381b514610200575b600080fd5b61016c600480360381019061016791906120b4565b610580565b6040516101799190612110565b60405180910390f35b61019c600480360381019061019791906120b4565b6105f5565b6040516101a991906121aa565b60405180910390f35b6101ba610760565b6040516101c7919061220d565b60405180910390f35b6101ea60048036038101906101e59190612324565b610784565b6040516101f791906121aa565b60405180910390f35b610208610861565b604051610215919061220d565b60405180910390f35b610238600480360381019061023391906120b4565b610887565b6040516102459190612418565b60405180910390f35b610268600480360381019061026391906120b4565b610d4c565b6040516102759190612110565b60405180910390f35b61029860048036038101906102939190612456565b610de9565b6040516102a59190612110565b60405180910390f35b6102c860048036038101906102c39190612484565b61110b565b6040516102d591906124c0565b60405180910390f35b6102f860048036038101906102f391906120b4565b611147565b60405161030591906124f4565b60405180910390f35b61032860048036038101906103239190612665565b61124a565b6040516103359190612418565b60405180910390f35b61035860048036038101906103539190612665565b6112d3565b60405161036591906124f4565b60405180910390f35b6103886004803603810190610383919061273c565b6113e4565b604051610395919061220d565b60405180910390f35b6103b860048036038101906103b39190612798565b611453565b6040516103c59190612110565b60405180910390f35b6103e860048036038101906103e39190612823565b6114e3565b6040516103f79392919061288a565b60405180910390f35b61041a60048036038101906104159190612665565b61154b565b60405161042791906121aa565b60405180910390f35b61044a60048036038101906104459190612665565b6116c4565b6040516104579190612110565b60405180910390f35b61047a600480360381019061047591906128c1565b61176f565b604051610487919061291d565b60405180910390f35b6104aa60048036038101906104a59190612665565b6117a2565b6040516104b79190612418565b60405180910390f35b6104da60048036038101906104d59190612938565b61194b565b6040516104e79190612418565b60405180910390f35b61050a60048036038101906105059190612665565b611b8e565b6040516105179190612110565b60405180910390f35b61053a60048036038101906105359190612665565b611c11565b60405161054791906129fc565b60405180910390f35b61056a60048036038101906105659190612a17565b611d69565b604051610577919061291d565b60405180910390f35b60008061058d8484610887565b90506000816000606481106105a5576105a4612a44565b5b6020020151146105ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e190612abf565b60405180910390fd5b600191505092915050565b606060006106038484610887565b905060038160006064811061061b5761061a612a44565b5b602002015114610660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065790612b2b565b60405180910390fd5b60008160016064811061067657610675612a44565b5b602002015167ffffffffffffffff81111561069457610693611e9c565b5b6040519080825280602002602001820160405280156106c25781602001602082028036833780820191505090505b50905060005b826001606481106106dc576106db612a44565b5b602002015181101561074657826002826106f69190612b7a565b6064811061070757610706612a44565b5b602002015182828151811061071f5761071e612a44565b5b602002602001019060ff16908160ff1681525050808061073e90612bae565b9150506106c8565b50600061075282610784565b905080935050505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000825167ffffffffffffffff8111156107a3576107a2611e9c565b5b6040519080825280601f01601f1916602001820160405280156107d55781602001600182028036833780820191505090505b50905060005b8351811015610857578381815181106107f7576107f6612a44565b5b602002602001015160f81b82828151811061081557610814612a44565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061084f90612bae565b9150506107db565b5080915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088f611d99565b6004826000606481106108a5576108a4612a44565b5b6020020151146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190612c42565b60405180910390fd5b6000600190506108f8611d99565b600061090560058761194b565b90505b6064831015610d4057610919611d99565b600086856064811061092e5761092d612a44565b5b60200201519050848061094090612bae565b955050808260006064811061095857610957612a44565b5b60200201818152505060006001905060005b82811015610a8757600089886064811061098757610986612a44565b5b60200201519050808584606481106109a2576109a1612a44565b5b60200201818152505082806109b690612bae565b93505087806109c490612bae565b985050600081905060008203610a035760008b8a606481106109e9576109e8612a44565b5b6020020151146109fa5760016109fd565b60025b60ff1690505b60005b81811015610a71578b8a60648110610a2157610a20612a44565b5b6020020151878660648110610a3957610a38612a44565b5b6020020181815250508480610a4d90612bae565b9550508980610a5b90612bae565b9a50508080610a6990612bae565b915050610a06565b5050508080610a7f90612bae565b91505061096a565b506000888760648110610a9d57610a9c612a44565b5b602002015190508680610aaf90612bae565b975050610aba611d99565b8181600060648110610acf57610ace612a44565b5b60200201818152505060018203610b2857898860648110610af357610af2612a44565b5b602002015181600160648110610b0c57610b0b612a44565b5b6020020181815250508780610b2090612bae565b985050610cbf565b60028203610bfe57898860648110610b4357610b42612a44565b5b602002015181600160648110610b5c57610b5b612a44565b5b6020020181815250508780610b7090612bae565b985050898860648110610b8657610b85612a44565b5b602002015181600260648110610b9f57610b9e612a44565b5b6020020181815250508780610bb390612bae565b985050898860648110610bc957610bc8612a44565b5b602002015181600360648110610be257610be1612a44565b5b6020020181815250508780610bf690612bae565b985050610cbe565b60038203610cbd5760008a8960648110610c1b57610c1a612a44565b5b602002015190508082600160648110610c3757610c36612a44565b5b6020020181815250508880610c4b90612bae565b99505060005b81811015610cba578b8a60648110610c6c57610c6b612a44565b5b602002015183600283610c7f9190612b7a565b60648110610c9057610c8f612a44565b5b6020020181815250508980610ca490612bae565b9a50508080610cb290612bae565b915050610c51565b50505b5b5b60006001905060005b6064811015610d1e57878160648110610ce457610ce3612a44565b5b6020020151878260648110610cfc57610cfb612a44565b5b602002015114610d0b57600091505b8080610d1690612bae565b915050610cc8565b5060018103610d3557819750505050505050610d40565b505050505050610908565b81935050505092915050565b600080610d598484610887565b9050600181600060648110610d7157610d70612a44565b5b602002015114610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90612cae565b60405180910390fd5b600181600160648110610dcc57610dcb612a44565b5b602002015114610ddd576000610de0565b60015b91505092915050565b6000610df3611dbc565b610dfb611dde565b610e03611dbc565b610e0b611e0b565b60005b6002811015610e5e57868160148110610e2a57610e29612a44565b5b6020020135858260028110610e4257610e41612a44565b5b6020020181815250508080610e5690612bae565b915050610e0e565b506000600290505b6004811015610eda57868160148110610e8257610e81612a44565b5b602002013584600060028110610e9b57610e9a612a44565b5b6020020151600283610ead9190612cce565b60028110610ebe57610ebd612a44565b5b6020020181815250508080610ed290612bae565b915050610e66565b506000600490505b6006811015610f5657868160148110610efe57610efd612a44565b5b602002013584600160028110610f1757610f16612a44565b5b6020020151600483610f299190612cce565b60028110610f3a57610f39612a44565b5b6020020181815250508080610f4e90612bae565b915050610ee2565b506000600690505b6008811015610fba57868160148110610f7a57610f79612a44565b5b602002013583600683610f8d9190612cce565b60028110610f9e57610f9d612a44565b5b6020020181815250508080610fb290612bae565b915050610f5e565b506000600890505b601481101561101e57868160148110610fde57610fdd612a44565b5b602002013582600883610ff19190612cce565b600c811061100257611001612a44565b5b602002018181525050808061101690612bae565b915050610fc2565b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cbac0fa858585856040518563ffffffff1660e01b815260040161107e9493929190612f08565b602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190612f7b565b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612ff4565b60405180910390fd5b6001945050505050919050565b600080600090505b600083111561113e57600a836111299190613043565b9250808061113690612bae565b915050611113565b80915050919050565b6000806111548484610887565b905060028160006064811061116c5761116b612a44565b5b6020020151148015611196575060008160026064811061118f5761118e612a44565b5b6020020151145b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906130c0565b60405180910390fd5b6001816001606481106111eb576111ea612a44565b5b60200201511461121b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61121e565b60015b8160036064811061123257611231612a44565b5b602002015161124191906130e0565b91505092915050565b611252611d99565b6000611260868686866117a2565b905060048160006064811061127857611277612a44565b5b6020020151146112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b4906131a4565b60405180910390fd5b6112c684610de9565b5080915050949350505050565b6000806112e2868686866117a2565b90506002816000606481106112fa576112f9612a44565b5b6020020151148015611324575060008160026064811061131d5761131c612a44565b5b6020020151145b611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a906130c0565b60405180910390fd5b61136c84610de9565b5060018160016064811061138357611382612a44565b5b6020020151146113b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113b6565b60015b816003606481106113ca576113c9612a44565b5b60200201516113d991906130e0565b915050949350505050565b6000806000806113f3856114e3565b9250925092506001868285856040516000815260200160405260405161141c94939291906131c4565b6020604051602081039080840390855afa15801561143e573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600080611460858561176f565b9050600061146d82611d69565b9050600061147b82866113e4565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114c083876113e4565b73ffffffffffffffffffffffffffffffffffffffff161493505050509392505050565b6000806000604184511461152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390613255565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b6060600061155b868686866117a2565b905060038160006064811061157357611572612a44565b5b6020020151146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90612b2b565b60405180910390fd5b6115c184610de9565b506000816001606481106115d8576115d7612a44565b5b602002015167ffffffffffffffff8111156115f6576115f5611e9c565b5b6040519080825280602002602001820160405280156116245781602001602082028036833780820191505090505b50905060005b8260016064811061163e5761163d612a44565b5b60200201518110156116a857826002826116589190612b7a565b6064811061166957611668612a44565b5b602002015182828151811061168157611680612a44565b5b602002602001019060ff16908160ff168152505080806116a090612bae565b91505061162a565b5060006116b482610784565b9050809350505050949350505050565b6000806116d3868686866117a2565b90506001816000606481106116eb576116ea612a44565b5b602002015114611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790612cae565b60405180910390fd5b61173984610de9565b506001816001606481106117505761174f612a44565b5b602002015114611761576000611764565b60015b915050949350505050565b600082826040516020016117849291906132d2565b60405160208183030381529060405280519060200120905092915050565b6117aa611d99565b6117cd85846009601481106117c2576117c1612a44565b5b602002013584611453565b506001836008601481106117e4576117e3612a44565b5b602002013514611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090613346565b60405180910390fd5b6000600a90505b600f8110156118c85783816014811061184c5761184b612a44565b5b602002013585600a8361185f9190612cce565b600581106118705761186f612a44565b5b6020020151146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906133b2565b60405180910390fd5b80806118c090612bae565b915050611830565b506118d1611e2e565b6000600f90505b6014811015611934578481601481106118f4576118f3612a44565b5b602002013582600f836119079190612cce565b6005811061191857611917612a44565b5b602002018181525050808061192c90612bae565b9150506118d8565b5061194060058261194b565b915050949350505050565b611953611d99565b61195b611d99565b60008060005b86811015611b8157600086826005811061197e5761197d612a44565b5b60200201511115611b6e5760006119ab8783600581106119a1576119a0612a44565b5b602002015161110b565b905060008783600581106119c2576119c1612a44565b5b6020020151905060008060008060005b6000871115611b665760006001886119ea9190612cce565b600a6119f69190613505565b87611a019190613043565b9050600086148015611a135750600081115b15611a3e576001955060098103611a31576008935060009150611a35565b8093505b60009450611b21565b60018603611b205760018585611a549190612cce565b611a5e9190612cce565b600a611a6a9190613505565b81611a759190613550565b83611a809190612b7a565b92508480611a8d90612bae565b955050838503611b1f5783600a611aa49190613505565b8a611aaf9190613550565b995060018203611acc57828a611ac59190612b7a565b9950611b0a565b8983611ad89190612b7a565b925060009950828c8c60648110611af257611af1612a44565b5b6020020181815250508a80611b0690612bae565b9b50505b60009450600095506000935060009250600091505b5b5b80600189611b2f9190612cce565b600a611b3b9190613505565b611b459190613550565b87611b509190612cce565b96508780611b5d90613592565b985050506119d2565b505050505050505b8080611b7990612bae565b915050611961565b5082935050505092915050565b600080611b9d868686866117a2565b9050600081600060648110611bb557611bb4612a44565b5b602002015114611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190612abf565b60405180910390fd5b611c0384610de9565b506001915050949350505050565b611c19611e50565b6000611c27868686866117a2565b9050600281600060648110611c3f57611c3e612a44565b5b6020020151148015611c695750600181600260648110611c6257611c61612a44565b5b6020020151145b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90613607565b60405180910390fd5b611cb184610de9565b50611cba611e50565b81600160648110611cce57611ccd612a44565b5b602002015181600060038110611ce757611ce6612a44565b5b60200201818152505081600260648110611d0457611d03612a44565b5b602002015181600160038110611d1d57611d1c612a44565b5b60200201818152505081600360648110611d3a57611d39612a44565b5b602002015181600260038110611d5357611d52612a44565b5b6020020181815250508092505050949350505050565b600081604051602001611d7c9190613694565b604051602081830303815290604052805190602001209050919050565b60405180610c800160405280606490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b60405180604001604052806002905b611df5611dbc565b815260200190600190039081611ded5790505090565b604051806101800160405280600c90602082028036833780820191505090505090565b6040518060a00160405280600590602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ed482611e8b565b810181811067ffffffffffffffff82111715611ef357611ef2611e9c565b5b80604052505050565b6000611f06611e72565b9050611f128282611ecb565b919050565b600067ffffffffffffffff821115611f3257611f31611e9c565b5b602082029050919050565b600080fd5b6000819050919050565b611f5581611f42565b8114611f6057600080fd5b50565b600081359050611f7281611f4c565b92915050565b6000611f8b611f8684611f17565b611efc565b90508060208402830185811115611fa557611fa4611f3d565b5b835b81811015611fce5780611fba8882611f63565b845260208401935050602081019050611fa7565b5050509392505050565b600082601f830112611fed57611fec611e86565b5b6005611ffa848285611f78565b91505092915050565b600067ffffffffffffffff82111561201e5761201d611e9c565b5b602082029050919050565b600061203c61203784612003565b611efc565b9050806020840283018581111561205657612055611f3d565b5b835b8181101561207f578061206b8882611f63565b845260208401935050602081019050612058565b5050509392505050565b600082601f83011261209e5761209d611e86565b5b60646120ab848285612029565b91505092915050565b600080610d2083850312156120cc576120cb611e7c565b5b60006120da85828601611fd8565b92505060a06120eb85828601612089565b9150509250929050565b60008115159050919050565b61210a816120f5565b82525050565b60006020820190506121256000830184612101565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561216557808201518184015260208101905061214a565b60008484015250505050565b600061217c8261212b565b6121868185612136565b9350612196818560208601612147565b61219f81611e8b565b840191505092915050565b600060208201905081810360008301526121c48184612171565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121f7826121cc565b9050919050565b612207816121ec565b82525050565b600060208201905061222260008301846121fe565b92915050565b600067ffffffffffffffff82111561224357612242611e9c565b5b602082029050602081019050919050565b600060ff82169050919050565b61226a81612254565b811461227557600080fd5b50565b60008135905061228781612261565b92915050565b60006122a061229b84612228565b611efc565b905080838252602082019050602084028301858111156122c3576122c2611f3d565b5b835b818110156122ec57806122d88882612278565b8452602084019350506020810190506122c5565b5050509392505050565b600082601f83011261230b5761230a611e86565b5b813561231b84826020860161228d565b91505092915050565b60006020828403121561233a57612339611e7c565b5b600082013567ffffffffffffffff81111561235857612357611e81565b5b612364848285016122f6565b91505092915050565b600060649050919050565b600081905092915050565b6000819050919050565b61239681611f42565b82525050565b60006123a8838361238d565b60208301905092915050565b6000602082019050919050565b6123ca8161236d565b6123d48184612378565b92506123df82612383565b8060005b838110156124105781516123f7878261239c565b9650612402836123b4565b9250506001810190506123e3565b505050505050565b6000610c808201905061242e60008301846123c1565b92915050565b6000819050826020601402820111156124505761244f611f3d565b5b92915050565b6000610280828403121561246d5761246c611e7c565b5b600061247b84828501612434565b91505092915050565b60006020828403121561249a57612499611e7c565b5b60006124a884828501611f63565b91505092915050565b6124ba81611f42565b82525050565b60006020820190506124d560008301846124b1565b92915050565b6000819050919050565b6124ee816124db565b82525050565b600060208201905061250960008301846124e5565b92915050565b600080fd5b600067ffffffffffffffff82111561252f5761252e611e9c565b5b61253882611e8b565b9050602081019050919050565b82818337600083830152505050565b600061256761256284612514565b611efc565b9050828152602081018484840111156125835761258261250f565b5b61258e848285612545565b509392505050565b600082601f8301126125ab576125aa611e86565b5b81356125bb848260208601612554565b91505092915050565b600067ffffffffffffffff8211156125df576125de611e9c565b5b6125e882611e8b565b9050602081019050919050565b6000612608612603846125c4565b611efc565b9050828152602081018484840111156126245761262361250f565b5b61262f848285612545565b509392505050565b600082601f83011261264c5761264b611e86565b5b813561265c8482602086016125f5565b91505092915050565b60008060008061036085870312156126805761267f611e7c565b5b600085013567ffffffffffffffff81111561269e5761269d611e81565b5b6126aa87828801612596565b94505060206126bb87828801611fd8565b93505060c06126cc87828801612434565b92505061034085013567ffffffffffffffff8111156126ee576126ed611e81565b5b6126fa87828801612637565b91505092959194509250565b6000819050919050565b61271981612706565b811461272457600080fd5b50565b60008135905061273681612710565b92915050565b6000806040838503121561275357612752611e7c565b5b600061276185828601612727565b925050602083013567ffffffffffffffff81111561278257612781611e81565b5b61278e85828601612637565b9150509250929050565b6000806000606084860312156127b1576127b0611e7c565b5b600084013567ffffffffffffffff8111156127cf576127ce611e81565b5b6127db86828701612596565b93505060206127ec86828701611f63565b925050604084013567ffffffffffffffff81111561280d5761280c611e81565b5b61281986828701612637565b9150509250925092565b60006020828403121561283957612838611e7c565b5b600082013567ffffffffffffffff81111561285757612856611e81565b5b61286384828501612637565b91505092915050565b61287581612706565b82525050565b61288481612254565b82525050565b600060608201905061289f600083018661286c565b6128ac602083018561286c565b6128b9604083018461287b565b949350505050565b600080604083850312156128d8576128d7611e7c565b5b600083013567ffffffffffffffff8111156128f6576128f5611e81565b5b61290285828601612596565b925050602061291385828601611f63565b9150509250929050565b6000602082019050612932600083018461286c565b92915050565b60008060c0838503121561294f5761294e611e7c565b5b600061295d85828601611f63565b925050602061296e85828601611fd8565b9150509250929050565b600060039050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6129ae81612978565b6129b88184612983565b92506129c38261298e565b8060005b838110156129f45781516129db878261239c565b96506129e683612998565b9250506001810190506129c7565b505050505050565b6000606082019050612a1160008301846129a5565b92915050565b600060208284031215612a2d57612a2c611e7c565b5b6000612a3b84828501612727565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6e6f74206e756c6c000000000000000000000000000000000000000000000000600082015250565b6000612aa9600883612136565b9150612ab482612a73565b602082019050919050565b60006020820190508181036000830152612ad881612a9c565b9050919050565b7f6e6f7420737472696e6700000000000000000000000000000000000000000000600082015250565b6000612b15600a83612136565b9150612b2082612adf565b602082019050919050565b60006020820190508181036000830152612b4481612b08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b8582611f42565b9150612b9083611f42565b9250828201905080821115612ba857612ba7612b4b565b5b92915050565b6000612bb982611f42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612beb57612bea612b4b565b5b600182019050919050565b7f6e6f74207261772076616c756500000000000000000000000000000000000000600082015250565b6000612c2c600d83612136565b9150612c3782612bf6565b602082019050919050565b60006020820190508181036000830152612c5b81612c1f565b9050919050565b7f6e6f7420626f6f6c000000000000000000000000000000000000000000000000600082015250565b6000612c98600883612136565b9150612ca382612c62565b602082019050919050565b60006020820190508181036000830152612cc781612c8b565b9050919050565b6000612cd982611f42565b9150612ce483611f42565b9250828203905081811115612cfc57612cfb612b4b565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b612d3881612d02565b612d428184612d0d565b9250612d4d82612d18565b8060005b83811015612d7e578151612d65878261239c565b9650612d7083612d22565b925050600181019050612d51565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b600081905092915050565b612dba81612d02565b612dc48184612da6565b9250612dcf82612d18565b8060005b83811015612e00578151612de7878261239c565b9650612df283612d22565b925050600181019050612dd3565b505050505050565b6000612e148383612db1565b60408301905092915050565b6000602082019050919050565b612e3681612d86565b612e408184612d91565b9250612e4b82612d9c565b8060005b83811015612e7c578151612e638782612e08565b9650612e6e83612e20565b925050600181019050612e4f565b505050505050565b6000600c9050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b612eba81612e84565b612ec48184612e8f565b9250612ecf82612e9a565b8060005b83811015612f00578151612ee7878261239c565b9650612ef283612ea4565b925050600181019050612ed3565b505050505050565b600061028082019050612f1e6000830187612d2f565b612f2b6040830186612e2d565b612f3860c0830185612d2f565b612f46610100830184612eb1565b95945050505050565b612f58816120f5565b8114612f6357600080fd5b50565b600081519050612f7581612f4f565b92915050565b600060208284031215612f9157612f90611e7c565b5b6000612f9f84828501612f66565b91505092915050565b7f696e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000612fde600d83612136565b9150612fe982612fa8565b602082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061304e82611f42565b915061305983611f42565b92508261306957613068613014565b5b828204905092915050565b7f6e6f7420696e7400000000000000000000000000000000000000000000000000600082015250565b60006130aa600783612136565b91506130b582613074565b602082019050919050565b600060208201905081810360008301526130d98161309d565b9050919050565b60006130eb826124db565b91506130f6836124db565b9250828202613104816124db565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561313c5761313b612b4b565b5b828205841483151761315157613150612b4b565b5b5092915050565b7f6e6f74206f626a656374206f7220617272617900000000000000000000000000600082015250565b600061318e601383612136565b915061319982613158565b602082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b60006080820190506131d9600083018761286c565b6131e6602083018661287b565b6131f3604083018561286c565b613200606083018461286c565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b600061323f601883612136565b915061324a82613209565b602082019050919050565b6000602082019050818103600083015261326e81613232565b9050919050565b600081905092915050565b600061328b8261212b565b6132958185613275565b93506132a5818560208601612147565b80840191505092915050565b6000819050919050565b6132cc6132c782611f42565b6132b1565b82525050565b60006132de8285613280565b91506132ea82846132bb565b6020820191508190509392505050565b7f76616c756520646f65736e277420657869737400000000000000000000000000600082015250565b6000613330601383612136565b915061333b826132fa565b602082019050919050565b6000602082019050818103600083015261335f81613323565b9050919050565b7f77726f6e67207061746800000000000000000000000000000000000000000000600082015250565b600061339c600a83612136565b91506133a782613366565b602082019050919050565b600060208201905081810360008301526133cb8161338f565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156134295780860481111561340557613404612b4b565b5b60018516156134145780820291505b8081029050613422856133d2565b94506133e9565b94509492505050565b60008261344257600190506134fe565b8161345057600090506134fe565b816001811461346657600281146134705761349f565b60019150506134fe565b60ff84111561348257613481612b4b565b5b8360020a91508482111561349957613498612b4b565b5b506134fe565b5060208310610133831016604e8410600b84101617156134d45782820a9050838111156134cf576134ce612b4b565b5b6134fe565b6134e184848460016133df565b925090508184048111156134f8576134f7612b4b565b5b81810290505b9392505050565b600061351082611f42565b915061351b83611f42565b92506135487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613432565b905092915050565b600061355b82611f42565b915061356683611f42565b925082820261357481611f42565b9150828204841483151761358b5761358a612b4b565b5b5092915050565b600061359d82611f42565b9150600082036135b0576135af612b4b565b5b600182039050919050565b7f6e6f7420666c6f61740000000000000000000000000000000000000000000000600082015250565b60006135f1600983612136565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061365d601c83613275565b915061366882613627565b601c82019050919050565b6000819050919050565b61368e61368982612706565b613673565b82525050565b600061369f82613650565b91506136ab828461367d565b6020820191508190509291505056fea264697066735822122084a0583d858ee5faa1e0efd5e0a74c08d214891755c5cf2ec8b598d8ab0d835964736f6c63430008120033",
614
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806395a4b6f0116100c3578063d4aa69161161007c578063d4aa691614610460578063e401c8c714610490578063e4e004d3146104c0578063e5e6483a146104f0578063f6dd6f3914610520578063fa540801146105505761014d565b806395a4b6f01461033e57806397aba7f91461036e578063a01176961461039e578063a7bb5803146103ce578063b6c11f5314610400578063c7ddd56f146104305761014d565b80633c671755116101155780633c6717551461021e5780633e7993291461024e57806377af7dd91461027e5780637b23c90d146102ae5780637b6864dc146102de578063905aac3f1461030e5761014d565b8063072f10f21461015257806319d1390f146101825780632b7ac3f3146101b25780633048d44b146101d05780633a5381b514610200575b600080fd5b61016c600480360381019061016791906120b4565b610580565b6040516101799190612110565b60405180910390f35b61019c600480360381019061019791906120b4565b6105f5565b6040516101a991906121aa565b60405180910390f35b6101ba610760565b6040516101c7919061220d565b60405180910390f35b6101ea60048036038101906101e59190612324565b610784565b6040516101f791906121aa565b60405180910390f35b610208610861565b604051610215919061220d565b60405180910390f35b610238600480360381019061023391906120b4565b610887565b6040516102459190612418565b60405180910390f35b610268600480360381019061026391906120b4565b610d4c565b6040516102759190612110565b60405180910390f35b61029860048036038101906102939190612456565b610de9565b6040516102a59190612110565b60405180910390f35b6102c860048036038101906102c39190612484565b61110b565b6040516102d591906124c0565b60405180910390f35b6102f860048036038101906102f391906120b4565b611147565b60405161030591906124f4565b60405180910390f35b61032860048036038101906103239190612665565b61124a565b6040516103359190612418565b60405180910390f35b61035860048036038101906103539190612665565b6112d3565b60405161036591906124f4565b60405180910390f35b6103886004803603810190610383919061273c565b6113e4565b604051610395919061220d565b60405180910390f35b6103b860048036038101906103b39190612798565b611453565b6040516103c59190612110565b60405180910390f35b6103e860048036038101906103e39190612823565b6114e3565b6040516103f79392919061288a565b60405180910390f35b61041a60048036038101906104159190612665565b61154b565b60405161042791906121aa565b60405180910390f35b61044a60048036038101906104459190612665565b6116c4565b6040516104579190612110565b60405180910390f35b61047a600480360381019061047591906128c1565b61176f565b604051610487919061291d565b60405180910390f35b6104aa60048036038101906104a59190612665565b6117a2565b6040516104b79190612418565b60405180910390f35b6104da60048036038101906104d59190612938565b61194b565b6040516104e79190612418565b60405180910390f35b61050a60048036038101906105059190612665565b611b8e565b6040516105179190612110565b60405180910390f35b61053a60048036038101906105359190612665565b611c11565b60405161054791906129fc565b60405180910390f35b61056a60048036038101906105659190612a17565b611d69565b604051610577919061291d565b60405180910390f35b60008061058d8484610887565b90506000816000606481106105a5576105a4612a44565b5b6020020151146105ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e190612abf565b60405180910390fd5b600191505092915050565b606060006106038484610887565b905060038160006064811061061b5761061a612a44565b5b602002015114610660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065790612b2b565b60405180910390fd5b60008160016064811061067657610675612a44565b5b602002015167ffffffffffffffff81111561069457610693611e9c565b5b6040519080825280602002602001820160405280156106c25781602001602082028036833780820191505090505b50905060005b826001606481106106dc576106db612a44565b5b602002015181101561074657826002826106f69190612b7a565b6064811061070757610706612a44565b5b602002015182828151811061071f5761071e612a44565b5b602002602001019060ff16908160ff1681525050808061073e90612bae565b9150506106c8565b50600061075282610784565b905080935050505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000825167ffffffffffffffff8111156107a3576107a2611e9c565b5b6040519080825280601f01601f1916602001820160405280156107d55781602001600182028036833780820191505090505b50905060005b8351811015610857578381815181106107f7576107f6612a44565b5b602002602001015160f81b82828151811061081557610814612a44565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061084f90612bae565b9150506107db565b5080915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088f611d99565b6004826000606481106108a5576108a4612a44565b5b6020020151146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190612c42565b60405180910390fd5b6000600190506108f8611d99565b600061090560058761194b565b90505b6064831015610d4057610919611d99565b600086856064811061092e5761092d612a44565b5b60200201519050848061094090612bae565b955050808260006064811061095857610957612a44565b5b60200201818152505060006001905060005b82811015610a8757600089886064811061098757610986612a44565b5b60200201519050808584606481106109a2576109a1612a44565b5b60200201818152505082806109b690612bae565b93505087806109c490612bae565b985050600081905060008203610a035760008b8a606481106109e9576109e8612a44565b5b6020020151146109fa5760016109fd565b60025b60ff1690505b60005b81811015610a71578b8a60648110610a2157610a20612a44565b5b6020020151878660648110610a3957610a38612a44565b5b6020020181815250508480610a4d90612bae565b9550508980610a5b90612bae565b9a50508080610a6990612bae565b915050610a06565b5050508080610a7f90612bae565b91505061096a565b506000888760648110610a9d57610a9c612a44565b5b602002015190508680610aaf90612bae565b975050610aba611d99565b8181600060648110610acf57610ace612a44565b5b60200201818152505060018203610b2857898860648110610af357610af2612a44565b5b602002015181600160648110610b0c57610b0b612a44565b5b6020020181815250508780610b2090612bae565b985050610cbf565b60028203610bfe57898860648110610b4357610b42612a44565b5b602002015181600160648110610b5c57610b5b612a44565b5b6020020181815250508780610b7090612bae565b985050898860648110610b8657610b85612a44565b5b602002015181600260648110610b9f57610b9e612a44565b5b6020020181815250508780610bb390612bae565b985050898860648110610bc957610bc8612a44565b5b602002015181600360648110610be257610be1612a44565b5b6020020181815250508780610bf690612bae565b985050610cbe565b60038203610cbd5760008a8960648110610c1b57610c1a612a44565b5b602002015190508082600160648110610c3757610c36612a44565b5b6020020181815250508880610c4b90612bae565b99505060005b81811015610cba578b8a60648110610c6c57610c6b612a44565b5b602002015183600283610c7f9190612b7a565b60648110610c9057610c8f612a44565b5b6020020181815250508980610ca490612bae565b9a50508080610cb290612bae565b915050610c51565b50505b5b5b60006001905060005b6064811015610d1e57878160648110610ce457610ce3612a44565b5b6020020151878260648110610cfc57610cfb612a44565b5b602002015114610d0b57600091505b8080610d1690612bae565b915050610cc8565b5060018103610d3557819750505050505050610d40565b505050505050610908565b81935050505092915050565b600080610d598484610887565b9050600181600060648110610d7157610d70612a44565b5b602002015114610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90612cae565b60405180910390fd5b600181600160648110610dcc57610dcb612a44565b5b602002015114610ddd576000610de0565b60015b91505092915050565b6000610df3611dbc565b610dfb611dde565b610e03611dbc565b610e0b611e0b565b60005b6002811015610e5e57868160148110610e2a57610e29612a44565b5b6020020135858260028110610e4257610e41612a44565b5b6020020181815250508080610e5690612bae565b915050610e0e565b506000600290505b6004811015610eda57868160148110610e8257610e81612a44565b5b602002013584600060028110610e9b57610e9a612a44565b5b6020020151600283610ead9190612cce565b60028110610ebe57610ebd612a44565b5b6020020181815250508080610ed290612bae565b915050610e66565b506000600490505b6006811015610f5657868160148110610efe57610efd612a44565b5b602002013584600160028110610f1757610f16612a44565b5b6020020151600483610f299190612cce565b60028110610f3a57610f39612a44565b5b6020020181815250508080610f4e90612bae565b915050610ee2565b506000600690505b6008811015610fba57868160148110610f7a57610f79612a44565b5b602002013583600683610f8d9190612cce565b60028110610f9e57610f9d612a44565b5b6020020181815250508080610fb290612bae565b915050610f5e565b506000600890505b601481101561101e57868160148110610fde57610fdd612a44565b5b602002013582600883610ff19190612cce565b600c811061100257611001612a44565b5b602002018181525050808061101690612bae565b915050610fc2565b5060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638cbac0fa858585856040518563ffffffff1660e01b815260040161107e9493929190612f08565b602060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190612f7b565b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612ff4565b60405180910390fd5b6001945050505050919050565b600080600090505b600083111561113e57600a836111299190613043565b9250808061113690612bae565b915050611113565b80915050919050565b6000806111548484610887565b905060028160006064811061116c5761116b612a44565b5b6020020151148015611196575060008160026064811061118f5761118e612a44565b5b6020020151145b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc906130c0565b60405180910390fd5b6001816001606481106111eb576111ea612a44565b5b60200201511461121b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61121e565b60015b8160036064811061123257611231612a44565b5b602002015161124191906130e0565b91505092915050565b611252611d99565b6000611260868686866117a2565b905060048160006064811061127857611277612a44565b5b6020020151146112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b4906131a4565b60405180910390fd5b6112c684610de9565b5080915050949350505050565b6000806112e2868686866117a2565b90506002816000606481106112fa576112f9612a44565b5b6020020151148015611324575060008160026064811061131d5761131c612a44565b5b6020020151145b611363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135a906130c0565b60405180910390fd5b61136c84610de9565b5060018160016064811061138357611382612a44565b5b6020020151146113b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6113b6565b60015b816003606481106113ca576113c9612a44565b5b60200201516113d991906130e0565b915050949350505050565b6000806000806113f3856114e3565b9250925092506001868285856040516000815260200160405260405161141c94939291906131c4565b6020604051602081039080840390855afa15801561143e573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600080611460858561176f565b9050600061146d82611d69565b9050600061147b82866113e4565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114c083876113e4565b73ffffffffffffffffffffffffffffffffffffffff161493505050509392505050565b6000806000604184511461152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390613255565b60405180910390fd5b6020840151925060408401519150606084015160001a90509193909250565b6060600061155b868686866117a2565b905060038160006064811061157357611572612a44565b5b6020020151146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90612b2b565b60405180910390fd5b6115c184610de9565b506000816001606481106115d8576115d7612a44565b5b602002015167ffffffffffffffff8111156115f6576115f5611e9c565b5b6040519080825280602002602001820160405280156116245781602001602082028036833780820191505090505b50905060005b8260016064811061163e5761163d612a44565b5b60200201518110156116a857826002826116589190612b7a565b6064811061166957611668612a44565b5b602002015182828151811061168157611680612a44565b5b602002602001019060ff16908160ff168152505080806116a090612bae565b91505061162a565b5060006116b482610784565b9050809350505050949350505050565b6000806116d3868686866117a2565b90506001816000606481106116eb576116ea612a44565b5b602002015114611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790612cae565b60405180910390fd5b61173984610de9565b506001816001606481106117505761174f612a44565b5b602002015114611761576000611764565b60015b915050949350505050565b600082826040516020016117849291906132d2565b60405160208183030381529060405280519060200120905092915050565b6117aa611d99565b6117cd85846009601481106117c2576117c1612a44565b5b602002013584611453565b506001836008601481106117e4576117e3612a44565b5b602002013514611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090613346565b60405180910390fd5b6000600a90505b600f8110156118c85783816014811061184c5761184b612a44565b5b602002013585600a8361185f9190612cce565b600581106118705761186f612a44565b5b6020020151146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac906133b2565b60405180910390fd5b80806118c090612bae565b915050611830565b506118d1611e2e565b6000600f90505b6014811015611934578481601481106118f4576118f3612a44565b5b602002013582600f836119079190612cce565b6005811061191857611917612a44565b5b602002018181525050808061192c90612bae565b9150506118d8565b5061194060058261194b565b915050949350505050565b611953611d99565b61195b611d99565b60008060005b86811015611b8157600086826005811061197e5761197d612a44565b5b60200201511115611b6e5760006119ab8783600581106119a1576119a0612a44565b5b602002015161110b565b905060008783600581106119c2576119c1612a44565b5b6020020151905060008060008060005b6000871115611b665760006001886119ea9190612cce565b600a6119f69190613505565b87611a019190613043565b9050600086148015611a135750600081115b15611a3e576001955060098103611a31576008935060009150611a35565b8093505b60009450611b21565b60018603611b205760018585611a549190612cce565b611a5e9190612cce565b600a611a6a9190613505565b81611a759190613550565b83611a809190612b7a565b92508480611a8d90612bae565b955050838503611b1f5783600a611aa49190613505565b8a611aaf9190613550565b995060018203611acc57828a611ac59190612b7a565b9950611b0a565b8983611ad89190612b7a565b925060009950828c8c60648110611af257611af1612a44565b5b6020020181815250508a80611b0690612bae565b9b50505b60009450600095506000935060009250600091505b5b5b80600189611b2f9190612cce565b600a611b3b9190613505565b611b459190613550565b87611b509190612cce565b96508780611b5d90613592565b985050506119d2565b505050505050505b8080611b7990612bae565b915050611961565b5082935050505092915050565b600080611b9d868686866117a2565b9050600081600060648110611bb557611bb4612a44565b5b602002015114611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190612abf565b60405180910390fd5b611c0384610de9565b506001915050949350505050565b611c19611e50565b6000611c27868686866117a2565b9050600281600060648110611c3f57611c3e612a44565b5b6020020151148015611c695750600181600260648110611c6257611c61612a44565b5b6020020151145b611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90613607565b60405180910390fd5b611cb184610de9565b50611cba611e50565b81600160648110611cce57611ccd612a44565b5b602002015181600060038110611ce757611ce6612a44565b5b60200201818152505081600260648110611d0457611d03612a44565b5b602002015181600160038110611d1d57611d1c612a44565b5b60200201818152505081600360648110611d3a57611d39612a44565b5b602002015181600260038110611d5357611d52612a44565b5b6020020181815250508092505050949350505050565b600081604051602001611d7c9190613694565b604051602081830303815290604052805190602001209050919050565b60405180610c800160405280606490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b60405180604001604052806002905b611df5611dbc565b815260200190600190039081611ded5790505090565b604051806101800160405280600c90602082028036833780820191505090505090565b6040518060a00160405280600590602082028036833780820191505090505090565b6040518060600160405280600390602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ed482611e8b565b810181811067ffffffffffffffff82111715611ef357611ef2611e9c565b5b80604052505050565b6000611f06611e72565b9050611f128282611ecb565b919050565b600067ffffffffffffffff821115611f3257611f31611e9c565b5b602082029050919050565b600080fd5b6000819050919050565b611f5581611f42565b8114611f6057600080fd5b50565b600081359050611f7281611f4c565b92915050565b6000611f8b611f8684611f17565b611efc565b90508060208402830185811115611fa557611fa4611f3d565b5b835b81811015611fce5780611fba8882611f63565b845260208401935050602081019050611fa7565b5050509392505050565b600082601f830112611fed57611fec611e86565b5b6005611ffa848285611f78565b91505092915050565b600067ffffffffffffffff82111561201e5761201d611e9c565b5b602082029050919050565b600061203c61203784612003565b611efc565b9050806020840283018581111561205657612055611f3d565b5b835b8181101561207f578061206b8882611f63565b845260208401935050602081019050612058565b5050509392505050565b600082601f83011261209e5761209d611e86565b5b60646120ab848285612029565b91505092915050565b600080610d2083850312156120cc576120cb611e7c565b5b60006120da85828601611fd8565b92505060a06120eb85828601612089565b9150509250929050565b60008115159050919050565b61210a816120f5565b82525050565b60006020820190506121256000830184612101565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561216557808201518184015260208101905061214a565b60008484015250505050565b600061217c8261212b565b6121868185612136565b9350612196818560208601612147565b61219f81611e8b565b840191505092915050565b600060208201905081810360008301526121c48184612171565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121f7826121cc565b9050919050565b612207816121ec565b82525050565b600060208201905061222260008301846121fe565b92915050565b600067ffffffffffffffff82111561224357612242611e9c565b5b602082029050602081019050919050565b600060ff82169050919050565b61226a81612254565b811461227557600080fd5b50565b60008135905061228781612261565b92915050565b60006122a061229b84612228565b611efc565b905080838252602082019050602084028301858111156122c3576122c2611f3d565b5b835b818110156122ec57806122d88882612278565b8452602084019350506020810190506122c5565b5050509392505050565b600082601f83011261230b5761230a611e86565b5b813561231b84826020860161228d565b91505092915050565b60006020828403121561233a57612339611e7c565b5b600082013567ffffffffffffffff81111561235857612357611e81565b5b612364848285016122f6565b91505092915050565b600060649050919050565b600081905092915050565b6000819050919050565b61239681611f42565b82525050565b60006123a8838361238d565b60208301905092915050565b6000602082019050919050565b6123ca8161236d565b6123d48184612378565b92506123df82612383565b8060005b838110156124105781516123f7878261239c565b9650612402836123b4565b9250506001810190506123e3565b505050505050565b6000610c808201905061242e60008301846123c1565b92915050565b6000819050826020601402820111156124505761244f611f3d565b5b92915050565b6000610280828403121561246d5761246c611e7c565b5b600061247b84828501612434565b91505092915050565b60006020828403121561249a57612499611e7c565b5b60006124a884828501611f63565b91505092915050565b6124ba81611f42565b82525050565b60006020820190506124d560008301846124b1565b92915050565b6000819050919050565b6124ee816124db565b82525050565b600060208201905061250960008301846124e5565b92915050565b600080fd5b600067ffffffffffffffff82111561252f5761252e611e9c565b5b61253882611e8b565b9050602081019050919050565b82818337600083830152505050565b600061256761256284612514565b611efc565b9050828152602081018484840111156125835761258261250f565b5b61258e848285612545565b509392505050565b600082601f8301126125ab576125aa611e86565b5b81356125bb848260208601612554565b91505092915050565b600067ffffffffffffffff8211156125df576125de611e9c565b5b6125e882611e8b565b9050602081019050919050565b6000612608612603846125c4565b611efc565b9050828152602081018484840111156126245761262361250f565b5b61262f848285612545565b509392505050565b600082601f83011261264c5761264b611e86565b5b813561265c8482602086016125f5565b91505092915050565b60008060008061036085870312156126805761267f611e7c565b5b600085013567ffffffffffffffff81111561269e5761269d611e81565b5b6126aa87828801612596565b94505060206126bb87828801611fd8565b93505060c06126cc87828801612434565b92505061034085013567ffffffffffffffff8111156126ee576126ed611e81565b5b6126fa87828801612637565b91505092959194509250565b6000819050919050565b61271981612706565b811461272457600080fd5b50565b60008135905061273681612710565b92915050565b6000806040838503121561275357612752611e7c565b5b600061276185828601612727565b925050602083013567ffffffffffffffff81111561278257612781611e81565b5b61278e85828601612637565b9150509250929050565b6000806000606084860312156127b1576127b0611e7c565b5b600084013567ffffffffffffffff8111156127cf576127ce611e81565b5b6127db86828701612596565b93505060206127ec86828701611f63565b925050604084013567ffffffffffffffff81111561280d5761280c611e81565b5b61281986828701612637565b9150509250925092565b60006020828403121561283957612838611e7c565b5b600082013567ffffffffffffffff81111561285757612856611e81565b5b61286384828501612637565b91505092915050565b61287581612706565b82525050565b61288481612254565b82525050565b600060608201905061289f600083018661286c565b6128ac602083018561286c565b6128b9604083018461287b565b949350505050565b600080604083850312156128d8576128d7611e7c565b5b600083013567ffffffffffffffff8111156128f6576128f5611e81565b5b61290285828601612596565b925050602061291385828601611f63565b9150509250929050565b6000602082019050612932600083018461286c565b92915050565b60008060c0838503121561294f5761294e611e7c565b5b600061295d85828601611f63565b925050602061296e85828601611fd8565b9150509250929050565b600060039050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6129ae81612978565b6129b88184612983565b92506129c38261298e565b8060005b838110156129f45781516129db878261239c565b96506129e683612998565b9250506001810190506129c7565b505050505050565b6000606082019050612a1160008301846129a5565b92915050565b600060208284031215612a2d57612a2c611e7c565b5b6000612a3b84828501612727565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6e6f74206e756c6c000000000000000000000000000000000000000000000000600082015250565b6000612aa9600883612136565b9150612ab482612a73565b602082019050919050565b60006020820190508181036000830152612ad881612a9c565b9050919050565b7f6e6f7420737472696e6700000000000000000000000000000000000000000000600082015250565b6000612b15600a83612136565b9150612b2082612adf565b602082019050919050565b60006020820190508181036000830152612b4481612b08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b8582611f42565b9150612b9083611f42565b9250828201905080821115612ba857612ba7612b4b565b5b92915050565b6000612bb982611f42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612beb57612bea612b4b565b5b600182019050919050565b7f6e6f74207261772076616c756500000000000000000000000000000000000000600082015250565b6000612c2c600d83612136565b9150612c3782612bf6565b602082019050919050565b60006020820190508181036000830152612c5b81612c1f565b9050919050565b7f6e6f7420626f6f6c000000000000000000000000000000000000000000000000600082015250565b6000612c98600883612136565b9150612ca382612c62565b602082019050919050565b60006020820190508181036000830152612cc781612c8b565b9050919050565b6000612cd982611f42565b9150612ce483611f42565b9250828203905081811115612cfc57612cfb612b4b565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b612d3881612d02565b612d428184612d0d565b9250612d4d82612d18565b8060005b83811015612d7e578151612d65878261239c565b9650612d7083612d22565b925050600181019050612d51565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b600081905092915050565b612dba81612d02565b612dc48184612da6565b9250612dcf82612d18565b8060005b83811015612e00578151612de7878261239c565b9650612df283612d22565b925050600181019050612dd3565b505050505050565b6000612e148383612db1565b60408301905092915050565b6000602082019050919050565b612e3681612d86565b612e408184612d91565b9250612e4b82612d9c565b8060005b83811015612e7c578151612e638782612e08565b9650612e6e83612e20565b925050600181019050612e4f565b505050505050565b6000600c9050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b612eba81612e84565b612ec48184612e8f565b9250612ecf82612e9a565b8060005b83811015612f00578151612ee7878261239c565b9650612ef283612ea4565b925050600181019050612ed3565b505050505050565b600061028082019050612f1e6000830187612d2f565b612f2b6040830186612e2d565b612f3860c0830185612d2f565b612f46610100830184612eb1565b95945050505050565b612f58816120f5565b8114612f6357600080fd5b50565b600081519050612f7581612f4f565b92915050565b600060208284031215612f9157612f90611e7c565b5b6000612f9f84828501612f66565b91505092915050565b7f696e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000612fde600d83612136565b9150612fe982612fa8565b602082019050919050565b6000602082019050818103600083015261300d81612fd1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061304e82611f42565b915061305983611f42565b92508261306957613068613014565b5b828204905092915050565b7f6e6f7420696e7400000000000000000000000000000000000000000000000000600082015250565b60006130aa600783612136565b91506130b582613074565b602082019050919050565b600060208201905081810360008301526130d98161309d565b9050919050565b60006130eb826124db565b91506130f6836124db565b9250828202613104816124db565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561313c5761313b612b4b565b5b828205841483151761315157613150612b4b565b5b5092915050565b7f6e6f74206f626a656374206f7220617272617900000000000000000000000000600082015250565b600061318e601383612136565b915061319982613158565b602082019050919050565b600060208201905081810360008301526131bd81613181565b9050919050565b60006080820190506131d9600083018761286c565b6131e6602083018661287b565b6131f3604083018561286c565b613200606083018461286c565b95945050505050565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b600061323f601883612136565b915061324a82613209565b602082019050919050565b6000602082019050818103600083015261326e81613232565b9050919050565b600081905092915050565b600061328b8261212b565b6132958185613275565b93506132a5818560208601612147565b80840191505092915050565b6000819050919050565b6132cc6132c782611f42565b6132b1565b82525050565b60006132de8285613280565b91506132ea82846132bb565b6020820191508190509392505050565b7f76616c756520646f65736e277420657869737400000000000000000000000000600082015250565b6000613330601383612136565b915061333b826132fa565b602082019050919050565b6000602082019050818103600083015261335f81613323565b9050919050565b7f77726f6e67207061746800000000000000000000000000000000000000000000600082015250565b600061339c600a83612136565b91506133a782613366565b602082019050919050565b600060208201905081810360008301526133cb8161338f565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156134295780860481111561340557613404612b4b565b5b60018516156134145780820291505b8081029050613422856133d2565b94506133e9565b94509492505050565b60008261344257600190506134fe565b8161345057600090506134fe565b816001811461346657600281146134705761349f565b60019150506134fe565b60ff84111561348257613481612b4b565b5b8360020a91508482111561349957613498612b4b565b5b506134fe565b5060208310610133831016604e8410600b84101617156134d45782820a9050838111156134cf576134ce612b4b565b5b6134fe565b6134e184848460016133df565b925090508184048111156134f8576134f7612b4b565b5b81810290505b9392505050565b600061351082611f42565b915061351b83611f42565b92506135487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613432565b905092915050565b600061355b82611f42565b915061356683611f42565b925082820261357481611f42565b9150828204841483151761358b5761358a612b4b565b5b5092915050565b600061359d82611f42565b9150600082036135b0576135af612b4b565b5b600182039050919050565b7f6e6f7420666c6f61740000000000000000000000000000000000000000000000600082015250565b60006135f1600983612136565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b600061365d601c83613275565b915061366882613627565b601c82019050919050565b6000819050919050565b61368e61368982612706565b613673565b82525050565b600061369f82613650565b91506136ab828461367d565b6020820191508190509291505056fea264697066735822122084a0583d858ee5faa1e0efd5e0a74c08d214891755c5cf2ec8b598d8ab0d835964736f6c63430008120033",
615
+ "linkReferences": {},
616
+ "deployedLinkReferences": {}
617
+ }