speccore 6.74.0 → 6.76.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.
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ /**
3
+ * module-analyzer — 功能模块级全局分析引擎(v6.76.0)
4
+ *
5
+ * 核心能力:
6
+ * 1. 在全局层对单个功能模块进行分析(区别于 --feature 的局部分析)
7
+ * 2. 模块已存在 → 重新分析该模块,更新全局层 + 各端相关文档
8
+ * 3. 模块不存在 → 从需求文档中提取该模块,按全局标准分析
9
+ * 4. 自动识别模块涉及的端,只更新相关端文档
10
+ *
11
+ * 与 --feature 的区别:
12
+ * - --feature: 局部分析 → 只生成 020-specs/features/{name}.md
13
+ * - --module: 全局视角 → 更新 FUNCTION_MAP / INTERACTION_MAP / API_CONTRACT / 各端文档
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.analyzeModule = analyzeModule;
17
+ exports.buildModuleAnalysisPrompt = buildModuleAnalysisPrompt;
18
+ exports.listAnalyzedModules = listAnalyzedModules;
19
+ exports.listRequirementModules = listRequirementModules;
20
+ const path_1 = require("path");
21
+ const fs_extra_1 = require("fs-extra");
22
+ const spec_paths_1 = require("./spec-paths");
23
+ // ── 核心函数 ──
24
+ /**
25
+ * 执行功能模块级全局分析
26
+ * @param iterDir 迭代目录
27
+ * @param moduleName 功能模块名
28
+ */
29
+ async function analyzeModule(iterDir, moduleName) {
30
+ const result = {
31
+ moduleName,
32
+ exists: false,
33
+ involvedPlatforms: [],
34
+ isBackend: [],
35
+ globalUpdates: [],
36
+ platformUpdates: [],
37
+ crossPlatformChecks: [],
38
+ };
39
+ // 1. 检查模块是否已存在于全局 FUNCTION_MAP
40
+ const existingModule = await findModuleInFunctionMap(iterDir, moduleName);
41
+ if (existingModule) {
42
+ result.exists = true;
43
+ result.involvedPlatforms = existingModule.involvedPlatforms;
44
+ }
45
+ else {
46
+ // 从需求文档中查找模块
47
+ const moduleFromReq = await findModuleInRequirements(iterDir, moduleName);
48
+ if (moduleFromReq) {
49
+ result.involvedPlatforms = moduleFromReq.involvedPlatforms;
50
+ }
51
+ }
52
+ // 2. 确定各端类型
53
+ const platformTypes = await (0, spec_paths_1.parsePlatformTypes)();
54
+ for (const p of result.involvedPlatforms) {
55
+ const pt = (platformTypes.get(p) || '').toLowerCase();
56
+ const isBack = pt.includes('service') || pt.includes('java') || pt.includes('node') || pt.includes('go') || pt.includes('python') || pt.includes('后端');
57
+ result.isBackend.push(isBack);
58
+ }
59
+ // 3. 生成全局文档更新计划
60
+ result.globalUpdates = buildGlobalUpdatePlan(moduleName, result.exists);
61
+ // 4. 生成各端文档更新计划
62
+ result.platformUpdates = await buildPlatformUpdatePlan(iterDir, moduleName, result.involvedPlatforms, result.isBackend);
63
+ // 5. 跨端一致性检查项
64
+ result.crossPlatformChecks = buildCrossPlatformChecks(moduleName, result.involvedPlatforms);
65
+ return result;
66
+ }
67
+ /**
68
+ * 生成模块级分析 Prompt
69
+ */
70
+ function buildModuleAnalysisPrompt(iterDir, result, iteration) {
71
+ const { moduleName, exists, involvedPlatforms } = result;
72
+ let prompt = `\n# 任务: 功能模块级全局分析 — ${moduleName}\n\n`;
73
+ // 模块状态
74
+ if (exists) {
75
+ prompt += `## 模块状态:已存在(重新分析)\n\n`;
76
+ prompt += `功能模块 **${moduleName}** 已在全局文档中存在,本次分析将:\n`;
77
+ prompt += `1. 读取该模块当前的全局分析结果\n`;
78
+ prompt += `2. 对比最新需求,识别变更点\n`;
79
+ prompt += `3. 更新全局层文档中该模块的相关内容\n`;
80
+ prompt += `4. 更新各端文档中该模块的相关内容\n\n`;
81
+ }
82
+ else {
83
+ prompt += `## 模块状态:新增(首次分析)\n\n`;
84
+ prompt += `功能模块 **${moduleName}** 尚未在全局文档中分析,本次分析将:\n`;
85
+ prompt += `1. 从需求文档中提取该模块的完整需求\n`;
86
+ prompt += `2. 按全局分析标准,分析该模块涉及的所有端\n`;
87
+ prompt += `3. 在全局层文档中追加该模块\n`;
88
+ prompt += `4. 在各端文档中追加该模块的相关内容\n\n`;
89
+ }
90
+ // 涉及端
91
+ prompt += `## 涉及端(${involvedPlatforms.length} 个)\n\n`;
92
+ for (let i = 0; i < involvedPlatforms.length; i++) {
93
+ const p = involvedPlatforms[i];
94
+ const isBack = result.isBackend[i];
95
+ prompt += `- **${p}** (${isBack ? '后端' : '前端'})\n`;
96
+ }
97
+ prompt += `\n`;
98
+ // 需要更新的全局文档
99
+ prompt += `## 全局文档更新计划\n\n`;
100
+ for (const update of result.globalUpdates) {
101
+ const actionLabels = {
102
+ 'update-section': '更新章节',
103
+ 'append-row': '追加行',
104
+ 'replace-sequence': '替换时序图',
105
+ 'update-contract': '更新契约',
106
+ };
107
+ prompt += `- **${actionLabels[update.action]}** \`${update.file}\`:${update.description}\n`;
108
+ }
109
+ prompt += `\n`;
110
+ // 各端文档更新
111
+ prompt += `## 各端文档更新计划\n\n`;
112
+ for (const pu of result.platformUpdates) {
113
+ prompt += `### ${pu.platform}\n`;
114
+ prompt += `${pu.description}\n`;
115
+ for (const f of pu.files) {
116
+ prompt += `- \`${f}\`\n`;
117
+ }
118
+ prompt += `\n`;
119
+ }
120
+ // 跨端一致性检查
121
+ if (result.crossPlatformChecks.length > 0) {
122
+ prompt += `## 跨端一致性检查\n\n`;
123
+ for (const check of result.crossPlatformChecks) {
124
+ prompt += `- **${check.category}** (${check.platforms.join(' ↔ ')}): ${check.description}\n`;
125
+ }
126
+ prompt += `\n`;
127
+ }
128
+ // 执行步骤
129
+ prompt += `## 执行步骤\n\n`;
130
+ prompt += `### Step 1: 读取当前全局文档\n`;
131
+ if (exists) {
132
+ prompt += `- Read \`020-specs/global/FUNCTION_MAP.md\` → 找到 "${moduleName}" 当前定义\n`;
133
+ prompt += `- Read \`020-specs/global/INTERACTION_MAP.md\` → 找到 "${moduleName}" 当前时序图\n`;
134
+ prompt += `- Read \`020-specs/global/API_CONTRACT.yaml\` → 找到 "${moduleName}" 相关接口\n`;
135
+ prompt += `- Read \`020-specs/global/REQUIREMENT.md\` → 找到 "${moduleName}" 当前章节\n`;
136
+ }
137
+ else {
138
+ prompt += `- Read \`020-specs/global/FUNCTION_MAP.md\` → 了解现有功能单元格式\n`;
139
+ prompt += `- Read \`020-specs/global/REQUIREMENT.md\` → 了解需求文档格式\n`;
140
+ }
141
+ prompt += `\n`;
142
+ prompt += `### Step 2: 读取需求文档\n`;
143
+ prompt += `- Read \`010-requirements/features/${moduleName}/README.md\`(如存在)\n`;
144
+ prompt += `- 在 \`010-requirements/converted/*.md\` 中搜索 "${moduleName}" 相关内容\n`;
145
+ prompt += `- 在 \`010-requirements/INDEX.md\` 中定位该模块来源\n\n`;
146
+ prompt += `### Step 3: 读取各端当前文档\n`;
147
+ for (const p of involvedPlatforms) {
148
+ prompt += `- Read \`020-specs/${p}/TECH.md\` → 了解 ${p} 当前技术方案\n`;
149
+ }
150
+ prompt += `\n`;
151
+ prompt += `### Step 4: 重新分析该模块\n`;
152
+ prompt += `基于最新需求,重新分析 **${moduleName}**:\n\n`;
153
+ prompt += `#### 全局层分析\n`;
154
+ prompt += `- 功能描述、用户故事、验收标准\n`;
155
+ prompt += `- 涉及端、共享能力、依赖关系\n`;
156
+ prompt += `- 跨端交互时序(Mermaid sequenceDiagram)\n`;
157
+ prompt += `- API 接口契约(路径/方法/参数/响应)\n\n`;
158
+ prompt += `#### 各端分析\n`;
159
+ for (let i = 0; i < involvedPlatforms.length; i++) {
160
+ const p = involvedPlatforms[i];
161
+ const isBack = result.isBackend[i];
162
+ if (isBack) {
163
+ prompt += `- **${p}(后端)**: API 接口设计、数据模型、业务规则实现\n`;
164
+ }
165
+ else {
166
+ prompt += `- **${p}(前端)**: 页面设计、字段映射、交互流程、API 调用\n`;
167
+ }
168
+ }
169
+ prompt += `\n`;
170
+ prompt += `### Step 5: 更新文档\n`;
171
+ prompt += `按「全局文档更新计划」和「各端文档更新计划」写入更新后的内容。\n\n`;
172
+ prompt += `## 写入方式\n`;
173
+ prompt += `\`\`\`bash\n`;
174
+ prompt += `# 全局文档\n`;
175
+ prompt += `speccore analyze --apply '{"global/FUNCTION_MAP.md":"更新后的内容","global/INTERACTION_MAP.md":"更新后的内容","global/API_CONTRACT.yaml":"更新后的内容","global/REQUIREMENT.md":"更新后的内容"}' -I ${iteration}\n`;
176
+ prompt += `\n# 各端文档(示例)\n`;
177
+ for (const p of involvedPlatforms) {
178
+ prompt += `speccore analyze --apply '{"${p}/TECH.md":"更新后的内容"}' -I ${iteration}\n`;
179
+ }
180
+ prompt += `\`\`\`\n`;
181
+ return prompt;
182
+ }
183
+ // ── 内部函数 ──
184
+ /** 在 FUNCTION_MAP.md 中查找模块 */
185
+ async function findModuleInFunctionMap(iterDir, moduleName) {
186
+ const functionMapPath = (0, path_1.join)(iterDir, '020-specs', 'global', 'FUNCTION_MAP.md');
187
+ if (!(await (0, fs_extra_1.pathExists)(functionMapPath)))
188
+ return null;
189
+ const content = await (0, fs_extra_1.readFile)(functionMapPath, 'utf-8');
190
+ const lines = content.split('\n');
191
+ for (const line of lines) {
192
+ if (!line.startsWith('|'))
193
+ continue;
194
+ if (line.includes('功能单元') || line.includes('---'))
195
+ continue;
196
+ const cells = line.split('|').map(c => c.trim()).filter(Boolean);
197
+ // 功能单元通常在第二列
198
+ if (cells.length > 1) {
199
+ const funcUnit = cells[1];
200
+ if (funcUnit && (funcUnit === moduleName || funcUnit.includes(moduleName))) {
201
+ // 提取涉及端(通常在第三列)
202
+ const platformsStr = cells[2] || '';
203
+ const platforms = platformsStr.split(/[,,]/).map(p => p.trim()).filter(Boolean);
204
+ return {
205
+ name: funcUnit,
206
+ involvedPlatforms: platforms,
207
+ description: cells[cells.length - 1] || '',
208
+ };
209
+ }
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ /** 在需求文档中查找模块 */
215
+ async function findModuleInRequirements(iterDir, moduleName) {
216
+ // 1. 检查 features/ 目录
217
+ const featuresDir = (0, path_1.join)(iterDir, '010-requirements', 'features', moduleName);
218
+ if (await (0, fs_extra_1.pathExists)(featuresDir)) {
219
+ const readmePath = (0, path_1.join)(featuresDir, 'README.md');
220
+ if (await (0, fs_extra_1.pathExists)(readmePath)) {
221
+ const content = await (0, fs_extra_1.readFile)(readmePath, 'utf-8');
222
+ // 尝试从内容中提取涉及端
223
+ const platforms = extractPlatformsFromContent(content);
224
+ return {
225
+ name: moduleName,
226
+ involvedPlatforms: platforms,
227
+ description: `来自 features/${moduleName}/README.md`,
228
+ sourceFile: `010-requirements/features/${moduleName}/README.md`,
229
+ };
230
+ }
231
+ }
232
+ // 2. 在 REQUIREMENT.md 中搜索
233
+ const reqPath = (0, path_1.join)(iterDir, '010-requirements', 'REQUIREMENT.md');
234
+ if (await (0, fs_extra_1.pathExists)(reqPath)) {
235
+ const content = await (0, fs_extra_1.readFile)(reqPath, 'utf-8');
236
+ if (content.includes(moduleName)) {
237
+ const platforms = extractPlatformsFromContent(content);
238
+ return {
239
+ name: moduleName,
240
+ involvedPlatforms: platforms,
241
+ description: '来自 REQUIREMENT.md',
242
+ sourceFile: '010-requirements/REQUIREMENT.md',
243
+ };
244
+ }
245
+ }
246
+ // 3. 在 converted/ 中搜索
247
+ const convertedDir = (0, path_1.join)(iterDir, '010-requirements', 'converted');
248
+ if (await (0, fs_extra_1.pathExists)(convertedDir)) {
249
+ const files = await (0, fs_extra_1.readdir)(convertedDir);
250
+ for (const f of files.filter(f => f.endsWith('.md'))) {
251
+ const content = await (0, fs_extra_1.readFile)((0, path_1.join)(convertedDir, f), 'utf-8');
252
+ if (content.includes(moduleName)) {
253
+ const platforms = extractPlatformsFromContent(content);
254
+ return {
255
+ name: moduleName,
256
+ involvedPlatforms: platforms,
257
+ description: `来自 converted/${f}`,
258
+ sourceFile: `010-requirements/converted/${f}`,
259
+ };
260
+ }
261
+ }
262
+ }
263
+ return null;
264
+ }
265
+ /** 从内容中提取涉及端 */
266
+ function extractPlatformsFromContent(content) {
267
+ const platforms = new Set();
268
+ // 匹配常见端名
269
+ const platformPatterns = [
270
+ /h5[-\w]*/gi, /admin[-\w]*/gi, /web[-\w]*/gi,
271
+ /mini[\w]*/gi, /android/gi, /ios/gi,
272
+ /[\w]+-service/gi, /backend/gi, /frontend/gi,
273
+ /app/gi, /pc/gi, /desktop/gi,
274
+ ];
275
+ for (const pattern of platformPatterns) {
276
+ const matches = content.match(pattern);
277
+ if (matches) {
278
+ for (const m of matches) {
279
+ const clean = m.toLowerCase().trim();
280
+ if (clean.length > 1)
281
+ platforms.add(clean);
282
+ }
283
+ }
284
+ }
285
+ return [...platforms];
286
+ }
287
+ /** 构建全局文档更新计划 */
288
+ function buildGlobalUpdatePlan(moduleName, exists) {
289
+ const updates = [];
290
+ if (exists) {
291
+ updates.push({
292
+ file: 'global/FUNCTION_MAP.md',
293
+ action: 'append-row',
294
+ description: `更新 "${moduleName}" 行的涉及端、共享能力、依赖关系`,
295
+ });
296
+ updates.push({
297
+ file: 'global/INTERACTION_MAP.md',
298
+ action: 'replace-sequence',
299
+ description: `替换 "${moduleName}" 的 Mermaid 时序图`,
300
+ });
301
+ updates.push({
302
+ file: 'global/API_CONTRACT.yaml',
303
+ action: 'update-contract',
304
+ description: `更新 "${moduleName}" 相关的接口契约`,
305
+ });
306
+ updates.push({
307
+ file: 'global/REQUIREMENT.md',
308
+ action: 'update-section',
309
+ description: `更新 "${moduleName}" 章节的详细需求`,
310
+ });
311
+ }
312
+ else {
313
+ updates.push({
314
+ file: 'global/FUNCTION_MAP.md',
315
+ action: 'append-row',
316
+ description: `追加 "${moduleName}" 功能单元到表格`,
317
+ });
318
+ updates.push({
319
+ file: 'global/INTERACTION_MAP.md',
320
+ action: 'append-row',
321
+ description: `追加 "${moduleName}" 的 Mermaid 时序图`,
322
+ });
323
+ updates.push({
324
+ file: 'global/API_CONTRACT.yaml',
325
+ action: 'update-contract',
326
+ description: `追加 "${moduleName}" 相关的接口契约`,
327
+ });
328
+ updates.push({
329
+ file: 'global/REQUIREMENT.md',
330
+ action: 'update-section',
331
+ description: `追加 "${moduleName}" 章节到需求文档`,
332
+ });
333
+ }
334
+ return updates;
335
+ }
336
+ /** 构建各端文档更新计划 */
337
+ async function buildPlatformUpdatePlan(iterDir, moduleName, platforms, isBackends) {
338
+ const updates = [];
339
+ for (let i = 0; i < platforms.length; i++) {
340
+ const p = platforms[i];
341
+ const isBack = isBackends[i];
342
+ const files = [];
343
+ if (isBack) {
344
+ files.push(`${p}/API_INVENTORY.md`);
345
+ files.push(`${p}/DATA_MODEL.md`);
346
+ files.push(`${p}/BUSINESS_RULES.md`);
347
+ }
348
+ else {
349
+ files.push(`${p}/FEATURES.md`);
350
+ files.push(`${p}/API_CALL_MAP.md`);
351
+ files.push(`${p}/UI_SPEC.md`);
352
+ }
353
+ updates.push({
354
+ platform: p,
355
+ files,
356
+ description: `更新 ${p} 中 "${moduleName}" 模块的相关内容`,
357
+ });
358
+ }
359
+ return updates;
360
+ }
361
+ /** 构建跨端一致性检查 */
362
+ function buildCrossPlatformChecks(moduleName, platforms) {
363
+ const checks = [];
364
+ if (platforms.length >= 2) {
365
+ checks.push({
366
+ category: 'api-consistency',
367
+ platforms: [...platforms],
368
+ description: `前端调用的接口路径必须与后端提供的接口路径完全一致`,
369
+ });
370
+ checks.push({
371
+ category: 'field-mapping',
372
+ platforms: [...platforms],
373
+ description: `前端 UI 字段必须与后端 API 响应字段一一对应`,
374
+ });
375
+ checks.push({
376
+ category: 'enum-consistency',
377
+ platforms: [...platforms],
378
+ description: `状态枚举值必须前后端一致`,
379
+ });
380
+ }
381
+ return checks;
382
+ }
383
+ /**
384
+ * 列出所有已分析的功能模块(从 FUNCTION_MAP 提取)
385
+ */
386
+ async function listAnalyzedModules(iterDir) {
387
+ const functionMapPath = (0, path_1.join)(iterDir, '020-specs', 'global', 'FUNCTION_MAP.md');
388
+ if (!(await (0, fs_extra_1.pathExists)(functionMapPath)))
389
+ return [];
390
+ const content = await (0, fs_extra_1.readFile)(functionMapPath, 'utf-8');
391
+ const lines = content.split('\n');
392
+ const modules = [];
393
+ for (const line of lines) {
394
+ if (!line.startsWith('|'))
395
+ continue;
396
+ if (line.includes('功能单元') || line.includes('---'))
397
+ continue;
398
+ const cells = line.split('|').map(c => c.trim()).filter(Boolean);
399
+ if (cells.length > 1) {
400
+ modules.push(cells[1]);
401
+ }
402
+ }
403
+ return modules;
404
+ }
405
+ /**
406
+ * 列出需求文档中所有功能模块(从 features/ 目录提取)
407
+ */
408
+ async function listRequirementModules(iterDir) {
409
+ const featuresDir = (0, path_1.join)(iterDir, '010-requirements', 'features');
410
+ if (!(await (0, fs_extra_1.pathExists)(featuresDir)))
411
+ return [];
412
+ const entries = await (0, fs_extra_1.readdir)(featuresDir, { withFileTypes: true });
413
+ return entries.filter(e => e.isDirectory()).map(e => e.name);
414
+ }
415
+ //# sourceMappingURL=module-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-analyzer.js","sourceRoot":"","sources":["../../src/core/module-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * platform-addition — 新增端分析引擎(v6.75.0)
3
+ *
4
+ * 核心能力:
5
+ * 1. 单独分析新端(读取源码、建立索引、深入分析)
6
+ * 2. 自动分析新端与已有端的关系(接口调用、数据依赖、功能重叠)
7
+ * 3. 更新全局层文档(FUNCTION_MAP、API_CONTRACT、ARCHITECTURE、INTERACTION_MAP)
8
+ * 4. 检查新端与已有端的接口一致性
9
+ *
10
+ * 使用场景:
11
+ * - 迭代中新增了一个端(如新增 admin-web、小程序端)
12
+ * - 项目后期扩展新平台
13
+ */
14
+ export interface NewPlatformAnalysis {
15
+ platform: string;
16
+ platformType: string;
17
+ isBackend: boolean;
18
+ existingPlatforms: string[];
19
+ /** 新端与已有端的关系分析 */
20
+ crossPlatformRelations: CrossPlatformRelation[];
21
+ /** 需要更新的全局文档 */
22
+ globalUpdates: GlobalUpdate[];
23
+ /** 新端自身分析产出 */
24
+ newPlatformOutputs: string[];
25
+ /** 一致性检查项 */
26
+ consistencyChecks: ConsistencyCheck[];
27
+ }
28
+ export interface CrossPlatformRelation {
29
+ fromPlatform: string;
30
+ toPlatform: string;
31
+ relationType: 'api-consumer' | 'api-provider' | 'shared-data' | 'event-pub' | 'event-sub' | 'auth-dependency';
32
+ description: string;
33
+ interfaces?: string[];
34
+ }
35
+ export interface GlobalUpdate {
36
+ file: string;
37
+ action: 'append' | 'modify' | 'create';
38
+ description: string;
39
+ content: string;
40
+ }
41
+ export interface ConsistencyCheck {
42
+ category: 'api-path' | 'enum-value' | 'data-model' | 'auth' | 'naming';
43
+ status: 'pass' | 'fail' | 'warning';
44
+ description: string;
45
+ suggestion: string;
46
+ }
47
+ /**
48
+ * 执行新增端分析
49
+ * @param iterDir 迭代目录
50
+ * @param newPlatform 新增端名
51
+ */
52
+ export declare function analyzeNewPlatform(iterDir: string, newPlatform: string): Promise<NewPlatformAnalysis>;
53
+ /**
54
+ * 生成新增端分析 Prompt
55
+ */
56
+ export declare function buildNewPlatformPrompt(iterDir: string, analysis: NewPlatformAnalysis, iteration: string): string;
57
+ //# sourceMappingURL=platform-addition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-addition.d.ts","sourceRoot":"","sources":["../../src/core/platform-addition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB;IAClB,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAChD,gBAAgB;IAChB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe;IACf,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa;IACb,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,iBAAiB,CAAC;IAC9G,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAgC9B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,MAAM,GAChB,MAAM,CAyIR"}