-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontract.js
734 lines (734 loc) · 36.6 KB
/
contract.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
export const abi = [
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ERC721EnumerableForbiddenBatchMint",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721IncorrectOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721InsufficientApproval",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC721InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC721InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721InvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC721InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC721InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721NonexistentToken",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "ERC721OutOfBoundsIndex",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_fromTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_toTokenId",
"type": "uint256"
}
],
"name": "BatchMetadataUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "MetadataUpdate",
"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": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "safeMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]; // replace with your compiled contract bytecode
export const bytecode = "608060405234801561000f575f80fd5b506040516132b93803806132b983398181016040528101906100319190610362565b808383815f908161004291906105f7565b50806001908161005291906105f7565b5050505f600b5f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100de575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100d591906106d5565b60405180910390fd5b6100ed816100f660201b60201c565b505050506106ee565b5f600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61021a826101d4565b810181811067ffffffffffffffff82111715610239576102386101e4565b5b80604052505050565b5f61024b6101bb565b90506102578282610211565b919050565b5f67ffffffffffffffff821115610276576102756101e4565b5b61027f826101d4565b9050602081019050919050565b8281835e5f83830152505050565b5f6102ac6102a78461025c565b610242565b9050828152602081018484840111156102c8576102c76101d0565b5b6102d384828561028c565b509392505050565b5f82601f8301126102ef576102ee6101cc565b5b81516102ff84826020860161029a565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61033182610308565b9050919050565b61034181610327565b811461034b575f80fd5b50565b5f8151905061035c81610338565b92915050565b5f805f60608486031215610379576103786101c4565b5b5f84015167ffffffffffffffff811115610396576103956101c8565b5b6103a2868287016102db565b935050602084015167ffffffffffffffff8111156103c3576103c26101c8565b5b6103cf868287016102db565b92505060406103e08682870161034e565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061043857607f821691505b60208210810361044b5761044a6103f4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104ad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610472565b6104b78683610472565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104fb6104f66104f1846104cf565b6104d8565b6104cf565b9050919050565b5f819050919050565b610514836104e1565b61052861052082610502565b84845461047e565b825550505050565b5f90565b61053c610530565b61054781848461050b565b505050565b5b8181101561056a5761055f5f82610534565b60018101905061054d565b5050565b601f8211156105af5761058081610451565b61058984610463565b81016020851015610598578190505b6105ac6105a485610463565b83018261054c565b50505b505050565b5f82821c905092915050565b5f6105cf5f19846008026105b4565b1980831691505092915050565b5f6105e783836105c0565b9150826002028217905092915050565b610600826103ea565b67ffffffffffffffff811115610619576106186101e4565b5b6106238254610421565b61062e82828561056e565b5f60209050601f83116001811461065f575f841561064d578287015190505b61065785826105dc565b8655506106be565b601f19841661066d86610451565b5f5b828110156106945784890151825560018201915060208501945060208101905061066f565b868310156106b157848901516106ad601f8916826105c0565b8355505b6001600288020188555050505b505050505050565b6106cf81610327565b82525050565b5f6020820190506106e85f8301846106c6565b92915050565b612bbe806106fb5f395ff3fe608060405234801561000f575f80fd5b5060043610610156575f3560e01c80636352211e116100c1578063a22cb4651161007a578063a22cb4651461039e578063b88d4fde146103ba578063c87b56dd146103d6578063d204c45e14610406578063e985e9c514610422578063f2fde38b1461045257610156565b80636352211e146102ee57806370a082311461031e578063715018a61461034e5780638456cb59146103585780638da5cb5b1461036257806395d89b411461038057610156565b80632f745c59116101135780632f745c591461022e5780633f4ba83a1461025e57806342842e0e1461026857806342966c68146102845780634f6ccce7146102a05780635c975abb146102d057610156565b806301ffc9a71461015a57806306fdde031461018a578063081812fc146101a8578063095ea7b3146101d857806318160ddd146101f457806323b872dd14610212575b5f80fd5b610174600480360381019061016f919061208e565b61046e565b60405161018191906120d3565b60405180910390f35b61019261047f565b60405161019f919061215c565b60405180910390f35b6101c260048036038101906101bd91906121af565b61050e565b6040516101cf9190612219565b60405180910390f35b6101f260048036038101906101ed919061225c565b610529565b005b6101fc61053f565b60405161020991906122a9565b60405180910390f35b61022c600480360381019061022791906122c2565b61054b565b005b6102486004803603810190610243919061225c565b61064a565b60405161025591906122a9565b60405180910390f35b6102666106ee565b005b610282600480360381019061027d91906122c2565b610700565b005b61029e600480360381019061029991906121af565b61071f565b005b6102ba60048036038101906102b591906121af565b61072b565b6040516102c791906122a9565b60405180910390f35b6102d861079d565b6040516102e591906120d3565b60405180910390f35b610308600480360381019061030391906121af565b6107b2565b6040516103159190612219565b60405180910390f35b61033860048036038101906103339190612312565b6107c3565b60405161034591906122a9565b60405180910390f35b610356610879565b005b61036061088c565b005b61036a61089e565b6040516103779190612219565b60405180910390f35b6103886108c7565b604051610395919061215c565b60405180910390f35b6103b860048036038101906103b39190612367565b610957565b005b6103d460048036038101906103cf91906124d1565b61096d565b005b6103f060048036038101906103eb91906121af565b61098a565b6040516103fd919061215c565b60405180910390f35b610420600480360381019061041b91906125ef565b610a2b565b005b61043c60048036038101906104379190612649565b610a7a565b60405161044991906120d3565b60405180910390f35b61046c60048036038101906104679190612312565b610b08565b005b5f61047882610b8c565b9050919050565b60605f805461048d906126b4565b80601f01602080910402602001604051908101604052809291908181526020018280546104b9906126b4565b80156105045780601f106104db57610100808354040283529160200191610504565b820191905f5260205f20905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b5f61051882610bec565b5061052282610c72565b9050919050565b61053b8282610536610cab565b610cb2565b5050565b5f600880549050905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105bb575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105b29190612219565b60405180910390fd5b5f6105ce83836105c9610cab565b610cc4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610644578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161063b939291906126e4565b60405180910390fd5b50505050565b5f610654836107c3565b82106106995782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610690929190612719565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6106f6610cd9565b6106fe610d60565b565b61071a83838360405180602001604052805f81525061096d565b505050565b61072881610dc1565b50565b5f61073461053f565b8210610779575f826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610770929190612719565b60405180910390fd5b6008828154811061078d5761078c612740565b5b905f5260205f2001549050919050565b5f600b5f9054906101000a900460ff16905090565b5f6107bc82610bec565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610834575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161082b9190612219565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610881610cd9565b61088a5f610e0e565b565b610894610cd9565b61089c610ed3565b565b5f600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546108d6906126b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610902906126b4565b801561094d5780601f106109245761010080835404028352916020019161094d565b820191905f5260205f20905b81548152906001019060200180831161093057829003601f168201915b5050505050905090565b610969610962610cab565b8383610f35565b5050565b61097884848461054b565b6109848484848461109e565b50505050565b6060600d5f8381526020019081526020015f2080546109a8906126b4565b80601f01602080910402602001604051908101604052809291908181526020018280546109d4906126b4565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b50505050509050919050565b610a33610cd9565b5f600c5f815480929190610a469061279a565b919050559050610a568382611250565b81600d5f8381526020019081526020015f209081610a74919061297e565b50505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610b10610cd9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b80575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b779190612219565b60405180910390fd5b610b8981610e0e565b50565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610be55750610be48261126d565b5b9050919050565b5f80610bf7836112e6565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c6957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610c6091906122a9565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610cbf838383600161131f565b505050565b5f610cd08484846114de565b90509392505050565b610ce1610cab565b73ffffffffffffffffffffffffffffffffffffffff16610cff61089e565b73ffffffffffffffffffffffffffffffffffffffff1614610d5e57610d22610cab565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d559190612219565b60405180910390fd5b565b610d686114fb565b5f600b5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610daa610cab565b604051610db79190612219565b60405180910390a1565b610dca8161153b565b5f600d5f8381526020019081526020015f208054610de7906126b4565b905014610e0b57600d5f8281526020019081526020015f205f610e0a9190611fd0565b5b50565b5f600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610edb6115bd565b6001600b5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f1e610cab565b604051610f2b9190612219565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa557816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610f9c9190612219565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161109191906120d3565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b111561124a578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026110e1610cab565b8685856040518563ffffffff1660e01b81526004016111039493929190612a9f565b6020604051808303815f875af192505050801561113e57506040513d601f19601f8201168201806040525081019061113b9190612afd565b60015b6111bf573d805f811461116c576040519150601f19603f3d011682016040523d82523d5f602084013e611171565b606091505b505f8151036111b757836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111ae9190612219565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461124857836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161123f9190612219565b60405180910390fd5b505b50505050565b611269828260405180602001604052805f8152506115fe565b5050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112df57506112de82611619565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061135757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611489575f61136684610bec565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113d057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156113e357506113e18184610a7a565b155b1561142557826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161141c9190612219565b60405180910390fd5b811561148757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f6114e76115bd565b6114f28484846116fa565b90509392505050565b61150361079d565b611539576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f6115475f835f610cc4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115b957816040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016115b091906122a9565b60405180910390fd5b5050565b6115c561079d565b156115fc576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6116088383611814565b6116145f84848461109e565b505050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116e357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116f357506116f282611907565b5b9050919050565b5f80611707858585611970565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174a5761174584611b7b565b611789565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611788576117878185611bbf565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036117ca576117c584611d09565b611809565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611808576118078585611dc9565b5b5b809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611884575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161187b9190612219565b60405180910390fd5b5f61189083835f610cc4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611902575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118f99190612219565b60405180910390fd5b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8061197b846112e6565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119bc576119bb818486611e4d565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a47576119fb5f855f8061131f565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611ac657600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f611bc9836107c3565b90505f60075f8481526020019081526020015f20549050818114611ca0575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f6001600880549050611d1c9190612b28565b90505f60095f8481526020019081526020015f205490505f60088381548110611d4857611d47612740565b5b905f5260205f20015490508060088381548110611d6857611d67612740565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f90556008805480611db057611daf612b5b565b5b600190038181905f5260205f20015f9055905550505050565b5f6001611dd5846107c3565b611ddf9190612b28565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b611e58838383611f10565b611f0b575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ecc57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611ec391906122a9565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611f02929190612719565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fc757508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f885750611f878484610a7a565b5b80611fc657508273ffffffffffffffffffffffffffffffffffffffff16611fae83610c72565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b508054611fdc906126b4565b5f825580601f10611fed575061200a565b601f0160209004905f5260205f2090810190612009919061200d565b5b50565b5b80821115612024575f815f90555060010161200e565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61206d81612039565b8114612077575f80fd5b50565b5f8135905061208881612064565b92915050565b5f602082840312156120a3576120a2612031565b5b5f6120b08482850161207a565b91505092915050565b5f8115159050919050565b6120cd816120b9565b82525050565b5f6020820190506120e65f8301846120c4565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61212e826120ec565b61213881856120f6565b9350612148818560208601612106565b61215181612114565b840191505092915050565b5f6020820190508181035f8301526121748184612124565b905092915050565b5f819050919050565b61218e8161217c565b8114612198575f80fd5b50565b5f813590506121a981612185565b92915050565b5f602082840312156121c4576121c3612031565b5b5f6121d18482850161219b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612203826121da565b9050919050565b612213816121f9565b82525050565b5f60208201905061222c5f83018461220a565b92915050565b61223b816121f9565b8114612245575f80fd5b50565b5f8135905061225681612232565b92915050565b5f806040838503121561227257612271612031565b5b5f61227f85828601612248565b92505060206122908582860161219b565b9150509250929050565b6122a38161217c565b82525050565b5f6020820190506122bc5f83018461229a565b92915050565b5f805f606084860312156122d9576122d8612031565b5b5f6122e686828701612248565b93505060206122f786828701612248565b92505060406123088682870161219b565b9150509250925092565b5f6020828403121561232757612326612031565b5b5f61233484828501612248565b91505092915050565b612346816120b9565b8114612350575f80fd5b50565b5f813590506123618161233d565b92915050565b5f806040838503121561237d5761237c612031565b5b5f61238a85828601612248565b925050602061239b85828601612353565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6123e382612114565b810181811067ffffffffffffffff82111715612402576124016123ad565b5b80604052505050565b5f612414612028565b905061242082826123da565b919050565b5f67ffffffffffffffff82111561243f5761243e6123ad565b5b61244882612114565b9050602081019050919050565b828183375f83830152505050565b5f61247561247084612425565b61240b565b905082815260208101848484011115612491576124906123a9565b5b61249c848285612455565b509392505050565b5f82601f8301126124b8576124b76123a5565b5b81356124c8848260208601612463565b91505092915050565b5f805f80608085870312156124e9576124e8612031565b5b5f6124f687828801612248565b945050602061250787828801612248565b93505060406125188782880161219b565b925050606085013567ffffffffffffffff81111561253957612538612035565b5b612545878288016124a4565b91505092959194509250565b5f67ffffffffffffffff82111561256b5761256a6123ad565b5b61257482612114565b9050602081019050919050565b5f61259361258e84612551565b61240b565b9050828152602081018484840111156125af576125ae6123a9565b5b6125ba848285612455565b509392505050565b5f82601f8301126125d6576125d56123a5565b5b81356125e6848260208601612581565b91505092915050565b5f806040838503121561260557612604612031565b5b5f61261285828601612248565b925050602083013567ffffffffffffffff81111561263357612632612035565b5b61263f858286016125c2565b9150509250929050565b5f806040838503121561265f5761265e612031565b5b5f61266c85828601612248565b925050602061267d85828601612248565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806126cb57607f821691505b6020821081036126de576126dd612687565b5b50919050565b5f6060820190506126f75f83018661220a565b612704602083018561229a565b612711604083018461220a565b949350505050565b5f60408201905061272c5f83018561220a565b612739602083018461229a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127a48261217c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127d6576127d561276d565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261283d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612802565b6128478683612802565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61288261287d6128788461217c565b61285f565b61217c565b9050919050565b5f819050919050565b61289b83612868565b6128af6128a782612889565b84845461280e565b825550505050565b5f90565b6128c36128b7565b6128ce818484612892565b505050565b5b818110156128f1576128e65f826128bb565b6001810190506128d4565b5050565b601f82111561293657612907816127e1565b612910846127f3565b8101602085101561291f578190505b61293361292b856127f3565b8301826128d3565b50505b505050565b5f82821c905092915050565b5f6129565f198460080261293b565b1980831691505092915050565b5f61296e8383612947565b9150826002028217905092915050565b612987826120ec565b67ffffffffffffffff8111156129a05761299f6123ad565b5b6129aa82546126b4565b6129b58282856128f5565b5f60209050601f8311600181146129e6575f84156129d4578287015190505b6129de8582612963565b865550612a45565b601f1984166129f4866127e1565b5f5b82811015612a1b578489015182556001820191506020850194506020810190506129f6565b86831015612a385784890151612a34601f891682612947565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f612a7182612a4d565b612a7b8185612a57565b9350612a8b818560208601612106565b612a9481612114565b840191505092915050565b5f608082019050612ab25f83018761220a565b612abf602083018661220a565b612acc604083018561229a565b8181036060830152612ade8184612a67565b905095945050505050565b5f81519050612af781612064565b92915050565b5f60208284031215612b1257612b11612031565b5b5f612b1f84828501612ae9565b91505092915050565b5f612b328261217c565b9150612b3d8361217c565b9250828203905081811115612b5557612b5461276d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220c1376187218a064228ee5a5d3f4cb7726ea2fab0dd4719fc444bdfcf000c153664736f6c63430008190033"