ai-agent-context 0.1.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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +279 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/bin.d.ts +3 -0
  5. package/dist/bin.d.ts.map +1 -0
  6. package/dist/bin.js +11 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/cli.d.ts +50 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +263 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/clean.d.ts +3 -0
  13. package/dist/commands/clean.d.ts.map +1 -0
  14. package/dist/commands/clean.js +53 -0
  15. package/dist/commands/clean.js.map +1 -0
  16. package/dist/commands/context.d.ts +4 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +15 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/diff.d.ts +4 -0
  21. package/dist/commands/diff.d.ts.map +1 -0
  22. package/dist/commands/diff.js +24 -0
  23. package/dist/commands/diff.js.map +1 -0
  24. package/dist/commands/explain.d.ts +4 -0
  25. package/dist/commands/explain.d.ts.map +1 -0
  26. package/dist/commands/explain.js +43 -0
  27. package/dist/commands/explain.js.map +1 -0
  28. package/dist/commands/init.d.ts +4 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +28 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/scan.d.ts +4 -0
  33. package/dist/commands/scan.d.ts.map +1 -0
  34. package/dist/commands/scan.js +35 -0
  35. package/dist/commands/scan.js.map +1 -0
  36. package/dist/commands/search.d.ts +9 -0
  37. package/dist/commands/search.d.ts.map +1 -0
  38. package/dist/commands/search.js +34 -0
  39. package/dist/commands/search.js.map +1 -0
  40. package/dist/commands/status.d.ts +4 -0
  41. package/dist/commands/status.d.ts.map +1 -0
  42. package/dist/commands/status.js +15 -0
  43. package/dist/commands/status.js.map +1 -0
  44. package/dist/index.d.ts +22 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +20 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/ui/console.d.ts +52 -0
  49. package/dist/ui/console.d.ts.map +1 -0
  50. package/dist/ui/console.js +114 -0
  51. package/dist/ui/console.js.map +1 -0
  52. package/dist/ui/format.d.ts +16 -0
  53. package/dist/ui/format.d.ts.map +1 -0
  54. package/dist/ui/format.js +290 -0
  55. package/dist/ui/format.js.map +1 -0
  56. package/package.json +57 -0
@@ -0,0 +1,15 @@
1
+ import { contextOptions } from "../cli.js";
2
+ import { renderStatus } from "../ui/format.js";
3
+ export async function runStatusCommand(context, dependencies) {
4
+ const { output, parsed, io } = context;
5
+ const agentContext = await dependencies.createContext(contextOptions(parsed, io));
6
+ const status = await agentContext.status();
7
+ if (context.json) {
8
+ output.print(JSON.stringify(status, null, 2));
9
+ return status.status === 'missing' ? 1 : 0;
10
+ }
11
+ for (const line of renderStatus(status))
12
+ output.print(line);
13
+ return 0;
14
+ }
15
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA0B,EAAE,YAA6B;IAC9F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;IAE3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Programmatic entry point of the `ai-agent-context` package.
3
+ *
4
+ * The CLI package re-exports the core API so that `import { AgentContext } from
5
+ * "ai-agent-context"` works exactly as documented in the README, while the core
6
+ * remains a separate, CLI-free package.
7
+ */
8
+ export * from '@ai-agent-context/core';
9
+ export { runCli, parseArguments, contextOptions, flagBoolean, flagList, flagString, CLI_NAME, CLI_VERSION } from './cli.ts';
10
+ export type { CliIo, ParsedArguments, CliCommandContext, CliDependencies } from './cli.ts';
11
+ export { ConsoleOutput, formatNumber, formatDuration, formatTable } from './ui/console.ts';
12
+ export type { ConsoleOptions } from './ui/console.ts';
13
+ export { renderScanSummary, renderStatus, renderExplain, renderDiff, renderRepositoryContext, renderSearchResults, } from './ui/format.ts';
14
+ export { runInitCommand } from './commands/init.ts';
15
+ export { runScanCommand } from './commands/scan.ts';
16
+ export { runDiffCommand } from './commands/diff.ts';
17
+ export { runStatusCommand } from './commands/status.ts';
18
+ export { runExplainCommand } from './commands/explain.ts';
19
+ export { runSearchCommand } from './commands/search.ts';
20
+ export { runContextCommand } from './commands/context.ts';
21
+ export { runCleanCommand } from './commands/clean.ts';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5H,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3F,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Programmatic entry point of the `ai-agent-context` package.
3
+ *
4
+ * The CLI package re-exports the core API so that `import { AgentContext } from
5
+ * "ai-agent-context"` works exactly as documented in the README, while the core
6
+ * remains a separate, CLI-free package.
7
+ */
8
+ export * from '@ai-agent-context/core';
9
+ export { runCli, parseArguments, contextOptions, flagBoolean, flagList, flagString, CLI_NAME, CLI_VERSION } from "./cli.js";
10
+ export { ConsoleOutput, formatNumber, formatDuration, formatTable } from "./ui/console.js";
11
+ export { renderScanSummary, renderStatus, renderExplain, renderDiff, renderRepositoryContext, renderSearchResults, } from "./ui/format.js";
12
+ export { runInitCommand } from "./commands/init.js";
13
+ export { runScanCommand } from "./commands/scan.js";
14
+ export { runDiffCommand } from "./commands/diff.js";
15
+ export { runStatusCommand } from "./commands/status.js";
16
+ export { runExplainCommand } from "./commands/explain.js";
17
+ export { runSearchCommand } from "./commands/search.js";
18
+ export { runContextCommand } from "./commands/context.js";
19
+ export { runCleanCommand } from "./commands/clean.js";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Console primitives for the CLI.
3
+ *
4
+ * - colours are disabled automatically when not a TTY, when `NO_COLOR` is set or
5
+ * when `--no-color` is passed;
6
+ * - progress output goes to stderr so that `--json` output on stdout stays
7
+ * machine-readable;
8
+ * - `quiet` mode silences everything except the final result.
9
+ */
10
+ export interface ConsoleOptions {
11
+ stdout: (line: string) => void;
12
+ stderr: (line: string) => void;
13
+ color: boolean;
14
+ quiet: boolean;
15
+ verbose: boolean;
16
+ }
17
+ export declare class ConsoleOutput {
18
+ private readonly options;
19
+ constructor(options: ConsoleOptions);
20
+ get quiet(): boolean;
21
+ get verbose(): boolean;
22
+ get supportsColor(): boolean;
23
+ private paint;
24
+ bold(text: string): string;
25
+ dim(text: string): string;
26
+ red(text: string): string;
27
+ green(text: string): string;
28
+ yellow(text: string): string;
29
+ blue(text: string): string;
30
+ cyan(text: string): string;
31
+ gray(text: string): string;
32
+ /** User facing output (stdout). */
33
+ print(line?: string): void;
34
+ /** Diagnostic/progress output (stderr). */
35
+ note(line: string): void;
36
+ debug(line: string): void;
37
+ warn(line: string): void;
38
+ error(line: string): void;
39
+ success(line: string): void;
40
+ heading(title: string): void;
41
+ /** `label value` line with a consistent alignment. */
42
+ field(label: string, value: string, indent?: number): void;
43
+ list(items: readonly string[], indent?: number): void;
44
+ blank(): void;
45
+ }
46
+ /** Formats a count with a thousands separator, independent of the locale. */
47
+ export declare function formatNumber(value: number): string;
48
+ /** Formats a duration in a human friendly way. */
49
+ export declare function formatDuration(ms: number): string;
50
+ /** Formats a very small table as aligned text. */
51
+ export declare function formatTable(rows: Array<[string, string]>, indent?: number): string[];
52
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/ui/console.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,OAAO,EAAE,cAAc;IAInC,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,OAAO,CAAC,KAAK;IAIb,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B,mCAAmC;IACnC,KAAK,CAAC,IAAI,SAAK,GAAG,IAAI;IAItB,2CAA2C;IAC3C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5B,uDAAuD;IACvD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,IAAI;IAKrD,IAAI,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,SAAI,GAAG,IAAI;IAKhD,KAAK,IAAI,IAAI;CAGd;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAI/E"}
@@ -0,0 +1,114 @@
1
+ const CODES = {
2
+ reset: '\u001b[0m',
3
+ bold: '\u001b[1m',
4
+ dim: '\u001b[2m',
5
+ red: '\u001b[31m',
6
+ green: '\u001b[32m',
7
+ yellow: '\u001b[33m',
8
+ blue: '\u001b[34m',
9
+ magenta: '\u001b[35m',
10
+ cyan: '\u001b[36m',
11
+ gray: '\u001b[90m',
12
+ };
13
+ export class ConsoleOutput {
14
+ options;
15
+ constructor(options) {
16
+ this.options = options;
17
+ }
18
+ get quiet() {
19
+ return this.options.quiet;
20
+ }
21
+ get verbose() {
22
+ return this.options.verbose;
23
+ }
24
+ get supportsColor() {
25
+ return this.options.color;
26
+ }
27
+ paint(code, text) {
28
+ return this.options.color ? `${CODES[code]}${text}${CODES.reset}` : text;
29
+ }
30
+ bold(text) {
31
+ return this.paint('bold', text);
32
+ }
33
+ dim(text) {
34
+ return this.paint('dim', text);
35
+ }
36
+ red(text) {
37
+ return this.paint('red', text);
38
+ }
39
+ green(text) {
40
+ return this.paint('green', text);
41
+ }
42
+ yellow(text) {
43
+ return this.paint('yellow', text);
44
+ }
45
+ blue(text) {
46
+ return this.paint('blue', text);
47
+ }
48
+ cyan(text) {
49
+ return this.paint('cyan', text);
50
+ }
51
+ gray(text) {
52
+ return this.paint('gray', text);
53
+ }
54
+ /** User facing output (stdout). */
55
+ print(line = '') {
56
+ this.options.stdout(line);
57
+ }
58
+ /** Diagnostic/progress output (stderr). */
59
+ note(line) {
60
+ if (this.options.quiet)
61
+ return;
62
+ this.options.stderr(line);
63
+ }
64
+ debug(line) {
65
+ if (!this.options.verbose)
66
+ return;
67
+ this.options.stderr(this.dim(line));
68
+ }
69
+ warn(line) {
70
+ this.options.stderr(`${this.yellow('\u26a0')} ${line}`);
71
+ }
72
+ error(line) {
73
+ this.options.stderr(`${this.red('\u2717')} ${line}`);
74
+ }
75
+ success(line) {
76
+ if (this.options.quiet)
77
+ return;
78
+ this.options.stdout(`${this.green('\u2713')} ${line}`);
79
+ }
80
+ heading(title) {
81
+ this.print(this.bold(title));
82
+ }
83
+ /** `label value` line with a consistent alignment. */
84
+ field(label, value, indent = 2) {
85
+ const padding = ' '.repeat(indent);
86
+ this.print(`${padding}${this.dim(label.padEnd(18))}${value}`);
87
+ }
88
+ list(items, indent = 2) {
89
+ const padding = ' '.repeat(indent);
90
+ for (const item of items)
91
+ this.print(`${padding}${item}`);
92
+ }
93
+ blank() {
94
+ this.print('');
95
+ }
96
+ }
97
+ /** Formats a count with a thousands separator, independent of the locale. */
98
+ export function formatNumber(value) {
99
+ return value.toLocaleString('en-US');
100
+ }
101
+ /** Formats a duration in a human friendly way. */
102
+ export function formatDuration(ms) {
103
+ if (ms < 1000)
104
+ return `${ms}ms`;
105
+ return `${(ms / 1000).toFixed(2)}s`;
106
+ }
107
+ /** Formats a very small table as aligned text. */
108
+ export function formatTable(rows, indent = 2) {
109
+ if (rows.length === 0)
110
+ return [];
111
+ const width = Math.max(...rows.map(([label]) => label.length));
112
+ return rows.map(([label, value]) => `${' '.repeat(indent)}${label.padEnd(width + 2)}${value}`);
113
+ }
114
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/ui/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Human readable projections.
3
+ *
4
+ * The JSON documents are canonical; these functions render the same information
5
+ * for a terminal. Output is plain text so it can be pasted into an issue, a PR
6
+ * description or an agent prompt.
7
+ */
8
+ import type { ContextDiff, ModuleExplanation, RepositoryContext, ScanReport, SearchResult, StatusReport } from '@ai-agent-context/core';
9
+ export declare function renderScanSummary(report: ScanReport): string[];
10
+ export declare function renderStatus(status: StatusReport): string[];
11
+ export declare function renderExplain(explanation: ModuleExplanation): string[];
12
+ export declare function renderDiff(diff: ContextDiff): string[];
13
+ export declare function renderRepositoryContext(context: RepositoryContext): string[];
14
+ /** Renders search results. */
15
+ export declare function renderSearchResults(results: readonly SearchResult[]): string[];
16
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,EACb,MAAM,wBAAwB,CAAC;AAUhC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CA6B9D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAqC3D;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAyGtE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CA2CtD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAyD5E;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,EAAE,CAS9E"}
@@ -0,0 +1,290 @@
1
+ import { formatDuration, formatNumber } from "./console.js";
2
+ function indicator(confidence) {
3
+ if (confidence >= 0.9)
4
+ return 'high';
5
+ if (confidence >= 0.7)
6
+ return 'medium';
7
+ if (confidence >= 0.5)
8
+ return 'low';
9
+ return 'speculative';
10
+ }
11
+ export function renderScanSummary(report) {
12
+ const lines = [];
13
+ lines.push('');
14
+ lines.push(`Files ${formatNumber(report.files.total)}`);
15
+ lines.push(`Source files ${formatNumber(report.files.source)}`);
16
+ lines.push(`Test files ${formatNumber(report.files.tests)}`);
17
+ lines.push(`Modules ${formatNumber(report.modules)}`);
18
+ lines.push(`Dependencies ${formatNumber(report.dependencies)}`);
19
+ lines.push(`External deps ${formatNumber(report.externalDependencies)}`);
20
+ lines.push(`Entry points ${formatNumber(report.entryPoints)}`);
21
+ lines.push(`Conventions ${formatNumber(report.conventions)}`);
22
+ lines.push(`Decisions ${formatNumber(report.decisions)}`);
23
+ const changes = report.changes;
24
+ lines.push(`Changes +${changes.added.length} added, ~${changes.modified.length} modified, -${changes.deleted.length} removed`);
25
+ lines.push(`Parsed/cache ${formatNumber(report.parsed)} parsed, ${formatNumber(report.reused)} from cache`);
26
+ lines.push(`Duration ${formatDuration(report.durationMs)}`);
27
+ if (report.affected.modules.length > 0)
28
+ lines.push(`Affected modules ${report.affected.modules.join(', ')}`);
29
+ const warnings = report.warnings.filter((warning) => warning.severity === 'warning');
30
+ if (warnings.length > 0) {
31
+ lines.push('');
32
+ lines.push(`Warnings (${warnings.length}):`);
33
+ for (const warning of warnings.slice(0, 10)) {
34
+ lines.push(` ${warning.message}${warning.source === undefined ? '' : ` [${warning.source}]`}`);
35
+ }
36
+ if (warnings.length > 10)
37
+ lines.push(` ...and ${warnings.length - 10} more (run with --verbose)`);
38
+ }
39
+ return lines;
40
+ }
41
+ export function renderStatus(status) {
42
+ const lines = [];
43
+ lines.push('Repository context');
44
+ lines.push('');
45
+ lines.push(`Status: ${status.status}`);
46
+ lines.push(`Last scan: ${status.lastScanAt ?? 'never'}`);
47
+ lines.push(`Config file: ${status.configPath ?? 'defaults (run agent-context init)'}`);
48
+ lines.push(`Config hash matches local state: ${status.configHashMatches ? 'yes' : 'no'}`);
49
+ lines.push('');
50
+ lines.push(`Files: ${formatNumber(status.counts.files)}`);
51
+ lines.push(`Modules: ${formatNumber(status.counts.modules)}`);
52
+ lines.push(`Dependencies: ${formatNumber(status.counts.dependencies)}`);
53
+ lines.push(`Entry points: ${formatNumber(status.counts.entryPoints)}`);
54
+ lines.push(`Conventions: ${formatNumber(status.counts.conventions)}`);
55
+ lines.push(`Decisions: ${formatNumber(status.counts.decisions)}`);
56
+ lines.push('');
57
+ lines.push(`Pending changes: ${status.changes.added.length + status.changes.modified.length + status.changes.deleted.length}`);
58
+ if (status.changes.added.length > 0)
59
+ lines.push(` Added: ${status.changes.added.length} file(s)`);
60
+ if (status.changes.modified.length > 0)
61
+ lines.push(` Modified: ${status.changes.modified.length} file(s)`);
62
+ if (status.changes.deleted.length > 0)
63
+ lines.push(` Deleted: ${status.changes.deleted.length} file(s)`);
64
+ if (status.contextFiles.missing.length > 0) {
65
+ lines.push(` Missing context files: ${status.contextFiles.missing.join(', ')}`);
66
+ }
67
+ for (const invalid of status.contextFiles.invalid)
68
+ lines.push(` Invalid: ${invalid.file} (${invalid.reason})`);
69
+ lines.push('');
70
+ const gitLine = status.git.available
71
+ ? `available (${status.git.commitsAnalyzed} commit(s) analyzed)`
72
+ : `unavailable (${status.git.reason ?? 'unknown reason'})`;
73
+ lines.push(`Git signals: ${gitLine}`);
74
+ if (status.status !== 'up-to-date') {
75
+ lines.push('');
76
+ lines.push('Run:');
77
+ lines.push(' agent-context scan');
78
+ }
79
+ return lines;
80
+ }
81
+ export function renderExplain(explanation) {
82
+ const lines = [];
83
+ lines.push(explanation.module.id);
84
+ lines.push('');
85
+ lines.push('Path:');
86
+ lines.push(` ${explanation.module.path === '' ? '<repository root>' : explanation.module.path}`);
87
+ lines.push('');
88
+ if (explanation.module.roles.length > 0) {
89
+ lines.push('Detected roles (heuristic, with confidence):');
90
+ for (const role of explanation.module.roles) {
91
+ lines.push(` ${role.value} (${role.confidence.toFixed(2)}, ${indicator(role.confidence)})`);
92
+ for (const evidence of role.evidence.slice(0, 2)) {
93
+ lines.push(` evidence: ${evidence.source} — ${evidence.detail}`);
94
+ }
95
+ }
96
+ lines.push('');
97
+ }
98
+ if (explanation.entryPoints.length > 0) {
99
+ lines.push('Entry points:');
100
+ for (const entry of explanation.entryPoints) {
101
+ lines.push(` ${entry.path} (${entry.type}, confidence ${entry.confidence.toFixed(2)})`);
102
+ }
103
+ lines.push('');
104
+ }
105
+ if (explanation.module.responsibilities.length > 0) {
106
+ lines.push('Responsibilities:');
107
+ for (const responsibility of explanation.module.responsibilities) {
108
+ lines.push(` - ${responsibility.value} (${responsibility.confidence.toFixed(2)})`);
109
+ }
110
+ lines.push('');
111
+ }
112
+ if (explanation.dependsOn.length > 0) {
113
+ lines.push('Depends on:');
114
+ for (const dependency of explanation.dependsOn) {
115
+ lines.push(` ${dependency.id} (${dependency.path}) — ${dependency.files} file(s), ${dependency.relationships.join(', ')}`);
116
+ }
117
+ lines.push('');
118
+ }
119
+ if (explanation.usedBy.length > 0) {
120
+ lines.push('Used by:');
121
+ for (const dependent of explanation.usedBy) {
122
+ lines.push(` ${dependent.id} (${dependent.path}) — ${dependent.files} file(s)`);
123
+ }
124
+ lines.push('');
125
+ }
126
+ if (explanation.externalDependencies.length > 0) {
127
+ lines.push('External dependencies:');
128
+ for (const dependency of explanation.externalDependencies) {
129
+ lines.push(` ${dependency.name} (${dependency.scope}, heuristic: ${dependency.importance.value} ${dependency.importance.confidence.toFixed(2)})`);
130
+ }
131
+ lines.push('');
132
+ }
133
+ if (explanation.publicApi.length > 0) {
134
+ lines.push('Public API:');
135
+ for (const entry of explanation.publicApi.slice(0, 20)) {
136
+ lines.push(` ${entry.name} (${entry.kind}) — ${entry.file}`);
137
+ }
138
+ lines.push('');
139
+ }
140
+ if (explanation.tests.files.length > 0) {
141
+ lines.push(`Tests: ${explanation.tests.testCount} test file(s)`);
142
+ for (const file of explanation.tests.files.slice(0, 5))
143
+ lines.push(` ${file}`);
144
+ lines.push('');
145
+ }
146
+ if (explanation.conventions.length > 0) {
147
+ lines.push('Relevant conventions:');
148
+ for (const convention of explanation.conventions) {
149
+ lines.push(` - [${convention.category}] ${convention.statement} (${convention.confidence.toFixed(2)})`);
150
+ }
151
+ lines.push('');
152
+ }
153
+ if (explanation.decisions.length > 0) {
154
+ lines.push('Relevant decisions:');
155
+ for (const decision of explanation.decisions) {
156
+ lines.push(` - ${decision.id} ${decision.title} (${decision.origin}, ${decision.status}) — ${decision.source}`);
157
+ }
158
+ lines.push('');
159
+ }
160
+ if (explanation.git !== null) {
161
+ lines.push('Git activity (neutral signals):');
162
+ lines.push(` historicalChanges ${explanation.git.historicalChanges}, recentChanges ${explanation.git.recentChanges}, changeFrequency ${explanation.git.changeFrequency}, lastChanged ${explanation.git.lastChanged ?? 'unknown'}`);
163
+ if (explanation.git.topContributors.length > 0) {
164
+ lines.push(` top contributors: ${explanation.git.topContributors.map((entry) => `${entry.name} (${entry.commits})`).join(', ')}`);
165
+ }
166
+ lines.push('');
167
+ }
168
+ if (explanation.impact.modules.length > 0) {
169
+ lines.push('Change impact (transitive dependents):');
170
+ for (const moduleId of explanation.impact.modules.slice(0, 15))
171
+ lines.push(` ${moduleId}`);
172
+ lines.push('');
173
+ }
174
+ if (explanation.relatedFiles.length > 0) {
175
+ lines.push('Files:');
176
+ for (const file of explanation.relatedFiles)
177
+ lines.push(` ${file}`);
178
+ lines.push('');
179
+ }
180
+ return lines;
181
+ }
182
+ export function renderDiff(diff) {
183
+ const lines = [];
184
+ lines.push('Repository context changes');
185
+ lines.push('');
186
+ const section = (title, items) => {
187
+ lines.push(`${title}:`);
188
+ if (items.length === 0)
189
+ lines.push(' no changes');
190
+ else
191
+ for (const item of items.slice(0, 40))
192
+ lines.push(` ${item}`);
193
+ if (items.length > 40)
194
+ lines.push(` ...and ${items.length - 40} more`);
195
+ lines.push('');
196
+ };
197
+ section('Added', diff.files.added);
198
+ section('Modified', diff.files.modified);
199
+ section('Removed', diff.files.removed);
200
+ section('Modules added', diff.modules.added);
201
+ section('Modules removed', diff.modules.removed);
202
+ section('Architecture (role changes, heuristic)', diff.modules.roleChanges.map((change) => `${change.moduleId}: +[${change.added.join(', ')}] -[${change.removed.join(', ')}]`));
203
+ section('Dependencies', [
204
+ ...diff.dependencies.added.map((edge) => `+ ${edge.from} → ${edge.to}`),
205
+ ...diff.dependencies.removed.map((edge) => `- ${edge.from} → ${edge.to}`),
206
+ ...diff.dependencies.externalAdded.map((name) => `+ external ${name}`),
207
+ ...diff.dependencies.externalRemoved.map((name) => `- external ${name}`),
208
+ ]);
209
+ section('Entry points', [
210
+ ...diff.entryPoints.added.map((entry) => `+ ${entry}`),
211
+ ...diff.entryPoints.removed.map((entry) => `- ${entry}`),
212
+ ]);
213
+ section('Conventions', [
214
+ ...diff.conventions.added.map((entry) => `+ ${entry}`),
215
+ ...diff.conventions.changed.map((entry) => `~ ${entry}`),
216
+ ...diff.conventions.removed.map((entry) => `- ${entry}`),
217
+ ]);
218
+ section('Decisions', [
219
+ ...diff.decisions.added.map((entry) => `+ ${entry}`),
220
+ ...diff.decisions.removed.map((entry) => `- ${entry}`),
221
+ ]);
222
+ if (!diff.hasChanges)
223
+ lines.push('No context changes since the last scan.');
224
+ return lines;
225
+ }
226
+ export function renderRepositoryContext(context) {
227
+ const lines = [];
228
+ lines.push(`Repository: ${context.repository.name}`);
229
+ lines.push(`Languages: ${context.repository.languages.join(', ')} · ${formatNumber(context.repository.fileCount)} files (${formatNumber(context.repository.sourceFileCount)} source, ${formatNumber(context.repository.testFileCount)} test)`);
230
+ lines.push(`Modules: ${formatNumber(context.repository.moduleCount)} · Symbols: ${formatNumber(context.repository.symbolCount)} · Module dependencies: ${formatNumber(context.repository.dependencyCount)}`);
231
+ lines.push(`Workspace: ${context.workspace.isMonorepo ? context.workspace.model : 'single package'} · package manager: ${context.workspace.packageManager}`);
232
+ lines.push('');
233
+ if (context.commands.length > 0) {
234
+ lines.push('Commands:');
235
+ for (const command of context.commands.slice(0, 12))
236
+ lines.push(` ${command.name}: ${command.command}`);
237
+ lines.push('');
238
+ }
239
+ lines.push('Modules (ranked by architectural centrality):');
240
+ for (const module of context.modules.slice(0, 12)) {
241
+ const roles = module.roles.length > 0
242
+ ? module.roles.map((role) => `${role.value} ${role.confidence.toFixed(2)}`).join(', ')
243
+ : 'no role above threshold';
244
+ lines.push(` ${module.id} (${module.path}) — ${module.files} file(s) — ${roles}`);
245
+ }
246
+ lines.push('');
247
+ if (context.entryPoints.length > 0) {
248
+ lines.push('Entry points:');
249
+ for (const entry of context.entryPoints.slice(0, 12)) {
250
+ lines.push(` ${entry.path} (${entry.type}, ${entry.confidence.toFixed(2)})`);
251
+ }
252
+ lines.push('');
253
+ }
254
+ if (context.externalDependencies.length > 0) {
255
+ lines.push('External dependencies (heuristic importance):');
256
+ for (const dependency of context.externalDependencies.slice(0, 12)) {
257
+ lines.push(` ${dependency.name} (${dependency.scope}, ${dependency.importance.value}, used by ${dependency.importedByModules} module(s))`);
258
+ }
259
+ lines.push('');
260
+ }
261
+ if (context.cycles.length > 0) {
262
+ lines.push('Module dependency cycles:');
263
+ for (const cycle of context.cycles)
264
+ lines.push(` ${cycle.join(' <-> ')}`);
265
+ lines.push('');
266
+ }
267
+ if (context.decisions.length > 0) {
268
+ lines.push('Decisions:');
269
+ for (const decision of context.decisions.slice(0, 10)) {
270
+ lines.push(` ${decision.id} ${decision.title} (${decision.origin}, ${decision.status})`);
271
+ }
272
+ lines.push('');
273
+ }
274
+ lines.push(`Conventions: ${context.conventions.length} detected (see .agent/conventions.md)`);
275
+ return lines;
276
+ }
277
+ /** Renders search results. */
278
+ export function renderSearchResults(results) {
279
+ if (results.length === 0)
280
+ return ['No results.', '', 'Try different keywords, for example: payment idempotency'];
281
+ const lines = [];
282
+ results.forEach((result, index) => {
283
+ lines.push(`${index + 1}. ${result.type} ${result.id} (score ${result.score})`);
284
+ lines.push(` reason: ${result.reason}`);
285
+ if (result.snippet !== undefined)
286
+ lines.push(` ${result.snippet}`);
287
+ });
288
+ return lines;
289
+ }
290
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5D,SAAS,SAAS,CAAC,UAAkB;IACnC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,KAAK,CAAC,IAAI,CACR,qBAAqB,OAAO,CAAC,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC,QAAQ,CAAC,MAAM,eAAe,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,CAC5H,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChH,KAAK,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,MAAM,GAAG,EAAE,4BAA4B,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,UAAU,IAAI,mCAAmC,EAAE,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,oCAAoC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,YAAY,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,iBAAiB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,iBAAiB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,CAAC,gBAAgB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,oBAAoB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CACnH,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;IACnG,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC;IAC5G,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IACzG,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAChH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS;QAClC,CAAC,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,eAAe,sBAAsB;QAChE,CAAC,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,gBAAgB,GAAG,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAA8B;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAClG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7F,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjD,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,MAAM,cAAc,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,KAAK,KAAK,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CACR,KAAK,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,aAAa,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,KAAK,UAAU,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CACR,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,gBAAgB,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACvI,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,KAAK,CAAC,SAAS,eAAe,CAAC,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3G,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CACR,uBAAuB,WAAW,CAAC,GAAG,CAAC,iBAAiB,mBAAmB,WAAW,CAAC,GAAG,CAAC,aAAa,qBAAqB,WAAW,CAAC,GAAG,CAAC,eAAe,iBAAiB,WAAW,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,EAAE,CACxN,CAAC;QACF,IAAI,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CACR,uBAAuB,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAwB,EAAQ,EAAE;QAChE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;YAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CACL,wCAAwC,EACxC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAC1B,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChG,CACF,CAAC;IACF,OAAO,CAAC,cAAc,EAAE;QACtB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC;QACvE,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC;QACzE,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC;QACtE,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC;KACzE,CAAC,CAAC;IACH,OAAO,CAAC,cAAc,EAAE;QACtB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACtD,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;KACzD,CAAC,CAAC;IACH,OAAO,CAAC,aAAa,EAAE;QACrB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACtD,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACxD,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;KACzD,CAAC,CAAC;IACH,OAAO,CAAC,WAAW,EAAE;QACnB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACpD,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;KACvD,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CACR,cAAc,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CACnO,CAAC;IACF,KAAK,CAAC,IAAI,CACR,YAAY,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,2BAA2B,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CACjM,CAAC;IACF,KAAK,CAAC,IAAI,CACR,cAAc,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,uBAAuB,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CACjJ,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC5D,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtF,CAAC,CAAC,yBAAyB,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,cAAc,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC5D,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACnE,KAAK,CAAC,IAAI,CACR,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,UAAU,CAAC,KAAK,aAAa,UAAU,CAAC,iBAAiB,aAAa,CAChI,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,WAAW,CAAC,MAAM,uCAAuC,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,mBAAmB,CAAC,OAAgC;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,0DAA0D,CAAC,CAAC;IACjH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,WAAW,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}