@workbench-ai/workbench 0.0.66 → 0.0.68

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 (42) hide show
  1. package/dist/dev-open/client.css +37 -249
  2. package/dist/dev-open/client.js +225 -266
  3. package/dist/index.d.ts +2 -6
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1273 -5000
  6. package/dist/open-server.d.ts +12 -0
  7. package/dist/open-server.d.ts.map +1 -0
  8. package/dist/open-server.js +180 -0
  9. package/package.json +5 -5
  10. package/dist/adapter-command-env.d.ts +0 -8
  11. package/dist/adapter-command-env.d.ts.map +0 -1
  12. package/dist/adapter-command-env.js +0 -80
  13. package/dist/adapter-project.d.ts +0 -29
  14. package/dist/adapter-project.d.ts.map +0 -1
  15. package/dist/adapter-project.js +0 -332
  16. package/dist/benchmark-fingerprint.d.ts +0 -6
  17. package/dist/benchmark-fingerprint.d.ts.map +0 -1
  18. package/dist/benchmark-fingerprint.js +0 -42
  19. package/dist/command-model.d.ts +0 -5
  20. package/dist/command-model.d.ts.map +0 -1
  21. package/dist/command-model.js +0 -537
  22. package/dist/dev-open-server.d.ts +0 -18
  23. package/dist/dev-open-server.d.ts.map +0 -1
  24. package/dist/dev-open-server.js +0 -304
  25. package/dist/init-scaffold.d.ts +0 -22
  26. package/dist/init-scaffold.d.ts.map +0 -1
  27. package/dist/init-scaffold.js +0 -30
  28. package/dist/init-template-pack.d.ts +0 -19
  29. package/dist/init-template-pack.d.ts.map +0 -1
  30. package/dist/init-template-pack.js +0 -262
  31. package/dist/local-archive.d.ts +0 -48
  32. package/dist/local-archive.d.ts.map +0 -1
  33. package/dist/local-archive.js +0 -833
  34. package/dist/local-inspection.d.ts +0 -9
  35. package/dist/local-inspection.d.ts.map +0 -1
  36. package/dist/local-inspection.js +0 -317
  37. package/dist/project-source.d.ts +0 -63
  38. package/dist/project-source.d.ts.map +0 -1
  39. package/dist/project-source.js +0 -682
  40. package/dist/workspace-snapshot.d.ts +0 -10
  41. package/dist/workspace-snapshot.d.ts.map +0 -1
  42. package/dist/workspace-snapshot.js +0 -81
@@ -1,9 +0,0 @@
1
- import { type WorkbenchInspection } from "@workbench-ai/workbench-core";
2
- import { type LocalProjectSource } from "./project-source.js";
3
- export interface LocalWorkbenchInspectionOptions {
4
- workspace: string;
5
- readProjectSource?: () => Promise<LocalProjectSource>;
6
- }
7
- export declare function createLocalWorkbenchInspection(options: LocalWorkbenchInspectionOptions): WorkbenchInspection;
8
- export declare function createLocalProjectSourceReader(workspace: string): () => Promise<LocalProjectSource>;
9
- //# sourceMappingURL=local-inspection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-inspection.d.ts","sourceRoot":"","sources":["../src/local-inspection.ts"],"names":[],"mappings":"AAEA,OAAO,EAaL,KAAK,mBAAmB,EAGzB,MAAM,8BAA8B,CAAC;AAetC,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,qBAAqB,CAAC;AAgB7B,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,mBAAmB,CAqCrB;AAED,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAChB,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAiBnC"}
@@ -1,317 +0,0 @@
1
- import path from "node:path";
2
- import { WorkbenchInspectionError, candidateRecordWithoutDerivedFields, candidateSummaryFromRecord, createWorkbenchInspection, loadAuthoredWorkbenchSourceDocument, traceSessionLabel, } from "@workbench-ai/workbench-core";
3
- import { localBenchmarkFingerprint } from "./benchmark-fingerprint.js";
4
- import { loadLocalArchiveIndex, readLocalCandidateFilesForId, readLocalCandidateRecord, readLocalEvaluationRecord, readLocalExecutionFiles, readLocalJobInRun, readLocalRunJobs, readLocalRunRecord, } from "./local-archive.js";
5
- import { readLocalAuthoredProjectSource, readLocalProjectSource, WORKBENCH_BENCHMARK_FILE, } from "./project-source.js";
6
- const PROJECT_SOURCE_CACHE_TTL_MS = 1000;
7
- export function createLocalWorkbenchInspection(options) {
8
- const context = {
9
- workspace: path.resolve(options.workspace),
10
- readProjectSource: options.readProjectSource ??
11
- createLocalProjectSourceReader(options.workspace),
12
- };
13
- const backend = {
14
- projectId: "local",
15
- snapshot: () => localBenchmarkSnapshot(context),
16
- spec: (input) => localSpecDocument(context, input.fingerprint),
17
- sourceFiles: (input) => localBenchmarkMountedFiles(context, input.fingerprint),
18
- candidate: (input) => readCandidateForInspection(context.workspace, input.id),
19
- candidateFiles: async (input) => {
20
- const candidate = await readCandidateForInspection(context.workspace, input.id);
21
- return {
22
- files: await readCandidateFilesForInspection(context.workspace, input.id),
23
- changedPaths: candidate.fileChanges,
24
- };
25
- },
26
- evaluation: (input) => readEvaluationForInspection(context.workspace, input.id),
27
- run: async (input) => {
28
- const run = await readRunForInspection(context.workspace, input.id);
29
- return {
30
- run,
31
- ...(input.includeJobs
32
- ? { jobs: await readLocalRunJobs(context.workspace, input.id) }
33
- : {}),
34
- };
35
- },
36
- jobInRun: (input) => readExecutionJobForRun(context.workspace, input.runId, input.jobId),
37
- executionFiles: (input) => readExecutionFilesForRun(context.workspace, input.runId, input.jobId),
38
- traceForJob: readLocalAggregateTrace,
39
- traceSessionsForJob: readLocalTraceSessions,
40
- };
41
- return createWorkbenchInspection(backend);
42
- }
43
- export function createLocalProjectSourceReader(workspace) {
44
- const resolvedWorkspace = path.resolve(workspace);
45
- let cached = null;
46
- return () => {
47
- const now = Date.now();
48
- if (cached && now - cached.loadedAt < PROJECT_SOURCE_CACHE_TTL_MS) {
49
- return cached.promise;
50
- }
51
- const promise = readLocalProjectSource(resolvedWorkspace);
52
- cached = { loadedAt: now, promise };
53
- promise.catch(() => {
54
- if (cached?.promise === promise) {
55
- cached = null;
56
- }
57
- });
58
- return promise;
59
- };
60
- }
61
- async function localBenchmarkSnapshot(context) {
62
- const { workspace } = context;
63
- const snapshot = await loadLocalArchiveIndex(workspace);
64
- const candidates = snapshot.candidates.filter(isInspectableCandidateRecord);
65
- const summaries = candidates.map(candidateSummaryFromRecord);
66
- const activeId = snapshot.activeId && candidates.some((candidate) => candidate.id === snapshot.activeId)
67
- ? snapshot.activeId
68
- : null;
69
- const currentBenchmarkFingerprint = await readCurrentBenchmarkFingerprint(context);
70
- return {
71
- workspaceRoot: path.resolve(workspace),
72
- activeId,
73
- currentBenchmarkFingerprint,
74
- summaries,
75
- evaluations: snapshot.evaluations.map(evaluationSummary),
76
- runs: snapshot.runs.map(publicLocalRunSummary),
77
- };
78
- }
79
- async function localSpecDocument(context, benchmarkFingerprint) {
80
- const { workspace } = context;
81
- const projectSource = await context.readProjectSource().catch(() => null);
82
- const authoredSource = projectSource
83
- ? null
84
- : await readLocalAuthoredProjectSource(workspace).catch(() => null);
85
- const requestedFingerprint = normalizeOptionalFingerprint(benchmarkFingerprint);
86
- const currentFingerprint = projectSource
87
- ? localBenchmarkFingerprint(projectSource)
88
- : null;
89
- if (requestedFingerprint &&
90
- currentFingerprint &&
91
- requestedFingerprint !== currentFingerprint) {
92
- const snapshot = await loadLocalArchiveIndex(workspace);
93
- const document = localHistoricalBenchmarkDocument(snapshot, requestedFingerprint);
94
- if (document) {
95
- return document;
96
- }
97
- throw new WorkbenchInspectionError(`Benchmark version not found: ${requestedFingerprint}`, { status: 404 });
98
- }
99
- const sourceYaml = projectSource?.specSource ?? authoredSource?.specSource ?? "";
100
- const cases = projectSource
101
- ? caseSummaryFilesFromEngineCases(projectSource.engineCases, projectSource.engineResolveFiles)
102
- : [];
103
- return loadAuthoredWorkbenchSourceDocument({
104
- sourceYaml,
105
- path: WORKBENCH_BENCHMARK_FILE,
106
- sourceFiles: projectSource?.sourceFiles ?? authoredSource?.sourceFiles,
107
- cases,
108
- });
109
- }
110
- async function localBenchmarkMountedFiles(context, benchmarkFingerprint) {
111
- const requestedFingerprint = normalizeOptionalFingerprint(benchmarkFingerprint);
112
- const { workspace } = context;
113
- const projectSource = await context.readProjectSource();
114
- const currentFingerprint = localBenchmarkFingerprint(projectSource);
115
- if (requestedFingerprint &&
116
- currentFingerprint &&
117
- requestedFingerprint !== currentFingerprint) {
118
- const snapshot = await loadLocalArchiveIndex(workspace);
119
- return localHistoricalBenchmarkFiles(snapshot, requestedFingerprint);
120
- }
121
- return inspectableEngineCaseFiles(projectSource.engineCases);
122
- }
123
- function publicLocalRunSummary(run) {
124
- const { executionFingerprint: _executionFingerprint, ...summary } = run;
125
- return summary;
126
- }
127
- async function readCurrentBenchmarkFingerprint(context) {
128
- return await context.readProjectSource()
129
- .then(localBenchmarkFingerprint)
130
- .catch(() => null);
131
- }
132
- function caseSummaryFilesFromEngineCases(engineCases, files) {
133
- const existingCaseIds = new Set(files.flatMap((file) => {
134
- const normalized = file.path.replace(/\\/gu, "/").replace(/^\/+/u, "");
135
- const slash = normalized.indexOf("/");
136
- return slash > 0 ? [normalized.slice(0, slash)] : [];
137
- }));
138
- return [
139
- ...files.map((file) => ({ ...file })),
140
- ...engineCases
141
- .filter((engineCase) => !existingCaseIds.has(engineCase.id))
142
- .map((engineCase) => ({
143
- path: `${engineCase.id}/.workbench-case.json`,
144
- encoding: "utf8",
145
- content: `${JSON.stringify({ id: engineCase.id })}\n`,
146
- executable: false,
147
- })),
148
- ];
149
- }
150
- function localHistoricalBenchmarkDocument(snapshot, benchmarkFingerprint) {
151
- const candidate = snapshot.candidates.find((entry) => entry.benchmarkFingerprint === benchmarkFingerprint && readBenchmarkSourceMetadata(entry));
152
- const source = candidate ? readBenchmarkSourceMetadata(candidate) : null;
153
- if (!source?.sourceYaml) {
154
- return null;
155
- }
156
- return loadAuthoredWorkbenchSourceDocument({
157
- sourceYaml: source.sourceYaml,
158
- path: WORKBENCH_BENCHMARK_FILE,
159
- sourceFiles: source.files,
160
- cases: localHistoricalBenchmarkFiles(snapshot, benchmarkFingerprint),
161
- });
162
- }
163
- function localHistoricalBenchmarkFiles(_snapshot, _benchmarkFingerprint) {
164
- return [];
165
- }
166
- function inspectableEngineCaseFiles(engineCases) {
167
- return engineCases.flatMap((bundle) => engineCaseFiles(bundle).map((file) => ({
168
- ...file,
169
- path: `${bundle.id}/${file.path}`,
170
- }))).sort((left, right) => left.path.localeCompare(right.path));
171
- }
172
- function engineCaseFiles(bundle) {
173
- const buckets = bundle.files;
174
- return buckets.source?.length
175
- ? buckets.source
176
- : [...(buckets.public ?? []), ...(buckets.private ?? [])];
177
- }
178
- function isInspectableCandidateRecord(candidate) {
179
- return Boolean(candidate.eval || asRecord(asRecord(candidate.meta)?.source));
180
- }
181
- function evaluationSummary(evaluation) {
182
- const { evaluation: _evaluation, ...summary } = evaluation;
183
- return summary;
184
- }
185
- async function readCandidateForInspection(workspace, candidateId) {
186
- const candidate = await readArchiveRecord("Candidate", candidateId, () => readLocalCandidateRecord(workspace, candidateId));
187
- return candidateRecordWithoutDerivedFields(candidate);
188
- }
189
- async function readEvaluationForInspection(workspace, evaluationId) {
190
- return await readArchiveRecord("Evaluation", evaluationId, () => readLocalEvaluationRecord(workspace, evaluationId));
191
- }
192
- async function readRunForInspection(workspace, runId) {
193
- return await readArchiveRecord("Run", runId, () => readLocalRunRecord(workspace, runId));
194
- }
195
- async function readCandidateFilesForInspection(workspace, candidateId) {
196
- return await readArchiveRecord("Candidate", candidateId, () => readLocalCandidateFilesForId(workspace, candidateId));
197
- }
198
- function readBenchmarkSourceMetadata(candidate) {
199
- const benchmark = asRecord(asRecord(candidate.meta)?.benchmark);
200
- const files = Array.isArray(benchmark?.files)
201
- ? benchmark.files
202
- .map(readSurfaceSnapshotFile)
203
- .filter((file) => file !== null)
204
- : [];
205
- const sourceYaml = files.find((file) => file.path === WORKBENCH_BENCHMARK_FILE)?.content ?? null;
206
- if (!sourceYaml) {
207
- return null;
208
- }
209
- return { sourceYaml, files };
210
- }
211
- function readSurfaceSnapshotFile(value) {
212
- const record = asRecord(value);
213
- if (!record) {
214
- return null;
215
- }
216
- const filePath = typeof record?.path === "string" ? record.path : "";
217
- const content = typeof record?.content === "string" ? record.content : null;
218
- if (!filePath || content === null) {
219
- return null;
220
- }
221
- return {
222
- path: filePath,
223
- kind: record.kind === "binary" ? "binary" : "text",
224
- encoding: record.encoding === "base64" ? "base64" : "utf8",
225
- content,
226
- executable: record.executable === true,
227
- };
228
- }
229
- async function readArchiveRecord(kind, id, read) {
230
- try {
231
- return await read();
232
- }
233
- catch (error) {
234
- if (error instanceof Error && error.message === `${kind} not found: ${id}`) {
235
- throw new WorkbenchInspectionError(error.message, { status: 404 });
236
- }
237
- throw error;
238
- }
239
- }
240
- async function readExecutionFilesForRun(workspace, runId, jobId) {
241
- await readExecutionJobForRun(workspace, runId, jobId);
242
- return await readLocalExecutionFiles(workspace, jobId);
243
- }
244
- async function readExecutionJobForRun(workspace, runId, jobId) {
245
- const job = await readLocalJobInRun(workspace, runId, jobId);
246
- if (!job) {
247
- throw new WorkbenchInspectionError(`Execution job not found: ${jobId}`, { status: 404 });
248
- }
249
- return job;
250
- }
251
- function readLocalAggregateTrace(job) {
252
- const trace = job.trace;
253
- if (!trace || typeof trace !== "object" || Array.isArray(trace)) {
254
- return { trace_id: job.id, spans: [], events: [], summaries: [] };
255
- }
256
- const record = trace;
257
- return {
258
- trace_id: typeof record.trace_id === "string" ? record.trace_id : job.id,
259
- spans: Array.isArray(record.spans) ? record.spans : [],
260
- events: Array.isArray(record.events) ? record.events : [],
261
- summaries: Array.isArray(record.summaries) ? record.summaries : [],
262
- };
263
- }
264
- function readLocalTraceSessions(job, role) {
265
- if (!Array.isArray(job.traceSessions)) {
266
- return [];
267
- }
268
- return job.traceSessions.map((session) => ({
269
- id: typeof session.id === "string" && session.id.length > 0
270
- ? session.id
271
- : `${job.id}:trace`,
272
- jobId: typeof session.jobId === "string" && session.jobId.length > 0
273
- ? session.jobId
274
- : job.id,
275
- role: session.role === "improver" || session.role === "runner" || session.role === "engine"
276
- ? session.role
277
- : role,
278
- kind: typeof session.kind === "string" && session.kind.length > 0 ? session.kind : "trace",
279
- label: traceSessionDisplayLabel(session, role),
280
- sourcePath: typeof session.sourcePath === "string" ? session.sourcePath : null,
281
- trace: sanitizeLocalTrace(session.trace, session.id),
282
- ...(session.metadata && typeof session.metadata === "object" && !Array.isArray(session.metadata)
283
- ? { metadata: session.metadata }
284
- : {}),
285
- }));
286
- }
287
- function traceSessionDisplayLabel(session, fallbackRole) {
288
- const role = session.role === "improver" || session.role === "runner" || session.role === "engine"
289
- ? session.role
290
- : fallbackRole;
291
- return typeof session.label === "string" && session.label.length > 0
292
- ? session.label
293
- : typeof session.sourcePath === "string" && session.sourcePath.length > 0
294
- ? traceSessionLabel(session.sourcePath, role)
295
- : "Trace";
296
- }
297
- function sanitizeLocalTrace(trace, fallbackId) {
298
- if (!trace || typeof trace !== "object" || Array.isArray(trace)) {
299
- return { trace_id: fallbackId, spans: [], events: [], summaries: [] };
300
- }
301
- const record = trace;
302
- return {
303
- trace_id: typeof record.trace_id === "string" ? record.trace_id : fallbackId,
304
- spans: Array.isArray(record.spans) ? record.spans : [],
305
- events: Array.isArray(record.events) ? record.events : [],
306
- summaries: Array.isArray(record.summaries) ? record.summaries : [],
307
- };
308
- }
309
- function asRecord(value) {
310
- return value && typeof value === "object" && !Array.isArray(value)
311
- ? value
312
- : null;
313
- }
314
- function normalizeOptionalFingerprint(value) {
315
- const normalized = value?.trim();
316
- return normalized ? normalized : null;
317
- }
@@ -1,63 +0,0 @@
1
- import { resolveWorkbenchResolvedSourceYaml, type Json, type SurfaceSnapshotFile } from "@workbench-ai/workbench-core";
2
- import { type WorkbenchEngineCase, type WorkbenchEngineResolveResult } from "@workbench-ai/workbench-protocol";
3
- import { type WorkspaceSnapshotFile } from "./workspace-snapshot.js";
4
- import { type ResolvedWorkbenchAdapter } from "./adapter-project.js";
5
- export declare const WORKBENCH_BENCHMARK_FILE = "benchmark.yaml";
6
- export declare const WORKBENCH_CANDIDATES_DIR = "candidates";
7
- export declare const WORKBENCH_CANDIDATE_FILE = "candidate.yaml";
8
- export type RemoteFile = WorkspaceSnapshotFile;
9
- export interface LocalProjectSource {
10
- dir: string;
11
- specPath: string;
12
- specSource: string;
13
- spec: ReturnType<typeof resolveWorkbenchResolvedSourceYaml>;
14
- benchmarkPath: string;
15
- benchmarkSource: string;
16
- candidateName: string;
17
- candidateDir: string;
18
- candidateFilesPath: string;
19
- candidateSpecPath: string;
20
- candidateSource: string;
21
- candidateRunId: string;
22
- candidateRunIds: string[];
23
- benchmarkAdapterSources: string[];
24
- benchmarkAdapterIds: string[];
25
- dockerfilePath: string;
26
- dockerfile: string;
27
- runtimeDockerfile: string;
28
- dockerfileFiles: RemoteFile[];
29
- candidateFiles: RemoteFile[];
30
- engineResolveFiles: RemoteFile[];
31
- adapters: ResolvedWorkbenchAdapter[];
32
- adapterFiles: RemoteFile[];
33
- caseIds: string[];
34
- engineCases: WorkbenchEngineCase[];
35
- engineResolve: LocalEngineResolveInvocation;
36
- engineResolveFingerprintPath: string;
37
- engineResolveEnvironment?: WorkbenchEngineResolveResult["environment"];
38
- sourceFiles: SurfaceSnapshotFile[];
39
- }
40
- export interface LocalAuthoredProjectSource {
41
- dir: string;
42
- specPath: string;
43
- specSource: string;
44
- benchmarkPath: string;
45
- benchmarkSource: string;
46
- candidateDir: string;
47
- candidateSpecPath: string;
48
- candidateSource: string;
49
- sourceFiles: SurfaceSnapshotFile[];
50
- }
51
- export interface LocalEngineResolveInvocation {
52
- use: string;
53
- with: Json;
54
- auth?: Json;
55
- }
56
- interface LocalProjectSourceOptions {
57
- runId?: string;
58
- }
59
- export declare function readLocalProjectSource(source: string, options?: LocalProjectSourceOptions): Promise<LocalProjectSource>;
60
- export declare function readLocalAuthoredProjectSource(source: string, options?: LocalProjectSourceOptions): Promise<LocalAuthoredProjectSource>;
61
- export declare function remoteEngineResolveFiles(source: LocalProjectSource): RemoteFile[];
62
- export {};
63
- //# sourceMappingURL=project-source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-source.d.ts","sourceRoot":"","sources":["../src/project-source.ts"],"names":[],"mappings":"AAKA,OAAO,EAOL,kCAAkC,EAGlC,KAAK,IAAI,EACT,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAUL,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EAClC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAML,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,wBAAwB,mBAAsB,CAAC;AAC5D,eAAO,MAAM,wBAAwB,eAAe,CAAC;AACrD,eAAO,MAAM,wBAAwB,mBAAsB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kBAAkB,EAAE,UAAU,EAAE,CAAC;IACjC,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,4BAA4B,EAAE,MAAM,CAAC;IACrC,wBAAwB,CAAC,EAAE,4BAA4B,CAAC,aAAa,CAAC,CAAC;IACvE,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,UAAU,yBAAyB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CA8G7B;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,0BAA0B,CAAC,CA6BrC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,EAAE,CAqBjF"}