pts 0.10.12 → 0.11.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 (50) hide show
  1. package/dist/{pts.d.ts → index.d.ts} +1245 -1207
  2. package/dist/index.js +6825 -6660
  3. package/dist/index.mjs +6785 -0
  4. package/package.json +12 -33
  5. package/tsup.browser.js +21 -0
  6. package/tsup.min.js +23 -0
  7. package/tsup.module.js +15 -0
  8. package/dist/es2015/Canvas.js +0 -684
  9. package/dist/es2015/Canvas.js.map +0 -1
  10. package/dist/es2015/Color.js +0 -337
  11. package/dist/es2015/Color.js.map +0 -1
  12. package/dist/es2015/Create.js +0 -275
  13. package/dist/es2015/Create.js.map +0 -1
  14. package/dist/es2015/Dom.js +0 -448
  15. package/dist/es2015/Dom.js.map +0 -1
  16. package/dist/es2015/Form.js +0 -80
  17. package/dist/es2015/Form.js.map +0 -1
  18. package/dist/es2015/Image.js +0 -220
  19. package/dist/es2015/Image.js.map +0 -1
  20. package/dist/es2015/LinearAlgebra.js +0 -286
  21. package/dist/es2015/LinearAlgebra.js.map +0 -1
  22. package/dist/es2015/Num.js +0 -477
  23. package/dist/es2015/Num.js.map +0 -1
  24. package/dist/es2015/Op.js +0 -978
  25. package/dist/es2015/Op.js.map +0 -1
  26. package/dist/es2015/Physics.js +0 -383
  27. package/dist/es2015/Physics.js.map +0 -1
  28. package/dist/es2015/Play.js +0 -339
  29. package/dist/es2015/Play.js.map +0 -1
  30. package/dist/es2015/Pt.js +0 -463
  31. package/dist/es2015/Pt.js.map +0 -1
  32. package/dist/es2015/Space.js +0 -331
  33. package/dist/es2015/Space.js.map +0 -1
  34. package/dist/es2015/Svg.js +0 -367
  35. package/dist/es2015/Svg.js.map +0 -1
  36. package/dist/es2015/Types.js +0 -3
  37. package/dist/es2015/Types.js.map +0 -1
  38. package/dist/es2015/Typography.js +0 -40
  39. package/dist/es2015/Typography.js.map +0 -1
  40. package/dist/es2015/UI.js +0 -273
  41. package/dist/es2015/UI.js.map +0 -1
  42. package/dist/es2015/Util.js +0 -200
  43. package/dist/es2015/Util.js.map +0 -1
  44. package/dist/es2015/_lib.js +0 -45
  45. package/dist/es2015/_lib.js.map +0 -1
  46. package/dist/es2015/_module.js +0 -18
  47. package/dist/es2015/_module.js.map +0 -1
  48. package/dist/es2015/uheprng.js +0 -69
  49. package/dist/es2015/uheprng.js.map +0 -1
  50. package/dist/index.js.map +0 -1
@@ -1,477 +0,0 @@
1
- /*! Pts.js is licensed under Apache License 2.0. Copyright © 2017-current William Ngan and contributors. (https://github.com/williamngan/pts) */
2
- import { Const, Util } from "./Util";
3
- import { Curve } from "./Op";
4
- import { Pt, Group } from "./Pt";
5
- import { Vec, Mat } from "./LinearAlgebra";
6
- import generator from './uheprng';
7
- export class Num {
8
- static equals(a, b, threshold = 0.00001) {
9
- return Math.abs(a - b) < threshold;
10
- }
11
- static lerp(a, b, t) {
12
- return (1 - t) * a + t * b;
13
- }
14
- static clamp(val, min, max) {
15
- return Math.max(min, Math.min(max, val));
16
- }
17
- static boundValue(val, min, max) {
18
- let len = Math.abs(max - min);
19
- let a = val % len;
20
- if (a > max)
21
- a -= len;
22
- else if (a < min)
23
- a += len;
24
- return a;
25
- }
26
- static within(p, a, b) {
27
- return p >= Math.min(a, b) && p <= Math.max(a, b);
28
- }
29
- static randomRange(a, b = 0) {
30
- let r = (a > b) ? (a - b) : (b - a);
31
- return a + Num.random() * r;
32
- }
33
- static randomPt(a, b) {
34
- let p = new Pt(a.length);
35
- let range = b ? Vec.subtract(b, a) : a;
36
- let start = b ? a : new Pt(a.length).fill(0);
37
- for (let i = 0, len = p.length; i < len; i++) {
38
- p[i] = Num.random() * range[i] + start[i];
39
- }
40
- return p;
41
- }
42
- static normalizeValue(n, a, b) {
43
- let min = Math.min(a, b);
44
- let max = Math.max(a, b);
45
- return (n - min) / (max - min);
46
- }
47
- static sum(pts) {
48
- let _pts = Util.iterToArray(pts);
49
- let c = new Pt(_pts[0]);
50
- for (let i = 1, len = _pts.length; i < len; i++) {
51
- Vec.add(c, _pts[i]);
52
- }
53
- return c;
54
- }
55
- static average(pts) {
56
- let _pts = Util.iterToArray(pts);
57
- return Num.sum(_pts).divide(_pts.length);
58
- }
59
- static cycle(t, method = Shaping.sineInOut) {
60
- return method(t > 0.5 ? 2 - t * 2 : t * 2);
61
- }
62
- static mapToRange(n, currA, currB, targetA, targetB) {
63
- if (currA == currB)
64
- throw new Error("[currMin, currMax] must define a range that is not zero");
65
- let min = Math.min(targetA, targetB);
66
- let max = Math.max(targetA, targetB);
67
- return Num.normalizeValue(n, currA, currB) * (max - min) + min;
68
- }
69
- static seed(seed) {
70
- this.generator = generator(seed);
71
- }
72
- static random() {
73
- return this.generator
74
- ? this.generator.random()
75
- : Math.random();
76
- }
77
- }
78
- export class Geom {
79
- static boundAngle(angle) {
80
- return Num.boundValue(angle, 0, 360);
81
- }
82
- static boundRadian(radian) {
83
- return Num.boundValue(radian, 0, Const.two_pi);
84
- }
85
- static toRadian(angle) {
86
- return angle * Const.deg_to_rad;
87
- }
88
- static toDegree(radian) {
89
- return radian * Const.rad_to_deg;
90
- }
91
- static boundingBox(pts) {
92
- let minPt, maxPt;
93
- for (let p of pts) {
94
- if (minPt == undefined) {
95
- minPt = p.clone();
96
- maxPt = p.clone();
97
- }
98
- else {
99
- minPt = minPt.$min(p);
100
- maxPt = maxPt.$max(p);
101
- }
102
- }
103
- return new Group(minPt, maxPt);
104
- }
105
- static centroid(pts) {
106
- return Num.average(pts);
107
- }
108
- static anchor(pts, ptOrIndex = 0, direction = "to") {
109
- let method = (direction == "to") ? "subtract" : "add";
110
- let i = 0;
111
- for (let p of pts) {
112
- if (typeof ptOrIndex == "number") {
113
- if (ptOrIndex !== i)
114
- p[method](pts[ptOrIndex]);
115
- }
116
- else {
117
- p[method](ptOrIndex);
118
- }
119
- i++;
120
- }
121
- }
122
- static interpolate(a, b, t = 0.5) {
123
- let len = Math.min(a.length, b.length);
124
- let d = Pt.make(len);
125
- for (let i = 0; i < len; i++) {
126
- d[i] = a[i] * (1 - t) + b[i] * t;
127
- }
128
- return d;
129
- }
130
- static perpendicular(pt, axis = Const.xy) {
131
- let y = axis[1];
132
- let x = axis[0];
133
- let p = new Pt(pt);
134
- let pa = new Pt(p);
135
- pa[x] = -p[y];
136
- pa[y] = p[x];
137
- let pb = new Pt(p);
138
- pb[x] = p[y];
139
- pb[y] = -p[x];
140
- return new Group(pa, pb);
141
- }
142
- static isPerpendicular(p1, p2) {
143
- return new Pt(p1).dot(p2) === 0;
144
- }
145
- static withinBound(pt, boundPt1, boundPt2) {
146
- for (let i = 0, len = Math.min(pt.length, boundPt1.length, boundPt2.length); i < len; i++) {
147
- if (!Num.within(pt[i], boundPt1[i], boundPt2[i]))
148
- return false;
149
- }
150
- return true;
151
- }
152
- static sortEdges(pts) {
153
- let _pts = Util.iterToArray(pts);
154
- let bounds = Geom.boundingBox(_pts);
155
- let center = bounds[1].add(bounds[0]).divide(2);
156
- let fn = (a, b) => {
157
- if (a.length < 2 || b.length < 2)
158
- throw new Error("Pt dimension cannot be less than 2");
159
- let da = a.$subtract(center);
160
- let db = b.$subtract(center);
161
- if (da[0] >= 0 && db[0] < 0)
162
- return 1;
163
- if (da[0] < 0 && db[0] >= 0)
164
- return -1;
165
- if (da[0] == 0 && db[0] == 0) {
166
- if (da[1] >= 0 || db[1] >= 0)
167
- return (da[1] > db[1]) ? 1 : -1;
168
- return (db[1] > da[1]) ? 1 : -1;
169
- }
170
- let det = da.$cross2D(db);
171
- if (det < 0)
172
- return 1;
173
- if (det > 0)
174
- return -1;
175
- return (da[0] * da[0] + da[1] * da[1] > db[0] * db[0] + db[1] * db[1]) ? 1 : -1;
176
- };
177
- return _pts.sort(fn);
178
- }
179
- static scale(ps, scale, anchor) {
180
- let pts = Util.iterToArray((ps[0] !== undefined && typeof ps[0] == 'number') ? [ps] : ps);
181
- let scs = (typeof scale == "number") ? Pt.make(pts[0].length, scale) : scale;
182
- if (!anchor)
183
- anchor = Pt.make(pts[0].length, 0);
184
- for (let i = 0, len = pts.length; i < len; i++) {
185
- let p = pts[i];
186
- for (let k = 0, lenP = p.length; k < lenP; k++) {
187
- p[k] = (anchor && anchor[k]) ? anchor[k] + (p[k] - anchor[k]) * scs[k] : p[k] * scs[k];
188
- }
189
- }
190
- return Geom;
191
- }
192
- static rotate2D(ps, angle, anchor, axis) {
193
- let pts = Util.iterToArray((ps[0] !== undefined && typeof ps[0] == 'number') ? [ps] : ps);
194
- let fn = (anchor) ? Mat.rotateAt2DMatrix : Mat.rotate2DMatrix;
195
- if (!anchor)
196
- anchor = Pt.make(pts[0].length, 0);
197
- let cos = Math.cos(angle);
198
- let sin = Math.sin(angle);
199
- for (let i = 0, len = pts.length; i < len; i++) {
200
- let p = (axis) ? pts[i].$take(axis) : pts[i];
201
- p.to(Mat.transform2D(p, fn(cos, sin, anchor)));
202
- if (axis) {
203
- for (let k = 0; k < axis.length; k++) {
204
- pts[i][axis[k]] = p[k];
205
- }
206
- }
207
- }
208
- return Geom;
209
- }
210
- static shear2D(ps, scale, anchor, axis) {
211
- let pts = Util.iterToArray((ps[0] !== undefined && typeof ps[0] == 'number') ? [ps] : ps);
212
- let s = (typeof scale == "number") ? [scale, scale] : scale;
213
- if (!anchor)
214
- anchor = Pt.make(pts[0].length, 0);
215
- let fn = (anchor) ? Mat.shearAt2DMatrix : Mat.shear2DMatrix;
216
- let tanx = Math.tan(s[0]);
217
- let tany = Math.tan(s[1]);
218
- for (let i = 0, len = pts.length; i < len; i++) {
219
- let p = (axis) ? pts[i].$take(axis) : pts[i];
220
- p.to(Mat.transform2D(p, fn(tanx, tany, anchor)));
221
- if (axis) {
222
- for (let k = 0; k < axis.length; k++) {
223
- pts[i][axis[k]] = p[k];
224
- }
225
- }
226
- }
227
- return Geom;
228
- }
229
- static reflect2D(ps, line, axis) {
230
- let pts = Util.iterToArray((ps[0] !== undefined && typeof ps[0] == 'number') ? [ps] : ps);
231
- let _line = Util.iterToArray(line);
232
- let mat = Mat.reflectAt2DMatrix(_line[0], _line[1]);
233
- for (let i = 0, len = pts.length; i < len; i++) {
234
- let p = (axis) ? pts[i].$take(axis) : pts[i];
235
- p.to(Mat.transform2D(p, mat));
236
- if (axis) {
237
- for (let k = 0; k < axis.length; k++) {
238
- pts[i][axis[k]] = p[k];
239
- }
240
- }
241
- }
242
- return Geom;
243
- }
244
- static cosTable() {
245
- let cos = new Float64Array(360);
246
- for (let i = 0; i < 360; i++)
247
- cos[i] = Math.cos(i * Math.PI / 180);
248
- let find = (rad) => cos[Math.floor(Geom.boundAngle(Geom.toDegree(rad)))];
249
- return { table: cos, cos: find };
250
- }
251
- static sinTable() {
252
- let sin = new Float64Array(360);
253
- for (let i = 0; i < 360; i++)
254
- sin[i] = Math.sin(i * Math.PI / 180);
255
- let find = (rad) => sin[Math.floor(Geom.boundAngle(Geom.toDegree(rad)))];
256
- return { table: sin, sin: find };
257
- }
258
- }
259
- export class Shaping {
260
- static linear(t, c = 1) {
261
- return c * t;
262
- }
263
- static quadraticIn(t, c = 1) {
264
- return c * t * t;
265
- }
266
- static quadraticOut(t, c = 1) {
267
- return -c * t * (t - 2);
268
- }
269
- static quadraticInOut(t, c = 1) {
270
- let dt = t * 2;
271
- return (t < 0.5) ? c / 2 * t * t * 4 : -c / 2 * ((dt - 1) * (dt - 3) - 1);
272
- }
273
- static cubicIn(t, c = 1) {
274
- return c * t * t * t;
275
- }
276
- static cubicOut(t, c = 1) {
277
- let dt = t - 1;
278
- return c * (dt * dt * dt + 1);
279
- }
280
- static cubicInOut(t, c = 1) {
281
- let dt = t * 2;
282
- return (t < 0.5) ? c / 2 * dt * dt * dt : c / 2 * ((dt - 2) * (dt - 2) * (dt - 2) + 2);
283
- }
284
- static exponentialIn(t, c = 1, p = 0.25) {
285
- return c * Math.pow(t, 1 / p);
286
- }
287
- static exponentialOut(t, c = 1, p = 0.25) {
288
- return c * Math.pow(t, p);
289
- }
290
- static sineIn(t, c = 1) {
291
- return -c * Math.cos(t * Const.half_pi) + c;
292
- }
293
- static sineOut(t, c = 1) {
294
- return c * Math.sin(t * Const.half_pi);
295
- }
296
- static sineInOut(t, c = 1) {
297
- return -c / 2 * (Math.cos(Math.PI * t) - 1);
298
- }
299
- static cosineApprox(t, c = 1) {
300
- let t2 = t * t;
301
- let t4 = t2 * t2;
302
- let t6 = t4 * t2;
303
- return c * (4 * t6 / 9 - 17 * t4 / 9 + 22 * t2 / 9);
304
- }
305
- static circularIn(t, c = 1) {
306
- return -c * (Math.sqrt(1 - t * t) - 1);
307
- }
308
- static circularOut(t, c = 1) {
309
- let dt = t - 1;
310
- return c * Math.sqrt(1 - dt * dt);
311
- }
312
- static circularInOut(t, c = 1) {
313
- let dt = t * 2;
314
- return (t < 0.5) ? -c / 2 * (Math.sqrt(1 - dt * dt) - 1) : c / 2 * (Math.sqrt(1 - (dt - 2) * (dt - 2)) + 1);
315
- }
316
- static elasticIn(t, c = 1, p = 0.7) {
317
- let dt = t - 1;
318
- let s = (p / Const.two_pi) * 1.5707963267948966;
319
- return c * (-Math.pow(2, 10 * dt) * Math.sin((dt - s) * Const.two_pi / p));
320
- }
321
- static elasticOut(t, c = 1, p = 0.7) {
322
- let s = (p / Const.two_pi) * 1.5707963267948966;
323
- return c * (Math.pow(2, -10 * t) * Math.sin((t - s) * Const.two_pi / p)) + c;
324
- }
325
- static elasticInOut(t, c = 1, p = 0.6) {
326
- let dt = t * 2;
327
- let s = (p / Const.two_pi) * 1.5707963267948966;
328
- if (t < 0.5) {
329
- dt -= 1;
330
- return c * (-0.5 * (Math.pow(2, 10 * dt) * Math.sin((dt - s) * Const.two_pi / p)));
331
- }
332
- else {
333
- dt -= 1;
334
- return c * (0.5 * (Math.pow(2, -10 * dt) * Math.sin((dt - s) * Const.two_pi / p))) + c;
335
- }
336
- }
337
- static bounceIn(t, c = 1) {
338
- return c - Shaping.bounceOut((1 - t), c);
339
- }
340
- static bounceOut(t, c = 1) {
341
- if (t < (1 / 2.75)) {
342
- return c * (7.5625 * t * t);
343
- }
344
- else if (t < (2 / 2.75)) {
345
- t -= 1.5 / 2.75;
346
- return c * (7.5625 * t * t + 0.75);
347
- }
348
- else if (t < (2.5 / 2.75)) {
349
- t -= 2.25 / 2.75;
350
- return c * (7.5625 * t * t + 0.9375);
351
- }
352
- else {
353
- t -= 2.625 / 2.75;
354
- return c * (7.5625 * t * t + 0.984375);
355
- }
356
- }
357
- static bounceInOut(t, c = 1) {
358
- return (t < 0.5) ? Shaping.bounceIn(t * 2, c) / 2 : Shaping.bounceOut(t * 2 - 1, c) / 2 + c / 2;
359
- }
360
- static sigmoid(t, c = 1, p = 10) {
361
- let d = p * (t - 0.5);
362
- return c / (1 + Math.exp(-d));
363
- }
364
- static logSigmoid(t, c = 1, p = 0.7) {
365
- p = Math.max(Const.epsilon, Math.min(1 - Const.epsilon, p));
366
- p = 1 / (1 - p);
367
- let A = 1 / (1 + Math.exp(((t - 0.5) * p * -2)));
368
- let B = 1 / (1 + Math.exp(p));
369
- let C = 1 / (1 + Math.exp(-p));
370
- return c * (A - B) / (C - B);
371
- }
372
- static seat(t, c = 1, p = 0.5) {
373
- if ((t < 0.5)) {
374
- return c * (Math.pow(2 * t, 1 - p)) / 2;
375
- }
376
- else {
377
- return c * (1 - (Math.pow(2 * (1 - t), 1 - p)) / 2);
378
- }
379
- }
380
- static quadraticBezier(t, c = 1, p = [0.05, 0.95]) {
381
- let a = (typeof p != "number") ? p[0] : p;
382
- let b = (typeof p != "number") ? p[1] : 0.5;
383
- let om2a = 1 - 2 * a;
384
- if (om2a === 0) {
385
- om2a = Const.epsilon;
386
- }
387
- let d = (Math.sqrt(a * a + om2a * t) - a) / om2a;
388
- return c * ((1 - 2 * b) * (d * d) + (2 * b) * d);
389
- }
390
- static cubicBezier(t, c = 1, p1 = [0.1, 0.7], p2 = [0.9, 0.2]) {
391
- let curve = new Group(new Pt(0, 0), new Pt(p1), new Pt(p2), new Pt(1, 1));
392
- return c * Curve.bezierStep(new Pt(t * t * t, t * t, t, 1), Curve.controlPoints(curve)).y;
393
- }
394
- static quadraticTarget(t, c = 1, p1 = [0.2, 0.35]) {
395
- let a = Math.min(1 - Const.epsilon, Math.max(Const.epsilon, p1[0]));
396
- let b = Math.min(1, Math.max(0, p1[1]));
397
- let A = (1 - b) / (1 - a) - (b / a);
398
- let B = (A * (a * a) - b) / a;
399
- let y = A * (t * t) - B * t;
400
- return c * Math.min(1, Math.max(0, y));
401
- }
402
- static cliff(t, c = 1, p = 0.5) {
403
- return (t > p) ? c : 0;
404
- }
405
- static step(fn, steps, t, c, ...args) {
406
- let s = 1 / steps;
407
- let tt = Math.floor(t / s) * s;
408
- return fn(tt, c, ...args);
409
- }
410
- }
411
- export class Range {
412
- constructor(g) {
413
- this._dims = 0;
414
- this._source = Group.fromPtArray(g);
415
- this.calc();
416
- }
417
- get max() { return this._max.clone(); }
418
- get min() { return this._min.clone(); }
419
- get magnitude() { return this._mag.clone(); }
420
- calc() {
421
- if (!this._source)
422
- return;
423
- let dims = this._source[0].length;
424
- this._dims = dims;
425
- let max = new Pt(dims);
426
- let min = new Pt(dims);
427
- let mag = new Pt(dims);
428
- for (let i = 0; i < dims; i++) {
429
- max[i] = Const.min;
430
- min[i] = Const.max;
431
- mag[i] = 0;
432
- let s = this._source.zipSlice(i);
433
- for (let k = 0, len = s.length; k < len; k++) {
434
- max[i] = Math.max(max[i], s[k]);
435
- min[i] = Math.min(min[i], s[k]);
436
- mag[i] = max[i] - min[i];
437
- }
438
- }
439
- this._max = max;
440
- this._min = min;
441
- this._mag = mag;
442
- return this;
443
- }
444
- mapTo(min, max, exclude) {
445
- let target = new Group();
446
- for (let i = 0, len = this._source.length; i < len; i++) {
447
- let g = this._source[i];
448
- let n = new Pt(this._dims);
449
- for (let k = 0; k < this._dims; k++) {
450
- n[k] = (exclude && exclude[k]) ? g[k] : Num.mapToRange(g[k], this._min[k], this._max[k], min, max);
451
- }
452
- target.push(n);
453
- }
454
- return target;
455
- }
456
- append(pts, update = true) {
457
- let _pts = Util.iterToArray(pts);
458
- if (_pts[0].length !== this._dims)
459
- throw new Error(`Dimensions don't match. ${this._dims} dimensions in Range and ${_pts[0].length} provided in parameter. `);
460
- this._source = this._source.concat(_pts);
461
- if (update)
462
- this.calc();
463
- return this;
464
- }
465
- ticks(count) {
466
- let g = new Group();
467
- for (let i = 0; i <= count; i++) {
468
- let p = new Pt(this._dims);
469
- for (let k = 0, len = this._max.length; k < len; k++) {
470
- p[k] = Num.lerp(this._min[k], this._max[k], i / count);
471
- }
472
- g.push(p);
473
- }
474
- return g;
475
- }
476
- }
477
- //# sourceMappingURL=Num.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Num.js","sourceRoot":"","sources":["../../src/Num.ts"],"names":[],"mappings":"AAAA,gJAAgJ;AAEhJ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,SAAS,MAAM,WAAW,CAAC;AAKlC,MAAM,OAAO,GAAG;IASd,MAAM,CAAC,MAAM,CAAE,CAAQ,EAAE,CAAQ,EAAE,SAAS,GAAC,OAAO;QAClD,OAAO,IAAI,CAAC,GAAG,CAAE,CAAC,GAAC,CAAC,CAAE,GAAG,SAAS,CAAC;IACrC,CAAC;IASD,MAAM,CAAC,IAAI,CAAE,CAAQ,EAAE,CAAQ,EAAE,CAAQ;QACvC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IASD,MAAM,CAAC,KAAK,CAAE,GAAU,EAAE,GAAU,EAAE,GAAU;QAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAUD,MAAM,CAAC,UAAU,CAAE,GAAU,EAAE,GAAU,EAAE,GAAU;QACnD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAElB,IAAI,CAAC,GAAG,GAAG;YAAE,CAAC,IAAI,GAAG,CAAC;aACjB,IAAI,CAAC,GAAG,GAAG;YAAE,CAAC,IAAI,GAAG,CAAC;QAE3B,OAAO,CAAC,CAAC;IACX,CAAC;IASD,MAAM,CAAC,MAAM,CAAE,CAAQ,EAAE,CAAQ,EAAE,CAAQ;QACzC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAQD,MAAM,CAAC,WAAW,CAAE,CAAQ,EAAE,IAAW,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAQD,MAAM,CAAC,QAAQ,CAAE,CAAQ,EAAE,CAAS;QAClC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAE,CAAC,CAAC,MAAM,CAAE,CAAC;QAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,GAAG,GAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACtC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3C;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IASD,MAAM,CAAC,cAAc,CAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ;QAChD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACjC,CAAC;IAQD,MAAM,CAAC,GAAG,CAAE,GAAmB;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAE,GAAG,CAAE,CAAC;QACnC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAE,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/C,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACrB;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAQD,MAAM,CAAC,OAAO,CAAE,GAAmB;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAE,GAAG,CAAE,CAAC;QACnC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IASD,MAAM,CAAC,KAAK,CAAE,CAAQ,EAAE,SAA4B,OAAO,CAAC,SAAS;QACnE,OAAO,MAAM,CAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAE,CAAC;IACzC,CAAC;IAYD,MAAM,CAAC,UAAU,CAAC,CAAQ,EAAE,KAAY,EAAE,KAAY,EAAE,OAAc,EAAE,OAAc;QACpF,IAAI,KAAK,IAAI,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC/F,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACjE,CAAC;IAMD,MAAM,CAAC,IAAI,CAAC,IAAY;QACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAOD,MAAM,CAAC,MAAM;QACT,OAAO,IAAI,CAAC,SAAS;YACjB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC;CACF;AAOD,MAAM,OAAO,IAAI;IAMf,MAAM,CAAC,UAAU,CAAE,KAAY;QAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAOD,MAAM,CAAC,WAAW,CAAE,MAAa;QAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAE,KAAY;QAC3B,OAAO,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;IAClC,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAE,MAAa;QAC5B,OAAO,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;IACnC,CAAC;IAQD,MAAM,CAAC,WAAW,CAAE,GAAc;QAChC,IAAI,KAAS,EAAE,KAAS,CAAC;QACzB,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;YACjB,IAAI,KAAK,IAAI,SAAS,EAAE;gBACtB,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClB,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;aACnB;iBAAM;gBACL,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;SACF;QACD,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAQD,MAAM,CAAC,QAAQ,CAAE,GAAkB;QACjC,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IASD,MAAM,CAAC,MAAM,CAAE,GAAkB,EAAE,YAAwB,CAAC,EAAE,YAAwB,IAAI;QACxF,IAAI,MAAM,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;YACjB,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;gBAChC,IAAI,SAAS,KAAK,CAAC;oBAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;aAChD;iBAAM;gBACL,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;aACtB;YACD,CAAC,EAAE,CAAC;SACL;IACH,CAAC;IAUD,MAAM,CAAC,WAAW,CAAE,CAAQ,EAAE,CAAQ,EAAE,IAAS,GAAG;QAClD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAClC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAQD,MAAM,CAAC,aAAa,CAAE,EAAS,EAAE,OAAmB,KAAK,CAAC,EAAE;QAC1D,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEhB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEd,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAMD,MAAM,CAAC,eAAe,CAAE,EAAS,EAAE,EAAS;QAC1C,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IASD,MAAM,CAAC,WAAW,CAAE,EAAS,EAAE,QAAe,EAAE,QAAe;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACzF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;SAChE;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,MAAM,CAAC,SAAS,CAAE,GAAc;QAE9B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAE,GAAG,CAAE,CAAC;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAE,IAAI,CAAE,CAAC;QACtC,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,EAAE,GAAG,CAAE,CAAI,EAAE,CAAI,EAAU,EAAE;YAC/B,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAE,oCAAoC,CAAC,CAAC;YAEzF,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAE,MAAM,CAAE,CAAC;YAC/B,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAE,MAAM,CAAE,CAAC;YAE/B,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC1B,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACxB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACnC;YAGD,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAE,EAAE,CAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACtB,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YAIvB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAE,EAAE,CAAE,CAAC;IACzB,CAAC;IASD,MAAM,CAAC,KAAK,CAAE,EAAgB,EAAE,KAAmB,EAAE,MAAc;QACjE,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC5F,IAAI,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7E,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC9C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aACxF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAUD,MAAM,CAAC,QAAQ,CAAE,EAAgB,EAAE,KAAY,EAAE,MAAc,EAAE,IAAmB;QAClF,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC5F,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;QAC9D,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxB;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAUD,MAAM,CAAC,OAAO,CAAE,EAAgB,EAAE,KAAmB,EAAE,MAAc,EAAE,IAAmB;QACxF,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC5F,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,MAAM;YAAE,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;QAC5D,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxB;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IASD,MAAM,CAAC,SAAS,CAAE,EAAgB,EAAE,IAAmB,EAAE,IAAmB;QAC1E,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC5F,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAE,IAAI,CAAE,CAAC;QACrC,IAAI,GAAG,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,EAAE;gBACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxB;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,MAAM,CAAC,QAAQ;QACb,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACnE,IAAI,IAAI,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAMD,MAAM,CAAC,QAAQ;QACb,IAAI,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACnE,IAAI,IAAI,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;CACF;AAOD,MAAM,OAAO,OAAO;IAOlB,MAAM,CAAC,MAAM,CAAC,CAAQ,EAAE,IAAW,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,CAAQ,EAAE,IAAW,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAOD,MAAM,CAAC,YAAY,CAAC,CAAQ,EAAE,IAAW,CAAC;QACxC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC;IAOD,MAAM,CAAC,cAAc,CAAC,CAAQ,EAAE,IAAW,CAAC;QAC1C,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC;IAOD,MAAM,CAAC,OAAO,CAAC,CAAQ,EAAE,IAAW,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAC,CAAQ,EAAE,IAAW,CAAC;QACpC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,CAAQ,EAAE,IAAW,CAAC;QACtC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,CAAC;IAQD,MAAM,CAAC,aAAa,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,IAAI;QAC1D,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC;IAQD,MAAM,CAAC,cAAc,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,IAAI;QAC3D,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IAOD,MAAM,CAAC,MAAM,CAAC,CAAQ,EAAE,IAAW,CAAC;QAClC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAOD,MAAM,CAAC,OAAO,CAAC,CAAQ,EAAE,IAAW,CAAC;QACnC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAOD,MAAM,CAAC,SAAS,CAAC,CAAQ,EAAE,IAAW,CAAC;QACrC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAOD,MAAM,CAAC,YAAY,CAAC,CAAQ,EAAE,IAAW,CAAC;QACxC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAOD,MAAM,CAAC,UAAU,CAAC,CAAQ,EAAE,IAAW,CAAC;QACtC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,CAAQ,EAAE,IAAW,CAAC;QACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAOD,MAAM,CAAC,aAAa,CAAC,CAAQ,EAAE,IAAW,CAAC;QACzC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9G,CAAC;IAQD,MAAM,CAAC,SAAS,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QACrD,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAQD,MAAM,CAAC,UAAU,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QACtD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/E,CAAC;IAQD,MAAM,CAAC,YAAY,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QACxD,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAAC;QAChD,IAAI,CAAC,GAAG,GAAG,EAAE;YACX,EAAE,IAAI,CAAC,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACpF;aAAM;YACL,EAAE,IAAI,CAAC,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACxF;IACH,CAAC;IAOD,MAAM,CAAC,QAAQ,CAAC,CAAQ,EAAE,IAAW,CAAC;QACpC,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAOD,MAAM,CAAC,SAAS,CAAC,CAAQ,EAAE,IAAW,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC7B;aAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;YACzB,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;SACpC;aAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE;YAC3B,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;SACtC;aAAM;YACL,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;SACxC;IACH,CAAC;IAOD,MAAM,CAAC,WAAW,CAAC,CAAQ,EAAE,IAAW,CAAC;QACvC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClG,CAAC;IAQD,MAAM,CAAC,OAAO,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,EAAE;QAClD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAQD,MAAM,CAAC,UAAU,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QACtD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IASD,MAAM,CAAC,IAAI,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QAChD,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACzC;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACrD;IACH,CAAC;IASD,MAAM,CAAC,eAAe,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAgB,CAAC,IAAI,EAAE,IAAI,CAAC;QACzE,IAAI,CAAC,GAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,GAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnD,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;SACtB;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAUD,MAAM,CAAC,WAAW,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,KAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAU,CAAC,GAAG,EAAE,GAAG,CAAC;QACnF,IAAI,KAAK,GAAG,IAAI,KAAK,CAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC;QAC5E,OAAO,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IASD,MAAM,CAAC,eAAe,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,KAAY,CAAC,GAAG,EAAE,IAAI,CAAC;QACpE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IASD,MAAM,CAAC,KAAK,CAAC,CAAQ,EAAE,IAAW,CAAC,EAAE,IAAW,GAAG;QACjD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAUD,MAAM,CAAC,IAAI,CAAC,EAAY,EAAE,KAAY,EAAE,CAAQ,EAAE,CAAQ,EAAE,GAAG,IAAU;QACvE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5B,CAAC;CAEF;AAOD,MAAM,OAAO,KAAK;IAahB,YAAa,CAAY;QAPf,UAAK,GAAU,CAAC,CAAC;QAQzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,CAAE,CAAC,CAAE,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAKD,IAAI,GAAG,KAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAK1C,IAAI,GAAG,KAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAK1C,IAAI,SAAS,KAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAMhD,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,GAAG,GAAG,IAAI,EAAE,CAAE,IAAI,CAAE,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,EAAE,CAAE,IAAI,CAAE,CAAC;QACzB,IAAI,GAAG,GAAG,IAAI,EAAE,CAAE,IAAI,CAAE,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACzB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;YACnB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAEX,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAE,CAAC,CAAE,CAAC;YACnC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,GAAG,GAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBACtC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAClC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;gBAClC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aAC1B;SACF;QAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IASD,KAAK,CAAE,GAAU,EAAE,GAAU,EAAE,OAAkB;QAC/C,IAAI,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,GAAG,GAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,IAAI,EAAE,CAAE,IAAI,CAAC,KAAK,CAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC/B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAE,CAAC;aACtG;YACD,MAAM,CAAC,IAAI,CAAE,CAAC,CAAE,CAAC;SAClB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAQD,MAAM,CAAE,GAAkB,EAAE,SAAe,IAAI;QAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAE,GAAG,CAAE,CAAC;QACnC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,KAAK,4BAA4B,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,CAAC;QAC9J,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAE,IAAI,CAAW,CAAC;QACpD,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,KAAK,CAAE,KAAY;QACjB,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,IAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,CAAE,IAAI,CAAC,KAAK,CAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,GAAG,GAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC9C,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAE,CAAC;aACxD;YACD,CAAC,CAAC,IAAI,CAAE,CAAC,CAAE,CAAC;SACb;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CAEF"}