@cofhe/mock-contracts 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +63 -9
- package/contracts/MockTaskManager.sol +86 -1
- package/contracts/{MockQueryDecrypter.sol → MockThresholdNetwork.sol} +67 -1
- package/contracts/TestBed.sol +34 -2
- package/contracts/foundry/CoFheTest.sol +47 -27
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +327 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +327 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/MockACL.ts +1 -1
- package/src/MockTaskManager.ts +184 -1
- package/src/MockThresholdNetwork.ts +457 -0
- package/src/MockZkVerifier.ts +1 -1
- package/src/TestBed.ts +31 -8
- package/src/index.ts +1 -1
- package/test/TestBed.t.sol +18 -7
- package/src/MockQueryDecrypter.ts +0 -352
package/src/MockTaskManager.ts
CHANGED
|
@@ -158,6 +158,35 @@ export const MockTaskManagerArtifact = {
|
|
|
158
158
|
outputs: [],
|
|
159
159
|
stateMutability: 'nonpayable',
|
|
160
160
|
},
|
|
161
|
+
{
|
|
162
|
+
type: 'function',
|
|
163
|
+
name: 'createRandomTask',
|
|
164
|
+
inputs: [
|
|
165
|
+
{
|
|
166
|
+
name: 'returnType',
|
|
167
|
+
type: 'uint8',
|
|
168
|
+
internalType: 'uint8',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'seed',
|
|
172
|
+
type: 'uint256',
|
|
173
|
+
internalType: 'uint256',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'securityZone',
|
|
177
|
+
type: 'int32',
|
|
178
|
+
internalType: 'int32',
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
outputs: [
|
|
182
|
+
{
|
|
183
|
+
name: '',
|
|
184
|
+
type: 'uint256',
|
|
185
|
+
internalType: 'uint256',
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
stateMutability: 'nonpayable',
|
|
189
|
+
},
|
|
161
190
|
{
|
|
162
191
|
type: 'function',
|
|
163
192
|
name: 'createTask',
|
|
@@ -192,6 +221,19 @@ export const MockTaskManagerArtifact = {
|
|
|
192
221
|
],
|
|
193
222
|
stateMutability: 'nonpayable',
|
|
194
223
|
},
|
|
224
|
+
{
|
|
225
|
+
type: 'function',
|
|
226
|
+
name: 'decryptResultSigner',
|
|
227
|
+
inputs: [],
|
|
228
|
+
outputs: [
|
|
229
|
+
{
|
|
230
|
+
name: '',
|
|
231
|
+
type: 'address',
|
|
232
|
+
internalType: 'address',
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
stateMutability: 'view',
|
|
236
|
+
},
|
|
195
237
|
{
|
|
196
238
|
type: 'function',
|
|
197
239
|
name: 'exists',
|
|
@@ -429,6 +471,25 @@ export const MockTaskManagerArtifact = {
|
|
|
429
471
|
],
|
|
430
472
|
stateMutability: 'view',
|
|
431
473
|
},
|
|
474
|
+
{
|
|
475
|
+
type: 'function',
|
|
476
|
+
name: 'isPubliclyAllowed',
|
|
477
|
+
inputs: [
|
|
478
|
+
{
|
|
479
|
+
name: 'ctHash',
|
|
480
|
+
type: 'uint256',
|
|
481
|
+
internalType: 'uint256',
|
|
482
|
+
},
|
|
483
|
+
],
|
|
484
|
+
outputs: [
|
|
485
|
+
{
|
|
486
|
+
name: '',
|
|
487
|
+
type: 'bool',
|
|
488
|
+
internalType: 'bool',
|
|
489
|
+
},
|
|
490
|
+
],
|
|
491
|
+
stateMutability: 'view',
|
|
492
|
+
},
|
|
432
493
|
{
|
|
433
494
|
type: 'function',
|
|
434
495
|
name: 'logOps',
|
|
@@ -461,6 +522,52 @@ export const MockTaskManagerArtifact = {
|
|
|
461
522
|
],
|
|
462
523
|
stateMutability: 'view',
|
|
463
524
|
},
|
|
525
|
+
{
|
|
526
|
+
type: 'function',
|
|
527
|
+
name: 'publishDecryptResult',
|
|
528
|
+
inputs: [
|
|
529
|
+
{
|
|
530
|
+
name: 'ctHash',
|
|
531
|
+
type: 'uint256',
|
|
532
|
+
internalType: 'uint256',
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
name: 'result',
|
|
536
|
+
type: 'uint256',
|
|
537
|
+
internalType: 'uint256',
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: 'signature',
|
|
541
|
+
type: 'bytes',
|
|
542
|
+
internalType: 'bytes',
|
|
543
|
+
},
|
|
544
|
+
],
|
|
545
|
+
outputs: [],
|
|
546
|
+
stateMutability: 'nonpayable',
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
type: 'function',
|
|
550
|
+
name: 'publishDecryptResultBatch',
|
|
551
|
+
inputs: [
|
|
552
|
+
{
|
|
553
|
+
name: 'ctHashes',
|
|
554
|
+
type: 'uint256[]',
|
|
555
|
+
internalType: 'uint256[]',
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
name: 'results',
|
|
559
|
+
type: 'uint256[]',
|
|
560
|
+
internalType: 'uint256[]',
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: 'signatures',
|
|
564
|
+
type: 'bytes[]',
|
|
565
|
+
internalType: 'bytes[]',
|
|
566
|
+
},
|
|
567
|
+
],
|
|
568
|
+
outputs: [],
|
|
569
|
+
stateMutability: 'nonpayable',
|
|
570
|
+
},
|
|
464
571
|
{
|
|
465
572
|
type: 'function',
|
|
466
573
|
name: 'removeFirstLetter',
|
|
@@ -506,6 +613,19 @@ export const MockTaskManagerArtifact = {
|
|
|
506
613
|
outputs: [],
|
|
507
614
|
stateMutability: 'nonpayable',
|
|
508
615
|
},
|
|
616
|
+
{
|
|
617
|
+
type: 'function',
|
|
618
|
+
name: 'setDecryptResultSigner',
|
|
619
|
+
inputs: [
|
|
620
|
+
{
|
|
621
|
+
name: 'signer',
|
|
622
|
+
type: 'address',
|
|
623
|
+
internalType: 'address',
|
|
624
|
+
},
|
|
625
|
+
],
|
|
626
|
+
outputs: [],
|
|
627
|
+
stateMutability: 'nonpayable',
|
|
628
|
+
},
|
|
509
629
|
{
|
|
510
630
|
type: 'function',
|
|
511
631
|
name: 'setLogOps',
|
|
@@ -605,6 +725,64 @@ export const MockTaskManagerArtifact = {
|
|
|
605
725
|
],
|
|
606
726
|
stateMutability: 'pure',
|
|
607
727
|
},
|
|
728
|
+
{
|
|
729
|
+
type: 'function',
|
|
730
|
+
name: 'verifyDecryptResult',
|
|
731
|
+
inputs: [
|
|
732
|
+
{
|
|
733
|
+
name: 'ctHash',
|
|
734
|
+
type: 'uint256',
|
|
735
|
+
internalType: 'uint256',
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
name: 'result',
|
|
739
|
+
type: 'uint256',
|
|
740
|
+
internalType: 'uint256',
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
name: 'signature',
|
|
744
|
+
type: 'bytes',
|
|
745
|
+
internalType: 'bytes',
|
|
746
|
+
},
|
|
747
|
+
],
|
|
748
|
+
outputs: [
|
|
749
|
+
{
|
|
750
|
+
name: '',
|
|
751
|
+
type: 'bool',
|
|
752
|
+
internalType: 'bool',
|
|
753
|
+
},
|
|
754
|
+
],
|
|
755
|
+
stateMutability: 'view',
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
type: 'function',
|
|
759
|
+
name: 'verifyDecryptResultSafe',
|
|
760
|
+
inputs: [
|
|
761
|
+
{
|
|
762
|
+
name: 'ctHash',
|
|
763
|
+
type: 'uint256',
|
|
764
|
+
internalType: 'uint256',
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
name: 'result',
|
|
768
|
+
type: 'uint256',
|
|
769
|
+
internalType: 'uint256',
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
name: 'signature',
|
|
773
|
+
type: 'bytes',
|
|
774
|
+
internalType: 'bytes',
|
|
775
|
+
},
|
|
776
|
+
],
|
|
777
|
+
outputs: [
|
|
778
|
+
{
|
|
779
|
+
name: '',
|
|
780
|
+
type: 'bool',
|
|
781
|
+
internalType: 'bool',
|
|
782
|
+
},
|
|
783
|
+
],
|
|
784
|
+
stateMutability: 'view',
|
|
785
|
+
},
|
|
608
786
|
{
|
|
609
787
|
type: 'function',
|
|
610
788
|
name: 'verifyInput',
|
|
@@ -958,6 +1136,11 @@ export const MockTaskManagerArtifact = {
|
|
|
958
1136
|
},
|
|
959
1137
|
],
|
|
960
1138
|
},
|
|
1139
|
+
{
|
|
1140
|
+
type: 'error',
|
|
1141
|
+
name: 'NotImplemented',
|
|
1142
|
+
inputs: [],
|
|
1143
|
+
},
|
|
961
1144
|
{
|
|
962
1145
|
type: 'error',
|
|
963
1146
|
name: 'OnlyAggregatorAllowed',
|
|
@@ -1024,5 +1207,5 @@ export const MockTaskManagerArtifact = {
|
|
|
1024
1207
|
},
|
|
1025
1208
|
],
|
|
1026
1209
|
deployedBytecode:
|
|
1027
|
-
'0x608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063642b3f191161010d578063a307d21d116100a0578063de2873591161006f578063de287359146105bd578063e68d826f146105db578063f6bc7f3f146105f9578063f9120af614610629576101ee565b8063a307d21d14610525578063ae79f04a14610541578063c4d66de814610571578063d521ed4b1461058d576101ee565b80638b2b9c23116100dc5780638b2b9c23146104b55780638d9c9c92146104d15780638db39c8d146104ed57806392bd6c9514610509576101ee565b8063642b3f191461043157806365d0509c1461044d5780637e5cf5191461046957806381ba098614610499576101ee565b806327f9c762116101855780634bc98263116101545780634bc98263146103ad578063591363c7146103c95780635faa299a146103e55780635fb0bf9114610415576101ee565b806327f9c7621461031257806334ef1e5a14610342578063392e53cd1461035e578063458693c91461037c576101ee565b80631d031931116101c15780631d0319311461028a578063245a7bfc146102ba57806326594a0c146102d8578063267c4ae4146102f4576101ee565b806308289827146101f257806315a486fe1461020e5780631888debd1461022a5780631c76642b1461025a575b5f5ffd5b61020c6004803603810190610207919061609e565b610645565b005b610228600480360381019061022391906160dc565b6106f8565b005b610244600480360381019061023f91906162c3565b610706565b604051610251919061636e565b60405180910390f35b610274600480360381019061026f9190616387565b6108aa565b604051610281919061636e565b60405180910390f35b6102a4600480360381019061029f9190616387565b6108bf565b6040516102b191906163cc565b60405180910390f35b6102c26108dc565b6040516102cf91906163f4565b60405180910390f35b6102f260048036038101906102ed9190616443565b610902565b005b6102fc6109de565b60405161030991906163cc565b60405180910390f35b61032c600480360381019061032791906165ca565b6109e6565b604051610339919061636e565b60405180910390f35b61035c60048036038101906103579190616387565b610c20565b005b610366610cfa565b60405161037391906163cc565b60405180910390f35b61039660048036038101906103919190616387565b610d10565b6040516103a4929190616624565b60405180910390f35b6103c760048036038101906103c291906166e9565b610d95565b005b6103e360048036038101906103de9190616771565b610e67565b005b6103ff60048036038101906103fa919061609e565b610f99565b60405161040c91906163cc565b60405180910390f35b61042f600480360381019061042a9190616771565b611055565b005b61044b600480360381019061044691906167c6565b611187565b005b6104676004803603810190610462919061609e565b6111a2565b005b610483600480360381019061047e91906167f1565b6112ee565b60405161049091906168bd565b60405180910390f35b6104b360048036038101906104ae9190616936565b611424565b005b6104cf60048036038101906104ca91906169a7565b611532565b005b6104eb60048036038101906104e6919061609e565b611542565b005b61050760048036038101906105029190616a13565b61161f565b005b610523600480360381019061051e9190616a13565b6116f3565b005b61053f600480360381019061053a9190616387565b61182c565b005b61055b60048036038101906105569190616bad565b611974565b60405161056891906163cc565b60405180910390f35b61058b60048036038101906105869190616a13565b611a18565b005b6105a760048036038101906105a29190616c07565b611ab6565b6040516105b491906168bd565b60405180910390f35b6105c5611bcb565b6040516105d29190616ca9565b60405180910390f35b6105e3611bf0565b6040516105f091906163cc565b60405180910390f35b610613600480360381019061060e9190616387565b611c01565b604051610620919061636e565b60405180910390f35b610643600480360381019061063e9190616a13565b611c5d565b005b61064e82611d97565b600160055f8481526020019081526020015f205f6101000a81548160ff02191690831515021790555061068082611e86565b60045f8481526020019081526020015f20819055505f6001600a426106a59190616cef565b6106af9190616d4c565b905080426106bd9190616d7f565b60065f8581526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6107028282611f0e565b5050565b5f601b601f81111561071b5761071a616dba565b5b84601f81111561072e5761072d616dba565b5b03610765576040517f98e08ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825184516107749190616d4c565b905060038111156107c95761078885611f2c565b8160036040517f2b0399d50000000000000000000000000000000000000000000000000000000081526004016107c093929190616e20565b60405180910390fd5b6107d38486612ac1565b5f6107de8585612d3b565b90505f6107ec878787612e7d565b90505f6107fb8983858b612ee8565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b815260040161085b93929190616e5c565b5f604051808303815f87803b158015610872575f5ffd5b505af1158015610884573d5f5f3e3d5ffd5b5050505061089b816108958a611f2c565b8561306d565b80945050505050949350505050565b6001602052805f5260405f205f915090505481565b6002602052805f5260405f205f915054906101000a900460ff1681565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099357336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161098a91906163f4565b60405180910390fd5b81600760046101000a81548163ffffffff021916908360030b63ffffffff1602179055508060075f6101000a81548163ffffffff021916908360030b63ffffffff1602179055505050565b5f6001905090565b5f5f836020015160ff1690505f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7457610a4f816132c2565b610ab15780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610aa893929190616ea0565b60405180910390fd5b5f610abc8585613303565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b72578060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb5000000000000000000000000000000000000000000000000000000008152600401610b69929190616ed5565b60405180910390fd5b505b5f610b88855f01518387604001515f6133c7565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610be893929190616e5c565b5f604051808303815f87803b158015610bff575f5ffd5b505af1158015610c11573d5f5f3e3d5ffd5b50505050809250505092915050565b610c2981613420565b610cf75760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663846cd43382336040518363ffffffff1660e01b8152600401610c89929190616efc565b5f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b50505050610cf66040518060400160405280600f81526020017f4648452e616c6c6f77476c6f62616c00000000000000000000000000000000008152508233611532565b5b50565b5f600360149054906101000a900460ff16905090565b5f5f60055f8481526020019081526020015f205f9054906101000a900460ff16610d3f575f5f91509150610d90565b60065f8481526020019081526020015f205f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421015610d80575f5f91509150610d90565b610d8983611e86565b6001915091505b915091565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e2757336040517fa974a0fe000000000000000000000000000000000000000000000000000000008152600401610e1e91906163f4565b60405180910390fd5b7f66d3f531abdf188fde59b6d2b282dc7c725ef2bb1c6c93954054721a13c1a3fa838383604051610e5a93929190616f23565b60405180910390a1505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef857336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610eef91906163f4565b60405180910390fd5b600760049054906101000a900460030b60030b8160030b1215610f735780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610f6a93929190616ea0565b60405180910390fd5b8060075f6101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b5f610fa383613420565b15610fb1576001905061104f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a84846040518363ffffffff1660e01b815260040161100d929190616efc565b602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190616f7a565b90505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e657336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016110dd91906163f4565b60405180910390fd5b60075f9054906101000a900460030b60030b8160030b13156111605780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161115793929190616ea0565b60405180910390fd5b80600760046101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b805f5f6101000a81548160ff02191690831515021790555050565b6111ab82613420565b6112ea5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a3a7fb8383336040518463ffffffff1660e01b815260040161120d93929190616e5c565b5f604051808303815f87803b158015611224575f5ffd5b505af1158015611236573d5f5f3e3d5ffd5b505050506112e93373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146112ab576040518060400160405280600981526020017f4648452e616c6c6f7700000000000000000000000000000000000000000000008152506112e2565b6040518060400160405280600d81526020017f4648452e616c6c6f7754686973000000000000000000000000000000000000008152505b8383611532565b5b5050565b60605f849050805183856113029190616d4c565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90616fef565b60405180910390fd5b5f8367ffffffffffffffff81111561135e5761135d616187565b5b6040519080825280601f01601f1916602001820160405280156113905781602001600182028036833780820191505090505b5090505f5f90505b84811015611417578281876113ad9190616d4c565b815181106113be576113bd61700d565b5b602001015160f81c60f81b8282815181106113dc576113db61700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611398565b5080925050509392505050565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b657336040517fa974a0fe0000000000000000000000000000000000000000000000000000000081526004016114ad91906163f4565b60405180910390fd5b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b61153d83838361345d565b505050565b61154b82613420565b61161b5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228383336040518463ffffffff1660e01b81526004016115ad93929190616e5c565b5f604051808303815f87803b1580156115c4575f5ffd5b505af11580156115d6573d5f5f3e3d5ffd5b5050505061161a6040518060400160405280601281526020017f4648452e616c6c6f775472616e7369656e7400000000000000000000000000008152508383611532565b5b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b057336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016116a791906163f4565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178457336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161177b91906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61183581613420565b611971575f600167ffffffffffffffff81111561185557611854616187565b5b6040519080825280602002602001820160405280156118835781602001602082028036833780820191505090505b50905081815f8151811061189a5761189961700d565b5b60200260200101818152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c3839ba82336040518363ffffffff1660e01b81526004016119029291906170f1565b5f604051808303815f87803b158015611919575f5ffd5b505af115801561192b573d5f5f3e3d5ffd5b5050505061196f6040518060400160405280601681526020017f4648452e616c6c6f77466f7244656372797074696f6e000000000000000000008152508333611532565b505b50565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a84846040518363ffffffff1660e01b81526004016119d1929190617252565b602060405180830381865afa1580156119ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a109190616f7a565b905092915050565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff0219169083151502179055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8290505f815103611adb5760405180602001604052805f815250915050611bc6565b5f60018251611aea9190617280565b67ffffffffffffffff811115611b0357611b02616187565b5b6040519080825280601f01601f191660200182016040528015611b355781602001600182028036833780820191505090505b5090505f600190505b8251811015611bbf57828181518110611b5a57611b5961700d565b5b602001015160f81c60f81b82600183611b739190617280565b81518110611b8457611b8361700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611b3e565b5080925050505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900460ff1681565b5f5f5f611c0d84610d10565b9150915080611c5357836040517f70cf6554000000000000000000000000000000000000000000000000000000008152600401611c4a919061636e565b60405180910390fd5b8192505050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cee57336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611ce591906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d53576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611da081613420565b611e835760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a82336040518363ffffffff1660e01b8152600401611e00929190616efc565b602060405180830381865afa158015611e1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3f9190616f7a565b611e825780336040517f4d13139e000000000000000000000000000000000000000000000000000000008152600401611e79929190616efc565b60405180910390fd5b5b50565b5f60025f8381526020019081526020015f205f9054906101000a900460ff16611ee657816040517f850a796d000000000000000000000000000000000000000000000000000000008152600401611edd919061636e565b60405180910390fd5b5f611ef08361354b565b90508060015f8581526020019081526020015f205416915050919050565b5f611f188361354b565b9050611f27838284165f613568565b505050565b60606002601f811115611f4257611f41616dba565b5b82601f811115611f5557611f54616dba565b5b03611f97576040518060400160405280600481526020017f63617374000000000000000000000000000000000000000000000000000000008152509050612abc565b6003601f811115611fab57611faa616dba565b5b82601f811115611fbe57611fbd616dba565b5b03612000576040518060400160405280600a81526020017f7365616c4f7574707574000000000000000000000000000000000000000000008152509050612abc565b6004601f81111561201457612013616dba565b5b82601f81111561202757612026616dba565b5b03612069576040518060400160405280600681526020017f73656c65637400000000000000000000000000000000000000000000000000008152509050612abc565b6006601f81111561207d5761207c616dba565b5b82601f8111156120905761208f616dba565b5b036120d2576040518060400160405280600781526020017f64656372797074000000000000000000000000000000000000000000000000008152509050612abc565b6007601f8111156120e6576120e5616dba565b5b82601f8111156120f9576120f8616dba565b5b0361213b576040518060400160405280600381526020017f73756200000000000000000000000000000000000000000000000000000000008152509050612abc565b6008601f81111561214f5761214e616dba565b5b82601f81111561216257612161616dba565b5b036121a4576040518060400160405280600381526020017f61646400000000000000000000000000000000000000000000000000000000008152509050612abc565b6009601f8111156121b8576121b7616dba565b5b82601f8111156121cb576121ca616dba565b5b0361220d576040518060400160405280600381526020017f786f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b600a601f81111561222157612220616dba565b5b82601f81111561223457612233616dba565b5b03612276576040518060400160405280600381526020017f616e6400000000000000000000000000000000000000000000000000000000008152509050612abc565b600b601f81111561228a57612289616dba565b5b82601f81111561229d5761229c616dba565b5b036122df576040518060400160405280600281526020017f6f720000000000000000000000000000000000000000000000000000000000008152509050612abc565b600c601f8111156122f3576122f2616dba565b5b82601f81111561230657612305616dba565b5b03612348576040518060400160405280600381526020017f6e6f7400000000000000000000000000000000000000000000000000000000008152509050612abc565b600d601f81111561235c5761235b616dba565b5b82601f81111561236f5761236e616dba565b5b036123b1576040518060400160405280600381526020017f64697600000000000000000000000000000000000000000000000000000000008152509050612abc565b600e601f8111156123c5576123c4616dba565b5b82601f8111156123d8576123d7616dba565b5b0361241a576040518060400160405280600381526020017f72656d00000000000000000000000000000000000000000000000000000000008152509050612abc565b600f601f81111561242e5761242d616dba565b5b82601f81111561244157612440616dba565b5b03612483576040518060400160405280600381526020017f6d756c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6010601f81111561249757612496616dba565b5b82601f8111156124aa576124a9616dba565b5b036124ec576040518060400160405280600381526020017f73686c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6011601f811115612500576124ff616dba565b5b82601f81111561251357612512616dba565b5b03612555576040518060400160405280600381526020017f73687200000000000000000000000000000000000000000000000000000000008152509050612abc565b6012601f81111561256957612568616dba565b5b82601f81111561257c5761257b616dba565b5b036125be576040518060400160405280600381526020017f67746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6013601f8111156125d2576125d1616dba565b5b82601f8111156125e5576125e4616dba565b5b03612627576040518060400160405280600381526020017f6c746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6014601f81111561263b5761263a616dba565b5b82601f81111561264e5761264d616dba565b5b03612690576040518060400160405280600281526020017f6c740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6015601f8111156126a4576126a3616dba565b5b82601f8111156126b7576126b6616dba565b5b036126f9576040518060400160405280600281526020017f67740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6016601f81111561270d5761270c616dba565b5b82601f8111156127205761271f616dba565b5b03612762576040518060400160405280600381526020017f6d696e00000000000000000000000000000000000000000000000000000000008152509050612abc565b6017601f81111561277657612775616dba565b5b82601f81111561278957612788616dba565b5b036127cb576040518060400160405280600381526020017f6d617800000000000000000000000000000000000000000000000000000000008152509050612abc565b6018601f8111156127df576127de616dba565b5b82601f8111156127f2576127f1616dba565b5b03612834576040518060400160405280600281526020017f65710000000000000000000000000000000000000000000000000000000000008152509050612abc565b6019601f81111561284857612847616dba565b5b82601f81111561285b5761285a616dba565b5b0361289d576040518060400160405280600281526020017f6e650000000000000000000000000000000000000000000000000000000000008152509050612abc565b601a601f8111156128b1576128b0616dba565b5b82601f8111156128c4576128c3616dba565b5b03612906576040518060400160405280600e81526020017f7472697669616c456e63727970740000000000000000000000000000000000008152509050612abc565b601b601f81111561291a57612919616dba565b5b82601f81111561292d5761292c616dba565b5b0361296f576040518060400160405280600681526020017f72616e646f6d00000000000000000000000000000000000000000000000000008152509050612abc565b601c601f81111561298357612982616dba565b5b82601f81111561299657612995616dba565b5b036129d8576040518060400160405280600381526020017f726f6c00000000000000000000000000000000000000000000000000000000008152509050612abc565b601d601f8111156129ec576129eb616dba565b5b82601f8111156129ff576129fe616dba565b5b03612a41576040518060400160405280600381526020017f726f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b601e601f811115612a5557612a54616dba565b5b82601f811115612a6857612a67616dba565b5b03612aaa576040518060400160405280600681526020017f73717561726500000000000000000000000000000000000000000000000000008152509050612abc565b60405180602001604052805f81525090505b919050565b5f612acb82611f2c565b90505f835103612b2557612ade82613609565b612b1f57806040517fb31612aa000000000000000000000000000000000000000000000000000000008152600401612b1691906168bd565b60405180910390fd5b50612d37565b6004601f811115612b3957612b38616dba565b5b82601f811115612b4c57612b4b616dba565b5b03612b5f57612b5a83613668565b612c8f565b612b68826137a9565b15612bbe576001835114612bb95780835160016040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612bb0939291906172ec565b60405180910390fd5b612c8e565b6002835114612c0a5780835160026040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612c0193929190617361565b60405180910390fd5b5f612c4b84600181518110612c2257612c2161700d565b5b6020026020010151855f81518110612c3d57612c3c61700d565b5b602002602001015118613837565b14612c8d57806040517f52b50ae1000000000000000000000000000000000000000000000000000000008152600401612c8491906168bd565b60405180910390fd5b5b5b5f612cb3845f81518110612ca657612ca561700d565b5b6020026020010151613855565b9050612cbe816132c2565b612d205780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401612d1793929190616ea0565b60405180910390fd5b612d2984613865565b612d348383866138b3565b50505b5050565b60605f82518451612d4c9190616d4c565b67ffffffffffffffff811115612d6557612d64616187565b5b604051908082528060200260200182016040528015612d935781602001602082028036833780820191505090505b5090505f5f90505b84518160ff161015612dfa57848160ff1681518110612dbd57612dbc61700d565b5b6020026020010151828260ff1681518110612ddb57612dda61700d565b5b6020026020010181815250508080612df29061739d565b915050612d9b565b5b83518551612e099190616d4c565b8160ff161015612e72578385518260ff16612e249190617280565b81518110612e3557612e3461700d565b5b6020026020010151828260ff1681518110612e5357612e5261700d565b5b6020026020010181815250508080612e6a9061739d565b915050612dfb565b819250505092915050565b5f612e8784613609565b15612ebb578160018351612e9b9190617280565b81518110612eac57612eab61700d565b5b60200260200101519050612ee1565b612ede835f81518110612ed157612ed061700d565b5b6020026020010151613855565b90505b9392505050565b5f60605f601a601f811115612f0057612eff616dba565b5b84601f811115612f1357612f12616dba565b5b1490505f5f90505b85518160ff161015612f835782612f4e878360ff1681518110612f4157612f4061700d565b5b6020026020010151613a21565b604051602001612f5f9291906173ff565b60405160208183030381529060405292508080612f7b9061739d565b915050612f1b565b50601e601f811115612f9857612f97616dba565b5b84601f811115612fab57612faa616dba565b5b03612ffb57600f935081612fd8865f81518110612fcb57612fca61700d565b5b6020026020010151613a21565b604051602001612fe99291906173ff565b60405160208183030381529060405291505b5f84601f81111561300f5761300e616dba565b5b60f81b9050828160405160200161302792919061746d565b60405160208183030381529060405292505f838051906020012090505f61305b825f1c8a6130558a8e613a83565b876133c7565b90508095505050505050949350505050565b6001815114806130845750613083826002613bae565b5b1561310c577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106130bf576130be61700d565b5b60200260200101515f5f6040516130da9594939291906174cd565b60405180910390a16131078383835f815181106130fa576130f961700d565b5b6020026020010151613bc9565b6132bd565b60028151036131cf577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f8151811061314b5761314a61700d565b5b6020026020010151846001815181106131675761316661700d565b5b60200260200101515f604051613181959493929190617525565b60405180910390a16131ca8383835f815181106131a1576131a061700d565b5b6020026020010151846001815181106131bd576131bc61700d565b5b6020026020010151613e30565b6132bc565b7fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106132055761320461700d565b5b6020026020010151846001815181106132215761322061700d565b5b60200260200101518560028151811061323d5761323c61700d565b5b602002602001015160405161325695949392919061757d565b60405180910390a16132bb8383835f815181106132765761327561700d565b5b6020026020010151846001815181106132925761329161700d565b5b6020026020010151856002815181106132ae576132ad61700d565b5b6020026020010151614c5c565b5b5b505050565b5f600760049054906101000a900460030b60030b8260030b121580156132fc575060075f9054906101000a900460030b60030b8260030b13155b9050919050565b5f5f835f015184604001518560200151854660405160200161332995949392919061766e565b60405160208183030381529060405290505f818051906020012090505f613354828760600151614e03565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036133bb576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80935050505092915050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133f89190617280565b851690505f8460ff16600861340d8587614e2d565b901b179050808217915050949350505050565b5f600160ff8016901c60ff1660ff801661343a9190617280565b600160ff8016901c60ff1660ff80166134539190617280565b8316149050919050565b5f5f9054906101000a900460ff1615613546576135456040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506134d58560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525061351486614fb3565b61351d8661514f565b60405160200161353195949392919061772c565b60405160208183030381529060405261517c565b5b505050565b5f5f61355683615215565b90506001816001901b03915050919050565b8160015f8581526020019081526020015f2081905550600160025f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055508015613604576136036040518060400160405280600381526020017f736574000000000000000000000000000000000000000000000000000000000081525060405180602001604052805f8152506135fe86614fb3565b6152ec565b5b505050565b5f601b601f81111561361e5761361d616dba565b5b82601f81111561363157613630616dba565b5b14806136615750601a601f81111561364c5761364b616dba565b5b82601f81111561365f5761365e616dba565b5b145b9050919050565b60038151146136b257805160036040517f9a84351c0000000000000000000000000000000000000000000000000000000081526004016136a99291906177cf565b60405180910390fd5b5f6136f4826002815181106136ca576136c961700d565b5b6020026020010151836001815181106136e6576136e561700d565b5b602002602001015118613837565b14613734576040517f52b50ae100000000000000000000000000000000000000000000000000000000815260040161372b90617809565b60405180910390fd5b5f613758825f8151811061374b5761374a61700d565b5b60200260200101516153ca565b90505f5f821860ff16146137a557805f6040517f884a0e9d00000000000000000000000000000000000000000000000000000000815260040161379c929190617836565b60405180910390fd5b5050565b5f600c601f8111156137be576137bd616dba565b5b82601f8111156137d1576137d0616dba565b5b14806138015750601e601f8111156137ec576137eb616dba565b5b82601f8111156137ff576137fe616dba565b5b145b8061383057506002601f81111561381b5761381a616dba565b5b82601f81111561382e5761382d616dba565b5b145b9050919050565b5f8160ff80166008600160ff8016901c60ff16901b17169050919050565b5f60ff801682165f0b9050919050565b5f5f90505b81518160ff1610156138af5761389c828260ff168151811061388f5761388e61700d565b5b6020026020010151611d97565b80806138a79061739d565b91505061386a565b5050565b6138bc836153e6565b613a1c576138c9836154a3565b1561396f575f5f90505b81518160ff161015613969575f613906838360ff16815181106138f9576138f861700d565b5b60200260200101516153ca565b90505f6007821860ff1603613955578360076040517f91b4b37800000000000000000000000000000000000000000000000000000000815260040161394c92919061785d565b60405180910390fd5b5080806139619061739d565b9150506138d3565b50613a1b565b5f5f90505b81518160ff161015613a19575f6139a7838360ff168151811061399a5761399961700d565b5b60200260200101516153ca565b90505f6007821860ff1614806139c157505f5f821860ff16145b15613a055783816040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016139fc92919061785d565b60405180910390fd5b508080613a119061739d565b915050613974565b505b5b505050565b60605f602067ffffffffffffffff811115613a3f57613a3e616187565b5b6040519080825280601f01601f191660200182016040528015613a715781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f6013601f811115613a9857613a97616dba565b5b83601f811115613aab57613aaa616dba565b5b1480613adb57506014601f811115613ac657613ac5616dba565b5b83601f811115613ad957613ad8616dba565b5b145b80613b0a57506012601f811115613af557613af4616dba565b5b83601f811115613b0857613b07616dba565b5b145b80613b3957506015601f811115613b2457613b23616dba565b5b83601f811115613b3757613b36616dba565b5b145b80613b6857506018601f811115613b5357613b52616dba565b5b83601f811115613b6657613b65616dba565b5b145b80613b9757506019601f811115613b8257613b81616dba565b5b83601f811115613b9557613b94616dba565b5b145b15613ba4575f9050613ba8565b8190505b92915050565b5f613bc183613bbc84611f2c565b615560565b905092915050565b613bd482601b613bae565b15613c4d57613bf283600143613bea9190617280565b405f1c611f0e565b613c486040518060400160405280600a81526020017f4648452e72616e646f6d0000000000000000000000000000000000000000000081525060405180602001604052805f815250613c4386614fb3565b6152ec565b613e2b565b613c58826002613bae565b15613cc457613c6f83613c6a83611e86565b611f0e565b613cbf6040518060400160405280600881526020017f4648452e63617374000000000000000000000000000000000000000000000000815250613cb183614fb3565b613cba86614fb3565b6152ec565b613e2b565b613ccf82600c613bae565b15613d44575f6001613ce083611e86565b149050613cee8482156155b8565b613d3e6040518060400160405280600781526020017f4648452e6e6f7400000000000000000000000000000000000000000000000000815250613d3084614fb3565b613d3987614fb3565b6152ec565b50613e2b565b613d4f82601e613bae565b15613dee57613d7083613d6183611e86565b613d6a84611e86565b02611f0e565b613de96040518060400160405280600a81526020017f4648452e73717561726500000000000000000000000000000000000000000000815250613db283614fb3565b613dbb84614fb3565b604051602001613dcc9291906178b1565b604051602081830303815290604052613de486614fb3565b6152ec565b613e2b565b816040517fd952ce7c000000000000000000000000000000000000000000000000000000008152600401613e2291906168bd565b60405180910390fd5b505050565b613e3b836007613bae565b15613eda57613e5c84613e4d83611e86565b613e5685611e86565b03611f0e565b613ed56040518060400160405280600781526020017f4648452e73756200000000000000000000000000000000000000000000000000815250613e9e84614fb3565b613ea784614fb3565b604051602001613eb8929190617909565b604051602081830303815290604052613ed087614fb3565b6152ec565b614c56565b613ee5836008613bae565b15613f8457613f0684613ef783611e86565b613f0085611e86565b01611f0e565b613f7f6040518060400160405280600781526020017f4648452e61646400000000000000000000000000000000000000000000000000815250613f4884614fb3565b613f5184614fb3565b604051602001613f62929190617961565b604051602081830303815290604052613f7a87614fb3565b6152ec565b614c56565b613f8f836009613bae565b1561402e57613fb084613fa183611e86565b613faa85611e86565b18611f0e565b6140296040518060400160405280600781526020017f4648452e786f7200000000000000000000000000000000000000000000000000815250613ff284614fb3565b613ffb84614fb3565b60405160200161400c9291906179b9565b60405160208183030381529060405261402487614fb3565b6152ec565b614c56565b61403983600a613bae565b156140d85761405a8461404b83611e86565b61405485611e86565b16611f0e565b6140d36040518060400160405280600781526020017f4648452e616e640000000000000000000000000000000000000000000000000081525061409c84614fb3565b6140a584614fb3565b6040516020016140b6929190617a11565b6040516020818303038152906040526140ce87614fb3565b6152ec565b614c56565b6140e383600b613bae565b1561418257614104846140f583611e86565b6140fe85611e86565b17611f0e565b61417d6040518060400160405280600681526020017f4648452e6f72000000000000000000000000000000000000000000000000000081525061414684614fb3565b61414f84614fb3565b604051602001614160929190617a69565b60405160208183030381529060405261417887614fb3565b6152ec565b614c56565b61418d83600d613bae565b15614276575f61419c82611e86565b90505f81036141d4576141cf857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f0e565b6141f7565b6141f685826141e286611e86565b816141f0576141ef616cc2565b5b04611f0e565b5b6142706040518060400160405280600781526020017f4648452e6469760000000000000000000000000000000000000000000000000081525061423985614fb3565b61424285614fb3565b604051602001614253929190617ac1565b60405160208183030381529060405261426b88614fb3565b6152ec565b50614c56565b61428183600e613bae565b1561432e576142b08461429383611e86565b61429c85611e86565b816142aa576142a9616cc2565b5b06611f0e565b6143296040518060400160405280600781526020017f4648452e72656d000000000000000000000000000000000000000000000000008152506142f284614fb3565b6142fb84614fb3565b60405160200161430c929190617b19565b60405160208183030381529060405261432487614fb3565b6152ec565b614c56565b61433983600f613bae565b156143d85761435a8461434b83611e86565b61435485611e86565b02611f0e565b6143d36040518060400160405280600781526020017f4648452e6d756c0000000000000000000000000000000000000000000000000081525061439c84614fb3565b6143a584614fb3565b6040516020016143b69291906178b1565b6040516020818303038152906040526143ce87614fb3565b6152ec565b614c56565b6143e3836010613bae565b1561448357614405846143f583611e86565b6143fe85611e86565b901b611f0e565b61447e6040518060400160405280600781526020017f4648452e73686c0000000000000000000000000000000000000000000000000081525061444784614fb3565b61445084614fb3565b604051602001614461929190617b71565b60405160208183030381529060405261447987614fb3565b6152ec565b614c56565b61448e836011613bae565b1561452e576144b0846144a083611e86565b6144a985611e86565b901c611f0e565b6145296040518060400160405280600781526020017f4648452e736872000000000000000000000000000000000000000000000000008152506144f284614fb3565b6144fb84614fb3565b60405160200161450c929190617bc9565b60405160208183030381529060405261452487614fb3565b6152ec565b614c56565b614539836012613bae565b156145d95761455b8461454b83611e86565b61455485611e86565b10156155b8565b6145d46040518060400160405280600781526020017f4648452e6774650000000000000000000000000000000000000000000000000081525061459d84614fb3565b6145a684614fb3565b6040516020016145b7929190617c21565b6040516020818303038152906040526145cf87614fb3565b6152ec565b614c56565b6145e4836013613bae565b1561468457614606846145f683611e86565b6145ff85611e86565b11156155b8565b61467f6040518060400160405280600781526020017f4648452e6c74650000000000000000000000000000000000000000000000000081525061464884614fb3565b61465184614fb3565b604051602001614662929190617c79565b60405160208183030381529060405261467a87614fb3565b6152ec565b614c56565b61468f836014613bae565b1561472e576146b0846146a183611e86565b6146aa85611e86565b106155b8565b6147296040518060400160405280600681526020017f4648452e6c7400000000000000000000000000000000000000000000000000008152506146f284614fb3565b6146fb84614fb3565b60405160200161470c929190617cd1565b60405160208183030381529060405261472487614fb3565b6152ec565b614c56565b614739836015613bae565b156147d85761475a8461474b83611e86565b61475485611e86565b116155b8565b6147d36040518060400160405280600681526020017f4648452e6774000000000000000000000000000000000000000000000000000081525061479c84614fb3565b6147a584614fb3565b6040516020016147b6929190617d29565b6040516020818303038152906040526147ce87614fb3565b6152ec565b614c56565b6147e3836016613bae565b156148a3575f6147f282611e86565b6147fb84611e86565b1061480e5761480982611e86565b614818565b61481783611e86565b5b90506148248582611f0e565b61489d6040518060400160405280600781526020017f4648452e6d696e0000000000000000000000000000000000000000000000000081525061486685614fb3565b61486f85614fb3565b604051602001614880929190617dcd565b60405160208183030381529060405261489888614fb3565b6152ec565b50614c56565b6148ae836017613bae565b1561496e575f6148bd82611e86565b6148c684611e86565b116148d9576148d482611e86565b6148e3565b6148e283611e86565b5b90506148ef8582611f0e565b6149686040518060400160405280600781526020017f4648452e6d61780000000000000000000000000000000000000000000000000081525061493185614fb3565b61493a85614fb3565b60405160200161494b929190617e43565b60405160208183030381529060405261496388614fb3565b6152ec565b50614c56565b614979836018613bae565b15614a185761499a8461498b83611e86565b61499485611e86565b146155b8565b614a136040518060400160405280600681526020017f4648452e657100000000000000000000000000000000000000000000000000008152506149dc84614fb3565b6149e584614fb3565b6040516020016149f6929190617eb9565b604051602081830303815290604052614a0e87614fb3565b6152ec565b614c56565b614a23836019613bae565b15614ac357614a4584614a3583611e86565b614a3e85611e86565b14156155b8565b614abe6040518060400160405280600681526020017f4648452e6e650000000000000000000000000000000000000000000000000000815250614a8784614fb3565b614a9084614fb3565b604051602001614aa1929190617f11565b604051602081830303815290604052614ab987614fb3565b6152ec565b614c56565b614ace83601c613bae565b15614b6e57614af084614ae083611e86565b614ae985611e86565b901b611f0e565b614b696040518060400160405280600781526020017f4648452e726f6c00000000000000000000000000000000000000000000000000815250614b3284614fb3565b614b3b84614fb3565b604051602001614b4c929190617b71565b604051602081830303815290604052614b6487614fb3565b6152ec565b614c56565b614b7983601d613bae565b15614c1957614b9b84614b8b83611e86565b614b9485611e86565b901c611f0e565b614c146040518060400160405280600781526020017f4648452e726f7200000000000000000000000000000000000000000000000000815250614bdd84614fb3565b614be684614fb3565b604051602001614bf7929190617bc9565b604051602081830303815290604052614c0f87614fb3565b6152ec565b614c56565b826040517fcef60885000000000000000000000000000000000000000000000000000000008152600401614c4d91906168bd565b60405180910390fd5b50505050565b614c6784601a613bae565b15614cf657614c768584611f0e565b614cf1614c8a614c85876155d6565b611ab6565b604051602001614c9a9190617f69565b604051602081830303815290604052614cba614cb5886155d6565b611ab6565b614cc386615882565b604051602001614cd4929190617fb4565b604051602081830303815290604052614cec88614fb3565b6152ec565b614dfc565b614d01846004613bae565b15614dbf57614d37856001614d1586611e86565b14614d2857614d2383611e86565b614d32565b614d3184611e86565b5b611f0e565b614dba6040518060400160405280600a81526020017f4648452e73656c65637400000000000000000000000000000000000000000000815250614d7985614fb3565b614d8285614fb3565b614d8b85614fb3565b604051602001614d9d93929190618041565b604051602081830303815290604052614db588614fb3565b6152ec565b614dfc565b836040517f5e45fa01000000000000000000000000000000000000000000000000000000008152600401614df391906168bd565b60405180910390fd5b5050505050565b5f5f5f5f614e11868661594c565b925092509250614e2182826159a1565b82935050505092915050565b5f600160ff8016901c60ff168260ff161683614e49575f614e63565b600160ff8016901c60ff1660ff8016614e629190617280565b5b17905092915050565b60605f84905083815110614e835784915050614fac565b5f8467ffffffffffffffff811115614e9e57614e9d616187565b5b6040519080825280601f01601f191660200182016040528015614ed05781602001600182028036833780820191505090505b5090505f5f90505b8251811015614f4d57828181518110614ef457614ef361700d565b5b602001015160f81c60f81b828281518110614f1257614f1161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614ed8565b5b85811015614fa55784828281518110614f6a57614f6961700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614f4e565b8193505050505b9392505050565b60605f614fbf83615882565b90505f8151905060068111614fd857819250505061514a565b5f60025f8681526020019081526020015f205f9054906101000a900460ff1690505f60015f8781526020019081526020015f205490505f61501887615b03565b90505f8161502e5761502983615882565b6150a9565b60018314615071576040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152506150a8565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b5b90505f6150b5896155d6565b6150c1885f60046112ee565b6150d98960048a6150d29190617280565b60046112ee565b87615119576040518060400160405280600581526020017f454d50545900000000000000000000000000000000000000000000000000000081525061511b565b845b60405160200161512e9493929190618101565b6040516020818303038152906040529050809750505050505050505b919050565b60606151758273ffffffffffffffffffffffffffffffffffffffff16601460ff16615b20565b9050919050565b6152128160405160240161519091906168bd565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615d5e565b50565b5f5f61522083615d78565b90505f60ff168160ff16036152395760089150506152e7565b600260ff168160ff16036152515760089150506152e7565b600360ff168160ff16036152695760109150506152e7565b600460ff168160ff16036152815760209150506152e7565b600560ff168160ff16036152995760409150506152e7565b600660ff168160ff16036152b15760809150506152e7565b600860ff168160ff16036152ca576101009150506152e7565b600760ff168160ff16036152e25760a09150506152e7565b5f9150505b919050565b5f5f9054906101000a900460ff16156153c5576153c46040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506153648560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525085856040516020016153b09594939291906181a0565b60405160208183030381529060405261517c565b5b505050565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f6004601f8111156153fb576153fa616dba565b5b82601f81111561540e5761540d616dba565b5b148061543e57506018601f81111561542957615428616dba565b5b82601f81111561543c5761543b616dba565b5b145b8061546d57506019601f81111561545857615457616dba565b5b82601f81111561546b5761546a616dba565b5b145b8061549c57506002601f81111561548757615486616dba565b5b82601f81111561549a57615499616dba565b5b145b9050919050565b5f6009601f8111156154b8576154b7616dba565b5b82601f8111156154cb576154ca616dba565b5b14806154fb5750600a601f8111156154e6576154e5616dba565b5b82601f8111156154f9576154f8616dba565b5b145b8061552a5750600b601f81111561551557615514616dba565b5b82601f81111561552857615527616dba565b5b145b806155595750600c601f81111561554457615543616dba565b5b82601f81111561555757615556616dba565b5b145b9050919050565b5f8160405160200161557291906181f9565b604051602081830303815290604052805190602001208360405160200161559991906181f9565b6040516020818303038152906040528051906020012014905092915050565b6155d282826155c7575f6155ca565b60015b60ff16611f0e565b5050565b60605f6155e283615d78565b90505f60ff168160ff160361562f576040518060400160405280600581526020017f65626f6f6c00000000000000000000000000000000000000000000000000000081525091505061587d565b600260ff168160ff160361567b576040518060400160405280600681526020017f6575696e7438000000000000000000000000000000000000000000000000000081525091505061587d565b600360ff168160ff16036156c7576040518060400160405280600781526020017f6575696e7431360000000000000000000000000000000000000000000000000081525091505061587d565b600460ff168160ff1603615713576040518060400160405280600781526020017f6575696e7433320000000000000000000000000000000000000000000000000081525091505061587d565b600560ff168160ff160361575f576040518060400160405280600781526020017f6575696e7436340000000000000000000000000000000000000000000000000081525091505061587d565b600660ff168160ff16036157ab576040518060400160405280600881526020017f6575696e7431323800000000000000000000000000000000000000000000000081525091505061587d565b600860ff168160ff16036157f7576040518060400160405280600881526020017f6575696e7432353600000000000000000000000000000000000000000000000081525091505061587d565b600760ff168160ff1603615843576040518060400160405280600881526020017f656164647265737300000000000000000000000000000000000000000000000081525091505061587d565b6040518060400160405280600781526020017f756e6b6e6f776e000000000000000000000000000000000000000000000000008152509150505b919050565b60605f600161589084615d94565b0190505f8167ffffffffffffffff8111156158ae576158ad616187565b5b6040519080825280601f01601f1916602001820160405280156158e05781602001600182028036833780820191505090505b5090505f82602083010190505b600115615941578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161593657615935616cc2565b5b0494505f85036158ed575b819350505050919050565b5f5f5f604184510361598c575f5f5f602087015192506040870151915060608701515f1a905061597e88828585615ee5565b95509550955050505061599a565b5f600285515f1b9250925092505b9250925092565b5f60038111156159b4576159b3616dba565b5b8260038111156159c7576159c6616dba565b5b0315615aff57600160038111156159e1576159e0616dba565b5b8260038111156159f4576159f3616dba565b5b03615a2b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115615a3f57615a3e616dba565b5b826003811115615a5257615a51616dba565b5b03615a9657805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401615a8d919061636e565b60405180910390fd5b600380811115615aa957615aa8616dba565b5b826003811115615abc57615abb616dba565b5b03615afe57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401615af5919061821e565b60405180910390fd5b5b5050565b5f5f615b0e83615d78565b90505f5f821860ff1614915050919050565b60605f8390505f6002846002615b369190618237565b615b409190616d4c565b67ffffffffffffffff811115615b5957615b58616187565b5b6040519080825280601f01601f191660200182016040528015615b8b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110615bc257615bc161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110615c2557615c2461700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001856002615c639190618237565b615c6d9190616d4c565b90505b6001811115615d0c577f3031323334353637383961626364656600000000000000000000000000000000600f841660108110615caf57615cae61700d565b5b1a60f81b828281518110615cc657615cc561700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c925080615d0590618278565b9050615c70565b505f8214615d535784846040517fe22e27eb000000000000000000000000000000000000000000000000000000008152600401615d4a92919061829f565b60405180910390fd5b809250505092915050565b615d7581615d6d615fcc615feb565b63ffffffff16565b50565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615df0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381615de657615de5616cc2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310615e2d576d04ee2d6d415b85acef81000000008381615e2357615e22616cc2565b5b0492506020810190505b662386f26fc100008310615e5c57662386f26fc100008381615e5257615e51616cc2565b5b0492506010810190505b6305f5e1008310615e85576305f5e1008381615e7b57615e7a616cc2565b5b0492506008810190505b6127108310615eaa576127108381615ea057615e9f616cc2565b5b0492506004810190505b60648310615ecd5760648381615ec357615ec2616cc2565b5b0492506002810190505b600a8310615edc576001810190505b80915050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115615f21575f600385925092509250615fc2565b5f6001888888886040515f8152602001604052604051615f4494939291906182c6565b6020604051602081039080840390855afa158015615f64573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603615fb5575f60015f5f1b93509350935050615fc2565b805f5f5f1b935093509350505b9450945094915050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b615ff6819050919050565b615ffe618309565b565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b61602381616011565b811461602d575f5ffd5b50565b5f8135905061603e8161601a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61606d82616044565b9050919050565b61607d81616063565b8114616087575f5ffd5b50565b5f8135905061609881616074565b92915050565b5f5f604083850312156160b4576160b3616009565b5b5f6160c185828601616030565b92505060206160d28582860161608a565b9150509250929050565b5f5f604083850312156160f2576160f1616009565b5b5f6160ff85828601616030565b925050602061611085828601616030565b9150509250929050565b5f60ff82169050919050565b61612f8161611a565b8114616139575f5ffd5b50565b5f8135905061614a81616126565b92915050565b6020811061615c575f5ffd5b50565b5f8135905061616d81616150565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6161bd82616177565b810181811067ffffffffffffffff821117156161dc576161db616187565b5b80604052505050565b5f6161ee616000565b90506161fa82826161b4565b919050565b5f67ffffffffffffffff82111561621957616218616187565b5b602082029050602081019050919050565b5f5ffd5b5f61624061623b846161ff565b6161e5565b905080838252602082019050602084028301858111156162635761626261622a565b5b835b8181101561628c57806162788882616030565b845260208401935050602081019050616265565b5050509392505050565b5f82601f8301126162aa576162a9616173565b5b81356162ba84826020860161622e565b91505092915050565b5f5f5f5f608085870312156162db576162da616009565b5b5f6162e88782880161613c565b94505060206162f98782880161615f565b935050604085013567ffffffffffffffff81111561631a5761631961600d565b5b61632687828801616296565b925050606085013567ffffffffffffffff8111156163475761634661600d565b5b61635387828801616296565b91505092959194509250565b61636881616011565b82525050565b5f6020820190506163815f83018461635f565b92915050565b5f6020828403121561639c5761639b616009565b5b5f6163a984828501616030565b91505092915050565b5f8115159050919050565b6163c6816163b2565b82525050565b5f6020820190506163df5f8301846163bd565b92915050565b6163ee81616063565b82525050565b5f6020820190506164075f8301846163e5565b92915050565b5f8160030b9050919050565b6164228161640d565b811461642c575f5ffd5b50565b5f8135905061643d81616419565b92915050565b5f5f6040838503121561645957616458616009565b5b5f6164668582860161642f565b92505060206164778582860161642f565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156164a7576164a6616187565b5b6164b082616177565b9050602081019050919050565b828183375f83830152505050565b5f6164dd6164d88461648d565b6161e5565b9050828152602081018484840111156164f9576164f8616489565b5b6165048482856164bd565b509392505050565b5f82601f8301126165205761651f616173565b5b81356165308482602086016164cb565b91505092915050565b5f6080828403121561654e5761654d616481565b5b61655860806161e5565b90505f61656784828501616030565b5f83015250602061657a8482850161613c565b602083015250604061658e8482850161613c565b604083015250606082013567ffffffffffffffff8111156165b2576165b1616485565b5b6165be8482850161650c565b60608301525092915050565b5f5f604083850312156165e0576165df616009565b5b5f83013567ffffffffffffffff8111156165fd576165fc61600d565b5b61660985828601616539565b925050602061661a8582860161608a565b9150509250929050565b5f6040820190506166375f83018561635f565b61664460208301846163bd565b9392505050565b5f67ffffffffffffffff82111561666557616664616187565b5b61666e82616177565b9050602081019050919050565b5f61668d6166888461664b565b6161e5565b9050828152602081018484840111156166a9576166a8616489565b5b6166b48482856164bd565b509392505050565b5f82601f8301126166d0576166cf616173565b5b81356166e084826020860161667b565b91505092915050565b5f5f5f60608486031215616700576166ff616009565b5b5f61670d86828701616030565b935050602084013567ffffffffffffffff81111561672e5761672d61600d565b5b61673a868287016166bc565b925050604084013567ffffffffffffffff81111561675b5761675a61600d565b5b616767868287016166bc565b9150509250925092565b5f6020828403121561678657616785616009565b5b5f6167938482850161642f565b91505092915050565b6167a5816163b2565b81146167af575f5ffd5b50565b5f813590506167c08161679c565b92915050565b5f602082840312156167db576167da616009565b5b5f6167e8848285016167b2565b91505092915050565b5f5f5f6060848603121561680857616807616009565b5b5f84013567ffffffffffffffff8111156168255761682461600d565b5b616831868287016166bc565b935050602061684286828701616030565b925050604061685386828701616030565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61688f8261685d565b6168998185616867565b93506168a9818560208601616877565b6168b281616177565b840191505092915050565b5f6020820190508181035f8301526168d58184616885565b905092915050565b5f5ffd5b5f5f83601f8401126168f6576168f5616173565b5b8235905067ffffffffffffffff811115616913576169126168dd565b5b60208301915083602082028301111561692f5761692e61622a565b5b9250929050565b5f5f5f5f6060858703121561694e5761694d616009565b5b5f61695b87828801616030565b945050602061696c87828801616030565b935050604085013567ffffffffffffffff81111561698d5761698c61600d565b5b616999878288016168e1565b925092505092959194509250565b5f5f5f606084860312156169be576169bd616009565b5b5f84013567ffffffffffffffff8111156169db576169da61600d565b5b6169e7868287016166bc565b93505060206169f886828701616030565b9250506040616a098682870161608a565b9150509250925092565b5f60208284031215616a2857616a27616009565b5b5f616a358482850161608a565b91505092915050565b5f67ffffffffffffffff82169050919050565b616a5a81616a3e565b8114616a64575f5ffd5b50565b5f81359050616a7581616a51565b92915050565b5f819050919050565b616a8d81616a7b565b8114616a97575f5ffd5b50565b5f81359050616aa881616a84565b92915050565b5f6101008284031215616ac457616ac3616481565b5b616acf6101006161e5565b90505f616ade8482850161608a565b5f830152506020616af184828501616a67565b6020830152506040616b058482850161608a565b6040830152506060616b1984828501616030565b6060830152506080616b2d8482850161608a565b60808301525060a0616b4184828501616a9a565b60a08301525060c082013567ffffffffffffffff811115616b6557616b64616485565b5b616b718482850161650c565b60c08301525060e082013567ffffffffffffffff811115616b9557616b94616485565b5b616ba18482850161650c565b60e08301525092915050565b5f5f60408385031215616bc357616bc2616009565b5b5f83013567ffffffffffffffff811115616be057616bdf61600d565b5b616bec85828601616aae565b9250506020616bfd85828601616030565b9150509250929050565b5f60208284031215616c1c57616c1b616009565b5b5f82013567ffffffffffffffff811115616c3957616c3861600d565b5b616c45848285016166bc565b91505092915050565b5f819050919050565b5f616c71616c6c616c6784616044565b616c4e565b616044565b9050919050565b5f616c8282616c57565b9050919050565b5f616c9382616c78565b9050919050565b616ca381616c89565b82525050565b5f602082019050616cbc5f830184616c9a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f616cf982616011565b9150616d0483616011565b925082616d1457616d13616cc2565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f616d5682616011565b9150616d6183616011565b9250828201905080821115616d7957616d78616d1f565b5b92915050565b5f616d8982616a3e565b9150616d9483616a3e565b9250828201905067ffffffffffffffff811115616db457616db3616d1f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050919050565b5f616e0a616e05616e0084616de7565b616c4e565b616011565b9050919050565b616e1a81616df0565b82525050565b5f6060820190508181035f830152616e388186616885565b9050616e47602083018561635f565b616e546040830184616e11565b949350505050565b5f606082019050616e6f5f83018661635f565b616e7c60208301856163e5565b616e8960408301846163e5565b949350505050565b616e9a8161640d565b82525050565b5f606082019050616eb35f830186616e91565b616ec06020830185616e91565b616ecd6040830184616e91565b949350505050565b5f604082019050616ee85f8301856163e5565b616ef560208301846163e5565b9392505050565b5f604082019050616f0f5f83018561635f565b616f1c60208301846163e5565b9392505050565b5f606082019050616f365f83018661635f565b8181036020830152616f488185616885565b90508181036040830152616f5c8184616885565b9050949350505050565b5f81519050616f748161679c565b92915050565b5f60208284031215616f8f57616f8e616009565b5b5f616f9c84828501616f66565b91505092915050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f616fd9600d83616867565b9150616fe482616fa5565b602082019050919050565b5f6020820190508181035f83015261700681616fcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61706c81616011565b82525050565b5f61707d8383617063565b60208301905092915050565b5f602082019050919050565b5f61709f8261703a565b6170a98185617044565b93506170b483617054565b805f5b838110156170e45781516170cb8882617072565b97506170d683617089565b9250506001810190506170b7565b5085935050505092915050565b5f6040820190508181035f8301526171098185617095565b905061711860208301846163e5565b9392505050565b61712881616063565b82525050565b61713781616a3e565b82525050565b61714681616a7b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6171708261714c565b61717a8185617156565b935061718a818560208601616877565b61719381616177565b840191505092915050565b5f61010083015f8301516171b45f86018261711f565b5060208301516171c7602086018261712e565b5060408301516171da604086018261711f565b5060608301516171ed6060860182617063565b506080830151617200608086018261711f565b5060a083015161721360a086018261713d565b5060c083015184820360c086015261722b8282617166565b91505060e083015184820360e08601526172458282617166565b9150508091505092915050565b5f6040820190508181035f83015261726a818561719e565b9050617279602083018461635f565b9392505050565b5f61728a82616011565b915061729583616011565b92508282039050818111156172ad576172ac616d1f565b5b92915050565b5f819050919050565b5f6172d66172d16172cc846172b3565b616c4e565b616011565b9050919050565b6172e6816172bc565b82525050565b5f6060820190508181035f8301526173048186616885565b9050617313602083018561635f565b61732060408301846172dd565b949350505050565b5f819050919050565b5f61734b61734661734184617328565b616c4e565b616011565b9050919050565b61735b81617331565b82525050565b5f6060820190508181035f8301526173798186616885565b9050617388602083018561635f565b6173956040830184617352565b949350505050565b5f6173a78261611a565b915060ff82036173ba576173b9616d1f565b5b600182019050919050565b5f81905092915050565b5f6173d98261714c565b6173e381856173c5565b93506173f3818560208601616877565b80840191505092915050565b5f61740a82856173cf565b915061741682846173cf565b91508190509392505050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61746761746282617422565b61744d565b82525050565b5f61747882856173cf565b91506174848284617456565b6001820191508190509392505050565b5f819050919050565b5f6174b76174b26174ad84617494565b616c4e565b616011565b9050919050565b6174c78161749d565b82525050565b5f60a0820190506174e05f83018861635f565b81810360208301526174f28187616885565b9050617501604083018661635f565b61750e60608301856174be565b61751b60808301846174be565b9695505050505050565b5f60a0820190506175385f83018861635f565b818103602083015261754a8187616885565b9050617559604083018661635f565b617566606083018561635f565b61757360808301846174be565b9695505050505050565b5f60a0820190506175905f83018861635f565b81810360208301526175a28187616885565b90506175b1604083018661635f565b6175be606083018561635f565b6175cb608083018461635f565b9695505050505050565b5f819050919050565b6175ef6175ea82616011565b6175d5565b82525050565b5f8160f81b9050919050565b5f61760b826175f5565b9050919050565b61762361761e8261611a565b617601565b82525050565b5f8160601b9050919050565b5f61763f82617629565b9050919050565b5f61765082617635565b9050919050565b61766861766382616063565b617646565b82525050565b5f61767982886175de565b6020820191506176898287617612565b6001820191506176998286617612565b6001820191506176a98285617657565b6014820191506176b982846175de565b6020820191508190509695505050505050565b5f81905092915050565b5f6176e08261685d565b6176ea81856176cc565b93506176fa818560208601616877565b80840191505092915050565b7f202d3e2000000000000000000000000000000000000000000000000000000000815250565b5f61773782886176d6565b915061774382876176d6565b915061774f82866176d6565b915061775b82856176d6565b915061776682617706565b60048201915061777682846176d6565b91508190509695505050505050565b7f73656c65637400000000000000000000000000000000000000000000000000005f82015250565b5f6177b9600683616867565b91506177c482617785565b602082019050919050565b5f6060820190508181035f8301526177e6816177ad565b90506177f5602083018561635f565b6178026040830184616e11565b9392505050565b5f6020820190508181035f830152617820816177ad565b9050919050565b6178308161611a565b82525050565b5f6040820190506178495f830185617827565b6178566020830184617827565b9392505050565b5f6040820190508181035f8301526178758185616885565b90506178846020830184617827565b9392505050565b7f202a200000000000000000000000000000000000000000000000000000000000815250565b5f6178bc82856176d6565b91506178c78261788b565b6003820191506178d782846176d6565b91508190509392505050565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b5f61791482856176d6565b915061791f826178e3565b60038201915061792f82846176d6565b91508190509392505050565b7f202b200000000000000000000000000000000000000000000000000000000000815250565b5f61796c82856176d6565b91506179778261793b565b60038201915061798782846176d6565b91508190509392505050565b7f205e200000000000000000000000000000000000000000000000000000000000815250565b5f6179c482856176d6565b91506179cf82617993565b6003820191506179df82846176d6565b91508190509392505050565b7f2026200000000000000000000000000000000000000000000000000000000000815250565b5f617a1c82856176d6565b9150617a27826179eb565b600382019150617a3782846176d6565b91508190509392505050565b7f207c200000000000000000000000000000000000000000000000000000000000815250565b5f617a7482856176d6565b9150617a7f82617a43565b600382019150617a8f82846176d6565b91508190509392505050565b7f202f200000000000000000000000000000000000000000000000000000000000815250565b5f617acc82856176d6565b9150617ad782617a9b565b600382019150617ae782846176d6565b91508190509392505050565b7f2025200000000000000000000000000000000000000000000000000000000000815250565b5f617b2482856176d6565b9150617b2f82617af3565b600382019150617b3f82846176d6565b91508190509392505050565b7f203c3c2000000000000000000000000000000000000000000000000000000000815250565b5f617b7c82856176d6565b9150617b8782617b4b565b600482019150617b9782846176d6565b91508190509392505050565b7f203e3e2000000000000000000000000000000000000000000000000000000000815250565b5f617bd482856176d6565b9150617bdf82617ba3565b600482019150617bef82846176d6565b91508190509392505050565b7f203e3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c2c82856176d6565b9150617c3782617bfb565b600482019150617c4782846176d6565b91508190509392505050565b7f203c3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c8482856176d6565b9150617c8f82617c53565b600482019150617c9f82846176d6565b91508190509392505050565b7f203c200000000000000000000000000000000000000000000000000000000000815250565b5f617cdc82856176d6565b9150617ce782617cab565b600382019150617cf782846176d6565b91508190509392505050565b7f203e200000000000000000000000000000000000000000000000000000000000815250565b5f617d3482856176d6565b9150617d3f82617d03565b600382019150617d4f82846176d6565b91508190509392505050565b7f6d696e2800000000000000000000000000000000000000000000000000000000815250565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b5f617dd782617d5b565b600482019150617de782856176d6565b9150617df282617d81565b600282019150617e0282846176d6565b9150617e0d82617da7565b6001820191508190509392505050565b7f6d61782800000000000000000000000000000000000000000000000000000000815250565b5f617e4d82617e1d565b600482019150617e5d82856176d6565b9150617e6882617d81565b600282019150617e7882846176d6565b9150617e8382617da7565b6001820191508190509392505050565b7f203d3d2000000000000000000000000000000000000000000000000000000000815250565b5f617ec482856176d6565b9150617ecf82617e93565b600482019150617edf82846176d6565b91508190509392505050565b7f20213d2000000000000000000000000000000000000000000000000000000000815250565b5f617f1c82856176d6565b9150617f2782617eeb565b600482019150617f3782846176d6565b91508190509392505050565b7f4648452e61734500000000000000000000000000000000000000000000000000815250565b5f617f7382617f43565b600782019150617f8382846176d6565b915081905092915050565b7f2800000000000000000000000000000000000000000000000000000000000000815250565b5f617fbf82856176d6565b9150617fca82617f8e565b600182019150617fda82846176d6565b9150617fe582617da7565b6001820191508190509392505050565b7f203f200000000000000000000000000000000000000000000000000000000000815250565b7f203a200000000000000000000000000000000000000000000000000000000000815250565b5f61804c82866176d6565b915061805782617ff5565b60038201915061806782856176d6565b91506180728261801b565b60038201915061808282846176d6565b9150819050949350505050565b7f2e2e000000000000000000000000000000000000000000000000000000000000815250565b7f295b000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f61810c82876176d6565b915061811782617f8e565b60018201915061812782866176d6565b91506181328261808f565b60028201915061814282856176d6565b915061814d826180b5565b60028201915061815d82846176d6565b9150618168826180db565b60018201915081905095945050505050565b7f20203d3e20200000000000000000000000000000000000000000000000000000815250565b5f6181ab82886176d6565b91506181b782876176d6565b91506181c382866176d6565b91506181cf82856176d6565b91506181da8261817a565b6006820191506181ea82846176d6565b91508190509695505050505050565b5f61820482846176d6565b915081905092915050565b61821881616a7b565b82525050565b5f6020820190506182315f83018461820f565b92915050565b5f61824182616011565b915061824c83616011565b925082820261825a81616011565b9150828204841483151761827157618270616d1f565b5b5092915050565b5f61828282616011565b91505f820361829457618293616d1f565b5b600182039050919050565b5f6040820190506182b25f83018561635f565b6182bf602083018461635f565b9392505050565b5f6080820190506182d95f83018761820f565b6182e66020830186617827565b6182f3604083018561820f565b618300606083018461820f565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea2646970667358221220f1a21e362fdc96cf080b052bd034de2e509393b30b09196917450b9a297c45fe64736f6c63430008210033',
|
|
1210
|
+
'0x608060405234801561000f575f5ffd5b5060043610610246575f3560e01c806365d0509c11610139578063938fb3d9116100b6578063d521ed4b1161007a578063d521ed4b14610717578063de28735914610747578063e68d826f14610765578063f6bc7f3f14610783578063f9120af6146107b357610246565b8063938fb3d914610661578063a307d21d1461067f578063a33b4b0a1461069b578063ae79f04a146106cb578063c4d66de8146106fb57610246565b80638b2b9c23116100fd5780638b2b9c23146105c15780638d9c9c92146105dd5780638db39c8d146105f95780638eef9ae71461061557806392bd6c951461064557610246565b806365d0509c1461050d57806373301651146105295780637e5cf5191461054557806380d55b691461057557806381ba0986146105a557610246565b806327f9c762116101c75780634d7cb0c01161018b5780634d7cb0c014610459578063591363c7146104895780635faa299a146104a55780635fb0bf91146104d5578063642b3f19146104f157610246565b806327f9c762146103a257806334ef1e5a146103d2578063392e53cd146103ee578063458693c91461040c5780634bc982631461043d57610246565b80631d0319311161020e5780631d031931146102fe578063245a7bfc1461032e5780632605ab9f1461034c57806326594a0c14610368578063267c4ae41461038457610246565b8063082898271461024a57806315a486fe1461026657806318683701146102825780631888debd1461029e5780631c76642b146102ce575b5f5ffd5b610264600480360381019061025f919061693b565b6107cf565b005b610280600480360381019061027b9190616979565b610882565b005b61029c60048036038101906102979190616a18565b610890565b005b6102b860048036038101906102b39190616c2a565b610968565b6040516102c59190616cd5565b60405180910390f35b6102e860048036038101906102e39190616cee565b610b0c565b6040516102f59190616cd5565b60405180910390f35b61031860048036038101906103139190616cee565b610b21565b6040516103259190616d33565b60405180910390f35b610336610b3e565b6040516103439190616d5b565b60405180910390f35b61036660048036038101906103619190616d74565b610b64565b005b610382600480360381019061037d9190616dd5565b610c38565b005b61038c610d14565b6040516103999190616d33565b60405180910390f35b6103bc60048036038101906103b79190616f5c565b610d1c565b6040516103c99190616cd5565b60405180910390f35b6103ec60048036038101906103e79190616cee565b610f56565b005b6103f6611030565b6040516104039190616d33565b60405180910390f35b61042660048036038101906104219190616cee565b611046565b604051610434929190616fb6565b60405180910390f35b6104576004803603810190610452919061707b565b6110d4565b005b610473600480360381019061046e9190616a18565b6111a6565b6040516104809190616d33565b60405180910390f35b6104a3600480360381019061049e9190617103565b611278565b005b6104bf60048036038101906104ba919061693b565b6113aa565b6040516104cc9190616d33565b60405180910390f35b6104ef60048036038101906104ea9190617103565b611466565b005b61050b60048036038101906105069190617158565b611598565b005b6105276004803603810190610522919061693b565b6115b3565b005b610543600480360381019061053e919061722d565b6116ff565b005b61055f600480360381019061055a91906172dd565b6117e6565b60405161056c91906173a9565b60405180910390f35b61058f600480360381019061058a91906173c9565b61191c565b60405161059c9190616cd5565b60405180910390f35b6105bf60048036038101906105ba919061746e565b611955565b005b6105db60048036038101906105d691906174df565b611a63565b005b6105f760048036038101906105f2919061693b565b611a73565b005b610613600480360381019061060e9190616d74565b611b50565b005b61062f600480360381019061062a9190616cee565b611c24565b60405161063c9190616d33565b60405180910390f35b61065f600480360381019061065a9190616d74565b611c57565b005b610669611d90565b6040516106769190616d5b565b60405180910390f35b61069960048036038101906106949190616cee565b611db5565b005b6106b560048036038101906106b09190616a18565b611efd565b6040516106c29190616d33565b60405180910390f35b6106e560048036038101906106e091906176ba565b611f90565b6040516106f29190616d33565b60405180910390f35b61071560048036038101906107109190616d74565b612034565b005b610731600480360381019061072c9190617714565b6120d2565b60405161073e91906173a9565b60405180910390f35b61074f6121e7565b60405161075c91906177b6565b60405180910390f35b61076d61220c565b60405161077a9190616d33565b60405180910390f35b61079d60048036038101906107989190616cee565b61221d565b6040516107aa9190616cd5565b60405180910390f35b6107cd60048036038101906107c89190616d74565b612279565b005b6107d8826123b3565b600160055f8481526020019081526020015f205f6101000a81548160ff02191690831515021790555061080a826124a2565b60045f8481526020019081526020015f20819055505f6001600a4261082f91906177fc565b6108399190617859565b90508042610847919061788c565b60065f8581526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b61088c828261252a565b5050565b61089c84848484612548565b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f023b156100bf14eedc41deb8cef114c1fce662c306697f3bfaf3dbca58130bf7858560405161095a9291906178c7565b60405180910390a250505050565b5f601b601f81111561097d5761097c6178ee565b5b84601f8111156109905761098f6178ee565b5b036109c7576040517f98e08ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825184516109d69190617859565b90506003811115610a2b576109ea85612781565b8160036040517f2b0399d5000000000000000000000000000000000000000000000000000000008152600401610a2293929190617954565b60405180910390fd5b610a358486613316565b5f610a408585613590565b90505f610a4e8787876136d2565b90505f610a5d8983858b61373d565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610abd93929190617990565b5f604051808303815f87803b158015610ad4575f5ffd5b505af1158015610ae6573d5f5f3e3d5ffd5b50505050610afd81610af78a612781565b856138c2565b80945050505050949350505050565b6001602052805f5260405f205f915090505481565b6002602052805f5260405f205f915054906101000a900460ff1681565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf557336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610bec9190616d5b565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc957336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610cc09190616d5b565b60405180910390fd5b81600760046101000a81548163ffffffff021916908360030b63ffffffff1602179055508060075f6101000a81548163ffffffff021916908360030b63ffffffff1602179055505050565b5f6001905090565b5f5f836020015160ff1690505f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaa57610d8581613b17565b610de75780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610dde939291906179d4565b60405180910390fd5b5f610df28585613b58565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ea8578060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb5000000000000000000000000000000000000000000000000000000008152600401610e9f929190617a09565b60405180910390fd5b505b5f610ebe855f01518387604001515f613c1c565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610f1e93929190617990565b5f604051808303815f87803b158015610f35575f5ffd5b505af1158015610f47573d5f5f3e3d5ffd5b50505050809250505092915050565b610f5f81613c75565b61102d5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663846cd43382336040518363ffffffff1660e01b8152600401610fbf929190617a30565b5f604051808303815f87803b158015610fd6575f5ffd5b505af1158015610fe8573d5f5f3e3d5ffd5b5050505061102c6040518060400160405280600f81526020017f4648452e616c6c6f77476c6f62616c00000000000000000000000000000000008152508233611a63565b5b50565b5f600360149054906101000a900460ff16905090565b5f5f60055f8481526020019081526020015f205f9054906101000a900460ff16611075575f5f915091506110cf565b60065f8481526020019081526020015f205f9054906101000a900467ffffffffffffffff1667ffffffffffffffff164210156110b6575f5f915091506110cf565b60045f8481526020019081526020015f20546001915091505b915091565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461116657336040517fa974a0fe00000000000000000000000000000000000000000000000000000000815260040161115d9190616d5b565b60405180910390fd5b7f66d3f531abdf188fde59b6d2b282dc7c725ef2bb1c6c93954054721a13c1a3fa83838360405161119993929190617a57565b60405180910390a1505050565b5f5f846040516020016111b99190617aba565b60405160208183030381529060405280519060200120905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112568286868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613cb2565b73ffffffffffffffffffffffffffffffffffffffff1614915050949350505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461130957336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016113009190616d5b565b60405180910390fd5b600760049054906101000a900460030b60030b8160030b12156113845780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161137b939291906179d4565b60405180910390fd5b8060075f6101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b5f6113b483613c75565b156113c25760019050611460565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a84846040518363ffffffff1660e01b815260040161141e929190617a30565b602060405180830381865afa158015611439573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145d9190617ae8565b90505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f757336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016114ee9190616d5b565b60405180910390fd5b60075f9054906101000a900460030b60030b8160030b13156115715780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401611568939291906179d4565b60405180910390fd5b80600760046101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b805f5f6101000a81548160ff02191690831515021790555050565b6115bc82613c75565b6116fb5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a3a7fb8383336040518463ffffffff1660e01b815260040161161e93929190617990565b5f604051808303815f87803b158015611635575f5ffd5b505af1158015611647573d5f5f3e3d5ffd5b505050506116fa3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146116bc576040518060400160405280600981526020017f4648452e616c6c6f7700000000000000000000000000000000000000000000008152506116f3565b6040518060400160405280600d81526020017f4648452e616c6c6f7754686973000000000000000000000000000000000000008152505b8383611a63565b5b5050565b5f5f90505b868690508110156117dd573073ffffffffffffffffffffffffffffffffffffffff16631868370188888481811061173e5761173d617b13565b5b9050602002013587878581811061175857611757617b13565b5b9050602002013586868681811061177257611771617b13565b5b90506020028101906117849190617b4c565b6040518563ffffffff1660e01b81526004016117a39493929190617bea565b5f604051808303815f87803b1580156117ba575f5ffd5b505af11580156117cc573d5f5f3e3d5ffd5b505050508080600101915050611704565b50505050505050565b60605f849050805183856117fa9190617859565b111561183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290617c72565b60405180910390fd5b5f8367ffffffffffffffff81111561185657611855616af2565b5b6040519080825280601f01601f1916602001820160405280156118885781602001600182028036833780820191505090505b5090505f5f90505b8481101561190f578281876118a59190617859565b815181106118b6576118b5617b13565b5b602001015160f81c60f81b8282815181106118d4576118d3617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611890565b5080925050509392505050565b5f838383426040516020016119349493929190617c9f565b604051602081830303815290604052805190602001205f1c90509392505050565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119e757336040517fa974a0fe0000000000000000000000000000000000000000000000000000000081526004016119de9190616d5b565b60405180910390fd5b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b611a6e838383613cdc565b505050565b611a7c82613c75565b611b4c5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228383336040518463ffffffff1660e01b8152600401611ade93929190617990565b5f604051808303815f87803b158015611af5575f5ffd5b505af1158015611b07573d5f5f3e3d5ffd5b50505050611b4b6040518060400160405280601281526020017f4648452e616c6c6f775472616e7369656e7400000000000000000000000000008152508383611a63565b5b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611be157336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611bd89190616d5b565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ce857336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611cdf9190616d5b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d4d576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dbe81613c75565b611efa575f600167ffffffffffffffff811115611dde57611ddd616af2565b5b604051908082528060200260200182016040528015611e0c5781602001602082028036833780820191505090505b50905081815f81518110611e2357611e22617b13565b5b60200260200101818152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c3839ba82336040518363ffffffff1660e01b8152600401611e8b929190617d99565b5f604051808303815f87803b158015611ea2575f5ffd5b505af1158015611eb4573d5f5f3e3d5ffd5b50505050611ef86040518060400160405280601681526020017f4648452e616c6c6f77466f7244656372797074696f6e000000000000000000008152508333611a63565b505b50565b5f3073ffffffffffffffffffffffffffffffffffffffff16634d7cb0c0868686866040518563ffffffff1660e01b8152600401611f3d9493929190617bea565b602060405180830381865afa925050508015611f7757506040513d601f19601f82011682018060405250810190611f749190617ae8565b60015b611f83575f9050611f88565b809150505b949350505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a84846040518363ffffffff1660e01b8152600401611fed929190617efa565b602060405180830381865afa158015612008573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202c9190617ae8565b905092915050565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff0219169083151502179055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8290505f8151036120f75760405180602001604052805f8152509150506121e2565b5f600182516121069190617f28565b67ffffffffffffffff81111561211f5761211e616af2565b5b6040519080825280601f01601f1916602001820160405280156121515781602001600182028036833780820191505090505b5090505f600190505b82518110156121db5782818151811061217657612175617b13565b5b602001015160f81c60f81b8260018361218f9190617f28565b815181106121a05761219f617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350808060010191505061215a565b5080925050505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900460ff1681565b5f5f5f61222984611046565b915091508061226f57836040517f70cf65540000000000000000000000000000000000000000000000000000000081526004016122669190616cd5565b60405180910390fd5b8192505050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461230a57336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016123019190616d5b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361236f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123bc81613c75565b61249f5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a82336040518363ffffffff1660e01b815260040161241c929190617a30565b602060405180830381865afa158015612437573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245b9190617ae8565b61249e5780336040517f4d13139e000000000000000000000000000000000000000000000000000000008152600401612495929190617a30565b60405180910390fd5b5b50565b5f60025f8381526020019081526020015f205f9054906101000a900460ff1661250257816040517f850a796d0000000000000000000000000000000000000000000000000000000081526004016124f99190616cd5565b60405180910390fd5b5f61250c83613dca565b90508060015f8581526020019081526020015f205416915050919050565b5f61253483613dca565b9050612543838284165f613de7565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125ce576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6125d98585613e88565b90505f5f61262a8386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050613ed0565b50915091505f6003811115612642576126416178ee565b5b816003811115612655576126546178ee565b5b14158061268d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156126c4576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127785781600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb500000000000000000000000000000000000000000000000000000000815260040161276f929190617a09565b60405180910390fd5b50505050505050565b60606002601f811115612797576127966178ee565b5b82601f8111156127aa576127a96178ee565b5b036127ec576040518060400160405280600481526020017f63617374000000000000000000000000000000000000000000000000000000008152509050613311565b6003601f811115612800576127ff6178ee565b5b82601f811115612813576128126178ee565b5b03612855576040518060400160405280600a81526020017f7365616c4f7574707574000000000000000000000000000000000000000000008152509050613311565b6004601f811115612869576128686178ee565b5b82601f81111561287c5761287b6178ee565b5b036128be576040518060400160405280600681526020017f73656c65637400000000000000000000000000000000000000000000000000008152509050613311565b6006601f8111156128d2576128d16178ee565b5b82601f8111156128e5576128e46178ee565b5b03612927576040518060400160405280600781526020017f64656372797074000000000000000000000000000000000000000000000000008152509050613311565b6007601f81111561293b5761293a6178ee565b5b82601f81111561294e5761294d6178ee565b5b03612990576040518060400160405280600381526020017f73756200000000000000000000000000000000000000000000000000000000008152509050613311565b6008601f8111156129a4576129a36178ee565b5b82601f8111156129b7576129b66178ee565b5b036129f9576040518060400160405280600381526020017f61646400000000000000000000000000000000000000000000000000000000008152509050613311565b6009601f811115612a0d57612a0c6178ee565b5b82601f811115612a2057612a1f6178ee565b5b03612a62576040518060400160405280600381526020017f786f7200000000000000000000000000000000000000000000000000000000008152509050613311565b600a601f811115612a7657612a756178ee565b5b82601f811115612a8957612a886178ee565b5b03612acb576040518060400160405280600381526020017f616e6400000000000000000000000000000000000000000000000000000000008152509050613311565b600b601f811115612adf57612ade6178ee565b5b82601f811115612af257612af16178ee565b5b03612b34576040518060400160405280600281526020017f6f720000000000000000000000000000000000000000000000000000000000008152509050613311565b600c601f811115612b4857612b476178ee565b5b82601f811115612b5b57612b5a6178ee565b5b03612b9d576040518060400160405280600381526020017f6e6f7400000000000000000000000000000000000000000000000000000000008152509050613311565b600d601f811115612bb157612bb06178ee565b5b82601f811115612bc457612bc36178ee565b5b03612c06576040518060400160405280600381526020017f64697600000000000000000000000000000000000000000000000000000000008152509050613311565b600e601f811115612c1a57612c196178ee565b5b82601f811115612c2d57612c2c6178ee565b5b03612c6f576040518060400160405280600381526020017f72656d00000000000000000000000000000000000000000000000000000000008152509050613311565b600f601f811115612c8357612c826178ee565b5b82601f811115612c9657612c956178ee565b5b03612cd8576040518060400160405280600381526020017f6d756c00000000000000000000000000000000000000000000000000000000008152509050613311565b6010601f811115612cec57612ceb6178ee565b5b82601f811115612cff57612cfe6178ee565b5b03612d41576040518060400160405280600381526020017f73686c00000000000000000000000000000000000000000000000000000000008152509050613311565b6011601f811115612d5557612d546178ee565b5b82601f811115612d6857612d676178ee565b5b03612daa576040518060400160405280600381526020017f73687200000000000000000000000000000000000000000000000000000000008152509050613311565b6012601f811115612dbe57612dbd6178ee565b5b82601f811115612dd157612dd06178ee565b5b03612e13576040518060400160405280600381526020017f67746500000000000000000000000000000000000000000000000000000000008152509050613311565b6013601f811115612e2757612e266178ee565b5b82601f811115612e3a57612e396178ee565b5b03612e7c576040518060400160405280600381526020017f6c746500000000000000000000000000000000000000000000000000000000008152509050613311565b6014601f811115612e9057612e8f6178ee565b5b82601f811115612ea357612ea26178ee565b5b03612ee5576040518060400160405280600281526020017f6c740000000000000000000000000000000000000000000000000000000000008152509050613311565b6015601f811115612ef957612ef86178ee565b5b82601f811115612f0c57612f0b6178ee565b5b03612f4e576040518060400160405280600281526020017f67740000000000000000000000000000000000000000000000000000000000008152509050613311565b6016601f811115612f6257612f616178ee565b5b82601f811115612f7557612f746178ee565b5b03612fb7576040518060400160405280600381526020017f6d696e00000000000000000000000000000000000000000000000000000000008152509050613311565b6017601f811115612fcb57612fca6178ee565b5b82601f811115612fde57612fdd6178ee565b5b03613020576040518060400160405280600381526020017f6d617800000000000000000000000000000000000000000000000000000000008152509050613311565b6018601f811115613034576130336178ee565b5b82601f811115613047576130466178ee565b5b03613089576040518060400160405280600281526020017f65710000000000000000000000000000000000000000000000000000000000008152509050613311565b6019601f81111561309d5761309c6178ee565b5b82601f8111156130b0576130af6178ee565b5b036130f2576040518060400160405280600281526020017f6e650000000000000000000000000000000000000000000000000000000000008152509050613311565b601a601f811115613106576131056178ee565b5b82601f811115613119576131186178ee565b5b0361315b576040518060400160405280600e81526020017f7472697669616c456e63727970740000000000000000000000000000000000008152509050613311565b601b601f81111561316f5761316e6178ee565b5b82601f811115613182576131816178ee565b5b036131c4576040518060400160405280600681526020017f72616e646f6d00000000000000000000000000000000000000000000000000008152509050613311565b601c601f8111156131d8576131d76178ee565b5b82601f8111156131eb576131ea6178ee565b5b0361322d576040518060400160405280600381526020017f726f6c00000000000000000000000000000000000000000000000000000000008152509050613311565b601d601f811115613241576132406178ee565b5b82601f811115613254576132536178ee565b5b03613296576040518060400160405280600381526020017f726f7200000000000000000000000000000000000000000000000000000000008152509050613311565b601e601f8111156132aa576132a96178ee565b5b82601f8111156132bd576132bc6178ee565b5b036132ff576040518060400160405280600681526020017f73717561726500000000000000000000000000000000000000000000000000008152509050613311565b60405180602001604052805f81525090505b919050565b5f61332082612781565b90505f83510361337a5761333382613f25565b61337457806040517fb31612aa00000000000000000000000000000000000000000000000000000000815260040161336b91906173a9565b60405180910390fd5b5061358c565b6004601f81111561338e5761338d6178ee565b5b82601f8111156133a1576133a06178ee565b5b036133b4576133af83613f84565b6134e4565b6133bd826140c5565b1561341357600183511461340e5780835160016040517f9a84351c00000000000000000000000000000000000000000000000000000000815260040161340593929190617f94565b60405180910390fd5b6134e3565b600283511461345f5780835160026040517f9a84351c00000000000000000000000000000000000000000000000000000000815260040161345693929190618009565b60405180910390fd5b5f6134a08460018151811061347757613476617b13565b5b6020026020010151855f8151811061349257613491617b13565b5b602002602001015118614153565b146134e257806040517f52b50ae10000000000000000000000000000000000000000000000000000000081526004016134d991906173a9565b60405180910390fd5b5b5b5f613508845f815181106134fb576134fa617b13565b5b6020026020010151614171565b905061351381613b17565b6135755780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161356c939291906179d4565b60405180910390fd5b61357e84614181565b6135898383866141cf565b50505b5050565b60605f825184516135a19190617859565b67ffffffffffffffff8111156135ba576135b9616af2565b5b6040519080825280602002602001820160405280156135e85781602001602082028036833780820191505090505b5090505f5f90505b84518160ff16101561364f57848160ff168151811061361257613611617b13565b5b6020026020010151828260ff16815181106136305761362f617b13565b5b602002602001018181525050808061364790618045565b9150506135f0565b5b8351855161365e9190617859565b8160ff1610156136c7578385518260ff166136799190617f28565b8151811061368a57613689617b13565b5b6020026020010151828260ff16815181106136a8576136a7617b13565b5b60200260200101818152505080806136bf90618045565b915050613650565b819250505092915050565b5f6136dc84613f25565b156137105781600183516136f09190617f28565b8151811061370157613700617b13565b5b60200260200101519050613736565b613733835f8151811061372657613725617b13565b5b6020026020010151614171565b90505b9392505050565b5f60605f601a601f811115613755576137546178ee565b5b84601f811115613768576137676178ee565b5b1490505f5f90505b85518160ff1610156137d857826137a3878360ff168151811061379657613795617b13565b5b602002602001015161433d565b6040516020016137b49291906180a7565b604051602081830303815290604052925080806137d090618045565b915050613770565b50601e601f8111156137ed576137ec6178ee565b5b84601f811115613800576137ff6178ee565b5b0361385057600f93508161382d865f815181106138205761381f617b13565b5b602002602001015161433d565b60405160200161383e9291906180a7565b60405160208183030381529060405291505b5f84601f811115613864576138636178ee565b5b60f81b9050828160405160200161387c929190618115565b60405160208183030381529060405292505f838051906020012090505f6138b0825f1c8a6138aa8a8e61439f565b87613c1c565b90508095505050505050949350505050565b6001815114806138d957506138d88260026144ca565b5b15613961577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f8151811061391457613913617b13565b5b60200260200101515f5f60405161392f959493929190618175565b60405180910390a161395c8383835f8151811061394f5761394e617b13565b5b60200260200101516144e5565b613b12565b6002815103613a24577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106139a05761399f617b13565b5b6020026020010151846001815181106139bc576139bb617b13565b5b60200260200101515f6040516139d69594939291906181cd565b60405180910390a1613a1f8383835f815181106139f6576139f5617b13565b5b602002602001015184600181518110613a1257613a11617b13565b5b602002602001015161474c565b613b11565b7fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f81518110613a5a57613a59617b13565b5b602002602001015184600181518110613a7657613a75617b13565b5b602002602001015185600281518110613a9257613a91617b13565b5b6020026020010151604051613aab959493929190618225565b60405180910390a1613b108383835f81518110613acb57613aca617b13565b5b602002602001015184600181518110613ae757613ae6617b13565b5b602002602001015185600281518110613b0357613b02617b13565b5b6020026020010151615578565b5b5b505050565b5f600760049054906101000a900460030b60030b8260030b12158015613b51575060075f9054906101000a900460030b60030b8260030b13155b9050919050565b5f5f835f0151846040015185602001518546604051602001613b7e9594939291906182f6565b60405160208183030381529060405290505f818051906020012090505f613ba9828760600151613cb2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613c10576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80935050505092915050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613c4d9190617f28565b851690505f8460ff166008613c62858761571f565b901b179050808217915050949350505050565b5f600160ff8016901c60ff1660ff8016613c8f9190617f28565b600160ff8016901c60ff1660ff8016613ca89190617f28565b8316149050919050565b5f5f5f5f613cc08686613ed0565b925092509250613cd0828261575e565b82935050505092915050565b5f5f9054906101000a900460ff1615613dc557613dc46040518060400160405280600481526020017fe2949c2000000000000000000000000000000000000000000000000000000000815250613d548560107f20000000000000000000000000000000000000000000000000000000000000006158c0565b6040518060400160405280600381526020017f207c200000000000000000000000000000000000000000000000000000000000815250613d9386615a07565b613d9c86615ba3565b604051602001613db09594939291906183b4565b604051602081830303815290604052615bd0565b5b505050565b5f5f613dd583615c69565b90506001816001901b03915050919050565b8160015f8581526020019081526020015f2081905550600160025f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055508015613e8357613e826040518060400160405280600381526020017f736574000000000000000000000000000000000000000000000000000000000081525060405180602001604052805f815250613e7d86615a07565b615d40565b5b505050565b5f5f613e9384615e1e565b9050828160ff1646865f1b604051602001613eb194939291906184a4565b6040516020818303038152906040528051906020012091505092915050565b5f5f5f6041845103613f10575f5f5f602087015192506040870151915060608701515f1a9050613f0288828585615e3a565b955095509550505050613f1e565b5f600285515f1b9250925092505b9250925092565b5f601b601f811115613f3a57613f396178ee565b5b82601f811115613f4d57613f4c6178ee565b5b1480613f7d5750601a601f811115613f6857613f676178ee565b5b82601f811115613f7b57613f7a6178ee565b5b145b9050919050565b6003815114613fce57805160036040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401613fc592919061853b565b60405180910390fd5b5f61401082600281518110613fe657613fe5617b13565b5b60200260200101518360018151811061400257614001617b13565b5b602002602001015118614153565b14614050576040517f52b50ae100000000000000000000000000000000000000000000000000000000815260040161404790618575565b60405180910390fd5b5f614074825f8151811061406757614066617b13565b5b6020026020010151615e1e565b90505f5f821860ff16146140c157805f6040517f884a0e9d0000000000000000000000000000000000000000000000000000000081526004016140b8929190618593565b60405180910390fd5b5050565b5f600c601f8111156140da576140d96178ee565b5b82601f8111156140ed576140ec6178ee565b5b148061411d5750601e601f811115614108576141076178ee565b5b82601f81111561411b5761411a6178ee565b5b145b8061414c57506002601f811115614137576141366178ee565b5b82601f81111561414a576141496178ee565b5b145b9050919050565b5f8160ff80166008600160ff8016901c60ff16901b17169050919050565b5f60ff801682165f0b9050919050565b5f5f90505b81518160ff1610156141cb576141b8828260ff16815181106141ab576141aa617b13565b5b60200260200101516123b3565b80806141c390618045565b915050614186565b5050565b6141d883615f21565b614338576141e583615fde565b1561428b575f5f90505b81518160ff161015614285575f614222838360ff168151811061421557614214617b13565b5b6020026020010151615e1e565b90505f6007821860ff1603614271578360076040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016142689291906185ba565b60405180910390fd5b50808061427d90618045565b9150506141ef565b50614337565b5f5f90505b81518160ff161015614335575f6142c3838360ff16815181106142b6576142b5617b13565b5b6020026020010151615e1e565b90505f6007821860ff1614806142dd57505f5f821860ff16145b156143215783816040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016143189291906185ba565b60405180910390fd5b50808061432d90618045565b915050614290565b505b5b505050565b60605f602067ffffffffffffffff81111561435b5761435a616af2565b5b6040519080825280601f01601f19166020018201604052801561438d5781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f6013601f8111156143b4576143b36178ee565b5b83601f8111156143c7576143c66178ee565b5b14806143f757506014601f8111156143e2576143e16178ee565b5b83601f8111156143f5576143f46178ee565b5b145b8061442657506012601f811115614411576144106178ee565b5b83601f811115614424576144236178ee565b5b145b8061445557506015601f8111156144405761443f6178ee565b5b83601f811115614453576144526178ee565b5b145b8061448457506018601f81111561446f5761446e6178ee565b5b83601f811115614482576144816178ee565b5b145b806144b357506019601f81111561449e5761449d6178ee565b5b83601f8111156144b1576144b06178ee565b5b145b156144c0575f90506144c4565b8190505b92915050565b5f6144dd836144d884612781565b61609b565b905092915050565b6144f082601b6144ca565b156145695761450e836001436145069190617f28565b405f1c61252a565b6145646040518060400160405280600a81526020017f4648452e72616e646f6d0000000000000000000000000000000000000000000081525060405180602001604052805f81525061455f86615a07565b615d40565b614747565b6145748260026144ca565b156145e05761458b83614586836124a2565b61252a565b6145db6040518060400160405280600881526020017f4648452e636173740000000000000000000000000000000000000000000000008152506145cd83615a07565b6145d686615a07565b615d40565b614747565b6145eb82600c6144ca565b15614660575f60016145fc836124a2565b14905061460a8482156160f3565b61465a6040518060400160405280600781526020017f4648452e6e6f740000000000000000000000000000000000000000000000000081525061464c84615a07565b61465587615a07565b615d40565b50614747565b61466b82601e6144ca565b1561470a5761468c8361467d836124a2565b614686846124a2565b0261252a565b6147056040518060400160405280600a81526020017f4648452e737175617265000000000000000000000000000000000000000000008152506146ce83615a07565b6146d784615a07565b6040516020016146e892919061860e565b60405160208183030381529060405261470086615a07565b615d40565b614747565b816040517fd952ce7c00000000000000000000000000000000000000000000000000000000815260040161473e91906173a9565b60405180910390fd5b505050565b6147578360076144ca565b156147f65761477884614769836124a2565b614772856124a2565b0361252a565b6147f16040518060400160405280600781526020017f4648452e737562000000000000000000000000000000000000000000000000008152506147ba84615a07565b6147c384615a07565b6040516020016147d4929190618666565b6040516020818303038152906040526147ec87615a07565b615d40565b615572565b6148018360086144ca565b156148a05761482284614813836124a2565b61481c856124a2565b0161252a565b61489b6040518060400160405280600781526020017f4648452e6164640000000000000000000000000000000000000000000000000081525061486484615a07565b61486d84615a07565b60405160200161487e9291906186be565b60405160208183030381529060405261489687615a07565b615d40565b615572565b6148ab8360096144ca565b1561494a576148cc846148bd836124a2565b6148c6856124a2565b1861252a565b6149456040518060400160405280600781526020017f4648452e786f720000000000000000000000000000000000000000000000000081525061490e84615a07565b61491784615a07565b604051602001614928929190618716565b60405160208183030381529060405261494087615a07565b615d40565b615572565b61495583600a6144ca565b156149f45761497684614967836124a2565b614970856124a2565b1661252a565b6149ef6040518060400160405280600781526020017f4648452e616e64000000000000000000000000000000000000000000000000008152506149b884615a07565b6149c184615a07565b6040516020016149d292919061876e565b6040516020818303038152906040526149ea87615a07565b615d40565b615572565b6149ff83600b6144ca565b15614a9e57614a2084614a11836124a2565b614a1a856124a2565b1761252a565b614a996040518060400160405280600681526020017f4648452e6f720000000000000000000000000000000000000000000000000000815250614a6284615a07565b614a6b84615a07565b604051602001614a7c9291906187c6565b604051602081830303815290604052614a9487615a07565b615d40565b615572565b614aa983600d6144ca565b15614b92575f614ab8826124a2565b90505f8103614af057614aeb857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61252a565b614b13565b614b128582614afe866124a2565b81614b0c57614b0b6177cf565b5b0461252a565b5b614b8c6040518060400160405280600781526020017f4648452e64697600000000000000000000000000000000000000000000000000815250614b5585615a07565b614b5e85615a07565b604051602001614b6f92919061881e565b604051602081830303815290604052614b8788615a07565b615d40565b50615572565b614b9d83600e6144ca565b15614c4a57614bcc84614baf836124a2565b614bb8856124a2565b81614bc657614bc56177cf565b5b0661252a565b614c456040518060400160405280600781526020017f4648452e72656d00000000000000000000000000000000000000000000000000815250614c0e84615a07565b614c1784615a07565b604051602001614c28929190618876565b604051602081830303815290604052614c4087615a07565b615d40565b615572565b614c5583600f6144ca565b15614cf457614c7684614c67836124a2565b614c70856124a2565b0261252a565b614cef6040518060400160405280600781526020017f4648452e6d756c00000000000000000000000000000000000000000000000000815250614cb884615a07565b614cc184615a07565b604051602001614cd292919061860e565b604051602081830303815290604052614cea87615a07565b615d40565b615572565b614cff8360106144ca565b15614d9f57614d2184614d11836124a2565b614d1a856124a2565b901b61252a565b614d9a6040518060400160405280600781526020017f4648452e73686c00000000000000000000000000000000000000000000000000815250614d6384615a07565b614d6c84615a07565b604051602001614d7d9291906188ce565b604051602081830303815290604052614d9587615a07565b615d40565b615572565b614daa8360116144ca565b15614e4a57614dcc84614dbc836124a2565b614dc5856124a2565b901c61252a565b614e456040518060400160405280600781526020017f4648452e73687200000000000000000000000000000000000000000000000000815250614e0e84615a07565b614e1784615a07565b604051602001614e28929190618926565b604051602081830303815290604052614e4087615a07565b615d40565b615572565b614e558360126144ca565b15614ef557614e7784614e67836124a2565b614e70856124a2565b10156160f3565b614ef06040518060400160405280600781526020017f4648452e67746500000000000000000000000000000000000000000000000000815250614eb984615a07565b614ec284615a07565b604051602001614ed392919061897e565b604051602081830303815290604052614eeb87615a07565b615d40565b615572565b614f008360136144ca565b15614fa057614f2284614f12836124a2565b614f1b856124a2565b11156160f3565b614f9b6040518060400160405280600781526020017f4648452e6c746500000000000000000000000000000000000000000000000000815250614f6484615a07565b614f6d84615a07565b604051602001614f7e9291906189d6565b604051602081830303815290604052614f9687615a07565b615d40565b615572565b614fab8360146144ca565b1561504a57614fcc84614fbd836124a2565b614fc6856124a2565b106160f3565b6150456040518060400160405280600681526020017f4648452e6c74000000000000000000000000000000000000000000000000000081525061500e84615a07565b61501784615a07565b604051602001615028929190618a2e565b60405160208183030381529060405261504087615a07565b615d40565b615572565b6150558360156144ca565b156150f45761507684615067836124a2565b615070856124a2565b116160f3565b6150ef6040518060400160405280600681526020017f4648452e677400000000000000000000000000000000000000000000000000008152506150b884615a07565b6150c184615a07565b6040516020016150d2929190618a86565b6040516020818303038152906040526150ea87615a07565b615d40565b615572565b6150ff8360166144ca565b156151bf575f61510e826124a2565b615117846124a2565b1061512a57615125826124a2565b615134565b615133836124a2565b5b9050615140858261252a565b6151b96040518060400160405280600781526020017f4648452e6d696e0000000000000000000000000000000000000000000000000081525061518285615a07565b61518b85615a07565b60405160200161519c929190618b2a565b6040516020818303038152906040526151b488615a07565b615d40565b50615572565b6151ca8360176144ca565b1561528a575f6151d9826124a2565b6151e2846124a2565b116151f5576151f0826124a2565b6151ff565b6151fe836124a2565b5b905061520b858261252a565b6152846040518060400160405280600781526020017f4648452e6d61780000000000000000000000000000000000000000000000000081525061524d85615a07565b61525685615a07565b604051602001615267929190618ba0565b60405160208183030381529060405261527f88615a07565b615d40565b50615572565b6152958360186144ca565b15615334576152b6846152a7836124a2565b6152b0856124a2565b146160f3565b61532f6040518060400160405280600681526020017f4648452e657100000000000000000000000000000000000000000000000000008152506152f884615a07565b61530184615a07565b604051602001615312929190618c16565b60405160208183030381529060405261532a87615a07565b615d40565b615572565b61533f8360196144ca565b156153df5761536184615351836124a2565b61535a856124a2565b14156160f3565b6153da6040518060400160405280600681526020017f4648452e6e6500000000000000000000000000000000000000000000000000008152506153a384615a07565b6153ac84615a07565b6040516020016153bd929190618c6e565b6040516020818303038152906040526153d587615a07565b615d40565b615572565b6153ea83601c6144ca565b1561548a5761540c846153fc836124a2565b615405856124a2565b901b61252a565b6154856040518060400160405280600781526020017f4648452e726f6c0000000000000000000000000000000000000000000000000081525061544e84615a07565b61545784615a07565b6040516020016154689291906188ce565b60405160208183030381529060405261548087615a07565b615d40565b615572565b61549583601d6144ca565b15615535576154b7846154a7836124a2565b6154b0856124a2565b901c61252a565b6155306040518060400160405280600781526020017f4648452e726f72000000000000000000000000000000000000000000000000008152506154f984615a07565b61550284615a07565b604051602001615513929190618926565b60405160208183030381529060405261552b87615a07565b615d40565b615572565b826040517fcef6088500000000000000000000000000000000000000000000000000000000815260040161556991906173a9565b60405180910390fd5b50505050565b61558384601a6144ca565b1561561257615592858461252a565b61560d6155a66155a187616111565b6120d2565b6040516020016155b69190618cc6565b6040516020818303038152906040526155d66155d188616111565b6120d2565b6155df866163bd565b6040516020016155f0929190618d11565b60405160208183030381529060405261560888615a07565b615d40565b615718565b61561d8460046144ca565b156156db57615653856001615631866124a2565b146156445761563f836124a2565b61564e565b61564d846124a2565b5b61252a565b6156d66040518060400160405280600a81526020017f4648452e73656c6563740000000000000000000000000000000000000000000081525061569585615a07565b61569e85615a07565b6156a785615a07565b6040516020016156b993929190618d9e565b6040516020818303038152906040526156d188615a07565b615d40565b615718565b836040517f5e45fa0100000000000000000000000000000000000000000000000000000000815260040161570f91906173a9565b60405180910390fd5b5050505050565b5f600160ff8016901c60ff168260ff16168361573b575f615755565b600160ff8016901c60ff1660ff80166157549190617f28565b5b17905092915050565b5f6003811115615771576157706178ee565b5b826003811115615784576157836178ee565b5b03156158bc576001600381111561579e5761579d6178ee565b5b8260038111156157b1576157b06178ee565b5b036157e8576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156157fc576157fb6178ee565b5b82600381111561580f5761580e6178ee565b5b0361585357805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161584a9190616cd5565b60405180910390fd5b600380811115615866576158656178ee565b5b826003811115615879576158786178ee565b5b036158bb57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016158b29190618dfb565b60405180910390fd5b5b5050565b60605f849050838151106158d75784915050615a00565b5f8467ffffffffffffffff8111156158f2576158f1616af2565b5b6040519080825280601f01601f1916602001820160405280156159245781602001600182028036833780820191505090505b5090505f5f90505b82518110156159a15782818151811061594857615947617b13565b5b602001015160f81c60f81b82828151811061596657615965617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350808060010191505061592c565b5b858110156159f957848282815181106159be576159bd617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080806001019150506159a2565b8193505050505b9392505050565b60605f615a13836163bd565b90505f8151905060068111615a2c578192505050615b9e565b5f60025f8681526020019081526020015f205f9054906101000a900460ff1690505f60015f8781526020019081526020015f205490505f615a6c87616487565b90505f81615a8257615a7d836163bd565b615afd565b60018314615ac5576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250615afc565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b5b90505f615b0989616111565b615b15885f60046117e6565b615b2d8960048a615b269190617f28565b60046117e6565b87615b6d576040518060400160405280600581526020017f454d505459000000000000000000000000000000000000000000000000000000815250615b6f565b845b604051602001615b829493929190618e86565b6040516020818303038152906040529050809750505050505050505b919050565b6060615bc98273ffffffffffffffffffffffffffffffffffffffff16601460ff166164a4565b9050919050565b615c6681604051602401615be491906173a9565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506166e2565b50565b5f5f615c74836166fc565b90505f60ff168160ff1603615c8d576008915050615d3b565b600260ff168160ff1603615ca5576008915050615d3b565b600360ff168160ff1603615cbd576010915050615d3b565b600460ff168160ff1603615cd5576020915050615d3b565b600560ff168160ff1603615ced576040915050615d3b565b600660ff168160ff1603615d05576080915050615d3b565b600860ff168160ff1603615d1e57610100915050615d3b565b600760ff168160ff1603615d365760a0915050615d3b565b5f9150505b919050565b5f5f9054906101000a900460ff1615615e1957615e186040518060400160405280600481526020017fe2949c2000000000000000000000000000000000000000000000000000000000815250615db88560107f20000000000000000000000000000000000000000000000000000000000000006158c0565b6040518060400160405280600381526020017f207c2000000000000000000000000000000000000000000000000000000000008152508585604051602001615e04959493929190618f25565b604051602081830303815290604052615bd0565b5b505050565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115615e76575f600385925092509250615f17565b5f6001888888886040515f8152602001604052604051615e999493929190618f7e565b6020604051602081039080840390855afa158015615eb9573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603615f0a575f60015f5f1b93509350935050615f17565b805f5f5f1b935093509350505b9450945094915050565b5f6004601f811115615f3657615f356178ee565b5b82601f811115615f4957615f486178ee565b5b1480615f7957506018601f811115615f6457615f636178ee565b5b82601f811115615f7757615f766178ee565b5b145b80615fa857506019601f811115615f9357615f926178ee565b5b82601f811115615fa657615fa56178ee565b5b145b80615fd757506002601f811115615fc257615fc16178ee565b5b82601f811115615fd557615fd46178ee565b5b145b9050919050565b5f6009601f811115615ff357615ff26178ee565b5b82601f811115616006576160056178ee565b5b14806160365750600a601f811115616021576160206178ee565b5b82601f811115616034576160336178ee565b5b145b806160655750600b601f8111156160505761604f6178ee565b5b82601f811115616063576160626178ee565b5b145b806160945750600c601f81111561607f5761607e6178ee565b5b82601f811115616092576160916178ee565b5b145b9050919050565b5f816040516020016160ad9190618fc1565b60405160208183030381529060405280519060200120836040516020016160d49190618fc1565b6040516020818303038152906040528051906020012014905092915050565b61610d8282616102575f616105565b60015b60ff1661252a565b5050565b60605f61611d836166fc565b90505f60ff168160ff160361616a576040518060400160405280600581526020017f65626f6f6c0000000000000000000000000000000000000000000000000000008152509150506163b8565b600260ff168160ff16036161b6576040518060400160405280600681526020017f6575696e743800000000000000000000000000000000000000000000000000008152509150506163b8565b600360ff168160ff1603616202576040518060400160405280600781526020017f6575696e743136000000000000000000000000000000000000000000000000008152509150506163b8565b600460ff168160ff160361624e576040518060400160405280600781526020017f6575696e743332000000000000000000000000000000000000000000000000008152509150506163b8565b600560ff168160ff160361629a576040518060400160405280600781526020017f6575696e743634000000000000000000000000000000000000000000000000008152509150506163b8565b600660ff168160ff16036162e6576040518060400160405280600881526020017f6575696e743132380000000000000000000000000000000000000000000000008152509150506163b8565b600860ff168160ff1603616332576040518060400160405280600881526020017f6575696e743235360000000000000000000000000000000000000000000000008152509150506163b8565b600760ff168160ff160361637e576040518060400160405280600881526020017f65616464726573730000000000000000000000000000000000000000000000008152509150506163b8565b6040518060400160405280600781526020017f756e6b6e6f776e000000000000000000000000000000000000000000000000008152509150505b919050565b60605f60016163cb84616718565b0190505f8167ffffffffffffffff8111156163e9576163e8616af2565b5b6040519080825280601f01601f19166020018201604052801561641b5781602001600182028036833780820191505090505b5090505f82602083010190505b60011561647c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581616471576164706177cf565b5b0494505f8503616428575b819350505050919050565b5f5f616492836166fc565b90505f5f821860ff1614915050919050565b60605f8390505f60028460026164ba9190618fd7565b6164c49190617859565b67ffffffffffffffff8111156164dd576164dc616af2565b5b6040519080825280601f01601f19166020018201604052801561650f5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061654657616545617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106165a9576165a8617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f60018560026165e79190618fd7565b6165f19190617859565b90505b6001811115616690577f3031323334353637383961626364656600000000000000000000000000000000600f84166010811061663357616632617b13565b5b1a60f81b82828151811061664a57616649617b13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c92508061668990619018565b90506165f4565b505f82146166d75784846040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004016166ce9291906178c7565b60405180910390fd5b809250505092915050565b6166f9816166f1616869616888565b63ffffffff16565b50565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310616774577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161676a576167696177cf565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106167b1576d04ee2d6d415b85acef810000000083816167a7576167a66177cf565b5b0492506020810190505b662386f26fc1000083106167e057662386f26fc1000083816167d6576167d56177cf565b5b0492506010810190505b6305f5e1008310616809576305f5e10083816167ff576167fe6177cf565b5b0492506008810190505b612710831061682e576127108381616824576168236177cf565b5b0492506004810190505b606483106168515760648381616847576168466177cf565b5b0492506002810190505b600a8310616860576001810190505b80915050919050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b616893819050919050565b61689b61903f565b565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b6168c0816168ae565b81146168ca575f5ffd5b50565b5f813590506168db816168b7565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61690a826168e1565b9050919050565b61691a81616900565b8114616924575f5ffd5b50565b5f8135905061693581616911565b92915050565b5f5f60408385031215616951576169506168a6565b5b5f61695e858286016168cd565b925050602061696f85828601616927565b9150509250929050565b5f5f6040838503121561698f5761698e6168a6565b5b5f61699c858286016168cd565b92505060206169ad858286016168cd565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126169d8576169d76169b7565b5b8235905067ffffffffffffffff8111156169f5576169f46169bb565b5b602083019150836001820283011115616a1157616a106169bf565b5b9250929050565b5f5f5f5f60608587031215616a3057616a2f6168a6565b5b5f616a3d878288016168cd565b9450506020616a4e878288016168cd565b935050604085013567ffffffffffffffff811115616a6f57616a6e6168aa565b5b616a7b878288016169c3565b925092505092959194509250565b5f60ff82169050919050565b616a9e81616a89565b8114616aa8575f5ffd5b50565b5f81359050616ab981616a95565b92915050565b60208110616acb575f5ffd5b50565b5f81359050616adc81616abf565b92915050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b616b2882616ae2565b810181811067ffffffffffffffff82111715616b4757616b46616af2565b5b80604052505050565b5f616b5961689d565b9050616b658282616b1f565b919050565b5f67ffffffffffffffff821115616b8457616b83616af2565b5b602082029050602081019050919050565b5f616ba7616ba284616b6a565b616b50565b90508083825260208201905060208402830185811115616bca57616bc96169bf565b5b835b81811015616bf35780616bdf88826168cd565b845260208401935050602081019050616bcc565b5050509392505050565b5f82601f830112616c1157616c106169b7565b5b8135616c21848260208601616b95565b91505092915050565b5f5f5f5f60808587031215616c4257616c416168a6565b5b5f616c4f87828801616aab565b9450506020616c6087828801616ace565b935050604085013567ffffffffffffffff811115616c8157616c806168aa565b5b616c8d87828801616bfd565b925050606085013567ffffffffffffffff811115616cae57616cad6168aa565b5b616cba87828801616bfd565b91505092959194509250565b616ccf816168ae565b82525050565b5f602082019050616ce85f830184616cc6565b92915050565b5f60208284031215616d0357616d026168a6565b5b5f616d10848285016168cd565b91505092915050565b5f8115159050919050565b616d2d81616d19565b82525050565b5f602082019050616d465f830184616d24565b92915050565b616d5581616900565b82525050565b5f602082019050616d6e5f830184616d4c565b92915050565b5f60208284031215616d8957616d886168a6565b5b5f616d9684828501616927565b91505092915050565b5f8160030b9050919050565b616db481616d9f565b8114616dbe575f5ffd5b50565b5f81359050616dcf81616dab565b92915050565b5f5f60408385031215616deb57616dea6168a6565b5b5f616df885828601616dc1565b9250506020616e0985828601616dc1565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff821115616e3957616e38616af2565b5b616e4282616ae2565b9050602081019050919050565b828183375f83830152505050565b5f616e6f616e6a84616e1f565b616b50565b905082815260208101848484011115616e8b57616e8a616e1b565b5b616e96848285616e4f565b509392505050565b5f82601f830112616eb257616eb16169b7565b5b8135616ec2848260208601616e5d565b91505092915050565b5f60808284031215616ee057616edf616e13565b5b616eea6080616b50565b90505f616ef9848285016168cd565b5f830152506020616f0c84828501616aab565b6020830152506040616f2084828501616aab565b604083015250606082013567ffffffffffffffff811115616f4457616f43616e17565b5b616f5084828501616e9e565b60608301525092915050565b5f5f60408385031215616f7257616f716168a6565b5b5f83013567ffffffffffffffff811115616f8f57616f8e6168aa565b5b616f9b85828601616ecb565b9250506020616fac85828601616927565b9150509250929050565b5f604082019050616fc95f830185616cc6565b616fd66020830184616d24565b9392505050565b5f67ffffffffffffffff821115616ff757616ff6616af2565b5b61700082616ae2565b9050602081019050919050565b5f61701f61701a84616fdd565b616b50565b90508281526020810184848401111561703b5761703a616e1b565b5b617046848285616e4f565b509392505050565b5f82601f830112617062576170616169b7565b5b813561707284826020860161700d565b91505092915050565b5f5f5f60608486031215617092576170916168a6565b5b5f61709f868287016168cd565b935050602084013567ffffffffffffffff8111156170c0576170bf6168aa565b5b6170cc8682870161704e565b925050604084013567ffffffffffffffff8111156170ed576170ec6168aa565b5b6170f98682870161704e565b9150509250925092565b5f60208284031215617118576171176168a6565b5b5f61712584828501616dc1565b91505092915050565b61713781616d19565b8114617141575f5ffd5b50565b5f813590506171528161712e565b92915050565b5f6020828403121561716d5761716c6168a6565b5b5f61717a84828501617144565b91505092915050565b5f5f83601f840112617198576171976169b7565b5b8235905067ffffffffffffffff8111156171b5576171b46169bb565b5b6020830191508360208202830111156171d1576171d06169bf565b5b9250929050565b5f5f83601f8401126171ed576171ec6169b7565b5b8235905067ffffffffffffffff81111561720a576172096169bb565b5b602083019150836020820283011115617226576172256169bf565b5b9250929050565b5f5f5f5f5f5f60608789031215617247576172466168a6565b5b5f87013567ffffffffffffffff811115617264576172636168aa565b5b61727089828a01617183565b9650965050602087013567ffffffffffffffff811115617293576172926168aa565b5b61729f89828a01617183565b9450945050604087013567ffffffffffffffff8111156172c2576172c16168aa565b5b6172ce89828a016171d8565b92509250509295509295509295565b5f5f5f606084860312156172f4576172f36168a6565b5b5f84013567ffffffffffffffff811115617311576173106168aa565b5b61731d8682870161704e565b935050602061732e868287016168cd565b925050604061733f868287016168cd565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61737b82617349565b6173858185617353565b9350617395818560208601617363565b61739e81616ae2565b840191505092915050565b5f6020820190508181035f8301526173c18184617371565b905092915050565b5f5f5f606084860312156173e0576173df6168a6565b5b5f6173ed86828701616aab565b93505060206173fe868287016168cd565b925050604061740f86828701616dc1565b9150509250925092565b5f5f83601f84011261742e5761742d6169b7565b5b8235905067ffffffffffffffff81111561744b5761744a6169bb565b5b602083019150836020820283011115617467576174666169bf565b5b9250929050565b5f5f5f5f60608587031215617486576174856168a6565b5b5f617493878288016168cd565b94505060206174a4878288016168cd565b935050604085013567ffffffffffffffff8111156174c5576174c46168aa565b5b6174d187828801617419565b925092505092959194509250565b5f5f5f606084860312156174f6576174f56168a6565b5b5f84013567ffffffffffffffff811115617513576175126168aa565b5b61751f8682870161704e565b9350506020617530868287016168cd565b925050604061754186828701616927565b9150509250925092565b5f67ffffffffffffffff82169050919050565b6175678161754b565b8114617571575f5ffd5b50565b5f813590506175828161755e565b92915050565b5f819050919050565b61759a81617588565b81146175a4575f5ffd5b50565b5f813590506175b581617591565b92915050565b5f61010082840312156175d1576175d0616e13565b5b6175dc610100616b50565b90505f6175eb84828501616927565b5f8301525060206175fe84828501617574565b602083015250604061761284828501616927565b6040830152506060617626848285016168cd565b606083015250608061763a84828501616927565b60808301525060a061764e848285016175a7565b60a08301525060c082013567ffffffffffffffff81111561767257617671616e17565b5b61767e84828501616e9e565b60c08301525060e082013567ffffffffffffffff8111156176a2576176a1616e17565b5b6176ae84828501616e9e565b60e08301525092915050565b5f5f604083850312156176d0576176cf6168a6565b5b5f83013567ffffffffffffffff8111156176ed576176ec6168aa565b5b6176f9858286016175bb565b925050602061770a858286016168cd565b9150509250929050565b5f60208284031215617729576177286168a6565b5b5f82013567ffffffffffffffff811115617746576177456168aa565b5b6177528482850161704e565b91505092915050565b5f819050919050565b5f61777e617779617774846168e1565b61775b565b6168e1565b9050919050565b5f61778f82617764565b9050919050565b5f6177a082617785565b9050919050565b6177b081617796565b82525050565b5f6020820190506177c95f8301846177a7565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f617806826168ae565b9150617811836168ae565b925082617821576178206177cf565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f617863826168ae565b915061786e836168ae565b92508282019050808211156178865761788561782c565b5b92915050565b5f6178968261754b565b91506178a18361754b565b9250828201905067ffffffffffffffff8111156178c1576178c061782c565b5b92915050565b5f6040820190506178da5f830185616cc6565b6178e76020830184616cc6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050919050565b5f61793e6179396179348461791b565b61775b565b6168ae565b9050919050565b61794e81617924565b82525050565b5f6060820190508181035f83015261796c8186617371565b905061797b6020830185616cc6565b6179886040830184617945565b949350505050565b5f6060820190506179a35f830186616cc6565b6179b06020830185616d4c565b6179bd6040830184616d4c565b949350505050565b6179ce81616d9f565b82525050565b5f6060820190506179e75f8301866179c5565b6179f460208301856179c5565b617a0160408301846179c5565b949350505050565b5f604082019050617a1c5f830185616d4c565b617a296020830184616d4c565b9392505050565b5f604082019050617a435f830185616cc6565b617a506020830184616d4c565b9392505050565b5f606082019050617a6a5f830186616cc6565b8181036020830152617a7c8185617371565b90508181036040830152617a908184617371565b9050949350505050565b5f819050919050565b617ab4617aaf826168ae565b617a9a565b82525050565b5f617ac58284617aa3565b60208201915081905092915050565b5f81519050617ae28161712e565b92915050565b5f60208284031215617afd57617afc6168a6565b5b5f617b0a84828501617ad4565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83356001602003843603038112617b6857617b67617b40565b5b80840192508235915067ffffffffffffffff821115617b8a57617b89617b44565b5b602083019250600182023603831315617ba657617ba5617b48565b5b509250929050565b5f82825260208201905092915050565b5f617bc98385617bae565b9350617bd6838584616e4f565b617bdf83616ae2565b840190509392505050565b5f606082019050617bfd5f830187616cc6565b617c0a6020830186616cc6565b8181036040830152617c1d818486617bbe565b905095945050505050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f617c5c600d83617353565b9150617c6782617c28565b602082019050919050565b5f6020820190508181035f830152617c8981617c50565b9050919050565b617c9981616a89565b82525050565b5f608082019050617cb25f830187617c90565b617cbf6020830186616cc6565b617ccc60408301856179c5565b617cd96060830184616cc6565b95945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b617d14816168ae565b82525050565b5f617d258383617d0b565b60208301905092915050565b5f602082019050919050565b5f617d4782617ce2565b617d518185617cec565b9350617d5c83617cfc565b805f5b83811015617d8c578151617d738882617d1a565b9750617d7e83617d31565b925050600181019050617d5f565b5085935050505092915050565b5f6040820190508181035f830152617db18185617d3d565b9050617dc06020830184616d4c565b9392505050565b617dd081616900565b82525050565b617ddf8161754b565b82525050565b617dee81617588565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f617e1882617df4565b617e228185617dfe565b9350617e32818560208601617363565b617e3b81616ae2565b840191505092915050565b5f61010083015f830151617e5c5f860182617dc7565b506020830151617e6f6020860182617dd6565b506040830151617e826040860182617dc7565b506060830151617e956060860182617d0b565b506080830151617ea86080860182617dc7565b5060a0830151617ebb60a0860182617de5565b5060c083015184820360c0860152617ed38282617e0e565b91505060e083015184820360e0860152617eed8282617e0e565b9150508091505092915050565b5f6040820190508181035f830152617f128185617e46565b9050617f216020830184616cc6565b9392505050565b5f617f32826168ae565b9150617f3d836168ae565b9250828203905081811115617f5557617f5461782c565b5b92915050565b5f819050919050565b5f617f7e617f79617f7484617f5b565b61775b565b6168ae565b9050919050565b617f8e81617f64565b82525050565b5f6060820190508181035f830152617fac8186617371565b9050617fbb6020830185616cc6565b617fc86040830184617f85565b949350505050565b5f819050919050565b5f617ff3617fee617fe984617fd0565b61775b565b6168ae565b9050919050565b61800381617fd9565b82525050565b5f6060820190508181035f8301526180218186617371565b90506180306020830185616cc6565b61803d6040830184617ffa565b949350505050565b5f61804f82616a89565b915060ff82036180625761806161782c565b5b600182019050919050565b5f81905092915050565b5f61808182617df4565b61808b818561806d565b935061809b818560208601617363565b80840191505092915050565b5f6180b28285618077565b91506180be8284618077565b91508190509392505050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61810f61810a826180ca565b6180f5565b82525050565b5f6181208285618077565b915061812c82846180fe565b6001820191508190509392505050565b5f819050919050565b5f61815f61815a6181558461813c565b61775b565b6168ae565b9050919050565b61816f81618145565b82525050565b5f60a0820190506181885f830188616cc6565b818103602083015261819a8187617371565b90506181a96040830186616cc6565b6181b66060830185618166565b6181c36080830184618166565b9695505050505050565b5f60a0820190506181e05f830188616cc6565b81810360208301526181f28187617371565b90506182016040830186616cc6565b61820e6060830185616cc6565b61821b6080830184618166565b9695505050505050565b5f60a0820190506182385f830188616cc6565b818103602083015261824a8187617371565b90506182596040830186616cc6565b6182666060830185616cc6565b6182736080830184616cc6565b9695505050505050565b5f8160f81b9050919050565b5f6182938261827d565b9050919050565b6182ab6182a682616a89565b618289565b82525050565b5f8160601b9050919050565b5f6182c7826182b1565b9050919050565b5f6182d8826182bd565b9050919050565b6182f06182eb82616900565b6182ce565b82525050565b5f6183018288617aa3565b602082019150618311828761829a565b600182019150618321828661829a565b60018201915061833182856182df565b6014820191506183418284617aa3565b6020820191508190509695505050505050565b5f81905092915050565b5f61836882617349565b6183728185618354565b9350618382818560208601617363565b80840191505092915050565b7f202d3e2000000000000000000000000000000000000000000000000000000000815250565b5f6183bf828861835e565b91506183cb828761835e565b91506183d7828661835e565b91506183e3828561835e565b91506183ee8261838e565b6004820191506183fe828461835e565b91508190509695505050505050565b5f63ffffffff82169050919050565b5f8160e01b9050919050565b5f6184328261841c565b9050919050565b61844a6184458261840d565b618428565b82525050565b5f8160c01b9050919050565b5f61846682618450565b9050919050565b61847e6184798261754b565b61845c565b82525050565b5f819050919050565b61849e61849982617588565b618484565b82525050565b5f6184af8287617aa3565b6020820191506184bf8286618439565b6004820191506184cf828561846d565b6008820191506184df828461848d565b60208201915081905095945050505050565b7f73656c65637400000000000000000000000000000000000000000000000000005f82015250565b5f618525600683617353565b9150618530826184f1565b602082019050919050565b5f6060820190508181035f83015261855281618519565b90506185616020830185616cc6565b61856e6040830184617945565b9392505050565b5f6020820190508181035f83015261858c81618519565b9050919050565b5f6040820190506185a65f830185617c90565b6185b36020830184617c90565b9392505050565b5f6040820190508181035f8301526185d28185617371565b90506185e16020830184617c90565b9392505050565b7f202a200000000000000000000000000000000000000000000000000000000000815250565b5f618619828561835e565b9150618624826185e8565b600382019150618634828461835e565b91508190509392505050565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b5f618671828561835e565b915061867c82618640565b60038201915061868c828461835e565b91508190509392505050565b7f202b200000000000000000000000000000000000000000000000000000000000815250565b5f6186c9828561835e565b91506186d482618698565b6003820191506186e4828461835e565b91508190509392505050565b7f205e200000000000000000000000000000000000000000000000000000000000815250565b5f618721828561835e565b915061872c826186f0565b60038201915061873c828461835e565b91508190509392505050565b7f2026200000000000000000000000000000000000000000000000000000000000815250565b5f618779828561835e565b915061878482618748565b600382019150618794828461835e565b91508190509392505050565b7f207c200000000000000000000000000000000000000000000000000000000000815250565b5f6187d1828561835e565b91506187dc826187a0565b6003820191506187ec828461835e565b91508190509392505050565b7f202f200000000000000000000000000000000000000000000000000000000000815250565b5f618829828561835e565b9150618834826187f8565b600382019150618844828461835e565b91508190509392505050565b7f2025200000000000000000000000000000000000000000000000000000000000815250565b5f618881828561835e565b915061888c82618850565b60038201915061889c828461835e565b91508190509392505050565b7f203c3c2000000000000000000000000000000000000000000000000000000000815250565b5f6188d9828561835e565b91506188e4826188a8565b6004820191506188f4828461835e565b91508190509392505050565b7f203e3e2000000000000000000000000000000000000000000000000000000000815250565b5f618931828561835e565b915061893c82618900565b60048201915061894c828461835e565b91508190509392505050565b7f203e3d2000000000000000000000000000000000000000000000000000000000815250565b5f618989828561835e565b915061899482618958565b6004820191506189a4828461835e565b91508190509392505050565b7f203c3d2000000000000000000000000000000000000000000000000000000000815250565b5f6189e1828561835e565b91506189ec826189b0565b6004820191506189fc828461835e565b91508190509392505050565b7f203c200000000000000000000000000000000000000000000000000000000000815250565b5f618a39828561835e565b9150618a4482618a08565b600382019150618a54828461835e565b91508190509392505050565b7f203e200000000000000000000000000000000000000000000000000000000000815250565b5f618a91828561835e565b9150618a9c82618a60565b600382019150618aac828461835e565b91508190509392505050565b7f6d696e2800000000000000000000000000000000000000000000000000000000815250565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b5f618b3482618ab8565b600482019150618b44828561835e565b9150618b4f82618ade565b600282019150618b5f828461835e565b9150618b6a82618b04565b6001820191508190509392505050565b7f6d61782800000000000000000000000000000000000000000000000000000000815250565b5f618baa82618b7a565b600482019150618bba828561835e565b9150618bc582618ade565b600282019150618bd5828461835e565b9150618be082618b04565b6001820191508190509392505050565b7f203d3d2000000000000000000000000000000000000000000000000000000000815250565b5f618c21828561835e565b9150618c2c82618bf0565b600482019150618c3c828461835e565b91508190509392505050565b7f20213d2000000000000000000000000000000000000000000000000000000000815250565b5f618c79828561835e565b9150618c8482618c48565b600482019150618c94828461835e565b91508190509392505050565b7f4648452e61734500000000000000000000000000000000000000000000000000815250565b5f618cd082618ca0565b600782019150618ce0828461835e565b915081905092915050565b7f2800000000000000000000000000000000000000000000000000000000000000815250565b5f618d1c828561835e565b9150618d2782618ceb565b600182019150618d37828461835e565b9150618d4282618b04565b6001820191508190509392505050565b7f203f200000000000000000000000000000000000000000000000000000000000815250565b7f203a200000000000000000000000000000000000000000000000000000000000815250565b5f618da9828661835e565b9150618db482618d52565b600382019150618dc4828561835e565b9150618dcf82618d78565b600382019150618ddf828461835e565b9150819050949350505050565b618df581617588565b82525050565b5f602082019050618e0e5f830184618dec565b92915050565b7f2e2e000000000000000000000000000000000000000000000000000000000000815250565b7f295b000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f618e91828761835e565b9150618e9c82618ceb565b600182019150618eac828661835e565b9150618eb782618e14565b600282019150618ec7828561835e565b9150618ed282618e3a565b600282019150618ee2828461835e565b9150618eed82618e60565b60018201915081905095945050505050565b7f20203d3e20200000000000000000000000000000000000000000000000000000815250565b5f618f30828861835e565b9150618f3c828761835e565b9150618f48828661835e565b9150618f54828561835e565b9150618f5f82618eff565b600682019150618f6f828461835e565b91508190509695505050505050565b5f608082019050618f915f830187618dec565b618f9e6020830186617c90565b618fab6040830185618dec565b618fb86060830184618dec565b95945050505050565b5f618fcc828461835e565b915081905092915050565b5f618fe1826168ae565b9150618fec836168ae565b9250828202618ffa816168ae565b915082820484148315176190115761901061782c565b5b5092915050565b5f619022826168ae565b91505f82036190345761903361782c565b5b600182039050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea26469706673582212208563f397777ff71c43a75b553c1218b3bafe1311098ffcff43c41154a4544e0864736f6c63430008210033',
|
|
1028
1211
|
} satisfies MockArtifact;
|