pi-ghost-autocomplete 0.3.2 → 0.4.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 (168) hide show
  1. package/LICENSE +561 -0
  2. package/README.md +464 -331
  3. package/dist/bench-cli.js +1 -123
  4. package/dist/bench.d.ts +7 -3
  5. package/dist/bench.js +1 -522
  6. package/dist/config.d.ts +4 -1
  7. package/dist/context-aggregator.d.ts +4 -1
  8. package/dist/cycle-manager.d.ts +2 -21
  9. package/dist/entropy-stop.d.ts +4 -1
  10. package/dist/eval-dataset.d.ts +2 -13
  11. package/dist/fuzzy-matcher.d.ts +4 -1
  12. package/dist/ghost-editor.d.ts +11 -2
  13. package/dist/index.d.ts +4 -1
  14. package/dist/index.js +1 -289
  15. package/dist/intent.d.ts +179 -0
  16. package/dist/metrics.d.ts +4 -1
  17. package/dist/path-index.d.ts +4 -1
  18. package/dist/path-matcher.d.ts +4 -1
  19. package/dist/profile-store.d.ts +4 -1
  20. package/dist/profile.d.ts +2 -20
  21. package/dist/providers/cloud-provider.d.ts +4 -1
  22. package/dist/providers/local-provider.d.ts +4 -1
  23. package/dist/providers/openai-compat-provider.d.ts +24 -1
  24. package/dist/providers/race.d.ts +4 -1
  25. package/dist/providers/types.d.ts +13 -1
  26. package/dist/recent-paths.d.ts +4 -1
  27. package/dist/replay-cli.js +1 -166
  28. package/dist/replay.d.ts +2 -7
  29. package/package.json +90 -80
  30. package/dist/bench-cli.d.ts +0 -3
  31. package/dist/bench-cli.d.ts.map +0 -1
  32. package/dist/bench-cli.js.map +0 -1
  33. package/dist/bench.d.ts.map +0 -1
  34. package/dist/bench.js.map +0 -1
  35. package/dist/cache.d.ts +0 -124
  36. package/dist/cache.d.ts.map +0 -1
  37. package/dist/cache.js +0 -173
  38. package/dist/cache.js.map +0 -1
  39. package/dist/candidate-rerank.d.ts +0 -57
  40. package/dist/candidate-rerank.d.ts.map +0 -1
  41. package/dist/candidate-rerank.js +0 -78
  42. package/dist/candidate-rerank.js.map +0 -1
  43. package/dist/config.d.ts.map +0 -1
  44. package/dist/config.js +0 -317
  45. package/dist/config.js.map +0 -1
  46. package/dist/context-aggregator.d.ts.map +0 -1
  47. package/dist/context-aggregator.js +0 -87
  48. package/dist/context-aggregator.js.map +0 -1
  49. package/dist/context-selector.d.ts +0 -128
  50. package/dist/context-selector.d.ts.map +0 -1
  51. package/dist/context-selector.js +0 -300
  52. package/dist/context-selector.js.map +0 -1
  53. package/dist/cycle-manager.d.ts.map +0 -1
  54. package/dist/cycle-manager.js +0 -168
  55. package/dist/cycle-manager.js.map +0 -1
  56. package/dist/edit-history-ring.d.ts +0 -148
  57. package/dist/edit-history-ring.d.ts.map +0 -1
  58. package/dist/edit-history-ring.js +0 -262
  59. package/dist/edit-history-ring.js.map +0 -1
  60. package/dist/entropy-stop.d.ts.map +0 -1
  61. package/dist/entropy-stop.js +0 -141
  62. package/dist/entropy-stop.js.map +0 -1
  63. package/dist/eval-dataset.d.ts.map +0 -1
  64. package/dist/eval-dataset.js +0 -127
  65. package/dist/eval-dataset.js.map +0 -1
  66. package/dist/fast-path-engine.d.ts +0 -286
  67. package/dist/fast-path-engine.d.ts.map +0 -1
  68. package/dist/fast-path-engine.js +0 -341
  69. package/dist/fast-path-engine.js.map +0 -1
  70. package/dist/fuzzy-matcher.d.ts.map +0 -1
  71. package/dist/fuzzy-matcher.js +0 -162
  72. package/dist/fuzzy-matcher.js.map +0 -1
  73. package/dist/ghost-editor.d.ts.map +0 -1
  74. package/dist/ghost-editor.js +0 -1491
  75. package/dist/ghost-editor.js.map +0 -1
  76. package/dist/index.d.ts.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/keystroke-timer.d.ts +0 -59
  79. package/dist/keystroke-timer.d.ts.map +0 -1
  80. package/dist/keystroke-timer.js +0 -94
  81. package/dist/keystroke-timer.js.map +0 -1
  82. package/dist/metrics-builder.d.ts +0 -71
  83. package/dist/metrics-builder.d.ts.map +0 -1
  84. package/dist/metrics-builder.js +0 -71
  85. package/dist/metrics-builder.js.map +0 -1
  86. package/dist/metrics.d.ts.map +0 -1
  87. package/dist/metrics.js +0 -212
  88. package/dist/metrics.js.map +0 -1
  89. package/dist/path-index.d.ts.map +0 -1
  90. package/dist/path-index.js +0 -148
  91. package/dist/path-index.js.map +0 -1
  92. package/dist/path-matcher.d.ts.map +0 -1
  93. package/dist/path-matcher.js +0 -88
  94. package/dist/path-matcher.js.map +0 -1
  95. package/dist/profile-store.d.ts.map +0 -1
  96. package/dist/profile-store.js +0 -199
  97. package/dist/profile-store.js.map +0 -1
  98. package/dist/profile.d.ts.map +0 -1
  99. package/dist/profile.js +0 -434
  100. package/dist/profile.js.map +0 -1
  101. package/dist/providers/cloud-provider.d.ts.map +0 -1
  102. package/dist/providers/cloud-provider.js +0 -109
  103. package/dist/providers/cloud-provider.js.map +0 -1
  104. package/dist/providers/local-provider.d.ts.map +0 -1
  105. package/dist/providers/local-provider.js +0 -48
  106. package/dist/providers/local-provider.js.map +0 -1
  107. package/dist/providers/openai-compat-provider.d.ts.map +0 -1
  108. package/dist/providers/openai-compat-provider.js +0 -215
  109. package/dist/providers/openai-compat-provider.js.map +0 -1
  110. package/dist/providers/openai-completions-runner.d.ts +0 -52
  111. package/dist/providers/openai-completions-runner.d.ts.map +0 -1
  112. package/dist/providers/openai-completions-runner.js +0 -141
  113. package/dist/providers/openai-completions-runner.js.map +0 -1
  114. package/dist/providers/race.d.ts.map +0 -1
  115. package/dist/providers/race.js +0 -441
  116. package/dist/providers/race.js.map +0 -1
  117. package/dist/providers/truncate.d.ts +0 -7
  118. package/dist/providers/truncate.d.ts.map +0 -1
  119. package/dist/providers/truncate.js +0 -57
  120. package/dist/providers/truncate.js.map +0 -1
  121. package/dist/providers/types.d.ts.map +0 -1
  122. package/dist/providers/types.js +0 -60
  123. package/dist/providers/types.js.map +0 -1
  124. package/dist/provisional-manager.d.ts +0 -93
  125. package/dist/provisional-manager.d.ts.map +0 -1
  126. package/dist/provisional-manager.js +0 -98
  127. package/dist/provisional-manager.js.map +0 -1
  128. package/dist/provisional.d.ts +0 -150
  129. package/dist/provisional.d.ts.map +0 -1
  130. package/dist/provisional.js +0 -238
  131. package/dist/provisional.js.map +0 -1
  132. package/dist/recent-paths.d.ts.map +0 -1
  133. package/dist/recent-paths.js +0 -114
  134. package/dist/recent-paths.js.map +0 -1
  135. package/dist/regret-tracker.d.ts +0 -84
  136. package/dist/regret-tracker.d.ts.map +0 -1
  137. package/dist/regret-tracker.js +0 -145
  138. package/dist/regret-tracker.js.map +0 -1
  139. package/dist/replay-cli.d.ts +0 -13
  140. package/dist/replay-cli.d.ts.map +0 -1
  141. package/dist/replay-cli.js.map +0 -1
  142. package/dist/replay.d.ts.map +0 -1
  143. package/dist/replay.js +0 -225
  144. package/dist/replay.js.map +0 -1
  145. package/dist/reranker.d.ts +0 -181
  146. package/dist/reranker.d.ts.map +0 -1
  147. package/dist/reranker.js +0 -324
  148. package/dist/reranker.js.map +0 -1
  149. package/dist/session-trie.d.ts +0 -103
  150. package/dist/session-trie.d.ts.map +0 -1
  151. package/dist/session-trie.js +0 -280
  152. package/dist/session-trie.js.map +0 -1
  153. package/dist/speculative.d.ts +0 -74
  154. package/dist/speculative.d.ts.map +0 -1
  155. package/dist/speculative.js +0 -107
  156. package/dist/speculative.js.map +0 -1
  157. package/dist/tool-summarize.d.ts +0 -40
  158. package/dist/tool-summarize.d.ts.map +0 -1
  159. package/dist/tool-summarize.js +0 -245
  160. package/dist/tool-summarize.js.map +0 -1
  161. package/dist/trie-sanitize.d.ts +0 -22
  162. package/dist/trie-sanitize.d.ts.map +0 -1
  163. package/dist/trie-sanitize.js +0 -142
  164. package/dist/trie-sanitize.js.map +0 -1
  165. package/dist/versions.d.ts +0 -23
  166. package/dist/versions.d.ts.map +0 -1
  167. package/dist/versions.js +0 -31
  168. package/dist/versions.js.map +0 -1
package/dist/bench.js CHANGED
@@ -1,522 +1 @@
1
- import { readFile } from "node:fs/promises";
2
- import { COMPLETION_MODES } from "./metrics.js";
3
- /**
4
- * PRD §Success Metrics initial candidate thresholds. These are red/green
5
- * targets, not gates — the harness reports compliance but never errors out.
6
- */
7
- export const THRESHOLDS = {
8
- llmP50Ms: 300,
9
- llmP95Ms: 700,
10
- deterministicP50Ms: 30,
11
- validOutputRate: 0.85,
12
- badOutputRate: 0.15,
13
- /**
14
- * Enhancement #6 hard gate: fraction of accepted-or-shown ghosts whose
15
- * `estimatedTimeSavedMs` came out negative — i.e. the user spent more
16
- * time waiting for the ghost than the keystrokes the accept could ever
17
- * save. <10% is healthy, 10–20% warns, ≥20% fails. Calibrated against
18
- * Yeh/Laban "saved-time" surveys and our own M5 data.
19
- */
20
- negativeTimeSavedYellow: 0.10,
21
- negativeTimeSavedRed: 0.20,
22
- };
23
- /**
24
- * Read JSONL metrics records from `path`. Skips malformed lines and counts
25
- * them in `parseErrors`. Never throws on malformed input — a benchmark harness
26
- * should degrade gracefully so partial logs still produce a report.
27
- */
28
- export async function loadMetrics(path) {
29
- const text = await readFile(path, "utf8");
30
- return parseMetricsText(text);
31
- }
32
- export function parseMetricsText(text) {
33
- const records = [];
34
- let parseErrors = 0;
35
- for (const line of text.split(/\r?\n/)) {
36
- if (!line.trim())
37
- continue;
38
- try {
39
- const rec = JSON.parse(line);
40
- if (isMetricsRecord(rec))
41
- records.push(rec);
42
- else
43
- parseErrors++;
44
- }
45
- catch {
46
- parseErrors++;
47
- }
48
- }
49
- return { records, parseErrors };
50
- }
51
- const KNOWN_MODES = new Set(COMPLETION_MODES);
52
- function isMetricsRecord(v) {
53
- if (!v || typeof v !== "object")
54
- return false;
55
- const r = v;
56
- return (typeof r.ts === "number" &&
57
- typeof r.requestId === "string" &&
58
- typeof r.mode === "string" &&
59
- KNOWN_MODES.has(r.mode) &&
60
- typeof r.result === "string");
61
- }
62
- /**
63
- * Quantile via nearest-rank on a sorted ascending array. Returns 0 on empty.
64
- * `q` in [0, 1]. We don't interpolate — sample sizes here are tens-to-low-
65
- * thousands and integer ms values, interpolation buys nothing.
66
- */
67
- export function quantile(sorted, q) {
68
- if (sorted.length === 0)
69
- return 0;
70
- if (q <= 0)
71
- return sorted[0] ?? 0;
72
- if (q >= 1)
73
- return sorted[sorted.length - 1] ?? 0;
74
- const idx = Math.min(sorted.length - 1, Math.ceil(q * sorted.length) - 1);
75
- return sorted[idx] ?? 0;
76
- }
77
- /**
78
- * Build a {@link BenchmarkReport} from parsed records. Pure: no I/O.
79
- *
80
- * For LLM mode, providers are aggregated from each record's `providers[]`
81
- * trace so race members are tracked individually. For deterministic mode the
82
- * single-element providers[] is used; provider name corresponds to the band
83
- * (path-prefix / basename-prefix / fuzzy-basename / fuzzy-path).
84
- */
85
- export function summarize(records, source = "<inline>", parseErrors = 0) {
86
- const det = records.filter((r) => r.mode === "deterministic");
87
- const llm = records.filter((r) => r.mode === "llm");
88
- const deterministic = summarizeMode("deterministic", det);
89
- const llmStats = summarizeMode("llm", llm);
90
- const byMode = summarizeAllModes(records);
91
- const advanced = summarizeAdvanced(records);
92
- return {
93
- source,
94
- records: records.length,
95
- parseErrors,
96
- deterministic,
97
- llm: llmStats,
98
- byMode,
99
- advanced,
100
- thresholds: checkThresholds(deterministic, llmStats, advanced),
101
- };
102
- }
103
- function summarizeAllModes(records) {
104
- const groups = new Map();
105
- for (const r of records) {
106
- const mode = r.mode;
107
- let arr = groups.get(mode);
108
- if (!arr) {
109
- arr = [];
110
- groups.set(mode, arr);
111
- }
112
- arr.push(r);
113
- }
114
- const out = [];
115
- for (const [mode, recs] of groups) {
116
- out.push(summarizeMode(mode, recs));
117
- }
118
- out.sort((a, b) => a.mode.localeCompare(b.mode));
119
- return out;
120
- }
121
- function summarizeAdvanced(records) {
122
- const ttfts = [];
123
- const timeSaveds = [];
124
- let timeSavedTotal = 0;
125
- let negativeTimeSavedCount = 0;
126
- let shownCount = 0;
127
- let savedAt1 = 0;
128
- let savedAt3 = 0;
129
- let savedAt5 = 0;
130
- let acceptedCount = 0;
131
- let regretCount = 0;
132
- let provisionalShown = 0;
133
- let provisionalAccepted = 0;
134
- let provisionalSwapped = 0;
135
- let provisionalCorrect = 0;
136
- let provisionalSwapMsTotal = 0;
137
- let provisionalFlicker = 0;
138
- const provisionalBySource = {};
139
- let dismissedCount = 0;
140
- let shortHoverDismissCount = 0;
141
- let staleCount = 0;
142
- let typedPastDivergentCount = 0;
143
- for (const r of records) {
144
- if (typeof r.ttftMs === "number")
145
- ttfts.push(r.ttftMs);
146
- if (typeof r.estimatedTimeSavedMs === "number") {
147
- timeSaveds.push(r.estimatedTimeSavedMs);
148
- timeSavedTotal += r.estimatedTimeSavedMs;
149
- if (r.estimatedTimeSavedMs < 0)
150
- negativeTimeSavedCount++;
151
- }
152
- const accepted = r.acceptance === "accepted" || r.acceptance === "accepted-partial";
153
- if (accepted) {
154
- acceptedCount++;
155
- if (r.acceptRegret === true)
156
- regretCount++;
157
- }
158
- if (r.acceptance === "dismissed") {
159
- dismissedCount++;
160
- if (r.shortHoverDismiss === true)
161
- shortHoverDismissCount++;
162
- }
163
- if (r.acceptance === "stale") {
164
- staleCount++;
165
- if (r.typedPastDivergent === true)
166
- typedPastDivergentCount++;
167
- }
168
- if (r.mode === "provisional" && r.shown) {
169
- provisionalShown++;
170
- if (accepted)
171
- provisionalAccepted++;
172
- // Provider name format: `provisional-${source}` where source ∈
173
- // {trie, profile-accept, session-cache}.
174
- const winner = r.winner ?? "";
175
- if (winner.startsWith("provisional-")) {
176
- const src = winner.slice("provisional-".length);
177
- provisionalBySource[src] = (provisionalBySource[src] ?? 0) + 1;
178
- }
179
- }
180
- if (typeof r.provisionalSwapMs === "number") {
181
- provisionalSwapped++;
182
- provisionalSwapMsTotal += r.provisionalSwapMs;
183
- if (r.provisionalWasCorrect === true)
184
- provisionalCorrect++;
185
- if (r.provisionalSwapFlicker === true)
186
- provisionalFlicker++;
187
- }
188
- if (r.shown) {
189
- shownCount++;
190
- if (accepted) {
191
- const rank = r.candidateRank ?? 0;
192
- if (rank < 1)
193
- savedAt1++;
194
- if (rank < 3)
195
- savedAt3++;
196
- if (rank < 5)
197
- savedAt5++;
198
- }
199
- }
200
- }
201
- const adv = {};
202
- if (ttfts.length > 0) {
203
- ttfts.sort((a, b) => a - b);
204
- adv.ttftMs = { p50: quantile(ttfts, 0.5), p95: quantile(ttfts, 0.95), n: ttfts.length };
205
- }
206
- if (timeSaveds.length > 0) {
207
- timeSaveds.sort((a, b) => a - b);
208
- adv.timeSavedMs = {
209
- p50: quantile(timeSaveds, 0.5),
210
- p95: quantile(timeSaveds, 0.95),
211
- total: timeSavedTotal,
212
- n: timeSaveds.length,
213
- };
214
- const fraction = negativeTimeSavedCount / timeSaveds.length;
215
- adv.negativeTimeSaved = {
216
- count: negativeTimeSavedCount,
217
- fraction,
218
- n: timeSaveds.length,
219
- severity: fraction >= THRESHOLDS.negativeTimeSavedRed
220
- ? "red"
221
- : fraction >= THRESHOLDS.negativeTimeSavedYellow
222
- ? "yellow"
223
- : "ok",
224
- };
225
- }
226
- if (acceptedCount > 0) {
227
- adv.acceptRegretRate = {
228
- rate: regretCount / acceptedCount,
229
- n: acceptedCount,
230
- };
231
- }
232
- if (dismissedCount > 0) {
233
- adv.shortHoverDismissRate = {
234
- rate: shortHoverDismissCount / dismissedCount,
235
- n: dismissedCount,
236
- };
237
- }
238
- if (staleCount > 0) {
239
- adv.typedPastDivergentRate = {
240
- rate: typedPastDivergentCount / staleCount,
241
- n: staleCount,
242
- };
243
- }
244
- if (provisionalShown > 0 || provisionalSwapped > 0) {
245
- adv.provisional = {
246
- shown: provisionalShown,
247
- swapped: provisionalSwapped,
248
- correctRate: provisionalSwapped > 0 ? provisionalCorrect / provisionalSwapped : 0,
249
- meanSwapMs: provisionalSwapped > 0 ? provisionalSwapMsTotal / provisionalSwapped : 0,
250
- ...(provisionalSwapped > 0
251
- ? { flickerRate: provisionalFlicker / provisionalSwapped }
252
- : {}),
253
- ...(Object.keys(provisionalBySource).length > 0
254
- ? { bySource: provisionalBySource }
255
- : {}),
256
- ...(provisionalShown > 0
257
- ? { acceptRate: provisionalAccepted / provisionalShown }
258
- : {}),
259
- };
260
- }
261
- if (shownCount > 0) {
262
- // Denominator is total SHOWN ghosts (not just accepts). This measures
263
- // "of opportunities, how many landed a useful suggestion at rank ≤k" —
264
- // product-level usefulness. A different metric — "of accepts, what
265
- // rank did the user pick" — would use `accepted` as the denominator;
266
- // when M3 word-accept lands, we can publish both.
267
- adv.savedAt1 = savedAt1 / shownCount;
268
- adv.savedAt3 = savedAt3 / shownCount;
269
- adv.savedAt5 = savedAt5 / shownCount;
270
- }
271
- return adv;
272
- }
273
- function summarizeMode(mode, records) {
274
- const byProvider = new Map();
275
- for (const r of records) {
276
- if (!r.providers)
277
- continue;
278
- for (const p of r.providers) {
279
- let arr = byProvider.get(p.provider);
280
- if (!arr) {
281
- arr = [];
282
- byProvider.set(p.provider, arr);
283
- }
284
- arr.push(p);
285
- }
286
- }
287
- const providers = [];
288
- for (const [provider, entries] of byProvider) {
289
- providers.push(buildProviderStats(provider, entries));
290
- }
291
- providers.sort((a, b) => a.provider.localeCompare(b.provider));
292
- const shown = records.filter((r) => r.shown).length;
293
- const accepted = countAcceptance(records, "accepted");
294
- const dismissed = countAcceptance(records, "dismissed");
295
- const stale = countAcceptance(records, "stale");
296
- const expired = countAcceptance(records, "expired");
297
- return {
298
- mode,
299
- count: records.length,
300
- shown,
301
- accepted,
302
- dismissed,
303
- stale,
304
- expired,
305
- acceptanceRate: shown > 0 ? accepted / shown : 0,
306
- providers,
307
- };
308
- }
309
- function countAcceptance(records, outcome) {
310
- let n = 0;
311
- for (const r of records)
312
- if (r.acceptance === outcome)
313
- n++;
314
- return n;
315
- }
316
- function buildProviderStats(provider, entries) {
317
- const latencies = entries.map((e) => e.latencyMs).sort((a, b) => a - b);
318
- const counts = {
319
- produced: 0,
320
- empty: 0,
321
- rejected: 0,
322
- aborted: 0,
323
- error: 0,
324
- };
325
- for (const e of entries)
326
- counts[e.result]++;
327
- const valid = counts.produced;
328
- const bad = counts.empty + counts.rejected + counts.error;
329
- return {
330
- provider,
331
- count: entries.length,
332
- produced: counts.produced,
333
- empty: counts.empty,
334
- rejected: counts.rejected,
335
- aborted: counts.aborted,
336
- error: counts.error,
337
- latencyMs: {
338
- p50: quantile(latencies, 0.5),
339
- p95: quantile(latencies, 0.95),
340
- p99: quantile(latencies, 0.99),
341
- },
342
- validRate: entries.length > 0 ? valid / entries.length : 0,
343
- badRate: entries.length > 0 ? bad / entries.length : 0,
344
- };
345
- }
346
- function checkThresholds(det, llm, adv) {
347
- const out = [];
348
- for (const p of det.providers) {
349
- out.push({
350
- name: `deterministic[${p.provider}] p50 latency`,
351
- target: `< ${THRESHOLDS.deterministicP50Ms}ms`,
352
- observed: `${p.latencyMs.p50}ms`,
353
- pass: p.latencyMs.p50 < THRESHOLDS.deterministicP50Ms,
354
- });
355
- }
356
- for (const p of llm.providers) {
357
- out.push({
358
- name: `llm[${p.provider}] p50 latency`,
359
- target: `< ${THRESHOLDS.llmP50Ms}ms`,
360
- observed: `${p.latencyMs.p50}ms`,
361
- pass: p.latencyMs.p50 < THRESHOLDS.llmP50Ms,
362
- });
363
- out.push({
364
- name: `llm[${p.provider}] p95 latency`,
365
- target: `< ${THRESHOLDS.llmP95Ms}ms`,
366
- observed: `${p.latencyMs.p95}ms`,
367
- pass: p.latencyMs.p95 < THRESHOLDS.llmP95Ms,
368
- });
369
- out.push({
370
- name: `llm[${p.provider}] valid-output rate`,
371
- target: `>= ${(THRESHOLDS.validOutputRate * 100).toFixed(0)}%`,
372
- observed: `${(p.validRate * 100).toFixed(1)}%`,
373
- pass: p.validRate >= THRESHOLDS.validOutputRate,
374
- });
375
- out.push({
376
- name: `llm[${p.provider}] bad-output rate`,
377
- target: `<= ${(THRESHOLDS.badOutputRate * 100).toFixed(0)}%`,
378
- observed: `${(p.badRate * 100).toFixed(1)}%`,
379
- pass: p.badRate <= THRESHOLDS.badOutputRate,
380
- });
381
- }
382
- if (adv.negativeTimeSaved) {
383
- const nt = adv.negativeTimeSaved;
384
- const obs = `${(nt.fraction * 100).toFixed(1)}%`;
385
- const target = `< ${(THRESHOLDS.negativeTimeSavedRed * 100).toFixed(0)}%`;
386
- // PASS when below the yellow line; WARN between yellow and red (still
387
- // `pass: true` so CI doesn't fail on borderline runs); FAIL at/above red.
388
- const entry = {
389
- name: "negativeTimeSavedFraction",
390
- target,
391
- observed: obs,
392
- pass: nt.severity !== "red",
393
- };
394
- if (nt.severity === "yellow")
395
- entry.severity = "warn";
396
- out.push(entry);
397
- }
398
- return out;
399
- }
400
- /**
401
- * Render a {@link BenchmarkReport} as a fixed-width plain-text table.
402
- * Output is line-based and ASCII-safe so it pipes cleanly through `less`,
403
- * email, or PR descriptions.
404
- */
405
- export function formatReport(report) {
406
- const lines = [];
407
- lines.push("Pi Ghost Benchmark Report");
408
- lines.push("=========================");
409
- lines.push(`source: ${report.source}`);
410
- lines.push(`records: ${report.records}`);
411
- if (report.parseErrors > 0)
412
- lines.push(`parse errors: ${report.parseErrors}`);
413
- lines.push("");
414
- lines.push(`Deterministic (n=${report.deterministic.count})`);
415
- lines.push(` shown=${report.deterministic.shown} accepted=${report.deterministic.accepted} dismissed=${report.deterministic.dismissed} stale=${report.deterministic.stale} expired=${report.deterministic.expired} accept-rate=${(report.deterministic.acceptanceRate * 100).toFixed(1)}%`);
416
- for (const p of report.deterministic.providers) {
417
- lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
418
- }
419
- lines.push("");
420
- lines.push(`LLM (n=${report.llm.count})`);
421
- lines.push(` shown=${report.llm.shown} accepted=${report.llm.accepted} dismissed=${report.llm.dismissed} stale=${report.llm.stale} expired=${report.llm.expired} accept-rate=${(report.llm.acceptanceRate * 100).toFixed(1)}%`);
422
- for (const p of report.llm.providers) {
423
- lines.push(` - ${p.provider.padEnd(18)} ${formatProviderLatency(p)}`);
424
- }
425
- const extraModes = report.byMode.filter((m) => m.mode !== "deterministic" && m.mode !== "llm" && m.count > 0);
426
- if (extraModes.length > 0) {
427
- lines.push("");
428
- lines.push("Other modes:");
429
- for (const m of extraModes) {
430
- lines.push(` ${m.mode.padEnd(18)} n=${m.count} shown=${m.shown} accepted=${m.accepted} accept-rate=${(m.acceptanceRate * 100).toFixed(1)}%`);
431
- }
432
- }
433
- const adv = report.advanced;
434
- const hasAdvanced = adv.ttftMs ||
435
- adv.timeSavedMs ||
436
- adv.negativeTimeSaved ||
437
- adv.acceptRegretRate ||
438
- adv.shortHoverDismissRate ||
439
- adv.typedPastDivergentRate ||
440
- adv.provisional ||
441
- adv.savedAt1 !== undefined;
442
- if (hasAdvanced) {
443
- lines.push("");
444
- lines.push("Advanced (M5a fields):");
445
- if (adv.ttftMs) {
446
- lines.push(` TTFT n=${adv.ttftMs.n} p50=${adv.ttftMs.p50}ms p95=${adv.ttftMs.p95}ms`);
447
- }
448
- if (adv.timeSavedMs) {
449
- lines.push(` time-saved n=${adv.timeSavedMs.n} p50=${adv.timeSavedMs.p50}ms p95=${adv.timeSavedMs.p95}ms total=${(adv.timeSavedMs.total / 1000).toFixed(1)}s`);
450
- }
451
- if (adv.negativeTimeSaved) {
452
- const nt = adv.negativeTimeSaved;
453
- const sevTag = nt.severity === "red" ? " [RED]" : nt.severity === "yellow" ? " [YELLOW]" : "";
454
- lines.push(` neg-time-saved n=${nt.n} count=${nt.count} fraction=${(nt.fraction * 100).toFixed(1)}%${sevTag}`);
455
- }
456
- if (adv.acceptRegretRate) {
457
- lines.push(` accept-regret n=${adv.acceptRegretRate.n} rate=${(adv.acceptRegretRate.rate * 100).toFixed(1)}%`);
458
- }
459
- if (adv.shortHoverDismissRate) {
460
- lines.push(` short-hover n=${adv.shortHoverDismissRate.n} rate=${(adv.shortHoverDismissRate.rate * 100).toFixed(1)}%`);
461
- }
462
- if (adv.typedPastDivergentRate) {
463
- lines.push(` typed-past n=${adv.typedPastDivergentRate.n} rate=${(adv.typedPastDivergentRate.rate * 100).toFixed(1)}%`);
464
- }
465
- if (adv.provisional) {
466
- const flicker = adv.provisional.flickerRate !== undefined
467
- ? ` flicker=${(adv.provisional.flickerRate * 100).toFixed(1)}%`
468
- : "";
469
- const accept = adv.provisional.acceptRate !== undefined
470
- ? ` accept=${(adv.provisional.acceptRate * 100).toFixed(1)}%`
471
- : "";
472
- lines.push(` provisional shown=${adv.provisional.shown} swapped=${adv.provisional.swapped} correctRate=${(adv.provisional.correctRate * 100).toFixed(1)}% meanSwap=${adv.provisional.meanSwapMs.toFixed(0)}ms${flicker}${accept}`);
473
- if (adv.provisional.bySource) {
474
- const parts = Object.entries(adv.provisional.bySource)
475
- .sort((a, b) => b[1] - a[1])
476
- .map(([src, n]) => `${src}=${n}`)
477
- .join(" ");
478
- lines.push(` bySource: ${parts}`);
479
- }
480
- }
481
- if (adv.savedAt1 !== undefined) {
482
- lines.push(` saved@1=${(adv.savedAt1 * 100).toFixed(1)}% @3=${((adv.savedAt3 ?? 0) * 100).toFixed(1)}% @5=${((adv.savedAt5 ?? 0) * 100).toFixed(1)}%`);
483
- }
484
- }
485
- lines.push("");
486
- lines.push("Thresholds:");
487
- for (const t of report.thresholds) {
488
- const mark = !t.pass ? "[FAIL]" : t.severity === "warn" ? "[WARN]" : "[PASS]";
489
- lines.push(` ${mark} ${t.name.padEnd(40)} target ${t.target.padEnd(10)} got ${t.observed}`);
490
- }
491
- return lines.join("\n");
492
- }
493
- function formatProviderLatency(p) {
494
- return `n=${p.count} p50=${p.latencyMs.p50}ms p95=${p.latencyMs.p95}ms p99=${p.latencyMs.p99}ms valid=${(p.validRate * 100).toFixed(1)}% bad=${(p.badRate * 100).toFixed(1)}%`;
495
- }
496
- /**
497
- * One-shot helper: load a JSONL file and produce a report. Used by the CLI.
498
- */
499
- export async function runBenchmark(path) {
500
- const { records, parseErrors } = await loadMetrics(path);
501
- return summarize(records, path, parseErrors);
502
- }
503
- /**
504
- * Enhancement #6: a single rendered "frame" for `pi-ghost-bench --live`.
505
- * The frame is a self-contained block of text — caller clears the screen
506
- * and prints it on every metrics-file change. ANSI escapes are emitted by
507
- * the CLI, not this helper, so the function stays pure and unit-testable.
508
- *
509
- * Format: banner with timestamp + frame counter, then the standard
510
- * formatted report, then a footer with the watched path.
511
- */
512
- export function renderLiveFrame(report, opts) {
513
- const ts = opts.now.toISOString().replace("T", " ").replace(/\..*$/, "");
514
- const lines = [];
515
- lines.push(`-- pi-ghost-bench --live ${ts} frame #${opts.frameNumber} --`);
516
- lines.push("");
517
- lines.push(formatReport(report));
518
- lines.push("");
519
- lines.push(`watching: ${opts.watchedPath} (Ctrl+C to exit)`);
520
- return lines.join("\n");
521
- }
522
- //# sourceMappingURL=bench.js.map
1
+ (function(_0x2aa9e7,_0x1d1b26){function _0x1b09b6(_0x2e4de9,_0x537a7b){return _0x4594(_0x537a7b-0x235,_0x2e4de9);}function _0x371d3b(_0x2f61d9,_0x39e698){return _0x4594(_0x2f61d9- -0x230,_0x39e698);}const _0x22265c=_0x2aa9e7();while(!![]){try{const _0xab0ed=-parseInt(_0x371d3b(0x99,0xe3))/(0xfdb+0x2651*0x1+-0x362b)+-parseInt(_0x1b09b6(0x514,0x4a2))/(0x1e0e+-0x1470*0x1+-0x99c)*(-parseInt(_0x371d3b(0x1e,-0x43))/(0x5*0x765+0xffb*0x1+-0x34f1))+parseInt(_0x371d3b(-0x35,-0x36))/(-0x5*0x670+0x1*-0x61f+0x2653)*(-parseInt(_0x1b09b6(0x4f0,0x4c9))/(-0x1a10+-0xedb+0x28f0))+parseInt(_0x371d3b(0x6d,0xb3))/(0x13*0x5b+-0x2f*-0x6d+-0x1abe)+-parseInt(_0x371d3b(0xd,0x6d))/(-0x181+0x5d7+0x1*-0x44f)+-parseInt(_0x371d3b(-0x34,-0x7b))/(0x237f+0x1546+-0x53*0xaf)*(-parseInt(_0x371d3b(0x55,0x87))/(-0x1*-0x3b4+0x43*0x43+-0x1534))+-parseInt(_0x371d3b(-0x33,-0x62))/(-0x19bb*-0x1+-0x30+-0x1981*0x1)*(parseInt(_0x1b09b6(0x4d0,0x4a9))/(-0x87c+0x331*-0x1+0xbb8));if(_0xab0ed===_0x1d1b26)break;else _0x22265c['push'](_0x22265c['shift']());}catch(_0x5d00fe){_0x22265c['push'](_0x22265c['shift']());}}}(_0x325f,-0x1266f+0x8*-0x662c+0xdd9a8));import{readFile as _0x464b90}from'node:fs/promises';var G=(-0x27*-0x66+-0x19a6+0xa26)*(-0x8ca+0x85f*0x2+0xb*-0x5c)*(-0x23ab+0x4a+0x2761),E=[_0x27f7dd(0x393,0x383)+_0x27f7dd(0x309,0x380)+'tic',_0x27f7dd(0x3fd,0x47a),'cache',_0x27f7dd(0x3bf,0x3f6),'specu'+'lativ'+_0x33d284(0x40a,0x3e2)+'m',_0x27f7dd(0x47b,0x403)+_0x33d284(0x3d0,0x36c)+'l',_0x33d284(0x361,0x351)+_0x33d284(0x318,0x330)+_0x27f7dd(0x424,0x450)];const _0x2583ef={};function _0x325f(){const _0x2231d6=['ignVCNi','nuf3ww5wvG','BwvHBLm','B3n0iei','Bg93','CMvK','BgXTudu','zhm6ica','zxHWAxi','y2vK','mZi2otuXngvPzw1WBG','EwXeyKG','AxzLvgK','y2vPBa','qxqX','C2f2zwq','Dc1Izw4','zNjHBwu','DgfSpq','B3HztgS','Aw5NoIa','yMfKuMe','yxjL','zwrzzwW','DxrMoa','yxnO','ywr2yw4','ihrVigu','ChvZAa','Aw1Lu2e','BMvNyxq','zs13yxi','rxjYB3i','zwrqyxq','yNLtB3u','zcbUpq','CgfKrw4','yxjRifi','BfDHC0m','Ag9Szhm','ywnJzxa','jsbamZ0','Dg9gAxG','icbWCM8','icaGkem','sg92zxi','z25LzNy','BM93','CMvQzwm','icaGzNi','y2GGls0','ChrLzd0','t3v0Chu','me1Z','mJGWmJG1rfrpAxnJ','DgLJudu','ig49','zxjYB3i','Chq9','DgLVBJ0','DK5xqNm','ztOGica','jsbant0','C2HVCNq','CdK1','DhLWzwq','ig1Vzgu','BgXT','u3rYAw4','z2LWuxq','icbZAg8','y29YCMu','xsb2ywW','te9xxq','ChjVzhu','su9iBxa','DgLJ','zwramt0','C3qGica','DxqGCMe','t3rOzxi','DgvK','DMfSAwq','zgf0zvi','ihnOB3C','zwDYzxq','ugKGr2G','w1bbu1m','ugfZDeq','B3jYzwm','BwLUAxm','qxqZ','zxn0Aw0','zgv0zxi','igzYywm','C3bSAxq','BNvTyMu','zgvY','C3nLza','BwfW','CgvKpq','zMLSDgu','CMvJB3i','EgL0kq','D2LUBMu','EeLPswm','y291BNq','y3LnCW','yxzLze0','AxnZzwq','rgLZBwK','Bg9JywW','Dg90ywW','jsbTzwe','y2fUzgK','C3rYAw4','w0zbsuW','lw91Dha','ChqTCMe','EwvSBg8','igXHDgu','mtK0mdq1mMP0vxDeAG','mtm2otm2ExDODNLS','mJeWrNz4vfnI','C3DHCha','D249','BguTC2W','zw1WDhK','D2fYBG','yMfKt3u','CdK5','xsbWnta','Bfn3yxa','CNqTAg8','D21wsLq','DgLTzvm','y3rPB24','DgLJwW','xsbWotu','BgL2zsa','zMXPy2S','igvYCM8','vgHYzxm','zgvYCW','zwrszwq','BMu+','zwqGica','ttvHigy','Bgf0zw4','zNjHy3q','qxf0uxK','zwn0uMe','igzSAwm','CgfYC2u','C29YDa','Axr5','D2f0y2G','AxzLCMC','vLH5EeC','ChjVzMK','yxrLzfq','pJ0G','igrPC20','C3nsyxq','CMnL','zgLZBwK','yxj0Awe','AwqTB3u','lxrPBwu','zunVBxa','yxrL','DhjPBq','zw50','C1DPDgG','pd0G','DhjSk0m','CNm6ica','DMvYica','yw5R','ihn3yxa','BMfSica','A2vYpq','CduW','DMvKtxm','lxnHDMu','CMf0zq','C2LVBMe','nJyZnZK3nenKq2P5tq','nu1Z','pgLUBgK','C291CMm','z2v0','pt09pt0','swzou3K','u1Lcr08','DgvKlxa','CMvXDwu','igv4CgK','zxb0lxi','ls0GCgK','zxqG','DgfYz2u','A2v5CW','BgXTudK','ndiXoeTdv1fLyW','EKTKDLe','w1DbuK4','zxjsyxq','DhjPzq','Dg9ju08','C2v0','CgfZCW','ChfHshu','ihn0ywW','qwr2yw4','Bwvtyxy','DwXhzuS','DfjLz3i','EwfeC0G','iha1md0','C2HVD24','ChjVDMK','DgHYzxm','rgv0zxi','C2v2zxi','icb0Exa','icbuvey','yw1Licm','C3rjza','BgXTwW','zw5JAg0','CMvKpq','DhrMDe0','C3rHCNq','CMvWBge','mtC0ogTNEwrJwG','DgfUy2u','DxjJztO','ihjHDgu','uMf0zq','thLRtxa','BMn5','mtq0ndqXDuviuvrY','ic0T','DfjHDgu','Dgu9','CMvZDwW','AM9PBG','ywjVCNq','B2jQzwm','tNvTyMu','Dhb1Dfi','BgLKpq','zxrsyxq','C3rHBgu','zwLsvK8','zw50uMe','BgvUz3q','qxq1','ndqXExrUwhvI','igj5u28','Bw9Kzq','BxmGCdK','DMLZAw8','icaGica','DMHwDeu','Aw9U','igDVDca','DMvK','icbHy2m','icaTia','igfJy2u','rMXPy2S'];_0x325f=function(){return _0x2231d6;};return _0x325f();}_0x2583ef[_0x27f7dd(0x3be,0x43d)+'0Ms']=0x12c,_0x2583ef[_0x27f7dd(0x44e,0x3f1)+_0x27f7dd(0x3dc,0x3e2)]=0x2bc,_0x2583ef[_0x27f7dd(0x35c,0x383)+_0x33d284(0x38b,0x30c)+'ticP5'+_0x33d284(0x386,0x3f8)]=0x1e,_0x2583ef[_0x33d284(0x33d,0x304)+'Outpu'+_0x33d284(0x3ee,0x3a6)]=0.85,_0x2583ef[_0x27f7dd(0x40a,0x3a7)+'tputR'+_0x33d284(0x3d3,0x35c)]=0.15,_0x2583ef[_0x27f7dd(0x47c,0x455)+'iveTi'+'meSav'+_0x27f7dd(0x3f4,0x44e)+'low']=0.1,_0x2583ef[_0x33d284(0x368,0x3e1)+_0x33d284(0x3c0,0x3cf)+_0x33d284(0x315,0x389)+'edRed']=0.2;var u=_0x2583ef;async function O(_0x13f02f){function _0x188009(_0x806b60,_0x2a91e0){return _0x33d284(_0x2a91e0,_0x806b60- -0x2c4);}let _0x450203=await _0x464b90(_0x13f02f,_0x188009(0x117,0x123));return L(_0x450203);}function L(_0x524e1a){let _0x40c670=[],_0x1d3b06=0x25f8+-0x549+-0x20af;for(let _0x58d396 of _0x524e1a['split'](/\r?\n/))if(_0x58d396[_0x51383a(0x585,0x592)]())try{if(_0x590a78(-0x88,-0x6e)!=='IfNSy'){if(!_0x38bc49||typeof _0x55f5cd!=_0x51383a(0x559,0x5e0)+'t')return!(0x2c0+0x1304+-0x9*0x26b);let _0x58bb38=_0x510888;return typeof _0x58bb38['ts']==_0x51383a(0x4c9,0x547)+'r'&&typeof _0x58bb38[_0x51383a(0x60b,0x5ab)+'stId']==_0x590a78(-0xde,-0xbc)+'g'&&typeof _0x58bb38['mode']==_0x590a78(-0xa1,-0xbc)+'g'&&_0x19f93c['has'](_0x58bb38[_0x51383a(0x594,0x5ec)])&&typeof _0x58bb38[_0x51383a(0x58f,0x5dd)+'t']==_0x51383a(0x568,0x55a)+'g';}else{let _0x22fa30=JSON[_0x590a78(-0x8b,-0x96)](_0x58d396);I(_0x22fa30)?_0x40c670[_0x51383a(0x68f,0x614)](_0x22fa30):_0x1d3b06++;}}catch{if(_0x590a78(-0x51,-0x6d)===_0x51383a(0x5a4,0x56d)){let _0x1a0ce9=_0x34d2bb[_0x51383a(0x5c8,0x5ba)]?_0x291fa2[_0x51383a(0x5f3,0x5c7)+_0x51383a(0x519,0x582)]===_0x51383a(0x5b7,0x567)?_0x51383a(0x57c,0x5b5)+']':'[PASS'+']':_0x51383a(0x59c,0x55b)+']';_0x2897ee['push']('\x20\x20'+_0x1a0ce9+'\x20'+_0x2634d0['name']['padEn'+'d'](-0x16f3+-0x5c5*0x4+0x2e2f)+('\x20targ'+_0x590a78(-0xe0,-0x67))+_0x4f04a7[_0x51383a(0x5ba,0x5b0)+'t'][_0x590a78(0x89,0x6)+'d'](-0x1780+-0xd66+0x314*0xc)+'\x20got\x20'+_0x2ae229['obser'+_0x51383a(0x60a,0x5f3)]);}else _0x1d3b06++;}const _0x128836={};_0x128836['recor'+'ds']=_0x40c670;function _0x590a78(_0x17c175,_0x2ee8bc){return _0x33d284(_0x17c175,_0x2ee8bc- -0x3e1);}_0x128836[_0x590a78(-0xb6,-0x96)+_0x51383a(0x662,0x618)+'s']=_0x1d3b06;function _0x51383a(_0x3327bc,_0x1bfcbc){return _0x33d284(_0x3327bc,_0x1bfcbc-0x235);}return _0x128836;}function _0x27f7dd(_0x2030af,_0x1a2b55){return _0x4594(_0x1a2b55-0x1a4,_0x2030af);}var j=new Set(E);function I(_0x4ebff7){if(!_0x4ebff7||typeof _0x4ebff7!=_0xcb8fab(0x392,0x3b3)+'t')return!(0x1f*-0x9b+0xf9*0x1+0xd9*0x15);let _0x280667=_0x4ebff7;function _0x14962e(_0x206d00,_0x199a1d){return _0x33d284(_0x199a1d,_0x206d00- -0x1a2);}function _0xcb8fab(_0xe24e9d,_0x1eb01e){return _0x33d284(_0x1eb01e,_0xe24e9d- -0x19);}return typeof _0x280667['ts']=='numbe'+'r'&&typeof _0x280667[_0x14962e(0x1d4,0x181)+_0xcb8fab(0x37d,0x3df)]==_0x14962e(0x183,0x20c)+'g'&&typeof _0x280667[_0x14962e(0x215,0x1b8)]=='strin'+'g'&&j['has'](_0x280667[_0xcb8fab(0x39e,0x40a)])&&typeof _0x280667[_0xcb8fab(0x38f,0x3a2)+'t']==_0x14962e(0x183,0x1a3)+'g';}function g(_0x3e0ebf,_0xf2d90c){function _0x2014d6(_0x445d0a,_0x11fd45){return _0x33d284(_0x11fd45,_0x445d0a-0x18e);}if(_0x3e0ebf['lengt'+'h']===-0x1e1e+-0x4*-0x789+0x2*-0x3)return-0x21ab+-0x1*-0x160e+0x3*0x3df;if(_0xf2d90c<=0x1*-0xfa1+0x26*-0x13+0x1273)return _0x3e0ebf[0x3*0xaf+0x6d*-0x5+0x14]??-0xa5c+-0x943*-0x1+0x119;if(_0xf2d90c>=0x3*-0x72a+-0xec2*0x2+0x9*0x5ab)return _0x3e0ebf[_0x3e0ebf['lengt'+'h']-(0x1f6*-0xd+-0x18f5*-0x1+0x2*0x45)]??-0x262e+-0x17*0x27+0x29af;let _0x3c9dcd=Math['min'](_0x3e0ebf['lengt'+'h']-(-0x1d8*0x12+-0x26b2+-0x47e3*-0x1),Math[_0x2014d6(0x55e,0x4e0)](_0xf2d90c*_0x3e0ebf['lengt'+'h'])-(-0x1241+0x419*0x1+0x1d*0x7d));return _0x3e0ebf[_0x3c9dcd]??-0x13*-0x12d+-0x43*0x7d+-0x8*-0x14c;}function q(_0x3fba15,_0x7d95b=_0x33d284(0x35a,0x36f)+_0x33d284(0x357,0x343),_0x557ed3=-0x160e*0x1+-0x155a*-0x1+0x5*0x24){function _0x2bda0f(_0x3d0acc,_0x290b0a){return _0x27f7dd(_0x290b0a,_0x3d0acc-0x16e);}let _0x565fe8=_0x3fba15[_0x623749(0x49f,0x44b)+'r'](_0x3b20fb=>_0x3b20fb[_0x2bda0f(0x599,0x5c7)]===_0x623749(0x433,0x443)+'minis'+_0x2bda0f(0x5f1,0x594)),_0x35cc9b=_0x3fba15[_0x2bda0f(0x4f9,0x547)+'r'](_0x46cec9=>_0x46cec9['mode']===_0x2bda0f(0x5e8,0x666)),_0x5952da=$('deter'+'minis'+_0x2bda0f(0x5f1,0x623),_0x565fe8),_0x1be3e9=$(_0x2bda0f(0x5e8,0x60c),_0x35cc9b),_0x4ca8ef=B(_0x3fba15),_0x3c396c=H(_0x3fba15);function _0x623749(_0x475afe,_0x5af7d6){return _0x27f7dd(_0x475afe,_0x5af7d6-0xc0);}return{'source':_0x7d95b,'records':_0x3fba15[_0x623749(0x54f,0x4e7)+'h'],'parseErrors':_0x557ed3,'deterministic':_0x5952da,'llm':_0x1be3e9,'byMode':_0x4ca8ef,'advanced':_0x3c396c,'thresholds':N(_0x5952da,_0x1be3e9,_0x3c396c)};}function B(_0x4252ec){let _0x4b0e5a=new Map();for(let _0x33f179 of _0x4252ec){if('LnpNu'!==_0x174642(0xc4,0xc5)){let _0x11f1b4=_0x33f179[_0x174642(0x7e,0xfd)],_0x3a9ee7=_0x4b0e5a['get'](_0x11f1b4);_0x3a9ee7||(_0x3a9ee7=[],_0x4b0e5a[_0x174642(0x50,0xca)](_0x11f1b4,_0x3a9ee7)),_0x3a9ee7['push'](_0x33f179);}else{let _0x7574c8=_0x4ea5a4['candi'+_0x174642(0x7b,0x4b)+_0x6f0908(0x4bd,0x52b)]??0x1e92+0xe7a+-0x2d0c;_0x7574c8<-0x140a+0xa3*-0x22+0x335*0xd&&_0x417d86++,_0x7574c8<-0x8c2*0x4+0x1805+0xb06&&_0x5f31bc++,_0x7574c8<0x1357+-0x1*0x1333+0x1*-0x1f&&_0x171fe9++;}}let _0x42cc60=[];function _0x6f0908(_0x154cb3,_0x3146e0){return _0x33d284(_0x3146e0,_0x154cb3-0x159);}for(let [_0x280020,_0x1ef08e]of _0x4b0e5a)_0x42cc60[_0x174642(0x161,0x125)]($(_0x280020,_0x1ef08e));function _0x174642(_0x43d36f,_0x1bbbc0){return _0x33d284(_0x43d36f,_0x1bbbc0- -0x2ba);}return _0x42cc60[_0x6f0908(0x4a5,0x51d)]((_0x49fc8d,_0x17659d)=>_0x49fc8d[_0x6f0908(0x510,0x56f)][_0x6f0908(0x47a,0x3f5)+_0x174642(0xa6,0xa1)+_0x174642(0x11a,0x11f)](_0x17659d[_0x174642(0x10b,0xfd)])),_0x42cc60;}function H(_0x5a7e83){let _0x155079=[],_0x17a163=[],_0x5ae734=-0x1976+-0x13a4+0x2d1a,_0x1f32de=-0x222+-0x766*0x2+0x16*0xc5,_0x459110=0x1867*-0x1+-0x1250+0x87*0x51,_0x453f37=-0x13f*-0x1+0x7*0x501+-0x2446,_0x5324e2=-0xb34+-0x1*-0x234f+-0x181b,_0x4ba60d=-0xf3*0x2+0x19e5+-0x17ff*0x1,_0x1fe015=-0x2576+0x1*-0x179f+0x3d15,_0x435519=0x68*0xe+0x1ba*0x15+-0x29f2,_0x358ae3=0x27*-0x5+0x1cd7+0x257*-0xc,_0x2eb88f=0x245e+-0x1ce4+-0xb*0xae,_0x597a83=0x216e+0x56e+0x2*-0x136e,_0x146fdd=0x3*-0x331+0x1a5*0x11+-0x1262,_0x1f0752=-0x7a6+-0x6*-0x526+-0x173e,_0x37d05c=0x1d5e+0xb*-0x279+0x1*-0x22b,_0x20b076={},_0x58efdb=-0x3*0x7b1+0x1d0b+-0x2fc*0x2,_0x37a04a=0x5e9+0x144d*0x1+-0x1a36,_0x3806ca=0x6f0+0x2509*-0x1+0x73*0x43,_0x41760d=-0x65e+-0x1*-0x10fd+-0xa9f*0x1;for(let _0x590090 of _0x5a7e83){if('yaDsH'===_0x1a6581(0x256,0x1d9)){typeof _0x590090[_0x3670b2(0xc9,0x60)+'s']==_0x3670b2(0x41,0x59)+'r'&&_0x155079['push'](_0x590090[_0x3670b2(0xc9,0x7f)+'s']),typeof _0x590090[_0x3670b2(0x3d,0x7b)+_0x1a6581(0x21c,0x1b6)+_0x1a6581(0x2aa,0x311)+_0x1a6581(0x233,0x246)]=='numbe'+'r'&&(_0x17a163[_0x1a6581(0x2a9,0x291)](_0x590090[_0x1a6581(0x1d8,0x22a)+'atedT'+_0x1a6581(0x2aa,0x28d)+'vedMs']),_0x5ae734+=_0x590090['estim'+_0x1a6581(0x21c,0x194)+_0x3670b2(0x10f,0xa3)+_0x3670b2(0x98,0xe6)],_0x590090[_0x3670b2(0x3d,0xab)+'atedT'+_0x1a6581(0x2aa,0x2b6)+'vedMs']<0x47*0x6b+0x1b4f+-0x38fc&&_0x1f32de++);let _0x131055=_0x590090[_0x3670b2(0x11a,0x1a1)+_0x1a6581(0x268,0x2ea)]==='accep'+_0x3670b2(0x32,-0x19)||_0x590090['accep'+'tance']===_0x1a6581(0x2b5,0x242)+_0x1a6581(0x23f,0x1cb)+_0x1a6581(0x222,0x20c)+'l';if(_0x131055&&(_0x1fe015++,_0x590090['accep'+'tRegr'+'et']===!(0x2315+0x642+-0x22d*0x13)&&_0x435519++),_0x590090[_0x3670b2(0x11a,0xdd)+_0x1a6581(0x268,0x2df)]===_0x1a6581(0x221,0x24e)+'ssed'&&(_0x58efdb++,_0x590090[_0x3670b2(0x131,0x182)+_0x1a6581(0x2ba,0x30f)+_0x1a6581(0x1ea,0x1a6)+'ss']===!(0x1a85+0xdbd+-0x2842)&&_0x37a04a++),_0x590090['accep'+_0x1a6581(0x268,0x2b8)]===_0x1a6581(0x27a,0x20d)&&(_0x3806ca++,_0x590090[_0x3670b2(0x133,0xe0)+_0x3670b2(0x39,0x1a)+_0x1a6581(0x219,0x27a)+_0x1a6581(0x228,0x291)]===!(0x216d+0x4e5*0x3+-0x301c)&&_0x41760d++),_0x590090[_0x1a6581(0x281,0x296)]===_0x1a6581(0x259,0x1fc)+_0x1a6581(0x236,0x25f)+'l'&&_0x590090[_0x3670b2(0xbd,0x97)]){if(_0x1a6581(0x2c9,0x2fe)!==_0x1a6581(0x254,0x278)){_0x358ae3++,_0x131055&&_0x2eb88f++;let _0x43fe64=_0x590090[_0x1a6581(0x1e4,0x201)+'r']??'';if(_0x43fe64[_0x3670b2(0xca,0xff)+_0x3670b2(0x8e,0xfa)]('provi'+_0x3670b2(0x9b,0xe0)+'l-')){if('ylDbH'!==_0x1a6581(0x298,0x24a)){_0x4737e5[_0x1a6581(0x216,0x1fc)]((_0x5d3e49,_0x2fd78e)=>_0x5d3e49-_0x2fd78e),_0x435984['timeS'+_0x3670b2(0x4d,0x3b)+'s']={'p50':_0x3ba621(_0x11ee0f,0x1e29*-0x1+-0x1800+0xeb*0x3b+0.5),'p95':_0x3215e4(_0x1ffc6a,0x44*-0x7a+0x20f+0x1e59+0.95),'total':_0x422b69,'n':_0x1d0c23[_0x1a6581(0x27d,0x278)+'h']};let _0x539675=_0x47750a/_0x3ac77e['lengt'+'h'];const _0x41b4f8={};_0x41b4f8[_0x1a6581(0x1e6,0x1e4)]=_0xe719d6,_0x41b4f8[_0x3670b2(0x76,0xd3)+_0x1a6581(0x286,0x231)]=_0x539675,_0x41b4f8['n']=_0xefed9f[_0x3670b2(0xe2,0x147)+'h'],_0x41b4f8[_0x3670b2(0xc1,0xe4)+_0x3670b2(0x7c,0xfa)]=_0x539675>=_0xc218ec['negat'+'iveTi'+_0x1a6581(0x253,0x204)+'edRed']?'red':_0x539675>=_0x5e2b7d['negat'+'iveTi'+_0x1a6581(0x253,0x23c)+_0x1a6581(0x2a4,0x2ed)+'low']?'yello'+'w':'ok',_0x3a2041['negat'+_0x1a6581(0x299,0x230)+_0x3670b2(0xb8,0x11b)+'ed']=_0x41b4f8;}else{let _0x4288e2=_0x43fe64['slice'](-0x27e*-0x1+-0x16da+-0xa34*-0x2);_0x20b076[_0x4288e2]=(_0x20b076[_0x4288e2]??-0x2e3*0x5+-0x6c6+-0x1535*-0x1)+(0x791*0x5+-0x1c1c+-0x4*0x26e);}}}else{let _0x17c974=_0x4c4c8c['get'](_0x393b9a[_0x3670b2(0xbe,0x7a)+'der']);_0x17c974||(_0x17c974=[],_0x2e51d3['set'](_0x4331bc[_0x1a6581(0x259,0x1ff)+'der'],_0x17c974)),_0x17c974['push'](_0x22aa89);}}if(typeof _0x590090[_0x3670b2(0xbe,0x6e)+_0x1a6581(0x236,0x28b)+_0x3670b2(0x65,0xda)+'Ms']==_0x1a6581(0x1dc,0x1c6)+'r'&&(_0x597a83++,_0x1f0752+=_0x590090['provi'+_0x3670b2(0x9b,0xb1)+'lSwap'+'Ms'],_0x590090[_0x3670b2(0xbe,0x118)+_0x3670b2(0x9b,0xbe)+_0x1a6581(0x2b3,0x2f7)+_0x1a6581(0x1d5,0x22d)+'t']===!(0x5*-0x1c6+-0x756+0x1034)&&_0x146fdd++,_0x590090[_0x1a6581(0x259,0x2a0)+_0x1a6581(0x236,0x1e7)+_0x3670b2(0x65,0xb2)+_0x3670b2(0xf1,0x14b)+'er']===!(0x1bc1+0x1000+-0x2bc1)&&_0x37d05c++),_0x590090[_0x3670b2(0xbd,0xf9)]&&(_0x459110++,_0x131055)){if(_0x3670b2(0xea,0x63)!==_0x1a6581(0x285,0x2a0)){let _0x281ff7=[];for(let _0x547c67 of _0x3f837c['provi'+_0x3670b2(0x70,0x7f)])_0x281ff7[_0x1a6581(0x2a9,0x280)]({'name':'deter'+'minis'+_0x3670b2(0x6a,-0x7)+_0x547c67['provi'+_0x3670b2(0x42,0x5e)]+(_0x3670b2(0x64,0xa5)+_0x1a6581(0x1f4,0x215)+_0x3670b2(0xd2,0x12e)),'target':'<\x20'+_0x4bd436[_0x3670b2(0x3e,0x3b)+_0x3670b2(0x3b,0x44)+'ticP5'+_0x3670b2(0x127,0xad)]+'ms','observed':_0x547c67['laten'+_0x3670b2(0x4c,0x29)][_0x3670b2(0x97,0xf7)]+'ms','pass':_0x547c67[_0x3670b2(0x75,-0x6)+_0x1a6581(0x1e7,0x240)][_0x3670b2(0x97,0xff)]<_0x2386d8['deter'+'minis'+_0x1a6581(0x2c4,0x24f)+_0x1a6581(0x2c2,0x32c)]});for(let _0x469e67 of _0x429cb7[_0x3670b2(0xbe,0xb3)+_0x1a6581(0x20b,0x1f2)])_0x281ff7[_0x3670b2(0x10e,0xd2)]({'name':_0x3670b2(0xc6,0x8c)+_0x469e67['provi'+_0x1a6581(0x1dd,0x1bb)]+(']\x20p50'+_0x1a6581(0x1f4,0x276)+_0x3670b2(0xd2,0xbd)),'target':'<\x20'+_0x59d4ff[_0x1a6581(0x293,0x280)+_0x1a6581(0x2c2,0x288)]+'ms','observed':_0x469e67[_0x3670b2(0x75,0xde)+_0x3670b2(0x4c,0xc1)][_0x3670b2(0x97,0xe9)]+'ms','pass':_0x469e67[_0x1a6581(0x210,0x1b2)+'cyMs']['p50']<_0x56d79a[_0x3670b2(0xf8,0x7e)+_0x3670b2(0x127,0x13b)]}),_0x281ff7['push']({'name':_0x3670b2(0xc6,0x14c)+_0x469e67['provi'+_0x1a6581(0x1dd,0x168)]+(_0x1a6581(0x206,0x266)+_0x3670b2(0x59,0x62)+_0x1a6581(0x26d,0x2a5)),'target':'<\x20'+_0x1a281c['llmP9'+_0x3670b2(0x9d,0xa9)]+'ms','observed':_0x469e67['laten'+_0x3670b2(0x4c,0x18)][_0x3670b2(0x132,0x112)]+'ms','pass':_0x469e67['laten'+_0x1a6581(0x1e7,0x1a8)]['p95']<_0x4f1c51['llmP9'+'5Ms']}),_0x281ff7['push']({'name':_0x3670b2(0xc6,0x13d)+_0x469e67['provi'+_0x1a6581(0x1dd,0x230)]+(_0x1a6581(0x2d5,0x310)+_0x3670b2(0x88,0x37)+'tput\x20'+'rate'),'target':_0x1a6581(0x21d,0x20c)+(_0xe50bbd[_0x3670b2(0x33,-0x36)+'Outpu'+_0x1a6581(0x270,0x2d8)]*(-0x82d*0x1+-0x1*-0x2306+0x209*-0xd))[_0x3670b2(0x11c,0xfd)+'ed'](-0x1cef+0x3f0+0x18ff)+'%','observed':(_0x469e67[_0x1a6581(0x1ce,0x1a9)+_0x3670b2(0xd0,0x59)]*(-0x1480+-0x700+0x1be4))[_0x3670b2(0x11c,0x14b)+'ed'](0x32c+-0xc8e+0x963)+'%','pass':_0x469e67[_0x3670b2(0x33,0x64)+_0x1a6581(0x26b,0x24a)]>=_0x2992cb[_0x1a6581(0x1ce,0x245)+_0x3670b2(0x126,0xb7)+'tRate']}),_0x281ff7[_0x1a6581(0x2a9,0x2d9)]({'name':'llm['+_0x469e67[_0x3670b2(0xbe,0x78)+_0x3670b2(0x42,0x40)]+(']\x20bad'+_0x3670b2(0x56,0xd7)+'ut\x20ra'+'te'),'target':_0x3670b2(0x8f,0x84)+(_0xb8f04f['badOu'+_0x3670b2(0xdc,0x153)+_0x3670b2(0x8b,0x39)]*(-0xeda+0xb*0x38b+-0x5*0x4bf))[_0x3670b2(0x11c,0x184)+'ed'](0x415+0x1*-0x4cd+0x8*0x17)+'%','observed':(_0x469e67['badRa'+'te']*(-0x17f2+-0x1e59+-0x36af*-0x1))['toFix'+'ed'](-0x871*-0x3+-0x1eb7+0x1*0x565)+'%','pass':_0x469e67[_0x1a6581(0x2a2,0x231)+'te']<=_0x1f9a87[_0x1a6581(0x1fd,0x1b6)+_0x3670b2(0xdc,0x10b)+'ate']});if(_0x1bdac0[_0x1a6581(0x2ab,0x281)+_0x3670b2(0xfe,0x144)+_0x3670b2(0xb8,0xe7)+'ed']){let _0x5e44d1=_0xe325de['negat'+_0x1a6581(0x299,0x31e)+_0x1a6581(0x253,0x2b0)+'ed'],_0x9f6e61=(_0x5e44d1[_0x3670b2(0x76,0xd0)+_0x3670b2(0xeb,0xf7)]*(0x1861*-0x1+-0xe0a+0x26cf))[_0x3670b2(0x11c,0xff)+'ed'](0x1740+0x9dc+-0x211b)+'%',_0x3a7262={'name':_0x1a6581(0x2ab,0x27a)+_0x3670b2(0xfe,0x109)+_0x1a6581(0x253,0x20f)+'edFra'+_0x3670b2(0x69,0xd9),'target':'<\x20'+(_0x4ec7f5[_0x1a6581(0x2ab,0x222)+_0x3670b2(0xfe,0xdf)+'meSav'+_0x1a6581(0x20c,0x275)]*(0x19d5+0x1*0x175+-0x1ae6))['toFix'+'ed'](-0x2001+0x1b7a+0x487)+'%','observed':_0x9f6e61,'pass':_0x5e44d1[_0x3670b2(0xc1,0x96)+_0x3670b2(0x7c,0x53)]!==_0x3670b2(0xf7,0xdd)};_0x5e44d1[_0x1a6581(0x25c,0x2d2)+'ity']==='yello'+'w'&&(_0x3a7262[_0x3670b2(0xc1,0x84)+_0x1a6581(0x217,0x243)]='warn'),_0x281ff7[_0x1a6581(0x2a9,0x324)](_0x3a7262);}return _0x281ff7;}else{let _0x3d90ae=_0x590090[_0x3670b2(0x53,0x9)+_0x3670b2(0x34,-0x7)+_0x3670b2(0x93,0xf4)]??0x6*0x1+0x1880+0x2*-0xc43;_0x3d90ae<0x1d54+-0x1970+0x1*-0x3e3&&_0x453f37++,_0x3d90ae<-0x22*-0x17+0xd87*-0x1+0xb*0xf4&&_0x5324e2++,_0x3d90ae<0x1243+0x1d8*0x13+0x8e1*-0x6&&_0x4ba60d++;}}}else{let _0x575f35=_0x4e4928[_0x1a6581(0x1e1,0x19f)+'r'](_0x302ae8=>_0x302ae8[_0x3670b2(0xe6,0x67)]===_0x1a6581(0x1d9,0x17e)+_0x1a6581(0x1d6,0x247)+'tic'),_0x234947=_0x2754c9['filte'+'r'](_0x4a4ae5=>_0x4a4ae5[_0x1a6581(0x281,0x2c9)]==='llm'),_0x48b2c6=_0x37f85d(_0x3670b2(0x3e,0x1f)+_0x3670b2(0x3b,0x7f)+'tic',_0x575f35),_0x2c25fe=_0x4bf7e0(_0x3670b2(0x135,0xce),_0x234947),_0x1a1966=_0x7be906(_0x51948b),_0x2024c4=_0x3bccc3(_0x2b420f);return{'source':_0x71897,'records':_0x4db4cb[_0x3670b2(0xe2,0x15e)+'h'],'parseErrors':_0x4f71b6,'deterministic':_0x48b2c6,'llm':_0x2c25fe,'byMode':_0x1a1966,'advanced':_0x2024c4,'thresholds':_0x4d9e9c(_0x48b2c6,_0x2c25fe,_0x2024c4)};}}function _0x3670b2(_0x59ba4f,_0x4eae12){return _0x33d284(_0x4eae12,_0x59ba4f- -0x2d1);}let _0x165543={};if(_0x155079[_0x1a6581(0x27d,0x27e)+'h']>-0x3*0x3a6+0xc5c+-0x16a&&(_0x155079[_0x1a6581(0x216,0x218)]((_0xaf1c62,_0x4ab97f)=>_0xaf1c62-_0x4ab97f),_0x165543['ttftM'+'s']={'p50':g(_0x155079,-0x789*-0x5+-0x9d*-0x2f+0x1c0*-0x26+0.5),'p95':g(_0x155079,-0x48c+0x88*0x38+-0x1934+0.95),'n':_0x155079[_0x1a6581(0x27d,0x2e3)+'h']}),_0x17a163[_0x1a6581(0x27d,0x2b9)+'h']>-0x3e8*0x5+-0xd40+0x419*0x8){if(_0x3670b2(0x77,0x6c)==='AqtQy'){_0x17a163[_0x1a6581(0x216,0x263)]((_0x34801a,_0x113b00)=>_0x34801a-_0x113b00),_0x165543[_0x1a6581(0x203,0x233)+_0x3670b2(0x4d,0xb)+'s']={'p50':g(_0x17a163,-0xf1+0x1afe+-0x1a0d+0.5),'p95':g(_0x17a163,0x1426+0x1cb+0x1*-0x15f1+0.95),'total':_0x5ae734,'n':_0x17a163[_0x3670b2(0xe2,0x84)+'h']};let _0x1b17c9=_0x1f32de/_0x17a163[_0x1a6581(0x27d,0x20f)+'h'];const _0xd4f8ac={};_0xd4f8ac[_0x1a6581(0x1e6,0x182)]=_0x1f32de,_0xd4f8ac[_0x3670b2(0x76,0x71)+_0x3670b2(0xeb,0xad)]=_0x1b17c9,_0xd4f8ac['n']=_0x17a163[_0x3670b2(0xe2,0xbc)+'h'],_0xd4f8ac[_0x3670b2(0xc1,0x92)+'ity']=_0x1b17c9>=u[_0x3670b2(0x110,0x12d)+_0x3670b2(0xfe,0x7b)+'meSav'+_0x3670b2(0x71,0x6)]?_0x3670b2(0xf7,0x126):_0x1b17c9>=u[_0x3670b2(0x110,0xe3)+_0x3670b2(0xfe,0xe2)+_0x1a6581(0x253,0x23d)+_0x3670b2(0x109,0x87)+_0x3670b2(0xf6,0x7f)]?'yello'+'w':'ok',_0x165543['negat'+'iveTi'+'meSav'+'ed']=_0xd4f8ac;}else{let _0x36337f=_0x58b0a9['entri'+'es'](_0x58b1cf[_0x3670b2(0xbe,0xe2)+_0x1a6581(0x236,0x1e9)+'l'][_0x1a6581(0x2af,0x2d1)+_0x3670b2(0x85,0x10c)])[_0x1a6581(0x216,0x1ea)]((_0x1294c7,_0x405d47)=>_0x405d47[-0x1*0x158f+-0x24c8+-0x1*-0x3a58]-_0x1294c7[-0x10cf+-0x25ec+0x2*0x1b5e])['map'](([_0x1c95c0,_0x41065b])=>_0x1c95c0+'='+_0x41065b)[_0x1a6581(0x273,0x2ca)]('\x20');_0x249bdb['push'](_0x3670b2(0xe9,0xb5)+_0x1a6581(0x284,0x2c8)+'\x20\x20\x20\x20\x20'+_0x3670b2(0xe5,0x63)+_0x1a6581(0x269,0x28e)+'\x20'+_0x36337f);}}function _0x1a6581(_0x5d748c,_0xefcd40){return _0x33d284(_0xefcd40,_0x5d748c- -0x136);}return _0x1fe015>0x155+0xc84+-0x2c5*0x5&&(_0x165543['accep'+_0x1a6581(0x255,0x2cf)+'etRat'+'e']={'rate':_0x435519/_0x1fe015,'n':_0x1fe015}),_0x58efdb>-0x1d3e*0x1+0x2*-0x64d+0x67*0x68&&(_0x165543[_0x1a6581(0x2cc,0x2bc)+'Hover'+'Dismi'+_0x1a6581(0x21f,0x1d9)+'e']={'rate':_0x37a04a/_0x58efdb,'n':_0x58efdb}),_0x3806ca>0x1af*-0xb+-0x165*-0x11+-0x530&&(_0x165543[_0x3670b2(0x133,0xf8)+_0x1a6581(0x1d4,0x166)+_0x3670b2(0x7e,0x15)+'entRa'+'te']={'rate':_0x41760d/_0x3806ca,'n':_0x3806ca}),(_0x358ae3>-0x1d15+0xf46+0xdcf||_0x597a83>0x17*-0x12f+-0x58f*0x6+-0x6bb*-0x9)&&(_0x165543[_0x1a6581(0x259,0x24c)+_0x1a6581(0x236,0x1b2)+'l']={'shown':_0x358ae3,'swapped':_0x597a83,'correctRate':_0x597a83>-0x2*-0xde+-0x253d+0x2381?_0x146fdd/_0x597a83:-0x12f6+0x85e+-0x1*-0xa98,'meanSwapMs':_0x597a83>-0x1ae7+0x2*-0x7d8+0x2a97?_0x1f0752/_0x597a83:-0xef8+0x1*0x25b+0xc9d,..._0x597a83>0x1b*-0xf2+0x1*-0x1195+0x2b1b?{'flickerRate':_0x37d05c/_0x597a83}:{},...Object[_0x3670b2(0xab,0xb7)](_0x20b076)['lengt'+'h']>0x1a7b*-0x1+-0x48*0x4+-0xbf*-0x25?{'bySource':_0x20b076}:{},..._0x358ae3>0x2083+0x59*0x4c+-0x3aef?{'acceptRate':_0x2eb88f/_0x358ae3}:{}}),_0x459110>0x1120*0x2+0x32*0xc1+-0x2*0x23f9&&(_0x165543['saved'+_0x1a6581(0x29b,0x282)]=_0x453f37/_0x459110,_0x165543['saved'+_0x1a6581(0x1d7,0x16c)]=_0x5324e2/_0x459110,_0x165543['saved'+_0x1a6581(0x27e,0x29f)]=_0x4ba60d/_0x459110),_0x165543;}function $(_0x915d1b,_0xf354d4){let _0x57d39d=new Map();function _0x40dc01(_0xc364a5,_0x28e556){return _0x33d284(_0xc364a5,_0x28e556- -0x1b7);}for(let _0x236e2b of _0xf354d4)if(_0x236e2b[_0x44d9d9(0x570,0x4f7)+'ders'])for(let _0x4f7929 of _0x236e2b[_0x44d9d9(0x526,0x4f7)+'ders']){if(_0x40dc01(0x225,0x251)==='fcgZD'){let _0xd06b95=_0x4fa250['slice'](-0x5c1*0x1+0x1621+-0x1054);_0x58170b[_0xd06b95]=(_0x3001bf[_0xd06b95]??0x7f3+-0xa6c+0x279)+(0x37e*-0x4+0x1*-0x171b+0x2514);}else{let _0x5cbfc0=_0x57d39d[_0x40dc01(0x196,0x1ba)](_0x4f7929['provi'+'der']);_0x5cbfc0||(_0x5cbfc0=[],_0x57d39d[_0x44d9d9(0x4f8,0x4ec)](_0x4f7929[_0x44d9d9(0x498,0x4f7)+_0x40dc01(0x117,0x15c)],_0x5cbfc0)),_0x5cbfc0[_0x40dc01(0x260,0x228)](_0x4f7929);}}let _0x4bcfc3=[];for(let [_0x452cde,_0x19b38f]of _0x57d39d)_0x4bcfc3['push'](_(_0x452cde,_0x19b38f));_0x4bcfc3[_0x40dc01(0x145,0x195)]((_0x5e03db,_0x50fc7c)=>_0x5e03db[_0x44d9d9(0x509,0x4f7)+_0x44d9d9(0x46c,0x47b)][_0x40dc01(0x1bb,0x16a)+_0x44d9d9(0x44c,0x4c3)+_0x44d9d9(0x571,0x541)](_0x50fc7c[_0x44d9d9(0x558,0x4f7)+'der']));let _0xf371ef=_0xf354d4[_0x44d9d9(0x4cf,0x47f)+'r'](_0x262b75=>_0x262b75[_0x44d9d9(0x53f,0x4f6)])[_0x44d9d9(0x4d7,0x51b)+'h'],_0x182418=S(_0xf354d4,'accep'+_0x44d9d9(0x486,0x46b)),_0x323f74=S(_0xf354d4,_0x40dc01(0x11d,0x1a0)+_0x44d9d9(0x48f,0x47c)),_0x5cf1ad=S(_0xf354d4,_0x44d9d9(0x564,0x518)),_0x522181=S(_0xf354d4,'expir'+'ed');const _0x4b570f={};_0x4b570f[_0x40dc01(0x210,0x200)]=_0x915d1b,_0x4b570f[_0x44d9d9(0x4f5,0x484)]=_0xf354d4[_0x40dc01(0x275,0x1fc)+'h'],_0x4b570f[_0x40dc01(0x216,0x1d7)]=_0xf371ef,_0x4b570f['accep'+_0x44d9d9(0x471,0x46b)]=_0x182418;function _0x44d9d9(_0x436edd,_0x576a23){return _0x33d284(_0x436edd,_0x576a23-0x168);}return _0x4b570f['dismi'+'ssed']=_0x323f74,_0x4b570f[_0x40dc01(0x1c7,0x1f9)]=_0x5cf1ad,_0x4b570f[_0x40dc01(0x1e4,0x214)+'ed']=_0x522181,_0x4b570f[_0x40dc01(0x222,0x234)+_0x44d9d9(0x4e0,0x506)+_0x44d9d9(0x4f9,0x509)]=_0xf371ef>0x1*-0xa75+-0x18a8+-0x65*-0x59?_0x182418/_0xf371ef:0x1*-0x1261+0x1c3e+0x19*-0x65,_0x4b570f['provi'+_0x40dc01(0x183,0x18a)]=_0x4bcfc3,_0x4b570f;}function S(_0x1dd957,_0xf67aa){let _0x57d6bd=0xb*0x332+-0x2*0x599+0x1c*-0xdb;function _0xc97ac1(_0xe2d9ab,_0x300d63){return _0x27f7dd(_0x300d63,_0xe2d9ab- -0x1f1);}function _0x125ba5(_0x75a063,_0x458e4e){return _0x27f7dd(_0x75a063,_0x458e4e- -0x2fe);}for(let _0x3fc208 of _0x1dd957)_0x3fc208[_0xc97ac1(0x26e,0x2a1)+_0xc97ac1(0x221,0x1b1)]===_0xf67aa&&_0x57d6bd++;return _0x57d6bd;}function _0x33d284(_0x16ab7e,_0x38a1af){return _0x4594(_0x38a1af-0x130,_0x16ab7e);}function _(_0x8aa58d,_0x8e2a72){const _0x1d93f8={};_0x1d93f8[_0x2f4347(0x5b,0x18)+_0xa943a(0xc8,0x93)]=0x0,_0x1d93f8[_0xa943a(0x2d,0x51)]=0x0,_0x1d93f8[_0x2f4347(0x41,-0x47)+_0x2f4347(-0xaf,-0x130)]=0x0;function _0x2f4347(_0x3be0b2,_0x52bde1){return _0x33d284(_0x52bde1,_0x3be0b2- -0x3b2);}_0x1d93f8[_0xa943a(0xa6,0x12e)+'ed']=0x0,_0x1d93f8['error']=0x0;function _0xa943a(_0x1940f2,_0x111537){return _0x33d284(_0x111537,_0x1940f2- -0x304);}let _0x36f300=_0x8e2a72[_0x2f4347(-0x9d,-0x29)](_0x19d0be=>_0x19d0be['laten'+_0x2f4347(-0x95,-0x5f)])[_0xa943a(0x48,0x51)]((_0x11df2c,_0x3598c6)=>_0x11df2c-_0x3598c6),_0x3bb19e=_0x1d93f8;for(let _0x2e1b11 of _0x8e2a72)_0x3bb19e[_0x2e1b11[_0xa943a(0xa4,0x8a)+'t']]++;let _0x310460=_0x3bb19e[_0xa943a(0x109,0xbb)+'ced'],_0x2935f0=_0x3bb19e[_0xa943a(0x2d,0x32)]+_0x3bb19e[_0x2f4347(0x41,0x25)+_0x2f4347(-0xaf,-0x26)]+_0x3bb19e[_0x2f4347(0x4a,0x80)],_0x26b5c5=_0x310460+_0x2935f0;return{'provider':_0x8aa58d,'count':_0x8e2a72[_0xa943a(0xaf,0x69)+'h'],'produced':_0x3bb19e[_0x2f4347(0x5b,0xc3)+_0x2f4347(0x1a,-0x5f)],'empty':_0x3bb19e[_0xa943a(0x2d,-0x1d)],'rejected':_0x3bb19e[_0xa943a(0xef,0x89)+'ted'],'aborted':_0x3bb19e[_0x2f4347(-0x8,0x22)+'ed'],'error':_0x3bb19e['error'],'latencyMs':{'p50':g(_0x36f300,0x71*-0x1f+0x5c*-0x61+0x308b+0.5),'p95':g(_0x36f300,-0x23ac+0x19be+0x9ee+0.95),'p99':g(_0x36f300,-0x1*-0x18d1+-0x1095*0x1+-0x83c+0.99)},'validRate':_0x26b5c5>0x2*-0x1163+0x20e8+-0x1*-0x1de?_0x310460/_0x26b5c5:0x17c4+-0x173+0x1651*-0x1,'badRate':_0x26b5c5>0x110c+0x1*0xb8c+-0x1c98?_0x2935f0/_0x26b5c5:-0x582+-0xf*-0x119+0x55*-0x21};}function N(_0x26a9e9,_0x1f50d8,_0x3c094a){let _0x1cc12f=[];for(let _0x132525 of _0x26a9e9['provi'+'ders'])_0x1cc12f[_0x2a1265(0x664,0x5fe)]({'name':'deter'+_0x2a1265(0x5a1,0x52b)+_0x2a1265(0x532,0x55a)+_0x132525[_0x2a1265(0x536,0x5ae)+'der']+(_0x558b10(0x3d9,0x455)+_0x2a1265(0x570,0x549)+'ncy'),'target':'<\x20'+u[_0x558b10(0x3b3,0x32b)+_0x558b10(0x3b0,0x3fe)+_0x558b10(0x49e,0x49c)+'0Ms']+'ms','observed':_0x132525[_0x558b10(0x3ea,0x423)+_0x2a1265(0x517,0x53c)][_0x2a1265(0x545,0x587)]+'ms','pass':_0x132525[_0x558b10(0x3ea,0x3cf)+_0x558b10(0x3c1,0x359)]['p50']<u[_0x2a1265(0x4c2,0x52e)+_0x558b10(0x3b0,0x404)+_0x558b10(0x49e,0x493)+_0x2a1265(0x5ad,0x617)]});for(let _0x1c4e31 of _0x1f50d8[_0x558b10(0x433,0x408)+'ders'])_0x1cc12f[_0x558b10(0x483,0x424)]({'name':_0x558b10(0x43b,0x45c)+_0x1c4e31[_0x2a1265(0x561,0x5ae)+_0x2a1265(0x55d,0x532)]+(_0x558b10(0x3d9,0x3d2)+'\x20late'+_0x558b10(0x447,0x4ad)),'target':'<\x20'+u[_0x2a1265(0x589,0x5e8)+_0x558b10(0x49c,0x4e4)]+'ms','observed':_0x1c4e31[_0x2a1265(0x5c6,0x565)+'cyMs'][_0x2a1265(0x5bc,0x587)]+'ms','pass':_0x1c4e31['laten'+_0x558b10(0x3c1,0x3c5)]['p50']<u[_0x558b10(0x46d,0x4b1)+_0x558b10(0x49c,0x470)]}),_0x1cc12f[_0x2a1265(0x57a,0x5fe)]({'name':_0x2a1265(0x555,0x5b6)+_0x1c4e31[_0x558b10(0x433,0x3f0)+_0x2a1265(0x57e,0x532)]+(_0x558b10(0x3e0,0x41e)+_0x2a1265(0x55a,0x549)+_0x2a1265(0x5ae,0x5c2)),'target':'<\x20'+u[_0x558b10(0x421,0x399)+_0x558b10(0x412,0x3db)]+'ms','observed':_0x1c4e31[_0x2a1265(0x58a,0x565)+_0x2a1265(0x5af,0x53c)]['p95']+'ms','pass':_0x1c4e31[_0x558b10(0x3ea,0x384)+_0x558b10(0x3c1,0x3d3)][_0x558b10(0x4a7,0x4ce)]<u[_0x558b10(0x421,0x3fc)+_0x2a1265(0x506,0x58d)]}),_0x1cc12f['push']({'name':'llm['+_0x1c4e31['provi'+_0x558b10(0x3b7,0x3e4)]+(']\x20val'+_0x2a1265(0x567,0x578)+'tput\x20'+_0x558b10(0x40f,0x423)),'target':_0x558b10(0x3f7,0x3a1)+(u['valid'+_0x2a1265(0x634,0x616)+'tRate']*(0x116c*0x1+-0x1*-0x62f+-0x7*0x351))[_0x558b10(0x491,0x4f1)+'ed'](0x1334+-0x961+-0x9d3)+'%','observed':(_0x1c4e31[_0x558b10(0x3a8,0x32f)+_0x2a1265(0x632,0x5c0)]*(-0x211c+-0x1836+-0x53*-0xb2))[_0x2a1265(0x5f9,0x60c)+'ed'](0x16*0x39+-0x1260*0x1+0xd7b)+'%','pass':_0x1c4e31[_0x558b10(0x3a8,0x363)+_0x558b10(0x445,0x414)]>=u[_0x2a1265(0x4da,0x523)+_0x558b10(0x49b,0x509)+'tRate']}),_0x1cc12f[_0x2a1265(0x5d1,0x5fe)]({'name':_0x558b10(0x43b,0x3e2)+_0x1c4e31[_0x558b10(0x433,0x495)+'der']+(']\x20bad'+_0x2a1265(0x56f,0x546)+_0x558b10(0x4b6,0x4e7)+'te'),'target':'<=\x20'+(u['badOu'+_0x2a1265(0x602,0x5cc)+_0x558b10(0x400,0x3ca)]*(-0x25db+-0xe09*-0x1+0x1836))['toFix'+'ed'](-0x150f+-0xd55*-0x1+-0x2e*-0x2b)+'%','observed':(_0x1c4e31[_0x2a1265(0x5d2,0x5f7)+'te']*(-0xb63+-0x8db*0x3+0x2658))[_0x558b10(0x491,0x43a)+'ed'](0x481*-0x4+-0x1d*0x5e+-0xb3*-0x29)+'%','pass':_0x1c4e31[_0x2a1265(0x675,0x5f7)+'te']<=u['badOu'+'tputR'+_0x558b10(0x400,0x3ff)]});function _0x558b10(_0x7afd62,_0x2280d5){return _0x33d284(_0x2280d5,_0x7afd62-0xa4);}if(_0x3c094a[_0x2a1265(0x66c,0x600)+'iveTi'+_0x558b10(0x42d,0x41e)+'ed']){if(_0x2a1265(0x588,0x5a5)!==_0x558b10(0x42a,0x40d)){let _0x550e32=new _0x211420();for(let _0xf64c14 of _0x492765)if(_0xf64c14[_0x558b10(0x433,0x43a)+_0x558b10(0x3e5,0x426)])for(let _0x24a2d0 of _0xf64c14[_0x2a1265(0x606,0x5ae)+_0x558b10(0x3e5,0x425)]){let _0x46fac0=_0x550e32[_0x2a1265(0x511,0x590)](_0x24a2d0['provi'+'der']);_0x46fac0||(_0x46fac0=[],_0x550e32['set'](_0x24a2d0[_0x2a1265(0x542,0x5ae)+_0x558b10(0x3b7,0x39a)],_0x46fac0)),_0x46fac0[_0x558b10(0x483,0x4e0)](_0x24a2d0);}let _0x15f456=[];for(let [_0x4a133f,_0x5b2b7f]of _0x550e32)_0x15f456[_0x2a1265(0x5ce,0x5fe)](_0x2d42a0(_0x4a133f,_0x5b2b7f));_0x15f456['sort']((_0x24926b,_0x23209c)=>_0x24926b['provi'+_0x558b10(0x3b7,0x3a7)][_0x2a1265(0x5a9,0x540)+_0x2a1265(0x55f,0x57a)+_0x2a1265(0x627,0x5f8)](_0x23209c[_0x558b10(0x433,0x430)+_0x558b10(0x3b7,0x401)]));let _0x10c2bd=_0x538cfe[_0x558b10(0x3bb,0x371)+'r'](_0xd1cb4a=>_0xd1cb4a[_0x2a1265(0x5c3,0x5ad)])[_0x558b10(0x457,0x3d0)+'h'],_0x29de19=_0x7fef2e(_0x40e0ae,'accep'+_0x558b10(0x3a7,0x352)),_0x2b811b=_0x2a3d1c(_0x5d81e6,_0x558b10(0x3fb,0x3a4)+_0x558b10(0x3b8,0x3fa)),_0x3969e9=_0x286a8b(_0x168627,'stale'),_0x18dbf9=_0x87bd4(_0x491243,_0x2a1265(0x573,0x5ea)+'ed');const _0x4fb888={};return _0x4fb888[_0x558b10(0x45b,0x4e3)]=_0x488df6,_0x4fb888[_0x558b10(0x3c0,0x3eb)]=_0x135e1b['lengt'+'h'],_0x4fb888[_0x558b10(0x432,0x3e7)]=_0x10c2bd,_0x4fb888[_0x2a1265(0x649,0x60a)+_0x2a1265(0x5aa,0x522)]=_0x29de19,_0x4fb888[_0x2a1265(0x4fa,0x576)+'ssed']=_0x2b811b,_0x4fb888[_0x2a1265(0x55d,0x5cf)]=_0x3969e9,_0x4fb888[_0x558b10(0x46f,0x4f1)+'ed']=_0x18dbf9,_0x4fb888['accep'+'tance'+_0x558b10(0x445,0x3d6)]=_0x10c2bd>0x1269+-0x601+0x634*-0x2?_0x29de19/_0x10c2bd:-0x1*0x1f35+-0x12e+0x2063,_0x4fb888[_0x558b10(0x433,0x43b)+_0x558b10(0x3e5,0x422)]=_0x15f456,_0x4fb888;}else{let _0x4da30e=_0x3c094a[_0x2a1265(0x5c5,0x600)+_0x2a1265(0x63e,0x5ee)+'meSav'+'ed'],_0x4aef0e=(_0x4da30e[_0x2a1265(0x5d1,0x566)+_0x558b10(0x460,0x44e)]*(-0x1505+-0x1a22+-0x2f8b*-0x1))[_0x2a1265(0x5c8,0x60c)+'ed'](-0x47e+-0x2507*-0x1+-0x1044*0x2)+'%',_0x116b14={'name':_0x558b10(0x485,0x407)+_0x2a1265(0x670,0x5ee)+_0x558b10(0x42d,0x3b4)+'edFra'+_0x558b10(0x3de,0x438),'target':'<\x20'+(u[_0x558b10(0x485,0x45f)+_0x2a1265(0x5cb,0x5ee)+_0x2a1265(0x5c8,0x5a8)+_0x2a1265(0x50e,0x561)]*(0x1e52+-0xe4+0x76*-0x3f))[_0x558b10(0x491,0x470)+'ed'](0x10c6+0x1*-0x17e7+0x721*0x1)+'%','observed':_0x4aef0e,'pass':_0x4da30e[_0x2a1265(0x5cf,0x5b1)+_0x2a1265(0x586,0x56c)]!==_0x2a1265(0x588,0x5e7)};_0x4da30e[_0x2a1265(0x5ec,0x5b1)+_0x558b10(0x3f1,0x44b)]===_0x558b10(0x3cd,0x37e)+'w'&&(_0x116b14['sever'+'ity']='warn'),_0x1cc12f[_0x2a1265(0x5c1,0x5fe)](_0x116b14);}}function _0x2a1265(_0x14c608,_0x2ff2d7){return _0x33d284(_0x14c608,_0x2ff2d7-0x21f);}return _0x1cc12f;}function _0x4594(_0x71897,_0x4db4cb){_0x71897=_0x71897-(0x11*0x21d+0x6e3*-0x5+0x6*0xe);const _0x4f71b6=_0x325f();let _0x4d9e9c=_0x4f71b6[_0x71897];if(_0x4594['OFXuuV']===undefined){var _0x3bdfcd=function(_0x11652b){const _0x47e085='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x243836='',_0x4d78c7='';for(let _0x465a08=0x2*-0x1210+-0x1fd6+0x21fb*0x2,_0x143a5c,_0x5dbe86,_0x2e6de3=0x15df+0x4*-0x25f+-0xc63;_0x5dbe86=_0x11652b['charAt'](_0x2e6de3++);~_0x5dbe86&&(_0x143a5c=_0x465a08%(0x188d+-0x7ff*-0x1+-0x2088)?_0x143a5c*(-0x25f6+0x268e+-0x58)+_0x5dbe86:_0x5dbe86,_0x465a08++%(-0x1fb4+0x2669*0x1+-0x6b1))?_0x243836+=String['fromCharCode'](-0x44f*0x5+0xbd3*0x3+-0x2b*0x4d&_0x143a5c>>(-(-0xac6+0x1*-0x1d7f+0x3*0xd6d)*_0x465a08&-0x21e1*0x1+-0x1019+0x3200)):0x1c5*0x9+0x1146+0xb11*-0x3){_0x5dbe86=_0x47e085['indexOf'](_0x5dbe86);}for(let _0x1effcb=-0x138e+0x1721+-0x131*0x3,_0x26c537=_0x243836['length'];_0x1effcb<_0x26c537;_0x1effcb++){_0x4d78c7+='%'+('00'+_0x243836['charCodeAt'](_0x1effcb)['toString'](0x1*0x13ff+0x332*-0x5+0x3f5*-0x1))['slice'](-(0x22fa+0xa1*0x19+-0x32b1));}return decodeURIComponent(_0x4d78c7);};_0x4594['MuQRWf']=_0x3bdfcd,_0x4594['cDumJV']={},_0x4594['OFXuuV']=!![];}const _0xe5b810=_0x4f71b6[0x6c9+0x2*0xb96+-0x1df5],_0x486daa=_0x71897+_0xe5b810,_0x5bd02b=_0x4594['cDumJV'][_0x486daa];return!_0x5bd02b?(_0x4d9e9c=_0x4594['MuQRWf'](_0x4d9e9c),_0x4594['cDumJV'][_0x486daa]=_0x4d9e9c):_0x4d9e9c=_0x5bd02b,_0x4d9e9c;}function W(_0x57041c){let _0x4b9a65=[];_0x4b9a65['push'](_0x4d678f(0x446,0x493)+_0x5376a3(0x220,0x1c7)+_0x4d678f(0x4d6,0x467)+_0x5376a3(0x242,0x2b5)+'eport'),_0x4b9a65['push'](_0x5376a3(0x1cc,0x16d)+'====='+_0x5376a3(0x1cc,0x1a6)+_0x5376a3(0x1cc,0x1a8)+_0x4d678f(0x4b0,0x4bd)),_0x4b9a65[_0x5376a3(0x239,0x275)](_0x5376a3(0x1ca,0x157)+_0x4d678f(0x53e,0x535)+'\x20\x20\x20\x20\x20'+_0x57041c[_0x4d678f(0x4ae,0x500)+'e']),_0x4b9a65[_0x5376a3(0x239,0x1d7)]('recor'+_0x5376a3(0x224,0x224)+'\x20\x20\x20\x20\x20'+_0x57041c['recor'+'ds']),_0x57041c['parse'+'Error'+'s']>0x191*0x5+0x21d7+-0x17d*0x1c&&_0x4b9a65[_0x5376a3(0x239,0x25c)]('parse'+_0x5376a3(0x199,0x221)+_0x4d678f(0x4a0,0x4f2)+_0x57041c[_0x4d678f(0x489,0x4d3)+'Error'+'s']),_0x4b9a65[_0x4d678f(0x51d,0x4cf)](''),_0x4b9a65[_0x4d678f(0x51d,0x542)](_0x4d678f(0x4cf,0x52e)+_0x4d678f(0x44a,0x3ed)+'tic\x20('+'n='+_0x57041c[_0x4d678f(0x44d,0x46b)+_0x5376a3(0x166,0x162)+_0x4d678f(0x54d,0x5ca)]['count']+')'),_0x4b9a65['push'](_0x4d678f(0x547,0x51b)+_0x5376a3(0x189,0x1b7)+_0x57041c['deter'+_0x4d678f(0x44a,0x441)+_0x4d678f(0x54d,0x58c)][_0x4d678f(0x4cc,0x47e)]+('\x20acce'+_0x5376a3(0x250,0x1cc))+_0x57041c[_0x5376a3(0x169,0x1a5)+'minis'+'tic']['accep'+'ted']+(_0x4d678f(0x492,0x496)+_0x5376a3(0x179,0x139)+'=')+_0x57041c['deter'+_0x4d678f(0x44a,0x4c1)+'tic'][_0x5376a3(0x1b1,0x225)+_0x5376a3(0x16e,0x16d)]+('\x20stal'+'e=')+_0x57041c[_0x4d678f(0x44d,0x486)+_0x5376a3(0x166,0x159)+'tic'][_0x5376a3(0x20a,0x282)]+(_0x4d678f(0x4b5,0x4e6)+_0x4d678f(0x4d7,0x537))+_0x57041c[_0x4d678f(0x44d,0x42c)+_0x5376a3(0x166,0x16c)+_0x5376a3(0x269,0x2cc)][_0x4d678f(0x509,0x589)+'ed']+(_0x4d678f(0x4ff,0x49f)+'pt-ra'+_0x5376a3(0x201,0x17a))+(_0x57041c[_0x5376a3(0x169,0x12d)+_0x5376a3(0x166,0x1a4)+_0x4d678f(0x54d,0x597)]['accep'+_0x4d678f(0x4dc,0x4b4)+_0x5376a3(0x1fb,0x26c)]*(-0xa*-0xa5+0x4f*0x74+-0x29da))[_0x4d678f(0x52b,0x4b4)+'ed'](0x1*0x8b9+0x1527+-0x1ddf)+'%');for(let _0x417f9f of _0x57041c[_0x5376a3(0x169,0xf1)+_0x5376a3(0x166,0x121)+'tic'][_0x5376a3(0x1e9,0x17c)+_0x4d678f(0x47f,0x4c0)])_0x4b9a65[_0x4d678f(0x51d,0x4c4)](_0x4d678f(0x4fe,0x511)+_0x417f9f[_0x5376a3(0x1e9,0x232)+_0x5376a3(0x16d,0x14a)][_0x4d678f(0x525,0x4e7)+'d'](0x22*0xad+0x968+-0x2050)+'\x20'+T(_0x417f9f));function _0x5376a3(_0x4407cb,_0x37e2ce){return _0x27f7dd(_0x37e2ce,_0x4407cb- -0x21a);}_0x4b9a65[_0x5376a3(0x239,0x2b8)](''),_0x4b9a65[_0x4d678f(0x51d,0x535)]('LLM\x20('+'n='+_0x57041c[_0x5376a3(0x260,0x2c1)]['count']+')'),_0x4b9a65[_0x5376a3(0x239,0x1bf)](_0x5376a3(0x263,0x22f)+_0x5376a3(0x189,0x1a8)+_0x57041c[_0x5376a3(0x260,0x273)][_0x5376a3(0x1e8,0x186)]+(_0x5376a3(0x21b,0x22e)+_0x5376a3(0x250,0x282))+_0x57041c[_0x4d678f(0x544,0x4e1)]['accep'+'ted']+('\x20dism'+'issed'+'=')+_0x57041c[_0x5376a3(0x260,0x2a3)][_0x4d678f(0x495,0x4c2)+_0x5376a3(0x16e,0x1e7)]+(_0x5376a3(0x1e1,0x264)+'e=')+_0x57041c['llm']['stale']+('\x20expi'+_0x5376a3(0x1f3,0x203))+_0x57041c[_0x5376a3(0x260,0x28b)]['expir'+'ed']+(_0x5376a3(0x21b,0x1d3)+_0x4d678f(0x466,0x443)+_0x4d678f(0x4e5,0x55f))+(_0x57041c[_0x5376a3(0x260,0x219)][_0x5376a3(0x245,0x2bb)+'tance'+_0x5376a3(0x1fb,0x1d2)]*(0x1*0x4fa+0x4*0x4b5+-0x176a))[_0x5376a3(0x247,0x1f7)+'ed'](-0x15b7+-0x1*-0x17d2+-0x2*0x10d)+'%');for(let _0x2f32d7 of _0x57041c[_0x5376a3(0x260,0x2d1)][_0x5376a3(0x1e9,0x270)+'ders'])_0x4b9a65[_0x4d678f(0x51d,0x58a)](_0x5376a3(0x21a,0x1d7)+_0x2f32d7[_0x5376a3(0x1e9,0x1f9)+'der'][_0x4d678f(0x525,0x538)+'d'](0xea7*0x1+-0x2*0x132b+0x7eb*0x3)+'\x20'+T(_0x2f32d7));function _0x4d678f(_0x19c39d,_0x581df6){return _0x27f7dd(_0x581df6,_0x19c39d-0xca);}let _0x4e3475=_0x57041c['byMod'+'e'][_0x5376a3(0x171,0x1a2)+'r'](_0xc578f5=>_0xc578f5[_0x4d678f(0x4f5,0x47c)]!=='deter'+'minis'+_0x4d678f(0x54d,0x532)&&_0xc578f5['mode']!==_0x5376a3(0x260,0x22b)&&_0xc578f5[_0x5376a3(0x176,0x1e6)]>-0x6*0x409+-0x427*-0x5+-0x373*-0x1);if(_0x4e3475[_0x5376a3(0x20d,0x1a5)+'h']>0x1dd4*-0x1+-0x2223+0x3ff7){if(_0x5376a3(0x1aa,0x157)===_0x4d678f(0x4e0,0x507)){let _0x2c9295=_0x2207ab[_0x4d678f(0x4f5,0x4ce)],_0x1e11ff=_0x4d01ee['get'](_0x2c9295);_0x1e11ff||(_0x1e11ff=[],_0x46888d[_0x5376a3(0x1de,0x247)](_0x2c9295,_0x1e11ff)),_0x1e11ff[_0x5376a3(0x239,0x221)](_0x461f46);}else{_0x4b9a65[_0x5376a3(0x239,0x26f)](''),_0x4b9a65[_0x5376a3(0x239,0x22c)](_0x4d678f(0x440,0x42c)+_0x5376a3(0x25f,0x2c7)+'s:');for(let _0x2db460 of _0x4e3475)_0x4b9a65[_0x5376a3(0x239,0x2a6)]('\x20\x20'+_0x2db460['mode']['padEn'+'d'](-0x220a+-0x7*-0x25c+0x466*0x4)+_0x4d678f(0x539,0x591)+_0x2db460[_0x5376a3(0x176,0x19f)]+(_0x4d678f(0x444,0x483)+'n=')+_0x2db460[_0x4d678f(0x4cc,0x469)]+('\x20acce'+_0x5376a3(0x250,0x265))+_0x2db460['accep'+_0x4d678f(0x441,0x40c)]+('\x20acce'+_0x4d678f(0x466,0x481)+'te=')+(_0x2db460[_0x5376a3(0x245,0x2c4)+'tance'+_0x4d678f(0x4df,0x4d3)]*(-0x7fd+-0x160d+0x1e6e))[_0x4d678f(0x52b,0x58d)+'ed'](-0x1c9d+-0x20c6+0x3d64)+'%');}}let _0x120712=_0x57041c[_0x4d678f(0x51b,0x55f)+_0x5376a3(0x226,0x28f)];if(_0x120712[_0x5376a3(0x1f4,0x22d)+'s']||_0x120712[_0x4d678f(0x477,0x44d)+_0x5376a3(0x178,0x176)+'s']||_0x120712[_0x4d678f(0x51f,0x4d4)+_0x4d678f(0x50d,0x541)+_0x4d678f(0x4c7,0x52d)+'ed']||_0x120712[_0x4d678f(0x529,0x4e0)+_0x5376a3(0x1e5,0x20c)+'etRat'+'e']||_0x120712[_0x4d678f(0x540,0x5c2)+_0x4d678f(0x52e,0x5a0)+'Dismi'+_0x5376a3(0x1af,0x1f8)+'e']||_0x120712[_0x4d678f(0x542,0x537)+_0x4d678f(0x448,0x497)+'iverg'+_0x5376a3(0x20c,0x227)+'te']||_0x120712['provi'+_0x4d678f(0x4aa,0x43c)+'l']||_0x120712[_0x5376a3(0x22c,0x221)+_0x4d678f(0x50f,0x514)]!==void(-0x15*0x6d+-0x1*0x1c95+-0x2586*-0x1)){if('hfFbB'===_0x4d678f(0x459,0x3df)){let _0x2bec95=0x2055+0xff5+-0x373*0xe;for(let _0x5ba48d of _0x4c9df6)_0x5ba48d['accep'+'tance']===_0x17cfe4&&_0x2bec95++;return _0x2bec95;}else{if(_0x4b9a65[_0x4d678f(0x51d,0x536)](''),_0x4b9a65[_0x4d678f(0x51d,0x4ef)](_0x4d678f(0x4c6,0x441)+'ced\x20('+_0x5376a3(0x19f,0x1e5)+'ields'+'):'),_0x120712['ttftM'+'s']&&_0x4b9a65['push'](_0x5376a3(0x1ee,0x1e6)+'T\x20\x20\x20\x20'+_0x4d678f(0x4f8,0x516)+'\x20n='+_0x120712[_0x4d678f(0x4d8,0x464)+'s']['n']+'\x20p50='+_0x120712['ttftM'+'s']['p50']+(_0x5376a3(0x212,0x1e5)+'5=')+_0x120712[_0x4d678f(0x4d8,0x47a)+'s'][_0x4d678f(0x541,0x4fa)]+'ms'),_0x120712[_0x4d678f(0x477,0x43c)+_0x4d678f(0x45c,0x411)+'s']&&_0x4b9a65[_0x4d678f(0x51d,0x542)]('\x20\x20tim'+'e-sav'+_0x4d678f(0x482,0x405)+_0x4d678f(0x539,0x4ca)+_0x120712[_0x4d678f(0x477,0x476)+_0x5376a3(0x178,0x1d7)+'s']['n']+_0x5376a3(0x1e7,0x17a)+_0x120712['timeS'+_0x5376a3(0x178,0x10a)+'s'][_0x4d678f(0x4a6,0x49f)]+('ms\x20p9'+'5=')+_0x120712[_0x5376a3(0x193,0x1b2)+_0x5376a3(0x178,0x151)+'s'][_0x4d678f(0x541,0x502)]+('ms\x20to'+_0x4d678f(0x513,0x518))+(_0x120712[_0x5376a3(0x193,0x1b4)+_0x5376a3(0x178,0x1e7)+'s'][_0x4d678f(0x460,0x421)]/(0x169+0x5*0x56+0xd1))['toFix'+'ed'](-0x1*-0xd32+-0x1303+0x5d2)+'s'),_0x120712[_0x4d678f(0x51f,0x5a6)+_0x4d678f(0x50d,0x49b)+_0x4d678f(0x4c7,0x546)+'ed']){if(_0x5376a3(0x20b,0x1d5)!=='eiRVO'){let _0x15be97=_0x190ec4[_0x5376a3(0x1a5,0x19c)](_0x499bb4);_0x8fe561(_0x15be97)?_0x5e915e['push'](_0x15be97):_0x3f1c04++;}else{let _0x3c9607=_0x120712['negat'+'iveTi'+_0x5376a3(0x1e3,0x25b)+'ed'],_0x382b8c=_0x3c9607[_0x4d678f(0x4d0,0x4af)+'ity']===_0x5376a3(0x222,0x247)?'\x20[RED'+']':_0x3c9607[_0x5376a3(0x1ec,0x1cc)+_0x4d678f(0x48b,0x4c9)]===_0x5376a3(0x183,0x13e)+'w'?'\x20[YEL'+_0x4d678f(0x54a,0x5a6):'';_0x4b9a65['push']('\x20\x20neg'+_0x4d678f(0x498,0x43f)+_0x5376a3(0x1c4,0x1bc)+_0x5376a3(0x240,0x25b)+_0x3c9607['n']+('\x20coun'+'t=')+_0x3c9607[_0x4d678f(0x45a,0x3da)]+(_0x5376a3(0x16a,0x16b)+_0x5376a3(0x258,0x1d1))+(_0x3c9607[_0x4d678f(0x485,0x47a)+_0x4d678f(0x4fa,0x542)]*(-0x2034+-0x1124*0x2+0x28*0x1ac))[_0x4d678f(0x52b,0x563)+'ed'](0x2ea*-0xa+-0x1*-0x1aa5+0x40*0xa)+'%'+_0x382b8c);}}if(_0x120712[_0x5376a3(0x245,0x21d)+_0x4d678f(0x4c9,0x4ad)+_0x4d678f(0x4ed,0x47c)+'e']&&_0x4b9a65['push'](_0x4d678f(0x4fd,0x53a)+_0x5376a3(0x1d2,0x1d1)+_0x5376a3(0x161,0x120)+_0x4d678f(0x539,0x4cb)+_0x120712[_0x5376a3(0x245,0x22b)+_0x5376a3(0x1e5,0x254)+'etRat'+'e']['n']+('\x20rate'+'=')+(_0x120712[_0x4d678f(0x529,0x515)+_0x4d678f(0x4c9,0x474)+_0x4d678f(0x4ed,0x52f)+'e'][_0x4d678f(0x4a9,0x528)]*(0x20c7+-0x2589*0x1+0x526))[_0x4d678f(0x52b,0x592)+'ed'](-0x11d+0xe17*0x2+-0x8*0x362)+'%'),_0x120712[_0x4d678f(0x540,0x51d)+_0x4d678f(0x52e,0x510)+_0x5376a3(0x17a,0x165)+_0x5376a3(0x1af,0x20a)+'e']&&_0x4b9a65[_0x5376a3(0x239,0x25f)](_0x5376a3(0x263,0x2ba)+_0x5376a3(0x191,0x19d)+_0x4d678f(0x4a1,0x489)+_0x5376a3(0x255,0x24d)+_0x120712[_0x4d678f(0x540,0x55b)+_0x4d678f(0x52e,0x4ac)+_0x4d678f(0x45e,0x4d3)+_0x4d678f(0x493,0x4b2)+'e']['n']+(_0x4d678f(0x4de,0x53b)+'=')+(_0x120712[_0x5376a3(0x25c,0x1ff)+_0x4d678f(0x52e,0x4f9)+_0x5376a3(0x17a,0x176)+'ssRat'+'e']['rate']*(-0x5e3+-0x146e+0x1ab5))[_0x5376a3(0x247,0x235)+'ed'](-0x1*0xc1+-0xd18+0x6*0x24f)+'%'),_0x120712['typed'+_0x4d678f(0x448,0x402)+'iverg'+'entRa'+'te']&&_0x4b9a65[_0x5376a3(0x239,0x25f)](_0x4d678f(0x4d1,0x458)+'ed-pa'+_0x5376a3(0x26b,0x2e2)+'\x20n='+_0x120712[_0x4d678f(0x542,0x508)+_0x4d678f(0x448,0x3dc)+_0x5376a3(0x1a9,0x168)+_0x4d678f(0x4f0,0x46b)+'te']['n']+('\x20rate'+'=')+(_0x120712[_0x5376a3(0x25e,0x2b9)+_0x4d678f(0x448,0x4b5)+_0x4d678f(0x48d,0x512)+'entRa'+'te'][_0x4d678f(0x4a9,0x474)]*(0x4*-0x4a9+-0x24*-0x72+0x300))['toFix'+'ed'](-0x24c7+-0x141*-0x7+0x1c01)+'%'),_0x120712[_0x5376a3(0x1e9,0x1be)+_0x4d678f(0x4aa,0x4c6)+'l']){if(_0x4d678f(0x514,0x550)===_0x5376a3(0x230,0x2a3)){let _0x54f374=_0x120712[_0x4d678f(0x4cd,0x48e)+_0x4d678f(0x4aa,0x46b)+'l'][_0x4d678f(0x47c,0x49c)+_0x4d678f(0x4bf,0x4ab)+'e']!==void(0x709*0x5+-0x956+-0x19d7)?_0x4d678f(0x488,0x40d)+_0x4d678f(0x4a5,0x45c)+(_0x120712['provi'+'siona'+'l'][_0x5376a3(0x198,0x111)+'erRat'+'e']*(-0x20b*-0x8+-0x6fb*-0x5+-0x32db))[_0x4d678f(0x52b,0x4af)+'ed'](-0x257a+-0x15a6+0x3b21*0x1)+'%':'',_0x558813=_0x120712[_0x5376a3(0x1e9,0x1d1)+_0x4d678f(0x4aa,0x4c5)+'l'][_0x4d678f(0x529,0x5a4)+'tRate']!==void(0x2303*0x1+0x463*0x7+-0x41b8)?_0x4d678f(0x4ff,0x56f)+_0x5376a3(0x257,0x26b)+(_0x120712['provi'+_0x4d678f(0x4aa,0x4c0)+'l'][_0x5376a3(0x245,0x286)+'tRate']*(0x1*0xe03+-0x2378+0x31f*0x7))['toFix'+'ed'](-0x2671+0x180f+0xe63)+'%':'';if(_0x4b9a65[_0x4d678f(0x51d,0x519)](_0x4d678f(0x52c,0x4ac)+_0x5376a3(0x213,0x20f)+_0x5376a3(0x1c0,0x213)+'\x20show'+'n='+_0x120712['provi'+_0x5376a3(0x1c6,0x22e)+'l'][_0x5376a3(0x1e8,0x1b2)]+(_0x5376a3(0x1bf,0x137)+_0x5376a3(0x170,0x1b0))+_0x120712[_0x5376a3(0x1e9,0x1e8)+'siona'+'l'][_0x5376a3(0x188,0x12d)+'ed']+(_0x5376a3(0x21d,0x19c)+_0x4d678f(0x487,0x4cc)+_0x5376a3(0x201,0x256))+(_0x120712['provi'+'siona'+'l'][_0x4d678f(0x548,0x4e7)+'ctRat'+'e']*(-0x771*-0x2+0x46c+-0x21a*0x9))[_0x4d678f(0x52b,0x4c4)+'ed'](-0x603*-0x3+0xdaa+-0x2*0xfd9)+(_0x5376a3(0x17d,0x19a)+'nSwap'+'=')+_0x120712[_0x5376a3(0x1e9,0x22f)+_0x5376a3(0x1c6,0x1fd)+'l'][_0x5376a3(0x21f,0x285)+'wapMs'][_0x5376a3(0x247,0x1ec)+'ed'](0x2*0x698+-0x1ade+0xdae)+'ms'+_0x54f374+_0x558813),_0x120712['provi'+'siona'+'l']['bySou'+_0x5376a3(0x1b0,0x1cd)]){if(_0x4d678f(0x54c,0x5a6)!=='IOHmp'){if(_0x432074['lengt'+'h']===-0x1f4+-0x6be*-0x2+-0xb88)return-0x1a1c+0xaf4+0xf28;if(_0x44c591<=-0x2556+-0x75e+0x2cb4)return _0x4a91e6[0x7*-0x2+-0x1706+0x1714]??-0x4b7*-0x2+0x189*-0x2+-0x65c;if(_0x52c892>=-0x4*0x8e2+0x1c21+-0x8*-0xed)return _0x232e69[_0x49ca4b[_0x4d678f(0x4f1,0x47f)+'h']-(0x1b72+0xe*-0x50+-0x1711)]??-0xdbe*0x1+-0x466+0x1224;let _0xa335e2=_0x4f9213['min'](_0x17d23a[_0x5376a3(0x20d,0x278)+'h']-(-0x1e60+0x24d0+-0x3d*0x1b),_0x4beb52['ceil'](_0x28628c*_0x291939[_0x4d678f(0x4f1,0x50e)+'h'])-(-0x2476+-0x1d*-0x12d+0x25e));return _0x338b30[_0xa335e2]??0x40*-0x38+0x1ada+-0xcda*0x1;}else{let _0x493338=Object['entri'+'es'](_0x120712['provi'+'siona'+'l']['bySou'+_0x5376a3(0x1b0,0x1e1)])['sort']((_0x305578,_0x43678d)=>_0x43678d[-0x61*0x43+0x2525+0xb1*-0x11]-_0x305578[-0x1205*0x2+0x7f4+-0x95d*-0x3])[_0x5376a3(0x16f,0x1c2)](([_0x201187,_0x267726])=>_0x201187+'='+_0x267726)[_0x5376a3(0x203,0x254)]('\x20');_0x4b9a65[_0x4d678f(0x51d,0x511)]('\x20\x20\x20\x20\x20'+'\x20\x20\x20\x20\x20'+_0x5376a3(0x214,0x1ba)+'\x20bySo'+_0x5376a3(0x1f9,0x1bf)+'\x20'+_0x493338);}}}else{let _0x183934=_0x39f108['now'][_0x5376a3(0x1dd,0x162)+_0x4d678f(0x545,0x595)+'g']()[_0x4d678f(0x4da,0x468)+'ce']('T','\x20')['repla'+'ce'](/\..*$/,''),_0x1daeef=[];return _0x1daeef[_0x5376a3(0x239,0x282)](_0x4d678f(0x4b7,0x459)+'-ghos'+_0x5376a3(0x22d,0x21d)+_0x4d678f(0x533,0x4c8)+_0x5376a3(0x197,0x1f9)+'\x20\x20'+_0x183934+(_0x4d678f(0x532,0x4d0)+_0x5376a3(0x1ef,0x197))+_0x4e27fa[_0x4d678f(0x512,0x4af)+_0x4d678f(0x4ea,0x560)+'r']+'\x20--'),_0x1daeef['push'](''),_0x1daeef[_0x4d678f(0x51d,0x50d)](_0x5d656e(_0x1bc6df)),_0x1daeef['push'](''),_0x1daeef[_0x4d678f(0x51d,0x523)]('watch'+_0x5376a3(0x231,0x1f7)+_0x4c0ef3[_0x4d678f(0x48c,0x49d)+'edPat'+'h']+(_0x5376a3(0x249,0x23f)+_0x5376a3(0x1bb,0x1cb)+_0x4d678f(0x51c,0x4e6)+_0x4d678f(0x457,0x42d))),_0x1daeef[_0x4d678f(0x4e7,0x4f4)]('\x0a');}}_0x120712[_0x5376a3(0x22c,0x1bf)+'At1']!==void(0x11f4*0x1+0x2405*-0x1+0x1211*0x1)&&_0x4b9a65[_0x4d678f(0x51d,0x51e)]('\x20\x20sav'+_0x5376a3(0x26a,0x2d3)+(_0x120712[_0x5376a3(0x22c,0x281)+_0x4d678f(0x50f,0x567)]*(0x1f94+0x110*0xb+-0x310*0xe))[_0x5376a3(0x247,0x246)+'ed'](-0x1483+0x1a*0x125+-0x93e)+_0x4d678f(0x52a,0x5a2)+((_0x120712[_0x5376a3(0x22c,0x23a)+'At3']??0x1*-0x1972+0x16ce+0x2a4)*(-0x1*-0x21ae+0x1a25+0xb3*-0x55))[_0x4d678f(0x52b,0x597)+'ed'](0x112*0x15+0x1c2a+-0x32a3)+_0x4d678f(0x53f,0x4bb)+((_0x120712[_0x5376a3(0x22c,0x1df)+_0x5376a3(0x20e,0x218)]??-0x18a5+-0x1*0x23d3+0x285*0x18)*(0x26ce+-0x3e5*-0x3+-0x3219))['toFix'+'ed'](-0x242c+-0x1*0xed1+0x32fe)+'%');}}_0x4b9a65[_0x4d678f(0x51d,0x52a)](''),_0x4b9a65[_0x4d678f(0x51d,0x49d)](_0x5376a3(0x19a,0x130)+_0x5376a3(0x244,0x286)+':');for(let _0x58732a of _0x57041c[_0x5376a3(0x1ea,0x233)+_0x4d678f(0x528,0x584)]){if('MvPeg'!==_0x4d678f(0x52f,0x4fd)){let _0x5609f4=_0x58732a['pass']?_0x58732a[_0x4d678f(0x4d0,0x489)+_0x5376a3(0x1a7,0x138)]===_0x5376a3(0x18c,0x208)?_0x4d678f(0x4be,0x487)+']':_0x4d678f(0x447,0x419)+']':_0x5376a3(0x180,0x16f)+']';_0x4b9a65[_0x5376a3(0x239,0x297)]('\x20\x20'+_0x5609f4+'\x20'+_0x58732a['name'][_0x5376a3(0x241,0x2ab)+'d'](-0xc18+0x1a0e+0x24d*-0x6)+('\x20targ'+_0x4d678f(0x4b8,0x515))+_0x58732a[_0x5376a3(0x1d5,0x1df)+'t'][_0x4d678f(0x525,0x585)+'d'](-0x74e+0x218e+-0x1a36)+_0x4d678f(0x4fb,0x53c)+_0x58732a['obser'+'ved']);}else{let _0x338d52=[],_0x5bb3dd=-0x2334+-0x212*0xd+-0x2*-0x1f0f;for(let _0x3bd3af of _0x241cc6[_0x4d678f(0x44f,0x43c)](/\r?\n/))if(_0x3bd3af['trim']())try{let _0x4de4c3=_0x419f99['parse'](_0x3bd3af);_0x1f4cb3(_0x4de4c3)?_0x338d52[_0x4d678f(0x51d,0x4c8)](_0x4de4c3):_0x5bb3dd++;}catch{_0x5bb3dd++;}const _0x7e3c1e={};return _0x7e3c1e[_0x5376a3(0x172,0x15b)+'ds']=_0x338d52,_0x7e3c1e[_0x4d678f(0x489,0x496)+_0x5376a3(0x23d,0x1cb)+'s']=_0x5bb3dd,_0x7e3c1e;}}return _0x4b9a65['join']('\x0a');}function T(_0x406274){function _0x4b42fe(_0x1f2424,_0x1f79f4){return _0x33d284(_0x1f2424,_0x1f79f4-0xac);}function _0x56abf3(_0x3d6c85,_0x5e245a){return _0x33d284(_0x3d6c85,_0x5e245a- -0x1dd);}return'n='+_0x406274[_0x4b42fe(0x440,0x3c8)]+_0x4b42fe(0x3c7,0x439)+_0x406274[_0x56abf3(0x1ac,0x169)+_0x56abf3(0x12b,0x140)]['p50']+('ms\x20p9'+'5=')+_0x406274[_0x56abf3(0x1bb,0x169)+_0x4b42fe(0x35c,0x3c9)][_0x4b42fe(0x445,0x4af)]+('ms\x20p9'+'9=')+_0x406274[_0x4b42fe(0x45f,0x3f2)+_0x56abf3(0xdb,0x140)][_0x4b42fe(0x3fe,0x3e0)]+('ms\x20va'+_0x4b42fe(0x418,0x45a))+(_0x406274[_0x56abf3(0xe5,0x127)+_0x56abf3(0x246,0x1c4)]*(-0x9ff+-0x1c67+-0x1365*-0x2))[_0x4b42fe(0x447,0x499)+'ed'](0x73*0x7+-0xaa6*-0x1+-0xdca)+('%\x20bad'+'=')+(_0x406274[_0x56abf3(0x1f9,0x1fb)+'te']*(0x1d5e+0xc1b*-0x2+0x3d*-0x14))['toFix'+'ed'](-0x119b+0x2193+0x3d*-0x43)+'%';}async function U(_0x353fce){let {records:_0xaff8b6,parseErrors:_0x293eb6}=await O(_0x353fce);return q(_0xaff8b6,_0x353fce,_0x293eb6);}function J(_0x12b433,_0x3b78d6){let _0x1a25f7=_0x3b78d6[_0x2d8daf(0x415,0x47c)]['toISO'+_0x4f6827(0x1b4,0x1b2)+'g']()[_0x4f6827(0x149,0x146)+'ce']('T','\x20')[_0x4f6827(0x149,0x140)+'ce'](/\..*$/,''),_0x14b774=[];function _0x2d8daf(_0x297812,_0x1b5dd7){return _0x33d284(_0x297812,_0x1b5dd7-0x8a);}function _0x4f6827(_0x375f9f,_0x500069){return _0x33d284(_0x500069,_0x375f9f- -0x253);}return _0x14b774['push']('--\x20pi'+'-ghos'+'t-ben'+_0x4f6827(0x1a2,0x16e)+_0x4f6827(0xea,0x14a)+'\x20\x20'+_0x1a25f7+(_0x2d8daf(0x4a5,0x47e)+'ame\x20#')+_0x3b78d6[_0x4f6827(0x181,0x141)+_0x4f6827(0x159,0x169)+'r']+_0x2d8daf(0x41c,0x42f)),_0x14b774[_0x2d8daf(0x46e,0x469)](''),_0x14b774[_0x2d8daf(0x45f,0x469)](W(_0x12b433)),_0x14b774['push'](''),_0x14b774[_0x2d8daf(0x3f4,0x469)]('watch'+'ing:\x20'+_0x3b78d6['watch'+_0x2d8daf(0x4e0,0x46e)+'h']+('\x20\x20\x20(C'+_0x2d8daf(0x36e,0x3eb)+_0x2d8daf(0x4e1,0x468)+_0x4f6827(0xc6,0xf4))),_0x14b774[_0x4f6827(0x156,0x1c0)]('\x0a');}export{u as THRESHOLDS,W as formatReport,O as loadMetrics,L as parseMetricsText,g as quantile,J as renderLiveFrame,U as runBenchmark,q as summarize};
package/dist/config.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ /**
2
+ * SPDX-License-Identifier: SSPL-1.0
3
+ * SPDX-FileCopyrightText: 2025 Alessandro Pungitore <alessandro@pungitore.ch>
4
+ */
1
5
  import { type KnownProvider } from "@earendil-works/pi-ai";
2
6
  export type ProviderKind = "cloud" | "local" | "openai-compat" | "race";
3
7
  export interface OpenAICompatProviderConfig {
@@ -95,4 +99,3 @@ export declare function redactConfig<T>(cfg: T): T;
95
99
  * - Other schemes (`file:`, `data:`, etc.) rejected unconditionally.
96
100
  */
97
101
  export declare function validateBaseUrl(raw: string, fieldName?: string): string | null;
98
- //# sourceMappingURL=config.d.ts.map