universal-agent-memory 0.6.3 → 0.7.1

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 (51) hide show
  1. package/dist/benchmarks/benchmark.d.ts +12 -12
  2. package/dist/benchmarks/execution-verifier.d.ts.map +1 -1
  3. package/dist/benchmarks/execution-verifier.js +51 -10
  4. package/dist/benchmarks/execution-verifier.js.map +1 -1
  5. package/dist/bin/cli.js +4 -1
  6. package/dist/bin/cli.js.map +1 -1
  7. package/dist/cli/update.d.ts +3 -0
  8. package/dist/cli/update.d.ts.map +1 -1
  9. package/dist/cli/update.js +136 -11
  10. package/dist/cli/update.js.map +1 -1
  11. package/dist/index.d.ts +17 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +16 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/memory/backends/qdrant-cloud.d.ts +12 -1
  16. package/dist/memory/backends/qdrant-cloud.d.ts.map +1 -1
  17. package/dist/memory/backends/qdrant-cloud.js +39 -3
  18. package/dist/memory/backends/qdrant-cloud.js.map +1 -1
  19. package/dist/memory/context-compressor.d.ts +66 -0
  20. package/dist/memory/context-compressor.d.ts.map +1 -0
  21. package/dist/memory/context-compressor.js +250 -0
  22. package/dist/memory/context-compressor.js.map +1 -0
  23. package/dist/memory/dynamic-retrieval.d.ts +62 -1
  24. package/dist/memory/dynamic-retrieval.d.ts.map +1 -1
  25. package/dist/memory/dynamic-retrieval.js +154 -32
  26. package/dist/memory/dynamic-retrieval.js.map +1 -1
  27. package/dist/memory/embeddings.d.ts +38 -4
  28. package/dist/memory/embeddings.d.ts.map +1 -1
  29. package/dist/memory/embeddings.js +173 -9
  30. package/dist/memory/embeddings.js.map +1 -1
  31. package/dist/memory/hierarchical-memory.d.ts +116 -0
  32. package/dist/memory/hierarchical-memory.d.ts.map +1 -0
  33. package/dist/memory/hierarchical-memory.js +299 -0
  34. package/dist/memory/hierarchical-memory.js.map +1 -0
  35. package/dist/memory/memory-consolidator.d.ts +124 -0
  36. package/dist/memory/memory-consolidator.d.ts.map +1 -0
  37. package/dist/memory/memory-consolidator.js +514 -0
  38. package/dist/memory/memory-consolidator.js.map +1 -0
  39. package/dist/memory/multi-view-memory.d.ts +134 -0
  40. package/dist/memory/multi-view-memory.d.ts.map +1 -0
  41. package/dist/memory/multi-view-memory.js +420 -0
  42. package/dist/memory/multi-view-memory.js.map +1 -0
  43. package/dist/memory/semantic-compression.d.ts +77 -0
  44. package/dist/memory/semantic-compression.d.ts.map +1 -0
  45. package/dist/memory/semantic-compression.js +344 -0
  46. package/dist/memory/semantic-compression.js.map +1 -0
  47. package/dist/memory/speculative-cache.d.ts +92 -0
  48. package/dist/memory/speculative-cache.d.ts.map +1 -0
  49. package/dist/memory/speculative-cache.js +261 -0
  50. package/dist/memory/speculative-cache.js.map +1 -0
  51. package/package.json +1 -1
@@ -0,0 +1,420 @@
1
+ /**
2
+ * Multi-View Memory System for UAM
3
+ *
4
+ * Implements:
5
+ * 1. Multi-view indexing (entity, temporal, semantic type views)
6
+ * 2. ENGRAM-style memory typing (episodic, semantic, procedural)
7
+ * 3. Async embedding generation
8
+ * 4. Speculative cache integration with task classifier
9
+ *
10
+ * Based on SimpleMem (2026) and ENGRAM (2025) research
11
+ */
12
+ import { getEmbeddingService } from './embeddings.js';
13
+ import { getSpeculativeCache } from './speculative-cache.js';
14
+ import { classifyTask } from './task-classifier.js';
15
+ /**
16
+ * Classify memory into ENGRAM type
17
+ */
18
+ export function classifyENGRAMType(content, context) {
19
+ // Procedural: how-to, commands, steps
20
+ if (/how to|step \d|first.*then|run |execute |use |install /i.test(content)) {
21
+ return 'procedural';
22
+ }
23
+ // Check explicit type hints
24
+ if (context?.type === 'action' || context?.type === 'goal') {
25
+ return 'procedural';
26
+ }
27
+ // Episodic: specific events, past tense, temporal markers
28
+ if (/yesterday|today|last week|earlier|just now|happened|occurred|found that/i.test(content)) {
29
+ return 'episodic';
30
+ }
31
+ if (context?.type === 'observation') {
32
+ return 'episodic';
33
+ }
34
+ // Semantic: general facts, definitions, patterns
35
+ if (/is a|are |means|defined as|always|never|typically|pattern/i.test(content)) {
36
+ return 'semantic';
37
+ }
38
+ // Default based on content characteristics
39
+ const hasCommand = /`[^`]+`/.test(content);
40
+ const hasPath = /\/[\w/.-]+/.test(content);
41
+ if (hasCommand || hasPath) {
42
+ return 'procedural';
43
+ }
44
+ return 'semantic'; // Default
45
+ }
46
+ /**
47
+ * Extract temporal bucket from content/timestamp
48
+ */
49
+ export function extractTemporalBucket(content, timestamp) {
50
+ // Check for relative time markers
51
+ if (/just now|moments ago/i.test(content))
52
+ return 'now';
53
+ if (/today|this morning|this afternoon/i.test(content))
54
+ return 'today';
55
+ if (/yesterday/i.test(content))
56
+ return 'yesterday';
57
+ if (/this week|past few days/i.test(content))
58
+ return 'this-week';
59
+ if (/last week/i.test(content))
60
+ return 'last-week';
61
+ if (/this month/i.test(content))
62
+ return 'this-month';
63
+ // Use timestamp if available
64
+ if (timestamp) {
65
+ return timestamp.split('T')[0]; // YYYY-MM-DD
66
+ }
67
+ return 'unknown';
68
+ }
69
+ /**
70
+ * Multi-View Memory Manager
71
+ */
72
+ export class MultiViewMemoryManager {
73
+ memories = new Map();
74
+ index = {
75
+ byEntity: new Map(),
76
+ byTemporal: new Map(),
77
+ bySemanticType: new Map(),
78
+ byENGRAMType: new Map(),
79
+ };
80
+ embeddingQueue = [];
81
+ isProcessingEmbeddings = false;
82
+ /**
83
+ * Add memory with multi-view indexing
84
+ */
85
+ async add(content, options = {}) {
86
+ const id = options.id || `mem-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
87
+ // Classify ENGRAM type
88
+ const memoryType = classifyENGRAMType(content, { type: options.semanticType });
89
+ // Extract temporal bucket
90
+ const temporalBucket = extractTemporalBucket(content, options.timestamp);
91
+ // Extract entities if not provided
92
+ const entities = options.entities || this.extractEntities(content);
93
+ const memory = {
94
+ id,
95
+ content,
96
+ memoryType,
97
+ entities,
98
+ temporalBucket,
99
+ semanticType: options.semanticType || 'general',
100
+ importance: options.importance || 5,
101
+ accessCount: 0,
102
+ lastAccessed: new Date(),
103
+ qualityScore: options.importance || 5,
104
+ embeddingPending: options.generateEmbedding !== false,
105
+ };
106
+ // Store memory
107
+ this.memories.set(id, memory);
108
+ // Update indices
109
+ this.indexMemory(memory);
110
+ // Queue embedding generation if requested
111
+ if (options.generateEmbedding !== false) {
112
+ this.embeddingQueue.push(id);
113
+ this.processEmbeddingQueue();
114
+ }
115
+ return memory;
116
+ }
117
+ /**
118
+ * Index memory in all views
119
+ */
120
+ indexMemory(memory) {
121
+ // Entity index
122
+ for (const entity of memory.entities) {
123
+ if (!this.index.byEntity.has(entity)) {
124
+ this.index.byEntity.set(entity, new Set());
125
+ }
126
+ this.index.byEntity.get(entity).add(memory.id);
127
+ }
128
+ // Temporal index
129
+ if (!this.index.byTemporal.has(memory.temporalBucket)) {
130
+ this.index.byTemporal.set(memory.temporalBucket, new Set());
131
+ }
132
+ this.index.byTemporal.get(memory.temporalBucket).add(memory.id);
133
+ // Semantic type index
134
+ if (!this.index.bySemanticType.has(memory.semanticType)) {
135
+ this.index.bySemanticType.set(memory.semanticType, new Set());
136
+ }
137
+ this.index.bySemanticType.get(memory.semanticType).add(memory.id);
138
+ // ENGRAM type index
139
+ if (!this.index.byENGRAMType.has(memory.memoryType)) {
140
+ this.index.byENGRAMType.set(memory.memoryType, new Set());
141
+ }
142
+ this.index.byENGRAMType.get(memory.memoryType).add(memory.id);
143
+ }
144
+ /**
145
+ * Query by entity
146
+ */
147
+ queryByEntity(entity) {
148
+ const ids = this.index.byEntity.get(entity);
149
+ if (!ids)
150
+ return [];
151
+ return Array.from(ids).map(id => this.memories.get(id)).filter(Boolean);
152
+ }
153
+ /**
154
+ * Query by ENGRAM type
155
+ */
156
+ queryByENGRAMType(type) {
157
+ const ids = this.index.byENGRAMType.get(type);
158
+ if (!ids)
159
+ return [];
160
+ return Array.from(ids).map(id => this.memories.get(id)).filter(Boolean);
161
+ }
162
+ /**
163
+ * Query by temporal bucket
164
+ */
165
+ queryByTemporal(bucket) {
166
+ const ids = this.index.byTemporal.get(bucket);
167
+ if (!ids)
168
+ return [];
169
+ return Array.from(ids).map(id => this.memories.get(id)).filter(Boolean);
170
+ }
171
+ /**
172
+ * Smart query using task classification to select best view
173
+ */
174
+ async smartQuery(query, limit = 10) {
175
+ const classification = classifyTask(query);
176
+ const results = [];
177
+ const seen = new Set();
178
+ // Check speculative cache first
179
+ const cache = getSpeculativeCache();
180
+ const cached = cache.get(query);
181
+ if (cached) {
182
+ return cached.result;
183
+ }
184
+ // Determine best retrieval strategy based on task type
185
+ const strategy = this.getRetrievalStrategy(classification);
186
+ // Execute strategy
187
+ for (const step of strategy) {
188
+ const stepResults = await this.executeStrategyStep(step, query, classification);
189
+ for (const mem of stepResults) {
190
+ if (!seen.has(mem.id)) {
191
+ seen.add(mem.id);
192
+ results.push(mem);
193
+ this.recordAccess(mem.id);
194
+ }
195
+ }
196
+ if (results.length >= limit)
197
+ break;
198
+ }
199
+ // Sort by quality score and recency
200
+ results.sort((a, b) => {
201
+ const scoreA = a.qualityScore * (1 + a.accessCount * 0.1);
202
+ const scoreB = b.qualityScore * (1 + b.accessCount * 0.1);
203
+ return scoreB - scoreA;
204
+ });
205
+ const finalResults = results.slice(0, limit);
206
+ // Cache results
207
+ cache.set(query, finalResults);
208
+ // Pre-warm cache for predicted follow-up queries
209
+ cache.preWarm(query, async (q) => {
210
+ const r = await this.smartQuery(q, limit);
211
+ return r;
212
+ });
213
+ return finalResults;
214
+ }
215
+ /**
216
+ * Get retrieval strategy based on task classification
217
+ */
218
+ getRetrievalStrategy(classification) {
219
+ const strategies = {
220
+ 'sysadmin': [
221
+ { view: 'engram', filter: 'procedural', weight: 1.5 },
222
+ { view: 'semantic', filter: 'action', weight: 1.2 },
223
+ { view: 'embedding', weight: 1.0 },
224
+ ],
225
+ 'debugging': [
226
+ { view: 'engram', filter: 'episodic', weight: 1.5 },
227
+ { view: 'temporal', filter: 'today', weight: 1.3 },
228
+ { view: 'embedding', weight: 1.0 },
229
+ ],
230
+ 'coding': [
231
+ { view: 'engram', filter: 'procedural', weight: 1.3 },
232
+ { view: 'engram', filter: 'semantic', weight: 1.2 },
233
+ { view: 'embedding', weight: 1.0 },
234
+ ],
235
+ 'security': [
236
+ { view: 'engram', filter: 'semantic', weight: 1.5 },
237
+ { view: 'semantic', filter: 'gotcha', weight: 1.3 },
238
+ { view: 'embedding', weight: 1.0 },
239
+ ],
240
+ 'default': [
241
+ { view: 'embedding', weight: 1.0 },
242
+ { view: 'engram', filter: 'semantic', weight: 0.8 },
243
+ ],
244
+ };
245
+ return strategies[classification.category] || strategies['default'];
246
+ }
247
+ /**
248
+ * Execute a single strategy step
249
+ */
250
+ async executeStrategyStep(step, query, _classification) {
251
+ switch (step.view) {
252
+ case 'entity': {
253
+ const entities = this.extractEntities(query);
254
+ const results = [];
255
+ for (const entity of entities) {
256
+ results.push(...this.queryByEntity(entity));
257
+ }
258
+ return results;
259
+ }
260
+ case 'temporal': {
261
+ if (step.filter) {
262
+ return this.queryByTemporal(step.filter);
263
+ }
264
+ // Return recent memories
265
+ return this.queryByTemporal('today').concat(this.queryByTemporal('yesterday'));
266
+ }
267
+ case 'semantic': {
268
+ if (step.filter) {
269
+ const ids = this.index.bySemanticType.get(step.filter);
270
+ if (ids) {
271
+ return Array.from(ids).map(id => this.memories.get(id)).filter(Boolean);
272
+ }
273
+ }
274
+ return [];
275
+ }
276
+ case 'engram': {
277
+ if (step.filter) {
278
+ return this.queryByENGRAMType(step.filter);
279
+ }
280
+ return [];
281
+ }
282
+ case 'embedding': {
283
+ return this.semanticSearch(query, 10);
284
+ }
285
+ default:
286
+ return [];
287
+ }
288
+ }
289
+ /**
290
+ * Semantic search using embeddings
291
+ */
292
+ async semanticSearch(query, limit = 10) {
293
+ const embeddingService = getEmbeddingService();
294
+ try {
295
+ const queryEmbedding = await embeddingService.embed(query);
296
+ const scored = [];
297
+ for (const memory of this.memories.values()) {
298
+ if (memory.embedding) {
299
+ const score = embeddingService.cosineSimilarity(queryEmbedding, memory.embedding);
300
+ if (score > 0.5) {
301
+ scored.push({ memory, score });
302
+ }
303
+ }
304
+ }
305
+ scored.sort((a, b) => b.score - a.score);
306
+ return scored.slice(0, limit).map(s => s.memory);
307
+ }
308
+ catch {
309
+ return [];
310
+ }
311
+ }
312
+ /**
313
+ * Process embedding queue asynchronously
314
+ */
315
+ async processEmbeddingQueue() {
316
+ if (this.isProcessingEmbeddings || this.embeddingQueue.length === 0)
317
+ return;
318
+ this.isProcessingEmbeddings = true;
319
+ const embeddingService = getEmbeddingService();
320
+ try {
321
+ // Process in batches of 10
322
+ while (this.embeddingQueue.length > 0) {
323
+ const batch = this.embeddingQueue.splice(0, 10);
324
+ const memories = batch.map(id => this.memories.get(id)).filter(Boolean);
325
+ const texts = memories.map(m => m.content);
326
+ if (texts.length > 0) {
327
+ const embeddings = await embeddingService.embedBatch(texts);
328
+ for (let i = 0; i < memories.length; i++) {
329
+ memories[i].embedding = embeddings[i];
330
+ memories[i].embeddingPending = false;
331
+ }
332
+ }
333
+ }
334
+ }
335
+ catch (error) {
336
+ console.error('[MultiViewMemory] Embedding generation error:', error);
337
+ }
338
+ finally {
339
+ this.isProcessingEmbeddings = false;
340
+ }
341
+ }
342
+ /**
343
+ * Extract entities from content
344
+ */
345
+ extractEntities(content) {
346
+ const entities = [];
347
+ // File paths
348
+ const paths = content.match(/[\w./\\-]+\.(ts|js|py|json|yaml|yml|md|sh|sql)/gi);
349
+ if (paths)
350
+ entities.push(...paths);
351
+ // Function/class names
352
+ const names = content.match(/\b[a-z][a-zA-Z0-9]*(?:[A-Z][a-zA-Z0-9]*)+\b/g);
353
+ if (names)
354
+ entities.push(...names);
355
+ // Commands
356
+ const commands = content.match(/\b(npm|git|uam|docker|curl|pip|python|node)\s+\w+/gi);
357
+ if (commands)
358
+ entities.push(...commands.map(c => c.trim()));
359
+ // Quoted strings
360
+ const quoted = content.match(/`([^`]+)`/g);
361
+ if (quoted)
362
+ entities.push(...quoted.map(q => q.replace(/`/g, '')));
363
+ return [...new Set(entities)];
364
+ }
365
+ /**
366
+ * Record memory access
367
+ */
368
+ recordAccess(memoryId) {
369
+ const memory = this.memories.get(memoryId);
370
+ if (memory) {
371
+ memory.accessCount++;
372
+ memory.lastAccessed = new Date();
373
+ memory.qualityScore = Math.min(10, memory.qualityScore + 0.1);
374
+ }
375
+ }
376
+ /**
377
+ * Get statistics
378
+ */
379
+ getStats() {
380
+ const byENGRAMType = {
381
+ episodic: this.index.byENGRAMType.get('episodic')?.size || 0,
382
+ semantic: this.index.byENGRAMType.get('semantic')?.size || 0,
383
+ procedural: this.index.byENGRAMType.get('procedural')?.size || 0,
384
+ };
385
+ return {
386
+ totalMemories: this.memories.size,
387
+ byENGRAMType,
388
+ pendingEmbeddings: this.embeddingQueue.length,
389
+ entitiesIndexed: this.index.byEntity.size,
390
+ };
391
+ }
392
+ /**
393
+ * Export all memories
394
+ */
395
+ export() {
396
+ return Array.from(this.memories.values());
397
+ }
398
+ /**
399
+ * Import memories
400
+ */
401
+ async import(memories) {
402
+ for (const memory of memories) {
403
+ this.memories.set(memory.id, memory);
404
+ this.indexMemory(memory);
405
+ if (!memory.embedding) {
406
+ this.embeddingQueue.push(memory.id);
407
+ }
408
+ }
409
+ this.processEmbeddingQueue();
410
+ }
411
+ }
412
+ // Singleton instance
413
+ let globalMultiViewManager = null;
414
+ export function getMultiViewMemoryManager() {
415
+ if (!globalMultiViewManager) {
416
+ globalMultiViewManager = new MultiViewMemoryManager();
417
+ }
418
+ return globalMultiViewManager;
419
+ }
420
+ //# sourceMappingURL=multi-view-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-view-memory.js","sourceRoot":"","sources":["../../src/memory/multi-view-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Semantic Compression Module for UAM
3
+ *
4
+ * Implements SimpleMem-style semantic structured compression:
5
+ * 1. Entropy-aware filtering to distill raw content into atomic facts
6
+ * 2. Coreference normalization (entity resolution)
7
+ * 3. Multi-view indexing for efficient retrieval
8
+ *
9
+ * Based on SimpleMem research (2026): 30x token reduction while maintaining F1 scores
10
+ */
11
+ export interface AtomicFact {
12
+ content: string;
13
+ entities: string[];
14
+ actionability: number;
15
+ temporality: 'past' | 'present' | 'future' | 'timeless';
16
+ type: 'fact' | 'decision' | 'lesson' | 'pattern' | 'gotcha';
17
+ }
18
+ export interface SemanticUnit {
19
+ id: string;
20
+ atomicFacts: AtomicFact[];
21
+ entities: string[];
22
+ temporalMarkers: string[];
23
+ sourceTokens: number;
24
+ compressedTokens: number;
25
+ compressionRatio: number;
26
+ }
27
+ export interface SemanticCompressionConfig {
28
+ maxFactsPerUnit: number;
29
+ minActionability: number;
30
+ minEntropy: number;
31
+ deduplicationThreshold: number;
32
+ preserveHighImportance: boolean;
33
+ }
34
+ /**
35
+ * Calculate Shannon entropy of text (normalized 0-1)
36
+ * Higher entropy = more information content, less repetition
37
+ * Based on SimpleMem's entropy-aware filtering
38
+ */
39
+ export declare function calculateEntropy(text: string): number;
40
+ /**
41
+ * Calculate information density (entropy per token)
42
+ * Helps identify high-value content worth preserving
43
+ */
44
+ export declare function calculateInformationDensity(text: string): number;
45
+ /**
46
+ * Extract atomic facts from raw content
47
+ * Distills verbose content into minimal, self-contained units
48
+ */
49
+ export declare function extractAtomicFacts(content: string, minEntropy?: number): AtomicFact[];
50
+ /**
51
+ * Create a semantic unit from multiple memories
52
+ */
53
+ export declare function createSemanticUnit(memories: Array<{
54
+ content: string;
55
+ importance?: number;
56
+ }>, config?: Partial<SemanticCompressionConfig>): SemanticUnit;
57
+ /**
58
+ * Serialize semantic unit for storage/display
59
+ */
60
+ export declare function serializeSemanticUnit(unit: SemanticUnit): string;
61
+ /**
62
+ * Compress batch of memories into semantic units
63
+ * Main entry point for semantic compression
64
+ */
65
+ export declare function compressToSemanticUnits(memories: Array<{
66
+ content: string;
67
+ type: string;
68
+ importance?: number;
69
+ timestamp?: string;
70
+ }>, config?: Partial<SemanticCompressionConfig>): {
71
+ units: SemanticUnit[];
72
+ totalSourceTokens: number;
73
+ totalCompressedTokens: number;
74
+ overallRatio: number;
75
+ serialized: string;
76
+ };
77
+ //# sourceMappingURL=semantic-compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-compression.d.ts","sourceRoot":"","sources":["../../src/memory/semantic-compression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxD,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC7D;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAUD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBrD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAShE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,MAAY,GAAG,UAAU,EAAE,CAqD1F;AAyHD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACzD,MAAM,GAAE,OAAO,CAAC,yBAAyB,CAAM,GAC9C,YAAY,CAqDd;AAsCD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA+BhE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3F,MAAM,GAAE,OAAO,CAAC,yBAAyB,CAAM,GAC9C;IACD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAkCA"}