@ascent-lang/dev 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/errors/elaborate.d.ts +24 -0
  2. package/dist/errors/elaborate.d.ts.map +1 -0
  3. package/dist/errors/elaborate.js +53 -0
  4. package/dist/errors/elaborate.js.map +1 -0
  5. package/dist/errors/index.d.ts.map +1 -1
  6. package/dist/errors/index.js +356 -30
  7. package/dist/errors/index.js.map +1 -1
  8. package/dist/errors/render.d.ts +3 -0
  9. package/dist/errors/render.d.ts.map +1 -0
  10. package/dist/errors/render.js +43 -0
  11. package/dist/errors/render.js.map +1 -0
  12. package/dist/errors/types.d.ts +29 -0
  13. package/dist/errors/types.d.ts.map +1 -1
  14. package/dist/index.js +21 -28
  15. package/dist/index.js.map +1 -1
  16. package/dist/interpreter.d.ts.map +1 -1
  17. package/dist/interpreter.js +28 -5
  18. package/dist/interpreter.js.map +1 -1
  19. package/dist/lexer/index.d.ts.map +1 -1
  20. package/dist/lexer/index.js +4 -3
  21. package/dist/lexer/index.js.map +1 -1
  22. package/dist/lexer/keywords.d.ts.map +1 -1
  23. package/dist/lexer/keywords.js +3 -0
  24. package/dist/lexer/keywords.js.map +1 -1
  25. package/dist/lexer/token.d.ts +7 -1
  26. package/dist/lexer/token.d.ts.map +1 -1
  27. package/dist/lib.d.ts +3 -3
  28. package/dist/lib.d.ts.map +1 -1
  29. package/dist/lib.js +11 -6
  30. package/dist/lib.js.map +1 -1
  31. package/dist/parser/ast.d.ts +8 -4
  32. package/dist/parser/ast.d.ts.map +1 -1
  33. package/dist/parser/expr.d.ts.map +1 -1
  34. package/dist/parser/expr.js +34 -19
  35. package/dist/parser/expr.js.map +1 -1
  36. package/dist/parser/index.d.ts +3 -5
  37. package/dist/parser/index.d.ts.map +1 -1
  38. package/dist/parser/index.js +26 -33
  39. package/dist/parser/index.js.map +1 -1
  40. package/dist/parser/printer.d.ts +1 -0
  41. package/dist/parser/printer.d.ts.map +1 -1
  42. package/dist/parser/printer.js +21 -0
  43. package/dist/parser/printer.js.map +1 -1
  44. package/dist/parser/stmt.d.ts.map +1 -1
  45. package/dist/parser/stmt.js +5 -3
  46. package/dist/parser/stmt.js.map +1 -1
  47. package/dist/parser/token-stream.d.ts +4 -4
  48. package/dist/parser/token-stream.d.ts.map +1 -1
  49. package/dist/parser/token-stream.js +21 -9
  50. package/dist/parser/token-stream.js.map +1 -1
  51. package/dist/parser/type-expr.d.ts +1 -1
  52. package/dist/parser/type-expr.d.ts.map +1 -1
  53. package/dist/parser/type-expr.js +11 -4
  54. package/dist/parser/type-expr.js.map +1 -1
  55. package/dist/parser/typechecker.d.ts +2 -2
  56. package/dist/parser/typechecker.d.ts.map +1 -1
  57. package/dist/parser/typechecker.js +109 -67
  58. package/dist/parser/typechecker.js.map +1 -1
  59. package/dist/types/types.d.ts +4 -0
  60. package/dist/types/types.d.ts.map +1 -1
  61. package/dist/types/types.js +27 -15
  62. package/dist/types/types.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/errors/elaborate.ts +88 -0
  65. package/src/errors/index.ts +356 -30
  66. package/src/errors/lexical.yml +48 -13
  67. package/src/errors/name.yml +45 -9
  68. package/src/errors/render.ts +59 -0
  69. package/src/errors/syntactic.yml +128 -49
  70. package/src/errors/typechecker.yml +147 -61
  71. package/src/errors/types.ts +55 -0
  72. package/src/index.ts +20 -30
  73. package/src/interpreter.ts +24 -6
  74. package/src/lexer/index.ts +4 -3
  75. package/src/lexer/keywords.ts +3 -0
  76. package/src/lexer/token.ts +18 -0
  77. package/src/lib.ts +12 -7
  78. package/src/parser/ast.ts +7 -6
  79. package/src/parser/expr.ts +34 -19
  80. package/src/parser/index.ts +32 -32
  81. package/src/parser/printer.ts +22 -0
  82. package/src/parser/stmt.ts +5 -3
  83. package/src/parser/token-stream.ts +20 -8
  84. package/src/parser/type-expr.ts +10 -4
  85. package/src/parser/typechecker.ts +142 -54
  86. package/src/types/types.ts +36 -16
@@ -1,4 +1,4 @@
1
- import { INT_TYPE, FLOAT_TYPE, BOOL_TYPE, STRING_TYPE, NONE_TYPE, DONE_TYPE, listOfType, leastCommonType, isAssignableTo, } from '../types/types.js';
1
+ import { INT_TYPE, FLOAT_TYPE, BOOL_TYPE, STRING_TYPE, NONE_TYPE, DONE_TYPE, listOfType, leastCommonType, isAssignableTo, typeToString, } from '../types/types.js';
2
2
  // A chain of scopes mirroring Environment in the interpreter.
3
3
  class TypeEnv {
4
4
  parent;
@@ -9,42 +9,56 @@ class TypeEnv {
9
9
  get(name) {
10
10
  return this.vars.get(name) ?? this.parent?.get(name) ?? null;
11
11
  }
12
- set(name, ty, mutable) {
13
- this.vars.set(name, { ty, mutable });
12
+ set(name, ty, origin, declSpan = null) {
13
+ this.vars.set(name, { ty, origin, declSpan });
14
14
  }
15
15
  child() {
16
16
  return new TypeEnv(this);
17
17
  }
18
18
  }
19
- const resolveTypeExpr = (te) => {
20
- switch (te.kind) {
21
- case 'TypeName': {
22
- switch (te.name) {
23
- case 'Int': return INT_TYPE;
24
- case 'Float': return FLOAT_TYPE;
25
- case 'Bool': return BOOL_TYPE;
26
- case 'String': return STRING_TYPE;
27
- }
28
- }
29
- case 'ListType':
30
- return listOfType(resolveTypeExpr(te.elem));
19
+ // ---- Type formation: ⊢ T type --------------------------------------
20
+ //
21
+ // The one place a syntactic type name becomes a semantic AscentType.
22
+ // Total over the name union, so an unexpected name is a compile error
23
+ // here rather than a silent fall-through elsewhere.
24
+ const typeFromName = (name) => {
25
+ switch (name) {
26
+ case 'Int': return INT_TYPE;
27
+ case 'Float': return FLOAT_TYPE;
28
+ case 'Bool': return BOOL_TYPE;
29
+ case 'String': return STRING_TYPE;
31
30
  }
32
31
  };
32
+ const typeFromExpr = (te) => te.kind === 'TypeName' ? typeFromName(te.name) : listOfType(typeFromExpr(te.elem));
33
33
  // ---- Method type signatures ------------------------------------------
34
34
  const requireArity = (expected, got, markers, span) => {
35
35
  if (got !== expected) {
36
- markers.push({ code: 'T0007', span });
36
+ markers.push({ code: 'T0007', span, data: { expected: String(expected), got: String(got) } });
37
37
  return false;
38
38
  }
39
39
  return true;
40
40
  };
41
+ // A value-type mismatch that carries the expected and actual type names.
42
+ const typeMismatch = (code, markers, span, expected, actual, related = []) => {
43
+ markers.push({
44
+ code, span, related,
45
+ data: { expected: typeToString(expected), actual: typeToString(actual) },
46
+ });
47
+ return null;
48
+ };
49
+ // An operator applied to operands it doesn't accept (T0009). `operands` is the
50
+ // joined list of type names — one for a unary '-', two for a binary operator.
51
+ const operandError = (markers, op, span, ...operands) => {
52
+ markers.push({ code: 'T0009', span, data: { op, operands: operands.map(typeToString).join(' and ') } });
53
+ return null;
54
+ };
41
55
  const intMethodType = (method, argTypes, markers, span) => {
42
56
  switch (method) {
43
57
  case 'toStr': return requireArity(0, argTypes.length, markers, span) ? STRING_TYPE : null;
44
58
  case 'toFloat': return requireArity(0, argTypes.length, markers, span) ? FLOAT_TYPE : null;
45
59
  case 'abs': return requireArity(0, argTypes.length, markers, span) ? INT_TYPE : null;
46
60
  default:
47
- markers.push({ code: 'T0006', span });
61
+ markers.push({ code: 'T0006', span, data: { method, type: 'Int' } });
48
62
  return null;
49
63
  }
50
64
  };
@@ -54,7 +68,7 @@ const floatMethodType = (method, argTypes, markers, span) => {
54
68
  case 'toInt': return requireArity(0, argTypes.length, markers, span) ? INT_TYPE : null;
55
69
  case 'abs': return requireArity(0, argTypes.length, markers, span) ? FLOAT_TYPE : null;
56
70
  default:
57
- markers.push({ code: 'T0006', span });
71
+ markers.push({ code: 'T0006', span, data: { method, type: 'Float' } });
58
72
  return null;
59
73
  }
60
74
  };
@@ -68,29 +82,23 @@ const listMethodType = (elemType, method, argTypes, markers, span) => {
68
82
  if (!requireArity(1, argTypes.length, markers, span))
69
83
  return null;
70
84
  const ct = leastCommonType(elemType, argTypes[0]);
71
- if (ct === null) {
72
- markers.push({ code: 'T0008', span });
73
- return null;
74
- }
85
+ if (ct === null)
86
+ return typeMismatch('T0008', markers, span, elemType, argTypes[0]);
75
87
  return listOfType(ct);
76
88
  }
77
89
  case 'concat': {
78
90
  if (!requireArity(1, argTypes.length, markers, span))
79
91
  return null;
80
92
  const arg = argTypes[0];
81
- if (arg.kind !== 'List') {
82
- markers.push({ code: 'T0008', span });
83
- return null;
84
- }
93
+ if (arg.kind !== 'List')
94
+ return typeMismatch('T0008', markers, span, listOfType(elemType), arg);
85
95
  const ct = leastCommonType(elemType, arg.elem);
86
- if (ct === null) {
87
- markers.push({ code: 'T0008', span });
88
- return null;
89
- }
96
+ if (ct === null)
97
+ return typeMismatch('T0008', markers, span, listOfType(elemType), arg);
90
98
  return listOfType(ct);
91
99
  }
92
100
  default:
93
- markers.push({ code: 'T0006', span });
101
+ markers.push({ code: 'T0006', span, data: { method, type: typeToString(listOfType(elemType)) } });
94
102
  return null;
95
103
  }
96
104
  };
@@ -122,7 +130,7 @@ const inferExpr = (expr, env, markers, contextType = null) => {
122
130
  case 'call': {
123
131
  // floor is the only built-in for now.
124
132
  if (expr.callee !== 'floor') {
125
- markers.push({ code: 'T0006', span: expr.span });
133
+ markers.push({ code: 'T0013', span: expr.span, data: { name: expr.callee } });
126
134
  return null;
127
135
  }
128
136
  if (!requireArity(1, expr.args.length, markers, expr.span))
@@ -130,19 +138,22 @@ const inferExpr = (expr, env, markers, contextType = null) => {
130
138
  const typedArg = inferExpr(expr.args[0], env, markers);
131
139
  if (typedArg === null)
132
140
  return null;
133
- if (typedArg.type.kind !== 'Float') {
134
- markers.push({ code: 'T0008', span: expr.span });
135
- return null;
136
- }
141
+ if (typedArg.type.kind !== 'Float')
142
+ return typeMismatch('T0008', markers, expr.span, FLOAT_TYPE, typedArg.type);
137
143
  return { kind: 'call', callee: expr.callee, args: [typedArg], type: FLOAT_TYPE, span: expr.span };
138
144
  }
139
145
  case 'unary': {
140
146
  const typedOperand = inferExpr(expr.operand, env, markers);
141
147
  if (typedOperand === null)
142
148
  return null;
149
+ if (expr.op === 'not') {
150
+ if (typedOperand.type.kind !== 'Bool') {
151
+ return operandError(markers, expr.op, expr.span, typedOperand.type);
152
+ }
153
+ return { kind: 'unary', op: expr.op, operand: typedOperand, type: BOOL_TYPE, span: expr.span };
154
+ }
143
155
  if (typedOperand.type.kind !== 'Int' && typedOperand.type.kind !== 'Float') {
144
- markers.push({ code: 'T0009', span: expr.span });
145
- return null;
156
+ return operandError(markers, expr.op, expr.span, typedOperand.type);
146
157
  }
147
158
  return { kind: 'unary', op: expr.op, operand: typedOperand, type: typedOperand.type, span: expr.span };
148
159
  }
@@ -159,16 +170,14 @@ const inferExpr = (expr, env, markers, contextType = null) => {
159
170
  case '-':
160
171
  case '*': {
161
172
  if ((lt.kind !== 'Int' && lt.kind !== 'Float') || (rt.kind !== 'Int' && rt.kind !== 'Float')) {
162
- markers.push({ code: 'T0009', span: expr.span });
163
- return null;
173
+ return operandError(markers, expr.op, expr.span, lt, rt);
164
174
  }
165
175
  type = (lt.kind === 'Float' || rt.kind === 'Float') ? FLOAT_TYPE : INT_TYPE;
166
176
  break;
167
177
  }
168
178
  case '/': {
169
179
  if ((lt.kind !== 'Int' && lt.kind !== 'Float') || (rt.kind !== 'Int' && rt.kind !== 'Float')) {
170
- markers.push({ code: 'T0009', span: expr.span });
171
- return null;
180
+ return operandError(markers, expr.op, expr.span, lt, rt);
172
181
  }
173
182
  type = FLOAT_TYPE;
174
183
  break;
@@ -176,8 +185,7 @@ const inferExpr = (expr, env, markers, contextType = null) => {
176
185
  case 'div':
177
186
  case 'mod': {
178
187
  if (lt.kind !== 'Int' || rt.kind !== 'Int') {
179
- markers.push({ code: 'T0009', span: expr.span });
180
- return null;
188
+ return operandError(markers, expr.op, expr.span, lt, rt);
181
189
  }
182
190
  type = INT_TYPE;
183
191
  break;
@@ -185,8 +193,7 @@ const inferExpr = (expr, env, markers, contextType = null) => {
185
193
  case '==':
186
194
  case '!=': {
187
195
  if (leastCommonType(lt, rt) === null) {
188
- markers.push({ code: 'T0009', span: expr.span });
189
- return null;
196
+ return operandError(markers, expr.op, expr.span, lt, rt);
190
197
  }
191
198
  type = BOOL_TYPE;
192
199
  break;
@@ -196,8 +203,15 @@ const inferExpr = (expr, env, markers, contextType = null) => {
196
203
  case '>':
197
204
  case '>=': {
198
205
  if ((lt.kind !== 'Int' && lt.kind !== 'Float') || (rt.kind !== 'Int' && rt.kind !== 'Float')) {
199
- markers.push({ code: 'T0009', span: expr.span });
200
- return null;
206
+ return operandError(markers, expr.op, expr.span, lt, rt);
207
+ }
208
+ type = BOOL_TYPE;
209
+ break;
210
+ }
211
+ case 'and':
212
+ case 'or': {
213
+ if (lt.kind !== 'Bool' || rt.kind !== 'Bool') {
214
+ return operandError(markers, expr.op, expr.span, lt, rt);
201
215
  }
202
216
  type = BOOL_TYPE;
203
217
  break;
@@ -230,7 +244,11 @@ const inferExpr = (expr, env, markers, contextType = null) => {
230
244
  for (const te of typedElements.slice(1)) {
231
245
  const ct = leastCommonType(elemType, te.type);
232
246
  if (ct === null) {
233
- markers.push({ code: 'T0002', span: expr.span });
247
+ markers.push({
248
+ code: 'T0002', span: expr.span,
249
+ data: { first: typeToString(elemType), other: typeToString(te.type) },
250
+ related: [{ key: 'element', span: te.span }],
251
+ });
234
252
  return null;
235
253
  }
236
254
  elemType = ct;
@@ -251,11 +269,11 @@ const inferExpr = (expr, env, markers, contextType = null) => {
251
269
  if (typedList === null || typedIndex === null)
252
270
  return null;
253
271
  if (typedList.type.kind !== 'List') {
254
- markers.push({ code: 'T0010', span: expr.span });
272
+ markers.push({ code: 'T0010', span: expr.list.span, data: { actual: typeToString(typedList.type) } });
255
273
  return null;
256
274
  }
257
275
  if (typedIndex.type.kind !== 'Int') {
258
- markers.push({ code: 'T0011', span: expr.span });
276
+ markers.push({ code: 'T0011', span: expr.index.span, data: { actual: typeToString(typedIndex.type) } });
259
277
  return null;
260
278
  }
261
279
  return { kind: 'index', list: typedList, index: typedIndex, type: typedList.type.elem, span: expr.span };
@@ -290,7 +308,7 @@ const inferExpr = (expr, env, markers, contextType = null) => {
290
308
  resultType = listMethodType(typedReceiver.type.elem, expr.method, argTypes, markers, expr.span);
291
309
  break;
292
310
  default:
293
- markers.push({ code: 'T0012', span: expr.span });
311
+ markers.push({ code: 'T0012', span: expr.span, data: { type: typeToString(typedReceiver.type) } });
294
312
  return null;
295
313
  }
296
314
  if (resultType === null)
@@ -328,7 +346,7 @@ const inferBlock = (block, env, markers) => {
328
346
  const inferIf = (expr, env, markers) => {
329
347
  const typedCond = inferExpr(expr.cond, env, markers);
330
348
  if (typedCond !== null && typedCond.type.kind !== 'Bool') {
331
- markers.push({ code: 'T0004', span: expr.cond.span });
349
+ markers.push({ code: 'T0004', span: expr.cond.span, data: { actual: typeToString(typedCond.type) } });
332
350
  }
333
351
  const typedThen = inferBlock(expr.then, env, markers);
334
352
  if (expr.else === null) {
@@ -343,7 +361,14 @@ const inferIf = (expr, env, markers) => {
343
361
  return null;
344
362
  const ct = leastCommonType(typedThen.type, typedElse.type);
345
363
  if (ct === null) {
346
- markers.push({ code: 'T0005', span: expr.span });
364
+ markers.push({
365
+ code: 'T0005', span: expr.span,
366
+ data: { then: typeToString(typedThen.type), else: typeToString(typedElse.type) },
367
+ related: [
368
+ { key: 'then', span: typedThen.span },
369
+ { key: 'else', span: typedElse.span },
370
+ ],
371
+ });
347
372
  return null;
348
373
  }
349
374
  return { kind: 'if', cond: typedCond, then: typedThen, else: typedElse, type: ct, span: expr.span };
@@ -352,12 +377,16 @@ const inferStmt = (stmt, env, markers) => {
352
377
  switch (stmt.kind) {
353
378
  case 'fix':
354
379
  case 'mut': {
355
- const annotation = stmt.typeAnnotation !== null ? resolveTypeExpr(stmt.typeAnnotation) : null;
380
+ const annotation = stmt.typeAnnotation !== null ? typeFromExpr(stmt.typeAnnotation) : null;
356
381
  const typedInit = inferExpr(stmt.init, env, markers, annotation);
357
382
  let slotType;
358
383
  if (annotation !== null) {
359
384
  if (typedInit !== null && !isAssignableTo(typedInit.type, annotation)) {
360
- markers.push({ code: 'T0001', span: stmt.span });
385
+ markers.push({
386
+ code: 'T0001', span: stmt.init.span,
387
+ data: { expected: typeToString(annotation), actual: typeToString(typedInit.type) },
388
+ related: [{ key: 'annotation', span: stmt.typeAnnotation.span }],
389
+ });
361
390
  }
362
391
  slotType = annotation;
363
392
  }
@@ -365,7 +394,7 @@ const inferStmt = (stmt, env, markers) => {
365
394
  slotType = typedInit?.type ?? null;
366
395
  }
367
396
  if (slotType !== null)
368
- env.set(stmt.name, slotType, stmt.kind === 'mut');
397
+ env.set(stmt.name, slotType, stmt.kind, stmt.span);
369
398
  if (typedInit === null)
370
399
  return null;
371
400
  return {
@@ -380,14 +409,31 @@ const inferStmt = (stmt, env, markers) => {
380
409
  case 'assign': {
381
410
  const binding = env.get(stmt.name);
382
411
  if (binding === null) {
383
- markers.push({ code: 'N0001', span: stmt.span });
412
+ // Assigning to a name that was never created — a different mistake
413
+ // (and lesson) than using an undefined name in an expression (N0001).
414
+ markers.push({ code: 'N0003', span: stmt.nameSpan });
415
+ }
416
+ else if (binding.origin === 'arg') {
417
+ // A program input is read-only for the whole run — its own lesson,
418
+ // distinct from a 'fix' slot (there is no 'mut' arg to switch to).
419
+ markers.push({ code: 'N0004', span: stmt.nameSpan });
384
420
  }
385
- else if (!binding.mutable) {
386
- markers.push({ code: 'N0002', span: stmt.span });
421
+ else if (binding.origin === 'fix') {
422
+ // Point back at the 'fix' declaration ("created with 'fix' here"),
423
+ // which always has a source location.
424
+ const related = binding.declSpan !== null
425
+ ? [{ key: 'declaration', span: binding.declSpan }]
426
+ : [];
427
+ markers.push({ code: 'N0002', span: stmt.nameSpan, related });
387
428
  }
388
429
  const typedValue = inferExpr(stmt.value, env, markers);
389
430
  if (binding !== null && typedValue !== null && !isAssignableTo(typedValue.type, binding.ty)) {
390
- markers.push({ code: 'T0001', span: stmt.span });
431
+ const related = binding.declSpan !== null ? [{ key: 'declaration', span: binding.declSpan }] : [];
432
+ markers.push({
433
+ code: 'T0001', span: stmt.value.span,
434
+ data: { expected: typeToString(binding.ty), actual: typeToString(typedValue.type) },
435
+ related,
436
+ });
391
437
  }
392
438
  if (typedValue === null)
393
439
  return null;
@@ -402,7 +448,7 @@ const inferStmt = (stmt, env, markers) => {
402
448
  case 'while': {
403
449
  const typedCond = inferExpr(stmt.cond, env, markers);
404
450
  if (typedCond !== null && typedCond.type.kind !== 'Bool') {
405
- markers.push({ code: 'T0004', span: stmt.cond.span });
451
+ markers.push({ code: 'T0004', span: stmt.cond.span, data: { actual: typeToString(typedCond.type) } });
406
452
  }
407
453
  const typedBody = inferBlock(stmt.body, env, markers);
408
454
  if (typedCond === null || typedBody === null)
@@ -421,11 +467,7 @@ export const typecheck = (program) => {
421
467
  const markers = [];
422
468
  const env = new TypeEnv();
423
469
  for (const arg of program.args) {
424
- const ty = arg.type === 'Int' ? INT_TYPE
425
- : arg.type === 'Float' ? FLOAT_TYPE
426
- : arg.type === 'Bool' ? BOOL_TYPE
427
- : STRING_TYPE;
428
- env.set(arg.name, ty, false);
470
+ env.set(arg.name, typeFromName(arg.type), 'arg');
429
471
  }
430
472
  const typedStmts = [];
431
473
  let failed = false;
@@ -1 +1 @@
1
- {"version":3,"file":"typechecker.js","sourceRoot":"","sources":["../../src/parser/typechecker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typechecker.js","sourceRoot":"","sources":["../../src/parser/typechecker.ts"],"names":[],"mappings":"AAGA,OAAO,EACO,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAC1F,eAAe,EAAE,cAAc,EAAE,YAAY,GAC9C,MAAM,mBAAmB,CAAC;AAiB3B,8DAA8D;AAC9D,MAAM,OAAO;IAEyB;IAD5B,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,YAAoC,SAAyB,IAAI;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAI,CAAC;IAE/D,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;IAEM,GAAG,CAAC,IAAY,EAAE,EAAc,EAAE,MAAyB,EAAE,WAAwB,IAAI;QAC9F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AACtE,oDAAoD;AAEpD,MAAM,YAAY,GAAG,CAAC,IAAgC,EAAc,EAAE;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC5B,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;QAChC,KAAK,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC;QAC9B,KAAK,QAAQ,CAAC,CAAC,OAAO,WAAW,CAAC;IACpC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,EAAY,EAAc,EAAE,CAChD,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAErF,yEAAyE;AAEzE,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,GAAW,EAAE,OAAiB,EAAE,IAAU,EAAW,EAAE;IAC7F,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,YAAY,GAAG,CACnB,IAAY,EAAE,OAAiB,EAAE,IAAU,EAAE,QAAoB,EAAE,MAAkB,EACrF,UAAyC,EAAE,EACrC,EAAE;IACR,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,IAAI,EAAE,OAAO;QACnB,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE;KACzE,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,YAAY,GAAG,CAAC,OAAiB,EAAE,EAAU,EAAE,IAAU,EAAE,GAAG,QAAsB,EAAQ,EAAE;IAClG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACxG,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAAsB,EAAE,OAAiB,EAAE,IAAU,EAAqB,EAAE;IACjH,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3F,KAAK,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACrF;YAAS,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;IAC7F,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,QAAsB,EAAE,OAAiB,EAAE,IAAU,EAAqB,EAAE;IACnH,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,KAAK,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,KAAK,KAAK,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF;YAAS,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;IAC/F,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,QAAoB,EAAE,MAAc,EAAE,QAAsB,EAAE,OAAiB,EAAE,IAAU,EACxE,EAAE;IACrB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACxF,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrG,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClE,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;YACnD,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;YACrF,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YACzB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAChG,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YACxF,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD;YAAS,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;IAC1H,CAAC;AACH,CAAC,CAAC;AAEF,wEAAwE;AACxE,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,2EAA2E;AAE3E,MAAM,SAAS,GAAG,CAChB,IAAU,EAAE,GAAY,EAAE,OAAiB,EAAE,cAAiC,IAAI,EAChE,EAAE;IACpB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvB,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC/C,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBACnD,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBACjD,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBACrD,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBACjD,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YACxF,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QACvC,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,sCAAsC;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YAC5H,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACpG,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3D,IAAI,YAAY,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvC,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBACtB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACtC,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtE,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACjG,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3E,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACzG,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC3D,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;YAE3B,IAAI,IAAgB,CAAC;YACrB,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;gBAChB,KAAK,GAAG,CAAC;gBAAC,KAAK,GAAG,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;wBAC7F,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC5E,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;wBAC7F,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,UAAU,CAAC;oBAClB,MAAM;gBACR,CAAC;gBACD,KAAK,KAAK,CAAC;gBAAC,KAAK,KAAK,CAAC,CAAC,CAAC;oBACvB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBAC3C,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,QAAQ,CAAC;oBAChB,MAAM;gBACR,CAAC;gBACD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBACrB,IAAI,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;wBACrC,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,SAAS,CAAC;oBACjB,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBAAC,KAAK,IAAI,CAAC;gBAAC,KAAK,GAAG,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBACzC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;wBAC7F,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,SAAS,CAAC;oBACjB,MAAM;gBACR,CAAC;gBACD,KAAK,KAAK,CAAC;gBACX,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC7C,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,GAAG,SAAS,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACpG,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACxD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5E,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,aAAa,GAAgB,EAAE,CAAC;YACtC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACvC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC;gBAAC,CAAC;qBAAM,CAAC;oBAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;YACtE,CAAC;YACD,IAAI,MAAM;gBAAE,OAAO,IAAI,CAAC;YAExB,IAAI,QAAQ,GAAe,aAAa,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;YAClD,KAAK,MAAM,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;wBAC9B,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBACrE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;qBAC7C,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,QAAQ,GAAG,EAAE,CAAC;YAChB,CAAC;YACD,sEAAsE;YACtE,uEAAuE;YACvE,4DAA4D;YAC5D,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxD,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,EAAE,KAAK,IAAI;oBAAE,QAAQ,GAAG,EAAE,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAChG,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,SAAS,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC3D,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtG,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxG,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3G,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAI,aAAa,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAExC,MAAM,SAAS,GAAgB,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACxC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC;gBAAC,CAAC;qBAAM,CAAC;oBAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;YAClE,CAAC;YACD,IAAI,MAAM;gBAAE,OAAO,IAAI,CAAC;YAExB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,UAA6B,CAAC;YAClC,QAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChC,KAAK,KAAK;oBAAE,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM;gBACzF,KAAK,OAAO;oBAAE,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM;gBAC7F,KAAK,MAAM;oBAAE,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM;gBACpH;oBAAS,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAC;YAC3H,CAAC;YACD,IAAI,UAAU,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO;gBACL,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;gBAChE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;aACnD,CAAC;QACJ,CAAC;QAED,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAExC,KAAK,IAAI;YACP,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,GAAY,EAAE,OAAiB,EAAqB,EAAE;IACtF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,SAAS,GAAe,SAAS,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,SAAS,GAAG,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,IAAQ,EAAE,GAAY,EAAE,OAAiB,EAAkB,EAAE;IAC5E,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxG,CAAC;IAED,MAAM,SAAS,GAAgC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;QACpE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC;QAClC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAExC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhF,MAAM,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;YAC9B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAChF,OAAO,EAAE;gBACP,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;gBACrC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;aACtC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,GAAY,EAAE,OAAiB,EAAyB,EAAE;IAC5F,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3F,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAEjE,IAAI,QAA2B,CAAC;YAChC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;oBACtE,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;wBACnC,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBAClF,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,cAAe,CAAC,IAAI,EAAE,CAAC;qBAClE,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC;YACrC,CAAC;YAED,IAAI,QAAQ,KAAK,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEpC,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,QAAQ,IAAI,SAAS;gBAC/B,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QACJ,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,mEAAmE;gBACnE,sEAAsE;gBACtE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACpC,mEAAmE;gBACnE,mEAAmE;gBACnE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACpC,mEAAmE;gBACnE,sCAAsC;gBACtC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI;oBACvC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAClD,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5F,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACpC,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACnF,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YACD,IAAI,UAAU,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,SAAS;gBAClC,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QACJ,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9E,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAe,EAAE;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;IAE1B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;aAAM,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAAC,CAAC;IACjF,CAAC;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACvF,CAAC,CAAC"}
@@ -23,6 +23,10 @@ export declare const DONE_TYPE: AscentType;
23
23
  export declare const listOfType: (elem: AscentType) => AscentType;
24
24
  export declare const typeToString: (t: AscentType) => string;
25
25
  export declare const typesEqual: (a: AscentType, b: AscentType) => boolean;
26
+ export type Coercion = 'intToFloat' | {
27
+ elem: Coercion;
28
+ } | null;
29
+ export declare const subtype: (sub: AscentType, sup: AscentType) => Coercion | false;
26
30
  export declare const leastCommonType: (a: AscentType, b: AscentType) => AscentType | null;
27
31
  export declare const isAssignableTo: (from: AscentType, to: AscentType) => boolean;
28
32
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAC;AACpD,eAAO,MAAM,UAAU,EAAE,UAA8B,CAAC;AACxD,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,WAAW,EAAE,UAA+B,CAAC;AAC1D,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,UAAU,GAAI,MAAM,UAAU,KAAG,UAAsC,CAAC;AAErF,eAAO,MAAM,YAAY,GAAI,GAAG,UAAU,KAAG,MAK5C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU,EAAE,GAAG,UAAU,KAAG,OAUzD,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,GAAG,UAAU,EAAE,GAAG,UAAU,KAAG,UAAU,GAAG,IAkB3E,CAAC;AAIF,eAAO,MAAM,cAAc,GAAI,MAAM,UAAU,EAAE,IAAI,UAAU,KAAG,OAGjE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,UAA4B,CAAC;AACpD,eAAO,MAAM,UAAU,EAAE,UAA8B,CAAC;AACxD,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,WAAW,EAAE,UAA+B,CAAC;AAC1D,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,SAAS,EAAE,UAA6B,CAAC;AACtD,eAAO,MAAM,UAAU,GAAI,MAAM,UAAU,KAAG,UAAsC,CAAC;AAErF,eAAO,MAAM,YAAY,GAAI,GAAG,UAAU,KAAG,MAK5C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU,EAAE,GAAG,UAAU,KAAG,OAUzD,CAAC;AAKF,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAAC;AAMhE,eAAO,MAAM,OAAO,GAAI,KAAK,UAAU,EAAE,KAAK,UAAU,KAAG,QAAQ,GAAG,KAerE,CAAC;AAOF,eAAO,MAAM,eAAe,GAAI,GAAG,UAAU,EAAE,GAAG,UAAU,KAAG,UAAU,GAAG,IAc3E,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,MAAM,UAAU,EAAE,IAAI,UAAU,KAAG,OAAsC,CAAC"}
@@ -20,18 +20,34 @@ export const typesEqual = (a, b) => {
20
20
  }
21
21
  return true;
22
22
  };
23
- // Int widens to Float everywhere — the only implicit numeric promotion.
24
- // List<Int> widens to List<Float> via the same rule applied recursively.
23
+ // S <: T — the one place widening is defined. Int widens to Float, and lists
24
+ // widen covariantly (sound only because Ascent lists are immutable: append /
25
+ // prepend / concat return new lists rather than mutating in place). Returns
26
+ // the coercion that witnesses the edge, or `false` when S is not a subtype of T.
27
+ export const subtype = (sub, sup) => {
28
+ if (typesEqual(sub, sup)) {
29
+ return null;
30
+ }
31
+ if (sub.kind === 'Int' && sup.kind === 'Float') {
32
+ return 'intToFloat';
33
+ }
34
+ if (sub.kind === 'List' && sup.kind === 'List') {
35
+ const c = subtype(sub.elem, sup.elem);
36
+ return c === false ? false : { elem: c };
37
+ }
38
+ return false;
39
+ };
40
+ // The least common supertype — derived from subtyping. When one side
41
+ // subtypes the other, that supertype is the join. Otherwise, for two lists
42
+ // whose elements aren't directly related by subtyping, recurse on the
43
+ // elements (structural join; doesn't add any widening knowledge of its own).
25
44
  // Returns null when the two types have no common supertype.
26
45
  export const leastCommonType = (a, b) => {
27
- if (typesEqual(a, b)) {
28
- return a;
29
- }
30
- if (a.kind === 'Int' && b.kind === 'Float') {
31
- return FLOAT_TYPE;
46
+ if (subtype(a, b) !== false) {
47
+ return b;
32
48
  }
33
- if (a.kind === 'Float' && b.kind === 'Int') {
34
- return FLOAT_TYPE;
49
+ if (subtype(b, a) !== false) {
50
+ return a;
35
51
  }
36
52
  if (a.kind === 'List' && b.kind === 'List') {
37
53
  const elem = leastCommonType(a.elem, b.elem);
@@ -39,10 +55,6 @@ export const leastCommonType = (a, b) => {
39
55
  }
40
56
  return null;
41
57
  };
42
- // `from` is assignable to `to` when their LCT is exactly `to`
43
- // (i.e., `from` fits inside `to`, possibly by widening).
44
- export const isAssignableTo = (from, to) => {
45
- const lct = leastCommonType(from, to);
46
- return lct !== null && typesEqual(lct, to);
47
- };
58
+ // `from` is assignable to `to` exactly when it's a subtype of `to`.
59
+ export const isAssignableTo = (from, to) => subtype(from, to) !== false;
48
60
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,QAAQ,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACpD,MAAM,CAAC,MAAM,UAAU,GAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACxD,MAAM,CAAC,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1D,MAAM,CAAC,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,SAAS,GAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAa,EAAU,EAAE;IACpD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,QAAQ,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAa,EAAE,CAAa,EAAW,EAAE;IAClE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,wEAAwE;AACxE,yEAAyE;AACzE,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAa,EAAE,CAAa,EAAqB,EAAE;IACjF,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,8DAA8D;AAC9D,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAE,EAAc,EAAW,EAAE;IAC1E,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ascent-lang/dev",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "The Ascent teaching language: CLI and interpreter for running and embedding .asc programs.",
5
5
  "type": "module",
6
6
  "main": "dist/lib.js",