clearcote 0.47.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/motion.js CHANGED
@@ -152,28 +152,60 @@ export function minJerk(tau) {
152
152
  const t = clamp(tau, 0, 1);
153
153
  return t * t * t * (10 + t * (-15 + 6 * t));
154
154
  }
155
- /** Sample ONE min-jerk submovement a→b along a slightly bowed path, adding colored noise. Appends to
156
- * `out`. `t0` is the absolute clock (ms) at the start (for tremor phase continuity). Returns the
157
- * absolute clock at the end. `land` = put the final sample exactly on b with no noise. */
158
- function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, land) {
155
+ // Salt for the path-shape stream. Like the rollover salt, a separate mulberry32(seed ^ salt) stream
156
+ // keeps makePersona's draw ORDER (and so every existing seed's motor identity) unchanged.
157
+ const SHAPE_SALT = 0x85ebca6b;
158
+ /** The persona's path-shape traits, drawn from a salted stream of its seed.
159
+ *
160
+ * Measured on r38 / SDK 0.48.0 (SC 209): 1 of 36 planned approaches passed the target, against 15–40 %
161
+ * for real reaches and 14/36 for the engine's recorded trajectories, because the primary submovement
162
+ * always aimed at 84–94 % of the distance. Same values as Python `_motion.shape_traits` and .NET
163
+ * `Motion.ShapeTraitsOf`. */
164
+ export function shapeTraits(p) {
165
+ const r = mulberry32((p.seed ^ SHAPE_SALT) >>> 0);
166
+ const overshootRate = lerp(0.15, 0.38, r());
167
+ const curve = lerp(0.75, 1.3, r());
168
+ const dragTempo = lerp(0.85, 1.2, r());
169
+ return { overshootRate, curve, dragTempo };
170
+ }
171
+ // Sub-pixel noise scale. The colored noise (OU drift + 8–12 Hz tremor + AR(1) jitter) stays, but smaller
172
+ // and carried mostly while the hand is moving: a mouse resting on the pad reports no counts, so a slow
173
+ // tail full of ±0.5 px wobble is what a quantizing page turns into 1 px zigzags.
174
+ const NOISE = 0.6;
175
+ /** floor(x + 0.5): the same rounding as Python `_js_round` and .NET `JsRound`. */
176
+ const jsRound = (x) => Math.floor(x + 0.5);
177
+ /** Time warp 1−(1−τ)^skew: skew > 1 moves the min-jerk speed peak before the midpoint. */
178
+ function skewed(tau, skew) {
179
+ const t = clamp(tau, 0, 1);
180
+ return skew !== 1 ? 1 - Math.pow(1 - t, skew) : t;
181
+ }
182
+ /** Sample ONE min-jerk submovement a→b along a bowed path, adding colored noise. Appends to `out`.
183
+ * `t0` is the absolute clock (ms) at the start (for tremor phase continuity). Returns the absolute
184
+ * clock at the end. `land` = put the final sample exactly on b with no noise. `bowFrac` = signed peak
185
+ * sideways deviation as a share of the submovement's length; `skew` = time warp (1 = symmetric). */
186
+ function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, land, bowFrac, skew) {
159
187
  const dx = b.x - a.x, dy = b.y - a.y;
160
188
  const dist = Math.hypot(dx, dy) || 1e-6;
161
189
  const stepMs = 1000 / p.deviceHz;
162
190
  // Cap the sample count so a very long move can't emit thousands of steps (defends the Fitts cap).
163
- const n = Math.min(180, Math.max(4, Math.round(durMs / stepMs)));
164
- // perpendicular unit for the path bow; sign follows the persona's handedness bias
191
+ const n = Math.min(180, Math.max(4, jsRound(durMs / stepMs)));
165
192
  const nx = -dy / dist, ny = dx / dist;
166
- const bowSign = p.approachBias >= 0 ? 1 : -1;
167
- const bow = bowSign * (0.04 + Math.abs(gaussFrom(rng)) * 0.05) * Math.min(dist, 260) * (0.5 + Math.abs(p.approachBias));
168
- const c1x = a.x + dx * 0.33 + nx * bow, c1y = a.y + dy * 0.33 + ny * bow;
169
- const c2x = a.x + dx * 0.66 + nx * bow, c2y = a.y + dy * 0.66 + ny * bow;
193
+ // A cubic with both control points offset by c peaks at 0.75 c; the first control point carries more
194
+ // of it, so the widest point of the arc comes before the middle, as in a reach.
195
+ const c = bowFrac * dist / 0.75;
196
+ const c1x = a.x + dx * 0.3 + nx * c * 1.15, c1y = a.y + dy * 0.3 + ny * c * 1.15;
197
+ const c2x = a.x + dx * 0.7 + nx * c * 0.85, c2y = a.y + dy * 0.7 + ny * c * 0.85;
170
198
  let t = t0;
171
199
  for (let i = 1; i <= n; i++) {
172
- const e = minJerk(i / n);
200
+ const tau = i / n;
201
+ const e = minJerk(skewed(tau, skew));
173
202
  let px = bez(a.x, c1x, c2x, b.x, e);
174
203
  let py = bez(a.y, c1y, c2y, b.y, e);
175
204
  const last = i === n;
176
205
  if (!(last && land)) {
206
+ // noise follows the speed envelope (min-jerk speed 30τ²(1−τ)² peaks at 1.875)
207
+ const v = 30 * tau * tau * (1 - tau) * (1 - tau) / 1.875;
208
+ const g = NOISE * (0.35 + 0.65 * v);
177
209
  // Ornstein–Uhlenbeck drift (colored, low-frequency)
178
210
  const k = stepMs / p.driftTau;
179
211
  drift.x += -k * drift.x + Math.sqrt(2 * k) * p.driftAmp * gaussFrom(rng);
@@ -188,8 +220,8 @@ function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, la
188
220
  // speed reversal every sample, manufacturing spurious "submovements" and a flat noise spectrum.
189
221
  jit.x = 0.7 * jit.x + gaussFrom(rng) * p.jitter * 0.22;
190
222
  jit.y = 0.7 * jit.y + gaussFrom(rng) * p.jitter * 0.22;
191
- px += drift.x + trX + jit.x;
192
- py += drift.y + trY + jit.y;
223
+ px += (drift.x + trX + jit.x) * g;
224
+ py += (drift.y + trY + jit.y) * g;
193
225
  }
194
226
  else {
195
227
  px = b.x;
@@ -206,8 +238,19 @@ function sampleSubmove(out, a, b, durMs, p, rng, t0, drift, jit, tremorPhase, la
206
238
  /**
207
239
  * Plan a free cursor move `from`→`to` as a sum of minimum-jerk submovements (primary + corrections)
208
240
  * with Fitts-scaled duration and colored noise. Returns the samples to dispatch.
241
+ *
242
+ * A move with a button held (`held`) or one that seats a handle (`settle`) is a drag, planned by
243
+ * {@link planDrag}.
244
+ *
245
+ * Shape (SC 209/210): the primary submovement arcs (peak sideways deviation ~6–18 % of the distance,
246
+ * per-persona curvature and handedness), reaches its speed peak before the middle of the move, and
247
+ * either stops short of the target (a short corrective submovement closes the gap) or, in
248
+ * `shapeTraits(p).overshootRate` of moves, passes it by 3–28 px and comes back. Straightness (distance /
249
+ * path length) of the planned points lands around 0.85–0.95, the band of real reaches.
209
250
  */
210
251
  export function planMove(from, to, p, opts = {}) {
252
+ if (opts.settle || opts.held)
253
+ return planDrag(from, to, p, { settle: opts.settle, rng: opts.rng });
211
254
  const rng = opts.rng ?? Math.random;
212
255
  const W = Math.max(6, opts.targetW ?? 24);
213
256
  const D = Math.hypot(to.x - from.x, to.y - from.y);
@@ -222,45 +265,49 @@ export function planMove(from, to, p, opts = {}) {
222
265
  const id = log2(D / W + 1);
223
266
  const mtLo = Math.min(1700, Math.max(70, 40 + D * 0.6));
224
267
  const mt = clamp((p.fittsA + p.fittsB * id) * (0.85 + 0.3 * rng()), mtLo, 1700);
225
- // Submovement targets: primary lands near `to` with a small over/undershoot; corrections close the
226
- // residual error, each covering ~55–80% of what's left.
268
+ const tr = shapeTraits(p);
269
+ const ux = (to.x - from.x) / D, uy = (to.y - from.y) / D;
270
+ // Submovement targets: the primary stops a little short of `to` or, in the persona's overshoot rate,
271
+ // passes it; one correction closes the residual (occasionally an intermediate one first).
227
272
  const targets = [];
273
+ let over = false;
228
274
  if (D >= 40) {
229
- const f = p.primaryFrac;
230
- const spread = Math.min(16, D * p.overshoot);
231
- targets.push({
232
- x: from.x + (to.x - from.x) * f + gaussFrom(rng) * spread,
233
- y: from.y + (to.y - from.y) * f + gaussFrom(rng) * spread,
234
- });
235
- // 1 correction usually, occasionally 2 (a 3rd is rare) — keeps the corrective-submovement count
236
- // in the human 1–3 band rather than over-generating homing bumps.
237
- const nCorr = rng() < 0.08 * p.maxCorrections ? 2 : 1;
238
- let cur = targets[0];
239
- for (let i = 0; i < nCorr; i++) {
275
+ over = rng() < tr.overshootRate;
276
+ const along = over
277
+ ? D + clamp(D * lerp(0.03, 0.08, rng()), 3, 28)
278
+ : D * clamp(p.primaryFrac + 0.05 + gaussFrom(rng) * 0.015, 0.88, 0.985);
279
+ const lat = gaussFrom(rng) * Math.min(6, D * 0.02);
280
+ targets.push({ x: from.x + ux * along - uy * lat, y: from.y + uy * along + ux * lat });
281
+ if (rng() < 0.08 * p.maxCorrections) {
282
+ const cur = targets[0];
240
283
  const close = lerp(0.55, 0.8, rng());
241
- const nx = { x: cur.x + (to.x - cur.x) * close, y: cur.y + (to.y - cur.y) * close };
242
- // tiny lateral error so corrections aren't perfectly collinear
243
- nx.x += gaussFrom(rng) * 1.2;
244
- nx.y += gaussFrom(rng) * 1.2;
245
- targets.push(nx);
246
- cur = nx;
284
+ const mx = cur.x + (to.x - cur.x) * close + gaussFrom(rng) * 1.0;
285
+ const my = cur.y + (to.y - cur.y) * close + gaussFrom(rng) * 1.0;
286
+ targets.push({ x: mx, y: my });
247
287
  }
248
288
  }
249
289
  targets.push({ x: to.x, y: to.y });
250
- // Allocate MT: primary ~62%, remaining split across corrections (each shorter).
251
290
  const segDur = [];
252
291
  if (targets.length === 1) {
253
292
  segDur.push(mt);
254
293
  }
255
294
  else {
256
- // Primary gets ~78% of the time (min-jerk peaks at its own mid-point ⇒ global peak lands ~0.35–0.4,
257
- // the human sweet spot slightly before the whole-gesture midpoint), corrections share the rest.
295
+ // Primary gets ~78% of the time; with its skewed min-jerk profile the global speed peak lands
296
+ // ~0.3 of the way through the move, before the midpoint as in a reach. Corrections share the rest.
258
297
  segDur.push(mt * 0.78);
259
298
  const rest = mt * 0.22;
260
299
  const nc = targets.length - 1;
261
300
  for (let i = 0; i < nc; i++)
262
301
  segDur.push((rest / nc) * lerp(0.8, 1.2, rng()));
263
302
  }
303
+ // The primary's arc: handedness sign from the persona (1 move in 5 bends the other way), size from
304
+ // the persona's curvature trait. Corrections are short and nearly straight.
305
+ let sign = p.approachBias >= 0 ? 1 : -1;
306
+ if (rng() < 0.2)
307
+ sign = -sign;
308
+ let bow = sign * Math.min(0.25, (0.08 + Math.abs(gaussFrom(rng)) * 0.11) * tr.curve * (0.75 + Math.abs(p.approachBias)));
309
+ if (D * Math.abs(bow) > 110)
310
+ bow = bow < 0 ? -110 / D : 110 / D;
264
311
  const drift = { x: 0, y: 0 };
265
312
  const jit = { x: 0, y: 0 };
266
313
  const tremorPhase = rng() * 2 * Math.PI;
@@ -268,18 +315,90 @@ export function planMove(from, to, p, opts = {}) {
268
315
  for (let s = 0; s < targets.length; s++) {
269
316
  const b = targets[s];
270
317
  const last = s === targets.length - 1;
271
- t = sampleSubmove(out, a, b, Math.max(20, segDur[s]), p, rng, t, drift, jit, tremorPhase, last && !opts.settle);
318
+ const first = s === 0;
319
+ t = sampleSubmove(out, a, b, Math.max(20, segDur[s]), p, rng, t, drift, jit, tremorPhase, last, first ? bow : bow * 0.15, first ? 1.25 : 1.0);
320
+ // motor re-planning gap; a reversal after passing the target comes back quicker
272
321
  if (!last && out.length)
273
- out[out.length - 1].sleepMs += lerp(40, 120, rng()); // motor re-planning gap
322
+ out[out.length - 1].sleepMs += over && first ? lerp(25, 90, rng()) : lerp(40, 120, rng());
274
323
  a = b;
275
324
  }
276
- if (opts.settle) {
325
+ return out;
326
+ }
327
+ /**
328
+ * Plan a held-button drag `from`→`to` (slider handle, drag-and-drop, range thumb).
329
+ *
330
+ * Measured on r38 / SDK 0.48.0 (SC 209): the held leg reused the aimed-move planner, whose arc put the
331
+ * hand up to 47 px off the line between grab and drop — off a 40 px slider track. A drag is a slower,
332
+ * flatter movement: one skewed min-jerk leg along the line with at most ~5 px of arc and ±6 px of total
333
+ * sideways error, 0.5–2 s for 300–400 px (`shapeTraits(p).dragTempo`), and now and then (about 0.6× the
334
+ * persona's overshoot rate) a 2.5–10 px overshoot and pull-back. `settle` adds a couple of sub-pixel
335
+ * seating jiggles before landing exactly on `to`.
336
+ */
337
+ export function planDrag(from, to, p, opts = {}) {
338
+ const rng = opts.rng ?? Math.random;
339
+ const settle = !!opts.settle;
340
+ const D = Math.hypot(to.x - from.x, to.y - from.y);
341
+ const out = [];
342
+ const stepMs = 1000 / p.deviceHz;
343
+ if (D < 1.5) {
344
+ out.push({ x: to.x, y: to.y, sleepMs: stepMs });
345
+ return out;
346
+ }
347
+ const tr = shapeTraits(p);
348
+ const ux = (to.x - from.x) / D, uy = (to.y - from.y) / D;
349
+ const mt = clamp((260 + 1.7 * D) * tr.dragTempo * lerp(0.9, 1.1, rng()), Math.min(500, 150 + 1.5 * D), 2000);
350
+ const over = D >= 60 && rng() < tr.overshootRate * 0.6;
351
+ const o = over ? clamp(D * lerp(0.01, 0.03, rng()), 2.5, 10) : 0;
352
+ const sign = p.approachBias >= 0 ? 1 : -1;
353
+ const h = sign * Math.min(5, D * 0.015) * lerp(0.3, 1.0, rng());
354
+ const tremorPhase = rng() * 2 * Math.PI;
355
+ const legs = [[0, D + o, mt * (over ? 0.86 : 1.0), h]];
356
+ if (over)
357
+ legs.push([D + o, D, mt * 0.14, 0]);
358
+ let drift = 0, jit = 0, t = 0;
359
+ for (let li = 0; li < legs.length; li++) {
360
+ const [s0, s1, dur, hh] = legs[li];
361
+ const n = Math.min(360, Math.max(4, jsRound(dur / stepMs)));
362
+ const dt = dur / n;
363
+ const lastLeg = li === legs.length - 1;
364
+ for (let i = 1; i <= n; i++) {
365
+ const tau = i / n;
366
+ const e = minJerk(skewed(tau, 1.2));
367
+ let along = s0 + (s1 - s0) * e;
368
+ const v = 30 * tau * tau * (1 - tau) * (1 - tau) / 1.875;
369
+ const k = dt / p.driftTau;
370
+ drift += -k * drift + Math.sqrt(2 * k) * p.driftAmp * 0.8 * gaussFrom(rng);
371
+ jit = 0.7 * jit + gaussFrom(rng) * p.jitter * 0.12;
372
+ const tAmp = p.tremorAmp * (0.7 + 0.3 * Math.sin((2 * Math.PI * t) / 850 + tremorPhase));
373
+ const tremor = tAmp * Math.sin(tremorPhase + (2 * Math.PI * p.tremorHz * t) / 1000);
374
+ along += tAmp * 0.6 * Math.sin(tremorPhase + 1.0 + (2 * Math.PI * (p.tremorHz * 0.93) * t) / 1000) * v;
375
+ let side = hh * Math.sin(Math.PI * e) + (drift + tremor + jit) * (0.6 + 0.4 * v);
376
+ side = clamp(side, -6, 6);
377
+ let px, py;
378
+ if (lastLeg && i === n && !settle) {
379
+ px = to.x;
380
+ py = to.y;
381
+ }
382
+ else {
383
+ px = from.x + ux * along - uy * side;
384
+ py = from.y + uy * along + ux * side;
385
+ }
386
+ const sl = dt * lerp(0.88, 1.12, rng());
387
+ out.push({ x: px, y: py, sleepMs: sl });
388
+ t += sl;
389
+ }
390
+ if (!lastLeg && out.length)
391
+ out[out.length - 1].sleepMs += lerp(30, 80, rng()); // notices, stops, pulls back
392
+ }
393
+ if (settle) {
277
394
  // A couple of tiny sub-pixel seating jiggles, then land exactly (slider handle "clunk" into place).
278
395
  const jig = 1 + Math.floor(rng() * 2);
279
396
  for (let i = 0; i < jig; i++) {
280
- out.push({ x: to.x + gaussFrom(rng) * 1.4, y: to.y + gaussFrom(rng) * 1.4, sleepMs: lerp(30, 90, rng()) });
397
+ const jx = to.x + clamp(gaussFrom(rng) * 0.8, -1.5, 1.5);
398
+ const jy = to.y + clamp(gaussFrom(rng) * 0.8, -1.5, 1.5);
399
+ out.push({ x: jx, y: jy, sleepMs: lerp(30, 90, rng()) });
281
400
  }
282
- out.push({ x: to.x, y: to.y, sleepMs: 1000 / p.deviceHz });
401
+ out.push({ x: to.x, y: to.y, sleepMs: stepMs });
283
402
  }
284
403
  return out;
285
404
  }
@@ -1 +1 @@
1
- {"version":3,"file":"motion.js","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,EAAE;AACF,oGAAoG;AACpG,+FAA+F;AAC/F,oGAAoG;AACpG,iGAAiG;AACjG,8FAA8F;AAC9F,EAAE;AACF,qFAAqF;AACrF,sGAAsG;AACtG,0FAA0F;AAC1F,kGAAkG;AAClG,uGAAuG;AACvG,oGAAoG;AACpG,oDAAoD;AACpD,8FAA8F;AAC9F,mGAAmG;AACnG,+FAA+F;AAC/F,6FAA6F;AAC7F,oGAAoG;AACpG,sGAAsG;AACtG,qFAAqF;AACrF,sGAAsG;AACtG,gGAAgG;AAChG,EAAE;AACF,+FAA+F;AAC/F,sGAAsG;AACtG,wFAAwF;AAMxF,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;IACtB,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,IAAiC;IACxD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClG,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,SAAS,CAAC,GAAQ;IAChC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC;QAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AA0CD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAElE,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,IAAsB;IAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO;QACL,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC7B,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAChC,cAAc,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,YAAY,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG;QAC/B,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,GAAG;QACjB,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,GAAG;QACnB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,GAAG;KACnB,CAAC;AACJ,CAAC;AAED;oDACoD;AACpD,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,MAAW,IAAI,CAAC,MAAM;IAC1D,OAAO,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;AAChH,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,MAAW,IAAI,CAAC,MAAM;IACzD,OAAO,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;AAC9G,CAAC;AAED,kGAAkG;AAClG,oGAAoG;AACpG,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC;;;;;6DAK6D;AAC7D,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAKD;;;;;;yDAMyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAA4C,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAE7H;;8FAE8F;AAC9F,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IACpE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,+DAA+D;IAC5G,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAC;IACnF,OAAO,IAAI,CAAC;AACd,CAAC;AAkBD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AACnD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnF,gDAAgD;AAChD,SAAS,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;IACpE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACnF,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,oGAAoG;AACpG,0FAA0F;AAC1F,MAAM,UAAU,GAAG,UAAU,CAAC;AAY9B;;;;;6BAK6B;AAC7B,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7C,CAAC;AAED,yGAAyG;AACzG,uGAAuG;AACvG,iFAAiF;AACjF,MAAM,KAAK,GAAG,GAAG,CAAC;AAElB,kFAAkF;AAClF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAEnD,0FAA0F;AAC1F,SAAS,MAAM,CAAC,GAAW,EAAE,IAAY;IACvC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;oGAGoG;AACpG,SAAS,aAAa,CACpB,GAAW,EAAE,CAAQ,EAAE,CAAQ,EAAE,KAAa,EAAE,CAAU,EAAE,GAAQ,EACpE,EAAU,EAAE,KAA+B,EAAE,GAA6B,EAAE,WAAmB,EAAE,IAAa,EAC9G,OAAe,EAAE,IAAY;IAE7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,kGAAkG;IAClG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtC,qGAAqG;IACrG,gFAAgF;IAChF,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACjF,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACjF,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACpB,8EAA8E;YAC9E,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YACzD,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YACpC,oDAAoD;YACpD,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC9B,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzE,8FAA8F;YAC9F,2FAA2F;YAC3F,uDAAuD;YACvD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;YACzF,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACjF,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAChG,iGAAiG;YACjG,gGAAgG;YAChG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YACvD,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YACvD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,+FAA+F;QAC/F,mGAAmG;QACnG,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC,IAAI,OAAO,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAW,EAAE,EAAS,EAAE,CAAU,EAAE,OAAiB,EAAE;IAC9E,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAAC,OAAO,GAAG,CAAC;IAAC,CAAC;IAExF,oGAAoG;IACpG,mGAAmG;IACnG,8BAA8B;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChF,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzD,qGAAqG;IACrG,0FAA0F;IAC1F,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI;YAChB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QACvF,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACjE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,8FAA8F;QAC9F,mGAAmG;QACnG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,mGAAmG;IACnG,4EAA4E;IAC5E,IAAI,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,GAAG,EAAE,GAAG,GAAG;QAAE,IAAI,GAAG,CAAC,IAAI,CAAC;IAC9B,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzH,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;QAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAC5F,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,gFAAgF;QAChF,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnH,CAAC,GAAG,CAAC,CAAC;IACR,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAW,EAAE,EAAS,EAAE,CAAU,EAAE,OAAwC,EAAE;IACrG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,GAAG,CAAC;IAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7G,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,GAAG,GAAG,CAAC;IACvD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAExC,MAAM,IAAI,GAA4C,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChG,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACnB,MAAM,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;YACzD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3E,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YACnD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;YACzF,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACpF,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACvG,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;YACjF,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAU,EAAE,EAAU,CAAC;YAC3B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;iBACvD,CAAC;gBAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;gBAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC;YAAC,CAAC;YACpF,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC,IAAI,EAAE,CAAC;QACV,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,6BAA6B;IAC/G,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,oGAAoG;QACpG,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,MAAW,IAAI,CAAC,MAAM;IAC1D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;QAC7C,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAID;kGACkG;AAClG,MAAM,UAAU,UAAU,CAAC,GAAQ,EAAE,IAAW,EAAE,CAAU,EAAE,MAAW,IAAI,CAAC,MAAM;IAClF,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,kFAAkF;IAClF,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAC9D,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;IACtD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IACvD,oGAAoG;IACpG,2EAA2E;IAC3E,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACnE,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;KACtE,CAAC;AACJ,CAAC;AAID;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAW,EAAE,EAAY,EAAE,CAAU,EAAE,EAAU,EAAE,MAAW,IAAI,CAAC,MAAM;IACnG,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,gGAAgG;IAChG,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;IACnD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC;IACpD,OAAO,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;QAAC,CAAC;QAC3D,yEAAyE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,GAAG,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC9B,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC;gBACP,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,IAAI,IAAI,MAAM,CAAC;YAAC,OAAO,IAAI,MAAM,CAAC;QACpC,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,56 @@
1
+ export declare const MAX_JUMP_PX = 40;
2
+ export declare const STALL_MS = 60;
3
+ export declare const FAST_PX_PER_MS = 3;
4
+ export declare const IDLE_MS = 40;
5
+ export declare const IDLE_HOP_PX = 20;
6
+ export interface PacedStep {
7
+ x: number;
8
+ y: number;
9
+ sleepMs: number;
10
+ }
11
+ export interface WalkOpts<S extends PacedStep> {
12
+ now?: () => number;
13
+ sleep?: (ms: number) => Promise<unknown>;
14
+ maxJump?: number;
15
+ pinned?: (s: S, i: number) => boolean;
16
+ }
17
+ /** Planned dispatch offsets (ms from the start) of every step, and the planned total. */
18
+ export declare function schedule(steps: readonly PacedStep[]): {
19
+ due: number[];
20
+ total: number;
21
+ };
22
+ /** The step to dispatch next: step i is the first not yet sent, `elapsed` ms have passed. */
23
+ export declare function nextIndex<S extends PacedStep>(steps: readonly S[], due: readonly number[], i: number, last: {
24
+ x: number;
25
+ y: number;
26
+ } | null, elapsed: number, maxJump?: number, pinned?: (s: S, i: number) => boolean): number;
27
+ /** Dispatch `steps` through `move` against a wall clock. Stops at the first move that throws.
28
+ * Resolves to the number of samples dispatched. */
29
+ export declare function walk<S extends PacedStep>(steps: readonly S[], move: (x: number, y: number) => Promise<unknown>, o?: WalkOpts<S>): Promise<number>;
30
+ /** How far inside the viewport a planned path is kept (SC 210 fix 2, verifier B: the planner's overshoot
31
+ * arcs left the window near its edges and the page saw no events while the pointer was outside). */
32
+ export declare const VIEW_MARGIN_PX = 2;
33
+ /** `steps` with every sample but the last moved inside the viewport `vw` x `vh` (`margin` px in). The last
34
+ * sample -- where the move was aimed -- is never changed, and a move aimed outside the viewport is
35
+ * returned as it is. Only coordinates change. Port of _pacing.keep_in_view. */
36
+ export declare function keepInView<S extends PacedStep>(steps: S[], vw: number, vh: number, margin?: number): S[];
37
+ /** The largest hop a SKIP may make between two dispatched points `dtMs` apart: maxJump, and IDLE_HOP_PX
38
+ * after an idle gap. Never more for a longer gap: a walk that fell behind stretches in time instead of
39
+ * catching up with a jump (the planner's own consecutive samples always go out). Port of
40
+ * _pacing._jump_cap. */
41
+ export declare const jumpCap: (maxJump: number, dtMs: number) => number;
42
+ /** px/ms arriving at sample k (0 for the first). */
43
+ export declare function speedAt(steps: readonly PacedStep[], k: number): number;
44
+ /**
45
+ * Cut an ambient plan so it lasts about `ms`. planAmbient keeps adding whole excursions + rests until
46
+ * its budget is spent and draws each rest sample's gap from 0.9-1.4x the frame time it counts, so its
47
+ * plan runs well past what was asked. Of the samples whose end falls in [lo*ms, hi*ms], keep up to the
48
+ * slowest one (inside a rest or the tail of a move). Only a tail is dropped; no sample is changed.
49
+ *
50
+ * The one exception to "about ms": when the whole window lies inside the first excursion (a short ask,
51
+ * ~300 ms, against a ~0.5-1 s glide) every candidate is mid-flight, and a pointer that stops dead at
52
+ * speed is a kinematic no hand produces. Then the cut moves forward to where that move has slowed down
53
+ * (<= 10 % of the plan's peak speed), as long as that is within `stretch` x ms.
54
+ */
55
+ export declare function trimTo<S extends PacedStep>(steps: S[], ms: number, lo?: number, hi?: number, stretch?: number): S[];
56
+ //# sourceMappingURL=pacing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pacing.d.ts","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,WAAW,KAAK,CAAC;AAG9B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAG3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAGhC,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,MAAM,WAAW,SAAS;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAErE,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,SAAS;IAC3C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAKD,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKtF;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAC3C,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC7F,OAAO,EAAE,MAAM,EAAE,OAAO,SAAc,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,OAAqB,GACzF,MAAM,CAQR;AAED;oDACoD;AACpD,wBAAsB,IAAI,CAAC,CAAC,SAAS,SAAS,EAC5C,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAE,QAAQ,CAAC,CAAC,CAAM,GACzF,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;qGACqG;AACrG,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;gFAEgF;AAChF,wBAAgB,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,SAAiB,GAAG,CAAC,EAAE,CAWhH;AAED;;;yBAGyB;AACzB,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,MAAqE,CAAC;AAQ9H,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAItE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,SAAO,EAAE,EAAE,SAAO,EAAE,OAAO,SAAI,GAAG,CAAC,EAAE,CAiC1G"}
package/dist/pacing.js ADDED
@@ -0,0 +1,203 @@
1
+ // Wall-clock pacing for planned pointer paths (mirrors sdk/python/clearcote/_pacing.py).
2
+ //
3
+ // The motion planner (motion.ts planMove / planAmbient) returns samples {x, y, sleepMs} at the
4
+ // persona's device rate (~6-8 ms apart). Walking them as "dispatch, then sleep the planned gap" adds
5
+ // the dispatch round trip to EVERY sample: measured on PRO r38, one mouse.move costs 27 ms median, so a
6
+ // 1.05 s planned glide took 3.5-5.4 s and the page saw ~25 pointermove/s (SC 209).
7
+ //
8
+ // walk() schedules each sample at its planned offset from the start (the cumulative sum of the sleeps
9
+ // before it) and keeps that clock:
10
+ // on time -> sleep until the sample's planned time, then dispatch it;
11
+ // behind -> skip the samples whose time has passed and dispatch the most recent due one, so the
12
+ // path keeps the plan's shape and the move keeps the plan's duration;
13
+ // never skipped: the final sample (the move lands exactly where it was aimed) and a sample marked
14
+ // as changing button state (`pinned`);
15
+ // never a teleport: a skip may not put more than maxJump (40 px) between two dispatched points, and
16
+ // no more than IDLE_HOP_PX (20 px) after IDLE_MS (40 ms) with nothing sent; a longer hop
17
+ // dispatches the in-between sample instead, so a late walk stretches in time rather than
18
+ // jumping (SC 210 lab v2: the old cap, 3 px/ms x the time since the last dispatch, turned
19
+ // slow dispatches under load into hops of 60-103 px a few ms apart; an r40 engine walks
20
+ // any hop >= 24 px after >= 40 ms idle);
21
+ // a stall is a pause: a single dispatch slower than STALL_MS shifts the schedule by the excess
22
+ // instead of being caught up by skipping.
23
+ //
24
+ // Sleeps are local timers, never page.waitForTimeout (a CDP round trip a detector can score).
25
+ // Nothing here changes what the planner returns; only WHEN each sample goes out and which late ones
26
+ // are dropped.
27
+ export const MAX_JUMP_PX = 40;
28
+ // A single dispatch slower than this is a STALL (the page or the box was busy), not latency: nothing
29
+ // reached the page while it lasted, so the plan pauses with it instead of skipping ahead afterwards.
30
+ export const STALL_MS = 60;
31
+ // A fast hand: ~3 px/ms (a quick flick across a 1080p screen in ~0.6 s). No longer a dispatch cap (the
32
+ // hop cap is MAX_JUMP_PX / IDLE_HOP_PX since SC 210 round 2): kept as the speed bound the tests check.
33
+ export const FAST_PX_PER_MS = 3;
34
+ // After this long with nothing dispatched, a skip may hop at most IDLE_HOP_PX: what a hand at a moderate
35
+ // 2.5 px/ms covers in one 125 Hz report (8 ms), and below the 24 px an r40 engine walks.
36
+ export const IDLE_MS = 40;
37
+ export const IDLE_HOP_PX = 20;
38
+ const realNow = () => performance.now();
39
+ const realSleep = (ms) => new Promise((r) => setTimeout(r, Math.max(0, ms)));
40
+ /** Planned dispatch offsets (ms from the start) of every step, and the planned total. */
41
+ export function schedule(steps) {
42
+ const due = [];
43
+ let t = 0;
44
+ for (const s of steps) {
45
+ due.push(t);
46
+ t += Math.max(0, s.sleepMs);
47
+ }
48
+ return { due, total: t };
49
+ }
50
+ /** The step to dispatch next: step i is the first not yet sent, `elapsed` ms have passed. */
51
+ export function nextIndex(steps, due, i, last, elapsed, maxJump = MAX_JUMP_PX, pinned = () => false) {
52
+ const n = steps.length;
53
+ let j = i;
54
+ while (j + 1 < n && due[j + 1] <= elapsed && !pinned(steps[j], j))
55
+ j++;
56
+ if (last) {
57
+ while (j > i && Math.hypot(steps[j].x - last.x, steps[j].y - last.y) > maxJump)
58
+ j--;
59
+ }
60
+ return j;
61
+ }
62
+ /** Dispatch `steps` through `move` against a wall clock. Stops at the first move that throws.
63
+ * Resolves to the number of samples dispatched. */
64
+ export async function walk(steps, move, o = {}) {
65
+ const now = o.now ?? realNow;
66
+ const sleep = o.sleep ?? realSleep;
67
+ const maxJump = o.maxJump ?? MAX_JUMP_PX;
68
+ const pinned = o.pinned ?? (() => false);
69
+ if (!steps.length)
70
+ return 0;
71
+ const { due, total } = schedule(steps);
72
+ let t0 = now();
73
+ let tLast = t0;
74
+ let i = 0, sent = 0;
75
+ let last = null;
76
+ while (i < steps.length) {
77
+ const el = now() - t0;
78
+ if (el < due[i])
79
+ await sleep(due[i] - el);
80
+ else
81
+ i = nextIndex(steps, due, i, last, el, jumpCap(maxJump, now() - tLast), pinned);
82
+ const s = steps[i];
83
+ const tb = now();
84
+ try {
85
+ await move(s.x, s.y);
86
+ }
87
+ catch {
88
+ return sent;
89
+ }
90
+ sent++;
91
+ t0 += stallMs(now() - tb);
92
+ last = { x: s.x, y: s.y };
93
+ tLast = tb;
94
+ i++;
95
+ }
96
+ const el = now() - t0;
97
+ if (el < total)
98
+ await sleep(total - el); // the last sample's own dwell (a settle hold, a frame)
99
+ return sent;
100
+ }
101
+ /** How far inside the viewport a planned path is kept (SC 210 fix 2, verifier B: the planner's overshoot
102
+ * arcs left the window near its edges and the page saw no events while the pointer was outside). */
103
+ export const VIEW_MARGIN_PX = 2;
104
+ /** `steps` with every sample but the last moved inside the viewport `vw` x `vh` (`margin` px in). The last
105
+ * sample -- where the move was aimed -- is never changed, and a move aimed outside the viewport is
106
+ * returned as it is. Only coordinates change. Port of _pacing.keep_in_view. */
107
+ export function keepInView(steps, vw, vh, margin = VIEW_MARGIN_PX) {
108
+ if (!steps.length || !vw || !vh)
109
+ return steps;
110
+ const t = steps[steps.length - 1];
111
+ if (!(t.x >= 0 && t.x <= vw && t.y >= 0 && t.y <= vh))
112
+ return steps;
113
+ const lx = Math.min(margin, t.x), hx = Math.max(vw - margin, t.x);
114
+ const ly = Math.min(margin, t.y), hy = Math.max(vh - margin, t.y);
115
+ return steps.map((s, k) => {
116
+ if (k === steps.length - 1)
117
+ return s;
118
+ const x = Math.min(Math.max(s.x, lx), hx), y = Math.min(Math.max(s.y, ly), hy);
119
+ return x === s.x && y === s.y ? s : { ...s, x, y };
120
+ });
121
+ }
122
+ /** The largest hop a SKIP may make between two dispatched points `dtMs` apart: maxJump, and IDLE_HOP_PX
123
+ * after an idle gap. Never more for a longer gap: a walk that fell behind stretches in time instead of
124
+ * catching up with a jump (the planner's own consecutive samples always go out). Port of
125
+ * _pacing._jump_cap. */
126
+ export const jumpCap = (maxJump, dtMs) => (dtMs < IDLE_MS ? maxJump : Math.min(maxJump, IDLE_HOP_PX));
127
+ // Measured on PRO r38 under load: one move answered after 523 ms. Catching that up by skipping coarsened
128
+ // the rest of the glide to maximum hops, and across the fixture's iframe the page saw a 110 px jump. A
129
+ // single dispatch slower than STALL_MS is a stall: nothing reached the page while it lasted, so the plan
130
+ // pauses with it and only STALL_MS is caught up.
131
+ const stallMs = (took) => (took > STALL_MS ? took - STALL_MS : 0);
132
+ /** px/ms arriving at sample k (0 for the first). */
133
+ export function speedAt(steps, k) {
134
+ if (k === 0)
135
+ return 0;
136
+ const a = steps[k - 1], b = steps[k];
137
+ return Math.hypot(b.x - a.x, b.y - a.y) / Math.max(1e-3, a.sleepMs);
138
+ }
139
+ /**
140
+ * Cut an ambient plan so it lasts about `ms`. planAmbient keeps adding whole excursions + rests until
141
+ * its budget is spent and draws each rest sample's gap from 0.9-1.4x the frame time it counts, so its
142
+ * plan runs well past what was asked. Of the samples whose end falls in [lo*ms, hi*ms], keep up to the
143
+ * slowest one (inside a rest or the tail of a move). Only a tail is dropped; no sample is changed.
144
+ *
145
+ * The one exception to "about ms": when the whole window lies inside the first excursion (a short ask,
146
+ * ~300 ms, against a ~0.5-1 s glide) every candidate is mid-flight, and a pointer that stops dead at
147
+ * speed is a kinematic no hand produces. Then the cut moves forward to where that move has slowed down
148
+ * (<= 10 % of the plan's peak speed), as long as that is within `stretch` x ms.
149
+ */
150
+ export function trimTo(steps, ms, lo = 0.85, hi = 1.10, stretch = 2) {
151
+ if (!steps.length || ms <= 0)
152
+ return steps;
153
+ const { due, total } = schedule(steps);
154
+ if (total <= hi * ms)
155
+ return steps;
156
+ const end = steps.map((s, k) => due[k] + Math.max(0, s.sleepMs));
157
+ let best = -1, bestV = Infinity;
158
+ for (let k = 0; k < steps.length; k++) {
159
+ if (end[k] < lo * ms)
160
+ continue;
161
+ if (end[k] > hi * ms)
162
+ break;
163
+ const v = speedAt(steps, k);
164
+ if (v < bestV) {
165
+ best = k;
166
+ bestV = v;
167
+ }
168
+ }
169
+ if (best < 0) {
170
+ best = 0;
171
+ for (let k = 0; k < steps.length; k++)
172
+ if (end[k] <= hi * ms)
173
+ best = k;
174
+ }
175
+ let peak = 0;
176
+ for (let k = 0; k < steps.length; k++)
177
+ peak = Math.max(peak, speedAt(steps, k));
178
+ if (peak > 0 && speedAt(steps, best) > 0.3 * peak) {
179
+ // First the rest of the +-20 % the caller was promised, then forward.
180
+ let wk = -1, wv = Infinity;
181
+ for (let k = 0; k < steps.length; k++) {
182
+ if (end[k] < 0.8 * ms || end[k] > 1.15 * ms)
183
+ continue;
184
+ const v = speedAt(steps, k);
185
+ if (v < wv) {
186
+ wk = k;
187
+ wv = v;
188
+ }
189
+ }
190
+ if (wk >= 0 && wv <= 0.3 * peak)
191
+ return steps.slice(0, wk + 1);
192
+ for (let k = best + 1; k < steps.length; k++) {
193
+ if (end[k] > stretch * ms)
194
+ break;
195
+ if (speedAt(steps, k) <= 0.1 * peak) {
196
+ best = k;
197
+ break;
198
+ }
199
+ }
200
+ }
201
+ return steps.slice(0, best + 1);
202
+ }
203
+ //# sourceMappingURL=pacing.js.map