@hardkas/query-store 0.2.2-alpha → 0.3.0-alpha

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.
package/dist/indexer.js CHANGED
@@ -1,146 +1,365 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { calculateContentHash } from "@hardkas/artifacts";
4
- import { validateEventEnvelope } from "@hardkas/core";
3
+ import { createRequire } from "node:module";
4
+ const require = createRequire(import.meta.url);
5
+ const { DatabaseSync } = require("node:sqlite");
6
+ import { calculateContentHash, verifyArtifactIntegrity } from "@hardkas/artifacts";
7
+ import { validateEventEnvelope, formatCorruptionIssue } from "@hardkas/core";
5
8
  export class HardkasIndexer {
6
9
  db;
7
10
  hardkasDir;
11
+ strict;
8
12
  constructor(db, options = {}) {
9
13
  this.db = db;
10
14
  this.hardkasDir = path.join(options.cwd || process.cwd(), ".hardkas");
15
+ this.strict = options.strict || false;
11
16
  }
12
- sync() {
13
- if (!fs.existsSync(this.hardkasDir))
14
- return;
17
+ /**
18
+ * Performs an incremental sync of the index.
19
+ * Transactional.
20
+ */
21
+ async sync() {
22
+ const result = {
23
+ schema: "hardkas.queryRebuild.v1",
24
+ ok: true,
25
+ artifacts: { scanned: 0, indexed: 0, duplicates: 0, corrupted: 0 },
26
+ events: { scanned: 0, indexed: 0, duplicates: 0, corrupted: 0 },
27
+ warnings: [],
28
+ errors: [],
29
+ issues: []
30
+ };
31
+ if (!fs.existsSync(this.hardkasDir)) {
32
+ return result;
33
+ }
34
+ // HardKAS Policy: Do not nest transactions.
35
+ // Sync handles its own transaction.
15
36
  this.db.exec("BEGIN TRANSACTION;");
16
37
  try {
17
- this.syncArtifacts();
18
- this.syncEvents();
19
- this.syncTraces();
38
+ await this._syncInternal(result);
20
39
  this.db.exec("COMMIT;");
21
40
  }
22
41
  catch (e) {
23
42
  this.db.exec("ROLLBACK;");
24
- throw e;
43
+ result.ok = false;
44
+ result.errors.push(`Sync failed: ${e.message}`);
45
+ if (this.strict)
46
+ throw e;
25
47
  }
48
+ return result;
26
49
  }
27
- syncArtifacts() {
28
- const walk = (dir) => {
29
- let results = [];
30
- if (!fs.existsSync(dir))
31
- return results;
32
- const list = fs.readdirSync(dir);
33
- for (const file of list) {
34
- const filePath = path.join(dir, file);
35
- const stat = fs.statSync(filePath);
36
- if (stat.isDirectory()) {
37
- results = results.concat(walk(filePath));
38
- }
39
- else if (file.endsWith(".json") && !file.endsWith("events.jsonl") && file !== "state.json") {
40
- results.push(filePath);
41
- }
50
+ /**
51
+ * Internal indexing logic without transaction management.
52
+ */
53
+ async _syncInternal(result) {
54
+ await this.syncArtifacts(result);
55
+ this.syncEvents(result);
56
+ this.syncTraces();
57
+ this.cleanupZombies();
58
+ // Mark last sync
59
+ this.db.prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES (?, ?)")
60
+ .run("last_indexed_at", new Date().toISOString());
61
+ }
62
+ /**
63
+ * Complete wipe and rebuild of the index.
64
+ */
65
+ /**
66
+ * Complete wipe and rebuild of the index.
67
+ * Atomic across wipe and first sync.
68
+ */
69
+ async rebuild() {
70
+ const result = {
71
+ schema: "hardkas.queryRebuild.v1",
72
+ ok: true,
73
+ artifacts: { scanned: 0, indexed: 0, duplicates: 0, corrupted: 0 },
74
+ events: { scanned: 0, indexed: 0, duplicates: 0, corrupted: 0 },
75
+ warnings: [],
76
+ errors: [],
77
+ issues: []
78
+ };
79
+ this.db.exec("BEGIN TRANSACTION;");
80
+ try {
81
+ // 1. Wipe
82
+ this._wipeInternal();
83
+ // 2. Full Sync (using internal logic to avoid nested transaction)
84
+ if (fs.existsSync(this.hardkasDir)) {
85
+ await this._syncInternal(result);
42
86
  }
43
- return results;
87
+ this.db.exec("COMMIT;");
88
+ }
89
+ catch (e) {
90
+ this.db.exec("ROLLBACK;");
91
+ result.ok = false;
92
+ result.errors.push(`Rebuild failed: ${e.message}`);
93
+ if (this.strict)
94
+ throw e;
95
+ }
96
+ return result;
97
+ }
98
+ _wipeInternal() {
99
+ this.db.exec("DELETE FROM traces;");
100
+ this.db.exec("DELETE FROM events;");
101
+ this.db.exec("DELETE FROM lineage_edges;");
102
+ this.db.exec("DELETE FROM artifacts;");
103
+ this.db.exec("DELETE FROM metadata WHERE key = 'last_indexed_at';");
104
+ }
105
+ /**
106
+ * Diagnostic check of the index integrity and freshness.
107
+ */
108
+ doctor() {
109
+ const report = {
110
+ ok: true,
111
+ staleArtifacts: 0,
112
+ zombieArtifacts: 0,
113
+ corruptedFiles: [],
114
+ orphanEdges: 0,
115
+ lastIndexedAt: null
44
116
  };
45
- const files = walk(this.hardkasDir);
46
- const insertArtifact = this.db.prepare(`
47
- INSERT OR IGNORE INTO artifacts
48
- (artifact_id, content_hash, schema, version, kind, network_id, tx_id, created_at, raw_json)
49
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
117
+ // 1. Check last indexed
118
+ const lastIdx = this.db.prepare("SELECT value FROM metadata WHERE key = 'last_indexed_at'").get();
119
+ report.lastIndexedAt = lastIdx?.value || null;
120
+ // 2. Check for zombie rows (rows with no file or mismatched mtime)
121
+ const rows = this.db.prepare("SELECT artifact_id, file_path, file_mtime_ms FROM artifacts").all();
122
+ for (const row of rows) {
123
+ if (!row.file_path || !fs.existsSync(row.file_path)) {
124
+ report.zombieArtifacts++;
125
+ }
126
+ else {
127
+ const stat = fs.statSync(row.file_path);
128
+ if (stat.mtimeMs !== row.file_mtime_ms) {
129
+ report.staleArtifacts++;
130
+ }
131
+ }
132
+ }
133
+ // 3. Check for orphan edges
134
+ const orphans = this.db.prepare(`
135
+ SELECT COUNT(*) as count FROM lineage_edges
136
+ WHERE parent_artifact_id NOT IN (SELECT artifact_id FROM artifacts)
137
+ OR child_artifact_id NOT IN (SELECT artifact_id FROM artifacts)
138
+ `).get();
139
+ report.orphanEdges = orphans.count;
140
+ report.ok = report.staleArtifacts === 0 && report.zombieArtifacts === 0 && report.orphanEdges === 0;
141
+ return report;
142
+ }
143
+ async syncArtifacts(result) {
144
+ // Sort files to ensure deterministic indexing order
145
+ const files = this.walk(this.hardkasDir).sort();
146
+ const indexedAt = new Date().toISOString();
147
+ const upsertArtifact = this.db.prepare(`
148
+ INSERT INTO artifacts
149
+ (artifact_id, content_hash, schema, version, kind, mode, network_id, tx_id, created_at, raw_json, file_path, file_mtime_ms, indexed_at)
150
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
151
+ ON CONFLICT(artifact_id) DO UPDATE SET
152
+ content_hash = excluded.content_hash,
153
+ schema = excluded.schema,
154
+ version = excluded.version,
155
+ kind = excluded.kind,
156
+ mode = excluded.mode,
157
+ network_id = excluded.network_id,
158
+ tx_id = excluded.tx_id,
159
+ created_at = excluded.created_at,
160
+ raw_json = excluded.raw_json,
161
+ file_path = excluded.file_path,
162
+ file_mtime_ms = excluded.file_mtime_ms,
163
+ indexed_at = excluded.indexed_at
50
164
  `);
51
- const insertEdge = this.db.prepare(`
52
- INSERT OR IGNORE INTO lineage_edges (lineage_id, parent_artifact_id, child_artifact_id, edge_kind, created_at)
53
- VALUES (?, ?, ?, ?, ?)
165
+ const insertEdge = this.db.prepare(`
166
+ INSERT OR REPLACE INTO lineage_edges (lineage_id, parent_artifact_id, child_artifact_id, edge_kind, created_at)
167
+ VALUES (?, ?, ?, ?, ?)
54
168
  `);
55
- const artifactsWithLineage = [];
56
- // Pass 1: Index Artifacts
169
+ const artifactsToLink = [];
57
170
  for (const file of files) {
58
- const content = fs.readFileSync(file, "utf-8");
171
+ result.artifacts.scanned++;
172
+ const stat = fs.statSync(file);
59
173
  try {
174
+ const verification = await verifyArtifactIntegrity(file);
175
+ if (!verification.ok) {
176
+ result.artifacts.corrupted++;
177
+ verification.issues.forEach(issue => {
178
+ const corruptionIssue = {
179
+ code: issue.code,
180
+ severity: issue.severity === "warning" ? "warning" : "error",
181
+ message: issue.message,
182
+ path: file
183
+ };
184
+ result.issues.push(corruptionIssue);
185
+ result.warnings.push(formatCorruptionIssue(corruptionIssue));
186
+ });
187
+ if (this.strict) {
188
+ throw new Error(`Strict mode: corrupted artifact in ${file}`);
189
+ }
190
+ continue; // Skip corrupted artifact
191
+ }
192
+ const content = fs.readFileSync(file, "utf-8");
60
193
  const parsed = JSON.parse(content);
61
- if (!parsed.schema || !parsed.version || !parsed.artifactId)
62
- continue;
194
+ // Artifact ID is required for indexing
195
+ const artifactId = parsed.artifactId || parsed.contentHash || calculateContentHash(parsed);
63
196
  const hash = parsed.contentHash || calculateContentHash(parsed);
64
- insertArtifact.run(parsed.artifactId, hash, parsed.schema, parsed.version, parsed.kind || parsed.schema, parsed.networkId || "unknown", parsed.txId || null, parsed.createdAt || null, content);
197
+ upsertArtifact.run(artifactId, hash, parsed.schema, parsed.version, parsed.kind || parsed.schema, parsed.mode || "unknown", parsed.networkId || "unknown", parsed.txId || null, parsed.createdAt || null, content, file, stat.mtimeMs, indexedAt);
198
+ result.artifacts.indexed++;
65
199
  if (parsed.lineage && parsed.lineage.parentArtifactId) {
66
- artifactsWithLineage.push(parsed);
200
+ artifactsToLink.push(parsed);
67
201
  }
68
202
  }
69
203
  catch (e) {
70
- // Skip invalid JSON
204
+ result.artifacts.corrupted++;
205
+ const code = e instanceof SyntaxError ? "ARTIFACT_JSON_INVALID" : "ARTIFACT_ID_INVALID";
206
+ const corruptionIssue = {
207
+ code: code,
208
+ severity: "error",
209
+ message: e.message,
210
+ path: file
211
+ };
212
+ result.issues.push(corruptionIssue);
213
+ if (this.strict)
214
+ throw e;
215
+ result.warnings.push(formatCorruptionIssue(corruptionIssue));
71
216
  }
72
217
  }
73
- // Pass 2: Index Lineage Edges (after artifacts are present)
74
- for (const parsed of artifactsWithLineage) {
218
+ // Pass 2: Lineage Edges (Now all artifact IDs exist)
219
+ for (const parsed of artifactsToLink) {
75
220
  try {
76
- insertEdge.run(parsed.lineage.lineageId || "legacy-lineage", parsed.lineage.parentArtifactId, parsed.artifactId, "derived", parsed.createdAt || null);
221
+ insertEdge.run(parsed.lineage.lineageId || "legacy-lineage", parsed.lineage.parentArtifactId, parsed.artifactId || parsed.contentHash, "derived", parsed.createdAt || null);
77
222
  }
78
223
  catch (e) {
79
- // Ignore edge errors (e.g. FK violation if parent missing from disk)
224
+ result.warnings.push(`Failed to link lineage for ${parsed.artifactId}: ${e.message}`);
80
225
  }
81
226
  }
82
227
  }
83
- syncEvents() {
228
+ syncEvents(result) {
84
229
  const eventsPath = path.join(this.hardkasDir, "events.jsonl");
85
230
  if (!fs.existsSync(eventsPath))
86
231
  return;
232
+ const stat = fs.statSync(eventsPath);
233
+ const indexedAt = new Date().toISOString();
87
234
  const content = fs.readFileSync(eventsPath, "utf-8");
88
- const lines = content.split("\n").filter(l => l.trim() !== "");
89
- const stmt = this.db.prepare("SELECT COUNT(*) as count FROM events");
90
- const result = stmt.get();
91
- const existingCount = result.count;
92
- if (lines.length <= existingCount)
93
- return;
94
- const newLines = lines.slice(existingCount);
95
- const insertEvent = this.db.prepare(`
96
- INSERT OR IGNORE INTO events
97
- (event_id, kind, domain, timestamp, workflow_id, correlation_id, causation_id, tx_id, artifact_id, network_id, raw_json)
98
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
235
+ const lines = content.split("\n");
236
+ const upsertEvent = this.db.prepare(`
237
+ INSERT INTO events
238
+ (event_id, kind, domain, timestamp, workflow_id, correlation_id, causation_id, tx_id, artifact_id, network_id, raw_json, file_path, file_mtime_ms, indexed_at)
239
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
240
+ ON CONFLICT(event_id) DO UPDATE SET
241
+ kind = excluded.kind,
242
+ domain = excluded.domain,
243
+ timestamp = excluded.timestamp,
244
+ workflow_id = excluded.workflow_id,
245
+ correlation_id = excluded.correlation_id,
246
+ causation_id = excluded.causation_id,
247
+ tx_id = excluded.tx_id,
248
+ artifact_id = excluded.artifact_id,
249
+ network_id = excluded.network_id,
250
+ raw_json = excluded.raw_json,
251
+ file_path = excluded.file_path,
252
+ file_mtime_ms = excluded.file_mtime_ms,
253
+ indexed_at = excluded.indexed_at
99
254
  `);
100
- for (const line of newLines) {
255
+ for (let i = 0; i < lines.length; i++) {
256
+ const line = lines[i].trim();
257
+ if (line === "")
258
+ continue;
259
+ result.events.scanned++;
260
+ const lineNum = i + 1;
101
261
  try {
102
262
  const parsed = JSON.parse(line);
103
- if (!validateEventEnvelope(parsed))
263
+ if (!validateEventEnvelope(parsed)) {
264
+ const issue = {
265
+ code: "EVENT_SCHEMA_INVALID",
266
+ severity: "error",
267
+ message: "Invalid event envelope structure",
268
+ path: eventsPath,
269
+ lineNumber: lineNum
270
+ };
271
+ result.issues.push(issue);
272
+ result.events.corrupted++;
273
+ if (this.strict)
274
+ throw new Error(formatCorruptionIssue(issue));
275
+ result.warnings.push(formatCorruptionIssue(issue));
104
276
  continue;
105
- insertEvent.run(parsed.eventId, parsed.kind, parsed.domain, parsed.timestamp || null, parsed.workflowId, parsed.correlationId, parsed.causationId || null, parsed.txId || null, parsed.artifactId || null, parsed.networkId, line);
277
+ }
278
+ upsertEvent.run(parsed.eventId, parsed.kind, parsed.domain, parsed.timestamp || null, parsed.workflowId, parsed.correlationId, parsed.causationId || null, parsed.txId || null, parsed.artifactId || null, parsed.networkId, line, eventsPath, stat.mtimeMs, indexedAt);
279
+ result.events.indexed++;
106
280
  }
107
281
  catch (e) {
108
- // Skip invalid line
282
+ result.events.corrupted++;
283
+ const issue = {
284
+ code: e instanceof SyntaxError ? "EVENT_JSON_INVALID" : "EVENT_LINE_CORRUPT",
285
+ severity: "error",
286
+ message: e.message,
287
+ path: eventsPath,
288
+ lineNumber: lineNum
289
+ };
290
+ result.issues.push(issue);
291
+ if (this.strict) {
292
+ throw new Error(formatCorruptionIssue(issue));
293
+ }
294
+ result.warnings.push(formatCorruptionIssue(issue));
109
295
  }
110
296
  }
111
297
  }
112
298
  syncTraces() {
113
- const upsertTrace = this.db.prepare(`
114
- INSERT INTO traces (trace_id, workflow_id, root_event_id, status, started_at, ended_at)
115
- SELECT
116
- 'trace-' || workflow_id as trace_id,
117
- workflow_id,
118
- event_id as root_event_id,
119
- CASE
120
- WHEN kind = 'workflow.completed' THEN 'completed'
121
- WHEN kind = 'workflow.failed' THEN 'failed'
122
- ELSE 'running'
123
- END as status,
124
- timestamp as started_at,
125
- CASE
126
- WHEN kind IN ('workflow.completed', 'workflow.failed') THEN timestamp
127
- ELSE NULL
128
- END as ended_at
129
- FROM events
130
- WHERE kind LIKE 'workflow.%'
131
- ON CONFLICT(workflow_id) DO UPDATE SET
132
- status = CASE
133
- WHEN excluded.status IN ('completed', 'failed') THEN excluded.status
134
- ELSE traces.status
135
- END,
136
- ended_at = CASE
137
- WHEN excluded.status IN ('completed', 'failed') THEN excluded.ended_at
138
- ELSE traces.ended_at
139
- END,
140
- root_event_id = COALESCE(traces.root_event_id, excluded.root_event_id),
141
- started_at = COALESCE(traces.started_at, excluded.started_at)
299
+ const upsertTrace = this.db.prepare(`
300
+ INSERT INTO traces (trace_id, workflow_id, root_event_id, status, started_at, ended_at)
301
+ SELECT
302
+ 'trace-' || workflow_id as trace_id,
303
+ workflow_id,
304
+ event_id as root_event_id,
305
+ CASE
306
+ WHEN kind = 'workflow.completed' THEN 'completed'
307
+ WHEN kind = 'workflow.failed' THEN 'failed'
308
+ ELSE 'running'
309
+ END as status,
310
+ timestamp as started_at,
311
+ CASE
312
+ WHEN kind IN ('workflow.completed', 'workflow.failed') THEN timestamp
313
+ ELSE NULL
314
+ END as ended_at
315
+ FROM events
316
+ WHERE kind LIKE 'workflow.%'
317
+ ON CONFLICT(workflow_id) DO UPDATE SET
318
+ status = CASE
319
+ WHEN excluded.status IN ('completed', 'failed') THEN excluded.status
320
+ ELSE traces.status
321
+ END,
322
+ ended_at = CASE
323
+ WHEN excluded.status IN ('completed', 'failed') THEN excluded.ended_at
324
+ ELSE traces.ended_at
325
+ END,
326
+ root_event_id = COALESCE(traces.root_event_id, excluded.root_event_id),
327
+ started_at = COALESCE(traces.started_at, excluded.started_at)
142
328
  `);
143
329
  upsertTrace.run();
144
330
  }
331
+ cleanupZombies() {
332
+ const rows = this.db.prepare("SELECT artifact_id, file_path FROM artifacts").all();
333
+ const deleteArtifact = this.db.prepare("DELETE FROM artifacts WHERE artifact_id = ?");
334
+ for (const row of rows) {
335
+ if (!row.file_path || !fs.existsSync(row.file_path)) {
336
+ deleteArtifact.run(row.artifact_id);
337
+ }
338
+ }
339
+ // Events cleanup (if file gone, all events gone)
340
+ const eventsPath = path.join(this.hardkasDir, "events.jsonl");
341
+ if (!fs.existsSync(eventsPath)) {
342
+ this.db.exec("DELETE FROM events;");
343
+ }
344
+ }
345
+ walk(dir) {
346
+ let results = [];
347
+ if (!fs.existsSync(dir))
348
+ return results;
349
+ const list = fs.readdirSync(dir);
350
+ for (const file of list) {
351
+ const filePath = path.join(dir, file);
352
+ const stat = fs.statSync(filePath);
353
+ if (stat.isDirectory()) {
354
+ if (file === "node_modules" || file === ".git")
355
+ continue;
356
+ results = results.concat(this.walk(filePath));
357
+ }
358
+ else if (file.endsWith(".json") && !file.endsWith("events.jsonl") && file !== "state.json") {
359
+ results.push(filePath);
360
+ }
361
+ }
362
+ return results;
363
+ }
145
364
  }
146
365
  //# sourceMappingURL=indexer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ export interface Migration {
2
+ version: number;
3
+ name: string;
4
+ checksum: string;
5
+ up(db: any): void;
6
+ }
7
+ export interface MigrationHistoryEntry {
8
+ version: number;
9
+ name: string;
10
+ checksum: string;
11
+ applied_at: string;
12
+ }
13
+ export declare class MigrationRunner {
14
+ private db;
15
+ constructor(db: any);
16
+ /**
17
+ * Ensures the migration history table exists.
18
+ */
19
+ ensureHistoryTable(): void;
20
+ /**
21
+ * Fetches all applied migrations from the history table.
22
+ */
23
+ getAppliedMigrations(): MigrationHistoryEntry[];
24
+ /**
25
+ * Applies pending migrations in order.
26
+ */
27
+ migrate(migrations: Migration[]): {
28
+ applied: number;
29
+ status: "ok" | "bootstrapped" | "failed";
30
+ };
31
+ /**
32
+ * Legacy bootstrap: if the DB is in a known state but has no migration history,
33
+ * we inject the history without running the 'up' logic.
34
+ */
35
+ bootstrapLegacy(knownVersion: number, migrations: Migration[]): boolean;
36
+ }
37
+ /**
38
+ * Registry of all query-store migrations.
39
+ * Version 1: Initial schema (Baseline v0.2-alpha).
40
+ */
41
+ export declare const MIGRATIONS: Migration[];
42
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,GAAG;IAE3B;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAWjC;;OAEG;IACI,oBAAoB,IAAI,qBAAqB,EAAE;IAStD;;OAEG;IACI,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,GAAG,cAAc,GAAG,QAAQ,CAAA;KAAE;IAkDtG;;;OAGG;IACI,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO;CAkB/E;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAAS,EA+FjC,CAAC"}