@xenos1996/usa 2.3.3 → 2.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 (39) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +21 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/engine/audit.d.ts.map +1 -1
  6. package/dist/engine/audit.js +22 -0
  7. package/dist/engine/audit.js.map +1 -1
  8. package/dist/engine/evaluate.d.ts.map +1 -1
  9. package/dist/engine/evaluate.js +1 -0
  10. package/dist/engine/evaluate.js.map +1 -1
  11. package/dist/foundation/interview.d.ts +63 -0
  12. package/dist/foundation/interview.d.ts.map +1 -0
  13. package/dist/foundation/interview.js +459 -0
  14. package/dist/foundation/interview.js.map +1 -0
  15. package/dist/foundation/loader.d.ts +22 -0
  16. package/dist/foundation/loader.d.ts.map +1 -0
  17. package/dist/foundation/loader.js +240 -0
  18. package/dist/foundation/loader.js.map +1 -0
  19. package/dist/foundation/types.d.ts +73 -0
  20. package/dist/foundation/types.d.ts.map +1 -0
  21. package/dist/foundation/types.js +55 -0
  22. package/dist/foundation/types.js.map +1 -0
  23. package/dist/report/foundation.d.ts +44 -0
  24. package/dist/report/foundation.d.ts.map +1 -0
  25. package/dist/report/foundation.js +147 -0
  26. package/dist/report/foundation.js.map +1 -0
  27. package/dist/report/json.d.ts +1 -0
  28. package/dist/report/json.d.ts.map +1 -1
  29. package/dist/report/json.js +2 -0
  30. package/dist/report/json.js.map +1 -1
  31. package/dist/report/markdown.d.ts.map +1 -1
  32. package/dist/report/markdown.js +10 -0
  33. package/dist/report/markdown.js.map +1 -1
  34. package/dist/types.d.ts +6 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/types.js.map +1 -1
  37. package/package.json +1 -1
  38. package/rules/core/foundation.yaml +307 -0
  39. package/rules/index.yaml +1 -0
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Foundation interview: pure question/answer builders plus a thin line-driven
3
+ * driver for `usa foundation init`.
4
+ *
5
+ * Separation is the point: everything in the "builders" section is pure
6
+ * (no readline, no fs, no console) so tests can drive the whole interview
7
+ * without a terminal. The driver at the bottom only prints prompts, reads
8
+ * lines through an injected `ask` function, and writes the file.
9
+ *
10
+ * Note on sync I/O: the CLI entrypoint is synchronous
11
+ * (`process.exit(main(...))`), so the driver reads stdin with blocking
12
+ * `fs.readSync` instead of `node:readline` (which is async-only and would be
13
+ * truncated by `process.exit`). Piped stdin and TTYs both work.
14
+ */
15
+ import fs from 'node:fs';
16
+ import path from 'node:path';
17
+ import { FOUNDATION_VERSION, INTENT_OPTIONS, STAGE_OPTIONS, defaultFoundation, } from './types.js';
18
+ import { foundationFile, parseFoundationYamlText, sanitizeIntent } from './loader.js';
19
+ const boolRead = (get) => (config) => get(config) ? 'yes' : 'no';
20
+ export const INTERVIEW_QUESTIONS = [
21
+ {
22
+ id: 'project.name',
23
+ prompt: 'Project name',
24
+ kind: 'text',
25
+ read: (c) => c.project.name,
26
+ },
27
+ {
28
+ id: 'project.vision',
29
+ prompt: 'Vision (one or two sentences, free text)',
30
+ kind: 'text',
31
+ read: (c) => c.project.vision,
32
+ },
33
+ {
34
+ id: 'project.intents',
35
+ prompt: 'Intents (comma-separated)',
36
+ kind: 'multi-select',
37
+ options: INTENT_OPTIONS,
38
+ help: `One or more of: ${INTENT_OPTIONS.join(', ')}. Each becomes an intent:<value> fact.`,
39
+ read: (c) => c.project.intents.join(', '),
40
+ },
41
+ {
42
+ id: 'stage',
43
+ prompt: 'Stage target',
44
+ kind: 'select',
45
+ options: STAGE_OPTIONS,
46
+ read: (c) => c.stage ?? '',
47
+ },
48
+ {
49
+ id: 'pillars.docs.required',
50
+ prompt: 'Required docs files (comma-separated)',
51
+ kind: 'list',
52
+ help: 'Files the docs pillar requires to exist, e.g. README.md, docs/ARCHITECTURE.md.',
53
+ read: (c) => c.pillars.docs.required.join(', '),
54
+ },
55
+ {
56
+ id: 'pillars.governance.codeOfConduct',
57
+ prompt: 'Require a code of conduct?',
58
+ kind: 'boolean',
59
+ read: boolRead((c) => c.pillars.governance.codeOfConduct),
60
+ },
61
+ {
62
+ id: 'pillars.governance.contributing',
63
+ prompt: 'Require contributing guidance?',
64
+ kind: 'boolean',
65
+ read: boolRead((c) => c.pillars.governance.contributing),
66
+ },
67
+ {
68
+ id: 'pillars.governance.securityPolicy',
69
+ prompt: 'Require a security policy?',
70
+ kind: 'boolean',
71
+ read: boolRead((c) => c.pillars.governance.securityPolicy),
72
+ },
73
+ {
74
+ id: 'pillars.governance.license',
75
+ prompt: 'Require a license file?',
76
+ kind: 'boolean',
77
+ read: boolRead((c) => c.pillars.governance.license),
78
+ },
79
+ {
80
+ id: 'pillars.ai.readable',
81
+ prompt: 'AI posture: may assistants read this repo?',
82
+ kind: 'boolean',
83
+ read: boolRead((c) => c.pillars.ai.readable),
84
+ },
85
+ {
86
+ id: 'pillars.ai.writable',
87
+ prompt: 'AI posture: may assistants write to this repo?',
88
+ kind: 'boolean',
89
+ read: boolRead((c) => c.pillars.ai.writable),
90
+ },
91
+ {
92
+ id: 'pillars.testing.dirs',
93
+ prompt: 'Test directories (comma-separated)',
94
+ kind: 'list',
95
+ read: (c) => c.pillars.testing.dirs.join(', '),
96
+ },
97
+ {
98
+ id: 'pillars.testing.minCoverage',
99
+ prompt: 'Minimum coverage percent (0-100, empty clears)',
100
+ kind: 'number',
101
+ read: (c) => c.pillars.testing.minCoverage === undefined ? '' : String(c.pillars.testing.minCoverage),
102
+ },
103
+ {
104
+ id: 'pillars.environment.files',
105
+ prompt: 'Environment files (comma-separated)',
106
+ kind: 'list',
107
+ help: 'Env exemplars contributors copy, e.g. .env.example.',
108
+ read: (c) => c.pillars.environment.files.join(', '),
109
+ },
110
+ {
111
+ id: 'pillars.pipelines.local',
112
+ prompt: 'Local pipeline scripts (comma-separated package script names)',
113
+ kind: 'list',
114
+ read: (c) => c.pillars.pipelines.local.join(', '),
115
+ },
116
+ {
117
+ id: 'pillars.pipelines.ci',
118
+ prompt: 'CI workflow paths (comma-separated)',
119
+ kind: 'list',
120
+ read: (c) => c.pillars.pipelines.ci.join(', '),
121
+ },
122
+ {
123
+ id: 'pillars.standards',
124
+ prompt: 'Standards catalogues (comma-separated, empty for none)',
125
+ kind: 'list',
126
+ read: (c) => c.pillars.standards.join(', '),
127
+ },
128
+ {
129
+ id: 'pillars.specs',
130
+ prompt: 'Spec documents (comma-separated, empty for none)',
131
+ kind: 'list',
132
+ read: (c) => c.pillars.specs.join(', '),
133
+ },
134
+ ];
135
+ function clone(config) {
136
+ return JSON.parse(JSON.stringify(config));
137
+ }
138
+ function parseBool(raw, id) {
139
+ const v = raw.trim().toLowerCase();
140
+ if (['yes', 'y', 'true', '1'].includes(v))
141
+ return true;
142
+ if (['no', 'n', 'false', '0'].includes(v))
143
+ return false;
144
+ throw new Error(`"${id}": expected yes/no, got ${JSON.stringify(raw)}`);
145
+ }
146
+ function splitList(raw) {
147
+ return raw
148
+ .split(',')
149
+ .map((s) => s.trim())
150
+ .filter(Boolean);
151
+ }
152
+ /**
153
+ * Applies one raw answer to a copy of `config` and returns it. An empty
154
+ * answer keeps the current value. Unknown question ids and invalid values
155
+ * throw (the driver catches per-question and re-prompts).
156
+ *
157
+ * One handler per answer kind — adding a kind means adding a line, not a
158
+ * branch (the dispatch-table ethos the engine itself follows).
159
+ */
160
+ export function applyInterviewAnswer(config, id, raw) {
161
+ const question = INTERVIEW_QUESTIONS.find((q) => q.id === id);
162
+ if (!question)
163
+ throw new Error(`unknown interview question: ${JSON.stringify(id)}`);
164
+ if (raw.trim() === '')
165
+ return clone(config);
166
+ return ANSWER_HANDLERS[question.kind](clone(config), id, raw, question);
167
+ }
168
+ function checkOption(id, raw, value, options) {
169
+ if (!options.includes(value)) {
170
+ throw new Error(`"${id}": unknown value ${JSON.stringify(raw)} (expected one of ${options.join(', ')})`);
171
+ }
172
+ }
173
+ /** One check kind per entry — adding a kind means adding a line, not a branch. */
174
+ const ANSWER_HANDLERS = {
175
+ text: (next, id, raw) => {
176
+ setPath(next, id, raw.trim());
177
+ return next;
178
+ },
179
+ 'multi-select': (next, id, raw, question) => {
180
+ const values = splitList(raw).map((s) => s.toLowerCase());
181
+ if (values.length === 0)
182
+ return next;
183
+ const options = question.options ?? [];
184
+ for (const v of values)
185
+ checkOption(id, v, v, options);
186
+ setPath(next, id, values);
187
+ return next;
188
+ },
189
+ select: (next, id, raw, question) => {
190
+ const v = raw.trim().toLowerCase();
191
+ checkOption(id, raw.trim(), v, question.options ?? []);
192
+ setPath(next, id, v);
193
+ return next;
194
+ },
195
+ boolean: (next, id, raw) => {
196
+ setPath(next, id, parseBool(raw, id));
197
+ return next;
198
+ },
199
+ number: (next, id, raw) => {
200
+ const n = Number(raw.trim());
201
+ if (!Number.isFinite(n) || n < 0 || n > 100) {
202
+ throw new Error(`"${id}": expected a number from 0 to 100, got ${JSON.stringify(raw)}`);
203
+ }
204
+ setPath(next, id, n);
205
+ return next;
206
+ },
207
+ list: (next, id, raw) => {
208
+ setPath(next, id, splitList(raw));
209
+ return next;
210
+ },
211
+ };
212
+ /**
213
+ * Question ids are the schema: only ids the interview asks may be written.
214
+ * The allowlist keeps a typo'd id loud (same message as before) while the
215
+ * setter itself stays a dumb path walk with no per-field branches.
216
+ */
217
+ const KNOWN_IDS = new Set(INTERVIEW_QUESTIONS.map((q) => q.id));
218
+ function setPath(config, id, value) {
219
+ if (!KNOWN_IDS.has(id))
220
+ throw new Error(`unknown interview question: ${JSON.stringify(id)}`);
221
+ const keys = id.split('.');
222
+ let node = config;
223
+ for (const key of keys.slice(0, -1)) {
224
+ node = node[key];
225
+ }
226
+ node[keys[keys.length - 1]] = value;
227
+ }
228
+ /**
229
+ * Builds a FoundationConfig from a `{ [questionId]: rawAnswer }` map, in
230
+ * question order, starting from defaults. Pure; throws on invalid values.
231
+ */
232
+ export function foundationFromAnswers(answers, projectName = 'project') {
233
+ let config = defaultFoundation(projectName);
234
+ for (const question of INTERVIEW_QUESTIONS) {
235
+ const raw = answers[question.id];
236
+ if (raw !== undefined)
237
+ config = applyInterviewAnswer(config, question.id, raw);
238
+ }
239
+ return config;
240
+ }
241
+ /** Renders one prompt line, e.g. `Stage target [prototype]: `. Pure. */
242
+ export function formatQuestionPrompt(question, config) {
243
+ const current = question.read(config);
244
+ const options = question.kind === 'multi-select' || question.kind === 'select'
245
+ ? ` (${question.options?.join('|')})`
246
+ : '';
247
+ const help = question.help ? `\n ${question.help}` : '';
248
+ return `${question.prompt}${options} [${current}]:${help}\n> `;
249
+ }
250
+ /* -------------------------------------------------------- commented YAML -- */
251
+ const BARE_RE = /^[A-Za-z0-9][A-Za-z0-9_./-]*$/;
252
+ function yq(value) {
253
+ if (value === '')
254
+ return '""';
255
+ return BARE_RE.test(value) ? value : JSON.stringify(value);
256
+ }
257
+ function ylist(items, indent) {
258
+ if (items.length === 0)
259
+ return ' []';
260
+ return `\n${items.map((item) => `${indent} - ${yq(item)}`).join('\n')}`;
261
+ }
262
+ /**
263
+ * Renders a commented foundation.yaml. Deterministic: fixed key order, fixed
264
+ * comments. Round-trips through `parseFoundationYamlText`.
265
+ */
266
+ export function renderFoundationYaml(config) {
267
+ const p = config.pillars;
268
+ const lines = [
269
+ '# USA foundation intent — what this project is and what it promises.',
270
+ '# Deterministic input to readiness auditing: the coordinator turns',
271
+ '# project.intents[] into intent:<value> facts. Hand-edit freely, but keep',
272
+ '# it parseable — a broken file fails the audit loudly, never silently.',
273
+ `version: ${FOUNDATION_VERSION}`,
274
+ '',
275
+ '# Who this project is for and what it wants to be.',
276
+ 'project:',
277
+ ` name: ${yq(config.project.name)}`,
278
+ ` vision: ${yq(config.project.vision)}`,
279
+ ` # One or more of: ${INTENT_OPTIONS.join(', ')}.`,
280
+ ` intents:${ylist(config.project.intents, ' ')}`,
281
+ '',
282
+ `# Stage target: ${STAGE_OPTIONS.join('|')}.`,
283
+ config.stage === undefined ? '# stage: prototype' : `stage: ${yq(config.stage)}`,
284
+ '',
285
+ 'pillars:',
286
+ ' # Files the docs pillar requires to exist.',
287
+ ` docs:\n required:${ylist(p.docs.required, ' ')}`,
288
+ ' # Governance files the project promises to keep.',
289
+ ' governance:',
290
+ ` codeOfConduct: ${p.governance.codeOfConduct}`,
291
+ ` contributing: ${p.governance.contributing}`,
292
+ ` securityPolicy: ${p.governance.securityPolicy}`,
293
+ ` license: ${p.governance.license}`,
294
+ ' # AI posture: may assistants read, and may they write?',
295
+ ' ai:',
296
+ ` readable: ${p.ai.readable}`,
297
+ ` writable: ${p.ai.writable}`,
298
+ ' # Where tests live and the coverage bar (0-100).',
299
+ ' testing:',
300
+ ` dirs:${ylist(p.testing.dirs, ' ')}`,
301
+ ` minCoverage: ${p.testing.minCoverage === undefined ? 'null' : p.testing.minCoverage}`,
302
+ ' # Env exemplars contributors copy.',
303
+ ` environment:\n files:${ylist(p.environment.files, ' ')}`,
304
+ ' # Local package scripts and CI workflow paths.',
305
+ ' pipelines:',
306
+ ` local:${ylist(p.pipelines.local, ' ')}`,
307
+ ` ci:${ylist(p.pipelines.ci, ' ')}`,
308
+ ' # Standards catalogues and spec documents (empty when none).',
309
+ ` standards:${ylist(p.standards, ' ')}`,
310
+ ` specs:${ylist(p.specs, ' ')}`,
311
+ '',
312
+ ];
313
+ return lines.join('\n');
314
+ }
315
+ /* --------------------------------------------------------------- summary -- */
316
+ /**
317
+ * Human-readable rendering of the effective intent plus the exact facts it
318
+ * would assert. Used by `usa foundation show`. Pure.
319
+ */
320
+ export function summarizeFoundation(config) {
321
+ return [...summarizeHead(config), ...summarizePillars(config.pillars)].join('\n');
322
+ }
323
+ /** Identity block: who this project is and which facts that asserts. */
324
+ function summarizeHead(config) {
325
+ const facts = config.project.intents
326
+ .map((entry) => sanitizeIntent(entry))
327
+ .filter((f) => f !== undefined);
328
+ return [
329
+ `# Foundation: ${config.project.name || '(unnamed)'}`,
330
+ `vision: ${config.project.vision || '(none)'}`,
331
+ `stage: ${config.stage ?? '(none)'}`,
332
+ `intents: ${config.project.intents.length ? config.project.intents.join(', ') : '(none)'}`,
333
+ 'facts this intent would assert:',
334
+ ...(facts.length ? facts.map((f) => ` ${f}`) : [' (none — no usable intents)']),
335
+ ];
336
+ }
337
+ /** An empty list reads as `(none)` rather than an empty stare. */
338
+ function joinOrNone(items) {
339
+ return items.length ? items.join(', ') : '(none)';
340
+ }
341
+ /** Names of the governance promises switched on, in questionnaire order. */
342
+ function enabledGovernanceNames(gov) {
343
+ return [
344
+ ['code-of-conduct', gov.codeOfConduct],
345
+ ['contributing', gov.contributing],
346
+ ['security-policy', gov.securityPolicy],
347
+ ['license', gov.license],
348
+ ]
349
+ .filter(([, on]) => on)
350
+ .map(([name]) => name);
351
+ }
352
+ /** One line per pillar promise, in pillar order. */
353
+ function summarizePillars(p) {
354
+ return [
355
+ 'pillars:',
356
+ ` docs.required: ${joinOrNone(p.docs.required)}`,
357
+ ` governance: ${joinOrNone(enabledGovernanceNames(p.governance))}`,
358
+ ` ai: ${p.ai.readable ? 'readable' : 'not readable'}, ${p.ai.writable ? 'writable' : 'not writable'}`,
359
+ ` testing: ${joinOrNone(p.testing.dirs)}${p.testing.minCoverage === undefined ? '' : ` @ >=${p.testing.minCoverage}%`}`,
360
+ ` environment: ${joinOrNone(p.environment.files)}`,
361
+ ` pipelines.local: ${joinOrNone(p.pipelines.local)}`,
362
+ ` pipelines.ci: ${joinOrNone(p.pipelines.ci)}`,
363
+ ` standards: ${joinOrNone(p.standards)}`,
364
+ ` specs: ${joinOrNone(p.specs)}`,
365
+ ];
366
+ }
367
+ /**
368
+ * Blocking stdin line reader (see module note). Returns one line without the
369
+ * trailing newline, or null on EOF. The prompt is written as-is to stdout.
370
+ */
371
+ export function createStdinAsk(fd = 0, write = (text) => process.stdout.write(text)) {
372
+ const one = Buffer.alloc(1);
373
+ return (prompt) => {
374
+ write(prompt);
375
+ const chunks = [];
376
+ for (;;) {
377
+ let n;
378
+ try {
379
+ n = fs.readSync(fd, one, 0, 1, null);
380
+ }
381
+ catch {
382
+ return null;
383
+ }
384
+ if (n === 0)
385
+ return chunks.length === 0 ? null : Buffer.concat(chunks).toString('utf8');
386
+ const byte = one[0];
387
+ if (byte === 10)
388
+ return Buffer.concat(chunks).toString('utf8');
389
+ if (byte !== 13)
390
+ chunks.push(Buffer.from([byte]));
391
+ }
392
+ };
393
+ }
394
+ /** Ask one question until it validates (EOF keeps the default). Sync. */
395
+ function askInterviewQuestion(question, config, ask, print, error) {
396
+ for (;;) {
397
+ const raw = ask(formatQuestionPrompt(question, config));
398
+ if (raw === null) {
399
+ print('(EOF — keeping defaults for the remaining questions.)');
400
+ return config;
401
+ }
402
+ try {
403
+ return applyInterviewAnswer(config, question.id, raw);
404
+ }
405
+ catch (err) {
406
+ error(err.message);
407
+ }
408
+ }
409
+ }
410
+ /** `usa foundation init`: interview (or defaults) → commented YAML. Sync. */
411
+ export function runFoundationInit(opts) {
412
+ const print = opts.print ?? ((line) => console.log(line));
413
+ const error = opts.error ?? ((line) => console.error(line));
414
+ const dir = path.resolve(opts.dir);
415
+ const file = foundationFile(dir);
416
+ try {
417
+ if (fs.existsSync(file)) {
418
+ error(`${file} already exists — leaving it alone.`);
419
+ return 0;
420
+ }
421
+ const projectName = opts.projectName ?? path.basename(dir);
422
+ let config = defaultFoundation(projectName);
423
+ if (!opts.nonInteractive) {
424
+ const ask = opts.ask ?? createStdinAsk();
425
+ print(`Capturing foundation intent for ${projectName} (empty answers keep defaults).`);
426
+ for (const question of INTERVIEW_QUESTIONS) {
427
+ config = askInterviewQuestion(question, config, ask, print, error);
428
+ }
429
+ }
430
+ fs.mkdirSync(path.dirname(file), { recursive: true });
431
+ fs.writeFileSync(file, renderFoundationYaml(config), 'utf8');
432
+ print(`created ${file}`);
433
+ return 0;
434
+ }
435
+ catch (err) {
436
+ error(err.message);
437
+ return 2;
438
+ }
439
+ }
440
+ /** `usa foundation show`: effective intent + asserted facts. Sync. */
441
+ export function runFoundationShow(opts) {
442
+ const print = opts.print ?? ((line) => console.log(line));
443
+ const error = opts.error ?? ((line) => console.error(line));
444
+ const file = foundationFile(path.resolve(opts.dir));
445
+ if (!fs.existsSync(file)) {
446
+ error(`no foundation file at ${file} — run \`usa foundation init\` first.`);
447
+ return 1;
448
+ }
449
+ try {
450
+ const config = parseFoundationYamlText(fs.readFileSync(file, 'utf8'), file);
451
+ print(summarizeFoundation(config));
452
+ return 0;
453
+ }
454
+ catch (err) {
455
+ error(err.message);
456
+ return 2;
457
+ }
458
+ }
459
+ //# sourceMappingURL=interview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../src/foundation/interview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type FoundationConfig } from './types.js';
2
+ export declare function foundationFile(root: string): string;
3
+ /**
4
+ * Sanitizes one raw intents[] entry to an `intent:<value>` flag, or
5
+ * `undefined` when the entry is not usable. Never throws.
6
+ */
7
+ export declare function sanitizeIntent(value: unknown): string | undefined;
8
+ /**
9
+ * Strictly parses foundation YAML text into a FoundationConfig. Unknown
10
+ * shapes throw; absent pillar sections backfill from defaults so the result
11
+ * always satisfies the schema. Exported for `foundation show` and tests.
12
+ *
13
+ * One section per helper — adding a pillar section means adding a function,
14
+ * not growing this one (see docs; the complexity budget is enforced by lint).
15
+ */
16
+ export declare function parseFoundationYamlText(text: string, file: string): FoundationConfig;
17
+ /**
18
+ * Reads `<root>/.usa/foundation.yaml` and returns one `intent:<value>` flag
19
+ * per usable intents[] entry. Missing file → `[]`. Anything broken → throws.
20
+ */
21
+ export declare function loadFoundationFacts(root: string): string[];
22
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/foundation/loader.ts"],"names":[],"mappings":"AAgBA,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAGpB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKjE;AA4BD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAUpF;AAwRD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAU1D"}