agent-recall-core 3.3.27 → 3.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 (80) hide show
  1. package/README.md +1014 -206
  2. package/dist/digest/store.d.ts.map +1 -1
  3. package/dist/digest/store.js +9 -2
  4. package/dist/digest/store.js.map +1 -1
  5. package/dist/helpers/alignment-patterns.d.ts +8 -0
  6. package/dist/helpers/alignment-patterns.d.ts.map +1 -1
  7. package/dist/helpers/alignment-patterns.js +76 -0
  8. package/dist/helpers/alignment-patterns.js.map +1 -1
  9. package/dist/index.d.ts +11 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +14 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/palace/awareness.d.ts +3 -2
  14. package/dist/palace/awareness.d.ts.map +1 -1
  15. package/dist/palace/awareness.js +16 -10
  16. package/dist/palace/awareness.js.map +1 -1
  17. package/dist/palace/insights-index.d.ts.map +1 -1
  18. package/dist/palace/insights-index.js +28 -0
  19. package/dist/palace/insights-index.js.map +1 -1
  20. package/dist/palace/rooms.d.ts +1 -1
  21. package/dist/palace/rooms.d.ts.map +1 -1
  22. package/dist/palace/rooms.js +28 -3
  23. package/dist/palace/rooms.js.map +1 -1
  24. package/dist/supabase/client.d.ts +9 -0
  25. package/dist/supabase/client.d.ts.map +1 -0
  26. package/dist/supabase/client.js +22 -0
  27. package/dist/supabase/client.js.map +1 -0
  28. package/dist/supabase/config.d.ts +10 -0
  29. package/dist/supabase/config.d.ts.map +1 -0
  30. package/dist/supabase/config.js +45 -0
  31. package/dist/supabase/config.js.map +1 -0
  32. package/dist/supabase/embedding.d.ts +25 -0
  33. package/dist/supabase/embedding.d.ts.map +1 -0
  34. package/dist/supabase/embedding.js +76 -0
  35. package/dist/supabase/embedding.js.map +1 -0
  36. package/dist/supabase/recall-backend.d.ts +21 -0
  37. package/dist/supabase/recall-backend.d.ts.map +1 -0
  38. package/dist/supabase/recall-backend.js +128 -0
  39. package/dist/supabase/recall-backend.js.map +1 -0
  40. package/dist/supabase/sync.d.ts +21 -0
  41. package/dist/supabase/sync.d.ts.map +1 -0
  42. package/dist/supabase/sync.js +158 -0
  43. package/dist/supabase/sync.js.map +1 -0
  44. package/dist/tools-logic/bootstrap.d.ts +63 -0
  45. package/dist/tools-logic/bootstrap.d.ts.map +1 -0
  46. package/dist/tools-logic/bootstrap.js +650 -0
  47. package/dist/tools-logic/bootstrap.js.map +1 -0
  48. package/dist/tools-logic/check.d.ts +13 -0
  49. package/dist/tools-logic/check.d.ts.map +1 -1
  50. package/dist/tools-logic/check.js +55 -1
  51. package/dist/tools-logic/check.js.map +1 -1
  52. package/dist/tools-logic/journal-write.d.ts.map +1 -1
  53. package/dist/tools-logic/journal-write.js +3 -0
  54. package/dist/tools-logic/journal-write.js.map +1 -1
  55. package/dist/tools-logic/palace-search.d.ts.map +1 -1
  56. package/dist/tools-logic/palace-search.js +3 -0
  57. package/dist/tools-logic/palace-search.js.map +1 -1
  58. package/dist/tools-logic/palace-write.d.ts.map +1 -1
  59. package/dist/tools-logic/palace-write.js +4 -0
  60. package/dist/tools-logic/palace-write.js.map +1 -1
  61. package/dist/tools-logic/recall-backend.d.ts +29 -0
  62. package/dist/tools-logic/recall-backend.d.ts.map +1 -0
  63. package/dist/tools-logic/recall-backend.js +58 -0
  64. package/dist/tools-logic/recall-backend.js.map +1 -0
  65. package/dist/tools-logic/session-end.d.ts.map +1 -1
  66. package/dist/tools-logic/session-end.js +4 -1
  67. package/dist/tools-logic/session-end.js.map +1 -1
  68. package/dist/tools-logic/session-start.d.ts +1 -0
  69. package/dist/tools-logic/session-start.d.ts.map +1 -1
  70. package/dist/tools-logic/session-start.js +67 -4
  71. package/dist/tools-logic/session-start.js.map +1 -1
  72. package/dist/tools-logic/smart-recall.d.ts +10 -0
  73. package/dist/tools-logic/smart-recall.d.ts.map +1 -1
  74. package/dist/tools-logic/smart-recall.js +56 -32
  75. package/dist/tools-logic/smart-recall.js.map +1 -1
  76. package/dist/types.d.ts +6 -1
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js +2 -1
  79. package/dist/types.js.map +1 -1
  80. package/package.json +6 -4
@@ -0,0 +1,650 @@
1
+ /**
2
+ * Bootstrap — Layered Scan + Selective Import Architecture
3
+ *
4
+ * bootstrapScan() — discovers everything available on the machine (read-only)
5
+ * bootstrapImport() — imports selected items into ~/.agent-recall/
6
+ *
7
+ * This gives the orchestrator/CLI/MCP full control over what gets imported.
8
+ */
9
+ import * as fs from "node:fs";
10
+ import * as path from "node:path";
11
+ import * as os from "node:os";
12
+ import { execFile } from "node:child_process";
13
+ import { promisify } from "node:util";
14
+ import { getRoot } from "../types.js";
15
+ import { ensurePalaceInitialized } from "../palace/rooms.js";
16
+ import { writeIdentity } from "../palace/identity.js";
17
+ import { todayISO } from "../storage/fs-utils.js";
18
+ import { palaceWrite } from "./palace-write.js";
19
+ import { journalWrite } from "./journal-write.js";
20
+ const execFileAsync = promisify(execFile);
21
+ // ---------------------------------------------------------------------------
22
+ // Constants
23
+ // ---------------------------------------------------------------------------
24
+ const DEFAULT_SCAN_DIRS = [
25
+ "Projects",
26
+ "work",
27
+ "code",
28
+ "dev",
29
+ "src",
30
+ "repos",
31
+ "github",
32
+ ].map((d) => path.join(os.homedir(), d));
33
+ const SKIP_DIRS = new Set([
34
+ "node_modules",
35
+ ".git",
36
+ "vendor",
37
+ "dist",
38
+ "build",
39
+ "__pycache__",
40
+ ".venv",
41
+ ".next",
42
+ ".nuxt",
43
+ "coverage",
44
+ ".cache",
45
+ ".npm",
46
+ ]);
47
+ const SECRET_PATTERNS = [
48
+ /\.env$/i,
49
+ /credentials/i,
50
+ /secrets/i,
51
+ /tokens/i,
52
+ /\.pem$/i,
53
+ /\.key$/i,
54
+ ];
55
+ const MAX_FILE_SIZE = 5 * 1024; // 5KB
56
+ const PREVIEW_LEN = 100;
57
+ const GIT_TIMEOUT_MS = 2000;
58
+ // ---------------------------------------------------------------------------
59
+ // Helpers
60
+ // ---------------------------------------------------------------------------
61
+ function isSecretFile(filePath) {
62
+ const base = path.basename(filePath);
63
+ return SECRET_PATTERNS.some((re) => re.test(base));
64
+ }
65
+ function toSlug(name) {
66
+ return name
67
+ .toLowerCase()
68
+ .replace(/[^a-z0-9]+/g, "-")
69
+ .replace(/^-+|-+$/g, "");
70
+ }
71
+ function detectLanguage(dir) {
72
+ const langMap = {
73
+ ".ts": "TypeScript",
74
+ ".tsx": "TypeScript",
75
+ ".js": "JavaScript",
76
+ ".jsx": "JavaScript",
77
+ ".mjs": "JavaScript",
78
+ ".py": "Python",
79
+ ".go": "Go",
80
+ ".rs": "Rust",
81
+ ".rb": "Ruby",
82
+ ".java": "Java",
83
+ ".kt": "Kotlin",
84
+ ".swift": "Swift",
85
+ ".cpp": "C++",
86
+ ".c": "C",
87
+ ".cs": "C#",
88
+ ".php": "PHP",
89
+ };
90
+ try {
91
+ const entries = fs.readdirSync(dir);
92
+ const extCounts = {};
93
+ for (const entry of entries) {
94
+ const ext = path.extname(entry).toLowerCase();
95
+ if (ext && langMap[ext]) {
96
+ extCounts[ext] = (extCounts[ext] ?? 0) + 1;
97
+ }
98
+ }
99
+ const topExt = Object.entries(extCounts).sort((a, b) => b[1] - a[1])[0]?.[0];
100
+ return topExt ? langMap[topExt] : undefined;
101
+ }
102
+ catch {
103
+ return undefined;
104
+ }
105
+ }
106
+ function readPreview(filePath) {
107
+ try {
108
+ if (!fs.existsSync(filePath))
109
+ return "";
110
+ const stat = fs.statSync(filePath);
111
+ if (stat.size > MAX_FILE_SIZE)
112
+ return "[file too large — skipped]";
113
+ const buf = Buffer.alloc(PREVIEW_LEN + 10);
114
+ const fd = fs.openSync(filePath, "r");
115
+ let bytesRead;
116
+ try {
117
+ bytesRead = fs.readSync(fd, buf, 0, PREVIEW_LEN + 10, 0);
118
+ }
119
+ finally {
120
+ fs.closeSync(fd);
121
+ }
122
+ return buf
123
+ .slice(0, bytesRead)
124
+ .toString("utf-8")
125
+ .slice(0, PREVIEW_LEN)
126
+ .replace(/\n/g, " ")
127
+ .trim();
128
+ }
129
+ catch {
130
+ return "";
131
+ }
132
+ }
133
+ function fileSizeBytes(filePath) {
134
+ try {
135
+ return fs.statSync(filePath).size;
136
+ }
137
+ catch {
138
+ return 0;
139
+ }
140
+ }
141
+ async function gitCmd(dir, args) {
142
+ try {
143
+ const { stdout } = await execFileAsync("git", ["-C", dir, ...args], {
144
+ timeout: GIT_TIMEOUT_MS,
145
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
146
+ });
147
+ return stdout.trim();
148
+ }
149
+ catch {
150
+ return "";
151
+ }
152
+ }
153
+ function readPackageInfo(dir) {
154
+ const pkgPath = path.join(dir, "package.json");
155
+ if (!fs.existsSync(pkgPath))
156
+ return {};
157
+ try {
158
+ if (fileSizeBytes(pkgPath) > MAX_FILE_SIZE)
159
+ return {};
160
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
161
+ return {
162
+ description: typeof pkg["description"] === "string" ? pkg["description"] : undefined,
163
+ name: typeof pkg["name"] === "string" ? pkg["name"] : undefined,
164
+ };
165
+ }
166
+ catch {
167
+ return {};
168
+ }
169
+ }
170
+ function readReadmeDescription(dir) {
171
+ for (const name of ["README.md", "readme.md", "README.txt"]) {
172
+ const p = path.join(dir, name);
173
+ if (!fs.existsSync(p))
174
+ continue;
175
+ try {
176
+ if (fileSizeBytes(p) > MAX_FILE_SIZE)
177
+ continue;
178
+ const lines = fs.readFileSync(p, "utf-8").split("\n");
179
+ for (const line of lines) {
180
+ const trimmed = line.trim();
181
+ if (!trimmed || trimmed.startsWith("#") || trimmed.startsWith(">"))
182
+ continue;
183
+ return trimmed.slice(0, 200);
184
+ }
185
+ }
186
+ catch {
187
+ // ignore
188
+ }
189
+ }
190
+ return undefined;
191
+ }
192
+ /** Walk a directory to find git repos up to max_depth. Stops recursing into found repos. */
193
+ function findGitRepos(dir, maxDepth, depth = 0) {
194
+ if (depth > maxDepth)
195
+ return [];
196
+ if (!fs.existsSync(dir))
197
+ return [];
198
+ let entries;
199
+ try {
200
+ entries = fs.readdirSync(dir, { withFileTypes: true });
201
+ }
202
+ catch {
203
+ return [];
204
+ }
205
+ const hasGit = entries.some((e) => e.name === ".git" && e.isDirectory());
206
+ if (hasGit)
207
+ return [dir];
208
+ const results = [];
209
+ for (const entry of entries) {
210
+ if (!entry.isDirectory())
211
+ continue;
212
+ if (SKIP_DIRS.has(entry.name))
213
+ continue;
214
+ results.push(...findGitRepos(path.join(dir, entry.name), maxDepth, depth + 1));
215
+ }
216
+ return results;
217
+ }
218
+ /** Get slugs of projects already in AR */
219
+ function existingArSlugs() {
220
+ const root = getRoot();
221
+ const projectsDir = path.join(root, "projects");
222
+ if (!fs.existsSync(projectsDir))
223
+ return new Set();
224
+ try {
225
+ return new Set(fs
226
+ .readdirSync(projectsDir, { withFileTypes: true })
227
+ .filter((e) => e.isDirectory())
228
+ .map((e) => e.name));
229
+ }
230
+ catch {
231
+ return new Set();
232
+ }
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // bootstrapScan
236
+ // ---------------------------------------------------------------------------
237
+ export async function bootstrapScan(options) {
238
+ const t0 = Date.now();
239
+ const maxDepth = options?.max_depth ?? 3;
240
+ const scanDirs = [...DEFAULT_SCAN_DIRS, ...(options?.scan_dirs ?? [])];
241
+ const arSlugs = existingArSlugs();
242
+ // Map from slug → DiscoveredProject (for merging multi-source projects)
243
+ const projectMap = new Map();
244
+ // -------------------------------------------------------------------------
245
+ // 1. Git repo discovery
246
+ // -------------------------------------------------------------------------
247
+ const allRepoDirs = [];
248
+ for (const dir of scanDirs) {
249
+ allRepoDirs.push(...findGitRepos(dir, maxDepth));
250
+ }
251
+ const uniqueRepoDirs = [...new Set(allRepoDirs)];
252
+ // Parallel git metadata fetch
253
+ const gitResults = await Promise.allSettled(uniqueRepoDirs.map(async (repoDir) => {
254
+ const [remoteUrl, lastCommitIso, logText] = await Promise.all([
255
+ gitCmd(repoDir, ["config", "--get", "remote.origin.url"]),
256
+ gitCmd(repoDir, ["log", "-1", "--format=%aI"]),
257
+ gitCmd(repoDir, ["log", "--oneline", "-5"]),
258
+ ]);
259
+ const pkgInfo = readPackageInfo(repoDir);
260
+ const remoteName = remoteUrl ? path.basename(remoteUrl, ".git") : "";
261
+ const name = pkgInfo.name ?? (remoteName || path.basename(repoDir));
262
+ const slug = toSlug(name);
263
+ const language = detectLanguage(repoDir);
264
+ const lastActivity = lastCommitIso || undefined;
265
+ const description = pkgInfo.description ?? readReadmeDescription(repoDir);
266
+ const langDetail = [
267
+ language,
268
+ lastActivity ? `last commit ${lastActivity.slice(0, 10)}` : "",
269
+ ]
270
+ .filter(Boolean)
271
+ .join(", ");
272
+ const importable = [];
273
+ // Identity — always generated from discovered metadata
274
+ importable.push({
275
+ id: "identity",
276
+ type: "identity",
277
+ source_path: repoDir,
278
+ size_bytes: 0,
279
+ preview: `${name} — ${description ?? "no description"}`.slice(0, PREVIEW_LEN),
280
+ });
281
+ // Trajectory — if git log available
282
+ if (logText) {
283
+ importable.push({
284
+ id: "git-trajectory",
285
+ type: "trajectory",
286
+ source_path: repoDir,
287
+ size_bytes: Buffer.byteLength(logText, "utf-8"),
288
+ preview: logText.slice(0, PREVIEW_LEN),
289
+ });
290
+ }
291
+ // CLAUDE.md — if exists and not a secret
292
+ const claudemdPath = path.join(repoDir, "CLAUDE.md");
293
+ if (fs.existsSync(claudemdPath) && !isSecretFile(claudemdPath)) {
294
+ importable.push({
295
+ id: "claudemd",
296
+ type: "architecture",
297
+ source_path: claudemdPath,
298
+ size_bytes: fileSizeBytes(claudemdPath),
299
+ preview: readPreview(claudemdPath),
300
+ });
301
+ }
302
+ return {
303
+ slug,
304
+ name,
305
+ path: repoDir,
306
+ sources: [
307
+ {
308
+ type: "git",
309
+ path: repoDir,
310
+ detail: langDetail || "git repo",
311
+ },
312
+ ],
313
+ description,
314
+ language,
315
+ last_activity: lastActivity,
316
+ already_in_ar: arSlugs.has(slug),
317
+ importable_items: importable,
318
+ };
319
+ }));
320
+ for (const result of gitResults) {
321
+ if (result.status !== "fulfilled")
322
+ continue;
323
+ const proj = result.value;
324
+ const existing = projectMap.get(proj.slug);
325
+ if (existing) {
326
+ // Same slug, different path → disambiguate by appending parent dir
327
+ if (existing.path !== proj.path) {
328
+ const parentSlug = toSlug(path.basename(path.dirname(proj.path)));
329
+ const disambiguated = `${proj.slug}-${parentSlug}`;
330
+ if (!projectMap.has(disambiguated)) {
331
+ proj.slug = disambiguated;
332
+ projectMap.set(disambiguated, proj);
333
+ continue;
334
+ }
335
+ }
336
+ // Same project from different sources → merge
337
+ existing.sources.push(...proj.sources);
338
+ const existingIds = new Set(existing.importable_items.map((i) => i.id));
339
+ for (const item of proj.importable_items) {
340
+ if (!existingIds.has(item.id))
341
+ existing.importable_items.push(item);
342
+ }
343
+ }
344
+ else {
345
+ projectMap.set(proj.slug, proj);
346
+ }
347
+ }
348
+ // -------------------------------------------------------------------------
349
+ // 2. Claude AutoMemory discovery (~/.claude/projects/)
350
+ // -------------------------------------------------------------------------
351
+ const claudeProjectsDir = path.join(os.homedir(), ".claude", "projects");
352
+ if (fs.existsSync(claudeProjectsDir)) {
353
+ let subdirs = [];
354
+ try {
355
+ subdirs = fs.readdirSync(claudeProjectsDir);
356
+ }
357
+ catch {
358
+ // ignore
359
+ }
360
+ for (const encodedName of subdirs) {
361
+ const memoryDir = path.join(claudeProjectsDir, encodedName, "memory");
362
+ const memoryMdPath = path.join(memoryDir, "MEMORY.md");
363
+ if (!fs.existsSync(memoryMdPath))
364
+ continue;
365
+ // Decode encoded path: "-Users-tongwu-Projects-myapp" → last segment
366
+ const decoded = encodedName.replace(/^-/, "").replace(/-/g, "/");
367
+ const projectName = path.basename(decoded) || encodedName;
368
+ const slug = toSlug(projectName);
369
+ // List .md files in memory/ (skip > 5KB, skip secrets)
370
+ let mdFiles = [];
371
+ try {
372
+ mdFiles = fs
373
+ .readdirSync(memoryDir)
374
+ .filter((f) => f.endsWith(".md") &&
375
+ !isSecretFile(path.join(memoryDir, f)) &&
376
+ fileSizeBytes(path.join(memoryDir, f)) <= MAX_FILE_SIZE);
377
+ }
378
+ catch {
379
+ // ignore
380
+ }
381
+ const importable = mdFiles.map((fname) => {
382
+ const fpath = path.join(memoryDir, fname);
383
+ return {
384
+ id: `claude-memory:${fname}`,
385
+ type: "memory",
386
+ source_path: fpath,
387
+ size_bytes: fileSizeBytes(fpath),
388
+ preview: readPreview(fpath),
389
+ };
390
+ });
391
+ const sourceDetail = `${mdFiles.length} memory files`;
392
+ const existing = projectMap.get(slug);
393
+ if (existing) {
394
+ existing.sources.push({ type: "claude-memory", path: memoryDir, detail: sourceDetail });
395
+ const existingIds = new Set(existing.importable_items.map((i) => i.id));
396
+ for (const item of importable) {
397
+ if (!existingIds.has(item.id))
398
+ existing.importable_items.push(item);
399
+ }
400
+ }
401
+ else {
402
+ projectMap.set(slug, {
403
+ slug,
404
+ name: projectName,
405
+ path: `/${decoded}`,
406
+ sources: [{ type: "claude-memory", path: memoryDir, detail: sourceDetail }],
407
+ already_in_ar: arSlugs.has(slug),
408
+ importable_items: importable,
409
+ });
410
+ }
411
+ }
412
+ }
413
+ // -------------------------------------------------------------------------
414
+ // 3. Global items — user profile (~/.claude/projects/-Users-*/memory/user_*.md)
415
+ // -------------------------------------------------------------------------
416
+ const globalItems = [];
417
+ if (fs.existsSync(claudeProjectsDir)) {
418
+ let topDirs = [];
419
+ try {
420
+ topDirs = fs.readdirSync(claudeProjectsDir);
421
+ }
422
+ catch {
423
+ // ignore
424
+ }
425
+ for (const dir of topDirs) {
426
+ if (!dir.startsWith("-Users-"))
427
+ continue;
428
+ const memDir = path.join(claudeProjectsDir, dir, "memory");
429
+ if (!fs.existsSync(memDir))
430
+ continue;
431
+ let memFiles = [];
432
+ try {
433
+ memFiles = fs.readdirSync(memDir);
434
+ }
435
+ catch {
436
+ continue;
437
+ }
438
+ for (const fname of memFiles) {
439
+ if (!fname.startsWith("user_") || !fname.endsWith(".md"))
440
+ continue;
441
+ const fpath = path.join(memDir, fname);
442
+ if (isSecretFile(fpath))
443
+ continue;
444
+ const sz = fileSizeBytes(fpath);
445
+ if (sz > MAX_FILE_SIZE)
446
+ continue;
447
+ globalItems.push({
448
+ id: `global:${fname}`,
449
+ type: "memory",
450
+ source_path: fpath,
451
+ size_bytes: sz,
452
+ preview: readPreview(fpath),
453
+ });
454
+ }
455
+ }
456
+ }
457
+ // -------------------------------------------------------------------------
458
+ // 4. Stats
459
+ // -------------------------------------------------------------------------
460
+ const projects = [...projectMap.values()];
461
+ const totalImportable = projects.reduce((acc, p) => acc + p.importable_items.length, 0) + globalItems.length;
462
+ const alreadyInAr = projects.filter((p) => p.already_in_ar).length;
463
+ return {
464
+ projects,
465
+ global_items: globalItems,
466
+ stats: {
467
+ total_projects: projects.length,
468
+ total_importable_items: totalImportable,
469
+ total_already_in_ar: alreadyInAr,
470
+ scan_duration_ms: Date.now() - t0,
471
+ },
472
+ };
473
+ }
474
+ // ---------------------------------------------------------------------------
475
+ // bootstrapImport
476
+ // ---------------------------------------------------------------------------
477
+ export async function bootstrapImport(scan, selection) {
478
+ const t0 = Date.now();
479
+ const includeGlobal = selection?.include_global ?? true;
480
+ const skipItems = new Set(selection?.skip_items ?? []);
481
+ const allowedTypes = selection?.item_types ? new Set(selection.item_types) : null;
482
+ let projectsCreated = 0;
483
+ let itemsImported = 0;
484
+ let itemsSkipped = 0;
485
+ const errors = [];
486
+ // Determine which projects to process — explicit slugs intersect with already_in_ar guard
487
+ let targetProjects = scan.projects.filter((p) => !p.already_in_ar);
488
+ if (selection?.project_slugs && selection.project_slugs.length > 0) {
489
+ const allowedSlugs = new Set(selection.project_slugs);
490
+ targetProjects = targetProjects.filter((p) => allowedSlugs.has(p.slug));
491
+ }
492
+ for (const proj of targetProjects) {
493
+ let createdThisProject = false;
494
+ for (const item of proj.importable_items) {
495
+ // Skip by item ID
496
+ if (skipItems.has(item.id)) {
497
+ itemsSkipped++;
498
+ continue;
499
+ }
500
+ // Filter by type
501
+ if (allowedTypes && !allowedTypes.has(item.type)) {
502
+ itemsSkipped++;
503
+ continue;
504
+ }
505
+ try {
506
+ // Ensure palace initialized (idempotent)
507
+ ensurePalaceInitialized(proj.slug);
508
+ if (!createdThisProject) {
509
+ projectsCreated++;
510
+ createdThisProject = true;
511
+ }
512
+ if (item.id === "identity") {
513
+ // Write identity.md from discovered metadata
514
+ const gitSource = proj.sources.find((s) => s.type === "git");
515
+ const identityContent = [
516
+ `# ${proj.name}`,
517
+ "",
518
+ proj.description ?? "No description available.",
519
+ "",
520
+ `- Language: ${proj.language ?? "unknown"}`,
521
+ `- Source: ${gitSource?.path ?? proj.path}`,
522
+ `- Bootstrapped: ${todayISO()}`,
523
+ ].join("\n");
524
+ writeIdentity(proj.slug, identityContent);
525
+ itemsImported++;
526
+ }
527
+ else if (item.id === "git-trajectory") {
528
+ // Write initial journal entry from git log
529
+ const logText = await gitCmd(proj.path, ["log", "--oneline", "-5"]);
530
+ const content = [
531
+ `# Bootstrap — ${todayISO()}`,
532
+ "",
533
+ "## Brief",
534
+ `Auto-imported from git. Recent commits:\n${logText || "(no log available)"}`,
535
+ "",
536
+ "## Next",
537
+ "Continue from last activity.",
538
+ ].join("\n");
539
+ await journalWrite({ content, project: proj.slug, saveType: "arsave" });
540
+ itemsImported++;
541
+ }
542
+ else if (item.id === "claudemd") {
543
+ // Read CLAUDE.md first 3KB, write to architecture room
544
+ if (!fs.existsSync(item.source_path) || isSecretFile(item.source_path)) {
545
+ itemsSkipped++;
546
+ continue;
547
+ }
548
+ const raw = fs.readFileSync(item.source_path, "utf-8");
549
+ const claudemdContent = raw.slice(0, 3000);
550
+ await palaceWrite({
551
+ room: "architecture",
552
+ topic: "project-conventions",
553
+ content: claudemdContent,
554
+ project: proj.slug,
555
+ });
556
+ itemsImported++;
557
+ }
558
+ else if (item.id.startsWith("claude-memory:")) {
559
+ // Read memory file, write to knowledge room
560
+ if (!fs.existsSync(item.source_path) || isSecretFile(item.source_path)) {
561
+ itemsSkipped++;
562
+ continue;
563
+ }
564
+ const sz = fileSizeBytes(item.source_path);
565
+ if (sz > MAX_FILE_SIZE) {
566
+ itemsSkipped++;
567
+ continue;
568
+ }
569
+ const content = fs.readFileSync(item.source_path, "utf-8");
570
+ const topic = item.id.replace("claude-memory:", "").replace(/\.md$/, "");
571
+ await palaceWrite({
572
+ room: "knowledge",
573
+ topic,
574
+ content,
575
+ project: proj.slug,
576
+ });
577
+ itemsImported++;
578
+ }
579
+ else {
580
+ itemsSkipped++;
581
+ }
582
+ }
583
+ catch (err) {
584
+ errors.push({
585
+ project: proj.slug,
586
+ item: item.id,
587
+ error: err instanceof Error ? err.message : String(err),
588
+ });
589
+ }
590
+ }
591
+ }
592
+ // -------------------------------------------------------------------------
593
+ // Global items (user profile)
594
+ // -------------------------------------------------------------------------
595
+ if (includeGlobal && scan.global_items.length > 0) {
596
+ // Import global items into a dedicated "_global" project
597
+ const globalSlug = "_global";
598
+ try {
599
+ ensurePalaceInitialized(globalSlug);
600
+ }
601
+ catch {
602
+ // ignore init errors for global project
603
+ }
604
+ for (const item of scan.global_items) {
605
+ if (skipItems.has(item.id)) {
606
+ itemsSkipped++;
607
+ continue;
608
+ }
609
+ if (allowedTypes && !allowedTypes.has(item.type)) {
610
+ itemsSkipped++;
611
+ continue;
612
+ }
613
+ try {
614
+ if (!fs.existsSync(item.source_path) || isSecretFile(item.source_path)) {
615
+ itemsSkipped++;
616
+ continue;
617
+ }
618
+ const sz = fileSizeBytes(item.source_path);
619
+ if (sz > MAX_FILE_SIZE) {
620
+ itemsSkipped++;
621
+ continue;
622
+ }
623
+ const content = fs.readFileSync(item.source_path, "utf-8");
624
+ const topic = item.id.replace("global:", "").replace(/\.md$/, "");
625
+ await palaceWrite({
626
+ room: "knowledge",
627
+ topic,
628
+ content,
629
+ project: globalSlug,
630
+ });
631
+ itemsImported++;
632
+ }
633
+ catch (err) {
634
+ errors.push({
635
+ project: globalSlug,
636
+ item: item.id,
637
+ error: err instanceof Error ? err.message : String(err),
638
+ });
639
+ }
640
+ }
641
+ }
642
+ return {
643
+ projects_created: projectsCreated,
644
+ items_imported: itemsImported,
645
+ items_skipped: itemsSkipped,
646
+ errors,
647
+ duration_ms: Date.now() - t0,
648
+ };
649
+ }
650
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/tools-logic/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAa,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAwD1C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,QAAQ;CACT,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEzC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc;IACd,MAAM;IACN,QAAQ;IACR,MAAM;IACN,OAAO;IACP,aAAa;IACb,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,MAAM;CACP,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG;IACtB,SAAS;IACT,cAAc;IACd,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM;AACtC,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,OAAO,GAA2B;QACtC,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;KACd,CAAC;IACF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa;YAAE,OAAO,4BAA4B,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,GAAG;aACP,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;aACnB,QAAQ,CAAC,OAAO,CAAC;aACjB,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,IAAc;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE;YAClE,OAAO,EAAE,cAAc;YACvB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE;SAClD,CAAC,CAAC;QACH,OAAQ,MAAiB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,aAAa;YAAE,OAAO,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAA4B,CAAC;QACrF,OAAO;YACL,WAAW,EAAE,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YACpF,IAAI,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAChE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC;YACH,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa;gBAAE,SAAS;YAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC7E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4FAA4F;AAC5F,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAK,GAAG,CAAC;IAC5D,IAAI,KAAK,GAAG,QAAQ;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0CAA0C;AAC1C,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CACZ,EAAE;aACC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aACjD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAGnC;IACC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAElC,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD,4EAA4E;IAC5E,wBAAwB;IACxB,4EAA4E;IAC5E,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CACzC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAA8B,EAAE;QAC/D,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,aAAa,IAAI,SAAS,CAAC;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAE1E,MAAM,UAAU,GAAG;YACjB,QAAQ;YACR,YAAY,CAAC,CAAC,CAAC,eAAe,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;SAC/D;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,uDAAuD;QACvD,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,GAAG,IAAI,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;SAC9E,CAAC,CAAC;QAEH,oCAAoC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,gBAAgB;gBACpB,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC/C,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,UAAU,CAAC,IAAI,CAAC;gBACd,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC;gBACvC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,UAAU,IAAI,UAAU;iBACjC;aACF;YACD,WAAW;YACX,QAAQ;YACR,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC,gBAAgB,EAAE,UAAU;SAC7B,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,SAAS;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,mEAAmE;YACnE,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;gBACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;oBAC1B,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBACpC,SAAS;gBACX,CAAC;YACH,CAAC;YACD,8CAA8C;YAC9C,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,uDAAuD;IACvD,4EAA4E;IAC5E,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAE3C,qEAAqE;YACrE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAEjC,uDAAuD;YACvD,IAAI,OAAO,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,GAAG,EAAE;qBACT,WAAW,CAAC,SAAS,CAAC;qBACtB,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACjB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACtC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,CAC1D,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1C,OAAO;oBACL,EAAE,EAAE,iBAAiB,KAAK,EAAE;oBAC5B,IAAI,EAAE,QAAiB;oBACvB,WAAW,EAAE,KAAK;oBAClB,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC;oBAChC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;iBAC5B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,MAAM,eAAe,CAAC;YAEtD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;oBACnB,IAAI;oBACJ,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,IAAI,OAAO,EAAE;oBACnB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;oBAC3E,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBAChC,gBAAgB,EAAE,UAAU;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,gFAAgF;IAChF,4EAA4E;IAC5E,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,SAAS;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAErC,IAAI,QAAQ,GAAa,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACnE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,YAAY,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAClC,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,aAAa;oBAAE,SAAS;gBACjC,WAAW,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,UAAU,KAAK,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,KAAK;oBAClB,UAAU,EAAE,EAAE;oBACd,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,WAAW;IACX,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,eAAe,GACnB,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IACvF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;IAEnE,OAAO;QACL,QAAQ;QACR,YAAY,EAAE,WAAW;QACzB,KAAK,EAAE;YACL,cAAc,EAAE,QAAQ,CAAC,MAAM;YAC/B,sBAAsB,EAAE,eAAe;YACvC,mBAAmB,EAAE,WAAW;YAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;SAClC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB,EACzB,SAA2B;IAE3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,aAAa,GAAG,SAAS,EAAE,cAAc,IAAI,IAAI,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAElF,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,0FAA0F;IAC1F,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,IAAI,SAAS,EAAE,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtD,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,kBAAkB;YAClB,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,iBAAiB;YACjB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,yCAAyC;gBACzC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,eAAe,EAAE,CAAC;oBAClB,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;oBAC3B,6CAA6C;oBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;oBAC7D,MAAM,eAAe,GAAG;wBACtB,KAAK,IAAI,CAAC,IAAI,EAAE;wBAChB,EAAE;wBACF,IAAI,CAAC,WAAW,IAAI,2BAA2B;wBAC/C,EAAE;wBACF,eAAe,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;wBAC3C,aAAa,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;wBAC3C,mBAAmB,QAAQ,EAAE,EAAE;qBAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACb,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;oBAC1C,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,EAAE,CAAC;oBACxC,2CAA2C;oBAC3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;oBACpE,MAAM,OAAO,GAAG;wBACd,iBAAiB,QAAQ,EAAE,EAAE;wBAC7B,EAAE;wBACF,UAAU;wBACV,4CAA4C,OAAO,IAAI,oBAAoB,EAAE;wBAC7E,EAAE;wBACF,SAAS;wBACT,8BAA8B;qBAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACb,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACxE,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;oBAClC,uDAAuD;oBACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBACvE,YAAY,EAAE,CAAC;wBACf,SAAS;oBACX,CAAC;oBACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACvD,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC3C,MAAM,WAAW,CAAC;wBAChB,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,qBAAqB;wBAC5B,OAAO,EAAE,eAAe;wBACxB,OAAO,EAAE,IAAI,CAAC,IAAI;qBACnB,CAAC,CAAC;oBACH,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAChD,4CAA4C;oBAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBACvE,YAAY,EAAE,CAAC;wBACf,SAAS;oBACX,CAAC;oBACD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC3C,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;wBACvB,YAAY,EAAE,CAAC;wBACf,SAAS;oBACX,CAAC;oBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACzE,MAAM,WAAW,CAAC;wBAChB,IAAI,EAAE,WAAW;wBACjB,KAAK;wBACL,OAAO;wBACP,OAAO,EAAE,IAAI,CAAC,IAAI;qBACnB,CAAC,CAAC;oBACH,aAAa,EAAE,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,YAAY,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,IAAI,CAAC,IAAI;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE;oBACb,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,8BAA8B;IAC9B,4EAA4E;IAC5E,IAAI,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,yDAAyD;QACzD,MAAM,UAAU,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC;YACH,uBAAuB,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,YAAY,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACvE,YAAY,EAAE,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;oBACvB,YAAY,EAAE,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClE,MAAM,WAAW,CAAC;oBAChB,IAAI,EAAE,WAAW;oBACjB,KAAK;oBACL,OAAO;oBACP,OAAO,EAAE,UAAU;iBACpB,CAAC,CAAC;gBACH,aAAa,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,UAAU;oBACnB,IAAI,EAAE,IAAI,CAAC,EAAE;oBACb,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,eAAe;QACjC,cAAc,EAAE,aAAa;QAC7B,aAAa,EAAE,YAAY;QAC3B,MAAM;QACN,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;KAC7B,CAAC;AACJ,CAAC"}