adaptive-memory-multi-model-router 1.9.5 → 2.0.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.
- package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
- package/.github/ISSUE_TEMPLATE/config.yml +11 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +37 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +44 -0
- package/.github/workflows/npm-stats-validation.yml +152 -0
- package/.github/workflows/pages.yml +37 -0
- package/CHANGELOG.md +122 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +110 -0
- package/LAUNCH-PAIN-DRIVEN.md +339 -0
- package/LAUNCH.md +575 -0
- package/POPULARITY_BOOSTERS.md +285 -0
- package/README.md +231 -300
- package/SECURITY.md +69 -0
- package/articles/CONTENT_STRUCTURE.md +292 -0
- package/articles/DEVTO_COST_GUIDE.md +473 -0
- package/articles/DEVTO_FINAL.md +416 -0
- package/articles/DEVTO_MULTI_PROVIDER.md +542 -0
- package/articles/HN_10X_BETTER.md +430 -0
- package/articles/HN_CHINESE_STYLE.md +308 -0
- package/articles/HN_FINAL.md +199 -0
- package/articles/HN_POSTED_VERSION.md +56 -0
- package/articles/HN_RESEARCH.md +364 -0
- package/articles/PAIN-DRIVEN-devto-v2.md +308 -0
- package/articles/PAIN-DRIVEN-devto-v3.md +268 -0
- package/articles/PAIN-DRIVEN-devto.md +242 -0
- package/articles/PAIN-DRIVEN-hackernews-v2.md +138 -0
- package/articles/PAIN-DRIVEN-hackernews-v3.md +151 -0
- package/articles/PAIN-DRIVEN-hackernews.md +131 -0
- package/articles/PAIN-DRIVEN-reddit-v2.md +301 -0
- package/articles/PAIN-DRIVEN-reddit-v3.md +236 -0
- package/articles/PAIN-DRIVEN-reddit.md +218 -0
- package/articles/PAIN-DRIVEN-twitter-v2.md +110 -0
- package/articles/PAIN-DRIVEN-twitter-v3.md +121 -0
- package/articles/PAIN-DRIVEN-twitter.md +120 -0
- package/articles/PORTKEY_VS_A3M.md +147 -0
- package/articles/REDDIT_FINAL.md +232 -0
- package/articles/TWITTER_FINAL.md +167 -0
- package/articles/WHY_10X_BETTER.md +261 -0
- package/articles/WHY_CHINESE_STYLE_BETTER.md +323 -0
- package/articles/hashnode-llm-cost-optimization.md +125 -0
- package/articles/medium-building-llm-router.md +205 -0
- package/articles/twitter-thread-cost-savings.md +98 -0
- package/articles/youtube-tutorial-script.md +262 -0
- package/assets/banner.svg +109 -0
- package/assets/logo.svg +68 -0
- package/assets/social-preview.svg +64 -0
- package/demo/demo-script.md +53 -0
- package/dist/analytics/costAnalytics.d.ts +77 -0
- package/dist/analytics/costAnalytics.d.ts.map +1 -0
- package/dist/analytics/costAnalytics.js +219 -0
- package/dist/analytics/costAnalytics.js.map +1 -0
- package/dist/cache/semanticCache.d.ts +62 -0
- package/dist/cache/semanticCache.d.ts.map +1 -0
- package/dist/cache/semanticCache.js +176 -0
- package/dist/cache/semanticCache.js.map +1 -0
- package/dist/cli.js +35 -0
- package/dist/index.d.ts +4 -723
- package/dist/index.js +11 -362
- package/dist/index.js.map +1 -1
- package/dist/integrations/langchainAdapter.d.ts +146 -0
- package/dist/integrations/langchainAdapter.d.ts.map +1 -0
- package/dist/integrations/langchainAdapter.js +731 -0
- package/dist/integrations/langchainAdapter.js.map +1 -0
- package/dist/integrations/oauth.d.ts +69 -0
- package/dist/integrations/oauth.d.ts.map +1 -0
- package/dist/integrations/oauth.js +225 -21
- package/dist/integrations/oauth.js.map +1 -0
- package/dist/memory/autoFetch.d.ts +39 -0
- package/dist/memory/autoFetch.d.ts.map +1 -0
- package/dist/memory/autoFetch.js +80 -88
- package/dist/memory/autoFetch.js.map +1 -0
- package/dist/memory/memoryTree.d.ts +76 -0
- package/dist/memory/memoryTree.d.ts.map +1 -0
- package/dist/memory/memoryTree.js +185 -130
- package/dist/memory/memoryTree.js.map +1 -0
- package/dist/memory/obsidianVault.d.ts +71 -0
- package/dist/memory/obsidianVault.d.ts.map +1 -0
- package/dist/memory/obsidianVault.js +207 -22
- package/dist/memory/obsidianVault.js.map +1 -0
- package/dist/providers/providerConfig.d.ts +49 -0
- package/dist/providers/providerConfig.d.ts.map +1 -0
- package/dist/providers/providerConfig.js +806 -401
- package/dist/providers/providerConfig.js.map +1 -0
- package/dist/security/guardrails.d.ts +76 -0
- package/dist/security/guardrails.d.ts.map +1 -0
- package/dist/security/guardrails.js +479 -0
- package/dist/security/guardrails.js.map +1 -0
- package/dist/server/dashboard.d.ts +58 -0
- package/dist/server/dashboard.d.ts.map +1 -0
- package/dist/server/dashboard.js +553 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/server/modelMapper.d.ts +43 -0
- package/dist/server/modelMapper.d.ts.map +1 -0
- package/dist/server/modelMapper.js +154 -0
- package/dist/server/modelMapper.js.map +1 -0
- package/dist/server/proxyServer.d.ts +41 -0
- package/dist/server/proxyServer.d.ts.map +1 -0
- package/dist/server/proxyServer.js +932 -0
- package/dist/server/proxyServer.js.map +1 -0
- package/dist/skills/__tests__/skill_manager.test.d.ts +2 -0
- package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -0
- package/dist/skills/__tests__/skill_manager.test.js +268 -0
- package/dist/skills/__tests__/skill_manager.test.js.map +1 -0
- package/docs-site/index.html +347 -0
- package/package.json +53 -7
- package/playground/README.md +51 -0
- package/playground/codesandbox.json +12 -0
- package/playground/index.js +39 -0
- package/scripts/update-npm-badges.js +158 -0
- package/src/analytics/costAnalytics.ts +304 -0
- package/src/cache/semanticCache.ts +221 -0
- package/src/index.ts +6 -0
- package/src/integrations/langchainAdapter.ts +955 -0
- package/src/providers/providerConfig.ts +923 -0
- package/src/security/guardrails.ts +585 -0
- package/src/server/dashboard.ts +610 -0
- package/src/server/modelMapper.ts +182 -0
- package/src/server/proxyServer.ts +1105 -0
- package/src/types/langchain.d.ts +83 -0
- package/tsconfig.build.json +20 -0
|
@@ -1,26 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
|
-
* Obsidian Vault Integration
|
|
3
|
+
* Obsidian Vault Integration
|
|
4
|
+
*
|
|
5
|
+
* Stores routing decisions and context as markdown files
|
|
6
|
+
* compatible with Obsidian note-taking app.
|
|
3
7
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.ObsidianVault = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
7
45
|
class ObsidianVault {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
46
|
+
config;
|
|
47
|
+
decisions;
|
|
48
|
+
constructor(config = {}) {
|
|
49
|
+
this.config = {
|
|
50
|
+
path: config.path || './vault',
|
|
51
|
+
autoSave: config.autoSave !== false,
|
|
52
|
+
maxFileAge: config.maxFileAge || 30
|
|
53
|
+
};
|
|
54
|
+
this.decisions = [];
|
|
55
|
+
this.ensureDirectory();
|
|
56
|
+
}
|
|
57
|
+
ensureDirectory() {
|
|
58
|
+
if (!fs.existsSync(this.config.path)) {
|
|
59
|
+
fs.mkdirSync(this.config.path, { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Save a routing decision
|
|
64
|
+
*/
|
|
65
|
+
async saveDecision(decision) {
|
|
66
|
+
this.decisions.push(decision);
|
|
67
|
+
const filename = `routing-decision-${decision.id}.md`;
|
|
68
|
+
const filepath = path.join(this.config.path, filename);
|
|
69
|
+
const content = this.formatDecisionAsMarkdown(decision);
|
|
70
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
71
|
+
// Update index
|
|
72
|
+
await this.updateIndex();
|
|
73
|
+
return filepath;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Format decision as markdown
|
|
77
|
+
*/
|
|
78
|
+
formatDecisionAsMarkdown(decision) {
|
|
79
|
+
const date = new Date(decision.timestamp).toISOString();
|
|
80
|
+
return `# Routing Decision ${decision.id}
|
|
81
|
+
|
|
82
|
+
**Date:** ${date}
|
|
83
|
+
**Prompt:** ${this.escapeMarkdown(decision.prompt.substring(0, 200))}
|
|
84
|
+
|
|
85
|
+
## Decision
|
|
86
|
+
|
|
87
|
+
| Field | Value |
|
|
88
|
+
|-------|-------|
|
|
89
|
+
| Provider | ${decision.selectedProvider} |
|
|
90
|
+
| Model | ${decision.selectedModel} |
|
|
91
|
+
| Reasoning | ${this.escapeMarkdown(decision.reasoning)} |
|
|
92
|
+
| Cost | $${decision.cost.toFixed(4)} |
|
|
93
|
+
| Latency | ${decision.latency}ms |
|
|
25
94
|
|
|
26
|
-
|
|
95
|
+
## Context
|
|
96
|
+
|
|
97
|
+
\`\`\`json
|
|
98
|
+
${JSON.stringify(decision.context, null, 2)}
|
|
99
|
+
\`\`\`
|
|
100
|
+
|
|
101
|
+
## Prompt (Full)
|
|
102
|
+
|
|
103
|
+
${decision.prompt}
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
*Generated by A3M Router*
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Escape markdown special characters
|
|
111
|
+
*/
|
|
112
|
+
escapeMarkdown(text) {
|
|
113
|
+
return text
|
|
114
|
+
.replace(/\*/g, '\\*')
|
|
115
|
+
.replace(/#/g, '\\#')
|
|
116
|
+
.replace(/\|/g, '\\|')
|
|
117
|
+
.replace(/`/g, '\\`');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Update the vault index
|
|
121
|
+
*/
|
|
122
|
+
async updateIndex() {
|
|
123
|
+
const indexPath = path.join(this.config.path, 'routing-index.md');
|
|
124
|
+
const lines = [
|
|
125
|
+
'# Routing Decisions Index',
|
|
126
|
+
'',
|
|
127
|
+
`Last updated: ${new Date().toISOString()}`,
|
|
128
|
+
'',
|
|
129
|
+
`Total decisions: ${this.decisions.length}`,
|
|
130
|
+
'',
|
|
131
|
+
'## Recent Decisions',
|
|
132
|
+
''
|
|
133
|
+
];
|
|
134
|
+
for (const decision of this.decisions.slice(-20).reverse()) {
|
|
135
|
+
const date = new Date(decision.timestamp).toLocaleDateString();
|
|
136
|
+
lines.push(`- [${decision.id}](./routing-decision-${decision.id}.md) - ${date} - ${decision.selectedProvider}/${decision.selectedModel}`);
|
|
137
|
+
}
|
|
138
|
+
fs.writeFileSync(indexPath, lines.join('\n'), 'utf-8');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get recent decisions
|
|
142
|
+
*/
|
|
143
|
+
getRecentDecisions(count = 10) {
|
|
144
|
+
return this.decisions.slice(-count).reverse();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Search decisions
|
|
148
|
+
*/
|
|
149
|
+
searchDecisions(query) {
|
|
150
|
+
const queryLower = query.toLowerCase();
|
|
151
|
+
return this.decisions.filter(d => d.prompt.toLowerCase().includes(queryLower) ||
|
|
152
|
+
d.selectedProvider.toLowerCase().includes(queryLower) ||
|
|
153
|
+
d.selectedModel.toLowerCase().includes(queryLower));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Export all decisions
|
|
157
|
+
*/
|
|
158
|
+
async exportAll(filepath) {
|
|
159
|
+
const content = this.decisions.map(d => this.formatDecisionAsMarkdown(d)).join('\n\n---\n\n');
|
|
160
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get vault statistics
|
|
164
|
+
*/
|
|
165
|
+
getStats() {
|
|
166
|
+
return {
|
|
167
|
+
totalDecisions: this.decisions.length,
|
|
168
|
+
vaultPath: this.config.path,
|
|
169
|
+
fileCount: fs.readdirSync(this.config.path).filter(f => f.endsWith('.md')).length,
|
|
170
|
+
totalSize: this.getDirectorySize(this.config.path)
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
getDirectorySize(dir) {
|
|
174
|
+
let size = 0;
|
|
175
|
+
const files = fs.readdirSync(dir);
|
|
176
|
+
for (const file of files) {
|
|
177
|
+
const filepath = path.join(dir, file);
|
|
178
|
+
const stat = fs.statSync(filepath);
|
|
179
|
+
if (stat.isDirectory()) {
|
|
180
|
+
size += this.getDirectorySize(filepath);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
size += stat.size;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return size;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clean old files
|
|
190
|
+
*/
|
|
191
|
+
async cleanOldFiles() {
|
|
192
|
+
const maxAge = this.config.maxFileAge * 24 * 60 * 60 * 1000;
|
|
193
|
+
const now = Date.now();
|
|
194
|
+
const files = fs.readdirSync(this.config.path);
|
|
195
|
+
let cleaned = 0;
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
if (!file.endsWith('.md') || file === 'routing-index.md')
|
|
198
|
+
continue;
|
|
199
|
+
const filepath = path.join(this.config.path, file);
|
|
200
|
+
const stat = fs.statSync(filepath);
|
|
201
|
+
if (now - stat.mtimeMs > maxAge) {
|
|
202
|
+
fs.unlinkSync(filepath);
|
|
203
|
+
cleaned++;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return cleaned;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.ObsidianVault = ObsidianVault;
|
|
210
|
+
exports.default = ObsidianVault;
|
|
211
|
+
//# sourceMappingURL=obsidianVault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidianVault.js","sourceRoot":"","sources":["../../src/memory/obsidianVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A3M Router - Generic Provider Configuration System
|
|
3
|
+
*
|
|
4
|
+
* Users can configure their available LLM providers via:
|
|
5
|
+
* 1. Environment variables (*_API_KEY patterns)
|
|
6
|
+
* 2. Config file at ~/.config/a3m-router/providers.json
|
|
7
|
+
* 3. Runtime registration via registerProvider()
|
|
8
|
+
*
|
|
9
|
+
* 40+ providers across free, cheap, mid-tier, premium, and enterprise tiers.
|
|
10
|
+
*/
|
|
11
|
+
export type ProviderTier = 'free' | 'cheap' | 'mid' | 'premium' | 'enterprise';
|
|
12
|
+
export type ProviderFormat = 'openai' | 'anthropic' | 'google' | 'cohere' | 'aws-bedrock' | 'google-vertex';
|
|
13
|
+
export type ProviderType = 'api' | 'cli' | 'local';
|
|
14
|
+
export interface ProviderCost {
|
|
15
|
+
input: number;
|
|
16
|
+
output: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ProviderDefinition {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
apiKeyEnv: string;
|
|
23
|
+
models: string[];
|
|
24
|
+
costPerK: ProviderCost;
|
|
25
|
+
tier: ProviderTier;
|
|
26
|
+
format: ProviderFormat;
|
|
27
|
+
type: ProviderType;
|
|
28
|
+
priority: number;
|
|
29
|
+
maxTokens: number;
|
|
30
|
+
cliCommand?: string;
|
|
31
|
+
apiKey?: string | null;
|
|
32
|
+
}
|
|
33
|
+
export declare const DEFAULT_PROVIDERS: Record<string, ProviderDefinition>;
|
|
34
|
+
export declare function loadConfig(configPath?: string): Record<string, ProviderDefinition>;
|
|
35
|
+
export declare function getAvailableProviders(): Record<string, ProviderDefinition>;
|
|
36
|
+
export declare function registerProvider(id: string, config: Partial<ProviderDefinition>): ProviderDefinition;
|
|
37
|
+
export declare function deregisterProvider(id: string): void;
|
|
38
|
+
export declare function updateProvider(id: string, updates: Partial<ProviderDefinition>): ProviderDefinition | null;
|
|
39
|
+
export declare function healthCheck(providerId: string): Promise<{
|
|
40
|
+
healthy: boolean;
|
|
41
|
+
error?: string;
|
|
42
|
+
latency?: number;
|
|
43
|
+
model?: string;
|
|
44
|
+
type?: string;
|
|
45
|
+
}>;
|
|
46
|
+
export declare function checkAllProviders(): Promise<Record<string, any>>;
|
|
47
|
+
export declare function findCheapestAvailableProvider(model?: string): ProviderDefinition | null;
|
|
48
|
+
export declare function findFastestAvailableProvider(): ProviderDefinition | null;
|
|
49
|
+
export declare function saveConfig(configPath?: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerConfig.d.ts","sourceRoot":"","sources":["../../src/providers/providerConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAC;AAC5G,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAMD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAonBhE,CAAC;AAaF,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA8DlF;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAoB1E;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAgBpG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAM1G;AAMD,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAmDD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAStE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CASvF;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,GAAG,IAAI,CAIxE;AAMD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBtD"}
|