@bannynet/core-v6 0.0.1

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 (48) hide show
  1. package/README.md +53 -0
  2. package/SKILLS.md +94 -0
  3. package/deployments/banny-core-v5/arbitrum/Banny721TokenUriResolver.json +1809 -0
  4. package/deployments/banny-core-v5/arbitrum_sepolia/Banny721TokenUriResolver.json +1795 -0
  5. package/deployments/banny-core-v5/base/Banny721TokenUriResolver.json +1810 -0
  6. package/deployments/banny-core-v5/base_sepolia/Banny721TokenUriResolver.json +1796 -0
  7. package/deployments/banny-core-v5/ethereum/Banny721TokenUriResolver.json +1795 -0
  8. package/deployments/banny-core-v5/optimism/Banny721TokenUriResolver.json +1810 -0
  9. package/deployments/banny-core-v5/optimism_sepolia/Banny721TokenUriResolver.json +1796 -0
  10. package/deployments/banny-core-v5/sepolia/Banny721TokenUriResolver.json +1795 -0
  11. package/foundry.toml +22 -0
  12. package/package.json +53 -0
  13. package/remappings.txt +1 -0
  14. package/script/1.Fix.s.sol +290 -0
  15. package/script/Add.Denver.s.sol +75 -0
  16. package/script/AirdropOutfits.s.sol +2302 -0
  17. package/script/Deploy.s.sol +440 -0
  18. package/script/Drop1.s.sol +979 -0
  19. package/script/MigrationContractArbitrum.sol +494 -0
  20. package/script/MigrationContractArbitrum1.sol +170 -0
  21. package/script/MigrationContractArbitrum2.sol +204 -0
  22. package/script/MigrationContractArbitrum3.sol +174 -0
  23. package/script/MigrationContractArbitrum4.sol +478 -0
  24. package/script/MigrationContractBase1.sol +444 -0
  25. package/script/MigrationContractBase2.sol +175 -0
  26. package/script/MigrationContractBase3.sol +309 -0
  27. package/script/MigrationContractBase4.sol +350 -0
  28. package/script/MigrationContractBase5.sol +259 -0
  29. package/script/MigrationContractEthereum1.sol +468 -0
  30. package/script/MigrationContractEthereum2.sol +306 -0
  31. package/script/MigrationContractEthereum3.sol +349 -0
  32. package/script/MigrationContractEthereum4.sol +352 -0
  33. package/script/MigrationContractEthereum5.sol +354 -0
  34. package/script/MigrationContractEthereum6.sol +270 -0
  35. package/script/MigrationContractEthereum7.sol +439 -0
  36. package/script/MigrationContractEthereum8.sol +385 -0
  37. package/script/MigrationContractOptimism.sol +196 -0
  38. package/script/helpers/BannyverseDeploymentLib.sol +73 -0
  39. package/script/helpers/MigrationHelper.sol +155 -0
  40. package/script/outfit_drop/generate-migration.js +3441 -0
  41. package/script/outfit_drop/raw.json +43276 -0
  42. package/slither-ci.config.json +10 -0
  43. package/sphinx.lock +521 -0
  44. package/src/Banny721TokenUriResolver.sol +1288 -0
  45. package/src/interfaces/IBanny721TokenUriResolver.sol +137 -0
  46. package/test/Banny721TokenUriResolver.t.sol +669 -0
  47. package/test/BannyAttacks.t.sol +322 -0
  48. package/test/DecorateFlow.t.sol +1056 -0
@@ -0,0 +1,1810 @@
1
+ {
2
+ "format": "sphinx-sol-ct-artifact-1",
3
+ "merkleRoot": "0x291186de1f72bb2cc104c23dccdfa5d4a8a0b9f4cfb97b40f87ec3ef829ea948",
4
+ "address": "0x2de178adde33cf27d391e9506c7b6f8b2ddc5eff",
5
+ "sourceName": "src/Banny721TokenUriResolver.sol",
6
+ "contractName": "Banny721TokenUriResolver",
7
+ "chainId": "0x2105",
8
+ "abi": [
9
+ {
10
+ "inputs": [
11
+ {
12
+ "internalType": "string",
13
+ "name": "bannyBody",
14
+ "type": "string"
15
+ },
16
+ {
17
+ "internalType": "string",
18
+ "name": "defaultNecklace",
19
+ "type": "string"
20
+ },
21
+ {
22
+ "internalType": "string",
23
+ "name": "defaultMouth",
24
+ "type": "string"
25
+ },
26
+ {
27
+ "internalType": "string",
28
+ "name": "defaultStandardEyes",
29
+ "type": "string"
30
+ },
31
+ {
32
+ "internalType": "string",
33
+ "name": "defaultAlienEyes",
34
+ "type": "string"
35
+ },
36
+ {
37
+ "internalType": "address",
38
+ "name": "owner",
39
+ "type": "address"
40
+ },
41
+ {
42
+ "internalType": "address",
43
+ "name": "trustedForwarder",
44
+ "type": "address"
45
+ }
46
+ ],
47
+ "stateMutability": "nonpayable",
48
+ "type": "constructor"
49
+ },
50
+ {
51
+ "inputs": [],
52
+ "name": "BANNY_BODY",
53
+ "outputs": [
54
+ {
55
+ "internalType": "string",
56
+ "name": "",
57
+ "type": "string"
58
+ }
59
+ ],
60
+ "stateMutability": "view",
61
+ "type": "function"
62
+ },
63
+ {
64
+ "inputs": [],
65
+ "name": "DEFAULT_ALIEN_EYES",
66
+ "outputs": [
67
+ {
68
+ "internalType": "string",
69
+ "name": "",
70
+ "type": "string"
71
+ }
72
+ ],
73
+ "stateMutability": "view",
74
+ "type": "function"
75
+ },
76
+ {
77
+ "inputs": [],
78
+ "name": "DEFAULT_MOUTH",
79
+ "outputs": [
80
+ {
81
+ "internalType": "string",
82
+ "name": "",
83
+ "type": "string"
84
+ }
85
+ ],
86
+ "stateMutability": "view",
87
+ "type": "function"
88
+ },
89
+ {
90
+ "inputs": [],
91
+ "name": "DEFAULT_NECKLACE",
92
+ "outputs": [
93
+ {
94
+ "internalType": "string",
95
+ "name": "",
96
+ "type": "string"
97
+ }
98
+ ],
99
+ "stateMutability": "view",
100
+ "type": "function"
101
+ },
102
+ {
103
+ "inputs": [],
104
+ "name": "DEFAULT_STANDARD_EYES",
105
+ "outputs": [
106
+ {
107
+ "internalType": "string",
108
+ "name": "",
109
+ "type": "string"
110
+ }
111
+ ],
112
+ "stateMutability": "view",
113
+ "type": "function"
114
+ },
115
+ {
116
+ "inputs": [
117
+ {
118
+ "internalType": "address",
119
+ "name": "hook",
120
+ "type": "address"
121
+ },
122
+ {
123
+ "internalType": "uint256",
124
+ "name": "bannyBodyId",
125
+ "type": "uint256"
126
+ }
127
+ ],
128
+ "name": "assetIdsOf",
129
+ "outputs": [
130
+ {
131
+ "internalType": "uint256",
132
+ "name": "backgroundId",
133
+ "type": "uint256"
134
+ },
135
+ {
136
+ "internalType": "uint256[]",
137
+ "name": "outfitIds",
138
+ "type": "uint256[]"
139
+ }
140
+ ],
141
+ "stateMutability": "view",
142
+ "type": "function"
143
+ },
144
+ {
145
+ "inputs": [
146
+ {
147
+ "internalType": "address",
148
+ "name": "hook",
149
+ "type": "address"
150
+ },
151
+ {
152
+ "internalType": "uint256",
153
+ "name": "bannyBodyId",
154
+ "type": "uint256"
155
+ },
156
+ {
157
+ "internalType": "uint256",
158
+ "name": "backgroundId",
159
+ "type": "uint256"
160
+ },
161
+ {
162
+ "internalType": "uint256[]",
163
+ "name": "outfitIds",
164
+ "type": "uint256[]"
165
+ }
166
+ ],
167
+ "name": "decorateBannyWith",
168
+ "outputs": [],
169
+ "stateMutability": "nonpayable",
170
+ "type": "function"
171
+ },
172
+ {
173
+ "inputs": [
174
+ {
175
+ "internalType": "address",
176
+ "name": "forwarder",
177
+ "type": "address"
178
+ }
179
+ ],
180
+ "name": "isTrustedForwarder",
181
+ "outputs": [
182
+ {
183
+ "internalType": "bool",
184
+ "name": "",
185
+ "type": "bool"
186
+ }
187
+ ],
188
+ "stateMutability": "view",
189
+ "type": "function"
190
+ },
191
+ {
192
+ "inputs": [
193
+ {
194
+ "internalType": "address",
195
+ "name": "hook",
196
+ "type": "address"
197
+ },
198
+ {
199
+ "internalType": "uint256",
200
+ "name": "bannyBodyId",
201
+ "type": "uint256"
202
+ }
203
+ ],
204
+ "name": "lockOutfitChangesFor",
205
+ "outputs": [],
206
+ "stateMutability": "nonpayable",
207
+ "type": "function"
208
+ },
209
+ {
210
+ "inputs": [
211
+ {
212
+ "internalType": "address",
213
+ "name": "hook",
214
+ "type": "address"
215
+ },
216
+ {
217
+ "internalType": "uint256",
218
+ "name": "tokenId",
219
+ "type": "uint256"
220
+ }
221
+ ],
222
+ "name": "namesOf",
223
+ "outputs": [
224
+ {
225
+ "internalType": "string",
226
+ "name": "",
227
+ "type": "string"
228
+ },
229
+ {
230
+ "internalType": "string",
231
+ "name": "",
232
+ "type": "string"
233
+ },
234
+ {
235
+ "internalType": "string",
236
+ "name": "",
237
+ "type": "string"
238
+ }
239
+ ],
240
+ "stateMutability": "view",
241
+ "type": "function"
242
+ },
243
+ {
244
+ "inputs": [
245
+ {
246
+ "internalType": "address",
247
+ "name": "operator",
248
+ "type": "address"
249
+ },
250
+ {
251
+ "internalType": "address",
252
+ "name": "from",
253
+ "type": "address"
254
+ },
255
+ {
256
+ "internalType": "uint256",
257
+ "name": "tokenId",
258
+ "type": "uint256"
259
+ },
260
+ {
261
+ "internalType": "bytes",
262
+ "name": "data",
263
+ "type": "bytes"
264
+ }
265
+ ],
266
+ "name": "onERC721Received",
267
+ "outputs": [
268
+ {
269
+ "internalType": "bytes4",
270
+ "name": "",
271
+ "type": "bytes4"
272
+ }
273
+ ],
274
+ "stateMutability": "view",
275
+ "type": "function"
276
+ },
277
+ {
278
+ "inputs": [
279
+ {
280
+ "internalType": "address",
281
+ "name": "hook",
282
+ "type": "address"
283
+ },
284
+ {
285
+ "internalType": "uint256",
286
+ "name": "upc",
287
+ "type": "uint256"
288
+ }
289
+ ],
290
+ "name": "outfitLockedUntil",
291
+ "outputs": [
292
+ {
293
+ "internalType": "uint256",
294
+ "name": "",
295
+ "type": "uint256"
296
+ }
297
+ ],
298
+ "stateMutability": "view",
299
+ "type": "function"
300
+ },
301
+ {
302
+ "inputs": [],
303
+ "name": "owner",
304
+ "outputs": [
305
+ {
306
+ "internalType": "address",
307
+ "name": "",
308
+ "type": "address"
309
+ }
310
+ ],
311
+ "stateMutability": "view",
312
+ "type": "function"
313
+ },
314
+ {
315
+ "inputs": [],
316
+ "name": "renounceOwnership",
317
+ "outputs": [],
318
+ "stateMutability": "nonpayable",
319
+ "type": "function"
320
+ },
321
+ {
322
+ "inputs": [
323
+ {
324
+ "internalType": "uint256[]",
325
+ "name": "upcs",
326
+ "type": "uint256[]"
327
+ },
328
+ {
329
+ "internalType": "string[]",
330
+ "name": "names",
331
+ "type": "string[]"
332
+ }
333
+ ],
334
+ "name": "setProductNames",
335
+ "outputs": [],
336
+ "stateMutability": "nonpayable",
337
+ "type": "function"
338
+ },
339
+ {
340
+ "inputs": [
341
+ {
342
+ "internalType": "string",
343
+ "name": "baseUri",
344
+ "type": "string"
345
+ }
346
+ ],
347
+ "name": "setSvgBaseUri",
348
+ "outputs": [],
349
+ "stateMutability": "nonpayable",
350
+ "type": "function"
351
+ },
352
+ {
353
+ "inputs": [
354
+ {
355
+ "internalType": "uint256[]",
356
+ "name": "upcs",
357
+ "type": "uint256[]"
358
+ },
359
+ {
360
+ "internalType": "string[]",
361
+ "name": "svgContents",
362
+ "type": "string[]"
363
+ }
364
+ ],
365
+ "name": "setSvgContentsOf",
366
+ "outputs": [],
367
+ "stateMutability": "nonpayable",
368
+ "type": "function"
369
+ },
370
+ {
371
+ "inputs": [
372
+ {
373
+ "internalType": "uint256[]",
374
+ "name": "upcs",
375
+ "type": "uint256[]"
376
+ },
377
+ {
378
+ "internalType": "bytes32[]",
379
+ "name": "svgHashs",
380
+ "type": "bytes32[]"
381
+ }
382
+ ],
383
+ "name": "setSvgHashsOf",
384
+ "outputs": [],
385
+ "stateMutability": "nonpayable",
386
+ "type": "function"
387
+ },
388
+ {
389
+ "inputs": [],
390
+ "name": "svgBaseUri",
391
+ "outputs": [
392
+ {
393
+ "internalType": "string",
394
+ "name": "",
395
+ "type": "string"
396
+ }
397
+ ],
398
+ "stateMutability": "view",
399
+ "type": "function"
400
+ },
401
+ {
402
+ "inputs": [
403
+ {
404
+ "internalType": "uint256",
405
+ "name": "upc",
406
+ "type": "uint256"
407
+ }
408
+ ],
409
+ "name": "svgHashOf",
410
+ "outputs": [
411
+ {
412
+ "internalType": "bytes32",
413
+ "name": "",
414
+ "type": "bytes32"
415
+ }
416
+ ],
417
+ "stateMutability": "view",
418
+ "type": "function"
419
+ },
420
+ {
421
+ "inputs": [
422
+ {
423
+ "internalType": "address",
424
+ "name": "hook",
425
+ "type": "address"
426
+ },
427
+ {
428
+ "internalType": "uint256",
429
+ "name": "tokenId",
430
+ "type": "uint256"
431
+ },
432
+ {
433
+ "internalType": "bool",
434
+ "name": "shouldDressBannyBody",
435
+ "type": "bool"
436
+ },
437
+ {
438
+ "internalType": "bool",
439
+ "name": "shouldIncludeBackgroundOnBannyBody",
440
+ "type": "bool"
441
+ }
442
+ ],
443
+ "name": "svgOf",
444
+ "outputs": [
445
+ {
446
+ "internalType": "string",
447
+ "name": "",
448
+ "type": "string"
449
+ }
450
+ ],
451
+ "stateMutability": "view",
452
+ "type": "function"
453
+ },
454
+ {
455
+ "inputs": [
456
+ {
457
+ "internalType": "address",
458
+ "name": "hook",
459
+ "type": "address"
460
+ },
461
+ {
462
+ "internalType": "uint256",
463
+ "name": "tokenId",
464
+ "type": "uint256"
465
+ }
466
+ ],
467
+ "name": "tokenUriOf",
468
+ "outputs": [
469
+ {
470
+ "internalType": "string",
471
+ "name": "",
472
+ "type": "string"
473
+ }
474
+ ],
475
+ "stateMutability": "view",
476
+ "type": "function"
477
+ },
478
+ {
479
+ "inputs": [
480
+ {
481
+ "internalType": "address",
482
+ "name": "newOwner",
483
+ "type": "address"
484
+ }
485
+ ],
486
+ "name": "transferOwnership",
487
+ "outputs": [],
488
+ "stateMutability": "nonpayable",
489
+ "type": "function"
490
+ },
491
+ {
492
+ "inputs": [],
493
+ "name": "trustedForwarder",
494
+ "outputs": [
495
+ {
496
+ "internalType": "address",
497
+ "name": "",
498
+ "type": "address"
499
+ }
500
+ ],
501
+ "stateMutability": "view",
502
+ "type": "function"
503
+ },
504
+ {
505
+ "inputs": [
506
+ {
507
+ "internalType": "address",
508
+ "name": "hook",
509
+ "type": "address"
510
+ },
511
+ {
512
+ "internalType": "uint256",
513
+ "name": "backgroundId",
514
+ "type": "uint256"
515
+ }
516
+ ],
517
+ "name": "userOf",
518
+ "outputs": [
519
+ {
520
+ "internalType": "uint256",
521
+ "name": "",
522
+ "type": "uint256"
523
+ }
524
+ ],
525
+ "stateMutability": "view",
526
+ "type": "function"
527
+ },
528
+ {
529
+ "inputs": [
530
+ {
531
+ "internalType": "address",
532
+ "name": "hook",
533
+ "type": "address"
534
+ },
535
+ {
536
+ "internalType": "uint256",
537
+ "name": "outfitId",
538
+ "type": "uint256"
539
+ }
540
+ ],
541
+ "name": "wearerOf",
542
+ "outputs": [
543
+ {
544
+ "internalType": "uint256",
545
+ "name": "",
546
+ "type": "uint256"
547
+ }
548
+ ],
549
+ "stateMutability": "view",
550
+ "type": "function"
551
+ },
552
+ {
553
+ "anonymous": false,
554
+ "inputs": [
555
+ {
556
+ "indexed": true,
557
+ "internalType": "address",
558
+ "name": "hook",
559
+ "type": "address"
560
+ },
561
+ {
562
+ "indexed": true,
563
+ "internalType": "uint256",
564
+ "name": "bannyBodyId",
565
+ "type": "uint256"
566
+ },
567
+ {
568
+ "indexed": true,
569
+ "internalType": "uint256",
570
+ "name": "backgroundId",
571
+ "type": "uint256"
572
+ },
573
+ {
574
+ "indexed": false,
575
+ "internalType": "uint256[]",
576
+ "name": "outfitIds",
577
+ "type": "uint256[]"
578
+ },
579
+ {
580
+ "indexed": false,
581
+ "internalType": "address",
582
+ "name": "caller",
583
+ "type": "address"
584
+ }
585
+ ],
586
+ "name": "DecorateBanny",
587
+ "type": "event"
588
+ },
589
+ {
590
+ "anonymous": false,
591
+ "inputs": [
592
+ {
593
+ "indexed": true,
594
+ "internalType": "address",
595
+ "name": "previousOwner",
596
+ "type": "address"
597
+ },
598
+ {
599
+ "indexed": true,
600
+ "internalType": "address",
601
+ "name": "newOwner",
602
+ "type": "address"
603
+ }
604
+ ],
605
+ "name": "OwnershipTransferred",
606
+ "type": "event"
607
+ },
608
+ {
609
+ "anonymous": false,
610
+ "inputs": [
611
+ {
612
+ "indexed": true,
613
+ "internalType": "uint256",
614
+ "name": "upc",
615
+ "type": "uint256"
616
+ },
617
+ {
618
+ "indexed": false,
619
+ "internalType": "string",
620
+ "name": "name",
621
+ "type": "string"
622
+ },
623
+ {
624
+ "indexed": false,
625
+ "internalType": "address",
626
+ "name": "caller",
627
+ "type": "address"
628
+ }
629
+ ],
630
+ "name": "SetProductName",
631
+ "type": "event"
632
+ },
633
+ {
634
+ "anonymous": false,
635
+ "inputs": [
636
+ {
637
+ "indexed": false,
638
+ "internalType": "string",
639
+ "name": "baseUri",
640
+ "type": "string"
641
+ },
642
+ {
643
+ "indexed": false,
644
+ "internalType": "address",
645
+ "name": "caller",
646
+ "type": "address"
647
+ }
648
+ ],
649
+ "name": "SetSvgBaseUri",
650
+ "type": "event"
651
+ },
652
+ {
653
+ "anonymous": false,
654
+ "inputs": [
655
+ {
656
+ "indexed": true,
657
+ "internalType": "uint256",
658
+ "name": "upc",
659
+ "type": "uint256"
660
+ },
661
+ {
662
+ "indexed": false,
663
+ "internalType": "string",
664
+ "name": "svgContent",
665
+ "type": "string"
666
+ },
667
+ {
668
+ "indexed": false,
669
+ "internalType": "address",
670
+ "name": "caller",
671
+ "type": "address"
672
+ }
673
+ ],
674
+ "name": "SetSvgContent",
675
+ "type": "event"
676
+ },
677
+ {
678
+ "anonymous": false,
679
+ "inputs": [
680
+ {
681
+ "indexed": true,
682
+ "internalType": "uint256",
683
+ "name": "upc",
684
+ "type": "uint256"
685
+ },
686
+ {
687
+ "indexed": true,
688
+ "internalType": "bytes32",
689
+ "name": "svgHash",
690
+ "type": "bytes32"
691
+ },
692
+ {
693
+ "indexed": false,
694
+ "internalType": "address",
695
+ "name": "caller",
696
+ "type": "address"
697
+ }
698
+ ],
699
+ "name": "SetSvgHash",
700
+ "type": "event"
701
+ },
702
+ {
703
+ "inputs": [],
704
+ "name": "Banny721TokenUriResolver_CantAccelerateTheLock",
705
+ "type": "error"
706
+ },
707
+ {
708
+ "inputs": [],
709
+ "name": "Banny721TokenUriResolver_ContentsAlreadyStored",
710
+ "type": "error"
711
+ },
712
+ {
713
+ "inputs": [],
714
+ "name": "Banny721TokenUriResolver_ContentsMismatch",
715
+ "type": "error"
716
+ },
717
+ {
718
+ "inputs": [],
719
+ "name": "Banny721TokenUriResolver_HashAlreadyStored",
720
+ "type": "error"
721
+ },
722
+ {
723
+ "inputs": [],
724
+ "name": "Banny721TokenUriResolver_HashNotFound",
725
+ "type": "error"
726
+ },
727
+ {
728
+ "inputs": [],
729
+ "name": "Banny721TokenUriResolver_HeadAlreadyAdded",
730
+ "type": "error"
731
+ },
732
+ {
733
+ "inputs": [],
734
+ "name": "Banny721TokenUriResolver_OutfitChangesLocked",
735
+ "type": "error"
736
+ },
737
+ {
738
+ "inputs": [],
739
+ "name": "Banny721TokenUriResolver_SuitAlreadyAdded",
740
+ "type": "error"
741
+ },
742
+ {
743
+ "inputs": [],
744
+ "name": "Banny721TokenUriResolver_UnauthorizedBackground",
745
+ "type": "error"
746
+ },
747
+ {
748
+ "inputs": [],
749
+ "name": "Banny721TokenUriResolver_UnauthorizedBannyBody",
750
+ "type": "error"
751
+ },
752
+ {
753
+ "inputs": [],
754
+ "name": "Banny721TokenUriResolver_UnauthorizedOutfit",
755
+ "type": "error"
756
+ },
757
+ {
758
+ "inputs": [],
759
+ "name": "Banny721TokenUriResolver_UnauthorizedTransfer",
760
+ "type": "error"
761
+ },
762
+ {
763
+ "inputs": [],
764
+ "name": "Banny721TokenUriResolver_UnorderedCategories",
765
+ "type": "error"
766
+ },
767
+ {
768
+ "inputs": [],
769
+ "name": "Banny721TokenUriResolver_UnrecognizedBackground",
770
+ "type": "error"
771
+ },
772
+ {
773
+ "inputs": [],
774
+ "name": "Banny721TokenUriResolver_UnrecognizedCategory",
775
+ "type": "error"
776
+ },
777
+ {
778
+ "inputs": [],
779
+ "name": "Banny721TokenUriResolver_UnrecognizedProduct",
780
+ "type": "error"
781
+ },
782
+ {
783
+ "inputs": [
784
+ {
785
+ "internalType": "address",
786
+ "name": "owner",
787
+ "type": "address"
788
+ }
789
+ ],
790
+ "name": "OwnableInvalidOwner",
791
+ "type": "error"
792
+ },
793
+ {
794
+ "inputs": [
795
+ {
796
+ "internalType": "address",
797
+ "name": "account",
798
+ "type": "address"
799
+ }
800
+ ],
801
+ "name": "OwnableUnauthorizedAccount",
802
+ "type": "error"
803
+ },
804
+ {
805
+ "inputs": [],
806
+ "name": "ReentrancyGuardReentrantCall",
807
+ "type": "error"
808
+ }
809
+ ],
810
+ "args": [],
811
+ "solcInputHash": "c1db2b8aac13546e",
812
+ "receipt": {
813
+ "type": "0x2",
814
+ "status": "0x1",
815
+ "cumulativeGasUsed": "0x2377466",
816
+ "logs": [
817
+ {
818
+ "address": "0xa2ea7657440875bf916cbfc0cfa88f13e38ad463",
819
+ "topics": [
820
+ "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d",
821
+ "0x000000000000000000000000755ff2f75a0a586ecfa2b9a3c959cb662458a105",
822
+ "0x000000000000000000000000656ff6398c45adca3fe6e5f8fd53aebd4f318017",
823
+ "0xff6abcb6e1ff55d12814f6f023458c1f596d879804e3dff11eb264a25281ee23"
824
+ ],
825
+ "data": "0x0000000000000000000000000000000000000000000000000000000000000000",
826
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
827
+ "blockNumber": "0x2567aec",
828
+ "blockTimestamp": "0x693752bb",
829
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
830
+ "transactionIndex": "0x55",
831
+ "logIndex": "0x289",
832
+ "removed": false
833
+ },
834
+ {
835
+ "address": "0x9e2a10ab3bd22831f19d02c648bc2cb49b127450",
836
+ "topics": [
837
+ "0xb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e"
838
+ ],
839
+ "data": "0x000000000000000000000000656ff6398c45adca3fe6e5f8fd53aebd4f3180170000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c025f42414e5f5245534f4c5645525f5f000000000000000000000000000000000060a060405234620007685762006382803803806200001d816200076c565b928339810160e082820312620007685781516001600160401b03908181116200076857826200004e91850162000792565b602093848101518381116200076857846200006b91830162000792565b9360408201518481116200076857816200008791840162000792565b6060830151858111620007685782620000a291850162000792565b916080840151908682116200076857620000be91850162000792565b92620000db60c0620000d360a0840162000802565b920162000802565b906001600160a01b0390811690811562000750575f548260018060a01b03198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36080526001958680558451868111620003f657600954958887811c9716801562000745575b8a881014620003d7578190601f97888111620006f1575b508a9088831160011462000689575f926200067d575b50505f19600383901b1c191690881b176009555b805190868211620003f657600754908882811c9216801562000672575b8a831014620003d75781878493116200061e575b508990878311600114620005b8575f92620005ac575b50505f19600383901b1c191690871b176007555b805190858211620003f657600654908782811c92168015620005a1575b89831014620003d75781868493116200054d575b508890868311600114620004e7575f92620004db575b50505f19600383901b1c191690861b176006555b805190848211620003f657600854908682811c92168015620004d0575b88831014620003d75781858493116200047c575b50879085831160011462000416575f926200040a575b50505f19600383901b1c191690851b176008555b8051928311620003f65760059485548581811c91168015620003eb575b82821014620003d75783811162000391575b50809284116001146200032a57509282939183925f946200031e575b50501b915f199060031b1c19161790555b604051615b6a9081620008188239608051818181610ad601528181610cae015261590a0152f35b015192505f80620002e6565b919083601f198116875f52845f20945f905b888383106200037657505050106200035d575b505050811b019055620002f7565b01515f1960f88460031b161c191690555f80806200034f565b8587015188559096019594850194879350908101906200033c565b865f52815f2084808701891c820192848810620003cd575b01881c019086905b828110620003c1575050620002ca565b5f8155018690620003b1565b92508192620003a9565b634e487b7160e01b5f52602260045260245ffd5b90607f1690620002b8565b634e487b7160e01b5f52604160045260245ffd5b015190505f8062000287565b90879350601f1983169160085f52895f20925f5b8b8282106200046557505084116200044c575b505050811b016008556200029b565b01515f1960f88460031b161c191690555f80806200043d565b8385015186558b979095019493840193016200042a565b90915060085f52875f208580850160051c8201928a8610620004c6575b918991869594930160051c01915b828110620004b757505062000271565b5f8155859450899101620004a7565b9250819262000499565b91607f16916200025d565b015190505f806200022c565b90889350601f1983169160065f528a5f20925f5b8c8282106200053657505084116200051d575b505050811b0160065562000240565b01515f1960f88460031b161c191690555f80806200050e565b8385015186558c97909501949384019301620004fb565b90915060065f52885f208680850160051c8201928b861062000597575b918a91869594930160051c01915b8281106200058857505062000216565b5f81558594508a910162000578565b925081926200056a565b91607f169162000202565b015190505f80620001d1565b90899350601f1983169160075f528b5f20925f5b8d828210620006075750508411620005ee575b505050811b01600755620001e5565b01515f1960f88460031b161c191690555f8080620005df565b8385015186558d97909501949384019301620005cc565b90915060075f52895f208780850160051c8201928c861062000668575b918b91869594930160051c01915b82811062000659575050620001bb565b5f81558594508b910162000649565b925081926200063b565b91607f1691620001a7565b015190505f8062000176565b908a9350601f1983169160095f528c5f20928d5f905b828210620006d95750508411620006c0575b505050811b016009556200018a565b01515f1960f88460031b161c191690555f8080620006b1565b8385015186558e979095019493840193018e6200069f565b90915060095f528a5f208880850160051c8201928d86106200073b575b918c91869594930160051c01915b8281106200072c57505062000160565b5f81558594508c91016200071c565b925081926200070e565b96607f169662000149565b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b03811183821017620003f657604052565b919080601f84011215620007685782516001600160401b038111620003f657602090620007c8601f8201601f191683016200076c565b9281845282828701011162000768575f5b818110620007ee5750825f9394955001015290565b8581018301518482018401528201620007d9565b51906001600160a01b0382168203620007685756fe60806040526004361015610011575f80fd5b5f3560e01c806257bfdd146101b357806305b2ae1b146101ae578063150b7a02146101a9578063187be308146101a457806318ab522d1461019f5780632150a1381461019a5780632580833d1461019557806331a290ac14610190578063572b6c051461018b57806359a81d91146101865780635e703e71146101815780636aff31dd1461017c578063715018a61461017757806379a2696e146101725780637da0a8771461016d578063875e4bea146101685780638da5cb5b14610163578063a0122c091461015e578063a22d0dd514610159578063b03a3eab14610154578063b1fa9e7b1461014f578063b3fa27831461014a578063c06e7bc714610145578063c122804614610140578063d756227e1461013b5763f2fde38b14610136575f80fd5b611371565b6112a1565b611207565b6110b9565b611014565b610fe9565b610f45565b610f00565b610e64565b610e3f565b610cd2565b610c8f565b610c5c565b610bf8565b610bce565b610ba2565b610afd565b610aa7565b61093f565b6107db565b610736565b6106bf565b610629565b6105ab565b610490565b610459565b90600182811c921680156101e6575b60208310146101d257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101c7565b634e487b7160e01b5f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761022157604052565b6101f0565b6020810190811067ffffffffffffffff82111761022157604052565b6040810190811067ffffffffffffffff82111761022157604052565b6060810190811067ffffffffffffffff82111761022157604052565b90601f8019910116810190811067ffffffffffffffff82111761022157604052565b604051905f82600354916102af836101b8565b8083529260209060019081811690811561033b57506001146102dc575b50506102da9250038361027a565b565b91509260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b935f925b82841061032357506102da9450505081016020015f806102cc565b85548885018301529485019487945092810192610308565b915050602092506102da94915060ff191682840152151560051b8201015f806102cc565b9060405191825f8254610371816101b8565b908184526020946001916001811690815f146103dd575060011461039f575b5050506102da9250038361027a565b5f90815285812095935091905b8183106103c55750506102da93508201015f8080610390565b855488840185015294850194879450918301916103ac565b925050506102da94925060ff191682840152151560051b8201015f8080610390565b5f5b8381106104105750505f910152565b8181015183820152602001610401565b90602091610439815180928185528580860191016103ff565b601f01601f1916010190565b906020610456928181520190610420565b90565b3461048c575f36600319011261048c5761048861047461029c565b604051918291602083526020830190610420565b0390f35b5f80fd5b3461048c575f36600319011261048c576040515f6008546104b0816101b8565b8084529060209060019081811690811561054257506001146104e9575b610488856104dd8187038261027a565b60405191829182610445565b60085f90815293507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83851061052f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610513565b869550610488969350602092506104dd94915060ff191682840152151560051b82010192936104cd565b6001600160a01b0381160361048c57565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020838186019501011161048c57565b3461048c57608036600319011261048c576004356105c88161056c565b6105d360243561056c565b60643567ffffffffffffffff811161048c576105f390369060040161057d565b50506001600160a01b033091160361061757604051630a85bd0160e11b8152602090f35b604051633b2c6aa160e21b8152600490fd5b3461048c57604036600319011261048c576004356106468161056c565b6001600160a01b036024359161065c8382612f6d565b16805f52600260205260405f20825f5260205260405f20549162093a804201928342116106ba5783106106a8576106a5915f52600260205260405f20905f5260205260405f2090565b55005b604051631057c89560e21b8152600490fd5b611405565b3461048c57604036600319011261048c576106e86004356106df8161056c565b60243590611518565b90604051918291604083019083526020906040602085015282518091526020606085019301915f5b82811061071f57505050500390f35b835185528695509381019392810192600101610710565b3461048c575f36600319011261048c576040515f600554610756816101b8565b80845290602090600190818116908115610542575060011461078257610488856104dd8187038261027a565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8385106107c8575050505081016020016104dd826104886104cd565b80548686018401529382019381016107ac565b3461048c575f36600319011261048c576040515f6006546107fb816101b8565b80845290602090600190818116908115610542575060011461082757610488856104dd8187038261027a565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b83851061086d575050505081016020016104dd826104886104cd565b8054868601840152938201938101610851565b604051906102da82610204565b67ffffffffffffffff81116102215760051b60200190565b92916108b08261088d565b916108be604051938461027a565b829481845260208094019160051b810192831161048c57905b8282106108e45750505050565b813581529083019083016108d7565b9080601f8301121561048c57816020610456933591016108a5565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020808501948460051b01011161048c57565b3461048c5760408060031936011261048c5760049067ffffffffffffffff823581811161048c5761097390369085016108f3565b9060243590811161048c5761098b903690850161090e565b9290915f5b8151811015610aa5576109a381836114f6565b516109b96109b28388886115e2565b369161126b565b6109d36109ce835f52600d60205260405f2090565b611624565b610a95576109e9825f52600460205260405f2090565b548015610a855785516020810190610a1381610a05848761162e565b03601f19810183528261027a565b51902003610a7557907faeb631726b45aa3f6b09da79f7af03a9784614901f61a967ed84d63c37b7edc7610a6c83610a5f60019695610a5a865f52600d60205260405f2090565b6116f3565b87519182913390836117c3565b0390a201610990565b845163d8e55daf60e01b81528890fd5b85516338d87d3960e01b81528990fd5b845163444244f560e01b81528890fd5b005b3461048c57602036600319011261048c576020600435610ac68161056c565b6001600160a01b039060405191807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b3461048c575f36600319011261048c576040515f600954610b1d816101b8565b808452906020906001908181169081156105425750600114610b4957610488856104dd8187038261027a565b60095f90815293507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b838510610b8f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610b73565b3461048c57604036600319011261048c57610488610474600435610bc58161056c565b6024359061209c565b3461048c57602036600319011261048c576004355f526004602052602060405f2054604051908152f35b3461048c575f36600319011261048c57610c1061443b565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461048c57604036600319011261048c576020610c87600435610c7e8161056c565b60243590612a0e565b604051908152f35b3461048c575f36600319011261048c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461048c5760208060031936011261048c5767ffffffffffffffff60043581811161048c57610d0590369060040161057d565b9091610d0f61443b565b811161022157610d2981610d246003546101b8565b61165b565b5f92601f8211600114610d9d5750610d7881807f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f955f91610d92575b508160011b915f199060031b1c19161790565b6003555b610d8d604051928392339184612a69565b0390a1005b90508401355f610d65565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b868210610e27575050827f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f9510610e0e575b5050600181811b01600355610d7c565b8301355f19600384901b60f8161c191690555f80610dfe565b80600184958294958901358155019401920190610dcc565b3461048c575f36600319011261048c5760206001600160a01b035f5416604051908152f35b3461048c57604036600319011261048c57610eda600435610e848161056c565b610488610e9e610e97602435809461319a565b809361417f565b91610ee8610ec563ffffffff610ebd62ffffff61010086015116613790565b935116613990565b91604051958695606087526060870190610420565b908582036020870152610420565b908382036040850152610420565b8015150361048c57565b3461048c57608036600319011261048c57610488610474600435610f238161056c565b604435610f2f81610ef6565b60643591610f3c83610ef6565b60243590612bb6565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c57610f779036906004016108f3565b9060243590811161048c573660238201121561048c578060040135610f9b8161088d565b91610fa9604051938461027a565b8183526020916024602085019160051b8301019136831161048c57602401905b828210610fda57610aa58587612cb8565b81358152908301908301610fc9565b3461048c57604036600319011261048c576020610c8760043561100b8161056c565b60243590612d4f565b3461048c575f36600319011261048c576040515f600754611034816101b8565b80845290602090600190818116908115610542575060011461106057610488856104dd8187038261027a565b60075f90815293507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b8385106110a6575050505081016020016104dd826104886104cd565b805486860184015293820193810161108a565b3461048c57608036600319011261048c576004356110d68161056c565b6044359060243560643567ffffffffffffffff811161048c576110fd90369060040161090e565b906002600154146111f55760026001556111178385612f6d565b6001600160a01b039182851692835f526002602052604096875f20865f52602052875f205442106111e45761114a615900565b97838151918083528201527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161048c57866111d5967f6a68946ba06488db8585d7c7637fa954b574035fe15720ea760125ef8601725883606086958a6111db9f996111ce9a8c60051b8093868601371660208301528101030190a48587614b47565b36916108a5565b91614dfa565b610aa560018055565b8751632d2f65a360e11b8152600490fd5b604051633ee5aeb560e01b8152600490fd5b3461048c57604036600319011261048c576001600160a01b0360043561122c8161056c565b165f52600260205260405f206024355f52602052602060405f2054604051908152f35b67ffffffffffffffff811161022157601f01601f191660200190565b9291926112778261124f565b91611285604051938461027a565b82948184528183011161048c578281602093845f960137010152565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c576112d39036906004016108f3565b60249060243583811161048c573660238201121561048c578060040135926112fa8461088d565b93611308604051958661027a565b8085526020956024602087019260051b8501019336851161048c5760248101925b85841061133a57610aa58888612dde565b833583811161048c5782013660438201121561048c5789916113668392369060448a820135910161126b565b815201930192611329565b3461048c57602036600319011261048c5760043561138e8161056c565b61139661443b565b6001600160a01b038091169081156113ed575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52601160045260245ffd5b90600282018092116106ba57565b90602082018092116106ba57565b90600182018092116106ba57565b919082018092116106ba57565b90604051918281549182825260209260208301915f5260205f20935f905b828210611484575050506102da9250038361027a565b85548452600195860195889550938101939091019061146e565b906114a88261088d565b6114b5604051918261027a565b82815280926114c6601f199161088d565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b8051156114f15760200190565b6114d0565b80518210156114f15760209160051b010190565b5f1981146106ba5760010190565b9190915f926001600160a01b0382165f52600a60205260405f20815f5260205261154460405f20611450565b9361154f855161149e565b915f915f5b875181101561159d578061156a6001928a6114f6565b5184611576828a612d4f565b14611583575b5001611554565b61159661158f8761150a565b96886114f6565b525f61157c565b5095509050929190926115c1826001600160a01b03165f52600b60205260405f2090565b815f526020526115d660405f20548093612a0e565b146115de5750565b9250565b91908110156114f15760051b81013590601e198136030182121561048c57019081359167ffffffffffffffff831161048c57602001823603811361048c579190565b61045690546101b8565b90611641602092828151948592016103ff565b0190565b818110611650575050565b5f8155600101611645565b90601f8211611668575050565b6102da9160035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c830193106116b1575b601f0160051c0190611645565b90915081906116a4565b9190601f81116116ca57505050565b6102da925f5260205f20906020601f840160051c830193106116b157601f0160051c0190611645565b919091825167ffffffffffffffff81116102215761171b8161171584546101b8565b846116bb565b602080601f831160011461175c5750819061174d9394955f92611751575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611739565b90601f19831695611770855f5260205f2090565b925f905b8882106117ab57505083600195969710611793575b505050811b019055565b01515f1960f88460031b161c191690555f8080611789565b80600185968294968601518155019501930190611774565b906001600160a01b036117e3602092959495604085526040850190610420565b9416910152565b604051906117f782610226565b5f8252565b6040519061180982610242565b600f82527f2261747472696275746573223a205b00000000000000000000000000000000006020830152565b6040519061184282610242565b600e82527f226f7574666974496473223a205b0000000000000000000000000000000000006020830152565b9060405191826060515f5b8181106118ad57509060206102da936118a182948401918383015f81528151948592016103ff565b0103808552018361027a565b6020919250806080015182828801015201908491611879565b60206102da9193929360405194816118e787935180928680870191016103ff565b82016118a1825180938680850191016103ff565b5f198101919082116106ba57565b906102da6021604051846119278296518092602080860191016103ff565b8101600b60fa1b602082015203600181018552018361027a565b906102da60226040518461195f8296518092602080860191016103ff565b810161174b60f21b602082015203600281018552018361027a565b6040906102da92949394825195869160209361199e815180928780880191016103ff565b83017f7b2274726169745f74797065223a202200000000000000000000000000000000858201526119d882518093876030850191016103ff565b016c111610113b30b63ab2911d101160991b6030820152611a028251809386603d850191016103ff565b0162089f4b60ea1b603d820152039081018552018361027a565b906102da604a60405184611a3a8296518092602080860191016103ff565b81017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022227d2c00000000000000000000000000000000000000000000604082015203602a81018552018361027a565b60316102da919392936040519481611ab88793518092602080870191016103ff565b82017f226261636b67726f756e644964223a20000000000000000000000000000000006020820152611af48251809360206030850191016103ff565b01600b60fa1b603082015203601181018552018361027a565b604a6102da919392936040519481611b2f8793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022000000000000000000000000000000000000000000000000006040820152611b918251809360206047850191016103ff565b0162089f4b60ea1b604782015203602a81018552018361027a565b60376102da919392936040519481611bce8793518092602080870191016103ff565b82017f226368616e6765734c6f636b6564556e74696c223a20000000000000000000006020820152611c0a8251809360206036850191016103ff565b01600b60fa1b603682015203601781018552018361027a565b60526102da919392936040519481611c458793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224368616e676573206c6f636b6564207560208201527f6e74696c222c202276616c7565223a20000000000000000000000000000000006040820152611ca78251809360206050850191016103ff565b01611f4b60f21b605082015203603281018552018361027a565b906102da603660405180947f22776f726e427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b8101600b60fa1b603582015203601681018552018361027a565b604b6102da919392936040519481611d428793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022576f726e2062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b01611f4b60f21b604982015203602b81018552018361027a565b906102da603660405180947f2275736564427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b604b6102da919392936040519481611e118793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022557365642062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b81601f8201121561048c578051611e758161124f565b92611e83604051948561027a565b8184526020828401011161048c5761045691602080850191016103ff565b9060208282031261048c57815167ffffffffffffffff811161048c576104569201611e5f565b6040513d5f823e3d90fd5b9081602091031261048c575190565b9081606091031261048c57805191604060208301519201516104568161056c565b612030600392959460a46102da956040519885611f298b975180926020808b0191016103ff565b86017f7b2274726169745f74797065223a202250726f64756374206e616d65222c202260208201527f76616c7565223a202200000000000000000000000000000000000000000000006040820152611f8b8251809360206049850191016103ff565b017f227d2c207b2274726169745f74797065223a202243617465676f7279206e616d60498201527f65222c202276616c7565223a20220000000000000000000000000000000000006069820152611fec8251809360206077850191016103ff565b017f227d2c207b2274726169745f74797065223a2022546f74616c20737570706c7960778201526c111610113b30b63ab2911d101160991b6097820152019061162e565b62227d5d60e81b815203601c1981018552018361027a565b906102da603d60405180947f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261208c81518092602086860191016103ff565b810103601d81018552018361027a565b6120a6828261319a565b9163ffffffff6120ba845163ffffffff1690565b1615612a03576120c86117ea565b506120d16117fc565b610100928385019462ffffff94856120ec885162ffffff1690565b16156128345750612116612110612107835163ffffffff1690565b63ffffffff1690565b836139e7565b9182516127f8575b60018661212e895162ffffff1690565b16036127ca576121626121418683612a0e565b9461215c612156612151886132bc565b611daa565b966132bc565b90611def565b955b8351156126a857509060606001600160a01b0394939260046040518097819363043c358d60e11b8352165afa9384156126a3575f905f9561266e575b5081516121b29063ffffffff16613990565b9688516121c19062ffffff1690565b62ffffff166121cf90613790565b97606084019889516121e49063ffffffff1690565b63ffffffff166121f3906132bc565b916121fd93611f02565b94612208838861417f565b9783516122189063ffffffff1690565b63ffffffff1661222790613990565b9980516122369062ffffff1690565b62ffffff1661224490613790565b9861224e906132bc565b91855161225e9063ffffffff1690565b63ffffffff1661226d906132bc565b915161227d9062ffffff166132bc565b905161228e9063ffffffff166132bc565b9160408701516122a19063ffffffff1690565b63ffffffff166122b0906132bc565b9360208801516122cc906cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff166122e4906132bc565b956122ee906132bc565b966122f8906132bc565b610120989098015161230c9060ff166132bc565b9860405180916020820161231f9161162e565b03601f1981018252612331908261027a565b61233a90614353565b9b6040519e8f9e8f602001612373906009907f7b226e616d65223a22000000000000000000000000000000000000000000000081520190565b61237c9161162e565b7f222c202270726f647563744e616d65223a20220000000000000000000000000081526013016123ab9161162e565b7f222c202263617465676f72794e616d65223a202200000000000000000000000081526014016123da9161162e565b7f222c2022746f6b656e4964223a200000000000000000000000000000000000008152600e016124099161162e565b7f2c2022757063223a20000000000000000000000000000000000000000000000081526009016124389161162e565b7f2c202263617465676f7279223a200000000000000000000000000000000000008152600e016124679161162e565b7f2c2022737570706c79223a2000000000000000000000000000000000000000008152600c016124969161162e565b7f2c202272656d61696e696e67223a2000000000000000000000000000000000008152600f016124c59161162e565b7f2c20227072696365223a200000000000000000000000000000000000000000008152600b016124f49161162e565b7f2c2022646563696d616c73223a200000000000000000000000000000000000008152600e016125239161162e565b7f2c202263757272656e6379223a200000000000000000000000000000000000008152600e016125529161162e565b7f2c2022646973636f756e74223a200000000000000000000000000000000000008152600e016125819161162e565b61016160f51b81526002016125959161162e565b61259e9161162e565b7f2c20226465736372697074696f6e223a2241207069656365206f662042616e6e81527f792052657461696c2e222c2265787465726e616c5f75726c223a22687474707360208201527f3a2f2f72657461696c2e62616e6e792e6574682e7375636b73222c22696d616760408201527f65223a22646174613a696d6167652f7376672b786d6c3b6261736536342c00006060820152607e0161263f9161162e565b61227d60f01b815260020103601f198101825261265c908261027a565b61266590614353565b61045690612048565b905061269391945060603d60601161269c575b61268b818361027a565b810190611ee1565b5093905f6121a0565b503d612681565b611ec7565b9350945050506126be601192945162ffffff1690565b1611156127b657604051636c0360eb60e01b81525f816004816001600160a01b0386165afa9283156126a357612747936020925f91612794575b50925b61271361270782613df0565b6001600160a01b031690565b604051630c8df17160e41b81526001600160a01b039092166004830152602482019290925293849190829081906044820190565b03915afa9081156126a357610456925f92612763575b50613e57565b61278691925060203d60201161278d575b61277e818361027a565b810190611ed2565b905f61275d565b503d612774565b6127b091503d805f833e6127a8818361027a565b810190611ea1565b5f6126f8565b6020612747926127c461029c565b926126fb565b6127f26127d78683612d4f565b946127ec6121566127e7886132bc565b611cc1565b90611d20565b95612164565b916128189060018761280d8a5162ffffff1690565b160361281e57613cdd565b9161211e565b61282f9061282a613b9e565b6118c6565b613cdd565b91909293966128438883612aa2565b9661284e8984611518565b979099612859611835565b9a5f9b5b8a518d10156128b2576128839061287d6128778f8e6114f6565b516132bc565b906118c6565b9b61288e8b516118fb565b811061289e575b6001019b61285d565b9b6128aa600191611909565b9c9050612895565b6128c7919395979a989b929496999c50611941565b995f9b5b88518d101561293c576129346001918c8f6129296121078f8f61291161290561291e936128fe61292e98612919956114f6565b519061319a565b9687015162ffffff1690565b62ffffff1690565b613790565b935163ffffffff1690565b613990565b9161197a565b9c019b6128cb565b939894995094999196509499508515155f146129f2579061298661292961210761297c61297561298c9661296f8c6132bc565b90611a96565b998761319a565b5163ffffffff1690565b90611b0d565b955b6129ba866129ad846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b544281116129c9575b50612164565b94966129e56121566129eb93996129df896132bc565b90611bac565b90611c23565b955f6129c3565b94506129fd90611a1c565b9561298e565b5050506104566117ea565b6001600160a01b0316805f52600e60205260405f20825f5260205260405f2054918215918215612a47575b5050612a425790565b505f90565b9091505f52600b60205260405f20825f5260205260405f205414155f80612a39565b916060816001600160a01b039260209497969760408752816040880152838701375f828287010152601f80199101168401019416910152565b612aac828261319a565b9163ffffffff612ac0845163ffffffff1690565b1615612a035760609062ffffff612ade61010086015162ffffff1690565b16612b825792612b22612b2892612af86104569686611518565b939080151580612b7a575b612b44575b50612b1d61210761287d925163ffffffff1690565b61447a565b92614941565b8051612b35575b50613cdd565b612b3e916118c6565b5f612b2f565b61287d919250612107612b71612b6c612b6661210761297c612b1d968d61319a565b8a6139e7565b61186e565b93925050612b08565b506001612b03565b5050612b98612107612b9e935163ffffffff1690565b906139e7565b8051612bad57506104566117ea565b61045690613cdd565b9092612bc2848361319a565b9363ffffffff612bd6865163ffffffff1690565b1615612cab5760609062ffffff612bf461010088015162ffffff1690565b16612c92579061045695612c0b612c309386611518565b948115159081612c8a575b50612c625750612b1d61210761287d925163ffffffff1690565b92612c3d575b5050613cdd565b612c4691614941565b8051612c53575b80612c36565b612c5c916118c6565b5f612c4d565b61287d919250612107612b71612b6c612c8461210761297c612b1d968c61319a565b896139e7565b90505f612c16565b5050509050612b98612107612b9e935163ffffffff1690565b50505050506104566117ea565b91612cc161443b565b5f925b8051841015612d4957612cd784826114f6565b5193612ce381856114f6565b51855f5260049560208781526040805f2054612d3a57907fb10eb6fc7557a7109693cb8f3fac48d44328de56c0368ee4cac539b424d2cad991600196979899845f52825284815f205551338152a301929190612cc4565b51632165e0ab60e01b81528890fd5b50915050565b6001600160a01b0381165f52600f60205260405f20825f5260205260405f2054908115612dd757612d91906001600160a01b03165f52600a60205260405f2090565b815f52602052612da360405f20611450565b915f5b8351811015612dcf5781612dba82866114f6565b5114612dc857600101612da6565b5050905090565b505050505f90565b5050505f90565b91612de761443b565b5f925b8051841015612d4957612dfd84826114f6565b5193612e0981856114f6565b5194805f52602095600c87526040805f20825167ffffffffffffffff811161022157612e398161171584546101b8565b89601f8211600114612eb75750917f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e969391612e9184612ea09560019a9b9c9d5f91612eac57508160011b915f199060031b1c19161790565b90555b519182913390836117c3565b0390a201929190612dea565b90508501515f610d65565b99601f198216612eca845f5260205f2090565b9b5f905b828210612f3357505091600198999a9b7f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e9696949282612ea0979510612f1b575b5050881b88019055612e94565b8501515f1960f88460031b161c191690555f80612f0e565b80600181939f868b015181550194019d01909c929c612ece565b51906102da8261056c565b9081602091031261048c57516104568161056c565b6040516331a9108f60e11b815260048101929092526001600160a01b03906020908390602490829085165afa9182156126a3575f92612fcd575b5080612fb1615900565b16911603612fbb57565b6040516341eb334360e11b8152600490fd5b612ff091925060203d602011612ff7575b612fe8818361027a565b810190612f58565b905f612fa7565b503d612fde565b519063ffffffff8216820361048c57565b51906cffffffffffffffffffffffffff8216820361048c57565b519061ffff8216820361048c57565b519062ffffff8216820361048c57565b519060ff8216820361048c57565b51906102da82610ef6565b60208183031261048c57805167ffffffffffffffff9182821161048c57016101e08184031261048c57613092610880565b9261309c82612ffe565b84526130aa6020830161300f565b60208501526130bb60408301612ffe565b60408501526130cc60608301612ffe565b60608501526130dd6080830161300f565b60808501526130ee60a08301613029565b60a08501526130ff60c08301612f4d565b60c085015260e082015160e085015261010061311c818401613038565b9085015261012061312e818401613048565b90850152610140613140818401613056565b90850152610160613152818401613056565b90850152610180613164818401613056565b908501526101a0613176818401613056565b908501526101c0928383015190811161048c576131939201611e5f565b9082015290565b61324d915f9160606101c06040516131b181610204565b85815285602082015285604082015285838201528560808201528560a08201528560c08201528560e08201528561010082015285610120820152856101408201528561016082015285610180820152856101a0820152015261321561270782613df0565b9060405180958194829363c44a8e6d60e01b8452600484016040905f9294936001600160a01b03606083019616825260208201520152565b03915afa9081156126a3575f91613262575090565b61045691503d805f833e613276818361027a565b810190613061565b60405161328a81610226565b5f8152905f368137565b9061329e8261124f565b6132ab604051918261027a565b82815280926114c6601f199161124f565b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156133fd575b506d04ee2d6d415b85acef8100000000808310156133ee575b50662386f26fc10000808310156133df575b506305f5e100808310156133d0575b50612710808310156133c1575b5060648210156133b1575b600a809210156133a7575b60019081602161335360018701613294565b95860101905b613365575b5050505090565b5f19019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156133a257919082613359565b61335e565b9160010191613341565b9190606460029104910191613336565b6004919392049101915f61332b565b6008919392049101915f61331e565b6010919392049101915f61330f565b6020919392049101915f6132fd565b60409350810491505f6132e4565b6040519061341882610242565b600c82527f5370656369616c20426f647900000000000000000000000000000000000000006020830152565b6040519061345182610242565b600c82527f5370656369616c204865616400000000000000000000000000000000000000006020830152565b6040519061348a82610242565b600c82527f5370656369616c204c65677300000000000000000000000000000000000000006020830152565b604051906134c382610242565b600c82527f5370656369616c205375697400000000000000000000000000000000000000006020830152565b604051906134fc82610242565b6004825263119a5cdd60e21b6020830152565b6040519061351c82610242565b600b82527f5375697420626f74746f6d0000000000000000000000000000000000000000006020830152565b6040519061355582610242565b600882527f5375697420746f700000000000000000000000000000000000000000000000006020830152565b6040519061358e82610242565b600482526314dd5a5d60e21b6020830152565b604051906135ae82610242565b60048252631219585960e21b6020830152565b604051906135ce82610242565b600882527f4865616420746f700000000000000000000000000000000000000000000000006020830152565b6040519061360782610242565b600582527f4d6f7574680000000000000000000000000000000000000000000000000000006020830152565b6040519061364082610242565b600782527f476c6173736573000000000000000000000000000000000000000000000000006020830152565b6040519061367982610242565b60048252634579657360e01b6020830152565b6040519061369982610242565b600882527f4e65636b6c6163650000000000000000000000000000000000000000000000006020830152565b604051906136d282610242565b60048252634c65677360e01b6020830152565b604051906136f282610242565b600882527f4261636b736964650000000000000000000000000000000000000000000000006020830152565b6040519061372b82610242565b600a82527f4261636b67726f756e64000000000000000000000000000000000000000000006020830152565b6040519061376482610242565b600a82527f42616e6e7920626f6479000000000000000000000000000000000000000000006020830152565b8061379e5750610456613757565b600181036137af575061045661371e565b600281036137c057506104566136e5565b600881036137d157506104566136c5565b600381036137e2575061045661368c565b600581036137f3575061045661366c565b600681036138045750610456613633565b6007810361381557506104566135fa565b600c810361382657506104566135c1565b6004810361383757506104566135a1565b600981036138485750610456613581565b600b81036138595750610456613548565b600a810361386a575061045661350f565b600d810361387b57506104566134ef565b600e810361388c57506104566134b6565b600f810361389d575061045661347d565b601081036138ae5750610456613444565b6011146138bd576104566117ea565b61045661340b565b604051906138d282610242565b600882527f4f726967696e616c0000000000000000000000000000000000000000000000006020830152565b6040519061390b82610242565b600682527f4f72616e676500000000000000000000000000000000000000000000000000006020830152565b6040519061394482610242565b600482526350696e6b60e01b6020830152565b6040519061396482610242565b600582527f416c69656e0000000000000000000000000000000000000000000000000000006020830152565b600181036139a15750610456613957565b600281036139b25750610456613937565b600381036139c357506104566138fe565b600481036139d457506104566138c5565b5f52600c60205261045660405f2061035f565b90805f52602091600d83526139fe60405f2061035f565b8051613b0b5750613a5091816001600160a01b03613a1c8694613df0565b1690604051809581948293632f54648f60e21b845260048401602090939291936001600160a01b0360408201951681520152565b03915afa80156126a357613ab892613a7d604992610456945f91613aee575b50613a7861029c565b613e57565b60405194827f3c696d61676520687265663d220000000000000000000000000000000000000087948501528251928391602d860191016103ff565b81017f222077696474683d2234303022206865696768743d22343030222f3e00000000602d82015203602981018452018261027a565b613b059150833d851161278d5761277e818361027a565b5f613a6f565b9250505090565b6009545f9291613b21826101b8565b91600190818116908115613b8b5750600114613b3c57505050565b909192935060095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af905f915b848310613b78575050500190565b8181602092548587015201920191613b6a565b60ff191683525050811515909102019150565b603b610456613c2d610a056008613cb46040516003613ca481613c9481613c846044602088017f7b66696c6c3a6e6f6e653b7d00000000000000000000000000000000000000008152600c8952613bf489610242565b6040519e8f9d8e7f3c7374796c653e2e6f7b66696c6c3a233830383038303b7d2e6231000000000060208201528b5192839101846103ff565b8d016217311960e91b603b820152895190613c4c82603e8301856103ff565b01622e623360e81b603e820152613c6a8a51809360418401906103ff565b01613c7d60418201620b988d60ea1b9052565b018761162e565b622e613160e81b8152018561162e565b6217309960e91b8152018361162e565b622e613360e81b8152019061162e565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000815201613b12565b906102da60bb60405180947f3c7376672077696474683d2234303022206865696768743d223430302220766960208301527f6577426f783d223020302034303020343030222066696c6c3d2277686974652260408301527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608301527f7667223e3c7374796c653e2e6f7b66696c6c3a233035303530353b7d2e777b6660808301527f696c6c3a236639663966393b7d3c2f7374796c653e000000000000000000000060a0830152613dba81518092602060b5860191016103ff565b81017f3c2f7376673e000000000000000000000000000000000000000000000000000060b582015203609b81018552018361027a565b60206001600160a01b039160046040518094819363507f146560e01b8352165afa9081156126a3575f91613e22575090565b90506020813d602011613e4f575b81613e3d6020938361027a565b8101031261048c57516104568161056c565b3d9150613e30565b9061045690613e85604051602092609160f51b84830152602282015260228152613e808161025e565b6152cf565b926040519381613e9e86935180928680870191016103ff565b8201613eb2825180938680850191016103ff565b0103808452018261027a565b906102da602160405184613edc8296518092602080860191016103ff565b8101600160fd1b602082015203600181018552018361027a565b60405190613f0382610242565b600a82527f2072656d61696e696e67000000000000000000000000000000000000000000006020830152565b906102da929493602192613f98604051978894602093613f578151809287808b0191016103ff565b8601613f6b825180938780850191016103ff565b01602f60f81b84820152613f8782518093868a850191016103ff565b0191835193849187850191016103ff565b0103600181018552018361027a565b906102da929493602d92614026604051978894602093613fcf8151809287808b0191016103ff565b86017f2028534f4c44204f555429200000000000000000000000000000000000000000858201526140098251809387602c850191016103ff565b01602f60f81b602c820152613f8782518093868a850191016103ff565b0103600d81018552018361027a565b6102da91613f98949360219260405196879360209261405c8151809286808a0191016103ff565b8501614070825180938680850191016103ff565b0191602f60f81b81840152835193849187850191016103ff565b906102da6022604051846140a88296518092602080860191016103ff565b81016101d160f51b602082015203600281018552018361027a565b60216102da9193929360405194816140e58793518092602080870191016103ff565b82016140fa82518093602080850191016103ff565b01600160fd1b602082015203600181018552018361027a565b60256102da9193929360405194816141358793518092602080870191016103ff565b82017f5550432023000000000000000000000000000000000000000000000000000000602082015261417082518093602087850191016103ff565b0103600581018552018361027a565b906141ed61045692633b9aca006141a86141a3612929612107875163ffffffff1690565b613ebe565b91066141b2613ef6565b81156142445750906141c66141e8926132bc565b6141e26141dd612107606088015163ffffffff1690565b6132bc565b91614035565b61408a565b9061420561291961291161010084015162ffffff1690565b8051614227575b506141dd612107614221925163ffffffff1690565b90614113565b61210761423b6141dd9261422194956140c3565b9392505061420c565b9050604084019163ffffffff61425e845163ffffffff1690565b1680614299575061427c6141dd6121076141e8955163ffffffff1690565b6142936141dd612107606089015163ffffffff1690565b91613fa7565b6141e893506142a7906132bc565b6142be6141dd612107606089015163ffffffff1690565b91613f2f565b604051906142d18261025e565b604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036106ba57565b805115614432576143626142c4565b61437e6143796143728451611419565b6003900490565b614323565b9161439061438b84611427565b613294565b92835280815182019060208501935b8282106143e0575050506003905106806001146143cf576002146143c1575090565b603d60f81b5f199091015290565b50613d3d60f01b6001199091015290565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c168801015160028601531685010151908201530193919061439f565b506104566117ea565b6001600160a01b03805f541681614450615900565b16036144595750565b602490614464615900565b60405163118cdaa760e01b815291166004820152fd5b614483906157d4565b93604096959693919351968796602088017f3c7374796c653e2e62317b66696c6c3a2300000000000000000000000000000090528051908160318a0191602001916144cd926103ff565b8701603181017f3b7d2e62327b66696c6c3a230000000000000000000000000000000000000000905281519182603d8301916020019161450c926103ff565b01603d81017f3b7d2e62337b66696c6c3a23000000000000000000000000000000000000000090528151918260498301916020019161454a926103ff565b0160498101614578907f3b7d2e62347b66696c6c3a2300000000000000000000000000000000000000009052565b6055016145849161162e565b7f3b7d2e61317b66696c6c3a2300000000000000000000000000000000000000008152600c016145b39161162e565b7f3b7d2e61327b66696c6c3a2300000000000000000000000000000000000000008152600c016145e29161162e565b7f3b7d2e61337b66696c6c3a2300000000000000000000000000000000000000008152600c016146119161162e565b7f3b7d3c2f7374796c653e000000000000000000000000000000000000000000008152600a0161464090613b12565b03601f1981018252610456908261027a565b90604051918260209161466d815180928580860191016103ff565b6007545f91830161467d826101b8565b9160019081811690811561470657506001146146aa575b5050506102da925003601f19810184528361027a565b94925060075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688945f905b8382106146ee5750506102da945001015f8080614694565b865482840186015295860195889550908401906146d6565b9150506102da95935060ff9291921916838301528015150201015f8080614694565b906040519182602091614743815180928580860191016103ff565b6008545f918301614753826101b8565b91600190818116908115614706575060011461477f575050506102da925003601f19810184528361027a565b94925060085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3945f905b8382106147c35750506102da945001015f8080614694565b865482840186015295860195889550908401906147ab565b9060405191826020916147f6815180928580860191016103ff565b6005545f918301614806826101b8565b916001908181169081156147065750600114614832575050506102da925003601f19810184528361027a565b94925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0945f905b8382106148765750506102da945001015f8080614694565b8654828401860152958601958895509084019061485e565b9060405191826020916148a9815180928580860191016103ff565b6006545f9183016148b9826101b8565b9160019081811690811561470657506001146148e5575050506102da925003601f19810184528361027a565b94925060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f945f905b8382106149295750506102da945001015f8080614694565b86548284018601529586019588955090840190614911565b91909160608351915f925f935f945f9085935f5b61495e82611435565b811015614b3b5781811015614b2f57614977818c6114f6565b5195614983878961319a565b956149a961210761499e6129116101008b015162ffffff1690565b985163ffffffff1690565b915b600388811492908315614b00575050506001976149c8838b6139e7565b9b5b60048914614af7575b6005898103614aa35750506001965b6007898103614a61575050600b6001985b1180614a57575b614a3d575b15159081614a34575b50614a1c575b506001019794939297614955565b6001919861287d614a2d928a6139e7565b9790614a0e565b9050155f614a08565b9a614a48919a6118c6565b98614a516117ea565b9a6149ff565b508b5115156149fa565b8991991180614a9b575b80614a93575b614a7e575b600b906149f3565b975099614a8a9061488e565b99600197614a76565b508615614a71565b508815614a6b565b899891981180614aef575b80614ae7575b156149e257965060019a8b84145f14614ad857614ad0906147db565b9a5b966149e2565b614ae190614728565b9a614ad2565b508615614ab4565b508715614aae565b600196506149d3565b899d919a929d1180614b27575b156149ca57985099614b1e90614652565b996001986149ca565b508915614b0d565b5f9560129587916149ab565b50505050505050925050565b9190614b68816129ad856001600160a01b03165f52600b60205260405f2090565b54614b738185612a0e565b818414801590614d75575b614b8a575b5050505050565b8214614d5c575b508115614d35576040516331a9108f60e11b808252600482018490526001600160a01b0392918584169060208082602481865afa80156126a35786925f91614d18575b5082614bde615900565b911696168614159384614ca0575b50505050614c8e5763ffffffff614c0661297c858761319a565b1615614c7c5782614c2c826129ad876001600160a01b03165f52600b60205260405f2090565b55614c4c836129ad866001600160a01b03165f52600e60205260405f2090565b553003614c61575b50505b5f80808080614b83565b614c75913090614c6f615900565b90615959565b5f80614c54565b60405163c3095f8760e01b8152600490fd5b60405163d03702f960e01b8152600490fd5b819293945090614cd791614cb2615900565b95614cbd8a8c612a0e565b916040518095819482938352600483019190602083019252565b03915afa9081156126a35783925f92614cfb575b505016911614155f808080614bec565b614d119250803d10612ff757612fe8818361027a565b5f80614ceb565b614d2f9150823d8411612ff757612fe8818361027a565b5f614bd4565b614d5691506129ad5f936001600160a01b03165f52600b60205260405f2090565b55614c57565b614d6f90614d68615900565b3086615959565b5f614b91565b5082811415614b7e565b81519167ffffffffffffffff831161022157680100000000000000008311610221578154838355808410614dde575b506020809101915f5260205f20905f5b848110614dcc575050505050565b83518382015592810192600101614dbe565b614df490835f528460205f209182019101611645565b5f614dae565b909291925f935f915f92614e2b614e26836129ad886001600160a01b03165f52600a60205260405f2090565b611450565b955f945f945f908951615269575b90969299935f999899969296975b82518910156151de579a8a9b614e608a859d9c9d6114f6565b516040516331a9108f60e11b8152600481018290529d9097906001600160a01b03168e6024815a93602094fa9d8e156126a3575f9e6151bd575b508d6001600160a01b0380614ead615900565b92169116141580615132575b61512057614edb612911610100614ed18f8c9061319a565b015162ffffff1690565b9960028b108015615116575b615104578b151590816150f9575b506150e75760048a0361503957506001949095919293955b8981111580615030575b15614fab57508a949392918188614f3b93141580614f99575b614f80575b5061150a565b94858c805182105f14614f7357610100614ed1614f5e614f6694612911946114f6565b51809961319a565b905b959192939490614f0d565b505093505f935f90614f68565b614f9390614f8c615900565b3089615959565b5f614f35565b5089614fa58289612d4f565b14614f30565b93966001929a959d999199969396898d81614fc68583612d4f565b03614fe3575b50505050930197939a949091999899969296614e47565b836129ad615002926001600160a01b03165f52600f60205260405f2090565b556001600160a01b033091160361501c575b80898d614fcc565b61502a90308d614c6f615900565b5f615014565b50801515614f17565b939260098a036150525750600192959192939490614f0d565b9260058a1480156150dd575b80156150d3575b80156150c9575b806150c2575b1561508957604051639b8fdcd160e01b8152600490fd5b600b8a1480156150b8575b806150b1575b15614f68576040516306f7588760e01b8152600490fd5b508361509a565b50600a8a14615094565b5084615072565b50600c8a1461506c565b5060078a14615065565b5060068a1461505e565b604051633869abd960e21b8152600490fd5b90508a11155f614ef5565b60405163b0ee46ab60e01b8152600490fd5b5060118b11614ee7565b60405163032cac0360e01b8152600490fd5b508b6001600160a01b036020615175615149615900565b936151548d82612d4f565b6040519485809481936331a9108f60e11b8352600483019190602083019252565b0392165afa9081156126a3576001600160a01b039182915f9161519e575b501691161415614eb9565b6151b7915060203d602011612ff757612fe8818361027a565b5f615193565b6151d7919e5060203d602011612ff757612fe8818361027a565b9c5f614e9a565b5050979550915091949250805b61521a575050506102da92916129ad615215926001600160a01b03165f52600a60205260405f2090565b614d7f565b90818561522a6152359487612d4f565b14615256575061150a565b815181101561524f5761524881836114f6565b51806151eb565b5f806151eb565b614f9390615262615900565b3087615959565b955050615275886114e4565b519461528a612911610100614ed1898c61319a565b90614e39565b604051906105e0820182811067ffffffffffffffff82111761022157604052602e82526105c0366020840137565b9081518110156114f1570160200190565b90815115615401576152df615290565b915f6152ea846114e4565b5260019080515f915b8183106153185750505061530e6153139161045693946159bd565b6159ff565b615a44565b90919361536061535a61535461532e88866152be565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b905f915b60ff90888288168510156153c4576001929161539961539361535a61538c8961539f966114f6565b5160ff1690565b60081b90565b90611443565b6153bb603a92838306166153b3878d6114f6565b9060ff169052565b04920191615364565b509196925050805b6153db575060010191906152f3565b9360ff6001603a926153f783858a06166153b38584168d6114f6565b01169404806153cc565b905061045661327e565b6040519061541882610242565b600682527f66666539303000000000000000000000000000000000000000000000000000006020830152565b6040519061545182610242565b600682527f66666337303000000000000000000000000000000000000000000000000000006020830152565b6040519061548a82610242565b600682527f66336136303300000000000000000000000000000000000000000000000000006020830152565b604051906154c382610242565b600682527f39363561316100000000000000000000000000000000000000000000000000006020830152565b604051906154fc82610242565b600682527f66663763303200000000000000000000000000000000000000000000000000006020830152565b6040519061553582610242565b600682527f66643336303000000000000000000000000000000000000000000000000000006020830152565b6040519061556e82610242565b600682527f63333265306400000000000000000000000000000000000000000000000000006020830152565b604051906155a782610242565b600682527f66666438633500000000000000000000000000000000000000000000000000006020830152565b604051906155e082610242565b600682527f66663936613900000000000000000000000000000000000000000000000000006020830152565b6040519061561982610242565b600682527f66653538386200000000000000000000000000000000000000000000000000006020830152565b6040519061565282610242565b600682527f63393266343500000000000000000000000000000000000000000000000000006020830152565b6040519061568b82610242565b600682527f36376437353700000000000000000000000000000000000000000000000000006020830152565b604051906156c482610242565b600682527f33306132323000000000000000000000000000000000000000000000000000006020830152565b604051906156fd82610242565b600682527f32313761313500000000000000000000000000000000000000000000000000006020830152565b6040519061573682610242565b600682527f30393439306600000000000000000000000000000000000000000000000000006020830152565b6040519061576f82610242565b600682527f65343833656600000000000000000000000000000000000000000000000000006020830152565b604051906157a882610242565b600682527f64633266656600000000000000000000000000000000000000000000000000006020830152565b6001810361581b57506157e561567e565b906157ee6156b7565b906157f76156f0565b90615800615729565b90615809615762565b9061581261579b565b9061045661579b565b60028103615862575061582c61559a565b906158356155d3565b9061583e61560c565b90615847615645565b9061585061559a565b906158596155d3565b9061045661560c565b600381036158a9575061587361547d565b9061587c6154ef565b90615885615528565b9061588e615561565b9061589761547d565b906158a06154ef565b90610456615528565b6004146158c257604051639a7b332360e01b8152600490fd5b6158ca61540b565b906158d3615444565b906158dc61547d565b906158e56154b6565b906158ee61540b565b906158f7615444565b9061045661547d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633148061594e575b1561594a5760131936013681116106ba573560601c90565b3390565b506014361015615932565b909291926001600160a01b0380921690813b1561048c575f6064928195856040519889978896632142170760e11b885216600487015216602485015260448401525af180156126a3576159a95750565b67ffffffffffffffff811161022157604052565b9060ff809116906159cd8261149e565b925f5b8381106159de575050505090565b80836159ec600193856114f6565b51166159f882886114f6565b52016159d0565b908151615a0b8161149e565b905f5b818110615a1c575090925050565b60019060ff615a315f198389510301886114f6565b5116615a3d82866114f6565b5201615a0e565b8051615a4f8161124f565b916040615a5f604051948561027a565b828452615a6b8361124f565b60209190601f190136868401375f5b848110615a8957505050505090565b6001908251615a978161025e565b603a81527f31323334353637383941424344454647484a4b4c4d4e50515253545556575859858201527f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000848201527fff0000000000000000000000000000000000000000000000000000000000000090615b1f9060ff615b17858a6114f6565b5116906152be565b51165f1a615b2d82896152be565b5301615a7a56fea26469706673582212203a4c382e9b69538f97fd89527b2bef347de3dfd6b15949e701b2c0d26013e29864736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000012800000000000000000000000000000000000000000000000000000000000001440000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000016000000000000000000000000009e2a10ab3bd22831f19d02c648bc2cb49b127450000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb566000000000000000000000000000000000000000000000000000000000000117a3c6720636c6173733d226131223e3c7061746820643d224d3137332035336834763137682d347a222f3e3c2f673e3c6720636c6173733d226132223e3c7061746820643d224d3136372035376833763130682d337a222f3e3c7061746820643d224d3136392035336834763137682d347a222f3e3c2f673e3c6720636c6173733d226133223e3c7061746820643d224d31363720353368337634682d337a222f3e3c7061746820643d224d3136332035376834763130682d347a222f3e3c7061746820643d224d31363720363768337633682d337a222f3e3c2f673e3c6720636c6173733d226231223e3c7061746820643d224d32313320323533682d33762d332d33682d33762d372d33682d34762d3130682d33762d372d372d33682d33762d3733682d34762d3130682d33762d3130682d33762d37682d34762d37682d33762d33682d33762d33682d347631306834763130683376313068337633683476372033203730203368337637683376323068347637683376336833763368347634683376336833762d332d347a222f3e3c7061746820643d224d32353320333037762d34682d33762d33682d33762d33682d34762d34682d33762d33682d33762d33682d34762d34682d33762d33682d33762d33682d34762d34682d33762d36682d33762d37682d34763137683476336833763368332034763468337633683376336834763468337633683376336834763468337633683376336834762d36682d347a222f3e3c2f673e3c6720636c6173733d226232223e3c7061746820643d224d32353020333130762d33682d33762d34682d34762d33682d33762d33682d33762d34682d34762d33682d33762d33682d33762d34682d37762d33682d33762d33682d34762d3137682d33762d33682d33762d34682d34762d33682d33762d33682d33762d37682d34762d3230682d33762d37682d33762d37332d332d37682d34762d33682d33762d3130682d33762d3130682d34563730682d33762d336c2d332031303020332d313030763430682d33763130682d347636682d33763134682d337633203133682d3476343468347631366833763134683376313368347631306833763768337633683476336833763468337633683476336833763468337633683476336833763768377637683676336837763368377634683133763368337633683130762d33682d337a6d2d3130332d3837762d31366833762d3130682d337636682d34763137682d337631306833762d3768347a222f3e3c7061746820643d224d3134332032333068347637682d347a6d3420313068337633682d337a6d33203768337633682d337a6d33203668347634682d347a222f3e3c7061746820643d224d31363320323537682d36763368337633683376346834762d342d33682d34762d337a222f3e3c2f673e3c6720636c6173733d226233223e3c7061746820643d224d3134332031393776366834762d366836762d34346834762d31366833762d31346833762d366834762d31306833563937682d377636682d337634682d337633682d347633682d3376342033682d3376332034682d34763130682d337631362034682d337634366833762d3668337a222f3e3c7061746820643d224d313430203230336833763137682d337a222f3e3c7061746820643d224d313337203232306833763130682d337a222f3e3c7061746820643d224d31353320323530682d33762d37682d33762d36682d34762d37682d337631306833763768347636683376346833762d377a6d2d3320313068337637682d337a222f3e3c7061746820643d224d3134372032353768337633682d337a6d36203068347633682d347a222f3e3c7061746820643d224d31363020323633762d33682d33763320376836762d37682d337a6d2d31302d3536763136682d33763768337631306833763768347636683676346837762d342d33682d33762d3130682d34762d3133682d33762d3134682d33762d3136682d34763130682d337a222f3e3c7061746820643d224d32343320333133762d33682d33762d33682d31302d33762d34682d37762d33682d37762d33682d36762d37682d37762d37682d33762d33682d34762d33682d33762d34682d33762d33682d34762d33682d33762d34682d33762d33682d34762d33682d33763130682d337633682d347633682d337637683376376834763668337635683476336836763368337633683420337633683320347633683320337634683130763368372037203376336831302033762d33683130762d336834762d34682d31347a222f3e3c2f673e3c6720636c6173733d226234223e3c7061746820643d224d3138332031333068347637682d347a222f3e3c7061746820643d224d3138302031323768337633682d337a6d2d32372d3468347637682d347a222f3e3c7061746820643d224d3135372031313768337636682d337a222f3e3c7061746820643d224d3136302031313068337637682d337a222f3e3c7061746820643d224d3136332031303768347633682d347a6d2d3320383368337637682d337a222f3e3c7061746820643d224d3136332031383768347633682d347a6d3230203068377633682d377a222f3e3c7061746820643d224d3138302031393068337633682d337a6d31302d3768337634682d337a222f3e3c7061746820643d224d3139332031383768347636682d347a6d2d323020353368347637682d347a222f3e3c7061746820643d224d3137372032343768337636682d337a222f3e3c7061746820643d224d3138302032353368337637682d337a222f3e3c7061746820643d224d3138332032363068377633682d377a222f3e3c7061746820643d224d3139302032363368337634682d337a6d302d323068337634682d337a222f3e3c7061746820643d224d3138372032343068337633682d337a222f3e3c7061746820643d224d3139302032333768337633682d337a6d313320323368347633682d347a222f3e3c7061746820643d224d3230372032363368337637682d337a222f3e3c7061746820643d224d3231302032373068337633682d337a6d2d3130203768337636682d337a222f3e3c7061746820643d224d3230332032383368347637682d347a222f3e3c7061746820643d224d3230372032393068367633682d367a222f3e3c2f673e3c6720636c6173733d226f223e3c7061746820643d224d313333203135376834763530682d347a6d302036336834763130682d347a6d32372d3136336833763130682d337a222f3e3c7061746820643d224d31363320353368347634682d347a222f3e3c7061746820643d224d3136372035306831307633682d31307a222f3e3c7061746820643d224d3137372035336833763137682d337a222f3e3c7061746820643d224d3137332037306834763237682d347a6d2d3620306833763237682d337a222f3e3c7061746820643d224d31363320363768347633682d347a6d3020333068347633682d347a222f3e3c7061746820643d224d3136302031303068337633682d337a222f3e3c7061746820643d224d3135372031303368337634682d337a222f3e3c7061746820643d224d3135332031303768347633682d347a222f3e3c7061746820643d224d3135302031313068337633682d337a222f3e3c7061746820643d224d3134372031313368337637682d337a222f3e3c7061746820643d224d3134332031323068347637682d347a222f3e3c7061746820643d224d313430203132376833763130682d337a222f3e3c7061746820643d224d313337203133376833763230682d337a6d35362d31306834763130682d347a222f3e3c7061746820643d224d313930203131376833763130682d337a222f3e3c7061746820643d224d3138372031313068337637682d337a222f3e3c7061746820643d224d3138332031303368347637682d347a222f3e3c7061746820643d224d3138302031303068337633682d337a222f3e3c7061746820643d224d31373720393768337633682d337a6d2d3430203130366833763137682d337a6d302032376833763130682d337a6d313020333068337637682d337a222f3e3c7061746820643d224d31353020323537762d34682d33762d36682d34762d37682d3376313068337631306834762d3368337a222f3e3c7061746820643d224d3135302032353768337633682d337a222f3e3c7061746820643d224d31363320323733762d33682d36762d3130682d347637682d33763368337633683476376833762d3768337a222f3e3c7061746820643d224d3136332032363768347633682d347a222f3e3c7061746820643d224d31373020323537682d332d347633683476376833762d31307a222f3e3c7061746820643d224d3135372032353368367634682d367a222f3e3c7061746820643d224d3135332032343768347636682d347a222f3e3c7061746820643d224d3135302032343068337637682d337a222f3e3c7061746820643d224d313437203233306833763130682d337a6d313320353068337637682d337a222f3e3c7061746820643d224d3134332032323368347637682d347a222f3e3c7061746820643d224d313437203230376833763136682d337a222f3e3c7061746820643d224d313530203139376833763130682d337a6d2d3130203068337636682d337a6d35302031313368377633682d377a6d32332031306831377633682d31377a222f3e3c7061746820643d224d323330203332336831337634682d31337a222f3e3c7061746820643d224d323433203332306831307633682d31307a222f3e3c7061746820643d224d3235332033313768347633682d347a222f3e3c7061746820643d224d323537203330376833763130682d337a222f3e3c7061746820643d224d3235332033303368347634682d347a222f3e3c7061746820643d224d3235302033303068337633682d337a222f3e3c7061746820643d224d3234372032393768337633682d337a222f3e3c7061746820643d224d3234332032393368347634682d347a222f3e3c7061746820643d224d3234302032393068337633682d337a222f3e3c7061746820643d224d3233372032383768337633682d337a222f3e3c7061746820643d224d3233332032383368347634682d347a222f3e3c7061746820643d224d3233302032383068337633682d337a222f3e3c7061746820643d224d3232372032373768337633682d337a222f3e3c7061746820643d224d3232332032373368347634682d347a222f3e3c7061746820643d224d3232302032363768337636682d337a222f3e3c7061746820643d224d3231372032363068337637682d337a222f3e3c7061746820643d224d3231332032353368347637682d347a222f3e3c7061746820643d224d3231302032343768337636682d337a222f3e3c7061746820643d224d323037203233376833763130682d337a222f3e3c7061746820643d224d323033203232376834763130682d347a6d2d343020363068347636682d347a6d323420323068337633682d337a222f3e3c7061746820643d224d3136372032393368337635682d337a6d313620313468347633682d347a222f3e3c7061746820643d224d3137302032393868347633682d347a6d3130203668337633682d337a222f3e3c7061746820643d224d3137342033303168367633682d367a6d323320313268367634682d367a222f3e3c7061746820643d224d323033203331376831307633682d31307a6d2d322d313037762d3733682d3476373368337631376833762d3137682d327a222f3e3c2f673e3c6720636c6173733d226f223e3c7061746820643d224d31383720333037762d346833762d36682d33762d34682d34762d33682d33762d33682d37762d34682d367634682d3476336834763237682d34763133682d33763130682d347637683476336833203130203134762d33682d34762d34682d33762d33682d33762d33682d34762d376834762d31306833762d376833762d336837762d33682d337a6d3136203130762d34682d36763137682d34763130682d337637683376336834203620342033203134762d33682d34762d34682d37762d33682d33762d33682d33762d31306833762d376833762d33682d31307a222f3e3c2f673e000000000000000000000000000000000000000000000000000000000000000000000000019c3c6720636c6173733d226f223e3c7061746820643d224d31393020313733682d3337762d33682d3130762d34682d36763468337633682d337634683676336831307634683337762d346833762d33682d33762d347a6d2d34302034682d33762d34683376347a6d372033762d3368337633682d337a6d362030762d3368347633682d347a6d372030762d3368337633682d337a6d372030762d3368337633682d337a6d31302030682d34762d33683476337a222f3e3c7061746820643d224d3139302031373068337633682d337a222f3e3c7061746820643d224d3139332031363668347634682d347a6d30203768347634682d347a222f3e3c2f673e3c6720636c6173733d2277223e3c7061746820643d224d3133372031373068337633682d337a6d3130203368337634682d337a6d3130203468337633682d337a6d36203068347633682d347a6d37203068337633682d337a6d37203068337633682d337a6d36203068347633682d347a6d372d3468337634682d337a222f3e3c7061746820643d224d3139332031373068347633682d347a222f3e3c2f673e0000000000000000000000000000000000000000000000000000000000000000000000813c6720636c6173733d226f223e3c7061746820643d224d31383320313630762d34682d32307634682d33763368337634683234762d37682d347a6d2d31332033762d336831307633682d31307a222066696c6c3d2223616437316338222f3e3c7061746820643d224d313730203136306831307633682d31307a222f3e3c2f673e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd3c6720636c6173733d226f223e3c7061746820643d224d3137372031343076336836763131683130762d31316834762d33682d32307a222f3e3c7061746820643d224d31353320313430763368377638203368372033762d31316833762d33682d32307a222f3e3c2f673e3c6720636c6173733d2277223e3c7061746820643d224d3135332031343368377634682d377a222f3e3c7061746820643d224d3135372031343768337633682d337a6d32302d3468367634682d367a222f3e3c7061746820643d224d3138302031343768337633682d337a222f3e3c2f673e000000000000000000000000000000000000000000000000000000000000000000023a3c6720636c6173733d226f223e3c7061746820643d224d3139302031323768337633682d337a6d3320313368347633682d347a6d2d3432203068367636682d367a222f3e3c7061746820643d224d3135312031333368337637682d337a6d3130203068367634682d367a222f3e3c7061746820643d224d313537203133376831377636682d31377a6d332031336831347633682d31347a6d31372d31336837763136682d377a222f3e3c7061746820643d224d3138342031333768367636682d367a6d302031306831307636682d31307a222f3e3c7061746820643d224d313837203134336831307634682d31307a222f3e3c7061746820643d224d3139302031343068337633682d337a6d2d362d313068337637682d337a222f3e3c7061746820643d224d3138372031333068367633682d367a6d2d333620306831307633682d31307a6d313620313368377637682d377a6d2d3130203068377637682d377a222f3e3c7061746820643d224d3136342031343768337633682d337a6d32392d323068347636682d347a222f3e3c7061746820643d224d3139342031333368337637682d337a222f3e3c2f673e3c6720636c6173733d2277223e3c7061746820643d224d3135342031333368377634682d377a222f3e3c7061746820643d224d3135342031333768337633682d337a6d3130203668337634682d337a6d3230203068337634682d337a6d332d313068377634682d377a222f3e3c7061746820643d224d3139302031333768347633682d347a222f3e3c2f673e000000000000000000000000000000000000000000000000000000000000000000000000",
840
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
841
+ "blockNumber": "0x2567aec",
842
+ "blockTimestamp": "0x693752bb",
843
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
844
+ "transactionIndex": "0x55",
845
+ "logIndex": "0x28a",
846
+ "removed": false
847
+ },
848
+ {
849
+ "address": "0x2de178adde33cf27d391e9506c7b6f8b2ddc5eff",
850
+ "topics": [
851
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
852
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
853
+ "0x0000000000000000000000009e2a10ab3bd22831f19d02c648bc2cb49b127450"
854
+ ],
855
+ "data": "0x",
856
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
857
+ "blockNumber": "0x2567aec",
858
+ "blockTimestamp": "0x693752bb",
859
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
860
+ "transactionIndex": "0x55",
861
+ "logIndex": "0x28b",
862
+ "removed": false
863
+ },
864
+ {
865
+ "address": "0x9e2a10ab3bd22831f19d02c648bc2cb49b127450",
866
+ "topics": [
867
+ "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8",
868
+ "0x000000000000000000000000656ff6398c45adca3fe6e5f8fd53aebd4f318017"
869
+ ],
870
+ "data": "0x",
871
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
872
+ "blockNumber": "0x2567aec",
873
+ "blockTimestamp": "0x693752bb",
874
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
875
+ "transactionIndex": "0x55",
876
+ "logIndex": "0x28c",
877
+ "removed": false
878
+ },
879
+ {
880
+ "address": "0x656ff6398c45adca3fe6e5f8fd53aebd4f318017",
881
+ "topics": [
882
+ "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07",
883
+ "0x291186de1f72bb2cc104c23dccdfa5d4a8a0b9f4cfb97b40f87ec3ef829ea948"
884
+ ],
885
+ "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
886
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
887
+ "blockNumber": "0x2567aec",
888
+ "blockTimestamp": "0x693752bb",
889
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
890
+ "transactionIndex": "0x55",
891
+ "logIndex": "0x28d",
892
+ "removed": false
893
+ }
894
+ ],
895
+ "logsBloom": "0x00000000000010000000000000080000000000000000000000810000000000000000000020800000000000000048000000000000000000008000000000000000000000000000200000000000000000000201000000000000000000000000000000000000020000000000000000800840000000000000000000008000001000400800004021000080000104000000000004000000010000000000000000000000004000040000000000000000020000002200000000000000000000000004000000000002000000000000000000000000000000000020000000000200040020000000000000020000000001000000010200000000010080000000000000000000",
896
+ "transactionHash": "0xb0584346071166c68008efc70936262f2607688faae690b730a6ea9bed6bb59b",
897
+ "transactionIndex": "0x55",
898
+ "blockHash": "0x536da37d16459642e09ded88736a97de13ddce41a1c009f0eab4ee1ebf01c7ee",
899
+ "blockNumber": "0x2567aec",
900
+ "gasUsed": "0x9b8a31",
901
+ "effectiveGasPrice": "0x284880",
902
+ "blobGasUsed": "0x4df028",
903
+ "from": "0x755ff2f75a0a586ecfa2b9a3c959cb662458a105",
904
+ "to": "0xa2ea7657440875bf916cbfc0cfa88f13e38ad463",
905
+ "contractAddress": null
906
+ },
907
+ "bytecode": "0x60a060405234620007685762006382803803806200001d816200076c565b928339810160e082820312620007685781516001600160401b03908181116200076857826200004e91850162000792565b602093848101518381116200076857846200006b91830162000792565b9360408201518481116200076857816200008791840162000792565b6060830151858111620007685782620000a291850162000792565b916080840151908682116200076857620000be91850162000792565b92620000db60c0620000d360a0840162000802565b920162000802565b906001600160a01b0390811690811562000750575f548260018060a01b03198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36080526001958680558451868111620003f657600954958887811c9716801562000745575b8a881014620003d7578190601f97888111620006f1575b508a9088831160011462000689575f926200067d575b50505f19600383901b1c191690881b176009555b805190868211620003f657600754908882811c9216801562000672575b8a831014620003d75781878493116200061e575b508990878311600114620005b8575f92620005ac575b50505f19600383901b1c191690871b176007555b805190858211620003f657600654908782811c92168015620005a1575b89831014620003d75781868493116200054d575b508890868311600114620004e7575f92620004db575b50505f19600383901b1c191690861b176006555b805190848211620003f657600854908682811c92168015620004d0575b88831014620003d75781858493116200047c575b50879085831160011462000416575f926200040a575b50505f19600383901b1c191690851b176008555b8051928311620003f65760059485548581811c91168015620003eb575b82821014620003d75783811162000391575b50809284116001146200032a57509282939183925f946200031e575b50501b915f199060031b1c19161790555b604051615b6a9081620008188239608051818181610ad601528181610cae015261590a0152f35b015192505f80620002e6565b919083601f198116875f52845f20945f905b888383106200037657505050106200035d575b505050811b019055620002f7565b01515f1960f88460031b161c191690555f80806200034f565b8587015188559096019594850194879350908101906200033c565b865f52815f2084808701891c820192848810620003cd575b01881c019086905b828110620003c1575050620002ca565b5f8155018690620003b1565b92508192620003a9565b634e487b7160e01b5f52602260045260245ffd5b90607f1690620002b8565b634e487b7160e01b5f52604160045260245ffd5b015190505f8062000287565b90879350601f1983169160085f52895f20925f5b8b8282106200046557505084116200044c575b505050811b016008556200029b565b01515f1960f88460031b161c191690555f80806200043d565b8385015186558b979095019493840193016200042a565b90915060085f52875f208580850160051c8201928a8610620004c6575b918991869594930160051c01915b828110620004b757505062000271565b5f8155859450899101620004a7565b9250819262000499565b91607f16916200025d565b015190505f806200022c565b90889350601f1983169160065f528a5f20925f5b8c8282106200053657505084116200051d575b505050811b0160065562000240565b01515f1960f88460031b161c191690555f80806200050e565b8385015186558c97909501949384019301620004fb565b90915060065f52885f208680850160051c8201928b861062000597575b918a91869594930160051c01915b8281106200058857505062000216565b5f81558594508a910162000578565b925081926200056a565b91607f169162000202565b015190505f80620001d1565b90899350601f1983169160075f528b5f20925f5b8d828210620006075750508411620005ee575b505050811b01600755620001e5565b01515f1960f88460031b161c191690555f8080620005df565b8385015186558d97909501949384019301620005cc565b90915060075f52895f208780850160051c8201928c861062000668575b918b91869594930160051c01915b82811062000659575050620001bb565b5f81558594508b910162000649565b925081926200063b565b91607f1691620001a7565b015190505f8062000176565b908a9350601f1983169160095f528c5f20928d5f905b828210620006d95750508411620006c0575b505050811b016009556200018a565b01515f1960f88460031b161c191690555f8080620006b1565b8385015186558e979095019493840193018e6200069f565b90915060095f528a5f208880850160051c8201928d86106200073b575b918c91869594930160051c01915b8281106200072c57505062000160565b5f81558594508c91016200071c565b925081926200070e565b96607f169662000149565b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b03811183821017620003f657604052565b919080601f84011215620007685782516001600160401b038111620003f657602090620007c8601f8201601f191683016200076c565b9281845282828701011162000768575f5b818110620007ee5750825f9394955001015290565b8581018301518482018401528201620007d9565b51906001600160a01b0382168203620007685756fe60806040526004361015610011575f80fd5b5f3560e01c806257bfdd146101b357806305b2ae1b146101ae578063150b7a02146101a9578063187be308146101a457806318ab522d1461019f5780632150a1381461019a5780632580833d1461019557806331a290ac14610190578063572b6c051461018b57806359a81d91146101865780635e703e71146101815780636aff31dd1461017c578063715018a61461017757806379a2696e146101725780637da0a8771461016d578063875e4bea146101685780638da5cb5b14610163578063a0122c091461015e578063a22d0dd514610159578063b03a3eab14610154578063b1fa9e7b1461014f578063b3fa27831461014a578063c06e7bc714610145578063c122804614610140578063d756227e1461013b5763f2fde38b14610136575f80fd5b611371565b6112a1565b611207565b6110b9565b611014565b610fe9565b610f45565b610f00565b610e64565b610e3f565b610cd2565b610c8f565b610c5c565b610bf8565b610bce565b610ba2565b610afd565b610aa7565b61093f565b6107db565b610736565b6106bf565b610629565b6105ab565b610490565b610459565b90600182811c921680156101e6575b60208310146101d257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101c7565b634e487b7160e01b5f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761022157604052565b6101f0565b6020810190811067ffffffffffffffff82111761022157604052565b6040810190811067ffffffffffffffff82111761022157604052565b6060810190811067ffffffffffffffff82111761022157604052565b90601f8019910116810190811067ffffffffffffffff82111761022157604052565b604051905f82600354916102af836101b8565b8083529260209060019081811690811561033b57506001146102dc575b50506102da9250038361027a565b565b91509260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b935f925b82841061032357506102da9450505081016020015f806102cc565b85548885018301529485019487945092810192610308565b915050602092506102da94915060ff191682840152151560051b8201015f806102cc565b9060405191825f8254610371816101b8565b908184526020946001916001811690815f146103dd575060011461039f575b5050506102da9250038361027a565b5f90815285812095935091905b8183106103c55750506102da93508201015f8080610390565b855488840185015294850194879450918301916103ac565b925050506102da94925060ff191682840152151560051b8201015f8080610390565b5f5b8381106104105750505f910152565b8181015183820152602001610401565b90602091610439815180928185528580860191016103ff565b601f01601f1916010190565b906020610456928181520190610420565b90565b3461048c575f36600319011261048c5761048861047461029c565b604051918291602083526020830190610420565b0390f35b5f80fd5b3461048c575f36600319011261048c576040515f6008546104b0816101b8565b8084529060209060019081811690811561054257506001146104e9575b610488856104dd8187038261027a565b60405191829182610445565b60085f90815293507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83851061052f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610513565b869550610488969350602092506104dd94915060ff191682840152151560051b82010192936104cd565b6001600160a01b0381160361048c57565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020838186019501011161048c57565b3461048c57608036600319011261048c576004356105c88161056c565b6105d360243561056c565b60643567ffffffffffffffff811161048c576105f390369060040161057d565b50506001600160a01b033091160361061757604051630a85bd0160e11b8152602090f35b604051633b2c6aa160e21b8152600490fd5b3461048c57604036600319011261048c576004356106468161056c565b6001600160a01b036024359161065c8382612f6d565b16805f52600260205260405f20825f5260205260405f20549162093a804201928342116106ba5783106106a8576106a5915f52600260205260405f20905f5260205260405f2090565b55005b604051631057c89560e21b8152600490fd5b611405565b3461048c57604036600319011261048c576106e86004356106df8161056c565b60243590611518565b90604051918291604083019083526020906040602085015282518091526020606085019301915f5b82811061071f57505050500390f35b835185528695509381019392810192600101610710565b3461048c575f36600319011261048c576040515f600554610756816101b8565b80845290602090600190818116908115610542575060011461078257610488856104dd8187038261027a565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8385106107c8575050505081016020016104dd826104886104cd565b80548686018401529382019381016107ac565b3461048c575f36600319011261048c576040515f6006546107fb816101b8565b80845290602090600190818116908115610542575060011461082757610488856104dd8187038261027a565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b83851061086d575050505081016020016104dd826104886104cd565b8054868601840152938201938101610851565b604051906102da82610204565b67ffffffffffffffff81116102215760051b60200190565b92916108b08261088d565b916108be604051938461027a565b829481845260208094019160051b810192831161048c57905b8282106108e45750505050565b813581529083019083016108d7565b9080601f8301121561048c57816020610456933591016108a5565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020808501948460051b01011161048c57565b3461048c5760408060031936011261048c5760049067ffffffffffffffff823581811161048c5761097390369085016108f3565b9060243590811161048c5761098b903690850161090e565b9290915f5b8151811015610aa5576109a381836114f6565b516109b96109b28388886115e2565b369161126b565b6109d36109ce835f52600d60205260405f2090565b611624565b610a95576109e9825f52600460205260405f2090565b548015610a855785516020810190610a1381610a05848761162e565b03601f19810183528261027a565b51902003610a7557907faeb631726b45aa3f6b09da79f7af03a9784614901f61a967ed84d63c37b7edc7610a6c83610a5f60019695610a5a865f52600d60205260405f2090565b6116f3565b87519182913390836117c3565b0390a201610990565b845163d8e55daf60e01b81528890fd5b85516338d87d3960e01b81528990fd5b845163444244f560e01b81528890fd5b005b3461048c57602036600319011261048c576020600435610ac68161056c565b6001600160a01b039060405191807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b3461048c575f36600319011261048c576040515f600954610b1d816101b8565b808452906020906001908181169081156105425750600114610b4957610488856104dd8187038261027a565b60095f90815293507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b838510610b8f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610b73565b3461048c57604036600319011261048c57610488610474600435610bc58161056c565b6024359061209c565b3461048c57602036600319011261048c576004355f526004602052602060405f2054604051908152f35b3461048c575f36600319011261048c57610c1061443b565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461048c57604036600319011261048c576020610c87600435610c7e8161056c565b60243590612a0e565b604051908152f35b3461048c575f36600319011261048c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461048c5760208060031936011261048c5767ffffffffffffffff60043581811161048c57610d0590369060040161057d565b9091610d0f61443b565b811161022157610d2981610d246003546101b8565b61165b565b5f92601f8211600114610d9d5750610d7881807f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f955f91610d92575b508160011b915f199060031b1c19161790565b6003555b610d8d604051928392339184612a69565b0390a1005b90508401355f610d65565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b868210610e27575050827f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f9510610e0e575b5050600181811b01600355610d7c565b8301355f19600384901b60f8161c191690555f80610dfe565b80600184958294958901358155019401920190610dcc565b3461048c575f36600319011261048c5760206001600160a01b035f5416604051908152f35b3461048c57604036600319011261048c57610eda600435610e848161056c565b610488610e9e610e97602435809461319a565b809361417f565b91610ee8610ec563ffffffff610ebd62ffffff61010086015116613790565b935116613990565b91604051958695606087526060870190610420565b908582036020870152610420565b908382036040850152610420565b8015150361048c57565b3461048c57608036600319011261048c57610488610474600435610f238161056c565b604435610f2f81610ef6565b60643591610f3c83610ef6565b60243590612bb6565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c57610f779036906004016108f3565b9060243590811161048c573660238201121561048c578060040135610f9b8161088d565b91610fa9604051938461027a565b8183526020916024602085019160051b8301019136831161048c57602401905b828210610fda57610aa58587612cb8565b81358152908301908301610fc9565b3461048c57604036600319011261048c576020610c8760043561100b8161056c565b60243590612d4f565b3461048c575f36600319011261048c576040515f600754611034816101b8565b80845290602090600190818116908115610542575060011461106057610488856104dd8187038261027a565b60075f90815293507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b8385106110a6575050505081016020016104dd826104886104cd565b805486860184015293820193810161108a565b3461048c57608036600319011261048c576004356110d68161056c565b6044359060243560643567ffffffffffffffff811161048c576110fd90369060040161090e565b906002600154146111f55760026001556111178385612f6d565b6001600160a01b039182851692835f526002602052604096875f20865f52602052875f205442106111e45761114a615900565b97838151918083528201527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161048c57866111d5967f6a68946ba06488db8585d7c7637fa954b574035fe15720ea760125ef8601725883606086958a6111db9f996111ce9a8c60051b8093868601371660208301528101030190a48587614b47565b36916108a5565b91614dfa565b610aa560018055565b8751632d2f65a360e11b8152600490fd5b604051633ee5aeb560e01b8152600490fd5b3461048c57604036600319011261048c576001600160a01b0360043561122c8161056c565b165f52600260205260405f206024355f52602052602060405f2054604051908152f35b67ffffffffffffffff811161022157601f01601f191660200190565b9291926112778261124f565b91611285604051938461027a565b82948184528183011161048c578281602093845f960137010152565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c576112d39036906004016108f3565b60249060243583811161048c573660238201121561048c578060040135926112fa8461088d565b93611308604051958661027a565b8085526020956024602087019260051b8501019336851161048c5760248101925b85841061133a57610aa58888612dde565b833583811161048c5782013660438201121561048c5789916113668392369060448a820135910161126b565b815201930192611329565b3461048c57602036600319011261048c5760043561138e8161056c565b61139661443b565b6001600160a01b038091169081156113ed575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52601160045260245ffd5b90600282018092116106ba57565b90602082018092116106ba57565b90600182018092116106ba57565b919082018092116106ba57565b90604051918281549182825260209260208301915f5260205f20935f905b828210611484575050506102da9250038361027a565b85548452600195860195889550938101939091019061146e565b906114a88261088d565b6114b5604051918261027a565b82815280926114c6601f199161088d565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b8051156114f15760200190565b6114d0565b80518210156114f15760209160051b010190565b5f1981146106ba5760010190565b9190915f926001600160a01b0382165f52600a60205260405f20815f5260205261154460405f20611450565b9361154f855161149e565b915f915f5b875181101561159d578061156a6001928a6114f6565b5184611576828a612d4f565b14611583575b5001611554565b61159661158f8761150a565b96886114f6565b525f61157c565b5095509050929190926115c1826001600160a01b03165f52600b60205260405f2090565b815f526020526115d660405f20548093612a0e565b146115de5750565b9250565b91908110156114f15760051b81013590601e198136030182121561048c57019081359167ffffffffffffffff831161048c57602001823603811361048c579190565b61045690546101b8565b90611641602092828151948592016103ff565b0190565b818110611650575050565b5f8155600101611645565b90601f8211611668575050565b6102da9160035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c830193106116b1575b601f0160051c0190611645565b90915081906116a4565b9190601f81116116ca57505050565b6102da925f5260205f20906020601f840160051c830193106116b157601f0160051c0190611645565b919091825167ffffffffffffffff81116102215761171b8161171584546101b8565b846116bb565b602080601f831160011461175c5750819061174d9394955f92611751575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611739565b90601f19831695611770855f5260205f2090565b925f905b8882106117ab57505083600195969710611793575b505050811b019055565b01515f1960f88460031b161c191690555f8080611789565b80600185968294968601518155019501930190611774565b906001600160a01b036117e3602092959495604085526040850190610420565b9416910152565b604051906117f782610226565b5f8252565b6040519061180982610242565b600f82527f2261747472696275746573223a205b00000000000000000000000000000000006020830152565b6040519061184282610242565b600e82527f226f7574666974496473223a205b0000000000000000000000000000000000006020830152565b9060405191826060515f5b8181106118ad57509060206102da936118a182948401918383015f81528151948592016103ff565b0103808552018361027a565b6020919250806080015182828801015201908491611879565b60206102da9193929360405194816118e787935180928680870191016103ff565b82016118a1825180938680850191016103ff565b5f198101919082116106ba57565b906102da6021604051846119278296518092602080860191016103ff565b8101600b60fa1b602082015203600181018552018361027a565b906102da60226040518461195f8296518092602080860191016103ff565b810161174b60f21b602082015203600281018552018361027a565b6040906102da92949394825195869160209361199e815180928780880191016103ff565b83017f7b2274726169745f74797065223a202200000000000000000000000000000000858201526119d882518093876030850191016103ff565b016c111610113b30b63ab2911d101160991b6030820152611a028251809386603d850191016103ff565b0162089f4b60ea1b603d820152039081018552018361027a565b906102da604a60405184611a3a8296518092602080860191016103ff565b81017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022227d2c00000000000000000000000000000000000000000000604082015203602a81018552018361027a565b60316102da919392936040519481611ab88793518092602080870191016103ff565b82017f226261636b67726f756e644964223a20000000000000000000000000000000006020820152611af48251809360206030850191016103ff565b01600b60fa1b603082015203601181018552018361027a565b604a6102da919392936040519481611b2f8793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022000000000000000000000000000000000000000000000000006040820152611b918251809360206047850191016103ff565b0162089f4b60ea1b604782015203602a81018552018361027a565b60376102da919392936040519481611bce8793518092602080870191016103ff565b82017f226368616e6765734c6f636b6564556e74696c223a20000000000000000000006020820152611c0a8251809360206036850191016103ff565b01600b60fa1b603682015203601781018552018361027a565b60526102da919392936040519481611c458793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224368616e676573206c6f636b6564207560208201527f6e74696c222c202276616c7565223a20000000000000000000000000000000006040820152611ca78251809360206050850191016103ff565b01611f4b60f21b605082015203603281018552018361027a565b906102da603660405180947f22776f726e427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b8101600b60fa1b603582015203601681018552018361027a565b604b6102da919392936040519481611d428793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022576f726e2062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b01611f4b60f21b604982015203602b81018552018361027a565b906102da603660405180947f2275736564427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b604b6102da919392936040519481611e118793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022557365642062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b81601f8201121561048c578051611e758161124f565b92611e83604051948561027a565b8184526020828401011161048c5761045691602080850191016103ff565b9060208282031261048c57815167ffffffffffffffff811161048c576104569201611e5f565b6040513d5f823e3d90fd5b9081602091031261048c575190565b9081606091031261048c57805191604060208301519201516104568161056c565b612030600392959460a46102da956040519885611f298b975180926020808b0191016103ff565b86017f7b2274726169745f74797065223a202250726f64756374206e616d65222c202260208201527f76616c7565223a202200000000000000000000000000000000000000000000006040820152611f8b8251809360206049850191016103ff565b017f227d2c207b2274726169745f74797065223a202243617465676f7279206e616d60498201527f65222c202276616c7565223a20220000000000000000000000000000000000006069820152611fec8251809360206077850191016103ff565b017f227d2c207b2274726169745f74797065223a2022546f74616c20737570706c7960778201526c111610113b30b63ab2911d101160991b6097820152019061162e565b62227d5d60e81b815203601c1981018552018361027a565b906102da603d60405180947f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261208c81518092602086860191016103ff565b810103601d81018552018361027a565b6120a6828261319a565b9163ffffffff6120ba845163ffffffff1690565b1615612a03576120c86117ea565b506120d16117fc565b610100928385019462ffffff94856120ec885162ffffff1690565b16156128345750612116612110612107835163ffffffff1690565b63ffffffff1690565b836139e7565b9182516127f8575b60018661212e895162ffffff1690565b16036127ca576121626121418683612a0e565b9461215c612156612151886132bc565b611daa565b966132bc565b90611def565b955b8351156126a857509060606001600160a01b0394939260046040518097819363043c358d60e11b8352165afa9384156126a3575f905f9561266e575b5081516121b29063ffffffff16613990565b9688516121c19062ffffff1690565b62ffffff166121cf90613790565b97606084019889516121e49063ffffffff1690565b63ffffffff166121f3906132bc565b916121fd93611f02565b94612208838861417f565b9783516122189063ffffffff1690565b63ffffffff1661222790613990565b9980516122369062ffffff1690565b62ffffff1661224490613790565b9861224e906132bc565b91855161225e9063ffffffff1690565b63ffffffff1661226d906132bc565b915161227d9062ffffff166132bc565b905161228e9063ffffffff166132bc565b9160408701516122a19063ffffffff1690565b63ffffffff166122b0906132bc565b9360208801516122cc906cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff166122e4906132bc565b956122ee906132bc565b966122f8906132bc565b610120989098015161230c9060ff166132bc565b9860405180916020820161231f9161162e565b03601f1981018252612331908261027a565b61233a90614353565b9b6040519e8f9e8f602001612373906009907f7b226e616d65223a22000000000000000000000000000000000000000000000081520190565b61237c9161162e565b7f222c202270726f647563744e616d65223a20220000000000000000000000000081526013016123ab9161162e565b7f222c202263617465676f72794e616d65223a202200000000000000000000000081526014016123da9161162e565b7f222c2022746f6b656e4964223a200000000000000000000000000000000000008152600e016124099161162e565b7f2c2022757063223a20000000000000000000000000000000000000000000000081526009016124389161162e565b7f2c202263617465676f7279223a200000000000000000000000000000000000008152600e016124679161162e565b7f2c2022737570706c79223a2000000000000000000000000000000000000000008152600c016124969161162e565b7f2c202272656d61696e696e67223a2000000000000000000000000000000000008152600f016124c59161162e565b7f2c20227072696365223a200000000000000000000000000000000000000000008152600b016124f49161162e565b7f2c2022646563696d616c73223a200000000000000000000000000000000000008152600e016125239161162e565b7f2c202263757272656e6379223a200000000000000000000000000000000000008152600e016125529161162e565b7f2c2022646973636f756e74223a200000000000000000000000000000000000008152600e016125819161162e565b61016160f51b81526002016125959161162e565b61259e9161162e565b7f2c20226465736372697074696f6e223a2241207069656365206f662042616e6e81527f792052657461696c2e222c2265787465726e616c5f75726c223a22687474707360208201527f3a2f2f72657461696c2e62616e6e792e6574682e7375636b73222c22696d616760408201527f65223a22646174613a696d6167652f7376672b786d6c3b6261736536342c00006060820152607e0161263f9161162e565b61227d60f01b815260020103601f198101825261265c908261027a565b61266590614353565b61045690612048565b905061269391945060603d60601161269c575b61268b818361027a565b810190611ee1565b5093905f6121a0565b503d612681565b611ec7565b9350945050506126be601192945162ffffff1690565b1611156127b657604051636c0360eb60e01b81525f816004816001600160a01b0386165afa9283156126a357612747936020925f91612794575b50925b61271361270782613df0565b6001600160a01b031690565b604051630c8df17160e41b81526001600160a01b039092166004830152602482019290925293849190829081906044820190565b03915afa9081156126a357610456925f92612763575b50613e57565b61278691925060203d60201161278d575b61277e818361027a565b810190611ed2565b905f61275d565b503d612774565b6127b091503d805f833e6127a8818361027a565b810190611ea1565b5f6126f8565b6020612747926127c461029c565b926126fb565b6127f26127d78683612d4f565b946127ec6121566127e7886132bc565b611cc1565b90611d20565b95612164565b916128189060018761280d8a5162ffffff1690565b160361281e57613cdd565b9161211e565b61282f9061282a613b9e565b6118c6565b613cdd565b91909293966128438883612aa2565b9661284e8984611518565b979099612859611835565b9a5f9b5b8a518d10156128b2576128839061287d6128778f8e6114f6565b516132bc565b906118c6565b9b61288e8b516118fb565b811061289e575b6001019b61285d565b9b6128aa600191611909565b9c9050612895565b6128c7919395979a989b929496999c50611941565b995f9b5b88518d101561293c576129346001918c8f6129296121078f8f61291161290561291e936128fe61292e98612919956114f6565b519061319a565b9687015162ffffff1690565b62ffffff1690565b613790565b935163ffffffff1690565b613990565b9161197a565b9c019b6128cb565b939894995094999196509499508515155f146129f2579061298661292961210761297c61297561298c9661296f8c6132bc565b90611a96565b998761319a565b5163ffffffff1690565b90611b0d565b955b6129ba866129ad846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b544281116129c9575b50612164565b94966129e56121566129eb93996129df896132bc565b90611bac565b90611c23565b955f6129c3565b94506129fd90611a1c565b9561298e565b5050506104566117ea565b6001600160a01b0316805f52600e60205260405f20825f5260205260405f2054918215918215612a47575b5050612a425790565b505f90565b9091505f52600b60205260405f20825f5260205260405f205414155f80612a39565b916060816001600160a01b039260209497969760408752816040880152838701375f828287010152601f80199101168401019416910152565b612aac828261319a565b9163ffffffff612ac0845163ffffffff1690565b1615612a035760609062ffffff612ade61010086015162ffffff1690565b16612b825792612b22612b2892612af86104569686611518565b939080151580612b7a575b612b44575b50612b1d61210761287d925163ffffffff1690565b61447a565b92614941565b8051612b35575b50613cdd565b612b3e916118c6565b5f612b2f565b61287d919250612107612b71612b6c612b6661210761297c612b1d968d61319a565b8a6139e7565b61186e565b93925050612b08565b506001612b03565b5050612b98612107612b9e935163ffffffff1690565b906139e7565b8051612bad57506104566117ea565b61045690613cdd565b9092612bc2848361319a565b9363ffffffff612bd6865163ffffffff1690565b1615612cab5760609062ffffff612bf461010088015162ffffff1690565b16612c92579061045695612c0b612c309386611518565b948115159081612c8a575b50612c625750612b1d61210761287d925163ffffffff1690565b92612c3d575b5050613cdd565b612c4691614941565b8051612c53575b80612c36565b612c5c916118c6565b5f612c4d565b61287d919250612107612b71612b6c612c8461210761297c612b1d968c61319a565b896139e7565b90505f612c16565b5050509050612b98612107612b9e935163ffffffff1690565b50505050506104566117ea565b91612cc161443b565b5f925b8051841015612d4957612cd784826114f6565b5193612ce381856114f6565b51855f5260049560208781526040805f2054612d3a57907fb10eb6fc7557a7109693cb8f3fac48d44328de56c0368ee4cac539b424d2cad991600196979899845f52825284815f205551338152a301929190612cc4565b51632165e0ab60e01b81528890fd5b50915050565b6001600160a01b0381165f52600f60205260405f20825f5260205260405f2054908115612dd757612d91906001600160a01b03165f52600a60205260405f2090565b815f52602052612da360405f20611450565b915f5b8351811015612dcf5781612dba82866114f6565b5114612dc857600101612da6565b5050905090565b505050505f90565b5050505f90565b91612de761443b565b5f925b8051841015612d4957612dfd84826114f6565b5193612e0981856114f6565b5194805f52602095600c87526040805f20825167ffffffffffffffff811161022157612e398161171584546101b8565b89601f8211600114612eb75750917f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e969391612e9184612ea09560019a9b9c9d5f91612eac57508160011b915f199060031b1c19161790565b90555b519182913390836117c3565b0390a201929190612dea565b90508501515f610d65565b99601f198216612eca845f5260205f2090565b9b5f905b828210612f3357505091600198999a9b7f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e9696949282612ea0979510612f1b575b5050881b88019055612e94565b8501515f1960f88460031b161c191690555f80612f0e565b80600181939f868b015181550194019d01909c929c612ece565b51906102da8261056c565b9081602091031261048c57516104568161056c565b6040516331a9108f60e11b815260048101929092526001600160a01b03906020908390602490829085165afa9182156126a3575f92612fcd575b5080612fb1615900565b16911603612fbb57565b6040516341eb334360e11b8152600490fd5b612ff091925060203d602011612ff7575b612fe8818361027a565b810190612f58565b905f612fa7565b503d612fde565b519063ffffffff8216820361048c57565b51906cffffffffffffffffffffffffff8216820361048c57565b519061ffff8216820361048c57565b519062ffffff8216820361048c57565b519060ff8216820361048c57565b51906102da82610ef6565b60208183031261048c57805167ffffffffffffffff9182821161048c57016101e08184031261048c57613092610880565b9261309c82612ffe565b84526130aa6020830161300f565b60208501526130bb60408301612ffe565b60408501526130cc60608301612ffe565b60608501526130dd6080830161300f565b60808501526130ee60a08301613029565b60a08501526130ff60c08301612f4d565b60c085015260e082015160e085015261010061311c818401613038565b9085015261012061312e818401613048565b90850152610140613140818401613056565b90850152610160613152818401613056565b90850152610180613164818401613056565b908501526101a0613176818401613056565b908501526101c0928383015190811161048c576131939201611e5f565b9082015290565b61324d915f9160606101c06040516131b181610204565b85815285602082015285604082015285838201528560808201528560a08201528560c08201528560e08201528561010082015285610120820152856101408201528561016082015285610180820152856101a0820152015261321561270782613df0565b9060405180958194829363c44a8e6d60e01b8452600484016040905f9294936001600160a01b03606083019616825260208201520152565b03915afa9081156126a3575f91613262575090565b61045691503d805f833e613276818361027a565b810190613061565b60405161328a81610226565b5f8152905f368137565b9061329e8261124f565b6132ab604051918261027a565b82815280926114c6601f199161124f565b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156133fd575b506d04ee2d6d415b85acef8100000000808310156133ee575b50662386f26fc10000808310156133df575b506305f5e100808310156133d0575b50612710808310156133c1575b5060648210156133b1575b600a809210156133a7575b60019081602161335360018701613294565b95860101905b613365575b5050505090565b5f19019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156133a257919082613359565b61335e565b9160010191613341565b9190606460029104910191613336565b6004919392049101915f61332b565b6008919392049101915f61331e565b6010919392049101915f61330f565b6020919392049101915f6132fd565b60409350810491505f6132e4565b6040519061341882610242565b600c82527f5370656369616c20426f647900000000000000000000000000000000000000006020830152565b6040519061345182610242565b600c82527f5370656369616c204865616400000000000000000000000000000000000000006020830152565b6040519061348a82610242565b600c82527f5370656369616c204c65677300000000000000000000000000000000000000006020830152565b604051906134c382610242565b600c82527f5370656369616c205375697400000000000000000000000000000000000000006020830152565b604051906134fc82610242565b6004825263119a5cdd60e21b6020830152565b6040519061351c82610242565b600b82527f5375697420626f74746f6d0000000000000000000000000000000000000000006020830152565b6040519061355582610242565b600882527f5375697420746f700000000000000000000000000000000000000000000000006020830152565b6040519061358e82610242565b600482526314dd5a5d60e21b6020830152565b604051906135ae82610242565b60048252631219585960e21b6020830152565b604051906135ce82610242565b600882527f4865616420746f700000000000000000000000000000000000000000000000006020830152565b6040519061360782610242565b600582527f4d6f7574680000000000000000000000000000000000000000000000000000006020830152565b6040519061364082610242565b600782527f476c6173736573000000000000000000000000000000000000000000000000006020830152565b6040519061367982610242565b60048252634579657360e01b6020830152565b6040519061369982610242565b600882527f4e65636b6c6163650000000000000000000000000000000000000000000000006020830152565b604051906136d282610242565b60048252634c65677360e01b6020830152565b604051906136f282610242565b600882527f4261636b736964650000000000000000000000000000000000000000000000006020830152565b6040519061372b82610242565b600a82527f4261636b67726f756e64000000000000000000000000000000000000000000006020830152565b6040519061376482610242565b600a82527f42616e6e7920626f6479000000000000000000000000000000000000000000006020830152565b8061379e5750610456613757565b600181036137af575061045661371e565b600281036137c057506104566136e5565b600881036137d157506104566136c5565b600381036137e2575061045661368c565b600581036137f3575061045661366c565b600681036138045750610456613633565b6007810361381557506104566135fa565b600c810361382657506104566135c1565b6004810361383757506104566135a1565b600981036138485750610456613581565b600b81036138595750610456613548565b600a810361386a575061045661350f565b600d810361387b57506104566134ef565b600e810361388c57506104566134b6565b600f810361389d575061045661347d565b601081036138ae5750610456613444565b6011146138bd576104566117ea565b61045661340b565b604051906138d282610242565b600882527f4f726967696e616c0000000000000000000000000000000000000000000000006020830152565b6040519061390b82610242565b600682527f4f72616e676500000000000000000000000000000000000000000000000000006020830152565b6040519061394482610242565b600482526350696e6b60e01b6020830152565b6040519061396482610242565b600582527f416c69656e0000000000000000000000000000000000000000000000000000006020830152565b600181036139a15750610456613957565b600281036139b25750610456613937565b600381036139c357506104566138fe565b600481036139d457506104566138c5565b5f52600c60205261045660405f2061035f565b90805f52602091600d83526139fe60405f2061035f565b8051613b0b5750613a5091816001600160a01b03613a1c8694613df0565b1690604051809581948293632f54648f60e21b845260048401602090939291936001600160a01b0360408201951681520152565b03915afa80156126a357613ab892613a7d604992610456945f91613aee575b50613a7861029c565b613e57565b60405194827f3c696d61676520687265663d220000000000000000000000000000000000000087948501528251928391602d860191016103ff565b81017f222077696474683d2234303022206865696768743d22343030222f3e00000000602d82015203602981018452018261027a565b613b059150833d851161278d5761277e818361027a565b5f613a6f565b9250505090565b6009545f9291613b21826101b8565b91600190818116908115613b8b5750600114613b3c57505050565b909192935060095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af905f915b848310613b78575050500190565b8181602092548587015201920191613b6a565b60ff191683525050811515909102019150565b603b610456613c2d610a056008613cb46040516003613ca481613c9481613c846044602088017f7b66696c6c3a6e6f6e653b7d00000000000000000000000000000000000000008152600c8952613bf489610242565b6040519e8f9d8e7f3c7374796c653e2e6f7b66696c6c3a233830383038303b7d2e6231000000000060208201528b5192839101846103ff565b8d016217311960e91b603b820152895190613c4c82603e8301856103ff565b01622e623360e81b603e820152613c6a8a51809360418401906103ff565b01613c7d60418201620b988d60ea1b9052565b018761162e565b622e613160e81b8152018561162e565b6217309960e91b8152018361162e565b622e613360e81b8152019061162e565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000815201613b12565b906102da60bb60405180947f3c7376672077696474683d2234303022206865696768743d223430302220766960208301527f6577426f783d223020302034303020343030222066696c6c3d2277686974652260408301527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608301527f7667223e3c7374796c653e2e6f7b66696c6c3a233035303530353b7d2e777b6660808301527f696c6c3a236639663966393b7d3c2f7374796c653e000000000000000000000060a0830152613dba81518092602060b5860191016103ff565b81017f3c2f7376673e000000000000000000000000000000000000000000000000000060b582015203609b81018552018361027a565b60206001600160a01b039160046040518094819363507f146560e01b8352165afa9081156126a3575f91613e22575090565b90506020813d602011613e4f575b81613e3d6020938361027a565b8101031261048c57516104568161056c565b3d9150613e30565b9061045690613e85604051602092609160f51b84830152602282015260228152613e808161025e565b6152cf565b926040519381613e9e86935180928680870191016103ff565b8201613eb2825180938680850191016103ff565b0103808452018261027a565b906102da602160405184613edc8296518092602080860191016103ff565b8101600160fd1b602082015203600181018552018361027a565b60405190613f0382610242565b600a82527f2072656d61696e696e67000000000000000000000000000000000000000000006020830152565b906102da929493602192613f98604051978894602093613f578151809287808b0191016103ff565b8601613f6b825180938780850191016103ff565b01602f60f81b84820152613f8782518093868a850191016103ff565b0191835193849187850191016103ff565b0103600181018552018361027a565b906102da929493602d92614026604051978894602093613fcf8151809287808b0191016103ff565b86017f2028534f4c44204f555429200000000000000000000000000000000000000000858201526140098251809387602c850191016103ff565b01602f60f81b602c820152613f8782518093868a850191016103ff565b0103600d81018552018361027a565b6102da91613f98949360219260405196879360209261405c8151809286808a0191016103ff565b8501614070825180938680850191016103ff565b0191602f60f81b81840152835193849187850191016103ff565b906102da6022604051846140a88296518092602080860191016103ff565b81016101d160f51b602082015203600281018552018361027a565b60216102da9193929360405194816140e58793518092602080870191016103ff565b82016140fa82518093602080850191016103ff565b01600160fd1b602082015203600181018552018361027a565b60256102da9193929360405194816141358793518092602080870191016103ff565b82017f5550432023000000000000000000000000000000000000000000000000000000602082015261417082518093602087850191016103ff565b0103600581018552018361027a565b906141ed61045692633b9aca006141a86141a3612929612107875163ffffffff1690565b613ebe565b91066141b2613ef6565b81156142445750906141c66141e8926132bc565b6141e26141dd612107606088015163ffffffff1690565b6132bc565b91614035565b61408a565b9061420561291961291161010084015162ffffff1690565b8051614227575b506141dd612107614221925163ffffffff1690565b90614113565b61210761423b6141dd9261422194956140c3565b9392505061420c565b9050604084019163ffffffff61425e845163ffffffff1690565b1680614299575061427c6141dd6121076141e8955163ffffffff1690565b6142936141dd612107606089015163ffffffff1690565b91613fa7565b6141e893506142a7906132bc565b6142be6141dd612107606089015163ffffffff1690565b91613f2f565b604051906142d18261025e565b604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036106ba57565b805115614432576143626142c4565b61437e6143796143728451611419565b6003900490565b614323565b9161439061438b84611427565b613294565b92835280815182019060208501935b8282106143e0575050506003905106806001146143cf576002146143c1575090565b603d60f81b5f199091015290565b50613d3d60f01b6001199091015290565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c168801015160028601531685010151908201530193919061439f565b506104566117ea565b6001600160a01b03805f541681614450615900565b16036144595750565b602490614464615900565b60405163118cdaa760e01b815291166004820152fd5b614483906157d4565b93604096959693919351968796602088017f3c7374796c653e2e62317b66696c6c3a2300000000000000000000000000000090528051908160318a0191602001916144cd926103ff565b8701603181017f3b7d2e62327b66696c6c3a230000000000000000000000000000000000000000905281519182603d8301916020019161450c926103ff565b01603d81017f3b7d2e62337b66696c6c3a23000000000000000000000000000000000000000090528151918260498301916020019161454a926103ff565b0160498101614578907f3b7d2e62347b66696c6c3a2300000000000000000000000000000000000000009052565b6055016145849161162e565b7f3b7d2e61317b66696c6c3a2300000000000000000000000000000000000000008152600c016145b39161162e565b7f3b7d2e61327b66696c6c3a2300000000000000000000000000000000000000008152600c016145e29161162e565b7f3b7d2e61337b66696c6c3a2300000000000000000000000000000000000000008152600c016146119161162e565b7f3b7d3c2f7374796c653e000000000000000000000000000000000000000000008152600a0161464090613b12565b03601f1981018252610456908261027a565b90604051918260209161466d815180928580860191016103ff565b6007545f91830161467d826101b8565b9160019081811690811561470657506001146146aa575b5050506102da925003601f19810184528361027a565b94925060075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688945f905b8382106146ee5750506102da945001015f8080614694565b865482840186015295860195889550908401906146d6565b9150506102da95935060ff9291921916838301528015150201015f8080614694565b906040519182602091614743815180928580860191016103ff565b6008545f918301614753826101b8565b91600190818116908115614706575060011461477f575050506102da925003601f19810184528361027a565b94925060085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3945f905b8382106147c35750506102da945001015f8080614694565b865482840186015295860195889550908401906147ab565b9060405191826020916147f6815180928580860191016103ff565b6005545f918301614806826101b8565b916001908181169081156147065750600114614832575050506102da925003601f19810184528361027a565b94925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0945f905b8382106148765750506102da945001015f8080614694565b8654828401860152958601958895509084019061485e565b9060405191826020916148a9815180928580860191016103ff565b6006545f9183016148b9826101b8565b9160019081811690811561470657506001146148e5575050506102da925003601f19810184528361027a565b94925060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f945f905b8382106149295750506102da945001015f8080614694565b86548284018601529586019588955090840190614911565b91909160608351915f925f935f945f9085935f5b61495e82611435565b811015614b3b5781811015614b2f57614977818c6114f6565b5195614983878961319a565b956149a961210761499e6129116101008b015162ffffff1690565b985163ffffffff1690565b915b600388811492908315614b00575050506001976149c8838b6139e7565b9b5b60048914614af7575b6005898103614aa35750506001965b6007898103614a61575050600b6001985b1180614a57575b614a3d575b15159081614a34575b50614a1c575b506001019794939297614955565b6001919861287d614a2d928a6139e7565b9790614a0e565b9050155f614a08565b9a614a48919a6118c6565b98614a516117ea565b9a6149ff565b508b5115156149fa565b8991991180614a9b575b80614a93575b614a7e575b600b906149f3565b975099614a8a9061488e565b99600197614a76565b508615614a71565b508815614a6b565b899891981180614aef575b80614ae7575b156149e257965060019a8b84145f14614ad857614ad0906147db565b9a5b966149e2565b614ae190614728565b9a614ad2565b508615614ab4565b508715614aae565b600196506149d3565b899d919a929d1180614b27575b156149ca57985099614b1e90614652565b996001986149ca565b508915614b0d565b5f9560129587916149ab565b50505050505050925050565b9190614b68816129ad856001600160a01b03165f52600b60205260405f2090565b54614b738185612a0e565b818414801590614d75575b614b8a575b5050505050565b8214614d5c575b508115614d35576040516331a9108f60e11b808252600482018490526001600160a01b0392918584169060208082602481865afa80156126a35786925f91614d18575b5082614bde615900565b911696168614159384614ca0575b50505050614c8e5763ffffffff614c0661297c858761319a565b1615614c7c5782614c2c826129ad876001600160a01b03165f52600b60205260405f2090565b55614c4c836129ad866001600160a01b03165f52600e60205260405f2090565b553003614c61575b50505b5f80808080614b83565b614c75913090614c6f615900565b90615959565b5f80614c54565b60405163c3095f8760e01b8152600490fd5b60405163d03702f960e01b8152600490fd5b819293945090614cd791614cb2615900565b95614cbd8a8c612a0e565b916040518095819482938352600483019190602083019252565b03915afa9081156126a35783925f92614cfb575b505016911614155f808080614bec565b614d119250803d10612ff757612fe8818361027a565b5f80614ceb565b614d2f9150823d8411612ff757612fe8818361027a565b5f614bd4565b614d5691506129ad5f936001600160a01b03165f52600b60205260405f2090565b55614c57565b614d6f90614d68615900565b3086615959565b5f614b91565b5082811415614b7e565b81519167ffffffffffffffff831161022157680100000000000000008311610221578154838355808410614dde575b506020809101915f5260205f20905f5b848110614dcc575050505050565b83518382015592810192600101614dbe565b614df490835f528460205f209182019101611645565b5f614dae565b909291925f935f915f92614e2b614e26836129ad886001600160a01b03165f52600a60205260405f2090565b611450565b955f945f945f908951615269575b90969299935f999899969296975b82518910156151de579a8a9b614e608a859d9c9d6114f6565b516040516331a9108f60e11b8152600481018290529d9097906001600160a01b03168e6024815a93602094fa9d8e156126a3575f9e6151bd575b508d6001600160a01b0380614ead615900565b92169116141580615132575b61512057614edb612911610100614ed18f8c9061319a565b015162ffffff1690565b9960028b108015615116575b615104578b151590816150f9575b506150e75760048a0361503957506001949095919293955b8981111580615030575b15614fab57508a949392918188614f3b93141580614f99575b614f80575b5061150a565b94858c805182105f14614f7357610100614ed1614f5e614f6694612911946114f6565b51809961319a565b905b959192939490614f0d565b505093505f935f90614f68565b614f9390614f8c615900565b3089615959565b5f614f35565b5089614fa58289612d4f565b14614f30565b93966001929a959d999199969396898d81614fc68583612d4f565b03614fe3575b50505050930197939a949091999899969296614e47565b836129ad615002926001600160a01b03165f52600f60205260405f2090565b556001600160a01b033091160361501c575b80898d614fcc565b61502a90308d614c6f615900565b5f615014565b50801515614f17565b939260098a036150525750600192959192939490614f0d565b9260058a1480156150dd575b80156150d3575b80156150c9575b806150c2575b1561508957604051639b8fdcd160e01b8152600490fd5b600b8a1480156150b8575b806150b1575b15614f68576040516306f7588760e01b8152600490fd5b508361509a565b50600a8a14615094565b5084615072565b50600c8a1461506c565b5060078a14615065565b5060068a1461505e565b604051633869abd960e21b8152600490fd5b90508a11155f614ef5565b60405163b0ee46ab60e01b8152600490fd5b5060118b11614ee7565b60405163032cac0360e01b8152600490fd5b508b6001600160a01b036020615175615149615900565b936151548d82612d4f565b6040519485809481936331a9108f60e11b8352600483019190602083019252565b0392165afa9081156126a3576001600160a01b039182915f9161519e575b501691161415614eb9565b6151b7915060203d602011612ff757612fe8818361027a565b5f615193565b6151d7919e5060203d602011612ff757612fe8818361027a565b9c5f614e9a565b5050979550915091949250805b61521a575050506102da92916129ad615215926001600160a01b03165f52600a60205260405f2090565b614d7f565b90818561522a6152359487612d4f565b14615256575061150a565b815181101561524f5761524881836114f6565b51806151eb565b5f806151eb565b614f9390615262615900565b3087615959565b955050615275886114e4565b519461528a612911610100614ed1898c61319a565b90614e39565b604051906105e0820182811067ffffffffffffffff82111761022157604052602e82526105c0366020840137565b9081518110156114f1570160200190565b90815115615401576152df615290565b915f6152ea846114e4565b5260019080515f915b8183106153185750505061530e6153139161045693946159bd565b6159ff565b615a44565b90919361536061535a61535461532e88866152be565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b905f915b60ff90888288168510156153c4576001929161539961539361535a61538c8961539f966114f6565b5160ff1690565b60081b90565b90611443565b6153bb603a92838306166153b3878d6114f6565b9060ff169052565b04920191615364565b509196925050805b6153db575060010191906152f3565b9360ff6001603a926153f783858a06166153b38584168d6114f6565b01169404806153cc565b905061045661327e565b6040519061541882610242565b600682527f66666539303000000000000000000000000000000000000000000000000000006020830152565b6040519061545182610242565b600682527f66666337303000000000000000000000000000000000000000000000000000006020830152565b6040519061548a82610242565b600682527f66336136303300000000000000000000000000000000000000000000000000006020830152565b604051906154c382610242565b600682527f39363561316100000000000000000000000000000000000000000000000000006020830152565b604051906154fc82610242565b600682527f66663763303200000000000000000000000000000000000000000000000000006020830152565b6040519061553582610242565b600682527f66643336303000000000000000000000000000000000000000000000000000006020830152565b6040519061556e82610242565b600682527f63333265306400000000000000000000000000000000000000000000000000006020830152565b604051906155a782610242565b600682527f66666438633500000000000000000000000000000000000000000000000000006020830152565b604051906155e082610242565b600682527f66663936613900000000000000000000000000000000000000000000000000006020830152565b6040519061561982610242565b600682527f66653538386200000000000000000000000000000000000000000000000000006020830152565b6040519061565282610242565b600682527f63393266343500000000000000000000000000000000000000000000000000006020830152565b6040519061568b82610242565b600682527f36376437353700000000000000000000000000000000000000000000000000006020830152565b604051906156c482610242565b600682527f33306132323000000000000000000000000000000000000000000000000000006020830152565b604051906156fd82610242565b600682527f32313761313500000000000000000000000000000000000000000000000000006020830152565b6040519061573682610242565b600682527f30393439306600000000000000000000000000000000000000000000000000006020830152565b6040519061576f82610242565b600682527f65343833656600000000000000000000000000000000000000000000000000006020830152565b604051906157a882610242565b600682527f64633266656600000000000000000000000000000000000000000000000000006020830152565b6001810361581b57506157e561567e565b906157ee6156b7565b906157f76156f0565b90615800615729565b90615809615762565b9061581261579b565b9061045661579b565b60028103615862575061582c61559a565b906158356155d3565b9061583e61560c565b90615847615645565b9061585061559a565b906158596155d3565b9061045661560c565b600381036158a9575061587361547d565b9061587c6154ef565b90615885615528565b9061588e615561565b9061589761547d565b906158a06154ef565b90610456615528565b6004146158c257604051639a7b332360e01b8152600490fd5b6158ca61540b565b906158d3615444565b906158dc61547d565b906158e56154b6565b906158ee61540b565b906158f7615444565b9061045661547d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633148061594e575b1561594a5760131936013681116106ba573560601c90565b3390565b506014361015615932565b909291926001600160a01b0380921690813b1561048c575f6064928195856040519889978896632142170760e11b885216600487015216602485015260448401525af180156126a3576159a95750565b67ffffffffffffffff811161022157604052565b9060ff809116906159cd8261149e565b925f5b8381106159de575050505090565b80836159ec600193856114f6565b51166159f882886114f6565b52016159d0565b908151615a0b8161149e565b905f5b818110615a1c575090925050565b60019060ff615a315f198389510301886114f6565b5116615a3d82866114f6565b5201615a0e565b8051615a4f8161124f565b916040615a5f604051948561027a565b828452615a6b8361124f565b60209190601f190136868401375f5b848110615a8957505050505090565b6001908251615a978161025e565b603a81527f31323334353637383941424344454647484a4b4c4d4e50515253545556575859858201527f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000848201527fff0000000000000000000000000000000000000000000000000000000000000090615b1f9060ff615b17858a6114f6565b5116906152be565b51165f1a615b2d82896152be565b5301615a7a56fea26469706673582212203a4c382e9b69538f97fd89527b2bef347de3dfd6b15949e701b2c0d26013e29864736f6c63430008170033",
908
+ "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806257bfdd146101b357806305b2ae1b146101ae578063150b7a02146101a9578063187be308146101a457806318ab522d1461019f5780632150a1381461019a5780632580833d1461019557806331a290ac14610190578063572b6c051461018b57806359a81d91146101865780635e703e71146101815780636aff31dd1461017c578063715018a61461017757806379a2696e146101725780637da0a8771461016d578063875e4bea146101685780638da5cb5b14610163578063a0122c091461015e578063a22d0dd514610159578063b03a3eab14610154578063b1fa9e7b1461014f578063b3fa27831461014a578063c06e7bc714610145578063c122804614610140578063d756227e1461013b5763f2fde38b14610136575f80fd5b611371565b6112a1565b611207565b6110b9565b611014565b610fe9565b610f45565b610f00565b610e64565b610e3f565b610cd2565b610c8f565b610c5c565b610bf8565b610bce565b610ba2565b610afd565b610aa7565b61093f565b6107db565b610736565b6106bf565b610629565b6105ab565b610490565b610459565b90600182811c921680156101e6575b60208310146101d257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101c7565b634e487b7160e01b5f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761022157604052565b6101f0565b6020810190811067ffffffffffffffff82111761022157604052565b6040810190811067ffffffffffffffff82111761022157604052565b6060810190811067ffffffffffffffff82111761022157604052565b90601f8019910116810190811067ffffffffffffffff82111761022157604052565b604051905f82600354916102af836101b8565b8083529260209060019081811690811561033b57506001146102dc575b50506102da9250038361027a565b565b91509260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b935f925b82841061032357506102da9450505081016020015f806102cc565b85548885018301529485019487945092810192610308565b915050602092506102da94915060ff191682840152151560051b8201015f806102cc565b9060405191825f8254610371816101b8565b908184526020946001916001811690815f146103dd575060011461039f575b5050506102da9250038361027a565b5f90815285812095935091905b8183106103c55750506102da93508201015f8080610390565b855488840185015294850194879450918301916103ac565b925050506102da94925060ff191682840152151560051b8201015f8080610390565b5f5b8381106104105750505f910152565b8181015183820152602001610401565b90602091610439815180928185528580860191016103ff565b601f01601f1916010190565b906020610456928181520190610420565b90565b3461048c575f36600319011261048c5761048861047461029c565b604051918291602083526020830190610420565b0390f35b5f80fd5b3461048c575f36600319011261048c576040515f6008546104b0816101b8565b8084529060209060019081811690811561054257506001146104e9575b610488856104dd8187038261027a565b60405191829182610445565b60085f90815293507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83851061052f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610513565b869550610488969350602092506104dd94915060ff191682840152151560051b82010192936104cd565b6001600160a01b0381160361048c57565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020838186019501011161048c57565b3461048c57608036600319011261048c576004356105c88161056c565b6105d360243561056c565b60643567ffffffffffffffff811161048c576105f390369060040161057d565b50506001600160a01b033091160361061757604051630a85bd0160e11b8152602090f35b604051633b2c6aa160e21b8152600490fd5b3461048c57604036600319011261048c576004356106468161056c565b6001600160a01b036024359161065c8382612f6d565b16805f52600260205260405f20825f5260205260405f20549162093a804201928342116106ba5783106106a8576106a5915f52600260205260405f20905f5260205260405f2090565b55005b604051631057c89560e21b8152600490fd5b611405565b3461048c57604036600319011261048c576106e86004356106df8161056c565b60243590611518565b90604051918291604083019083526020906040602085015282518091526020606085019301915f5b82811061071f57505050500390f35b835185528695509381019392810192600101610710565b3461048c575f36600319011261048c576040515f600554610756816101b8565b80845290602090600190818116908115610542575060011461078257610488856104dd8187038261027a565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8385106107c8575050505081016020016104dd826104886104cd565b80548686018401529382019381016107ac565b3461048c575f36600319011261048c576040515f6006546107fb816101b8565b80845290602090600190818116908115610542575060011461082757610488856104dd8187038261027a565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b83851061086d575050505081016020016104dd826104886104cd565b8054868601840152938201938101610851565b604051906102da82610204565b67ffffffffffffffff81116102215760051b60200190565b92916108b08261088d565b916108be604051938461027a565b829481845260208094019160051b810192831161048c57905b8282106108e45750505050565b813581529083019083016108d7565b9080601f8301121561048c57816020610456933591016108a5565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020808501948460051b01011161048c57565b3461048c5760408060031936011261048c5760049067ffffffffffffffff823581811161048c5761097390369085016108f3565b9060243590811161048c5761098b903690850161090e565b9290915f5b8151811015610aa5576109a381836114f6565b516109b96109b28388886115e2565b369161126b565b6109d36109ce835f52600d60205260405f2090565b611624565b610a95576109e9825f52600460205260405f2090565b548015610a855785516020810190610a1381610a05848761162e565b03601f19810183528261027a565b51902003610a7557907faeb631726b45aa3f6b09da79f7af03a9784614901f61a967ed84d63c37b7edc7610a6c83610a5f60019695610a5a865f52600d60205260405f2090565b6116f3565b87519182913390836117c3565b0390a201610990565b845163d8e55daf60e01b81528890fd5b85516338d87d3960e01b81528990fd5b845163444244f560e01b81528890fd5b005b3461048c57602036600319011261048c576020600435610ac68161056c565b6001600160a01b039060405191807f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb566169116148152f35b3461048c575f36600319011261048c576040515f600954610b1d816101b8565b808452906020906001908181169081156105425750600114610b4957610488856104dd8187038261027a565b60095f90815293507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b838510610b8f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610b73565b3461048c57604036600319011261048c57610488610474600435610bc58161056c565b6024359061209c565b3461048c57602036600319011261048c576004355f526004602052602060405f2054604051908152f35b3461048c575f36600319011261048c57610c1061443b565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461048c57604036600319011261048c576020610c87600435610c7e8161056c565b60243590612a0e565b604051908152f35b3461048c575f36600319011261048c5760206040516001600160a01b037f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb566168152f35b3461048c5760208060031936011261048c5767ffffffffffffffff60043581811161048c57610d0590369060040161057d565b9091610d0f61443b565b811161022157610d2981610d246003546101b8565b61165b565b5f92601f8211600114610d9d5750610d7881807f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f955f91610d92575b508160011b915f199060031b1c19161790565b6003555b610d8d604051928392339184612a69565b0390a1005b90508401355f610d65565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b868210610e27575050827f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f9510610e0e575b5050600181811b01600355610d7c565b8301355f19600384901b60f8161c191690555f80610dfe565b80600184958294958901358155019401920190610dcc565b3461048c575f36600319011261048c5760206001600160a01b035f5416604051908152f35b3461048c57604036600319011261048c57610eda600435610e848161056c565b610488610e9e610e97602435809461319a565b809361417f565b91610ee8610ec563ffffffff610ebd62ffffff61010086015116613790565b935116613990565b91604051958695606087526060870190610420565b908582036020870152610420565b908382036040850152610420565b8015150361048c57565b3461048c57608036600319011261048c57610488610474600435610f238161056c565b604435610f2f81610ef6565b60643591610f3c83610ef6565b60243590612bb6565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c57610f779036906004016108f3565b9060243590811161048c573660238201121561048c578060040135610f9b8161088d565b91610fa9604051938461027a565b8183526020916024602085019160051b8301019136831161048c57602401905b828210610fda57610aa58587612cb8565b81358152908301908301610fc9565b3461048c57604036600319011261048c576020610c8760043561100b8161056c565b60243590612d4f565b3461048c575f36600319011261048c576040515f600754611034816101b8565b80845290602090600190818116908115610542575060011461106057610488856104dd8187038261027a565b60075f90815293507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b8385106110a6575050505081016020016104dd826104886104cd565b805486860184015293820193810161108a565b3461048c57608036600319011261048c576004356110d68161056c565b6044359060243560643567ffffffffffffffff811161048c576110fd90369060040161090e565b906002600154146111f55760026001556111178385612f6d565b6001600160a01b039182851692835f526002602052604096875f20865f52602052875f205442106111e45761114a615900565b97838151918083528201527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161048c57866111d5967f6a68946ba06488db8585d7c7637fa954b574035fe15720ea760125ef8601725883606086958a6111db9f996111ce9a8c60051b8093868601371660208301528101030190a48587614b47565b36916108a5565b91614dfa565b610aa560018055565b8751632d2f65a360e11b8152600490fd5b604051633ee5aeb560e01b8152600490fd5b3461048c57604036600319011261048c576001600160a01b0360043561122c8161056c565b165f52600260205260405f206024355f52602052602060405f2054604051908152f35b67ffffffffffffffff811161022157601f01601f191660200190565b9291926112778261124f565b91611285604051938461027a565b82948184528183011161048c578281602093845f960137010152565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c576112d39036906004016108f3565b60249060243583811161048c573660238201121561048c578060040135926112fa8461088d565b93611308604051958661027a565b8085526020956024602087019260051b8501019336851161048c5760248101925b85841061133a57610aa58888612dde565b833583811161048c5782013660438201121561048c5789916113668392369060448a820135910161126b565b815201930192611329565b3461048c57602036600319011261048c5760043561138e8161056c565b61139661443b565b6001600160a01b038091169081156113ed575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52601160045260245ffd5b90600282018092116106ba57565b90602082018092116106ba57565b90600182018092116106ba57565b919082018092116106ba57565b90604051918281549182825260209260208301915f5260205f20935f905b828210611484575050506102da9250038361027a565b85548452600195860195889550938101939091019061146e565b906114a88261088d565b6114b5604051918261027a565b82815280926114c6601f199161088d565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b8051156114f15760200190565b6114d0565b80518210156114f15760209160051b010190565b5f1981146106ba5760010190565b9190915f926001600160a01b0382165f52600a60205260405f20815f5260205261154460405f20611450565b9361154f855161149e565b915f915f5b875181101561159d578061156a6001928a6114f6565b5184611576828a612d4f565b14611583575b5001611554565b61159661158f8761150a565b96886114f6565b525f61157c565b5095509050929190926115c1826001600160a01b03165f52600b60205260405f2090565b815f526020526115d660405f20548093612a0e565b146115de5750565b9250565b91908110156114f15760051b81013590601e198136030182121561048c57019081359167ffffffffffffffff831161048c57602001823603811361048c579190565b61045690546101b8565b90611641602092828151948592016103ff565b0190565b818110611650575050565b5f8155600101611645565b90601f8211611668575050565b6102da9160035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c830193106116b1575b601f0160051c0190611645565b90915081906116a4565b9190601f81116116ca57505050565b6102da925f5260205f20906020601f840160051c830193106116b157601f0160051c0190611645565b919091825167ffffffffffffffff81116102215761171b8161171584546101b8565b846116bb565b602080601f831160011461175c5750819061174d9394955f92611751575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611739565b90601f19831695611770855f5260205f2090565b925f905b8882106117ab57505083600195969710611793575b505050811b019055565b01515f1960f88460031b161c191690555f8080611789565b80600185968294968601518155019501930190611774565b906001600160a01b036117e3602092959495604085526040850190610420565b9416910152565b604051906117f782610226565b5f8252565b6040519061180982610242565b600f82527f2261747472696275746573223a205b00000000000000000000000000000000006020830152565b6040519061184282610242565b600e82527f226f7574666974496473223a205b0000000000000000000000000000000000006020830152565b9060405191826060515f5b8181106118ad57509060206102da936118a182948401918383015f81528151948592016103ff565b0103808552018361027a565b6020919250806080015182828801015201908491611879565b60206102da9193929360405194816118e787935180928680870191016103ff565b82016118a1825180938680850191016103ff565b5f198101919082116106ba57565b906102da6021604051846119278296518092602080860191016103ff565b8101600b60fa1b602082015203600181018552018361027a565b906102da60226040518461195f8296518092602080860191016103ff565b810161174b60f21b602082015203600281018552018361027a565b6040906102da92949394825195869160209361199e815180928780880191016103ff565b83017f7b2274726169745f74797065223a202200000000000000000000000000000000858201526119d882518093876030850191016103ff565b016c111610113b30b63ab2911d101160991b6030820152611a028251809386603d850191016103ff565b0162089f4b60ea1b603d820152039081018552018361027a565b906102da604a60405184611a3a8296518092602080860191016103ff565b81017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022227d2c00000000000000000000000000000000000000000000604082015203602a81018552018361027a565b60316102da919392936040519481611ab88793518092602080870191016103ff565b82017f226261636b67726f756e644964223a20000000000000000000000000000000006020820152611af48251809360206030850191016103ff565b01600b60fa1b603082015203601181018552018361027a565b604a6102da919392936040519481611b2f8793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022000000000000000000000000000000000000000000000000006040820152611b918251809360206047850191016103ff565b0162089f4b60ea1b604782015203602a81018552018361027a565b60376102da919392936040519481611bce8793518092602080870191016103ff565b82017f226368616e6765734c6f636b6564556e74696c223a20000000000000000000006020820152611c0a8251809360206036850191016103ff565b01600b60fa1b603682015203601781018552018361027a565b60526102da919392936040519481611c458793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224368616e676573206c6f636b6564207560208201527f6e74696c222c202276616c7565223a20000000000000000000000000000000006040820152611ca78251809360206050850191016103ff565b01611f4b60f21b605082015203603281018552018361027a565b906102da603660405180947f22776f726e427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b8101600b60fa1b603582015203601681018552018361027a565b604b6102da919392936040519481611d428793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022576f726e2062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b01611f4b60f21b604982015203602b81018552018361027a565b906102da603660405180947f2275736564427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b604b6102da919392936040519481611e118793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022557365642062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b81601f8201121561048c578051611e758161124f565b92611e83604051948561027a565b8184526020828401011161048c5761045691602080850191016103ff565b9060208282031261048c57815167ffffffffffffffff811161048c576104569201611e5f565b6040513d5f823e3d90fd5b9081602091031261048c575190565b9081606091031261048c57805191604060208301519201516104568161056c565b612030600392959460a46102da956040519885611f298b975180926020808b0191016103ff565b86017f7b2274726169745f74797065223a202250726f64756374206e616d65222c202260208201527f76616c7565223a202200000000000000000000000000000000000000000000006040820152611f8b8251809360206049850191016103ff565b017f227d2c207b2274726169745f74797065223a202243617465676f7279206e616d60498201527f65222c202276616c7565223a20220000000000000000000000000000000000006069820152611fec8251809360206077850191016103ff565b017f227d2c207b2274726169745f74797065223a2022546f74616c20737570706c7960778201526c111610113b30b63ab2911d101160991b6097820152019061162e565b62227d5d60e81b815203601c1981018552018361027a565b906102da603d60405180947f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261208c81518092602086860191016103ff565b810103601d81018552018361027a565b6120a6828261319a565b9163ffffffff6120ba845163ffffffff1690565b1615612a03576120c86117ea565b506120d16117fc565b610100928385019462ffffff94856120ec885162ffffff1690565b16156128345750612116612110612107835163ffffffff1690565b63ffffffff1690565b836139e7565b9182516127f8575b60018661212e895162ffffff1690565b16036127ca576121626121418683612a0e565b9461215c612156612151886132bc565b611daa565b966132bc565b90611def565b955b8351156126a857509060606001600160a01b0394939260046040518097819363043c358d60e11b8352165afa9384156126a3575f905f9561266e575b5081516121b29063ffffffff16613990565b9688516121c19062ffffff1690565b62ffffff166121cf90613790565b97606084019889516121e49063ffffffff1690565b63ffffffff166121f3906132bc565b916121fd93611f02565b94612208838861417f565b9783516122189063ffffffff1690565b63ffffffff1661222790613990565b9980516122369062ffffff1690565b62ffffff1661224490613790565b9861224e906132bc565b91855161225e9063ffffffff1690565b63ffffffff1661226d906132bc565b915161227d9062ffffff166132bc565b905161228e9063ffffffff166132bc565b9160408701516122a19063ffffffff1690565b63ffffffff166122b0906132bc565b9360208801516122cc906cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff166122e4906132bc565b956122ee906132bc565b966122f8906132bc565b610120989098015161230c9060ff166132bc565b9860405180916020820161231f9161162e565b03601f1981018252612331908261027a565b61233a90614353565b9b6040519e8f9e8f602001612373906009907f7b226e616d65223a22000000000000000000000000000000000000000000000081520190565b61237c9161162e565b7f222c202270726f647563744e616d65223a20220000000000000000000000000081526013016123ab9161162e565b7f222c202263617465676f72794e616d65223a202200000000000000000000000081526014016123da9161162e565b7f222c2022746f6b656e4964223a200000000000000000000000000000000000008152600e016124099161162e565b7f2c2022757063223a20000000000000000000000000000000000000000000000081526009016124389161162e565b7f2c202263617465676f7279223a200000000000000000000000000000000000008152600e016124679161162e565b7f2c2022737570706c79223a2000000000000000000000000000000000000000008152600c016124969161162e565b7f2c202272656d61696e696e67223a2000000000000000000000000000000000008152600f016124c59161162e565b7f2c20227072696365223a200000000000000000000000000000000000000000008152600b016124f49161162e565b7f2c2022646563696d616c73223a200000000000000000000000000000000000008152600e016125239161162e565b7f2c202263757272656e6379223a200000000000000000000000000000000000008152600e016125529161162e565b7f2c2022646973636f756e74223a200000000000000000000000000000000000008152600e016125819161162e565b61016160f51b81526002016125959161162e565b61259e9161162e565b7f2c20226465736372697074696f6e223a2241207069656365206f662042616e6e81527f792052657461696c2e222c2265787465726e616c5f75726c223a22687474707360208201527f3a2f2f72657461696c2e62616e6e792e6574682e7375636b73222c22696d616760408201527f65223a22646174613a696d6167652f7376672b786d6c3b6261736536342c00006060820152607e0161263f9161162e565b61227d60f01b815260020103601f198101825261265c908261027a565b61266590614353565b61045690612048565b905061269391945060603d60601161269c575b61268b818361027a565b810190611ee1565b5093905f6121a0565b503d612681565b611ec7565b9350945050506126be601192945162ffffff1690565b1611156127b657604051636c0360eb60e01b81525f816004816001600160a01b0386165afa9283156126a357612747936020925f91612794575b50925b61271361270782613df0565b6001600160a01b031690565b604051630c8df17160e41b81526001600160a01b039092166004830152602482019290925293849190829081906044820190565b03915afa9081156126a357610456925f92612763575b50613e57565b61278691925060203d60201161278d575b61277e818361027a565b810190611ed2565b905f61275d565b503d612774565b6127b091503d805f833e6127a8818361027a565b810190611ea1565b5f6126f8565b6020612747926127c461029c565b926126fb565b6127f26127d78683612d4f565b946127ec6121566127e7886132bc565b611cc1565b90611d20565b95612164565b916128189060018761280d8a5162ffffff1690565b160361281e57613cdd565b9161211e565b61282f9061282a613b9e565b6118c6565b613cdd565b91909293966128438883612aa2565b9661284e8984611518565b979099612859611835565b9a5f9b5b8a518d10156128b2576128839061287d6128778f8e6114f6565b516132bc565b906118c6565b9b61288e8b516118fb565b811061289e575b6001019b61285d565b9b6128aa600191611909565b9c9050612895565b6128c7919395979a989b929496999c50611941565b995f9b5b88518d101561293c576129346001918c8f6129296121078f8f61291161290561291e936128fe61292e98612919956114f6565b519061319a565b9687015162ffffff1690565b62ffffff1690565b613790565b935163ffffffff1690565b613990565b9161197a565b9c019b6128cb565b939894995094999196509499508515155f146129f2579061298661292961210761297c61297561298c9661296f8c6132bc565b90611a96565b998761319a565b5163ffffffff1690565b90611b0d565b955b6129ba866129ad846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b544281116129c9575b50612164565b94966129e56121566129eb93996129df896132bc565b90611bac565b90611c23565b955f6129c3565b94506129fd90611a1c565b9561298e565b5050506104566117ea565b6001600160a01b0316805f52600e60205260405f20825f5260205260405f2054918215918215612a47575b5050612a425790565b505f90565b9091505f52600b60205260405f20825f5260205260405f205414155f80612a39565b916060816001600160a01b039260209497969760408752816040880152838701375f828287010152601f80199101168401019416910152565b612aac828261319a565b9163ffffffff612ac0845163ffffffff1690565b1615612a035760609062ffffff612ade61010086015162ffffff1690565b16612b825792612b22612b2892612af86104569686611518565b939080151580612b7a575b612b44575b50612b1d61210761287d925163ffffffff1690565b61447a565b92614941565b8051612b35575b50613cdd565b612b3e916118c6565b5f612b2f565b61287d919250612107612b71612b6c612b6661210761297c612b1d968d61319a565b8a6139e7565b61186e565b93925050612b08565b506001612b03565b5050612b98612107612b9e935163ffffffff1690565b906139e7565b8051612bad57506104566117ea565b61045690613cdd565b9092612bc2848361319a565b9363ffffffff612bd6865163ffffffff1690565b1615612cab5760609062ffffff612bf461010088015162ffffff1690565b16612c92579061045695612c0b612c309386611518565b948115159081612c8a575b50612c625750612b1d61210761287d925163ffffffff1690565b92612c3d575b5050613cdd565b612c4691614941565b8051612c53575b80612c36565b612c5c916118c6565b5f612c4d565b61287d919250612107612b71612b6c612c8461210761297c612b1d968c61319a565b896139e7565b90505f612c16565b5050509050612b98612107612b9e935163ffffffff1690565b50505050506104566117ea565b91612cc161443b565b5f925b8051841015612d4957612cd784826114f6565b5193612ce381856114f6565b51855f5260049560208781526040805f2054612d3a57907fb10eb6fc7557a7109693cb8f3fac48d44328de56c0368ee4cac539b424d2cad991600196979899845f52825284815f205551338152a301929190612cc4565b51632165e0ab60e01b81528890fd5b50915050565b6001600160a01b0381165f52600f60205260405f20825f5260205260405f2054908115612dd757612d91906001600160a01b03165f52600a60205260405f2090565b815f52602052612da360405f20611450565b915f5b8351811015612dcf5781612dba82866114f6565b5114612dc857600101612da6565b5050905090565b505050505f90565b5050505f90565b91612de761443b565b5f925b8051841015612d4957612dfd84826114f6565b5193612e0981856114f6565b5194805f52602095600c87526040805f20825167ffffffffffffffff811161022157612e398161171584546101b8565b89601f8211600114612eb75750917f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e969391612e9184612ea09560019a9b9c9d5f91612eac57508160011b915f199060031b1c19161790565b90555b519182913390836117c3565b0390a201929190612dea565b90508501515f610d65565b99601f198216612eca845f5260205f2090565b9b5f905b828210612f3357505091600198999a9b7f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e9696949282612ea0979510612f1b575b5050881b88019055612e94565b8501515f1960f88460031b161c191690555f80612f0e565b80600181939f868b015181550194019d01909c929c612ece565b51906102da8261056c565b9081602091031261048c57516104568161056c565b6040516331a9108f60e11b815260048101929092526001600160a01b03906020908390602490829085165afa9182156126a3575f92612fcd575b5080612fb1615900565b16911603612fbb57565b6040516341eb334360e11b8152600490fd5b612ff091925060203d602011612ff7575b612fe8818361027a565b810190612f58565b905f612fa7565b503d612fde565b519063ffffffff8216820361048c57565b51906cffffffffffffffffffffffffff8216820361048c57565b519061ffff8216820361048c57565b519062ffffff8216820361048c57565b519060ff8216820361048c57565b51906102da82610ef6565b60208183031261048c57805167ffffffffffffffff9182821161048c57016101e08184031261048c57613092610880565b9261309c82612ffe565b84526130aa6020830161300f565b60208501526130bb60408301612ffe565b60408501526130cc60608301612ffe565b60608501526130dd6080830161300f565b60808501526130ee60a08301613029565b60a08501526130ff60c08301612f4d565b60c085015260e082015160e085015261010061311c818401613038565b9085015261012061312e818401613048565b90850152610140613140818401613056565b90850152610160613152818401613056565b90850152610180613164818401613056565b908501526101a0613176818401613056565b908501526101c0928383015190811161048c576131939201611e5f565b9082015290565b61324d915f9160606101c06040516131b181610204565b85815285602082015285604082015285838201528560808201528560a08201528560c08201528560e08201528561010082015285610120820152856101408201528561016082015285610180820152856101a0820152015261321561270782613df0565b9060405180958194829363c44a8e6d60e01b8452600484016040905f9294936001600160a01b03606083019616825260208201520152565b03915afa9081156126a3575f91613262575090565b61045691503d805f833e613276818361027a565b810190613061565b60405161328a81610226565b5f8152905f368137565b9061329e8261124f565b6132ab604051918261027a565b82815280926114c6601f199161124f565b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156133fd575b506d04ee2d6d415b85acef8100000000808310156133ee575b50662386f26fc10000808310156133df575b506305f5e100808310156133d0575b50612710808310156133c1575b5060648210156133b1575b600a809210156133a7575b60019081602161335360018701613294565b95860101905b613365575b5050505090565b5f19019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156133a257919082613359565b61335e565b9160010191613341565b9190606460029104910191613336565b6004919392049101915f61332b565b6008919392049101915f61331e565b6010919392049101915f61330f565b6020919392049101915f6132fd565b60409350810491505f6132e4565b6040519061341882610242565b600c82527f5370656369616c20426f647900000000000000000000000000000000000000006020830152565b6040519061345182610242565b600c82527f5370656369616c204865616400000000000000000000000000000000000000006020830152565b6040519061348a82610242565b600c82527f5370656369616c204c65677300000000000000000000000000000000000000006020830152565b604051906134c382610242565b600c82527f5370656369616c205375697400000000000000000000000000000000000000006020830152565b604051906134fc82610242565b6004825263119a5cdd60e21b6020830152565b6040519061351c82610242565b600b82527f5375697420626f74746f6d0000000000000000000000000000000000000000006020830152565b6040519061355582610242565b600882527f5375697420746f700000000000000000000000000000000000000000000000006020830152565b6040519061358e82610242565b600482526314dd5a5d60e21b6020830152565b604051906135ae82610242565b60048252631219585960e21b6020830152565b604051906135ce82610242565b600882527f4865616420746f700000000000000000000000000000000000000000000000006020830152565b6040519061360782610242565b600582527f4d6f7574680000000000000000000000000000000000000000000000000000006020830152565b6040519061364082610242565b600782527f476c6173736573000000000000000000000000000000000000000000000000006020830152565b6040519061367982610242565b60048252634579657360e01b6020830152565b6040519061369982610242565b600882527f4e65636b6c6163650000000000000000000000000000000000000000000000006020830152565b604051906136d282610242565b60048252634c65677360e01b6020830152565b604051906136f282610242565b600882527f4261636b736964650000000000000000000000000000000000000000000000006020830152565b6040519061372b82610242565b600a82527f4261636b67726f756e64000000000000000000000000000000000000000000006020830152565b6040519061376482610242565b600a82527f42616e6e7920626f6479000000000000000000000000000000000000000000006020830152565b8061379e5750610456613757565b600181036137af575061045661371e565b600281036137c057506104566136e5565b600881036137d157506104566136c5565b600381036137e2575061045661368c565b600581036137f3575061045661366c565b600681036138045750610456613633565b6007810361381557506104566135fa565b600c810361382657506104566135c1565b6004810361383757506104566135a1565b600981036138485750610456613581565b600b81036138595750610456613548565b600a810361386a575061045661350f565b600d810361387b57506104566134ef565b600e810361388c57506104566134b6565b600f810361389d575061045661347d565b601081036138ae5750610456613444565b6011146138bd576104566117ea565b61045661340b565b604051906138d282610242565b600882527f4f726967696e616c0000000000000000000000000000000000000000000000006020830152565b6040519061390b82610242565b600682527f4f72616e676500000000000000000000000000000000000000000000000000006020830152565b6040519061394482610242565b600482526350696e6b60e01b6020830152565b6040519061396482610242565b600582527f416c69656e0000000000000000000000000000000000000000000000000000006020830152565b600181036139a15750610456613957565b600281036139b25750610456613937565b600381036139c357506104566138fe565b600481036139d457506104566138c5565b5f52600c60205261045660405f2061035f565b90805f52602091600d83526139fe60405f2061035f565b8051613b0b5750613a5091816001600160a01b03613a1c8694613df0565b1690604051809581948293632f54648f60e21b845260048401602090939291936001600160a01b0360408201951681520152565b03915afa80156126a357613ab892613a7d604992610456945f91613aee575b50613a7861029c565b613e57565b60405194827f3c696d61676520687265663d220000000000000000000000000000000000000087948501528251928391602d860191016103ff565b81017f222077696474683d2234303022206865696768743d22343030222f3e00000000602d82015203602981018452018261027a565b613b059150833d851161278d5761277e818361027a565b5f613a6f565b9250505090565b6009545f9291613b21826101b8565b91600190818116908115613b8b5750600114613b3c57505050565b909192935060095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af905f915b848310613b78575050500190565b8181602092548587015201920191613b6a565b60ff191683525050811515909102019150565b603b610456613c2d610a056008613cb46040516003613ca481613c9481613c846044602088017f7b66696c6c3a6e6f6e653b7d00000000000000000000000000000000000000008152600c8952613bf489610242565b6040519e8f9d8e7f3c7374796c653e2e6f7b66696c6c3a233830383038303b7d2e6231000000000060208201528b5192839101846103ff565b8d016217311960e91b603b820152895190613c4c82603e8301856103ff565b01622e623360e81b603e820152613c6a8a51809360418401906103ff565b01613c7d60418201620b988d60ea1b9052565b018761162e565b622e613160e81b8152018561162e565b6217309960e91b8152018361162e565b622e613360e81b8152019061162e565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000815201613b12565b906102da60bb60405180947f3c7376672077696474683d2234303022206865696768743d223430302220766960208301527f6577426f783d223020302034303020343030222066696c6c3d2277686974652260408301527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608301527f7667223e3c7374796c653e2e6f7b66696c6c3a233035303530353b7d2e777b6660808301527f696c6c3a236639663966393b7d3c2f7374796c653e000000000000000000000060a0830152613dba81518092602060b5860191016103ff565b81017f3c2f7376673e000000000000000000000000000000000000000000000000000060b582015203609b81018552018361027a565b60206001600160a01b039160046040518094819363507f146560e01b8352165afa9081156126a3575f91613e22575090565b90506020813d602011613e4f575b81613e3d6020938361027a565b8101031261048c57516104568161056c565b3d9150613e30565b9061045690613e85604051602092609160f51b84830152602282015260228152613e808161025e565b6152cf565b926040519381613e9e86935180928680870191016103ff565b8201613eb2825180938680850191016103ff565b0103808452018261027a565b906102da602160405184613edc8296518092602080860191016103ff565b8101600160fd1b602082015203600181018552018361027a565b60405190613f0382610242565b600a82527f2072656d61696e696e67000000000000000000000000000000000000000000006020830152565b906102da929493602192613f98604051978894602093613f578151809287808b0191016103ff565b8601613f6b825180938780850191016103ff565b01602f60f81b84820152613f8782518093868a850191016103ff565b0191835193849187850191016103ff565b0103600181018552018361027a565b906102da929493602d92614026604051978894602093613fcf8151809287808b0191016103ff565b86017f2028534f4c44204f555429200000000000000000000000000000000000000000858201526140098251809387602c850191016103ff565b01602f60f81b602c820152613f8782518093868a850191016103ff565b0103600d81018552018361027a565b6102da91613f98949360219260405196879360209261405c8151809286808a0191016103ff565b8501614070825180938680850191016103ff565b0191602f60f81b81840152835193849187850191016103ff565b906102da6022604051846140a88296518092602080860191016103ff565b81016101d160f51b602082015203600281018552018361027a565b60216102da9193929360405194816140e58793518092602080870191016103ff565b82016140fa82518093602080850191016103ff565b01600160fd1b602082015203600181018552018361027a565b60256102da9193929360405194816141358793518092602080870191016103ff565b82017f5550432023000000000000000000000000000000000000000000000000000000602082015261417082518093602087850191016103ff565b0103600581018552018361027a565b906141ed61045692633b9aca006141a86141a3612929612107875163ffffffff1690565b613ebe565b91066141b2613ef6565b81156142445750906141c66141e8926132bc565b6141e26141dd612107606088015163ffffffff1690565b6132bc565b91614035565b61408a565b9061420561291961291161010084015162ffffff1690565b8051614227575b506141dd612107614221925163ffffffff1690565b90614113565b61210761423b6141dd9261422194956140c3565b9392505061420c565b9050604084019163ffffffff61425e845163ffffffff1690565b1680614299575061427c6141dd6121076141e8955163ffffffff1690565b6142936141dd612107606089015163ffffffff1690565b91613fa7565b6141e893506142a7906132bc565b6142be6141dd612107606089015163ffffffff1690565b91613f2f565b604051906142d18261025e565b604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036106ba57565b805115614432576143626142c4565b61437e6143796143728451611419565b6003900490565b614323565b9161439061438b84611427565b613294565b92835280815182019060208501935b8282106143e0575050506003905106806001146143cf576002146143c1575090565b603d60f81b5f199091015290565b50613d3d60f01b6001199091015290565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c168801015160028601531685010151908201530193919061439f565b506104566117ea565b6001600160a01b03805f541681614450615900565b16036144595750565b602490614464615900565b60405163118cdaa760e01b815291166004820152fd5b614483906157d4565b93604096959693919351968796602088017f3c7374796c653e2e62317b66696c6c3a2300000000000000000000000000000090528051908160318a0191602001916144cd926103ff565b8701603181017f3b7d2e62327b66696c6c3a230000000000000000000000000000000000000000905281519182603d8301916020019161450c926103ff565b01603d81017f3b7d2e62337b66696c6c3a23000000000000000000000000000000000000000090528151918260498301916020019161454a926103ff565b0160498101614578907f3b7d2e62347b66696c6c3a2300000000000000000000000000000000000000009052565b6055016145849161162e565b7f3b7d2e61317b66696c6c3a2300000000000000000000000000000000000000008152600c016145b39161162e565b7f3b7d2e61327b66696c6c3a2300000000000000000000000000000000000000008152600c016145e29161162e565b7f3b7d2e61337b66696c6c3a2300000000000000000000000000000000000000008152600c016146119161162e565b7f3b7d3c2f7374796c653e000000000000000000000000000000000000000000008152600a0161464090613b12565b03601f1981018252610456908261027a565b90604051918260209161466d815180928580860191016103ff565b6007545f91830161467d826101b8565b9160019081811690811561470657506001146146aa575b5050506102da925003601f19810184528361027a565b94925060075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688945f905b8382106146ee5750506102da945001015f8080614694565b865482840186015295860195889550908401906146d6565b9150506102da95935060ff9291921916838301528015150201015f8080614694565b906040519182602091614743815180928580860191016103ff565b6008545f918301614753826101b8565b91600190818116908115614706575060011461477f575050506102da925003601f19810184528361027a565b94925060085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3945f905b8382106147c35750506102da945001015f8080614694565b865482840186015295860195889550908401906147ab565b9060405191826020916147f6815180928580860191016103ff565b6005545f918301614806826101b8565b916001908181169081156147065750600114614832575050506102da925003601f19810184528361027a565b94925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0945f905b8382106148765750506102da945001015f8080614694565b8654828401860152958601958895509084019061485e565b9060405191826020916148a9815180928580860191016103ff565b6006545f9183016148b9826101b8565b9160019081811690811561470657506001146148e5575050506102da925003601f19810184528361027a565b94925060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f945f905b8382106149295750506102da945001015f8080614694565b86548284018601529586019588955090840190614911565b91909160608351915f925f935f945f9085935f5b61495e82611435565b811015614b3b5781811015614b2f57614977818c6114f6565b5195614983878961319a565b956149a961210761499e6129116101008b015162ffffff1690565b985163ffffffff1690565b915b600388811492908315614b00575050506001976149c8838b6139e7565b9b5b60048914614af7575b6005898103614aa35750506001965b6007898103614a61575050600b6001985b1180614a57575b614a3d575b15159081614a34575b50614a1c575b506001019794939297614955565b6001919861287d614a2d928a6139e7565b9790614a0e565b9050155f614a08565b9a614a48919a6118c6565b98614a516117ea565b9a6149ff565b508b5115156149fa565b8991991180614a9b575b80614a93575b614a7e575b600b906149f3565b975099614a8a9061488e565b99600197614a76565b508615614a71565b508815614a6b565b899891981180614aef575b80614ae7575b156149e257965060019a8b84145f14614ad857614ad0906147db565b9a5b966149e2565b614ae190614728565b9a614ad2565b508615614ab4565b508715614aae565b600196506149d3565b899d919a929d1180614b27575b156149ca57985099614b1e90614652565b996001986149ca565b508915614b0d565b5f9560129587916149ab565b50505050505050925050565b9190614b68816129ad856001600160a01b03165f52600b60205260405f2090565b54614b738185612a0e565b818414801590614d75575b614b8a575b5050505050565b8214614d5c575b508115614d35576040516331a9108f60e11b808252600482018490526001600160a01b0392918584169060208082602481865afa80156126a35786925f91614d18575b5082614bde615900565b911696168614159384614ca0575b50505050614c8e5763ffffffff614c0661297c858761319a565b1615614c7c5782614c2c826129ad876001600160a01b03165f52600b60205260405f2090565b55614c4c836129ad866001600160a01b03165f52600e60205260405f2090565b553003614c61575b50505b5f80808080614b83565b614c75913090614c6f615900565b90615959565b5f80614c54565b60405163c3095f8760e01b8152600490fd5b60405163d03702f960e01b8152600490fd5b819293945090614cd791614cb2615900565b95614cbd8a8c612a0e565b916040518095819482938352600483019190602083019252565b03915afa9081156126a35783925f92614cfb575b505016911614155f808080614bec565b614d119250803d10612ff757612fe8818361027a565b5f80614ceb565b614d2f9150823d8411612ff757612fe8818361027a565b5f614bd4565b614d5691506129ad5f936001600160a01b03165f52600b60205260405f2090565b55614c57565b614d6f90614d68615900565b3086615959565b5f614b91565b5082811415614b7e565b81519167ffffffffffffffff831161022157680100000000000000008311610221578154838355808410614dde575b506020809101915f5260205f20905f5b848110614dcc575050505050565b83518382015592810192600101614dbe565b614df490835f528460205f209182019101611645565b5f614dae565b909291925f935f915f92614e2b614e26836129ad886001600160a01b03165f52600a60205260405f2090565b611450565b955f945f945f908951615269575b90969299935f999899969296975b82518910156151de579a8a9b614e608a859d9c9d6114f6565b516040516331a9108f60e11b8152600481018290529d9097906001600160a01b03168e6024815a93602094fa9d8e156126a3575f9e6151bd575b508d6001600160a01b0380614ead615900565b92169116141580615132575b61512057614edb612911610100614ed18f8c9061319a565b015162ffffff1690565b9960028b108015615116575b615104578b151590816150f9575b506150e75760048a0361503957506001949095919293955b8981111580615030575b15614fab57508a949392918188614f3b93141580614f99575b614f80575b5061150a565b94858c805182105f14614f7357610100614ed1614f5e614f6694612911946114f6565b51809961319a565b905b959192939490614f0d565b505093505f935f90614f68565b614f9390614f8c615900565b3089615959565b5f614f35565b5089614fa58289612d4f565b14614f30565b93966001929a959d999199969396898d81614fc68583612d4f565b03614fe3575b50505050930197939a949091999899969296614e47565b836129ad615002926001600160a01b03165f52600f60205260405f2090565b556001600160a01b033091160361501c575b80898d614fcc565b61502a90308d614c6f615900565b5f615014565b50801515614f17565b939260098a036150525750600192959192939490614f0d565b9260058a1480156150dd575b80156150d3575b80156150c9575b806150c2575b1561508957604051639b8fdcd160e01b8152600490fd5b600b8a1480156150b8575b806150b1575b15614f68576040516306f7588760e01b8152600490fd5b508361509a565b50600a8a14615094565b5084615072565b50600c8a1461506c565b5060078a14615065565b5060068a1461505e565b604051633869abd960e21b8152600490fd5b90508a11155f614ef5565b60405163b0ee46ab60e01b8152600490fd5b5060118b11614ee7565b60405163032cac0360e01b8152600490fd5b508b6001600160a01b036020615175615149615900565b936151548d82612d4f565b6040519485809481936331a9108f60e11b8352600483019190602083019252565b0392165afa9081156126a3576001600160a01b039182915f9161519e575b501691161415614eb9565b6151b7915060203d602011612ff757612fe8818361027a565b5f615193565b6151d7919e5060203d602011612ff757612fe8818361027a565b9c5f614e9a565b5050979550915091949250805b61521a575050506102da92916129ad615215926001600160a01b03165f52600a60205260405f2090565b614d7f565b90818561522a6152359487612d4f565b14615256575061150a565b815181101561524f5761524881836114f6565b51806151eb565b5f806151eb565b614f9390615262615900565b3087615959565b955050615275886114e4565b519461528a612911610100614ed1898c61319a565b90614e39565b604051906105e0820182811067ffffffffffffffff82111761022157604052602e82526105c0366020840137565b9081518110156114f1570160200190565b90815115615401576152df615290565b915f6152ea846114e4565b5260019080515f915b8183106153185750505061530e6153139161045693946159bd565b6159ff565b615a44565b90919361536061535a61535461532e88866152be565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b905f915b60ff90888288168510156153c4576001929161539961539361535a61538c8961539f966114f6565b5160ff1690565b60081b90565b90611443565b6153bb603a92838306166153b3878d6114f6565b9060ff169052565b04920191615364565b509196925050805b6153db575060010191906152f3565b9360ff6001603a926153f783858a06166153b38584168d6114f6565b01169404806153cc565b905061045661327e565b6040519061541882610242565b600682527f66666539303000000000000000000000000000000000000000000000000000006020830152565b6040519061545182610242565b600682527f66666337303000000000000000000000000000000000000000000000000000006020830152565b6040519061548a82610242565b600682527f66336136303300000000000000000000000000000000000000000000000000006020830152565b604051906154c382610242565b600682527f39363561316100000000000000000000000000000000000000000000000000006020830152565b604051906154fc82610242565b600682527f66663763303200000000000000000000000000000000000000000000000000006020830152565b6040519061553582610242565b600682527f66643336303000000000000000000000000000000000000000000000000000006020830152565b6040519061556e82610242565b600682527f63333265306400000000000000000000000000000000000000000000000000006020830152565b604051906155a782610242565b600682527f66666438633500000000000000000000000000000000000000000000000000006020830152565b604051906155e082610242565b600682527f66663936613900000000000000000000000000000000000000000000000000006020830152565b6040519061561982610242565b600682527f66653538386200000000000000000000000000000000000000000000000000006020830152565b6040519061565282610242565b600682527f63393266343500000000000000000000000000000000000000000000000000006020830152565b6040519061568b82610242565b600682527f36376437353700000000000000000000000000000000000000000000000000006020830152565b604051906156c482610242565b600682527f33306132323000000000000000000000000000000000000000000000000000006020830152565b604051906156fd82610242565b600682527f32313761313500000000000000000000000000000000000000000000000000006020830152565b6040519061573682610242565b600682527f30393439306600000000000000000000000000000000000000000000000000006020830152565b6040519061576f82610242565b600682527f65343833656600000000000000000000000000000000000000000000000000006020830152565b604051906157a882610242565b600682527f64633266656600000000000000000000000000000000000000000000000000006020830152565b6001810361581b57506157e561567e565b906157ee6156b7565b906157f76156f0565b90615800615729565b90615809615762565b9061581261579b565b9061045661579b565b60028103615862575061582c61559a565b906158356155d3565b9061583e61560c565b90615847615645565b9061585061559a565b906158596155d3565b9061045661560c565b600381036158a9575061587361547d565b9061587c6154ef565b90615885615528565b9061588e615561565b9061589761547d565b906158a06154ef565b90610456615528565b6004146158c257604051639a7b332360e01b8152600490fd5b6158ca61540b565b906158d3615444565b906158dc61547d565b906158e56154b6565b906158ee61540b565b906158f7615444565b9061045661547d565b6001600160a01b037f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb5661633148061594e575b1561594a5760131936013681116106ba573560601c90565b3390565b506014361015615932565b909291926001600160a01b0380921690813b1561048c575f6064928195856040519889978896632142170760e11b885216600487015216602485015260448401525af180156126a3576159a95750565b67ffffffffffffffff811161022157604052565b9060ff809116906159cd8261149e565b925f5b8381106159de575050505090565b80836159ec600193856114f6565b51166159f882886114f6565b52016159d0565b908151615a0b8161149e565b905f5b818110615a1c575090925050565b60019060ff615a315f198389510301886114f6565b5116615a3d82866114f6565b5201615a0e565b8051615a4f8161124f565b916040615a5f604051948561027a565b828452615a6b8361124f565b60209190601f190136868401375f5b848110615a8957505050505090565b6001908251615a978161025e565b603a81527f31323334353637383941424344454647484a4b4c4d4e50515253545556575859858201527f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000848201527fff0000000000000000000000000000000000000000000000000000000000000090615b1f9060ff615b17858a6114f6565b5116906152be565b51165f1a615b2d82896152be565b5301615a7a56fea26469706673582212203a4c382e9b69538f97fd89527b2bef347de3dfd6b15949e701b2c0d26013e29864736f6c63430008170033",
909
+ "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"bannyBody\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultNecklace\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultMouth\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultStandardEyes\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultAlienEyes\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_CantAccelerateTheLock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_ContentsAlreadyStored\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_ContentsMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HashAlreadyStored\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HashNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HeadAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_OutfitChangesLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_SuitAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedBackground\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedBannyBody\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedOutfit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnorderedCategories\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedBackground\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedCategory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedProduct\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DecorateBanny\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetProductName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"baseUri\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgBaseUri\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"svgContent\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgContent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"svgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BANNY_BODY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ALIEN_EYES\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_MOUTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_NECKLACE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_STANDARD_EYES\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"}],\"name\":\"assetIdsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"}],\"name\":\"decorateBannyWith\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"}],\"name\":\"lockOutfitChangesFor\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"namesOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"}],\"name\":\"outfitLockedUntil\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"setProductNames\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"baseUri\",\"type\":\"string\"}],\"name\":\"setSvgBaseUri\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"svgContents\",\"type\":\"string[]\"}],\"name\":\"setSvgContentsOf\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"svgHashs\",\"type\":\"bytes32[]\"}],\"name\":\"setSvgHashsOf\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"svgBaseUri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"}],\"name\":\"svgHashOf\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"shouldDressBannyBody\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldIncludeBackgroundOnBannyBody\",\"type\":\"bool\"}],\"name\":\"svgOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenUriOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"}],\"name\":\"userOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"outfitId\",\"type\":\"uint256\"}],\"name\":\"wearerOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"assetIdsOf(address,uint256)\":{\"custom:param\":\"hook The hook address of the collection.\",\"params\":{\"bannyBodyId\":\"The ID of the banny body shown with the associated assets.\"},\"returns\":{\"backgroundId\":\"The background attached to the banny body.\",\"outfitIds\":\"The outfits attached to the banny body.\"}},\"constructor\":{\"params\":{\"bannyBody\":\"The SVG of the banny body.\",\"defaultAlienEyes\":\"The SVG of the default alien eyes.\",\"defaultMouth\":\"The SVG of the default mouth.\",\"defaultNecklace\":\"The SVG of the default necklace.\",\"defaultStandardEyes\":\"The SVG of the default standard eyes.\",\"owner\":\"The owner allowed to add SVG files that correspond to product IDs.\",\"trustedForwarder\":\"The trusted forwarder for the ERC2771Context.\"}},\"decorateBannyWith(address,uint256,uint256,uint256[])\":{\"details\":\"The caller must own the banny body being dressed and all outfits being worn.\",\"params\":{\"backgroundId\":\"The ID of the background that'll be associated with the specified banny.\",\"bannyBodyId\":\"The ID of the banny body being dressed.\",\"hook\":\"The hook storing the assets.\",\"outfitIds\":\"The IDs of the outfits that'll be associated with the specified banny. Only one outfit per outfit category allowed at a time and they must be passed in order.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"lockOutfitChangesFor(address,uint256)\":{\"params\":{\"bannyBodyId\":\"The ID of the banny body to lock.\",\"hook\":\"The hook address of the collection.\"}},\"namesOf(address,uint256)\":{\"params\":{\"hook\":\"The hook storing the assets.\",\"tokenId\":\"The ID of the token to show.\"},\"returns\":{\"_0\":\"fullName The full name of the token.\",\"_1\":\"categoryName The name of the token's category.\",\"_2\":\"productName The name of the token's product.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Make sure tokens can be receieved if the transaction was initiated by this contract.\",\"params\":{\"data\":\"The data of the transfer.\",\"from\":\"The address that initiated the transfer.\",\"operator\":\"The address that initiated the transaction.\",\"tokenId\":\"The ID of the token being transferred.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setProductNames(uint256[],string[])\":{\"params\":{\"names\":\"The names of the products.\",\"upcs\":\"The universal product codes of the products having their name stored.\"}},\"setSvgBaseUri(string)\":{\"params\":{\"baseUri\":\"The base URI of the SVG files.\"}},\"setSvgContentsOf(uint256[],string[])\":{\"params\":{\"svgContents\":\"The svg contents being stored, not including the parent <svg></svg> element.\",\"upcs\":\"The universal product codes of the products having SVGs stored.\"}},\"setSvgHashsOf(uint256[],bytes32[])\":{\"details\":\"This allows anyone to lazily upload the correct svg file.\",\"params\":{\"svgHashs\":\"The svg hashes being stored, not including the parent <svg></svg> element.\",\"upcs\":\"The universal product codes of the products having SVG hashes stored.\"}},\"svgOf(address,uint256,bool,bool)\":{\"params\":{\"hook\":\"The hook storing the assets.\",\"shouldDressBannyBody\":\"Whether the banny body should be dressed.\",\"shouldIncludeBackgroundOnBannyBody\":\"Whether the background should be included on the banny body.\",\"tokenId\":\"The ID of the token to show. If the ID belongs to a banny body, it will be shown with its current outfits in its current background if specified.\"},\"returns\":{\"_0\":\"svg The SVG.\"}},\"tokenUriOf(address,uint256)\":{\"params\":{\"tokenId\":\"The ID of the token to show. If the ID belongs to a banny body, it will be shown with its current outfits in its current background.\"},\"returns\":{\"_0\":\"tokenUri The URI representing the SVG.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"userOf(address,uint256)\":{\"params\":{\"backgroundId\":\"The ID of the background being used.\",\"hook\":\"The hook address of the collection.\"},\"returns\":{\"_0\":\"The ID of the banny body using the background.\"}},\"wearerOf(address,uint256)\":{\"params\":{\"hook\":\"The hook address of the collection.\",\"outfitId\":\"The ID of the outfit being worn.\"},\"returns\":{\"_0\":\"The ID of the banny body wearing the outfit.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"assetIdsOf(address,uint256)\":{\"notice\":\"The assets currently attached to each banny body.\"},\"decorateBannyWith(address,uint256,uint256,uint256[])\":{\"notice\":\"Dress your banny body with outfits.\"},\"lockOutfitChangesFor(address,uint256)\":{\"notice\":\"Locks a banny body ID so that it can't change its outfit for a period of time.\"},\"namesOf(address,uint256)\":{\"notice\":\"Returns the name of the token.\"},\"outfitLockedUntil(address,uint256)\":{\"notice\":\"The amount of time each banny body is currently locked for.\"},\"setProductNames(uint256[],string[])\":{\"notice\":\"Allows the owner to set the product's name.\"},\"setSvgBaseUri(string)\":{\"notice\":\"Allows the owner of this contract to specify the base of the domain hosting the SVG files.\"},\"setSvgContentsOf(uint256[],string[])\":{\"notice\":\"The owner of this contract can store SVG files for product IDs.\"},\"setSvgHashsOf(uint256[],bytes32[])\":{\"notice\":\"Allows the owner of this contract to upload the hash of an svg file for a universal product code.\"},\"svgBaseUri()\":{\"notice\":\"The base of the domain hosting the SVG files that can be lazily uploaded to the contract.\"},\"svgHashOf(uint256)\":{\"notice\":\"The banny body and outfit SVG hash files.\"},\"svgOf(address,uint256,bool,bool)\":{\"notice\":\"Returns the SVG showing either a banny body with/without outfits and a background, or the stand alone outfit or background.\"},\"tokenUriOf(address,uint256)\":{\"notice\":\"Returns the SVG showing a dressed banny body in a background.\"},\"userOf(address,uint256)\":{\"notice\":\"Checks to see which banny body is currently using a particular background.\"},\"wearerOf(address,uint256)\":{\"notice\":\"Checks to see which banny body is currently wearing a particular outfit.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Banny721TokenUriResolver.sol\":\"Banny721TokenUriResolver\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[\"@arbitrum/=node_modules/@arbitrum/\",\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@croptop/=node_modules/@croptop/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@exhausted-pigeon/=node_modules/@exhausted-pigeon/\",\"@offchainlabs/=node_modules/@offchainlabs/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@rev-net/=node_modules/@rev-net/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@sphinx-labs/contracts/=node_modules/@sphinx-labs/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"@zksync/=node_modules/@zksync/\",\"base64-sol/=node_modules/base64-sol/\",\"base64/=lib/base64/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solady/=node_modules/solady/\",\"solmate/=node_modules/solmate/\",\"sphinx/=lib/sphinx/packages/contracts/contracts/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"lib/base64/base64.sol\":{\"keccak256\":\"0xa73959e6ef0b693e4423a562e612370160b934a75e618361ddd8c9c4b8ddbaaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c12e16d8d66f3af15d8787920bd41ca6c1e7517a212a6b9cebd4b6d38f36fe\",\"dweb:/ipfs/QmcXMnZUXEz6LRKsm3CSvqdPboAzmezavi8bTg2dRxM2yE\"]},\"node_modules/@bananapus/721-hook-v5/src/abstract/ERC721.sol\":{\"keccak256\":\"0xee3758d50043b58a173dada85fb33a0a2b4a9f8e57e11a213d0f1d021cd2ffc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9b8cbac216d14a83dcc54fee0e660e8131afee94a21ec0c0af5dd7853692bb1\",\"dweb:/ipfs/QmRU67EeBHtqE7osaBd286poaTDjS7cAVMwt6UXdBBDRGP\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721Hook.sol\":{\"keccak256\":\"0x1e7b684c86c0f44b0b680c7aba9e511c89892bc0638424722920368911a087f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96995e70a8f15d5600b509ad689c8f2ea6f8116cc7cce9c529b7a41c12c854dc\",\"dweb:/ipfs/QmaAARj3BDSQNsPwkFxauDpWBNgb4kYdzo19tUNdBbc6cX\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TiersHook.sol\":{\"keccak256\":\"0x107f91c5a0674717684d75e0c71106dd1d2937c0089366c7bb555be7fffdd6b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce29d75e454845d0636e671c60c7a691e4a77d1c88fe17dbc435945890465b1\",\"dweb:/ipfs/QmewJn8HeiqKggWA8scLUbwv1TMiit8Va8A5A3K7N9Euss\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TiersHookStore.sol\":{\"keccak256\":\"0x01d419bf6b9dce2ab162f8aac82f0e4a6d948f53819a42ed023e8f23e358c9c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e0b14b2ae2032bd256614522078cf0f831c35d1f64d1ea2050227117d08c060\",\"dweb:/ipfs/QmP1xbw5597GDvNVgT5Te6w8LBqeXHq4x6HeXYmqLqw2RC\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TokenUriResolver.sol\":{\"keccak256\":\"0xfa599167098f4459320ec4141a98a17b2dfffbce422baa27d8b4e4530f61ece1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b758b161f4c7b520b2c34b4d91e585e961b8f4ca278eebb91d791f7f2f45140\",\"dweb:/ipfs/QmcD9DF7NJ9QykQpT4KPzm4bs3fkjzukdAUWwdU6Atfw85\"]},\"node_modules/@bananapus/721-hook-v5/src/libraries/JBIpfsDecoder.sol\":{\"keccak256\":\"0xb93ba562ac1fc9d3829be00e61f3a90f51df5661cf0f2c819a7f1d8ba19ec171\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc9bc948fac8897d9720ef25b13d63c60b40a18aa1897dd1c657fc278c416b4f\",\"dweb:/ipfs/QmNtiJTALZW5zfyKVy7XG5GkqGgMrfkVvU4Auu4bb9cGQc\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721InitTiersConfig.sol\":{\"keccak256\":\"0xfe7147d09467fd8f9b755d2a1485f22bb4a8797acd0e97623258498ddac2e441\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ee21464af9e6c78f580c6920757017cdfbd276728773338a67660fedfea0fd2\",\"dweb:/ipfs/QmVYviC7uQ7rEvdpzD6U4BN19P5f8uMuC7jWffzQWvuFcu\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721Tier.sol\":{\"keccak256\":\"0x99232aa73d5715977332dc7c93b03552a93259e59ae00e86b4ddc200f06adaf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://721c0cf10a29fa11677718faafb3a2ecfcb4fbe4e1c09e70a7fac681c80fcc94\",\"dweb:/ipfs/QmSUR77E9PqnpB5kBcKNz2CGBjG9XL9FH57RWVYu3Q7GMR\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TierConfig.sol\":{\"keccak256\":\"0x86e54a0de4deab9d105bf276586aebe256188b193e83eb7a6f6f93e4a29ae9c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04bfcc07d452c26dfc50d3a5eb62df4b3b81e063defd752e0aa5ed049a78eef4\",\"dweb:/ipfs/QmWd5nJHUvZPHxJXkrYCboXaqdtiWWkQG26sNM6qkJuAgD\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersHookFlags.sol\":{\"keccak256\":\"0x283d8429f31bd58875c056515aa42abd09c95362bd929e85cfc44a0d92585766\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a580b89fe99d9f8e930c58a4d0d63a5ff7c01c79d210af01373d066c9e72ed6\",\"dweb:/ipfs/QmdY1eSGSoTjv4KSdsG4Tm5CzJN6iqk3qTRga5ZWNbejRz\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersMintReservesConfig.sol\":{\"keccak256\":\"0x86fe586a05e6d4bc6fab9b68996a7f4b74c5362ca6f24b9d8057ed7e4cd1c5ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0915f17d1f958ab1fe6b214d99ed62f1f858684898c803f1a8a6a557472dd140\",\"dweb:/ipfs/QmUhdnSV8UzkgvbtkYEKHrpyDEmc2aJxW5HQ1gucuxxu5A\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersSetDiscountPercentConfig.sol\":{\"keccak256\":\"0x4672eacb6b0cda5e6f5f72ddb91463c52fb90b4df421053e3b40024f19a59954\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d8e3a0b35d6b2a6ec66527594263400189b6c766bfd6943c83704380a989aec\",\"dweb:/ipfs/QmUE7NhFWsxjFRzTuRyHJ7oRx3JXD9CnG83t29PjGAhwPR\"]},\"node_modules/@bananapus/core-v5/src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBCashOutHook.sol\":{\"keccak256\":\"0x6c516b030f55065eb169d666d11dbd82c4a0b8cea7782ebc5e79433cade38670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa0659eb08477176f130ccaf387d4bde71f0ecca2b24f61124d225f2f50397a3\",\"dweb:/ipfs/QmRNBRGhdGpLQLkC4wK4VrgNEw4EdSiJ4ZZJfiJU4aNt2L\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xcb97db460d2948a7f51c660fe0d1b1749047a419027711c476b86ad3573534c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a909c7a3d471054537894dca827e6e018e92ac25299b43026e5b1e335ec4de68\",\"dweb:/ipfs/QmU1GT3F8PNMjSiPPP5cSLLofefHYFJXnywMCdqqM9xUeh\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0x9438866782c652c2942f4d114e35f393cd3c8b0334abce8387eed90bca35e8b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfd99daf57213f92325aad7d7d16e98476d38e870470e95ba01e3ae3cdecc95d\",\"dweb:/ipfs/QmUKKAVGf7ki8BHksr99tFcRW8APveeB5tNH63ctTbbCW8\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0xb4d5244daa52aafab0c9b8806b7f973afa6a3b298add5966d586d27b78424cfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a819f74455aaa4f679ded378424702f3992608a640d7f943b19938eb4ff711da\",\"dweb:/ipfs/QmSMGvVTsMW3L5YSUyXTKoEsgNpGEutnq4frEZHuDdeDvz\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x4ae42a9cc29b517b26d2b9b635deb82c16696b777deeca92dfcad33b0f81c0a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dcbd860e7d7f05232d90c5e9cfd3d01e2ce986ffcdb053473d8a4d387b1a48a\",\"dweb:/ipfs/QmWKWoSJJbVWDumbnzXJBJyXmAacgC97bxMtchh8te41bn\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5f0dc5968277b572ba5dc74518906dfb33a9684b7a199c7843f4e66af1c11fb9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://323ce3731aebdf5bf8055b8550055e856feed700d293af8beaf8a750625a0975\",\"dweb:/ipfs/QmU2ErV2uzvXnsJt1qBKm73H2qWcEqYtQGHtZEpx93DaWJ\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x45a88aa9f26512f7fc3deff6d00be9a292fc07a76c8311f175249400e83d1837\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e88b996c3a05f87f7391ebcb9cd6d46c6ce8768083945f26a98c4ac4509e64c\",\"dweb:/ipfs/QmbpuYi6mYV8K8qrh8syWvbPc34pFrXG6QeC23m4MsX3r9\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xf287c7a4a162cd58084ed10ee5f9f31c992addff0ce2f2ac7e810cc393546f30\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c851b72de52c3ceb73c6b1849ad0cc7c0832fd126ee52cc838a163ab6d3055b8\",\"dweb:/ipfs/Qmbv6k6pSeNMwZoTUKzDNb18DMGR8DboRMrYQBydATuVZw\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBTerminal.sol\":{\"keccak256\":\"0x5a4c0ef6c8fd10069a408cc42a862909f7b47aba46327da5003203508d8f17d9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://09d8854151c21046b6b939189ad2139c669888e6baf47034a0cb754104d1efe6\",\"dweb:/ipfs/QmaMrxnf6K6znvDBwdAqsw5x6yuR4SY1BdNtyz226siAt5\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x9c47e048a719f784f601df69a583505432217b9868a0244876d277f84dd1ebdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8565f194b87914da9a02af2e760ae2ed2a9d185c6f11229f7035140776d2fec9\",\"dweb:/ipfs/QmPs2fic8W3F5e5zNRwmGmJFjb3JWGPWJ3YUe5o82nQgEn\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAfterCashOutRecordedContext.sol\":{\"keccak256\":\"0xa1acdb1a5670f66f730e71f8eff120766b6f5c934e6cd699c7f1a7cc93adf658\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9c7655c9c42b30132688b395251748c809c334370ee584cb9bac46e1fb8f162\",\"dweb:/ipfs/QmbMV1wg1Fm236HaA6nnMSvRkzeYCKPRhMYDbqkAxieY7x\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0x3bfc01ae9944a0ff5c41125e18ebb8efca58d7aa4e471d2ffa6d8588afb689ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://beb21399142d9b89539cfc8aa94119bc106bd1ea847b922d4c78f3f8804a5cba\",\"dweb:/ipfs/QmXDwJXrzCb6zh1KYwVdN2PEY86uK62MTfYF1M2MBtbEP7\"]},\"node_modules/@bananapus/core-v5/src/structs/JBBeforeCashOutRecordedContext.sol\":{\"keccak256\":\"0x7b2119f3e0725becc552ed5dcfa51683960a8772550c95ac5e2f75240ced367c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://03369dd07a9126ce453d83ac409919326f0aaa48ff9eac5c703092b3824d79c9\",\"dweb:/ipfs/Qmc1QKw6FfmeBD372RnDyeW27QyzEUjMX5up5rk8SHRYGa\"]},\"node_modules/@bananapus/core-v5/src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0xbc98b968d84be2f0ddbb24240723c7179ec9c5e02e5fbd5843dd0e76623a3ea5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1310e522696a9fc6f7f96b04c293fab3b4cf1e722bdbb7aa1eec7b3ecc25402f\",\"dweb:/ipfs/QmTYiijDJRuQcMhLrmpbHzHAQFPq6jurPP5HjyYtnzbpnK\"]},\"node_modules/@bananapus/core-v5/src/structs/JBCashOutHookSpecification.sol\":{\"keccak256\":\"0x67a6e781019979e626eaa81d84a800b2656603c23ae455e15d0fa1a6f03c1736\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43ce54447dda62d449a1e3575a9e4cb9c5a2adb41b45423dcefeb7d9afe8336\",\"dweb:/ipfs/QmW77REnQcvsfv4gwTLj2CyynmaGC3a6om7zCFWmERhrPY\"]},\"node_modules/@bananapus/core-v5/src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"]},\"node_modules/@bananapus/core-v5/src/structs/JBRuleset.sol\":{\"keccak256\":\"0x2d1f0a8457e94addae51a8222b1837e372847624fde96bb3178e7aee52ab2b24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bbb1478e8f5d1c20f981e5a0d5e526d002add1e05ddced87ccd45543ed00c9e4\",\"dweb:/ipfs/QmZkgaYdwkbnvW2MGwVe9FeHjac8XyZTP1YZcWUApiGZgE\"]},\"node_modules/@bananapus/core-v5/src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0xc61593d33d5ec30e695d382948a1b944d01e29a8f2bfd29f75ecebcdbc7816de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8992c1e5fca0c2342ecc0e734dfba6a2a752e4c29184784931d0971e44305051\",\"dweb:/ipfs/QmYNcaW3qeCkgAExUaFTq238fgfJuoYCTwjCn7jm94U4dJ\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x0b030a33274bde015419d99e54c9164f876a7d10eb590317b79b1d5e4ab23d99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68e5f96988198e8efd25ddef0d89750b4daebb7fd1204fa7f5eaccdfcb3398c8\",\"dweb:/ipfs/QmaM6nNkf9UmEtQraopuZamEWCdTWp7GvuN3pjMQrNCHxm\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/Banny721TokenUriResolver.sol\":{\"keccak256\":\"0x0d0fc64e90e0e2ededbf2b30b0919ca6f402782ce2aaae75d7fdbe60747430cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e4b1a58f281ea11e2077407691727c0507b671d515b2b21fc24a77ae69dc7383\",\"dweb:/ipfs/QmRshzFnYTcYGUBuWPfHptwWTdXJKeUGuWNW8wTKF4MN6A\"]},\"src/interfaces/IBanny721TokenUriResolver.sol\":{\"keccak256\":\"0x31f005a8cc4604ee51ece245747f0036499cd08f2269696aeea46bdd40f2173b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cecf3985b02d02220ec4f4bc065e32f1df7dbb46fdd7c6a289306ad7610a5fd\",\"dweb:/ipfs/QmUC1486yD7kD8C2ZspP6ZwxGP7UZhHxWYmma1hfCqowMh\"]}},\"version\":1}",
910
+ "gitCommit": "09eea490bc6edac0ab09368d57ac2d8e60bea771",
911
+ "history": [
912
+ {
913
+ "format": "sphinx-sol-ct-artifact-1",
914
+ "merkleRoot": "0x85b22e702cdaf7ef670c7488270980058fdbbe8d76f5dc15311253f924037df8",
915
+ "address": "0x47c011146a4498a70e0bf2e4585acf9cade85954",
916
+ "sourceName": "src/Banny721TokenUriResolver.sol",
917
+ "contractName": "Banny721TokenUriResolver",
918
+ "chainId": "0x2105",
919
+ "abi": [
920
+ {
921
+ "inputs": [
922
+ {
923
+ "internalType": "string",
924
+ "name": "bannyBody",
925
+ "type": "string"
926
+ },
927
+ {
928
+ "internalType": "string",
929
+ "name": "defaultNecklace",
930
+ "type": "string"
931
+ },
932
+ {
933
+ "internalType": "string",
934
+ "name": "defaultMouth",
935
+ "type": "string"
936
+ },
937
+ {
938
+ "internalType": "string",
939
+ "name": "defaultStandardEyes",
940
+ "type": "string"
941
+ },
942
+ {
943
+ "internalType": "string",
944
+ "name": "defaultAlienEyes",
945
+ "type": "string"
946
+ },
947
+ {
948
+ "internalType": "address",
949
+ "name": "owner",
950
+ "type": "address"
951
+ },
952
+ {
953
+ "internalType": "address",
954
+ "name": "trustedForwarder",
955
+ "type": "address"
956
+ }
957
+ ],
958
+ "stateMutability": "nonpayable",
959
+ "type": "constructor"
960
+ },
961
+ {
962
+ "inputs": [],
963
+ "name": "BANNY_BODY",
964
+ "outputs": [
965
+ {
966
+ "internalType": "string",
967
+ "name": "",
968
+ "type": "string"
969
+ }
970
+ ],
971
+ "stateMutability": "view",
972
+ "type": "function"
973
+ },
974
+ {
975
+ "inputs": [],
976
+ "name": "DEFAULT_ALIEN_EYES",
977
+ "outputs": [
978
+ {
979
+ "internalType": "string",
980
+ "name": "",
981
+ "type": "string"
982
+ }
983
+ ],
984
+ "stateMutability": "view",
985
+ "type": "function"
986
+ },
987
+ {
988
+ "inputs": [],
989
+ "name": "DEFAULT_MOUTH",
990
+ "outputs": [
991
+ {
992
+ "internalType": "string",
993
+ "name": "",
994
+ "type": "string"
995
+ }
996
+ ],
997
+ "stateMutability": "view",
998
+ "type": "function"
999
+ },
1000
+ {
1001
+ "inputs": [],
1002
+ "name": "DEFAULT_NECKLACE",
1003
+ "outputs": [
1004
+ {
1005
+ "internalType": "string",
1006
+ "name": "",
1007
+ "type": "string"
1008
+ }
1009
+ ],
1010
+ "stateMutability": "view",
1011
+ "type": "function"
1012
+ },
1013
+ {
1014
+ "inputs": [],
1015
+ "name": "DEFAULT_STANDARD_EYES",
1016
+ "outputs": [
1017
+ {
1018
+ "internalType": "string",
1019
+ "name": "",
1020
+ "type": "string"
1021
+ }
1022
+ ],
1023
+ "stateMutability": "view",
1024
+ "type": "function"
1025
+ },
1026
+ {
1027
+ "inputs": [
1028
+ {
1029
+ "internalType": "address",
1030
+ "name": "hook",
1031
+ "type": "address"
1032
+ },
1033
+ {
1034
+ "internalType": "uint256",
1035
+ "name": "bannyBodyId",
1036
+ "type": "uint256"
1037
+ }
1038
+ ],
1039
+ "name": "assetIdsOf",
1040
+ "outputs": [
1041
+ {
1042
+ "internalType": "uint256",
1043
+ "name": "backgroundId",
1044
+ "type": "uint256"
1045
+ },
1046
+ {
1047
+ "internalType": "uint256[]",
1048
+ "name": "outfitIds",
1049
+ "type": "uint256[]"
1050
+ }
1051
+ ],
1052
+ "stateMutability": "view",
1053
+ "type": "function"
1054
+ },
1055
+ {
1056
+ "inputs": [
1057
+ {
1058
+ "internalType": "address",
1059
+ "name": "hook",
1060
+ "type": "address"
1061
+ },
1062
+ {
1063
+ "internalType": "uint256",
1064
+ "name": "bannyBodyId",
1065
+ "type": "uint256"
1066
+ },
1067
+ {
1068
+ "internalType": "uint256",
1069
+ "name": "backgroundId",
1070
+ "type": "uint256"
1071
+ },
1072
+ {
1073
+ "internalType": "uint256[]",
1074
+ "name": "outfitIds",
1075
+ "type": "uint256[]"
1076
+ }
1077
+ ],
1078
+ "name": "decorateBannyWith",
1079
+ "outputs": [],
1080
+ "stateMutability": "nonpayable",
1081
+ "type": "function"
1082
+ },
1083
+ {
1084
+ "inputs": [
1085
+ {
1086
+ "internalType": "address",
1087
+ "name": "forwarder",
1088
+ "type": "address"
1089
+ }
1090
+ ],
1091
+ "name": "isTrustedForwarder",
1092
+ "outputs": [
1093
+ {
1094
+ "internalType": "bool",
1095
+ "name": "",
1096
+ "type": "bool"
1097
+ }
1098
+ ],
1099
+ "stateMutability": "view",
1100
+ "type": "function"
1101
+ },
1102
+ {
1103
+ "inputs": [
1104
+ {
1105
+ "internalType": "address",
1106
+ "name": "hook",
1107
+ "type": "address"
1108
+ },
1109
+ {
1110
+ "internalType": "uint256",
1111
+ "name": "bannyBodyId",
1112
+ "type": "uint256"
1113
+ }
1114
+ ],
1115
+ "name": "lockOutfitChangesFor",
1116
+ "outputs": [],
1117
+ "stateMutability": "nonpayable",
1118
+ "type": "function"
1119
+ },
1120
+ {
1121
+ "inputs": [
1122
+ {
1123
+ "internalType": "address",
1124
+ "name": "hook",
1125
+ "type": "address"
1126
+ },
1127
+ {
1128
+ "internalType": "uint256",
1129
+ "name": "tokenId",
1130
+ "type": "uint256"
1131
+ }
1132
+ ],
1133
+ "name": "namesOf",
1134
+ "outputs": [
1135
+ {
1136
+ "internalType": "string",
1137
+ "name": "",
1138
+ "type": "string"
1139
+ },
1140
+ {
1141
+ "internalType": "string",
1142
+ "name": "",
1143
+ "type": "string"
1144
+ },
1145
+ {
1146
+ "internalType": "string",
1147
+ "name": "",
1148
+ "type": "string"
1149
+ }
1150
+ ],
1151
+ "stateMutability": "view",
1152
+ "type": "function"
1153
+ },
1154
+ {
1155
+ "inputs": [
1156
+ {
1157
+ "internalType": "address",
1158
+ "name": "operator",
1159
+ "type": "address"
1160
+ },
1161
+ {
1162
+ "internalType": "address",
1163
+ "name": "from",
1164
+ "type": "address"
1165
+ },
1166
+ {
1167
+ "internalType": "uint256",
1168
+ "name": "tokenId",
1169
+ "type": "uint256"
1170
+ },
1171
+ {
1172
+ "internalType": "bytes",
1173
+ "name": "data",
1174
+ "type": "bytes"
1175
+ }
1176
+ ],
1177
+ "name": "onERC721Received",
1178
+ "outputs": [
1179
+ {
1180
+ "internalType": "bytes4",
1181
+ "name": "",
1182
+ "type": "bytes4"
1183
+ }
1184
+ ],
1185
+ "stateMutability": "view",
1186
+ "type": "function"
1187
+ },
1188
+ {
1189
+ "inputs": [
1190
+ {
1191
+ "internalType": "address",
1192
+ "name": "hook",
1193
+ "type": "address"
1194
+ },
1195
+ {
1196
+ "internalType": "uint256",
1197
+ "name": "upc",
1198
+ "type": "uint256"
1199
+ }
1200
+ ],
1201
+ "name": "outfitLockedUntil",
1202
+ "outputs": [
1203
+ {
1204
+ "internalType": "uint256",
1205
+ "name": "",
1206
+ "type": "uint256"
1207
+ }
1208
+ ],
1209
+ "stateMutability": "view",
1210
+ "type": "function"
1211
+ },
1212
+ {
1213
+ "inputs": [],
1214
+ "name": "owner",
1215
+ "outputs": [
1216
+ {
1217
+ "internalType": "address",
1218
+ "name": "",
1219
+ "type": "address"
1220
+ }
1221
+ ],
1222
+ "stateMutability": "view",
1223
+ "type": "function"
1224
+ },
1225
+ {
1226
+ "inputs": [],
1227
+ "name": "renounceOwnership",
1228
+ "outputs": [],
1229
+ "stateMutability": "nonpayable",
1230
+ "type": "function"
1231
+ },
1232
+ {
1233
+ "inputs": [
1234
+ {
1235
+ "internalType": "uint256[]",
1236
+ "name": "upcs",
1237
+ "type": "uint256[]"
1238
+ },
1239
+ {
1240
+ "internalType": "string[]",
1241
+ "name": "names",
1242
+ "type": "string[]"
1243
+ }
1244
+ ],
1245
+ "name": "setProductNames",
1246
+ "outputs": [],
1247
+ "stateMutability": "nonpayable",
1248
+ "type": "function"
1249
+ },
1250
+ {
1251
+ "inputs": [
1252
+ {
1253
+ "internalType": "string",
1254
+ "name": "baseUri",
1255
+ "type": "string"
1256
+ }
1257
+ ],
1258
+ "name": "setSvgBaseUri",
1259
+ "outputs": [],
1260
+ "stateMutability": "nonpayable",
1261
+ "type": "function"
1262
+ },
1263
+ {
1264
+ "inputs": [
1265
+ {
1266
+ "internalType": "uint256[]",
1267
+ "name": "upcs",
1268
+ "type": "uint256[]"
1269
+ },
1270
+ {
1271
+ "internalType": "string[]",
1272
+ "name": "svgContents",
1273
+ "type": "string[]"
1274
+ }
1275
+ ],
1276
+ "name": "setSvgContentsOf",
1277
+ "outputs": [],
1278
+ "stateMutability": "nonpayable",
1279
+ "type": "function"
1280
+ },
1281
+ {
1282
+ "inputs": [
1283
+ {
1284
+ "internalType": "uint256[]",
1285
+ "name": "upcs",
1286
+ "type": "uint256[]"
1287
+ },
1288
+ {
1289
+ "internalType": "bytes32[]",
1290
+ "name": "svgHashs",
1291
+ "type": "bytes32[]"
1292
+ }
1293
+ ],
1294
+ "name": "setSvgHashsOf",
1295
+ "outputs": [],
1296
+ "stateMutability": "nonpayable",
1297
+ "type": "function"
1298
+ },
1299
+ {
1300
+ "inputs": [],
1301
+ "name": "svgBaseUri",
1302
+ "outputs": [
1303
+ {
1304
+ "internalType": "string",
1305
+ "name": "",
1306
+ "type": "string"
1307
+ }
1308
+ ],
1309
+ "stateMutability": "view",
1310
+ "type": "function"
1311
+ },
1312
+ {
1313
+ "inputs": [
1314
+ {
1315
+ "internalType": "uint256",
1316
+ "name": "upc",
1317
+ "type": "uint256"
1318
+ }
1319
+ ],
1320
+ "name": "svgHashOf",
1321
+ "outputs": [
1322
+ {
1323
+ "internalType": "bytes32",
1324
+ "name": "",
1325
+ "type": "bytes32"
1326
+ }
1327
+ ],
1328
+ "stateMutability": "view",
1329
+ "type": "function"
1330
+ },
1331
+ {
1332
+ "inputs": [
1333
+ {
1334
+ "internalType": "address",
1335
+ "name": "hook",
1336
+ "type": "address"
1337
+ },
1338
+ {
1339
+ "internalType": "uint256",
1340
+ "name": "tokenId",
1341
+ "type": "uint256"
1342
+ },
1343
+ {
1344
+ "internalType": "bool",
1345
+ "name": "shouldDressBannyBody",
1346
+ "type": "bool"
1347
+ },
1348
+ {
1349
+ "internalType": "bool",
1350
+ "name": "shouldIncludeBackgroundOnBannyBody",
1351
+ "type": "bool"
1352
+ }
1353
+ ],
1354
+ "name": "svgOf",
1355
+ "outputs": [
1356
+ {
1357
+ "internalType": "string",
1358
+ "name": "",
1359
+ "type": "string"
1360
+ }
1361
+ ],
1362
+ "stateMutability": "view",
1363
+ "type": "function"
1364
+ },
1365
+ {
1366
+ "inputs": [
1367
+ {
1368
+ "internalType": "address",
1369
+ "name": "hook",
1370
+ "type": "address"
1371
+ },
1372
+ {
1373
+ "internalType": "uint256",
1374
+ "name": "tokenId",
1375
+ "type": "uint256"
1376
+ }
1377
+ ],
1378
+ "name": "tokenUriOf",
1379
+ "outputs": [
1380
+ {
1381
+ "internalType": "string",
1382
+ "name": "",
1383
+ "type": "string"
1384
+ }
1385
+ ],
1386
+ "stateMutability": "view",
1387
+ "type": "function"
1388
+ },
1389
+ {
1390
+ "inputs": [
1391
+ {
1392
+ "internalType": "address",
1393
+ "name": "newOwner",
1394
+ "type": "address"
1395
+ }
1396
+ ],
1397
+ "name": "transferOwnership",
1398
+ "outputs": [],
1399
+ "stateMutability": "nonpayable",
1400
+ "type": "function"
1401
+ },
1402
+ {
1403
+ "inputs": [],
1404
+ "name": "trustedForwarder",
1405
+ "outputs": [
1406
+ {
1407
+ "internalType": "address",
1408
+ "name": "",
1409
+ "type": "address"
1410
+ }
1411
+ ],
1412
+ "stateMutability": "view",
1413
+ "type": "function"
1414
+ },
1415
+ {
1416
+ "inputs": [
1417
+ {
1418
+ "internalType": "address",
1419
+ "name": "hook",
1420
+ "type": "address"
1421
+ },
1422
+ {
1423
+ "internalType": "uint256",
1424
+ "name": "backgroundId",
1425
+ "type": "uint256"
1426
+ }
1427
+ ],
1428
+ "name": "userOf",
1429
+ "outputs": [
1430
+ {
1431
+ "internalType": "uint256",
1432
+ "name": "",
1433
+ "type": "uint256"
1434
+ }
1435
+ ],
1436
+ "stateMutability": "view",
1437
+ "type": "function"
1438
+ },
1439
+ {
1440
+ "inputs": [
1441
+ {
1442
+ "internalType": "address",
1443
+ "name": "hook",
1444
+ "type": "address"
1445
+ },
1446
+ {
1447
+ "internalType": "uint256",
1448
+ "name": "outfitId",
1449
+ "type": "uint256"
1450
+ }
1451
+ ],
1452
+ "name": "wearerOf",
1453
+ "outputs": [
1454
+ {
1455
+ "internalType": "uint256",
1456
+ "name": "",
1457
+ "type": "uint256"
1458
+ }
1459
+ ],
1460
+ "stateMutability": "view",
1461
+ "type": "function"
1462
+ },
1463
+ {
1464
+ "anonymous": false,
1465
+ "inputs": [
1466
+ {
1467
+ "indexed": true,
1468
+ "internalType": "address",
1469
+ "name": "hook",
1470
+ "type": "address"
1471
+ },
1472
+ {
1473
+ "indexed": true,
1474
+ "internalType": "uint256",
1475
+ "name": "bannyBodyId",
1476
+ "type": "uint256"
1477
+ },
1478
+ {
1479
+ "indexed": true,
1480
+ "internalType": "uint256",
1481
+ "name": "backgroundId",
1482
+ "type": "uint256"
1483
+ },
1484
+ {
1485
+ "indexed": false,
1486
+ "internalType": "uint256[]",
1487
+ "name": "outfitIds",
1488
+ "type": "uint256[]"
1489
+ },
1490
+ {
1491
+ "indexed": false,
1492
+ "internalType": "address",
1493
+ "name": "caller",
1494
+ "type": "address"
1495
+ }
1496
+ ],
1497
+ "name": "DecorateBanny",
1498
+ "type": "event"
1499
+ },
1500
+ {
1501
+ "anonymous": false,
1502
+ "inputs": [
1503
+ {
1504
+ "indexed": true,
1505
+ "internalType": "address",
1506
+ "name": "previousOwner",
1507
+ "type": "address"
1508
+ },
1509
+ {
1510
+ "indexed": true,
1511
+ "internalType": "address",
1512
+ "name": "newOwner",
1513
+ "type": "address"
1514
+ }
1515
+ ],
1516
+ "name": "OwnershipTransferred",
1517
+ "type": "event"
1518
+ },
1519
+ {
1520
+ "anonymous": false,
1521
+ "inputs": [
1522
+ {
1523
+ "indexed": true,
1524
+ "internalType": "uint256",
1525
+ "name": "upc",
1526
+ "type": "uint256"
1527
+ },
1528
+ {
1529
+ "indexed": false,
1530
+ "internalType": "string",
1531
+ "name": "name",
1532
+ "type": "string"
1533
+ },
1534
+ {
1535
+ "indexed": false,
1536
+ "internalType": "address",
1537
+ "name": "caller",
1538
+ "type": "address"
1539
+ }
1540
+ ],
1541
+ "name": "SetProductName",
1542
+ "type": "event"
1543
+ },
1544
+ {
1545
+ "anonymous": false,
1546
+ "inputs": [
1547
+ {
1548
+ "indexed": false,
1549
+ "internalType": "string",
1550
+ "name": "baseUri",
1551
+ "type": "string"
1552
+ },
1553
+ {
1554
+ "indexed": false,
1555
+ "internalType": "address",
1556
+ "name": "caller",
1557
+ "type": "address"
1558
+ }
1559
+ ],
1560
+ "name": "SetSvgBaseUri",
1561
+ "type": "event"
1562
+ },
1563
+ {
1564
+ "anonymous": false,
1565
+ "inputs": [
1566
+ {
1567
+ "indexed": true,
1568
+ "internalType": "uint256",
1569
+ "name": "upc",
1570
+ "type": "uint256"
1571
+ },
1572
+ {
1573
+ "indexed": false,
1574
+ "internalType": "string",
1575
+ "name": "svgContent",
1576
+ "type": "string"
1577
+ },
1578
+ {
1579
+ "indexed": false,
1580
+ "internalType": "address",
1581
+ "name": "caller",
1582
+ "type": "address"
1583
+ }
1584
+ ],
1585
+ "name": "SetSvgContent",
1586
+ "type": "event"
1587
+ },
1588
+ {
1589
+ "anonymous": false,
1590
+ "inputs": [
1591
+ {
1592
+ "indexed": true,
1593
+ "internalType": "uint256",
1594
+ "name": "upc",
1595
+ "type": "uint256"
1596
+ },
1597
+ {
1598
+ "indexed": true,
1599
+ "internalType": "bytes32",
1600
+ "name": "svgHash",
1601
+ "type": "bytes32"
1602
+ },
1603
+ {
1604
+ "indexed": false,
1605
+ "internalType": "address",
1606
+ "name": "caller",
1607
+ "type": "address"
1608
+ }
1609
+ ],
1610
+ "name": "SetSvgHash",
1611
+ "type": "event"
1612
+ },
1613
+ {
1614
+ "inputs": [],
1615
+ "name": "Banny721TokenUriResolver_CantAccelerateTheLock",
1616
+ "type": "error"
1617
+ },
1618
+ {
1619
+ "inputs": [],
1620
+ "name": "Banny721TokenUriResolver_ContentsAlreadyStored",
1621
+ "type": "error"
1622
+ },
1623
+ {
1624
+ "inputs": [],
1625
+ "name": "Banny721TokenUriResolver_ContentsMismatch",
1626
+ "type": "error"
1627
+ },
1628
+ {
1629
+ "inputs": [],
1630
+ "name": "Banny721TokenUriResolver_HashAlreadyStored",
1631
+ "type": "error"
1632
+ },
1633
+ {
1634
+ "inputs": [],
1635
+ "name": "Banny721TokenUriResolver_HashNotFound",
1636
+ "type": "error"
1637
+ },
1638
+ {
1639
+ "inputs": [],
1640
+ "name": "Banny721TokenUriResolver_HeadAlreadyAdded",
1641
+ "type": "error"
1642
+ },
1643
+ {
1644
+ "inputs": [],
1645
+ "name": "Banny721TokenUriResolver_OutfitChangesLocked",
1646
+ "type": "error"
1647
+ },
1648
+ {
1649
+ "inputs": [],
1650
+ "name": "Banny721TokenUriResolver_SuitAlreadyAdded",
1651
+ "type": "error"
1652
+ },
1653
+ {
1654
+ "inputs": [],
1655
+ "name": "Banny721TokenUriResolver_UnauthorizedBackground",
1656
+ "type": "error"
1657
+ },
1658
+ {
1659
+ "inputs": [],
1660
+ "name": "Banny721TokenUriResolver_UnauthorizedBannyBody",
1661
+ "type": "error"
1662
+ },
1663
+ {
1664
+ "inputs": [],
1665
+ "name": "Banny721TokenUriResolver_UnauthorizedOutfit",
1666
+ "type": "error"
1667
+ },
1668
+ {
1669
+ "inputs": [],
1670
+ "name": "Banny721TokenUriResolver_UnauthorizedTransfer",
1671
+ "type": "error"
1672
+ },
1673
+ {
1674
+ "inputs": [],
1675
+ "name": "Banny721TokenUriResolver_UnorderedCategories",
1676
+ "type": "error"
1677
+ },
1678
+ {
1679
+ "inputs": [],
1680
+ "name": "Banny721TokenUriResolver_UnrecognizedBackground",
1681
+ "type": "error"
1682
+ },
1683
+ {
1684
+ "inputs": [],
1685
+ "name": "Banny721TokenUriResolver_UnrecognizedCategory",
1686
+ "type": "error"
1687
+ },
1688
+ {
1689
+ "inputs": [],
1690
+ "name": "Banny721TokenUriResolver_UnrecognizedProduct",
1691
+ "type": "error"
1692
+ },
1693
+ {
1694
+ "inputs": [
1695
+ {
1696
+ "internalType": "address",
1697
+ "name": "owner",
1698
+ "type": "address"
1699
+ }
1700
+ ],
1701
+ "name": "OwnableInvalidOwner",
1702
+ "type": "error"
1703
+ },
1704
+ {
1705
+ "inputs": [
1706
+ {
1707
+ "internalType": "address",
1708
+ "name": "account",
1709
+ "type": "address"
1710
+ }
1711
+ ],
1712
+ "name": "OwnableUnauthorizedAccount",
1713
+ "type": "error"
1714
+ },
1715
+ {
1716
+ "inputs": [],
1717
+ "name": "ReentrancyGuardReentrantCall",
1718
+ "type": "error"
1719
+ }
1720
+ ],
1721
+ "args": [],
1722
+ "solcInputHash": "4d4e144dd4f9b678cbfd03cbd2bcd5d7",
1723
+ "receipt": {
1724
+ "type": "0x2",
1725
+ "status": "0x1",
1726
+ "cumulativeGasUsed": "0x2996bcf",
1727
+ "logs": [
1728
+ {
1729
+ "address": "0xa2ea7657440875bf916cbfc0cfa88f13e38ad463",
1730
+ "topics": [
1731
+ "0x572f161235911da04685a68c06adf558fc7e4a36909dca394650e0adc19cc93d",
1732
+ "0x000000000000000000000000755ff2f75a0a586ecfa2b9a3c959cb662458a105",
1733
+ "0x000000000000000000000000656ff6398c45adca3fe6e5f8fd53aebd4f318017",
1734
+ "0x831f3aac2be88f396655185855b47417f9cf33cf9e5143366a7f111058e55ad3"
1735
+ ],
1736
+ "data": "0x0000000000000000000000000000000000000000000000000000000000000000",
1737
+ "blockHash": "0x00c2eef0012228a7e8991e4ba38e302a146075bd1cf67db8ec3141ad7e048127",
1738
+ "blockNumber": "0x21ce01e",
1739
+ "blockTimestamp": "0x68c41d1f",
1740
+ "transactionHash": "0x1d4c25441c493c6a835333479cf38dfa3c7a563944a345c6c3ea4e51e8f52072",
1741
+ "transactionIndex": "0xcd",
1742
+ "logIndex": "0x1f7",
1743
+ "removed": false
1744
+ },
1745
+ {
1746
+ "address": "0x47c011146a4498a70e0bf2e4585acf9cade85954",
1747
+ "topics": [
1748
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
1749
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
1750
+ "0x0000000000000000000000009e2a10ab3bd22831f19d02c648bc2cb49b127450"
1751
+ ],
1752
+ "data": "0x",
1753
+ "blockHash": "0x00c2eef0012228a7e8991e4ba38e302a146075bd1cf67db8ec3141ad7e048127",
1754
+ "blockNumber": "0x21ce01e",
1755
+ "blockTimestamp": "0x68c41d1f",
1756
+ "transactionHash": "0x1d4c25441c493c6a835333479cf38dfa3c7a563944a345c6c3ea4e51e8f52072",
1757
+ "transactionIndex": "0xcd",
1758
+ "logIndex": "0x1f8",
1759
+ "removed": false
1760
+ },
1761
+ {
1762
+ "address": "0x9e2a10ab3bd22831f19d02c648bc2cb49b127450",
1763
+ "topics": [
1764
+ "0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8",
1765
+ "0x000000000000000000000000656ff6398c45adca3fe6e5f8fd53aebd4f318017"
1766
+ ],
1767
+ "data": "0x",
1768
+ "blockHash": "0x00c2eef0012228a7e8991e4ba38e302a146075bd1cf67db8ec3141ad7e048127",
1769
+ "blockNumber": "0x21ce01e",
1770
+ "blockTimestamp": "0x68c41d1f",
1771
+ "transactionHash": "0x1d4c25441c493c6a835333479cf38dfa3c7a563944a345c6c3ea4e51e8f52072",
1772
+ "transactionIndex": "0xcd",
1773
+ "logIndex": "0x1f9",
1774
+ "removed": false
1775
+ },
1776
+ {
1777
+ "address": "0x656ff6398c45adca3fe6e5f8fd53aebd4f318017",
1778
+ "topics": [
1779
+ "0xa65fb05c5808f5f389d72edeaf719ce38f4cc55c1f69ca3cbfb31c21501caa07",
1780
+ "0x85b22e702cdaf7ef670c7488270980058fdbbe8d76f5dc15311253f924037df8"
1781
+ ],
1782
+ "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
1783
+ "blockHash": "0x00c2eef0012228a7e8991e4ba38e302a146075bd1cf67db8ec3141ad7e048127",
1784
+ "blockNumber": "0x21ce01e",
1785
+ "blockTimestamp": "0x68c41d1f",
1786
+ "transactionHash": "0x1d4c25441c493c6a835333479cf38dfa3c7a563944a345c6c3ea4e51e8f52072",
1787
+ "transactionIndex": "0xcd",
1788
+ "logIndex": "0x1fa",
1789
+ "removed": false
1790
+ }
1791
+ ],
1792
+ "logsBloom": "0x000000000000100000000000000800000000000000000200008000000000000000000000208000000000000000480000000000000000000000000000000000000000000000002000000000000000000002010000000000000000000000000000400000000240000000000000008008000000000000000000000080000010004008000000010000000001040000200000000000000100000800000000000000000040000400000000000000000200000022000000000000000000000000040000000000020000000000000000000004000000000000000000000000000c0020000000000000000000002001008000000200000000000080000000000000000000",
1793
+ "transactionHash": "0x1d4c25441c493c6a835333479cf38dfa3c7a563944a345c6c3ea4e51e8f52072",
1794
+ "transactionIndex": "0xcd",
1795
+ "blockHash": "0x00c2eef0012228a7e8991e4ba38e302a146075bd1cf67db8ec3141ad7e048127",
1796
+ "blockNumber": "0x21ce01e",
1797
+ "gasUsed": "0x961ccc",
1798
+ "effectiveGasPrice": "0x2e9e60",
1799
+ "from": "0x755ff2f75a0a586ecfa2b9a3c959cb662458a105",
1800
+ "to": "0xa2ea7657440875bf916cbfc0cfa88f13e38ad463",
1801
+ "contractAddress": null
1802
+ },
1803
+ "bytecode": "0x60a060405234620007685762006340803803806200001d816200076c565b928339810160e082820312620007685781516001600160401b03908181116200076857826200004e91850162000792565b602093848101518381116200076857846200006b91830162000792565b9360408201518481116200076857816200008791840162000792565b6060830151858111620007685782620000a291850162000792565b916080840151908682116200076857620000be91850162000792565b92620000db60c0620000d360a0840162000802565b920162000802565b906001600160a01b0390811690811562000750575f548260018060a01b03198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36080526001958680558451868111620003f657600954958887811c9716801562000745575b8a881014620003d7578190601f97888111620006f1575b508a9088831160011462000689575f926200067d575b50505f19600383901b1c191690881b176009555b805190868211620003f657600754908882811c9216801562000672575b8a831014620003d75781878493116200061e575b508990878311600114620005b8575f92620005ac575b50505f19600383901b1c191690871b176007555b805190858211620003f657600654908782811c92168015620005a1575b89831014620003d75781868493116200054d575b508890868311600114620004e7575f92620004db575b50505f19600383901b1c191690861b176006555b805190848211620003f657600854908682811c92168015620004d0575b88831014620003d75781858493116200047c575b50879085831160011462000416575f926200040a575b50505f19600383901b1c191690851b176008555b8051928311620003f65760059485548581811c91168015620003eb575b82821014620003d75783811162000391575b50809284116001146200032a57509282939183925f946200031e575b50501b915f199060031b1c19161790555b604051615b289081620008188239608051818181610ad601528181610cae01526158c80152f35b015192505f80620002e6565b919083601f198116875f52845f20945f905b888383106200037657505050106200035d575b505050811b019055620002f7565b01515f1960f88460031b161c191690555f80806200034f565b8587015188559096019594850194879350908101906200033c565b865f52815f2084808701891c820192848810620003cd575b01881c019086905b828110620003c1575050620002ca565b5f8155018690620003b1565b92508192620003a9565b634e487b7160e01b5f52602260045260245ffd5b90607f1690620002b8565b634e487b7160e01b5f52604160045260245ffd5b015190505f8062000287565b90879350601f1983169160085f52895f20925f5b8b8282106200046557505084116200044c575b505050811b016008556200029b565b01515f1960f88460031b161c191690555f80806200043d565b8385015186558b979095019493840193016200042a565b90915060085f52875f208580850160051c8201928a8610620004c6575b918991869594930160051c01915b828110620004b757505062000271565b5f8155859450899101620004a7565b9250819262000499565b91607f16916200025d565b015190505f806200022c565b90889350601f1983169160065f528a5f20925f5b8c8282106200053657505084116200051d575b505050811b0160065562000240565b01515f1960f88460031b161c191690555f80806200050e565b8385015186558c97909501949384019301620004fb565b90915060065f52885f208680850160051c8201928b861062000597575b918a91869594930160051c01915b8281106200058857505062000216565b5f81558594508a910162000578565b925081926200056a565b91607f169162000202565b015190505f80620001d1565b90899350601f1983169160075f528b5f20925f5b8d828210620006075750508411620005ee575b505050811b01600755620001e5565b01515f1960f88460031b161c191690555f8080620005df565b8385015186558d97909501949384019301620005cc565b90915060075f52895f208780850160051c8201928c861062000668575b918b91869594930160051c01915b82811062000659575050620001bb565b5f81558594508b910162000649565b925081926200063b565b91607f1691620001a7565b015190505f8062000176565b908a9350601f1983169160095f528c5f20928d5f905b828210620006d95750508411620006c0575b505050811b016009556200018a565b01515f1960f88460031b161c191690555f8080620006b1565b8385015186558e979095019493840193018e6200069f565b90915060095f528a5f208880850160051c8201928d86106200073b575b918c91869594930160051c01915b8281106200072c57505062000160565b5f81558594508c91016200071c565b925081926200070e565b96607f169662000149565b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b6040519190601f01601f191682016001600160401b03811183821017620003f657604052565b919080601f84011215620007685782516001600160401b038111620003f657602090620007c8601f8201601f191683016200076c565b9281845282828701011162000768575f5b818110620007ee5750825f9394955001015290565b8581018301518482018401528201620007d9565b51906001600160a01b0382168203620007685756fe60806040526004361015610011575f80fd5b5f3560e01c806257bfdd146101b357806305b2ae1b146101ae578063150b7a02146101a9578063187be308146101a457806318ab522d1461019f5780632150a1381461019a5780632580833d1461019557806331a290ac14610190578063572b6c051461018b57806359a81d91146101865780635e703e71146101815780636aff31dd1461017c578063715018a61461017757806379a2696e146101725780637da0a8771461016d578063875e4bea146101685780638da5cb5b14610163578063a0122c091461015e578063a22d0dd514610159578063b03a3eab14610154578063b1fa9e7b1461014f578063b3fa27831461014a578063c06e7bc714610145578063c122804614610140578063d756227e1461013b5763f2fde38b14610136575f80fd5b611371565b6112a1565b611207565b6110b9565b611014565b610fe9565b610f45565b610f00565b610e64565b610e3f565b610cd2565b610c8f565b610c5c565b610bf8565b610bce565b610ba2565b610afd565b610aa7565b61093f565b6107db565b610736565b6106bf565b610629565b6105ab565b610490565b610459565b90600182811c921680156101e6575b60208310146101d257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101c7565b634e487b7160e01b5f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761022157604052565b6101f0565b6020810190811067ffffffffffffffff82111761022157604052565b6040810190811067ffffffffffffffff82111761022157604052565b6060810190811067ffffffffffffffff82111761022157604052565b90601f8019910116810190811067ffffffffffffffff82111761022157604052565b604051905f82600354916102af836101b8565b8083529260209060019081811690811561033b57506001146102dc575b50506102da9250038361027a565b565b91509260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b935f925b82841061032357506102da9450505081016020015f806102cc565b85548885018301529485019487945092810192610308565b915050602092506102da94915060ff191682840152151560051b8201015f806102cc565b9060405191825f8254610371816101b8565b908184526020946001916001811690815f146103dd575060011461039f575b5050506102da9250038361027a565b5f90815285812095935091905b8183106103c55750506102da93508201015f8080610390565b855488840185015294850194879450918301916103ac565b925050506102da94925060ff191682840152151560051b8201015f8080610390565b5f5b8381106104105750505f910152565b8181015183820152602001610401565b90602091610439815180928185528580860191016103ff565b601f01601f1916010190565b906020610456928181520190610420565b90565b3461048c575f36600319011261048c5761048861047461029c565b604051918291602083526020830190610420565b0390f35b5f80fd5b3461048c575f36600319011261048c576040515f6008546104b0816101b8565b8084529060209060019081811690811561054257506001146104e9575b610488856104dd8187038261027a565b60405191829182610445565b60085f90815293507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83851061052f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610513565b869550610488969350602092506104dd94915060ff191682840152151560051b82010192936104cd565b6001600160a01b0381160361048c57565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020838186019501011161048c57565b3461048c57608036600319011261048c576004356105c88161056c565b6105d360243561056c565b60643567ffffffffffffffff811161048c576105f390369060040161057d565b50506001600160a01b033091160361061757604051630a85bd0160e11b8152602090f35b604051633b2c6aa160e21b8152600490fd5b3461048c57604036600319011261048c576004356106468161056c565b6001600160a01b036024359161065c8382612f6d565b16805f52600260205260405f20825f5260205260405f20549162093a804201928342116106ba5783106106a8576106a5915f52600260205260405f20905f5260205260405f2090565b55005b604051631057c89560e21b8152600490fd5b611405565b3461048c57604036600319011261048c576106e86004356106df8161056c565b60243590611518565b90604051918291604083019083526020906040602085015282518091526020606085019301915f5b82811061071f57505050500390f35b835185528695509381019392810192600101610710565b3461048c575f36600319011261048c576040515f600554610756816101b8565b80845290602090600190818116908115610542575060011461078257610488856104dd8187038261027a565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8385106107c8575050505081016020016104dd826104886104cd565b80548686018401529382019381016107ac565b3461048c575f36600319011261048c576040515f6006546107fb816101b8565b80845290602090600190818116908115610542575060011461082757610488856104dd8187038261027a565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b83851061086d575050505081016020016104dd826104886104cd565b8054868601840152938201938101610851565b604051906102da82610204565b67ffffffffffffffff81116102215760051b60200190565b92916108b08261088d565b916108be604051938461027a565b829481845260208094019160051b810192831161048c57905b8282106108e45750505050565b813581529083019083016108d7565b9080601f8301121561048c57816020610456933591016108a5565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020808501948460051b01011161048c57565b3461048c5760408060031936011261048c5760049067ffffffffffffffff823581811161048c5761097390369085016108f3565b9060243590811161048c5761098b903690850161090e565b9290915f5b8151811015610aa5576109a381836114f6565b516109b96109b28388886115e2565b369161126b565b6109d36109ce835f52600d60205260405f2090565b611624565b610a95576109e9825f52600460205260405f2090565b548015610a855785516020810190610a1381610a05848761162e565b03601f19810183528261027a565b51902003610a7557907faeb631726b45aa3f6b09da79f7af03a9784614901f61a967ed84d63c37b7edc7610a6c83610a5f60019695610a5a865f52600d60205260405f2090565b6116f3565b87519182913390836117c3565b0390a201610990565b845163d8e55daf60e01b81528890fd5b85516338d87d3960e01b81528990fd5b845163444244f560e01b81528890fd5b005b3461048c57602036600319011261048c576020600435610ac68161056c565b6001600160a01b039060405191807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b3461048c575f36600319011261048c576040515f600954610b1d816101b8565b808452906020906001908181169081156105425750600114610b4957610488856104dd8187038261027a565b60095f90815293507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b838510610b8f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610b73565b3461048c57604036600319011261048c57610488610474600435610bc58161056c565b6024359061209c565b3461048c57602036600319011261048c576004355f526004602052602060405f2054604051908152f35b3461048c575f36600319011261048c57610c1061440a565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461048c57604036600319011261048c576020610c87600435610c7e8161056c565b60243590612a0e565b604051908152f35b3461048c575f36600319011261048c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461048c5760208060031936011261048c5767ffffffffffffffff60043581811161048c57610d0590369060040161057d565b9091610d0f61440a565b811161022157610d2981610d246003546101b8565b61165b565b5f92601f8211600114610d9d5750610d7881807f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f955f91610d92575b508160011b915f199060031b1c19161790565b6003555b610d8d604051928392339184612a69565b0390a1005b90508401355f610d65565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b868210610e27575050827f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f9510610e0e575b5050600181811b01600355610d7c565b8301355f19600384901b60f8161c191690555f80610dfe565b80600184958294958901358155019401920190610dcc565b3461048c575f36600319011261048c5760206001600160a01b035f5416604051908152f35b3461048c57604036600319011261048c57610eda600435610e848161056c565b610488610e9e610e97602435809461319a565b809361414e565b91610ee8610ec563ffffffff610ebd62ffffff61010086015116613770565b93511661395f565b91604051958695606087526060870190610420565b908582036020870152610420565b908382036040850152610420565b8015150361048c57565b3461048c57608036600319011261048c57610488610474600435610f238161056c565b604435610f2f81610ef6565b60643591610f3c83610ef6565b60243590612bb6565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c57610f779036906004016108f3565b9060243590811161048c573660238201121561048c578060040135610f9b8161088d565b91610fa9604051938461027a565b8183526020916024602085019160051b8301019136831161048c57602401905b828210610fda57610aa58587612cb8565b81358152908301908301610fc9565b3461048c57604036600319011261048c576020610c8760043561100b8161056c565b60243590612d4f565b3461048c575f36600319011261048c576040515f600754611034816101b8565b80845290602090600190818116908115610542575060011461106057610488856104dd8187038261027a565b60075f90815293507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b8385106110a6575050505081016020016104dd826104886104cd565b805486860184015293820193810161108a565b3461048c57608036600319011261048c576004356110d68161056c565b6044359060243560643567ffffffffffffffff811161048c576110fd90369060040161090e565b906002600154146111f55760026001556111178385612f6d565b6001600160a01b039182851692835f526002602052604096875f20865f52602052875f205442106111e45761114a6158be565b97838151918083528201527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161048c57866111d5967f6a68946ba06488db8585d7c7637fa954b574035fe15720ea760125ef8601725883606086958a6111db9f996111ce9a8c60051b8093868601371660208301528101030190a48587614b16565b36916108a5565b91614dc9565b610aa560018055565b8751632d2f65a360e11b8152600490fd5b604051633ee5aeb560e01b8152600490fd5b3461048c57604036600319011261048c576001600160a01b0360043561122c8161056c565b165f52600260205260405f206024355f52602052602060405f2054604051908152f35b67ffffffffffffffff811161022157601f01601f191660200190565b9291926112778261124f565b91611285604051938461027a565b82948184528183011161048c578281602093845f960137010152565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c576112d39036906004016108f3565b60249060243583811161048c573660238201121561048c578060040135926112fa8461088d565b93611308604051958661027a565b8085526020956024602087019260051b8501019336851161048c5760248101925b85841061133a57610aa58888612dde565b833583811161048c5782013660438201121561048c5789916113668392369060448a820135910161126b565b815201930192611329565b3461048c57602036600319011261048c5760043561138e8161056c565b61139661440a565b6001600160a01b038091169081156113ed575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52601160045260245ffd5b90600282018092116106ba57565b90602082018092116106ba57565b90600182018092116106ba57565b919082018092116106ba57565b90604051918281549182825260209260208301915f5260205f20935f905b828210611484575050506102da9250038361027a565b85548452600195860195889550938101939091019061146e565b906114a88261088d565b6114b5604051918261027a565b82815280926114c6601f199161088d565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b8051156114f15760200190565b6114d0565b80518210156114f15760209160051b010190565b5f1981146106ba5760010190565b9190915f926001600160a01b0382165f52600a60205260405f20815f5260205261154460405f20611450565b9361154f855161149e565b915f915f5b875181101561159d578061156a6001928a6114f6565b5184611576828a612d4f565b14611583575b5001611554565b61159661158f8761150a565b96886114f6565b525f61157c565b5095509050929190926115c1826001600160a01b03165f52600b60205260405f2090565b815f526020526115d660405f20548093612a0e565b146115de5750565b9250565b91908110156114f15760051b81013590601e198136030182121561048c57019081359167ffffffffffffffff831161048c57602001823603811361048c579190565b61045690546101b8565b90611641602092828151948592016103ff565b0190565b818110611650575050565b5f8155600101611645565b90601f8211611668575050565b6102da9160035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c830193106116b1575b601f0160051c0190611645565b90915081906116a4565b9190601f81116116ca57505050565b6102da925f5260205f20906020601f840160051c830193106116b157601f0160051c0190611645565b919091825167ffffffffffffffff81116102215761171b8161171584546101b8565b846116bb565b602080601f831160011461175c5750819061174d9394955f92611751575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611739565b90601f19831695611770855f5260205f2090565b925f905b8882106117ab57505083600195969710611793575b505050811b019055565b01515f1960f88460031b161c191690555f8080611789565b80600185968294968601518155019501930190611774565b906001600160a01b036117e3602092959495604085526040850190610420565b9416910152565b604051906117f782610226565b5f8252565b6040519061180982610242565b600f82527f2261747472696275746573223a205b00000000000000000000000000000000006020830152565b6040519061184282610242565b600e82527f226f7574666974496473223a205b0000000000000000000000000000000000006020830152565b9060405191826060515f5b8181106118ad57509060206102da936118a182948401918383015f81528151948592016103ff565b0103808552018361027a565b6020919250806080015182828801015201908491611879565b60206102da9193929360405194816118e787935180928680870191016103ff565b82016118a1825180938680850191016103ff565b5f198101919082116106ba57565b906102da6021604051846119278296518092602080860191016103ff565b8101600b60fa1b602082015203600181018552018361027a565b906102da60226040518461195f8296518092602080860191016103ff565b810161174b60f21b602082015203600281018552018361027a565b6040906102da92949394825195869160209361199e815180928780880191016103ff565b83017f7b2274726169745f74797065223a202200000000000000000000000000000000858201526119d882518093876030850191016103ff565b016c111610113b30b63ab2911d101160991b6030820152611a028251809386603d850191016103ff565b0162089f4b60ea1b603d820152039081018552018361027a565b906102da604a60405184611a3a8296518092602080860191016103ff565b81017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022227d2c00000000000000000000000000000000000000000000604082015203602a81018552018361027a565b60316102da919392936040519481611ab88793518092602080870191016103ff565b82017f226261636b67726f756e644964223a20000000000000000000000000000000006020820152611af48251809360206030850191016103ff565b01600b60fa1b603082015203601181018552018361027a565b604a6102da919392936040519481611b2f8793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022000000000000000000000000000000000000000000000000006040820152611b918251809360206047850191016103ff565b0162089f4b60ea1b604782015203602a81018552018361027a565b60376102da919392936040519481611bce8793518092602080870191016103ff565b82017f226368616e6765734c6f636b6564556e74696c223a20000000000000000000006020820152611c0a8251809360206036850191016103ff565b01600b60fa1b603682015203601781018552018361027a565b60526102da919392936040519481611c458793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224368616e676573206c6f636b6564207560208201527f6e74696c222c202276616c7565223a20000000000000000000000000000000006040820152611ca78251809360206050850191016103ff565b01611f4b60f21b605082015203603281018552018361027a565b906102da603660405180947f22776f726e427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b8101600b60fa1b603582015203601681018552018361027a565b604b6102da919392936040519481611d428793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022576f726e2062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b01611f4b60f21b604982015203602b81018552018361027a565b906102da603660405180947f2275736564427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b604b6102da919392936040519481611e118793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022557365642062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b81601f8201121561048c578051611e758161124f565b92611e83604051948561027a565b8184526020828401011161048c5761045691602080850191016103ff565b9060208282031261048c57815167ffffffffffffffff811161048c576104569201611e5f565b6040513d5f823e3d90fd5b9081602091031261048c575190565b9081606091031261048c57805191604060208301519201516104568161056c565b612030600392959460a46102da956040519885611f298b975180926020808b0191016103ff565b86017f7b2274726169745f74797065223a202250726f64756374206e616d65222c202260208201527f76616c7565223a202200000000000000000000000000000000000000000000006040820152611f8b8251809360206049850191016103ff565b017f227d2c207b2274726169745f74797065223a202243617465676f7279206e616d60498201527f65222c202276616c7565223a20220000000000000000000000000000000000006069820152611fec8251809360206077850191016103ff565b017f227d2c207b2274726169745f74797065223a2022546f74616c20737570706c7960778201526c111610113b30b63ab2911d101160991b6097820152019061162e565b62227d5d60e81b815203601c1981018552018361027a565b906102da603d60405180947f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261208c81518092602086860191016103ff565b810103601d81018552018361027a565b6120a6828261319a565b9163ffffffff6120ba845163ffffffff1690565b1615612a03576120c86117ea565b506120d16117fc565b610100928385019462ffffff94856120ec885162ffffff1690565b16156128345750612116612110612107835163ffffffff1690565b63ffffffff1690565b836139b6565b9182516127f8575b60018661212e895162ffffff1690565b16036127ca576121626121418683612a0e565b9461215c612156612151886132bc565b611daa565b966132bc565b90611def565b955b8351156126a857509060606001600160a01b0394939260046040518097819363043c358d60e11b8352165afa9384156126a3575f905f9561266e575b5081516121b29063ffffffff1661395f565b9688516121c19062ffffff1690565b62ffffff166121cf90613770565b97606084019889516121e49063ffffffff1690565b63ffffffff166121f3906132bc565b916121fd93611f02565b94612208838861414e565b9783516122189063ffffffff1690565b63ffffffff166122279061395f565b9980516122369062ffffff1690565b62ffffff1661224490613770565b9861224e906132bc565b91855161225e9063ffffffff1690565b63ffffffff1661226d906132bc565b915161227d9062ffffff166132bc565b905161228e9063ffffffff166132bc565b9160408701516122a19063ffffffff1690565b63ffffffff166122b0906132bc565b9360208801516122cc906cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff166122e4906132bc565b956122ee906132bc565b966122f8906132bc565b610120989098015161230c9060ff166132bc565b9860405180916020820161231f9161162e565b03601f1981018252612331908261027a565b61233a90614322565b9b6040519e8f9e8f602001612373906009907f7b226e616d65223a22000000000000000000000000000000000000000000000081520190565b61237c9161162e565b7f222c202270726f647563744e616d65223a20220000000000000000000000000081526013016123ab9161162e565b7f222c202263617465676f72794e616d65223a202200000000000000000000000081526014016123da9161162e565b7f222c2022746f6b656e4964223a200000000000000000000000000000000000008152600e016124099161162e565b7f2c2022757063223a20000000000000000000000000000000000000000000000081526009016124389161162e565b7f2c202263617465676f7279223a200000000000000000000000000000000000008152600e016124679161162e565b7f2c2022737570706c79223a2000000000000000000000000000000000000000008152600c016124969161162e565b7f2c202272656d61696e696e67223a2000000000000000000000000000000000008152600f016124c59161162e565b7f2c20227072696365223a200000000000000000000000000000000000000000008152600b016124f49161162e565b7f2c2022646563696d616c73223a200000000000000000000000000000000000008152600e016125239161162e565b7f2c202263757272656e6379223a200000000000000000000000000000000000008152600e016125529161162e565b7f2c2022646973636f756e74223a200000000000000000000000000000000000008152600e016125819161162e565b61016160f51b81526002016125959161162e565b61259e9161162e565b7f2c20226465736372697074696f6e223a2241207069656365206f662042616e6e81527f792052657461696c2e222c2265787465726e616c5f75726c223a22687474707360208201527f3a2f2f72657461696c2e62616e6e792e6574682e7375636b73222c22696d616760408201527f65223a22646174613a696d6167652f7376672b786d6c3b6261736536342c00006060820152607e0161263f9161162e565b61227d60f01b815260020103601f198101825261265c908261027a565b61266590614322565b61045690612048565b905061269391945060603d60601161269c575b61268b818361027a565b810190611ee1565b5093905f6121a0565b503d612681565b611ec7565b9350945050506126be601192945162ffffff1690565b1611156127b657604051636c0360eb60e01b81525f816004816001600160a01b0386165afa9283156126a357612747936020925f91612794575b50925b61271361270782613dbf565b6001600160a01b031690565b604051630c8df17160e41b81526001600160a01b039092166004830152602482019290925293849190829081906044820190565b03915afa9081156126a357610456925f92612763575b50613e26565b61278691925060203d60201161278d575b61277e818361027a565b810190611ed2565b905f61275d565b503d612774565b6127b091503d805f833e6127a8818361027a565b810190611ea1565b5f6126f8565b6020612747926127c461029c565b926126fb565b6127f26127d78683612d4f565b946127ec6121566127e7886132bc565b611cc1565b90611d20565b95612164565b916128189060018761280d8a5162ffffff1690565b160361281e57613cac565b9161211e565b61282f9061282a613b6d565b6118c6565b613cac565b91909293966128438883612aa2565b9661284e8984611518565b979099612859611835565b9a5f9b5b8a518d10156128b2576128839061287d6128778f8e6114f6565b516132bc565b906118c6565b9b61288e8b516118fb565b811061289e575b6001019b61285d565b9b6128aa600191611909565b9c9050612895565b6128c7919395979a989b929496999c50611941565b995f9b5b88518d101561293c576129346001918c8f6129296121078f8f61291161290561291e936128fe61292e98612919956114f6565b519061319a565b9687015162ffffff1690565b62ffffff1690565b613770565b935163ffffffff1690565b61395f565b9161197a565b9c019b6128cb565b939894995094999196509499508515155f146129f2579061298661292961210761297c61297561298c9661296f8c6132bc565b90611a96565b998761319a565b5163ffffffff1690565b90611b0d565b955b6129ba866129ad846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b544281116129c9575b50612164565b94966129e56121566129eb93996129df896132bc565b90611bac565b90611c23565b955f6129c3565b94506129fd90611a1c565b9561298e565b5050506104566117ea565b6001600160a01b0316805f52600e60205260405f20825f5260205260405f2054918215918215612a47575b5050612a425790565b505f90565b9091505f52600b60205260405f20825f5260205260405f205414155f80612a39565b916060816001600160a01b039260209497969760408752816040880152838701375f828287010152601f80199101168401019416910152565b612aac828261319a565b9163ffffffff612ac0845163ffffffff1690565b1615612a035760609062ffffff612ade61010086015162ffffff1690565b16612b825792612b22612b2892612af86104569686611518565b939080151580612b7a575b612b44575b50612b1d61210761287d925163ffffffff1690565b614449565b92614910565b8051612b35575b50613cac565b612b3e916118c6565b5f612b2f565b61287d919250612107612b71612b6c612b6661210761297c612b1d968d61319a565b8a6139b6565b61186e565b93925050612b08565b506001612b03565b5050612b98612107612b9e935163ffffffff1690565b906139b6565b8051612bad57506104566117ea565b61045690613cac565b9092612bc2848361319a565b9363ffffffff612bd6865163ffffffff1690565b1615612cab5760609062ffffff612bf461010088015162ffffff1690565b16612c92579061045695612c0b612c309386611518565b948115159081612c8a575b50612c625750612b1d61210761287d925163ffffffff1690565b92612c3d575b5050613cac565b612c4691614910565b8051612c53575b80612c36565b612c5c916118c6565b5f612c4d565b61287d919250612107612b71612b6c612c8461210761297c612b1d968c61319a565b896139b6565b90505f612c16565b5050509050612b98612107612b9e935163ffffffff1690565b50505050506104566117ea565b91612cc161440a565b5f925b8051841015612d4957612cd784826114f6565b5193612ce381856114f6565b51855f5260049560208781526040805f2054612d3a57907fb10eb6fc7557a7109693cb8f3fac48d44328de56c0368ee4cac539b424d2cad991600196979899845f52825284815f205551338152a301929190612cc4565b51632165e0ab60e01b81528890fd5b50915050565b6001600160a01b0381165f52600f60205260405f20825f5260205260405f2054908115612dd757612d91906001600160a01b03165f52600a60205260405f2090565b815f52602052612da360405f20611450565b915f5b8351811015612dcf5781612dba82866114f6565b5114612dc857600101612da6565b5050905090565b505050505f90565b5050505f90565b91612de761440a565b5f925b8051841015612d4957612dfd84826114f6565b5193612e0981856114f6565b5194805f52602095600c87526040805f20825167ffffffffffffffff811161022157612e398161171584546101b8565b89601f8211600114612eb75750917f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e969391612e9184612ea09560019a9b9c9d5f91612eac57508160011b915f199060031b1c19161790565b90555b519182913390836117c3565b0390a201929190612dea565b90508501515f610d65565b99601f198216612eca845f5260205f2090565b9b5f905b828210612f3357505091600198999a9b7f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e9696949282612ea0979510612f1b575b5050881b88019055612e94565b8501515f1960f88460031b161c191690555f80612f0e565b80600181939f868b015181550194019d01909c929c612ece565b51906102da8261056c565b9081602091031261048c57516104568161056c565b6040516331a9108f60e11b815260048101929092526001600160a01b03906020908390602490829085165afa9182156126a3575f92612fcd575b5080612fb16158be565b16911603612fbb57565b6040516341eb334360e11b8152600490fd5b612ff091925060203d602011612ff7575b612fe8818361027a565b810190612f58565b905f612fa7565b503d612fde565b519063ffffffff8216820361048c57565b51906cffffffffffffffffffffffffff8216820361048c57565b519061ffff8216820361048c57565b519062ffffff8216820361048c57565b519060ff8216820361048c57565b51906102da82610ef6565b60208183031261048c57805167ffffffffffffffff9182821161048c57016101e08184031261048c57613092610880565b9261309c82612ffe565b84526130aa6020830161300f565b60208501526130bb60408301612ffe565b60408501526130cc60608301612ffe565b60608501526130dd6080830161300f565b60808501526130ee60a08301613029565b60a08501526130ff60c08301612f4d565b60c085015260e082015160e085015261010061311c818401613038565b9085015261012061312e818401613048565b90850152610140613140818401613056565b90850152610160613152818401613056565b90850152610180613164818401613056565b908501526101a0613176818401613056565b908501526101c0928383015190811161048c576131939201611e5f565b9082015290565b61324d915f9160606101c06040516131b181610204565b85815285602082015285604082015285838201528560808201528560a08201528560c08201528560e08201528561010082015285610120820152856101408201528561016082015285610180820152856101a0820152015261321561270782613dbf565b9060405180958194829363c44a8e6d60e01b8452600484016040905f9294936001600160a01b03606083019616825260208201520152565b03915afa9081156126a3575f91613262575090565b61045691503d805f833e613276818361027a565b810190613061565b60405161328a81610226565b5f8152905f368137565b9061329e8261124f565b6132ab604051918261027a565b82815280926114c6601f199161124f565b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156133fd575b506d04ee2d6d415b85acef8100000000808310156133ee575b50662386f26fc10000808310156133df575b506305f5e100808310156133d0575b50612710808310156133c1575b5060648210156133b1575b600a809210156133a7575b60019081602161335360018701613294565b95860101905b613365575b5050505090565b5f19019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156133a257919082613359565b61335e565b9160010191613341565b9190606460029104910191613336565b6004919392049101915f61332b565b6008919392049101915f61331e565b6010919392049101915f61330f565b6020919392049101915f6132fd565b60409350810491505f6132e4565b6040519061341882610242565b600c82527f5370656369616c20426f647900000000000000000000000000000000000000006020830152565b6040519061345182610242565b600c82527f5370656369616c204865616400000000000000000000000000000000000000006020830152565b6040519061348a82610242565b600c82527f5370656369616c204c65677300000000000000000000000000000000000000006020830152565b604051906134c382610242565b600c82527f5370656369616c205375697400000000000000000000000000000000000000006020830152565b604051906134fc82610242565b6004825263119a5cdd60e21b6020830152565b6040519061351c82610242565b600b82527f5375697420626f74746f6d0000000000000000000000000000000000000000006020830152565b6040519061355582610242565b600882527f5375697420746f700000000000000000000000000000000000000000000000006020830152565b6040519061358e82610242565b600482526314dd5a5d60e21b6020830152565b604051906135ae82610242565b60048252631219585960e21b6020830152565b604051906135ce82610242565b600882527f4865616420746f700000000000000000000000000000000000000000000000006020830152565b6040519061360782610242565b600582527f4d6f7574680000000000000000000000000000000000000000000000000000006020830152565b6040519061364082610242565b600782527f476c6173736573000000000000000000000000000000000000000000000000006020830152565b6040519061367982610242565b600882527f4e65636b6c6163650000000000000000000000000000000000000000000000006020830152565b604051906136b282610242565b60048252634c65677360e01b6020830152565b604051906136d282610242565b600882527f4261636b736964650000000000000000000000000000000000000000000000006020830152565b6040519061370b82610242565b600a82527f4261636b67726f756e64000000000000000000000000000000000000000000006020830152565b6040519061374482610242565b600a82527f42616e6e7920626f6479000000000000000000000000000000000000000000006020830152565b8061377e5750610456613737565b6001810361378f57506104566136fe565b600281036137a057506104566136c5565b600881036137b157506104566136a5565b600381036137c2575061045661366c565b600681036137d35750610456613633565b600781036137e457506104566135fa565b600c81036137f557506104566135c1565b6004810361380657506104566135a1565b600981036138175750610456613581565b600b81036138285750610456613548565b600a8103613839575061045661350f565b600d810361384a57506104566134ef565b600e810361385b57506104566134b6565b600f810361386c575061045661347d565b6010810361387d5750610456613444565b60111461388c576104566117ea565b61045661340b565b604051906138a182610242565b600882527f4f726967696e616c0000000000000000000000000000000000000000000000006020830152565b604051906138da82610242565b600682527f4f72616e676500000000000000000000000000000000000000000000000000006020830152565b6040519061391382610242565b600482526350696e6b60e01b6020830152565b6040519061393382610242565b600582527f416c69656e0000000000000000000000000000000000000000000000000000006020830152565b600181036139705750610456613926565b600281036139815750610456613906565b6003810361399257506104566138cd565b600481036139a35750610456613894565b5f52600c60205261045660405f2061035f565b90805f52602091600d83526139cd60405f2061035f565b8051613ada5750613a1f91816001600160a01b036139eb8694613dbf565b1690604051809581948293632f54648f60e21b845260048401602090939291936001600160a01b0360408201951681520152565b03915afa80156126a357613a8792613a4c604992610456945f91613abd575b50613a4761029c565b613e26565b60405194827f3c696d61676520687265663d220000000000000000000000000000000000000087948501528251928391602d860191016103ff565b81017f222077696474683d2234303022206865696768743d22343030222f3e00000000602d82015203602981018452018261027a565b613ad49150833d851161278d5761277e818361027a565b5f613a3e565b9250505090565b6009545f9291613af0826101b8565b91600190818116908115613b5a5750600114613b0b57505050565b909192935060095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af905f915b848310613b47575050500190565b8181602092548587015201920191613b39565b60ff191683525050811515909102019150565b603b610456613bfc610a056008613c836040516003613c7381613c6381613c536044602088017f7b66696c6c3a6e6f6e653b7d00000000000000000000000000000000000000008152600c8952613bc389610242565b6040519e8f9d8e7f3c7374796c653e2e6f7b66696c6c3a233830383038303b7d2e6231000000000060208201528b5192839101846103ff565b8d016217311960e91b603b820152895190613c1b82603e8301856103ff565b01622e623360e81b603e820152613c398a51809360418401906103ff565b01613c4c60418201620b988d60ea1b9052565b018761162e565b622e613160e81b8152018561162e565b6217309960e91b8152018361162e565b622e613360e81b8152019061162e565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000815201613ae1565b906102da60bb60405180947f3c7376672077696474683d2234303022206865696768743d223430302220766960208301527f6577426f783d223020302034303020343030222066696c6c3d2277686974652260408301527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608301527f7667223e3c7374796c653e2e6f7b66696c6c3a233035303530353b7d2e777b6660808301527f696c6c3a236639663966393b7d3c2f7374796c653e000000000000000000000060a0830152613d8981518092602060b5860191016103ff565b81017f3c2f7376673e000000000000000000000000000000000000000000000000000060b582015203609b81018552018361027a565b60206001600160a01b039160046040518094819363507f146560e01b8352165afa9081156126a3575f91613df1575090565b90506020813d602011613e1e575b81613e0c6020938361027a565b8101031261048c57516104568161056c565b3d9150613dff565b9061045690613e54604051602092609160f51b84830152602282015260228152613e4f8161025e565b61528d565b926040519381613e6d86935180928680870191016103ff565b8201613e81825180938680850191016103ff565b0103808452018261027a565b906102da602160405184613eab8296518092602080860191016103ff565b8101600160fd1b602082015203600181018552018361027a565b60405190613ed282610242565b600a82527f2072656d61696e696e67000000000000000000000000000000000000000000006020830152565b906102da929493602192613f67604051978894602093613f268151809287808b0191016103ff565b8601613f3a825180938780850191016103ff565b01602f60f81b84820152613f5682518093868a850191016103ff565b0191835193849187850191016103ff565b0103600181018552018361027a565b906102da929493602d92613ff5604051978894602093613f9e8151809287808b0191016103ff565b86017f2028534f4c44204f55542920000000000000000000000000000000000000000085820152613fd88251809387602c850191016103ff565b01602f60f81b602c820152613f5682518093868a850191016103ff565b0103600d81018552018361027a565b6102da91613f67949360219260405196879360209261402b8151809286808a0191016103ff565b850161403f825180938680850191016103ff565b0191602f60f81b81840152835193849187850191016103ff565b906102da6022604051846140778296518092602080860191016103ff565b81016101d160f51b602082015203600281018552018361027a565b60216102da9193929360405194816140b48793518092602080870191016103ff565b82016140c982518093602080850191016103ff565b01600160fd1b602082015203600181018552018361027a565b60256102da9193929360405194816141048793518092602080870191016103ff565b82017f5550432023000000000000000000000000000000000000000000000000000000602082015261413f82518093602087850191016103ff565b0103600581018552018361027a565b906141bc61045692633b9aca00614177614172612929612107875163ffffffff1690565b613e8d565b9106614181613ec5565b81156142135750906141956141b7926132bc565b6141b16141ac612107606088015163ffffffff1690565b6132bc565b91614004565b614059565b906141d461291961291161010084015162ffffff1690565b80516141f6575b506141ac6121076141f0925163ffffffff1690565b906140e2565b61210761420a6141ac926141f09495614092565b939250506141db565b9050604084019163ffffffff61422d845163ffffffff1690565b1680614268575061424b6141ac6121076141b7955163ffffffff1690565b6142626141ac612107606089015163ffffffff1690565b91613f76565b6141b79350614276906132bc565b61428d6141ac612107606089015163ffffffff1690565b91613efe565b604051906142a08261025e565b604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036106ba57565b80511561440157614331614293565b61434d6143486143418451611419565b6003900490565b6142f2565b9161435f61435a84611427565b613294565b92835280815182019060208501935b8282106143af5750505060039051068060011461439e57600214614390575090565b603d60f81b5f199091015290565b50613d3d60f01b6001199091015290565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c168801015160028601531685010151908201530193919061436e565b506104566117ea565b6001600160a01b03805f54168161441f6158be565b16036144285750565b6024906144336158be565b60405163118cdaa760e01b815291166004820152fd5b61445290615792565b93604096959693919351968796602088017f3c7374796c653e2e62317b66696c6c3a2300000000000000000000000000000090528051908160318a01916020019161449c926103ff565b8701603181017f3b7d2e62327b66696c6c3a230000000000000000000000000000000000000000905281519182603d830191602001916144db926103ff565b01603d81017f3b7d2e62337b66696c6c3a230000000000000000000000000000000000000000905281519182604983019160200191614519926103ff565b0160498101614547907f3b7d2e62347b66696c6c3a2300000000000000000000000000000000000000009052565b6055016145539161162e565b7f3b7d2e61317b66696c6c3a2300000000000000000000000000000000000000008152600c016145829161162e565b7f3b7d2e61327b66696c6c3a2300000000000000000000000000000000000000008152600c016145b19161162e565b7f3b7d2e61337b66696c6c3a2300000000000000000000000000000000000000008152600c016145e09161162e565b7f3b7d3c2f7374796c653e000000000000000000000000000000000000000000008152600a0161460f90613ae1565b03601f1981018252610456908261027a565b90604051918260209161463c815180928580860191016103ff565b6007545f91830161464c826101b8565b916001908181169081156146d55750600114614679575b5050506102da925003601f19810184528361027a565b94925060075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688945f905b8382106146bd5750506102da945001015f8080614663565b865482840186015295860195889550908401906146a5565b9150506102da95935060ff9291921916838301528015150201015f8080614663565b906040519182602091614712815180928580860191016103ff565b6008545f918301614722826101b8565b916001908181169081156146d5575060011461474e575050506102da925003601f19810184528361027a565b94925060085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3945f905b8382106147925750506102da945001015f8080614663565b8654828401860152958601958895509084019061477a565b9060405191826020916147c5815180928580860191016103ff565b6005545f9183016147d5826101b8565b916001908181169081156146d55750600114614801575050506102da925003601f19810184528361027a565b94925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0945f905b8382106148455750506102da945001015f8080614663565b8654828401860152958601958895509084019061482d565b906040519182602091614878815180928580860191016103ff565b6006545f918301614888826101b8565b916001908181169081156146d557506001146148b4575050506102da925003601f19810184528361027a565b94925060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f945f905b8382106148f85750506102da945001015f8080614663565b865482840186015295860195889550908401906148e0565b91909160608351915f925f935f945f9085935f5b61492d82611435565b811015614b0a5781811015614afe57614946818c6114f6565b5195614952878961319a565b9561497861210761496d6129116101008b015162ffffff1690565b985163ffffffff1690565b915b600388811492908315614acf57505050600197614997838b6139b6565b9b5b60048914614ac6575b6005898103614a725750506001965b6007898103614a30575050600b6001985b1180614a26575b614a0c575b15159081614a03575b506149eb575b506001019794939297614924565b6001919861287d6149fc928a6139b6565b97906149dd565b9050155f6149d7565b9a614a17919a6118c6565b98614a206117ea565b9a6149ce565b508b5115156149c9565b8991991180614a6a575b80614a62575b614a4d575b600b906149c2565b975099614a599061485d565b99600197614a45565b508615614a40565b508815614a3a565b899891981180614abe575b80614ab6575b156149b157965060019a8b84145f14614aa757614a9f906147aa565b9a5b966149b1565b614ab0906146f7565b9a614aa1565b508615614a83565b508715614a7d565b600196506149a2565b899d919a929d1180614af6575b1561499957985099614aed90614621565b99600198614999565b508915614adc565b5f95601295879161497a565b50505050505050925050565b9190614b37816129ad856001600160a01b03165f52600b60205260405f2090565b54614b428185612a0e565b818414801590614d44575b614b59575b5050505050565b8214614d2b575b508115614d04576040516331a9108f60e11b808252600482018490526001600160a01b0392918584169060208082602481865afa80156126a35786925f91614ce7575b5082614bad6158be565b911696168614159384614c6f575b50505050614c5d5763ffffffff614bd561297c858761319a565b1615614c4b5782614bfb826129ad876001600160a01b03165f52600b60205260405f2090565b55614c1b836129ad866001600160a01b03165f52600e60205260405f2090565b553003614c30575b50505b5f80808080614b52565b614c44913090614c3e6158be565b90615917565b5f80614c23565b60405163c3095f8760e01b8152600490fd5b60405163d03702f960e01b8152600490fd5b819293945090614ca691614c816158be565b95614c8c8a8c612a0e565b916040518095819482938352600483019190602083019252565b03915afa9081156126a35783925f92614cca575b505016911614155f808080614bbb565b614ce09250803d10612ff757612fe8818361027a565b5f80614cba565b614cfe9150823d8411612ff757612fe8818361027a565b5f614ba3565b614d2591506129ad5f936001600160a01b03165f52600b60205260405f2090565b55614c26565b614d3e90614d376158be565b3086615917565b5f614b60565b5082811415614b4d565b81519167ffffffffffffffff831161022157680100000000000000008311610221578154838355808410614dad575b506020809101915f5260205f20905f5b848110614d9b575050505050565b83518382015592810192600101614d8d565b614dc390835f528460205f209182019101611645565b5f614d7d565b909291925f935f915f92614dfa614df5836129ad886001600160a01b03165f52600a60205260405f2090565b611450565b955f945f945f908951615227575b90969299935f999899969296975b825189101561519c579a8a9b614e2f8a859d9c9d6114f6565b516040516331a9108f60e11b8152600481018290529d9097906001600160a01b03168e6024815a93602094fa9d8e156126a3575f9e61517b575b508d6001600160a01b0380614e7c6158be565b921691161415806150f0575b6150de57614eaa612911610100614ea08f8c9061319a565b015162ffffff1690565b9960028b1080156150d4575b6150c2578b151590816150b7575b506150a55760048a0361500857506001949095919293955b8981111580614fff575b15614f7a57508a949392918188614f0a93141580614f68575b614f4f575b5061150a565b94858c805182105f14614f4257610100614ea0614f2d614f3594612911946114f6565b51809961319a565b905b959192939490614edc565b505093505f935f90614f37565b614f6290614f5b6158be565b3089615917565b5f614f04565b5089614f748289612d4f565b14614eff565b93966001929a959d999199969396898d81614f958583612d4f565b03614fb2575b50505050930197939a949091999899969296614e16565b836129ad614fd1926001600160a01b03165f52600f60205260405f2090565b556001600160a01b0330911603614feb575b80898d614f9b565b614ff990308d614c3e6158be565b5f614fe3565b50801515614ee6565b939260098a036150215750600192959192939490614edc565b9260068a14801561509b575b8015615091575b8061508a575b1561505157604051639b8fdcd160e01b8152600490fd5b600b8a148015615080575b80615079575b15614f37576040516306f7588760e01b8152600490fd5b5083615062565b50600a8a1461505c565b508461503a565b50600c8a14615034565b5060078a1461502d565b604051633869abd960e21b8152600490fd5b90508a11155f614ec4565b60405163b0ee46ab60e01b8152600490fd5b5060118b11614eb6565b60405163032cac0360e01b8152600490fd5b508b6001600160a01b0360206151336151076158be565b936151128d82612d4f565b6040519485809481936331a9108f60e11b8352600483019190602083019252565b0392165afa9081156126a3576001600160a01b039182915f9161515c575b501691161415614e88565b615175915060203d602011612ff757612fe8818361027a565b5f615151565b615195919e5060203d602011612ff757612fe8818361027a565b9c5f614e69565b5050979550915091949250805b6151d8575050506102da92916129ad6151d3926001600160a01b03165f52600a60205260405f2090565b614d4e565b9081856151e86151f39487612d4f565b14615214575061150a565b815181101561520d5761520681836114f6565b51806151a9565b5f806151a9565b614f62906152206158be565b3087615917565b955050615233886114e4565b5194615248612911610100614ea0898c61319a565b90614e08565b604051906105e0820182811067ffffffffffffffff82111761022157604052602e82526105c0366020840137565b9081518110156114f1570160200190565b908151156153bf5761529d61524e565b915f6152a8846114e4565b5260019080515f915b8183106152d6575050506152cc6152d191610456939461597b565b6159bd565b615a02565b90919361531e6153186153126152ec888661527c565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b905f915b60ff9088828816851015615382576001929161535761535161531861534a8961535d966114f6565b5160ff1690565b60081b90565b90611443565b615379603a9283830616615371878d6114f6565b9060ff169052565b04920191615322565b509196925050805b615399575060010191906152b1565b9360ff6001603a926153b583858a06166153718584168d6114f6565b011694048061538a565b905061045661327e565b604051906153d682610242565b600682527f66666539303000000000000000000000000000000000000000000000000000006020830152565b6040519061540f82610242565b600682527f66666337303000000000000000000000000000000000000000000000000000006020830152565b6040519061544882610242565b600682527f66336136303300000000000000000000000000000000000000000000000000006020830152565b6040519061548182610242565b600682527f39363561316100000000000000000000000000000000000000000000000000006020830152565b604051906154ba82610242565b600682527f66663763303200000000000000000000000000000000000000000000000000006020830152565b604051906154f382610242565b600682527f66643336303000000000000000000000000000000000000000000000000000006020830152565b6040519061552c82610242565b600682527f63333265306400000000000000000000000000000000000000000000000000006020830152565b6040519061556582610242565b600682527f66666438633500000000000000000000000000000000000000000000000000006020830152565b6040519061559e82610242565b600682527f66663936613900000000000000000000000000000000000000000000000000006020830152565b604051906155d782610242565b600682527f66653538386200000000000000000000000000000000000000000000000000006020830152565b6040519061561082610242565b600682527f63393266343500000000000000000000000000000000000000000000000000006020830152565b6040519061564982610242565b600682527f36376437353700000000000000000000000000000000000000000000000000006020830152565b6040519061568282610242565b600682527f33306132323000000000000000000000000000000000000000000000000000006020830152565b604051906156bb82610242565b600682527f32313761313500000000000000000000000000000000000000000000000000006020830152565b604051906156f482610242565b600682527f30393439306600000000000000000000000000000000000000000000000000006020830152565b6040519061572d82610242565b600682527f65343833656600000000000000000000000000000000000000000000000000006020830152565b6040519061576682610242565b600682527f64633266656600000000000000000000000000000000000000000000000000006020830152565b600181036157d957506157a361563c565b906157ac615675565b906157b56156ae565b906157be6156e7565b906157c7615720565b906157d0615759565b90610456615759565b6002810361582057506157ea615558565b906157f3615591565b906157fc6155ca565b90615805615603565b9061580e615558565b90615817615591565b906104566155ca565b60038103615867575061583161543b565b9061583a6154ad565b906158436154e6565b9061584c61551f565b9061585561543b565b9061585e6154ad565b906104566154e6565b60041461588057604051639a7b332360e01b8152600490fd5b6158886153c9565b90615891615402565b9061589a61543b565b906158a3615474565b906158ac6153c9565b906158b5615402565b9061045661543b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633148061590c575b156159085760131936013681116106ba573560601c90565b3390565b5060143610156158f0565b909291926001600160a01b0380921690813b1561048c575f6064928195856040519889978896632142170760e11b885216600487015216602485015260448401525af180156126a3576159675750565b67ffffffffffffffff811161022157604052565b9060ff8091169061598b8261149e565b925f5b83811061599c575050505090565b80836159aa600193856114f6565b51166159b682886114f6565b520161598e565b9081516159c98161149e565b905f5b8181106159da575090925050565b60019060ff6159ef5f198389510301886114f6565b51166159fb82866114f6565b52016159cc565b8051615a0d8161124f565b916040615a1d604051948561027a565b828452615a298361124f565b60209190601f190136868401375f5b848110615a4757505050505090565b6001908251615a558161025e565b603a81527f31323334353637383941424344454647484a4b4c4d4e50515253545556575859858201527f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000848201527fff0000000000000000000000000000000000000000000000000000000000000090615add9060ff615ad5858a6114f6565b51169061527c565b51165f1a615aeb828961527c565b5301615a3856fea2646970667358221220dbe973aea5d1f03deef7c0b303185740ea702d57d66279c38dd6598a01b9532864736f6c63430008170033",
1804
+ "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806257bfdd146101b357806305b2ae1b146101ae578063150b7a02146101a9578063187be308146101a457806318ab522d1461019f5780632150a1381461019a5780632580833d1461019557806331a290ac14610190578063572b6c051461018b57806359a81d91146101865780635e703e71146101815780636aff31dd1461017c578063715018a61461017757806379a2696e146101725780637da0a8771461016d578063875e4bea146101685780638da5cb5b14610163578063a0122c091461015e578063a22d0dd514610159578063b03a3eab14610154578063b1fa9e7b1461014f578063b3fa27831461014a578063c06e7bc714610145578063c122804614610140578063d756227e1461013b5763f2fde38b14610136575f80fd5b611371565b6112a1565b611207565b6110b9565b611014565b610fe9565b610f45565b610f00565b610e64565b610e3f565b610cd2565b610c8f565b610c5c565b610bf8565b610bce565b610ba2565b610afd565b610aa7565b61093f565b6107db565b610736565b6106bf565b610629565b6105ab565b610490565b610459565b90600182811c921680156101e6575b60208310146101d257565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101c7565b634e487b7160e01b5f52604160045260245ffd5b6101e0810190811067ffffffffffffffff82111761022157604052565b6101f0565b6020810190811067ffffffffffffffff82111761022157604052565b6040810190811067ffffffffffffffff82111761022157604052565b6060810190811067ffffffffffffffff82111761022157604052565b90601f8019910116810190811067ffffffffffffffff82111761022157604052565b604051905f82600354916102af836101b8565b8083529260209060019081811690811561033b57506001146102dc575b50506102da9250038361027a565b565b91509260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b935f925b82841061032357506102da9450505081016020015f806102cc565b85548885018301529485019487945092810192610308565b915050602092506102da94915060ff191682840152151560051b8201015f806102cc565b9060405191825f8254610371816101b8565b908184526020946001916001811690815f146103dd575060011461039f575b5050506102da9250038361027a565b5f90815285812095935091905b8183106103c55750506102da93508201015f8080610390565b855488840185015294850194879450918301916103ac565b925050506102da94925060ff191682840152151560051b8201015f8080610390565b5f5b8381106104105750505f910152565b8181015183820152602001610401565b90602091610439815180928185528580860191016103ff565b601f01601f1916010190565b906020610456928181520190610420565b90565b3461048c575f36600319011261048c5761048861047461029c565b604051918291602083526020830190610420565b0390f35b5f80fd5b3461048c575f36600319011261048c576040515f6008546104b0816101b8565b8084529060209060019081811690811561054257506001146104e9575b610488856104dd8187038261027a565b60405191829182610445565b60085f90815293507ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83851061052f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610513565b869550610488969350602092506104dd94915060ff191682840152151560051b82010192936104cd565b6001600160a01b0381160361048c57565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020838186019501011161048c57565b3461048c57608036600319011261048c576004356105c88161056c565b6105d360243561056c565b60643567ffffffffffffffff811161048c576105f390369060040161057d565b50506001600160a01b033091160361061757604051630a85bd0160e11b8152602090f35b604051633b2c6aa160e21b8152600490fd5b3461048c57604036600319011261048c576004356106468161056c565b6001600160a01b036024359161065c8382612f6d565b16805f52600260205260405f20825f5260205260405f20549162093a804201928342116106ba5783106106a8576106a5915f52600260205260405f20905f5260205260405f2090565b55005b604051631057c89560e21b8152600490fd5b611405565b3461048c57604036600319011261048c576106e86004356106df8161056c565b60243590611518565b90604051918291604083019083526020906040602085015282518091526020606085019301915f5b82811061071f57505050500390f35b835185528695509381019392810192600101610710565b3461048c575f36600319011261048c576040515f600554610756816101b8565b80845290602090600190818116908115610542575060011461078257610488856104dd8187038261027a565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8385106107c8575050505081016020016104dd826104886104cd565b80548686018401529382019381016107ac565b3461048c575f36600319011261048c576040515f6006546107fb816101b8565b80845290602090600190818116908115610542575060011461082757610488856104dd8187038261027a565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b83851061086d575050505081016020016104dd826104886104cd565b8054868601840152938201938101610851565b604051906102da82610204565b67ffffffffffffffff81116102215760051b60200190565b92916108b08261088d565b916108be604051938461027a565b829481845260208094019160051b810192831161048c57905b8282106108e45750505050565b813581529083019083016108d7565b9080601f8301121561048c57816020610456933591016108a5565b9181601f8401121561048c5782359167ffffffffffffffff831161048c576020808501948460051b01011161048c57565b3461048c5760408060031936011261048c5760049067ffffffffffffffff823581811161048c5761097390369085016108f3565b9060243590811161048c5761098b903690850161090e565b9290915f5b8151811015610aa5576109a381836114f6565b516109b96109b28388886115e2565b369161126b565b6109d36109ce835f52600d60205260405f2090565b611624565b610a95576109e9825f52600460205260405f2090565b548015610a855785516020810190610a1381610a05848761162e565b03601f19810183528261027a565b51902003610a7557907faeb631726b45aa3f6b09da79f7af03a9784614901f61a967ed84d63c37b7edc7610a6c83610a5f60019695610a5a865f52600d60205260405f2090565b6116f3565b87519182913390836117c3565b0390a201610990565b845163d8e55daf60e01b81528890fd5b85516338d87d3960e01b81528990fd5b845163444244f560e01b81528890fd5b005b3461048c57602036600319011261048c576020600435610ac68161056c565b6001600160a01b039060405191807f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb566169116148152f35b3461048c575f36600319011261048c576040515f600954610b1d816101b8565b808452906020906001908181169081156105425750600114610b4957610488856104dd8187038261027a565b60095f90815293507f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b838510610b8f575050505081016020016104dd826104886104cd565b8054868601840152938201938101610b73565b3461048c57604036600319011261048c57610488610474600435610bc58161056c565b6024359061209c565b3461048c57602036600319011261048c576004355f526004602052602060405f2054604051908152f35b3461048c575f36600319011261048c57610c1061440a565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461048c57604036600319011261048c576020610c87600435610c7e8161056c565b60243590612a0e565b604051908152f35b3461048c575f36600319011261048c5760206040516001600160a01b037f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb566168152f35b3461048c5760208060031936011261048c5767ffffffffffffffff60043581811161048c57610d0590369060040161057d565b9091610d0f61440a565b811161022157610d2981610d246003546101b8565b61165b565b5f92601f8211600114610d9d5750610d7881807f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f955f91610d92575b508160011b915f199060031b1c19161790565b6003555b610d8d604051928392339184612a69565b0390a1005b90508401355f610d65565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b868210610e27575050827f512c3c91736f50c57a0548c1d01ab02f24c420f002b8b20e2bfe63df9693cd3f9510610e0e575b5050600181811b01600355610d7c565b8301355f19600384901b60f8161c191690555f80610dfe565b80600184958294958901358155019401920190610dcc565b3461048c575f36600319011261048c5760206001600160a01b035f5416604051908152f35b3461048c57604036600319011261048c57610eda600435610e848161056c565b610488610e9e610e97602435809461319a565b809361414e565b91610ee8610ec563ffffffff610ebd62ffffff61010086015116613770565b93511661395f565b91604051958695606087526060870190610420565b908582036020870152610420565b908382036040850152610420565b8015150361048c57565b3461048c57608036600319011261048c57610488610474600435610f238161056c565b604435610f2f81610ef6565b60643591610f3c83610ef6565b60243590612bb6565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c57610f779036906004016108f3565b9060243590811161048c573660238201121561048c578060040135610f9b8161088d565b91610fa9604051938461027a565b8183526020916024602085019160051b8301019136831161048c57602401905b828210610fda57610aa58587612cb8565b81358152908301908301610fc9565b3461048c57604036600319011261048c576020610c8760043561100b8161056c565b60243590612d4f565b3461048c575f36600319011261048c576040515f600754611034816101b8565b80845290602090600190818116908115610542575060011461106057610488856104dd8187038261027a565b60075f90815293507fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b8385106110a6575050505081016020016104dd826104886104cd565b805486860184015293820193810161108a565b3461048c57608036600319011261048c576004356110d68161056c565b6044359060243560643567ffffffffffffffff811161048c576110fd90369060040161090e565b906002600154146111f55760026001556111178385612f6d565b6001600160a01b039182851692835f526002602052604096875f20865f52602052875f205442106111e45761114a6158be565b97838151918083528201527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841161048c57866111d5967f6a68946ba06488db8585d7c7637fa954b574035fe15720ea760125ef8601725883606086958a6111db9f996111ce9a8c60051b8093868601371660208301528101030190a48587614b16565b36916108a5565b91614dc9565b610aa560018055565b8751632d2f65a360e11b8152600490fd5b604051633ee5aeb560e01b8152600490fd5b3461048c57604036600319011261048c576001600160a01b0360043561122c8161056c565b165f52600260205260405f206024355f52602052602060405f2054604051908152f35b67ffffffffffffffff811161022157601f01601f191660200190565b9291926112778261124f565b91611285604051938461027a565b82948184528183011161048c578281602093845f960137010152565b3461048c57604036600319011261048c5767ffffffffffffffff60043581811161048c576112d39036906004016108f3565b60249060243583811161048c573660238201121561048c578060040135926112fa8461088d565b93611308604051958661027a565b8085526020956024602087019260051b8501019336851161048c5760248101925b85841061133a57610aa58888612dde565b833583811161048c5782013660438201121561048c5789916113668392369060448a820135910161126b565b815201930192611329565b3461048c57602036600319011261048c5760043561138e8161056c565b61139661440a565b6001600160a01b038091169081156113ed575f548273ffffffffffffffffffffffffffffffffffffffff198216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b604051631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52601160045260245ffd5b90600282018092116106ba57565b90602082018092116106ba57565b90600182018092116106ba57565b919082018092116106ba57565b90604051918281549182825260209260208301915f5260205f20935f905b828210611484575050506102da9250038361027a565b85548452600195860195889550938101939091019061146e565b906114a88261088d565b6114b5604051918261027a565b82815280926114c6601f199161088d565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b8051156114f15760200190565b6114d0565b80518210156114f15760209160051b010190565b5f1981146106ba5760010190565b9190915f926001600160a01b0382165f52600a60205260405f20815f5260205261154460405f20611450565b9361154f855161149e565b915f915f5b875181101561159d578061156a6001928a6114f6565b5184611576828a612d4f565b14611583575b5001611554565b61159661158f8761150a565b96886114f6565b525f61157c565b5095509050929190926115c1826001600160a01b03165f52600b60205260405f2090565b815f526020526115d660405f20548093612a0e565b146115de5750565b9250565b91908110156114f15760051b81013590601e198136030182121561048c57019081359167ffffffffffffffff831161048c57602001823603811361048c579190565b61045690546101b8565b90611641602092828151948592016103ff565b0190565b818110611650575050565b5f8155600101611645565b90601f8211611668575050565b6102da9160035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c830193106116b1575b601f0160051c0190611645565b90915081906116a4565b9190601f81116116ca57505050565b6102da925f5260205f20906020601f840160051c830193106116b157601f0160051c0190611645565b919091825167ffffffffffffffff81116102215761171b8161171584546101b8565b846116bb565b602080601f831160011461175c5750819061174d9394955f92611751575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611739565b90601f19831695611770855f5260205f2090565b925f905b8882106117ab57505083600195969710611793575b505050811b019055565b01515f1960f88460031b161c191690555f8080611789565b80600185968294968601518155019501930190611774565b906001600160a01b036117e3602092959495604085526040850190610420565b9416910152565b604051906117f782610226565b5f8252565b6040519061180982610242565b600f82527f2261747472696275746573223a205b00000000000000000000000000000000006020830152565b6040519061184282610242565b600e82527f226f7574666974496473223a205b0000000000000000000000000000000000006020830152565b9060405191826060515f5b8181106118ad57509060206102da936118a182948401918383015f81528151948592016103ff565b0103808552018361027a565b6020919250806080015182828801015201908491611879565b60206102da9193929360405194816118e787935180928680870191016103ff565b82016118a1825180938680850191016103ff565b5f198101919082116106ba57565b906102da6021604051846119278296518092602080860191016103ff565b8101600b60fa1b602082015203600181018552018361027a565b906102da60226040518461195f8296518092602080860191016103ff565b810161174b60f21b602082015203600281018552018361027a565b6040906102da92949394825195869160209361199e815180928780880191016103ff565b83017f7b2274726169745f74797065223a202200000000000000000000000000000000858201526119d882518093876030850191016103ff565b016c111610113b30b63ab2911d101160991b6030820152611a028251809386603d850191016103ff565b0162089f4b60ea1b603d820152039081018552018361027a565b906102da604a60405184611a3a8296518092602080860191016103ff565b81017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022227d2c00000000000000000000000000000000000000000000604082015203602a81018552018361027a565b60316102da919392936040519481611ab88793518092602080870191016103ff565b82017f226261636b67726f756e644964223a20000000000000000000000000000000006020820152611af48251809360206030850191016103ff565b01600b60fa1b603082015203601181018552018361027a565b604a6102da919392936040519481611b2f8793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224261636b67726f756e64222c2022766160208201527f6c7565223a2022000000000000000000000000000000000000000000000000006040820152611b918251809360206047850191016103ff565b0162089f4b60ea1b604782015203602a81018552018361027a565b60376102da919392936040519481611bce8793518092602080870191016103ff565b82017f226368616e6765734c6f636b6564556e74696c223a20000000000000000000006020820152611c0a8251809360206036850191016103ff565b01600b60fa1b603682015203601781018552018361027a565b60526102da919392936040519481611c458793518092602080870191016103ff565b82017f7b2274726169745f74797065223a20224368616e676573206c6f636b6564207560208201527f6e74696c222c202276616c7565223a20000000000000000000000000000000006040820152611ca78251809360206050850191016103ff565b01611f4b60f21b605082015203603281018552018361027a565b906102da603660405180947f22776f726e427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b8101600b60fa1b603582015203601681018552018361027a565b604b6102da919392936040519481611d428793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022576f726e2062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b01611f4b60f21b604982015203602b81018552018361027a565b906102da603660405180947f2275736564427942616e6e79426f64794964223a2000000000000000000000006020830152611d068151809260206035860191016103ff565b604b6102da919392936040519481611e118793518092602080870191016103ff565b82017f7b2274726169745f74797065223a2022557365642062792042616e6e79222c206020820152680113b30b63ab2911d160bd1b6040820152611d908251809360206049850191016103ff565b81601f8201121561048c578051611e758161124f565b92611e83604051948561027a565b8184526020828401011161048c5761045691602080850191016103ff565b9060208282031261048c57815167ffffffffffffffff811161048c576104569201611e5f565b6040513d5f823e3d90fd5b9081602091031261048c575190565b9081606091031261048c57805191604060208301519201516104568161056c565b612030600392959460a46102da956040519885611f298b975180926020808b0191016103ff565b86017f7b2274726169745f74797065223a202250726f64756374206e616d65222c202260208201527f76616c7565223a202200000000000000000000000000000000000000000000006040820152611f8b8251809360206049850191016103ff565b017f227d2c207b2274726169745f74797065223a202243617465676f7279206e616d60498201527f65222c202276616c7565223a20220000000000000000000000000000000000006069820152611fec8251809360206077850191016103ff565b017f227d2c207b2274726169745f74797065223a2022546f74616c20737570706c7960778201526c111610113b30b63ab2911d101160991b6097820152019061162e565b62227d5d60e81b815203601c1981018552018361027a565b906102da603d60405180947f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000602083015261208c81518092602086860191016103ff565b810103601d81018552018361027a565b6120a6828261319a565b9163ffffffff6120ba845163ffffffff1690565b1615612a03576120c86117ea565b506120d16117fc565b610100928385019462ffffff94856120ec885162ffffff1690565b16156128345750612116612110612107835163ffffffff1690565b63ffffffff1690565b836139b6565b9182516127f8575b60018661212e895162ffffff1690565b16036127ca576121626121418683612a0e565b9461215c612156612151886132bc565b611daa565b966132bc565b90611def565b955b8351156126a857509060606001600160a01b0394939260046040518097819363043c358d60e11b8352165afa9384156126a3575f905f9561266e575b5081516121b29063ffffffff1661395f565b9688516121c19062ffffff1690565b62ffffff166121cf90613770565b97606084019889516121e49063ffffffff1690565b63ffffffff166121f3906132bc565b916121fd93611f02565b94612208838861414e565b9783516122189063ffffffff1690565b63ffffffff166122279061395f565b9980516122369062ffffff1690565b62ffffff1661224490613770565b9861224e906132bc565b91855161225e9063ffffffff1690565b63ffffffff1661226d906132bc565b915161227d9062ffffff166132bc565b905161228e9063ffffffff166132bc565b9160408701516122a19063ffffffff1690565b63ffffffff166122b0906132bc565b9360208801516122cc906cffffffffffffffffffffffffff1690565b6cffffffffffffffffffffffffff166122e4906132bc565b956122ee906132bc565b966122f8906132bc565b610120989098015161230c9060ff166132bc565b9860405180916020820161231f9161162e565b03601f1981018252612331908261027a565b61233a90614322565b9b6040519e8f9e8f602001612373906009907f7b226e616d65223a22000000000000000000000000000000000000000000000081520190565b61237c9161162e565b7f222c202270726f647563744e616d65223a20220000000000000000000000000081526013016123ab9161162e565b7f222c202263617465676f72794e616d65223a202200000000000000000000000081526014016123da9161162e565b7f222c2022746f6b656e4964223a200000000000000000000000000000000000008152600e016124099161162e565b7f2c2022757063223a20000000000000000000000000000000000000000000000081526009016124389161162e565b7f2c202263617465676f7279223a200000000000000000000000000000000000008152600e016124679161162e565b7f2c2022737570706c79223a2000000000000000000000000000000000000000008152600c016124969161162e565b7f2c202272656d61696e696e67223a2000000000000000000000000000000000008152600f016124c59161162e565b7f2c20227072696365223a200000000000000000000000000000000000000000008152600b016124f49161162e565b7f2c2022646563696d616c73223a200000000000000000000000000000000000008152600e016125239161162e565b7f2c202263757272656e6379223a200000000000000000000000000000000000008152600e016125529161162e565b7f2c2022646973636f756e74223a200000000000000000000000000000000000008152600e016125819161162e565b61016160f51b81526002016125959161162e565b61259e9161162e565b7f2c20226465736372697074696f6e223a2241207069656365206f662042616e6e81527f792052657461696c2e222c2265787465726e616c5f75726c223a22687474707360208201527f3a2f2f72657461696c2e62616e6e792e6574682e7375636b73222c22696d616760408201527f65223a22646174613a696d6167652f7376672b786d6c3b6261736536342c00006060820152607e0161263f9161162e565b61227d60f01b815260020103601f198101825261265c908261027a565b61266590614322565b61045690612048565b905061269391945060603d60601161269c575b61268b818361027a565b810190611ee1565b5093905f6121a0565b503d612681565b611ec7565b9350945050506126be601192945162ffffff1690565b1611156127b657604051636c0360eb60e01b81525f816004816001600160a01b0386165afa9283156126a357612747936020925f91612794575b50925b61271361270782613dbf565b6001600160a01b031690565b604051630c8df17160e41b81526001600160a01b039092166004830152602482019290925293849190829081906044820190565b03915afa9081156126a357610456925f92612763575b50613e26565b61278691925060203d60201161278d575b61277e818361027a565b810190611ed2565b905f61275d565b503d612774565b6127b091503d805f833e6127a8818361027a565b810190611ea1565b5f6126f8565b6020612747926127c461029c565b926126fb565b6127f26127d78683612d4f565b946127ec6121566127e7886132bc565b611cc1565b90611d20565b95612164565b916128189060018761280d8a5162ffffff1690565b160361281e57613cac565b9161211e565b61282f9061282a613b6d565b6118c6565b613cac565b91909293966128438883612aa2565b9661284e8984611518565b979099612859611835565b9a5f9b5b8a518d10156128b2576128839061287d6128778f8e6114f6565b516132bc565b906118c6565b9b61288e8b516118fb565b811061289e575b6001019b61285d565b9b6128aa600191611909565b9c9050612895565b6128c7919395979a989b929496999c50611941565b995f9b5b88518d101561293c576129346001918c8f6129296121078f8f61291161290561291e936128fe61292e98612919956114f6565b519061319a565b9687015162ffffff1690565b62ffffff1690565b613770565b935163ffffffff1690565b61395f565b9161197a565b9c019b6128cb565b939894995094999196509499508515155f146129f2579061298661292961210761297c61297561298c9661296f8c6132bc565b90611a96565b998761319a565b5163ffffffff1690565b90611b0d565b955b6129ba866129ad846001600160a01b03165f52600260205260405f2090565b905f5260205260405f2090565b544281116129c9575b50612164565b94966129e56121566129eb93996129df896132bc565b90611bac565b90611c23565b955f6129c3565b94506129fd90611a1c565b9561298e565b5050506104566117ea565b6001600160a01b0316805f52600e60205260405f20825f5260205260405f2054918215918215612a47575b5050612a425790565b505f90565b9091505f52600b60205260405f20825f5260205260405f205414155f80612a39565b916060816001600160a01b039260209497969760408752816040880152838701375f828287010152601f80199101168401019416910152565b612aac828261319a565b9163ffffffff612ac0845163ffffffff1690565b1615612a035760609062ffffff612ade61010086015162ffffff1690565b16612b825792612b22612b2892612af86104569686611518565b939080151580612b7a575b612b44575b50612b1d61210761287d925163ffffffff1690565b614449565b92614910565b8051612b35575b50613cac565b612b3e916118c6565b5f612b2f565b61287d919250612107612b71612b6c612b6661210761297c612b1d968d61319a565b8a6139b6565b61186e565b93925050612b08565b506001612b03565b5050612b98612107612b9e935163ffffffff1690565b906139b6565b8051612bad57506104566117ea565b61045690613cac565b9092612bc2848361319a565b9363ffffffff612bd6865163ffffffff1690565b1615612cab5760609062ffffff612bf461010088015162ffffff1690565b16612c92579061045695612c0b612c309386611518565b948115159081612c8a575b50612c625750612b1d61210761287d925163ffffffff1690565b92612c3d575b5050613cac565b612c4691614910565b8051612c53575b80612c36565b612c5c916118c6565b5f612c4d565b61287d919250612107612b71612b6c612c8461210761297c612b1d968c61319a565b896139b6565b90505f612c16565b5050509050612b98612107612b9e935163ffffffff1690565b50505050506104566117ea565b91612cc161440a565b5f925b8051841015612d4957612cd784826114f6565b5193612ce381856114f6565b51855f5260049560208781526040805f2054612d3a57907fb10eb6fc7557a7109693cb8f3fac48d44328de56c0368ee4cac539b424d2cad991600196979899845f52825284815f205551338152a301929190612cc4565b51632165e0ab60e01b81528890fd5b50915050565b6001600160a01b0381165f52600f60205260405f20825f5260205260405f2054908115612dd757612d91906001600160a01b03165f52600a60205260405f2090565b815f52602052612da360405f20611450565b915f5b8351811015612dcf5781612dba82866114f6565b5114612dc857600101612da6565b5050905090565b505050505f90565b5050505f90565b91612de761440a565b5f925b8051841015612d4957612dfd84826114f6565b5193612e0981856114f6565b5194805f52602095600c87526040805f20825167ffffffffffffffff811161022157612e398161171584546101b8565b89601f8211600114612eb75750917f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e969391612e9184612ea09560019a9b9c9d5f91612eac57508160011b915f199060031b1c19161790565b90555b519182913390836117c3565b0390a201929190612dea565b90508501515f610d65565b99601f198216612eca845f5260205f2090565b9b5f905b828210612f3357505091600198999a9b7f9dedd219289ed514faff576c477c66bd097aef59a236e3b8ebcf0d0070cb4e9696949282612ea0979510612f1b575b5050881b88019055612e94565b8501515f1960f88460031b161c191690555f80612f0e565b80600181939f868b015181550194019d01909c929c612ece565b51906102da8261056c565b9081602091031261048c57516104568161056c565b6040516331a9108f60e11b815260048101929092526001600160a01b03906020908390602490829085165afa9182156126a3575f92612fcd575b5080612fb16158be565b16911603612fbb57565b6040516341eb334360e11b8152600490fd5b612ff091925060203d602011612ff7575b612fe8818361027a565b810190612f58565b905f612fa7565b503d612fde565b519063ffffffff8216820361048c57565b51906cffffffffffffffffffffffffff8216820361048c57565b519061ffff8216820361048c57565b519062ffffff8216820361048c57565b519060ff8216820361048c57565b51906102da82610ef6565b60208183031261048c57805167ffffffffffffffff9182821161048c57016101e08184031261048c57613092610880565b9261309c82612ffe565b84526130aa6020830161300f565b60208501526130bb60408301612ffe565b60408501526130cc60608301612ffe565b60608501526130dd6080830161300f565b60808501526130ee60a08301613029565b60a08501526130ff60c08301612f4d565b60c085015260e082015160e085015261010061311c818401613038565b9085015261012061312e818401613048565b90850152610140613140818401613056565b90850152610160613152818401613056565b90850152610180613164818401613056565b908501526101a0613176818401613056565b908501526101c0928383015190811161048c576131939201611e5f565b9082015290565b61324d915f9160606101c06040516131b181610204565b85815285602082015285604082015285838201528560808201528560a08201528560c08201528560e08201528561010082015285610120820152856101408201528561016082015285610180820152856101a0820152015261321561270782613dbf565b9060405180958194829363c44a8e6d60e01b8452600484016040905f9294936001600160a01b03606083019616825260208201520152565b03915afa9081156126a3575f91613262575090565b61045691503d805f833e613276818361027a565b810190613061565b60405161328a81610226565b5f8152905f368137565b9061329e8261124f565b6132ab604051918261027a565b82815280926114c6601f199161124f565b805f917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156133fd575b506d04ee2d6d415b85acef8100000000808310156133ee575b50662386f26fc10000808310156133df575b506305f5e100808310156133d0575b50612710808310156133c1575b5060648210156133b1575b600a809210156133a7575b60019081602161335360018701613294565b95860101905b613365575b5050505090565b5f19019083907f30313233343536373839616263646566000000000000000000000000000000008282061a8353049182156133a257919082613359565b61335e565b9160010191613341565b9190606460029104910191613336565b6004919392049101915f61332b565b6008919392049101915f61331e565b6010919392049101915f61330f565b6020919392049101915f6132fd565b60409350810491505f6132e4565b6040519061341882610242565b600c82527f5370656369616c20426f647900000000000000000000000000000000000000006020830152565b6040519061345182610242565b600c82527f5370656369616c204865616400000000000000000000000000000000000000006020830152565b6040519061348a82610242565b600c82527f5370656369616c204c65677300000000000000000000000000000000000000006020830152565b604051906134c382610242565b600c82527f5370656369616c205375697400000000000000000000000000000000000000006020830152565b604051906134fc82610242565b6004825263119a5cdd60e21b6020830152565b6040519061351c82610242565b600b82527f5375697420626f74746f6d0000000000000000000000000000000000000000006020830152565b6040519061355582610242565b600882527f5375697420746f700000000000000000000000000000000000000000000000006020830152565b6040519061358e82610242565b600482526314dd5a5d60e21b6020830152565b604051906135ae82610242565b60048252631219585960e21b6020830152565b604051906135ce82610242565b600882527f4865616420746f700000000000000000000000000000000000000000000000006020830152565b6040519061360782610242565b600582527f4d6f7574680000000000000000000000000000000000000000000000000000006020830152565b6040519061364082610242565b600782527f476c6173736573000000000000000000000000000000000000000000000000006020830152565b6040519061367982610242565b600882527f4e65636b6c6163650000000000000000000000000000000000000000000000006020830152565b604051906136b282610242565b60048252634c65677360e01b6020830152565b604051906136d282610242565b600882527f4261636b736964650000000000000000000000000000000000000000000000006020830152565b6040519061370b82610242565b600a82527f4261636b67726f756e64000000000000000000000000000000000000000000006020830152565b6040519061374482610242565b600a82527f42616e6e7920626f6479000000000000000000000000000000000000000000006020830152565b8061377e5750610456613737565b6001810361378f57506104566136fe565b600281036137a057506104566136c5565b600881036137b157506104566136a5565b600381036137c2575061045661366c565b600681036137d35750610456613633565b600781036137e457506104566135fa565b600c81036137f557506104566135c1565b6004810361380657506104566135a1565b600981036138175750610456613581565b600b81036138285750610456613548565b600a8103613839575061045661350f565b600d810361384a57506104566134ef565b600e810361385b57506104566134b6565b600f810361386c575061045661347d565b6010810361387d5750610456613444565b60111461388c576104566117ea565b61045661340b565b604051906138a182610242565b600882527f4f726967696e616c0000000000000000000000000000000000000000000000006020830152565b604051906138da82610242565b600682527f4f72616e676500000000000000000000000000000000000000000000000000006020830152565b6040519061391382610242565b600482526350696e6b60e01b6020830152565b6040519061393382610242565b600582527f416c69656e0000000000000000000000000000000000000000000000000000006020830152565b600181036139705750610456613926565b600281036139815750610456613906565b6003810361399257506104566138cd565b600481036139a35750610456613894565b5f52600c60205261045660405f2061035f565b90805f52602091600d83526139cd60405f2061035f565b8051613ada5750613a1f91816001600160a01b036139eb8694613dbf565b1690604051809581948293632f54648f60e21b845260048401602090939291936001600160a01b0360408201951681520152565b03915afa80156126a357613a8792613a4c604992610456945f91613abd575b50613a4761029c565b613e26565b60405194827f3c696d61676520687265663d220000000000000000000000000000000000000087948501528251928391602d860191016103ff565b81017f222077696474683d2234303022206865696768743d22343030222f3e00000000602d82015203602981018452018261027a565b613ad49150833d851161278d5761277e818361027a565b5f613a3e565b9250505090565b6009545f9291613af0826101b8565b91600190818116908115613b5a5750600114613b0b57505050565b909192935060095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af905f915b848310613b47575050500190565b8181602092548587015201920191613b39565b60ff191683525050811515909102019150565b603b610456613bfc610a056008613c836040516003613c7381613c6381613c536044602088017f7b66696c6c3a6e6f6e653b7d00000000000000000000000000000000000000008152600c8952613bc389610242565b6040519e8f9d8e7f3c7374796c653e2e6f7b66696c6c3a233830383038303b7d2e6231000000000060208201528b5192839101846103ff565b8d016217311960e91b603b820152895190613c1b82603e8301856103ff565b01622e623360e81b603e820152613c398a51809360418401906103ff565b01613c4c60418201620b988d60ea1b9052565b018761162e565b622e613160e81b8152018561162e565b6217309960e91b8152018361162e565b622e613360e81b8152019061162e565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000815201613ae1565b906102da60bb60405180947f3c7376672077696474683d2234303022206865696768743d223430302220766960208301527f6577426f783d223020302034303020343030222066696c6c3d2277686974652260408301527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608301527f7667223e3c7374796c653e2e6f7b66696c6c3a233035303530353b7d2e777b6660808301527f696c6c3a236639663966393b7d3c2f7374796c653e000000000000000000000060a0830152613d8981518092602060b5860191016103ff565b81017f3c2f7376673e000000000000000000000000000000000000000000000000000060b582015203609b81018552018361027a565b60206001600160a01b039160046040518094819363507f146560e01b8352165afa9081156126a3575f91613df1575090565b90506020813d602011613e1e575b81613e0c6020938361027a565b8101031261048c57516104568161056c565b3d9150613dff565b9061045690613e54604051602092609160f51b84830152602282015260228152613e4f8161025e565b61528d565b926040519381613e6d86935180928680870191016103ff565b8201613e81825180938680850191016103ff565b0103808452018261027a565b906102da602160405184613eab8296518092602080860191016103ff565b8101600160fd1b602082015203600181018552018361027a565b60405190613ed282610242565b600a82527f2072656d61696e696e67000000000000000000000000000000000000000000006020830152565b906102da929493602192613f67604051978894602093613f268151809287808b0191016103ff565b8601613f3a825180938780850191016103ff565b01602f60f81b84820152613f5682518093868a850191016103ff565b0191835193849187850191016103ff565b0103600181018552018361027a565b906102da929493602d92613ff5604051978894602093613f9e8151809287808b0191016103ff565b86017f2028534f4c44204f55542920000000000000000000000000000000000000000085820152613fd88251809387602c850191016103ff565b01602f60f81b602c820152613f5682518093868a850191016103ff565b0103600d81018552018361027a565b6102da91613f67949360219260405196879360209261402b8151809286808a0191016103ff565b850161403f825180938680850191016103ff565b0191602f60f81b81840152835193849187850191016103ff565b906102da6022604051846140778296518092602080860191016103ff565b81016101d160f51b602082015203600281018552018361027a565b60216102da9193929360405194816140b48793518092602080870191016103ff565b82016140c982518093602080850191016103ff565b01600160fd1b602082015203600181018552018361027a565b60256102da9193929360405194816141048793518092602080870191016103ff565b82017f5550432023000000000000000000000000000000000000000000000000000000602082015261413f82518093602087850191016103ff565b0103600581018552018361027a565b906141bc61045692633b9aca00614177614172612929612107875163ffffffff1690565b613e8d565b9106614181613ec5565b81156142135750906141956141b7926132bc565b6141b16141ac612107606088015163ffffffff1690565b6132bc565b91614004565b614059565b906141d461291961291161010084015162ffffff1690565b80516141f6575b506141ac6121076141f0925163ffffffff1690565b906140e2565b61210761420a6141ac926141f09495614092565b939250506141db565b9050604084019163ffffffff61422d845163ffffffff1690565b1680614268575061424b6141ac6121076141b7955163ffffffff1690565b6142626141ac612107606089015163ffffffff1690565b91613f76565b6141b79350614276906132bc565b61428d6141ac612107606089015163ffffffff1690565b91613efe565b604051906142a08261025e565b604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036106ba57565b80511561440157614331614293565b61434d6143486143418451611419565b6003900490565b6142f2565b9161435f61435a84611427565b613294565b92835280815182019060208501935b8282106143af5750505060039051068060011461439e57600214614390575090565b603d60f81b5f199091015290565b50613d3d60f01b6001199091015290565b9091936004906003809401938451600190603f9082828260121c16880101518553828282600c1c16880101518386015382828260061c168801015160028601531685010151908201530193919061436e565b506104566117ea565b6001600160a01b03805f54168161441f6158be565b16036144285750565b6024906144336158be565b60405163118cdaa760e01b815291166004820152fd5b61445290615792565b93604096959693919351968796602088017f3c7374796c653e2e62317b66696c6c3a2300000000000000000000000000000090528051908160318a01916020019161449c926103ff565b8701603181017f3b7d2e62327b66696c6c3a230000000000000000000000000000000000000000905281519182603d830191602001916144db926103ff565b01603d81017f3b7d2e62337b66696c6c3a230000000000000000000000000000000000000000905281519182604983019160200191614519926103ff565b0160498101614547907f3b7d2e62347b66696c6c3a2300000000000000000000000000000000000000009052565b6055016145539161162e565b7f3b7d2e61317b66696c6c3a2300000000000000000000000000000000000000008152600c016145829161162e565b7f3b7d2e61327b66696c6c3a2300000000000000000000000000000000000000008152600c016145b19161162e565b7f3b7d2e61337b66696c6c3a2300000000000000000000000000000000000000008152600c016145e09161162e565b7f3b7d3c2f7374796c653e000000000000000000000000000000000000000000008152600a0161460f90613ae1565b03601f1981018252610456908261027a565b90604051918260209161463c815180928580860191016103ff565b6007545f91830161464c826101b8565b916001908181169081156146d55750600114614679575b5050506102da925003601f19810184528361027a565b94925060075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688945f905b8382106146bd5750506102da945001015f8080614663565b865482840186015295860195889550908401906146a5565b9150506102da95935060ff9291921916838301528015150201015f8080614663565b906040519182602091614712815180928580860191016103ff565b6008545f918301614722826101b8565b916001908181169081156146d5575060011461474e575050506102da925003601f19810184528361027a565b94925060085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3945f905b8382106147925750506102da945001015f8080614663565b8654828401860152958601958895509084019061477a565b9060405191826020916147c5815180928580860191016103ff565b6005545f9183016147d5826101b8565b916001908181169081156146d55750600114614801575050506102da925003601f19810184528361027a565b94925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0945f905b8382106148455750506102da945001015f8080614663565b8654828401860152958601958895509084019061482d565b906040519182602091614878815180928580860191016103ff565b6006545f918301614888826101b8565b916001908181169081156146d557506001146148b4575050506102da925003601f19810184528361027a565b94925060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f945f905b8382106148f85750506102da945001015f8080614663565b865482840186015295860195889550908401906148e0565b91909160608351915f925f935f945f9085935f5b61492d82611435565b811015614b0a5781811015614afe57614946818c6114f6565b5195614952878961319a565b9561497861210761496d6129116101008b015162ffffff1690565b985163ffffffff1690565b915b600388811492908315614acf57505050600197614997838b6139b6565b9b5b60048914614ac6575b6005898103614a725750506001965b6007898103614a30575050600b6001985b1180614a26575b614a0c575b15159081614a03575b506149eb575b506001019794939297614924565b6001919861287d6149fc928a6139b6565b97906149dd565b9050155f6149d7565b9a614a17919a6118c6565b98614a206117ea565b9a6149ce565b508b5115156149c9565b8991991180614a6a575b80614a62575b614a4d575b600b906149c2565b975099614a599061485d565b99600197614a45565b508615614a40565b508815614a3a565b899891981180614abe575b80614ab6575b156149b157965060019a8b84145f14614aa757614a9f906147aa565b9a5b966149b1565b614ab0906146f7565b9a614aa1565b508615614a83565b508715614a7d565b600196506149a2565b899d919a929d1180614af6575b1561499957985099614aed90614621565b99600198614999565b508915614adc565b5f95601295879161497a565b50505050505050925050565b9190614b37816129ad856001600160a01b03165f52600b60205260405f2090565b54614b428185612a0e565b818414801590614d44575b614b59575b5050505050565b8214614d2b575b508115614d04576040516331a9108f60e11b808252600482018490526001600160a01b0392918584169060208082602481865afa80156126a35786925f91614ce7575b5082614bad6158be565b911696168614159384614c6f575b50505050614c5d5763ffffffff614bd561297c858761319a565b1615614c4b5782614bfb826129ad876001600160a01b03165f52600b60205260405f2090565b55614c1b836129ad866001600160a01b03165f52600e60205260405f2090565b553003614c30575b50505b5f80808080614b52565b614c44913090614c3e6158be565b90615917565b5f80614c23565b60405163c3095f8760e01b8152600490fd5b60405163d03702f960e01b8152600490fd5b819293945090614ca691614c816158be565b95614c8c8a8c612a0e565b916040518095819482938352600483019190602083019252565b03915afa9081156126a35783925f92614cca575b505016911614155f808080614bbb565b614ce09250803d10612ff757612fe8818361027a565b5f80614cba565b614cfe9150823d8411612ff757612fe8818361027a565b5f614ba3565b614d2591506129ad5f936001600160a01b03165f52600b60205260405f2090565b55614c26565b614d3e90614d376158be565b3086615917565b5f614b60565b5082811415614b4d565b81519167ffffffffffffffff831161022157680100000000000000008311610221578154838355808410614dad575b506020809101915f5260205f20905f5b848110614d9b575050505050565b83518382015592810192600101614d8d565b614dc390835f528460205f209182019101611645565b5f614d7d565b909291925f935f915f92614dfa614df5836129ad886001600160a01b03165f52600a60205260405f2090565b611450565b955f945f945f908951615227575b90969299935f999899969296975b825189101561519c579a8a9b614e2f8a859d9c9d6114f6565b516040516331a9108f60e11b8152600481018290529d9097906001600160a01b03168e6024815a93602094fa9d8e156126a3575f9e61517b575b508d6001600160a01b0380614e7c6158be565b921691161415806150f0575b6150de57614eaa612911610100614ea08f8c9061319a565b015162ffffff1690565b9960028b1080156150d4575b6150c2578b151590816150b7575b506150a55760048a0361500857506001949095919293955b8981111580614fff575b15614f7a57508a949392918188614f0a93141580614f68575b614f4f575b5061150a565b94858c805182105f14614f4257610100614ea0614f2d614f3594612911946114f6565b51809961319a565b905b959192939490614edc565b505093505f935f90614f37565b614f6290614f5b6158be565b3089615917565b5f614f04565b5089614f748289612d4f565b14614eff565b93966001929a959d999199969396898d81614f958583612d4f565b03614fb2575b50505050930197939a949091999899969296614e16565b836129ad614fd1926001600160a01b03165f52600f60205260405f2090565b556001600160a01b0330911603614feb575b80898d614f9b565b614ff990308d614c3e6158be565b5f614fe3565b50801515614ee6565b939260098a036150215750600192959192939490614edc565b9260068a14801561509b575b8015615091575b8061508a575b1561505157604051639b8fdcd160e01b8152600490fd5b600b8a148015615080575b80615079575b15614f37576040516306f7588760e01b8152600490fd5b5083615062565b50600a8a1461505c565b508461503a565b50600c8a14615034565b5060078a1461502d565b604051633869abd960e21b8152600490fd5b90508a11155f614ec4565b60405163b0ee46ab60e01b8152600490fd5b5060118b11614eb6565b60405163032cac0360e01b8152600490fd5b508b6001600160a01b0360206151336151076158be565b936151128d82612d4f565b6040519485809481936331a9108f60e11b8352600483019190602083019252565b0392165afa9081156126a3576001600160a01b039182915f9161515c575b501691161415614e88565b615175915060203d602011612ff757612fe8818361027a565b5f615151565b615195919e5060203d602011612ff757612fe8818361027a565b9c5f614e69565b5050979550915091949250805b6151d8575050506102da92916129ad6151d3926001600160a01b03165f52600a60205260405f2090565b614d4e565b9081856151e86151f39487612d4f565b14615214575061150a565b815181101561520d5761520681836114f6565b51806151a9565b5f806151a9565b614f62906152206158be565b3087615917565b955050615233886114e4565b5194615248612911610100614ea0898c61319a565b90614e08565b604051906105e0820182811067ffffffffffffffff82111761022157604052602e82526105c0366020840137565b9081518110156114f1570160200190565b908151156153bf5761529d61524e565b915f6152a8846114e4565b5260019080515f915b8183106152d6575050506152cc6152d191610456939461597b565b6159bd565b615a02565b90919361531e6153186153126152ec888661527c565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b905f915b60ff9088828816851015615382576001929161535761535161531861534a8961535d966114f6565b5160ff1690565b60081b90565b90611443565b615379603a9283830616615371878d6114f6565b9060ff169052565b04920191615322565b509196925050805b615399575060010191906152b1565b9360ff6001603a926153b583858a06166153718584168d6114f6565b011694048061538a565b905061045661327e565b604051906153d682610242565b600682527f66666539303000000000000000000000000000000000000000000000000000006020830152565b6040519061540f82610242565b600682527f66666337303000000000000000000000000000000000000000000000000000006020830152565b6040519061544882610242565b600682527f66336136303300000000000000000000000000000000000000000000000000006020830152565b6040519061548182610242565b600682527f39363561316100000000000000000000000000000000000000000000000000006020830152565b604051906154ba82610242565b600682527f66663763303200000000000000000000000000000000000000000000000000006020830152565b604051906154f382610242565b600682527f66643336303000000000000000000000000000000000000000000000000000006020830152565b6040519061552c82610242565b600682527f63333265306400000000000000000000000000000000000000000000000000006020830152565b6040519061556582610242565b600682527f66666438633500000000000000000000000000000000000000000000000000006020830152565b6040519061559e82610242565b600682527f66663936613900000000000000000000000000000000000000000000000000006020830152565b604051906155d782610242565b600682527f66653538386200000000000000000000000000000000000000000000000000006020830152565b6040519061561082610242565b600682527f63393266343500000000000000000000000000000000000000000000000000006020830152565b6040519061564982610242565b600682527f36376437353700000000000000000000000000000000000000000000000000006020830152565b6040519061568282610242565b600682527f33306132323000000000000000000000000000000000000000000000000000006020830152565b604051906156bb82610242565b600682527f32313761313500000000000000000000000000000000000000000000000000006020830152565b604051906156f482610242565b600682527f30393439306600000000000000000000000000000000000000000000000000006020830152565b6040519061572d82610242565b600682527f65343833656600000000000000000000000000000000000000000000000000006020830152565b6040519061576682610242565b600682527f64633266656600000000000000000000000000000000000000000000000000006020830152565b600181036157d957506157a361563c565b906157ac615675565b906157b56156ae565b906157be6156e7565b906157c7615720565b906157d0615759565b90610456615759565b6002810361582057506157ea615558565b906157f3615591565b906157fc6155ca565b90615805615603565b9061580e615558565b90615817615591565b906104566155ca565b60038103615867575061583161543b565b9061583a6154ad565b906158436154e6565b9061584c61551f565b9061585561543b565b9061585e6154ad565b906104566154e6565b60041461588057604051639a7b332360e01b8152600490fd5b6158886153c9565b90615891615402565b9061589a61543b565b906158a3615474565b906158ac6153c9565b906158b5615402565b9061045661543b565b6001600160a01b037f000000000000000000000000c29d6995ab3b0df4650ad643adeac55e7acbb5661633148061590c575b156159085760131936013681116106ba573560601c90565b3390565b5060143610156158f0565b909291926001600160a01b0380921690813b1561048c575f6064928195856040519889978896632142170760e11b885216600487015216602485015260448401525af180156126a3576159675750565b67ffffffffffffffff811161022157604052565b9060ff8091169061598b8261149e565b925f5b83811061599c575050505090565b80836159aa600193856114f6565b51166159b682886114f6565b520161598e565b9081516159c98161149e565b905f5b8181106159da575090925050565b60019060ff6159ef5f198389510301886114f6565b51166159fb82866114f6565b52016159cc565b8051615a0d8161124f565b916040615a1d604051948561027a565b828452615a298361124f565b60209190601f190136868401375f5b848110615a4757505050505090565b6001908251615a558161025e565b603a81527f31323334353637383941424344454647484a4b4c4d4e50515253545556575859858201527f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000848201527fff0000000000000000000000000000000000000000000000000000000000000090615add9060ff615ad5858a6114f6565b51169061527c565b51165f1a615aeb828961527c565b5301615a3856fea2646970667358221220dbe973aea5d1f03deef7c0b303185740ea702d57d66279c38dd6598a01b9532864736f6c63430008170033",
1805
+ "metadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"bannyBody\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultNecklace\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultMouth\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultStandardEyes\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultAlienEyes\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedForwarder\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_CantAccelerateTheLock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_ContentsAlreadyStored\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_ContentsMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HashAlreadyStored\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HashNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_HeadAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_OutfitChangesLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_SuitAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedBackground\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedBannyBody\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedOutfit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnauthorizedTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnorderedCategories\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedBackground\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedCategory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Banny721TokenUriResolver_UnrecognizedProduct\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DecorateBanny\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetProductName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"baseUri\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgBaseUri\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"svgContent\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgContent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"svgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SetSvgHash\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BANNY_BODY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ALIEN_EYES\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_MOUTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_NECKLACE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_STANDARD_EYES\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"}],\"name\":\"assetIdsOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"outfitIds\",\"type\":\"uint256[]\"}],\"name\":\"decorateBannyWith\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"isTrustedForwarder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bannyBodyId\",\"type\":\"uint256\"}],\"name\":\"lockOutfitChangesFor\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"namesOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"}],\"name\":\"outfitLockedUntil\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"setProductNames\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"baseUri\",\"type\":\"string\"}],\"name\":\"setSvgBaseUri\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"svgContents\",\"type\":\"string[]\"}],\"name\":\"setSvgContentsOf\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"upcs\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"svgHashs\",\"type\":\"bytes32[]\"}],\"name\":\"setSvgHashsOf\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"svgBaseUri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upc\",\"type\":\"uint256\"}],\"name\":\"svgHashOf\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"shouldDressBannyBody\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldIncludeBackgroundOnBannyBody\",\"type\":\"bool\"}],\"name\":\"svgOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenUriOf\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"backgroundId\",\"type\":\"uint256\"}],\"name\":\"userOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hook\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"outfitId\",\"type\":\"uint256\"}],\"name\":\"wearerOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"assetIdsOf(address,uint256)\":{\"custom:param\":\"hook The hook address of the collection.\",\"params\":{\"bannyBodyId\":\"The ID of the banny body shown with the associated assets.\"},\"returns\":{\"backgroundId\":\"The background attached to the banny body.\",\"outfitIds\":\"The outfits attached to the banny body.\"}},\"constructor\":{\"params\":{\"bannyBody\":\"The SVG of the banny body.\",\"defaultAlienEyes\":\"The SVG of the default alien eyes.\",\"defaultMouth\":\"The SVG of the default mouth.\",\"defaultNecklace\":\"The SVG of the default necklace.\",\"defaultStandardEyes\":\"The SVG of the default standard eyes.\",\"owner\":\"The owner allowed to add SVG files that correspond to product IDs.\",\"trustedForwarder\":\"The trusted forwarder for the ERC2771Context.\"}},\"decorateBannyWith(address,uint256,uint256,uint256[])\":{\"details\":\"The caller must own the banny body being dressed and all outfits being worn.\",\"params\":{\"backgroundId\":\"The ID of the background that'll be associated with the specified banny.\",\"bannyBodyId\":\"The ID of the banny body being dressed.\",\"hook\":\"The hook storing the assets.\",\"outfitIds\":\"The IDs of the outfits that'll be associated with the specified banny. Only one outfit per outfit category allowed at a time and they must be passed in order.\"}},\"isTrustedForwarder(address)\":{\"details\":\"Indicates whether any particular address is the trusted forwarder.\"},\"lockOutfitChangesFor(address,uint256)\":{\"params\":{\"bannyBodyId\":\"The ID of the banny body to lock.\",\"hook\":\"The hook address of the collection.\"}},\"namesOf(address,uint256)\":{\"params\":{\"hook\":\"The hook storing the assets.\",\"tokenId\":\"The ID of the token to show.\"},\"returns\":{\"_0\":\"fullName The full name of the token.\",\"_1\":\"categoryName The name of the token's category.\",\"_2\":\"productName The name of the token's product.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Make sure tokens can be receieved if the transaction was initiated by this contract.\",\"params\":{\"data\":\"The data of the transfer.\",\"from\":\"The address that initiated the transfer.\",\"operator\":\"The address that initiated the transaction.\",\"tokenId\":\"The ID of the token being transferred.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setProductNames(uint256[],string[])\":{\"params\":{\"names\":\"The names of the products.\",\"upcs\":\"The universal product codes of the products having their name stored.\"}},\"setSvgBaseUri(string)\":{\"params\":{\"baseUri\":\"The base URI of the SVG files.\"}},\"setSvgContentsOf(uint256[],string[])\":{\"params\":{\"svgContents\":\"The svg contents being stored, not including the parent <svg></svg> element.\",\"upcs\":\"The universal product codes of the products having SVGs stored.\"}},\"setSvgHashsOf(uint256[],bytes32[])\":{\"details\":\"This allows anyone to lazily upload the correct svg file.\",\"params\":{\"svgHashs\":\"The svg hashes being stored, not including the parent <svg></svg> element.\",\"upcs\":\"The universal product codes of the products having SVG hashes stored.\"}},\"svgOf(address,uint256,bool,bool)\":{\"params\":{\"hook\":\"The hook storing the assets.\",\"shouldDressBannyBody\":\"Whether the banny body should be dressed.\",\"shouldIncludeBackgroundOnBannyBody\":\"Whether the background should be included on the banny body.\",\"tokenId\":\"The ID of the token to show. If the ID belongs to a banny body, it will be shown with its current outfits in its current background if specified.\"},\"returns\":{\"_0\":\"svg The SVG.\"}},\"tokenUriOf(address,uint256)\":{\"params\":{\"tokenId\":\"The ID of the token to show. If the ID belongs to a banny body, it will be shown with its current outfits in its current background.\"},\"returns\":{\"_0\":\"tokenUri The URI representing the SVG.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"trustedForwarder()\":{\"details\":\"Returns the address of the trusted forwarder.\"},\"userOf(address,uint256)\":{\"params\":{\"backgroundId\":\"The ID of the background being used.\",\"hook\":\"The hook address of the collection.\"},\"returns\":{\"_0\":\"The ID of the banny body using the background.\"}},\"wearerOf(address,uint256)\":{\"params\":{\"hook\":\"The hook address of the collection.\",\"outfitId\":\"The ID of the outfit being worn.\"},\"returns\":{\"_0\":\"The ID of the banny body wearing the outfit.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"assetIdsOf(address,uint256)\":{\"notice\":\"The assets currently attached to each banny body.\"},\"decorateBannyWith(address,uint256,uint256,uint256[])\":{\"notice\":\"Dress your banny body with outfits.\"},\"lockOutfitChangesFor(address,uint256)\":{\"notice\":\"Locks a banny body ID so that it can't change its outfit for a period of time.\"},\"namesOf(address,uint256)\":{\"notice\":\"Returns the name of the token.\"},\"outfitLockedUntil(address,uint256)\":{\"notice\":\"The amount of time each banny body is currently locked for.\"},\"setProductNames(uint256[],string[])\":{\"notice\":\"Allows the owner to set the product's name.\"},\"setSvgBaseUri(string)\":{\"notice\":\"Allows the owner of this contract to specify the base of the domain hosting the SVG files.\"},\"setSvgContentsOf(uint256[],string[])\":{\"notice\":\"The owner of this contract can store SVG files for product IDs.\"},\"setSvgHashsOf(uint256[],bytes32[])\":{\"notice\":\"Allows the owner of this contract to upload the hash of an svg file for a universal product code.\"},\"svgBaseUri()\":{\"notice\":\"The base of the domain hosting the SVG files that can be lazily uploaded to the contract.\"},\"svgHashOf(uint256)\":{\"notice\":\"The banny body and outfit SVG hash files.\"},\"svgOf(address,uint256,bool,bool)\":{\"notice\":\"Returns the SVG showing either a banny body with/without outfits and a background, or the stand alone outfit or background.\"},\"tokenUriOf(address,uint256)\":{\"notice\":\"Returns the SVG showing a dressed banny body in a background.\"},\"userOf(address,uint256)\":{\"notice\":\"Checks to see which banny body is currently using a particular background.\"},\"wearerOf(address,uint256)\":{\"notice\":\"Checks to see which banny body is currently wearing a particular outfit.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Banny721TokenUriResolver.sol\":\"Banny721TokenUriResolver\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":800},\"remappings\":[\"@arbitrum/=node_modules/@arbitrum/\",\"@bananapus/=node_modules/@bananapus/\",\"@chainlink/=node_modules/@chainlink/\",\"@croptop/=node_modules/@croptop/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@exhausted-pigeon/=node_modules/@exhausted-pigeon/\",\"@offchainlabs/=node_modules/@offchainlabs/\",\"@openzeppelin/=node_modules/@openzeppelin/\",\"@prb/=node_modules/@prb/\",\"@rev-net/=node_modules/@rev-net/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@sphinx-labs/contracts/=node_modules/@sphinx-labs/contracts/contracts/foundry/\",\"@uniswap/=node_modules/@uniswap/\",\"@zksync/=node_modules/@zksync/\",\"base64-sol/=node_modules/base64-sol/\",\"base64/=lib/base64/\",\"ds-test/=lib/forge-std/lib/ds-test/src/\",\"forge-std/=lib/forge-std/src/\",\"hardhat/=node_modules/hardhat/\",\"solady/=node_modules/solady/\",\"solmate/=node_modules/solmate/\",\"sphinx/=lib/sphinx/packages/contracts/contracts/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"lib/base64/base64.sol\":{\"keccak256\":\"0xa73959e6ef0b693e4423a562e612370160b934a75e618361ddd8c9c4b8ddbaaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17c12e16d8d66f3af15d8787920bd41ca6c1e7517a212a6b9cebd4b6d38f36fe\",\"dweb:/ipfs/QmcXMnZUXEz6LRKsm3CSvqdPboAzmezavi8bTg2dRxM2yE\"]},\"node_modules/@bananapus/721-hook-v5/src/abstract/ERC721.sol\":{\"keccak256\":\"0xee3758d50043b58a173dada85fb33a0a2b4a9f8e57e11a213d0f1d021cd2ffc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f9b8cbac216d14a83dcc54fee0e660e8131afee94a21ec0c0af5dd7853692bb1\",\"dweb:/ipfs/QmRU67EeBHtqE7osaBd286poaTDjS7cAVMwt6UXdBBDRGP\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721Hook.sol\":{\"keccak256\":\"0x1e7b684c86c0f44b0b680c7aba9e511c89892bc0638424722920368911a087f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96995e70a8f15d5600b509ad689c8f2ea6f8116cc7cce9c529b7a41c12c854dc\",\"dweb:/ipfs/QmaAARj3BDSQNsPwkFxauDpWBNgb4kYdzo19tUNdBbc6cX\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TiersHook.sol\":{\"keccak256\":\"0x107f91c5a0674717684d75e0c71106dd1d2937c0089366c7bb555be7fffdd6b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce29d75e454845d0636e671c60c7a691e4a77d1c88fe17dbc435945890465b1\",\"dweb:/ipfs/QmewJn8HeiqKggWA8scLUbwv1TMiit8Va8A5A3K7N9Euss\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TiersHookStore.sol\":{\"keccak256\":\"0x01d419bf6b9dce2ab162f8aac82f0e4a6d948f53819a42ed023e8f23e358c9c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e0b14b2ae2032bd256614522078cf0f831c35d1f64d1ea2050227117d08c060\",\"dweb:/ipfs/QmP1xbw5597GDvNVgT5Te6w8LBqeXHq4x6HeXYmqLqw2RC\"]},\"node_modules/@bananapus/721-hook-v5/src/interfaces/IJB721TokenUriResolver.sol\":{\"keccak256\":\"0xfa599167098f4459320ec4141a98a17b2dfffbce422baa27d8b4e4530f61ece1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b758b161f4c7b520b2c34b4d91e585e961b8f4ca278eebb91d791f7f2f45140\",\"dweb:/ipfs/QmcD9DF7NJ9QykQpT4KPzm4bs3fkjzukdAUWwdU6Atfw85\"]},\"node_modules/@bananapus/721-hook-v5/src/libraries/JBIpfsDecoder.sol\":{\"keccak256\":\"0xb93ba562ac1fc9d3829be00e61f3a90f51df5661cf0f2c819a7f1d8ba19ec171\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc9bc948fac8897d9720ef25b13d63c60b40a18aa1897dd1c657fc278c416b4f\",\"dweb:/ipfs/QmNtiJTALZW5zfyKVy7XG5GkqGgMrfkVvU4Auu4bb9cGQc\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721InitTiersConfig.sol\":{\"keccak256\":\"0xfe7147d09467fd8f9b755d2a1485f22bb4a8797acd0e97623258498ddac2e441\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ee21464af9e6c78f580c6920757017cdfbd276728773338a67660fedfea0fd2\",\"dweb:/ipfs/QmVYviC7uQ7rEvdpzD6U4BN19P5f8uMuC7jWffzQWvuFcu\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721Tier.sol\":{\"keccak256\":\"0x99232aa73d5715977332dc7c93b03552a93259e59ae00e86b4ddc200f06adaf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://721c0cf10a29fa11677718faafb3a2ecfcb4fbe4e1c09e70a7fac681c80fcc94\",\"dweb:/ipfs/QmSUR77E9PqnpB5kBcKNz2CGBjG9XL9FH57RWVYu3Q7GMR\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TierConfig.sol\":{\"keccak256\":\"0x86e54a0de4deab9d105bf276586aebe256188b193e83eb7a6f6f93e4a29ae9c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04bfcc07d452c26dfc50d3a5eb62df4b3b81e063defd752e0aa5ed049a78eef4\",\"dweb:/ipfs/QmWd5nJHUvZPHxJXkrYCboXaqdtiWWkQG26sNM6qkJuAgD\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersHookFlags.sol\":{\"keccak256\":\"0x283d8429f31bd58875c056515aa42abd09c95362bd929e85cfc44a0d92585766\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9a580b89fe99d9f8e930c58a4d0d63a5ff7c01c79d210af01373d066c9e72ed6\",\"dweb:/ipfs/QmdY1eSGSoTjv4KSdsG4Tm5CzJN6iqk3qTRga5ZWNbejRz\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersMintReservesConfig.sol\":{\"keccak256\":\"0x86fe586a05e6d4bc6fab9b68996a7f4b74c5362ca6f24b9d8057ed7e4cd1c5ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0915f17d1f958ab1fe6b214d99ed62f1f858684898c803f1a8a6a557472dd140\",\"dweb:/ipfs/QmUhdnSV8UzkgvbtkYEKHrpyDEmc2aJxW5HQ1gucuxxu5A\"]},\"node_modules/@bananapus/721-hook-v5/src/structs/JB721TiersSetDiscountPercentConfig.sol\":{\"keccak256\":\"0x4672eacb6b0cda5e6f5f72ddb91463c52fb90b4df421053e3b40024f19a59954\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d8e3a0b35d6b2a6ec66527594263400189b6c766bfd6943c83704380a989aec\",\"dweb:/ipfs/QmUE7NhFWsxjFRzTuRyHJ7oRx3JXD9CnG83t29PjGAhwPR\"]},\"node_modules/@bananapus/core-v5/src/enums/JBApprovalStatus.sol\":{\"keccak256\":\"0x61c69b6bac7d24b566d87cda23a77e4ca9cdb87200b106aba8534cb9a0973e33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a9ca7249de76f77a8252eefe6bd1b63d47952f25a2acfa2c8db967cdff4470c\",\"dweb:/ipfs/QmaxSxptRQNj8bNy96EreENmrnRWdKmhyihBcxyWzBX5BN\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBCashOutHook.sol\":{\"keccak256\":\"0x6c516b030f55065eb169d666d11dbd82c4a0b8cea7782ebc5e79433cade38670\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa0659eb08477176f130ccaf387d4bde71f0ecca2b24f61124d225f2f50397a3\",\"dweb:/ipfs/QmRNBRGhdGpLQLkC4wK4VrgNEw4EdSiJ4ZZJfiJU4aNt2L\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBDirectory.sol\":{\"keccak256\":\"0xcb97db460d2948a7f51c660fe0d1b1749047a419027711c476b86ad3573534c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a909c7a3d471054537894dca827e6e018e92ac25299b43026e5b1e335ec4de68\",\"dweb:/ipfs/QmU1GT3F8PNMjSiPPP5cSLLofefHYFJXnywMCdqqM9xUeh\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPayHook.sol\":{\"keccak256\":\"0x9438866782c652c2942f4d114e35f393cd3c8b0334abce8387eed90bca35e8b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfd99daf57213f92325aad7d7d16e98476d38e870470e95ba01e3ae3cdecc95d\",\"dweb:/ipfs/QmUKKAVGf7ki8BHksr99tFcRW8APveeB5tNH63ctTbbCW8\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPriceFeed.sol\":{\"keccak256\":\"0x4bd84c0f1a5d4729ed709bcddd43f4c50ec4a165ece79780af8dce482ed07d4a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62bac4bfb6982fb002f620c77e5c445e62d50241a5aa64a07e51d929f5a42180\",\"dweb:/ipfs/QmWgJUDreVY2BuMX38a1iUUR5kNbMwGnKG3VvurB7oZtuM\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBPrices.sol\":{\"keccak256\":\"0xb4d5244daa52aafab0c9b8806b7f973afa6a3b298add5966d586d27b78424cfb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a819f74455aaa4f679ded378424702f3992608a640d7f943b19938eb4ff711da\",\"dweb:/ipfs/QmSMGvVTsMW3L5YSUyXTKoEsgNpGEutnq4frEZHuDdeDvz\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBProjects.sol\":{\"keccak256\":\"0x4ae42a9cc29b517b26d2b9b635deb82c16696b777deeca92dfcad33b0f81c0a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dcbd860e7d7f05232d90c5e9cfd3d01e2ce986ffcdb053473d8a4d387b1a48a\",\"dweb:/ipfs/QmWKWoSJJbVWDumbnzXJBJyXmAacgC97bxMtchh8te41bn\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesetApprovalHook.sol\":{\"keccak256\":\"0x5f0dc5968277b572ba5dc74518906dfb33a9684b7a199c7843f4e66af1c11fb9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://323ce3731aebdf5bf8055b8550055e856feed700d293af8beaf8a750625a0975\",\"dweb:/ipfs/QmU2ErV2uzvXnsJt1qBKm73H2qWcEqYtQGHtZEpx93DaWJ\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesetDataHook.sol\":{\"keccak256\":\"0x45a88aa9f26512f7fc3deff6d00be9a292fc07a76c8311f175249400e83d1837\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e88b996c3a05f87f7391ebcb9cd6d46c6ce8768083945f26a98c4ac4509e64c\",\"dweb:/ipfs/QmbpuYi6mYV8K8qrh8syWvbPc34pFrXG6QeC23m4MsX3r9\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBRulesets.sol\":{\"keccak256\":\"0xf287c7a4a162cd58084ed10ee5f9f31c992addff0ce2f2ac7e810cc393546f30\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c851b72de52c3ceb73c6b1849ad0cc7c0832fd126ee52cc838a163ab6d3055b8\",\"dweb:/ipfs/Qmbv6k6pSeNMwZoTUKzDNb18DMGR8DboRMrYQBydATuVZw\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBTerminal.sol\":{\"keccak256\":\"0x5a4c0ef6c8fd10069a408cc42a862909f7b47aba46327da5003203508d8f17d9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://09d8854151c21046b6b939189ad2139c669888e6baf47034a0cb754104d1efe6\",\"dweb:/ipfs/QmaMrxnf6K6znvDBwdAqsw5x6yuR4SY1BdNtyz226siAt5\"]},\"node_modules/@bananapus/core-v5/src/interfaces/IJBTokenUriResolver.sol\":{\"keccak256\":\"0xfa5cb00dcd6085d1ef912d071fe73c63f9478a2cd0f9d8bddaf659b6af2d0967\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://282e4e7c342d65f77cde0e9a08fcaf20ef5cf379c7a48b639842c0ffd0b2afb8\",\"dweb:/ipfs/QmbnN3PEQeZaXdPLT75V1J79kMg7KqSMru37RHrL3z8Yf2\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAccountingContext.sol\":{\"keccak256\":\"0x9c47e048a719f784f601df69a583505432217b9868a0244876d277f84dd1ebdf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8565f194b87914da9a02af2e760ae2ed2a9d185c6f11229f7035140776d2fec9\",\"dweb:/ipfs/QmPs2fic8W3F5e5zNRwmGmJFjb3JWGPWJ3YUe5o82nQgEn\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAfterCashOutRecordedContext.sol\":{\"keccak256\":\"0xa1acdb1a5670f66f730e71f8eff120766b6f5c934e6cd699c7f1a7cc93adf658\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9c7655c9c42b30132688b395251748c809c334370ee584cb9bac46e1fb8f162\",\"dweb:/ipfs/QmbMV1wg1Fm236HaA6nnMSvRkzeYCKPRhMYDbqkAxieY7x\"]},\"node_modules/@bananapus/core-v5/src/structs/JBAfterPayRecordedContext.sol\":{\"keccak256\":\"0x3bfc01ae9944a0ff5c41125e18ebb8efca58d7aa4e471d2ffa6d8588afb689ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://beb21399142d9b89539cfc8aa94119bc106bd1ea847b922d4c78f3f8804a5cba\",\"dweb:/ipfs/QmXDwJXrzCb6zh1KYwVdN2PEY86uK62MTfYF1M2MBtbEP7\"]},\"node_modules/@bananapus/core-v5/src/structs/JBBeforeCashOutRecordedContext.sol\":{\"keccak256\":\"0x7b2119f3e0725becc552ed5dcfa51683960a8772550c95ac5e2f75240ced367c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://03369dd07a9126ce453d83ac409919326f0aaa48ff9eac5c703092b3824d79c9\",\"dweb:/ipfs/Qmc1QKw6FfmeBD372RnDyeW27QyzEUjMX5up5rk8SHRYGa\"]},\"node_modules/@bananapus/core-v5/src/structs/JBBeforePayRecordedContext.sol\":{\"keccak256\":\"0xbc98b968d84be2f0ddbb24240723c7179ec9c5e02e5fbd5843dd0e76623a3ea5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1310e522696a9fc6f7f96b04c293fab3b4cf1e722bdbb7aa1eec7b3ecc25402f\",\"dweb:/ipfs/QmTYiijDJRuQcMhLrmpbHzHAQFPq6jurPP5HjyYtnzbpnK\"]},\"node_modules/@bananapus/core-v5/src/structs/JBCashOutHookSpecification.sol\":{\"keccak256\":\"0x67a6e781019979e626eaa81d84a800b2656603c23ae455e15d0fa1a6f03c1736\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43ce54447dda62d449a1e3575a9e4cb9c5a2adb41b45423dcefeb7d9afe8336\",\"dweb:/ipfs/QmW77REnQcvsfv4gwTLj2CyynmaGC3a6om7zCFWmERhrPY\"]},\"node_modules/@bananapus/core-v5/src/structs/JBPayHookSpecification.sol\":{\"keccak256\":\"0x955f0bfca97300b9e5927dc181753830ee362f83fa9ca32a90daade32aa0cfd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517af1597c7c40f8d3da53f7a6684a3e162950a16559d6bf6ea3b727bb11546\",\"dweb:/ipfs/QmRWo2ZTYXmVZTzNJDYhsJNsEaHphjpUfx9eNz2cciyz86\"]},\"node_modules/@bananapus/core-v5/src/structs/JBRuleset.sol\":{\"keccak256\":\"0x2d1f0a8457e94addae51a8222b1837e372847624fde96bb3178e7aee52ab2b24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bbb1478e8f5d1c20f981e5a0d5e526d002add1e05ddced87ccd45543ed00c9e4\",\"dweb:/ipfs/QmZkgaYdwkbnvW2MGwVe9FeHjac8XyZTP1YZcWUApiGZgE\"]},\"node_modules/@bananapus/core-v5/src/structs/JBTokenAmount.sol\":{\"keccak256\":\"0xc61593d33d5ec30e695d382948a1b944d01e29a8f2bfd29f75ecebcdbc7816de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8992c1e5fca0c2342ecc0e734dfba6a2a752e4c29184784931d0971e44305051\",\"dweb:/ipfs/QmYNcaW3qeCkgAExUaFTq238fgfJuoYCTwjCn7jm94U4dJ\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/metatx/ERC2771Context.sol\":{\"keccak256\":\"0x0b030a33274bde015419d99e54c9164f876a7d10eb590317b79b1d5e4ab23d99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68e5f96988198e8efd25ddef0d89750b4daebb7fd1204fa7f5eaccdfcb3398c8\",\"dweb:/ipfs/QmaM6nNkf9UmEtQraopuZamEWCdTWp7GvuN3pjMQrNCHxm\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xb5afb8e8eebc4d1c6404df2f5e1e6d2c3d24fd01e5dfc855314951ecfaae462d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://78586466c424f076c6a2a551d848cfbe3f7c49e723830807598484a1047b3b34\",\"dweb:/ipfs/Qmb717ovcFxm7qgNKEShiV6M9SPR3v1qnNpAGH84D6w29p\"]},\"node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x37d1aaaa5a2908a09e9dcf56a26ddf762ecf295afb5964695937344fc6802ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0bfc1b92153c5000e50f4021367b931bbe96372ac6facec3c4961b72053d02\",\"dweb:/ipfs/Qmbwp8VDerjS5SV1quwHH1oMXxPQ93fzfLVqJ2RCqbowGE\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/Banny721TokenUriResolver.sol\":{\"keccak256\":\"0xf91b9ca8c003d9050bef6a1027f12e82b21273eb71ac0a75c64a1c95431a871f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd62041073afb3c8a6ccefab0f5b52d25d3a7e65939977628224b7bde10897c0\",\"dweb:/ipfs/Qme4sC6b5GtJAEX7xQANgj1T1APdh4UhWBpisLPBdvmVS6\"]},\"src/interfaces/IBanny721TokenUriResolver.sol\":{\"keccak256\":\"0x31f005a8cc4604ee51ece245747f0036499cd08f2269696aeea46bdd40f2173b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cecf3985b02d02220ec4f4bc065e32f1df7dbb46fdd7c6a289306ad7610a5fd\",\"dweb:/ipfs/QmUC1486yD7kD8C2ZspP6ZwxGP7UZhHxWYmma1hfCqowMh\"]}},\"version\":1}",
1806
+ "gitCommit": "99c88f693fe0add873bcb509692afa01fddfa6ca",
1807
+ "history": []
1808
+ }
1809
+ ]
1810
+ }