@claude-flow/cli 3.5.25 → 3.5.26
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/src/mcp-tools/index.d.ts +2 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/ruvllm-tools.js +283 -0
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +230 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +65 -6
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.d.ts +182 -0
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/agent-wasm.js +316 -0
- package/dist/src/ruvector/agent-wasm.js.map +1 -0
- package/dist/src/ruvector/index.d.ts +2 -0
- package/dist/src/ruvector/index.d.ts.map +1 -1
- package/dist/src/ruvector/index.js +4 -0
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/ruvllm-wasm.js +363 -0
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuVector LLM WASM Integration
|
|
3
|
+
*
|
|
4
|
+
* Wraps @ruvector/ruvllm-wasm for browser-native LLM inference utilities.
|
|
5
|
+
* Provides HNSW routing, SONA instant adaptation, MicroLoRA fine-tuning,
|
|
6
|
+
* chat template formatting, KV cache management, and inference arena.
|
|
7
|
+
*
|
|
8
|
+
* Published API (v2.0.2): RuvLLMWasm, ChatTemplateWasm, ChatMessageWasm,
|
|
9
|
+
* GenerateConfig, HnswRouterWasm, SonaInstantWasm, MicroLoraWasm,
|
|
10
|
+
* KvCacheWasm, BufferPoolWasm, InferenceArenaWasm.
|
|
11
|
+
*
|
|
12
|
+
* v2.0.2 fixes:
|
|
13
|
+
* - HNSW supports 1000+ patterns (fixed connect_node ordering)
|
|
14
|
+
* - MicroLoRA adapt() now takes (input: Float32Array, feedback: AdaptFeedbackWasm)
|
|
15
|
+
*
|
|
16
|
+
* Remaining quirks:
|
|
17
|
+
* - Stats objects return WASM pointers — use .toJson() or named accessors
|
|
18
|
+
* - GenerateConfig float precision loss (f32 roundtrip)
|
|
19
|
+
* - MicroLoRA apply() hardcoded to 768 dims regardless of config
|
|
20
|
+
*
|
|
21
|
+
* @module @claude-flow/cli/ruvector/ruvllm-wasm
|
|
22
|
+
*/
|
|
23
|
+
import { readFileSync } from 'node:fs';
|
|
24
|
+
import { createRequire } from 'node:module';
|
|
25
|
+
// ── WASM Module Detection & Init ─────────────────────────────
|
|
26
|
+
let _wasmReady = false;
|
|
27
|
+
/**
|
|
28
|
+
* Check if @ruvector/ruvllm-wasm is installed and loadable.
|
|
29
|
+
*/
|
|
30
|
+
export async function isRuvllmWasmAvailable() {
|
|
31
|
+
try {
|
|
32
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
33
|
+
return typeof mod.RuvLLMWasm === 'function';
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the WASM module for Node.js. Safe to call multiple times.
|
|
41
|
+
* Uses initSync with object form: { module: bytes } (raw bytes deprecated).
|
|
42
|
+
*/
|
|
43
|
+
export async function initRuvllmWasm() {
|
|
44
|
+
if (_wasmReady)
|
|
45
|
+
return;
|
|
46
|
+
try {
|
|
47
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
48
|
+
const require_ = createRequire(import.meta.url);
|
|
49
|
+
const wasmPath = require_.resolve('@ruvector/ruvllm-wasm/ruvllm_wasm_bg.wasm');
|
|
50
|
+
const wasmBytes = readFileSync(wasmPath);
|
|
51
|
+
// MUST use object form — initSync(bytes) is deprecated
|
|
52
|
+
mod.initSync({ module: wasmBytes });
|
|
53
|
+
_wasmReady = true;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw new Error(`Failed to initialize @ruvector/ruvllm-wasm: ${err}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get ruvllm-wasm status.
|
|
61
|
+
*/
|
|
62
|
+
export async function getRuvllmStatus() {
|
|
63
|
+
const available = await isRuvllmWasmAvailable();
|
|
64
|
+
if (!available) {
|
|
65
|
+
return { available: false, initialized: false, version: null };
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
69
|
+
// version is a standalone function, not on RuvLLMWasm class
|
|
70
|
+
const version = typeof mod.getVersion === 'function' ? mod.getVersion() : null;
|
|
71
|
+
return { available: true, initialized: _wasmReady, version };
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return { available: true, initialized: _wasmReady, version: null };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ── HNSW Router ──────────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Maximum safe pattern count for HNSW router.
|
|
80
|
+
* v2.0.2 supports 1000+ patterns (fixed connect_node ordering).
|
|
81
|
+
*/
|
|
82
|
+
export const HNSW_MAX_SAFE_PATTERNS = 1024;
|
|
83
|
+
/**
|
|
84
|
+
* Create a WASM HNSW router for semantic routing.
|
|
85
|
+
* Returns an object with add/route/clear methods.
|
|
86
|
+
*
|
|
87
|
+
* Enforces HNSW_MAX_SAFE_PATTERNS limit (1024 in v2.0.2).
|
|
88
|
+
*/
|
|
89
|
+
export async function createHnswRouter(config) {
|
|
90
|
+
await initRuvllmWasm();
|
|
91
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
92
|
+
const router = new mod.HnswRouterWasm(config.dimensions, config.maxPatterns);
|
|
93
|
+
if (config.efSearch) {
|
|
94
|
+
router.setEfSearch(config.efSearch);
|
|
95
|
+
}
|
|
96
|
+
let count = 0;
|
|
97
|
+
return {
|
|
98
|
+
addPattern(pattern) {
|
|
99
|
+
if (count >= HNSW_MAX_SAFE_PATTERNS) {
|
|
100
|
+
throw new Error(`HNSW pattern limit reached (${HNSW_MAX_SAFE_PATTERNS}).`);
|
|
101
|
+
}
|
|
102
|
+
const metadataJson = JSON.stringify(pattern.metadata ?? {});
|
|
103
|
+
// addPattern requires 3 args: (embedding, name, metadata_json)
|
|
104
|
+
const ok = router.addPattern(pattern.embedding, pattern.name, metadataJson);
|
|
105
|
+
if (ok)
|
|
106
|
+
count++;
|
|
107
|
+
return ok;
|
|
108
|
+
},
|
|
109
|
+
route(query, k = 3) {
|
|
110
|
+
return router.route(query, k);
|
|
111
|
+
},
|
|
112
|
+
clear() {
|
|
113
|
+
router.clear();
|
|
114
|
+
count = 0;
|
|
115
|
+
},
|
|
116
|
+
patternCount() {
|
|
117
|
+
return count;
|
|
118
|
+
},
|
|
119
|
+
toJson() {
|
|
120
|
+
return router.toJson();
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// ── SONA Instant Adaptation ──────────────────────────────────
|
|
125
|
+
/**
|
|
126
|
+
* Create a SONA instant adaptation loop (<1ms adaptation).
|
|
127
|
+
* v2.0.1: requires SonaConfigWasm object, not raw number.
|
|
128
|
+
*/
|
|
129
|
+
export async function createSonaInstant(config = {}) {
|
|
130
|
+
await initRuvllmWasm();
|
|
131
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
132
|
+
const sonaConfig = new mod.SonaConfigWasm();
|
|
133
|
+
if (config.hiddenDim !== undefined)
|
|
134
|
+
sonaConfig.hiddenDim = config.hiddenDim;
|
|
135
|
+
if (config.learningRate !== undefined)
|
|
136
|
+
sonaConfig.learningRate = config.learningRate;
|
|
137
|
+
if (config.emaDecay !== undefined)
|
|
138
|
+
sonaConfig.emaDecay = config.emaDecay;
|
|
139
|
+
if (config.ewcLambda !== undefined)
|
|
140
|
+
sonaConfig.ewcLambda = config.ewcLambda;
|
|
141
|
+
if (config.microLoraRank !== undefined)
|
|
142
|
+
sonaConfig.microLoraRank = config.microLoraRank;
|
|
143
|
+
if (config.patternCapacity !== undefined)
|
|
144
|
+
sonaConfig.patternCapacity = config.patternCapacity;
|
|
145
|
+
const sona = new mod.SonaInstantWasm(sonaConfig);
|
|
146
|
+
return {
|
|
147
|
+
adapt(quality) {
|
|
148
|
+
sona.instantAdapt(quality);
|
|
149
|
+
},
|
|
150
|
+
recordPattern(embedding, success) {
|
|
151
|
+
sona.recordPattern(embedding, success);
|
|
152
|
+
},
|
|
153
|
+
suggestAction(context) {
|
|
154
|
+
return sona.suggestAction(context);
|
|
155
|
+
},
|
|
156
|
+
stats() {
|
|
157
|
+
return sona.toJson();
|
|
158
|
+
},
|
|
159
|
+
reset() {
|
|
160
|
+
sona.reset();
|
|
161
|
+
},
|
|
162
|
+
toJson() {
|
|
163
|
+
return sona.toJson();
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── MicroLoRA ────────────────────────────────────────────────
|
|
168
|
+
/**
|
|
169
|
+
* Create a MicroLoRA adapter (ultra-lightweight LoRA, ranks 1-4).
|
|
170
|
+
* v2.0.2: .adapt(input, feedback) takes Float32Array + AdaptFeedbackWasm.
|
|
171
|
+
*/
|
|
172
|
+
export async function createMicroLora(config) {
|
|
173
|
+
await initRuvllmWasm();
|
|
174
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
175
|
+
const loraConfig = new mod.MicroLoraConfigWasm();
|
|
176
|
+
loraConfig.inputDim = config.inputDim;
|
|
177
|
+
loraConfig.outputDim = config.outputDim;
|
|
178
|
+
loraConfig.rank = config.rank ?? 2;
|
|
179
|
+
loraConfig.alpha = config.alpha ?? 1.0;
|
|
180
|
+
const lora = new mod.MicroLoraWasm(loraConfig);
|
|
181
|
+
return {
|
|
182
|
+
apply(input) {
|
|
183
|
+
return lora.apply(input);
|
|
184
|
+
},
|
|
185
|
+
adapt(quality, learningRate = 0.01, success = true) {
|
|
186
|
+
// v2.0.2: adapt(input, feedback) — two args
|
|
187
|
+
const feedback = new mod.AdaptFeedbackWasm();
|
|
188
|
+
feedback.quality = quality;
|
|
189
|
+
feedback.learningRate = learningRate;
|
|
190
|
+
// Note: feedback.success not on prototype in v2.0.2, set via property
|
|
191
|
+
try {
|
|
192
|
+
feedback.success = success;
|
|
193
|
+
}
|
|
194
|
+
catch { /* v2.0.2 quirk */ }
|
|
195
|
+
// Create a dummy input vector matching the configured inputDim
|
|
196
|
+
const input = new Float32Array(config.inputDim);
|
|
197
|
+
lora.adapt(input, feedback);
|
|
198
|
+
},
|
|
199
|
+
applyUpdates(gradients) {
|
|
200
|
+
lora.applyUpdates(gradients);
|
|
201
|
+
},
|
|
202
|
+
stats() {
|
|
203
|
+
return lora.toJson();
|
|
204
|
+
},
|
|
205
|
+
reset() {
|
|
206
|
+
lora.reset();
|
|
207
|
+
},
|
|
208
|
+
toJson() {
|
|
209
|
+
return lora.toJson();
|
|
210
|
+
},
|
|
211
|
+
pendingUpdates() {
|
|
212
|
+
return lora.pendingUpdates();
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Format chat messages using a chat template.
|
|
218
|
+
* Supports presets (llama3, mistral, chatml, phi, gemma) and auto-detection.
|
|
219
|
+
*/
|
|
220
|
+
export async function formatChat(messages, template) {
|
|
221
|
+
await initRuvllmWasm();
|
|
222
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
223
|
+
// Build template
|
|
224
|
+
let tmpl;
|
|
225
|
+
if (typeof template === 'string') {
|
|
226
|
+
const presets = {
|
|
227
|
+
llama3: () => mod.ChatTemplateWasm.llama3(),
|
|
228
|
+
mistral: () => mod.ChatTemplateWasm.mistral(),
|
|
229
|
+
chatml: () => mod.ChatTemplateWasm.chatml(),
|
|
230
|
+
phi: () => mod.ChatTemplateWasm.phi(),
|
|
231
|
+
gemma: () => mod.ChatTemplateWasm.gemma(),
|
|
232
|
+
};
|
|
233
|
+
const factory = presets[template];
|
|
234
|
+
if (!factory)
|
|
235
|
+
throw new Error(`Unknown template preset: ${template}. Use: ${Object.keys(presets).join(', ')}`);
|
|
236
|
+
tmpl = factory();
|
|
237
|
+
}
|
|
238
|
+
else if ('custom' in template) {
|
|
239
|
+
tmpl = mod.ChatTemplateWasm.custom(template.custom);
|
|
240
|
+
}
|
|
241
|
+
else if ('modelId' in template) {
|
|
242
|
+
tmpl = mod.ChatTemplateWasm.detectFromModelId(template.modelId);
|
|
243
|
+
}
|
|
244
|
+
// Build messages
|
|
245
|
+
const wasmMessages = messages.map(m => {
|
|
246
|
+
switch (m.role) {
|
|
247
|
+
case 'system': return mod.ChatMessageWasm.system(m.content);
|
|
248
|
+
case 'user': return mod.ChatMessageWasm.user(m.content);
|
|
249
|
+
case 'assistant': return mod.ChatMessageWasm.assistant(m.content);
|
|
250
|
+
default: throw new Error(`Unknown role: ${m.role}`);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
return tmpl.format(wasmMessages);
|
|
254
|
+
}
|
|
255
|
+
// ── KV Cache ─────────────────────────────────────────────────
|
|
256
|
+
/**
|
|
257
|
+
* Create a KV cache for token management.
|
|
258
|
+
*/
|
|
259
|
+
export async function createKvCache(opts) {
|
|
260
|
+
await initRuvllmWasm();
|
|
261
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
262
|
+
let cache;
|
|
263
|
+
if (opts) {
|
|
264
|
+
const config = new mod.KvCacheConfigWasm();
|
|
265
|
+
if (opts.tailLength !== undefined)
|
|
266
|
+
config.tailLength = opts.tailLength;
|
|
267
|
+
if (opts.maxTokens !== undefined)
|
|
268
|
+
config.maxTokens = opts.maxTokens;
|
|
269
|
+
if (opts.numKvHeads !== undefined)
|
|
270
|
+
config.numKvHeads = opts.numKvHeads;
|
|
271
|
+
if (opts.headDim !== undefined)
|
|
272
|
+
config.headDim = opts.headDim;
|
|
273
|
+
cache = new mod.KvCacheWasm(config);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
cache = mod.KvCacheWasm.withDefaults();
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
append(keys, values) {
|
|
280
|
+
cache.append(keys, values);
|
|
281
|
+
},
|
|
282
|
+
stats() {
|
|
283
|
+
// Use toJson if available, otherwise stringify
|
|
284
|
+
try {
|
|
285
|
+
return JSON.stringify(cache.stats());
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
return '{}';
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
clear() {
|
|
292
|
+
cache.clear();
|
|
293
|
+
},
|
|
294
|
+
tokenCount() {
|
|
295
|
+
return cache.tokenCount;
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// ── Generate Config ──────────────────────────────────────────
|
|
300
|
+
/**
|
|
301
|
+
* Create a generation config object.
|
|
302
|
+
* Note: f32 precision loss is expected (0.7 → 0.699999...).
|
|
303
|
+
*/
|
|
304
|
+
export async function createGenerateConfig(opts = {}) {
|
|
305
|
+
await initRuvllmWasm();
|
|
306
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
307
|
+
const config = new mod.GenerateConfig();
|
|
308
|
+
if (opts.maxTokens !== undefined)
|
|
309
|
+
config.maxTokens = opts.maxTokens;
|
|
310
|
+
if (opts.temperature !== undefined)
|
|
311
|
+
config.temperature = opts.temperature;
|
|
312
|
+
if (opts.topP !== undefined)
|
|
313
|
+
config.topP = opts.topP;
|
|
314
|
+
if (opts.topK !== undefined)
|
|
315
|
+
config.topK = opts.topK;
|
|
316
|
+
if (opts.repetitionPenalty !== undefined)
|
|
317
|
+
config.repetitionPenalty = opts.repetitionPenalty;
|
|
318
|
+
for (const seq of opts.stopSequences ?? []) {
|
|
319
|
+
config.addStopSequence(seq);
|
|
320
|
+
}
|
|
321
|
+
return config.toJson();
|
|
322
|
+
}
|
|
323
|
+
// ── Buffer Pool ──────────────────────────────────────────────
|
|
324
|
+
/**
|
|
325
|
+
* Create a buffer pool for inference memory management.
|
|
326
|
+
*/
|
|
327
|
+
export async function createBufferPool(capacity) {
|
|
328
|
+
await initRuvllmWasm();
|
|
329
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
330
|
+
const pool = mod.BufferPoolWasm.withCapacity(capacity);
|
|
331
|
+
return {
|
|
332
|
+
prewarm(count) {
|
|
333
|
+
pool.prewarmAll(count);
|
|
334
|
+
},
|
|
335
|
+
stats() {
|
|
336
|
+
return pool.statsJson();
|
|
337
|
+
},
|
|
338
|
+
hitRate() {
|
|
339
|
+
return pool.hitRate;
|
|
340
|
+
},
|
|
341
|
+
clear() {
|
|
342
|
+
pool.clear();
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
// ── Inference Arena ──────────────────────────────────────────
|
|
347
|
+
/**
|
|
348
|
+
* Create an inference arena for model memory allocation.
|
|
349
|
+
*/
|
|
350
|
+
export async function createInferenceArena(opts) {
|
|
351
|
+
await initRuvllmWasm();
|
|
352
|
+
const mod = await import('@ruvector/ruvllm-wasm');
|
|
353
|
+
const arena = 'capacity' in opts
|
|
354
|
+
? new mod.InferenceArenaWasm(opts.capacity)
|
|
355
|
+
: mod.InferenceArenaWasm.forModel(opts.hiddenDim, opts.vocabSize, opts.batchSize);
|
|
356
|
+
return {
|
|
357
|
+
reset() { arena.reset(); },
|
|
358
|
+
used() { return arena.used; },
|
|
359
|
+
capacity() { return arena.capacity; },
|
|
360
|
+
remaining() { return arena.remaining; },
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=ruvllm-wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruvllm-wasm.js","sourceRoot":"","sources":["../../../src/ruvector/ruvllm-wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA0D5C,gEAAgE;AAEhE,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClD,OAAO,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,UAAU;QAAE,OAAO;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,uDAAuD;QACvD,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClD,4DAA4D;QAC5D,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;AACH,CAAC;AAED,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAwB;IAO7D,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO;QACL,UAAU,CAAC,OAAoB;YAC7B,IAAI,KAAK,IAAI,sBAAsB,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,+BAA+B,sBAAsB,IAAI,CAC1D,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC5D,+DAA+D;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5E,IAAI,EAAE;gBAAE,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,KAAK,CAAC,KAAmB,EAAE,CAAC,GAAG,CAAC;YAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,KAAK;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;QACD,YAAY;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM;YACJ,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAqB,EAAE;IAQ7D,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;IAC5C,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5E,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,UAAU,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACrF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACzE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5E,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACxF,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;QAAE,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAE9F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAEjD,OAAO;QACL,KAAK,CAAC,OAAe;YACnB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,aAAa,CAAC,SAAmB,EAAE,OAAgB;YACjD,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,aAAa,CAAC,OAAe;YAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,KAAK;YACH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,MAAM;YACJ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAuB;IAS3D,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC;IACjD,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACxC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IACnC,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO;QACL,KAAK,CAAC,KAAmB;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,OAAe,EAAE,YAAY,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI;YACxD,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAC7C,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;YAC3B,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAC;YACrC,sEAAsE;YACtE,IAAI,CAAC;gBAAE,QAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACzE,+DAA+D;YAC/D,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,YAAY,CAAC,SAAuB;YAClC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK;YACH,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,MAAM;YACJ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,cAAc;YACZ,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC;AAMD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAuB,EACvB,QAAmE;IAEnE,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,iBAAiB;IACjB,IAAI,IAAS,CAAC;IACd,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,OAAO,GAA8B;YACzC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC3C,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACrC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE;SAC1C,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,IAAI,GAAG,OAAO,EAAE,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,iBAAiB;IACjB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACpC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5D,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACxD,KAAK,WAAW,CAAC,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED,gEAAgE;AAEhE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAKnC;IAMC,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,IAAI,KAAU,CAAC;IACf,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACvE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpE,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACvE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9D,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;IAED,OAAO;QACL,MAAM,CAAC,IAAkB,EAAE,MAAoB;YAC7C,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,KAAK;YACH,+CAA+C;YAC/C,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACtE,CAAC;QACD,KAAK;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,UAAU;YACR,OAAO,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAwB,EAAE;IACnE,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACpE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC1E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;QAAE,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IAC5F,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,gEAAgE;AAEhE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAMrD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvD,OAAO;QACL,OAAO,CAAC,KAAa;YACnB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK;YACH,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO;YACL,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAwF;IAOxF,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI;QAC9B,CAAC,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3C,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpF,OAAO;QACL,KAAK,KAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,KAAa,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,QAAQ,KAAa,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,SAAS,KAAa,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;KAChD,CAAC;AACJ,CAAC"}
|