screenci 0.0.20 → 0.0.22

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 (52) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +29 -19
  4. package/dist/cli.js.map +1 -1
  5. package/dist/e2e/instrument.e2e.js +98 -68
  6. package/dist/e2e/instrument.e2e.js.map +1 -1
  7. package/dist/src/autoZoom.d.ts +34 -15
  8. package/dist/src/autoZoom.d.ts.map +1 -1
  9. package/dist/src/autoZoom.js +100 -69
  10. package/dist/src/autoZoom.js.map +1 -1
  11. package/dist/src/changeFocus.d.ts +129 -0
  12. package/dist/src/changeFocus.d.ts.map +1 -0
  13. package/dist/src/changeFocus.js +885 -0
  14. package/dist/src/changeFocus.js.map +1 -0
  15. package/dist/src/defaults.d.ts +2 -17
  16. package/dist/src/defaults.d.ts.map +1 -1
  17. package/dist/src/defaults.js +8 -16
  18. package/dist/src/defaults.js.map +1 -1
  19. package/dist/src/easing.d.ts +6 -0
  20. package/dist/src/easing.d.ts.map +1 -0
  21. package/dist/src/easing.js +30 -0
  22. package/dist/src/easing.js.map +1 -0
  23. package/dist/src/errors.d.ts +10 -0
  24. package/dist/src/errors.d.ts.map +1 -0
  25. package/dist/src/errors.js +26 -0
  26. package/dist/src/errors.js.map +1 -0
  27. package/dist/src/events.d.ts +35 -12
  28. package/dist/src/events.d.ts.map +1 -1
  29. package/dist/src/events.js +137 -31
  30. package/dist/src/events.js.map +1 -1
  31. package/dist/src/instrument.d.ts +0 -6
  32. package/dist/src/instrument.d.ts.map +1 -1
  33. package/dist/src/instrument.js +382 -812
  34. package/dist/src/instrument.js.map +1 -1
  35. package/dist/src/mouse.d.ts +128 -0
  36. package/dist/src/mouse.d.ts.map +1 -0
  37. package/dist/src/mouse.js +268 -0
  38. package/dist/src/mouse.js.map +1 -0
  39. package/dist/src/recordingData.d.ts +30 -4
  40. package/dist/src/recordingData.d.ts.map +1 -1
  41. package/dist/src/types.d.ts +4 -7
  42. package/dist/src/types.d.ts.map +1 -1
  43. package/dist/src/zoom.d.ts +69 -0
  44. package/dist/src/zoom.d.ts.map +1 -0
  45. package/dist/src/zoom.js +90 -0
  46. package/dist/src/zoom.js.map +1 -0
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +1 -1
  49. package/dist/src/scroll.d.ts +0 -47
  50. package/dist/src/scroll.d.ts.map +0 -1
  51. package/dist/src/scroll.js +0 -347
  52. package/dist/src/scroll.js.map +0 -1
@@ -1,347 +0,0 @@
1
- import { getLastZoomLocation, getAllowZoomingOut, getZoomAmount, getZoomDuration, getZoomEasing, getZoomCentering, isInsideAutoZoom, } from './autoZoom.js';
2
- const SCROLL_DURATION_MS = 600;
3
- function evaluateEasingAtT(t, easing) {
4
- if (t <= 0)
5
- return 0;
6
- if (t >= 1)
7
- return 1;
8
- switch (easing) {
9
- case 'linear':
10
- return t;
11
- case 'ease-in':
12
- return t * t * t;
13
- case 'ease-out':
14
- return 1 - (1 - t) * (1 - t) * (1 - t);
15
- case 'ease-in-out':
16
- return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
17
- case 'ease-in-strong':
18
- return t * t * t * t;
19
- case 'ease-out-strong':
20
- return 1 - (1 - t) * (1 - t) * (1 - t) * (1 - t);
21
- case 'ease-in-out-strong':
22
- return t < 0.5 ? 8 * t * t * t * t : 1 - Math.pow(-2 * t + 2, 4) / 2;
23
- default: {
24
- const _ = easing;
25
- throw new Error(`Unknown easing: ${_}`);
26
- }
27
- }
28
- }
29
- function clamp(value, min, max) {
30
- return Math.min(max, Math.max(min, value));
31
- }
32
- function resolveCenteringValue(centering) {
33
- if (centering === undefined)
34
- return 1;
35
- return clamp(centering, 0, 1);
36
- }
37
- function isScrollableElement(node) {
38
- if (!node ||
39
- typeof node !== 'object' ||
40
- !('getBoundingClientRect' in node) ||
41
- !('clientHeight' in node) ||
42
- !('clientWidth' in node) ||
43
- !('scrollHeight' in node) ||
44
- !('scrollWidth' in node) ||
45
- !('scrollTop' in node) ||
46
- !('scrollLeft' in node)) {
47
- return false;
48
- }
49
- return true;
50
- }
51
- export async function scrollTo(locator, arg1, arg2, arg3) {
52
- const options = typeof arg1 === 'number'
53
- ? {
54
- amount: 1,
55
- centering: 1,
56
- allowZoomingOut: true,
57
- ...(arg2 !== undefined && { easing: arg2 }),
58
- ...(arg3 !== undefined && { duration: arg3 }),
59
- legacyHeight: arg1,
60
- }
61
- : arg1;
62
- if (!Number.isFinite(options.amount)) {
63
- throw new Error('[screenci] scrollTo amount must be a finite number.');
64
- }
65
- const initialBb = await locator.boundingBox();
66
- if (!initialBb)
67
- return undefined;
68
- await locator.evaluate((element, opts) => new Promise((resolve) => {
69
- const frameMs = 1000 / 60;
70
- const durationMs = opts.duration ?? 600;
71
- const clampValue = (value, min, max) => Math.min(max, Math.max(min, value));
72
- const resolveDesiredOffset = (params) => {
73
- const { rectSize, viewportSize, amount, centering, allowZoomingOut, rectWidth, rectHeight, viewportWidth, viewportHeight, legacyHeight, } = params;
74
- if (legacyHeight !== undefined) {
75
- return clampValue(Math.min(legacyHeight, viewportSize / 2 - rectSize / 2), 0, Math.max(0, viewportSize - rectSize));
76
- }
77
- const effectiveAmount = clampValue(Math.max(allowZoomingOut
78
- ? Math.max(amount, rectWidth / Math.max(1, viewportWidth), rectHeight / Math.max(1, viewportHeight))
79
- : amount, 0), 0, 1);
80
- const visibleSize = viewportSize * effectiveAmount;
81
- const cropStart = Math.max(0, (viewportSize - visibleSize) / 2);
82
- return clampValue(cropStart + ((visibleSize - rectSize) * centering) / 2, 0, Math.max(0, viewportSize - rectSize));
83
- };
84
- const evaluateScrollEasingAtT = (t, easing) => {
85
- if (t <= 0)
86
- return 0;
87
- if (t >= 1)
88
- return 1;
89
- switch (easing) {
90
- case 'linear':
91
- return t;
92
- case 'ease-in':
93
- return t * t * t;
94
- case 'ease-out':
95
- return 1 - (1 - t) * (1 - t) * (1 - t);
96
- case 'ease-in-out':
97
- return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
98
- case 'ease-in-strong':
99
- return t * t * t * t;
100
- case 'ease-out-strong':
101
- return 1 - (1 - t) * (1 - t) * (1 - t) * (1 - t);
102
- case 'ease-in-out-strong':
103
- return t < 0.5
104
- ? 8 * t * t * t * t
105
- : 1 - Math.pow(-2 * t + 2, 4) / 2;
106
- default: {
107
- const _ = easing;
108
- throw new Error(`Unknown easing: ${_}`);
109
- }
110
- }
111
- };
112
- const isScrollElementShape = (node) => {
113
- if (!node ||
114
- typeof node !== 'object' ||
115
- !('getBoundingClientRect' in node) ||
116
- !('clientHeight' in node) ||
117
- !('clientWidth' in node) ||
118
- !('scrollHeight' in node) ||
119
- !('scrollWidth' in node) ||
120
- !('scrollTop' in node) ||
121
- !('scrollLeft' in node)) {
122
- return false;
123
- }
124
- return true;
125
- };
126
- const doc = element.ownerDocument;
127
- const win = doc.defaultView;
128
- if (!win) {
129
- resolve();
130
- return;
131
- }
132
- const isActuallyScrollable = (node) => {
133
- if (!isScrollElementShape(node)) {
134
- return false;
135
- }
136
- const style = win.getComputedStyle(node);
137
- const overflowY = style.overflowY;
138
- const overflowX = style.overflowX;
139
- const canScrollY = (overflowY === 'auto' ||
140
- overflowY === 'scroll' ||
141
- overflowY === 'overlay') &&
142
- node.scrollHeight > node.clientHeight;
143
- const canScrollX = (overflowX === 'auto' ||
144
- overflowX === 'scroll' ||
145
- overflowX === 'overlay') &&
146
- node.scrollWidth > node.clientWidth;
147
- return canScrollY || canScrollX;
148
- };
149
- const viewportHeight = win.innerHeight || doc.documentElement.clientHeight;
150
- const viewportWidth = win.innerWidth || doc.documentElement.clientWidth;
151
- const scrollableAncestors = [];
152
- for (let current = element.parentElement; current;) {
153
- if (isActuallyScrollable(current) &&
154
- current !== doc.documentElement &&
155
- current !== doc.body) {
156
- scrollableAncestors.push(current);
157
- }
158
- current = current.parentElement;
159
- }
160
- const ancestorScrollPlans = [];
161
- let accumulatedNestedDeltaTop = 0;
162
- let accumulatedNestedDeltaLeft = 0;
163
- const elementRect = element.getBoundingClientRect();
164
- for (const ancestor of scrollableAncestors) {
165
- const containerRect = ancestor.getBoundingClientRect();
166
- const projectedRectTop = elementRect.top - accumulatedNestedDeltaTop;
167
- const projectedRectLeft = elementRect.left - accumulatedNestedDeltaLeft;
168
- const startTop = ancestor.scrollTop;
169
- const startLeft = ancestor.scrollLeft;
170
- const desiredTopWithinContainer = resolveDesiredOffset({
171
- rectSize: elementRect.height,
172
- viewportSize: ancestor.clientHeight,
173
- amount: opts.amount,
174
- centering: opts.centering,
175
- allowZoomingOut: opts.allowZoomingOut,
176
- rectWidth: elementRect.width,
177
- rectHeight: elementRect.height,
178
- viewportWidth: ancestor.clientWidth,
179
- viewportHeight: ancestor.clientHeight,
180
- legacyHeight: opts.legacyHeight,
181
- });
182
- const desiredLeftWithinContainer = resolveDesiredOffset({
183
- rectSize: elementRect.width,
184
- viewportSize: ancestor.clientWidth,
185
- amount: opts.amount,
186
- centering: opts.centering,
187
- allowZoomingOut: opts.allowZoomingOut,
188
- rectWidth: elementRect.width,
189
- rectHeight: elementRect.height,
190
- viewportWidth: ancestor.clientWidth,
191
- viewportHeight: ancestor.clientHeight,
192
- legacyHeight: opts.legacyHeight,
193
- });
194
- const targetTop = clampValue(startTop +
195
- (projectedRectTop -
196
- containerRect.top -
197
- desiredTopWithinContainer), 0, Math.max(0, ancestor.scrollHeight - ancestor.clientHeight));
198
- const targetLeft = clampValue(startLeft +
199
- (projectedRectLeft -
200
- containerRect.left -
201
- desiredLeftWithinContainer), 0, Math.max(0, ancestor.scrollWidth - ancestor.clientWidth));
202
- ancestorScrollPlans.push({
203
- element: ancestor,
204
- startTop,
205
- startLeft,
206
- targetTop,
207
- targetLeft,
208
- });
209
- accumulatedNestedDeltaTop += targetTop - startTop;
210
- accumulatedNestedDeltaLeft += targetLeft - startLeft;
211
- }
212
- const rect = element.getBoundingClientRect();
213
- const projectedRectTop = rect.top - accumulatedNestedDeltaTop;
214
- const projectedRectLeft = rect.left - accumulatedNestedDeltaLeft;
215
- const scrollHeight = Math.max(doc.documentElement.scrollHeight, doc.body?.scrollHeight ?? 0);
216
- const scrollWidth = Math.max(doc.documentElement.scrollWidth, doc.body?.scrollWidth ?? 0);
217
- const pageStartY = win.scrollY;
218
- const pageStartX = win.scrollX;
219
- const desiredTop = resolveDesiredOffset({
220
- rectSize: rect.height,
221
- viewportSize: viewportHeight,
222
- amount: opts.amount,
223
- centering: opts.centering,
224
- allowZoomingOut: opts.allowZoomingOut,
225
- rectWidth: rect.width,
226
- rectHeight: rect.height,
227
- viewportWidth: viewportWidth,
228
- viewportHeight: viewportHeight,
229
- legacyHeight: opts.legacyHeight,
230
- });
231
- const desiredLeft = resolveDesiredOffset({
232
- rectSize: rect.width,
233
- viewportSize: viewportWidth,
234
- amount: opts.amount,
235
- centering: opts.centering,
236
- allowZoomingOut: opts.allowZoomingOut,
237
- rectWidth: rect.width,
238
- rectHeight: rect.height,
239
- viewportWidth: viewportWidth,
240
- viewportHeight: viewportHeight,
241
- legacyHeight: opts.legacyHeight,
242
- });
243
- const targetScrollY = clampValue(pageStartY + (projectedRectTop - desiredTop), 0, Math.max(0, scrollHeight - viewportHeight));
244
- const targetScrollX = clampValue(pageStartX + (projectedRectLeft - desiredLeft), 0, Math.max(0, scrollWidth - viewportWidth));
245
- const needsNestedScroll = ancestorScrollPlans.some((plan) => plan.targetTop !== plan.startTop ||
246
- plan.targetLeft !== plan.startLeft);
247
- const needsPageScroll = targetScrollY !== pageStartY || targetScrollX !== pageStartX;
248
- if (!needsNestedScroll && !needsPageScroll) {
249
- resolve();
250
- return;
251
- }
252
- const steps = Math.max(1, Math.floor(durationMs / frameMs));
253
- let step = 0;
254
- const scheduleNextFrame = () => {
255
- if (typeof win.requestAnimationFrame === 'function') {
256
- win.requestAnimationFrame(() => tick());
257
- return;
258
- }
259
- setTimeout(tick, frameMs);
260
- };
261
- const tick = () => {
262
- step += 1;
263
- const t = step / steps;
264
- const easedT = evaluateScrollEasingAtT(t, opts.easing ?? 'ease-in-out');
265
- for (const plan of ancestorScrollPlans) {
266
- plan.element.scrollTop =
267
- plan.startTop + (plan.targetTop - plan.startTop) * easedT;
268
- plan.element.scrollLeft =
269
- plan.startLeft + (plan.targetLeft - plan.startLeft) * easedT;
270
- }
271
- win.scrollTo({
272
- top: pageStartY + (targetScrollY - pageStartY) * easedT,
273
- left: pageStartX + (targetScrollX - pageStartX) * easedT,
274
- behavior: 'auto',
275
- });
276
- if (step >= steps) {
277
- resolve();
278
- return;
279
- }
280
- scheduleNextFrame();
281
- };
282
- tick();
283
- }), options);
284
- const finalBb = await locator.boundingBox();
285
- if (!finalBb)
286
- return initialBb;
287
- return {
288
- x: finalBb.x,
289
- y: finalBb.y,
290
- width: finalBb.width,
291
- height: finalBb.height,
292
- };
293
- }
294
- export class ZoomScrollHandler {
295
- options;
296
- constructor(options = {}) {
297
- this.options = options;
298
- }
299
- isInsideAutoZoom = isInsideAutoZoom();
300
- lastZoomLocation = getLastZoomLocation();
301
- isFirstAutoZoomInteraction = this.isInsideAutoZoom && this.lastZoomLocation === null;
302
- hadPreviousZoomLocation = this.lastZoomLocation !== null;
303
- resolveScrollAnimationOptions() {
304
- if (!this.isInsideAutoZoom || this.isFirstAutoZoomInteraction) {
305
- return { easing: 'ease-in-out', duration: undefined };
306
- }
307
- return {
308
- easing: getZoomEasing() ?? 'ease-in-out',
309
- duration: getZoomDuration() ?? undefined,
310
- };
311
- }
312
- resolveScrollBehavior() {
313
- const amount = this.options.amount ??
314
- getZoomAmount() ??
315
- (this.isInsideAutoZoom ? 0.5 : 1);
316
- const centering = this.options.centering !== undefined
317
- ? resolveCenteringValue(this.options.centering)
318
- : (getZoomCentering() ?? (this.isInsideAutoZoom ? 1 : 1));
319
- const allowZoomingOut = this.options.allowZoomingOut ?? getAllowZoomingOut() ?? true;
320
- return { amount, centering, allowZoomingOut };
321
- }
322
- async scroll(locator, centeringOverride) {
323
- const { easing, duration } = this.resolveScrollAnimationOptions();
324
- const { amount, centering, allowZoomingOut } = this.resolveScrollBehavior();
325
- const effectiveCentering = centeringOverride !== undefined
326
- ? clamp(centeringOverride, 0, 1)
327
- : centering;
328
- const scrollStartMs = Date.now();
329
- const locatorRect = await scrollTo(locator, {
330
- amount,
331
- centering: effectiveCentering,
332
- allowZoomingOut,
333
- ...(easing !== undefined && { easing }),
334
- ...(duration !== undefined && { duration }),
335
- });
336
- const scrollEndMs = Date.now();
337
- return {
338
- locatorRect,
339
- scrollStartMs,
340
- scrollEndMs,
341
- scrollElapsedMs: Math.max(0, scrollEndMs - scrollStartMs),
342
- isFirstAutoZoomInteraction: this.isFirstAutoZoomInteraction,
343
- shouldScrollBeforeMouseMove: this.isFirstAutoZoomInteraction,
344
- };
345
- }
346
- }
347
- //# sourceMappingURL=scroll.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../src/scroll.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAA;AAEtB,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAE9B,SAAS,iBAAiB,CAAC,CAAS,EAAE,MAAc;IAClD,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IACpB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IACpB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,CAAA;QACV,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,KAAK,UAAU;YACb,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACxC,KAAK,aAAa;YAChB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;QAClE,KAAK,gBAAgB;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtB,KAAK,iBAAiB;YACpB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAClD,KAAK,oBAAoB;YACvB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;QACtE,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,GAAU,MAAM,CAAA;YACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AA2BD,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,qBAAqB,CAAC,SAA6B;IAC1D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa;IACxC,IACE,CAAC,IAAI;QACL,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;QAClC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;QACzB,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;QACzB,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC;QACxB,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;QACtB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,EACvB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AA8BD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAgB,EAChB,IAA8B,EAC9B,IAAa,EACb,IAAa;IAEb,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC;YACE,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,IAAI;YACrB,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC7C,YAAY,EAAE,IAAI;SACnB;QACH,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAEhC,MAAM,OAAO,CAAC,QAAQ,CACpB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAChB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAA;QACvC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE,CACrE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACrC,MAAM,oBAAoB,GAAG,CAAC,MAW7B,EAAU,EAAE;YACX,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,SAAS,EACT,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,GACb,GAAG,MAAM,CAAA;YAEV,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,UAAU,CACf,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,EACvD,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,CACrC,CAAA;YACH,CAAC;YAED,MAAM,eAAe,GAAG,UAAU,CAChC,IAAI,CAAC,GAAG,CACN,eAAe;gBACb,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,MAAM,EACN,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,EACtC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CACzC;gBACH,CAAC,CAAC,MAAM,EACV,CAAC,CACF,EACD,CAAC,EACD,CAAC,CACF,CAAA;YACD,MAAM,WAAW,GAAG,YAAY,GAAG,eAAe,CAAA;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/D,OAAO,UAAU,CACf,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EACtD,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,CACrC,CAAA;QACH,CAAC,CAAA;QACD,MAAM,uBAAuB,GAAG,CAAC,CAAS,EAAE,MAAc,EAAU,EAAE;YACpE,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAA;YACpB,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,QAAQ;oBACX,OAAO,CAAC,CAAA;gBACV,KAAK,SAAS;oBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAClB,KAAK,UAAU;oBACb,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxC,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;gBAClE,KAAK,gBAAgB;oBACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACtB,KAAK,iBAAiB;oBACpB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClD,KAAK,oBAAoB;oBACvB,OAAO,CAAC,GAAG,GAAG;wBACZ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;wBACnB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;gBACrC,OAAO,CAAC,CAAC,CAAC;oBACR,MAAM,CAAC,GAAU,MAAM,CAAA;oBACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QACD,MAAM,oBAAoB,GAAG,CAC3B,IAAa,EACc,EAAE;YAC7B,IACE,CAAC,IAAI;gBACL,OAAO,IAAI,KAAK,QAAQ;gBACxB,CAAC,CAAC,uBAAuB,IAAI,IAAI,CAAC;gBAClC,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;gBACzB,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC;gBACxB,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC;gBACzB,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC;gBACxB,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC;gBACtB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,EACvB,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAA;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAA;QACjC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAkC,CAAA;QAClD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QAED,MAAM,oBAAoB,GAAG,CAC3B,IAAa,EACc,EAAE;YAC7B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAe,CAAC,CAAA;YACnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YACjC,MAAM,UAAU,GACd,CAAC,SAAS,KAAK,MAAM;gBACnB,SAAS,KAAK,QAAQ;gBACtB,SAAS,KAAK,SAAS,CAAC;gBAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;YACvC,MAAM,UAAU,GACd,CAAC,SAAS,KAAK,MAAM;gBACnB,SAAS,KAAK,QAAQ;gBACtB,SAAS,KAAK,SAAS,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YAErC,OAAO,UAAU,IAAI,UAAU,CAAA;QACjC,CAAC,CAAA;QAED,MAAM,cAAc,GAClB,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,eAAe,CAAC,YAAY,CAAA;QACrD,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,eAAe,CAAC,WAAW,CAAA;QAEvE,MAAM,mBAAmB,GAAwB,EAAE,CAAA;QACnD,KAAK,IAAI,OAAO,GAAmB,OAAO,CAAC,aAAa,EAAE,OAAO,GAAI,CAAC;YACpE,IACE,oBAAoB,CAAC,OAAO,CAAC;gBAC7B,OAAO,KAAK,GAAG,CAAC,eAAe;gBAC/B,OAAO,KAAK,GAAG,CAAC,IAAI,EACpB,CAAC;gBACD,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnC,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAA;QACjC,CAAC;QAED,MAAM,mBAAmB,GAMpB,EAAE,CAAA;QAEP,IAAI,yBAAyB,GAAG,CAAC,CAAA;QACjC,IAAI,0BAA0B,GAAG,CAAC,CAAA;QAClC,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;QACnD,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAA;YACtD,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,GAAG,yBAAyB,CAAA;YACpE,MAAM,iBAAiB,GACrB,WAAW,CAAC,IAAI,GAAG,0BAA0B,CAAA;YAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAA;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAA;YACrC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC;gBACrD,QAAQ,EAAE,WAAW,CAAC,MAAM;gBAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,SAAS,EAAE,WAAW,CAAC,KAAK;gBAC5B,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,aAAa,EAAE,QAAQ,CAAC,WAAW;gBACnC,cAAc,EAAE,QAAQ,CAAC,YAAY;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC,CAAA;YACF,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;gBACtD,QAAQ,EAAE,WAAW,CAAC,KAAK;gBAC3B,YAAY,EAAE,QAAQ,CAAC,WAAW;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,SAAS,EAAE,WAAW,CAAC,KAAK;gBAC5B,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,aAAa,EAAE,QAAQ,CAAC,WAAW;gBACnC,cAAc,EAAE,QAAQ,CAAC,YAAY;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC,CAAA;YACF,MAAM,SAAS,GAAG,UAAU,CAC1B,QAAQ;gBACN,CAAC,gBAAgB;oBACf,aAAa,CAAC,GAAG;oBACjB,yBAAyB,CAAC,EAC9B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAC3D,CAAA;YACD,MAAM,UAAU,GAAG,UAAU,CAC3B,SAAS;gBACP,CAAC,iBAAiB;oBAChB,aAAa,CAAC,IAAI;oBAClB,0BAA0B,CAAC,EAC/B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CACzD,CAAA;YAED,mBAAmB,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,QAAQ;gBACjB,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,UAAU;aACX,CAAC,CAAA;YAEF,yBAAyB,IAAI,SAAS,GAAG,QAAQ,CAAA;YACjD,0BAA0B,IAAI,UAAU,GAAG,SAAS,CAAA;QACtD,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,GAAG,yBAAyB,CAAA;QAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,CAAC,eAAe,CAAC,YAAY,EAChC,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,CAC5B,CAAA;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,GAAG,CAAC,eAAe,CAAC,WAAW,EAC/B,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,CAC3B,CAAA;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAA;QAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAA;QAC9B,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,YAAY,EAAE,cAAc;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,aAAa,EAAE,aAAa;YAC5B,cAAc,EAAE,cAAc;YAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,oBAAoB,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,KAAK;YACpB,YAAY,EAAE,aAAa;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,aAAa,EAAE,aAAa;YAC5B,cAAc,EAAE,cAAc;YAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAA;QACF,MAAM,aAAa,GAAG,UAAU,CAC9B,UAAU,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC,EAC5C,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,CAC3C,CAAA;QACD,MAAM,aAAa,GAAG,UAAU,CAC9B,UAAU,GAAG,CAAC,iBAAiB,GAAG,WAAW,CAAC,EAC9C,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,CACzC,CAAA;QACD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAChD,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ;YAChC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CACrC,CAAA;QACD,MAAM,eAAe,GACnB,aAAa,KAAK,UAAU,IAAI,aAAa,KAAK,UAAU,CAAA;QAE9D,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAA;QAC3D,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,MAAM,iBAAiB,GAAG,GAAS,EAAE;YACnC,IAAI,OAAO,GAAG,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;gBACpD,GAAG,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;gBACvC,OAAM;YACR,CAAC;YACD,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3B,CAAC,CAAA;QAED,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,CAAA;YACT,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;YACtB,MAAM,MAAM,GAAG,uBAAuB,CACpC,CAAC,EACD,IAAI,CAAC,MAAM,IAAI,aAAa,CAC7B,CAAA;YAED,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,SAAS;oBACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAA;gBAC3D,IAAI,CAAC,OAAO,CAAC,UAAU;oBACrB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAA;YAChE,CAAC;YAED,GAAG,CAAC,QAAQ,CAAC;gBACX,GAAG,EAAE,UAAU,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,MAAM;gBACvD,IAAI,EAAE,UAAU,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,MAAM;gBACxD,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAA;YAEF,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YAED,iBAAiB,EAAE,CAAA;QACrB,CAAC,CAAA;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,EACJ,OAAO,CACR,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,OAAO;QACL,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAA;AACH,CAAC;AAWD,MAAM,OAAO,iBAAiB;IAET;IADnB,YACmB,UAIb,EAAE;QAJW,YAAO,GAAP,OAAO,CAIlB;IACL,CAAC;IAEK,gBAAgB,GAAG,gBAAgB,EAAE,CAAA;IACrC,gBAAgB,GAAG,mBAAmB,EAAE,CAAA;IACxC,0BAA0B,GACjC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAA;IAChD,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAA;IAEzD,6BAA6B;QAInC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC9D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;QACvD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAa,EAAE,IAAI,aAAa;YACxC,QAAQ,EAAE,eAAe,EAAE,IAAI,SAAS;SACzC,CAAA;IACH,CAAC;IAEO,qBAAqB;QAK3B,MAAM,MAAM,GACV,IAAI,CAAC,OAAO,CAAC,MAAM;YACnB,aAAa,EAAE;YACf,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,SAAS,GACb,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YAClC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7D,MAAM,eAAe,GACnB,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,kBAAkB,EAAE,IAAI,IAAI,CAAA;QAE9D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAgB,EAChB,iBAA0B;QAE1B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAA;QACjE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC3E,MAAM,kBAAkB,GACtB,iBAAiB,KAAK,SAAS;YAC7B,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,SAAS,CAAA;QACf,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE;YAC1C,MAAM;YACN,SAAS,EAAE,kBAAkB;YAC7B,eAAe;YACf,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC5C,CAAC,CAAA;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE9B,OAAO;YACL,WAAW;YACX,aAAa;YACb,WAAW;YACX,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC;YACzD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,2BAA2B,EAAE,IAAI,CAAC,0BAA0B;SAC7D,CAAA;IACH,CAAC;CACF"}