@cofhe/mock-contracts 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,2481 +2,2486 @@
2
2
 
3
3
  // src/MockTaskManager.ts
4
4
  var MockTaskManagerArtifact = {
5
- "contractName": "MockTaskManager",
6
- "fixedAddress": "0xeA30c4B8b44078Bbf8a6ef5b9f1eC1626C7848D9",
7
- "abi": [
5
+ contractName: "MockTaskManager",
6
+ fixedAddress: "0xeA30c4B8b44078Bbf8a6ef5b9f1eC1626C7848D9",
7
+ abi: [
8
8
  {
9
- "type": "constructor",
10
- "inputs": [],
11
- "stateMutability": "nonpayable"
9
+ type: "constructor",
10
+ inputs: [],
11
+ stateMutability: "nonpayable"
12
12
  },
13
13
  {
14
- "type": "function",
15
- "name": "MOCK_logAllow",
16
- "inputs": [
14
+ type: "function",
15
+ name: "MOCK_logAllow",
16
+ inputs: [
17
17
  {
18
- "name": "operation",
19
- "type": "string",
20
- "internalType": "string"
18
+ name: "operation",
19
+ type: "string",
20
+ internalType: "string"
21
21
  },
22
22
  {
23
- "name": "ctHash",
24
- "type": "uint256",
25
- "internalType": "uint256"
23
+ name: "ctHash",
24
+ type: "uint256",
25
+ internalType: "uint256"
26
26
  },
27
27
  {
28
- "name": "account",
29
- "type": "address",
30
- "internalType": "address"
28
+ name: "account",
29
+ type: "address",
30
+ internalType: "address"
31
31
  }
32
32
  ],
33
- "outputs": [],
34
- "stateMutability": "view"
33
+ outputs: [],
34
+ stateMutability: "view"
35
35
  },
36
36
  {
37
- "type": "function",
38
- "name": "MOCK_setInEuintKey",
39
- "inputs": [
37
+ type: "function",
38
+ name: "MOCK_setInEuintKey",
39
+ inputs: [
40
40
  {
41
- "name": "ctHash",
42
- "type": "uint256",
43
- "internalType": "uint256"
41
+ name: "ctHash",
42
+ type: "uint256",
43
+ internalType: "uint256"
44
44
  },
45
45
  {
46
- "name": "value",
47
- "type": "uint256",
48
- "internalType": "uint256"
46
+ name: "value",
47
+ type: "uint256",
48
+ internalType: "uint256"
49
49
  }
50
50
  ],
51
- "outputs": [],
52
- "stateMutability": "nonpayable"
51
+ outputs: [],
52
+ stateMutability: "nonpayable"
53
53
  },
54
54
  {
55
- "type": "function",
56
- "name": "acl",
57
- "inputs": [],
58
- "outputs": [
55
+ type: "function",
56
+ name: "acl",
57
+ inputs: [],
58
+ outputs: [
59
59
  {
60
- "name": "",
61
- "type": "address",
62
- "internalType": "contract MockACL"
60
+ name: "",
61
+ type: "address",
62
+ internalType: "contract MockACL"
63
63
  }
64
64
  ],
65
- "stateMutability": "view"
65
+ stateMutability: "view"
66
66
  },
67
67
  {
68
- "type": "function",
69
- "name": "aggregator",
70
- "inputs": [],
71
- "outputs": [
68
+ type: "function",
69
+ name: "aggregator",
70
+ inputs: [],
71
+ outputs: [
72
72
  {
73
- "name": "",
74
- "type": "address",
75
- "internalType": "address"
73
+ name: "",
74
+ type: "address",
75
+ internalType: "address"
76
76
  }
77
77
  ],
78
- "stateMutability": "view"
78
+ stateMutability: "view"
79
79
  },
80
80
  {
81
- "type": "function",
82
- "name": "allow",
83
- "inputs": [
81
+ type: "function",
82
+ name: "allow",
83
+ inputs: [
84
84
  {
85
- "name": "ctHash",
86
- "type": "uint256",
87
- "internalType": "uint256"
85
+ name: "ctHash",
86
+ type: "uint256",
87
+ internalType: "uint256"
88
88
  },
89
89
  {
90
- "name": "account",
91
- "type": "address",
92
- "internalType": "address"
90
+ name: "account",
91
+ type: "address",
92
+ internalType: "address"
93
93
  }
94
94
  ],
95
- "outputs": [],
96
- "stateMutability": "nonpayable"
95
+ outputs: [],
96
+ stateMutability: "nonpayable"
97
97
  },
98
98
  {
99
- "type": "function",
100
- "name": "allowForDecryption",
101
- "inputs": [
99
+ type: "function",
100
+ name: "allowForDecryption",
101
+ inputs: [
102
102
  {
103
- "name": "ctHash",
104
- "type": "uint256",
105
- "internalType": "uint256"
103
+ name: "ctHash",
104
+ type: "uint256",
105
+ internalType: "uint256"
106
106
  }
107
107
  ],
108
- "outputs": [],
109
- "stateMutability": "nonpayable"
108
+ outputs: [],
109
+ stateMutability: "nonpayable"
110
110
  },
111
111
  {
112
- "type": "function",
113
- "name": "allowGlobal",
114
- "inputs": [
112
+ type: "function",
113
+ name: "allowGlobal",
114
+ inputs: [
115
115
  {
116
- "name": "ctHash",
117
- "type": "uint256",
118
- "internalType": "uint256"
116
+ name: "ctHash",
117
+ type: "uint256",
118
+ internalType: "uint256"
119
119
  }
120
120
  ],
121
- "outputs": [],
122
- "stateMutability": "nonpayable"
121
+ outputs: [],
122
+ stateMutability: "nonpayable"
123
123
  },
124
124
  {
125
- "type": "function",
126
- "name": "allowTransient",
127
- "inputs": [
125
+ type: "function",
126
+ name: "allowTransient",
127
+ inputs: [
128
128
  {
129
- "name": "ctHash",
130
- "type": "uint256",
131
- "internalType": "uint256"
129
+ name: "ctHash",
130
+ type: "uint256",
131
+ internalType: "uint256"
132
132
  },
133
133
  {
134
- "name": "account",
135
- "type": "address",
136
- "internalType": "address"
134
+ name: "account",
135
+ type: "address",
136
+ internalType: "address"
137
137
  }
138
138
  ],
139
- "outputs": [],
140
- "stateMutability": "nonpayable"
139
+ outputs: [],
140
+ stateMutability: "nonpayable"
141
141
  },
142
142
  {
143
- "type": "function",
144
- "name": "createDecryptTask",
145
- "inputs": [
143
+ type: "function",
144
+ name: "createDecryptTask",
145
+ inputs: [
146
146
  {
147
- "name": "ctHash",
148
- "type": "uint256",
149
- "internalType": "uint256"
147
+ name: "ctHash",
148
+ type: "uint256",
149
+ internalType: "uint256"
150
150
  },
151
151
  {
152
- "name": "",
153
- "type": "address",
154
- "internalType": "address"
152
+ name: "",
153
+ type: "address",
154
+ internalType: "address"
155
155
  }
156
156
  ],
157
- "outputs": [],
158
- "stateMutability": "nonpayable"
157
+ outputs: [],
158
+ stateMutability: "nonpayable"
159
159
  },
160
160
  {
161
- "type": "function",
162
- "name": "createTask",
163
- "inputs": [
161
+ type: "function",
162
+ name: "createTask",
163
+ inputs: [
164
164
  {
165
- "name": "returnType",
166
- "type": "uint8",
167
- "internalType": "uint8"
165
+ name: "returnType",
166
+ type: "uint8",
167
+ internalType: "uint8"
168
168
  },
169
169
  {
170
- "name": "funcId",
171
- "type": "uint8",
172
- "internalType": "enum FunctionId"
170
+ name: "funcId",
171
+ type: "uint8",
172
+ internalType: "enum FunctionId"
173
173
  },
174
174
  {
175
- "name": "encryptedHashes",
176
- "type": "uint256[]",
177
- "internalType": "uint256[]"
175
+ name: "encryptedHashes",
176
+ type: "uint256[]",
177
+ internalType: "uint256[]"
178
178
  },
179
179
  {
180
- "name": "extraInputs",
181
- "type": "uint256[]",
182
- "internalType": "uint256[]"
180
+ name: "extraInputs",
181
+ type: "uint256[]",
182
+ internalType: "uint256[]"
183
183
  }
184
184
  ],
185
- "outputs": [
185
+ outputs: [
186
186
  {
187
- "name": "",
188
- "type": "uint256",
189
- "internalType": "uint256"
187
+ name: "",
188
+ type: "uint256",
189
+ internalType: "uint256"
190
190
  }
191
191
  ],
192
- "stateMutability": "nonpayable"
192
+ stateMutability: "nonpayable"
193
193
  },
194
194
  {
195
- "type": "function",
196
- "name": "exists",
197
- "inputs": [],
198
- "outputs": [
195
+ type: "function",
196
+ name: "exists",
197
+ inputs: [],
198
+ outputs: [
199
199
  {
200
- "name": "",
201
- "type": "bool",
202
- "internalType": "bool"
200
+ name: "",
201
+ type: "bool",
202
+ internalType: "bool"
203
203
  }
204
204
  ],
205
- "stateMutability": "pure"
205
+ stateMutability: "pure"
206
206
  },
207
207
  {
208
- "type": "function",
209
- "name": "getDecryptResult",
210
- "inputs": [
208
+ type: "function",
209
+ name: "getDecryptResult",
210
+ inputs: [
211
211
  {
212
- "name": "ctHash",
213
- "type": "uint256",
214
- "internalType": "uint256"
212
+ name: "ctHash",
213
+ type: "uint256",
214
+ internalType: "uint256"
215
215
  }
216
216
  ],
217
- "outputs": [
217
+ outputs: [
218
218
  {
219
- "name": "",
220
- "type": "uint256",
221
- "internalType": "uint256"
219
+ name: "",
220
+ type: "uint256",
221
+ internalType: "uint256"
222
222
  }
223
223
  ],
224
- "stateMutability": "view"
224
+ stateMutability: "view"
225
225
  },
226
226
  {
227
- "type": "function",
228
- "name": "getDecryptResultSafe",
229
- "inputs": [
227
+ type: "function",
228
+ name: "getDecryptResultSafe",
229
+ inputs: [
230
230
  {
231
- "name": "ctHash",
232
- "type": "uint256",
233
- "internalType": "uint256"
231
+ name: "ctHash",
232
+ type: "uint256",
233
+ internalType: "uint256"
234
234
  }
235
235
  ],
236
- "outputs": [
236
+ outputs: [
237
237
  {
238
- "name": "result",
239
- "type": "uint256",
240
- "internalType": "uint256"
238
+ name: "result",
239
+ type: "uint256",
240
+ internalType: "uint256"
241
241
  },
242
242
  {
243
- "name": "decrypted",
244
- "type": "bool",
245
- "internalType": "bool"
243
+ name: "decrypted",
244
+ type: "bool",
245
+ internalType: "bool"
246
246
  }
247
247
  ],
248
- "stateMutability": "view"
248
+ stateMutability: "view"
249
249
  },
250
250
  {
251
- "type": "function",
252
- "name": "handleDecryptResult",
253
- "inputs": [
251
+ type: "function",
252
+ name: "handleDecryptResult",
253
+ inputs: [
254
254
  {
255
- "name": "ctHash",
256
- "type": "uint256",
257
- "internalType": "uint256"
255
+ name: "ctHash",
256
+ type: "uint256",
257
+ internalType: "uint256"
258
258
  },
259
259
  {
260
- "name": "result",
261
- "type": "uint256",
262
- "internalType": "uint256"
260
+ name: "result",
261
+ type: "uint256",
262
+ internalType: "uint256"
263
263
  },
264
264
  {
265
- "name": "",
266
- "type": "address[]",
267
- "internalType": "address[]"
265
+ name: "",
266
+ type: "address[]",
267
+ internalType: "address[]"
268
268
  }
269
269
  ],
270
- "outputs": [],
271
- "stateMutability": "nonpayable"
270
+ outputs: [],
271
+ stateMutability: "nonpayable"
272
272
  },
273
273
  {
274
- "type": "function",
275
- "name": "handleError",
276
- "inputs": [
274
+ type: "function",
275
+ name: "handleError",
276
+ inputs: [
277
277
  {
278
- "name": "ctHash",
279
- "type": "uint256",
280
- "internalType": "uint256"
278
+ name: "ctHash",
279
+ type: "uint256",
280
+ internalType: "uint256"
281
281
  },
282
282
  {
283
- "name": "operation",
284
- "type": "string",
285
- "internalType": "string"
283
+ name: "operation",
284
+ type: "string",
285
+ internalType: "string"
286
286
  },
287
287
  {
288
- "name": "errorMessage",
289
- "type": "string",
290
- "internalType": "string"
288
+ name: "errorMessage",
289
+ type: "string",
290
+ internalType: "string"
291
291
  }
292
292
  ],
293
- "outputs": [],
294
- "stateMutability": "nonpayable"
293
+ outputs: [],
294
+ stateMutability: "nonpayable"
295
295
  },
296
296
  {
297
- "type": "function",
298
- "name": "inMockStorage",
299
- "inputs": [
297
+ type: "function",
298
+ name: "inMockStorage",
299
+ inputs: [
300
300
  {
301
- "name": "",
302
- "type": "uint256",
303
- "internalType": "uint256"
301
+ name: "",
302
+ type: "uint256",
303
+ internalType: "uint256"
304
304
  }
305
305
  ],
306
- "outputs": [
306
+ outputs: [
307
307
  {
308
- "name": "",
309
- "type": "bool",
310
- "internalType": "bool"
308
+ name: "",
309
+ type: "bool",
310
+ internalType: "bool"
311
311
  }
312
312
  ],
313
- "stateMutability": "view"
313
+ stateMutability: "view"
314
314
  },
315
315
  {
316
- "type": "function",
317
- "name": "initialize",
318
- "inputs": [
316
+ type: "function",
317
+ name: "initialize",
318
+ inputs: [
319
319
  {
320
- "name": "initialOwner",
321
- "type": "address",
322
- "internalType": "address"
320
+ name: "initialOwner",
321
+ type: "address",
322
+ internalType: "address"
323
323
  }
324
324
  ],
325
- "outputs": [],
326
- "stateMutability": "nonpayable"
325
+ outputs: [],
326
+ stateMutability: "nonpayable"
327
327
  },
328
328
  {
329
- "type": "function",
330
- "name": "isAllowed",
331
- "inputs": [
329
+ type: "function",
330
+ name: "isAllowed",
331
+ inputs: [
332
332
  {
333
- "name": "ctHash",
334
- "type": "uint256",
335
- "internalType": "uint256"
333
+ name: "ctHash",
334
+ type: "uint256",
335
+ internalType: "uint256"
336
336
  },
337
337
  {
338
- "name": "account",
339
- "type": "address",
340
- "internalType": "address"
338
+ name: "account",
339
+ type: "address",
340
+ internalType: "address"
341
341
  }
342
342
  ],
343
- "outputs": [
343
+ outputs: [
344
344
  {
345
- "name": "",
346
- "type": "bool",
347
- "internalType": "bool"
345
+ name: "",
346
+ type: "bool",
347
+ internalType: "bool"
348
348
  }
349
349
  ],
350
- "stateMutability": "view"
350
+ stateMutability: "view"
351
351
  },
352
352
  {
353
- "type": "function",
354
- "name": "isAllowedWithPermission",
355
- "inputs": [
353
+ type: "function",
354
+ name: "isAllowedWithPermission",
355
+ inputs: [
356
356
  {
357
- "name": "permission",
358
- "type": "tuple",
359
- "internalType": "struct Permission",
360
- "components": [
357
+ name: "permission",
358
+ type: "tuple",
359
+ internalType: "struct Permission",
360
+ components: [
361
361
  {
362
- "name": "issuer",
363
- "type": "address",
364
- "internalType": "address"
362
+ name: "issuer",
363
+ type: "address",
364
+ internalType: "address"
365
365
  },
366
366
  {
367
- "name": "expiration",
368
- "type": "uint64",
369
- "internalType": "uint64"
367
+ name: "expiration",
368
+ type: "uint64",
369
+ internalType: "uint64"
370
370
  },
371
371
  {
372
- "name": "recipient",
373
- "type": "address",
374
- "internalType": "address"
372
+ name: "recipient",
373
+ type: "address",
374
+ internalType: "address"
375
375
  },
376
376
  {
377
- "name": "validatorId",
378
- "type": "uint256",
379
- "internalType": "uint256"
377
+ name: "validatorId",
378
+ type: "uint256",
379
+ internalType: "uint256"
380
380
  },
381
381
  {
382
- "name": "validatorContract",
383
- "type": "address",
384
- "internalType": "address"
382
+ name: "validatorContract",
383
+ type: "address",
384
+ internalType: "address"
385
385
  },
386
386
  {
387
- "name": "sealingKey",
388
- "type": "bytes32",
389
- "internalType": "bytes32"
387
+ name: "sealingKey",
388
+ type: "bytes32",
389
+ internalType: "bytes32"
390
390
  },
391
391
  {
392
- "name": "issuerSignature",
393
- "type": "bytes",
394
- "internalType": "bytes"
392
+ name: "issuerSignature",
393
+ type: "bytes",
394
+ internalType: "bytes"
395
395
  },
396
396
  {
397
- "name": "recipientSignature",
398
- "type": "bytes",
399
- "internalType": "bytes"
397
+ name: "recipientSignature",
398
+ type: "bytes",
399
+ internalType: "bytes"
400
400
  }
401
401
  ]
402
402
  },
403
403
  {
404
- "name": "handle",
405
- "type": "uint256",
406
- "internalType": "uint256"
404
+ name: "handle",
405
+ type: "uint256",
406
+ internalType: "uint256"
407
407
  }
408
408
  ],
409
- "outputs": [
409
+ outputs: [
410
410
  {
411
- "name": "",
412
- "type": "bool",
413
- "internalType": "bool"
411
+ name: "",
412
+ type: "bool",
413
+ internalType: "bool"
414
414
  }
415
415
  ],
416
- "stateMutability": "view"
416
+ stateMutability: "view"
417
417
  },
418
418
  {
419
- "type": "function",
420
- "name": "isInitialized",
421
- "inputs": [],
422
- "outputs": [
419
+ type: "function",
420
+ name: "isInitialized",
421
+ inputs: [],
422
+ outputs: [
423
423
  {
424
- "name": "",
425
- "type": "bool",
426
- "internalType": "bool"
424
+ name: "",
425
+ type: "bool",
426
+ internalType: "bool"
427
427
  }
428
428
  ],
429
- "stateMutability": "view"
429
+ stateMutability: "view"
430
430
  },
431
431
  {
432
- "type": "function",
433
- "name": "logOps",
434
- "inputs": [],
435
- "outputs": [
432
+ type: "function",
433
+ name: "logOps",
434
+ inputs: [],
435
+ outputs: [
436
436
  {
437
- "name": "",
438
- "type": "bool",
439
- "internalType": "bool"
437
+ name: "",
438
+ type: "bool",
439
+ internalType: "bool"
440
440
  }
441
441
  ],
442
- "stateMutability": "view"
442
+ stateMutability: "view"
443
443
  },
444
444
  {
445
- "type": "function",
446
- "name": "mockStorage",
447
- "inputs": [
445
+ type: "function",
446
+ name: "mockStorage",
447
+ inputs: [
448
448
  {
449
- "name": "",
450
- "type": "uint256",
451
- "internalType": "uint256"
449
+ name: "",
450
+ type: "uint256",
451
+ internalType: "uint256"
452
452
  }
453
453
  ],
454
- "outputs": [
454
+ outputs: [
455
455
  {
456
- "name": "",
457
- "type": "uint256",
458
- "internalType": "uint256"
456
+ name: "",
457
+ type: "uint256",
458
+ internalType: "uint256"
459
459
  }
460
460
  ],
461
- "stateMutability": "view"
461
+ stateMutability: "view"
462
462
  },
463
463
  {
464
- "type": "function",
465
- "name": "removeFirstLetter",
466
- "inputs": [
464
+ type: "function",
465
+ name: "removeFirstLetter",
466
+ inputs: [
467
467
  {
468
- "name": "str",
469
- "type": "string",
470
- "internalType": "string"
468
+ name: "str",
469
+ type: "string",
470
+ internalType: "string"
471
471
  }
472
472
  ],
473
- "outputs": [
473
+ outputs: [
474
474
  {
475
- "name": "",
476
- "type": "string",
477
- "internalType": "string"
475
+ name: "",
476
+ type: "string",
477
+ internalType: "string"
478
478
  }
479
479
  ],
480
- "stateMutability": "pure"
480
+ stateMutability: "pure"
481
481
  },
482
482
  {
483
- "type": "function",
484
- "name": "setACLContract",
485
- "inputs": [
483
+ type: "function",
484
+ name: "setACLContract",
485
+ inputs: [
486
486
  {
487
- "name": "_aclAddress",
488
- "type": "address",
489
- "internalType": "address"
487
+ name: "_aclAddress",
488
+ type: "address",
489
+ internalType: "address"
490
490
  }
491
491
  ],
492
- "outputs": [],
493
- "stateMutability": "nonpayable"
492
+ outputs: [],
493
+ stateMutability: "nonpayable"
494
494
  },
495
495
  {
496
- "type": "function",
497
- "name": "setAggregator",
498
- "inputs": [
496
+ type: "function",
497
+ name: "setAggregator",
498
+ inputs: [
499
499
  {
500
- "name": "_aggregatorAddress",
501
- "type": "address",
502
- "internalType": "address"
500
+ name: "_aggregatorAddress",
501
+ type: "address",
502
+ internalType: "address"
503
503
  }
504
504
  ],
505
- "outputs": [],
506
- "stateMutability": "nonpayable"
505
+ outputs: [],
506
+ stateMutability: "nonpayable"
507
507
  },
508
508
  {
509
- "type": "function",
510
- "name": "setLogOps",
511
- "inputs": [
509
+ type: "function",
510
+ name: "setLogOps",
511
+ inputs: [
512
512
  {
513
- "name": "_logOps",
514
- "type": "bool",
515
- "internalType": "bool"
513
+ name: "_logOps",
514
+ type: "bool",
515
+ internalType: "bool"
516
516
  }
517
517
  ],
518
- "outputs": [],
519
- "stateMutability": "nonpayable"
518
+ outputs: [],
519
+ stateMutability: "nonpayable"
520
520
  },
521
521
  {
522
- "type": "function",
523
- "name": "setSecurityZoneMax",
524
- "inputs": [
522
+ type: "function",
523
+ name: "setSecurityZoneMax",
524
+ inputs: [
525
525
  {
526
- "name": "securityZone",
527
- "type": "int32",
528
- "internalType": "int32"
526
+ name: "securityZone",
527
+ type: "int32",
528
+ internalType: "int32"
529
529
  }
530
530
  ],
531
- "outputs": [],
532
- "stateMutability": "nonpayable"
531
+ outputs: [],
532
+ stateMutability: "nonpayable"
533
533
  },
534
534
  {
535
- "type": "function",
536
- "name": "setSecurityZoneMin",
537
- "inputs": [
535
+ type: "function",
536
+ name: "setSecurityZoneMin",
537
+ inputs: [
538
538
  {
539
- "name": "securityZone",
540
- "type": "int32",
541
- "internalType": "int32"
539
+ name: "securityZone",
540
+ type: "int32",
541
+ internalType: "int32"
542
542
  }
543
543
  ],
544
- "outputs": [],
545
- "stateMutability": "nonpayable"
544
+ outputs: [],
545
+ stateMutability: "nonpayable"
546
546
  },
547
547
  {
548
- "type": "function",
549
- "name": "setSecurityZones",
550
- "inputs": [
548
+ type: "function",
549
+ name: "setSecurityZones",
550
+ inputs: [
551
551
  {
552
- "name": "minSZ",
553
- "type": "int32",
554
- "internalType": "int32"
552
+ name: "minSZ",
553
+ type: "int32",
554
+ internalType: "int32"
555
555
  },
556
556
  {
557
- "name": "maxSZ",
558
- "type": "int32",
559
- "internalType": "int32"
557
+ name: "maxSZ",
558
+ type: "int32",
559
+ internalType: "int32"
560
560
  }
561
561
  ],
562
- "outputs": [],
563
- "stateMutability": "nonpayable"
562
+ outputs: [],
563
+ stateMutability: "nonpayable"
564
564
  },
565
565
  {
566
- "type": "function",
567
- "name": "setVerifierSigner",
568
- "inputs": [
566
+ type: "function",
567
+ name: "setVerifierSigner",
568
+ inputs: [
569
569
  {
570
- "name": "signer",
571
- "type": "address",
572
- "internalType": "address"
570
+ name: "signer",
571
+ type: "address",
572
+ internalType: "address"
573
573
  }
574
574
  ],
575
- "outputs": [],
576
- "stateMutability": "nonpayable"
575
+ outputs: [],
576
+ stateMutability: "nonpayable"
577
577
  },
578
578
  {
579
- "type": "function",
580
- "name": "sliceString",
581
- "inputs": [
579
+ type: "function",
580
+ name: "sliceString",
581
+ inputs: [
582
582
  {
583
- "name": "str",
584
- "type": "string",
585
- "internalType": "string"
583
+ name: "str",
584
+ type: "string",
585
+ internalType: "string"
586
586
  },
587
587
  {
588
- "name": "start",
589
- "type": "uint256",
590
- "internalType": "uint256"
588
+ name: "start",
589
+ type: "uint256",
590
+ internalType: "uint256"
591
591
  },
592
592
  {
593
- "name": "length",
594
- "type": "uint256",
595
- "internalType": "uint256"
593
+ name: "length",
594
+ type: "uint256",
595
+ internalType: "uint256"
596
596
  }
597
597
  ],
598
- "outputs": [
598
+ outputs: [
599
599
  {
600
- "name": "",
601
- "type": "string",
602
- "internalType": "string"
600
+ name: "",
601
+ type: "string",
602
+ internalType: "string"
603
603
  }
604
604
  ],
605
- "stateMutability": "pure"
605
+ stateMutability: "pure"
606
606
  },
607
607
  {
608
- "type": "function",
609
- "name": "verifyInput",
610
- "inputs": [
608
+ type: "function",
609
+ name: "verifyInput",
610
+ inputs: [
611
611
  {
612
- "name": "input",
613
- "type": "tuple",
614
- "internalType": "struct EncryptedInput",
615
- "components": [
612
+ name: "input",
613
+ type: "tuple",
614
+ internalType: "struct EncryptedInput",
615
+ components: [
616
616
  {
617
- "name": "ctHash",
618
- "type": "uint256",
619
- "internalType": "uint256"
617
+ name: "ctHash",
618
+ type: "uint256",
619
+ internalType: "uint256"
620
620
  },
621
621
  {
622
- "name": "securityZone",
623
- "type": "uint8",
624
- "internalType": "uint8"
622
+ name: "securityZone",
623
+ type: "uint8",
624
+ internalType: "uint8"
625
625
  },
626
626
  {
627
- "name": "utype",
628
- "type": "uint8",
629
- "internalType": "uint8"
627
+ name: "utype",
628
+ type: "uint8",
629
+ internalType: "uint8"
630
630
  },
631
631
  {
632
- "name": "signature",
633
- "type": "bytes",
634
- "internalType": "bytes"
632
+ name: "signature",
633
+ type: "bytes",
634
+ internalType: "bytes"
635
635
  }
636
636
  ]
637
637
  },
638
638
  {
639
- "name": "sender",
640
- "type": "address",
641
- "internalType": "address"
639
+ name: "sender",
640
+ type: "address",
641
+ internalType: "address"
642
642
  }
643
643
  ],
644
- "outputs": [
644
+ outputs: [
645
645
  {
646
- "name": "",
647
- "type": "uint256",
648
- "internalType": "uint256"
646
+ name: "",
647
+ type: "uint256",
648
+ internalType: "uint256"
649
649
  }
650
650
  ],
651
- "stateMutability": "nonpayable"
651
+ stateMutability: "nonpayable"
652
652
  },
653
653
  {
654
- "type": "event",
655
- "name": "DecryptionResult",
656
- "inputs": [
654
+ type: "event",
655
+ name: "DecryptionResult",
656
+ inputs: [
657
657
  {
658
- "name": "ctHash",
659
- "type": "uint256",
660
- "indexed": false,
661
- "internalType": "uint256"
658
+ name: "ctHash",
659
+ type: "uint256",
660
+ indexed: false,
661
+ internalType: "uint256"
662
662
  },
663
663
  {
664
- "name": "result",
665
- "type": "uint256",
666
- "indexed": false,
667
- "internalType": "uint256"
664
+ name: "result",
665
+ type: "uint256",
666
+ indexed: false,
667
+ internalType: "uint256"
668
668
  },
669
669
  {
670
- "name": "requestor",
671
- "type": "address",
672
- "indexed": true,
673
- "internalType": "address"
670
+ name: "requestor",
671
+ type: "address",
672
+ indexed: true,
673
+ internalType: "address"
674
674
  }
675
675
  ],
676
- "anonymous": false
676
+ anonymous: false
677
677
  },
678
678
  {
679
- "type": "event",
680
- "name": "ProtocolNotification",
681
- "inputs": [
679
+ type: "event",
680
+ name: "ProtocolNotification",
681
+ inputs: [
682
682
  {
683
- "name": "ctHash",
684
- "type": "uint256",
685
- "indexed": false,
686
- "internalType": "uint256"
683
+ name: "ctHash",
684
+ type: "uint256",
685
+ indexed: false,
686
+ internalType: "uint256"
687
687
  },
688
688
  {
689
- "name": "operation",
690
- "type": "string",
691
- "indexed": false,
692
- "internalType": "string"
689
+ name: "operation",
690
+ type: "string",
691
+ indexed: false,
692
+ internalType: "string"
693
693
  },
694
694
  {
695
- "name": "errorMessage",
696
- "type": "string",
697
- "indexed": false,
698
- "internalType": "string"
695
+ name: "errorMessage",
696
+ type: "string",
697
+ indexed: false,
698
+ internalType: "string"
699
699
  }
700
700
  ],
701
- "anonymous": false
701
+ anonymous: false
702
702
  },
703
703
  {
704
- "type": "event",
705
- "name": "TaskCreated",
706
- "inputs": [
704
+ type: "event",
705
+ name: "TaskCreated",
706
+ inputs: [
707
707
  {
708
- "name": "ctHash",
709
- "type": "uint256",
710
- "indexed": false,
711
- "internalType": "uint256"
708
+ name: "ctHash",
709
+ type: "uint256",
710
+ indexed: false,
711
+ internalType: "uint256"
712
712
  },
713
713
  {
714
- "name": "operation",
715
- "type": "string",
716
- "indexed": false,
717
- "internalType": "string"
714
+ name: "operation",
715
+ type: "string",
716
+ indexed: false,
717
+ internalType: "string"
718
718
  },
719
719
  {
720
- "name": "input1",
721
- "type": "uint256",
722
- "indexed": false,
723
- "internalType": "uint256"
720
+ name: "input1",
721
+ type: "uint256",
722
+ indexed: false,
723
+ internalType: "uint256"
724
724
  },
725
725
  {
726
- "name": "input2",
727
- "type": "uint256",
728
- "indexed": false,
729
- "internalType": "uint256"
726
+ name: "input2",
727
+ type: "uint256",
728
+ indexed: false,
729
+ internalType: "uint256"
730
730
  },
731
731
  {
732
- "name": "input3",
733
- "type": "uint256",
734
- "indexed": false,
735
- "internalType": "uint256"
732
+ name: "input3",
733
+ type: "uint256",
734
+ indexed: false,
735
+ internalType: "uint256"
736
736
  }
737
737
  ],
738
- "anonymous": false
738
+ anonymous: false
739
739
  },
740
740
  {
741
- "type": "error",
742
- "name": "ACLNotAllowed",
743
- "inputs": [
741
+ type: "error",
742
+ name: "ACLNotAllowed",
743
+ inputs: [
744
744
  {
745
- "name": "handle",
746
- "type": "uint256",
747
- "internalType": "uint256"
745
+ name: "handle",
746
+ type: "uint256",
747
+ internalType: "uint256"
748
748
  },
749
749
  {
750
- "name": "account",
751
- "type": "address",
752
- "internalType": "address"
750
+ name: "account",
751
+ type: "address",
752
+ internalType: "address"
753
753
  }
754
754
  ]
755
755
  },
756
756
  {
757
- "type": "error",
758
- "name": "DecryptionResultNotReady",
759
- "inputs": [
757
+ type: "error",
758
+ name: "DecryptionResultNotReady",
759
+ inputs: [
760
760
  {
761
- "name": "ctHash",
762
- "type": "uint256",
763
- "internalType": "uint256"
761
+ name: "ctHash",
762
+ type: "uint256",
763
+ internalType: "uint256"
764
764
  }
765
765
  ]
766
766
  },
767
767
  {
768
- "type": "error",
769
- "name": "ECDSAInvalidSignature",
770
- "inputs": []
768
+ type: "error",
769
+ name: "ECDSAInvalidSignature",
770
+ inputs: []
771
771
  },
772
772
  {
773
- "type": "error",
774
- "name": "ECDSAInvalidSignatureLength",
775
- "inputs": [
773
+ type: "error",
774
+ name: "ECDSAInvalidSignatureLength",
775
+ inputs: [
776
776
  {
777
- "name": "length",
778
- "type": "uint256",
779
- "internalType": "uint256"
777
+ name: "length",
778
+ type: "uint256",
779
+ internalType: "uint256"
780
780
  }
781
781
  ]
782
782
  },
783
783
  {
784
- "type": "error",
785
- "name": "ECDSAInvalidSignatureS",
786
- "inputs": [
784
+ type: "error",
785
+ name: "ECDSAInvalidSignatureS",
786
+ inputs: [
787
787
  {
788
- "name": "s",
789
- "type": "bytes32",
790
- "internalType": "bytes32"
788
+ name: "s",
789
+ type: "bytes32",
790
+ internalType: "bytes32"
791
791
  }
792
792
  ]
793
793
  },
794
794
  {
795
- "type": "error",
796
- "name": "InputNotInMockStorage",
797
- "inputs": [
795
+ type: "error",
796
+ name: "InputNotInMockStorage",
797
+ inputs: [
798
798
  {
799
- "name": "ctHash",
800
- "type": "uint256",
801
- "internalType": "uint256"
799
+ name: "ctHash",
800
+ type: "uint256",
801
+ internalType: "uint256"
802
802
  }
803
803
  ]
804
804
  },
805
805
  {
806
- "type": "error",
807
- "name": "InvalidAddress",
808
- "inputs": []
806
+ type: "error",
807
+ name: "InvalidAddress",
808
+ inputs: []
809
809
  },
810
810
  {
811
- "type": "error",
812
- "name": "InvalidInputForFunction",
813
- "inputs": [
811
+ type: "error",
812
+ name: "InvalidInputForFunction",
813
+ inputs: [
814
814
  {
815
- "name": "functionName",
816
- "type": "string",
817
- "internalType": "string"
815
+ name: "functionName",
816
+ type: "string",
817
+ internalType: "string"
818
818
  },
819
819
  {
820
- "name": "inputType",
821
- "type": "uint8",
822
- "internalType": "uint8"
820
+ name: "inputType",
821
+ type: "uint8",
822
+ internalType: "uint8"
823
823
  }
824
824
  ]
825
825
  },
826
826
  {
827
- "type": "error",
828
- "name": "InvalidInputType",
829
- "inputs": [
827
+ type: "error",
828
+ name: "InvalidInputType",
829
+ inputs: [
830
830
  {
831
- "name": "actual",
832
- "type": "uint8",
833
- "internalType": "uint8"
831
+ name: "actual",
832
+ type: "uint8",
833
+ internalType: "uint8"
834
834
  },
835
835
  {
836
- "name": "expected",
837
- "type": "uint8",
838
- "internalType": "uint8"
836
+ name: "expected",
837
+ type: "uint8",
838
+ internalType: "uint8"
839
839
  }
840
840
  ]
841
841
  },
842
842
  {
843
- "type": "error",
844
- "name": "InvalidInputsAmount",
845
- "inputs": [
843
+ type: "error",
844
+ name: "InvalidInputsAmount",
845
+ inputs: [
846
846
  {
847
- "name": "operation",
848
- "type": "string",
849
- "internalType": "string"
847
+ name: "operation",
848
+ type: "string",
849
+ internalType: "string"
850
850
  },
851
851
  {
852
- "name": "got",
853
- "type": "uint256",
854
- "internalType": "uint256"
852
+ name: "got",
853
+ type: "uint256",
854
+ internalType: "uint256"
855
855
  },
856
856
  {
857
- "name": "expected",
858
- "type": "uint256",
859
- "internalType": "uint256"
857
+ name: "expected",
858
+ type: "uint256",
859
+ internalType: "uint256"
860
860
  }
861
861
  ]
862
862
  },
863
863
  {
864
- "type": "error",
865
- "name": "InvalidOperationInputs",
866
- "inputs": [
864
+ type: "error",
865
+ name: "InvalidOperationInputs",
866
+ inputs: [
867
867
  {
868
- "name": "operation",
869
- "type": "string",
870
- "internalType": "string"
868
+ name: "operation",
869
+ type: "string",
870
+ internalType: "string"
871
871
  }
872
872
  ]
873
873
  },
874
874
  {
875
- "type": "error",
876
- "name": "InvalidSecurityZone",
877
- "inputs": [
875
+ type: "error",
876
+ name: "InvalidSecurityZone",
877
+ inputs: [
878
878
  {
879
- "name": "zone",
880
- "type": "int32",
881
- "internalType": "int32"
879
+ name: "zone",
880
+ type: "int32",
881
+ internalType: "int32"
882
882
  },
883
883
  {
884
- "name": "min",
885
- "type": "int32",
886
- "internalType": "int32"
884
+ name: "min",
885
+ type: "int32",
886
+ internalType: "int32"
887
887
  },
888
888
  {
889
- "name": "max",
890
- "type": "int32",
891
- "internalType": "int32"
889
+ name: "max",
890
+ type: "int32",
891
+ internalType: "int32"
892
892
  }
893
893
  ]
894
894
  },
895
895
  {
896
- "type": "error",
897
- "name": "InvalidSignature",
898
- "inputs": []
896
+ type: "error",
897
+ name: "InvalidSignature",
898
+ inputs: []
899
899
  },
900
900
  {
901
- "type": "error",
902
- "name": "InvalidSigner",
903
- "inputs": [
901
+ type: "error",
902
+ name: "InvalidSigner",
903
+ inputs: [
904
904
  {
905
- "name": "signer",
906
- "type": "address",
907
- "internalType": "address"
905
+ name: "signer",
906
+ type: "address",
907
+ internalType: "address"
908
908
  },
909
909
  {
910
- "name": "expectedSigner",
911
- "type": "address",
912
- "internalType": "address"
910
+ name: "expectedSigner",
911
+ type: "address",
912
+ internalType: "address"
913
913
  }
914
914
  ]
915
915
  },
916
916
  {
917
- "type": "error",
918
- "name": "InvalidThreeInputOperation",
919
- "inputs": [
917
+ type: "error",
918
+ name: "InvalidThreeInputOperation",
919
+ inputs: [
920
920
  {
921
- "name": "operation",
922
- "type": "string",
923
- "internalType": "string"
921
+ name: "operation",
922
+ type: "string",
923
+ internalType: "string"
924
924
  }
925
925
  ]
926
926
  },
927
927
  {
928
- "type": "error",
929
- "name": "InvalidTwoInputOperation",
930
- "inputs": [
928
+ type: "error",
929
+ name: "InvalidTwoInputOperation",
930
+ inputs: [
931
931
  {
932
- "name": "operation",
933
- "type": "string",
934
- "internalType": "string"
932
+ name: "operation",
933
+ type: "string",
934
+ internalType: "string"
935
935
  }
936
936
  ]
937
937
  },
938
938
  {
939
- "type": "error",
940
- "name": "InvalidTypeOrSecurityZone",
941
- "inputs": [
939
+ type: "error",
940
+ name: "InvalidTypeOrSecurityZone",
941
+ inputs: [
942
942
  {
943
- "name": "operation",
944
- "type": "string",
945
- "internalType": "string"
943
+ name: "operation",
944
+ type: "string",
945
+ internalType: "string"
946
946
  }
947
947
  ]
948
948
  },
949
949
  {
950
- "type": "error",
951
- "name": "InvalidUnaryOperation",
952
- "inputs": [
950
+ type: "error",
951
+ name: "InvalidUnaryOperation",
952
+ inputs: [
953
953
  {
954
- "name": "operation",
955
- "type": "string",
956
- "internalType": "string"
954
+ name: "operation",
955
+ type: "string",
956
+ internalType: "string"
957
957
  }
958
958
  ]
959
959
  },
960
960
  {
961
- "type": "error",
962
- "name": "OnlyAggregatorAllowed",
963
- "inputs": [
961
+ type: "error",
962
+ name: "OnlyAggregatorAllowed",
963
+ inputs: [
964
964
  {
965
- "name": "caller",
966
- "type": "address",
967
- "internalType": "address"
965
+ name: "caller",
966
+ type: "address",
967
+ internalType: "address"
968
968
  }
969
969
  ]
970
970
  },
971
971
  {
972
- "type": "error",
973
- "name": "OnlyOwnerAllowed",
974
- "inputs": [
972
+ type: "error",
973
+ name: "OnlyOwnerAllowed",
974
+ inputs: [
975
975
  {
976
- "name": "caller",
977
- "type": "address",
978
- "internalType": "address"
976
+ name: "caller",
977
+ type: "address",
978
+ internalType: "address"
979
979
  }
980
980
  ]
981
981
  },
982
982
  {
983
- "type": "error",
984
- "name": "RandomFunctionNotSupported",
985
- "inputs": []
983
+ type: "error",
984
+ name: "RandomFunctionNotSupported",
985
+ inputs: []
986
986
  },
987
987
  {
988
- "type": "error",
989
- "name": "StringsInsufficientHexLength",
990
- "inputs": [
988
+ type: "error",
989
+ name: "StringsInsufficientHexLength",
990
+ inputs: [
991
991
  {
992
- "name": "value",
993
- "type": "uint256",
994
- "internalType": "uint256"
992
+ name: "value",
993
+ type: "uint256",
994
+ internalType: "uint256"
995
995
  },
996
996
  {
997
- "name": "length",
998
- "type": "uint256",
999
- "internalType": "uint256"
997
+ name: "length",
998
+ type: "uint256",
999
+ internalType: "uint256"
1000
1000
  }
1001
1001
  ]
1002
1002
  },
1003
1003
  {
1004
- "type": "error",
1005
- "name": "TooManyInputs",
1006
- "inputs": [
1004
+ type: "error",
1005
+ name: "TooManyInputs",
1006
+ inputs: [
1007
1007
  {
1008
- "name": "operation",
1009
- "type": "string",
1010
- "internalType": "string"
1008
+ name: "operation",
1009
+ type: "string",
1010
+ internalType: "string"
1011
1011
  },
1012
1012
  {
1013
- "name": "got",
1014
- "type": "uint256",
1015
- "internalType": "uint256"
1013
+ name: "got",
1014
+ type: "uint256",
1015
+ internalType: "uint256"
1016
1016
  },
1017
1017
  {
1018
- "name": "maxAllowed",
1019
- "type": "uint256",
1020
- "internalType": "uint256"
1018
+ name: "maxAllowed",
1019
+ type: "uint256",
1020
+ internalType: "uint256"
1021
1021
  }
1022
1022
  ]
1023
1023
  }
1024
1024
  ],
1025
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063642b3f191161010d578063a307d21d116100a0578063de2873591161006f578063de287359146105bd578063e68d826f146105db578063f6bc7f3f146105f9578063f9120af614610629576101ee565b8063a307d21d14610525578063ae79f04a14610541578063c4d66de814610571578063d521ed4b1461058d576101ee565b80638b2b9c23116100dc5780638b2b9c23146104b55780638d9c9c92146104d15780638db39c8d146104ed57806392bd6c9514610509576101ee565b8063642b3f191461043157806365d0509c1461044d5780637e5cf5191461046957806381ba098614610499576101ee565b806327f9c762116101855780634bc98263116101545780634bc98263146103ad578063591363c7146103c95780635faa299a146103e55780635fb0bf9114610415576101ee565b806327f9c7621461031257806334ef1e5a14610342578063392e53cd1461035e578063458693c91461037c576101ee565b80631d031931116101c15780631d0319311461028a578063245a7bfc146102ba57806326594a0c146102d8578063267c4ae4146102f4576101ee565b806308289827146101f257806315a486fe1461020e5780631888debd1461022a5780631c76642b1461025a575b5f5ffd5b61020c6004803603810190610207919061609e565b610645565b005b610228600480360381019061022391906160dc565b6106f8565b005b610244600480360381019061023f91906162c3565b610706565b604051610251919061636e565b60405180910390f35b610274600480360381019061026f9190616387565b6108aa565b604051610281919061636e565b60405180910390f35b6102a4600480360381019061029f9190616387565b6108bf565b6040516102b191906163cc565b60405180910390f35b6102c26108dc565b6040516102cf91906163f4565b60405180910390f35b6102f260048036038101906102ed9190616443565b610902565b005b6102fc6109de565b60405161030991906163cc565b60405180910390f35b61032c600480360381019061032791906165ca565b6109e6565b604051610339919061636e565b60405180910390f35b61035c60048036038101906103579190616387565b610c20565b005b610366610cfa565b60405161037391906163cc565b60405180910390f35b61039660048036038101906103919190616387565b610d10565b6040516103a4929190616624565b60405180910390f35b6103c760048036038101906103c291906166e9565b610d95565b005b6103e360048036038101906103de9190616771565b610e67565b005b6103ff60048036038101906103fa919061609e565b610f99565b60405161040c91906163cc565b60405180910390f35b61042f600480360381019061042a9190616771565b611055565b005b61044b600480360381019061044691906167c6565b611187565b005b6104676004803603810190610462919061609e565b6111a2565b005b610483600480360381019061047e91906167f1565b6112ee565b60405161049091906168bd565b60405180910390f35b6104b360048036038101906104ae9190616936565b611424565b005b6104cf60048036038101906104ca91906169a7565b611532565b005b6104eb60048036038101906104e6919061609e565b611542565b005b61050760048036038101906105029190616a13565b61161f565b005b610523600480360381019061051e9190616a13565b6116f3565b005b61053f600480360381019061053a9190616387565b61182c565b005b61055b60048036038101906105569190616bad565b611974565b60405161056891906163cc565b60405180910390f35b61058b60048036038101906105869190616a13565b611a18565b005b6105a760048036038101906105a29190616c07565b611ab6565b6040516105b491906168bd565b60405180910390f35b6105c5611bcb565b6040516105d29190616ca9565b60405180910390f35b6105e3611bf0565b6040516105f091906163cc565b60405180910390f35b610613600480360381019061060e9190616387565b611c01565b604051610620919061636e565b60405180910390f35b610643600480360381019061063e9190616a13565b611c5d565b005b61064e82611d97565b600160055f8481526020019081526020015f205f6101000a81548160ff02191690831515021790555061068082611e86565b60045f8481526020019081526020015f20819055505f6001600a426106a59190616cef565b6106af9190616d4c565b905080426106bd9190616d7f565b60065f8581526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6107028282611f0e565b5050565b5f601b601f81111561071b5761071a616dba565b5b84601f81111561072e5761072d616dba565b5b03610765576040517f98e08ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825184516107749190616d4c565b905060038111156107c95761078885611f2c565b8160036040517f2b0399d50000000000000000000000000000000000000000000000000000000081526004016107c093929190616e20565b60405180910390fd5b6107d38486612ac1565b5f6107de8585612d3b565b90505f6107ec878787612e7d565b90505f6107fb8983858b612ee8565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b815260040161085b93929190616e5c565b5f604051808303815f87803b158015610872575f5ffd5b505af1158015610884573d5f5f3e3d5ffd5b5050505061089b816108958a611f2c565b8561306d565b80945050505050949350505050565b6001602052805f5260405f205f915090505481565b6002602052805f5260405f205f915054906101000a900460ff1681565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099357336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161098a91906163f4565b60405180910390fd5b81600760046101000a81548163ffffffff021916908360030b63ffffffff1602179055508060075f6101000a81548163ffffffff021916908360030b63ffffffff1602179055505050565b5f6001905090565b5f5f836020015160ff1690505f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7457610a4f816132c2565b610ab15780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610aa893929190616ea0565b60405180910390fd5b5f610abc8585613303565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b72578060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb5000000000000000000000000000000000000000000000000000000008152600401610b69929190616ed5565b60405180910390fd5b505b5f610b88855f01518387604001515f6133c7565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610be893929190616e5c565b5f604051808303815f87803b158015610bff575f5ffd5b505af1158015610c11573d5f5f3e3d5ffd5b50505050809250505092915050565b610c2981613420565b610cf75760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663846cd43382336040518363ffffffff1660e01b8152600401610c89929190616efc565b5f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b50505050610cf66040518060400160405280600f81526020017f4648452e616c6c6f77476c6f62616c00000000000000000000000000000000008152508233611532565b5b50565b5f600360149054906101000a900460ff16905090565b5f5f60055f8481526020019081526020015f205f9054906101000a900460ff16610d3f575f5f91509150610d90565b60065f8481526020019081526020015f205f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421015610d80575f5f91509150610d90565b610d8983611e86565b6001915091505b915091565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e2757336040517fa974a0fe000000000000000000000000000000000000000000000000000000008152600401610e1e91906163f4565b60405180910390fd5b7f66d3f531abdf188fde59b6d2b282dc7c725ef2bb1c6c93954054721a13c1a3fa838383604051610e5a93929190616f23565b60405180910390a1505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef857336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610eef91906163f4565b60405180910390fd5b600760049054906101000a900460030b60030b8160030b1215610f735780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610f6a93929190616ea0565b60405180910390fd5b8060075f6101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b5f610fa383613420565b15610fb1576001905061104f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a84846040518363ffffffff1660e01b815260040161100d929190616efc565b602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190616f7a565b90505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e657336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016110dd91906163f4565b60405180910390fd5b60075f9054906101000a900460030b60030b8160030b13156111605780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161115793929190616ea0565b60405180910390fd5b80600760046101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b805f5f6101000a81548160ff02191690831515021790555050565b6111ab82613420565b6112ea5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a3a7fb8383336040518463ffffffff1660e01b815260040161120d93929190616e5c565b5f604051808303815f87803b158015611224575f5ffd5b505af1158015611236573d5f5f3e3d5ffd5b505050506112e93373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146112ab576040518060400160405280600981526020017f4648452e616c6c6f7700000000000000000000000000000000000000000000008152506112e2565b6040518060400160405280600d81526020017f4648452e616c6c6f7754686973000000000000000000000000000000000000008152505b8383611532565b5b5050565b60605f849050805183856113029190616d4c565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90616fef565b60405180910390fd5b5f8367ffffffffffffffff81111561135e5761135d616187565b5b6040519080825280601f01601f1916602001820160405280156113905781602001600182028036833780820191505090505b5090505f5f90505b84811015611417578281876113ad9190616d4c565b815181106113be576113bd61700d565b5b602001015160f81c60f81b8282815181106113dc576113db61700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611398565b5080925050509392505050565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b657336040517fa974a0fe0000000000000000000000000000000000000000000000000000000081526004016114ad91906163f4565b60405180910390fd5b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b61153d83838361345d565b505050565b61154b82613420565b61161b5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228383336040518463ffffffff1660e01b81526004016115ad93929190616e5c565b5f604051808303815f87803b1580156115c4575f5ffd5b505af11580156115d6573d5f5f3e3d5ffd5b5050505061161a6040518060400160405280601281526020017f4648452e616c6c6f775472616e7369656e7400000000000000000000000000008152508383611532565b5b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b057336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016116a791906163f4565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178457336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161177b91906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61183581613420565b611971575f600167ffffffffffffffff81111561185557611854616187565b5b6040519080825280602002602001820160405280156118835781602001602082028036833780820191505090505b50905081815f8151811061189a5761189961700d565b5b60200260200101818152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c3839ba82336040518363ffffffff1660e01b81526004016119029291906170f1565b5f604051808303815f87803b158015611919575f5ffd5b505af115801561192b573d5f5f3e3d5ffd5b5050505061196f6040518060400160405280601681526020017f4648452e616c6c6f77466f7244656372797074696f6e000000000000000000008152508333611532565b505b50565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a84846040518363ffffffff1660e01b81526004016119d1929190617252565b602060405180830381865afa1580156119ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a109190616f7a565b905092915050565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff0219169083151502179055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8290505f815103611adb5760405180602001604052805f815250915050611bc6565b5f60018251611aea9190617280565b67ffffffffffffffff811115611b0357611b02616187565b5b6040519080825280601f01601f191660200182016040528015611b355781602001600182028036833780820191505090505b5090505f600190505b8251811015611bbf57828181518110611b5a57611b5961700d565b5b602001015160f81c60f81b82600183611b739190617280565b81518110611b8457611b8361700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611b3e565b5080925050505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900460ff1681565b5f5f5f611c0d84610d10565b9150915080611c5357836040517f70cf6554000000000000000000000000000000000000000000000000000000008152600401611c4a919061636e565b60405180910390fd5b8192505050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cee57336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611ce591906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d53576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611da081613420565b611e835760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a82336040518363ffffffff1660e01b8152600401611e00929190616efc565b602060405180830381865afa158015611e1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3f9190616f7a565b611e825780336040517f4d13139e000000000000000000000000000000000000000000000000000000008152600401611e79929190616efc565b60405180910390fd5b5b50565b5f60025f8381526020019081526020015f205f9054906101000a900460ff16611ee657816040517f850a796d000000000000000000000000000000000000000000000000000000008152600401611edd919061636e565b60405180910390fd5b5f611ef08361354b565b90508060015f8581526020019081526020015f205416915050919050565b5f611f188361354b565b9050611f27838284165f613568565b505050565b60606002601f811115611f4257611f41616dba565b5b82601f811115611f5557611f54616dba565b5b03611f97576040518060400160405280600481526020017f63617374000000000000000000000000000000000000000000000000000000008152509050612abc565b6003601f811115611fab57611faa616dba565b5b82601f811115611fbe57611fbd616dba565b5b03612000576040518060400160405280600a81526020017f7365616c4f7574707574000000000000000000000000000000000000000000008152509050612abc565b6004601f81111561201457612013616dba565b5b82601f81111561202757612026616dba565b5b03612069576040518060400160405280600681526020017f73656c65637400000000000000000000000000000000000000000000000000008152509050612abc565b6006601f81111561207d5761207c616dba565b5b82601f8111156120905761208f616dba565b5b036120d2576040518060400160405280600781526020017f64656372797074000000000000000000000000000000000000000000000000008152509050612abc565b6007601f8111156120e6576120e5616dba565b5b82601f8111156120f9576120f8616dba565b5b0361213b576040518060400160405280600381526020017f73756200000000000000000000000000000000000000000000000000000000008152509050612abc565b6008601f81111561214f5761214e616dba565b5b82601f81111561216257612161616dba565b5b036121a4576040518060400160405280600381526020017f61646400000000000000000000000000000000000000000000000000000000008152509050612abc565b6009601f8111156121b8576121b7616dba565b5b82601f8111156121cb576121ca616dba565b5b0361220d576040518060400160405280600381526020017f786f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b600a601f81111561222157612220616dba565b5b82601f81111561223457612233616dba565b5b03612276576040518060400160405280600381526020017f616e6400000000000000000000000000000000000000000000000000000000008152509050612abc565b600b601f81111561228a57612289616dba565b5b82601f81111561229d5761229c616dba565b5b036122df576040518060400160405280600281526020017f6f720000000000000000000000000000000000000000000000000000000000008152509050612abc565b600c601f8111156122f3576122f2616dba565b5b82601f81111561230657612305616dba565b5b03612348576040518060400160405280600381526020017f6e6f7400000000000000000000000000000000000000000000000000000000008152509050612abc565b600d601f81111561235c5761235b616dba565b5b82601f81111561236f5761236e616dba565b5b036123b1576040518060400160405280600381526020017f64697600000000000000000000000000000000000000000000000000000000008152509050612abc565b600e601f8111156123c5576123c4616dba565b5b82601f8111156123d8576123d7616dba565b5b0361241a576040518060400160405280600381526020017f72656d00000000000000000000000000000000000000000000000000000000008152509050612abc565b600f601f81111561242e5761242d616dba565b5b82601f81111561244157612440616dba565b5b03612483576040518060400160405280600381526020017f6d756c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6010601f81111561249757612496616dba565b5b82601f8111156124aa576124a9616dba565b5b036124ec576040518060400160405280600381526020017f73686c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6011601f811115612500576124ff616dba565b5b82601f81111561251357612512616dba565b5b03612555576040518060400160405280600381526020017f73687200000000000000000000000000000000000000000000000000000000008152509050612abc565b6012601f81111561256957612568616dba565b5b82601f81111561257c5761257b616dba565b5b036125be576040518060400160405280600381526020017f67746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6013601f8111156125d2576125d1616dba565b5b82601f8111156125e5576125e4616dba565b5b03612627576040518060400160405280600381526020017f6c746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6014601f81111561263b5761263a616dba565b5b82601f81111561264e5761264d616dba565b5b03612690576040518060400160405280600281526020017f6c740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6015601f8111156126a4576126a3616dba565b5b82601f8111156126b7576126b6616dba565b5b036126f9576040518060400160405280600281526020017f67740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6016601f81111561270d5761270c616dba565b5b82601f8111156127205761271f616dba565b5b03612762576040518060400160405280600381526020017f6d696e00000000000000000000000000000000000000000000000000000000008152509050612abc565b6017601f81111561277657612775616dba565b5b82601f81111561278957612788616dba565b5b036127cb576040518060400160405280600381526020017f6d617800000000000000000000000000000000000000000000000000000000008152509050612abc565b6018601f8111156127df576127de616dba565b5b82601f8111156127f2576127f1616dba565b5b03612834576040518060400160405280600281526020017f65710000000000000000000000000000000000000000000000000000000000008152509050612abc565b6019601f81111561284857612847616dba565b5b82601f81111561285b5761285a616dba565b5b0361289d576040518060400160405280600281526020017f6e650000000000000000000000000000000000000000000000000000000000008152509050612abc565b601a601f8111156128b1576128b0616dba565b5b82601f8111156128c4576128c3616dba565b5b03612906576040518060400160405280600e81526020017f7472697669616c456e63727970740000000000000000000000000000000000008152509050612abc565b601b601f81111561291a57612919616dba565b5b82601f81111561292d5761292c616dba565b5b0361296f576040518060400160405280600681526020017f72616e646f6d00000000000000000000000000000000000000000000000000008152509050612abc565b601c601f81111561298357612982616dba565b5b82601f81111561299657612995616dba565b5b036129d8576040518060400160405280600381526020017f726f6c00000000000000000000000000000000000000000000000000000000008152509050612abc565b601d601f8111156129ec576129eb616dba565b5b82601f8111156129ff576129fe616dba565b5b03612a41576040518060400160405280600381526020017f726f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b601e601f811115612a5557612a54616dba565b5b82601f811115612a6857612a67616dba565b5b03612aaa576040518060400160405280600681526020017f73717561726500000000000000000000000000000000000000000000000000008152509050612abc565b60405180602001604052805f81525090505b919050565b5f612acb82611f2c565b90505f835103612b2557612ade82613609565b612b1f57806040517fb31612aa000000000000000000000000000000000000000000000000000000008152600401612b1691906168bd565b60405180910390fd5b50612d37565b6004601f811115612b3957612b38616dba565b5b82601f811115612b4c57612b4b616dba565b5b03612b5f57612b5a83613668565b612c8f565b612b68826137a9565b15612bbe576001835114612bb95780835160016040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612bb0939291906172ec565b60405180910390fd5b612c8e565b6002835114612c0a5780835160026040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612c0193929190617361565b60405180910390fd5b5f612c4b84600181518110612c2257612c2161700d565b5b6020026020010151855f81518110612c3d57612c3c61700d565b5b602002602001015118613837565b14612c8d57806040517f52b50ae1000000000000000000000000000000000000000000000000000000008152600401612c8491906168bd565b60405180910390fd5b5b5b5f612cb3845f81518110612ca657612ca561700d565b5b6020026020010151613855565b9050612cbe816132c2565b612d205780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401612d1793929190616ea0565b60405180910390fd5b612d2984613865565b612d348383866138b3565b50505b5050565b60605f82518451612d4c9190616d4c565b67ffffffffffffffff811115612d6557612d64616187565b5b604051908082528060200260200182016040528015612d935781602001602082028036833780820191505090505b5090505f5f90505b84518160ff161015612dfa57848160ff1681518110612dbd57612dbc61700d565b5b6020026020010151828260ff1681518110612ddb57612dda61700d565b5b6020026020010181815250508080612df29061739d565b915050612d9b565b5b83518551612e099190616d4c565b8160ff161015612e72578385518260ff16612e249190617280565b81518110612e3557612e3461700d565b5b6020026020010151828260ff1681518110612e5357612e5261700d565b5b6020026020010181815250508080612e6a9061739d565b915050612dfb565b819250505092915050565b5f612e8784613609565b15612ebb578160018351612e9b9190617280565b81518110612eac57612eab61700d565b5b60200260200101519050612ee1565b612ede835f81518110612ed157612ed061700d565b5b6020026020010151613855565b90505b9392505050565b5f60605f601a601f811115612f0057612eff616dba565b5b84601f811115612f1357612f12616dba565b5b1490505f5f90505b85518160ff161015612f835782612f4e878360ff1681518110612f4157612f4061700d565b5b6020026020010151613a21565b604051602001612f5f9291906173ff565b60405160208183030381529060405292508080612f7b9061739d565b915050612f1b565b50601e601f811115612f9857612f97616dba565b5b84601f811115612fab57612faa616dba565b5b03612ffb57600f935081612fd8865f81518110612fcb57612fca61700d565b5b6020026020010151613a21565b604051602001612fe99291906173ff565b60405160208183030381529060405291505b5f84601f81111561300f5761300e616dba565b5b60f81b9050828160405160200161302792919061746d565b60405160208183030381529060405292505f838051906020012090505f61305b825f1c8a6130558a8e613a83565b876133c7565b90508095505050505050949350505050565b6001815114806130845750613083826002613bae565b5b1561310c577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106130bf576130be61700d565b5b60200260200101515f5f6040516130da9594939291906174cd565b60405180910390a16131078383835f815181106130fa576130f961700d565b5b6020026020010151613bc9565b6132bd565b60028151036131cf577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f8151811061314b5761314a61700d565b5b6020026020010151846001815181106131675761316661700d565b5b60200260200101515f604051613181959493929190617525565b60405180910390a16131ca8383835f815181106131a1576131a061700d565b5b6020026020010151846001815181106131bd576131bc61700d565b5b6020026020010151613e30565b6132bc565b7fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106132055761320461700d565b5b6020026020010151846001815181106132215761322061700d565b5b60200260200101518560028151811061323d5761323c61700d565b5b602002602001015160405161325695949392919061757d565b60405180910390a16132bb8383835f815181106132765761327561700d565b5b6020026020010151846001815181106132925761329161700d565b5b6020026020010151856002815181106132ae576132ad61700d565b5b6020026020010151614c5c565b5b5b505050565b5f600760049054906101000a900460030b60030b8260030b121580156132fc575060075f9054906101000a900460030b60030b8260030b13155b9050919050565b5f5f835f015184604001518560200151854660405160200161332995949392919061766e565b60405160208183030381529060405290505f818051906020012090505f613354828760600151614e03565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036133bb576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80935050505092915050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133f89190617280565b851690505f8460ff16600861340d8587614e2d565b901b179050808217915050949350505050565b5f600160ff8016901c60ff1660ff801661343a9190617280565b600160ff8016901c60ff1660ff80166134539190617280565b8316149050919050565b5f5f9054906101000a900460ff1615613546576135456040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506134d58560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525061351486614fb3565b61351d8661514f565b60405160200161353195949392919061772c565b60405160208183030381529060405261517c565b5b505050565b5f5f61355683615215565b90506001816001901b03915050919050565b8160015f8581526020019081526020015f2081905550600160025f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055508015613604576136036040518060400160405280600381526020017f736574000000000000000000000000000000000000000000000000000000000081525060405180602001604052805f8152506135fe86614fb3565b6152ec565b5b505050565b5f601b601f81111561361e5761361d616dba565b5b82601f81111561363157613630616dba565b5b14806136615750601a601f81111561364c5761364b616dba565b5b82601f81111561365f5761365e616dba565b5b145b9050919050565b60038151146136b257805160036040517f9a84351c0000000000000000000000000000000000000000000000000000000081526004016136a99291906177cf565b60405180910390fd5b5f6136f4826002815181106136ca576136c961700d565b5b6020026020010151836001815181106136e6576136e561700d565b5b602002602001015118613837565b14613734576040517f52b50ae100000000000000000000000000000000000000000000000000000000815260040161372b90617809565b60405180910390fd5b5f613758825f8151811061374b5761374a61700d565b5b60200260200101516153ca565b90505f5f821860ff16146137a557805f6040517f884a0e9d00000000000000000000000000000000000000000000000000000000815260040161379c929190617836565b60405180910390fd5b5050565b5f600c601f8111156137be576137bd616dba565b5b82601f8111156137d1576137d0616dba565b5b14806138015750601e601f8111156137ec576137eb616dba565b5b82601f8111156137ff576137fe616dba565b5b145b8061383057506002601f81111561381b5761381a616dba565b5b82601f81111561382e5761382d616dba565b5b145b9050919050565b5f8160ff80166008600160ff8016901c60ff16901b17169050919050565b5f60ff801682165f0b9050919050565b5f5f90505b81518160ff1610156138af5761389c828260ff168151811061388f5761388e61700d565b5b6020026020010151611d97565b80806138a79061739d565b91505061386a565b5050565b6138bc836153e6565b613a1c576138c9836154a3565b1561396f575f5f90505b81518160ff161015613969575f613906838360ff16815181106138f9576138f861700d565b5b60200260200101516153ca565b90505f6007821860ff1603613955578360076040517f91b4b37800000000000000000000000000000000000000000000000000000000815260040161394c92919061785d565b60405180910390fd5b5080806139619061739d565b9150506138d3565b50613a1b565b5f5f90505b81518160ff161015613a19575f6139a7838360ff168151811061399a5761399961700d565b5b60200260200101516153ca565b90505f6007821860ff1614806139c157505f5f821860ff16145b15613a055783816040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016139fc92919061785d565b60405180910390fd5b508080613a119061739d565b915050613974565b505b5b505050565b60605f602067ffffffffffffffff811115613a3f57613a3e616187565b5b6040519080825280601f01601f191660200182016040528015613a715781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f6013601f811115613a9857613a97616dba565b5b83601f811115613aab57613aaa616dba565b5b1480613adb57506014601f811115613ac657613ac5616dba565b5b83601f811115613ad957613ad8616dba565b5b145b80613b0a57506012601f811115613af557613af4616dba565b5b83601f811115613b0857613b07616dba565b5b145b80613b3957506015601f811115613b2457613b23616dba565b5b83601f811115613b3757613b36616dba565b5b145b80613b6857506018601f811115613b5357613b52616dba565b5b83601f811115613b6657613b65616dba565b5b145b80613b9757506019601f811115613b8257613b81616dba565b5b83601f811115613b9557613b94616dba565b5b145b15613ba4575f9050613ba8565b8190505b92915050565b5f613bc183613bbc84611f2c565b615560565b905092915050565b613bd482601b613bae565b15613c4d57613bf283600143613bea9190617280565b405f1c611f0e565b613c486040518060400160405280600a81526020017f4648452e72616e646f6d0000000000000000000000000000000000000000000081525060405180602001604052805f815250613c4386614fb3565b6152ec565b613e2b565b613c58826002613bae565b15613cc457613c6f83613c6a83611e86565b611f0e565b613cbf6040518060400160405280600881526020017f4648452e63617374000000000000000000000000000000000000000000000000815250613cb183614fb3565b613cba86614fb3565b6152ec565b613e2b565b613ccf82600c613bae565b15613d44575f6001613ce083611e86565b149050613cee8482156155b8565b613d3e6040518060400160405280600781526020017f4648452e6e6f7400000000000000000000000000000000000000000000000000815250613d3084614fb3565b613d3987614fb3565b6152ec565b50613e2b565b613d4f82601e613bae565b15613dee57613d7083613d6183611e86565b613d6a84611e86565b02611f0e565b613de96040518060400160405280600a81526020017f4648452e73717561726500000000000000000000000000000000000000000000815250613db283614fb3565b613dbb84614fb3565b604051602001613dcc9291906178b1565b604051602081830303815290604052613de486614fb3565b6152ec565b613e2b565b816040517fd952ce7c000000000000000000000000000000000000000000000000000000008152600401613e2291906168bd565b60405180910390fd5b505050565b613e3b836007613bae565b15613eda57613e5c84613e4d83611e86565b613e5685611e86565b03611f0e565b613ed56040518060400160405280600781526020017f4648452e73756200000000000000000000000000000000000000000000000000815250613e9e84614fb3565b613ea784614fb3565b604051602001613eb8929190617909565b604051602081830303815290604052613ed087614fb3565b6152ec565b614c56565b613ee5836008613bae565b15613f8457613f0684613ef783611e86565b613f0085611e86565b01611f0e565b613f7f6040518060400160405280600781526020017f4648452e61646400000000000000000000000000000000000000000000000000815250613f4884614fb3565b613f5184614fb3565b604051602001613f62929190617961565b604051602081830303815290604052613f7a87614fb3565b6152ec565b614c56565b613f8f836009613bae565b1561402e57613fb084613fa183611e86565b613faa85611e86565b18611f0e565b6140296040518060400160405280600781526020017f4648452e786f7200000000000000000000000000000000000000000000000000815250613ff284614fb3565b613ffb84614fb3565b60405160200161400c9291906179b9565b60405160208183030381529060405261402487614fb3565b6152ec565b614c56565b61403983600a613bae565b156140d85761405a8461404b83611e86565b61405485611e86565b16611f0e565b6140d36040518060400160405280600781526020017f4648452e616e640000000000000000000000000000000000000000000000000081525061409c84614fb3565b6140a584614fb3565b6040516020016140b6929190617a11565b6040516020818303038152906040526140ce87614fb3565b6152ec565b614c56565b6140e383600b613bae565b1561418257614104846140f583611e86565b6140fe85611e86565b17611f0e565b61417d6040518060400160405280600681526020017f4648452e6f72000000000000000000000000000000000000000000000000000081525061414684614fb3565b61414f84614fb3565b604051602001614160929190617a69565b60405160208183030381529060405261417887614fb3565b6152ec565b614c56565b61418d83600d613bae565b15614276575f61419c82611e86565b90505f81036141d4576141cf857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f0e565b6141f7565b6141f685826141e286611e86565b816141f0576141ef616cc2565b5b04611f0e565b5b6142706040518060400160405280600781526020017f4648452e6469760000000000000000000000000000000000000000000000000081525061423985614fb3565b61424285614fb3565b604051602001614253929190617ac1565b60405160208183030381529060405261426b88614fb3565b6152ec565b50614c56565b61428183600e613bae565b1561432e576142b08461429383611e86565b61429c85611e86565b816142aa576142a9616cc2565b5b06611f0e565b6143296040518060400160405280600781526020017f4648452e72656d000000000000000000000000000000000000000000000000008152506142f284614fb3565b6142fb84614fb3565b60405160200161430c929190617b19565b60405160208183030381529060405261432487614fb3565b6152ec565b614c56565b61433983600f613bae565b156143d85761435a8461434b83611e86565b61435485611e86565b02611f0e565b6143d36040518060400160405280600781526020017f4648452e6d756c0000000000000000000000000000000000000000000000000081525061439c84614fb3565b6143a584614fb3565b6040516020016143b69291906178b1565b6040516020818303038152906040526143ce87614fb3565b6152ec565b614c56565b6143e3836010613bae565b1561448357614405846143f583611e86565b6143fe85611e86565b901b611f0e565b61447e6040518060400160405280600781526020017f4648452e73686c0000000000000000000000000000000000000000000000000081525061444784614fb3565b61445084614fb3565b604051602001614461929190617b71565b60405160208183030381529060405261447987614fb3565b6152ec565b614c56565b61448e836011613bae565b1561452e576144b0846144a083611e86565b6144a985611e86565b901c611f0e565b6145296040518060400160405280600781526020017f4648452e736872000000000000000000000000000000000000000000000000008152506144f284614fb3565b6144fb84614fb3565b60405160200161450c929190617bc9565b60405160208183030381529060405261452487614fb3565b6152ec565b614c56565b614539836012613bae565b156145d95761455b8461454b83611e86565b61455485611e86565b10156155b8565b6145d46040518060400160405280600781526020017f4648452e6774650000000000000000000000000000000000000000000000000081525061459d84614fb3565b6145a684614fb3565b6040516020016145b7929190617c21565b6040516020818303038152906040526145cf87614fb3565b6152ec565b614c56565b6145e4836013613bae565b1561468457614606846145f683611e86565b6145ff85611e86565b11156155b8565b61467f6040518060400160405280600781526020017f4648452e6c74650000000000000000000000000000000000000000000000000081525061464884614fb3565b61465184614fb3565b604051602001614662929190617c79565b60405160208183030381529060405261467a87614fb3565b6152ec565b614c56565b61468f836014613bae565b1561472e576146b0846146a183611e86565b6146aa85611e86565b106155b8565b6147296040518060400160405280600681526020017f4648452e6c7400000000000000000000000000000000000000000000000000008152506146f284614fb3565b6146fb84614fb3565b60405160200161470c929190617cd1565b60405160208183030381529060405261472487614fb3565b6152ec565b614c56565b614739836015613bae565b156147d85761475a8461474b83611e86565b61475485611e86565b116155b8565b6147d36040518060400160405280600681526020017f4648452e6774000000000000000000000000000000000000000000000000000081525061479c84614fb3565b6147a584614fb3565b6040516020016147b6929190617d29565b6040516020818303038152906040526147ce87614fb3565b6152ec565b614c56565b6147e3836016613bae565b156148a3575f6147f282611e86565b6147fb84611e86565b1061480e5761480982611e86565b614818565b61481783611e86565b5b90506148248582611f0e565b61489d6040518060400160405280600781526020017f4648452e6d696e0000000000000000000000000000000000000000000000000081525061486685614fb3565b61486f85614fb3565b604051602001614880929190617dcd565b60405160208183030381529060405261489888614fb3565b6152ec565b50614c56565b6148ae836017613bae565b1561496e575f6148bd82611e86565b6148c684611e86565b116148d9576148d482611e86565b6148e3565b6148e283611e86565b5b90506148ef8582611f0e565b6149686040518060400160405280600781526020017f4648452e6d61780000000000000000000000000000000000000000000000000081525061493185614fb3565b61493a85614fb3565b60405160200161494b929190617e43565b60405160208183030381529060405261496388614fb3565b6152ec565b50614c56565b614979836018613bae565b15614a185761499a8461498b83611e86565b61499485611e86565b146155b8565b614a136040518060400160405280600681526020017f4648452e657100000000000000000000000000000000000000000000000000008152506149dc84614fb3565b6149e584614fb3565b6040516020016149f6929190617eb9565b604051602081830303815290604052614a0e87614fb3565b6152ec565b614c56565b614a23836019613bae565b15614ac357614a4584614a3583611e86565b614a3e85611e86565b14156155b8565b614abe6040518060400160405280600681526020017f4648452e6e650000000000000000000000000000000000000000000000000000815250614a8784614fb3565b614a9084614fb3565b604051602001614aa1929190617f11565b604051602081830303815290604052614ab987614fb3565b6152ec565b614c56565b614ace83601c613bae565b15614b6e57614af084614ae083611e86565b614ae985611e86565b901b611f0e565b614b696040518060400160405280600781526020017f4648452e726f6c00000000000000000000000000000000000000000000000000815250614b3284614fb3565b614b3b84614fb3565b604051602001614b4c929190617b71565b604051602081830303815290604052614b6487614fb3565b6152ec565b614c56565b614b7983601d613bae565b15614c1957614b9b84614b8b83611e86565b614b9485611e86565b901c611f0e565b614c146040518060400160405280600781526020017f4648452e726f7200000000000000000000000000000000000000000000000000815250614bdd84614fb3565b614be684614fb3565b604051602001614bf7929190617bc9565b604051602081830303815290604052614c0f87614fb3565b6152ec565b614c56565b826040517fcef60885000000000000000000000000000000000000000000000000000000008152600401614c4d91906168bd565b60405180910390fd5b50505050565b614c6784601a613bae565b15614cf657614c768584611f0e565b614cf1614c8a614c85876155d6565b611ab6565b604051602001614c9a9190617f69565b604051602081830303815290604052614cba614cb5886155d6565b611ab6565b614cc386615882565b604051602001614cd4929190617fb4565b604051602081830303815290604052614cec88614fb3565b6152ec565b614dfc565b614d01846004613bae565b15614dbf57614d37856001614d1586611e86565b14614d2857614d2383611e86565b614d32565b614d3184611e86565b5b611f0e565b614dba6040518060400160405280600a81526020017f4648452e73656c65637400000000000000000000000000000000000000000000815250614d7985614fb3565b614d8285614fb3565b614d8b85614fb3565b604051602001614d9d93929190618041565b604051602081830303815290604052614db588614fb3565b6152ec565b614dfc565b836040517f5e45fa01000000000000000000000000000000000000000000000000000000008152600401614df391906168bd565b60405180910390fd5b5050505050565b5f5f5f5f614e11868661594c565b925092509250614e2182826159a1565b82935050505092915050565b5f600160ff8016901c60ff168260ff161683614e49575f614e63565b600160ff8016901c60ff1660ff8016614e629190617280565b5b17905092915050565b60605f84905083815110614e835784915050614fac565b5f8467ffffffffffffffff811115614e9e57614e9d616187565b5b6040519080825280601f01601f191660200182016040528015614ed05781602001600182028036833780820191505090505b5090505f5f90505b8251811015614f4d57828181518110614ef457614ef361700d565b5b602001015160f81c60f81b828281518110614f1257614f1161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614ed8565b5b85811015614fa55784828281518110614f6a57614f6961700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614f4e565b8193505050505b9392505050565b60605f614fbf83615882565b90505f8151905060068111614fd857819250505061514a565b5f60025f8681526020019081526020015f205f9054906101000a900460ff1690505f60015f8781526020019081526020015f205490505f61501887615b03565b90505f8161502e5761502983615882565b6150a9565b60018314615071576040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152506150a8565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b5b90505f6150b5896155d6565b6150c1885f60046112ee565b6150d98960048a6150d29190617280565b60046112ee565b87615119576040518060400160405280600581526020017f454d50545900000000000000000000000000000000000000000000000000000081525061511b565b845b60405160200161512e9493929190618101565b6040516020818303038152906040529050809750505050505050505b919050565b60606151758273ffffffffffffffffffffffffffffffffffffffff16601460ff16615b20565b9050919050565b6152128160405160240161519091906168bd565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615d5e565b50565b5f5f61522083615d78565b90505f60ff168160ff16036152395760089150506152e7565b600260ff168160ff16036152515760089150506152e7565b600360ff168160ff16036152695760109150506152e7565b600460ff168160ff16036152815760209150506152e7565b600560ff168160ff16036152995760409150506152e7565b600660ff168160ff16036152b15760809150506152e7565b600860ff168160ff16036152ca576101009150506152e7565b600760ff168160ff16036152e25760a09150506152e7565b5f9150505b919050565b5f5f9054906101000a900460ff16156153c5576153c46040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506153648560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525085856040516020016153b09594939291906181a0565b60405160208183030381529060405261517c565b5b505050565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f6004601f8111156153fb576153fa616dba565b5b82601f81111561540e5761540d616dba565b5b148061543e57506018601f81111561542957615428616dba565b5b82601f81111561543c5761543b616dba565b5b145b8061546d57506019601f81111561545857615457616dba565b5b82601f81111561546b5761546a616dba565b5b145b8061549c57506002601f81111561548757615486616dba565b5b82601f81111561549a57615499616dba565b5b145b9050919050565b5f6009601f8111156154b8576154b7616dba565b5b82601f8111156154cb576154ca616dba565b5b14806154fb5750600a601f8111156154e6576154e5616dba565b5b82601f8111156154f9576154f8616dba565b5b145b8061552a5750600b601f81111561551557615514616dba565b5b82601f81111561552857615527616dba565b5b145b806155595750600c601f81111561554457615543616dba565b5b82601f81111561555757615556616dba565b5b145b9050919050565b5f8160405160200161557291906181f9565b604051602081830303815290604052805190602001208360405160200161559991906181f9565b6040516020818303038152906040528051906020012014905092915050565b6155d282826155c7575f6155ca565b60015b60ff16611f0e565b5050565b60605f6155e283615d78565b90505f60ff168160ff160361562f576040518060400160405280600581526020017f65626f6f6c00000000000000000000000000000000000000000000000000000081525091505061587d565b600260ff168160ff160361567b576040518060400160405280600681526020017f6575696e7438000000000000000000000000000000000000000000000000000081525091505061587d565b600360ff168160ff16036156c7576040518060400160405280600781526020017f6575696e7431360000000000000000000000000000000000000000000000000081525091505061587d565b600460ff168160ff1603615713576040518060400160405280600781526020017f6575696e7433320000000000000000000000000000000000000000000000000081525091505061587d565b600560ff168160ff160361575f576040518060400160405280600781526020017f6575696e7436340000000000000000000000000000000000000000000000000081525091505061587d565b600660ff168160ff16036157ab576040518060400160405280600881526020017f6575696e7431323800000000000000000000000000000000000000000000000081525091505061587d565b600860ff168160ff16036157f7576040518060400160405280600881526020017f6575696e7432353600000000000000000000000000000000000000000000000081525091505061587d565b600760ff168160ff1603615843576040518060400160405280600881526020017f656164647265737300000000000000000000000000000000000000000000000081525091505061587d565b6040518060400160405280600781526020017f756e6b6e6f776e000000000000000000000000000000000000000000000000008152509150505b919050565b60605f600161589084615d94565b0190505f8167ffffffffffffffff8111156158ae576158ad616187565b5b6040519080825280601f01601f1916602001820160405280156158e05781602001600182028036833780820191505090505b5090505f82602083010190505b600115615941578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161593657615935616cc2565b5b0494505f85036158ed575b819350505050919050565b5f5f5f604184510361598c575f5f5f602087015192506040870151915060608701515f1a905061597e88828585615ee5565b95509550955050505061599a565b5f600285515f1b9250925092505b9250925092565b5f60038111156159b4576159b3616dba565b5b8260038111156159c7576159c6616dba565b5b0315615aff57600160038111156159e1576159e0616dba565b5b8260038111156159f4576159f3616dba565b5b03615a2b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115615a3f57615a3e616dba565b5b826003811115615a5257615a51616dba565b5b03615a9657805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401615a8d919061636e565b60405180910390fd5b600380811115615aa957615aa8616dba565b5b826003811115615abc57615abb616dba565b5b03615afe57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401615af5919061821e565b60405180910390fd5b5b5050565b5f5f615b0e83615d78565b90505f5f821860ff1614915050919050565b60605f8390505f6002846002615b369190618237565b615b409190616d4c565b67ffffffffffffffff811115615b5957615b58616187565b5b6040519080825280601f01601f191660200182016040528015615b8b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110615bc257615bc161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110615c2557615c2461700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001856002615c639190618237565b615c6d9190616d4c565b90505b6001811115615d0c577f3031323334353637383961626364656600000000000000000000000000000000600f841660108110615caf57615cae61700d565b5b1a60f81b828281518110615cc657615cc561700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c925080615d0590618278565b9050615c70565b505f8214615d535784846040517fe22e27eb000000000000000000000000000000000000000000000000000000008152600401615d4a92919061829f565b60405180910390fd5b809250505092915050565b615d7581615d6d615fcc615feb565b63ffffffff16565b50565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615df0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381615de657615de5616cc2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310615e2d576d04ee2d6d415b85acef81000000008381615e2357615e22616cc2565b5b0492506020810190505b662386f26fc100008310615e5c57662386f26fc100008381615e5257615e51616cc2565b5b0492506010810190505b6305f5e1008310615e85576305f5e1008381615e7b57615e7a616cc2565b5b0492506008810190505b6127108310615eaa576127108381615ea057615e9f616cc2565b5b0492506004810190505b60648310615ecd5760648381615ec357615ec2616cc2565b5b0492506002810190505b600a8310615edc576001810190505b80915050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115615f21575f600385925092509250615fc2565b5f6001888888886040515f8152602001604052604051615f4494939291906182c6565b6020604051602081039080840390855afa158015615f64573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603615fb5575f60015f5f1b93509350935050615fc2565b805f5f5f1b935093509350505b9450945094915050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b615ff6819050919050565b615ffe618309565b565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b61602381616011565b811461602d575f5ffd5b50565b5f8135905061603e8161601a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61606d82616044565b9050919050565b61607d81616063565b8114616087575f5ffd5b50565b5f8135905061609881616074565b92915050565b5f5f604083850312156160b4576160b3616009565b5b5f6160c185828601616030565b92505060206160d28582860161608a565b9150509250929050565b5f5f604083850312156160f2576160f1616009565b5b5f6160ff85828601616030565b925050602061611085828601616030565b9150509250929050565b5f60ff82169050919050565b61612f8161611a565b8114616139575f5ffd5b50565b5f8135905061614a81616126565b92915050565b6020811061615c575f5ffd5b50565b5f8135905061616d81616150565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6161bd82616177565b810181811067ffffffffffffffff821117156161dc576161db616187565b5b80604052505050565b5f6161ee616000565b90506161fa82826161b4565b919050565b5f67ffffffffffffffff82111561621957616218616187565b5b602082029050602081019050919050565b5f5ffd5b5f61624061623b846161ff565b6161e5565b905080838252602082019050602084028301858111156162635761626261622a565b5b835b8181101561628c57806162788882616030565b845260208401935050602081019050616265565b5050509392505050565b5f82601f8301126162aa576162a9616173565b5b81356162ba84826020860161622e565b91505092915050565b5f5f5f5f608085870312156162db576162da616009565b5b5f6162e88782880161613c565b94505060206162f98782880161615f565b935050604085013567ffffffffffffffff81111561631a5761631961600d565b5b61632687828801616296565b925050606085013567ffffffffffffffff8111156163475761634661600d565b5b61635387828801616296565b91505092959194509250565b61636881616011565b82525050565b5f6020820190506163815f83018461635f565b92915050565b5f6020828403121561639c5761639b616009565b5b5f6163a984828501616030565b91505092915050565b5f8115159050919050565b6163c6816163b2565b82525050565b5f6020820190506163df5f8301846163bd565b92915050565b6163ee81616063565b82525050565b5f6020820190506164075f8301846163e5565b92915050565b5f8160030b9050919050565b6164228161640d565b811461642c575f5ffd5b50565b5f8135905061643d81616419565b92915050565b5f5f6040838503121561645957616458616009565b5b5f6164668582860161642f565b92505060206164778582860161642f565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156164a7576164a6616187565b5b6164b082616177565b9050602081019050919050565b828183375f83830152505050565b5f6164dd6164d88461648d565b6161e5565b9050828152602081018484840111156164f9576164f8616489565b5b6165048482856164bd565b509392505050565b5f82601f8301126165205761651f616173565b5b81356165308482602086016164cb565b91505092915050565b5f6080828403121561654e5761654d616481565b5b61655860806161e5565b90505f61656784828501616030565b5f83015250602061657a8482850161613c565b602083015250604061658e8482850161613c565b604083015250606082013567ffffffffffffffff8111156165b2576165b1616485565b5b6165be8482850161650c565b60608301525092915050565b5f5f604083850312156165e0576165df616009565b5b5f83013567ffffffffffffffff8111156165fd576165fc61600d565b5b61660985828601616539565b925050602061661a8582860161608a565b9150509250929050565b5f6040820190506166375f83018561635f565b61664460208301846163bd565b9392505050565b5f67ffffffffffffffff82111561666557616664616187565b5b61666e82616177565b9050602081019050919050565b5f61668d6166888461664b565b6161e5565b9050828152602081018484840111156166a9576166a8616489565b5b6166b48482856164bd565b509392505050565b5f82601f8301126166d0576166cf616173565b5b81356166e084826020860161667b565b91505092915050565b5f5f5f60608486031215616700576166ff616009565b5b5f61670d86828701616030565b935050602084013567ffffffffffffffff81111561672e5761672d61600d565b5b61673a868287016166bc565b925050604084013567ffffffffffffffff81111561675b5761675a61600d565b5b616767868287016166bc565b9150509250925092565b5f6020828403121561678657616785616009565b5b5f6167938482850161642f565b91505092915050565b6167a5816163b2565b81146167af575f5ffd5b50565b5f813590506167c08161679c565b92915050565b5f602082840312156167db576167da616009565b5b5f6167e8848285016167b2565b91505092915050565b5f5f5f6060848603121561680857616807616009565b5b5f84013567ffffffffffffffff8111156168255761682461600d565b5b616831868287016166bc565b935050602061684286828701616030565b925050604061685386828701616030565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61688f8261685d565b6168998185616867565b93506168a9818560208601616877565b6168b281616177565b840191505092915050565b5f6020820190508181035f8301526168d58184616885565b905092915050565b5f5ffd5b5f5f83601f8401126168f6576168f5616173565b5b8235905067ffffffffffffffff811115616913576169126168dd565b5b60208301915083602082028301111561692f5761692e61622a565b5b9250929050565b5f5f5f5f6060858703121561694e5761694d616009565b5b5f61695b87828801616030565b945050602061696c87828801616030565b935050604085013567ffffffffffffffff81111561698d5761698c61600d565b5b616999878288016168e1565b925092505092959194509250565b5f5f5f606084860312156169be576169bd616009565b5b5f84013567ffffffffffffffff8111156169db576169da61600d565b5b6169e7868287016166bc565b93505060206169f886828701616030565b9250506040616a098682870161608a565b9150509250925092565b5f60208284031215616a2857616a27616009565b5b5f616a358482850161608a565b91505092915050565b5f67ffffffffffffffff82169050919050565b616a5a81616a3e565b8114616a64575f5ffd5b50565b5f81359050616a7581616a51565b92915050565b5f819050919050565b616a8d81616a7b565b8114616a97575f5ffd5b50565b5f81359050616aa881616a84565b92915050565b5f6101008284031215616ac457616ac3616481565b5b616acf6101006161e5565b90505f616ade8482850161608a565b5f830152506020616af184828501616a67565b6020830152506040616b058482850161608a565b6040830152506060616b1984828501616030565b6060830152506080616b2d8482850161608a565b60808301525060a0616b4184828501616a9a565b60a08301525060c082013567ffffffffffffffff811115616b6557616b64616485565b5b616b718482850161650c565b60c08301525060e082013567ffffffffffffffff811115616b9557616b94616485565b5b616ba18482850161650c565b60e08301525092915050565b5f5f60408385031215616bc357616bc2616009565b5b5f83013567ffffffffffffffff811115616be057616bdf61600d565b5b616bec85828601616aae565b9250506020616bfd85828601616030565b9150509250929050565b5f60208284031215616c1c57616c1b616009565b5b5f82013567ffffffffffffffff811115616c3957616c3861600d565b5b616c45848285016166bc565b91505092915050565b5f819050919050565b5f616c71616c6c616c6784616044565b616c4e565b616044565b9050919050565b5f616c8282616c57565b9050919050565b5f616c9382616c78565b9050919050565b616ca381616c89565b82525050565b5f602082019050616cbc5f830184616c9a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f616cf982616011565b9150616d0483616011565b925082616d1457616d13616cc2565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f616d5682616011565b9150616d6183616011565b9250828201905080821115616d7957616d78616d1f565b5b92915050565b5f616d8982616a3e565b9150616d9483616a3e565b9250828201905067ffffffffffffffff811115616db457616db3616d1f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050919050565b5f616e0a616e05616e0084616de7565b616c4e565b616011565b9050919050565b616e1a81616df0565b82525050565b5f6060820190508181035f830152616e388186616885565b9050616e47602083018561635f565b616e546040830184616e11565b949350505050565b5f606082019050616e6f5f83018661635f565b616e7c60208301856163e5565b616e8960408301846163e5565b949350505050565b616e9a8161640d565b82525050565b5f606082019050616eb35f830186616e91565b616ec06020830185616e91565b616ecd6040830184616e91565b949350505050565b5f604082019050616ee85f8301856163e5565b616ef560208301846163e5565b9392505050565b5f604082019050616f0f5f83018561635f565b616f1c60208301846163e5565b9392505050565b5f606082019050616f365f83018661635f565b8181036020830152616f488185616885565b90508181036040830152616f5c8184616885565b9050949350505050565b5f81519050616f748161679c565b92915050565b5f60208284031215616f8f57616f8e616009565b5b5f616f9c84828501616f66565b91505092915050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f616fd9600d83616867565b9150616fe482616fa5565b602082019050919050565b5f6020820190508181035f83015261700681616fcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61706c81616011565b82525050565b5f61707d8383617063565b60208301905092915050565b5f602082019050919050565b5f61709f8261703a565b6170a98185617044565b93506170b483617054565b805f5b838110156170e45781516170cb8882617072565b97506170d683617089565b9250506001810190506170b7565b5085935050505092915050565b5f6040820190508181035f8301526171098185617095565b905061711860208301846163e5565b9392505050565b61712881616063565b82525050565b61713781616a3e565b82525050565b61714681616a7b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6171708261714c565b61717a8185617156565b935061718a818560208601616877565b61719381616177565b840191505092915050565b5f61010083015f8301516171b45f86018261711f565b5060208301516171c7602086018261712e565b5060408301516171da604086018261711f565b5060608301516171ed6060860182617063565b506080830151617200608086018261711f565b5060a083015161721360a086018261713d565b5060c083015184820360c086015261722b8282617166565b91505060e083015184820360e08601526172458282617166565b9150508091505092915050565b5f6040820190508181035f83015261726a818561719e565b9050617279602083018461635f565b9392505050565b5f61728a82616011565b915061729583616011565b92508282039050818111156172ad576172ac616d1f565b5b92915050565b5f819050919050565b5f6172d66172d16172cc846172b3565b616c4e565b616011565b9050919050565b6172e6816172bc565b82525050565b5f6060820190508181035f8301526173048186616885565b9050617313602083018561635f565b61732060408301846172dd565b949350505050565b5f819050919050565b5f61734b61734661734184617328565b616c4e565b616011565b9050919050565b61735b81617331565b82525050565b5f6060820190508181035f8301526173798186616885565b9050617388602083018561635f565b6173956040830184617352565b949350505050565b5f6173a78261611a565b915060ff82036173ba576173b9616d1f565b5b600182019050919050565b5f81905092915050565b5f6173d98261714c565b6173e381856173c5565b93506173f3818560208601616877565b80840191505092915050565b5f61740a82856173cf565b915061741682846173cf565b91508190509392505050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61746761746282617422565b61744d565b82525050565b5f61747882856173cf565b91506174848284617456565b6001820191508190509392505050565b5f819050919050565b5f6174b76174b26174ad84617494565b616c4e565b616011565b9050919050565b6174c78161749d565b82525050565b5f60a0820190506174e05f83018861635f565b81810360208301526174f28187616885565b9050617501604083018661635f565b61750e60608301856174be565b61751b60808301846174be565b9695505050505050565b5f60a0820190506175385f83018861635f565b818103602083015261754a8187616885565b9050617559604083018661635f565b617566606083018561635f565b61757360808301846174be565b9695505050505050565b5f60a0820190506175905f83018861635f565b81810360208301526175a28187616885565b90506175b1604083018661635f565b6175be606083018561635f565b6175cb608083018461635f565b9695505050505050565b5f819050919050565b6175ef6175ea82616011565b6175d5565b82525050565b5f8160f81b9050919050565b5f61760b826175f5565b9050919050565b61762361761e8261611a565b617601565b82525050565b5f8160601b9050919050565b5f61763f82617629565b9050919050565b5f61765082617635565b9050919050565b61766861766382616063565b617646565b82525050565b5f61767982886175de565b6020820191506176898287617612565b6001820191506176998286617612565b6001820191506176a98285617657565b6014820191506176b982846175de565b6020820191508190509695505050505050565b5f81905092915050565b5f6176e08261685d565b6176ea81856176cc565b93506176fa818560208601616877565b80840191505092915050565b7f202d3e2000000000000000000000000000000000000000000000000000000000815250565b5f61773782886176d6565b915061774382876176d6565b915061774f82866176d6565b915061775b82856176d6565b915061776682617706565b60048201915061777682846176d6565b91508190509695505050505050565b7f73656c65637400000000000000000000000000000000000000000000000000005f82015250565b5f6177b9600683616867565b91506177c482617785565b602082019050919050565b5f6060820190508181035f8301526177e6816177ad565b90506177f5602083018561635f565b6178026040830184616e11565b9392505050565b5f6020820190508181035f830152617820816177ad565b9050919050565b6178308161611a565b82525050565b5f6040820190506178495f830185617827565b6178566020830184617827565b9392505050565b5f6040820190508181035f8301526178758185616885565b90506178846020830184617827565b9392505050565b7f202a200000000000000000000000000000000000000000000000000000000000815250565b5f6178bc82856176d6565b91506178c78261788b565b6003820191506178d782846176d6565b91508190509392505050565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b5f61791482856176d6565b915061791f826178e3565b60038201915061792f82846176d6565b91508190509392505050565b7f202b200000000000000000000000000000000000000000000000000000000000815250565b5f61796c82856176d6565b91506179778261793b565b60038201915061798782846176d6565b91508190509392505050565b7f205e200000000000000000000000000000000000000000000000000000000000815250565b5f6179c482856176d6565b91506179cf82617993565b6003820191506179df82846176d6565b91508190509392505050565b7f2026200000000000000000000000000000000000000000000000000000000000815250565b5f617a1c82856176d6565b9150617a27826179eb565b600382019150617a3782846176d6565b91508190509392505050565b7f207c200000000000000000000000000000000000000000000000000000000000815250565b5f617a7482856176d6565b9150617a7f82617a43565b600382019150617a8f82846176d6565b91508190509392505050565b7f202f200000000000000000000000000000000000000000000000000000000000815250565b5f617acc82856176d6565b9150617ad782617a9b565b600382019150617ae782846176d6565b91508190509392505050565b7f2025200000000000000000000000000000000000000000000000000000000000815250565b5f617b2482856176d6565b9150617b2f82617af3565b600382019150617b3f82846176d6565b91508190509392505050565b7f203c3c2000000000000000000000000000000000000000000000000000000000815250565b5f617b7c82856176d6565b9150617b8782617b4b565b600482019150617b9782846176d6565b91508190509392505050565b7f203e3e2000000000000000000000000000000000000000000000000000000000815250565b5f617bd482856176d6565b9150617bdf82617ba3565b600482019150617bef82846176d6565b91508190509392505050565b7f203e3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c2c82856176d6565b9150617c3782617bfb565b600482019150617c4782846176d6565b91508190509392505050565b7f203c3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c8482856176d6565b9150617c8f82617c53565b600482019150617c9f82846176d6565b91508190509392505050565b7f203c200000000000000000000000000000000000000000000000000000000000815250565b5f617cdc82856176d6565b9150617ce782617cab565b600382019150617cf782846176d6565b91508190509392505050565b7f203e200000000000000000000000000000000000000000000000000000000000815250565b5f617d3482856176d6565b9150617d3f82617d03565b600382019150617d4f82846176d6565b91508190509392505050565b7f6d696e2800000000000000000000000000000000000000000000000000000000815250565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b5f617dd782617d5b565b600482019150617de782856176d6565b9150617df282617d81565b600282019150617e0282846176d6565b9150617e0d82617da7565b6001820191508190509392505050565b7f6d61782800000000000000000000000000000000000000000000000000000000815250565b5f617e4d82617e1d565b600482019150617e5d82856176d6565b9150617e6882617d81565b600282019150617e7882846176d6565b9150617e8382617da7565b6001820191508190509392505050565b7f203d3d2000000000000000000000000000000000000000000000000000000000815250565b5f617ec482856176d6565b9150617ecf82617e93565b600482019150617edf82846176d6565b91508190509392505050565b7f20213d2000000000000000000000000000000000000000000000000000000000815250565b5f617f1c82856176d6565b9150617f2782617eeb565b600482019150617f3782846176d6565b91508190509392505050565b7f4648452e61734500000000000000000000000000000000000000000000000000815250565b5f617f7382617f43565b600782019150617f8382846176d6565b915081905092915050565b7f2800000000000000000000000000000000000000000000000000000000000000815250565b5f617fbf82856176d6565b9150617fca82617f8e565b600182019150617fda82846176d6565b9150617fe582617da7565b6001820191508190509392505050565b7f203f200000000000000000000000000000000000000000000000000000000000815250565b7f203a200000000000000000000000000000000000000000000000000000000000815250565b5f61804c82866176d6565b915061805782617ff5565b60038201915061806782856176d6565b91506180728261801b565b60038201915061808282846176d6565b9150819050949350505050565b7f2e2e000000000000000000000000000000000000000000000000000000000000815250565b7f295b000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f61810c82876176d6565b915061811782617f8e565b60018201915061812782866176d6565b91506181328261808f565b60028201915061814282856176d6565b915061814d826180b5565b60028201915061815d82846176d6565b9150618168826180db565b60018201915081905095945050505050565b7f20203d3e20200000000000000000000000000000000000000000000000000000815250565b5f6181ab82886176d6565b91506181b782876176d6565b91506181c382866176d6565b91506181cf82856176d6565b91506181da8261817a565b6006820191506181ea82846176d6565b91508190509695505050505050565b5f61820482846176d6565b915081905092915050565b61821881616a7b565b82525050565b5f6020820190506182315f83018461820f565b92915050565b5f61824182616011565b915061824c83616011565b925082820261825a81616011565b9150828204841483151761827157618270616d1f565b5b5092915050565b5f61828282616011565b91505f820361829457618293616d1f565b5b600182039050919050565b5f6040820190506182b25f83018561635f565b6182bf602083018461635f565b9392505050565b5f6080820190506182d95f83018761820f565b6182e66020830186617827565b6182f3604083018561820f565b618300606083018461820f565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea264697066735822122071ac1303d0c1324d889b8a884aa303077229a93e54ec681287901cda33b6681d64736f6c634300081e0033"
1025
+ deployedBytecode: "0x608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063642b3f191161010d578063a307d21d116100a0578063de2873591161006f578063de287359146105bd578063e68d826f146105db578063f6bc7f3f146105f9578063f9120af614610629576101ee565b8063a307d21d14610525578063ae79f04a14610541578063c4d66de814610571578063d521ed4b1461058d576101ee565b80638b2b9c23116100dc5780638b2b9c23146104b55780638d9c9c92146104d15780638db39c8d146104ed57806392bd6c9514610509576101ee565b8063642b3f191461043157806365d0509c1461044d5780637e5cf5191461046957806381ba098614610499576101ee565b806327f9c762116101855780634bc98263116101545780634bc98263146103ad578063591363c7146103c95780635faa299a146103e55780635fb0bf9114610415576101ee565b806327f9c7621461031257806334ef1e5a14610342578063392e53cd1461035e578063458693c91461037c576101ee565b80631d031931116101c15780631d0319311461028a578063245a7bfc146102ba57806326594a0c146102d8578063267c4ae4146102f4576101ee565b806308289827146101f257806315a486fe1461020e5780631888debd1461022a5780631c76642b1461025a575b5f5ffd5b61020c6004803603810190610207919061609e565b610645565b005b610228600480360381019061022391906160dc565b6106f8565b005b610244600480360381019061023f91906162c3565b610706565b604051610251919061636e565b60405180910390f35b610274600480360381019061026f9190616387565b6108aa565b604051610281919061636e565b60405180910390f35b6102a4600480360381019061029f9190616387565b6108bf565b6040516102b191906163cc565b60405180910390f35b6102c26108dc565b6040516102cf91906163f4565b60405180910390f35b6102f260048036038101906102ed9190616443565b610902565b005b6102fc6109de565b60405161030991906163cc565b60405180910390f35b61032c600480360381019061032791906165ca565b6109e6565b604051610339919061636e565b60405180910390f35b61035c60048036038101906103579190616387565b610c20565b005b610366610cfa565b60405161037391906163cc565b60405180910390f35b61039660048036038101906103919190616387565b610d10565b6040516103a4929190616624565b60405180910390f35b6103c760048036038101906103c291906166e9565b610d95565b005b6103e360048036038101906103de9190616771565b610e67565b005b6103ff60048036038101906103fa919061609e565b610f99565b60405161040c91906163cc565b60405180910390f35b61042f600480360381019061042a9190616771565b611055565b005b61044b600480360381019061044691906167c6565b611187565b005b6104676004803603810190610462919061609e565b6111a2565b005b610483600480360381019061047e91906167f1565b6112ee565b60405161049091906168bd565b60405180910390f35b6104b360048036038101906104ae9190616936565b611424565b005b6104cf60048036038101906104ca91906169a7565b611532565b005b6104eb60048036038101906104e6919061609e565b611542565b005b61050760048036038101906105029190616a13565b61161f565b005b610523600480360381019061051e9190616a13565b6116f3565b005b61053f600480360381019061053a9190616387565b61182c565b005b61055b60048036038101906105569190616bad565b611974565b60405161056891906163cc565b60405180910390f35b61058b60048036038101906105869190616a13565b611a18565b005b6105a760048036038101906105a29190616c07565b611ab6565b6040516105b491906168bd565b60405180910390f35b6105c5611bcb565b6040516105d29190616ca9565b60405180910390f35b6105e3611bf0565b6040516105f091906163cc565b60405180910390f35b610613600480360381019061060e9190616387565b611c01565b604051610620919061636e565b60405180910390f35b610643600480360381019061063e9190616a13565b611c5d565b005b61064e82611d97565b600160055f8481526020019081526020015f205f6101000a81548160ff02191690831515021790555061068082611e86565b60045f8481526020019081526020015f20819055505f6001600a426106a59190616cef565b6106af9190616d4c565b905080426106bd9190616d7f565b60065f8581526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6107028282611f0e565b5050565b5f601b601f81111561071b5761071a616dba565b5b84601f81111561072e5761072d616dba565b5b03610765576040517f98e08ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825184516107749190616d4c565b905060038111156107c95761078885611f2c565b8160036040517f2b0399d50000000000000000000000000000000000000000000000000000000081526004016107c093929190616e20565b60405180910390fd5b6107d38486612ac1565b5f6107de8585612d3b565b90505f6107ec878787612e7d565b90505f6107fb8983858b612ee8565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b815260040161085b93929190616e5c565b5f604051808303815f87803b158015610872575f5ffd5b505af1158015610884573d5f5f3e3d5ffd5b5050505061089b816108958a611f2c565b8561306d565b80945050505050949350505050565b6001602052805f5260405f205f915090505481565b6002602052805f5260405f205f915054906101000a900460ff1681565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099357336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161098a91906163f4565b60405180910390fd5b81600760046101000a81548163ffffffff021916908360030b63ffffffff1602179055508060075f6101000a81548163ffffffff021916908360030b63ffffffff1602179055505050565b5f6001905090565b5f5f836020015160ff1690505f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7457610a4f816132c2565b610ab15780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610aa893929190616ea0565b60405180910390fd5b5f610abc8585613303565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b72578060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb5000000000000000000000000000000000000000000000000000000008152600401610b69929190616ed5565b60405180910390fd5b505b5f610b88855f01518387604001515f6133c7565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610be893929190616e5c565b5f604051808303815f87803b158015610bff575f5ffd5b505af1158015610c11573d5f5f3e3d5ffd5b50505050809250505092915050565b610c2981613420565b610cf75760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663846cd43382336040518363ffffffff1660e01b8152600401610c89929190616efc565b5f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b50505050610cf66040518060400160405280600f81526020017f4648452e616c6c6f77476c6f62616c00000000000000000000000000000000008152508233611532565b5b50565b5f600360149054906101000a900460ff16905090565b5f5f60055f8481526020019081526020015f205f9054906101000a900460ff16610d3f575f5f91509150610d90565b60065f8481526020019081526020015f205f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421015610d80575f5f91509150610d90565b610d8983611e86565b6001915091505b915091565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e2757336040517fa974a0fe000000000000000000000000000000000000000000000000000000008152600401610e1e91906163f4565b60405180910390fd5b7f66d3f531abdf188fde59b6d2b282dc7c725ef2bb1c6c93954054721a13c1a3fa838383604051610e5a93929190616f23565b60405180910390a1505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef857336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610eef91906163f4565b60405180910390fd5b600760049054906101000a900460030b60030b8160030b1215610f735780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610f6a93929190616ea0565b60405180910390fd5b8060075f6101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b5f610fa383613420565b15610fb1576001905061104f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a84846040518363ffffffff1660e01b815260040161100d929190616efc565b602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190616f7a565b90505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e657336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016110dd91906163f4565b60405180910390fd5b60075f9054906101000a900460030b60030b8160030b13156111605780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161115793929190616ea0565b60405180910390fd5b80600760046101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b805f5f6101000a81548160ff02191690831515021790555050565b6111ab82613420565b6112ea5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a3a7fb8383336040518463ffffffff1660e01b815260040161120d93929190616e5c565b5f604051808303815f87803b158015611224575f5ffd5b505af1158015611236573d5f5f3e3d5ffd5b505050506112e93373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146112ab576040518060400160405280600981526020017f4648452e616c6c6f7700000000000000000000000000000000000000000000008152506112e2565b6040518060400160405280600d81526020017f4648452e616c6c6f7754686973000000000000000000000000000000000000008152505b8383611532565b5b5050565b60605f849050805183856113029190616d4c565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90616fef565b60405180910390fd5b5f8367ffffffffffffffff81111561135e5761135d616187565b5b6040519080825280601f01601f1916602001820160405280156113905781602001600182028036833780820191505090505b5090505f5f90505b84811015611417578281876113ad9190616d4c565b815181106113be576113bd61700d565b5b602001015160f81c60f81b8282815181106113dc576113db61700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611398565b5080925050509392505050565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b657336040517fa974a0fe0000000000000000000000000000000000000000000000000000000081526004016114ad91906163f4565b60405180910390fd5b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b61153d83838361345d565b505050565b61154b82613420565b61161b5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228383336040518463ffffffff1660e01b81526004016115ad93929190616e5c565b5f604051808303815f87803b1580156115c4575f5ffd5b505af11580156115d6573d5f5f3e3d5ffd5b5050505061161a6040518060400160405280601281526020017f4648452e616c6c6f775472616e7369656e7400000000000000000000000000008152508383611532565b5b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b057336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016116a791906163f4565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178457336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161177b91906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61183581613420565b611971575f600167ffffffffffffffff81111561185557611854616187565b5b6040519080825280602002602001820160405280156118835781602001602082028036833780820191505090505b50905081815f8151811061189a5761189961700d565b5b60200260200101818152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c3839ba82336040518363ffffffff1660e01b81526004016119029291906170f1565b5f604051808303815f87803b158015611919575f5ffd5b505af115801561192b573d5f5f3e3d5ffd5b5050505061196f6040518060400160405280601681526020017f4648452e616c6c6f77466f7244656372797074696f6e000000000000000000008152508333611532565b505b50565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a84846040518363ffffffff1660e01b81526004016119d1929190617252565b602060405180830381865afa1580156119ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a109190616f7a565b905092915050565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff0219169083151502179055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8290505f815103611adb5760405180602001604052805f815250915050611bc6565b5f60018251611aea9190617280565b67ffffffffffffffff811115611b0357611b02616187565b5b6040519080825280601f01601f191660200182016040528015611b355781602001600182028036833780820191505090505b5090505f600190505b8251811015611bbf57828181518110611b5a57611b5961700d565b5b602001015160f81c60f81b82600183611b739190617280565b81518110611b8457611b8361700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611b3e565b5080925050505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900460ff1681565b5f5f5f611c0d84610d10565b9150915080611c5357836040517f70cf6554000000000000000000000000000000000000000000000000000000008152600401611c4a919061636e565b60405180910390fd5b8192505050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cee57336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611ce591906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d53576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611da081613420565b611e835760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a82336040518363ffffffff1660e01b8152600401611e00929190616efc565b602060405180830381865afa158015611e1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3f9190616f7a565b611e825780336040517f4d13139e000000000000000000000000000000000000000000000000000000008152600401611e79929190616efc565b60405180910390fd5b5b50565b5f60025f8381526020019081526020015f205f9054906101000a900460ff16611ee657816040517f850a796d000000000000000000000000000000000000000000000000000000008152600401611edd919061636e565b60405180910390fd5b5f611ef08361354b565b90508060015f8581526020019081526020015f205416915050919050565b5f611f188361354b565b9050611f27838284165f613568565b505050565b60606002601f811115611f4257611f41616dba565b5b82601f811115611f5557611f54616dba565b5b03611f97576040518060400160405280600481526020017f63617374000000000000000000000000000000000000000000000000000000008152509050612abc565b6003601f811115611fab57611faa616dba565b5b82601f811115611fbe57611fbd616dba565b5b03612000576040518060400160405280600a81526020017f7365616c4f7574707574000000000000000000000000000000000000000000008152509050612abc565b6004601f81111561201457612013616dba565b5b82601f81111561202757612026616dba565b5b03612069576040518060400160405280600681526020017f73656c65637400000000000000000000000000000000000000000000000000008152509050612abc565b6006601f81111561207d5761207c616dba565b5b82601f8111156120905761208f616dba565b5b036120d2576040518060400160405280600781526020017f64656372797074000000000000000000000000000000000000000000000000008152509050612abc565b6007601f8111156120e6576120e5616dba565b5b82601f8111156120f9576120f8616dba565b5b0361213b576040518060400160405280600381526020017f73756200000000000000000000000000000000000000000000000000000000008152509050612abc565b6008601f81111561214f5761214e616dba565b5b82601f81111561216257612161616dba565b5b036121a4576040518060400160405280600381526020017f61646400000000000000000000000000000000000000000000000000000000008152509050612abc565b6009601f8111156121b8576121b7616dba565b5b82601f8111156121cb576121ca616dba565b5b0361220d576040518060400160405280600381526020017f786f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b600a601f81111561222157612220616dba565b5b82601f81111561223457612233616dba565b5b03612276576040518060400160405280600381526020017f616e6400000000000000000000000000000000000000000000000000000000008152509050612abc565b600b601f81111561228a57612289616dba565b5b82601f81111561229d5761229c616dba565b5b036122df576040518060400160405280600281526020017f6f720000000000000000000000000000000000000000000000000000000000008152509050612abc565b600c601f8111156122f3576122f2616dba565b5b82601f81111561230657612305616dba565b5b03612348576040518060400160405280600381526020017f6e6f7400000000000000000000000000000000000000000000000000000000008152509050612abc565b600d601f81111561235c5761235b616dba565b5b82601f81111561236f5761236e616dba565b5b036123b1576040518060400160405280600381526020017f64697600000000000000000000000000000000000000000000000000000000008152509050612abc565b600e601f8111156123c5576123c4616dba565b5b82601f8111156123d8576123d7616dba565b5b0361241a576040518060400160405280600381526020017f72656d00000000000000000000000000000000000000000000000000000000008152509050612abc565b600f601f81111561242e5761242d616dba565b5b82601f81111561244157612440616dba565b5b03612483576040518060400160405280600381526020017f6d756c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6010601f81111561249757612496616dba565b5b82601f8111156124aa576124a9616dba565b5b036124ec576040518060400160405280600381526020017f73686c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6011601f811115612500576124ff616dba565b5b82601f81111561251357612512616dba565b5b03612555576040518060400160405280600381526020017f73687200000000000000000000000000000000000000000000000000000000008152509050612abc565b6012601f81111561256957612568616dba565b5b82601f81111561257c5761257b616dba565b5b036125be576040518060400160405280600381526020017f67746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6013601f8111156125d2576125d1616dba565b5b82601f8111156125e5576125e4616dba565b5b03612627576040518060400160405280600381526020017f6c746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6014601f81111561263b5761263a616dba565b5b82601f81111561264e5761264d616dba565b5b03612690576040518060400160405280600281526020017f6c740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6015601f8111156126a4576126a3616dba565b5b82601f8111156126b7576126b6616dba565b5b036126f9576040518060400160405280600281526020017f67740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6016601f81111561270d5761270c616dba565b5b82601f8111156127205761271f616dba565b5b03612762576040518060400160405280600381526020017f6d696e00000000000000000000000000000000000000000000000000000000008152509050612abc565b6017601f81111561277657612775616dba565b5b82601f81111561278957612788616dba565b5b036127cb576040518060400160405280600381526020017f6d617800000000000000000000000000000000000000000000000000000000008152509050612abc565b6018601f8111156127df576127de616dba565b5b82601f8111156127f2576127f1616dba565b5b03612834576040518060400160405280600281526020017f65710000000000000000000000000000000000000000000000000000000000008152509050612abc565b6019601f81111561284857612847616dba565b5b82601f81111561285b5761285a616dba565b5b0361289d576040518060400160405280600281526020017f6e650000000000000000000000000000000000000000000000000000000000008152509050612abc565b601a601f8111156128b1576128b0616dba565b5b82601f8111156128c4576128c3616dba565b5b03612906576040518060400160405280600e81526020017f7472697669616c456e63727970740000000000000000000000000000000000008152509050612abc565b601b601f81111561291a57612919616dba565b5b82601f81111561292d5761292c616dba565b5b0361296f576040518060400160405280600681526020017f72616e646f6d00000000000000000000000000000000000000000000000000008152509050612abc565b601c601f81111561298357612982616dba565b5b82601f81111561299657612995616dba565b5b036129d8576040518060400160405280600381526020017f726f6c00000000000000000000000000000000000000000000000000000000008152509050612abc565b601d601f8111156129ec576129eb616dba565b5b82601f8111156129ff576129fe616dba565b5b03612a41576040518060400160405280600381526020017f726f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b601e601f811115612a5557612a54616dba565b5b82601f811115612a6857612a67616dba565b5b03612aaa576040518060400160405280600681526020017f73717561726500000000000000000000000000000000000000000000000000008152509050612abc565b60405180602001604052805f81525090505b919050565b5f612acb82611f2c565b90505f835103612b2557612ade82613609565b612b1f57806040517fb31612aa000000000000000000000000000000000000000000000000000000008152600401612b1691906168bd565b60405180910390fd5b50612d37565b6004601f811115612b3957612b38616dba565b5b82601f811115612b4c57612b4b616dba565b5b03612b5f57612b5a83613668565b612c8f565b612b68826137a9565b15612bbe576001835114612bb95780835160016040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612bb0939291906172ec565b60405180910390fd5b612c8e565b6002835114612c0a5780835160026040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612c0193929190617361565b60405180910390fd5b5f612c4b84600181518110612c2257612c2161700d565b5b6020026020010151855f81518110612c3d57612c3c61700d565b5b602002602001015118613837565b14612c8d57806040517f52b50ae1000000000000000000000000000000000000000000000000000000008152600401612c8491906168bd565b60405180910390fd5b5b5b5f612cb3845f81518110612ca657612ca561700d565b5b6020026020010151613855565b9050612cbe816132c2565b612d205780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401612d1793929190616ea0565b60405180910390fd5b612d2984613865565b612d348383866138b3565b50505b5050565b60605f82518451612d4c9190616d4c565b67ffffffffffffffff811115612d6557612d64616187565b5b604051908082528060200260200182016040528015612d935781602001602082028036833780820191505090505b5090505f5f90505b84518160ff161015612dfa57848160ff1681518110612dbd57612dbc61700d565b5b6020026020010151828260ff1681518110612ddb57612dda61700d565b5b6020026020010181815250508080612df29061739d565b915050612d9b565b5b83518551612e099190616d4c565b8160ff161015612e72578385518260ff16612e249190617280565b81518110612e3557612e3461700d565b5b6020026020010151828260ff1681518110612e5357612e5261700d565b5b6020026020010181815250508080612e6a9061739d565b915050612dfb565b819250505092915050565b5f612e8784613609565b15612ebb578160018351612e9b9190617280565b81518110612eac57612eab61700d565b5b60200260200101519050612ee1565b612ede835f81518110612ed157612ed061700d565b5b6020026020010151613855565b90505b9392505050565b5f60605f601a601f811115612f0057612eff616dba565b5b84601f811115612f1357612f12616dba565b5b1490505f5f90505b85518160ff161015612f835782612f4e878360ff1681518110612f4157612f4061700d565b5b6020026020010151613a21565b604051602001612f5f9291906173ff565b60405160208183030381529060405292508080612f7b9061739d565b915050612f1b565b50601e601f811115612f9857612f97616dba565b5b84601f811115612fab57612faa616dba565b5b03612ffb57600f935081612fd8865f81518110612fcb57612fca61700d565b5b6020026020010151613a21565b604051602001612fe99291906173ff565b60405160208183030381529060405291505b5f84601f81111561300f5761300e616dba565b5b60f81b9050828160405160200161302792919061746d565b60405160208183030381529060405292505f838051906020012090505f61305b825f1c8a6130558a8e613a83565b876133c7565b90508095505050505050949350505050565b6001815114806130845750613083826002613bae565b5b1561310c577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106130bf576130be61700d565b5b60200260200101515f5f6040516130da9594939291906174cd565b60405180910390a16131078383835f815181106130fa576130f961700d565b5b6020026020010151613bc9565b6132bd565b60028151036131cf577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f8151811061314b5761314a61700d565b5b6020026020010151846001815181106131675761316661700d565b5b60200260200101515f604051613181959493929190617525565b60405180910390a16131ca8383835f815181106131a1576131a061700d565b5b6020026020010151846001815181106131bd576131bc61700d565b5b6020026020010151613e30565b6132bc565b7fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106132055761320461700d565b5b6020026020010151846001815181106132215761322061700d565b5b60200260200101518560028151811061323d5761323c61700d565b5b602002602001015160405161325695949392919061757d565b60405180910390a16132bb8383835f815181106132765761327561700d565b5b6020026020010151846001815181106132925761329161700d565b5b6020026020010151856002815181106132ae576132ad61700d565b5b6020026020010151614c5c565b5b5b505050565b5f600760049054906101000a900460030b60030b8260030b121580156132fc575060075f9054906101000a900460030b60030b8260030b13155b9050919050565b5f5f835f015184604001518560200151854660405160200161332995949392919061766e565b60405160208183030381529060405290505f818051906020012090505f613354828760600151614e03565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036133bb576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80935050505092915050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133f89190617280565b851690505f8460ff16600861340d8587614e2d565b901b179050808217915050949350505050565b5f600160ff8016901c60ff1660ff801661343a9190617280565b600160ff8016901c60ff1660ff80166134539190617280565b8316149050919050565b5f5f9054906101000a900460ff1615613546576135456040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506134d58560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525061351486614fb3565b61351d8661514f565b60405160200161353195949392919061772c565b60405160208183030381529060405261517c565b5b505050565b5f5f61355683615215565b90506001816001901b03915050919050565b8160015f8581526020019081526020015f2081905550600160025f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055508015613604576136036040518060400160405280600381526020017f736574000000000000000000000000000000000000000000000000000000000081525060405180602001604052805f8152506135fe86614fb3565b6152ec565b5b505050565b5f601b601f81111561361e5761361d616dba565b5b82601f81111561363157613630616dba565b5b14806136615750601a601f81111561364c5761364b616dba565b5b82601f81111561365f5761365e616dba565b5b145b9050919050565b60038151146136b257805160036040517f9a84351c0000000000000000000000000000000000000000000000000000000081526004016136a99291906177cf565b60405180910390fd5b5f6136f4826002815181106136ca576136c961700d565b5b6020026020010151836001815181106136e6576136e561700d565b5b602002602001015118613837565b14613734576040517f52b50ae100000000000000000000000000000000000000000000000000000000815260040161372b90617809565b60405180910390fd5b5f613758825f8151811061374b5761374a61700d565b5b60200260200101516153ca565b90505f5f821860ff16146137a557805f6040517f884a0e9d00000000000000000000000000000000000000000000000000000000815260040161379c929190617836565b60405180910390fd5b5050565b5f600c601f8111156137be576137bd616dba565b5b82601f8111156137d1576137d0616dba565b5b14806138015750601e601f8111156137ec576137eb616dba565b5b82601f8111156137ff576137fe616dba565b5b145b8061383057506002601f81111561381b5761381a616dba565b5b82601f81111561382e5761382d616dba565b5b145b9050919050565b5f8160ff80166008600160ff8016901c60ff16901b17169050919050565b5f60ff801682165f0b9050919050565b5f5f90505b81518160ff1610156138af5761389c828260ff168151811061388f5761388e61700d565b5b6020026020010151611d97565b80806138a79061739d565b91505061386a565b5050565b6138bc836153e6565b613a1c576138c9836154a3565b1561396f575f5f90505b81518160ff161015613969575f613906838360ff16815181106138f9576138f861700d565b5b60200260200101516153ca565b90505f6007821860ff1603613955578360076040517f91b4b37800000000000000000000000000000000000000000000000000000000815260040161394c92919061785d565b60405180910390fd5b5080806139619061739d565b9150506138d3565b50613a1b565b5f5f90505b81518160ff161015613a19575f6139a7838360ff168151811061399a5761399961700d565b5b60200260200101516153ca565b90505f6007821860ff1614806139c157505f5f821860ff16145b15613a055783816040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016139fc92919061785d565b60405180910390fd5b508080613a119061739d565b915050613974565b505b5b505050565b60605f602067ffffffffffffffff811115613a3f57613a3e616187565b5b6040519080825280601f01601f191660200182016040528015613a715781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f6013601f811115613a9857613a97616dba565b5b83601f811115613aab57613aaa616dba565b5b1480613adb57506014601f811115613ac657613ac5616dba565b5b83601f811115613ad957613ad8616dba565b5b145b80613b0a57506012601f811115613af557613af4616dba565b5b83601f811115613b0857613b07616dba565b5b145b80613b3957506015601f811115613b2457613b23616dba565b5b83601f811115613b3757613b36616dba565b5b145b80613b6857506018601f811115613b5357613b52616dba565b5b83601f811115613b6657613b65616dba565b5b145b80613b9757506019601f811115613b8257613b81616dba565b5b83601f811115613b9557613b94616dba565b5b145b15613ba4575f9050613ba8565b8190505b92915050565b5f613bc183613bbc84611f2c565b615560565b905092915050565b613bd482601b613bae565b15613c4d57613bf283600143613bea9190617280565b405f1c611f0e565b613c486040518060400160405280600a81526020017f4648452e72616e646f6d0000000000000000000000000000000000000000000081525060405180602001604052805f815250613c4386614fb3565b6152ec565b613e2b565b613c58826002613bae565b15613cc457613c6f83613c6a83611e86565b611f0e565b613cbf6040518060400160405280600881526020017f4648452e63617374000000000000000000000000000000000000000000000000815250613cb183614fb3565b613cba86614fb3565b6152ec565b613e2b565b613ccf82600c613bae565b15613d44575f6001613ce083611e86565b149050613cee8482156155b8565b613d3e6040518060400160405280600781526020017f4648452e6e6f7400000000000000000000000000000000000000000000000000815250613d3084614fb3565b613d3987614fb3565b6152ec565b50613e2b565b613d4f82601e613bae565b15613dee57613d7083613d6183611e86565b613d6a84611e86565b02611f0e565b613de96040518060400160405280600a81526020017f4648452e73717561726500000000000000000000000000000000000000000000815250613db283614fb3565b613dbb84614fb3565b604051602001613dcc9291906178b1565b604051602081830303815290604052613de486614fb3565b6152ec565b613e2b565b816040517fd952ce7c000000000000000000000000000000000000000000000000000000008152600401613e2291906168bd565b60405180910390fd5b505050565b613e3b836007613bae565b15613eda57613e5c84613e4d83611e86565b613e5685611e86565b03611f0e565b613ed56040518060400160405280600781526020017f4648452e73756200000000000000000000000000000000000000000000000000815250613e9e84614fb3565b613ea784614fb3565b604051602001613eb8929190617909565b604051602081830303815290604052613ed087614fb3565b6152ec565b614c56565b613ee5836008613bae565b15613f8457613f0684613ef783611e86565b613f0085611e86565b01611f0e565b613f7f6040518060400160405280600781526020017f4648452e61646400000000000000000000000000000000000000000000000000815250613f4884614fb3565b613f5184614fb3565b604051602001613f62929190617961565b604051602081830303815290604052613f7a87614fb3565b6152ec565b614c56565b613f8f836009613bae565b1561402e57613fb084613fa183611e86565b613faa85611e86565b18611f0e565b6140296040518060400160405280600781526020017f4648452e786f7200000000000000000000000000000000000000000000000000815250613ff284614fb3565b613ffb84614fb3565b60405160200161400c9291906179b9565b60405160208183030381529060405261402487614fb3565b6152ec565b614c56565b61403983600a613bae565b156140d85761405a8461404b83611e86565b61405485611e86565b16611f0e565b6140d36040518060400160405280600781526020017f4648452e616e640000000000000000000000000000000000000000000000000081525061409c84614fb3565b6140a584614fb3565b6040516020016140b6929190617a11565b6040516020818303038152906040526140ce87614fb3565b6152ec565b614c56565b6140e383600b613bae565b1561418257614104846140f583611e86565b6140fe85611e86565b17611f0e565b61417d6040518060400160405280600681526020017f4648452e6f72000000000000000000000000000000000000000000000000000081525061414684614fb3565b61414f84614fb3565b604051602001614160929190617a69565b60405160208183030381529060405261417887614fb3565b6152ec565b614c56565b61418d83600d613bae565b15614276575f61419c82611e86565b90505f81036141d4576141cf857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f0e565b6141f7565b6141f685826141e286611e86565b816141f0576141ef616cc2565b5b04611f0e565b5b6142706040518060400160405280600781526020017f4648452e6469760000000000000000000000000000000000000000000000000081525061423985614fb3565b61424285614fb3565b604051602001614253929190617ac1565b60405160208183030381529060405261426b88614fb3565b6152ec565b50614c56565b61428183600e613bae565b1561432e576142b08461429383611e86565b61429c85611e86565b816142aa576142a9616cc2565b5b06611f0e565b6143296040518060400160405280600781526020017f4648452e72656d000000000000000000000000000000000000000000000000008152506142f284614fb3565b6142fb84614fb3565b60405160200161430c929190617b19565b60405160208183030381529060405261432487614fb3565b6152ec565b614c56565b61433983600f613bae565b156143d85761435a8461434b83611e86565b61435485611e86565b02611f0e565b6143d36040518060400160405280600781526020017f4648452e6d756c0000000000000000000000000000000000000000000000000081525061439c84614fb3565b6143a584614fb3565b6040516020016143b69291906178b1565b6040516020818303038152906040526143ce87614fb3565b6152ec565b614c56565b6143e3836010613bae565b1561448357614405846143f583611e86565b6143fe85611e86565b901b611f0e565b61447e6040518060400160405280600781526020017f4648452e73686c0000000000000000000000000000000000000000000000000081525061444784614fb3565b61445084614fb3565b604051602001614461929190617b71565b60405160208183030381529060405261447987614fb3565b6152ec565b614c56565b61448e836011613bae565b1561452e576144b0846144a083611e86565b6144a985611e86565b901c611f0e565b6145296040518060400160405280600781526020017f4648452e736872000000000000000000000000000000000000000000000000008152506144f284614fb3565b6144fb84614fb3565b60405160200161450c929190617bc9565b60405160208183030381529060405261452487614fb3565b6152ec565b614c56565b614539836012613bae565b156145d95761455b8461454b83611e86565b61455485611e86565b10156155b8565b6145d46040518060400160405280600781526020017f4648452e6774650000000000000000000000000000000000000000000000000081525061459d84614fb3565b6145a684614fb3565b6040516020016145b7929190617c21565b6040516020818303038152906040526145cf87614fb3565b6152ec565b614c56565b6145e4836013613bae565b1561468457614606846145f683611e86565b6145ff85611e86565b11156155b8565b61467f6040518060400160405280600781526020017f4648452e6c74650000000000000000000000000000000000000000000000000081525061464884614fb3565b61465184614fb3565b604051602001614662929190617c79565b60405160208183030381529060405261467a87614fb3565b6152ec565b614c56565b61468f836014613bae565b1561472e576146b0846146a183611e86565b6146aa85611e86565b106155b8565b6147296040518060400160405280600681526020017f4648452e6c7400000000000000000000000000000000000000000000000000008152506146f284614fb3565b6146fb84614fb3565b60405160200161470c929190617cd1565b60405160208183030381529060405261472487614fb3565b6152ec565b614c56565b614739836015613bae565b156147d85761475a8461474b83611e86565b61475485611e86565b116155b8565b6147d36040518060400160405280600681526020017f4648452e6774000000000000000000000000000000000000000000000000000081525061479c84614fb3565b6147a584614fb3565b6040516020016147b6929190617d29565b6040516020818303038152906040526147ce87614fb3565b6152ec565b614c56565b6147e3836016613bae565b156148a3575f6147f282611e86565b6147fb84611e86565b1061480e5761480982611e86565b614818565b61481783611e86565b5b90506148248582611f0e565b61489d6040518060400160405280600781526020017f4648452e6d696e0000000000000000000000000000000000000000000000000081525061486685614fb3565b61486f85614fb3565b604051602001614880929190617dcd565b60405160208183030381529060405261489888614fb3565b6152ec565b50614c56565b6148ae836017613bae565b1561496e575f6148bd82611e86565b6148c684611e86565b116148d9576148d482611e86565b6148e3565b6148e283611e86565b5b90506148ef8582611f0e565b6149686040518060400160405280600781526020017f4648452e6d61780000000000000000000000000000000000000000000000000081525061493185614fb3565b61493a85614fb3565b60405160200161494b929190617e43565b60405160208183030381529060405261496388614fb3565b6152ec565b50614c56565b614979836018613bae565b15614a185761499a8461498b83611e86565b61499485611e86565b146155b8565b614a136040518060400160405280600681526020017f4648452e657100000000000000000000000000000000000000000000000000008152506149dc84614fb3565b6149e584614fb3565b6040516020016149f6929190617eb9565b604051602081830303815290604052614a0e87614fb3565b6152ec565b614c56565b614a23836019613bae565b15614ac357614a4584614a3583611e86565b614a3e85611e86565b14156155b8565b614abe6040518060400160405280600681526020017f4648452e6e650000000000000000000000000000000000000000000000000000815250614a8784614fb3565b614a9084614fb3565b604051602001614aa1929190617f11565b604051602081830303815290604052614ab987614fb3565b6152ec565b614c56565b614ace83601c613bae565b15614b6e57614af084614ae083611e86565b614ae985611e86565b901b611f0e565b614b696040518060400160405280600781526020017f4648452e726f6c00000000000000000000000000000000000000000000000000815250614b3284614fb3565b614b3b84614fb3565b604051602001614b4c929190617b71565b604051602081830303815290604052614b6487614fb3565b6152ec565b614c56565b614b7983601d613bae565b15614c1957614b9b84614b8b83611e86565b614b9485611e86565b901c611f0e565b614c146040518060400160405280600781526020017f4648452e726f7200000000000000000000000000000000000000000000000000815250614bdd84614fb3565b614be684614fb3565b604051602001614bf7929190617bc9565b604051602081830303815290604052614c0f87614fb3565b6152ec565b614c56565b826040517fcef60885000000000000000000000000000000000000000000000000000000008152600401614c4d91906168bd565b60405180910390fd5b50505050565b614c6784601a613bae565b15614cf657614c768584611f0e565b614cf1614c8a614c85876155d6565b611ab6565b604051602001614c9a9190617f69565b604051602081830303815290604052614cba614cb5886155d6565b611ab6565b614cc386615882565b604051602001614cd4929190617fb4565b604051602081830303815290604052614cec88614fb3565b6152ec565b614dfc565b614d01846004613bae565b15614dbf57614d37856001614d1586611e86565b14614d2857614d2383611e86565b614d32565b614d3184611e86565b5b611f0e565b614dba6040518060400160405280600a81526020017f4648452e73656c65637400000000000000000000000000000000000000000000815250614d7985614fb3565b614d8285614fb3565b614d8b85614fb3565b604051602001614d9d93929190618041565b604051602081830303815290604052614db588614fb3565b6152ec565b614dfc565b836040517f5e45fa01000000000000000000000000000000000000000000000000000000008152600401614df391906168bd565b60405180910390fd5b5050505050565b5f5f5f5f614e11868661594c565b925092509250614e2182826159a1565b82935050505092915050565b5f600160ff8016901c60ff168260ff161683614e49575f614e63565b600160ff8016901c60ff1660ff8016614e629190617280565b5b17905092915050565b60605f84905083815110614e835784915050614fac565b5f8467ffffffffffffffff811115614e9e57614e9d616187565b5b6040519080825280601f01601f191660200182016040528015614ed05781602001600182028036833780820191505090505b5090505f5f90505b8251811015614f4d57828181518110614ef457614ef361700d565b5b602001015160f81c60f81b828281518110614f1257614f1161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614ed8565b5b85811015614fa55784828281518110614f6a57614f6961700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614f4e565b8193505050505b9392505050565b60605f614fbf83615882565b90505f8151905060068111614fd857819250505061514a565b5f60025f8681526020019081526020015f205f9054906101000a900460ff1690505f60015f8781526020019081526020015f205490505f61501887615b03565b90505f8161502e5761502983615882565b6150a9565b60018314615071576040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152506150a8565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b5b90505f6150b5896155d6565b6150c1885f60046112ee565b6150d98960048a6150d29190617280565b60046112ee565b87615119576040518060400160405280600581526020017f454d50545900000000000000000000000000000000000000000000000000000081525061511b565b845b60405160200161512e9493929190618101565b6040516020818303038152906040529050809750505050505050505b919050565b60606151758273ffffffffffffffffffffffffffffffffffffffff16601460ff16615b20565b9050919050565b6152128160405160240161519091906168bd565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615d5e565b50565b5f5f61522083615d78565b90505f60ff168160ff16036152395760089150506152e7565b600260ff168160ff16036152515760089150506152e7565b600360ff168160ff16036152695760109150506152e7565b600460ff168160ff16036152815760209150506152e7565b600560ff168160ff16036152995760409150506152e7565b600660ff168160ff16036152b15760809150506152e7565b600860ff168160ff16036152ca576101009150506152e7565b600760ff168160ff16036152e25760a09150506152e7565b5f9150505b919050565b5f5f9054906101000a900460ff16156153c5576153c46040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506153648560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525085856040516020016153b09594939291906181a0565b60405160208183030381529060405261517c565b5b505050565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f6004601f8111156153fb576153fa616dba565b5b82601f81111561540e5761540d616dba565b5b148061543e57506018601f81111561542957615428616dba565b5b82601f81111561543c5761543b616dba565b5b145b8061546d57506019601f81111561545857615457616dba565b5b82601f81111561546b5761546a616dba565b5b145b8061549c57506002601f81111561548757615486616dba565b5b82601f81111561549a57615499616dba565b5b145b9050919050565b5f6009601f8111156154b8576154b7616dba565b5b82601f8111156154cb576154ca616dba565b5b14806154fb5750600a601f8111156154e6576154e5616dba565b5b82601f8111156154f9576154f8616dba565b5b145b8061552a5750600b601f81111561551557615514616dba565b5b82601f81111561552857615527616dba565b5b145b806155595750600c601f81111561554457615543616dba565b5b82601f81111561555757615556616dba565b5b145b9050919050565b5f8160405160200161557291906181f9565b604051602081830303815290604052805190602001208360405160200161559991906181f9565b6040516020818303038152906040528051906020012014905092915050565b6155d282826155c7575f6155ca565b60015b60ff16611f0e565b5050565b60605f6155e283615d78565b90505f60ff168160ff160361562f576040518060400160405280600581526020017f65626f6f6c00000000000000000000000000000000000000000000000000000081525091505061587d565b600260ff168160ff160361567b576040518060400160405280600681526020017f6575696e7438000000000000000000000000000000000000000000000000000081525091505061587d565b600360ff168160ff16036156c7576040518060400160405280600781526020017f6575696e7431360000000000000000000000000000000000000000000000000081525091505061587d565b600460ff168160ff1603615713576040518060400160405280600781526020017f6575696e7433320000000000000000000000000000000000000000000000000081525091505061587d565b600560ff168160ff160361575f576040518060400160405280600781526020017f6575696e7436340000000000000000000000000000000000000000000000000081525091505061587d565b600660ff168160ff16036157ab576040518060400160405280600881526020017f6575696e7431323800000000000000000000000000000000000000000000000081525091505061587d565b600860ff168160ff16036157f7576040518060400160405280600881526020017f6575696e7432353600000000000000000000000000000000000000000000000081525091505061587d565b600760ff168160ff1603615843576040518060400160405280600881526020017f656164647265737300000000000000000000000000000000000000000000000081525091505061587d565b6040518060400160405280600781526020017f756e6b6e6f776e000000000000000000000000000000000000000000000000008152509150505b919050565b60605f600161589084615d94565b0190505f8167ffffffffffffffff8111156158ae576158ad616187565b5b6040519080825280601f01601f1916602001820160405280156158e05781602001600182028036833780820191505090505b5090505f82602083010190505b600115615941578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161593657615935616cc2565b5b0494505f85036158ed575b819350505050919050565b5f5f5f604184510361598c575f5f5f602087015192506040870151915060608701515f1a905061597e88828585615ee5565b95509550955050505061599a565b5f600285515f1b9250925092505b9250925092565b5f60038111156159b4576159b3616dba565b5b8260038111156159c7576159c6616dba565b5b0315615aff57600160038111156159e1576159e0616dba565b5b8260038111156159f4576159f3616dba565b5b03615a2b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115615a3f57615a3e616dba565b5b826003811115615a5257615a51616dba565b5b03615a9657805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401615a8d919061636e565b60405180910390fd5b600380811115615aa957615aa8616dba565b5b826003811115615abc57615abb616dba565b5b03615afe57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401615af5919061821e565b60405180910390fd5b5b5050565b5f5f615b0e83615d78565b90505f5f821860ff1614915050919050565b60605f8390505f6002846002615b369190618237565b615b409190616d4c565b67ffffffffffffffff811115615b5957615b58616187565b5b6040519080825280601f01601f191660200182016040528015615b8b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110615bc257615bc161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110615c2557615c2461700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001856002615c639190618237565b615c6d9190616d4c565b90505b6001811115615d0c577f3031323334353637383961626364656600000000000000000000000000000000600f841660108110615caf57615cae61700d565b5b1a60f81b828281518110615cc657615cc561700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c925080615d0590618278565b9050615c70565b505f8214615d535784846040517fe22e27eb000000000000000000000000000000000000000000000000000000008152600401615d4a92919061829f565b60405180910390fd5b809250505092915050565b615d7581615d6d615fcc615feb565b63ffffffff16565b50565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615df0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381615de657615de5616cc2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310615e2d576d04ee2d6d415b85acef81000000008381615e2357615e22616cc2565b5b0492506020810190505b662386f26fc100008310615e5c57662386f26fc100008381615e5257615e51616cc2565b5b0492506010810190505b6305f5e1008310615e85576305f5e1008381615e7b57615e7a616cc2565b5b0492506008810190505b6127108310615eaa576127108381615ea057615e9f616cc2565b5b0492506004810190505b60648310615ecd5760648381615ec357615ec2616cc2565b5b0492506002810190505b600a8310615edc576001810190505b80915050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115615f21575f600385925092509250615fc2565b5f6001888888886040515f8152602001604052604051615f4494939291906182c6565b6020604051602081039080840390855afa158015615f64573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603615fb5575f60015f5f1b93509350935050615fc2565b805f5f5f1b935093509350505b9450945094915050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b615ff6819050919050565b615ffe618309565b565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b61602381616011565b811461602d575f5ffd5b50565b5f8135905061603e8161601a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61606d82616044565b9050919050565b61607d81616063565b8114616087575f5ffd5b50565b5f8135905061609881616074565b92915050565b5f5f604083850312156160b4576160b3616009565b5b5f6160c185828601616030565b92505060206160d28582860161608a565b9150509250929050565b5f5f604083850312156160f2576160f1616009565b5b5f6160ff85828601616030565b925050602061611085828601616030565b9150509250929050565b5f60ff82169050919050565b61612f8161611a565b8114616139575f5ffd5b50565b5f8135905061614a81616126565b92915050565b6020811061615c575f5ffd5b50565b5f8135905061616d81616150565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6161bd82616177565b810181811067ffffffffffffffff821117156161dc576161db616187565b5b80604052505050565b5f6161ee616000565b90506161fa82826161b4565b919050565b5f67ffffffffffffffff82111561621957616218616187565b5b602082029050602081019050919050565b5f5ffd5b5f61624061623b846161ff565b6161e5565b905080838252602082019050602084028301858111156162635761626261622a565b5b835b8181101561628c57806162788882616030565b845260208401935050602081019050616265565b5050509392505050565b5f82601f8301126162aa576162a9616173565b5b81356162ba84826020860161622e565b91505092915050565b5f5f5f5f608085870312156162db576162da616009565b5b5f6162e88782880161613c565b94505060206162f98782880161615f565b935050604085013567ffffffffffffffff81111561631a5761631961600d565b5b61632687828801616296565b925050606085013567ffffffffffffffff8111156163475761634661600d565b5b61635387828801616296565b91505092959194509250565b61636881616011565b82525050565b5f6020820190506163815f83018461635f565b92915050565b5f6020828403121561639c5761639b616009565b5b5f6163a984828501616030565b91505092915050565b5f8115159050919050565b6163c6816163b2565b82525050565b5f6020820190506163df5f8301846163bd565b92915050565b6163ee81616063565b82525050565b5f6020820190506164075f8301846163e5565b92915050565b5f8160030b9050919050565b6164228161640d565b811461642c575f5ffd5b50565b5f8135905061643d81616419565b92915050565b5f5f6040838503121561645957616458616009565b5b5f6164668582860161642f565b92505060206164778582860161642f565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156164a7576164a6616187565b5b6164b082616177565b9050602081019050919050565b828183375f83830152505050565b5f6164dd6164d88461648d565b6161e5565b9050828152602081018484840111156164f9576164f8616489565b5b6165048482856164bd565b509392505050565b5f82601f8301126165205761651f616173565b5b81356165308482602086016164cb565b91505092915050565b5f6080828403121561654e5761654d616481565b5b61655860806161e5565b90505f61656784828501616030565b5f83015250602061657a8482850161613c565b602083015250604061658e8482850161613c565b604083015250606082013567ffffffffffffffff8111156165b2576165b1616485565b5b6165be8482850161650c565b60608301525092915050565b5f5f604083850312156165e0576165df616009565b5b5f83013567ffffffffffffffff8111156165fd576165fc61600d565b5b61660985828601616539565b925050602061661a8582860161608a565b9150509250929050565b5f6040820190506166375f83018561635f565b61664460208301846163bd565b9392505050565b5f67ffffffffffffffff82111561666557616664616187565b5b61666e82616177565b9050602081019050919050565b5f61668d6166888461664b565b6161e5565b9050828152602081018484840111156166a9576166a8616489565b5b6166b48482856164bd565b509392505050565b5f82601f8301126166d0576166cf616173565b5b81356166e084826020860161667b565b91505092915050565b5f5f5f60608486031215616700576166ff616009565b5b5f61670d86828701616030565b935050602084013567ffffffffffffffff81111561672e5761672d61600d565b5b61673a868287016166bc565b925050604084013567ffffffffffffffff81111561675b5761675a61600d565b5b616767868287016166bc565b9150509250925092565b5f6020828403121561678657616785616009565b5b5f6167938482850161642f565b91505092915050565b6167a5816163b2565b81146167af575f5ffd5b50565b5f813590506167c08161679c565b92915050565b5f602082840312156167db576167da616009565b5b5f6167e8848285016167b2565b91505092915050565b5f5f5f6060848603121561680857616807616009565b5b5f84013567ffffffffffffffff8111156168255761682461600d565b5b616831868287016166bc565b935050602061684286828701616030565b925050604061685386828701616030565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61688f8261685d565b6168998185616867565b93506168a9818560208601616877565b6168b281616177565b840191505092915050565b5f6020820190508181035f8301526168d58184616885565b905092915050565b5f5ffd5b5f5f83601f8401126168f6576168f5616173565b5b8235905067ffffffffffffffff811115616913576169126168dd565b5b60208301915083602082028301111561692f5761692e61622a565b5b9250929050565b5f5f5f5f6060858703121561694e5761694d616009565b5b5f61695b87828801616030565b945050602061696c87828801616030565b935050604085013567ffffffffffffffff81111561698d5761698c61600d565b5b616999878288016168e1565b925092505092959194509250565b5f5f5f606084860312156169be576169bd616009565b5b5f84013567ffffffffffffffff8111156169db576169da61600d565b5b6169e7868287016166bc565b93505060206169f886828701616030565b9250506040616a098682870161608a565b9150509250925092565b5f60208284031215616a2857616a27616009565b5b5f616a358482850161608a565b91505092915050565b5f67ffffffffffffffff82169050919050565b616a5a81616a3e565b8114616a64575f5ffd5b50565b5f81359050616a7581616a51565b92915050565b5f819050919050565b616a8d81616a7b565b8114616a97575f5ffd5b50565b5f81359050616aa881616a84565b92915050565b5f6101008284031215616ac457616ac3616481565b5b616acf6101006161e5565b90505f616ade8482850161608a565b5f830152506020616af184828501616a67565b6020830152506040616b058482850161608a565b6040830152506060616b1984828501616030565b6060830152506080616b2d8482850161608a565b60808301525060a0616b4184828501616a9a565b60a08301525060c082013567ffffffffffffffff811115616b6557616b64616485565b5b616b718482850161650c565b60c08301525060e082013567ffffffffffffffff811115616b9557616b94616485565b5b616ba18482850161650c565b60e08301525092915050565b5f5f60408385031215616bc357616bc2616009565b5b5f83013567ffffffffffffffff811115616be057616bdf61600d565b5b616bec85828601616aae565b9250506020616bfd85828601616030565b9150509250929050565b5f60208284031215616c1c57616c1b616009565b5b5f82013567ffffffffffffffff811115616c3957616c3861600d565b5b616c45848285016166bc565b91505092915050565b5f819050919050565b5f616c71616c6c616c6784616044565b616c4e565b616044565b9050919050565b5f616c8282616c57565b9050919050565b5f616c9382616c78565b9050919050565b616ca381616c89565b82525050565b5f602082019050616cbc5f830184616c9a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f616cf982616011565b9150616d0483616011565b925082616d1457616d13616cc2565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f616d5682616011565b9150616d6183616011565b9250828201905080821115616d7957616d78616d1f565b5b92915050565b5f616d8982616a3e565b9150616d9483616a3e565b9250828201905067ffffffffffffffff811115616db457616db3616d1f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050919050565b5f616e0a616e05616e0084616de7565b616c4e565b616011565b9050919050565b616e1a81616df0565b82525050565b5f6060820190508181035f830152616e388186616885565b9050616e47602083018561635f565b616e546040830184616e11565b949350505050565b5f606082019050616e6f5f83018661635f565b616e7c60208301856163e5565b616e8960408301846163e5565b949350505050565b616e9a8161640d565b82525050565b5f606082019050616eb35f830186616e91565b616ec06020830185616e91565b616ecd6040830184616e91565b949350505050565b5f604082019050616ee85f8301856163e5565b616ef560208301846163e5565b9392505050565b5f604082019050616f0f5f83018561635f565b616f1c60208301846163e5565b9392505050565b5f606082019050616f365f83018661635f565b8181036020830152616f488185616885565b90508181036040830152616f5c8184616885565b9050949350505050565b5f81519050616f748161679c565b92915050565b5f60208284031215616f8f57616f8e616009565b5b5f616f9c84828501616f66565b91505092915050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f616fd9600d83616867565b9150616fe482616fa5565b602082019050919050565b5f6020820190508181035f83015261700681616fcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61706c81616011565b82525050565b5f61707d8383617063565b60208301905092915050565b5f602082019050919050565b5f61709f8261703a565b6170a98185617044565b93506170b483617054565b805f5b838110156170e45781516170cb8882617072565b97506170d683617089565b9250506001810190506170b7565b5085935050505092915050565b5f6040820190508181035f8301526171098185617095565b905061711860208301846163e5565b9392505050565b61712881616063565b82525050565b61713781616a3e565b82525050565b61714681616a7b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6171708261714c565b61717a8185617156565b935061718a818560208601616877565b61719381616177565b840191505092915050565b5f61010083015f8301516171b45f86018261711f565b5060208301516171c7602086018261712e565b5060408301516171da604086018261711f565b5060608301516171ed6060860182617063565b506080830151617200608086018261711f565b5060a083015161721360a086018261713d565b5060c083015184820360c086015261722b8282617166565b91505060e083015184820360e08601526172458282617166565b9150508091505092915050565b5f6040820190508181035f83015261726a818561719e565b9050617279602083018461635f565b9392505050565b5f61728a82616011565b915061729583616011565b92508282039050818111156172ad576172ac616d1f565b5b92915050565b5f819050919050565b5f6172d66172d16172cc846172b3565b616c4e565b616011565b9050919050565b6172e6816172bc565b82525050565b5f6060820190508181035f8301526173048186616885565b9050617313602083018561635f565b61732060408301846172dd565b949350505050565b5f819050919050565b5f61734b61734661734184617328565b616c4e565b616011565b9050919050565b61735b81617331565b82525050565b5f6060820190508181035f8301526173798186616885565b9050617388602083018561635f565b6173956040830184617352565b949350505050565b5f6173a78261611a565b915060ff82036173ba576173b9616d1f565b5b600182019050919050565b5f81905092915050565b5f6173d98261714c565b6173e381856173c5565b93506173f3818560208601616877565b80840191505092915050565b5f61740a82856173cf565b915061741682846173cf565b91508190509392505050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61746761746282617422565b61744d565b82525050565b5f61747882856173cf565b91506174848284617456565b6001820191508190509392505050565b5f819050919050565b5f6174b76174b26174ad84617494565b616c4e565b616011565b9050919050565b6174c78161749d565b82525050565b5f60a0820190506174e05f83018861635f565b81810360208301526174f28187616885565b9050617501604083018661635f565b61750e60608301856174be565b61751b60808301846174be565b9695505050505050565b5f60a0820190506175385f83018861635f565b818103602083015261754a8187616885565b9050617559604083018661635f565b617566606083018561635f565b61757360808301846174be565b9695505050505050565b5f60a0820190506175905f83018861635f565b81810360208301526175a28187616885565b90506175b1604083018661635f565b6175be606083018561635f565b6175cb608083018461635f565b9695505050505050565b5f819050919050565b6175ef6175ea82616011565b6175d5565b82525050565b5f8160f81b9050919050565b5f61760b826175f5565b9050919050565b61762361761e8261611a565b617601565b82525050565b5f8160601b9050919050565b5f61763f82617629565b9050919050565b5f61765082617635565b9050919050565b61766861766382616063565b617646565b82525050565b5f61767982886175de565b6020820191506176898287617612565b6001820191506176998286617612565b6001820191506176a98285617657565b6014820191506176b982846175de565b6020820191508190509695505050505050565b5f81905092915050565b5f6176e08261685d565b6176ea81856176cc565b93506176fa818560208601616877565b80840191505092915050565b7f202d3e2000000000000000000000000000000000000000000000000000000000815250565b5f61773782886176d6565b915061774382876176d6565b915061774f82866176d6565b915061775b82856176d6565b915061776682617706565b60048201915061777682846176d6565b91508190509695505050505050565b7f73656c65637400000000000000000000000000000000000000000000000000005f82015250565b5f6177b9600683616867565b91506177c482617785565b602082019050919050565b5f6060820190508181035f8301526177e6816177ad565b90506177f5602083018561635f565b6178026040830184616e11565b9392505050565b5f6020820190508181035f830152617820816177ad565b9050919050565b6178308161611a565b82525050565b5f6040820190506178495f830185617827565b6178566020830184617827565b9392505050565b5f6040820190508181035f8301526178758185616885565b90506178846020830184617827565b9392505050565b7f202a200000000000000000000000000000000000000000000000000000000000815250565b5f6178bc82856176d6565b91506178c78261788b565b6003820191506178d782846176d6565b91508190509392505050565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b5f61791482856176d6565b915061791f826178e3565b60038201915061792f82846176d6565b91508190509392505050565b7f202b200000000000000000000000000000000000000000000000000000000000815250565b5f61796c82856176d6565b91506179778261793b565b60038201915061798782846176d6565b91508190509392505050565b7f205e200000000000000000000000000000000000000000000000000000000000815250565b5f6179c482856176d6565b91506179cf82617993565b6003820191506179df82846176d6565b91508190509392505050565b7f2026200000000000000000000000000000000000000000000000000000000000815250565b5f617a1c82856176d6565b9150617a27826179eb565b600382019150617a3782846176d6565b91508190509392505050565b7f207c200000000000000000000000000000000000000000000000000000000000815250565b5f617a7482856176d6565b9150617a7f82617a43565b600382019150617a8f82846176d6565b91508190509392505050565b7f202f200000000000000000000000000000000000000000000000000000000000815250565b5f617acc82856176d6565b9150617ad782617a9b565b600382019150617ae782846176d6565b91508190509392505050565b7f2025200000000000000000000000000000000000000000000000000000000000815250565b5f617b2482856176d6565b9150617b2f82617af3565b600382019150617b3f82846176d6565b91508190509392505050565b7f203c3c2000000000000000000000000000000000000000000000000000000000815250565b5f617b7c82856176d6565b9150617b8782617b4b565b600482019150617b9782846176d6565b91508190509392505050565b7f203e3e2000000000000000000000000000000000000000000000000000000000815250565b5f617bd482856176d6565b9150617bdf82617ba3565b600482019150617bef82846176d6565b91508190509392505050565b7f203e3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c2c82856176d6565b9150617c3782617bfb565b600482019150617c4782846176d6565b91508190509392505050565b7f203c3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c8482856176d6565b9150617c8f82617c53565b600482019150617c9f82846176d6565b91508190509392505050565b7f203c200000000000000000000000000000000000000000000000000000000000815250565b5f617cdc82856176d6565b9150617ce782617cab565b600382019150617cf782846176d6565b91508190509392505050565b7f203e200000000000000000000000000000000000000000000000000000000000815250565b5f617d3482856176d6565b9150617d3f82617d03565b600382019150617d4f82846176d6565b91508190509392505050565b7f6d696e2800000000000000000000000000000000000000000000000000000000815250565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b5f617dd782617d5b565b600482019150617de782856176d6565b9150617df282617d81565b600282019150617e0282846176d6565b9150617e0d82617da7565b6001820191508190509392505050565b7f6d61782800000000000000000000000000000000000000000000000000000000815250565b5f617e4d82617e1d565b600482019150617e5d82856176d6565b9150617e6882617d81565b600282019150617e7882846176d6565b9150617e8382617da7565b6001820191508190509392505050565b7f203d3d2000000000000000000000000000000000000000000000000000000000815250565b5f617ec482856176d6565b9150617ecf82617e93565b600482019150617edf82846176d6565b91508190509392505050565b7f20213d2000000000000000000000000000000000000000000000000000000000815250565b5f617f1c82856176d6565b9150617f2782617eeb565b600482019150617f3782846176d6565b91508190509392505050565b7f4648452e61734500000000000000000000000000000000000000000000000000815250565b5f617f7382617f43565b600782019150617f8382846176d6565b915081905092915050565b7f2800000000000000000000000000000000000000000000000000000000000000815250565b5f617fbf82856176d6565b9150617fca82617f8e565b600182019150617fda82846176d6565b9150617fe582617da7565b6001820191508190509392505050565b7f203f200000000000000000000000000000000000000000000000000000000000815250565b7f203a200000000000000000000000000000000000000000000000000000000000815250565b5f61804c82866176d6565b915061805782617ff5565b60038201915061806782856176d6565b91506180728261801b565b60038201915061808282846176d6565b9150819050949350505050565b7f2e2e000000000000000000000000000000000000000000000000000000000000815250565b7f295b000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f61810c82876176d6565b915061811782617f8e565b60018201915061812782866176d6565b91506181328261808f565b60028201915061814282856176d6565b915061814d826180b5565b60028201915061815d82846176d6565b9150618168826180db565b60018201915081905095945050505050565b7f20203d3e20200000000000000000000000000000000000000000000000000000815250565b5f6181ab82886176d6565b91506181b782876176d6565b91506181c382866176d6565b91506181cf82856176d6565b91506181da8261817a565b6006820191506181ea82846176d6565b91508190509695505050505050565b5f61820482846176d6565b915081905092915050565b61821881616a7b565b82525050565b5f6020820190506182315f83018461820f565b92915050565b5f61824182616011565b915061824c83616011565b925082820261825a81616011565b9150828204841483151761827157618270616d1f565b5b5092915050565b5f61828282616011565b91505f820361829457618293616d1f565b5b600182039050919050565b5f6040820190506182b25f83018561635f565b6182bf602083018461635f565b9392505050565b5f6080820190506182d95f83018761820f565b6182e66020830186617827565b6182f3604083018561820f565b618300606083018461820f565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea2646970667358221220b8072e56a1c8f4b8bd3f7decb9a6ae44bbaef10051334c835a7f3aa97465cd9264736f6c63430008210033",
1026
+ bytecode: "0x608060405260015f5f6101000a81548160ff0219169083151502179055503480156027575f5ffd5b5061836c806100355f395ff3fe608060405234801561000f575f5ffd5b50600436106101ee575f3560e01c8063642b3f191161010d578063a307d21d116100a0578063de2873591161006f578063de287359146105bd578063e68d826f146105db578063f6bc7f3f146105f9578063f9120af614610629576101ee565b8063a307d21d14610525578063ae79f04a14610541578063c4d66de814610571578063d521ed4b1461058d576101ee565b80638b2b9c23116100dc5780638b2b9c23146104b55780638d9c9c92146104d15780638db39c8d146104ed57806392bd6c9514610509576101ee565b8063642b3f191461043157806365d0509c1461044d5780637e5cf5191461046957806381ba098614610499576101ee565b806327f9c762116101855780634bc98263116101545780634bc98263146103ad578063591363c7146103c95780635faa299a146103e55780635fb0bf9114610415576101ee565b806327f9c7621461031257806334ef1e5a14610342578063392e53cd1461035e578063458693c91461037c576101ee565b80631d031931116101c15780631d0319311461028a578063245a7bfc146102ba57806326594a0c146102d8578063267c4ae4146102f4576101ee565b806308289827146101f257806315a486fe1461020e5780631888debd1461022a5780631c76642b1461025a575b5f5ffd5b61020c6004803603810190610207919061609e565b610645565b005b610228600480360381019061022391906160dc565b6106f8565b005b610244600480360381019061023f91906162c3565b610706565b604051610251919061636e565b60405180910390f35b610274600480360381019061026f9190616387565b6108aa565b604051610281919061636e565b60405180910390f35b6102a4600480360381019061029f9190616387565b6108bf565b6040516102b191906163cc565b60405180910390f35b6102c26108dc565b6040516102cf91906163f4565b60405180910390f35b6102f260048036038101906102ed9190616443565b610902565b005b6102fc6109de565b60405161030991906163cc565b60405180910390f35b61032c600480360381019061032791906165ca565b6109e6565b604051610339919061636e565b60405180910390f35b61035c60048036038101906103579190616387565b610c20565b005b610366610cfa565b60405161037391906163cc565b60405180910390f35b61039660048036038101906103919190616387565b610d10565b6040516103a4929190616624565b60405180910390f35b6103c760048036038101906103c291906166e9565b610d95565b005b6103e360048036038101906103de9190616771565b610e67565b005b6103ff60048036038101906103fa919061609e565b610f99565b60405161040c91906163cc565b60405180910390f35b61042f600480360381019061042a9190616771565b611055565b005b61044b600480360381019061044691906167c6565b611187565b005b6104676004803603810190610462919061609e565b6111a2565b005b610483600480360381019061047e91906167f1565b6112ee565b60405161049091906168bd565b60405180910390f35b6104b360048036038101906104ae9190616936565b611424565b005b6104cf60048036038101906104ca91906169a7565b611532565b005b6104eb60048036038101906104e6919061609e565b611542565b005b61050760048036038101906105029190616a13565b61161f565b005b610523600480360381019061051e9190616a13565b6116f3565b005b61053f600480360381019061053a9190616387565b61182c565b005b61055b60048036038101906105569190616bad565b611974565b60405161056891906163cc565b60405180910390f35b61058b60048036038101906105869190616a13565b611a18565b005b6105a760048036038101906105a29190616c07565b611ab6565b6040516105b491906168bd565b60405180910390f35b6105c5611bcb565b6040516105d29190616ca9565b60405180910390f35b6105e3611bf0565b6040516105f091906163cc565b60405180910390f35b610613600480360381019061060e9190616387565b611c01565b604051610620919061636e565b60405180910390f35b610643600480360381019061063e9190616a13565b611c5d565b005b61064e82611d97565b600160055f8481526020019081526020015f205f6101000a81548160ff02191690831515021790555061068082611e86565b60045f8481526020019081526020015f20819055505f6001600a426106a59190616cef565b6106af9190616d4c565b905080426106bd9190616d7f565b60065f8581526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b6107028282611f0e565b5050565b5f601b601f81111561071b5761071a616dba565b5b84601f81111561072e5761072d616dba565b5b03610765576040517f98e08ab000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f825184516107749190616d4c565b905060038111156107c95761078885611f2c565b8160036040517f2b0399d50000000000000000000000000000000000000000000000000000000081526004016107c093929190616e20565b60405180910390fd5b6107d38486612ac1565b5f6107de8585612d3b565b90505f6107ec878787612e7d565b90505f6107fb8983858b612ee8565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b815260040161085b93929190616e5c565b5f604051808303815f87803b158015610872575f5ffd5b505af1158015610884573d5f5f3e3d5ffd5b5050505061089b816108958a611f2c565b8561306d565b80945050505050949350505050565b6001602052805f5260405f205f915090505481565b6002602052805f5260405f205f915054906101000a900460ff1681565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099357336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161098a91906163f4565b60405180910390fd5b81600760046101000a81548163ffffffff021916908360030b63ffffffff1602179055508060075f6101000a81548163ffffffff021916908360030b63ffffffff1602179055505050565b5f6001905090565b5f5f836020015160ff1690505f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7457610a4f816132c2565b610ab15780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610aa893929190616ea0565b60405180910390fd5b5f610abc8585613303565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b72578060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f7ba5ffb5000000000000000000000000000000000000000000000000000000008152600401610b69929190616ed5565b60405180910390fd5b505b5f610b88855f01518387604001515f6133c7565b905060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228233306040518463ffffffff1660e01b8152600401610be893929190616e5c565b5f604051808303815f87803b158015610bff575f5ffd5b505af1158015610c11573d5f5f3e3d5ffd5b50505050809250505092915050565b610c2981613420565b610cf75760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663846cd43382336040518363ffffffff1660e01b8152600401610c89929190616efc565b5f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b50505050610cf66040518060400160405280600f81526020017f4648452e616c6c6f77476c6f62616c00000000000000000000000000000000008152508233611532565b5b50565b5f600360149054906101000a900460ff16905090565b5f5f60055f8481526020019081526020015f205f9054906101000a900460ff16610d3f575f5f91509150610d90565b60065f8481526020019081526020015f205f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16421015610d80575f5f91509150610d90565b610d8983611e86565b6001915091505b915091565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e2757336040517fa974a0fe000000000000000000000000000000000000000000000000000000008152600401610e1e91906163f4565b60405180910390fd5b7f66d3f531abdf188fde59b6d2b282dc7c725ef2bb1c6c93954054721a13c1a3fa838383604051610e5a93929190616f23565b60405180910390a1505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef857336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401610eef91906163f4565b60405180910390fd5b600760049054906101000a900460030b60030b8160030b1215610f735780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401610f6a93929190616ea0565b60405180910390fd5b8060075f6101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b5f610fa383613420565b15610fb1576001905061104f565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a84846040518363ffffffff1660e01b815260040161100d929190616efc565b602060405180830381865afa158015611028573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104c9190616f7a565b90505b92915050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e657336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016110dd91906163f4565b60405180910390fd5b60075f9054906101000a900460030b60030b8160030b13156111605780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf3600000000000000000000000000000000000000000000000000000000815260040161115793929190616ea0565b60405180910390fd5b80600760046101000a81548163ffffffff021916908360030b63ffffffff16021790555050565b805f5f6101000a81548160ff02191690831515021790555050565b6111ab82613420565b6112ea5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379a3a7fb8383336040518463ffffffff1660e01b815260040161120d93929190616e5c565b5f604051808303815f87803b158015611224575f5ffd5b505af1158015611236573d5f5f3e3d5ffd5b505050506112e93373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146112ab576040518060400160405280600981526020017f4648452e616c6c6f7700000000000000000000000000000000000000000000008152506112e2565b6040518060400160405280600d81526020017f4648452e616c6c6f7754686973000000000000000000000000000000000000008152505b8383611532565b5b5050565b60605f849050805183856113029190616d4c565b1115611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90616fef565b60405180910390fd5b5f8367ffffffffffffffff81111561135e5761135d616187565b5b6040519080825280601f01601f1916602001820160405280156113905781602001600182028036833780820191505090505b5090505f5f90505b84811015611417578281876113ad9190616d4c565b815181106113be576113bd61700d565b5b602001015160f81c60f81b8282815181106113dc576113db61700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611398565b5080925050509392505050565b600760089054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114b657336040517fa974a0fe0000000000000000000000000000000000000000000000000000000081526004016114ad91906163f4565b60405180910390fd5b600160055f8681526020019081526020015f205f6101000a81548160ff0219169083151502179055508260045f8681526020019081526020015f20819055504260065f8681526020019081526020015f205f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050565b61153d83838361345d565b505050565b61154b82613420565b61161b5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663484de8228383336040518463ffffffff1660e01b81526004016115ad93929190616e5c565b5f604051808303815f87803b1580156115c4575f5ffd5b505af11580156115d6573d5f5f3e3d5ffd5b5050505061161a6040518060400160405280601281526020017f4648452e616c6c6f775472616e7369656e7400000000000000000000000000008152508383611532565b5b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b057336040517f7238ea560000000000000000000000000000000000000000000000000000000081526004016116a791906163f4565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178457336040517f7238ea5600000000000000000000000000000000000000000000000000000000815260040161177b91906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117e9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61183581613420565b611971575f600167ffffffffffffffff81111561185557611854616187565b5b6040519080825280602002602001820160405280156118835781602001602082028036833780820191505090505b50905081815f8151811061189a5761189961700d565b5b60200260200101818152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c3839ba82336040518363ffffffff1660e01b81526004016119029291906170f1565b5f604051808303815f87803b158015611919575f5ffd5b505af115801561192b573d5f5f3e3d5ffd5b5050505061196f6040518060400160405280601681526020017f4648452e616c6c6f77466f7244656372797074696f6e000000000000000000008152508333611532565b505b50565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a84846040518363ffffffff1660e01b81526004016119d1929190617252565b602060405180830381865afa1580156119ec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a109190616f7a565b905092915050565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360146101000a81548160ff0219169083151502179055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f8290505f815103611adb5760405180602001604052805f815250915050611bc6565b5f60018251611aea9190617280565b67ffffffffffffffff811115611b0357611b02616187565b5b6040519080825280601f01601f191660200182016040528015611b355781602001600182028036833780820191505090505b5090505f600190505b8251811015611bbf57828181518110611b5a57611b5961700d565b5b602001015160f81c60f81b82600183611b739190617280565b81518110611b8457611b8361700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611b3e565b5080925050505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900460ff1681565b5f5f5f611c0d84610d10565b9150915080611c5357836040517f70cf6554000000000000000000000000000000000000000000000000000000008152600401611c4a919061636e565b60405180910390fd5b8192505050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cee57336040517f7238ea56000000000000000000000000000000000000000000000000000000008152600401611ce591906163f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d53576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760086101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611da081613420565b611e835760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a82336040518363ffffffff1660e01b8152600401611e00929190616efc565b602060405180830381865afa158015611e1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3f9190616f7a565b611e825780336040517f4d13139e000000000000000000000000000000000000000000000000000000008152600401611e79929190616efc565b60405180910390fd5b5b50565b5f60025f8381526020019081526020015f205f9054906101000a900460ff16611ee657816040517f850a796d000000000000000000000000000000000000000000000000000000008152600401611edd919061636e565b60405180910390fd5b5f611ef08361354b565b90508060015f8581526020019081526020015f205416915050919050565b5f611f188361354b565b9050611f27838284165f613568565b505050565b60606002601f811115611f4257611f41616dba565b5b82601f811115611f5557611f54616dba565b5b03611f97576040518060400160405280600481526020017f63617374000000000000000000000000000000000000000000000000000000008152509050612abc565b6003601f811115611fab57611faa616dba565b5b82601f811115611fbe57611fbd616dba565b5b03612000576040518060400160405280600a81526020017f7365616c4f7574707574000000000000000000000000000000000000000000008152509050612abc565b6004601f81111561201457612013616dba565b5b82601f81111561202757612026616dba565b5b03612069576040518060400160405280600681526020017f73656c65637400000000000000000000000000000000000000000000000000008152509050612abc565b6006601f81111561207d5761207c616dba565b5b82601f8111156120905761208f616dba565b5b036120d2576040518060400160405280600781526020017f64656372797074000000000000000000000000000000000000000000000000008152509050612abc565b6007601f8111156120e6576120e5616dba565b5b82601f8111156120f9576120f8616dba565b5b0361213b576040518060400160405280600381526020017f73756200000000000000000000000000000000000000000000000000000000008152509050612abc565b6008601f81111561214f5761214e616dba565b5b82601f81111561216257612161616dba565b5b036121a4576040518060400160405280600381526020017f61646400000000000000000000000000000000000000000000000000000000008152509050612abc565b6009601f8111156121b8576121b7616dba565b5b82601f8111156121cb576121ca616dba565b5b0361220d576040518060400160405280600381526020017f786f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b600a601f81111561222157612220616dba565b5b82601f81111561223457612233616dba565b5b03612276576040518060400160405280600381526020017f616e6400000000000000000000000000000000000000000000000000000000008152509050612abc565b600b601f81111561228a57612289616dba565b5b82601f81111561229d5761229c616dba565b5b036122df576040518060400160405280600281526020017f6f720000000000000000000000000000000000000000000000000000000000008152509050612abc565b600c601f8111156122f3576122f2616dba565b5b82601f81111561230657612305616dba565b5b03612348576040518060400160405280600381526020017f6e6f7400000000000000000000000000000000000000000000000000000000008152509050612abc565b600d601f81111561235c5761235b616dba565b5b82601f81111561236f5761236e616dba565b5b036123b1576040518060400160405280600381526020017f64697600000000000000000000000000000000000000000000000000000000008152509050612abc565b600e601f8111156123c5576123c4616dba565b5b82601f8111156123d8576123d7616dba565b5b0361241a576040518060400160405280600381526020017f72656d00000000000000000000000000000000000000000000000000000000008152509050612abc565b600f601f81111561242e5761242d616dba565b5b82601f81111561244157612440616dba565b5b03612483576040518060400160405280600381526020017f6d756c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6010601f81111561249757612496616dba565b5b82601f8111156124aa576124a9616dba565b5b036124ec576040518060400160405280600381526020017f73686c00000000000000000000000000000000000000000000000000000000008152509050612abc565b6011601f811115612500576124ff616dba565b5b82601f81111561251357612512616dba565b5b03612555576040518060400160405280600381526020017f73687200000000000000000000000000000000000000000000000000000000008152509050612abc565b6012601f81111561256957612568616dba565b5b82601f81111561257c5761257b616dba565b5b036125be576040518060400160405280600381526020017f67746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6013601f8111156125d2576125d1616dba565b5b82601f8111156125e5576125e4616dba565b5b03612627576040518060400160405280600381526020017f6c746500000000000000000000000000000000000000000000000000000000008152509050612abc565b6014601f81111561263b5761263a616dba565b5b82601f81111561264e5761264d616dba565b5b03612690576040518060400160405280600281526020017f6c740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6015601f8111156126a4576126a3616dba565b5b82601f8111156126b7576126b6616dba565b5b036126f9576040518060400160405280600281526020017f67740000000000000000000000000000000000000000000000000000000000008152509050612abc565b6016601f81111561270d5761270c616dba565b5b82601f8111156127205761271f616dba565b5b03612762576040518060400160405280600381526020017f6d696e00000000000000000000000000000000000000000000000000000000008152509050612abc565b6017601f81111561277657612775616dba565b5b82601f81111561278957612788616dba565b5b036127cb576040518060400160405280600381526020017f6d617800000000000000000000000000000000000000000000000000000000008152509050612abc565b6018601f8111156127df576127de616dba565b5b82601f8111156127f2576127f1616dba565b5b03612834576040518060400160405280600281526020017f65710000000000000000000000000000000000000000000000000000000000008152509050612abc565b6019601f81111561284857612847616dba565b5b82601f81111561285b5761285a616dba565b5b0361289d576040518060400160405280600281526020017f6e650000000000000000000000000000000000000000000000000000000000008152509050612abc565b601a601f8111156128b1576128b0616dba565b5b82601f8111156128c4576128c3616dba565b5b03612906576040518060400160405280600e81526020017f7472697669616c456e63727970740000000000000000000000000000000000008152509050612abc565b601b601f81111561291a57612919616dba565b5b82601f81111561292d5761292c616dba565b5b0361296f576040518060400160405280600681526020017f72616e646f6d00000000000000000000000000000000000000000000000000008152509050612abc565b601c601f81111561298357612982616dba565b5b82601f81111561299657612995616dba565b5b036129d8576040518060400160405280600381526020017f726f6c00000000000000000000000000000000000000000000000000000000008152509050612abc565b601d601f8111156129ec576129eb616dba565b5b82601f8111156129ff576129fe616dba565b5b03612a41576040518060400160405280600381526020017f726f7200000000000000000000000000000000000000000000000000000000008152509050612abc565b601e601f811115612a5557612a54616dba565b5b82601f811115612a6857612a67616dba565b5b03612aaa576040518060400160405280600681526020017f73717561726500000000000000000000000000000000000000000000000000008152509050612abc565b60405180602001604052805f81525090505b919050565b5f612acb82611f2c565b90505f835103612b2557612ade82613609565b612b1f57806040517fb31612aa000000000000000000000000000000000000000000000000000000008152600401612b1691906168bd565b60405180910390fd5b50612d37565b6004601f811115612b3957612b38616dba565b5b82601f811115612b4c57612b4b616dba565b5b03612b5f57612b5a83613668565b612c8f565b612b68826137a9565b15612bbe576001835114612bb95780835160016040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612bb0939291906172ec565b60405180910390fd5b612c8e565b6002835114612c0a5780835160026040517f9a84351c000000000000000000000000000000000000000000000000000000008152600401612c0193929190617361565b60405180910390fd5b5f612c4b84600181518110612c2257612c2161700d565b5b6020026020010151855f81518110612c3d57612c3c61700d565b5b602002602001015118613837565b14612c8d57806040517f52b50ae1000000000000000000000000000000000000000000000000000000008152600401612c8491906168bd565b60405180910390fd5b5b5b5f612cb3845f81518110612ca657612ca561700d565b5b6020026020010151613855565b9050612cbe816132c2565b612d205780600760049054906101000a900460030b60075f9054906101000a900460030b6040517f24cbcf36000000000000000000000000000000000000000000000000000000008152600401612d1793929190616ea0565b60405180910390fd5b612d2984613865565b612d348383866138b3565b50505b5050565b60605f82518451612d4c9190616d4c565b67ffffffffffffffff811115612d6557612d64616187565b5b604051908082528060200260200182016040528015612d935781602001602082028036833780820191505090505b5090505f5f90505b84518160ff161015612dfa57848160ff1681518110612dbd57612dbc61700d565b5b6020026020010151828260ff1681518110612ddb57612dda61700d565b5b6020026020010181815250508080612df29061739d565b915050612d9b565b5b83518551612e099190616d4c565b8160ff161015612e72578385518260ff16612e249190617280565b81518110612e3557612e3461700d565b5b6020026020010151828260ff1681518110612e5357612e5261700d565b5b6020026020010181815250508080612e6a9061739d565b915050612dfb565b819250505092915050565b5f612e8784613609565b15612ebb578160018351612e9b9190617280565b81518110612eac57612eab61700d565b5b60200260200101519050612ee1565b612ede835f81518110612ed157612ed061700d565b5b6020026020010151613855565b90505b9392505050565b5f60605f601a601f811115612f0057612eff616dba565b5b84601f811115612f1357612f12616dba565b5b1490505f5f90505b85518160ff161015612f835782612f4e878360ff1681518110612f4157612f4061700d565b5b6020026020010151613a21565b604051602001612f5f9291906173ff565b60405160208183030381529060405292508080612f7b9061739d565b915050612f1b565b50601e601f811115612f9857612f97616dba565b5b84601f811115612fab57612faa616dba565b5b03612ffb57600f935081612fd8865f81518110612fcb57612fca61700d565b5b6020026020010151613a21565b604051602001612fe99291906173ff565b60405160208183030381529060405291505b5f84601f81111561300f5761300e616dba565b5b60f81b9050828160405160200161302792919061746d565b60405160208183030381529060405292505f838051906020012090505f61305b825f1c8a6130558a8e613a83565b876133c7565b90508095505050505050949350505050565b6001815114806130845750613083826002613bae565b5b1561310c577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106130bf576130be61700d565b5b60200260200101515f5f6040516130da9594939291906174cd565b60405180910390a16131078383835f815181106130fa576130f961700d565b5b6020026020010151613bc9565b6132bd565b60028151036131cf577fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f8151811061314b5761314a61700d565b5b6020026020010151846001815181106131675761316661700d565b5b60200260200101515f604051613181959493929190617525565b60405180910390a16131ca8383835f815181106131a1576131a061700d565b5b6020026020010151846001815181106131bd576131bc61700d565b5b6020026020010151613e30565b6132bc565b7fe9de54a3e7ddf0c48cc6e1134185300d5a71acbf2d8c21fcdefa9d9dd9e20ac18383835f815181106132055761320461700d565b5b6020026020010151846001815181106132215761322061700d565b5b60200260200101518560028151811061323d5761323c61700d565b5b602002602001015160405161325695949392919061757d565b60405180910390a16132bb8383835f815181106132765761327561700d565b5b6020026020010151846001815181106132925761329161700d565b5b6020026020010151856002815181106132ae576132ad61700d565b5b6020026020010151614c5c565b5b5b505050565b5f600760049054906101000a900460030b60030b8260030b121580156132fc575060075f9054906101000a900460030b60030b8260030b13155b9050919050565b5f5f835f015184604001518560200151854660405160200161332995949392919061766e565b60405160208183030381529060405290505f818051906020012090505f613354828760600151614e03565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036133bb576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80935050505092915050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133f89190617280565b851690505f8460ff16600861340d8587614e2d565b901b179050808217915050949350505050565b5f600160ff8016901c60ff1660ff801661343a9190617280565b600160ff8016901c60ff1660ff80166134539190617280565b8316149050919050565b5f5f9054906101000a900460ff1615613546576135456040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506134d58560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525061351486614fb3565b61351d8661514f565b60405160200161353195949392919061772c565b60405160208183030381529060405261517c565b5b505050565b5f5f61355683615215565b90506001816001901b03915050919050565b8160015f8581526020019081526020015f2081905550600160025f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055508015613604576136036040518060400160405280600381526020017f736574000000000000000000000000000000000000000000000000000000000081525060405180602001604052805f8152506135fe86614fb3565b6152ec565b5b505050565b5f601b601f81111561361e5761361d616dba565b5b82601f81111561363157613630616dba565b5b14806136615750601a601f81111561364c5761364b616dba565b5b82601f81111561365f5761365e616dba565b5b145b9050919050565b60038151146136b257805160036040517f9a84351c0000000000000000000000000000000000000000000000000000000081526004016136a99291906177cf565b60405180910390fd5b5f6136f4826002815181106136ca576136c961700d565b5b6020026020010151836001815181106136e6576136e561700d565b5b602002602001015118613837565b14613734576040517f52b50ae100000000000000000000000000000000000000000000000000000000815260040161372b90617809565b60405180910390fd5b5f613758825f8151811061374b5761374a61700d565b5b60200260200101516153ca565b90505f5f821860ff16146137a557805f6040517f884a0e9d00000000000000000000000000000000000000000000000000000000815260040161379c929190617836565b60405180910390fd5b5050565b5f600c601f8111156137be576137bd616dba565b5b82601f8111156137d1576137d0616dba565b5b14806138015750601e601f8111156137ec576137eb616dba565b5b82601f8111156137ff576137fe616dba565b5b145b8061383057506002601f81111561381b5761381a616dba565b5b82601f81111561382e5761382d616dba565b5b145b9050919050565b5f8160ff80166008600160ff8016901c60ff16901b17169050919050565b5f60ff801682165f0b9050919050565b5f5f90505b81518160ff1610156138af5761389c828260ff168151811061388f5761388e61700d565b5b6020026020010151611d97565b80806138a79061739d565b91505061386a565b5050565b6138bc836153e6565b613a1c576138c9836154a3565b1561396f575f5f90505b81518160ff161015613969575f613906838360ff16815181106138f9576138f861700d565b5b60200260200101516153ca565b90505f6007821860ff1603613955578360076040517f91b4b37800000000000000000000000000000000000000000000000000000000815260040161394c92919061785d565b60405180910390fd5b5080806139619061739d565b9150506138d3565b50613a1b565b5f5f90505b81518160ff161015613a19575f6139a7838360ff168151811061399a5761399961700d565b5b60200260200101516153ca565b90505f6007821860ff1614806139c157505f5f821860ff16145b15613a055783816040517f91b4b3780000000000000000000000000000000000000000000000000000000081526004016139fc92919061785d565b60405180910390fd5b508080613a119061739d565b915050613974565b505b5b505050565b60605f602067ffffffffffffffff811115613a3f57613a3e616187565b5b6040519080825280601f01601f191660200182016040528015613a715781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f6013601f811115613a9857613a97616dba565b5b83601f811115613aab57613aaa616dba565b5b1480613adb57506014601f811115613ac657613ac5616dba565b5b83601f811115613ad957613ad8616dba565b5b145b80613b0a57506012601f811115613af557613af4616dba565b5b83601f811115613b0857613b07616dba565b5b145b80613b3957506015601f811115613b2457613b23616dba565b5b83601f811115613b3757613b36616dba565b5b145b80613b6857506018601f811115613b5357613b52616dba565b5b83601f811115613b6657613b65616dba565b5b145b80613b9757506019601f811115613b8257613b81616dba565b5b83601f811115613b9557613b94616dba565b5b145b15613ba4575f9050613ba8565b8190505b92915050565b5f613bc183613bbc84611f2c565b615560565b905092915050565b613bd482601b613bae565b15613c4d57613bf283600143613bea9190617280565b405f1c611f0e565b613c486040518060400160405280600a81526020017f4648452e72616e646f6d0000000000000000000000000000000000000000000081525060405180602001604052805f815250613c4386614fb3565b6152ec565b613e2b565b613c58826002613bae565b15613cc457613c6f83613c6a83611e86565b611f0e565b613cbf6040518060400160405280600881526020017f4648452e63617374000000000000000000000000000000000000000000000000815250613cb183614fb3565b613cba86614fb3565b6152ec565b613e2b565b613ccf82600c613bae565b15613d44575f6001613ce083611e86565b149050613cee8482156155b8565b613d3e6040518060400160405280600781526020017f4648452e6e6f7400000000000000000000000000000000000000000000000000815250613d3084614fb3565b613d3987614fb3565b6152ec565b50613e2b565b613d4f82601e613bae565b15613dee57613d7083613d6183611e86565b613d6a84611e86565b02611f0e565b613de96040518060400160405280600a81526020017f4648452e73717561726500000000000000000000000000000000000000000000815250613db283614fb3565b613dbb84614fb3565b604051602001613dcc9291906178b1565b604051602081830303815290604052613de486614fb3565b6152ec565b613e2b565b816040517fd952ce7c000000000000000000000000000000000000000000000000000000008152600401613e2291906168bd565b60405180910390fd5b505050565b613e3b836007613bae565b15613eda57613e5c84613e4d83611e86565b613e5685611e86565b03611f0e565b613ed56040518060400160405280600781526020017f4648452e73756200000000000000000000000000000000000000000000000000815250613e9e84614fb3565b613ea784614fb3565b604051602001613eb8929190617909565b604051602081830303815290604052613ed087614fb3565b6152ec565b614c56565b613ee5836008613bae565b15613f8457613f0684613ef783611e86565b613f0085611e86565b01611f0e565b613f7f6040518060400160405280600781526020017f4648452e61646400000000000000000000000000000000000000000000000000815250613f4884614fb3565b613f5184614fb3565b604051602001613f62929190617961565b604051602081830303815290604052613f7a87614fb3565b6152ec565b614c56565b613f8f836009613bae565b1561402e57613fb084613fa183611e86565b613faa85611e86565b18611f0e565b6140296040518060400160405280600781526020017f4648452e786f7200000000000000000000000000000000000000000000000000815250613ff284614fb3565b613ffb84614fb3565b60405160200161400c9291906179b9565b60405160208183030381529060405261402487614fb3565b6152ec565b614c56565b61403983600a613bae565b156140d85761405a8461404b83611e86565b61405485611e86565b16611f0e565b6140d36040518060400160405280600781526020017f4648452e616e640000000000000000000000000000000000000000000000000081525061409c84614fb3565b6140a584614fb3565b6040516020016140b6929190617a11565b6040516020818303038152906040526140ce87614fb3565b6152ec565b614c56565b6140e383600b613bae565b1561418257614104846140f583611e86565b6140fe85611e86565b17611f0e565b61417d6040518060400160405280600681526020017f4648452e6f72000000000000000000000000000000000000000000000000000081525061414684614fb3565b61414f84614fb3565b604051602001614160929190617a69565b60405160208183030381529060405261417887614fb3565b6152ec565b614c56565b61418d83600d613bae565b15614276575f61419c82611e86565b90505f81036141d4576141cf857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f0e565b6141f7565b6141f685826141e286611e86565b816141f0576141ef616cc2565b5b04611f0e565b5b6142706040518060400160405280600781526020017f4648452e6469760000000000000000000000000000000000000000000000000081525061423985614fb3565b61424285614fb3565b604051602001614253929190617ac1565b60405160208183030381529060405261426b88614fb3565b6152ec565b50614c56565b61428183600e613bae565b1561432e576142b08461429383611e86565b61429c85611e86565b816142aa576142a9616cc2565b5b06611f0e565b6143296040518060400160405280600781526020017f4648452e72656d000000000000000000000000000000000000000000000000008152506142f284614fb3565b6142fb84614fb3565b60405160200161430c929190617b19565b60405160208183030381529060405261432487614fb3565b6152ec565b614c56565b61433983600f613bae565b156143d85761435a8461434b83611e86565b61435485611e86565b02611f0e565b6143d36040518060400160405280600781526020017f4648452e6d756c0000000000000000000000000000000000000000000000000081525061439c84614fb3565b6143a584614fb3565b6040516020016143b69291906178b1565b6040516020818303038152906040526143ce87614fb3565b6152ec565b614c56565b6143e3836010613bae565b1561448357614405846143f583611e86565b6143fe85611e86565b901b611f0e565b61447e6040518060400160405280600781526020017f4648452e73686c0000000000000000000000000000000000000000000000000081525061444784614fb3565b61445084614fb3565b604051602001614461929190617b71565b60405160208183030381529060405261447987614fb3565b6152ec565b614c56565b61448e836011613bae565b1561452e576144b0846144a083611e86565b6144a985611e86565b901c611f0e565b6145296040518060400160405280600781526020017f4648452e736872000000000000000000000000000000000000000000000000008152506144f284614fb3565b6144fb84614fb3565b60405160200161450c929190617bc9565b60405160208183030381529060405261452487614fb3565b6152ec565b614c56565b614539836012613bae565b156145d95761455b8461454b83611e86565b61455485611e86565b10156155b8565b6145d46040518060400160405280600781526020017f4648452e6774650000000000000000000000000000000000000000000000000081525061459d84614fb3565b6145a684614fb3565b6040516020016145b7929190617c21565b6040516020818303038152906040526145cf87614fb3565b6152ec565b614c56565b6145e4836013613bae565b1561468457614606846145f683611e86565b6145ff85611e86565b11156155b8565b61467f6040518060400160405280600781526020017f4648452e6c74650000000000000000000000000000000000000000000000000081525061464884614fb3565b61465184614fb3565b604051602001614662929190617c79565b60405160208183030381529060405261467a87614fb3565b6152ec565b614c56565b61468f836014613bae565b1561472e576146b0846146a183611e86565b6146aa85611e86565b106155b8565b6147296040518060400160405280600681526020017f4648452e6c7400000000000000000000000000000000000000000000000000008152506146f284614fb3565b6146fb84614fb3565b60405160200161470c929190617cd1565b60405160208183030381529060405261472487614fb3565b6152ec565b614c56565b614739836015613bae565b156147d85761475a8461474b83611e86565b61475485611e86565b116155b8565b6147d36040518060400160405280600681526020017f4648452e6774000000000000000000000000000000000000000000000000000081525061479c84614fb3565b6147a584614fb3565b6040516020016147b6929190617d29565b6040516020818303038152906040526147ce87614fb3565b6152ec565b614c56565b6147e3836016613bae565b156148a3575f6147f282611e86565b6147fb84611e86565b1061480e5761480982611e86565b614818565b61481783611e86565b5b90506148248582611f0e565b61489d6040518060400160405280600781526020017f4648452e6d696e0000000000000000000000000000000000000000000000000081525061486685614fb3565b61486f85614fb3565b604051602001614880929190617dcd565b60405160208183030381529060405261489888614fb3565b6152ec565b50614c56565b6148ae836017613bae565b1561496e575f6148bd82611e86565b6148c684611e86565b116148d9576148d482611e86565b6148e3565b6148e283611e86565b5b90506148ef8582611f0e565b6149686040518060400160405280600781526020017f4648452e6d61780000000000000000000000000000000000000000000000000081525061493185614fb3565b61493a85614fb3565b60405160200161494b929190617e43565b60405160208183030381529060405261496388614fb3565b6152ec565b50614c56565b614979836018613bae565b15614a185761499a8461498b83611e86565b61499485611e86565b146155b8565b614a136040518060400160405280600681526020017f4648452e657100000000000000000000000000000000000000000000000000008152506149dc84614fb3565b6149e584614fb3565b6040516020016149f6929190617eb9565b604051602081830303815290604052614a0e87614fb3565b6152ec565b614c56565b614a23836019613bae565b15614ac357614a4584614a3583611e86565b614a3e85611e86565b14156155b8565b614abe6040518060400160405280600681526020017f4648452e6e650000000000000000000000000000000000000000000000000000815250614a8784614fb3565b614a9084614fb3565b604051602001614aa1929190617f11565b604051602081830303815290604052614ab987614fb3565b6152ec565b614c56565b614ace83601c613bae565b15614b6e57614af084614ae083611e86565b614ae985611e86565b901b611f0e565b614b696040518060400160405280600781526020017f4648452e726f6c00000000000000000000000000000000000000000000000000815250614b3284614fb3565b614b3b84614fb3565b604051602001614b4c929190617b71565b604051602081830303815290604052614b6487614fb3565b6152ec565b614c56565b614b7983601d613bae565b15614c1957614b9b84614b8b83611e86565b614b9485611e86565b901c611f0e565b614c146040518060400160405280600781526020017f4648452e726f7200000000000000000000000000000000000000000000000000815250614bdd84614fb3565b614be684614fb3565b604051602001614bf7929190617bc9565b604051602081830303815290604052614c0f87614fb3565b6152ec565b614c56565b826040517fcef60885000000000000000000000000000000000000000000000000000000008152600401614c4d91906168bd565b60405180910390fd5b50505050565b614c6784601a613bae565b15614cf657614c768584611f0e565b614cf1614c8a614c85876155d6565b611ab6565b604051602001614c9a9190617f69565b604051602081830303815290604052614cba614cb5886155d6565b611ab6565b614cc386615882565b604051602001614cd4929190617fb4565b604051602081830303815290604052614cec88614fb3565b6152ec565b614dfc565b614d01846004613bae565b15614dbf57614d37856001614d1586611e86565b14614d2857614d2383611e86565b614d32565b614d3184611e86565b5b611f0e565b614dba6040518060400160405280600a81526020017f4648452e73656c65637400000000000000000000000000000000000000000000815250614d7985614fb3565b614d8285614fb3565b614d8b85614fb3565b604051602001614d9d93929190618041565b604051602081830303815290604052614db588614fb3565b6152ec565b614dfc565b836040517f5e45fa01000000000000000000000000000000000000000000000000000000008152600401614df391906168bd565b60405180910390fd5b5050505050565b5f5f5f5f614e11868661594c565b925092509250614e2182826159a1565b82935050505092915050565b5f600160ff8016901c60ff168260ff161683614e49575f614e63565b600160ff8016901c60ff1660ff8016614e629190617280565b5b17905092915050565b60605f84905083815110614e835784915050614fac565b5f8467ffffffffffffffff811115614e9e57614e9d616187565b5b6040519080825280601f01601f191660200182016040528015614ed05781602001600182028036833780820191505090505b5090505f5f90505b8251811015614f4d57828181518110614ef457614ef361700d565b5b602001015160f81c60f81b828281518110614f1257614f1161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614ed8565b5b85811015614fa55784828281518110614f6a57614f6961700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050614f4e565b8193505050505b9392505050565b60605f614fbf83615882565b90505f8151905060068111614fd857819250505061514a565b5f60025f8681526020019081526020015f205f9054906101000a900460ff1690505f60015f8781526020019081526020015f205490505f61501887615b03565b90505f8161502e5761502983615882565b6150a9565b60018314615071576040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152506150a8565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b5b90505f6150b5896155d6565b6150c1885f60046112ee565b6150d98960048a6150d29190617280565b60046112ee565b87615119576040518060400160405280600581526020017f454d50545900000000000000000000000000000000000000000000000000000081525061511b565b845b60405160200161512e9493929190618101565b6040516020818303038152906040529050809750505050505050505b919050565b60606151758273ffffffffffffffffffffffffffffffffffffffff16601460ff16615b20565b9050919050565b6152128160405160240161519091906168bd565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615d5e565b50565b5f5f61522083615d78565b90505f60ff168160ff16036152395760089150506152e7565b600260ff168160ff16036152515760089150506152e7565b600360ff168160ff16036152695760109150506152e7565b600460ff168160ff16036152815760209150506152e7565b600560ff168160ff16036152995760409150506152e7565b600660ff168160ff16036152b15760809150506152e7565b600860ff168160ff16036152ca576101009150506152e7565b600760ff168160ff16036152e25760a09150506152e7565b5f9150505b919050565b5f5f9054906101000a900460ff16156153c5576153c46040518060400160405280600481526020017fe2949c20000000000000000000000000000000000000000000000000000000008152506153648560107f2000000000000000000000000000000000000000000000000000000000000000614e6c565b6040518060400160405280600381526020017f207c20000000000000000000000000000000000000000000000000000000000081525085856040516020016153b09594939291906181a0565b60405160208183030381529060405261517c565b5b505050565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f6004601f8111156153fb576153fa616dba565b5b82601f81111561540e5761540d616dba565b5b148061543e57506018601f81111561542957615428616dba565b5b82601f81111561543c5761543b616dba565b5b145b8061546d57506019601f81111561545857615457616dba565b5b82601f81111561546b5761546a616dba565b5b145b8061549c57506002601f81111561548757615486616dba565b5b82601f81111561549a57615499616dba565b5b145b9050919050565b5f6009601f8111156154b8576154b7616dba565b5b82601f8111156154cb576154ca616dba565b5b14806154fb5750600a601f8111156154e6576154e5616dba565b5b82601f8111156154f9576154f8616dba565b5b145b8061552a5750600b601f81111561551557615514616dba565b5b82601f81111561552857615527616dba565b5b145b806155595750600c601f81111561554457615543616dba565b5b82601f81111561555757615556616dba565b5b145b9050919050565b5f8160405160200161557291906181f9565b604051602081830303815290604052805190602001208360405160200161559991906181f9565b6040516020818303038152906040528051906020012014905092915050565b6155d282826155c7575f6155ca565b60015b60ff16611f0e565b5050565b60605f6155e283615d78565b90505f60ff168160ff160361562f576040518060400160405280600581526020017f65626f6f6c00000000000000000000000000000000000000000000000000000081525091505061587d565b600260ff168160ff160361567b576040518060400160405280600681526020017f6575696e7438000000000000000000000000000000000000000000000000000081525091505061587d565b600360ff168160ff16036156c7576040518060400160405280600781526020017f6575696e7431360000000000000000000000000000000000000000000000000081525091505061587d565b600460ff168160ff1603615713576040518060400160405280600781526020017f6575696e7433320000000000000000000000000000000000000000000000000081525091505061587d565b600560ff168160ff160361575f576040518060400160405280600781526020017f6575696e7436340000000000000000000000000000000000000000000000000081525091505061587d565b600660ff168160ff16036157ab576040518060400160405280600881526020017f6575696e7431323800000000000000000000000000000000000000000000000081525091505061587d565b600860ff168160ff16036157f7576040518060400160405280600881526020017f6575696e7432353600000000000000000000000000000000000000000000000081525091505061587d565b600760ff168160ff1603615843576040518060400160405280600881526020017f656164647265737300000000000000000000000000000000000000000000000081525091505061587d565b6040518060400160405280600781526020017f756e6b6e6f776e000000000000000000000000000000000000000000000000008152509150505b919050565b60605f600161589084615d94565b0190505f8167ffffffffffffffff8111156158ae576158ad616187565b5b6040519080825280601f01601f1916602001820160405280156158e05781602001600182028036833780820191505090505b5090505f82602083010190505b600115615941578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161593657615935616cc2565b5b0494505f85036158ed575b819350505050919050565b5f5f5f604184510361598c575f5f5f602087015192506040870151915060608701515f1a905061597e88828585615ee5565b95509550955050505061599a565b5f600285515f1b9250925092505b9250925092565b5f60038111156159b4576159b3616dba565b5b8260038111156159c7576159c6616dba565b5b0315615aff57600160038111156159e1576159e0616dba565b5b8260038111156159f4576159f3616dba565b5b03615a2b576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115615a3f57615a3e616dba565b5b826003811115615a5257615a51616dba565b5b03615a9657805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401615a8d919061636e565b60405180910390fd5b600380811115615aa957615aa8616dba565b5b826003811115615abc57615abb616dba565b5b03615afe57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401615af5919061821e565b60405180910390fd5b5b5050565b5f5f615b0e83615d78565b90505f5f821860ff1614915050919050565b60605f8390505f6002846002615b369190618237565b615b409190616d4c565b67ffffffffffffffff811115615b5957615b58616187565b5b6040519080825280601f01601f191660200182016040528015615b8b5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110615bc257615bc161700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110615c2557615c2461700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001856002615c639190618237565b615c6d9190616d4c565b90505b6001811115615d0c577f3031323334353637383961626364656600000000000000000000000000000000600f841660108110615caf57615cae61700d565b5b1a60f81b828281518110615cc657615cc561700d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c925080615d0590618278565b9050615c70565b505f8214615d535784846040517fe22e27eb000000000000000000000000000000000000000000000000000000008152600401615d4a92919061829f565b60405180910390fd5b809250505092915050565b615d7581615d6d615fcc615feb565b63ffffffff16565b50565b5f600880600160ff8016901c60ff16901b8316901c9050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615df0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381615de657615de5616cc2565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310615e2d576d04ee2d6d415b85acef81000000008381615e2357615e22616cc2565b5b0492506020810190505b662386f26fc100008310615e5c57662386f26fc100008381615e5257615e51616cc2565b5b0492506010810190505b6305f5e1008310615e85576305f5e1008381615e7b57615e7a616cc2565b5b0492506008810190505b6127108310615eaa576127108381615ea057615e9f616cc2565b5b0492506004810190505b60648310615ecd5760648381615ec357615ec2616cc2565b5b0492506002810190505b600a8310615edc576001810190505b80915050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115615f21575f600385925092509250615fc2565b5f6001888888886040515f8152602001604052604051615f4494939291906182c6565b6020604051602081039080840390855afa158015615f64573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603615fb5575f60015f5f1b93509350935050615fc2565b805f5f5f1b935093509350505b9450945094915050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b615ff6819050919050565b615ffe618309565b565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b61602381616011565b811461602d575f5ffd5b50565b5f8135905061603e8161601a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61606d82616044565b9050919050565b61607d81616063565b8114616087575f5ffd5b50565b5f8135905061609881616074565b92915050565b5f5f604083850312156160b4576160b3616009565b5b5f6160c185828601616030565b92505060206160d28582860161608a565b9150509250929050565b5f5f604083850312156160f2576160f1616009565b5b5f6160ff85828601616030565b925050602061611085828601616030565b9150509250929050565b5f60ff82169050919050565b61612f8161611a565b8114616139575f5ffd5b50565b5f8135905061614a81616126565b92915050565b6020811061615c575f5ffd5b50565b5f8135905061616d81616150565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6161bd82616177565b810181811067ffffffffffffffff821117156161dc576161db616187565b5b80604052505050565b5f6161ee616000565b90506161fa82826161b4565b919050565b5f67ffffffffffffffff82111561621957616218616187565b5b602082029050602081019050919050565b5f5ffd5b5f61624061623b846161ff565b6161e5565b905080838252602082019050602084028301858111156162635761626261622a565b5b835b8181101561628c57806162788882616030565b845260208401935050602081019050616265565b5050509392505050565b5f82601f8301126162aa576162a9616173565b5b81356162ba84826020860161622e565b91505092915050565b5f5f5f5f608085870312156162db576162da616009565b5b5f6162e88782880161613c565b94505060206162f98782880161615f565b935050604085013567ffffffffffffffff81111561631a5761631961600d565b5b61632687828801616296565b925050606085013567ffffffffffffffff8111156163475761634661600d565b5b61635387828801616296565b91505092959194509250565b61636881616011565b82525050565b5f6020820190506163815f83018461635f565b92915050565b5f6020828403121561639c5761639b616009565b5b5f6163a984828501616030565b91505092915050565b5f8115159050919050565b6163c6816163b2565b82525050565b5f6020820190506163df5f8301846163bd565b92915050565b6163ee81616063565b82525050565b5f6020820190506164075f8301846163e5565b92915050565b5f8160030b9050919050565b6164228161640d565b811461642c575f5ffd5b50565b5f8135905061643d81616419565b92915050565b5f5f6040838503121561645957616458616009565b5b5f6164668582860161642f565b92505060206164778582860161642f565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156164a7576164a6616187565b5b6164b082616177565b9050602081019050919050565b828183375f83830152505050565b5f6164dd6164d88461648d565b6161e5565b9050828152602081018484840111156164f9576164f8616489565b5b6165048482856164bd565b509392505050565b5f82601f8301126165205761651f616173565b5b81356165308482602086016164cb565b91505092915050565b5f6080828403121561654e5761654d616481565b5b61655860806161e5565b90505f61656784828501616030565b5f83015250602061657a8482850161613c565b602083015250604061658e8482850161613c565b604083015250606082013567ffffffffffffffff8111156165b2576165b1616485565b5b6165be8482850161650c565b60608301525092915050565b5f5f604083850312156165e0576165df616009565b5b5f83013567ffffffffffffffff8111156165fd576165fc61600d565b5b61660985828601616539565b925050602061661a8582860161608a565b9150509250929050565b5f6040820190506166375f83018561635f565b61664460208301846163bd565b9392505050565b5f67ffffffffffffffff82111561666557616664616187565b5b61666e82616177565b9050602081019050919050565b5f61668d6166888461664b565b6161e5565b9050828152602081018484840111156166a9576166a8616489565b5b6166b48482856164bd565b509392505050565b5f82601f8301126166d0576166cf616173565b5b81356166e084826020860161667b565b91505092915050565b5f5f5f60608486031215616700576166ff616009565b5b5f61670d86828701616030565b935050602084013567ffffffffffffffff81111561672e5761672d61600d565b5b61673a868287016166bc565b925050604084013567ffffffffffffffff81111561675b5761675a61600d565b5b616767868287016166bc565b9150509250925092565b5f6020828403121561678657616785616009565b5b5f6167938482850161642f565b91505092915050565b6167a5816163b2565b81146167af575f5ffd5b50565b5f813590506167c08161679c565b92915050565b5f602082840312156167db576167da616009565b5b5f6167e8848285016167b2565b91505092915050565b5f5f5f6060848603121561680857616807616009565b5b5f84013567ffffffffffffffff8111156168255761682461600d565b5b616831868287016166bc565b935050602061684286828701616030565b925050604061685386828701616030565b9150509250925092565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61688f8261685d565b6168998185616867565b93506168a9818560208601616877565b6168b281616177565b840191505092915050565b5f6020820190508181035f8301526168d58184616885565b905092915050565b5f5ffd5b5f5f83601f8401126168f6576168f5616173565b5b8235905067ffffffffffffffff811115616913576169126168dd565b5b60208301915083602082028301111561692f5761692e61622a565b5b9250929050565b5f5f5f5f6060858703121561694e5761694d616009565b5b5f61695b87828801616030565b945050602061696c87828801616030565b935050604085013567ffffffffffffffff81111561698d5761698c61600d565b5b616999878288016168e1565b925092505092959194509250565b5f5f5f606084860312156169be576169bd616009565b5b5f84013567ffffffffffffffff8111156169db576169da61600d565b5b6169e7868287016166bc565b93505060206169f886828701616030565b9250506040616a098682870161608a565b9150509250925092565b5f60208284031215616a2857616a27616009565b5b5f616a358482850161608a565b91505092915050565b5f67ffffffffffffffff82169050919050565b616a5a81616a3e565b8114616a64575f5ffd5b50565b5f81359050616a7581616a51565b92915050565b5f819050919050565b616a8d81616a7b565b8114616a97575f5ffd5b50565b5f81359050616aa881616a84565b92915050565b5f6101008284031215616ac457616ac3616481565b5b616acf6101006161e5565b90505f616ade8482850161608a565b5f830152506020616af184828501616a67565b6020830152506040616b058482850161608a565b6040830152506060616b1984828501616030565b6060830152506080616b2d8482850161608a565b60808301525060a0616b4184828501616a9a565b60a08301525060c082013567ffffffffffffffff811115616b6557616b64616485565b5b616b718482850161650c565b60c08301525060e082013567ffffffffffffffff811115616b9557616b94616485565b5b616ba18482850161650c565b60e08301525092915050565b5f5f60408385031215616bc357616bc2616009565b5b5f83013567ffffffffffffffff811115616be057616bdf61600d565b5b616bec85828601616aae565b9250506020616bfd85828601616030565b9150509250929050565b5f60208284031215616c1c57616c1b616009565b5b5f82013567ffffffffffffffff811115616c3957616c3861600d565b5b616c45848285016166bc565b91505092915050565b5f819050919050565b5f616c71616c6c616c6784616044565b616c4e565b616044565b9050919050565b5f616c8282616c57565b9050919050565b5f616c9382616c78565b9050919050565b616ca381616c89565b82525050565b5f602082019050616cbc5f830184616c9a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f616cf982616011565b9150616d0483616011565b925082616d1457616d13616cc2565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f616d5682616011565b9150616d6183616011565b9250828201905080821115616d7957616d78616d1f565b5b92915050565b5f616d8982616a3e565b9150616d9483616a3e565b9250828201905067ffffffffffffffff811115616db457616db3616d1f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050919050565b5f616e0a616e05616e0084616de7565b616c4e565b616011565b9050919050565b616e1a81616df0565b82525050565b5f6060820190508181035f830152616e388186616885565b9050616e47602083018561635f565b616e546040830184616e11565b949350505050565b5f606082019050616e6f5f83018661635f565b616e7c60208301856163e5565b616e8960408301846163e5565b949350505050565b616e9a8161640d565b82525050565b5f606082019050616eb35f830186616e91565b616ec06020830185616e91565b616ecd6040830184616e91565b949350505050565b5f604082019050616ee85f8301856163e5565b616ef560208301846163e5565b9392505050565b5f604082019050616f0f5f83018561635f565b616f1c60208301846163e5565b9392505050565b5f606082019050616f365f83018661635f565b8181036020830152616f488185616885565b90508181036040830152616f5c8184616885565b9050949350505050565b5f81519050616f748161679c565b92915050565b5f60208284031215616f8f57616f8e616009565b5b5f616f9c84828501616f66565b91505092915050565b7f4f7574206f6620626f756e6473000000000000000000000000000000000000005f82015250565b5f616fd9600d83616867565b9150616fe482616fa5565b602082019050919050565b5f6020820190508181035f83015261700681616fcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61706c81616011565b82525050565b5f61707d8383617063565b60208301905092915050565b5f602082019050919050565b5f61709f8261703a565b6170a98185617044565b93506170b483617054565b805f5b838110156170e45781516170cb8882617072565b97506170d683617089565b9250506001810190506170b7565b5085935050505092915050565b5f6040820190508181035f8301526171098185617095565b905061711860208301846163e5565b9392505050565b61712881616063565b82525050565b61713781616a3e565b82525050565b61714681616a7b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6171708261714c565b61717a8185617156565b935061718a818560208601616877565b61719381616177565b840191505092915050565b5f61010083015f8301516171b45f86018261711f565b5060208301516171c7602086018261712e565b5060408301516171da604086018261711f565b5060608301516171ed6060860182617063565b506080830151617200608086018261711f565b5060a083015161721360a086018261713d565b5060c083015184820360c086015261722b8282617166565b91505060e083015184820360e08601526172458282617166565b9150508091505092915050565b5f6040820190508181035f83015261726a818561719e565b9050617279602083018461635f565b9392505050565b5f61728a82616011565b915061729583616011565b92508282039050818111156172ad576172ac616d1f565b5b92915050565b5f819050919050565b5f6172d66172d16172cc846172b3565b616c4e565b616011565b9050919050565b6172e6816172bc565b82525050565b5f6060820190508181035f8301526173048186616885565b9050617313602083018561635f565b61732060408301846172dd565b949350505050565b5f819050919050565b5f61734b61734661734184617328565b616c4e565b616011565b9050919050565b61735b81617331565b82525050565b5f6060820190508181035f8301526173798186616885565b9050617388602083018561635f565b6173956040830184617352565b949350505050565b5f6173a78261611a565b915060ff82036173ba576173b9616d1f565b5b600182019050919050565b5f81905092915050565b5f6173d98261714c565b6173e381856173c5565b93506173f3818560208601616877565b80840191505092915050565b5f61740a82856173cf565b915061741682846173cf565b91508190509392505050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61746761746282617422565b61744d565b82525050565b5f61747882856173cf565b91506174848284617456565b6001820191508190509392505050565b5f819050919050565b5f6174b76174b26174ad84617494565b616c4e565b616011565b9050919050565b6174c78161749d565b82525050565b5f60a0820190506174e05f83018861635f565b81810360208301526174f28187616885565b9050617501604083018661635f565b61750e60608301856174be565b61751b60808301846174be565b9695505050505050565b5f60a0820190506175385f83018861635f565b818103602083015261754a8187616885565b9050617559604083018661635f565b617566606083018561635f565b61757360808301846174be565b9695505050505050565b5f60a0820190506175905f83018861635f565b81810360208301526175a28187616885565b90506175b1604083018661635f565b6175be606083018561635f565b6175cb608083018461635f565b9695505050505050565b5f819050919050565b6175ef6175ea82616011565b6175d5565b82525050565b5f8160f81b9050919050565b5f61760b826175f5565b9050919050565b61762361761e8261611a565b617601565b82525050565b5f8160601b9050919050565b5f61763f82617629565b9050919050565b5f61765082617635565b9050919050565b61766861766382616063565b617646565b82525050565b5f61767982886175de565b6020820191506176898287617612565b6001820191506176998286617612565b6001820191506176a98285617657565b6014820191506176b982846175de565b6020820191508190509695505050505050565b5f81905092915050565b5f6176e08261685d565b6176ea81856176cc565b93506176fa818560208601616877565b80840191505092915050565b7f202d3e2000000000000000000000000000000000000000000000000000000000815250565b5f61773782886176d6565b915061774382876176d6565b915061774f82866176d6565b915061775b82856176d6565b915061776682617706565b60048201915061777682846176d6565b91508190509695505050505050565b7f73656c65637400000000000000000000000000000000000000000000000000005f82015250565b5f6177b9600683616867565b91506177c482617785565b602082019050919050565b5f6060820190508181035f8301526177e6816177ad565b90506177f5602083018561635f565b6178026040830184616e11565b9392505050565b5f6020820190508181035f830152617820816177ad565b9050919050565b6178308161611a565b82525050565b5f6040820190506178495f830185617827565b6178566020830184617827565b9392505050565b5f6040820190508181035f8301526178758185616885565b90506178846020830184617827565b9392505050565b7f202a200000000000000000000000000000000000000000000000000000000000815250565b5f6178bc82856176d6565b91506178c78261788b565b6003820191506178d782846176d6565b91508190509392505050565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b5f61791482856176d6565b915061791f826178e3565b60038201915061792f82846176d6565b91508190509392505050565b7f202b200000000000000000000000000000000000000000000000000000000000815250565b5f61796c82856176d6565b91506179778261793b565b60038201915061798782846176d6565b91508190509392505050565b7f205e200000000000000000000000000000000000000000000000000000000000815250565b5f6179c482856176d6565b91506179cf82617993565b6003820191506179df82846176d6565b91508190509392505050565b7f2026200000000000000000000000000000000000000000000000000000000000815250565b5f617a1c82856176d6565b9150617a27826179eb565b600382019150617a3782846176d6565b91508190509392505050565b7f207c200000000000000000000000000000000000000000000000000000000000815250565b5f617a7482856176d6565b9150617a7f82617a43565b600382019150617a8f82846176d6565b91508190509392505050565b7f202f200000000000000000000000000000000000000000000000000000000000815250565b5f617acc82856176d6565b9150617ad782617a9b565b600382019150617ae782846176d6565b91508190509392505050565b7f2025200000000000000000000000000000000000000000000000000000000000815250565b5f617b2482856176d6565b9150617b2f82617af3565b600382019150617b3f82846176d6565b91508190509392505050565b7f203c3c2000000000000000000000000000000000000000000000000000000000815250565b5f617b7c82856176d6565b9150617b8782617b4b565b600482019150617b9782846176d6565b91508190509392505050565b7f203e3e2000000000000000000000000000000000000000000000000000000000815250565b5f617bd482856176d6565b9150617bdf82617ba3565b600482019150617bef82846176d6565b91508190509392505050565b7f203e3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c2c82856176d6565b9150617c3782617bfb565b600482019150617c4782846176d6565b91508190509392505050565b7f203c3d2000000000000000000000000000000000000000000000000000000000815250565b5f617c8482856176d6565b9150617c8f82617c53565b600482019150617c9f82846176d6565b91508190509392505050565b7f203c200000000000000000000000000000000000000000000000000000000000815250565b5f617cdc82856176d6565b9150617ce782617cab565b600382019150617cf782846176d6565b91508190509392505050565b7f203e200000000000000000000000000000000000000000000000000000000000815250565b5f617d3482856176d6565b9150617d3f82617d03565b600382019150617d4f82846176d6565b91508190509392505050565b7f6d696e2800000000000000000000000000000000000000000000000000000000815250565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b5f617dd782617d5b565b600482019150617de782856176d6565b9150617df282617d81565b600282019150617e0282846176d6565b9150617e0d82617da7565b6001820191508190509392505050565b7f6d61782800000000000000000000000000000000000000000000000000000000815250565b5f617e4d82617e1d565b600482019150617e5d82856176d6565b9150617e6882617d81565b600282019150617e7882846176d6565b9150617e8382617da7565b6001820191508190509392505050565b7f203d3d2000000000000000000000000000000000000000000000000000000000815250565b5f617ec482856176d6565b9150617ecf82617e93565b600482019150617edf82846176d6565b91508190509392505050565b7f20213d2000000000000000000000000000000000000000000000000000000000815250565b5f617f1c82856176d6565b9150617f2782617eeb565b600482019150617f3782846176d6565b91508190509392505050565b7f4648452e61734500000000000000000000000000000000000000000000000000815250565b5f617f7382617f43565b600782019150617f8382846176d6565b915081905092915050565b7f2800000000000000000000000000000000000000000000000000000000000000815250565b5f617fbf82856176d6565b9150617fca82617f8e565b600182019150617fda82846176d6565b9150617fe582617da7565b6001820191508190509392505050565b7f203f200000000000000000000000000000000000000000000000000000000000815250565b7f203a200000000000000000000000000000000000000000000000000000000000815250565b5f61804c82866176d6565b915061805782617ff5565b60038201915061806782856176d6565b91506180728261801b565b60038201915061808282846176d6565b9150819050949350505050565b7f2e2e000000000000000000000000000000000000000000000000000000000000815250565b7f295b000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f61810c82876176d6565b915061811782617f8e565b60018201915061812782866176d6565b91506181328261808f565b60028201915061814282856176d6565b915061814d826180b5565b60028201915061815d82846176d6565b9150618168826180db565b60018201915081905095945050505050565b7f20203d3e20200000000000000000000000000000000000000000000000000000815250565b5f6181ab82886176d6565b91506181b782876176d6565b91506181c382866176d6565b91506181cf82856176d6565b91506181da8261817a565b6006820191506181ea82846176d6565b91508190509695505050505050565b5f61820482846176d6565b915081905092915050565b61821881616a7b565b82525050565b5f6020820190506182315f83018461820f565b92915050565b5f61824182616011565b915061824c83616011565b925082820261825a81616011565b9150828204841483151761827157618270616d1f565b5b5092915050565b5f61828282616011565b91505f820361829457618293616d1f565b5b600182039050919050565b5f6040820190506182b25f83018561635f565b6182bf602083018461635f565b9392505050565b5f6080820190506182d95f83018761820f565b6182e66020830186617827565b6182f3604083018561820f565b618300606083018461820f565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea2646970667358221220b8072e56a1c8f4b8bd3f7decb9a6ae44bbaef10051334c835a7f3aa97465cd9264736f6c63430008210033"
1026
1027
  };
1027
1028
 
1028
1029
  // src/MockACL.ts
1029
1030
  var MockACLArtifact = {
1030
- "contractName": "MockACL",
1031
- "fixedAddress": "0x0000000000000000000000000000000000000400",
1032
- "abi": [
1031
+ contractName: "MockACL",
1032
+ fixedAddress: "0x0000000000000000000000000000000000000000",
1033
+ abi: [
1033
1034
  {
1034
- "type": "constructor",
1035
- "inputs": [],
1036
- "stateMutability": "nonpayable"
1035
+ type: "constructor",
1036
+ inputs: [],
1037
+ stateMutability: "nonpayable"
1037
1038
  },
1038
1039
  {
1039
- "type": "function",
1040
- "name": "TASK_MANAGER_ADDRESS_",
1041
- "inputs": [],
1042
- "outputs": [
1040
+ type: "function",
1041
+ name: "TASK_MANAGER_ADDRESS_",
1042
+ inputs: [],
1043
+ outputs: [
1043
1044
  {
1044
- "name": "",
1045
- "type": "address",
1046
- "internalType": "address"
1045
+ name: "",
1046
+ type: "address",
1047
+ internalType: "address"
1047
1048
  }
1048
1049
  ],
1049
- "stateMutability": "view"
1050
+ stateMutability: "view"
1050
1051
  },
1051
1052
  {
1052
- "type": "function",
1053
- "name": "allow",
1054
- "inputs": [
1053
+ type: "function",
1054
+ name: "allow",
1055
+ inputs: [
1055
1056
  {
1056
- "name": "handle",
1057
- "type": "uint256",
1058
- "internalType": "uint256"
1057
+ name: "handle",
1058
+ type: "uint256",
1059
+ internalType: "uint256"
1059
1060
  },
1060
1061
  {
1061
- "name": "account",
1062
- "type": "address",
1063
- "internalType": "address"
1062
+ name: "account",
1063
+ type: "address",
1064
+ internalType: "address"
1064
1065
  },
1065
1066
  {
1066
- "name": "requester",
1067
- "type": "address",
1068
- "internalType": "address"
1067
+ name: "requester",
1068
+ type: "address",
1069
+ internalType: "address"
1069
1070
  }
1070
1071
  ],
1071
- "outputs": [],
1072
- "stateMutability": "nonpayable"
1072
+ outputs: [],
1073
+ stateMutability: "nonpayable"
1073
1074
  },
1074
1075
  {
1075
- "type": "function",
1076
- "name": "allowForDecryption",
1077
- "inputs": [
1076
+ type: "function",
1077
+ name: "allowForDecryption",
1078
+ inputs: [
1078
1079
  {
1079
- "name": "handlesList",
1080
- "type": "uint256[]",
1081
- "internalType": "uint256[]"
1080
+ name: "handlesList",
1081
+ type: "uint256[]",
1082
+ internalType: "uint256[]"
1082
1083
  },
1083
1084
  {
1084
- "name": "requester",
1085
- "type": "address",
1086
- "internalType": "address"
1085
+ name: "requester",
1086
+ type: "address",
1087
+ internalType: "address"
1087
1088
  }
1088
1089
  ],
1089
- "outputs": [],
1090
- "stateMutability": "nonpayable"
1090
+ outputs: [],
1091
+ stateMutability: "nonpayable"
1091
1092
  },
1092
1093
  {
1093
- "type": "function",
1094
- "name": "allowGlobal",
1095
- "inputs": [
1094
+ type: "function",
1095
+ name: "allowGlobal",
1096
+ inputs: [
1096
1097
  {
1097
- "name": "handle",
1098
- "type": "uint256",
1099
- "internalType": "uint256"
1098
+ name: "handle",
1099
+ type: "uint256",
1100
+ internalType: "uint256"
1100
1101
  },
1101
1102
  {
1102
- "name": "requester",
1103
- "type": "address",
1104
- "internalType": "address"
1103
+ name: "requester",
1104
+ type: "address",
1105
+ internalType: "address"
1105
1106
  }
1106
1107
  ],
1107
- "outputs": [],
1108
- "stateMutability": "nonpayable"
1108
+ outputs: [],
1109
+ stateMutability: "nonpayable"
1109
1110
  },
1110
1111
  {
1111
- "type": "function",
1112
- "name": "allowTransient",
1113
- "inputs": [
1112
+ type: "function",
1113
+ name: "allowTransient",
1114
+ inputs: [
1114
1115
  {
1115
- "name": "handle",
1116
- "type": "uint256",
1117
- "internalType": "uint256"
1116
+ name: "handle",
1117
+ type: "uint256",
1118
+ internalType: "uint256"
1118
1119
  },
1119
1120
  {
1120
- "name": "account",
1121
- "type": "address",
1122
- "internalType": "address"
1121
+ name: "account",
1122
+ type: "address",
1123
+ internalType: "address"
1123
1124
  },
1124
1125
  {
1125
- "name": "requester",
1126
- "type": "address",
1127
- "internalType": "address"
1126
+ name: "requester",
1127
+ type: "address",
1128
+ internalType: "address"
1128
1129
  }
1129
1130
  ],
1130
- "outputs": [],
1131
- "stateMutability": "nonpayable"
1131
+ outputs: [],
1132
+ stateMutability: "nonpayable"
1132
1133
  },
1133
1134
  {
1134
- "type": "function",
1135
- "name": "allowedOnBehalf",
1136
- "inputs": [
1135
+ type: "function",
1136
+ name: "allowedOnBehalf",
1137
+ inputs: [
1137
1138
  {
1138
- "name": "delegatee",
1139
- "type": "address",
1140
- "internalType": "address"
1139
+ name: "delegatee",
1140
+ type: "address",
1141
+ internalType: "address"
1141
1142
  },
1142
1143
  {
1143
- "name": "handle",
1144
- "type": "uint256",
1145
- "internalType": "uint256"
1144
+ name: "handle",
1145
+ type: "uint256",
1146
+ internalType: "uint256"
1146
1147
  },
1147
1148
  {
1148
- "name": "contractAddress",
1149
- "type": "address",
1150
- "internalType": "address"
1149
+ name: "contractAddress",
1150
+ type: "address",
1151
+ internalType: "address"
1151
1152
  },
1152
1153
  {
1153
- "name": "account",
1154
- "type": "address",
1155
- "internalType": "address"
1154
+ name: "account",
1155
+ type: "address",
1156
+ internalType: "address"
1156
1157
  }
1157
1158
  ],
1158
- "outputs": [
1159
+ outputs: [
1159
1160
  {
1160
- "name": "",
1161
- "type": "bool",
1162
- "internalType": "bool"
1161
+ name: "",
1162
+ type: "bool",
1163
+ internalType: "bool"
1163
1164
  }
1164
1165
  ],
1165
- "stateMutability": "view"
1166
+ stateMutability: "view"
1166
1167
  },
1167
1168
  {
1168
- "type": "function",
1169
- "name": "allowedTransient",
1170
- "inputs": [
1169
+ type: "function",
1170
+ name: "allowedTransient",
1171
+ inputs: [
1171
1172
  {
1172
- "name": "handle",
1173
- "type": "uint256",
1174
- "internalType": "uint256"
1173
+ name: "handle",
1174
+ type: "uint256",
1175
+ internalType: "uint256"
1175
1176
  },
1176
1177
  {
1177
- "name": "account",
1178
- "type": "address",
1179
- "internalType": "address"
1178
+ name: "account",
1179
+ type: "address",
1180
+ internalType: "address"
1180
1181
  }
1181
1182
  ],
1182
- "outputs": [
1183
+ outputs: [
1183
1184
  {
1184
- "name": "",
1185
- "type": "bool",
1186
- "internalType": "bool"
1185
+ name: "",
1186
+ type: "bool",
1187
+ internalType: "bool"
1187
1188
  }
1188
1189
  ],
1189
- "stateMutability": "view"
1190
+ stateMutability: "view"
1190
1191
  },
1191
1192
  {
1192
- "type": "function",
1193
- "name": "cleanTransientStorage",
1194
- "inputs": [],
1195
- "outputs": [],
1196
- "stateMutability": "nonpayable"
1193
+ type: "function",
1194
+ name: "cleanTransientStorage",
1195
+ inputs: [],
1196
+ outputs: [],
1197
+ stateMutability: "nonpayable"
1197
1198
  },
1198
1199
  {
1199
- "type": "function",
1200
- "name": "delegateAccount",
1201
- "inputs": [
1200
+ type: "function",
1201
+ name: "delegateAccount",
1202
+ inputs: [
1202
1203
  {
1203
- "name": "delegatee",
1204
- "type": "address",
1205
- "internalType": "address"
1204
+ name: "delegatee",
1205
+ type: "address",
1206
+ internalType: "address"
1206
1207
  },
1207
1208
  {
1208
- "name": "delegateeContract",
1209
- "type": "address",
1210
- "internalType": "address"
1209
+ name: "delegateeContract",
1210
+ type: "address",
1211
+ internalType: "address"
1211
1212
  }
1212
1213
  ],
1213
- "outputs": [],
1214
- "stateMutability": "nonpayable"
1214
+ outputs: [],
1215
+ stateMutability: "nonpayable"
1215
1216
  },
1216
1217
  {
1217
- "type": "function",
1218
- "name": "eip712Domain",
1219
- "inputs": [],
1220
- "outputs": [
1218
+ type: "function",
1219
+ name: "eip712Domain",
1220
+ inputs: [],
1221
+ outputs: [
1221
1222
  {
1222
- "name": "fields",
1223
- "type": "bytes1",
1224
- "internalType": "bytes1"
1223
+ name: "fields",
1224
+ type: "bytes1",
1225
+ internalType: "bytes1"
1225
1226
  },
1226
1227
  {
1227
- "name": "name",
1228
- "type": "string",
1229
- "internalType": "string"
1228
+ name: "name",
1229
+ type: "string",
1230
+ internalType: "string"
1230
1231
  },
1231
1232
  {
1232
- "name": "version",
1233
- "type": "string",
1234
- "internalType": "string"
1233
+ name: "version",
1234
+ type: "string",
1235
+ internalType: "string"
1235
1236
  },
1236
1237
  {
1237
- "name": "chainId",
1238
- "type": "uint256",
1239
- "internalType": "uint256"
1238
+ name: "chainId",
1239
+ type: "uint256",
1240
+ internalType: "uint256"
1240
1241
  },
1241
1242
  {
1242
- "name": "verifyingContract",
1243
- "type": "address",
1244
- "internalType": "address"
1243
+ name: "verifyingContract",
1244
+ type: "address",
1245
+ internalType: "address"
1245
1246
  },
1246
1247
  {
1247
- "name": "salt",
1248
- "type": "bytes32",
1249
- "internalType": "bytes32"
1248
+ name: "salt",
1249
+ type: "bytes32",
1250
+ internalType: "bytes32"
1250
1251
  },
1251
1252
  {
1252
- "name": "extensions",
1253
- "type": "uint256[]",
1254
- "internalType": "uint256[]"
1253
+ name: "extensions",
1254
+ type: "uint256[]",
1255
+ internalType: "uint256[]"
1255
1256
  }
1256
1257
  ],
1257
- "stateMutability": "view"
1258
+ stateMutability: "view"
1258
1259
  },
1259
1260
  {
1260
- "type": "function",
1261
- "name": "exists",
1262
- "inputs": [],
1263
- "outputs": [
1261
+ type: "function",
1262
+ name: "exists",
1263
+ inputs: [],
1264
+ outputs: [
1264
1265
  {
1265
- "name": "",
1266
- "type": "bool",
1267
- "internalType": "bool"
1266
+ name: "",
1267
+ type: "bool",
1268
+ internalType: "bool"
1268
1269
  }
1269
1270
  ],
1270
- "stateMutability": "pure"
1271
+ stateMutability: "pure"
1271
1272
  },
1272
1273
  {
1273
- "type": "function",
1274
- "name": "getTaskManagerAddress",
1275
- "inputs": [],
1276
- "outputs": [
1274
+ type: "function",
1275
+ name: "getTaskManagerAddress",
1276
+ inputs: [],
1277
+ outputs: [
1277
1278
  {
1278
- "name": "",
1279
- "type": "address",
1280
- "internalType": "address"
1279
+ name: "",
1280
+ type: "address",
1281
+ internalType: "address"
1281
1282
  }
1282
1283
  ],
1283
- "stateMutability": "view"
1284
+ stateMutability: "view"
1284
1285
  },
1285
1286
  {
1286
- "type": "function",
1287
- "name": "getVersion",
1288
- "inputs": [],
1289
- "outputs": [
1287
+ type: "function",
1288
+ name: "getVersion",
1289
+ inputs: [],
1290
+ outputs: [
1290
1291
  {
1291
- "name": "",
1292
- "type": "string",
1293
- "internalType": "string"
1292
+ name: "",
1293
+ type: "string",
1294
+ internalType: "string"
1294
1295
  }
1295
1296
  ],
1296
- "stateMutability": "pure"
1297
+ stateMutability: "pure"
1297
1298
  },
1298
1299
  {
1299
- "type": "function",
1300
- "name": "globalAllowed",
1301
- "inputs": [
1300
+ type: "function",
1301
+ name: "globalAllowed",
1302
+ inputs: [
1302
1303
  {
1303
- "name": "handle",
1304
- "type": "uint256",
1305
- "internalType": "uint256"
1304
+ name: "handle",
1305
+ type: "uint256",
1306
+ internalType: "uint256"
1306
1307
  }
1307
1308
  ],
1308
- "outputs": [
1309
+ outputs: [
1309
1310
  {
1310
- "name": "",
1311
- "type": "bool",
1312
- "internalType": "bool"
1311
+ name: "",
1312
+ type: "bool",
1313
+ internalType: "bool"
1313
1314
  }
1314
1315
  ],
1315
- "stateMutability": "view"
1316
+ stateMutability: "view"
1316
1317
  },
1317
1318
  {
1318
- "type": "function",
1319
- "name": "hashTypedDataV4",
1320
- "inputs": [
1319
+ type: "function",
1320
+ name: "hashTypedDataV4",
1321
+ inputs: [
1321
1322
  {
1322
- "name": "structHash",
1323
- "type": "bytes32",
1324
- "internalType": "bytes32"
1323
+ name: "structHash",
1324
+ type: "bytes32",
1325
+ internalType: "bytes32"
1325
1326
  }
1326
1327
  ],
1327
- "outputs": [
1328
+ outputs: [
1328
1329
  {
1329
- "name": "",
1330
- "type": "bytes32",
1331
- "internalType": "bytes32"
1330
+ name: "",
1331
+ type: "bytes32",
1332
+ internalType: "bytes32"
1332
1333
  }
1333
1334
  ],
1334
- "stateMutability": "view"
1335
+ stateMutability: "view"
1335
1336
  },
1336
1337
  {
1337
- "type": "function",
1338
- "name": "isAllowed",
1339
- "inputs": [
1338
+ type: "function",
1339
+ name: "isAllowed",
1340
+ inputs: [
1340
1341
  {
1341
- "name": "handle",
1342
- "type": "uint256",
1343
- "internalType": "uint256"
1342
+ name: "handle",
1343
+ type: "uint256",
1344
+ internalType: "uint256"
1344
1345
  },
1345
1346
  {
1346
- "name": "account",
1347
- "type": "address",
1348
- "internalType": "address"
1347
+ name: "account",
1348
+ type: "address",
1349
+ internalType: "address"
1349
1350
  }
1350
1351
  ],
1351
- "outputs": [
1352
+ outputs: [
1352
1353
  {
1353
- "name": "",
1354
- "type": "bool",
1355
- "internalType": "bool"
1354
+ name: "",
1355
+ type: "bool",
1356
+ internalType: "bool"
1356
1357
  }
1357
1358
  ],
1358
- "stateMutability": "view"
1359
+ stateMutability: "view"
1359
1360
  },
1360
1361
  {
1361
- "type": "function",
1362
- "name": "isAllowedForDecryption",
1363
- "inputs": [
1362
+ type: "function",
1363
+ name: "isAllowedForDecryption",
1364
+ inputs: [
1364
1365
  {
1365
- "name": "handle",
1366
- "type": "uint256",
1367
- "internalType": "uint256"
1366
+ name: "handle",
1367
+ type: "uint256",
1368
+ internalType: "uint256"
1368
1369
  }
1369
1370
  ],
1370
- "outputs": [
1371
+ outputs: [
1371
1372
  {
1372
- "name": "",
1373
- "type": "bool",
1374
- "internalType": "bool"
1373
+ name: "",
1374
+ type: "bool",
1375
+ internalType: "bool"
1375
1376
  }
1376
1377
  ],
1377
- "stateMutability": "view"
1378
+ stateMutability: "view"
1378
1379
  },
1379
1380
  {
1380
- "type": "function",
1381
- "name": "isAllowedWithPermission",
1382
- "inputs": [
1381
+ type: "function",
1382
+ name: "isAllowedWithPermission",
1383
+ inputs: [
1383
1384
  {
1384
- "name": "permission",
1385
- "type": "tuple",
1386
- "internalType": "struct Permission",
1387
- "components": [
1385
+ name: "permission",
1386
+ type: "tuple",
1387
+ internalType: "struct Permission",
1388
+ components: [
1388
1389
  {
1389
- "name": "issuer",
1390
- "type": "address",
1391
- "internalType": "address"
1390
+ name: "issuer",
1391
+ type: "address",
1392
+ internalType: "address"
1392
1393
  },
1393
1394
  {
1394
- "name": "expiration",
1395
- "type": "uint64",
1396
- "internalType": "uint64"
1395
+ name: "expiration",
1396
+ type: "uint64",
1397
+ internalType: "uint64"
1397
1398
  },
1398
1399
  {
1399
- "name": "recipient",
1400
- "type": "address",
1401
- "internalType": "address"
1400
+ name: "recipient",
1401
+ type: "address",
1402
+ internalType: "address"
1402
1403
  },
1403
1404
  {
1404
- "name": "validatorId",
1405
- "type": "uint256",
1406
- "internalType": "uint256"
1405
+ name: "validatorId",
1406
+ type: "uint256",
1407
+ internalType: "uint256"
1407
1408
  },
1408
1409
  {
1409
- "name": "validatorContract",
1410
- "type": "address",
1411
- "internalType": "address"
1410
+ name: "validatorContract",
1411
+ type: "address",
1412
+ internalType: "address"
1412
1413
  },
1413
1414
  {
1414
- "name": "sealingKey",
1415
- "type": "bytes32",
1416
- "internalType": "bytes32"
1415
+ name: "sealingKey",
1416
+ type: "bytes32",
1417
+ internalType: "bytes32"
1417
1418
  },
1418
1419
  {
1419
- "name": "issuerSignature",
1420
- "type": "bytes",
1421
- "internalType": "bytes"
1420
+ name: "issuerSignature",
1421
+ type: "bytes",
1422
+ internalType: "bytes"
1422
1423
  },
1423
1424
  {
1424
- "name": "recipientSignature",
1425
- "type": "bytes",
1426
- "internalType": "bytes"
1425
+ name: "recipientSignature",
1426
+ type: "bytes",
1427
+ internalType: "bytes"
1427
1428
  }
1428
1429
  ]
1429
1430
  },
1430
1431
  {
1431
- "name": "handle",
1432
- "type": "uint256",
1433
- "internalType": "uint256"
1432
+ name: "handle",
1433
+ type: "uint256",
1434
+ internalType: "uint256"
1434
1435
  }
1435
1436
  ],
1436
- "outputs": [
1437
+ outputs: [
1437
1438
  {
1438
- "name": "",
1439
- "type": "bool",
1440
- "internalType": "bool"
1439
+ name: "",
1440
+ type: "bool",
1441
+ internalType: "bool"
1441
1442
  }
1442
1443
  ],
1443
- "stateMutability": "view"
1444
+ stateMutability: "view"
1444
1445
  },
1445
1446
  {
1446
- "type": "function",
1447
- "name": "persistAllowed",
1448
- "inputs": [
1447
+ type: "function",
1448
+ name: "persistAllowed",
1449
+ inputs: [
1449
1450
  {
1450
- "name": "handle",
1451
- "type": "uint256",
1452
- "internalType": "uint256"
1451
+ name: "handle",
1452
+ type: "uint256",
1453
+ internalType: "uint256"
1453
1454
  },
1454
1455
  {
1455
- "name": "account",
1456
- "type": "address",
1457
- "internalType": "address"
1456
+ name: "account",
1457
+ type: "address",
1458
+ internalType: "address"
1458
1459
  }
1459
1460
  ],
1460
- "outputs": [
1461
+ outputs: [
1461
1462
  {
1462
- "name": "",
1463
- "type": "bool",
1464
- "internalType": "bool"
1463
+ name: "",
1464
+ type: "bool",
1465
+ internalType: "bool"
1465
1466
  }
1466
1467
  ],
1467
- "stateMutability": "view"
1468
+ stateMutability: "view"
1468
1469
  },
1469
1470
  {
1470
- "type": "event",
1471
- "name": "AllowedForDecryption",
1472
- "inputs": [
1471
+ type: "event",
1472
+ name: "AllowedForDecryption",
1473
+ inputs: [
1473
1474
  {
1474
- "name": "handlesList",
1475
- "type": "uint256[]",
1476
- "indexed": false,
1477
- "internalType": "uint256[]"
1475
+ name: "handlesList",
1476
+ type: "uint256[]",
1477
+ indexed: false,
1478
+ internalType: "uint256[]"
1478
1479
  }
1479
1480
  ],
1480
- "anonymous": false
1481
+ anonymous: false
1481
1482
  },
1482
1483
  {
1483
- "type": "event",
1484
- "name": "EIP712DomainChanged",
1485
- "inputs": [],
1486
- "anonymous": false
1484
+ type: "event",
1485
+ name: "EIP712DomainChanged",
1486
+ inputs: [],
1487
+ anonymous: false
1487
1488
  },
1488
1489
  {
1489
- "type": "event",
1490
- "name": "NewDelegation",
1491
- "inputs": [
1490
+ type: "event",
1491
+ name: "NewDelegation",
1492
+ inputs: [
1492
1493
  {
1493
- "name": "sender",
1494
- "type": "address",
1495
- "indexed": true,
1496
- "internalType": "address"
1494
+ name: "sender",
1495
+ type: "address",
1496
+ indexed: true,
1497
+ internalType: "address"
1497
1498
  },
1498
1499
  {
1499
- "name": "delegatee",
1500
- "type": "address",
1501
- "indexed": true,
1502
- "internalType": "address"
1500
+ name: "delegatee",
1501
+ type: "address",
1502
+ indexed: true,
1503
+ internalType: "address"
1503
1504
  },
1504
1505
  {
1505
- "name": "contractAddress",
1506
- "type": "address",
1507
- "indexed": true,
1508
- "internalType": "address"
1506
+ name: "contractAddress",
1507
+ type: "address",
1508
+ indexed: true,
1509
+ internalType: "address"
1509
1510
  }
1510
1511
  ],
1511
- "anonymous": false
1512
+ anonymous: false
1512
1513
  },
1513
1514
  {
1514
- "type": "error",
1515
- "name": "AlreadyDelegated",
1516
- "inputs": []
1515
+ type: "error",
1516
+ name: "AlreadyDelegated",
1517
+ inputs: []
1517
1518
  },
1518
1519
  {
1519
- "type": "error",
1520
- "name": "DirectAllowForbidden",
1521
- "inputs": [
1520
+ type: "error",
1521
+ name: "DirectAllowForbidden",
1522
+ inputs: [
1522
1523
  {
1523
- "name": "sender",
1524
- "type": "address",
1525
- "internalType": "address"
1524
+ name: "sender",
1525
+ type: "address",
1526
+ internalType: "address"
1526
1527
  }
1527
1528
  ]
1528
1529
  },
1529
1530
  {
1530
- "type": "error",
1531
- "name": "InvalidShortString",
1532
- "inputs": []
1531
+ type: "error",
1532
+ name: "InvalidShortString",
1533
+ inputs: []
1533
1534
  },
1534
1535
  {
1535
- "type": "error",
1536
- "name": "PermissionInvalid_Disabled",
1537
- "inputs": []
1536
+ type: "error",
1537
+ name: "PermissionInvalid_Disabled",
1538
+ inputs: []
1538
1539
  },
1539
1540
  {
1540
- "type": "error",
1541
- "name": "PermissionInvalid_Expired",
1542
- "inputs": []
1541
+ type: "error",
1542
+ name: "PermissionInvalid_Expired",
1543
+ inputs: []
1543
1544
  },
1544
1545
  {
1545
- "type": "error",
1546
- "name": "PermissionInvalid_IssuerSignature",
1547
- "inputs": []
1546
+ type: "error",
1547
+ name: "PermissionInvalid_IssuerSignature",
1548
+ inputs: []
1548
1549
  },
1549
1550
  {
1550
- "type": "error",
1551
- "name": "PermissionInvalid_RecipientSignature",
1552
- "inputs": []
1551
+ type: "error",
1552
+ name: "PermissionInvalid_RecipientSignature",
1553
+ inputs: []
1553
1554
  },
1554
1555
  {
1555
- "type": "error",
1556
- "name": "SenderCannotBeDelegateeAddress",
1557
- "inputs": []
1556
+ type: "error",
1557
+ name: "SenderCannotBeDelegateeAddress",
1558
+ inputs: []
1558
1559
  },
1559
1560
  {
1560
- "type": "error",
1561
- "name": "SenderNotAllowed",
1562
- "inputs": [
1561
+ type: "error",
1562
+ name: "SenderNotAllowed",
1563
+ inputs: [
1563
1564
  {
1564
- "name": "sender",
1565
- "type": "address",
1566
- "internalType": "address"
1565
+ name: "sender",
1566
+ type: "address",
1567
+ internalType: "address"
1567
1568
  }
1568
1569
  ]
1569
1570
  },
1570
1571
  {
1571
- "type": "error",
1572
- "name": "StringTooLong",
1573
- "inputs": [
1572
+ type: "error",
1573
+ name: "StringTooLong",
1574
+ inputs: [
1574
1575
  {
1575
- "name": "str",
1576
- "type": "string",
1577
- "internalType": "string"
1576
+ name: "str",
1577
+ type: "string",
1578
+ internalType: "string"
1578
1579
  }
1579
1580
  ]
1580
1581
  }
1581
1582
  ],
1582
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061011f575f3560e01c80636330a709116100ab57806384b0196e1161006f57806384b0196e1461030557806394d9184c14610329578063a8b7010014610359578063ae79f04a14610375578063ccd9a7cd146103a55761011f565b80636330a7091461024f57806365ce8df71461027f57806379a3a7fb1461029d5780637a9a598e146102b9578063846cd433146102e95761011f565b80633c3839ba116100f25780633c3839ba14610199578063484de822146101b55780634980f288146101d157806351b8fd20146102015780635faa299a1461021f5761011f565b80630d8e6e2c14610123578063267c4ae41461014157806335334c231461015f57806337e6b44f14610169575b5f5ffd5b61012b6103d5565b6040516101389190611ea8565b60405180910390f35b610149610450565b6040516101569190611ee2565b60405180910390f35b610167610458565b005b610183600480360381019061017e9190611f99565b610509565b6040516101909190611ee2565b60405180910390f35b6101b360048036038101906101ae9190612117565b610579565b005b6101cf60048036038101906101ca9190612171565b6106fa565b005b6101eb60048036038101906101e691906121f4565b61085b565b6040516101f8919061222e565b60405180910390f35b61020961086c565b6040516102169190612256565b60405180910390f35b61023960048036038101906102349190611f99565b610884565b6040516102469190611ee2565b60405180910390f35b6102696004803603810190610264919061226f565b6108b8565b6040516102769190611ee2565b60405180910390f35b6102876108ec565b6040516102949190612256565b60405180910390f35b6102b760048036038101906102b29190612171565b610907565b005b6102d360048036038101906102ce9190611f99565b610a4d565b6040516102e09190611ee2565b60405180910390f35b61030360048036038101906102fe9190611f99565b610a8a565b005b61030d610b93565b604051610320979695949392919061239a565b60405180910390f35b610343600480360381019061033e919061226f565b610c38565b6040516103509190611ee2565b60405180910390f35b610373600480360381019061036e919061241c565b610c6b565b005b61038f600480360381019061038a919061264e565b610f9b565b60405161039c9190611ee2565b60405180910390f35b6103bf60048036038101906103ba91906126a8565b6111f2565b6040516103cc9190611ee2565b60405180910390f35b60606040518060400160405280600381526020017f41434c00000000000000000000000000000000000000000000000000000000008152506104165f611391565b6104206001611391565b6104295f611391565b60405160200161043c94939291906127da565b604051602081830303815290604052905090565b5f6001905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104dc57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016104d39190612256565b60405180910390fd5b5f5c5f5f5d6001810160015b8181101561050457805c5f825d5f815d506001810190506104e8565b505050565b5f5f61051361145b565b9050806001015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105fd57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016105f49190612256565b60405180910390fd5b5f825190505f61060b61145b565b90505f5f90505b828110156106bc575f85828151811061062e5761062d612838565b5b602002602001015190506106428186610884565b61068357846040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161067a9190612256565b60405180910390fd5b6001836002015f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550508080600101915050610612565b507f2fd616621b8415a2efb27b224024340ac767797553ce6fdf4c1adefd160504c6846040516106ec9190612865565b60405180910390a150505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461077e57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016107759190612256565b60405180910390fd5b6107888382610884565b1580156107d5575073ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561081757806040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161080e9190612256565b60405180910390fd5b5f838360405160200161082b9291906128ea565b6040516020818303038152906040528051906020012090506001815d5f5c6001810182815d805f5d505050505050565b5f610865826114c1565b9050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d981565b5f61088f8383610a4d565b806108a0575061089f8383610509565b5b806108b057506108af83610c38565b5b905092915050565b5f5f6108c261145b565b9050806002015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d9905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098b57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016109829190612256565b60405180910390fd5b6109958382610884565b6109d657806040517fd0d259760000000000000000000000000000000000000000000000000000000081526004016109cd9190612256565b60405180910390fd5b5f6109df61145b565b90506001816001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b5f5f5f8484604051602001610a639291906128ea565b604051602081830303815290604052805190602001209050805c9150819250505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0e57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610b059190612256565b60405180910390fd5b610b188282610884565b610b5957806040517fd0d25976000000000000000000000000000000000000000000000000000000008152600401610b509190612256565b60405180910390fd5b5f610b6261145b565b90506001815f015f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f6060805f5f5f6060610ba46114da565b610bac611514565b46305f5f1b5f67ffffffffffffffff811115610bcb57610bca611fdb565b5b604051908082528060200260200182016040528015610bf95781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f5f610c4261145b565b9050805f015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cef57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610ce69190612256565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d54576040517f30dc920300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d5d61145b565b9050806003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610e58576040517fd186046800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff03b7c0d4879b0bcbbf440794871f139c96fd13a145a8172b33b9cab5fa2830a60405160405180910390a4505050565b5f8242816020015167ffffffffffffffff161015610fe5576040517fed0764a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611007815f0151610ffd610ff88461154f565b6114c1565b8360c001516115a8565b61103d576040517f4c40eccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff161415801561109d575061109b816040015161109161108c84611654565b6114c1565b8360e001516115a8565b155b156110d4576040517f8e143bf700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81606001511415801561111857505f73ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff1614155b80156111a55750806080015173ffffffffffffffffffffffffffffffffffffffff1663b63391e8825f015183606001516040518363ffffffff1660e01b8152600401611165929190612915565b602060405180830381865afa158015611180573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a49190612966565b5b156111dc576040517fcbd3a96600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e983855f0151610884565b91505092915050565b5f5f6111fc61145b565b9050806001015f8681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156112bc5750806001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156113865750806003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b915050949350505050565b60605f600161139f846116b6565b0190505f8167ffffffffffffffff8111156113bd576113bc611fdb565b5b6040519080825280601f01601f1916602001820160405280156113ef5781602001600182028036833780820191505090505b5090505f82602083010190505b600115611450578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161144557611444612991565b5b0494505f85036113fc575b819350505050919050565b5f5f60ff5f1b1960017fc4eb438ffad04c606bb4f9c3576c0f142d5dc3782731029ea1ab95b6483220115f1c61149191906129eb565b6040516020016114a19190612a1e565b604051602081830303815290604052805190602001201690508091505090565b5f6114d36114cd611807565b836118bd565b9050919050565b606061150f5f7f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b606061154a60017f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b5f5f73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff160361159757611590826119aa565b90506115a3565b6115a082611a1c565b90505b919050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff163b0361163f575f5f6115d38585611a88565b50915091505f60038111156115eb576115ea612a37565b5b8160038111156115fe576115fd612a37565b5b14801561163657508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9250505061164d565b61164a848484611add565b90505b9392505050565b5f7f82af07a6c9eb6bb31a0c86f7f5cad0039589750ad5b4b925ed5741f7ad4e8d4b8260a001518360c001518051906020012060405160200161169993929190612a64565b604051602081830303815290604052805190602001209050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611712577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161170857611707612991565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061174f576d04ee2d6d415b85acef8100000000838161174557611744612991565b5b0492506020810190505b662386f26fc10000831061177e57662386f26fc10000838161177457611773612991565b5b0492506010810190505b6305f5e10083106117a7576305f5e100838161179d5761179c612991565b5b0492506008810190505b61271083106117cc5761271083816117c2576117c1612991565b5b0492506004810190505b606483106117ef57606483816117e5576117e4612991565b5b0492506002810190505b600a83106117fe576001810190505b80915050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561188257507f000000000000000000000000000000000000000000000000000000000000000046145b156118af577f000000000000000000000000000000000000000000000000000000000000000090506118ba565b6118b7611bfc565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b606060ff5f1b83146119195761191283611c91565b90506119a4565b81805461192590612ac6565b80601f016020809104026020016040519081016040528092919081815260200182805461195190612ac6565b801561199c5780601f106119735761010080835404028352916020019161199c565b820191905f5260205f20905b81548152906001019060200180831161197f57829003601f168201915b505050505090505b92915050565b5f7f0ce0d938c38f948b8f9cf16098cd15ec62de132c8d422719ad270c5e2a101102825f015183602001518460400151856060015186608001518760a001516040516020016119ff9796959493929190612b05565b604051602081830303815290604052805190602001209050919050565b5f7f8549e986c64faf9b741179c61561f9d39f337cf9739f86178d84dabc6ca4cad5825f01518360200151846040015185606001518660800151604051602001611a6b96959493929190612b72565b604051602081830303815290604052805190602001209050919050565b5f5f5f6041845103611ac8575f5f5f602087015192506040870151915060608701515f1a9050611aba88828585611d03565b955095509550505050611ad6565b5f600285515f1b9250925092505b9250925092565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401611b0a929190612c23565b604051602081830303815290604052631626ba7e60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b5c9190612c8b565b5f60405180830381855afa9150503d805f8114611b94576040519150601f19603f3d011682016040523d82523d5f602084013e611b99565b606091505b5091509150818015611bad57506020815110155b8015611bf15750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190611bef9190612cb5565b145b925050509392505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611c76959493929190612ce0565b60405160208183030381529060405280519060200120905090565b60605f611c9d83611dea565b90505f602067ffffffffffffffff811115611cbb57611cba611fdb565b5b6040519080825280601f01601f191660200182016040528015611ced5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611d3f575f600385925092509250611de0565b5f6001888888886040515f8152602001604052604051611d629493929190612d4c565b6020604051602081039080840390855afa158015611d82573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dd3575f60015f5f1b93509350935050611de0565b805f5f5f1b935093509350505b9450945094915050565b5f5f60ff835f1c169050601f811115611e2f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e7a82611e38565b611e848185611e42565b9350611e94818560208601611e52565b611e9d81611e60565b840191505092915050565b5f6020820190508181035f830152611ec08184611e70565b905092915050565b5f8115159050919050565b611edc81611ec8565b82525050565b5f602082019050611ef55f830184611ed3565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b611f1e81611f0c565b8114611f28575f5ffd5b50565b5f81359050611f3981611f15565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f6882611f3f565b9050919050565b611f7881611f5e565b8114611f82575f5ffd5b50565b5f81359050611f9381611f6f565b92915050565b5f5f60408385031215611faf57611fae611f04565b5b5f611fbc85828601611f2b565b9250506020611fcd85828601611f85565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61201182611e60565b810181811067ffffffffffffffff821117156120305761202f611fdb565b5b80604052505050565b5f612042611efb565b905061204e8282612008565b919050565b5f67ffffffffffffffff82111561206d5761206c611fdb565b5b602082029050602081019050919050565b5f5ffd5b5f61209461208f84612053565b612039565b905080838252602082019050602084028301858111156120b7576120b661207e565b5b835b818110156120e057806120cc8882611f2b565b8452602084019350506020810190506120b9565b5050509392505050565b5f82601f8301126120fe576120fd611fd7565b5b813561210e848260208601612082565b91505092915050565b5f5f6040838503121561212d5761212c611f04565b5b5f83013567ffffffffffffffff81111561214a57612149611f08565b5b612156858286016120ea565b925050602061216785828601611f85565b9150509250929050565b5f5f5f6060848603121561218857612187611f04565b5b5f61219586828701611f2b565b93505060206121a686828701611f85565b92505060406121b786828701611f85565b9150509250925092565b5f819050919050565b6121d3816121c1565b81146121dd575f5ffd5b50565b5f813590506121ee816121ca565b92915050565b5f6020828403121561220957612208611f04565b5b5f612216848285016121e0565b91505092915050565b612228816121c1565b82525050565b5f6020820190506122415f83018461221f565b92915050565b61225081611f5e565b82525050565b5f6020820190506122695f830184612247565b92915050565b5f6020828403121561228457612283611f04565b5b5f61229184828501611f2b565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6122ce8161229a565b82525050565b6122dd81611f0c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61231581611f0c565b82525050565b5f612326838361230c565b60208301905092915050565b5f602082019050919050565b5f612348826122e3565b61235281856122ed565b935061235d836122fd565b805f5b8381101561238d578151612374888261231b565b975061237f83612332565b925050600181019050612360565b5085935050505092915050565b5f60e0820190506123ad5f83018a6122c5565b81810360208301526123bf8189611e70565b905081810360408301526123d38188611e70565b90506123e260608301876122d4565b6123ef6080830186612247565b6123fc60a083018561221f565b81810360c083015261240e818461233e565b905098975050505050505050565b5f5f6040838503121561243257612431611f04565b5b5f61243f85828601611f85565b925050602061245085828601611f85565b9150509250929050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82169050919050565b61247e81612462565b8114612488575f5ffd5b50565b5f8135905061249981612475565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156124bd576124bc611fdb565b5b6124c682611e60565b9050602081019050919050565b828183375f83830152505050565b5f6124f36124ee846124a3565b612039565b90508281526020810184848401111561250f5761250e61249f565b5b61251a8482856124d3565b509392505050565b5f82601f83011261253657612535611fd7565b5b81356125468482602086016124e1565b91505092915050565b5f61010082840312156125655761256461245a565b5b612570610100612039565b90505f61257f84828501611f85565b5f8301525060206125928482850161248b565b60208301525060406125a684828501611f85565b60408301525060606125ba84828501611f2b565b60608301525060806125ce84828501611f85565b60808301525060a06125e2848285016121e0565b60a08301525060c082013567ffffffffffffffff8111156126065761260561245e565b5b61261284828501612522565b60c08301525060e082013567ffffffffffffffff8111156126365761263561245e565b5b61264284828501612522565b60e08301525092915050565b5f5f6040838503121561266457612663611f04565b5b5f83013567ffffffffffffffff81111561268157612680611f08565b5b61268d8582860161254f565b925050602061269e85828601611f2b565b9150509250929050565b5f5f5f5f608085870312156126c0576126bf611f04565b5b5f6126cd87828801611f85565b94505060206126de87828801611f2b565b93505060406126ef87828801611f85565b925050606061270087828801611f85565b91505092959194509250565b5f81905092915050565b5f61272082611e38565b61272a818561270c565b935061273a818560208601611e52565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f61277a60028361270c565b915061278582612746565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6127c460018361270c565b91506127cf82612790565b600182019050919050565b5f6127e58287612716565b91506127f08261276e565b91506127fc8286612716565b9150612807826127b8565b91506128138285612716565b915061281e826127b8565b915061282a8284612716565b915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020820190508181035f83015261287d818461233e565b905092915050565b5f819050919050565b61289f61289a82611f0c565b612885565b82525050565b5f8160601b9050919050565b5f6128bb826128a5565b9050919050565b5f6128cc826128b1565b9050919050565b6128e46128df82611f5e565b6128c2565b82525050565b5f6128f5828561288e565b60208201915061290582846128d3565b6014820191508190509392505050565b5f6040820190506129285f830185612247565b61293560208301846122d4565b9392505050565b61294581611ec8565b811461294f575f5ffd5b50565b5f815190506129608161293c565b92915050565b5f6020828403121561297b5761297a611f04565b5b5f61298884828501612952565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6129f582611f0c565b9150612a0083611f0c565b9250828203905081811115612a1857612a176129be565b5b92915050565b5f602082019050612a315f8301846122d4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f606082019050612a775f83018661221f565b612a84602083018561221f565b612a91604083018461221f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612add57607f821691505b602082108103612af057612aef612a99565b5b50919050565b612aff81612462565b82525050565b5f60e082019050612b185f83018a61221f565b612b256020830189612247565b612b326040830188612af6565b612b3f6060830187612247565b612b4c60808301866122d4565b612b5960a0830185612247565b612b6660c083018461221f565b98975050505050505050565b5f60c082019050612b855f83018961221f565b612b926020830188612247565b612b9f6040830187612af6565b612bac6060830186612247565b612bb960808301856122d4565b612bc660a0830184612247565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f612bf582612bd1565b612bff8185612bdb565b9350612c0f818560208601611e52565b612c1881611e60565b840191505092915050565b5f604082019050612c365f83018561221f565b8181036020830152612c488184612beb565b90509392505050565b5f81905092915050565b5f612c6582612bd1565b612c6f8185612c51565b9350612c7f818560208601611e52565b80840191505092915050565b5f612c968284612c5b565b915081905092915050565b5f81519050612caf816121ca565b92915050565b5f60208284031215612cca57612cc9611f04565b5b5f612cd784828501612ca1565b91505092915050565b5f60a082019050612cf35f83018861221f565b612d00602083018761221f565b612d0d604083018661221f565b612d1a60608301856122d4565b612d276080830184612247565b9695505050505050565b5f60ff82169050919050565b612d4681612d31565b82525050565b5f608082019050612d5f5f83018761221f565b612d6c6020830186612d3d565b612d79604083018561221f565b612d86606083018461221f565b9594505050505056fea2646970667358221220aabe60cb83f239e66cce420fafc236c0945f92dd788733f22fb30e71f86082d964736f6c634300081e0033"
1583
+ deployedBytecode: "0x608060405234801561000f575f5ffd5b506004361061011f575f3560e01c80636330a709116100ab57806384b0196e1161006f57806384b0196e1461030557806394d9184c14610329578063a8b7010014610359578063ae79f04a14610375578063ccd9a7cd146103a55761011f565b80636330a7091461024f57806365ce8df71461027f57806379a3a7fb1461029d5780637a9a598e146102b9578063846cd433146102e95761011f565b80633c3839ba116100f25780633c3839ba14610199578063484de822146101b55780634980f288146101d157806351b8fd20146102015780635faa299a1461021f5761011f565b80630d8e6e2c14610123578063267c4ae41461014157806335334c231461015f57806337e6b44f14610169575b5f5ffd5b61012b6103d5565b6040516101389190611ea8565b60405180910390f35b610149610450565b6040516101569190611ee2565b60405180910390f35b610167610458565b005b610183600480360381019061017e9190611f99565b610509565b6040516101909190611ee2565b60405180910390f35b6101b360048036038101906101ae9190612117565b610579565b005b6101cf60048036038101906101ca9190612171565b6106fa565b005b6101eb60048036038101906101e691906121f4565b61085b565b6040516101f8919061222e565b60405180910390f35b61020961086c565b6040516102169190612256565b60405180910390f35b61023960048036038101906102349190611f99565b610884565b6040516102469190611ee2565b60405180910390f35b6102696004803603810190610264919061226f565b6108b8565b6040516102769190611ee2565b60405180910390f35b6102876108ec565b6040516102949190612256565b60405180910390f35b6102b760048036038101906102b29190612171565b610907565b005b6102d360048036038101906102ce9190611f99565b610a4d565b6040516102e09190611ee2565b60405180910390f35b61030360048036038101906102fe9190611f99565b610a8a565b005b61030d610b93565b604051610320979695949392919061239a565b60405180910390f35b610343600480360381019061033e919061226f565b610c38565b6040516103509190611ee2565b60405180910390f35b610373600480360381019061036e919061241c565b610c6b565b005b61038f600480360381019061038a919061264e565b610f9b565b60405161039c9190611ee2565b60405180910390f35b6103bf60048036038101906103ba91906126a8565b6111f2565b6040516103cc9190611ee2565b60405180910390f35b60606040518060400160405280600381526020017f41434c00000000000000000000000000000000000000000000000000000000008152506104165f611391565b6104206001611391565b6104295f611391565b60405160200161043c94939291906127da565b604051602081830303815290604052905090565b5f6001905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104dc57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016104d39190612256565b60405180910390fd5b5f5c5f5f5d6001810160015b8181101561050457805c5f825d5f815d506001810190506104e8565b505050565b5f5f61051361145b565b9050806001015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105fd57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016105f49190612256565b60405180910390fd5b5f825190505f61060b61145b565b90505f5f90505b828110156106bc575f85828151811061062e5761062d612838565b5b602002602001015190506106428186610884565b61068357846040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161067a9190612256565b60405180910390fd5b6001836002015f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550508080600101915050610612565b507f2fd616621b8415a2efb27b224024340ac767797553ce6fdf4c1adefd160504c6846040516106ec9190612865565b60405180910390a150505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461077e57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016107759190612256565b60405180910390fd5b6107888382610884565b1580156107d5575073ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561081757806040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161080e9190612256565b60405180910390fd5b5f838360405160200161082b9291906128ea565b6040516020818303038152906040528051906020012090506001815d5f5c6001810182815d805f5d505050505050565b5f610865826114c1565b9050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d981565b5f61088f8383610a4d565b806108a0575061089f8383610509565b5b806108b057506108af83610c38565b5b905092915050565b5f5f6108c261145b565b9050806002015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d9905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098b57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016109829190612256565b60405180910390fd5b6109958382610884565b6109d657806040517fd0d259760000000000000000000000000000000000000000000000000000000081526004016109cd9190612256565b60405180910390fd5b5f6109df61145b565b90506001816001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b5f5f5f8484604051602001610a639291906128ea565b604051602081830303815290604052805190602001209050805c9150819250505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0e57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610b059190612256565b60405180910390fd5b610b188282610884565b610b5957806040517fd0d25976000000000000000000000000000000000000000000000000000000008152600401610b509190612256565b60405180910390fd5b5f610b6261145b565b90506001815f015f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f6060805f5f5f6060610ba46114da565b610bac611514565b46305f5f1b5f67ffffffffffffffff811115610bcb57610bca611fdb565b5b604051908082528060200260200182016040528015610bf95781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f5f610c4261145b565b9050805f015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cef57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610ce69190612256565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d54576040517f30dc920300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d5d61145b565b9050806003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610e58576040517fd186046800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff03b7c0d4879b0bcbbf440794871f139c96fd13a145a8172b33b9cab5fa2830a60405160405180910390a4505050565b5f8242816020015167ffffffffffffffff161015610fe5576040517fed0764a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611007815f0151610ffd610ff88461154f565b6114c1565b8360c001516115a8565b61103d576040517f4c40eccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff161415801561109d575061109b816040015161109161108c84611654565b6114c1565b8360e001516115a8565b155b156110d4576040517f8e143bf700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81606001511415801561111857505f73ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff1614155b80156111a55750806080015173ffffffffffffffffffffffffffffffffffffffff1663b63391e8825f015183606001516040518363ffffffff1660e01b8152600401611165929190612915565b602060405180830381865afa158015611180573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a49190612966565b5b156111dc576040517fcbd3a96600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e983855f0151610884565b91505092915050565b5f5f6111fc61145b565b9050806001015f8681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156112bc5750806001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156113865750806003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b915050949350505050565b60605f600161139f846116b6565b0190505f8167ffffffffffffffff8111156113bd576113bc611fdb565b5b6040519080825280601f01601f1916602001820160405280156113ef5781602001600182028036833780820191505090505b5090505f82602083010190505b600115611450578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161144557611444612991565b5b0494505f85036113fc575b819350505050919050565b5f5f60ff5f1b1960017fc4eb438ffad04c606bb4f9c3576c0f142d5dc3782731029ea1ab95b6483220115f1c61149191906129eb565b6040516020016114a19190612a1e565b604051602081830303815290604052805190602001201690508091505090565b5f6114d36114cd611807565b836118bd565b9050919050565b606061150f5f7f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b606061154a60017f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b5f5f73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff160361159757611590826119aa565b90506115a3565b6115a082611a1c565b90505b919050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff163b0361163f575f5f6115d38585611a88565b50915091505f60038111156115eb576115ea612a37565b5b8160038111156115fe576115fd612a37565b5b14801561163657508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9250505061164d565b61164a848484611add565b90505b9392505050565b5f7f82af07a6c9eb6bb31a0c86f7f5cad0039589750ad5b4b925ed5741f7ad4e8d4b8260a001518360c001518051906020012060405160200161169993929190612a64565b604051602081830303815290604052805190602001209050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611712577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161170857611707612991565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061174f576d04ee2d6d415b85acef8100000000838161174557611744612991565b5b0492506020810190505b662386f26fc10000831061177e57662386f26fc10000838161177457611773612991565b5b0492506010810190505b6305f5e10083106117a7576305f5e100838161179d5761179c612991565b5b0492506008810190505b61271083106117cc5761271083816117c2576117c1612991565b5b0492506004810190505b606483106117ef57606483816117e5576117e4612991565b5b0492506002810190505b600a83106117fe576001810190505b80915050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561188257507f000000000000000000000000000000000000000000000000000000000000000046145b156118af577f000000000000000000000000000000000000000000000000000000000000000090506118ba565b6118b7611bfc565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b606060ff5f1b83146119195761191283611c91565b90506119a4565b81805461192590612ac6565b80601f016020809104026020016040519081016040528092919081815260200182805461195190612ac6565b801561199c5780601f106119735761010080835404028352916020019161199c565b820191905f5260205f20905b81548152906001019060200180831161197f57829003601f168201915b505050505090505b92915050565b5f7f0ce0d938c38f948b8f9cf16098cd15ec62de132c8d422719ad270c5e2a101102825f015183602001518460400151856060015186608001518760a001516040516020016119ff9796959493929190612b05565b604051602081830303815290604052805190602001209050919050565b5f7f8549e986c64faf9b741179c61561f9d39f337cf9739f86178d84dabc6ca4cad5825f01518360200151846040015185606001518660800151604051602001611a6b96959493929190612b72565b604051602081830303815290604052805190602001209050919050565b5f5f5f6041845103611ac8575f5f5f602087015192506040870151915060608701515f1a9050611aba88828585611d03565b955095509550505050611ad6565b5f600285515f1b9250925092505b9250925092565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401611b0a929190612c23565b604051602081830303815290604052631626ba7e60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b5c9190612c8b565b5f60405180830381855afa9150503d805f8114611b94576040519150601f19603f3d011682016040523d82523d5f602084013e611b99565b606091505b5091509150818015611bad57506020815110155b8015611bf15750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190611bef9190612cb5565b145b925050509392505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611c76959493929190612ce0565b60405160208183030381529060405280519060200120905090565b60605f611c9d83611dea565b90505f602067ffffffffffffffff811115611cbb57611cba611fdb565b5b6040519080825280601f01601f191660200182016040528015611ced5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611d3f575f600385925092509250611de0565b5f6001888888886040515f8152602001604052604051611d629493929190612d4c565b6020604051602081039080840390855afa158015611d82573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dd3575f60015f5f1b93509350935050611de0565b805f5f5f1b935093509350505b9450945094915050565b5f5f60ff835f1c169050601f811115611e2f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e7a82611e38565b611e848185611e42565b9350611e94818560208601611e52565b611e9d81611e60565b840191505092915050565b5f6020820190508181035f830152611ec08184611e70565b905092915050565b5f8115159050919050565b611edc81611ec8565b82525050565b5f602082019050611ef55f830184611ed3565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b611f1e81611f0c565b8114611f28575f5ffd5b50565b5f81359050611f3981611f15565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f6882611f3f565b9050919050565b611f7881611f5e565b8114611f82575f5ffd5b50565b5f81359050611f9381611f6f565b92915050565b5f5f60408385031215611faf57611fae611f04565b5b5f611fbc85828601611f2b565b9250506020611fcd85828601611f85565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61201182611e60565b810181811067ffffffffffffffff821117156120305761202f611fdb565b5b80604052505050565b5f612042611efb565b905061204e8282612008565b919050565b5f67ffffffffffffffff82111561206d5761206c611fdb565b5b602082029050602081019050919050565b5f5ffd5b5f61209461208f84612053565b612039565b905080838252602082019050602084028301858111156120b7576120b661207e565b5b835b818110156120e057806120cc8882611f2b565b8452602084019350506020810190506120b9565b5050509392505050565b5f82601f8301126120fe576120fd611fd7565b5b813561210e848260208601612082565b91505092915050565b5f5f6040838503121561212d5761212c611f04565b5b5f83013567ffffffffffffffff81111561214a57612149611f08565b5b612156858286016120ea565b925050602061216785828601611f85565b9150509250929050565b5f5f5f6060848603121561218857612187611f04565b5b5f61219586828701611f2b565b93505060206121a686828701611f85565b92505060406121b786828701611f85565b9150509250925092565b5f819050919050565b6121d3816121c1565b81146121dd575f5ffd5b50565b5f813590506121ee816121ca565b92915050565b5f6020828403121561220957612208611f04565b5b5f612216848285016121e0565b91505092915050565b612228816121c1565b82525050565b5f6020820190506122415f83018461221f565b92915050565b61225081611f5e565b82525050565b5f6020820190506122695f830184612247565b92915050565b5f6020828403121561228457612283611f04565b5b5f61229184828501611f2b565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6122ce8161229a565b82525050565b6122dd81611f0c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61231581611f0c565b82525050565b5f612326838361230c565b60208301905092915050565b5f602082019050919050565b5f612348826122e3565b61235281856122ed565b935061235d836122fd565b805f5b8381101561238d578151612374888261231b565b975061237f83612332565b925050600181019050612360565b5085935050505092915050565b5f60e0820190506123ad5f83018a6122c5565b81810360208301526123bf8189611e70565b905081810360408301526123d38188611e70565b90506123e260608301876122d4565b6123ef6080830186612247565b6123fc60a083018561221f565b81810360c083015261240e818461233e565b905098975050505050505050565b5f5f6040838503121561243257612431611f04565b5b5f61243f85828601611f85565b925050602061245085828601611f85565b9150509250929050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82169050919050565b61247e81612462565b8114612488575f5ffd5b50565b5f8135905061249981612475565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156124bd576124bc611fdb565b5b6124c682611e60565b9050602081019050919050565b828183375f83830152505050565b5f6124f36124ee846124a3565b612039565b90508281526020810184848401111561250f5761250e61249f565b5b61251a8482856124d3565b509392505050565b5f82601f83011261253657612535611fd7565b5b81356125468482602086016124e1565b91505092915050565b5f61010082840312156125655761256461245a565b5b612570610100612039565b90505f61257f84828501611f85565b5f8301525060206125928482850161248b565b60208301525060406125a684828501611f85565b60408301525060606125ba84828501611f2b565b60608301525060806125ce84828501611f85565b60808301525060a06125e2848285016121e0565b60a08301525060c082013567ffffffffffffffff8111156126065761260561245e565b5b61261284828501612522565b60c08301525060e082013567ffffffffffffffff8111156126365761263561245e565b5b61264284828501612522565b60e08301525092915050565b5f5f6040838503121561266457612663611f04565b5b5f83013567ffffffffffffffff81111561268157612680611f08565b5b61268d8582860161254f565b925050602061269e85828601611f2b565b9150509250929050565b5f5f5f5f608085870312156126c0576126bf611f04565b5b5f6126cd87828801611f85565b94505060206126de87828801611f2b565b93505060406126ef87828801611f85565b925050606061270087828801611f85565b91505092959194509250565b5f81905092915050565b5f61272082611e38565b61272a818561270c565b935061273a818560208601611e52565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f61277a60028361270c565b915061278582612746565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6127c460018361270c565b91506127cf82612790565b600182019050919050565b5f6127e58287612716565b91506127f08261276e565b91506127fc8286612716565b9150612807826127b8565b91506128138285612716565b915061281e826127b8565b915061282a8284612716565b915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020820190508181035f83015261287d818461233e565b905092915050565b5f819050919050565b61289f61289a82611f0c565b612885565b82525050565b5f8160601b9050919050565b5f6128bb826128a5565b9050919050565b5f6128cc826128b1565b9050919050565b6128e46128df82611f5e565b6128c2565b82525050565b5f6128f5828561288e565b60208201915061290582846128d3565b6014820191508190509392505050565b5f6040820190506129285f830185612247565b61293560208301846122d4565b9392505050565b61294581611ec8565b811461294f575f5ffd5b50565b5f815190506129608161293c565b92915050565b5f6020828403121561297b5761297a611f04565b5b5f61298884828501612952565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6129f582611f0c565b9150612a0083611f0c565b9250828203905081811115612a1857612a176129be565b5b92915050565b5f602082019050612a315f8301846122d4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f606082019050612a775f83018661221f565b612a84602083018561221f565b612a91604083018461221f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612add57607f821691505b602082108103612af057612aef612a99565b5b50919050565b612aff81612462565b82525050565b5f60e082019050612b185f83018a61221f565b612b256020830189612247565b612b326040830188612af6565b612b3f6060830187612247565b612b4c60808301866122d4565b612b5960a0830185612247565b612b6660c083018461221f565b98975050505050505050565b5f60c082019050612b855f83018961221f565b612b926020830188612247565b612b9f6040830187612af6565b612bac6060830186612247565b612bb960808301856122d4565b612bc660a0830184612247565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f612bf582612bd1565b612bff8185612bdb565b9350612c0f818560208601611e52565b612c1881611e60565b840191505092915050565b5f604082019050612c365f83018561221f565b8181036020830152612c488184612beb565b90509392505050565b5f81905092915050565b5f612c6582612bd1565b612c6f8185612c51565b9350612c7f818560208601611e52565b80840191505092915050565b5f612c968284612c5b565b915081905092915050565b5f81519050612caf816121ca565b92915050565b5f60208284031215612cca57612cc9611f04565b5b5f612cd784828501612ca1565b91505092915050565b5f60a082019050612cf35f83018861221f565b612d00602083018761221f565b612d0d604083018661221f565b612d1a60608301856122d4565b612d276080830184612247565b9695505050505050565b5f60ff82169050919050565b612d4681612d31565b82525050565b5f608082019050612d5f5f83018761221f565b612d6c6020830186612d3d565b612d79604083018561221f565b612d86606083018461221f565b9594505050505056fea2646970667358221220cf5cd3dfc833f4c507ce2bb993362188fdcda599906c121da35f627fd06772db64736f6c63430008210033",
1584
+ bytecode: "0x610160604052348015610010575f5ffd5b506040518060400160405280600381526020017f41434c00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506100905f8361012b60201b90919060201c565b61012081815250506100ac60018261012b60201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a081815250506100e961017860201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505061072d565b5f60208351101561014c57610145836101d260201b60201c565b9050610172565b8261015c8361023760201b60201c565b5f01908161016a919061048e565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016101b79594939291906105c3565b60405160208183030381529060405280519060200120905090565b5f5f829050601f8151111561021e57826040517f305a27a9000000000000000000000000000000000000000000000000000000008152600401610215919061067a565b60405180910390fd5b80518161022a906106c7565b5f1c175f1b915050919050565b5f819050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102bb57607f821691505b6020821081036102ce576102cd610277565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102f5565b61033a86836102f5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61037e61037961037484610352565b61035b565b610352565b9050919050565b5f819050919050565b61039783610364565b6103ab6103a382610385565b848454610301565b825550505050565b5f5f905090565b6103c26103b3565b6103cd81848461038e565b505050565b5f5b828110156103f3576103e85f8284016103ba565b6001810190506103d4565b505050565b601f821115610446578282111561044557610412816102d4565b61041b836102e6565b610424856102e6565b6020861015610431575f90505b808301610440828403826103d2565b505050505b5b505050565b5f82821c905092915050565b5f6104665f198460080261044b565b1980831691505092915050565b5f61047e8383610457565b9150826002028217905092915050565b61049782610240565b67ffffffffffffffff8111156104b0576104af61024a565b5b6104ba82546102a4565b6104c58282856103f8565b5f60209050601f8311600181146104f6575f84156104e4578287015190505b6104ee8582610473565b865550610555565b601f198416610504866102d4565b5f5b8281101561052b57848901518255600182019150602085019450602081019050610506565b868310156105485784890151610544601f891682610457565b8355505b6001600288020188555050505b505050505050565b5f819050919050565b61056f8161055d565b82525050565b61057e81610352565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105ad82610584565b9050919050565b6105bd816105a3565b82525050565b5f60a0820190506105d65f830188610566565b6105e36020830187610566565b6105f06040830186610566565b6105fd6060830185610575565b61060a60808301846105b4565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61064c82610240565b6106568185610614565b9350610666818560208601610624565b61066f81610632565b840191505092915050565b5f6020820190508181035f8301526106928184610642565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f6106be825161055d565b80915050919050565b5f6106d18261069a565b826106db846106a4565b90506106e6816106b3565b92506020821015610726576107217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026102f5565b831692505b5050919050565b60805160a05160c05160e051610100516101205161014051612dc561077e5f395f61151d01525f6114e201525f611c4101525f611c2001525f61180a01525f61186001525f6118890152612dc55ff3fe608060405234801561000f575f5ffd5b506004361061011f575f3560e01c80636330a709116100ab57806384b0196e1161006f57806384b0196e1461030557806394d9184c14610329578063a8b7010014610359578063ae79f04a14610375578063ccd9a7cd146103a55761011f565b80636330a7091461024f57806365ce8df71461027f57806379a3a7fb1461029d5780637a9a598e146102b9578063846cd433146102e95761011f565b80633c3839ba116100f25780633c3839ba14610199578063484de822146101b55780634980f288146101d157806351b8fd20146102015780635faa299a1461021f5761011f565b80630d8e6e2c14610123578063267c4ae41461014157806335334c231461015f57806337e6b44f14610169575b5f5ffd5b61012b6103d5565b6040516101389190611ea8565b60405180910390f35b610149610450565b6040516101569190611ee2565b60405180910390f35b610167610458565b005b610183600480360381019061017e9190611f99565b610509565b6040516101909190611ee2565b60405180910390f35b6101b360048036038101906101ae9190612117565b610579565b005b6101cf60048036038101906101ca9190612171565b6106fa565b005b6101eb60048036038101906101e691906121f4565b61085b565b6040516101f8919061222e565b60405180910390f35b61020961086c565b6040516102169190612256565b60405180910390f35b61023960048036038101906102349190611f99565b610884565b6040516102469190611ee2565b60405180910390f35b6102696004803603810190610264919061226f565b6108b8565b6040516102769190611ee2565b60405180910390f35b6102876108ec565b6040516102949190612256565b60405180910390f35b6102b760048036038101906102b29190612171565b610907565b005b6102d360048036038101906102ce9190611f99565b610a4d565b6040516102e09190611ee2565b60405180910390f35b61030360048036038101906102fe9190611f99565b610a8a565b005b61030d610b93565b604051610320979695949392919061239a565b60405180910390f35b610343600480360381019061033e919061226f565b610c38565b6040516103509190611ee2565b60405180910390f35b610373600480360381019061036e919061241c565b610c6b565b005b61038f600480360381019061038a919061264e565b610f9b565b60405161039c9190611ee2565b60405180910390f35b6103bf60048036038101906103ba91906126a8565b6111f2565b6040516103cc9190611ee2565b60405180910390f35b60606040518060400160405280600381526020017f41434c00000000000000000000000000000000000000000000000000000000008152506104165f611391565b6104206001611391565b6104295f611391565b60405160200161043c94939291906127da565b604051602081830303815290604052905090565b5f6001905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104dc57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016104d39190612256565b60405180910390fd5b5f5c5f5f5d6001810160015b8181101561050457805c5f825d5f815d506001810190506104e8565b505050565b5f5f61051361145b565b9050806001015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105fd57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016105f49190612256565b60405180910390fd5b5f825190505f61060b61145b565b90505f5f90505b828110156106bc575f85828151811061062e5761062d612838565b5b602002602001015190506106428186610884565b61068357846040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161067a9190612256565b60405180910390fd5b6001836002015f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550508080600101915050610612565b507f2fd616621b8415a2efb27b224024340ac767797553ce6fdf4c1adefd160504c6846040516106ec9190612865565b60405180910390a150505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461077e57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016107759190612256565b60405180910390fd5b6107888382610884565b1580156107d5575073ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561081757806040517fd0d2597600000000000000000000000000000000000000000000000000000000815260040161080e9190612256565b60405180910390fd5b5f838360405160200161082b9291906128ea565b6040516020818303038152906040528051906020012090506001815d5f5c6001810182815d805f5d505050505050565b5f610865826114c1565b9050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d981565b5f61088f8383610a4d565b806108a0575061089f8383610509565b5b806108b057506108af83610c38565b5b905092915050565b5f5f6108c261145b565b9050806002015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d9905090565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098b57336040517f3809a2430000000000000000000000000000000000000000000000000000000081526004016109829190612256565b60405180910390fd5b6109958382610884565b6109d657806040517fd0d259760000000000000000000000000000000000000000000000000000000081526004016109cd9190612256565b60405180910390fd5b5f6109df61145b565b90506001816001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b5f5f5f8484604051602001610a639291906128ea565b604051602081830303815290604052805190602001209050805c9150819250505092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b0e57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610b059190612256565b60405180910390fd5b610b188282610884565b610b5957806040517fd0d25976000000000000000000000000000000000000000000000000000000008152600401610b509190612256565b60405180910390fd5b5f610b6261145b565b90506001815f015f8581526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f6060805f5f5f6060610ba46114da565b610bac611514565b46305f5f1b5f67ffffffffffffffff811115610bcb57610bca611fdb565b5b604051908082528060200260200182016040528015610bf95781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f5f610c4261145b565b9050805f015f8481526020019081526020015f205f9054906101000a900460ff16915050919050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cef57336040517f3809a243000000000000000000000000000000000000000000000000000000008152600401610ce69190612256565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d54576040517f30dc920300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610d5d61145b565b9050806003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610e58576040517fd186046800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816003015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff03b7c0d4879b0bcbbf440794871f139c96fd13a145a8172b33b9cab5fa2830a60405160405180910390a4505050565b5f8242816020015167ffffffffffffffff161015610fe5576040517fed0764a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611007815f0151610ffd610ff88461154f565b6114c1565b8360c001516115a8565b61103d576040517f4c40eccb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff161415801561109d575061109b816040015161109161108c84611654565b6114c1565b8360e001516115a8565b155b156110d4576040517f8e143bf700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81606001511415801561111857505f73ffffffffffffffffffffffffffffffffffffffff16816080015173ffffffffffffffffffffffffffffffffffffffff1614155b80156111a55750806080015173ffffffffffffffffffffffffffffffffffffffff1663b63391e8825f015183606001516040518363ffffffff1660e01b8152600401611165929190612915565b602060405180830381865afa158015611180573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a49190612966565b5b156111dc576040517fcbd3a96600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e983855f0151610884565b91505092915050565b5f5f6111fc61145b565b9050806001015f8681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156112bc5750806001015f8681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156113865750806003015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b915050949350505050565b60605f600161139f846116b6565b0190505f8167ffffffffffffffff8111156113bd576113bc611fdb565b5b6040519080825280601f01601f1916602001820160405280156113ef5781602001600182028036833780820191505090505b5090505f82602083010190505b600115611450578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161144557611444612991565b5b0494505f85036113fc575b819350505050919050565b5f5f60ff5f1b1960017fc4eb438ffad04c606bb4f9c3576c0f142d5dc3782731029ea1ab95b6483220115f1c61149191906129eb565b6040516020016114a19190612a1e565b604051602081830303815290604052805190602001201690508091505090565b5f6114d36114cd611807565b836118bd565b9050919050565b606061150f5f7f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b606061154a60017f00000000000000000000000000000000000000000000000000000000000000006118fd90919063ffffffff16565b905090565b5f5f73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff160361159757611590826119aa565b90506115a3565b6115a082611a1c565b90505b919050565b5f5f8473ffffffffffffffffffffffffffffffffffffffff163b0361163f575f5f6115d38585611a88565b50915091505f60038111156115eb576115ea612a37565b5b8160038111156115fe576115fd612a37565b5b14801561163657508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9250505061164d565b61164a848484611add565b90505b9392505050565b5f7f82af07a6c9eb6bb31a0c86f7f5cad0039589750ad5b4b925ed5741f7ad4e8d4b8260a001518360c001518051906020012060405160200161169993929190612a64565b604051602081830303815290604052805190602001209050919050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611712577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161170857611707612991565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061174f576d04ee2d6d415b85acef8100000000838161174557611744612991565b5b0492506020810190505b662386f26fc10000831061177e57662386f26fc10000838161177457611773612991565b5b0492506010810190505b6305f5e10083106117a7576305f5e100838161179d5761179c612991565b5b0492506008810190505b61271083106117cc5761271083816117c2576117c1612991565b5b0492506004810190505b606483106117ef57606483816117e5576117e4612991565b5b0492506002810190505b600a83106117fe576001810190505b80915050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561188257507f000000000000000000000000000000000000000000000000000000000000000046145b156118af577f000000000000000000000000000000000000000000000000000000000000000090506118ba565b6118b7611bfc565b90505b90565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b606060ff5f1b83146119195761191283611c91565b90506119a4565b81805461192590612ac6565b80601f016020809104026020016040519081016040528092919081815260200182805461195190612ac6565b801561199c5780601f106119735761010080835404028352916020019161199c565b820191905f5260205f20905b81548152906001019060200180831161197f57829003601f168201915b505050505090505b92915050565b5f7f0ce0d938c38f948b8f9cf16098cd15ec62de132c8d422719ad270c5e2a101102825f015183602001518460400151856060015186608001518760a001516040516020016119ff9796959493929190612b05565b604051602081830303815290604052805190602001209050919050565b5f7f8549e986c64faf9b741179c61561f9d39f337cf9739f86178d84dabc6ca4cad5825f01518360200151846040015185606001518660800151604051602001611a6b96959493929190612b72565b604051602081830303815290604052805190602001209050919050565b5f5f5f6041845103611ac8575f5f5f602087015192506040870151915060608701515f1a9050611aba88828585611d03565b955095509550505050611ad6565b5f600285515f1b9250925092505b9250925092565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401611b0a929190612c23565b604051602081830303815290604052631626ba7e60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611b5c9190612c8b565b5f60405180830381855afa9150503d805f8114611b94576040519150601f19603f3d011682016040523d82523d5f602084013e611b99565b606091505b5091509150818015611bad57506020815110155b8015611bf15750631626ba7e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681806020019051810190611bef9190612cb5565b145b925050509392505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001611c76959493929190612ce0565b60405160208183030381529060405280519060200120905090565b60605f611c9d83611dea565b90505f602067ffffffffffffffff811115611cbb57611cba611fdb565b5b6040519080825280601f01601f191660200182016040528015611ced5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611d3f575f600385925092509250611de0565b5f6001888888886040515f8152602001604052604051611d629493929190612d4c565b6020604051602081039080840390855afa158015611d82573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dd3575f60015f5f1b93509350935050611de0565b805f5f5f1b935093509350505b9450945094915050565b5f5f60ff835f1c169050601f811115611e2f576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611e7a82611e38565b611e848185611e42565b9350611e94818560208601611e52565b611e9d81611e60565b840191505092915050565b5f6020820190508181035f830152611ec08184611e70565b905092915050565b5f8115159050919050565b611edc81611ec8565b82525050565b5f602082019050611ef55f830184611ed3565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b611f1e81611f0c565b8114611f28575f5ffd5b50565b5f81359050611f3981611f15565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f6882611f3f565b9050919050565b611f7881611f5e565b8114611f82575f5ffd5b50565b5f81359050611f9381611f6f565b92915050565b5f5f60408385031215611faf57611fae611f04565b5b5f611fbc85828601611f2b565b9250506020611fcd85828601611f85565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61201182611e60565b810181811067ffffffffffffffff821117156120305761202f611fdb565b5b80604052505050565b5f612042611efb565b905061204e8282612008565b919050565b5f67ffffffffffffffff82111561206d5761206c611fdb565b5b602082029050602081019050919050565b5f5ffd5b5f61209461208f84612053565b612039565b905080838252602082019050602084028301858111156120b7576120b661207e565b5b835b818110156120e057806120cc8882611f2b565b8452602084019350506020810190506120b9565b5050509392505050565b5f82601f8301126120fe576120fd611fd7565b5b813561210e848260208601612082565b91505092915050565b5f5f6040838503121561212d5761212c611f04565b5b5f83013567ffffffffffffffff81111561214a57612149611f08565b5b612156858286016120ea565b925050602061216785828601611f85565b9150509250929050565b5f5f5f6060848603121561218857612187611f04565b5b5f61219586828701611f2b565b93505060206121a686828701611f85565b92505060406121b786828701611f85565b9150509250925092565b5f819050919050565b6121d3816121c1565b81146121dd575f5ffd5b50565b5f813590506121ee816121ca565b92915050565b5f6020828403121561220957612208611f04565b5b5f612216848285016121e0565b91505092915050565b612228816121c1565b82525050565b5f6020820190506122415f83018461221f565b92915050565b61225081611f5e565b82525050565b5f6020820190506122695f830184612247565b92915050565b5f6020828403121561228457612283611f04565b5b5f61229184828501611f2b565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6122ce8161229a565b82525050565b6122dd81611f0c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61231581611f0c565b82525050565b5f612326838361230c565b60208301905092915050565b5f602082019050919050565b5f612348826122e3565b61235281856122ed565b935061235d836122fd565b805f5b8381101561238d578151612374888261231b565b975061237f83612332565b925050600181019050612360565b5085935050505092915050565b5f60e0820190506123ad5f83018a6122c5565b81810360208301526123bf8189611e70565b905081810360408301526123d38188611e70565b90506123e260608301876122d4565b6123ef6080830186612247565b6123fc60a083018561221f565b81810360c083015261240e818461233e565b905098975050505050505050565b5f5f6040838503121561243257612431611f04565b5b5f61243f85828601611f85565b925050602061245085828601611f85565b9150509250929050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82169050919050565b61247e81612462565b8114612488575f5ffd5b50565b5f8135905061249981612475565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156124bd576124bc611fdb565b5b6124c682611e60565b9050602081019050919050565b828183375f83830152505050565b5f6124f36124ee846124a3565b612039565b90508281526020810184848401111561250f5761250e61249f565b5b61251a8482856124d3565b509392505050565b5f82601f83011261253657612535611fd7565b5b81356125468482602086016124e1565b91505092915050565b5f61010082840312156125655761256461245a565b5b612570610100612039565b90505f61257f84828501611f85565b5f8301525060206125928482850161248b565b60208301525060406125a684828501611f85565b60408301525060606125ba84828501611f2b565b60608301525060806125ce84828501611f85565b60808301525060a06125e2848285016121e0565b60a08301525060c082013567ffffffffffffffff8111156126065761260561245e565b5b61261284828501612522565b60c08301525060e082013567ffffffffffffffff8111156126365761263561245e565b5b61264284828501612522565b60e08301525092915050565b5f5f6040838503121561266457612663611f04565b5b5f83013567ffffffffffffffff81111561268157612680611f08565b5b61268d8582860161254f565b925050602061269e85828601611f2b565b9150509250929050565b5f5f5f5f608085870312156126c0576126bf611f04565b5b5f6126cd87828801611f85565b94505060206126de87828801611f2b565b93505060406126ef87828801611f85565b925050606061270087828801611f85565b91505092959194509250565b5f81905092915050565b5f61272082611e38565b61272a818561270c565b935061273a818560208601611e52565b80840191505092915050565b7f20760000000000000000000000000000000000000000000000000000000000005f82015250565b5f61277a60028361270c565b915061278582612746565b600282019050919050565b7f2e000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6127c460018361270c565b91506127cf82612790565b600182019050919050565b5f6127e58287612716565b91506127f08261276e565b91506127fc8286612716565b9150612807826127b8565b91506128138285612716565b915061281e826127b8565b915061282a8284612716565b915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6020820190508181035f83015261287d818461233e565b905092915050565b5f819050919050565b61289f61289a82611f0c565b612885565b82525050565b5f8160601b9050919050565b5f6128bb826128a5565b9050919050565b5f6128cc826128b1565b9050919050565b6128e46128df82611f5e565b6128c2565b82525050565b5f6128f5828561288e565b60208201915061290582846128d3565b6014820191508190509392505050565b5f6040820190506129285f830185612247565b61293560208301846122d4565b9392505050565b61294581611ec8565b811461294f575f5ffd5b50565b5f815190506129608161293c565b92915050565b5f6020828403121561297b5761297a611f04565b5b5f61298884828501612952565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6129f582611f0c565b9150612a0083611f0c565b9250828203905081811115612a1857612a176129be565b5b92915050565b5f602082019050612a315f8301846122d4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f606082019050612a775f83018661221f565b612a84602083018561221f565b612a91604083018461221f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612add57607f821691505b602082108103612af057612aef612a99565b5b50919050565b612aff81612462565b82525050565b5f60e082019050612b185f83018a61221f565b612b256020830189612247565b612b326040830188612af6565b612b3f6060830187612247565b612b4c60808301866122d4565b612b5960a0830185612247565b612b6660c083018461221f565b98975050505050505050565b5f60c082019050612b855f83018961221f565b612b926020830188612247565b612b9f6040830187612af6565b612bac6060830186612247565b612bb960808301856122d4565b612bc660a0830184612247565b979650505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f612bf582612bd1565b612bff8185612bdb565b9350612c0f818560208601611e52565b612c1881611e60565b840191505092915050565b5f604082019050612c365f83018561221f565b8181036020830152612c488184612beb565b90509392505050565b5f81905092915050565b5f612c6582612bd1565b612c6f8185612c51565b9350612c7f818560208601611e52565b80840191505092915050565b5f612c968284612c5b565b915081905092915050565b5f81519050612caf816121ca565b92915050565b5f60208284031215612cca57612cc9611f04565b5b5f612cd784828501612ca1565b91505092915050565b5f60a082019050612cf35f83018861221f565b612d00602083018761221f565b612d0d604083018661221f565b612d1a60608301856122d4565b612d276080830184612247565b9695505050505050565b5f60ff82169050919050565b612d4681612d31565b82525050565b5f608082019050612d5f5f83018761221f565b612d6c6020830186612d3d565b612d79604083018561221f565b612d86606083018461221f565b9594505050505056fea2646970667358221220cf5cd3dfc833f4c507ce2bb993362188fdcda599906c121da35f627fd06772db64736f6c63430008210033"
1583
1585
  };
1584
1586
 
1585
1587
  // src/MockZkVerifier.ts
1586
1588
  var MockZkVerifierArtifact = {
1587
- "contractName": "MockZkVerifier",
1588
- "fixedAddress": "0x0000000000000000000000000000000000000100",
1589
- "abi": [
1589
+ contractName: "MockZkVerifier",
1590
+ fixedAddress: "0x0000000000000000000000000000000000000100",
1591
+ abi: [
1590
1592
  {
1591
- "type": "function",
1592
- "name": "exists",
1593
- "inputs": [],
1594
- "outputs": [
1593
+ type: "function",
1594
+ name: "exists",
1595
+ inputs: [],
1596
+ outputs: [
1595
1597
  {
1596
- "name": "",
1597
- "type": "bool",
1598
- "internalType": "bool"
1598
+ name: "",
1599
+ type: "bool",
1600
+ internalType: "bool"
1599
1601
  }
1600
1602
  ],
1601
- "stateMutability": "pure"
1603
+ stateMutability: "pure"
1602
1604
  },
1603
1605
  {
1604
- "type": "function",
1605
- "name": "insertCtHash",
1606
- "inputs": [
1606
+ type: "function",
1607
+ name: "insertCtHash",
1608
+ inputs: [
1607
1609
  {
1608
- "name": "ctHash",
1609
- "type": "uint256",
1610
- "internalType": "uint256"
1610
+ name: "ctHash",
1611
+ type: "uint256",
1612
+ internalType: "uint256"
1611
1613
  },
1612
1614
  {
1613
- "name": "value",
1614
- "type": "uint256",
1615
- "internalType": "uint256"
1615
+ name: "value",
1616
+ type: "uint256",
1617
+ internalType: "uint256"
1616
1618
  }
1617
1619
  ],
1618
- "outputs": [],
1619
- "stateMutability": "nonpayable"
1620
+ outputs: [],
1621
+ stateMutability: "nonpayable"
1620
1622
  },
1621
1623
  {
1622
- "type": "function",
1623
- "name": "insertPackedCtHashes",
1624
- "inputs": [
1624
+ type: "function",
1625
+ name: "insertPackedCtHashes",
1626
+ inputs: [
1625
1627
  {
1626
- "name": "ctHashes",
1627
- "type": "uint256[]",
1628
- "internalType": "uint256[]"
1628
+ name: "ctHashes",
1629
+ type: "uint256[]",
1630
+ internalType: "uint256[]"
1629
1631
  },
1630
1632
  {
1631
- "name": "values",
1632
- "type": "uint256[]",
1633
- "internalType": "uint256[]"
1633
+ name: "values",
1634
+ type: "uint256[]",
1635
+ internalType: "uint256[]"
1634
1636
  }
1635
1637
  ],
1636
- "outputs": [],
1637
- "stateMutability": "nonpayable"
1638
+ outputs: [],
1639
+ stateMutability: "nonpayable"
1638
1640
  },
1639
1641
  {
1640
- "type": "function",
1641
- "name": "zkVerify",
1642
- "inputs": [
1642
+ type: "function",
1643
+ name: "zkVerify",
1644
+ inputs: [
1643
1645
  {
1644
- "name": "value",
1645
- "type": "uint256",
1646
- "internalType": "uint256"
1646
+ name: "value",
1647
+ type: "uint256",
1648
+ internalType: "uint256"
1647
1649
  },
1648
1650
  {
1649
- "name": "utype",
1650
- "type": "uint8",
1651
- "internalType": "uint8"
1651
+ name: "utype",
1652
+ type: "uint8",
1653
+ internalType: "uint8"
1652
1654
  },
1653
1655
  {
1654
- "name": "user",
1655
- "type": "address",
1656
- "internalType": "address"
1656
+ name: "user",
1657
+ type: "address",
1658
+ internalType: "address"
1657
1659
  },
1658
1660
  {
1659
- "name": "securityZone",
1660
- "type": "uint8",
1661
- "internalType": "uint8"
1661
+ name: "securityZone",
1662
+ type: "uint8",
1663
+ internalType: "uint8"
1662
1664
  },
1663
1665
  {
1664
- "name": "",
1665
- "type": "uint256",
1666
- "internalType": "uint256"
1666
+ name: "",
1667
+ type: "uint256",
1668
+ internalType: "uint256"
1667
1669
  }
1668
1670
  ],
1669
- "outputs": [
1671
+ outputs: [
1670
1672
  {
1671
- "name": "",
1672
- "type": "tuple",
1673
- "internalType": "struct EncryptedInput",
1674
- "components": [
1673
+ name: "",
1674
+ type: "tuple",
1675
+ internalType: "struct EncryptedInput",
1676
+ components: [
1675
1677
  {
1676
- "name": "ctHash",
1677
- "type": "uint256",
1678
- "internalType": "uint256"
1678
+ name: "ctHash",
1679
+ type: "uint256",
1680
+ internalType: "uint256"
1679
1681
  },
1680
1682
  {
1681
- "name": "securityZone",
1682
- "type": "uint8",
1683
- "internalType": "uint8"
1683
+ name: "securityZone",
1684
+ type: "uint8",
1685
+ internalType: "uint8"
1684
1686
  },
1685
1687
  {
1686
- "name": "utype",
1687
- "type": "uint8",
1688
- "internalType": "uint8"
1688
+ name: "utype",
1689
+ type: "uint8",
1690
+ internalType: "uint8"
1689
1691
  },
1690
1692
  {
1691
- "name": "signature",
1692
- "type": "bytes",
1693
- "internalType": "bytes"
1693
+ name: "signature",
1694
+ type: "bytes",
1695
+ internalType: "bytes"
1694
1696
  }
1695
1697
  ]
1696
1698
  }
1697
1699
  ],
1698
- "stateMutability": "nonpayable"
1700
+ stateMutability: "nonpayable"
1699
1701
  },
1700
1702
  {
1701
- "type": "function",
1702
- "name": "zkVerifyCalcCtHash",
1703
- "inputs": [
1703
+ type: "function",
1704
+ name: "zkVerifyCalcCtHash",
1705
+ inputs: [
1704
1706
  {
1705
- "name": "value",
1706
- "type": "uint256",
1707
- "internalType": "uint256"
1707
+ name: "value",
1708
+ type: "uint256",
1709
+ internalType: "uint256"
1708
1710
  },
1709
1711
  {
1710
- "name": "utype",
1711
- "type": "uint8",
1712
- "internalType": "uint8"
1712
+ name: "utype",
1713
+ type: "uint8",
1714
+ internalType: "uint8"
1713
1715
  },
1714
1716
  {
1715
- "name": "user",
1716
- "type": "address",
1717
- "internalType": "address"
1717
+ name: "user",
1718
+ type: "address",
1719
+ internalType: "address"
1718
1720
  },
1719
1721
  {
1720
- "name": "securityZone",
1721
- "type": "uint8",
1722
- "internalType": "uint8"
1722
+ name: "securityZone",
1723
+ type: "uint8",
1724
+ internalType: "uint8"
1723
1725
  },
1724
1726
  {
1725
- "name": "",
1726
- "type": "uint256",
1727
- "internalType": "uint256"
1727
+ name: "",
1728
+ type: "uint256",
1729
+ internalType: "uint256"
1728
1730
  }
1729
1731
  ],
1730
- "outputs": [
1732
+ outputs: [
1731
1733
  {
1732
- "name": "ctHash",
1733
- "type": "uint256",
1734
- "internalType": "uint256"
1734
+ name: "ctHash",
1735
+ type: "uint256",
1736
+ internalType: "uint256"
1735
1737
  }
1736
1738
  ],
1737
- "stateMutability": "view"
1739
+ stateMutability: "view"
1738
1740
  },
1739
1741
  {
1740
- "type": "function",
1741
- "name": "zkVerifyCalcCtHashesPacked",
1742
- "inputs": [
1742
+ type: "function",
1743
+ name: "zkVerifyCalcCtHashesPacked",
1744
+ inputs: [
1743
1745
  {
1744
- "name": "values",
1745
- "type": "uint256[]",
1746
- "internalType": "uint256[]"
1746
+ name: "values",
1747
+ type: "uint256[]",
1748
+ internalType: "uint256[]"
1747
1749
  },
1748
1750
  {
1749
- "name": "utypes",
1750
- "type": "uint8[]",
1751
- "internalType": "uint8[]"
1751
+ name: "utypes",
1752
+ type: "uint8[]",
1753
+ internalType: "uint8[]"
1752
1754
  },
1753
1755
  {
1754
- "name": "user",
1755
- "type": "address",
1756
- "internalType": "address"
1756
+ name: "user",
1757
+ type: "address",
1758
+ internalType: "address"
1757
1759
  },
1758
1760
  {
1759
- "name": "securityZone",
1760
- "type": "uint8",
1761
- "internalType": "uint8"
1761
+ name: "securityZone",
1762
+ type: "uint8",
1763
+ internalType: "uint8"
1762
1764
  },
1763
1765
  {
1764
- "name": "chainId",
1765
- "type": "uint256",
1766
- "internalType": "uint256"
1766
+ name: "chainId",
1767
+ type: "uint256",
1768
+ internalType: "uint256"
1767
1769
  }
1768
1770
  ],
1769
- "outputs": [
1771
+ outputs: [
1770
1772
  {
1771
- "name": "ctHashes",
1772
- "type": "uint256[]",
1773
- "internalType": "uint256[]"
1773
+ name: "ctHashes",
1774
+ type: "uint256[]",
1775
+ internalType: "uint256[]"
1774
1776
  }
1775
1777
  ],
1776
- "stateMutability": "view"
1778
+ stateMutability: "view"
1777
1779
  },
1778
1780
  {
1779
- "type": "function",
1780
- "name": "zkVerifyPacked",
1781
- "inputs": [
1781
+ type: "function",
1782
+ name: "zkVerifyPacked",
1783
+ inputs: [
1782
1784
  {
1783
- "name": "values",
1784
- "type": "uint256[]",
1785
- "internalType": "uint256[]"
1785
+ name: "values",
1786
+ type: "uint256[]",
1787
+ internalType: "uint256[]"
1786
1788
  },
1787
1789
  {
1788
- "name": "utypes",
1789
- "type": "uint8[]",
1790
- "internalType": "uint8[]"
1790
+ name: "utypes",
1791
+ type: "uint8[]",
1792
+ internalType: "uint8[]"
1791
1793
  },
1792
1794
  {
1793
- "name": "user",
1794
- "type": "address",
1795
- "internalType": "address"
1795
+ name: "user",
1796
+ type: "address",
1797
+ internalType: "address"
1796
1798
  },
1797
1799
  {
1798
- "name": "securityZone",
1799
- "type": "uint8",
1800
- "internalType": "uint8"
1800
+ name: "securityZone",
1801
+ type: "uint8",
1802
+ internalType: "uint8"
1801
1803
  },
1802
1804
  {
1803
- "name": "chainId",
1804
- "type": "uint256",
1805
- "internalType": "uint256"
1805
+ name: "chainId",
1806
+ type: "uint256",
1807
+ internalType: "uint256"
1806
1808
  }
1807
1809
  ],
1808
- "outputs": [
1810
+ outputs: [
1809
1811
  {
1810
- "name": "inputs",
1811
- "type": "tuple[]",
1812
- "internalType": "struct EncryptedInput[]",
1813
- "components": [
1812
+ name: "inputs",
1813
+ type: "tuple[]",
1814
+ internalType: "struct EncryptedInput[]",
1815
+ components: [
1814
1816
  {
1815
- "name": "ctHash",
1816
- "type": "uint256",
1817
- "internalType": "uint256"
1817
+ name: "ctHash",
1818
+ type: "uint256",
1819
+ internalType: "uint256"
1818
1820
  },
1819
1821
  {
1820
- "name": "securityZone",
1821
- "type": "uint8",
1822
- "internalType": "uint8"
1822
+ name: "securityZone",
1823
+ type: "uint8",
1824
+ internalType: "uint8"
1823
1825
  },
1824
1826
  {
1825
- "name": "utype",
1826
- "type": "uint8",
1827
- "internalType": "uint8"
1827
+ name: "utype",
1828
+ type: "uint8",
1829
+ internalType: "uint8"
1828
1830
  },
1829
1831
  {
1830
- "name": "signature",
1831
- "type": "bytes",
1832
- "internalType": "bytes"
1832
+ name: "signature",
1833
+ type: "bytes",
1834
+ internalType: "bytes"
1833
1835
  }
1834
1836
  ]
1835
1837
  }
1836
1838
  ],
1837
- "stateMutability": "nonpayable"
1839
+ stateMutability: "nonpayable"
1838
1840
  },
1839
1841
  {
1840
- "type": "error",
1841
- "name": "InvalidInputs",
1842
- "inputs": []
1842
+ type: "error",
1843
+ name: "InvalidInputs",
1844
+ inputs: []
1843
1845
  }
1844
1846
  ],
1845
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063772de59611610059578063772de596146100e9578063a2616ba914610119578063a9f046cd14610149578063d2a0693e146101655761007b565b8063267c4ae41461007f5780635946761f1461009d57806366dfcfc6146100cd575b5f5ffd5b610087610195565b6040516100949190610750565b60405180910390f35b6100b760048036038101906100b29190610a4d565b61019d565b6040516100c49190610c95565b60405180910390f35b6100e760048036038101906100e29190610cb5565b6102b5565b005b61010360048036038101906100fe9190610a4d565b61034d565b6040516101109190610d9b565b60405180910390f35b610133600480360381019061012e9190610dbb565b61045b565b6040516101409190610e92565b60405180910390f35b610163600480360381019061015e9190610eb2565b6104bd565b005b61017f600480360381019061017a9190610dbb565b61051b565b60405161018c9190610f37565b60405180910390f35b5f6001905090565b606085518551146101da576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156101f5576101f461078e565b5b60405190808252806020026020018201604052801561022e57816020015b61021b61070b565b8152602001906001900390816102135790505b5090505f5f90505b85518110156102ab5761028087828151811061025557610254610f50565b5b60200260200101518783815181106102705761026f610f50565b5b602002602001015187878761045b565b82828151811061029357610292610f50565b5b60200260200101819052508080600101915050610236565b5095945050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166315a486fe83836040518363ffffffff1660e01b8152600401610304929190610f7d565b5f604051808303815f87803b15801561031b575f5ffd5b505af115801561032d573d5f5f3e3d5ffd5b5050505060015f5f8282546103429190610fd1565b925050819055505050565b6060855185511461038a576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156103a5576103a461078e565b5b6040519080825280602002602001820160405280156103d35781602001602082028036833780820191505090505b5090505f5f90505b8551811015610451576104258782815181106103fa576103f9610f50565b5b602002602001015187838151811061041557610414610f50565b5b602002602001015187878761051b565b82828151811061043857610437610f50565b5b60200260200101818152505080806001019150506103db565b5095945050505050565b61046361070b565b5f6104708587868a610533565b905061047c81886102b5565b60405180608001604052808281526020018560ff1681526020018760ff16815260200160405180602001604052805f81525081525091505095945050505050565b5f5f90505b8251811015610516576105098382815181106104e1576104e0610f50565b5b60200260200101518383815181106104fc576104fb610f50565b5b60200260200101516102b5565b80806001019150506104c2565b505050565b5f61052884868589610533565b905095945050505050565b5f5f61053e83610611565b60405160200161054e919061103e565b60405160208183030381529060405290508061057f8773ffffffffffffffffffffffffffffffffffffffff16610611565b604051602001610590929190611054565b6040516020818303038152906040529050805f546040516020016105b49190611097565b604051602081830303815290604052805190602001206040516020016105db9291906110da565b60405160208183030381529060405290505f81805190602001209050610605815f1c86885f610673565b92505050949350505050565b60605f602067ffffffffffffffff81111561062f5761062e61078e565b5b6040519080825280601f01601f1916602001820160405280156106615781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6106a49190611101565b851690505f8460ff1660086106b985876106cc565b901b179050808217915050949350505050565b5f600160ff8016901c60ff168260ff1616836106e8575f610702565b600160ff8016901c60ff1660ff80166107019190611101565b5b17905092915050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f8115159050919050565b61074a81610736565b82525050565b5f6020820190506107635f830184610741565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107c48261077e565b810181811067ffffffffffffffff821117156107e3576107e261078e565b5b80604052505050565b5f6107f5610769565b905061080182826107bb565b919050565b5f67ffffffffffffffff8211156108205761081f61078e565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61084781610835565b8114610851575f5ffd5b50565b5f813590506108628161083e565b92915050565b5f61087a61087584610806565b6107ec565b9050808382526020820190506020840283018581111561089d5761089c610831565b5b835b818110156108c657806108b28882610854565b84526020840193505060208101905061089f565b5050509392505050565b5f82601f8301126108e4576108e361077a565b5b81356108f4848260208601610868565b91505092915050565b5f67ffffffffffffffff8211156109175761091661078e565b5b602082029050602081019050919050565b5f60ff82169050919050565b61093d81610928565b8114610947575f5ffd5b50565b5f8135905061095881610934565b92915050565b5f61097061096b846108fd565b6107ec565b9050808382526020820190506020840283018581111561099357610992610831565b5b835b818110156109bc57806109a8888261094a565b845260208401935050602081019050610995565b5050509392505050565b5f82601f8301126109da576109d961077a565b5b81356109ea84826020860161095e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a1c826109f3565b9050919050565b610a2c81610a12565b8114610a36575f5ffd5b50565b5f81359050610a4781610a23565b92915050565b5f5f5f5f5f60a08688031215610a6657610a65610772565b5b5f86013567ffffffffffffffff811115610a8357610a82610776565b5b610a8f888289016108d0565b955050602086013567ffffffffffffffff811115610ab057610aaf610776565b5b610abc888289016109c6565b9450506040610acd88828901610a39565b9350506060610ade8882890161094a565b9250506080610aef88828901610854565b9150509295509295909350565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610b2e81610835565b82525050565b610b3d81610928565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610b7582610b43565b610b7f8185610b4d565b9350610b8f818560208601610b5d565b610b988161077e565b840191505092915050565b5f608083015f830151610bb85f860182610b25565b506020830151610bcb6020860182610b34565b506040830151610bde6040860182610b34565b5060608301518482036060860152610bf68282610b6b565b9150508091505092915050565b5f610c0e8383610ba3565b905092915050565b5f602082019050919050565b5f610c2c82610afc565b610c368185610b06565b935083602082028501610c4885610b16565b805f5b85811015610c835784840389528151610c648582610c03565b9450610c6f83610c16565b925060208a01995050600181019050610c4b565b50829750879550505050505092915050565b5f6020820190508181035f830152610cad8184610c22565b905092915050565b5f5f60408385031215610ccb57610cca610772565b5b5f610cd885828601610854565b9250506020610ce985828601610854565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610d278383610b25565b60208301905092915050565b5f602082019050919050565b5f610d4982610cf3565b610d538185610cfd565b9350610d5e83610d0d565b805f5b83811015610d8e578151610d758882610d1c565b9750610d8083610d33565b925050600181019050610d61565b5085935050505092915050565b5f6020820190508181035f830152610db38184610d3f565b905092915050565b5f5f5f5f5f60a08688031215610dd457610dd3610772565b5b5f610de188828901610854565b9550506020610df28882890161094a565b9450506040610e0388828901610a39565b9350506060610e148882890161094a565b9250506080610e2588828901610854565b9150509295509295909350565b5f608083015f830151610e475f860182610b25565b506020830151610e5a6020860182610b34565b506040830151610e6d6040860182610b34565b5060608301518482036060860152610e858282610b6b565b9150508091505092915050565b5f6020820190508181035f830152610eaa8184610e32565b905092915050565b5f5f60408385031215610ec857610ec7610772565b5b5f83013567ffffffffffffffff811115610ee557610ee4610776565b5b610ef1858286016108d0565b925050602083013567ffffffffffffffff811115610f1257610f11610776565b5b610f1e858286016108d0565b9150509250929050565b610f3181610835565b82525050565b5f602082019050610f4a5f830184610f28565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050610f905f830185610f28565b610f9d6020830184610f28565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610fdb82610835565b9150610fe683610835565b9250828201905080821115610ffe57610ffd610fa4565b5b92915050565b5f81905092915050565b5f61101882610b43565b6110228185611004565b9350611032818560208601610b5d565b80840191505092915050565b5f611049828461100e565b915081905092915050565b5f61105f828561100e565b915061106b828461100e565b91508190509392505050565b5f819050919050565b61109161108c82610835565b611077565b82525050565b5f6110a28284611080565b60208201915081905092915050565b5f819050919050565b5f819050919050565b6110d46110cf826110b1565b6110ba565b82525050565b5f6110e5828561100e565b91506110f182846110c3565b6020820191508190509392505050565b5f61110b82610835565b915061111683610835565b925082820390508181111561112e5761112d610fa4565b5b9291505056fea26469706673582212209a9372bb7df7f6afcb2bce5c7034e71dcd36cd9afbe95c69abed265154e8332564736f6c634300081e0033"
1847
+ deployedBytecode: "0x608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063772de59611610059578063772de596146100e9578063a2616ba914610119578063a9f046cd14610149578063d2a0693e146101655761007b565b8063267c4ae41461007f5780635946761f1461009d57806366dfcfc6146100cd575b5f5ffd5b610087610195565b6040516100949190610750565b60405180910390f35b6100b760048036038101906100b29190610a4d565b61019d565b6040516100c49190610c95565b60405180910390f35b6100e760048036038101906100e29190610cb5565b6102b5565b005b61010360048036038101906100fe9190610a4d565b61034d565b6040516101109190610d9b565b60405180910390f35b610133600480360381019061012e9190610dbb565b61045b565b6040516101409190610e92565b60405180910390f35b610163600480360381019061015e9190610eb2565b6104bd565b005b61017f600480360381019061017a9190610dbb565b61051b565b60405161018c9190610f37565b60405180910390f35b5f6001905090565b606085518551146101da576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156101f5576101f461078e565b5b60405190808252806020026020018201604052801561022e57816020015b61021b61070b565b8152602001906001900390816102135790505b5090505f5f90505b85518110156102ab5761028087828151811061025557610254610f50565b5b60200260200101518783815181106102705761026f610f50565b5b602002602001015187878761045b565b82828151811061029357610292610f50565b5b60200260200101819052508080600101915050610236565b5095945050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166315a486fe83836040518363ffffffff1660e01b8152600401610304929190610f7d565b5f604051808303815f87803b15801561031b575f5ffd5b505af115801561032d573d5f5f3e3d5ffd5b5050505060015f5f8282546103429190610fd1565b925050819055505050565b6060855185511461038a576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156103a5576103a461078e565b5b6040519080825280602002602001820160405280156103d35781602001602082028036833780820191505090505b5090505f5f90505b8551811015610451576104258782815181106103fa576103f9610f50565b5b602002602001015187838151811061041557610414610f50565b5b602002602001015187878761051b565b82828151811061043857610437610f50565b5b60200260200101818152505080806001019150506103db565b5095945050505050565b61046361070b565b5f6104708587868a610533565b905061047c81886102b5565b60405180608001604052808281526020018560ff1681526020018760ff16815260200160405180602001604052805f81525081525091505095945050505050565b5f5f90505b8251811015610516576105098382815181106104e1576104e0610f50565b5b60200260200101518383815181106104fc576104fb610f50565b5b60200260200101516102b5565b80806001019150506104c2565b505050565b5f61052884868589610533565b905095945050505050565b5f5f61053e83610611565b60405160200161054e919061103e565b60405160208183030381529060405290508061057f8773ffffffffffffffffffffffffffffffffffffffff16610611565b604051602001610590929190611054565b6040516020818303038152906040529050805f546040516020016105b49190611097565b604051602081830303815290604052805190602001206040516020016105db9291906110da565b60405160208183030381529060405290505f81805190602001209050610605815f1c86885f610673565b92505050949350505050565b60605f602067ffffffffffffffff81111561062f5761062e61078e565b5b6040519080825280601f01601f1916602001820160405280156106615781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6106a49190611101565b851690505f8460ff1660086106b985876106cc565b901b179050808217915050949350505050565b5f600160ff8016901c60ff168260ff1616836106e8575f610702565b600160ff8016901c60ff1660ff80166107019190611101565b5b17905092915050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f8115159050919050565b61074a81610736565b82525050565b5f6020820190506107635f830184610741565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107c48261077e565b810181811067ffffffffffffffff821117156107e3576107e261078e565b5b80604052505050565b5f6107f5610769565b905061080182826107bb565b919050565b5f67ffffffffffffffff8211156108205761081f61078e565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61084781610835565b8114610851575f5ffd5b50565b5f813590506108628161083e565b92915050565b5f61087a61087584610806565b6107ec565b9050808382526020820190506020840283018581111561089d5761089c610831565b5b835b818110156108c657806108b28882610854565b84526020840193505060208101905061089f565b5050509392505050565b5f82601f8301126108e4576108e361077a565b5b81356108f4848260208601610868565b91505092915050565b5f67ffffffffffffffff8211156109175761091661078e565b5b602082029050602081019050919050565b5f60ff82169050919050565b61093d81610928565b8114610947575f5ffd5b50565b5f8135905061095881610934565b92915050565b5f61097061096b846108fd565b6107ec565b9050808382526020820190506020840283018581111561099357610992610831565b5b835b818110156109bc57806109a8888261094a565b845260208401935050602081019050610995565b5050509392505050565b5f82601f8301126109da576109d961077a565b5b81356109ea84826020860161095e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a1c826109f3565b9050919050565b610a2c81610a12565b8114610a36575f5ffd5b50565b5f81359050610a4781610a23565b92915050565b5f5f5f5f5f60a08688031215610a6657610a65610772565b5b5f86013567ffffffffffffffff811115610a8357610a82610776565b5b610a8f888289016108d0565b955050602086013567ffffffffffffffff811115610ab057610aaf610776565b5b610abc888289016109c6565b9450506040610acd88828901610a39565b9350506060610ade8882890161094a565b9250506080610aef88828901610854565b9150509295509295909350565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610b2e81610835565b82525050565b610b3d81610928565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610b7582610b43565b610b7f8185610b4d565b9350610b8f818560208601610b5d565b610b988161077e565b840191505092915050565b5f608083015f830151610bb85f860182610b25565b506020830151610bcb6020860182610b34565b506040830151610bde6040860182610b34565b5060608301518482036060860152610bf68282610b6b565b9150508091505092915050565b5f610c0e8383610ba3565b905092915050565b5f602082019050919050565b5f610c2c82610afc565b610c368185610b06565b935083602082028501610c4885610b16565b805f5b85811015610c835784840389528151610c648582610c03565b9450610c6f83610c16565b925060208a01995050600181019050610c4b565b50829750879550505050505092915050565b5f6020820190508181035f830152610cad8184610c22565b905092915050565b5f5f60408385031215610ccb57610cca610772565b5b5f610cd885828601610854565b9250506020610ce985828601610854565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610d278383610b25565b60208301905092915050565b5f602082019050919050565b5f610d4982610cf3565b610d538185610cfd565b9350610d5e83610d0d565b805f5b83811015610d8e578151610d758882610d1c565b9750610d8083610d33565b925050600181019050610d61565b5085935050505092915050565b5f6020820190508181035f830152610db38184610d3f565b905092915050565b5f5f5f5f5f60a08688031215610dd457610dd3610772565b5b5f610de188828901610854565b9550506020610df28882890161094a565b9450506040610e0388828901610a39565b9350506060610e148882890161094a565b9250506080610e2588828901610854565b9150509295509295909350565b5f608083015f830151610e475f860182610b25565b506020830151610e5a6020860182610b34565b506040830151610e6d6040860182610b34565b5060608301518482036060860152610e858282610b6b565b9150508091505092915050565b5f6020820190508181035f830152610eaa8184610e32565b905092915050565b5f5f60408385031215610ec857610ec7610772565b5b5f83013567ffffffffffffffff811115610ee557610ee4610776565b5b610ef1858286016108d0565b925050602083013567ffffffffffffffff811115610f1257610f11610776565b5b610f1e858286016108d0565b9150509250929050565b610f3181610835565b82525050565b5f602082019050610f4a5f830184610f28565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050610f905f830185610f28565b610f9d6020830184610f28565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610fdb82610835565b9150610fe683610835565b9250828201905080821115610ffe57610ffd610fa4565b5b92915050565b5f81905092915050565b5f61101882610b43565b6110228185611004565b9350611032818560208601610b5d565b80840191505092915050565b5f611049828461100e565b915081905092915050565b5f61105f828561100e565b915061106b828461100e565b91508190509392505050565b5f819050919050565b61109161108c82610835565b611077565b82525050565b5f6110a28284611080565b60208201915081905092915050565b5f819050919050565b5f819050919050565b6110d46110cf826110b1565b6110ba565b82525050565b5f6110e5828561100e565b91506110f182846110c3565b6020820191508190509392505050565b5f61110b82610835565b915061111683610835565b925082820390508181111561112e5761112d610fa4565b5b9291505056fea2646970667358221220b1548315347fff19febfb4a67e626c11bb208bcfce36ad53d3f7eb402e8d05a964736f6c63430008210033",
1848
+ bytecode: "0x60806040525f5f553480156011575f5ffd5b5061116a8061001f5f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063772de59611610059578063772de596146100e9578063a2616ba914610119578063a9f046cd14610149578063d2a0693e146101655761007b565b8063267c4ae41461007f5780635946761f1461009d57806366dfcfc6146100cd575b5f5ffd5b610087610195565b6040516100949190610750565b60405180910390f35b6100b760048036038101906100b29190610a4d565b61019d565b6040516100c49190610c95565b60405180910390f35b6100e760048036038101906100e29190610cb5565b6102b5565b005b61010360048036038101906100fe9190610a4d565b61034d565b6040516101109190610d9b565b60405180910390f35b610133600480360381019061012e9190610dbb565b61045b565b6040516101409190610e92565b60405180910390f35b610163600480360381019061015e9190610eb2565b6104bd565b005b61017f600480360381019061017a9190610dbb565b61051b565b60405161018c9190610f37565b60405180910390f35b5f6001905090565b606085518551146101da576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156101f5576101f461078e565b5b60405190808252806020026020018201604052801561022e57816020015b61021b61070b565b8152602001906001900390816102135790505b5090505f5f90505b85518110156102ab5761028087828151811061025557610254610f50565b5b60200260200101518783815181106102705761026f610f50565b5b602002602001015187878761045b565b82828151811061029357610292610f50565b5b60200260200101819052508080600101915050610236565b5095945050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166315a486fe83836040518363ffffffff1660e01b8152600401610304929190610f7d565b5f604051808303815f87803b15801561031b575f5ffd5b505af115801561032d573d5f5f3e3d5ffd5b5050505060015f5f8282546103429190610fd1565b925050819055505050565b6060855185511461038a576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845167ffffffffffffffff8111156103a5576103a461078e565b5b6040519080825280602002602001820160405280156103d35781602001602082028036833780820191505090505b5090505f5f90505b8551811015610451576104258782815181106103fa576103f9610f50565b5b602002602001015187838151811061041557610414610f50565b5b602002602001015187878761051b565b82828151811061043857610437610f50565b5b60200260200101818152505080806001019150506103db565b5095945050505050565b61046361070b565b5f6104708587868a610533565b905061047c81886102b5565b60405180608001604052808281526020018560ff1681526020018760ff16815260200160405180602001604052805f81525081525091505095945050505050565b5f5f90505b8251811015610516576105098382815181106104e1576104e0610f50565b5b60200260200101518383815181106104fc576104fb610f50565b5b60200260200101516102b5565b80806001019150506104c2565b505050565b5f61052884868589610533565b905095945050505050565b5f5f61053e83610611565b60405160200161054e919061103e565b60405160208183030381529060405290508061057f8773ffffffffffffffffffffffffffffffffffffffff16610611565b604051602001610590929190611054565b6040516020818303038152906040529050805f546040516020016105b49190611097565b604051602081830303815290604052805190602001206040516020016105db9291906110da565b60405160208183030381529060405290505f81805190602001209050610605815f1c86885f610673565b92505050949350505050565b60605f602067ffffffffffffffff81111561062f5761062e61078e565b5b6040519080825280601f01601f1916602001820160405280156106615781602001600182028036833780820191505090505b50905082602082015280915050919050565b5f61ffff80167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6106a49190611101565b851690505f8460ff1660086106b985876106cc565b901b179050808217915050949350505050565b5f600160ff8016901c60ff168260ff1616836106e8575f610702565b600160ff8016901c60ff1660ff80166107019190611101565b5b17905092915050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f8115159050919050565b61074a81610736565b82525050565b5f6020820190506107635f830184610741565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6107c48261077e565b810181811067ffffffffffffffff821117156107e3576107e261078e565b5b80604052505050565b5f6107f5610769565b905061080182826107bb565b919050565b5f67ffffffffffffffff8211156108205761081f61078e565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61084781610835565b8114610851575f5ffd5b50565b5f813590506108628161083e565b92915050565b5f61087a61087584610806565b6107ec565b9050808382526020820190506020840283018581111561089d5761089c610831565b5b835b818110156108c657806108b28882610854565b84526020840193505060208101905061089f565b5050509392505050565b5f82601f8301126108e4576108e361077a565b5b81356108f4848260208601610868565b91505092915050565b5f67ffffffffffffffff8211156109175761091661078e565b5b602082029050602081019050919050565b5f60ff82169050919050565b61093d81610928565b8114610947575f5ffd5b50565b5f8135905061095881610934565b92915050565b5f61097061096b846108fd565b6107ec565b9050808382526020820190506020840283018581111561099357610992610831565b5b835b818110156109bc57806109a8888261094a565b845260208401935050602081019050610995565b5050509392505050565b5f82601f8301126109da576109d961077a565b5b81356109ea84826020860161095e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a1c826109f3565b9050919050565b610a2c81610a12565b8114610a36575f5ffd5b50565b5f81359050610a4781610a23565b92915050565b5f5f5f5f5f60a08688031215610a6657610a65610772565b5b5f86013567ffffffffffffffff811115610a8357610a82610776565b5b610a8f888289016108d0565b955050602086013567ffffffffffffffff811115610ab057610aaf610776565b5b610abc888289016109c6565b9450506040610acd88828901610a39565b9350506060610ade8882890161094a565b9250506080610aef88828901610854565b9150509295509295909350565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610b2e81610835565b82525050565b610b3d81610928565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610b7582610b43565b610b7f8185610b4d565b9350610b8f818560208601610b5d565b610b988161077e565b840191505092915050565b5f608083015f830151610bb85f860182610b25565b506020830151610bcb6020860182610b34565b506040830151610bde6040860182610b34565b5060608301518482036060860152610bf68282610b6b565b9150508091505092915050565b5f610c0e8383610ba3565b905092915050565b5f602082019050919050565b5f610c2c82610afc565b610c368185610b06565b935083602082028501610c4885610b16565b805f5b85811015610c835784840389528151610c648582610c03565b9450610c6f83610c16565b925060208a01995050600181019050610c4b565b50829750879550505050505092915050565b5f6020820190508181035f830152610cad8184610c22565b905092915050565b5f5f60408385031215610ccb57610cca610772565b5b5f610cd885828601610854565b9250506020610ce985828601610854565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f610d278383610b25565b60208301905092915050565b5f602082019050919050565b5f610d4982610cf3565b610d538185610cfd565b9350610d5e83610d0d565b805f5b83811015610d8e578151610d758882610d1c565b9750610d8083610d33565b925050600181019050610d61565b5085935050505092915050565b5f6020820190508181035f830152610db38184610d3f565b905092915050565b5f5f5f5f5f60a08688031215610dd457610dd3610772565b5b5f610de188828901610854565b9550506020610df28882890161094a565b9450506040610e0388828901610a39565b9350506060610e148882890161094a565b9250506080610e2588828901610854565b9150509295509295909350565b5f608083015f830151610e475f860182610b25565b506020830151610e5a6020860182610b34565b506040830151610e6d6040860182610b34565b5060608301518482036060860152610e858282610b6b565b9150508091505092915050565b5f6020820190508181035f830152610eaa8184610e32565b905092915050565b5f5f60408385031215610ec857610ec7610772565b5b5f83013567ffffffffffffffff811115610ee557610ee4610776565b5b610ef1858286016108d0565b925050602083013567ffffffffffffffff811115610f1257610f11610776565b5b610f1e858286016108d0565b9150509250929050565b610f3181610835565b82525050565b5f602082019050610f4a5f830184610f28565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050610f905f830185610f28565b610f9d6020830184610f28565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610fdb82610835565b9150610fe683610835565b9250828201905080821115610ffe57610ffd610fa4565b5b92915050565b5f81905092915050565b5f61101882610b43565b6110228185611004565b9350611032818560208601610b5d565b80840191505092915050565b5f611049828461100e565b915081905092915050565b5f61105f828561100e565b915061106b828461100e565b91508190509392505050565b5f819050919050565b61109161108c82610835565b611077565b82525050565b5f6110a28284611080565b60208201915081905092915050565b5f819050919050565b5f819050919050565b6110d46110cf826110b1565b6110ba565b82525050565b5f6110e5828561100e565b91506110f182846110c3565b6020820191508190509392505050565b5f61110b82610835565b915061111683610835565b925082820390508181111561112e5761112d610fa4565b5b9291505056fea2646970667358221220b1548315347fff19febfb4a67e626c11bb208bcfce36ad53d3f7eb402e8d05a964736f6c63430008210033"
1846
1849
  };
1847
1850
 
1848
1851
  // src/MockQueryDecrypter.ts
1849
1852
  var MockQueryDecrypterArtifact = {
1850
- "contractName": "MockQueryDecrypter",
1851
- "fixedAddress": "0x0000000000000000000000000000000000000200",
1852
- "abi": [
1853
+ contractName: "MockQueryDecrypter",
1854
+ fixedAddress: "0x0000000000000000000000000000000000000200",
1855
+ abi: [
1853
1856
  {
1854
- "type": "function",
1855
- "name": "decodeLowLevelReversion",
1856
- "inputs": [
1857
+ type: "function",
1858
+ name: "decodeLowLevelReversion",
1859
+ inputs: [
1857
1860
  {
1858
- "name": "data",
1859
- "type": "bytes",
1860
- "internalType": "bytes"
1861
+ name: "data",
1862
+ type: "bytes",
1863
+ internalType: "bytes"
1861
1864
  }
1862
1865
  ],
1863
- "outputs": [
1866
+ outputs: [
1864
1867
  {
1865
- "name": "error",
1866
- "type": "string",
1867
- "internalType": "string"
1868
+ name: "error",
1869
+ type: "string",
1870
+ internalType: "string"
1868
1871
  }
1869
1872
  ],
1870
- "stateMutability": "pure"
1873
+ stateMutability: "pure"
1871
1874
  },
1872
1875
  {
1873
- "type": "function",
1874
- "name": "exists",
1875
- "inputs": [],
1876
- "outputs": [
1876
+ type: "function",
1877
+ name: "exists",
1878
+ inputs: [],
1879
+ outputs: [
1877
1880
  {
1878
- "name": "",
1879
- "type": "bool",
1880
- "internalType": "bool"
1881
+ name: "",
1882
+ type: "bool",
1883
+ internalType: "bool"
1881
1884
  }
1882
1885
  ],
1883
- "stateMutability": "pure"
1886
+ stateMutability: "pure"
1884
1887
  },
1885
1888
  {
1886
- "type": "function",
1887
- "name": "initialize",
1888
- "inputs": [
1889
+ type: "function",
1890
+ name: "initialize",
1891
+ inputs: [
1889
1892
  {
1890
- "name": "_taskManager",
1891
- "type": "address",
1892
- "internalType": "address"
1893
+ name: "_taskManager",
1894
+ type: "address",
1895
+ internalType: "address"
1893
1896
  },
1894
1897
  {
1895
- "name": "_acl",
1896
- "type": "address",
1897
- "internalType": "address"
1898
+ name: "_acl",
1899
+ type: "address",
1900
+ internalType: "address"
1898
1901
  }
1899
1902
  ],
1900
- "outputs": [],
1901
- "stateMutability": "nonpayable"
1903
+ outputs: [],
1904
+ stateMutability: "nonpayable"
1902
1905
  },
1903
1906
  {
1904
- "type": "function",
1905
- "name": "mockAcl",
1906
- "inputs": [],
1907
- "outputs": [
1907
+ type: "function",
1908
+ name: "mockAcl",
1909
+ inputs: [],
1910
+ outputs: [
1908
1911
  {
1909
- "name": "",
1910
- "type": "address",
1911
- "internalType": "contract MockACL"
1912
+ name: "",
1913
+ type: "address",
1914
+ internalType: "contract MockACL"
1912
1915
  }
1913
1916
  ],
1914
- "stateMutability": "view"
1917
+ stateMutability: "view"
1915
1918
  },
1916
1919
  {
1917
- "type": "function",
1918
- "name": "mockQueryDecrypt",
1919
- "inputs": [
1920
+ type: "function",
1921
+ name: "mockQueryDecrypt",
1922
+ inputs: [
1920
1923
  {
1921
- "name": "ctHash",
1922
- "type": "uint256",
1923
- "internalType": "uint256"
1924
+ name: "ctHash",
1925
+ type: "uint256",
1926
+ internalType: "uint256"
1924
1927
  },
1925
1928
  {
1926
- "name": "",
1927
- "type": "uint256",
1928
- "internalType": "uint256"
1929
+ name: "",
1930
+ type: "uint256",
1931
+ internalType: "uint256"
1929
1932
  },
1930
1933
  {
1931
- "name": "issuer",
1932
- "type": "address",
1933
- "internalType": "address"
1934
+ name: "issuer",
1935
+ type: "address",
1936
+ internalType: "address"
1934
1937
  }
1935
1938
  ],
1936
- "outputs": [
1939
+ outputs: [
1937
1940
  {
1938
- "name": "allowed",
1939
- "type": "bool",
1940
- "internalType": "bool"
1941
+ name: "allowed",
1942
+ type: "bool",
1943
+ internalType: "bool"
1941
1944
  },
1942
1945
  {
1943
- "name": "error",
1944
- "type": "string",
1945
- "internalType": "string"
1946
+ name: "error",
1947
+ type: "string",
1948
+ internalType: "string"
1946
1949
  },
1947
1950
  {
1948
- "name": "",
1949
- "type": "uint256",
1950
- "internalType": "uint256"
1951
+ name: "",
1952
+ type: "uint256",
1953
+ internalType: "uint256"
1951
1954
  }
1952
1955
  ],
1953
- "stateMutability": "view"
1956
+ stateMutability: "view"
1954
1957
  },
1955
1958
  {
1956
- "type": "function",
1957
- "name": "mockTaskManager",
1958
- "inputs": [],
1959
- "outputs": [
1959
+ type: "function",
1960
+ name: "mockTaskManager",
1961
+ inputs: [],
1962
+ outputs: [
1960
1963
  {
1961
- "name": "",
1962
- "type": "address",
1963
- "internalType": "contract MockTaskManager"
1964
+ name: "",
1965
+ type: "address",
1966
+ internalType: "contract MockTaskManager"
1964
1967
  }
1965
1968
  ],
1966
- "stateMutability": "view"
1969
+ stateMutability: "view"
1967
1970
  },
1968
1971
  {
1969
- "type": "function",
1970
- "name": "queryDecrypt",
1971
- "inputs": [
1972
+ type: "function",
1973
+ name: "queryDecrypt",
1974
+ inputs: [
1972
1975
  {
1973
- "name": "ctHash",
1974
- "type": "uint256",
1975
- "internalType": "uint256"
1976
+ name: "ctHash",
1977
+ type: "uint256",
1978
+ internalType: "uint256"
1976
1979
  },
1977
1980
  {
1978
- "name": "",
1979
- "type": "uint256",
1980
- "internalType": "uint256"
1981
+ name: "",
1982
+ type: "uint256",
1983
+ internalType: "uint256"
1981
1984
  },
1982
1985
  {
1983
- "name": "permission",
1984
- "type": "tuple",
1985
- "internalType": "struct Permission",
1986
- "components": [
1986
+ name: "permission",
1987
+ type: "tuple",
1988
+ internalType: "struct Permission",
1989
+ components: [
1987
1990
  {
1988
- "name": "issuer",
1989
- "type": "address",
1990
- "internalType": "address"
1991
+ name: "issuer",
1992
+ type: "address",
1993
+ internalType: "address"
1991
1994
  },
1992
1995
  {
1993
- "name": "expiration",
1994
- "type": "uint64",
1995
- "internalType": "uint64"
1996
+ name: "expiration",
1997
+ type: "uint64",
1998
+ internalType: "uint64"
1996
1999
  },
1997
2000
  {
1998
- "name": "recipient",
1999
- "type": "address",
2000
- "internalType": "address"
2001
+ name: "recipient",
2002
+ type: "address",
2003
+ internalType: "address"
2001
2004
  },
2002
2005
  {
2003
- "name": "validatorId",
2004
- "type": "uint256",
2005
- "internalType": "uint256"
2006
+ name: "validatorId",
2007
+ type: "uint256",
2008
+ internalType: "uint256"
2006
2009
  },
2007
2010
  {
2008
- "name": "validatorContract",
2009
- "type": "address",
2010
- "internalType": "address"
2011
+ name: "validatorContract",
2012
+ type: "address",
2013
+ internalType: "address"
2011
2014
  },
2012
2015
  {
2013
- "name": "sealingKey",
2014
- "type": "bytes32",
2015
- "internalType": "bytes32"
2016
+ name: "sealingKey",
2017
+ type: "bytes32",
2018
+ internalType: "bytes32"
2016
2019
  },
2017
2020
  {
2018
- "name": "issuerSignature",
2019
- "type": "bytes",
2020
- "internalType": "bytes"
2021
+ name: "issuerSignature",
2022
+ type: "bytes",
2023
+ internalType: "bytes"
2021
2024
  },
2022
2025
  {
2023
- "name": "recipientSignature",
2024
- "type": "bytes",
2025
- "internalType": "bytes"
2026
+ name: "recipientSignature",
2027
+ type: "bytes",
2028
+ internalType: "bytes"
2026
2029
  }
2027
2030
  ]
2028
2031
  }
2029
2032
  ],
2030
- "outputs": [
2033
+ outputs: [
2031
2034
  {
2032
- "name": "allowed",
2033
- "type": "bool",
2034
- "internalType": "bool"
2035
+ name: "allowed",
2036
+ type: "bool",
2037
+ internalType: "bool"
2035
2038
  },
2036
2039
  {
2037
- "name": "error",
2038
- "type": "string",
2039
- "internalType": "string"
2040
+ name: "error",
2041
+ type: "string",
2042
+ internalType: "string"
2040
2043
  },
2041
2044
  {
2042
- "name": "",
2043
- "type": "uint256",
2044
- "internalType": "uint256"
2045
+ name: "",
2046
+ type: "uint256",
2047
+ internalType: "uint256"
2045
2048
  }
2046
2049
  ],
2047
- "stateMutability": "view"
2050
+ stateMutability: "view"
2048
2051
  },
2049
2052
  {
2050
- "type": "function",
2051
- "name": "querySealOutput",
2052
- "inputs": [
2053
+ type: "function",
2054
+ name: "querySealOutput",
2055
+ inputs: [
2053
2056
  {
2054
- "name": "ctHash",
2055
- "type": "uint256",
2056
- "internalType": "uint256"
2057
+ name: "ctHash",
2058
+ type: "uint256",
2059
+ internalType: "uint256"
2057
2060
  },
2058
2061
  {
2059
- "name": "",
2060
- "type": "uint256",
2061
- "internalType": "uint256"
2062
+ name: "",
2063
+ type: "uint256",
2064
+ internalType: "uint256"
2062
2065
  },
2063
2066
  {
2064
- "name": "permission",
2065
- "type": "tuple",
2066
- "internalType": "struct Permission",
2067
- "components": [
2067
+ name: "permission",
2068
+ type: "tuple",
2069
+ internalType: "struct Permission",
2070
+ components: [
2068
2071
  {
2069
- "name": "issuer",
2070
- "type": "address",
2071
- "internalType": "address"
2072
+ name: "issuer",
2073
+ type: "address",
2074
+ internalType: "address"
2072
2075
  },
2073
2076
  {
2074
- "name": "expiration",
2075
- "type": "uint64",
2076
- "internalType": "uint64"
2077
+ name: "expiration",
2078
+ type: "uint64",
2079
+ internalType: "uint64"
2077
2080
  },
2078
2081
  {
2079
- "name": "recipient",
2080
- "type": "address",
2081
- "internalType": "address"
2082
+ name: "recipient",
2083
+ type: "address",
2084
+ internalType: "address"
2082
2085
  },
2083
2086
  {
2084
- "name": "validatorId",
2085
- "type": "uint256",
2086
- "internalType": "uint256"
2087
+ name: "validatorId",
2088
+ type: "uint256",
2089
+ internalType: "uint256"
2087
2090
  },
2088
2091
  {
2089
- "name": "validatorContract",
2090
- "type": "address",
2091
- "internalType": "address"
2092
+ name: "validatorContract",
2093
+ type: "address",
2094
+ internalType: "address"
2092
2095
  },
2093
2096
  {
2094
- "name": "sealingKey",
2095
- "type": "bytes32",
2096
- "internalType": "bytes32"
2097
+ name: "sealingKey",
2098
+ type: "bytes32",
2099
+ internalType: "bytes32"
2097
2100
  },
2098
2101
  {
2099
- "name": "issuerSignature",
2100
- "type": "bytes",
2101
- "internalType": "bytes"
2102
+ name: "issuerSignature",
2103
+ type: "bytes",
2104
+ internalType: "bytes"
2102
2105
  },
2103
2106
  {
2104
- "name": "recipientSignature",
2105
- "type": "bytes",
2106
- "internalType": "bytes"
2107
+ name: "recipientSignature",
2108
+ type: "bytes",
2109
+ internalType: "bytes"
2107
2110
  }
2108
2111
  ]
2109
2112
  }
2110
2113
  ],
2111
- "outputs": [
2114
+ outputs: [
2112
2115
  {
2113
- "name": "allowed",
2114
- "type": "bool",
2115
- "internalType": "bool"
2116
+ name: "allowed",
2117
+ type: "bool",
2118
+ internalType: "bool"
2116
2119
  },
2117
2120
  {
2118
- "name": "error",
2119
- "type": "string",
2120
- "internalType": "string"
2121
+ name: "error",
2122
+ type: "string",
2123
+ internalType: "string"
2121
2124
  },
2122
2125
  {
2123
- "name": "",
2124
- "type": "bytes32",
2125
- "internalType": "bytes32"
2126
+ name: "",
2127
+ type: "bytes32",
2128
+ internalType: "bytes32"
2126
2129
  }
2127
2130
  ],
2128
- "stateMutability": "view"
2131
+ stateMutability: "view"
2129
2132
  },
2130
2133
  {
2131
- "type": "function",
2132
- "name": "seal",
2133
- "inputs": [
2134
+ type: "function",
2135
+ name: "seal",
2136
+ inputs: [
2134
2137
  {
2135
- "name": "input",
2136
- "type": "uint256",
2137
- "internalType": "uint256"
2138
+ name: "input",
2139
+ type: "uint256",
2140
+ internalType: "uint256"
2138
2141
  },
2139
2142
  {
2140
- "name": "key",
2141
- "type": "bytes32",
2142
- "internalType": "bytes32"
2143
+ name: "key",
2144
+ type: "bytes32",
2145
+ internalType: "bytes32"
2143
2146
  }
2144
2147
  ],
2145
- "outputs": [
2148
+ outputs: [
2146
2149
  {
2147
- "name": "",
2148
- "type": "bytes32",
2149
- "internalType": "bytes32"
2150
+ name: "",
2151
+ type: "bytes32",
2152
+ internalType: "bytes32"
2150
2153
  }
2151
2154
  ],
2152
- "stateMutability": "pure"
2155
+ stateMutability: "pure"
2153
2156
  },
2154
2157
  {
2155
- "type": "function",
2156
- "name": "unseal",
2157
- "inputs": [
2158
+ type: "function",
2159
+ name: "unseal",
2160
+ inputs: [
2158
2161
  {
2159
- "name": "hashed",
2160
- "type": "bytes32",
2161
- "internalType": "bytes32"
2162
+ name: "hashed",
2163
+ type: "bytes32",
2164
+ internalType: "bytes32"
2162
2165
  },
2163
2166
  {
2164
- "name": "key",
2165
- "type": "bytes32",
2166
- "internalType": "bytes32"
2167
+ name: "key",
2168
+ type: "bytes32",
2169
+ internalType: "bytes32"
2167
2170
  }
2168
2171
  ],
2169
- "outputs": [
2172
+ outputs: [
2170
2173
  {
2171
- "name": "",
2172
- "type": "uint256",
2173
- "internalType": "uint256"
2174
+ name: "",
2175
+ type: "uint256",
2176
+ internalType: "uint256"
2174
2177
  }
2175
2178
  ],
2176
- "stateMutability": "pure"
2179
+ stateMutability: "pure"
2177
2180
  },
2178
2181
  {
2179
- "type": "error",
2180
- "name": "NotAllowed",
2181
- "inputs": []
2182
+ type: "error",
2183
+ name: "NotAllowed",
2184
+ inputs: []
2182
2185
  },
2183
2186
  {
2184
- "type": "error",
2185
- "name": "SealingKeyInvalid",
2186
- "inputs": []
2187
+ type: "error",
2188
+ name: "SealingKeyInvalid",
2189
+ inputs: []
2187
2190
  },
2188
2191
  {
2189
- "type": "error",
2190
- "name": "SealingKeyMissing",
2191
- "inputs": []
2192
+ type: "error",
2193
+ name: "SealingKeyMissing",
2194
+ inputs: []
2192
2195
  }
2193
2196
  ],
2194
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80637e0f4b5b116100645780637e0f4b5b1461015a5780638a5c8c7f14610178578063a02eb534146101a8578063a0639f54146101da578063ff6957d31461020c5761009c565b806309ba3156146100a05780631a1992a9146100d2578063267c4ae414610102578063485cc955146101205780634cdc014d1461013c575b5f5ffd5b6100ba60048036038101906100b591906110b5565b61023c565b6040516100c9939291906111aa565b60405180910390f35b6100ec60048036038101906100e791906111e6565b61051f565b6040516100f99190611224565b60405180910390f35b61010a61052d565b604051610117919061123d565b60405180910390f35b61013a60048036038101906101359190611256565b610535565b005b6101446105b8565b60405161015191906112ef565b60405180910390f35b6101626105dd565b60405161016f9190611328565b60405180910390f35b610192600480360381019061018d9190611341565b610601565b60405161019f919061138e565b60405180910390f35b6101c260048036038101906101bd91906113a7565b61060f565b6040516101d1939291906113f7565b60405180910390f35b6101f460048036038101906101ef91906110b5565b61089e565b604051610203939291906113f7565b60405180910390f35b61022660048036038101906102219190611433565b610b28565b604051610233919061147a565b60405180910390f35b5f60605f5f5f1b8460a001510361027f576040517fb78926d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016102dc9291906115dc565b602060405180830381865afa92505050801561031657506040513d601f19601f820116820180604052508101906103139190611634565b60015b6104025761032261166b565b806308c379a003610353575061033661168a565b8061034157506103b8565b5f815f5f1b9450945094505050610516565b634e487b71036103b857610365611719565b9061037057506103b8565b5f5f5f1b6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610516565b3d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e7565b606091505b505f6103f282610b28565b5f5f1b9450945094505050610516565b8091505080610452575f5f5f1b6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610516565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b81526004016104ac919061138e565b602060405180830381865afa1580156104c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104eb919061174b565b905060016104fd828860a0015161051f565b60405180602001604052805f8152509094509450945050505b93509350939050565b5f81835f1b18905092915050565b5f6001905090565b815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8183185f1c905092915050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a88876040518363ffffffff1660e01b8152600401610670929190611785565b602060405180830381865afa9250505080156106aa57506040513d601f19601f820116820180604052508101906106a79190611634565b60015b610790576106b661166b565b806308c379a0036106e557506106ca61168a565b806106d55750610748565b5f815f9450945094505050610895565b634e487b7103610748576106f7611719565b906107025750610748565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610895565b3d805f8114610772576040519150601f19603f3d011682016040523d82523d5f602084013e610777565b606091505b505f61078282610b28565b5f9450945094505050610895565b80915050806107de575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610895565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610838919061138e565b602060405180830381865afa158015610853573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610877919061174b565b905060018160405180602001604052805f8152509094509450945050505b93509350939050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016108ff9291906115dc565b602060405180830381865afa92505050801561093957506040513d601f19601f820116820180604052508101906109369190611634565b60015b610a1f5761094561166b565b806308c379a003610974575061095961168a565b8061096457506109d7565b5f815f9450945094505050610b1f565b634e487b71036109d757610986611719565b9061099157506109d7565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610b1f565b3d805f8114610a01576040519150601f19603f3d011682016040523d82523d5f602084013e610a06565b606091505b505f610a1182610b28565b5f9450945094505050610b1f565b8091505080610a6d575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610b1f565b60015f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610ac8919061138e565b602060405180830381865afa158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b07919061174b565b60405180602001604052805f81525090935093509350505b93509350939050565b60605f82610b3590611806565b905063ed0764a160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bc1576040518060400160405280601981526020017f5065726d697373696f6e496e76616c69645f4578706972656400000000000000815250915050610d5f565b634c40eccb60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c2e5760405180606001604052806021815260200161189160219139915050610d5f565b638e143bf760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c9b5760405180606001604052806024815260200161186d60249139915050610d5f565b63cbd3a96660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d25576040518060400160405280601a81526020017f5065726d697373696f6e496e76616c69645f44697361626c6564000000000000815250915050610d5f565b6040518060400160405280600f81526020017f4c6f77204c6576656c204572726f7200000000000000000000000000000000008152509150505b919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b610d8781610d75565b8114610d91575f5ffd5b50565b5f81359050610da281610d7e565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610df282610dac565b810181811067ffffffffffffffff82111715610e1157610e10610dbc565b5b80604052505050565b5f610e23610d64565b9050610e2f8282610de9565b919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6182610e38565b9050919050565b610e7181610e57565b8114610e7b575f5ffd5b50565b5f81359050610e8c81610e68565b92915050565b5f67ffffffffffffffff82169050919050565b610eae81610e92565b8114610eb8575f5ffd5b50565b5f81359050610ec981610ea5565b92915050565b5f819050919050565b610ee181610ecf565b8114610eeb575f5ffd5b50565b5f81359050610efc81610ed8565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff821115610f2457610f23610dbc565b5b610f2d82610dac565b9050602081019050919050565b828183375f83830152505050565b5f610f5a610f5584610f0a565b610e1a565b905082815260208101848484011115610f7657610f75610f06565b5b610f81848285610f3a565b509392505050565b5f82601f830112610f9d57610f9c610f02565b5b8135610fad848260208601610f48565b91505092915050565b5f6101008284031215610fcc57610fcb610da8565b5b610fd7610100610e1a565b90505f610fe684828501610e7e565b5f830152506020610ff984828501610ebb565b602083015250604061100d84828501610e7e565b604083015250606061102184828501610d94565b606083015250608061103584828501610e7e565b60808301525060a061104984828501610eee565b60a08301525060c082013567ffffffffffffffff81111561106d5761106c610e34565b5b61107984828501610f89565b60c08301525060e082013567ffffffffffffffff81111561109d5761109c610e34565b5b6110a984828501610f89565b60e08301525092915050565b5f5f5f606084860312156110cc576110cb610d6d565b5b5f6110d986828701610d94565b93505060206110ea86828701610d94565b925050604084013567ffffffffffffffff81111561110b5761110a610d71565b5b61111786828701610fb6565b9150509250925092565b5f8115159050919050565b61113581611121565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61116d8261113b565b6111778185611145565b9350611187818560208601611155565b61119081610dac565b840191505092915050565b6111a481610ecf565b82525050565b5f6060820190506111bd5f83018661112c565b81810360208301526111cf8185611163565b90506111de604083018461119b565b949350505050565b5f5f604083850312156111fc576111fb610d6d565b5b5f61120985828601610d94565b925050602061121a85828601610eee565b9150509250929050565b5f6020820190506112375f83018461119b565b92915050565b5f6020820190506112505f83018461112c565b92915050565b5f5f6040838503121561126c5761126b610d6d565b5b5f61127985828601610e7e565b925050602061128a85828601610e7e565b9150509250929050565b5f819050919050565b5f6112b76112b26112ad84610e38565b611294565b610e38565b9050919050565b5f6112c88261129d565b9050919050565b5f6112d9826112be565b9050919050565b6112e9816112cf565b82525050565b5f6020820190506113025f8301846112e0565b92915050565b5f611312826112be565b9050919050565b61132281611308565b82525050565b5f60208201905061133b5f830184611319565b92915050565b5f5f6040838503121561135757611356610d6d565b5b5f61136485828601610eee565b925050602061137585828601610eee565b9150509250929050565b61138881610d75565b82525050565b5f6020820190506113a15f83018461137f565b92915050565b5f5f5f606084860312156113be576113bd610d6d565b5b5f6113cb86828701610d94565b93505060206113dc86828701610d94565b92505060406113ed86828701610e7e565b9150509250925092565b5f60608201905061140a5f83018661112c565b818103602083015261141c8185611163565b905061142b604083018461137f565b949350505050565b5f6020828403121561144857611447610d6d565b5b5f82013567ffffffffffffffff81111561146557611464610d71565b5b61147184828501610f89565b91505092915050565b5f6020820190508181035f8301526114928184611163565b905092915050565b6114a381610e57565b82525050565b6114b281610e92565b82525050565b6114c181610d75565b82525050565b6114d081610ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6114fa826114d6565b61150481856114e0565b9350611514818560208601611155565b61151d81610dac565b840191505092915050565b5f61010083015f83015161153e5f86018261149a565b50602083015161155160208601826114a9565b506040830151611564604086018261149a565b50606083015161157760608601826114b8565b50608083015161158a608086018261149a565b5060a083015161159d60a08601826114c7565b5060c083015184820360c08601526115b582826114f0565b91505060e083015184820360e08601526115cf82826114f0565b9150508091505092915050565b5f6040820190508181035f8301526115f48185611528565b9050611603602083018461137f565b9392505050565b61161381611121565b811461161d575f5ffd5b50565b5f8151905061162e8161160a565b92915050565b5f6020828403121561164957611648610d6d565b5b5f61165684828501611620565b91505092915050565b5f8160e01c9050919050565b5f60033d11156116875760045f5f3e6116845f5161165f565b90505b90565b5f60443d106117165761169b610d64565b60043d036004823e80513d602482011167ffffffffffffffff821117156116c3575050611716565b808201805167ffffffffffffffff8111156116e15750505050611716565b80602083010160043d0385018111156116fe575050505050611716565b61170d82602001850186610de9565b82955050505050505b90565b5f5f60233d111561173357602060045f3e600191505f5190505b9091565b5f8151905061174581610d7e565b92915050565b5f602082840312156117605761175f610d6d565b5b5f61176d84828501611737565b91505092915050565b61177f81610e57565b82525050565b5f6040820190506117985f83018561137f565b6117a56020830184611776565b9392505050565b5f819050602082019050919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f6117f182516117bb565b80915050919050565b5f82821b905092915050565b5f611810826114d6565b8261181a846117ac565b9050611825816117e6565b92506004821015611865576118607fffffffff00000000000000000000000000000000000000000000000000000000836004036008026117fa565b831692505b505091905056fe5065726d697373696f6e496e76616c69645f526563697069656e745369676e61747572655065726d697373696f6e496e76616c69645f4973737565725369676e6174757265a2646970667358221220fa3be26f428c881bbc66076a1abb7d52826a97cb40ed8a95f18aaa40de450ab364736f6c634300081e0033"
2197
+ deployedBytecode: "0x608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80637e0f4b5b116100645780637e0f4b5b1461015a5780638a5c8c7f14610178578063a02eb534146101a8578063a0639f54146101da578063ff6957d31461020c5761009c565b806309ba3156146100a05780631a1992a9146100d2578063267c4ae414610102578063485cc955146101205780634cdc014d1461013c575b5f5ffd5b6100ba60048036038101906100b591906110b5565b61023c565b6040516100c9939291906111aa565b60405180910390f35b6100ec60048036038101906100e791906111e6565b61051f565b6040516100f99190611224565b60405180910390f35b61010a61052d565b604051610117919061123d565b60405180910390f35b61013a60048036038101906101359190611256565b610535565b005b6101446105b8565b60405161015191906112ef565b60405180910390f35b6101626105dd565b60405161016f9190611328565b60405180910390f35b610192600480360381019061018d9190611341565b610601565b60405161019f919061138e565b60405180910390f35b6101c260048036038101906101bd91906113a7565b61060f565b6040516101d1939291906113f7565b60405180910390f35b6101f460048036038101906101ef91906110b5565b61089e565b604051610203939291906113f7565b60405180910390f35b61022660048036038101906102219190611433565b610b28565b604051610233919061147a565b60405180910390f35b5f60605f5f5f1b8460a001510361027f576040517fb78926d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016102dc9291906115dc565b602060405180830381865afa92505050801561031657506040513d601f19601f820116820180604052508101906103139190611634565b60015b6104025761032261166b565b806308c379a003610353575061033661168a565b8061034157506103b8565b5f815f5f1b9450945094505050610516565b634e487b71036103b857610365611719565b9061037057506103b8565b5f5f5f1b6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610516565b3d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e7565b606091505b505f6103f282610b28565b5f5f1b9450945094505050610516565b8091505080610452575f5f5f1b6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610516565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b81526004016104ac919061138e565b602060405180830381865afa1580156104c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104eb919061174b565b905060016104fd828860a0015161051f565b60405180602001604052805f8152509094509450945050505b93509350939050565b5f81835f1b18905092915050565b5f6001905090565b815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8183185f1c905092915050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a88876040518363ffffffff1660e01b8152600401610670929190611785565b602060405180830381865afa9250505080156106aa57506040513d601f19601f820116820180604052508101906106a79190611634565b60015b610790576106b661166b565b806308c379a0036106e557506106ca61168a565b806106d55750610748565b5f815f9450945094505050610895565b634e487b7103610748576106f7611719565b906107025750610748565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610895565b3d805f8114610772576040519150601f19603f3d011682016040523d82523d5f602084013e610777565b606091505b505f61078282610b28565b5f9450945094505050610895565b80915050806107de575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610895565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610838919061138e565b602060405180830381865afa158015610853573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610877919061174b565b905060018160405180602001604052805f8152509094509450945050505b93509350939050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016108ff9291906115dc565b602060405180830381865afa92505050801561093957506040513d601f19601f820116820180604052508101906109369190611634565b60015b610a1f5761094561166b565b806308c379a003610974575061095961168a565b8061096457506109d7565b5f815f9450945094505050610b1f565b634e487b71036109d757610986611719565b9061099157506109d7565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610b1f565b3d805f8114610a01576040519150601f19603f3d011682016040523d82523d5f602084013e610a06565b606091505b505f610a1182610b28565b5f9450945094505050610b1f565b8091505080610a6d575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610b1f565b60015f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610ac8919061138e565b602060405180830381865afa158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b07919061174b565b60405180602001604052805f81525090935093509350505b93509350939050565b60605f82610b3590611806565b905063ed0764a160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bc1576040518060400160405280601981526020017f5065726d697373696f6e496e76616c69645f4578706972656400000000000000815250915050610d5f565b634c40eccb60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c2e5760405180606001604052806021815260200161189160219139915050610d5f565b638e143bf760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c9b5760405180606001604052806024815260200161186d60249139915050610d5f565b63cbd3a96660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d25576040518060400160405280601a81526020017f5065726d697373696f6e496e76616c69645f44697361626c6564000000000000815250915050610d5f565b6040518060400160405280600f81526020017f4c6f77204c6576656c204572726f7200000000000000000000000000000000008152509150505b919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b610d8781610d75565b8114610d91575f5ffd5b50565b5f81359050610da281610d7e565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610df282610dac565b810181811067ffffffffffffffff82111715610e1157610e10610dbc565b5b80604052505050565b5f610e23610d64565b9050610e2f8282610de9565b919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6182610e38565b9050919050565b610e7181610e57565b8114610e7b575f5ffd5b50565b5f81359050610e8c81610e68565b92915050565b5f67ffffffffffffffff82169050919050565b610eae81610e92565b8114610eb8575f5ffd5b50565b5f81359050610ec981610ea5565b92915050565b5f819050919050565b610ee181610ecf565b8114610eeb575f5ffd5b50565b5f81359050610efc81610ed8565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff821115610f2457610f23610dbc565b5b610f2d82610dac565b9050602081019050919050565b828183375f83830152505050565b5f610f5a610f5584610f0a565b610e1a565b905082815260208101848484011115610f7657610f75610f06565b5b610f81848285610f3a565b509392505050565b5f82601f830112610f9d57610f9c610f02565b5b8135610fad848260208601610f48565b91505092915050565b5f6101008284031215610fcc57610fcb610da8565b5b610fd7610100610e1a565b90505f610fe684828501610e7e565b5f830152506020610ff984828501610ebb565b602083015250604061100d84828501610e7e565b604083015250606061102184828501610d94565b606083015250608061103584828501610e7e565b60808301525060a061104984828501610eee565b60a08301525060c082013567ffffffffffffffff81111561106d5761106c610e34565b5b61107984828501610f89565b60c08301525060e082013567ffffffffffffffff81111561109d5761109c610e34565b5b6110a984828501610f89565b60e08301525092915050565b5f5f5f606084860312156110cc576110cb610d6d565b5b5f6110d986828701610d94565b93505060206110ea86828701610d94565b925050604084013567ffffffffffffffff81111561110b5761110a610d71565b5b61111786828701610fb6565b9150509250925092565b5f8115159050919050565b61113581611121565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61116d8261113b565b6111778185611145565b9350611187818560208601611155565b61119081610dac565b840191505092915050565b6111a481610ecf565b82525050565b5f6060820190506111bd5f83018661112c565b81810360208301526111cf8185611163565b90506111de604083018461119b565b949350505050565b5f5f604083850312156111fc576111fb610d6d565b5b5f61120985828601610d94565b925050602061121a85828601610eee565b9150509250929050565b5f6020820190506112375f83018461119b565b92915050565b5f6020820190506112505f83018461112c565b92915050565b5f5f6040838503121561126c5761126b610d6d565b5b5f61127985828601610e7e565b925050602061128a85828601610e7e565b9150509250929050565b5f819050919050565b5f6112b76112b26112ad84610e38565b611294565b610e38565b9050919050565b5f6112c88261129d565b9050919050565b5f6112d9826112be565b9050919050565b6112e9816112cf565b82525050565b5f6020820190506113025f8301846112e0565b92915050565b5f611312826112be565b9050919050565b61132281611308565b82525050565b5f60208201905061133b5f830184611319565b92915050565b5f5f6040838503121561135757611356610d6d565b5b5f61136485828601610eee565b925050602061137585828601610eee565b9150509250929050565b61138881610d75565b82525050565b5f6020820190506113a15f83018461137f565b92915050565b5f5f5f606084860312156113be576113bd610d6d565b5b5f6113cb86828701610d94565b93505060206113dc86828701610d94565b92505060406113ed86828701610e7e565b9150509250925092565b5f60608201905061140a5f83018661112c565b818103602083015261141c8185611163565b905061142b604083018461137f565b949350505050565b5f6020828403121561144857611447610d6d565b5b5f82013567ffffffffffffffff81111561146557611464610d71565b5b61147184828501610f89565b91505092915050565b5f6020820190508181035f8301526114928184611163565b905092915050565b6114a381610e57565b82525050565b6114b281610e92565b82525050565b6114c181610d75565b82525050565b6114d081610ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6114fa826114d6565b61150481856114e0565b9350611514818560208601611155565b61151d81610dac565b840191505092915050565b5f61010083015f83015161153e5f86018261149a565b50602083015161155160208601826114a9565b506040830151611564604086018261149a565b50606083015161157760608601826114b8565b50608083015161158a608086018261149a565b5060a083015161159d60a08601826114c7565b5060c083015184820360c08601526115b582826114f0565b91505060e083015184820360e08601526115cf82826114f0565b9150508091505092915050565b5f6040820190508181035f8301526115f48185611528565b9050611603602083018461137f565b9392505050565b61161381611121565b811461161d575f5ffd5b50565b5f8151905061162e8161160a565b92915050565b5f6020828403121561164957611648610d6d565b5b5f61165684828501611620565b91505092915050565b5f8160e01c9050919050565b5f60033d11156116875760045f5f3e6116845f5161165f565b90505b90565b5f60443d106117165761169b610d64565b60043d036004823e80513d602482011167ffffffffffffffff821117156116c3575050611716565b808201805167ffffffffffffffff8111156116e15750505050611716565b80602083010160043d0385018111156116fe575050505050611716565b61170d82602001850186610de9565b82955050505050505b90565b5f5f60233d111561173357602060045f3e600191505f5190505b9091565b5f8151905061174581610d7e565b92915050565b5f602082840312156117605761175f610d6d565b5b5f61176d84828501611737565b91505092915050565b61177f81610e57565b82525050565b5f6040820190506117985f83018561137f565b6117a56020830184611776565b9392505050565b5f819050602082019050919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f6117f182516117bb565b80915050919050565b5f82821b905092915050565b5f611810826114d6565b8261181a846117ac565b9050611825816117e6565b92506004821015611865576118607fffffffff00000000000000000000000000000000000000000000000000000000836004036008026117fa565b831692505b505091905056fe5065726d697373696f6e496e76616c69645f526563697069656e745369676e61747572655065726d697373696f6e496e76616c69645f4973737565725369676e6174757265a2646970667358221220956d8aef89236491d233d901f65d6a16f309bc56a7ca39f4f7c7bd70f8e5983a64736f6c63430008210033",
2198
+ bytecode: "0x6080604052348015600e575f5ffd5b506118e78061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80637e0f4b5b116100645780637e0f4b5b1461015a5780638a5c8c7f14610178578063a02eb534146101a8578063a0639f54146101da578063ff6957d31461020c5761009c565b806309ba3156146100a05780631a1992a9146100d2578063267c4ae414610102578063485cc955146101205780634cdc014d1461013c575b5f5ffd5b6100ba60048036038101906100b591906110b5565b61023c565b6040516100c9939291906111aa565b60405180910390f35b6100ec60048036038101906100e791906111e6565b61051f565b6040516100f99190611224565b60405180910390f35b61010a61052d565b604051610117919061123d565b60405180910390f35b61013a60048036038101906101359190611256565b610535565b005b6101446105b8565b60405161015191906112ef565b60405180910390f35b6101626105dd565b60405161016f9190611328565b60405180910390f35b610192600480360381019061018d9190611341565b610601565b60405161019f919061138e565b60405180910390f35b6101c260048036038101906101bd91906113a7565b61060f565b6040516101d1939291906113f7565b60405180910390f35b6101f460048036038101906101ef91906110b5565b61089e565b604051610203939291906113f7565b60405180910390f35b61022660048036038101906102219190611433565b610b28565b604051610233919061147a565b60405180910390f35b5f60605f5f5f1b8460a001510361027f576040517fb78926d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016102dc9291906115dc565b602060405180830381865afa92505050801561031657506040513d601f19601f820116820180604052508101906103139190611634565b60015b6104025761032261166b565b806308c379a003610353575061033661168a565b8061034157506103b8565b5f815f5f1b9450945094505050610516565b634e487b71036103b857610365611719565b9061037057506103b8565b5f5f5f1b6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610516565b3d805f81146103e2576040519150601f19603f3d011682016040523d82523d5f602084013e6103e7565b606091505b505f6103f282610b28565b5f5f1b9450945094505050610516565b8091505080610452575f5f5f1b6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610516565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b81526004016104ac919061138e565b602060405180830381865afa1580156104c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104eb919061174b565b905060016104fd828860a0015161051f565b60405180602001604052805f8152509094509450945050505b93509350939050565b5f81835f1b18905092915050565b5f6001905090565b815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8183185f1c905092915050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635faa299a88876040518363ffffffff1660e01b8152600401610670929190611785565b602060405180830381865afa9250505080156106aa57506040513d601f19601f820116820180604052508101906106a79190611634565b60015b610790576106b661166b565b806308c379a0036106e557506106ca61168a565b806106d55750610748565b5f815f9450945094505050610895565b634e487b7103610748576106f7611719565b906107025750610748565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610895565b3d805f8114610772576040519150601f19603f3d011682016040523d82523d5f602084013e610777565b606091505b505f61078282610b28565b5f9450945094505050610895565b80915050806107de575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610895565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610838919061138e565b602060405180830381865afa158015610853573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610877919061174b565b905060018160405180602001604052805f8152509094509450945050505b93509350939050565b5f60605f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae79f04a86896040518363ffffffff1660e01b81526004016108ff9291906115dc565b602060405180830381865afa92505050801561093957506040513d601f19601f820116820180604052508101906109369190611634565b60015b610a1f5761094561166b565b806308c379a003610974575061095961168a565b8061096457506109d7565b5f815f9450945094505050610b1f565b634e487b71036109d757610986611719565b9061099157506109d7565b5f5f6040518060400160405280600581526020017f50616e6963000000000000000000000000000000000000000000000000000000815250909450945094505050610b1f565b3d805f8114610a01576040519150601f19603f3d011682016040523d82523d5f602084013e610a06565b606091505b505f610a1182610b28565b5f9450945094505050610b1f565b8091505080610a6d575f5f6040518060400160405280600a81526020017f4e6f74416c6c6f776564000000000000000000000000000000000000000000008152509093509350935050610b1f565b60015f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631c76642b896040518263ffffffff1660e01b8152600401610ac8919061138e565b602060405180830381865afa158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b07919061174b565b60405180602001604052805f81525090935093509350505b93509350939050565b60605f82610b3590611806565b905063ed0764a160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610bc1576040518060400160405280601981526020017f5065726d697373696f6e496e76616c69645f4578706972656400000000000000815250915050610d5f565b634c40eccb60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c2e5760405180606001604052806021815260200161189160219139915050610d5f565b638e143bf760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c9b5760405180606001604052806024815260200161186d60249139915050610d5f565b63cbd3a96660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d25576040518060400160405280601a81526020017f5065726d697373696f6e496e76616c69645f44697361626c6564000000000000815250915050610d5f565b6040518060400160405280600f81526020017f4c6f77204c6576656c204572726f7200000000000000000000000000000000008152509150505b919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b610d8781610d75565b8114610d91575f5ffd5b50565b5f81359050610da281610d7e565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610df282610dac565b810181811067ffffffffffffffff82111715610e1157610e10610dbc565b5b80604052505050565b5f610e23610d64565b9050610e2f8282610de9565b919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e6182610e38565b9050919050565b610e7181610e57565b8114610e7b575f5ffd5b50565b5f81359050610e8c81610e68565b92915050565b5f67ffffffffffffffff82169050919050565b610eae81610e92565b8114610eb8575f5ffd5b50565b5f81359050610ec981610ea5565b92915050565b5f819050919050565b610ee181610ecf565b8114610eeb575f5ffd5b50565b5f81359050610efc81610ed8565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff821115610f2457610f23610dbc565b5b610f2d82610dac565b9050602081019050919050565b828183375f83830152505050565b5f610f5a610f5584610f0a565b610e1a565b905082815260208101848484011115610f7657610f75610f06565b5b610f81848285610f3a565b509392505050565b5f82601f830112610f9d57610f9c610f02565b5b8135610fad848260208601610f48565b91505092915050565b5f6101008284031215610fcc57610fcb610da8565b5b610fd7610100610e1a565b90505f610fe684828501610e7e565b5f830152506020610ff984828501610ebb565b602083015250604061100d84828501610e7e565b604083015250606061102184828501610d94565b606083015250608061103584828501610e7e565b60808301525060a061104984828501610eee565b60a08301525060c082013567ffffffffffffffff81111561106d5761106c610e34565b5b61107984828501610f89565b60c08301525060e082013567ffffffffffffffff81111561109d5761109c610e34565b5b6110a984828501610f89565b60e08301525092915050565b5f5f5f606084860312156110cc576110cb610d6d565b5b5f6110d986828701610d94565b93505060206110ea86828701610d94565b925050604084013567ffffffffffffffff81111561110b5761110a610d71565b5b61111786828701610fb6565b9150509250925092565b5f8115159050919050565b61113581611121565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61116d8261113b565b6111778185611145565b9350611187818560208601611155565b61119081610dac565b840191505092915050565b6111a481610ecf565b82525050565b5f6060820190506111bd5f83018661112c565b81810360208301526111cf8185611163565b90506111de604083018461119b565b949350505050565b5f5f604083850312156111fc576111fb610d6d565b5b5f61120985828601610d94565b925050602061121a85828601610eee565b9150509250929050565b5f6020820190506112375f83018461119b565b92915050565b5f6020820190506112505f83018461112c565b92915050565b5f5f6040838503121561126c5761126b610d6d565b5b5f61127985828601610e7e565b925050602061128a85828601610e7e565b9150509250929050565b5f819050919050565b5f6112b76112b26112ad84610e38565b611294565b610e38565b9050919050565b5f6112c88261129d565b9050919050565b5f6112d9826112be565b9050919050565b6112e9816112cf565b82525050565b5f6020820190506113025f8301846112e0565b92915050565b5f611312826112be565b9050919050565b61132281611308565b82525050565b5f60208201905061133b5f830184611319565b92915050565b5f5f6040838503121561135757611356610d6d565b5b5f61136485828601610eee565b925050602061137585828601610eee565b9150509250929050565b61138881610d75565b82525050565b5f6020820190506113a15f83018461137f565b92915050565b5f5f5f606084860312156113be576113bd610d6d565b5b5f6113cb86828701610d94565b93505060206113dc86828701610d94565b92505060406113ed86828701610e7e565b9150509250925092565b5f60608201905061140a5f83018661112c565b818103602083015261141c8185611163565b905061142b604083018461137f565b949350505050565b5f6020828403121561144857611447610d6d565b5b5f82013567ffffffffffffffff81111561146557611464610d71565b5b61147184828501610f89565b91505092915050565b5f6020820190508181035f8301526114928184611163565b905092915050565b6114a381610e57565b82525050565b6114b281610e92565b82525050565b6114c181610d75565b82525050565b6114d081610ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6114fa826114d6565b61150481856114e0565b9350611514818560208601611155565b61151d81610dac565b840191505092915050565b5f61010083015f83015161153e5f86018261149a565b50602083015161155160208601826114a9565b506040830151611564604086018261149a565b50606083015161157760608601826114b8565b50608083015161158a608086018261149a565b5060a083015161159d60a08601826114c7565b5060c083015184820360c08601526115b582826114f0565b91505060e083015184820360e08601526115cf82826114f0565b9150508091505092915050565b5f6040820190508181035f8301526115f48185611528565b9050611603602083018461137f565b9392505050565b61161381611121565b811461161d575f5ffd5b50565b5f8151905061162e8161160a565b92915050565b5f6020828403121561164957611648610d6d565b5b5f61165684828501611620565b91505092915050565b5f8160e01c9050919050565b5f60033d11156116875760045f5f3e6116845f5161165f565b90505b90565b5f60443d106117165761169b610d64565b60043d036004823e80513d602482011167ffffffffffffffff821117156116c3575050611716565b808201805167ffffffffffffffff8111156116e15750505050611716565b80602083010160043d0385018111156116fe575050505050611716565b61170d82602001850186610de9565b82955050505050505b90565b5f5f60233d111561173357602060045f3e600191505f5190505b9091565b5f8151905061174581610d7e565b92915050565b5f602082840312156117605761175f610d6d565b5b5f61176d84828501611737565b91505092915050565b61177f81610e57565b82525050565b5f6040820190506117985f83018561137f565b6117a56020830184611776565b9392505050565b5f819050602082019050919050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f6117f182516117bb565b80915050919050565b5f82821b905092915050565b5f611810826114d6565b8261181a846117ac565b9050611825816117e6565b92506004821015611865576118607fffffffff00000000000000000000000000000000000000000000000000000000836004036008026117fa565b831692505b505091905056fe5065726d697373696f6e496e76616c69645f526563697069656e745369676e61747572655065726d697373696f6e496e76616c69645f4973737565725369676e6174757265a2646970667358221220956d8aef89236491d233d901f65d6a16f309bc56a7ca39f4f7c7bd70f8e5983a64736f6c63430008210033"
2195
2199
  };
2196
2200
 
2197
2201
  // src/TestBed.ts
2198
2202
  var TestBedArtifact = {
2199
- "contractName": "TestBed",
2200
- "fixedAddress": "0x0000000000000000000000000000000000000300",
2201
- "abi": [
2202
- {
2203
- "type": "function",
2204
- "name": "add",
2205
- "inputs": [
2206
- {
2207
- "name": "inNumber",
2208
- "type": "tuple",
2209
- "internalType": "struct InEuint32",
2210
- "components": [
2203
+ contractName: "TestBed",
2204
+ fixedAddress: "0x0000000000000000000000000000000000000300",
2205
+ abi: [
2206
+ {
2207
+ type: "function",
2208
+ name: "add",
2209
+ inputs: [
2210
+ {
2211
+ name: "inNumber",
2212
+ type: "tuple",
2213
+ internalType: "struct InEuint32",
2214
+ components: [
2211
2215
  {
2212
- "name": "ctHash",
2213
- "type": "uint256",
2214
- "internalType": "uint256"
2216
+ name: "ctHash",
2217
+ type: "uint256",
2218
+ internalType: "uint256"
2215
2219
  },
2216
2220
  {
2217
- "name": "securityZone",
2218
- "type": "uint8",
2219
- "internalType": "uint8"
2221
+ name: "securityZone",
2222
+ type: "uint8",
2223
+ internalType: "uint8"
2220
2224
  },
2221
2225
  {
2222
- "name": "utype",
2223
- "type": "uint8",
2224
- "internalType": "uint8"
2226
+ name: "utype",
2227
+ type: "uint8",
2228
+ internalType: "uint8"
2225
2229
  },
2226
2230
  {
2227
- "name": "signature",
2228
- "type": "bytes",
2229
- "internalType": "bytes"
2231
+ name: "signature",
2232
+ type: "bytes",
2233
+ internalType: "bytes"
2230
2234
  }
2231
2235
  ]
2232
2236
  }
2233
2237
  ],
2234
- "outputs": [],
2235
- "stateMutability": "nonpayable"
2238
+ outputs: [],
2239
+ stateMutability: "nonpayable"
2236
2240
  },
2237
2241
  {
2238
- "type": "function",
2239
- "name": "decrypt",
2240
- "inputs": [],
2241
- "outputs": [],
2242
- "stateMutability": "nonpayable"
2242
+ type: "function",
2243
+ name: "decrypt",
2244
+ inputs: [],
2245
+ outputs: [],
2246
+ stateMutability: "nonpayable"
2243
2247
  },
2244
2248
  {
2245
- "type": "function",
2246
- "name": "eNumber",
2247
- "inputs": [],
2248
- "outputs": [
2249
+ type: "function",
2250
+ name: "eNumber",
2251
+ inputs: [],
2252
+ outputs: [
2249
2253
  {
2250
- "name": "",
2251
- "type": "uint256",
2252
- "internalType": "euint32"
2254
+ name: "",
2255
+ type: "uint256",
2256
+ internalType: "euint32"
2253
2257
  }
2254
2258
  ],
2255
- "stateMutability": "view"
2259
+ stateMutability: "view"
2256
2260
  },
2257
2261
  {
2258
- "type": "function",
2259
- "name": "exists",
2260
- "inputs": [],
2261
- "outputs": [
2262
+ type: "function",
2263
+ name: "exists",
2264
+ inputs: [],
2265
+ outputs: [
2262
2266
  {
2263
- "name": "",
2264
- "type": "bool",
2265
- "internalType": "bool"
2267
+ name: "",
2268
+ type: "bool",
2269
+ internalType: "bool"
2266
2270
  }
2267
2271
  ],
2268
- "stateMutability": "pure"
2272
+ stateMutability: "pure"
2269
2273
  },
2270
2274
  {
2271
- "type": "function",
2272
- "name": "getDecryptResult",
2273
- "inputs": [
2275
+ type: "function",
2276
+ name: "getDecryptResult",
2277
+ inputs: [
2274
2278
  {
2275
- "name": "input1",
2276
- "type": "uint256",
2277
- "internalType": "euint32"
2279
+ name: "input1",
2280
+ type: "uint256",
2281
+ internalType: "euint32"
2278
2282
  }
2279
2283
  ],
2280
- "outputs": [
2284
+ outputs: [
2281
2285
  {
2282
- "name": "",
2283
- "type": "uint32",
2284
- "internalType": "uint32"
2286
+ name: "",
2287
+ type: "uint32",
2288
+ internalType: "uint32"
2285
2289
  }
2286
2290
  ],
2287
- "stateMutability": "view"
2291
+ stateMutability: "view"
2288
2292
  },
2289
2293
  {
2290
- "type": "function",
2291
- "name": "getDecryptResultSafe",
2292
- "inputs": [
2294
+ type: "function",
2295
+ name: "getDecryptResultSafe",
2296
+ inputs: [
2293
2297
  {
2294
- "name": "input1",
2295
- "type": "uint256",
2296
- "internalType": "euint32"
2298
+ name: "input1",
2299
+ type: "uint256",
2300
+ internalType: "euint32"
2297
2301
  }
2298
2302
  ],
2299
- "outputs": [
2303
+ outputs: [
2300
2304
  {
2301
- "name": "value",
2302
- "type": "uint32",
2303
- "internalType": "uint32"
2305
+ name: "value",
2306
+ type: "uint32",
2307
+ internalType: "uint32"
2304
2308
  },
2305
2309
  {
2306
- "name": "decrypted",
2307
- "type": "bool",
2308
- "internalType": "bool"
2310
+ name: "decrypted",
2311
+ type: "bool",
2312
+ internalType: "bool"
2309
2313
  }
2310
2314
  ],
2311
- "stateMutability": "view"
2315
+ stateMutability: "view"
2312
2316
  },
2313
2317
  {
2314
- "type": "function",
2315
- "name": "increment",
2316
- "inputs": [],
2317
- "outputs": [],
2318
- "stateMutability": "nonpayable"
2318
+ type: "function",
2319
+ name: "increment",
2320
+ inputs: [],
2321
+ outputs: [],
2322
+ stateMutability: "nonpayable"
2319
2323
  },
2320
2324
  {
2321
- "type": "function",
2322
- "name": "mul",
2323
- "inputs": [
2325
+ type: "function",
2326
+ name: "mul",
2327
+ inputs: [
2324
2328
  {
2325
- "name": "inNumber",
2326
- "type": "tuple",
2327
- "internalType": "struct InEuint32",
2328
- "components": [
2329
+ name: "inNumber",
2330
+ type: "tuple",
2331
+ internalType: "struct InEuint32",
2332
+ components: [
2329
2333
  {
2330
- "name": "ctHash",
2331
- "type": "uint256",
2332
- "internalType": "uint256"
2334
+ name: "ctHash",
2335
+ type: "uint256",
2336
+ internalType: "uint256"
2333
2337
  },
2334
2338
  {
2335
- "name": "securityZone",
2336
- "type": "uint8",
2337
- "internalType": "uint8"
2339
+ name: "securityZone",
2340
+ type: "uint8",
2341
+ internalType: "uint8"
2338
2342
  },
2339
2343
  {
2340
- "name": "utype",
2341
- "type": "uint8",
2342
- "internalType": "uint8"
2344
+ name: "utype",
2345
+ type: "uint8",
2346
+ internalType: "uint8"
2343
2347
  },
2344
2348
  {
2345
- "name": "signature",
2346
- "type": "bytes",
2347
- "internalType": "bytes"
2349
+ name: "signature",
2350
+ type: "bytes",
2351
+ internalType: "bytes"
2348
2352
  }
2349
2353
  ]
2350
2354
  }
2351
2355
  ],
2352
- "outputs": [],
2353
- "stateMutability": "nonpayable"
2356
+ outputs: [],
2357
+ stateMutability: "nonpayable"
2354
2358
  },
2355
2359
  {
2356
- "type": "function",
2357
- "name": "numberHash",
2358
- "inputs": [],
2359
- "outputs": [
2360
+ type: "function",
2361
+ name: "numberHash",
2362
+ inputs: [],
2363
+ outputs: [
2360
2364
  {
2361
- "name": "",
2362
- "type": "uint256",
2363
- "internalType": "uint256"
2365
+ name: "",
2366
+ type: "uint256",
2367
+ internalType: "uint256"
2364
2368
  }
2365
2369
  ],
2366
- "stateMutability": "view"
2370
+ stateMutability: "view"
2367
2371
  },
2368
2372
  {
2369
- "type": "function",
2370
- "name": "setNumber",
2371
- "inputs": [
2373
+ type: "function",
2374
+ name: "setNumber",
2375
+ inputs: [
2372
2376
  {
2373
- "name": "inNumber",
2374
- "type": "tuple",
2375
- "internalType": "struct InEuint32",
2376
- "components": [
2377
+ name: "inNumber",
2378
+ type: "tuple",
2379
+ internalType: "struct InEuint32",
2380
+ components: [
2377
2381
  {
2378
- "name": "ctHash",
2379
- "type": "uint256",
2380
- "internalType": "uint256"
2382
+ name: "ctHash",
2383
+ type: "uint256",
2384
+ internalType: "uint256"
2381
2385
  },
2382
2386
  {
2383
- "name": "securityZone",
2384
- "type": "uint8",
2385
- "internalType": "uint8"
2387
+ name: "securityZone",
2388
+ type: "uint8",
2389
+ internalType: "uint8"
2386
2390
  },
2387
2391
  {
2388
- "name": "utype",
2389
- "type": "uint8",
2390
- "internalType": "uint8"
2392
+ name: "utype",
2393
+ type: "uint8",
2394
+ internalType: "uint8"
2391
2395
  },
2392
2396
  {
2393
- "name": "signature",
2394
- "type": "bytes",
2395
- "internalType": "bytes"
2397
+ name: "signature",
2398
+ type: "bytes",
2399
+ internalType: "bytes"
2396
2400
  }
2397
2401
  ]
2398
2402
  }
2399
2403
  ],
2400
- "outputs": [],
2401
- "stateMutability": "nonpayable"
2404
+ outputs: [],
2405
+ stateMutability: "nonpayable"
2402
2406
  },
2403
2407
  {
2404
- "type": "function",
2405
- "name": "setNumberTrivial",
2406
- "inputs": [
2408
+ type: "function",
2409
+ name: "setNumberTrivial",
2410
+ inputs: [
2407
2411
  {
2408
- "name": "inNumber",
2409
- "type": "uint256",
2410
- "internalType": "uint256"
2412
+ name: "inNumber",
2413
+ type: "uint256",
2414
+ internalType: "uint256"
2411
2415
  }
2412
2416
  ],
2413
- "outputs": [],
2414
- "stateMutability": "nonpayable"
2417
+ outputs: [],
2418
+ stateMutability: "nonpayable"
2415
2419
  },
2416
2420
  {
2417
- "type": "function",
2418
- "name": "sub",
2419
- "inputs": [
2421
+ type: "function",
2422
+ name: "sub",
2423
+ inputs: [
2420
2424
  {
2421
- "name": "inNumber",
2422
- "type": "tuple",
2423
- "internalType": "struct InEuint32",
2424
- "components": [
2425
+ name: "inNumber",
2426
+ type: "tuple",
2427
+ internalType: "struct InEuint32",
2428
+ components: [
2425
2429
  {
2426
- "name": "ctHash",
2427
- "type": "uint256",
2428
- "internalType": "uint256"
2430
+ name: "ctHash",
2431
+ type: "uint256",
2432
+ internalType: "uint256"
2429
2433
  },
2430
2434
  {
2431
- "name": "securityZone",
2432
- "type": "uint8",
2433
- "internalType": "uint8"
2435
+ name: "securityZone",
2436
+ type: "uint8",
2437
+ internalType: "uint8"
2434
2438
  },
2435
2439
  {
2436
- "name": "utype",
2437
- "type": "uint8",
2438
- "internalType": "uint8"
2440
+ name: "utype",
2441
+ type: "uint8",
2442
+ internalType: "uint8"
2439
2443
  },
2440
2444
  {
2441
- "name": "signature",
2442
- "type": "bytes",
2443
- "internalType": "bytes"
2445
+ name: "signature",
2446
+ type: "bytes",
2447
+ internalType: "bytes"
2444
2448
  }
2445
2449
  ]
2446
2450
  }
2447
2451
  ],
2448
- "outputs": [],
2449
- "stateMutability": "nonpayable"
2452
+ outputs: [],
2453
+ stateMutability: "nonpayable"
2450
2454
  },
2451
2455
  {
2452
- "type": "error",
2453
- "name": "InvalidEncryptedInput",
2454
- "inputs": [
2456
+ type: "error",
2457
+ name: "InvalidEncryptedInput",
2458
+ inputs: [
2455
2459
  {
2456
- "name": "got",
2457
- "type": "uint8",
2458
- "internalType": "uint8"
2460
+ name: "got",
2461
+ type: "uint8",
2462
+ internalType: "uint8"
2459
2463
  },
2460
2464
  {
2461
- "name": "expected",
2462
- "type": "uint8",
2463
- "internalType": "uint8"
2465
+ name: "expected",
2466
+ type: "uint8",
2467
+ internalType: "uint8"
2464
2468
  }
2465
2469
  ]
2466
2470
  },
2467
2471
  {
2468
- "type": "error",
2469
- "name": "SecurityZoneOutOfBounds",
2470
- "inputs": [
2472
+ type: "error",
2473
+ name: "SecurityZoneOutOfBounds",
2474
+ inputs: [
2471
2475
  {
2472
- "name": "value",
2473
- "type": "int32",
2474
- "internalType": "int32"
2476
+ name: "value",
2477
+ type: "int32",
2478
+ internalType: "int32"
2475
2479
  }
2476
2480
  ]
2477
2481
  }
2478
2482
  ],
2479
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c806384f091db1161006f57806384f091db1461016757806384ff25c614610183578063b5872e8c1461019f578063d09de08a146101bb578063d7a0faa2146101c5578063f6bc7f3f146101e1576100b2565b806319d8a05b146100b6578063267c4ae4146100d45780633983d430146100f2578063458693c9146100fc578063647096091461012d57806367c6517414610149575b5f5ffd5b6100be610211565b6040516100cb9190610eef565b60405180910390f35b6100dc610216565b6040516100e99190610f22565b60405180910390f35b6100fa61021e565b005b61011660048036038101906101119190610f76565b61022a565b604051610124929190610fbf565b60405180910390f35b6101476004803603810190610142919061121b565b61023e565b005b610151610293565b60405161015e9190611271565b60405180910390f35b610181600480360381019061017c919061121b565b610299565b005b61019d6004803603810190610198919061121b565b6102c8565b005b6101b960048036038101906101b4919061121b565b6102f7565b005b6101c3610324565b005b6101df60048036038101906101da919061128a565b610353565b005b6101fb60048036038101906101f69190610f76565b610380565b60405161020891906112b5565b60405180910390f35b5f5481565b5f6001905090565b6102285f54610391565b565b5f5f610235836103b7565b91509150915091565b5f610248826103d5565b90505f610268610259835f54610448565b836102635f610491565b6104a3565b90506102755f5482610505565b5f819055506102845f5461054e565b61028e5f546105cd565b505050565b60015481565b6102ac5f546102a7836103d5565b61064c565b5f819055506102bb5f5461054e565b6102c55f546105cd565b50565b6102db5f546102d6836103d5565b610695565b5f819055506102ea5f5461054e565b6102f45f546105cd565b50565b610300816103d5565b5f819055505f546001819055506103175f5461054e565b6103215f546105cd565b50565b6103385f546103336001610491565b610695565b5f819055506103475f5461054e565b6103515f546105cd565b565b61035c81610491565b5f819055505f546001819055506103735f5461054e565b61037d5f546105cd565b50565b5f61038a826106de565b9050919050565b61039a816106ef565b6103aa576103a75f610491565b90505b6103b381610700565b5050565b5f5f5f5f6103c485610785565b915091508181935093505050915091565b5f5f600490508060ff16836040015160ff161461042f578260400151816040517f67cf30710000000000000000000000000000000000000000000000000000000081526004016104269291906112dd565b60405180910390fd5b61044061043b8461081b565b61085d565b915050919050565b5f610452836106ef565b6104625761045f5f610491565b92505b61046b826106ef565b61047b576104785f610491565b91505b6104896004848460136108f4565b905092915050565b5f61049c825f6109e3565b9050919050565b5f6104ad846109fd565b6104bd576104ba5f610a0e565b93505b6104c6836106ef565b6104d6576104d35f610491565b92505b6104df826106ef565b6104ef576104ec5f610491565b91505b6104fc6004858585610a20565b90509392505050565b5f61050f836106ef565b61051f5761051c5f610491565b92505b610528826106ef565b610538576105355f610491565b91505b6105466004848460076108f4565b905092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82306040518363ffffffff1660e01b815260040161059d929190611343565b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82336040518363ffffffff1660e01b815260040161061c929190611343565b5f604051808303815f87803b158015610633575f5ffd5b505af1158015610645573d5f5f3e3d5ffd5b5050505050565b5f610656836106ef565b610666576106635f610491565b92505b61066f826106ef565b61067f5761067c5f610491565b91505b61068d60048484600f6108f4565b905092915050565b5f61069f836106ef565b6106af576106ac5f610491565b92505b6106b8826106ef565b6106c8576106c55f610491565b91505b6106d66004848460086108f4565b905092915050565b5f6106e882610b11565b9050919050565b5f6106f982610ba5565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16630828982783336040518363ffffffff1660e01b8152600401610750929190611343565b5f604051808303815f87803b158015610767575f5ffd5b505af1158015610779573d5f5f3e3d5ffd5b50505050819050919050565b5f5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663458693c9846040518263ffffffff1660e01b81526004016107d49190611271565b6040805180830381865afa1580156107ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081291906113a8565b91509150915091565b610823610e82565b6040518060800160405280835f01518152602001836020015160ff168152602001600460ff16815260200183606001518152509050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166327f9c76283336040518363ffffffff1660e01b81526004016108ad9291906114c4565b6020604051808303815f875af11580156108c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ed91906114f2565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd86846109318888610bb1565b5f67ffffffffffffffff81111561094b5761094a610ffa565b5b6040519080825280602002602001820160405280156109795781602001602082028036833780820191505090505b506040518563ffffffff1660e01b81526004016109999493929190611638565b6020604051808303815f875af11580156109b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d991906114f2565b9050949350505050565b5f5f6109f184600485610c4b565b90508091505092915050565b5f610a0782610ba5565b9050919050565b5f610a19825f610d46565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd866004610a5f888888610d6f565b5f67ffffffffffffffff811115610a7957610a78610ffa565b5b604051908082528060200260200182016040528015610aa75781602001602082028036833780820191505090505b506040518563ffffffff1660e01b8152600401610ac79493929190611638565b6020604051808303815f875af1158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0791906114f2565b9050949350505050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663f6bc7f3f836040518263ffffffff1660e01b8152600401610b5f9190611271565b602060405180830381865afa158015610b7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9e91906114f2565b9050919050565b5f5f8214159050919050565b60605f600267ffffffffffffffff811115610bcf57610bce610ffa565b5b604051908082528060200260200182016040528015610bfd5781602001602082028036833780820191505090505b50905083815f81518110610c1457610c13611689565b5b6020026020010181815250508281600181518110610c3557610c34611689565b5b6020026020010181815250508091505092915050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd84601a5f67ffffffffffffffff811115610c9957610c98610ffa565b5b604051908082528060200260200182016040528015610cc75781602001602082028036833780820191505090505b50610cde898960ff16610cd98a610e2b565b610d6f565b6040518563ffffffff1660e01b8152600401610cfd9493929190611638565b6020604051808303815f875af1158015610d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3d91906114f2565b90509392505050565b5f5f5f90508315610d5657600190505b5f610d62825f86610c4b565b9050809250505092915050565b60605f600367ffffffffffffffff811115610d8d57610d8c610ffa565b5b604051908082528060200260200182016040528015610dbb5781602001602082028036833780820191505090505b50905084815f81518110610dd257610dd1611689565b5b6020026020010181815250508381600181518110610df357610df2611689565b5b6020026020010181815250508281600281518110610e1457610e13611689565b5b602002602001018181525050809150509392505050565b5f5f8260030b1215610e7457816040517f8f568bf8000000000000000000000000000000000000000000000000000000008152600401610e6b91906116d1565b60405180910390fd5b8163ffffffff169050919050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f819050919050565b5f819050919050565b5f610ed9610ed4610ecf84610ead565b610eb6565b610ead565b9050919050565b610ee981610ebf565b82525050565b5f602082019050610f025f830184610ee0565b92915050565b5f8115159050919050565b610f1c81610f08565b82525050565b5f602082019050610f355f830184610f13565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610f5581610ead565b8114610f5f575f5ffd5b50565b5f81359050610f7081610f4c565b92915050565b5f60208284031215610f8b57610f8a610f44565b5b5f610f9884828501610f62565b91505092915050565b5f63ffffffff82169050919050565b610fb981610fa1565b82525050565b5f604082019050610fd25f830185610fb0565b610fdf6020830184610f13565b9392505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61103082610fea565b810181811067ffffffffffffffff8211171561104f5761104e610ffa565b5b80604052505050565b5f611061610f3b565b905061106d8282611027565b919050565b5f5ffd5b61107f81610ead565b8114611089575f5ffd5b50565b5f8135905061109a81611076565b92915050565b5f60ff82169050919050565b6110b5816110a0565b81146110bf575f5ffd5b50565b5f813590506110d0816110ac565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156110f8576110f7610ffa565b5b61110182610fea565b9050602081019050919050565b828183375f83830152505050565b5f61112e611129846110de565b611058565b90508281526020810184848401111561114a576111496110da565b5b61115584828561110e565b509392505050565b5f82601f830112611171576111706110d6565b5b813561118184826020860161111c565b91505092915050565b5f6080828403121561119f5761119e610fe6565b5b6111a96080611058565b90505f6111b88482850161108c565b5f8301525060206111cb848285016110c2565b60208301525060406111df848285016110c2565b604083015250606082013567ffffffffffffffff81111561120357611202611072565b5b61120f8482850161115d565b60608301525092915050565b5f602082840312156112305761122f610f44565b5b5f82013567ffffffffffffffff81111561124d5761124c610f48565b5b6112598482850161118a565b91505092915050565b61126b81610ead565b82525050565b5f6020820190506112845f830184611262565b92915050565b5f6020828403121561129f5761129e610f44565b5b5f6112ac8482850161108c565b91505092915050565b5f6020820190506112c85f830184610fb0565b92915050565b6112d7816110a0565b82525050565b5f6040820190506112f05f8301856112ce565b6112fd60208301846112ce565b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61132d82611304565b9050919050565b61133d81611323565b82525050565b5f6040820190506113565f830185611262565b6113636020830184611334565b9392505050565b5f8151905061137881611076565b92915050565b61138781610f08565b8114611391575f5ffd5b50565b5f815190506113a28161137e565b92915050565b5f5f604083850312156113be576113bd610f44565b5b5f6113cb8582860161136a565b92505060206113dc85828601611394565b9150509250929050565b6113ef81610ead565b82525050565b6113fe816110a0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61143682611404565b611440818561140e565b935061145081856020860161141e565b61145981610fea565b840191505092915050565b5f608083015f8301516114795f8601826113e6565b50602083015161148c60208601826113f5565b50604083015161149f60408601826113f5565b50606083015184820360608601526114b7828261142c565b9150508091505092915050565b5f6040820190508181035f8301526114dc8185611464565b90506114eb6020830184611334565b9392505050565b5f6020828403121561150757611506610f44565b5b5f6115148482850161136a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020811061155b5761155a61151d565b5b50565b5f81905061156b8261154a565b919050565b5f61157a8261155e565b9050919050565b61158a81611570565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6115c483836113e6565b60208301905092915050565b5f602082019050919050565b5f6115e682611590565b6115f0818561159a565b93506115fb836115aa565b805f5b8381101561162b57815161161288826115b9565b975061161d836115d0565b9250506001810190506115fe565b5085935050505092915050565b5f60808201905061164b5f8301876112ce565b6116586020830186611581565b818103604083015261166a81856115dc565b9050818103606083015261167e81846115dc565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8160030b9050919050565b6116cb816116b6565b82525050565b5f6020820190506116e45f8301846116c2565b9291505056fea2646970667358221220a686ade386d6e9fea71d8a014f568d024361e50b703915f304236ac5ca6d620964736f6c634300081e0033"
2483
+ deployedBytecode: "0x608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c806384f091db1161006f57806384f091db1461016757806384ff25c614610183578063b5872e8c1461019f578063d09de08a146101bb578063d7a0faa2146101c5578063f6bc7f3f146101e1576100b2565b806319d8a05b146100b6578063267c4ae4146100d45780633983d430146100f2578063458693c9146100fc578063647096091461012d57806367c6517414610149575b5f5ffd5b6100be610211565b6040516100cb9190610eef565b60405180910390f35b6100dc610216565b6040516100e99190610f22565b60405180910390f35b6100fa61021e565b005b61011660048036038101906101119190610f76565b61022a565b604051610124929190610fbf565b60405180910390f35b6101476004803603810190610142919061121b565b61023e565b005b610151610293565b60405161015e9190611271565b60405180910390f35b610181600480360381019061017c919061121b565b610299565b005b61019d6004803603810190610198919061121b565b6102c8565b005b6101b960048036038101906101b4919061121b565b6102f7565b005b6101c3610324565b005b6101df60048036038101906101da919061128a565b610353565b005b6101fb60048036038101906101f69190610f76565b610380565b60405161020891906112b5565b60405180910390f35b5f5481565b5f6001905090565b6102285f54610391565b565b5f5f610235836103b7565b91509150915091565b5f610248826103d5565b90505f610268610259835f54610448565b836102635f610491565b6104a3565b90506102755f5482610505565b5f819055506102845f5461054e565b61028e5f546105cd565b505050565b60015481565b6102ac5f546102a7836103d5565b61064c565b5f819055506102bb5f5461054e565b6102c55f546105cd565b50565b6102db5f546102d6836103d5565b610695565b5f819055506102ea5f5461054e565b6102f45f546105cd565b50565b610300816103d5565b5f819055505f546001819055506103175f5461054e565b6103215f546105cd565b50565b6103385f546103336001610491565b610695565b5f819055506103475f5461054e565b6103515f546105cd565b565b61035c81610491565b5f819055505f546001819055506103735f5461054e565b61037d5f546105cd565b50565b5f61038a826106de565b9050919050565b61039a816106ef565b6103aa576103a75f610491565b90505b6103b381610700565b5050565b5f5f5f5f6103c485610785565b915091508181935093505050915091565b5f5f600490508060ff16836040015160ff161461042f578260400151816040517f67cf30710000000000000000000000000000000000000000000000000000000081526004016104269291906112dd565b60405180910390fd5b61044061043b8461081b565b61085d565b915050919050565b5f610452836106ef565b6104625761045f5f610491565b92505b61046b826106ef565b61047b576104785f610491565b91505b6104896004848460136108f4565b905092915050565b5f61049c825f6109e3565b9050919050565b5f6104ad846109fd565b6104bd576104ba5f610a0e565b93505b6104c6836106ef565b6104d6576104d35f610491565b92505b6104df826106ef565b6104ef576104ec5f610491565b91505b6104fc6004858585610a20565b90509392505050565b5f61050f836106ef565b61051f5761051c5f610491565b92505b610528826106ef565b610538576105355f610491565b91505b6105466004848460076108f4565b905092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82306040518363ffffffff1660e01b815260040161059d929190611343565b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82336040518363ffffffff1660e01b815260040161061c929190611343565b5f604051808303815f87803b158015610633575f5ffd5b505af1158015610645573d5f5f3e3d5ffd5b5050505050565b5f610656836106ef565b610666576106635f610491565b92505b61066f826106ef565b61067f5761067c5f610491565b91505b61068d60048484600f6108f4565b905092915050565b5f61069f836106ef565b6106af576106ac5f610491565b92505b6106b8826106ef565b6106c8576106c55f610491565b91505b6106d66004848460086108f4565b905092915050565b5f6106e882610b11565b9050919050565b5f6106f982610ba5565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16630828982783336040518363ffffffff1660e01b8152600401610750929190611343565b5f604051808303815f87803b158015610767575f5ffd5b505af1158015610779573d5f5f3e3d5ffd5b50505050819050919050565b5f5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663458693c9846040518263ffffffff1660e01b81526004016107d49190611271565b6040805180830381865afa1580156107ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081291906113a8565b91509150915091565b610823610e82565b6040518060800160405280835f01518152602001836020015160ff168152602001600460ff16815260200183606001518152509050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166327f9c76283336040518363ffffffff1660e01b81526004016108ad9291906114c4565b6020604051808303815f875af11580156108c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ed91906114f2565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd86846109318888610bb1565b5f67ffffffffffffffff81111561094b5761094a610ffa565b5b6040519080825280602002602001820160405280156109795781602001602082028036833780820191505090505b506040518563ffffffff1660e01b81526004016109999493929190611638565b6020604051808303815f875af11580156109b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d991906114f2565b9050949350505050565b5f5f6109f184600485610c4b565b90508091505092915050565b5f610a0782610ba5565b9050919050565b5f610a19825f610d46565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd866004610a5f888888610d6f565b5f67ffffffffffffffff811115610a7957610a78610ffa565b5b604051908082528060200260200182016040528015610aa75781602001602082028036833780820191505090505b506040518563ffffffff1660e01b8152600401610ac79493929190611638565b6020604051808303815f875af1158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0791906114f2565b9050949350505050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663f6bc7f3f836040518263ffffffff1660e01b8152600401610b5f9190611271565b602060405180830381865afa158015610b7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9e91906114f2565b9050919050565b5f5f8214159050919050565b60605f600267ffffffffffffffff811115610bcf57610bce610ffa565b5b604051908082528060200260200182016040528015610bfd5781602001602082028036833780820191505090505b50905083815f81518110610c1457610c13611689565b5b6020026020010181815250508281600181518110610c3557610c34611689565b5b6020026020010181815250508091505092915050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd84601a5f67ffffffffffffffff811115610c9957610c98610ffa565b5b604051908082528060200260200182016040528015610cc75781602001602082028036833780820191505090505b50610cde898960ff16610cd98a610e2b565b610d6f565b6040518563ffffffff1660e01b8152600401610cfd9493929190611638565b6020604051808303815f875af1158015610d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3d91906114f2565b90509392505050565b5f5f5f90508315610d5657600190505b5f610d62825f86610c4b565b9050809250505092915050565b60605f600367ffffffffffffffff811115610d8d57610d8c610ffa565b5b604051908082528060200260200182016040528015610dbb5781602001602082028036833780820191505090505b50905084815f81518110610dd257610dd1611689565b5b6020026020010181815250508381600181518110610df357610df2611689565b5b6020026020010181815250508281600281518110610e1457610e13611689565b5b602002602001018181525050809150509392505050565b5f5f8260030b1215610e7457816040517f8f568bf8000000000000000000000000000000000000000000000000000000008152600401610e6b91906116d1565b60405180910390fd5b8163ffffffff169050919050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f819050919050565b5f819050919050565b5f610ed9610ed4610ecf84610ead565b610eb6565b610ead565b9050919050565b610ee981610ebf565b82525050565b5f602082019050610f025f830184610ee0565b92915050565b5f8115159050919050565b610f1c81610f08565b82525050565b5f602082019050610f355f830184610f13565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610f5581610ead565b8114610f5f575f5ffd5b50565b5f81359050610f7081610f4c565b92915050565b5f60208284031215610f8b57610f8a610f44565b5b5f610f9884828501610f62565b91505092915050565b5f63ffffffff82169050919050565b610fb981610fa1565b82525050565b5f604082019050610fd25f830185610fb0565b610fdf6020830184610f13565b9392505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61103082610fea565b810181811067ffffffffffffffff8211171561104f5761104e610ffa565b5b80604052505050565b5f611061610f3b565b905061106d8282611027565b919050565b5f5ffd5b61107f81610ead565b8114611089575f5ffd5b50565b5f8135905061109a81611076565b92915050565b5f60ff82169050919050565b6110b5816110a0565b81146110bf575f5ffd5b50565b5f813590506110d0816110ac565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156110f8576110f7610ffa565b5b61110182610fea565b9050602081019050919050565b828183375f83830152505050565b5f61112e611129846110de565b611058565b90508281526020810184848401111561114a576111496110da565b5b61115584828561110e565b509392505050565b5f82601f830112611171576111706110d6565b5b813561118184826020860161111c565b91505092915050565b5f6080828403121561119f5761119e610fe6565b5b6111a96080611058565b90505f6111b88482850161108c565b5f8301525060206111cb848285016110c2565b60208301525060406111df848285016110c2565b604083015250606082013567ffffffffffffffff81111561120357611202611072565b5b61120f8482850161115d565b60608301525092915050565b5f602082840312156112305761122f610f44565b5b5f82013567ffffffffffffffff81111561124d5761124c610f48565b5b6112598482850161118a565b91505092915050565b61126b81610ead565b82525050565b5f6020820190506112845f830184611262565b92915050565b5f6020828403121561129f5761129e610f44565b5b5f6112ac8482850161108c565b91505092915050565b5f6020820190506112c85f830184610fb0565b92915050565b6112d7816110a0565b82525050565b5f6040820190506112f05f8301856112ce565b6112fd60208301846112ce565b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61132d82611304565b9050919050565b61133d81611323565b82525050565b5f6040820190506113565f830185611262565b6113636020830184611334565b9392505050565b5f8151905061137881611076565b92915050565b61138781610f08565b8114611391575f5ffd5b50565b5f815190506113a28161137e565b92915050565b5f5f604083850312156113be576113bd610f44565b5b5f6113cb8582860161136a565b92505060206113dc85828601611394565b9150509250929050565b6113ef81610ead565b82525050565b6113fe816110a0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61143682611404565b611440818561140e565b935061145081856020860161141e565b61145981610fea565b840191505092915050565b5f608083015f8301516114795f8601826113e6565b50602083015161148c60208601826113f5565b50604083015161149f60408601826113f5565b50606083015184820360608601526114b7828261142c565b9150508091505092915050565b5f6040820190508181035f8301526114dc8185611464565b90506114eb6020830184611334565b9392505050565b5f6020828403121561150757611506610f44565b5b5f6115148482850161136a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020811061155b5761155a61151d565b5b50565b5f81905061156b8261154a565b919050565b5f61157a8261155e565b9050919050565b61158a81611570565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6115c483836113e6565b60208301905092915050565b5f602082019050919050565b5f6115e682611590565b6115f0818561159a565b93506115fb836115aa565b805f5b8381101561162b57815161161288826115b9565b975061161d836115d0565b9250506001810190506115fe565b5085935050505092915050565b5f60808201905061164b5f8301876112ce565b6116586020830186611581565b818103604083015261166a81856115dc565b9050818103606083015261167e81846115dc565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8160030b9050919050565b6116cb816116b6565b82525050565b5f6020820190506116e45f8301846116c2565b9291505056fea2646970667358221220758d6ba5fabe26207a9eeb269ab2354286adbb7560142c08897a08e8c702793f64736f6c63430008210033",
2484
+ bytecode: "0x6080604052348015600e575f5ffd5b506117208061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c806384f091db1161006f57806384f091db1461016757806384ff25c614610183578063b5872e8c1461019f578063d09de08a146101bb578063d7a0faa2146101c5578063f6bc7f3f146101e1576100b2565b806319d8a05b146100b6578063267c4ae4146100d45780633983d430146100f2578063458693c9146100fc578063647096091461012d57806367c6517414610149575b5f5ffd5b6100be610211565b6040516100cb9190610eef565b60405180910390f35b6100dc610216565b6040516100e99190610f22565b60405180910390f35b6100fa61021e565b005b61011660048036038101906101119190610f76565b61022a565b604051610124929190610fbf565b60405180910390f35b6101476004803603810190610142919061121b565b61023e565b005b610151610293565b60405161015e9190611271565b60405180910390f35b610181600480360381019061017c919061121b565b610299565b005b61019d6004803603810190610198919061121b565b6102c8565b005b6101b960048036038101906101b4919061121b565b6102f7565b005b6101c3610324565b005b6101df60048036038101906101da919061128a565b610353565b005b6101fb60048036038101906101f69190610f76565b610380565b60405161020891906112b5565b60405180910390f35b5f5481565b5f6001905090565b6102285f54610391565b565b5f5f610235836103b7565b91509150915091565b5f610248826103d5565b90505f610268610259835f54610448565b836102635f610491565b6104a3565b90506102755f5482610505565b5f819055506102845f5461054e565b61028e5f546105cd565b505050565b60015481565b6102ac5f546102a7836103d5565b61064c565b5f819055506102bb5f5461054e565b6102c55f546105cd565b50565b6102db5f546102d6836103d5565b610695565b5f819055506102ea5f5461054e565b6102f45f546105cd565b50565b610300816103d5565b5f819055505f546001819055506103175f5461054e565b6103215f546105cd565b50565b6103385f546103336001610491565b610695565b5f819055506103475f5461054e565b6103515f546105cd565b565b61035c81610491565b5f819055505f546001819055506103735f5461054e565b61037d5f546105cd565b50565b5f61038a826106de565b9050919050565b61039a816106ef565b6103aa576103a75f610491565b90505b6103b381610700565b5050565b5f5f5f5f6103c485610785565b915091508181935093505050915091565b5f5f600490508060ff16836040015160ff161461042f578260400151816040517f67cf30710000000000000000000000000000000000000000000000000000000081526004016104269291906112dd565b60405180910390fd5b61044061043b8461081b565b61085d565b915050919050565b5f610452836106ef565b6104625761045f5f610491565b92505b61046b826106ef565b61047b576104785f610491565b91505b6104896004848460136108f4565b905092915050565b5f61049c825f6109e3565b9050919050565b5f6104ad846109fd565b6104bd576104ba5f610a0e565b93505b6104c6836106ef565b6104d6576104d35f610491565b92505b6104df826106ef565b6104ef576104ec5f610491565b91505b6104fc6004858585610a20565b90509392505050565b5f61050f836106ef565b61051f5761051c5f610491565b92505b610528826106ef565b610538576105355f610491565b91505b6105466004848460076108f4565b905092915050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82306040518363ffffffff1660e01b815260040161059d929190611343565b5f604051808303815f87803b1580156105b4575f5ffd5b505af11580156105c6573d5f5f3e3d5ffd5b5050505050565b73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166365d0509c82336040518363ffffffff1660e01b815260040161061c929190611343565b5f604051808303815f87803b158015610633575f5ffd5b505af1158015610645573d5f5f3e3d5ffd5b5050505050565b5f610656836106ef565b610666576106635f610491565b92505b61066f826106ef565b61067f5761067c5f610491565b91505b61068d60048484600f6108f4565b905092915050565b5f61069f836106ef565b6106af576106ac5f610491565b92505b6106b8826106ef565b6106c8576106c55f610491565b91505b6106d66004848460086108f4565b905092915050565b5f6106e882610b11565b9050919050565b5f6106f982610ba5565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16630828982783336040518363ffffffff1660e01b8152600401610750929190611343565b5f604051808303815f87803b158015610767575f5ffd5b505af1158015610779573d5f5f3e3d5ffd5b50505050819050919050565b5f5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663458693c9846040518263ffffffff1660e01b81526004016107d49190611271565b6040805180830381865afa1580156107ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081291906113a8565b91509150915091565b610823610e82565b6040518060800160405280835f01518152602001836020015160ff168152602001600460ff16815260200183606001518152509050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff166327f9c76283336040518363ffffffff1660e01b81526004016108ad9291906114c4565b6020604051808303815f875af11580156108c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ed91906114f2565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd86846109318888610bb1565b5f67ffffffffffffffff81111561094b5761094a610ffa565b5b6040519080825280602002602001820160405280156109795781602001602082028036833780820191505090505b506040518563ffffffff1660e01b81526004016109999493929190611638565b6020604051808303815f875af11580156109b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d991906114f2565b9050949350505050565b5f5f6109f184600485610c4b565b90508091505092915050565b5f610a0782610ba5565b9050919050565b5f610a19825f610d46565b9050919050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd866004610a5f888888610d6f565b5f67ffffffffffffffff811115610a7957610a78610ffa565b5b604051908082528060200260200182016040528015610aa75781602001602082028036833780820191505090505b506040518563ffffffff1660e01b8152600401610ac79493929190611638565b6020604051808303815f875af1158015610ae3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0791906114f2565b9050949350505050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff1663f6bc7f3f836040518263ffffffff1660e01b8152600401610b5f9190611271565b602060405180830381865afa158015610b7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9e91906114f2565b9050919050565b5f5f8214159050919050565b60605f600267ffffffffffffffff811115610bcf57610bce610ffa565b5b604051908082528060200260200182016040528015610bfd5781602001602082028036833780820191505090505b50905083815f81518110610c1457610c13611689565b5b6020026020010181815250508281600181518110610c3557610c34611689565b5b6020026020010181815250508091505092915050565b5f73ea30c4b8b44078bbf8a6ef5b9f1ec1626c7848d973ffffffffffffffffffffffffffffffffffffffff16631888debd84601a5f67ffffffffffffffff811115610c9957610c98610ffa565b5b604051908082528060200260200182016040528015610cc75781602001602082028036833780820191505090505b50610cde898960ff16610cd98a610e2b565b610d6f565b6040518563ffffffff1660e01b8152600401610cfd9493929190611638565b6020604051808303815f875af1158015610d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3d91906114f2565b90509392505050565b5f5f5f90508315610d5657600190505b5f610d62825f86610c4b565b9050809250505092915050565b60605f600367ffffffffffffffff811115610d8d57610d8c610ffa565b5b604051908082528060200260200182016040528015610dbb5781602001602082028036833780820191505090505b50905084815f81518110610dd257610dd1611689565b5b6020026020010181815250508381600181518110610df357610df2611689565b5b6020026020010181815250508281600281518110610e1457610e13611689565b5b602002602001018181525050809150509392505050565b5f5f8260030b1215610e7457816040517f8f568bf8000000000000000000000000000000000000000000000000000000008152600401610e6b91906116d1565b60405180910390fd5b8163ffffffff169050919050565b60405180608001604052805f81526020015f60ff1681526020015f60ff168152602001606081525090565b5f819050919050565b5f819050919050565b5f610ed9610ed4610ecf84610ead565b610eb6565b610ead565b9050919050565b610ee981610ebf565b82525050565b5f602082019050610f025f830184610ee0565b92915050565b5f8115159050919050565b610f1c81610f08565b82525050565b5f602082019050610f355f830184610f13565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610f5581610ead565b8114610f5f575f5ffd5b50565b5f81359050610f7081610f4c565b92915050565b5f60208284031215610f8b57610f8a610f44565b5b5f610f9884828501610f62565b91505092915050565b5f63ffffffff82169050919050565b610fb981610fa1565b82525050565b5f604082019050610fd25f830185610fb0565b610fdf6020830184610f13565b9392505050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61103082610fea565b810181811067ffffffffffffffff8211171561104f5761104e610ffa565b5b80604052505050565b5f611061610f3b565b905061106d8282611027565b919050565b5f5ffd5b61107f81610ead565b8114611089575f5ffd5b50565b5f8135905061109a81611076565b92915050565b5f60ff82169050919050565b6110b5816110a0565b81146110bf575f5ffd5b50565b5f813590506110d0816110ac565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156110f8576110f7610ffa565b5b61110182610fea565b9050602081019050919050565b828183375f83830152505050565b5f61112e611129846110de565b611058565b90508281526020810184848401111561114a576111496110da565b5b61115584828561110e565b509392505050565b5f82601f830112611171576111706110d6565b5b813561118184826020860161111c565b91505092915050565b5f6080828403121561119f5761119e610fe6565b5b6111a96080611058565b90505f6111b88482850161108c565b5f8301525060206111cb848285016110c2565b60208301525060406111df848285016110c2565b604083015250606082013567ffffffffffffffff81111561120357611202611072565b5b61120f8482850161115d565b60608301525092915050565b5f602082840312156112305761122f610f44565b5b5f82013567ffffffffffffffff81111561124d5761124c610f48565b5b6112598482850161118a565b91505092915050565b61126b81610ead565b82525050565b5f6020820190506112845f830184611262565b92915050565b5f6020828403121561129f5761129e610f44565b5b5f6112ac8482850161108c565b91505092915050565b5f6020820190506112c85f830184610fb0565b92915050565b6112d7816110a0565b82525050565b5f6040820190506112f05f8301856112ce565b6112fd60208301846112ce565b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61132d82611304565b9050919050565b61133d81611323565b82525050565b5f6040820190506113565f830185611262565b6113636020830184611334565b9392505050565b5f8151905061137881611076565b92915050565b61138781610f08565b8114611391575f5ffd5b50565b5f815190506113a28161137e565b92915050565b5f5f604083850312156113be576113bd610f44565b5b5f6113cb8582860161136a565b92505060206113dc85828601611394565b9150509250929050565b6113ef81610ead565b82525050565b6113fe816110a0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61143682611404565b611440818561140e565b935061145081856020860161141e565b61145981610fea565b840191505092915050565b5f608083015f8301516114795f8601826113e6565b50602083015161148c60208601826113f5565b50604083015161149f60408601826113f5565b50606083015184820360608601526114b7828261142c565b9150508091505092915050565b5f6040820190508181035f8301526114dc8185611464565b90506114eb6020830184611334565b9392505050565b5f6020828403121561150757611506610f44565b5b5f6115148482850161136a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020811061155b5761155a61151d565b5b50565b5f81905061156b8261154a565b919050565b5f61157a8261155e565b9050919050565b61158a81611570565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6115c483836113e6565b60208301905092915050565b5f602082019050919050565b5f6115e682611590565b6115f0818561159a565b93506115fb836115aa565b805f5b8381101561162b57815161161288826115b9565b975061161d836115d0565b9250506001810190506115fe565b5085935050505092915050565b5f60808201905061164b5f8301876112ce565b6116586020830186611581565b818103604083015261166a81856115dc565b9050818103606083015261167e81846115dc565b905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8160030b9050919050565b6116cb816116b6565b82525050565b5f6020820190506116e45f8301846116c2565b9291505056fea2646970667358221220758d6ba5fabe26207a9eeb269ab2354286adbb7560142c08897a08e8c702793f64736f6c63430008210033"
2480
2485
  };
2481
2486
 
2482
2487
  exports.MockACLArtifact = MockACLArtifact;