@stackmemoryai/stackmemory 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +317 -0
  2. package/dist/attention-scoring/src/attention-tracker.d.ts +79 -0
  3. package/dist/attention-scoring/src/attention-tracker.d.ts.map +1 -0
  4. package/dist/attention-scoring/src/attention-tracker.js +488 -0
  5. package/dist/attention-scoring/src/attention-tracker.js.map +1 -0
  6. package/dist/attention-scoring/src/mcp-integration.d.ts +56 -0
  7. package/dist/attention-scoring/src/mcp-integration.d.ts.map +1 -0
  8. package/dist/attention-scoring/src/mcp-integration.js +369 -0
  9. package/dist/attention-scoring/src/mcp-integration.js.map +1 -0
  10. package/dist/p2p-sync/src/p2p-sync.d.ts +81 -0
  11. package/dist/p2p-sync/src/p2p-sync.d.ts.map +1 -0
  12. package/dist/p2p-sync/src/p2p-sync.js +457 -0
  13. package/dist/p2p-sync/src/p2p-sync.js.map +1 -0
  14. package/dist/p2p-sync/src/team-context-sync.d.ts +99 -0
  15. package/dist/p2p-sync/src/team-context-sync.d.ts.map +1 -0
  16. package/dist/p2p-sync/src/team-context-sync.js +491 -0
  17. package/dist/p2p-sync/src/team-context-sync.js.map +1 -0
  18. package/dist/scripts/initialize.d.ts +6 -0
  19. package/dist/scripts/initialize.d.ts.map +1 -0
  20. package/dist/scripts/initialize.js +93 -0
  21. package/dist/scripts/initialize.js.map +1 -0
  22. package/dist/scripts/status.d.ts +6 -0
  23. package/dist/scripts/status.d.ts.map +1 -0
  24. package/dist/scripts/status.js +87 -0
  25. package/dist/scripts/status.js.map +1 -0
  26. package/dist/src/cli.d.ts +7 -0
  27. package/dist/src/cli.d.ts.map +1 -0
  28. package/dist/src/cli.js +73 -0
  29. package/dist/src/cli.js.map +1 -0
  30. package/dist/src/error-handler.d.ts +42 -0
  31. package/dist/src/error-handler.d.ts.map +1 -0
  32. package/dist/src/error-handler.js +155 -0
  33. package/dist/src/error-handler.js.map +1 -0
  34. package/dist/src/frame-manager.d.ts +106 -0
  35. package/dist/src/frame-manager.d.ts.map +1 -0
  36. package/dist/src/frame-manager.js +361 -0
  37. package/dist/src/frame-manager.js.map +1 -0
  38. package/dist/src/index.d.ts +21 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/index.js +9 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/logger.d.ts +24 -0
  43. package/dist/src/logger.d.ts.map +1 -0
  44. package/dist/src/logger.js +120 -0
  45. package/dist/src/logger.js.map +1 -0
  46. package/dist/src/mcp-server.d.ts +32 -0
  47. package/dist/src/mcp-server.d.ts.map +1 -0
  48. package/dist/src/mcp-server.js +441 -0
  49. package/dist/src/mcp-server.js.map +1 -0
  50. package/package.json +69 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * MCP Integration with Attention-Based Importance Scoring
3
+ *
4
+ * Automatically tracks what context Claude actually uses
5
+ * and learns importance over time
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { z } from 'zod';
10
+ import AttentionTracker from './attention-tracker';
11
+ import { TeamContextManager } from '../../p2p-sync/src/team-context-sync';
12
+ // ============================================
13
+ // Smart MCP Server with Attention Tracking
14
+ // ============================================
15
+ export class SmartStackMemoryMCP {
16
+ server;
17
+ attentionTracker;
18
+ teamContext;
19
+ activeProvisions = new Map();
20
+ constructor(config) {
21
+ // Initialize attention tracking
22
+ this.attentionTracker = new AttentionTracker(`.stackmemory/${config.projectId}/attention.db`);
23
+ // Initialize team context
24
+ this.teamContext = new TeamContextManager({
25
+ projectId: config.projectId,
26
+ teamId: config.teamId,
27
+ userId: config.userId
28
+ });
29
+ // Setup MCP server
30
+ this.server = new Server({
31
+ name: 'stackmemory-smart',
32
+ version: '2.0.0'
33
+ }, {
34
+ capabilities: {
35
+ tools: {},
36
+ resources: {}
37
+ }
38
+ });
39
+ this.setupHandlers();
40
+ this.setupLearningLoop();
41
+ }
42
+ // ============================================
43
+ // MCP Request Handlers
44
+ // ============================================
45
+ setupHandlers() {
46
+ // Main context retrieval with attention tracking
47
+ this.server.setRequestHandler(z.object({
48
+ method: z.literal('tools/call'),
49
+ params: z.object({
50
+ name: z.string(),
51
+ arguments: z.record(z.unknown())
52
+ })
53
+ }), async (request) => {
54
+ if (request.params.name === 'get_context') {
55
+ return this.getSmartContext(request.params.arguments);
56
+ }
57
+ // Other tool handlers...
58
+ return { content: [] };
59
+ });
60
+ // Feedback handler for reinforcement learning
61
+ this.server.setRequestHandler(z.object({
62
+ method: z.literal('feedback'),
63
+ params: z.object({
64
+ responseId: z.string(),
65
+ helpful: z.boolean()
66
+ })
67
+ }), async (request) => {
68
+ const { responseId, helpful } = request.params;
69
+ await this.attentionTracker.reinforcementUpdate({
70
+ responseId,
71
+ helpful
72
+ });
73
+ return { success: true };
74
+ });
75
+ }
76
+ // ============================================
77
+ // Smart Context Assembly
78
+ // ============================================
79
+ async getSmartContext(params) {
80
+ const { query, tokenBudget = 8000 } = params;
81
+ // Start tracking this provision
82
+ const provision = this.attentionTracker.startProvision(query);
83
+ // Get base context from team system
84
+ const baseContext = await this.teamContext.getContextBundle(query, tokenBudget);
85
+ // Enhance with learned importance scores
86
+ const enhancedContext = await this.enhanceWithAttention(baseContext, provision);
87
+ // Track the provision and get response
88
+ const trackedResponse = await provision.execute(async (contexts) => {
89
+ // Format for Claude
90
+ return this.formatForClaude(enhancedContext);
91
+ });
92
+ // Store provision ID for later feedback
93
+ this.activeProvisions.set(query, trackedResponse.responseId);
94
+ return {
95
+ content: [{
96
+ type: 'text',
97
+ text: trackedResponse.response
98
+ }],
99
+ metadata: {
100
+ responseId: trackedResponse.responseId,
101
+ contextsUsed: trackedResponse.contextsUsed,
102
+ latency: trackedResponse.latency
103
+ }
104
+ };
105
+ }
106
+ // ============================================
107
+ // Attention-Based Enhancement
108
+ // ============================================
109
+ async enhanceWithAttention(baseContext, provision) {
110
+ const enhanced = {
111
+ items: [],
112
+ totalTokens: 0,
113
+ metadata: {
114
+ enhanced: true,
115
+ timestamp: Date.now()
116
+ }
117
+ };
118
+ // Process shared context with importance scores
119
+ for (const ctx of baseContext.shared) {
120
+ const importance = this.attentionTracker.getImportanceScore(ctx.id || this.hashContext(ctx));
121
+ const item = {
122
+ id: ctx.id || this.hashContext(ctx),
123
+ type: 'shared',
124
+ content: ctx.content,
125
+ tokenCount: this.estimateTokens(ctx.content),
126
+ importance: importance
127
+ };
128
+ // Add to provision tracking
129
+ provision.add(item);
130
+ // Only include if importance above threshold
131
+ if (importance > 0.3) {
132
+ enhanced.items.push({
133
+ ...ctx,
134
+ importance,
135
+ influenceHistory: await this.getInfluenceHistory(item.id)
136
+ });
137
+ enhanced.totalTokens += item.tokenCount;
138
+ }
139
+ }
140
+ // Get recommended additional context based on patterns
141
+ const recommendations = this.attentionTracker.getRecommendedContext(provision.query, enhanced.items.map(i => i.id));
142
+ // Add recommended contexts if budget allows
143
+ for (const recId of recommendations) {
144
+ const recContext = await this.loadContext(recId);
145
+ if (recContext && enhanced.totalTokens + recContext.tokenCount < 6000) {
146
+ provision.add(recContext);
147
+ enhanced.items.push({
148
+ ...recContext,
149
+ recommended: true,
150
+ importance: this.attentionTracker.getImportanceScore(recId)
151
+ });
152
+ enhanced.totalTokens += recContext.tokenCount;
153
+ }
154
+ }
155
+ // Sort by importance (most important first)
156
+ enhanced.items.sort((a, b) => (b.importance || 0) - (a.importance || 0));
157
+ return enhanced;
158
+ }
159
+ // ============================================
160
+ // Learning Loop
161
+ // ============================================
162
+ setupLearningLoop() {
163
+ // Periodic analysis of patterns
164
+ setInterval(() => {
165
+ this.analyzePatterns();
166
+ }, 3600000); // Every hour
167
+ // Real-time importance updates
168
+ this.attentionTracker.on('importance-updated', (event) => {
169
+ console.log(`Context ${event.contextId} importance: ${event.importance.toFixed(3)}`);
170
+ // Could trigger re-ranking of active context
171
+ this.updateActiveContext(event.contextId, event.importance);
172
+ });
173
+ }
174
+ async analyzePatterns() {
175
+ // Get top performing context combinations
176
+ const rankings = this.attentionTracker.getContextRanking();
177
+ console.log('=== Attention Analysis ===');
178
+ console.log('Top influential contexts:');
179
+ rankings.slice(0, 10).forEach((r, i) => {
180
+ console.log(`${i + 1}. ${r.contextId}: ${(r.importance * 100).toFixed(1)}% (used ${r.influenceRate.toFixed(2)} influence rate)`);
181
+ });
182
+ // Identify underutilized important contexts
183
+ const underutilized = rankings.filter(r => r.importance > 0.7 && r.influenceRate < 0.3);
184
+ if (underutilized.length > 0) {
185
+ console.log('\nUnderutilized important contexts:');
186
+ underutilized.forEach(u => {
187
+ console.log(`- ${u.contextId}: High importance but low usage`);
188
+ });
189
+ }
190
+ // Generate attention heatmap
191
+ const heatmap = this.attentionTracker.getAttentionHeatmap();
192
+ this.visualizeHeatmap(heatmap);
193
+ }
194
+ // ============================================
195
+ // Visualization
196
+ // ============================================
197
+ visualizeHeatmap(heatmap) {
198
+ // Create ASCII visualization of attention patterns
199
+ console.log('\n=== Attention Heatmap ===');
200
+ console.log('Position in context vs Influence:');
201
+ const maxInfluence = Math.max(...heatmap.influences);
202
+ const scale = 10;
203
+ heatmap.positions.forEach((pos, i) => {
204
+ const influence = heatmap.influences[i];
205
+ const bars = Math.round((influence / maxInfluence) * scale);
206
+ const bar = '█'.repeat(bars) + '░'.repeat(scale - bars);
207
+ console.log(`Pos ${String(pos).padStart(2)}: ${bar} ${(influence * 100).toFixed(1)}%`);
208
+ });
209
+ }
210
+ // ============================================
211
+ // Real-time Context Updates
212
+ // ============================================
213
+ updateActiveContext(contextId, newImportance) {
214
+ // If context importance drops below threshold, remove from active
215
+ if (newImportance < 0.2) {
216
+ console.log(`Removing low-importance context: ${contextId}`);
217
+ // Would trigger context refresh in active sessions
218
+ }
219
+ // If context importance rises above threshold, promote
220
+ if (newImportance > 0.8) {
221
+ console.log(`Promoting high-importance context: ${contextId}`);
222
+ // Would add to priority context
223
+ }
224
+ }
225
+ // ============================================
226
+ // Formatting & Utilities
227
+ // ============================================
228
+ formatForClaude(context) {
229
+ let output = '# Team Context (Attention-Weighted)\n\n';
230
+ // Group by type and importance
231
+ const grouped = this.groupByType(context.items);
232
+ for (const [type, items] of Object.entries(grouped)) {
233
+ output += `## ${this.formatType(type)}\n\n`;
234
+ items.forEach(item => {
235
+ const importanceBar = this.getImportanceBar(item.importance || 0.5);
236
+ const flag = item.recommended ? ' [AI-RECOMMENDED]' : '';
237
+ output += `${importanceBar} ${item.content}${flag}\n`;
238
+ if (item.influenceHistory && item.influenceHistory.length > 0) {
239
+ output += ` ↳ Previously influenced: ${item.influenceHistory.join(', ')}\n`;
240
+ }
241
+ });
242
+ output += '\n';
243
+ }
244
+ // Add metadata
245
+ output += `\n---\n`;
246
+ output += `Contexts: ${context.items.length} | Tokens: ~${context.totalTokens}\n`;
247
+ output += `Enhanced with attention-based importance scoring\n`;
248
+ return output;
249
+ }
250
+ getImportanceBar(importance) {
251
+ if (importance >= 0.8)
252
+ return '🔴'; // Critical
253
+ if (importance >= 0.6)
254
+ return '🟠'; // Important
255
+ if (importance >= 0.4)
256
+ return '🟡'; // Normal
257
+ return '⚪'; // Low
258
+ }
259
+ groupByType(items) {
260
+ const grouped = {};
261
+ items.forEach(item => {
262
+ const type = item.type || 'other';
263
+ if (!grouped[type])
264
+ grouped[type] = [];
265
+ grouped[type].push(item);
266
+ });
267
+ return grouped;
268
+ }
269
+ formatType(type) {
270
+ const typeMap = {
271
+ 'decision': '🎯 Decisions',
272
+ 'constraint': '⚠️ Constraints',
273
+ 'shared': '👥 Team Context',
274
+ 'personal': '📝 Personal Notes',
275
+ 'knowledge': '📚 Project Knowledge'
276
+ };
277
+ return typeMap[type] || type;
278
+ }
279
+ hashContext(ctx) {
280
+ const crypto = require('crypto');
281
+ return crypto.createHash('sha256')
282
+ .update(JSON.stringify(ctx))
283
+ .digest('hex')
284
+ .substring(0, 16);
285
+ }
286
+ estimateTokens(text) {
287
+ return Math.ceil(text.length / 4);
288
+ }
289
+ async getInfluenceHistory(contextId) {
290
+ // Get last 3 significant influences
291
+ // In production, query from attention_signals table
292
+ return [];
293
+ }
294
+ async loadContext(contextId) {
295
+ // Load context from main storage
296
+ // This would connect to your team context or local storage
297
+ return null;
298
+ }
299
+ // ============================================
300
+ // Startup
301
+ // ============================================
302
+ async start() {
303
+ const transport = new StdioServerTransport();
304
+ await this.server.connect(transport);
305
+ console.log('Smart StackMemory MCP Server started');
306
+ console.log('Attention tracking enabled');
307
+ console.log('Learning from usage patterns...');
308
+ }
309
+ }
310
+ // ============================================
311
+ // Dashboard for Attention Analytics
312
+ // ============================================
313
+ export class AttentionDashboard {
314
+ tracker;
315
+ constructor(tracker) {
316
+ this.tracker = tracker;
317
+ }
318
+ async generateReport() {
319
+ const rankings = this.tracker.getContextRanking();
320
+ const heatmap = this.tracker.getAttentionHeatmap();
321
+ // Calculate statistics
322
+ const totalContexts = rankings.length;
323
+ const avgImportance = rankings.reduce((sum, r) => sum + r.importance, 0) / totalContexts;
324
+ const highInfluence = rankings.filter(r => r.avgInfluence > 0.7).length;
325
+ // Identify patterns
326
+ const alwaysUseful = rankings.filter(r => r.influenceRate > 0.8);
327
+ const neverUseful = rankings.filter(r => r.influenceRate < 0.1 && r.importance < 0.3);
328
+ return {
329
+ summary: {
330
+ totalContexts,
331
+ avgImportance,
332
+ highInfluenceCount: highInfluence,
333
+ lastUpdated: Date.now()
334
+ },
335
+ topContexts: rankings.slice(0, 20),
336
+ alwaysUseful,
337
+ neverUseful,
338
+ heatmap,
339
+ recommendations: this.generateRecommendations(rankings)
340
+ };
341
+ }
342
+ generateRecommendations(rankings) {
343
+ const recs = [];
344
+ // Find contexts that should be promoted
345
+ const undervalued = rankings.filter(r => r.avgInfluence > 0.7 && r.importance < 0.5);
346
+ if (undervalued.length > 0) {
347
+ recs.push(`Promote ${undervalued.length} undervalued contexts with high influence`);
348
+ }
349
+ // Find contexts that should be demoted
350
+ const overvalued = rankings.filter(r => r.avgInfluence < 0.2 && r.importance > 0.7);
351
+ if (overvalued.length > 0) {
352
+ recs.push(`Consider demoting ${overvalued.length} contexts with low actual influence`);
353
+ }
354
+ return recs;
355
+ }
356
+ }
357
+ // ============================================
358
+ // CLI Usage
359
+ // ============================================
360
+ if (require.main === module) {
361
+ const config = {
362
+ projectId: process.env.PROJECT_ID || 'default',
363
+ teamId: process.env.TEAM_ID || 'default',
364
+ userId: process.env.USER_ID || 'default'
365
+ };
366
+ const server = new SmartStackMemoryMCP(config);
367
+ server.start().catch(console.error);
368
+ }
369
+ //# sourceMappingURL=mcp-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-integration.js","sourceRoot":"","sources":["../../../attention-scoring/src/mcp-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * WebRTC P2P Sync Implementation for Beads/StackMemory
3
+ *
4
+ * Features:
5
+ * - Direct peer-to-peer sync (zero server bandwidth)
6
+ * - CRDT-based conflict resolution
7
+ * - End-to-end encryption
8
+ * - Automatic reconnection
9
+ * - Offline queue
10
+ */
11
+ import nacl from 'tweetnacl';
12
+ export declare class P2PSync {
13
+ private peers;
14
+ private db;
15
+ private socket;
16
+ private userId;
17
+ private teamId;
18
+ private syncQueue;
19
+ private keypair;
20
+ constructor(config: P2PConfig);
21
+ private initDB;
22
+ private connectSignaling;
23
+ private connectToPeer;
24
+ private handleSignal;
25
+ private onPeerConnected;
26
+ private handlePeerData;
27
+ private getVectorClock;
28
+ incrementClock(): VectorClock;
29
+ private getOwnClock;
30
+ private mergeVectorClock;
31
+ createFrame(frame: Frame): void;
32
+ updateFrame(frameId: string, updates: Partial<Frame>): void;
33
+ deleteFrame(frameId: string): void;
34
+ getFrame(frameId: string): Frame | null;
35
+ private handleFrameUpdate;
36
+ private isNewer;
37
+ private logOperation;
38
+ private getUnsyncedChanges;
39
+ private batchChanges;
40
+ private applyChanges;
41
+ private sendRequestedFrames;
42
+ private sendToPeer;
43
+ private broadcast;
44
+ private reconnectToPeer;
45
+ private removePeer;
46
+ private encrypt;
47
+ private decrypt;
48
+ discoverPeers(): Promise<PeerInfo[]>;
49
+ private setupPeerHandlers;
50
+ sync(): Promise<SyncStats>;
51
+ disconnect(): void;
52
+ }
53
+ interface P2PConfig {
54
+ userId: string;
55
+ teamId: string;
56
+ signalingServer: string;
57
+ dbPath?: string;
58
+ keypair?: nacl.BoxKeyPair;
59
+ }
60
+ interface PeerInfo {
61
+ userId: string;
62
+ publicKey: string;
63
+ lastSeen: number;
64
+ }
65
+ interface Frame {
66
+ id?: string;
67
+ type: string;
68
+ content: any;
69
+ metadata?: any;
70
+ }
71
+ interface VectorClock {
72
+ [peerId: string]: number;
73
+ }
74
+ interface SyncStats {
75
+ connectedPeers: number;
76
+ totalPeers: number;
77
+ unsyncedChanges: number;
78
+ lastSync: number;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=p2p-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2p-sync.d.ts","sourceRoot":"","sources":["../../../p2p-sync/src/p2p-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,OAAO,CAAkB;gBAErB,MAAM,EAAE,SAAS;IAc7B,OAAO,CAAC,MAAM;IAmCd,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IA0CrB,OAAO,CAAC,YAAY;YAoBN,eAAe;IAkB7B,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,cAAc;IASf,cAAc,IAAI,WAAW;IAQpC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;IAkBjB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAwB/B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAyB3D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBlC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAY9C,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,OAAO;IAuBf,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAE,YAAY;IAMrB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IASF,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IASjD,OAAO,CAAC,iBAAiB;IAcZ,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IAiBhC,UAAU;CAMlB;AAMD,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;CAC3B;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,UAAU,KAAK;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AASD,UAAU,WAAW;IACnB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAmBD,UAAU,SAAS;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB"}