@ensuro/core 1.2.0

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 (55) hide show
  1. package/README.md +93 -0
  2. package/build/contracts/AaveAssetManager.sol/AaveAssetManager.json +772 -0
  3. package/build/contracts/BaseAssetManager.sol/BaseAssetManager.json +494 -0
  4. package/build/contracts/DataTypes.sol/DataTypes.json +10 -0
  5. package/build/contracts/EToken.sol/EToken.json +1148 -0
  6. package/build/contracts/FlightDelayRiskModule.sol/FlightDelayRiskModule.json +1093 -0
  7. package/build/contracts/LPManualWhitelist.sol/LPManualWhitelist.json +412 -0
  8. package/build/contracts/Policy.sol/Policy.json +10 -0
  9. package/build/contracts/PolicyNFT.sol/PolicyNFT.json +570 -0
  10. package/build/contracts/PolicyPool.sol/PolicyPool.json +1257 -0
  11. package/build/contracts/PolicyPoolComponent.sol/PolicyPoolComponent.json +281 -0
  12. package/build/contracts/PolicyPoolConfig.sol/PolicyPoolConfig.json +660 -0
  13. package/build/contracts/RiskModule.sol/RiskModule.json +748 -0
  14. package/build/contracts/TrustfulRiskModule.sol/TrustfulRiskModule.json +1032 -0
  15. package/build/contracts/WadRayMath.sol/WadRayMath.json +10 -0
  16. package/build/contracts/dependencies/ChainlinkClientUpgradeable.sol/ChainlinkClientUpgradeable.json +50 -0
  17. package/build/contracts/upgraded/IPolicyNFTv1.sol/IPolicyNFTv1.json +322 -0
  18. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1.json +571 -0
  19. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1_Upgrade.json +602 -0
  20. package/build/interfaces/IAssetManager.sol/IAssetManager.json +31 -0
  21. package/build/interfaces/IEToken.sol/IEToken.json +491 -0
  22. package/build/interfaces/IInsolvencyHook.sol/IInsolvencyHook.json +42 -0
  23. package/build/interfaces/ILPWhitelist.sol/ILPWhitelist.json +74 -0
  24. package/build/interfaces/IPolicyNFT.sol/IPolicyNFT.json +321 -0
  25. package/build/interfaces/IPolicyPool.sol/IPolicyPool.json +445 -0
  26. package/build/interfaces/IPolicyPoolComponent.sol/IPolicyPoolComponent.json +24 -0
  27. package/build/interfaces/IPolicyPoolConfig.sol/IPolicyPoolConfig.json +328 -0
  28. package/build/interfaces/IRiskModule.sol/IRiskModule.json +141 -0
  29. package/contracts/AaveAssetManager.sol +326 -0
  30. package/contracts/BaseAssetManager.sol +283 -0
  31. package/contracts/DataTypes.sol +287 -0
  32. package/contracts/EToken.sol +773 -0
  33. package/contracts/FlightDelayRiskModule.sol +208 -0
  34. package/contracts/LPManualWhitelist.sol +57 -0
  35. package/contracts/Policy.sol +104 -0
  36. package/contracts/PolicyNFT.sol +96 -0
  37. package/contracts/PolicyPool.sol +716 -0
  38. package/contracts/PolicyPoolComponent.sol +164 -0
  39. package/contracts/PolicyPoolConfig.sol +231 -0
  40. package/contracts/RiskModule.sol +323 -0
  41. package/contracts/TrustfulRiskModule.sol +81 -0
  42. package/contracts/WadRayMath.sol +135 -0
  43. package/contracts/dependencies/ChainlinkClientUpgradeable.sol +371 -0
  44. package/contracts/upgraded/IPolicyNFTv1.sol +15 -0
  45. package/contracts/upgraded/PolicyNFTv1.sol +126 -0
  46. package/interfaces/IAssetManager.sol +23 -0
  47. package/interfaces/IEToken.sol +44 -0
  48. package/interfaces/IInsolvencyHook.sol +27 -0
  49. package/interfaces/ILPWhitelist.sol +23 -0
  50. package/interfaces/IPolicyNFT.sol +15 -0
  51. package/interfaces/IPolicyPool.sol +44 -0
  52. package/interfaces/IPolicyPoolComponent.sol +13 -0
  53. package/interfaces/IPolicyPoolConfig.sol +81 -0
  54. package/interfaces/IRiskModule.sol +29 -0
  55. package/package.json +30 -0
@@ -0,0 +1,1257 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "PolicyPool",
4
+ "sourceName": "contracts/PolicyPool.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "contract IPolicyPoolConfig",
10
+ "name": "config_",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "contract IPolicyNFT",
15
+ "name": "policyNFT_",
16
+ "type": "address"
17
+ },
18
+ {
19
+ "internalType": "contract IERC20Metadata",
20
+ "name": "currency_",
21
+ "type": "address"
22
+ }
23
+ ],
24
+ "stateMutability": "nonpayable",
25
+ "type": "constructor"
26
+ },
27
+ {
28
+ "anonymous": false,
29
+ "inputs": [
30
+ {
31
+ "indexed": false,
32
+ "internalType": "address",
33
+ "name": "previousAdmin",
34
+ "type": "address"
35
+ },
36
+ {
37
+ "indexed": false,
38
+ "internalType": "address",
39
+ "name": "newAdmin",
40
+ "type": "address"
41
+ }
42
+ ],
43
+ "name": "AdminChanged",
44
+ "type": "event"
45
+ },
46
+ {
47
+ "anonymous": false,
48
+ "inputs": [
49
+ {
50
+ "indexed": true,
51
+ "internalType": "address",
52
+ "name": "beacon",
53
+ "type": "address"
54
+ }
55
+ ],
56
+ "name": "BeaconUpgraded",
57
+ "type": "event"
58
+ },
59
+ {
60
+ "anonymous": false,
61
+ "inputs": [
62
+ {
63
+ "indexed": true,
64
+ "internalType": "contract IEToken",
65
+ "name": "eToken",
66
+ "type": "address"
67
+ },
68
+ {
69
+ "indexed": false,
70
+ "internalType": "enum DataTypes.ETokenStatus",
71
+ "name": "newStatus",
72
+ "type": "uint8"
73
+ }
74
+ ],
75
+ "name": "ETokenStatusChanged",
76
+ "type": "event"
77
+ },
78
+ {
79
+ "anonymous": false,
80
+ "inputs": [
81
+ {
82
+ "indexed": true,
83
+ "internalType": "contract IRiskModule",
84
+ "name": "riskModule",
85
+ "type": "address"
86
+ },
87
+ {
88
+ "components": [
89
+ {
90
+ "internalType": "uint256",
91
+ "name": "id",
92
+ "type": "uint256"
93
+ },
94
+ {
95
+ "internalType": "uint256",
96
+ "name": "payout",
97
+ "type": "uint256"
98
+ },
99
+ {
100
+ "internalType": "uint256",
101
+ "name": "premium",
102
+ "type": "uint256"
103
+ },
104
+ {
105
+ "internalType": "uint256",
106
+ "name": "scr",
107
+ "type": "uint256"
108
+ },
109
+ {
110
+ "internalType": "uint256",
111
+ "name": "lossProb",
112
+ "type": "uint256"
113
+ },
114
+ {
115
+ "internalType": "uint256",
116
+ "name": "purePremium",
117
+ "type": "uint256"
118
+ },
119
+ {
120
+ "internalType": "uint256",
121
+ "name": "premiumForEnsuro",
122
+ "type": "uint256"
123
+ },
124
+ {
125
+ "internalType": "uint256",
126
+ "name": "premiumForRm",
127
+ "type": "uint256"
128
+ },
129
+ {
130
+ "internalType": "uint256",
131
+ "name": "premiumForLps",
132
+ "type": "uint256"
133
+ },
134
+ {
135
+ "internalType": "contract IRiskModule",
136
+ "name": "riskModule",
137
+ "type": "address"
138
+ },
139
+ {
140
+ "internalType": "uint40",
141
+ "name": "start",
142
+ "type": "uint40"
143
+ },
144
+ {
145
+ "internalType": "uint40",
146
+ "name": "expiration",
147
+ "type": "uint40"
148
+ }
149
+ ],
150
+ "indexed": false,
151
+ "internalType": "struct Policy.PolicyData",
152
+ "name": "policy",
153
+ "type": "tuple"
154
+ }
155
+ ],
156
+ "name": "NewPolicy",
157
+ "type": "event"
158
+ },
159
+ {
160
+ "anonymous": false,
161
+ "inputs": [
162
+ {
163
+ "indexed": false,
164
+ "internalType": "address",
165
+ "name": "account",
166
+ "type": "address"
167
+ }
168
+ ],
169
+ "name": "Paused",
170
+ "type": "event"
171
+ },
172
+ {
173
+ "anonymous": false,
174
+ "inputs": [
175
+ {
176
+ "indexed": true,
177
+ "internalType": "contract IRiskModule",
178
+ "name": "riskModule",
179
+ "type": "address"
180
+ },
181
+ {
182
+ "indexed": true,
183
+ "internalType": "uint256",
184
+ "name": "policyId",
185
+ "type": "uint256"
186
+ }
187
+ ],
188
+ "name": "PolicyRebalanced",
189
+ "type": "event"
190
+ },
191
+ {
192
+ "anonymous": false,
193
+ "inputs": [
194
+ {
195
+ "indexed": true,
196
+ "internalType": "contract IRiskModule",
197
+ "name": "riskModule",
198
+ "type": "address"
199
+ },
200
+ {
201
+ "indexed": true,
202
+ "internalType": "uint256",
203
+ "name": "policyId",
204
+ "type": "uint256"
205
+ },
206
+ {
207
+ "indexed": false,
208
+ "internalType": "uint256",
209
+ "name": "payout",
210
+ "type": "uint256"
211
+ }
212
+ ],
213
+ "name": "PolicyResolved",
214
+ "type": "event"
215
+ },
216
+ {
217
+ "anonymous": false,
218
+ "inputs": [
219
+ {
220
+ "indexed": false,
221
+ "internalType": "address",
222
+ "name": "account",
223
+ "type": "address"
224
+ }
225
+ ],
226
+ "name": "Unpaused",
227
+ "type": "event"
228
+ },
229
+ {
230
+ "anonymous": false,
231
+ "inputs": [
232
+ {
233
+ "indexed": true,
234
+ "internalType": "address",
235
+ "name": "implementation",
236
+ "type": "address"
237
+ }
238
+ ],
239
+ "name": "Upgraded",
240
+ "type": "event"
241
+ },
242
+ {
243
+ "anonymous": false,
244
+ "inputs": [
245
+ {
246
+ "indexed": false,
247
+ "internalType": "bool",
248
+ "name": "moneyIn",
249
+ "type": "bool"
250
+ },
251
+ {
252
+ "indexed": false,
253
+ "internalType": "uint256",
254
+ "name": "value",
255
+ "type": "uint256"
256
+ }
257
+ ],
258
+ "name": "WonPremiumsInOut",
259
+ "type": "event"
260
+ },
261
+ {
262
+ "inputs": [],
263
+ "name": "GUARDIAN_ROLE",
264
+ "outputs": [
265
+ {
266
+ "internalType": "bytes32",
267
+ "name": "",
268
+ "type": "bytes32"
269
+ }
270
+ ],
271
+ "stateMutability": "view",
272
+ "type": "function"
273
+ },
274
+ {
275
+ "inputs": [],
276
+ "name": "LEVEL1_ROLE",
277
+ "outputs": [
278
+ {
279
+ "internalType": "bytes32",
280
+ "name": "",
281
+ "type": "bytes32"
282
+ }
283
+ ],
284
+ "stateMutability": "view",
285
+ "type": "function"
286
+ },
287
+ {
288
+ "inputs": [],
289
+ "name": "LEVEL2_ROLE",
290
+ "outputs": [
291
+ {
292
+ "internalType": "bytes32",
293
+ "name": "",
294
+ "type": "bytes32"
295
+ }
296
+ ],
297
+ "stateMutability": "view",
298
+ "type": "function"
299
+ },
300
+ {
301
+ "inputs": [],
302
+ "name": "LEVEL3_ROLE",
303
+ "outputs": [
304
+ {
305
+ "internalType": "bytes32",
306
+ "name": "",
307
+ "type": "bytes32"
308
+ }
309
+ ],
310
+ "stateMutability": "view",
311
+ "type": "function"
312
+ },
313
+ {
314
+ "inputs": [],
315
+ "name": "MAX_ETOKENS",
316
+ "outputs": [
317
+ {
318
+ "internalType": "uint256",
319
+ "name": "",
320
+ "type": "uint256"
321
+ }
322
+ ],
323
+ "stateMutability": "view",
324
+ "type": "function"
325
+ },
326
+ {
327
+ "inputs": [],
328
+ "name": "NEGLIGIBLE_AMOUNT",
329
+ "outputs": [
330
+ {
331
+ "internalType": "uint256",
332
+ "name": "",
333
+ "type": "uint256"
334
+ }
335
+ ],
336
+ "stateMutability": "view",
337
+ "type": "function"
338
+ },
339
+ {
340
+ "inputs": [],
341
+ "name": "REBALANCE_ROLE",
342
+ "outputs": [
343
+ {
344
+ "internalType": "bytes32",
345
+ "name": "",
346
+ "type": "bytes32"
347
+ }
348
+ ],
349
+ "stateMutability": "view",
350
+ "type": "function"
351
+ },
352
+ {
353
+ "inputs": [],
354
+ "name": "WITHDRAW_WON_PREMIUMS_ROLE",
355
+ "outputs": [
356
+ {
357
+ "internalType": "bytes32",
358
+ "name": "",
359
+ "type": "bytes32"
360
+ }
361
+ ],
362
+ "stateMutability": "view",
363
+ "type": "function"
364
+ },
365
+ {
366
+ "inputs": [],
367
+ "name": "activePurePremiums",
368
+ "outputs": [
369
+ {
370
+ "internalType": "uint256",
371
+ "name": "",
372
+ "type": "uint256"
373
+ }
374
+ ],
375
+ "stateMutability": "view",
376
+ "type": "function"
377
+ },
378
+ {
379
+ "inputs": [
380
+ {
381
+ "internalType": "contract IEToken",
382
+ "name": "eToken",
383
+ "type": "address"
384
+ }
385
+ ],
386
+ "name": "addEToken",
387
+ "outputs": [],
388
+ "stateMutability": "nonpayable",
389
+ "type": "function"
390
+ },
391
+ {
392
+ "inputs": [
393
+ {
394
+ "internalType": "uint256",
395
+ "name": "amount",
396
+ "type": "uint256"
397
+ },
398
+ {
399
+ "internalType": "bool",
400
+ "name": "positive",
401
+ "type": "bool"
402
+ }
403
+ ],
404
+ "name": "assetEarnings",
405
+ "outputs": [],
406
+ "stateMutability": "nonpayable",
407
+ "type": "function"
408
+ },
409
+ {
410
+ "inputs": [],
411
+ "name": "borrowedActivePP",
412
+ "outputs": [
413
+ {
414
+ "internalType": "uint256",
415
+ "name": "",
416
+ "type": "uint256"
417
+ }
418
+ ],
419
+ "stateMutability": "view",
420
+ "type": "function"
421
+ },
422
+ {
423
+ "inputs": [
424
+ {
425
+ "internalType": "contract IEToken",
426
+ "name": "eToken",
427
+ "type": "address"
428
+ },
429
+ {
430
+ "internalType": "enum DataTypes.ETokenStatus",
431
+ "name": "newStatus",
432
+ "type": "uint8"
433
+ }
434
+ ],
435
+ "name": "changeETokenStatus",
436
+ "outputs": [],
437
+ "stateMutability": "nonpayable",
438
+ "type": "function"
439
+ },
440
+ {
441
+ "inputs": [],
442
+ "name": "config",
443
+ "outputs": [
444
+ {
445
+ "internalType": "contract IPolicyPoolConfig",
446
+ "name": "",
447
+ "type": "address"
448
+ }
449
+ ],
450
+ "stateMutability": "view",
451
+ "type": "function"
452
+ },
453
+ {
454
+ "inputs": [],
455
+ "name": "currency",
456
+ "outputs": [
457
+ {
458
+ "internalType": "contract IERC20Metadata",
459
+ "name": "",
460
+ "type": "address"
461
+ }
462
+ ],
463
+ "stateMutability": "view",
464
+ "type": "function"
465
+ },
466
+ {
467
+ "inputs": [
468
+ {
469
+ "internalType": "contract IEToken",
470
+ "name": "eToken",
471
+ "type": "address"
472
+ },
473
+ {
474
+ "internalType": "uint256",
475
+ "name": "amount",
476
+ "type": "uint256"
477
+ }
478
+ ],
479
+ "name": "deposit",
480
+ "outputs": [],
481
+ "stateMutability": "nonpayable",
482
+ "type": "function"
483
+ },
484
+ {
485
+ "inputs": [
486
+ {
487
+ "components": [
488
+ {
489
+ "internalType": "uint256",
490
+ "name": "id",
491
+ "type": "uint256"
492
+ },
493
+ {
494
+ "internalType": "uint256",
495
+ "name": "payout",
496
+ "type": "uint256"
497
+ },
498
+ {
499
+ "internalType": "uint256",
500
+ "name": "premium",
501
+ "type": "uint256"
502
+ },
503
+ {
504
+ "internalType": "uint256",
505
+ "name": "scr",
506
+ "type": "uint256"
507
+ },
508
+ {
509
+ "internalType": "uint256",
510
+ "name": "lossProb",
511
+ "type": "uint256"
512
+ },
513
+ {
514
+ "internalType": "uint256",
515
+ "name": "purePremium",
516
+ "type": "uint256"
517
+ },
518
+ {
519
+ "internalType": "uint256",
520
+ "name": "premiumForEnsuro",
521
+ "type": "uint256"
522
+ },
523
+ {
524
+ "internalType": "uint256",
525
+ "name": "premiumForRm",
526
+ "type": "uint256"
527
+ },
528
+ {
529
+ "internalType": "uint256",
530
+ "name": "premiumForLps",
531
+ "type": "uint256"
532
+ },
533
+ {
534
+ "internalType": "contract IRiskModule",
535
+ "name": "riskModule",
536
+ "type": "address"
537
+ },
538
+ {
539
+ "internalType": "uint40",
540
+ "name": "start",
541
+ "type": "uint40"
542
+ },
543
+ {
544
+ "internalType": "uint40",
545
+ "name": "expiration",
546
+ "type": "uint40"
547
+ }
548
+ ],
549
+ "internalType": "struct Policy.PolicyData",
550
+ "name": "policy",
551
+ "type": "tuple"
552
+ }
553
+ ],
554
+ "name": "expirePolicy",
555
+ "outputs": [],
556
+ "stateMutability": "nonpayable",
557
+ "type": "function"
558
+ },
559
+ {
560
+ "inputs": [
561
+ {
562
+ "internalType": "uint256",
563
+ "name": "index",
564
+ "type": "uint256"
565
+ }
566
+ ],
567
+ "name": "getETokenAt",
568
+ "outputs": [
569
+ {
570
+ "internalType": "contract IEToken",
571
+ "name": "",
572
+ "type": "address"
573
+ }
574
+ ],
575
+ "stateMutability": "view",
576
+ "type": "function"
577
+ },
578
+ {
579
+ "inputs": [],
580
+ "name": "getETokenCount",
581
+ "outputs": [
582
+ {
583
+ "internalType": "uint256",
584
+ "name": "",
585
+ "type": "uint256"
586
+ }
587
+ ],
588
+ "stateMutability": "view",
589
+ "type": "function"
590
+ },
591
+ {
592
+ "inputs": [
593
+ {
594
+ "internalType": "contract IEToken",
595
+ "name": "eToken",
596
+ "type": "address"
597
+ }
598
+ ],
599
+ "name": "getETokenStatus",
600
+ "outputs": [
601
+ {
602
+ "internalType": "enum DataTypes.ETokenStatus",
603
+ "name": "",
604
+ "type": "uint8"
605
+ }
606
+ ],
607
+ "stateMutability": "view",
608
+ "type": "function"
609
+ },
610
+ {
611
+ "inputs": [],
612
+ "name": "getInvestable",
613
+ "outputs": [
614
+ {
615
+ "internalType": "uint256",
616
+ "name": "",
617
+ "type": "uint256"
618
+ }
619
+ ],
620
+ "stateMutability": "view",
621
+ "type": "function"
622
+ },
623
+ {
624
+ "inputs": [
625
+ {
626
+ "internalType": "uint256",
627
+ "name": "policyId",
628
+ "type": "uint256"
629
+ },
630
+ {
631
+ "internalType": "contract IEToken",
632
+ "name": "etoken",
633
+ "type": "address"
634
+ }
635
+ ],
636
+ "name": "getPolicyFund",
637
+ "outputs": [
638
+ {
639
+ "internalType": "uint256",
640
+ "name": "",
641
+ "type": "uint256"
642
+ }
643
+ ],
644
+ "stateMutability": "view",
645
+ "type": "function"
646
+ },
647
+ {
648
+ "inputs": [
649
+ {
650
+ "internalType": "uint256",
651
+ "name": "policyId",
652
+ "type": "uint256"
653
+ },
654
+ {
655
+ "internalType": "uint256",
656
+ "name": "index",
657
+ "type": "uint256"
658
+ }
659
+ ],
660
+ "name": "getPolicyFundAt",
661
+ "outputs": [
662
+ {
663
+ "internalType": "contract IEToken",
664
+ "name": "",
665
+ "type": "address"
666
+ },
667
+ {
668
+ "internalType": "uint256",
669
+ "name": "",
670
+ "type": "uint256"
671
+ }
672
+ ],
673
+ "stateMutability": "view",
674
+ "type": "function"
675
+ },
676
+ {
677
+ "inputs": [
678
+ {
679
+ "internalType": "uint256",
680
+ "name": "policyId",
681
+ "type": "uint256"
682
+ }
683
+ ],
684
+ "name": "getPolicyFundCount",
685
+ "outputs": [
686
+ {
687
+ "internalType": "uint256",
688
+ "name": "",
689
+ "type": "uint256"
690
+ }
691
+ ],
692
+ "stateMutability": "view",
693
+ "type": "function"
694
+ },
695
+ {
696
+ "inputs": [],
697
+ "name": "initialize",
698
+ "outputs": [],
699
+ "stateMutability": "nonpayable",
700
+ "type": "function"
701
+ },
702
+ {
703
+ "inputs": [
704
+ {
705
+ "components": [
706
+ {
707
+ "internalType": "uint256",
708
+ "name": "id",
709
+ "type": "uint256"
710
+ },
711
+ {
712
+ "internalType": "uint256",
713
+ "name": "payout",
714
+ "type": "uint256"
715
+ },
716
+ {
717
+ "internalType": "uint256",
718
+ "name": "premium",
719
+ "type": "uint256"
720
+ },
721
+ {
722
+ "internalType": "uint256",
723
+ "name": "scr",
724
+ "type": "uint256"
725
+ },
726
+ {
727
+ "internalType": "uint256",
728
+ "name": "lossProb",
729
+ "type": "uint256"
730
+ },
731
+ {
732
+ "internalType": "uint256",
733
+ "name": "purePremium",
734
+ "type": "uint256"
735
+ },
736
+ {
737
+ "internalType": "uint256",
738
+ "name": "premiumForEnsuro",
739
+ "type": "uint256"
740
+ },
741
+ {
742
+ "internalType": "uint256",
743
+ "name": "premiumForRm",
744
+ "type": "uint256"
745
+ },
746
+ {
747
+ "internalType": "uint256",
748
+ "name": "premiumForLps",
749
+ "type": "uint256"
750
+ },
751
+ {
752
+ "internalType": "contract IRiskModule",
753
+ "name": "riskModule",
754
+ "type": "address"
755
+ },
756
+ {
757
+ "internalType": "uint40",
758
+ "name": "start",
759
+ "type": "uint40"
760
+ },
761
+ {
762
+ "internalType": "uint40",
763
+ "name": "expiration",
764
+ "type": "uint40"
765
+ }
766
+ ],
767
+ "internalType": "struct Policy.PolicyData",
768
+ "name": "policy",
769
+ "type": "tuple"
770
+ },
771
+ {
772
+ "internalType": "address",
773
+ "name": "customer",
774
+ "type": "address"
775
+ },
776
+ {
777
+ "internalType": "uint96",
778
+ "name": "internalId",
779
+ "type": "uint96"
780
+ }
781
+ ],
782
+ "name": "newPolicy",
783
+ "outputs": [
784
+ {
785
+ "internalType": "uint256",
786
+ "name": "",
787
+ "type": "uint256"
788
+ }
789
+ ],
790
+ "stateMutability": "nonpayable",
791
+ "type": "function"
792
+ },
793
+ {
794
+ "inputs": [],
795
+ "name": "pause",
796
+ "outputs": [],
797
+ "stateMutability": "nonpayable",
798
+ "type": "function"
799
+ },
800
+ {
801
+ "inputs": [],
802
+ "name": "paused",
803
+ "outputs": [
804
+ {
805
+ "internalType": "bool",
806
+ "name": "",
807
+ "type": "bool"
808
+ }
809
+ ],
810
+ "stateMutability": "view",
811
+ "type": "function"
812
+ },
813
+ {
814
+ "inputs": [],
815
+ "name": "policyNFT",
816
+ "outputs": [
817
+ {
818
+ "internalType": "address",
819
+ "name": "",
820
+ "type": "address"
821
+ }
822
+ ],
823
+ "stateMutability": "view",
824
+ "type": "function"
825
+ },
826
+ {
827
+ "inputs": [],
828
+ "name": "proxiableUUID",
829
+ "outputs": [
830
+ {
831
+ "internalType": "bytes32",
832
+ "name": "",
833
+ "type": "bytes32"
834
+ }
835
+ ],
836
+ "stateMutability": "view",
837
+ "type": "function"
838
+ },
839
+ {
840
+ "inputs": [],
841
+ "name": "purePremiums",
842
+ "outputs": [
843
+ {
844
+ "internalType": "uint256",
845
+ "name": "",
846
+ "type": "uint256"
847
+ }
848
+ ],
849
+ "stateMutability": "view",
850
+ "type": "function"
851
+ },
852
+ {
853
+ "inputs": [
854
+ {
855
+ "components": [
856
+ {
857
+ "internalType": "uint256",
858
+ "name": "id",
859
+ "type": "uint256"
860
+ },
861
+ {
862
+ "internalType": "uint256",
863
+ "name": "payout",
864
+ "type": "uint256"
865
+ },
866
+ {
867
+ "internalType": "uint256",
868
+ "name": "premium",
869
+ "type": "uint256"
870
+ },
871
+ {
872
+ "internalType": "uint256",
873
+ "name": "scr",
874
+ "type": "uint256"
875
+ },
876
+ {
877
+ "internalType": "uint256",
878
+ "name": "lossProb",
879
+ "type": "uint256"
880
+ },
881
+ {
882
+ "internalType": "uint256",
883
+ "name": "purePremium",
884
+ "type": "uint256"
885
+ },
886
+ {
887
+ "internalType": "uint256",
888
+ "name": "premiumForEnsuro",
889
+ "type": "uint256"
890
+ },
891
+ {
892
+ "internalType": "uint256",
893
+ "name": "premiumForRm",
894
+ "type": "uint256"
895
+ },
896
+ {
897
+ "internalType": "uint256",
898
+ "name": "premiumForLps",
899
+ "type": "uint256"
900
+ },
901
+ {
902
+ "internalType": "contract IRiskModule",
903
+ "name": "riskModule",
904
+ "type": "address"
905
+ },
906
+ {
907
+ "internalType": "uint40",
908
+ "name": "start",
909
+ "type": "uint40"
910
+ },
911
+ {
912
+ "internalType": "uint40",
913
+ "name": "expiration",
914
+ "type": "uint40"
915
+ }
916
+ ],
917
+ "internalType": "struct Policy.PolicyData",
918
+ "name": "policy",
919
+ "type": "tuple"
920
+ }
921
+ ],
922
+ "name": "rebalancePolicy",
923
+ "outputs": [],
924
+ "stateMutability": "nonpayable",
925
+ "type": "function"
926
+ },
927
+ {
928
+ "inputs": [
929
+ {
930
+ "internalType": "uint256",
931
+ "name": "amount",
932
+ "type": "uint256"
933
+ }
934
+ ],
935
+ "name": "receiveGrant",
936
+ "outputs": [],
937
+ "stateMutability": "nonpayable",
938
+ "type": "function"
939
+ },
940
+ {
941
+ "inputs": [
942
+ {
943
+ "internalType": "contract IEToken",
944
+ "name": "eToken",
945
+ "type": "address"
946
+ }
947
+ ],
948
+ "name": "removeEToken",
949
+ "outputs": [],
950
+ "stateMutability": "nonpayable",
951
+ "type": "function"
952
+ },
953
+ {
954
+ "inputs": [
955
+ {
956
+ "internalType": "contract IEToken",
957
+ "name": "eToken",
958
+ "type": "address"
959
+ }
960
+ ],
961
+ "name": "repayETokenLoan",
962
+ "outputs": [
963
+ {
964
+ "internalType": "uint256",
965
+ "name": "",
966
+ "type": "uint256"
967
+ }
968
+ ],
969
+ "stateMutability": "nonpayable",
970
+ "type": "function"
971
+ },
972
+ {
973
+ "inputs": [
974
+ {
975
+ "components": [
976
+ {
977
+ "internalType": "uint256",
978
+ "name": "id",
979
+ "type": "uint256"
980
+ },
981
+ {
982
+ "internalType": "uint256",
983
+ "name": "payout",
984
+ "type": "uint256"
985
+ },
986
+ {
987
+ "internalType": "uint256",
988
+ "name": "premium",
989
+ "type": "uint256"
990
+ },
991
+ {
992
+ "internalType": "uint256",
993
+ "name": "scr",
994
+ "type": "uint256"
995
+ },
996
+ {
997
+ "internalType": "uint256",
998
+ "name": "lossProb",
999
+ "type": "uint256"
1000
+ },
1001
+ {
1002
+ "internalType": "uint256",
1003
+ "name": "purePremium",
1004
+ "type": "uint256"
1005
+ },
1006
+ {
1007
+ "internalType": "uint256",
1008
+ "name": "premiumForEnsuro",
1009
+ "type": "uint256"
1010
+ },
1011
+ {
1012
+ "internalType": "uint256",
1013
+ "name": "premiumForRm",
1014
+ "type": "uint256"
1015
+ },
1016
+ {
1017
+ "internalType": "uint256",
1018
+ "name": "premiumForLps",
1019
+ "type": "uint256"
1020
+ },
1021
+ {
1022
+ "internalType": "contract IRiskModule",
1023
+ "name": "riskModule",
1024
+ "type": "address"
1025
+ },
1026
+ {
1027
+ "internalType": "uint40",
1028
+ "name": "start",
1029
+ "type": "uint40"
1030
+ },
1031
+ {
1032
+ "internalType": "uint40",
1033
+ "name": "expiration",
1034
+ "type": "uint40"
1035
+ }
1036
+ ],
1037
+ "internalType": "struct Policy.PolicyData",
1038
+ "name": "policy",
1039
+ "type": "tuple"
1040
+ },
1041
+ {
1042
+ "internalType": "uint256",
1043
+ "name": "payout",
1044
+ "type": "uint256"
1045
+ }
1046
+ ],
1047
+ "name": "resolvePolicy",
1048
+ "outputs": [],
1049
+ "stateMutability": "nonpayable",
1050
+ "type": "function"
1051
+ },
1052
+ {
1053
+ "inputs": [
1054
+ {
1055
+ "components": [
1056
+ {
1057
+ "internalType": "uint256",
1058
+ "name": "id",
1059
+ "type": "uint256"
1060
+ },
1061
+ {
1062
+ "internalType": "uint256",
1063
+ "name": "payout",
1064
+ "type": "uint256"
1065
+ },
1066
+ {
1067
+ "internalType": "uint256",
1068
+ "name": "premium",
1069
+ "type": "uint256"
1070
+ },
1071
+ {
1072
+ "internalType": "uint256",
1073
+ "name": "scr",
1074
+ "type": "uint256"
1075
+ },
1076
+ {
1077
+ "internalType": "uint256",
1078
+ "name": "lossProb",
1079
+ "type": "uint256"
1080
+ },
1081
+ {
1082
+ "internalType": "uint256",
1083
+ "name": "purePremium",
1084
+ "type": "uint256"
1085
+ },
1086
+ {
1087
+ "internalType": "uint256",
1088
+ "name": "premiumForEnsuro",
1089
+ "type": "uint256"
1090
+ },
1091
+ {
1092
+ "internalType": "uint256",
1093
+ "name": "premiumForRm",
1094
+ "type": "uint256"
1095
+ },
1096
+ {
1097
+ "internalType": "uint256",
1098
+ "name": "premiumForLps",
1099
+ "type": "uint256"
1100
+ },
1101
+ {
1102
+ "internalType": "contract IRiskModule",
1103
+ "name": "riskModule",
1104
+ "type": "address"
1105
+ },
1106
+ {
1107
+ "internalType": "uint40",
1108
+ "name": "start",
1109
+ "type": "uint40"
1110
+ },
1111
+ {
1112
+ "internalType": "uint40",
1113
+ "name": "expiration",
1114
+ "type": "uint40"
1115
+ }
1116
+ ],
1117
+ "internalType": "struct Policy.PolicyData",
1118
+ "name": "policy",
1119
+ "type": "tuple"
1120
+ },
1121
+ {
1122
+ "internalType": "bool",
1123
+ "name": "customerWon",
1124
+ "type": "bool"
1125
+ }
1126
+ ],
1127
+ "name": "resolvePolicyFullPayout",
1128
+ "outputs": [],
1129
+ "stateMutability": "nonpayable",
1130
+ "type": "function"
1131
+ },
1132
+ {
1133
+ "inputs": [
1134
+ {
1135
+ "internalType": "contract IAssetManager",
1136
+ "name": "newAssetManager",
1137
+ "type": "address"
1138
+ }
1139
+ ],
1140
+ "name": "setAssetManager",
1141
+ "outputs": [],
1142
+ "stateMutability": "nonpayable",
1143
+ "type": "function"
1144
+ },
1145
+ {
1146
+ "inputs": [],
1147
+ "name": "totalETokenSupply",
1148
+ "outputs": [
1149
+ {
1150
+ "internalType": "uint256",
1151
+ "name": "",
1152
+ "type": "uint256"
1153
+ }
1154
+ ],
1155
+ "stateMutability": "view",
1156
+ "type": "function"
1157
+ },
1158
+ {
1159
+ "inputs": [],
1160
+ "name": "unpause",
1161
+ "outputs": [],
1162
+ "stateMutability": "nonpayable",
1163
+ "type": "function"
1164
+ },
1165
+ {
1166
+ "inputs": [
1167
+ {
1168
+ "internalType": "address",
1169
+ "name": "newImplementation",
1170
+ "type": "address"
1171
+ }
1172
+ ],
1173
+ "name": "upgradeTo",
1174
+ "outputs": [],
1175
+ "stateMutability": "nonpayable",
1176
+ "type": "function"
1177
+ },
1178
+ {
1179
+ "inputs": [
1180
+ {
1181
+ "internalType": "address",
1182
+ "name": "newImplementation",
1183
+ "type": "address"
1184
+ },
1185
+ {
1186
+ "internalType": "bytes",
1187
+ "name": "data",
1188
+ "type": "bytes"
1189
+ }
1190
+ ],
1191
+ "name": "upgradeToAndCall",
1192
+ "outputs": [],
1193
+ "stateMutability": "payable",
1194
+ "type": "function"
1195
+ },
1196
+ {
1197
+ "inputs": [
1198
+ {
1199
+ "internalType": "contract IEToken",
1200
+ "name": "eToken",
1201
+ "type": "address"
1202
+ },
1203
+ {
1204
+ "internalType": "uint256",
1205
+ "name": "amount",
1206
+ "type": "uint256"
1207
+ }
1208
+ ],
1209
+ "name": "withdraw",
1210
+ "outputs": [
1211
+ {
1212
+ "internalType": "uint256",
1213
+ "name": "",
1214
+ "type": "uint256"
1215
+ }
1216
+ ],
1217
+ "stateMutability": "nonpayable",
1218
+ "type": "function"
1219
+ },
1220
+ {
1221
+ "inputs": [
1222
+ {
1223
+ "internalType": "uint256",
1224
+ "name": "amount",
1225
+ "type": "uint256"
1226
+ }
1227
+ ],
1228
+ "name": "withdrawWonPremiums",
1229
+ "outputs": [
1230
+ {
1231
+ "internalType": "uint256",
1232
+ "name": "",
1233
+ "type": "uint256"
1234
+ }
1235
+ ],
1236
+ "stateMutability": "nonpayable",
1237
+ "type": "function"
1238
+ },
1239
+ {
1240
+ "inputs": [],
1241
+ "name": "wonPurePremiums",
1242
+ "outputs": [
1243
+ {
1244
+ "internalType": "uint256",
1245
+ "name": "",
1246
+ "type": "uint256"
1247
+ }
1248
+ ],
1249
+ "stateMutability": "view",
1250
+ "type": "function"
1251
+ }
1252
+ ],
1253
+ "bytecode": "0x6101206040523060601b6080523480156200001957600080fd5b5060405162006284380380620062848339810160408190526200003c9162000105565b6001600160601b0319606084811b821660c05283811b82166101005282901b1660e0526040805163313ce56760e01b815290516003916001600160a01b0384169163313ce56791600480820192602092909190829003018186803b158015620000a457600080fd5b505afa158015620000b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000df919062000159565b620000eb91906200028f565b620000f890600a620001ce565b60a05250620002e4915050565b6000806000606084860312156200011b57600080fd5b83516200012881620002cb565b60208501519093506200013b81620002cb565b60408501519092506200014e81620002cb565b809150509250925092565b6000602082840312156200016c57600080fd5b815160ff811681146200017e57600080fd5b9392505050565b600181815b80851115620001c6578160001904821115620001aa57620001aa620002b5565b80851615620001b857918102915b93841c93908002906200018a565b509250929050565b60006200017e60ff841683600082620001ea5750600162000289565b81620001f95750600062000289565b81600181146200021257600281146200021d576200023d565b600191505062000289565b60ff841115620002315762000231620002b5565b50506001821b62000289565b5060208310610133831016604e8410600b841016171562000262575081810a62000289565b6200026e838362000185565b8060001904821115620002855762000285620002b5565b0290505b92915050565b600060ff821660ff841680821015620002ac57620002ac620002b5565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114620002e157600080fd5b50565b60805160601c60a05160c05160601c60e05160601c6101005160601c615e2262000462600039600081816106db01528181610a7e01528181613898015261401e0152600081816107e401528181610b0001528181610bcc01528181610d1301528181611375015281816114eb0152818161160a01528181611bd201528181613d5f0152614a350152600081816105760152818161098e01528181610b2e015281816110f20152818161115f015281816111f301528181611292015281816113a40152818161187701528181611c6c01528181611d1e01528181611df601528181611fa9015281816123620152818161250c01528181612a4c01528181612b4301528181612d61015281816133be0152818161370d0152818161378b015281816139f001528181613aa301528181613b9f0152613c520152600081816103aa01528181612e5301528181612e870152614430015260008181610fd201528181611012015281816116c40152818161170401526117930152615e226000f3fe6080604052600436106102725760003560e01c806365e29c7e1161014f578063af02808a116100c1578063dea167d51161007a578063dea167d5146107c0578063e5a6b10f146107d5578063e823584a14610808578063f3fef3a31461081d578063f67b2bad1461083d578063fcbb17fe1461085f57600080fd5b8063af02808a146106cc578063b0ec4bcf146106ff578063b63d382e1461071f578063b77ddfea1461073f578063ca143d1814610754578063ce937e7b1461078157600080fd5b8063846253d111610113578063846253d1146105f85780638a9defff146106185780638ca23bc91461063857806398e88ca81461066c5780639e556b2b1461068c578063ab600169146106ac57600080fd5b806365e29c7e1461055257806379502c55146105675780638129fc1c146105ae57806381ced71f146105c35780638456cb59146105e357600080fd5b806343060237116101e8578063536c9a43116101ac578063536c9a431461047d5780635680e145146104925780635b494dd5146104c65780635c975abb146104fa57806363c0f4b11461051d57806365b710081461053257600080fd5b806343060237146103e157806347e7ef24146104015780634a47a3e0146104215780634f1ef2861461045557806352d1902d1461046857600080fd5b806324ea54f41161023a57806324ea54f41461032157806326ccbd22146103435780632a2be82d146103585780633659cfe614610378578063396512fd146103985780633f4ba83a146103cc57600080fd5b8063066dda0e1461027757806319704a3a146102995780631a548a27146102cc5780631c5c4aea146102e1578063220c262b14610301575b600080fd5b34801561028357600080fd5b506102976102923660046157aa565b61087f565b005b3480156102a557600080fd5b506102b96102b4366004615823565b6108da565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b5060ce546102b9565b3480156102ed57600080fd5b506102b96102fc366004615881565b610d88565b34801561030d57600080fd5b506102b961031c3660046158bf565b610da5565b34801561032d57600080fd5b506102b9600080516020615dcd83398151915281565b34801561034f57600080fd5b506102b9610de7565b34801561036457600080fd5b506102b961037336600461560c565b610e0b565b34801561038457600080fd5b5061029761039336600461560c565b610fc7565b3480156103a457600080fd5b506102b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506102976110a7565b3480156103ed57600080fd5b506102976103fc36600461560c565b611154565b34801561040d57600080fd5b5061029761041c366004615761565b611567565b34801561042d57600080fd5b506102b97fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b610297610463366004615646565b6116b9565b34801561047457600080fd5b506102b9611786565b34801561048957600080fd5b5060d0546102b9565b34801561049e57600080fd5b506102b97f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c81565b3480156104d257600080fd5b506102b97f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561050657600080fd5b5060335460ff1660405190151581526020016102c3565b34801561052957600080fd5b506102b9600a81565b34801561053e57600080fd5b5061029761054d36600461560c565b611839565b34801561055e57600080fd5b506102b9611a56565b34801561057357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102c3565b3480156105ba57600080fd5b50610297611b3c565b3480156105cf57600080fd5b506102976105de366004615881565b611bc5565b3480156105ef57600080fd5b50610297611c40565b34801561060457600080fd5b506102b9610613366004615881565b611cd6565b34801561062457600080fd5b5061029761063336600461578d565b611ecc565b34801561064457600080fd5b506102b97fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561067857600080fd5b5061029761068736600461578d565b611f6b565b34801561069857600080fd5b506102976106a73660046157d9565b612323565b3480156106b857600080fd5b506102976106c736600461589a565b612360565b3480156106d857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561070b57600080fd5b5061059661071a366004615881565b6124a2565b34801561072b57600080fd5b5061029761073a36600461560c565b6124e0565b34801561074b57600080fd5b506102b961278f565b34801561076057600080fd5b5061077461076f36600461560c565b61284c565b6040516102c3919061593d565b34801561078d57600080fd5b506107a161079c3660046158e4565b612859565b604080516001600160a01b0390931683526020830191909152016102c3565b3480156107cc57600080fd5b506102b961287f565b3480156107e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561081457600080fd5b5060cf546102b9565b34801561082957600080fd5b506102b9610838366004615761565b61288b565b34801561084957600080fd5b506102b9600080516020615d8683398151915281565b34801561086b57600080fd5b5061029761087a366004615724565b612a01565b60335460ff16156108ab5760405162461bcd60e51b81526004016108a290615a30565b60405180910390fd5b6108d66108bd36849003840184615806565b826108c95760006108cf565b83602001355b6000612c6f565b5050565b60006108e860335460ff1690565b156109055760405162461bcd60e51b81526004016108a290615a30565b6101208401516001600160a01b038116331461096f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108a2565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b610a0f9190615bf7565b8552610a1a85613018565b8551600090815260cc602052604081209190915560a086015160ce805491929091610a46908490615bf7565b90915550610a55905085613048565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610b2884308761010001518860a00151610af69190615bf7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b610bf4847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190615629565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b60008560e00151118015610c8a5750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190615629565b6001600160a01b0316846001600160a01b031614155b15610d3b57610d3b84826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190615629565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d749190615af3565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d9f90613277565b92915050565b600082815260cd6020526040812081908190610dc19085613282565b915091508115610dd4579150610d9f9050565b600092505050610d9f565b505092915050565b600060cf5460d05460ce54610dfc9190615bf7565b610e069190615c50565b905090565b6000610e1960335460ff1690565b15610e365760405162461bcd60e51b81526004016108a290615a30565b600080610e4460c98561329e565b91509150818015610e8157506001816003811115610e6457610e64615cea565b1480610e8157506002816003811115610e7f57610e7f615cea565b145b610ec45760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061570b565b90506000610f44826132d1565b90506001600160a01b038616631c0f4f81610f5f8385615c50565b6040518263ffffffff1660e01b8152600401610f7d91815260200190565b600060405180830381600087803b158015610f9757600080fd5b505af1158015610fab573d6000803e3d6000fd5b505050508082610fbb9190615c50565b9450505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110105760405162461bcd60e51b81526004016108a290615998565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059600080516020615d66833981519152546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016108a2906159e4565b61108881613373565b604080516000808252602082019092526110a49183919061341d565b50565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506108d6613597565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111e65760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b60648201526084016108a2565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190615629565b6001600160a01b0316146114b5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190615629565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190615629565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b391906156ee565b505b6001600160a01b038116156110a45760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d691906156ee565b60335460ff161561158a5760405162461bcd60e51b81526004016108a290615a30565b60008061159860c98561329e565b915091508180156115ba575060018160038111156115b8576115b8615cea565b145b6115fd5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6116326001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086613206565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b2919061570b565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117025760405162461bcd60e51b81526004016108a290615998565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661174b600080516020615d66833981519152546001600160a01b031690565b6001600160a01b0316146117715760405162461bcd60e51b81526004016108a2906159e4565b61177a82613373565b6108d68282600161341d565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108a2565b50600080516020615d6683398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156118c157600080fd5b505afa1580156118d5573d6000803e3d6000fd5b50600292506118e2915050565b6118ed60c98461362a565b60038111156118fe576118fe615cea565b146119435760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016108a2565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061570b565b15611a105760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108a2565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6000604051611a4a919061593d565b60405180910390a25050565b600080805b611a6560c9613277565b811015611b0d576000611a7960c983613647565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed919061570b565b611af79084615bf7565b9250508080611b0590615cb9565b915050611a5b565b506000611b18610de7565b905081811115611b3357611b2c8282615c50565b9250505090565b60009250505090565b600054610100900460ff16611b575760005460ff1615611b5b565b303b155b611b775760405162461bcd60e51b81526004016108a290615a5a565b600054610100900460ff16158015611b99576000805461ffff19166101011790555b611ba1613656565b611ba961367f565b611bb16136ae565b80156110a4576000805461ff001916905550565b611bfa6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084613206565b611c038161391d565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615dcd83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506110a4613982565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b5050505060d054831115611d885760d05492505b60008311611dd85760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f20776974686472617700000000000000000060448201526064016108a2565b8260d06000828254611dea9190615c50565b92505081905550611e8b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4d57600080fd5b505afa158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190615629565b846139da565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611eef5760405162461bcd60e51b81526004016108a290615a30565b42611f0261018083016101608401615906565b64ffffffffff161115611f505760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108a2565b6110a4611f6236839003830183615806565b60006001612c6f565b6040516312d9a6ad60e01b81527f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c60048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ff357600080fd5b505afa158015612007573d6000803e3d6000fd5b5050505061201760335460ff1690565b156120345760405162461bcd60e51b81526004016108a290615a30565b61204b61204636849003840184615806565b613d86565b8135600090815260cd6020526040812090805b61206860c9613277565b8110156122b25760008061207d60c984613647565b9092509050600080806120908886613282565b91509150811561211a576001600160a01b038516634438bcbb6120c06120bb368e90038e018e615806565b613dec565b836040518363ffffffff1660e01b81526004016120e7929190918252602082015260400190565b600060405180830381600087803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050505b600184600381111561212e5761212e615cea565b1480156121ec57506001600160a01b03851663334871546121576101408d016101208e0161560c565b6121696101808e016101608f01615906565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015264ffffffffff16602482015260440160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec91906156ee565b1561226557846001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612262919061570b565b92505b8261228157811561227c5761227a8886613e46565b505b61229a565b61228c888685613e52565b506122978388615bf7565b96505b505050505080806122aa90615cb9565b91505061205e565b506122d460608501356122cd6120bb36889003880188615806565b8385613e67565b83356122e86101408601610120870161560c565b6001600160a01b03167f5b6693e57e2edc10453988a22e50a605795daee9a5dde66f5267b0dee0a6b60660405160405180910390a350505050565b60335460ff16156123465760405162461bcd60e51b81526004016108a290615a30565b6108d661235836849003840184615806565b826000612c6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b957600080fd5b505afa1580156123cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f19190615629565b6001600160a01b0316336001600160a01b0316146124625760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b60648201526084016108a2565b60335460ff16156124855760405162461bcd60e51b81526004016108a290615a30565b8015612494576108d68261391d565b61249d826132d1565b505050565b600080806124b160c985613647565b909250905060008160038111156124ca576124ca615cea565b146124d6575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615d8683398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561255657600080fd5b505afa15801561256a573d6000803e3d6000fd5b50505050600a61257a60c9613277565b106125d15760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b60648201526084016108a2565b6125dc60c983613fba565b156126295760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016108a2565b6001600160a01b0382166126765760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b60448201526064016108a2565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190615629565b6001600160a01b0316146127475760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016108a2565b61275460c9836001613fc6565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6001604051611a4a919061593d565b600080805b61279e60c9613277565b8110156128465760006127b260c983613647565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ee57600080fd5b505afa158015612802573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612826919061570b565b6128309084615bf7565b925050808061283e90615cb9565b915050612794565b50919050565b6000610d9f60c98361362a565b600082815260cd6020526040812081906128739084613fe4565b915091505b9250929050565b6000610e0660c9613277565b600061289960335460ff1690565b156128b65760405162461bcd60e51b81526004016108a290615a30565b6000806128c460c98661329e565b91509150818015612901575060018160038111156128e4576128e4615cea565b1480612901575060028160038111156128ff576128ff615cea565b145b61295f5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108a2565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e5919061570b565b905080156129f7576129f782826139da565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a8e57600080fd5b505afa158015612aa2573d6000803e3d6000fd5b50505050612aba8460c9613fba90919063ffffffff16565b612afe5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016108a2565b6003836003811115612b1257612b12615cea565b141580612bc55750604051632474521560e21b8152600080516020615dcd83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015612b8d57600080fd5b505afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906156ee565b612c1b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b60648201526084016108a2565b612c2760c98585613fc6565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c84604051612c61919061593d565b60405180910390a250505050565b612c7883613d86565b6101208301518180612c9257506001600160a01b03811633145b612cde5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108a2565b821580612cf657504284610160015164ffffffffff16115b612d425760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108a2565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050508360200151831115612e085760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108a2565b600080841190508460a0015160ce6000828254612e259190615c50565b909155506000905080612e39878488613ff3565b915091508215612f12576000612e4f888461414d565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612e8557612e8281614359565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612f0c5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b60648201526084016108a2565b50612f1f565b612f1c8782614478565b90505b612f288161391d565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612fcd91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd90915281209081818181818161300782826154fc565b505050505050505050505050505050565b60008160405160200161302b9190615af3565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b61306460c9613277565b8110156131ed5760008061307960c984613647565b9092509050600181600381111561309257613092615cea565b1461309e5750506131db565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b1580156130fa57600080fd5b505afa15801561310e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313291906156ee565b61313d5750506131db565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561317857600080fd5b505afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b0919061570b565b9050806131bf575050506131db565b6131c98187615bf7565b95506131d6858483613e52565b505050505b806131e581615cb9565b91505061305a565b5061249d83606001516131ff85613dec565b8484613e67565b6040516001600160a01b03808516602483015283166044820152606481018290526132719085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261475a565b50505050565b6000610d9f8261482c565b60008080806132918686614837565b9097909650945050505050565b60008080806132ad8686614837565b91509150818160038111156132c4576132c4615cea565b9350935050509250929050565b600060d05482116132fb578160d060008282546132ee9190615c50565b9091555060009392505050565b60d054156133185760d0546133109083615c50565b600060d05591505b60cf5460ce54111561336f5760cf5460ce546133349190615c50565b821161334c578160cf60008282546132ee9190615bf7565b60cf5460ce5461335c9190615c50565b6133669083615c50565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561340057600080fd5b505afa158015613414573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156134505761249d8361487a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561348957600080fd5b505afa9250505080156134b9575060408051601f3d908101601f191682019092526134b69181019061570b565b60015b61351c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108a2565b600080516020615d66833981519152811461358b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108a2565b5061249d838383614916565b60335460ff166135e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a2565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000613636838361493b565b6003811115610d8157610d81615cea565b60008080806132ad86866149b5565b600054610100900460ff1661367d5760405162461bcd60e51b81526004016108a290615aa8565b565b600054610100900460ff166136a65760405162461bcd60e51b81526004016108a290615aa8565b61367d6149ea565b600054610100900460ff166136c95760005460ff16156136cd565b303b155b6136e95760405162461bcd60e51b81526004016108a290615a5a565b600054610100900460ff1615801561370b576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156137e257600080fd5b505afa1580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a9190615629565b6001600160a01b0316146138965760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e00000000000060648201526084016108a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b5050505080156110a4576000805461ff001916905550565b806139255750565b8060cf541061394b578060cf60008282546139409190615c50565b909155506110a49050565b60cf54156139685760cf546139609082615c50565b600060cf5590505b8060d0600082825461397a9190615bf7565b909155505050565b60335460ff16156139a55760405162461bcd60e51b81526004016108a290615a30565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861360d3390565b806139e3575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615629565b6001600160a01b031614158015613a9c575080613a9a614a1d565b105b15613b92577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613afa57600080fd5b505afa158015613b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b329190615629565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b8152600401613b5f91815260200190565b600060405180830381600087803b158015613b7957600080fd5b505af1158015613b8d573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613bf657600080fd5b505afa158015613c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2e9190615629565b6001600160a01b031614158015613c4b575080613c49614a1d565b105b15613d52577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613ca957600080fd5b505afa158015613cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce19190615629565b6001600160a01b031663ee842dda613cf7614a1d565b613d019084615c50565b6040518263ffffffff1660e01b8152600401613d1f91815260200190565b600060405180830381600087803b158015613d3957600080fd5b505af1158015613d4d573d6000803e3d6000fd5b505050505b6108d66001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383614ab7565b805115801590613dad57508051600090815260cc6020526040902054613dab82613018565b145b6110a45760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108a2565b6000610d9f613e418360600151846101400151856101600151613e0f9190615c67565b64ffffffffff16613e209190615c31565b610100850151613e3b906a1a1601fc4ea7109e000000614ae7565b90614bb8565b614cb8565b6000610d818383614d36565b6000613e5f848484614d5d565b949350505050565b83821015613ec55760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b60648201526084016108a2565b8360005b613ed283613277565b811015613fb25760008080613ee78685613fe4565b915091506001613ef687613277565b613f009190615c50565b841015613f1c57613f1587613e3b8b84614ae7565b9250613f20565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b158015613f6957600080fd5b505af1158015613f7d573d6000803e3d6000fd5b50613f8f925088915084905085613e52565b50613f9a8386615c50565b94505050508080613faa90615cb9565b915050613ec9565b505050505050565b6000610d818383614d84565b6000613e5f8484846003811115613fdf57613fdf615cea565b614d5d565b600080808061329186866149b5565b600080600080600086156140ed5787516040516331a9108f60e11b81526140ab916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916140559160040190815260200190565b60206040518083038186803b15801561406d57600080fd5b505afa158015614081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a59190615629565b876139da565b858860a0015111156140ce57858860a001516140c79190615c50565b9150614140565b6140e68860a00151876140e19190615c50565b6132d1565b9250614140565b8760a00151915060ce5460cf5411156141405761411960ce5460cf546141139190615c50565b83614d90565b90508060cf600082825461412d9190615c50565b9091555061413d90508183615c50565b91505b5090969095509350505050565b6000808061415a85613dec565b905060008061416887614d9f565b8851600090815260cd602052604081209294509092505b61418882613277565b81101561434c5760008061419c8484613fe4565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b1580156141ea57600080fd5b505af11580156141fe573d6000803e3d6000fd5b50505060608c015161421291508290614bb8565b90506001600160a01b03821663aa69d74b61422d8784614ae7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b15801561426e57600080fd5b505af1158015614282573d6000803e3d6000fd5b5050505060008a111561433757600061429b8b83614ae7565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b1580156142e757600080fd5b505af11580156142fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431f919061570b565b6143299082615c50565b614333908a615bf7565b9850505b5050808061434490615cb9565b91505061417f565b5093979650505050505050565b6000805b61436760c9613277565b8110156144715760008061437c60c984613647565b9092509050600181600381111561439557614395615cea565b146143a157505061445f565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b1580156143ea57600080fd5b505af11580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614422919061570b565b61442c9086615c50565b94507f0000000000000000000000000000000000000000000000000000000000000000851161445c575050614471565b50505b8061446981615cb9565b91505061435d565b5090919050565b60008061448484613dec565b905060008061449286614d9f565b8751600090815260cd602052604081209294509092505b6144b282613277565b81101561474e576000806144c68484613fe4565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561451457600080fd5b505af1158015614528573d6000803e3d6000fd5b50505060608b015161453c91508290614bb8565b90506001600160a01b03821663aa69d74b6145578784614ae7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b15801561459857600080fd5b505af11580156145ac573d6000803e3d6000fd5b5050505060008911801561463057506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145f657600080fd5b505afa15801561460a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462e919061570b565b115b156147395760a08a01516000906146479083614ae7565b90506146cc8a6146c7856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561468957600080fd5b505afa15801561469d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c1919061570b565b84614d90565b614d90565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b50505050808a6147359190615c50565b9950505b5050808061474690615cb9565b9150506144a9565b50949695505050505050565b60006147af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614deb9092919063ffffffff16565b80519091501561249d57808060200190518101906147cd91906156ee565b61249d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108a2565b6000610d9f82614dfa565b6001600160a01b038116600090815260028301602052604081205481908061486f576148638585614d84565b60009250925050612878565b600192509050612878565b6001600160a01b0381163b6148e75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108a2565b600080516020615d6683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61491f83614e04565b60008251118061492c5750805b1561249d576132718383614e44565b6001600160a01b03811660009081526002830160205260408120548015158061496957506149698484614d84565b610d815760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108a2565b600080806149c38585614f38565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff16614a115760405162461bcd60e51b81526004016108a290615aa8565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015614a7f57600080fd5b505afa158015614a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e06919061570b565b6040516001600160a01b03831660248201526044810182905261249d90849063a9059cbb60e01b9060640161323a565b6000821580614af4575081155b15614b0157506000610d9f565b81614b156002670de0b6b3a7640000615c0f565b614b2190600019615c50565b614b2b9190615c0f565b831115614b865760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b670de0b6b3a7640000614b9a600282615c0f565b614ba48486615c31565b614bae9190615bf7565b610d819190615c0f565b600081614c075760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b6000614c14600284615c0f565b9050670de0b6b3a7640000614c2b82600019615c50565b614c359190615c0f565b841115614c905760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614ca4670de0b6b3a764000087615c31565b614cae9190615bf7565b613e5f9190615c0f565b600080614cc9633b9aca0084615c31565b905082614cda633b9aca0083615c0f565b14610d9f5760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b60648201526084016108a2565b6001600160a01b03811660009081526002830160205260408120819055610d818383614f44565b6001600160a01b03821660009081526002840160205260408120829055613e5f8484614f59565b6000610d818383614f6e565b60008183106144715781610d81565b6000806000614dad84614f90565b90508084610100015110614dd857600181856101000151614dce9190615c50565b9250925050915091565b600084610100015182614dce9190615c50565b6060613e5f8484600085614ff7565b6000610d9f825490565b614e0d8161487a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614eac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108a2565b600080846001600160a01b031684604051614ec79190615921565b600060405180830381855af49150503d8060008114614f02576040519150601f19603f3d011682016040523d82523d6000602084013e614f07565b606091505b5091509150614f2f8282604051806060016040528060278152602001615da660279139615128565b95945050505050565b6000610d818383615161565b6000610d81836001600160a01b03841661518b565b6000610d81836001600160a01b03841661527e565b6001600160a01b03811660009081526001830160205260408120541515610d81565b60008082610140015164ffffffffff1642614fab9190615c50565b9050610d81614ff26e0612d847b578e7643c28ac00000000614fec614fcf87613dec565b614fd99086615c31565b614fe68860600151614cb8565b906152cd565b90615388565b61547c565b6060824710156150585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108a2565b6001600160a01b0385163b6150af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108a2565b600080866001600160a01b031685876040516150cb9190615921565b60006040518083038185875af1925050503d8060008114615108576040519150601f19603f3d011682016040523d82523d6000602084013e61510d565b606091505b509150915061511d828286615128565b979650505050505050565b60608315615137575081610d81565b8251156151475782518084602001fd5b8160405162461bcd60e51b81526004016108a29190615965565b600082600001828154811061517857615178615d16565b9060005260206000200154905092915050565b600081815260018301602052604081205480156152745760006151af600183615c50565b85549091506000906151c390600190615c50565b90508181146152285760008660000182815481106151e3576151e3615d16565b906000526020600020015490508087600001848154811061520657615206615d16565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061523957615239615d00565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d9f565b6000915050610d9f565b60008181526001830160205260408120546152c557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d9f565b506000610d9f565b60008215806152da575081155b156152e757506000610d9f565b816152ff60026b033b2e3c9fd0803ce8000000615c0f565b61530b90600019615c50565b6153159190615c0f565b8311156153705760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b6b033b2e3c9fd0803ce8000000614b9a600282615c0f565b6000816153d75760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b60006153e4600284615c0f565b90506b033b2e3c9fd0803ce80000006153ff82600019615c50565b6154099190615c0f565b8411156154645760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614ca46b033b2e3c9fd0803ce800000087615c31565b60008061548e6002633b9aca00615c0f565b9050600061549c8483615bf7565b9050818110156154ee5760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f7760448201526064016108a2565b613e5f633b9aca0082615c0f565b50805460008255906000526020600020908101906110a491905b8082111561336f5760008155600101615516565b8035610fc281615d42565b6000610180828403121561284657600080fd5b6000610180828403121561555b57600080fd5b615563615b9c565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206155c981840161552a565b908201526101406155db8382016155f7565b908201526101606155ed8382016155f7565b9082015292915050565b803564ffffffffff81168114610fc257600080fd5b60006020828403121561561e57600080fd5b8135610d8181615d42565b60006020828403121561563b57600080fd5b8151610d8181615d42565b6000806040838503121561565957600080fd5b823561566481615d42565b915060208381013567ffffffffffffffff8082111561568257600080fd5b818601915086601f83011261569657600080fd5b8135818111156156a8576156a8615d2c565b6156ba601f8201601f19168501615bc6565b915080825287848285010111156156d057600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561570057600080fd5b8151610d8181615d57565b60006020828403121561571d57600080fd5b5051919050565b6000806040838503121561573757600080fd5b823561574281615d42565b915060208301356004811061575657600080fd5b809150509250929050565b6000806040838503121561577457600080fd5b823561577f81615d42565b946020939093013593505050565b600061018082840312156157a057600080fd5b610d818383615535565b6000806101a083850312156157be57600080fd5b6157c88484615535565b915061018083013561575681615d57565b6000806101a083850312156157ed57600080fd5b6157f78484615535565b94610180939093013593505050565b6000610180828403121561581957600080fd5b610d818383615548565b60008060006101c0848603121561583957600080fd5b6158438585615548565b925061018084013561585481615d42565b91506101a08401356bffffffffffffffffffffffff8116811461587657600080fd5b809150509250925092565b60006020828403121561589357600080fd5b5035919050565b600080604083850312156158ad57600080fd5b82359150602083013561575681615d57565b600080604083850312156158d257600080fd5b82359150602083013561575681615d42565b600080604083850312156158f757600080fd5b50508035926020909101359150565b60006020828403121561591857600080fd5b610d81826155f7565b60008251615933818460208701615c8d565b9190910192915050565b602081016004831061595f57634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152615984816040850160208701615c8d565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615b6d828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610ddf565b604051610180810167ffffffffffffffff81118282101715615bc057615bc0615d2c565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615bef57615bef615d2c565b604052919050565b60008219821115615c0a57615c0a615cd4565b500190565b600082615c2c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615c4b57615c4b615cd4565b500290565b600082821015615c6257615c62615cd4565b500390565b600064ffffffffff83811690831681811015615c8557615c85615cd4565b039392505050565b60005b83811015615ca8578181015183820152602001615c90565b838111156132715750506000910152565b6000600019821415615ccd57615ccd615cd4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a457600080fd5b80151581146110a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220ac39d667c6aa70ddd514c799f56070b84a9943190043dc6a2d08953095ab5edc64736f6c63430008060033",
1254
+ "deployedBytecode": "0x6080604052600436106102725760003560e01c806365e29c7e1161014f578063af02808a116100c1578063dea167d51161007a578063dea167d5146107c0578063e5a6b10f146107d5578063e823584a14610808578063f3fef3a31461081d578063f67b2bad1461083d578063fcbb17fe1461085f57600080fd5b8063af02808a146106cc578063b0ec4bcf146106ff578063b63d382e1461071f578063b77ddfea1461073f578063ca143d1814610754578063ce937e7b1461078157600080fd5b8063846253d111610113578063846253d1146105f85780638a9defff146106185780638ca23bc91461063857806398e88ca81461066c5780639e556b2b1461068c578063ab600169146106ac57600080fd5b806365e29c7e1461055257806379502c55146105675780638129fc1c146105ae57806381ced71f146105c35780638456cb59146105e357600080fd5b806343060237116101e8578063536c9a43116101ac578063536c9a431461047d5780635680e145146104925780635b494dd5146104c65780635c975abb146104fa57806363c0f4b11461051d57806365b710081461053257600080fd5b806343060237146103e157806347e7ef24146104015780634a47a3e0146104215780634f1ef2861461045557806352d1902d1461046857600080fd5b806324ea54f41161023a57806324ea54f41461032157806326ccbd22146103435780632a2be82d146103585780633659cfe614610378578063396512fd146103985780633f4ba83a146103cc57600080fd5b8063066dda0e1461027757806319704a3a146102995780631a548a27146102cc5780631c5c4aea146102e1578063220c262b14610301575b600080fd5b34801561028357600080fd5b506102976102923660046157aa565b61087f565b005b3480156102a557600080fd5b506102b96102b4366004615823565b6108da565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b5060ce546102b9565b3480156102ed57600080fd5b506102b96102fc366004615881565b610d88565b34801561030d57600080fd5b506102b961031c3660046158bf565b610da5565b34801561032d57600080fd5b506102b9600080516020615dcd83398151915281565b34801561034f57600080fd5b506102b9610de7565b34801561036457600080fd5b506102b961037336600461560c565b610e0b565b34801561038457600080fd5b5061029761039336600461560c565b610fc7565b3480156103a457600080fd5b506102b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506102976110a7565b3480156103ed57600080fd5b506102976103fc36600461560c565b611154565b34801561040d57600080fd5b5061029761041c366004615761565b611567565b34801561042d57600080fd5b506102b97fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b610297610463366004615646565b6116b9565b34801561047457600080fd5b506102b9611786565b34801561048957600080fd5b5060d0546102b9565b34801561049e57600080fd5b506102b97f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c81565b3480156104d257600080fd5b506102b97f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561050657600080fd5b5060335460ff1660405190151581526020016102c3565b34801561052957600080fd5b506102b9600a81565b34801561053e57600080fd5b5061029761054d36600461560c565b611839565b34801561055e57600080fd5b506102b9611a56565b34801561057357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102c3565b3480156105ba57600080fd5b50610297611b3c565b3480156105cf57600080fd5b506102976105de366004615881565b611bc5565b3480156105ef57600080fd5b50610297611c40565b34801561060457600080fd5b506102b9610613366004615881565b611cd6565b34801561062457600080fd5b5061029761063336600461578d565b611ecc565b34801561064457600080fd5b506102b97fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561067857600080fd5b5061029761068736600461578d565b611f6b565b34801561069857600080fd5b506102976106a73660046157d9565b612323565b3480156106b857600080fd5b506102976106c736600461589a565b612360565b3480156106d857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561070b57600080fd5b5061059661071a366004615881565b6124a2565b34801561072b57600080fd5b5061029761073a36600461560c565b6124e0565b34801561074b57600080fd5b506102b961278f565b34801561076057600080fd5b5061077461076f36600461560c565b61284c565b6040516102c3919061593d565b34801561078d57600080fd5b506107a161079c3660046158e4565b612859565b604080516001600160a01b0390931683526020830191909152016102c3565b3480156107cc57600080fd5b506102b961287f565b3480156107e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561081457600080fd5b5060cf546102b9565b34801561082957600080fd5b506102b9610838366004615761565b61288b565b34801561084957600080fd5b506102b9600080516020615d8683398151915281565b34801561086b57600080fd5b5061029761087a366004615724565b612a01565b60335460ff16156108ab5760405162461bcd60e51b81526004016108a290615a30565b60405180910390fd5b6108d66108bd36849003840184615806565b826108c95760006108cf565b83602001355b6000612c6f565b5050565b60006108e860335460ff1690565b156109055760405162461bcd60e51b81526004016108a290615a30565b6101208401516001600160a01b038116331461096f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108a2565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b610a0f9190615bf7565b8552610a1a85613018565b8551600090815260cc602052604081209190915560a086015160ce805491929091610a46908490615bf7565b90915550610a55905085613048565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610b2884308761010001518860a00151610af69190615bf7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b610bf4847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190615629565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b60008560e00151118015610c8a5750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190615629565b6001600160a01b0316846001600160a01b031614155b15610d3b57610d3b84826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190615629565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613206565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d749190615af3565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d9f90613277565b92915050565b600082815260cd6020526040812081908190610dc19085613282565b915091508115610dd4579150610d9f9050565b600092505050610d9f565b505092915050565b600060cf5460d05460ce54610dfc9190615bf7565b610e069190615c50565b905090565b6000610e1960335460ff1690565b15610e365760405162461bcd60e51b81526004016108a290615a30565b600080610e4460c98561329e565b91509150818015610e8157506001816003811115610e6457610e64615cea565b1480610e8157506002816003811115610e7f57610e7f615cea565b145b610ec45760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f37919061570b565b90506000610f44826132d1565b90506001600160a01b038616631c0f4f81610f5f8385615c50565b6040518263ffffffff1660e01b8152600401610f7d91815260200190565b600060405180830381600087803b158015610f9757600080fd5b505af1158015610fab573d6000803e3d6000fd5b505050508082610fbb9190615c50565b9450505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110105760405162461bcd60e51b81526004016108a290615998565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059600080516020615d66833981519152546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016108a2906159e4565b61108881613373565b604080516000808252602082019092526110a49183919061341d565b50565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506108d6613597565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111e65760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b60648201526084016108a2565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190615629565b6001600160a01b0316146114b5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190615629565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190615629565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b391906156ee565b505b6001600160a01b038116156110a45760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d691906156ee565b60335460ff161561158a5760405162461bcd60e51b81526004016108a290615a30565b60008061159860c98561329e565b915091508180156115ba575060018160038111156115b8576115b8615cea565b145b6115fd5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6116326001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086613206565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b2919061570b565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117025760405162461bcd60e51b81526004016108a290615998565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661174b600080516020615d66833981519152546001600160a01b031690565b6001600160a01b0316146117715760405162461bcd60e51b81526004016108a2906159e4565b61177a82613373565b6108d68282600161341d565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108a2565b50600080516020615d6683398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156118c157600080fd5b505afa1580156118d5573d6000803e3d6000fd5b50600292506118e2915050565b6118ed60c98461362a565b60038111156118fe576118fe615cea565b146119435760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016108a2565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b4919061570b565b15611a105760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108a2565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6000604051611a4a919061593d565b60405180910390a25050565b600080805b611a6560c9613277565b811015611b0d576000611a7960c983613647565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed919061570b565b611af79084615bf7565b9250508080611b0590615cb9565b915050611a5b565b506000611b18610de7565b905081811115611b3357611b2c8282615c50565b9250505090565b60009250505090565b600054610100900460ff16611b575760005460ff1615611b5b565b303b155b611b775760405162461bcd60e51b81526004016108a290615a5a565b600054610100900460ff16158015611b99576000805461ffff19166101011790555b611ba1613656565b611ba961367f565b611bb16136ae565b80156110a4576000805461ff001916905550565b611bfa6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084613206565b611c038161391d565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615dcd83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506110a4613982565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b5050505060d054831115611d885760d05492505b60008311611dd85760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f20776974686472617700000000000000000060448201526064016108a2565b8260d06000828254611dea9190615c50565b92505081905550611e8b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4d57600080fd5b505afa158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190615629565b846139da565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611eef5760405162461bcd60e51b81526004016108a290615a30565b42611f0261018083016101608401615906565b64ffffffffff161115611f505760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108a2565b6110a4611f6236839003830183615806565b60006001612c6f565b6040516312d9a6ad60e01b81527f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c60048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ff357600080fd5b505afa158015612007573d6000803e3d6000fd5b5050505061201760335460ff1690565b156120345760405162461bcd60e51b81526004016108a290615a30565b61204b61204636849003840184615806565b613d86565b8135600090815260cd6020526040812090805b61206860c9613277565b8110156122b25760008061207d60c984613647565b9092509050600080806120908886613282565b91509150811561211a576001600160a01b038516634438bcbb6120c06120bb368e90038e018e615806565b613dec565b836040518363ffffffff1660e01b81526004016120e7929190918252602082015260400190565b600060405180830381600087803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050505b600184600381111561212e5761212e615cea565b1480156121ec57506001600160a01b03851663334871546121576101408d016101208e0161560c565b6121696101808e016101608f01615906565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015264ffffffffff16602482015260440160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec91906156ee565b1561226557846001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612262919061570b565b92505b8261228157811561227c5761227a8886613e46565b505b61229a565b61228c888685613e52565b506122978388615bf7565b96505b505050505080806122aa90615cb9565b91505061205e565b506122d460608501356122cd6120bb36889003880188615806565b8385613e67565b83356122e86101408601610120870161560c565b6001600160a01b03167f5b6693e57e2edc10453988a22e50a605795daee9a5dde66f5267b0dee0a6b60660405160405180910390a350505050565b60335460ff16156123465760405162461bcd60e51b81526004016108a290615a30565b6108d661235836849003840184615806565b826000612c6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b957600080fd5b505afa1580156123cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f19190615629565b6001600160a01b0316336001600160a01b0316146124625760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b60648201526084016108a2565b60335460ff16156124855760405162461bcd60e51b81526004016108a290615a30565b8015612494576108d68261391d565b61249d826132d1565b505050565b600080806124b160c985613647565b909250905060008160038111156124ca576124ca615cea565b146124d6575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615d8683398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561255657600080fd5b505afa15801561256a573d6000803e3d6000fd5b50505050600a61257a60c9613277565b106125d15760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b60648201526084016108a2565b6125dc60c983613fba565b156126295760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016108a2565b6001600160a01b0382166126765760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b60448201526064016108a2565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190615629565b6001600160a01b0316146127475760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016108a2565b61275460c9836001613fc6565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6001604051611a4a919061593d565b600080805b61279e60c9613277565b8110156128465760006127b260c983613647565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ee57600080fd5b505afa158015612802573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612826919061570b565b6128309084615bf7565b925050808061283e90615cb9565b915050612794565b50919050565b6000610d9f60c98361362a565b600082815260cd6020526040812081906128739084613fe4565b915091505b9250929050565b6000610e0660c9613277565b600061289960335460ff1690565b156128b65760405162461bcd60e51b81526004016108a290615a30565b6000806128c460c98661329e565b91509150818015612901575060018160038111156128e4576128e4615cea565b1480612901575060028160038111156128ff576128ff615cea565b145b61295f5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108a2565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e5919061570b565b905080156129f7576129f782826139da565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a8e57600080fd5b505afa158015612aa2573d6000803e3d6000fd5b50505050612aba8460c9613fba90919063ffffffff16565b612afe5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016108a2565b6003836003811115612b1257612b12615cea565b141580612bc55750604051632474521560e21b8152600080516020615dcd83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015612b8d57600080fd5b505afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906156ee565b612c1b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b60648201526084016108a2565b612c2760c98585613fc6565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c84604051612c61919061593d565b60405180910390a250505050565b612c7883613d86565b6101208301518180612c9257506001600160a01b03811633145b612cde5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108a2565b821580612cf657504284610160015164ffffffffff16115b612d425760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108a2565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050508360200151831115612e085760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108a2565b600080841190508460a0015160ce6000828254612e259190615c50565b909155506000905080612e39878488613ff3565b915091508215612f12576000612e4f888461414d565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612e8557612e8281614359565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612f0c5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b60648201526084016108a2565b50612f1f565b612f1c8782614478565b90505b612f288161391d565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612fcd91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd90915281209081818181818161300782826154fc565b505050505050505050505050505050565b60008160405160200161302b9190615af3565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b61306460c9613277565b8110156131ed5760008061307960c984613647565b9092509050600181600381111561309257613092615cea565b1461309e5750506131db565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b1580156130fa57600080fd5b505afa15801561310e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313291906156ee565b61313d5750506131db565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561317857600080fd5b505afa15801561318c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b0919061570b565b9050806131bf575050506131db565b6131c98187615bf7565b95506131d6858483613e52565b505050505b806131e581615cb9565b91505061305a565b5061249d83606001516131ff85613dec565b8484613e67565b6040516001600160a01b03808516602483015283166044820152606481018290526132719085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261475a565b50505050565b6000610d9f8261482c565b60008080806132918686614837565b9097909650945050505050565b60008080806132ad8686614837565b91509150818160038111156132c4576132c4615cea565b9350935050509250929050565b600060d05482116132fb578160d060008282546132ee9190615c50565b9091555060009392505050565b60d054156133185760d0546133109083615c50565b600060d05591505b60cf5460ce54111561336f5760cf5460ce546133349190615c50565b821161334c578160cf60008282546132ee9190615bf7565b60cf5460ce5461335c9190615c50565b6133669083615c50565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615dcd83398151915260048201819052600080516020615d868339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561340057600080fd5b505afa158015613414573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156134505761249d8361487a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561348957600080fd5b505afa9250505080156134b9575060408051601f3d908101601f191682019092526134b69181019061570b565b60015b61351c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108a2565b600080516020615d66833981519152811461358b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108a2565b5061249d838383614916565b60335460ff166135e05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a2565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000613636838361493b565b6003811115610d8157610d81615cea565b60008080806132ad86866149b5565b600054610100900460ff1661367d5760405162461bcd60e51b81526004016108a290615aa8565b565b600054610100900460ff166136a65760405162461bcd60e51b81526004016108a290615aa8565b61367d6149ea565b600054610100900460ff166136c95760005460ff16156136cd565b303b155b6136e95760405162461bcd60e51b81526004016108a290615a5a565b600054610100900460ff1615801561370b576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156137e257600080fd5b505afa1580156137f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381a9190615629565b6001600160a01b0316146138965760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e00000000000060648201526084016108a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138f157600080fd5b505af1158015613905573d6000803e3d6000fd5b5050505080156110a4576000805461ff001916905550565b806139255750565b8060cf541061394b578060cf60008282546139409190615c50565b909155506110a49050565b60cf54156139685760cf546139609082615c50565b600060cf5590505b8060d0600082825461397a9190615bf7565b909155505050565b60335460ff16156139a55760405162461bcd60e51b81526004016108a290615a30565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861360d3390565b806139e3575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7f9190615629565b6001600160a01b031614158015613a9c575080613a9a614a1d565b105b15613b92577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613afa57600080fd5b505afa158015613b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b329190615629565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b8152600401613b5f91815260200190565b600060405180830381600087803b158015613b7957600080fd5b505af1158015613b8d573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613bf657600080fd5b505afa158015613c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2e9190615629565b6001600160a01b031614158015613c4b575080613c49614a1d565b105b15613d52577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613ca957600080fd5b505afa158015613cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce19190615629565b6001600160a01b031663ee842dda613cf7614a1d565b613d019084615c50565b6040518263ffffffff1660e01b8152600401613d1f91815260200190565b600060405180830381600087803b158015613d3957600080fd5b505af1158015613d4d573d6000803e3d6000fd5b505050505b6108d66001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383614ab7565b805115801590613dad57508051600090815260cc6020526040902054613dab82613018565b145b6110a45760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108a2565b6000610d9f613e418360600151846101400151856101600151613e0f9190615c67565b64ffffffffff16613e209190615c31565b610100850151613e3b906a1a1601fc4ea7109e000000614ae7565b90614bb8565b614cb8565b6000610d818383614d36565b6000613e5f848484614d5d565b949350505050565b83821015613ec55760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b60648201526084016108a2565b8360005b613ed283613277565b811015613fb25760008080613ee78685613fe4565b915091506001613ef687613277565b613f009190615c50565b841015613f1c57613f1587613e3b8b84614ae7565b9250613f20565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b158015613f6957600080fd5b505af1158015613f7d573d6000803e3d6000fd5b50613f8f925088915084905085613e52565b50613f9a8386615c50565b94505050508080613faa90615cb9565b915050613ec9565b505050505050565b6000610d818383614d84565b6000613e5f8484846003811115613fdf57613fdf615cea565b614d5d565b600080808061329186866149b5565b600080600080600086156140ed5787516040516331a9108f60e11b81526140ab916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916140559160040190815260200190565b60206040518083038186803b15801561406d57600080fd5b505afa158015614081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140a59190615629565b876139da565b858860a0015111156140ce57858860a001516140c79190615c50565b9150614140565b6140e68860a00151876140e19190615c50565b6132d1565b9250614140565b8760a00151915060ce5460cf5411156141405761411960ce5460cf546141139190615c50565b83614d90565b90508060cf600082825461412d9190615c50565b9091555061413d90508183615c50565b91505b5090969095509350505050565b6000808061415a85613dec565b905060008061416887614d9f565b8851600090815260cd602052604081209294509092505b61418882613277565b81101561434c5760008061419c8484613fe4565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b1580156141ea57600080fd5b505af11580156141fe573d6000803e3d6000fd5b50505060608c015161421291508290614bb8565b90506001600160a01b03821663aa69d74b61422d8784614ae7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b15801561426e57600080fd5b505af1158015614282573d6000803e3d6000fd5b5050505060008a111561433757600061429b8b83614ae7565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b1580156142e757600080fd5b505af11580156142fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431f919061570b565b6143299082615c50565b614333908a615bf7565b9850505b5050808061434490615cb9565b91505061417f565b5093979650505050505050565b6000805b61436760c9613277565b8110156144715760008061437c60c984613647565b9092509050600181600381111561439557614395615cea565b146143a157505061445f565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b1580156143ea57600080fd5b505af11580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614422919061570b565b61442c9086615c50565b94507f0000000000000000000000000000000000000000000000000000000000000000851161445c575050614471565b50505b8061446981615cb9565b91505061435d565b5090919050565b60008061448484613dec565b905060008061449286614d9f565b8751600090815260cd602052604081209294509092505b6144b282613277565b81101561474e576000806144c68484613fe4565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561451457600080fd5b505af1158015614528573d6000803e3d6000fd5b50505060608b015161453c91508290614bb8565b90506001600160a01b03821663aa69d74b6145578784614ae7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b15801561459857600080fd5b505af11580156145ac573d6000803e3d6000fd5b5050505060008911801561463057506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145f657600080fd5b505afa15801561460a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061462e919061570b565b115b156147395760a08a01516000906146479083614ae7565b90506146cc8a6146c7856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561468957600080fd5b505afa15801561469d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146c1919061570b565b84614d90565b614d90565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b50505050808a6147359190615c50565b9950505b5050808061474690615cb9565b9150506144a9565b50949695505050505050565b60006147af826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614deb9092919063ffffffff16565b80519091501561249d57808060200190518101906147cd91906156ee565b61249d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108a2565b6000610d9f82614dfa565b6001600160a01b038116600090815260028301602052604081205481908061486f576148638585614d84565b60009250925050612878565b600192509050612878565b6001600160a01b0381163b6148e75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108a2565b600080516020615d6683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61491f83614e04565b60008251118061492c5750805b1561249d576132718383614e44565b6001600160a01b03811660009081526002830160205260408120548015158061496957506149698484614d84565b610d815760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108a2565b600080806149c38585614f38565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff16614a115760405162461bcd60e51b81526004016108a290615aa8565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015614a7f57600080fd5b505afa158015614a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e06919061570b565b6040516001600160a01b03831660248201526044810182905261249d90849063a9059cbb60e01b9060640161323a565b6000821580614af4575081155b15614b0157506000610d9f565b81614b156002670de0b6b3a7640000615c0f565b614b2190600019615c50565b614b2b9190615c0f565b831115614b865760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b670de0b6b3a7640000614b9a600282615c0f565b614ba48486615c31565b614bae9190615bf7565b610d819190615c0f565b600081614c075760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b6000614c14600284615c0f565b9050670de0b6b3a7640000614c2b82600019615c50565b614c359190615c0f565b841115614c905760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614ca4670de0b6b3a764000087615c31565b614cae9190615bf7565b613e5f9190615c0f565b600080614cc9633b9aca0084615c31565b905082614cda633b9aca0083615c0f565b14610d9f5760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b60648201526084016108a2565b6001600160a01b03811660009081526002830160205260408120819055610d818383614f44565b6001600160a01b03821660009081526002840160205260408120829055613e5f8484614f59565b6000610d818383614f6e565b60008183106144715781610d81565b6000806000614dad84614f90565b90508084610100015110614dd857600181856101000151614dce9190615c50565b9250925050915091565b600084610100015182614dce9190615c50565b6060613e5f8484600085614ff7565b6000610d9f825490565b614e0d8161487a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614eac5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108a2565b600080846001600160a01b031684604051614ec79190615921565b600060405180830381855af49150503d8060008114614f02576040519150601f19603f3d011682016040523d82523d6000602084013e614f07565b606091505b5091509150614f2f8282604051806060016040528060278152602001615da660279139615128565b95945050505050565b6000610d818383615161565b6000610d81836001600160a01b03841661518b565b6000610d81836001600160a01b03841661527e565b6001600160a01b03811660009081526001830160205260408120541515610d81565b60008082610140015164ffffffffff1642614fab9190615c50565b9050610d81614ff26e0612d847b578e7643c28ac00000000614fec614fcf87613dec565b614fd99086615c31565b614fe68860600151614cb8565b906152cd565b90615388565b61547c565b6060824710156150585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108a2565b6001600160a01b0385163b6150af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108a2565b600080866001600160a01b031685876040516150cb9190615921565b60006040518083038185875af1925050503d8060008114615108576040519150601f19603f3d011682016040523d82523d6000602084013e61510d565b606091505b509150915061511d828286615128565b979650505050505050565b60608315615137575081610d81565b8251156151475782518084602001fd5b8160405162461bcd60e51b81526004016108a29190615965565b600082600001828154811061517857615178615d16565b9060005260206000200154905092915050565b600081815260018301602052604081205480156152745760006151af600183615c50565b85549091506000906151c390600190615c50565b90508181146152285760008660000182815481106151e3576151e3615d16565b906000526020600020015490508087600001848154811061520657615206615d16565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061523957615239615d00565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d9f565b6000915050610d9f565b60008181526001830160205260408120546152c557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d9f565b506000610d9f565b60008215806152da575081155b156152e757506000610d9f565b816152ff60026b033b2e3c9fd0803ce8000000615c0f565b61530b90600019615c50565b6153159190615c0f565b8311156153705760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b6b033b2e3c9fd0803ce8000000614b9a600282615c0f565b6000816153d75760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b60006153e4600284615c0f565b90506b033b2e3c9fd0803ce80000006153ff82600019615c50565b6154099190615c0f565b8411156154645760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614ca46b033b2e3c9fd0803ce800000087615c31565b60008061548e6002633b9aca00615c0f565b9050600061549c8483615bf7565b9050818110156154ee5760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f7760448201526064016108a2565b613e5f633b9aca0082615c0f565b50805460008255906000526020600020908101906110a491905b8082111561336f5760008155600101615516565b8035610fc281615d42565b6000610180828403121561284657600080fd5b6000610180828403121561555b57600080fd5b615563615b9c565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206155c981840161552a565b908201526101406155db8382016155f7565b908201526101606155ed8382016155f7565b9082015292915050565b803564ffffffffff81168114610fc257600080fd5b60006020828403121561561e57600080fd5b8135610d8181615d42565b60006020828403121561563b57600080fd5b8151610d8181615d42565b6000806040838503121561565957600080fd5b823561566481615d42565b915060208381013567ffffffffffffffff8082111561568257600080fd5b818601915086601f83011261569657600080fd5b8135818111156156a8576156a8615d2c565b6156ba601f8201601f19168501615bc6565b915080825287848285010111156156d057600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561570057600080fd5b8151610d8181615d57565b60006020828403121561571d57600080fd5b5051919050565b6000806040838503121561573757600080fd5b823561574281615d42565b915060208301356004811061575657600080fd5b809150509250929050565b6000806040838503121561577457600080fd5b823561577f81615d42565b946020939093013593505050565b600061018082840312156157a057600080fd5b610d818383615535565b6000806101a083850312156157be57600080fd5b6157c88484615535565b915061018083013561575681615d57565b6000806101a083850312156157ed57600080fd5b6157f78484615535565b94610180939093013593505050565b6000610180828403121561581957600080fd5b610d818383615548565b60008060006101c0848603121561583957600080fd5b6158438585615548565b925061018084013561585481615d42565b91506101a08401356bffffffffffffffffffffffff8116811461587657600080fd5b809150509250925092565b60006020828403121561589357600080fd5b5035919050565b600080604083850312156158ad57600080fd5b82359150602083013561575681615d57565b600080604083850312156158d257600080fd5b82359150602083013561575681615d42565b600080604083850312156158f757600080fd5b50508035926020909101359150565b60006020828403121561591857600080fd5b610d81826155f7565b60008251615933818460208701615c8d565b9190910192915050565b602081016004831061595f57634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152615984816040850160208701615c8d565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615b6d828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610ddf565b604051610180810167ffffffffffffffff81118282101715615bc057615bc0615d2c565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615bef57615bef615d2c565b604052919050565b60008219821115615c0a57615c0a615cd4565b500190565b600082615c2c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615c4b57615c4b615cd4565b500290565b600082821015615c6257615c62615cd4565b500390565b600064ffffffffff83811690831681811015615c8557615c85615cd4565b039392505050565b60005b83811015615ca8578181015183820152602001615c90565b838111156132715750506000910152565b6000600019821415615ccd57615ccd615cd4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a457600080fd5b80151581146110a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220ac39d667c6aa70ddd514c799f56070b84a9943190043dc6a2d08953095ab5edc64736f6c63430008060033",
1255
+ "linkReferences": {},
1256
+ "deployedLinkReferences": {}
1257
+ }