skittles 0.1.2 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +1 -14
  2. package/TODO.md +21 -0
  3. package/build/abi/ERC20.abi +165 -0
  4. package/build/abi/HelloWorld.abi +433 -0
  5. package/build/bytecode/ERC20.bytecode +1 -0
  6. package/build/bytecode/HelloWorld.bytecode +1 -0
  7. package/build/yul/ERC20.yul +306 -0
  8. package/build/yul/HelloWorld.yul +434 -0
  9. package/lib/{get-abi.js → abi/get-abi.js} +16 -1
  10. package/lib/{get-ast.js → ast/get-ast.js} +0 -0
  11. package/lib/{get-bytecode.js → bytecode/get-bytecode.js} +0 -0
  12. package/lib/data/yul-template.js +120 -71
  13. package/lib/helpers/ast-helper.js +50 -15
  14. package/lib/helpers/file-helper.js +8 -1
  15. package/lib/{get-selector.js → helpers/selector-helper.js} +0 -0
  16. package/lib/helpers/string-helper.js +14 -0
  17. package/lib/helpers/yul-helper.js +21 -0
  18. package/lib/index.js +25 -5
  19. package/lib/skittles-class/get-skittles-class.js +37 -0
  20. package/lib/skittles-class/get-skittles-constructor.js +20 -0
  21. package/lib/skittles-class/get-skittles-expression.js +94 -0
  22. package/lib/skittles-class/get-skittles-method.js +48 -0
  23. package/lib/skittles-class/get-skittles-operator.js +41 -0
  24. package/lib/skittles-class/get-skittles-property.js +22 -0
  25. package/lib/skittles-class/get-skittles-state-mutability.js +33 -0
  26. package/lib/skittles-class/get-skittles-statements.js +207 -0
  27. package/lib/skittles-class/get-skittles-type.js +54 -0
  28. package/lib/types/abi-types.js +2 -0
  29. package/lib/types/core-types.js +60 -0
  30. package/lib/types/skittles-class.js +23 -15
  31. package/lib/yul/add-yul-constructor.js +37 -0
  32. package/lib/yul/add-yul-method-dispatcher.js +29 -0
  33. package/lib/yul/add-yul-method-function.js +20 -0
  34. package/lib/yul/add-yul-property-dispatcher.js +21 -0
  35. package/lib/yul/add-yul-storage-access.js +66 -0
  36. package/lib/yul/add-yul-storage-layout.js +33 -0
  37. package/lib/yul/add-yul-value-initialzations.js +19 -0
  38. package/lib/yul/format-yul.js +20 -0
  39. package/lib/yul/get-block-yul.js +14 -0
  40. package/lib/yul/get-expression-yul.js +61 -0
  41. package/lib/yul/get-statement-yul.js +57 -0
  42. package/lib/yul/get-yul.js +37 -0
  43. package/lib/yul/yul-constants.js +35 -0
  44. package/package.json +5 -3
  45. package/yarn-error.log +10627 -0
  46. package/lib/compiler.js +0 -24
  47. package/lib/get-skittles-class.js +0 -218
  48. package/lib/get-yul.js +0 -200
package/README.md CHANGED
@@ -1,14 +1 @@
1
- Make it a cli app
2
- Create and deploy package
3
- save artifacts/build
4
- Remove tabs in yul, surely this can be automated or somethign
5
- Use the `SkittlesOperator` strings for the assemby stuff
6
- Try changing balance to 1 in the contract and run tests
7
- add prepublish
8
-
9
- Add more support
10
- remove Token.yul
11
-
12
- add readme
13
-
14
- Add other normal repo things
1
+ TODO
package/TODO.md ADDED
@@ -0,0 +1,21 @@
1
+ ===== Peer Review ====
2
+
3
+ - add init function
4
+ - wrap all hardhat functions
5
+ - add readme
6
+ - add normal repo things
7
+ - Consider making types default exports (like `string` and `number` are)
8
+
9
+ ==== Beta ready ====
10
+
11
+ - Add support for `else` conditions for `if` statements (need to use switches)
12
+ - Add support for events
13
+ - Add immutable (readonly) setting for evaluated values using `setimmutable`
14
+ - Consider how we handle large numbers (BigNumber or something?)
15
+ - automatic mapping views
16
+ - Add config for things like running optimizer
17
+
18
+ ==== FORMATTED ====
19
+
20
+ - Remove redundant stores for `readonly` values in the constructor
21
+ - Change to getting function signatures with this: https://github.com/FuelLabs/yulp/blob/620d04acb060a7a817e2cfc6da4c9b4d9c7fcef0/src/yulplus.ne#L40
@@ -0,0 +1,165 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "mintAmount_",
7
+ "type": "uint256"
8
+ }
9
+ ],
10
+ "stateMutability": "nonpayable"
11
+ },
12
+ {
13
+ "type": "function",
14
+ "name": "decimals",
15
+ "inputs": [],
16
+ "outputs": [
17
+ {
18
+ "name": "",
19
+ "type": "uint256"
20
+ }
21
+ ],
22
+ "stateMutability": "view"
23
+ },
24
+ {
25
+ "type": "function",
26
+ "name": "symbol",
27
+ "inputs": [],
28
+ "outputs": [
29
+ {
30
+ "name": "",
31
+ "type": "string"
32
+ }
33
+ ],
34
+ "stateMutability": "view"
35
+ },
36
+ {
37
+ "type": "function",
38
+ "name": "name",
39
+ "inputs": [],
40
+ "outputs": [
41
+ {
42
+ "name": "",
43
+ "type": "string"
44
+ }
45
+ ],
46
+ "stateMutability": "view"
47
+ },
48
+ {
49
+ "type": "function",
50
+ "name": "totalSupply",
51
+ "inputs": [],
52
+ "outputs": [
53
+ {
54
+ "name": "",
55
+ "type": "uint256"
56
+ }
57
+ ],
58
+ "stateMutability": "view"
59
+ },
60
+ {
61
+ "type": "function",
62
+ "name": "balanceOf",
63
+ "inputs": [
64
+ {
65
+ "name": "address",
66
+ "type": "address"
67
+ }
68
+ ],
69
+ "outputs": [
70
+ {
71
+ "name": "",
72
+ "type": "uint256"
73
+ }
74
+ ],
75
+ "stateMutability": "view"
76
+ },
77
+ {
78
+ "type": "function",
79
+ "name": "allowance",
80
+ "inputs": [
81
+ {
82
+ "name": "owner",
83
+ "type": "address"
84
+ },
85
+ {
86
+ "name": "spender",
87
+ "type": "address"
88
+ }
89
+ ],
90
+ "outputs": [
91
+ {
92
+ "name": "",
93
+ "type": "uint256"
94
+ }
95
+ ],
96
+ "stateMutability": "view"
97
+ },
98
+ {
99
+ "type": "function",
100
+ "name": "approve",
101
+ "inputs": [
102
+ {
103
+ "name": "spender",
104
+ "type": "address"
105
+ },
106
+ {
107
+ "name": "amount",
108
+ "type": "uint256"
109
+ }
110
+ ],
111
+ "outputs": [
112
+ {
113
+ "name": "",
114
+ "type": "bool"
115
+ }
116
+ ],
117
+ "stateMutability": "payable"
118
+ },
119
+ {
120
+ "type": "function",
121
+ "name": "transfer",
122
+ "inputs": [
123
+ {
124
+ "name": "to",
125
+ "type": "address"
126
+ },
127
+ {
128
+ "name": "amount",
129
+ "type": "uint256"
130
+ }
131
+ ],
132
+ "outputs": [
133
+ {
134
+ "name": "",
135
+ "type": "bool"
136
+ }
137
+ ],
138
+ "stateMutability": "payable"
139
+ },
140
+ {
141
+ "type": "function",
142
+ "name": "transferFrom",
143
+ "inputs": [
144
+ {
145
+ "name": "from",
146
+ "type": "address"
147
+ },
148
+ {
149
+ "name": "to",
150
+ "type": "address"
151
+ },
152
+ {
153
+ "name": "amount",
154
+ "type": "uint256"
155
+ }
156
+ ],
157
+ "outputs": [
158
+ {
159
+ "name": "",
160
+ "type": "bool"
161
+ }
162
+ ],
163
+ "stateMutability": "payable"
164
+ }
165
+ ]
@@ -0,0 +1,433 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "init_",
7
+ "type": "uint256"
8
+ }
9
+ ],
10
+ "stateMutability": "nonpayable"
11
+ },
12
+ {
13
+ "type": "function",
14
+ "name": "balance",
15
+ "inputs": [],
16
+ "outputs": [
17
+ {
18
+ "name": "",
19
+ "type": "uint256"
20
+ }
21
+ ],
22
+ "stateMutability": "view"
23
+ },
24
+ {
25
+ "type": "function",
26
+ "name": "decimals",
27
+ "inputs": [],
28
+ "outputs": [
29
+ {
30
+ "name": "",
31
+ "type": "uint256"
32
+ }
33
+ ],
34
+ "stateMutability": "view"
35
+ },
36
+ {
37
+ "type": "function",
38
+ "name": "age",
39
+ "inputs": [],
40
+ "outputs": [
41
+ {
42
+ "name": "",
43
+ "type": "uint256"
44
+ }
45
+ ],
46
+ "stateMutability": "view"
47
+ },
48
+ {
49
+ "type": "function",
50
+ "name": "name",
51
+ "inputs": [],
52
+ "outputs": [
53
+ {
54
+ "name": "",
55
+ "type": "string"
56
+ }
57
+ ],
58
+ "stateMutability": "view"
59
+ },
60
+ {
61
+ "type": "function",
62
+ "name": "init",
63
+ "inputs": [],
64
+ "outputs": [
65
+ {
66
+ "name": "",
67
+ "type": "uint256"
68
+ }
69
+ ],
70
+ "stateMutability": "view"
71
+ },
72
+ {
73
+ "type": "function",
74
+ "name": "getBalanceTimesTwo",
75
+ "inputs": [],
76
+ "outputs": [
77
+ {
78
+ "name": "",
79
+ "type": "uint256"
80
+ }
81
+ ],
82
+ "stateMutability": "view"
83
+ },
84
+ {
85
+ "type": "function",
86
+ "name": "getPrivateBalance",
87
+ "inputs": [],
88
+ "outputs": [
89
+ {
90
+ "name": "",
91
+ "type": "uint256"
92
+ }
93
+ ],
94
+ "stateMutability": "view"
95
+ },
96
+ {
97
+ "type": "function",
98
+ "name": "setApproval",
99
+ "inputs": [
100
+ {
101
+ "name": "spender",
102
+ "type": "address"
103
+ },
104
+ {
105
+ "name": "amount",
106
+ "type": "uint256"
107
+ }
108
+ ],
109
+ "outputs": [
110
+ {
111
+ "name": "",
112
+ "type": "bool"
113
+ }
114
+ ],
115
+ "stateMutability": "payable"
116
+ },
117
+ {
118
+ "type": "function",
119
+ "name": "getApproval",
120
+ "inputs": [
121
+ {
122
+ "name": "owner",
123
+ "type": "address"
124
+ },
125
+ {
126
+ "name": "spender",
127
+ "type": "address"
128
+ }
129
+ ],
130
+ "outputs": [
131
+ {
132
+ "name": "",
133
+ "type": "uint256"
134
+ }
135
+ ],
136
+ "stateMutability": "view"
137
+ },
138
+ {
139
+ "type": "function",
140
+ "name": "getUsersBalance",
141
+ "inputs": [
142
+ {
143
+ "name": "user",
144
+ "type": "address"
145
+ }
146
+ ],
147
+ "outputs": [
148
+ {
149
+ "name": "",
150
+ "type": "uint256"
151
+ }
152
+ ],
153
+ "stateMutability": "view"
154
+ },
155
+ {
156
+ "type": "function",
157
+ "name": "addBalance",
158
+ "inputs": [
159
+ {
160
+ "name": "value",
161
+ "type": "uint256"
162
+ }
163
+ ],
164
+ "outputs": [
165
+ {
166
+ "name": "",
167
+ "type": "void"
168
+ }
169
+ ],
170
+ "stateMutability": "payable"
171
+ },
172
+ {
173
+ "type": "function",
174
+ "name": "getCoinbase",
175
+ "inputs": [],
176
+ "outputs": [
177
+ {
178
+ "name": "",
179
+ "type": "address"
180
+ }
181
+ ],
182
+ "stateMutability": "view"
183
+ },
184
+ {
185
+ "type": "function",
186
+ "name": "getDifficulty",
187
+ "inputs": [],
188
+ "outputs": [
189
+ {
190
+ "name": "",
191
+ "type": "uint256"
192
+ }
193
+ ],
194
+ "stateMutability": "view"
195
+ },
196
+ {
197
+ "type": "function",
198
+ "name": "getBlock",
199
+ "inputs": [],
200
+ "outputs": [
201
+ {
202
+ "name": "",
203
+ "type": "uint256"
204
+ }
205
+ ],
206
+ "stateMutability": "view"
207
+ },
208
+ {
209
+ "type": "function",
210
+ "name": "getTimestamp",
211
+ "inputs": [],
212
+ "outputs": [
213
+ {
214
+ "name": "",
215
+ "type": "uint256"
216
+ }
217
+ ],
218
+ "stateMutability": "view"
219
+ },
220
+ {
221
+ "type": "function",
222
+ "name": "getChainId",
223
+ "inputs": [],
224
+ "outputs": [
225
+ {
226
+ "name": "",
227
+ "type": "uint256"
228
+ }
229
+ ],
230
+ "stateMutability": "view"
231
+ },
232
+ {
233
+ "type": "function",
234
+ "name": "getMsgValue",
235
+ "inputs": [],
236
+ "outputs": [
237
+ {
238
+ "name": "",
239
+ "type": "uint256"
240
+ }
241
+ ],
242
+ "stateMutability": "view"
243
+ },
244
+ {
245
+ "type": "function",
246
+ "name": "getTxGasPrice",
247
+ "inputs": [],
248
+ "outputs": [
249
+ {
250
+ "name": "",
251
+ "type": "uint256"
252
+ }
253
+ ],
254
+ "stateMutability": "view"
255
+ },
256
+ {
257
+ "type": "function",
258
+ "name": "getTxOrigin",
259
+ "inputs": [],
260
+ "outputs": [
261
+ {
262
+ "name": "",
263
+ "type": "address"
264
+ }
265
+ ],
266
+ "stateMutability": "view"
267
+ },
268
+ {
269
+ "type": "function",
270
+ "name": "getMathsResult",
271
+ "inputs": [],
272
+ "outputs": [
273
+ {
274
+ "name": "",
275
+ "type": "uint256"
276
+ }
277
+ ],
278
+ "stateMutability": "view"
279
+ },
280
+ {
281
+ "type": "function",
282
+ "name": "getNotEqualToTwo",
283
+ "inputs": [
284
+ {
285
+ "name": "value",
286
+ "type": "uint256"
287
+ }
288
+ ],
289
+ "outputs": [
290
+ {
291
+ "name": "",
292
+ "type": "bool"
293
+ }
294
+ ],
295
+ "stateMutability": "view"
296
+ },
297
+ {
298
+ "type": "function",
299
+ "name": "getEqualToSeven",
300
+ "inputs": [
301
+ {
302
+ "name": "value",
303
+ "type": "uint256"
304
+ }
305
+ ],
306
+ "outputs": [
307
+ {
308
+ "name": "",
309
+ "type": "bool"
310
+ }
311
+ ],
312
+ "stateMutability": "view"
313
+ },
314
+ {
315
+ "type": "function",
316
+ "name": "getGreaterThanFour",
317
+ "inputs": [
318
+ {
319
+ "name": "value",
320
+ "type": "uint256"
321
+ }
322
+ ],
323
+ "outputs": [
324
+ {
325
+ "name": "",
326
+ "type": "bool"
327
+ }
328
+ ],
329
+ "stateMutability": "view"
330
+ },
331
+ {
332
+ "type": "function",
333
+ "name": "getLessThan9",
334
+ "inputs": [
335
+ {
336
+ "name": "value",
337
+ "type": "uint256"
338
+ }
339
+ ],
340
+ "outputs": [
341
+ {
342
+ "name": "",
343
+ "type": "bool"
344
+ }
345
+ ],
346
+ "stateMutability": "view"
347
+ },
348
+ {
349
+ "type": "function",
350
+ "name": "getGreaterThanOrEqualToFour",
351
+ "inputs": [
352
+ {
353
+ "name": "value",
354
+ "type": "uint256"
355
+ }
356
+ ],
357
+ "outputs": [
358
+ {
359
+ "name": "",
360
+ "type": "bool"
361
+ }
362
+ ],
363
+ "stateMutability": "view"
364
+ },
365
+ {
366
+ "type": "function",
367
+ "name": "getLessThanOrEqualTo9",
368
+ "inputs": [
369
+ {
370
+ "name": "value",
371
+ "type": "uint256"
372
+ }
373
+ ],
374
+ "outputs": [
375
+ {
376
+ "name": "",
377
+ "type": "bool"
378
+ }
379
+ ],
380
+ "stateMutability": "view"
381
+ },
382
+ {
383
+ "type": "function",
384
+ "name": "getAnd",
385
+ "inputs": [
386
+ {
387
+ "name": "value",
388
+ "type": "bool"
389
+ }
390
+ ],
391
+ "outputs": [
392
+ {
393
+ "name": "",
394
+ "type": "bool"
395
+ }
396
+ ],
397
+ "stateMutability": "view"
398
+ },
399
+ {
400
+ "type": "function",
401
+ "name": "getOr",
402
+ "inputs": [
403
+ {
404
+ "name": "value",
405
+ "type": "bool"
406
+ }
407
+ ],
408
+ "outputs": [
409
+ {
410
+ "name": "",
411
+ "type": "bool"
412
+ }
413
+ ],
414
+ "stateMutability": "view"
415
+ },
416
+ {
417
+ "type": "function",
418
+ "name": "getNot",
419
+ "inputs": [
420
+ {
421
+ "name": "value",
422
+ "type": "bool"
423
+ }
424
+ ],
425
+ "outputs": [
426
+ {
427
+ "name": "",
428
+ "type": "bool"
429
+ }
430
+ ],
431
+ "stateMutability": "view"
432
+ }
433
+ ]
@@ -0,0 +1 @@
1
+ 61058a8038038082600039600051610017813361008f565b6100208161009e565b60147f54455354204552433230000000000000000000000000000000000000000000000160025560087f54455354000000000000000000000000000000000000000000000000000000000160015560126000556100ab565b600081611000019050919050565b60006003905090565b8161009982610078565b555050565b806100a7610086565b5550565b6104ce6100bc6000396104ce6000f3fe6100076102cb565b6323b872dd811461006f5763a9059cbb81146100a25763095ea7b381146100cb5763dd62ed3e81146100f4576370a08231811461011d576318160ddd811461013c576306fdde038114610151576395d89b4181146101665763313ce567811461017b57600080fd5b61009d61009861007f6002610328565b61008960016102f4565b61009360006102f4565b610207565b610371565b61018c565b6100c66100c16100b26001610328565b6100bc60006102f4565b610277565b610371565b61018c565b6100ef6100ea6100db6001610328565b6100e560006102f4565b61028e565b610371565b61018c565b61011861011361010460016102f4565b61010e60006102f4565b6102a5565b61034b565b61018c565b61013761013261012d60006102f4565b6102b9565b61034b565b61018c565b61014c610147610434565b61034b565b61018c565b61016161015c610444565b610355565b61018c565b610176610171610454565b610355565b61018c565b61018b610186610464565b61034b565b5b506104cd565b8261019c82610412565b10156101cc576101cb7f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006104a5565b5b6101e76101e1846101dc85610412565b61046d565b83610425565b6102026101fc846101f784610412565b61048b565b82610425565b505050565b60008361021433846103ec565b1015610244576102437f616d6f756e74206578636565647320616c6c6f77616e636500000000000000006104a5565b5b61024f848484610192565b61026c6102658561026033866103ec565b61048b565b3384610401565b600190509392505050565b6000610284838333610192565b6001905092915050565b600061029b838333610401565b6001905092915050565b60006102b183836103ec565b905092915050565b60006102c482610412565b9050919050565b60007c010000000000000000000000000000000000000000000000000000000060003504905090565b60006102ff82610328565b905073ffffffffffffffffffffffffffffffffffffffff1981161561032357600080fd5b919050565b6000602082026004016020810136101561034157600080fd5b8035915050919050565b8060005260206000f35b61035e816104af565b6020600052806020528160405260606000f35b8060018114610387576000811461039657600080fd5b610391600161034b565b6103a1565b6103a0600061034b565b5b5050565b60008161100001905080600052826000526040600020905092915050565b600081611000019050919050565b60006003905090565b60006002905090565b60006001905090565b60006103f883836103a5565b54905092915050565b8261040c83836103a5565b55505050565b600061041d826103c3565b549050919050565b8161042f826103c3565b555050565b600061043e6103d1565b54905090565b600061044e6103da565b54905090565b600061045e6103e3565b54905090565b60006012905090565b60008282019050828110828210171561048557600080fd5b92915050565b600082820390508183111561049f57600080fd5b92915050565b8060005260206000fd5b600060028204905060018216806104c757607f821691505b50919050565b
@@ -0,0 +1 @@
1
+ 61088a803803808260003960005161001681610080565b6100208133610071565b60167f48656c6c6f20576f726c6400000000000000000000000000000000000000000001600455601260025560018055606f60005561008d565b600081611000019050919050565b60006005905090565b8161007b8261005a565b555050565b80610089610068565b5550565b6107ec61009e6000396107ec6000f3fe6100076105ad565b63cd5feab6811461014a5763a9a5d5eb811461016957633271356281146101885763470f0c5881146101a757632268a16081146101c6576397f7236881146101e557637f5f10d4811461020457639e785eca811461022357638fa25b37811461024257632404c15381146102615763b8077e2881146102765763a38aa291811461028b5763a17042cc81146102a057633408e47081146102b55763188ec35681146102ca57632e97766d81146102df5763b6baffe381146102f45763d1a82a9d81146103095763d91921ed811461031e5763cd6fc91d8114610335576389fcd099811461035457631417cef8811461037d576338f6f16381146103a65762da7d0881146103bb5763e1c7392a81146103d0576306fdde0381146103e55763262a9dff81146103fa5763313ce567811461040f5763b69ef8a8811461042457600080fd5b61016461015f61015a600061060a565b61043b565b610653565b610435565b61018361017e610179600061060a565b610446565b610653565b610435565b6101a261019d610198600061060a565b610452565b610653565b610435565b6101c16101bc6101b7600061060a565b61045f565b610653565b610435565b6101e06101db6101d6600061060a565b610473565b610653565b610435565b6101ff6101fa6101f5600061060a565b610487565b610653565b610435565b61021e610219610214600061060a565b610494565b610653565b610435565b61023d610238610233600061060a565b6104a1565b610653565b610435565b61025c610257610252600061060a565b6104ae565b610653565b610435565b61027161026c6104c2565b61062d565b610435565b6102866102816104e7565b61062d565b610435565b61029b6102966104ef565b61062d565b610435565b6102b06102ab6104f7565b61062d565b610435565b6102c56102c06104ff565b61062d565b610435565b6102da6102d5610507565b61062d565b610435565b6102ef6102ea61050f565b61062d565b610435565b6103046102ff610517565b61062d565b610435565b61031961031461051f565b61062d565b610435565b61033061032b600061060a565b610527565b610435565b61034f61034a61034560006105d6565b610533565b61062d565b610435565b61037861037361036460016105d6565b61036e60006105d6565b610545565b61062d565b610435565b6103a161039c61038d600161060a565b61039760006105d6565b610559565b610653565b610435565b6103b66103b161058c565b61062d565b610435565b6103cb6103c661059b565b61062d565b610435565b6103e06103db61070c565b61062d565b610435565b6103f56103f061071c565b610637565b610435565b61040a61040561072c565b61062d565b610435565b61041f61041a610735565b61062d565b610435565b61043461042f61073e565b61062d565b5b506107eb565b600081159050919050565b60008082179050919050565b6000600182169050919050565b600061046c6009836107b1565b9050919050565b60006104806004836107a3565b9050919050565b6000600982109050919050565b6000600482119050919050565b6000816007149050919050565b60006104bb8260026107bf565b9050919050565b60006104e2600760068060040204066104dd6003600261076b565b610789565b905090565b600032905090565b60003a905090565b600034905090565b600046905090565b600042905090565b600043905090565b600044905090565b600041905090565b61053081610570565b50565b600061053e826106f9565b9050919050565b600061055183836106d3565b905092915050565b60006105668383336106e8565b6001905092915050565b6105896105848261057f61073e565b61076b565b61074e565b50565b600061059661075b565b905090565b600060026105a761073e565b02905090565b60007c010000000000000000000000000000000000000000000000000000000060003504905090565b60006105e18261060a565b905073ffffffffffffffffffffffffffffffffffffffff1981161561060557600080fd5b919050565b6000602082026004016020810136101561062357600080fd5b8035915050919050565b8060005260206000f35b610640816107cd565b6020600052806020528160405260606000f35b8060018114610669576000811461067857600080fd5b610673600161062d565b610683565b610682600061062d565b5b5050565b60008161100001905080600052826000526040600020905092915050565b600081611000019050919050565b60006005905090565b60006004905090565b60006001905090565b600090565b60006106df8383610687565b54905092915050565b826106f38383610687565b55505050565b6000610704826106a5565b549050919050565b60006107166106b3565b54905090565b60006107266106bc565b54905090565b6000602e905090565b60006012905090565b60006107486106c5565b54905090565b806107576106c5565b5550565b60006107656106ce565b54905090565b60008282019050828110828210171561078357600080fd5b92915050565b600082820390508183111561079d57600080fd5b92915050565b600082821015905092915050565b600082821115905092915050565b600082821415905092915050565b600060028204905060018216806107e557607f821691505b50919050565b