opena2a-cli 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 (150) hide show
  1. package/dist/adapters/docker.d.ts +8 -0
  2. package/dist/adapters/docker.d.ts.map +1 -0
  3. package/dist/adapters/docker.js +60 -0
  4. package/dist/adapters/docker.js.map +1 -0
  5. package/dist/adapters/import.d.ts +12 -0
  6. package/dist/adapters/import.d.ts.map +1 -0
  7. package/dist/adapters/import.js +76 -0
  8. package/dist/adapters/import.js.map +1 -0
  9. package/dist/adapters/index.d.ts +9 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +40 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/python.d.ts +9 -0
  14. package/dist/adapters/python.d.ts.map +1 -0
  15. package/dist/adapters/python.js +73 -0
  16. package/dist/adapters/python.js.map +1 -0
  17. package/dist/adapters/registry.d.ts +6 -0
  18. package/dist/adapters/registry.d.ts.map +1 -0
  19. package/dist/adapters/registry.js +86 -0
  20. package/dist/adapters/registry.js.map +1 -0
  21. package/dist/adapters/spawn.d.ts +9 -0
  22. package/dist/adapters/spawn.d.ts.map +1 -0
  23. package/dist/adapters/spawn.js +63 -0
  24. package/dist/adapters/spawn.js.map +1 -0
  25. package/dist/adapters/types.d.ts +35 -0
  26. package/dist/adapters/types.d.ts.map +1 -0
  27. package/dist/adapters/types.js +3 -0
  28. package/dist/adapters/types.js.map +1 -0
  29. package/dist/branding.d.ts +3 -0
  30. package/dist/branding.d.ts.map +1 -0
  31. package/dist/branding.js +21 -0
  32. package/dist/branding.js.map +1 -0
  33. package/dist/commands/baselines.d.ts +14 -0
  34. package/dist/commands/baselines.d.ts.map +1 -0
  35. package/dist/commands/baselines.js +269 -0
  36. package/dist/commands/baselines.js.map +1 -0
  37. package/dist/commands/guard.d.ts +38 -0
  38. package/dist/commands/guard.d.ts.map +1 -0
  39. package/dist/commands/guard.js +307 -0
  40. package/dist/commands/guard.js.map +1 -0
  41. package/dist/commands/init.d.ts +14 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +356 -0
  44. package/dist/commands/init.js.map +1 -0
  45. package/dist/commands/onepassword-migration.d.ts +23 -0
  46. package/dist/commands/onepassword-migration.d.ts.map +1 -0
  47. package/dist/commands/onepassword-migration.js +179 -0
  48. package/dist/commands/onepassword-migration.js.map +1 -0
  49. package/dist/commands/protect.d.ts +34 -0
  50. package/dist/commands/protect.d.ts.map +1 -0
  51. package/dist/commands/protect.js +642 -0
  52. package/dist/commands/protect.js.map +1 -0
  53. package/dist/commands/runtime.d.ts +28 -0
  54. package/dist/commands/runtime.d.ts.map +1 -0
  55. package/dist/commands/runtime.js +309 -0
  56. package/dist/commands/runtime.js.map +1 -0
  57. package/dist/commands/self-register.d.ts +39 -0
  58. package/dist/commands/self-register.d.ts.map +1 -0
  59. package/dist/commands/self-register.js +528 -0
  60. package/dist/commands/self-register.js.map +1 -0
  61. package/dist/commands/verify.d.ts +25 -0
  62. package/dist/commands/verify.d.ts.map +1 -0
  63. package/dist/commands/verify.js +300 -0
  64. package/dist/commands/verify.js.map +1 -0
  65. package/dist/contextual/advisor.d.ts +12 -0
  66. package/dist/contextual/advisor.d.ts.map +1 -0
  67. package/dist/contextual/advisor.js +94 -0
  68. package/dist/contextual/advisor.js.map +1 -0
  69. package/dist/contextual/index.d.ts +3 -0
  70. package/dist/contextual/index.d.ts.map +1 -0
  71. package/dist/contextual/index.js +7 -0
  72. package/dist/contextual/index.js.map +1 -0
  73. package/dist/guided/attack-walkthrough.d.ts +13 -0
  74. package/dist/guided/attack-walkthrough.d.ts.map +1 -0
  75. package/dist/guided/attack-walkthrough.js +113 -0
  76. package/dist/guided/attack-walkthrough.js.map +1 -0
  77. package/dist/guided/wizard.d.ts +2 -0
  78. package/dist/guided/wizard.d.ts.map +1 -0
  79. package/dist/guided/wizard.js +108 -0
  80. package/dist/guided/wizard.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +326 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/natural/index.d.ts +4 -0
  86. package/dist/natural/index.d.ts.map +1 -0
  87. package/dist/natural/index.js +9 -0
  88. package/dist/natural/index.js.map +1 -0
  89. package/dist/natural/intent-map.d.ts +7 -0
  90. package/dist/natural/intent-map.d.ts.map +1 -0
  91. package/dist/natural/intent-map.js +145 -0
  92. package/dist/natural/intent-map.js.map +1 -0
  93. package/dist/natural/llm-fallback.d.ts +8 -0
  94. package/dist/natural/llm-fallback.d.ts.map +1 -0
  95. package/dist/natural/llm-fallback.js +143 -0
  96. package/dist/natural/llm-fallback.js.map +1 -0
  97. package/dist/report/interactive-html.d.ts +51 -0
  98. package/dist/report/interactive-html.d.ts.map +1 -0
  99. package/dist/report/interactive-html.js +508 -0
  100. package/dist/report/interactive-html.js.map +1 -0
  101. package/dist/router.d.ts +23 -0
  102. package/dist/router.d.ts.map +1 -0
  103. package/dist/router.js +132 -0
  104. package/dist/router.js.map +1 -0
  105. package/dist/semantic/command-index.json +182 -0
  106. package/dist/semantic/index.d.ts +3 -0
  107. package/dist/semantic/index.d.ts.map +1 -0
  108. package/dist/semantic/index.js +28 -0
  109. package/dist/semantic/index.js.map +1 -0
  110. package/dist/semantic/search.d.ts +17 -0
  111. package/dist/semantic/search.d.ts.map +1 -0
  112. package/dist/semantic/search.js +123 -0
  113. package/dist/semantic/search.js.map +1 -0
  114. package/dist/util/action-prompt.d.ts +29 -0
  115. package/dist/util/action-prompt.d.ts.map +1 -0
  116. package/dist/util/action-prompt.js +126 -0
  117. package/dist/util/action-prompt.js.map +1 -0
  118. package/dist/util/advisories.d.ts +43 -0
  119. package/dist/util/advisories.d.ts.map +1 -0
  120. package/dist/util/advisories.js +229 -0
  121. package/dist/util/advisories.js.map +1 -0
  122. package/dist/util/colors.d.ts +9 -0
  123. package/dist/util/colors.d.ts.map +1 -0
  124. package/dist/util/colors.js +18 -0
  125. package/dist/util/colors.js.map +1 -0
  126. package/dist/util/credential-patterns.d.ts +38 -0
  127. package/dist/util/credential-patterns.d.ts.map +1 -0
  128. package/dist/util/credential-patterns.js +203 -0
  129. package/dist/util/credential-patterns.js.map +1 -0
  130. package/dist/util/detect.d.ts +11 -0
  131. package/dist/util/detect.d.ts.map +1 -0
  132. package/dist/util/detect.js +49 -0
  133. package/dist/util/detect.js.map +1 -0
  134. package/dist/util/format.d.ts +6 -0
  135. package/dist/util/format.d.ts.map +1 -0
  136. package/dist/util/format.js +49 -0
  137. package/dist/util/format.js.map +1 -0
  138. package/dist/util/report-submission.d.ts +64 -0
  139. package/dist/util/report-submission.d.ts.map +1 -0
  140. package/dist/util/report-submission.js +109 -0
  141. package/dist/util/report-submission.js.map +1 -0
  142. package/dist/util/spinner.d.ts +10 -0
  143. package/dist/util/spinner.d.ts.map +1 -0
  144. package/dist/util/spinner.js +38 -0
  145. package/dist/util/spinner.js.map +1 -0
  146. package/dist/util/version.d.ts +5 -0
  147. package/dist/util/version.d.ts.map +1 -0
  148. package/dist/util/version.js +24 -0
  149. package/dist/util/version.js.map +1 -0
  150. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-map.js","sourceRoot":"","sources":["../../src/natural/intent-map.ts"],"names":[],"mappings":";;AAuJA,kCAcC;AA/JD,MAAM,eAAe,GAAoB;IACvC,mBAAmB;IACnB;QACE,QAAQ,EAAE;YACR,0EAA0E;YAC1E,gHAAgH;YAChH,+DAA+D;YAC/D,sDAAsD;YACtD,wBAAwB;YACxB,8CAA8C;SAC/C;QACD,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,0BAA0B;KACxC;IAED,yBAAyB;IACzB;QACE,QAAQ,EAAE;YACR,uFAAuF;YACvF,4DAA4D;YAC5D,mCAAmC;SACpC;QACD,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,yBAAyB;KACvC;IAED,gCAAgC;IAChC;QACE,QAAQ,EAAE;YACR,gHAAgH;YAChH,uFAAuF;YACvF,kFAAkF;YAClF,gDAAgD;YAChD,4DAA4D;SAC7D;QACD,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,wCAAwC;KACtD;IAED,6BAA6B;IAC7B;QACE,QAAQ,EAAE;YACR,sGAAsG;YACtG,iBAAiB;SAClB;QACD,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,6CAA6C;KAC3D;IAED,6BAA6B;IAC7B;QACE,QAAQ,EAAE;YACR,uFAAuF;YACvF,8CAA8C;YAC9C,2DAA2D;SAC5D;QACD,OAAO,EAAE,uBAAuB;QAChC,WAAW,EAAE,0BAA0B;KACxC;IAED,oBAAoB;IACpB;QACE,QAAQ,EAAE;YACR,kGAAkG;YAClG,WAAW;YACX,2CAA2C;SAC5C;QACD,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,6BAA6B;KAC3C;IAED,yBAAyB;IACzB;QACE,QAAQ,EAAE;YACR,kEAAkE;YAClE,0CAA0C;YAC1C,6CAA6C;YAC7C,sCAAsC;SACvC;QACD,OAAO,EAAE,wBAAwB;QACjC,WAAW,EAAE,gDAAgD;KAC9D;IAED,mBAAmB;IACnB;QACE,QAAQ,EAAE;YACR,oFAAoF;YACpF,WAAW;YACX,mDAAmD;SACpD;QACD,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,kCAAkC;KAChD;IAED,yBAAyB;IACzB;QACE,QAAQ,EAAE;YACR,2EAA2E;YAC3E,sDAAsD;YACtD,8CAA8C;YAC9C,wCAAwC;SACzC;QACD,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,oDAAoD;KAClE;IAED,mBAAmB;IACnB;QACE,QAAQ,EAAE;YACR,sEAAsE;YACtE,uBAAuB;YACvB,UAAU;SACX;QACD,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,+BAA+B;KAC7C;IAED,0BAA0B;IAC1B;QACE,QAAQ,EAAE;YACR,oFAAoF;YACpF,sCAAsC;SACvC;QACD,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,8BAA8B;KAC5C;IAED,qBAAqB;IACrB;QACE,QAAQ,EAAE;YACR,+DAA+D;YAC/D,uCAAuC;YACvC,oBAAoB;SACrB;QACD,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,6CAA6C;KAC3D;CACF,CAAC;AAQF,SAAgB,WAAW,CAAC,KAAa;IACvC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,UAAU,EAAE,MAAM;iBACnB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface LLMSuggestion {
2
+ command: string;
3
+ reason: string;
4
+ }
5
+ export declare function llmFallback(input: string): Promise<LLMSuggestion | null>;
6
+ export declare function handleNaturalLanguage(input: string): Promise<string | null>;
7
+ export {};
8
+ //# sourceMappingURL=llm-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-fallback.d.ts","sourceRoot":"","sources":["../../src/natural/llm-fallback.ts"],"names":[],"mappings":"AAwBA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAyDD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+C9E;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4BjF"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.llmFallback = llmFallback;
4
+ exports.handleNaturalLanguage = handleNaturalLanguage;
5
+ const colors_js_1 = require("../util/colors.js");
6
+ const SYSTEM_PROMPT = `You are OpenA2A CLI, an AI agent security platform. Given a user's natural language query, suggest the most appropriate CLI command.
7
+
8
+ Available commands:
9
+ - opena2a scan secure -- Full security scan (150+ checks)
10
+ - opena2a scan attack -- Attack mode (adversarial testing)
11
+ - opena2a protect -- Detect and migrate credentials to vault
12
+ - opena2a secrets init -- Set up credential protection
13
+ - opena2a secrets scan -- Find hardcoded credentials
14
+ - opena2a runtime start -- Runtime monitoring (process/network/filesystem)
15
+ - opena2a benchmark -- OASB security benchmark (222 scenarios)
16
+ - opena2a registry check <pkg> -- Trust registry lookup
17
+ - opena2a research <target> -- Autonomous security research
18
+ - opena2a hunt <target> -- Autonomous vulnerability hunter
19
+ - opena2a train -- Launch DVAA training environment
20
+ - opena2a crypto scan -- Cryptographic inventory / PQC readiness
21
+ - opena2a identity -- Agent identity management
22
+ - opena2a broker start -- Start credential broker daemon
23
+ - opena2a init -- Project initialization
24
+ - opena2a status -- Security status overview
25
+
26
+ Respond with ONLY a JSON object: {"command":"<command>","reason":"<one-sentence reason>"}`;
27
+ /**
28
+ * Check if LLM features have been consented to. If not, prompt for consent
29
+ * on first encounter (TTY only). Returns true if LLM calls are allowed.
30
+ */
31
+ async function ensureLlmConsent() {
32
+ // Non-TTY or CI: no consent possible
33
+ if (!process.stdin.isTTY || process.env.CI) {
34
+ return false;
35
+ }
36
+ // Check existing consent
37
+ try {
38
+ const shared = await import('@opena2a/shared');
39
+ const mod = 'default' in shared ? shared.default : shared;
40
+ if (mod.isLlmEnabled()) {
41
+ return true;
42
+ }
43
+ // First encounter: explain and ask
44
+ process.stdout.write('\n' + (0, colors_js_1.bold)('LLM-assisted command matching') + '\n\n');
45
+ process.stdout.write('When your input does not match any known command, OpenA2A can\n' +
46
+ 'use Claude Haiku to suggest the best match.\n\n');
47
+ process.stdout.write((0, colors_js_1.dim)('Model: ') + 'Claude Haiku (claude-haiku-4-5)\n');
48
+ process.stdout.write((0, colors_js_1.dim)('Estimated cost: ') + '~150 tokens, ~$0.0002 per call\n');
49
+ process.stdout.write((0, colors_js_1.dim)('Data: ') + 'Uses your ANTHROPIC_API_KEY. No data is stored or shared.\n\n');
50
+ try {
51
+ const { confirm } = await import('@inquirer/prompts');
52
+ const enabled = await confirm({
53
+ message: 'Enable LLM-assisted command matching?',
54
+ default: false,
55
+ });
56
+ mod.setLlmEnabled(enabled);
57
+ if (enabled) {
58
+ process.stdout.write((0, colors_js_1.green)('LLM features enabled.') + '\n\n');
59
+ return true;
60
+ }
61
+ else {
62
+ process.stdout.write((0, colors_js_1.dim)('LLM features disabled. ') +
63
+ 'You can enable later: ' + (0, colors_js_1.cyan)('opena2a config llm on') + '\n\n');
64
+ return false;
65
+ }
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ catch {
72
+ // shared not available, allow LLM (backward compat)
73
+ return true;
74
+ }
75
+ }
76
+ async function llmFallback(input) {
77
+ const apiKey = process.env.ANTHROPIC_API_KEY;
78
+ if (!apiKey) {
79
+ return null;
80
+ }
81
+ // Check consent before making API call
82
+ const consented = await ensureLlmConsent();
83
+ if (!consented) {
84
+ return null;
85
+ }
86
+ try {
87
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
88
+ method: 'POST',
89
+ headers: {
90
+ 'x-api-key': apiKey,
91
+ 'anthropic-version': '2023-06-01',
92
+ 'content-type': 'application/json',
93
+ },
94
+ body: JSON.stringify({
95
+ model: 'claude-haiku-4-5-20251001',
96
+ max_tokens: 150,
97
+ system: SYSTEM_PROMPT,
98
+ messages: [{ role: 'user', content: input }],
99
+ }),
100
+ signal: AbortSignal.timeout(5000),
101
+ });
102
+ if (!response.ok)
103
+ return null;
104
+ const data = await response.json();
105
+ const text = data.content?.[0]?.text;
106
+ if (!text)
107
+ return null;
108
+ const parsed = JSON.parse(text);
109
+ if (parsed.command && parsed.reason) {
110
+ return parsed;
111
+ }
112
+ return null;
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ async function handleNaturalLanguage(input) {
119
+ // First try static intent matching
120
+ const { matchIntent } = await import('./intent-map.js');
121
+ const staticMatch = matchIntent(input);
122
+ if (staticMatch) {
123
+ process.stdout.write(`\n${(0, colors_js_1.bold)('Matched:')} ${(0, colors_js_1.cyan)(staticMatch.command)}\n`);
124
+ process.stdout.write(`${(0, colors_js_1.gray)(staticMatch.description)}\n\n`);
125
+ process.stdout.write(`${(0, colors_js_1.gray)('Run this command? [Y/n]')} `);
126
+ return staticMatch.command;
127
+ }
128
+ // Try LLM fallback
129
+ process.stderr.write(`${(0, colors_js_1.gray)('Analyzing...')}\n`);
130
+ const llmResult = await llmFallback(input);
131
+ if (llmResult) {
132
+ process.stdout.write(`\n${(0, colors_js_1.bold)('Suggested:')} ${(0, colors_js_1.cyan)(llmResult.command)}\n`);
133
+ process.stdout.write(`${(0, colors_js_1.gray)(llmResult.reason)}\n\n`);
134
+ process.stdout.write(`${(0, colors_js_1.yellow)('Note:')} This suggestion was generated by AI.\n`);
135
+ process.stdout.write(`${(0, colors_js_1.gray)('Run this command? [Y/n]')} `);
136
+ return llmResult.command;
137
+ }
138
+ process.stdout.write(`Could not understand: "${input}"\n`);
139
+ process.stdout.write(`Try: opena2a ~${input.split(' ')[0]} (semantic search)\n`);
140
+ process.stdout.write(` opena2a --help (list all commands)\n`);
141
+ return null;
142
+ }
143
+ //# sourceMappingURL=llm-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-fallback.js","sourceRoot":"","sources":["../../src/natural/llm-fallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Interactive HTML report generator (ScoutSuite-style).
3
+ *
4
+ * Generates a self-contained HTML file with:
5
+ * - Dark theme matching HMA website design language
6
+ * - Embedded JSON data (no external dependencies)
7
+ * - Hash-based SPA navigation (#dashboard, #findings, #finding-CRED-001)
8
+ * - Severity filtering and text search
9
+ * - Audience toggle (Executive / Engineering)
10
+ * - SVG donut chart for severity breakdown
11
+ *
12
+ * Design tokens from hackmyagent-web:
13
+ * Background: #0a0a0a, Card: #171717, Border: #262626
14
+ * Primary: #14b8a6 (teal), Muted: #a3a3a3
15
+ * Critical: #ef4444, High: #f97316, Medium: #eab308, Low: #3b82f6
16
+ * Font: system monospace (JetBrains Mono fallback)
17
+ */
18
+ export interface InteractiveReportFinding {
19
+ id: string;
20
+ severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
21
+ title: string;
22
+ description: string;
23
+ explanation?: string;
24
+ businessImpact?: string;
25
+ category: string;
26
+ file?: string;
27
+ line?: number;
28
+ fix?: string;
29
+ passed: boolean;
30
+ evidence?: string;
31
+ }
32
+ export interface InteractiveReportData {
33
+ metadata: {
34
+ generatedAt: string;
35
+ toolVersion: string;
36
+ targetName: string;
37
+ scanType: string;
38
+ };
39
+ summary: {
40
+ totalFindings: number;
41
+ bySeverity: Record<string, number>;
42
+ score?: number;
43
+ grade?: string;
44
+ };
45
+ findings: InteractiveReportFinding[];
46
+ }
47
+ /**
48
+ * Generate a self-contained interactive HTML report.
49
+ */
50
+ export declare function generateInteractiveHtml(data: InteractiveReportData): string;
51
+ //# sourceMappingURL=interactive-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-html.d.ts","sourceRoot":"","sources":["../../src/report/interactive-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAoD3E"}