@onivoro/server-mcp-llm-adapter 24.38.1 → 24.39.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/README.md
CHANGED
|
@@ -10,8 +10,8 @@ npm install @onivoro/server-mcp-llm-adapter
|
|
|
10
10
|
|
|
11
11
|
### Peer dependencies
|
|
12
12
|
|
|
13
|
-
| Package
|
|
14
|
-
|
|
13
|
+
| Package | Version |
|
|
14
|
+
| ---------------- | ---------------------- |
|
|
15
15
|
| `@nestjs/common` | `^10.0.0 \|\| ^11.0.0` |
|
|
16
16
|
|
|
17
17
|
`@onivoro/server-mcp` is a hard dependency — installed automatically.
|
|
@@ -20,27 +20,27 @@ npm install @onivoro/server-mcp-llm-adapter
|
|
|
20
20
|
|
|
21
21
|
Configs map to **the API you are calling**, not the model or hosting platform. A model hosted on AWS Bedrock can be called through different APIs, each with its own tool format.
|
|
22
22
|
|
|
23
|
-
| API you are calling
|
|
24
|
-
|
|
25
|
-
| AWS Bedrock **Converse / ConverseStream**
|
|
26
|
-
| AWS Bedrock **Mantle** (Anthropic Messages format)
|
|
27
|
-
| AWS Bedrock **OpenAI-compatible**
|
|
28
|
-
| OpenAI **Chat Completions** (also xAI, Groq, Together) | `OPENAI_CONFIG`
|
|
29
|
-
| Anthropic **Messages**
|
|
30
|
-
| Google **Gemini**
|
|
31
|
-
| Mistral **La Plateforme**
|
|
23
|
+
| API you are calling | Config | Module method |
|
|
24
|
+
| ------------------------------------------------------ | ------------------------- | ---------------------- |
|
|
25
|
+
| AWS Bedrock **Converse / ConverseStream** | `BEDROCK_CONVERSE_CONFIG` | `forBedrockConverse()` |
|
|
26
|
+
| AWS Bedrock **Mantle** (Anthropic Messages format) | `BEDROCK_MANTLE_CONFIG` | `forBedrockMantle()` |
|
|
27
|
+
| AWS Bedrock **OpenAI-compatible** | `BEDROCK_OPENAI_CONFIG` | `forBedrockOpenAi()` |
|
|
28
|
+
| OpenAI **Chat Completions** (also xAI, Groq, Together) | `OPENAI_CONFIG` | `forOpenAi()` |
|
|
29
|
+
| Anthropic **Messages** | `CLAUDE_CONFIG` | `forClaude()` |
|
|
30
|
+
| Google **Gemini** | `GEMINI_CONFIG` | `forGemini()` |
|
|
31
|
+
| Mistral **La Plateforme** | `MISTRAL_CONFIG` | `forMistral()` |
|
|
32
32
|
|
|
33
33
|
### Bedrock examples
|
|
34
34
|
|
|
35
35
|
Bedrock exposes multiple API surfaces. Each has its own tool format — pick the config that matches the API you are calling:
|
|
36
36
|
|
|
37
|
-
| Scenario
|
|
38
|
-
|
|
37
|
+
| Scenario | Config |
|
|
38
|
+
| --------------------------------------------------- | ------------------------- |
|
|
39
39
|
| Any model via Bedrock **Converse / ConverseStream** | `BEDROCK_CONVERSE_CONFIG` |
|
|
40
|
-
| Bedrock **Mantle** (Anthropic Messages format)
|
|
41
|
-
| Bedrock **OpenAI-compatible** endpoint
|
|
42
|
-
| Claude on Bedrock via **InvokeModel**
|
|
43
|
-
| Mistral on Bedrock via **InvokeModel**
|
|
40
|
+
| Bedrock **Mantle** (Anthropic Messages format) | `BEDROCK_MANTLE_CONFIG` |
|
|
41
|
+
| Bedrock **OpenAI-compatible** endpoint | `BEDROCK_OPENAI_CONFIG` |
|
|
42
|
+
| Claude on Bedrock via **InvokeModel** | `CLAUDE_CONFIG` |
|
|
43
|
+
| Mistral on Bedrock via **InvokeModel** | `MISTRAL_CONFIG` |
|
|
44
44
|
|
|
45
45
|
Mantle and Converse are mutually exclusive access paths — never mix them. `BEDROCK_MANTLE_CONFIG` uses the Anthropic Messages tool format (`input_schema`) while `BEDROCK_CONVERSE_CONFIG` uses the Converse `toolSpec` envelope. Similarly, `BEDROCK_OPENAI_CONFIG` uses the OpenAI function-calling format independently from `OPENAI_CONFIG` — each has its own alias key for per-provider name overrides.
|
|
46
46
|
|
|
@@ -58,10 +58,7 @@ import { EmojiToolService } from './services/emoji-tool.service';
|
|
|
58
58
|
import { ChatService } from './services/chat.service';
|
|
59
59
|
|
|
60
60
|
@Module({
|
|
61
|
-
imports: [
|
|
62
|
-
McpRegistryModule.registerOnly(),
|
|
63
|
-
McpLlmAdapterModule.forBedrockConverse(),
|
|
64
|
-
],
|
|
61
|
+
imports: [McpRegistryModule.registerOnly(), McpLlmAdapterModule.forBedrockConverse()],
|
|
65
62
|
providers: [EmojiToolService, ChatService],
|
|
66
63
|
})
|
|
67
64
|
export class AppModule {}
|
|
@@ -84,10 +81,7 @@ export class ChatService {
|
|
|
84
81
|
// ... call the LLM provider with tools ...
|
|
85
82
|
|
|
86
83
|
// When the provider returns a tool call:
|
|
87
|
-
const result = await this.adapter.executeToolForProvider(
|
|
88
|
-
toolCall.name,
|
|
89
|
-
toolCall.input,
|
|
90
|
-
);
|
|
84
|
+
const result = await this.adapter.executeToolForProvider(toolCall.name, toolCall.input);
|
|
91
85
|
}
|
|
92
86
|
}
|
|
93
87
|
```
|
|
@@ -101,10 +95,10 @@ LLM providers can return multiple tool calls in a single turn — OpenAI returns
|
|
|
101
95
|
```typescript
|
|
102
96
|
// LLM returned multiple tool calls in one turn
|
|
103
97
|
const results = await this.adapter.executeToolsForProvider(
|
|
104
|
-
toolCalls.map(tc => ({
|
|
98
|
+
toolCalls.map((tc) => ({
|
|
105
99
|
providerName: tc.name,
|
|
106
100
|
params: tc.input,
|
|
107
|
-
id: tc.id,
|
|
101
|
+
id: tc.id, // OpenAI tool_call.id, Claude tool_use.id, Bedrock toolUseId
|
|
108
102
|
})),
|
|
109
103
|
authInfo,
|
|
110
104
|
);
|
|
@@ -142,11 +136,16 @@ For custom providers that support per-tool output schemas, use `formatToolWithOu
|
|
|
142
136
|
const MY_CONFIG: LlmAdapterConfig<MyToolDef> = {
|
|
143
137
|
aliasKey: 'myProvider',
|
|
144
138
|
formatTool: (name, description, inputSchema) => ({
|
|
145
|
-
name,
|
|
139
|
+
name,
|
|
140
|
+
description,
|
|
141
|
+
inputSchema,
|
|
146
142
|
}),
|
|
147
143
|
// Called instead of formatTool when the tool has an outputSchema
|
|
148
144
|
formatToolWithOutput: (name, description, inputSchema, outputSchema) => ({
|
|
149
|
-
name,
|
|
145
|
+
name,
|
|
146
|
+
description,
|
|
147
|
+
inputSchema,
|
|
148
|
+
outputSchema,
|
|
150
149
|
}),
|
|
151
150
|
};
|
|
152
151
|
```
|
|
@@ -181,20 +180,21 @@ McpLlmAdapterModule.forProvider(MY_CONFIG);
|
|
|
181
180
|
|
|
182
181
|
## McpLlmToolAdapter API
|
|
183
182
|
|
|
184
|
-
| Method
|
|
185
|
-
|
|
186
|
-
| `toProviderTools()`
|
|
187
|
-
| `getOutputSchemas()`
|
|
188
|
-
| `resolveProviderToolName(providerName)`
|
|
189
|
-
| `executeToolForProvider(providerName, params, authInfo?)` | Resolves name, executes tool, returns stringified result
|
|
190
|
-
| `executeToolCallForProvider(toolCall, authInfo?)`
|
|
191
|
-
| `executeToolsForProvider(toolCalls, authInfo?)`
|
|
183
|
+
| Method | Description |
|
|
184
|
+
| --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
185
|
+
| `toProviderTools()` | Returns `T[]` — tool definitions in the provider's format |
|
|
186
|
+
| `getOutputSchemas()` | Returns `Map<string, Record<string, unknown>>` — provider tool names to output JSON Schemas (only tools with `outputSchema`) |
|
|
187
|
+
| `resolveProviderToolName(providerName)` | Maps a provider-specific tool name back to the MCP tool name, or `undefined` |
|
|
188
|
+
| `executeToolForProvider(providerName, params, authInfo?)` | Resolves name, executes tool, returns stringified result |
|
|
189
|
+
| `executeToolCallForProvider(toolCall, authInfo?)` | Executes a single `ProviderToolCall`, returns `ProviderToolCallResult` with id passthrough |
|
|
190
|
+
| `executeToolsForProvider(toolCalls, authInfo?)` | Executes multiple tool calls in parallel. Returns `ProviderToolCallResult[]` with per-call success/error |
|
|
192
191
|
|
|
193
192
|
## Name handling
|
|
194
193
|
|
|
195
194
|
Each config has an `aliasKey` (e.g., `'bedrock'`, `'bedrock-mantle'`, `'bedrock-openai'`, `'openai'`) used to look up per-provider name overrides from the `@McpTool` decorator's `aliases` parameter.
|
|
196
195
|
|
|
197
196
|
Resolution order:
|
|
197
|
+
|
|
198
198
|
1. **Explicit alias** — `aliases[aliasKey]` if present
|
|
199
199
|
2. **Sanitized name** — `sanitizeName(mcpName)` if the config defines a sanitizer
|
|
200
200
|
3. **MCP name as-is** — used directly when no alias or sanitizer applies
|
|
@@ -213,40 +213,40 @@ Providers that require name sanitization (Bedrock Converse, Gemini) apply it aut
|
|
|
213
213
|
|
|
214
214
|
```typescript
|
|
215
215
|
// Module
|
|
216
|
-
McpLlmAdapterModule
|
|
216
|
+
McpLlmAdapterModule; // NestJS module — forProvider(), forBedrockConverse(), forBedrockMantle(), forBedrockOpenAi(), forOpenAi(), forClaude(), forGemini(), forMistral()
|
|
217
217
|
|
|
218
218
|
// Adapter
|
|
219
|
-
McpLlmToolAdapter
|
|
220
|
-
ProviderToolCall
|
|
221
|
-
ProviderToolCallResult
|
|
219
|
+
McpLlmToolAdapter; // Injectable — toProviderTools(), getOutputSchemas(), resolveProviderToolName(), executeToolForProvider(), executeToolCallForProvider(), executeToolsForProvider()
|
|
220
|
+
ProviderToolCall; // Input type for single/batch execution — { providerName, params, id? }
|
|
221
|
+
ProviderToolCallResult; // Output type for single/batch execution — { providerName, id?, result?, error?, success }
|
|
222
222
|
|
|
223
223
|
// Config
|
|
224
|
-
LlmAdapterConfig
|
|
225
|
-
LLM_ADAPTER_CONFIG
|
|
226
|
-
resolveProviderName
|
|
224
|
+
LlmAdapterConfig; // Interface for custom provider configs
|
|
225
|
+
LLM_ADAPTER_CONFIG; // Injection token
|
|
226
|
+
resolveProviderName; // Utility: resolves provider name from metadata + config
|
|
227
227
|
|
|
228
228
|
// Prebuilt configs
|
|
229
|
-
BEDROCK_CONVERSE_CONFIG
|
|
230
|
-
BEDROCK_MANTLE_CONFIG
|
|
231
|
-
BEDROCK_OPENAI_CONFIG
|
|
232
|
-
OPENAI_CONFIG
|
|
233
|
-
CLAUDE_CONFIG
|
|
234
|
-
GEMINI_CONFIG
|
|
235
|
-
MISTRAL_CONFIG
|
|
229
|
+
BEDROCK_CONVERSE_CONFIG; // AWS Bedrock Converse API
|
|
230
|
+
BEDROCK_MANTLE_CONFIG; // AWS Bedrock Mantle (Anthropic Messages format)
|
|
231
|
+
BEDROCK_OPENAI_CONFIG; // AWS Bedrock OpenAI-compatible endpoint
|
|
232
|
+
OPENAI_CONFIG; // OpenAI Chat Completions API
|
|
233
|
+
CLAUDE_CONFIG; // Anthropic Messages API
|
|
234
|
+
GEMINI_CONFIG; // Google Gemini API
|
|
235
|
+
MISTRAL_CONFIG; // Mistral La Plateforme API
|
|
236
236
|
|
|
237
237
|
// Shared formatters (used internally by prebuilt configs, also available for custom configs)
|
|
238
|
-
formatAnthropicTool
|
|
239
|
-
formatOpenAiTool
|
|
238
|
+
formatAnthropicTool; // Anthropic Messages format — { name, description, input_schema }
|
|
239
|
+
formatOpenAiTool; // OpenAI function format — { type: 'function', function: { name, description, parameters } }
|
|
240
240
|
|
|
241
241
|
// Types
|
|
242
|
-
BedrockConverseToolDefinition
|
|
243
|
-
OpenAiToolDefinition
|
|
244
|
-
ClaudeToolDefinition
|
|
245
|
-
GeminiToolDefinition
|
|
242
|
+
BedrockConverseToolDefinition; // { toolSpec: { name, description, inputSchema: { json } } }
|
|
243
|
+
OpenAiToolDefinition; // { type: 'function', function: { name, description, parameters } }
|
|
244
|
+
ClaudeToolDefinition; // { name, description, input_schema }
|
|
245
|
+
GeminiToolDefinition; // { name, description, parameters }
|
|
246
246
|
```
|
|
247
247
|
|
|
248
248
|
## Related libraries
|
|
249
249
|
|
|
250
|
-
| Library
|
|
251
|
-
|
|
250
|
+
| Library | Purpose |
|
|
251
|
+
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
252
252
|
| [`@onivoro/server-mcp`](https://www.npmjs.com/package/@onivoro/server-mcp) | Transport-agnostic MCP tool registry, decorators, HTTP and stdio transports |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onivoro/server-mcp-llm-adapter",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.39.0",
|
|
4
4
|
"description": "LLM provider tool format adapter for MCP — supports OpenAI, Claude, Bedrock, Gemini, and Mistral",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"adapter"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@onivoro/server-mcp": "^24.
|
|
34
|
+
"@onivoro/server-mcp": "^24.39.0",
|
|
35
35
|
"tslib": "^2.3.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { McpLlmToolAdapter } from './lib/mcp-llm-tool-adapter';
|
|
1
|
+
export { McpLlmToolAdapter, McpToolExecutionExtra, } from './lib/mcp-llm-tool-adapter';
|
|
2
2
|
export { ProviderToolCall } from './lib/provider-tool-call';
|
|
3
3
|
export { ProviderToolCallResult } from './lib/provider-tool-call-result';
|
|
4
4
|
export { McpLlmAdapterModule } from './lib/mcp-llm-adapter.module';
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/server/mcp-llm-adapter/src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/server/mcp-llm-adapter/src/index.ts"],"names":[],"mappings":";;;AAAA,mEAGoC;AAFlC,yHAAA,iBAAiB,OAAA;AAKnB,uEAAmE;AAA1D,6HAAA,mBAAmB,OAAA;AAC5B,2EAAoE;AAA3D,8HAAA,kBAAkB,OAAA;AAE3B,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAE5B,yEAAwE;AAA/D,kIAAA,uBAAuB,OAAA;AAEhC,qDAAoD;AAA3C,8GAAA,aAAa,OAAA;AAEtB,qDAAoD;AAA3C,8GAAA,aAAa,OAAA;AAEtB,qDAAoD;AAA3C,8GAAA,aAAa,OAAA;AACtB,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AACvB,qEAAoE;AAA3D,8HAAA,qBAAqB,OAAA;AAC9B,qEAAoE;AAA3D,8HAAA,qBAAqB,OAAA;AAC9B,qEAAkE;AAAzD,4HAAA,mBAAmB,OAAA;AAC5B,+DAA4D;AAAnD,sHAAA,gBAAgB,OAAA"}
|
|
@@ -3,6 +3,12 @@ import { McpToolRegistry, McpAuthInfo } from '@onivoro/server-mcp';
|
|
|
3
3
|
import type { LlmAdapterConfig } from './llm-adapter-config';
|
|
4
4
|
import type { ProviderToolCall } from './provider-tool-call';
|
|
5
5
|
import type { ProviderToolCallResult } from './provider-tool-call-result';
|
|
6
|
+
export type McpToolExecutionExtra = {
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
sendProgress?: (progress: number, total?: number, message?: string) => Promise<void>;
|
|
10
|
+
sendLog?: (level: any, data: unknown, logger?: string) => Promise<void>;
|
|
11
|
+
};
|
|
6
12
|
export declare class McpLlmToolAdapter<T = unknown> implements OnModuleInit {
|
|
7
13
|
private readonly registry;
|
|
8
14
|
private readonly config;
|
|
@@ -14,8 +20,8 @@ export declare class McpLlmToolAdapter<T = unknown> implements OnModuleInit {
|
|
|
14
20
|
toProviderTools(): T[];
|
|
15
21
|
getOutputSchemas(): Map<string, Record<string, unknown>>;
|
|
16
22
|
resolveProviderToolName(providerName: string): string | undefined;
|
|
17
|
-
executeToolForProvider(providerName: string, params: Record<string, unknown>, authInfo?: McpAuthInfo): Promise<string>;
|
|
18
|
-
executeToolCallForProvider(toolCall: ProviderToolCall, authInfo?: McpAuthInfo): Promise<ProviderToolCallResult>;
|
|
19
|
-
executeToolsForProvider(toolCalls: ProviderToolCall[], authInfo?: McpAuthInfo): Promise<ProviderToolCallResult[]>;
|
|
23
|
+
executeToolForProvider(providerName: string, params: Record<string, unknown>, authInfo?: McpAuthInfo, extra?: McpToolExecutionExtra): Promise<string>;
|
|
24
|
+
executeToolCallForProvider(toolCall: ProviderToolCall, authInfo?: McpAuthInfo, extra?: McpToolExecutionExtra): Promise<ProviderToolCallResult>;
|
|
25
|
+
executeToolsForProvider(toolCalls: ProviderToolCall[], authInfo?: McpAuthInfo, extra?: McpToolExecutionExtra): Promise<ProviderToolCallResult[]>;
|
|
20
26
|
}
|
|
21
27
|
//# sourceMappingURL=mcp-llm-tool-adapter.d.ts.map
|
|
@@ -54,28 +54,33 @@ let McpLlmToolAdapter = class McpLlmToolAdapter {
|
|
|
54
54
|
resolveProviderToolName(providerName) {
|
|
55
55
|
return this.getNameMap().get(providerName);
|
|
56
56
|
}
|
|
57
|
-
async executeToolForProvider(providerName, params, authInfo) {
|
|
57
|
+
async executeToolForProvider(providerName, params, authInfo, extra) {
|
|
58
58
|
const mcpName = this.getNameMap().get(providerName);
|
|
59
59
|
if (!mcpName) {
|
|
60
60
|
throw new Error(`No MCP tool found for provider name "${providerName}".`);
|
|
61
61
|
}
|
|
62
|
-
const result = await this.registry.executeToolRaw(mcpName, params, authInfo);
|
|
62
|
+
const result = await this.registry.executeToolRaw(mcpName, params, authInfo, extra);
|
|
63
63
|
return typeof result === 'string' ? result : JSON.stringify(result);
|
|
64
64
|
}
|
|
65
|
-
async executeToolCallForProvider(toolCall, authInfo) {
|
|
66
|
-
const [result] = await this.executeToolsForProvider([toolCall], authInfo);
|
|
65
|
+
async executeToolCallForProvider(toolCall, authInfo, extra) {
|
|
66
|
+
const [result] = await this.executeToolsForProvider([toolCall], authInfo, extra);
|
|
67
67
|
return result;
|
|
68
68
|
}
|
|
69
|
-
async executeToolsForProvider(toolCalls, authInfo) {
|
|
69
|
+
async executeToolsForProvider(toolCalls, authInfo, extra) {
|
|
70
70
|
const nameMap = this.getNameMap();
|
|
71
71
|
const settled = await Promise.allSettled(toolCalls.map(async ({ providerName, params, id }) => {
|
|
72
72
|
const mcpName = nameMap.get(providerName);
|
|
73
73
|
if (!mcpName) {
|
|
74
74
|
throw new Error(`No MCP tool found for provider name "${providerName}".`);
|
|
75
75
|
}
|
|
76
|
-
const rawResult = await this.registry.executeToolRaw(mcpName, params, authInfo);
|
|
76
|
+
const rawResult = await this.registry.executeToolRaw(mcpName, params, authInfo, extra);
|
|
77
77
|
const result = typeof rawResult === 'string' ? rawResult : JSON.stringify(rawResult);
|
|
78
|
-
return {
|
|
78
|
+
return {
|
|
79
|
+
providerName,
|
|
80
|
+
id,
|
|
81
|
+
result,
|
|
82
|
+
success: true,
|
|
83
|
+
};
|
|
79
84
|
}));
|
|
80
85
|
return settled.map((outcome, i) => {
|
|
81
86
|
if (outcome.status === 'fulfilled') {
|
|
@@ -85,7 +90,9 @@ let McpLlmToolAdapter = class McpLlmToolAdapter {
|
|
|
85
90
|
return {
|
|
86
91
|
providerName: call.providerName,
|
|
87
92
|
id: call.id,
|
|
88
|
-
error: outcome.reason instanceof Error
|
|
93
|
+
error: outcome.reason instanceof Error
|
|
94
|
+
? outcome.reason.message
|
|
95
|
+
: String(outcome.reason),
|
|
89
96
|
success: false,
|
|
90
97
|
};
|
|
91
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-llm-tool-adapter.js","sourceRoot":"","sources":["../../../../../../libs/server/mcp-llm-adapter/src/lib/mcp-llm-tool-adapter.ts"],"names":[],"mappings":";;;;AAAA,2CAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"mcp-llm-tool-adapter.js","sourceRoot":"","sources":["../../../../../../libs/server/mcp-llm-adapter/src/lib/mcp-llm-tool-adapter.ts"],"names":[],"mappings":";;;;AAAA,2CAAkE;AAClE,oDAI6B;AAC7B,yEAAgE;AAEhE,mEAA8D;AAuBvD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAKT;IAEA;IANX,YAAY,GAA+B,IAAI,CAAC;IAChD,WAAW,CAAc;IAEjC,YACmB,QAAyB,EAEzB,MAA2B;QAF3B,aAAQ,GAAR,QAAQ,CAAiB;QAEzB,WAAM,GAAN,MAAM,CAAqB;IAC3C,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE;YACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;YACtC,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,IAAA,2CAAmB,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnD,MAAM,IAAI,GAAG,IAAA,2CAAmB,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,IAAA,kCAAqB,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAE3D,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC9D,MAAM,YAAY,GAAG,IAAA,kCAAqB,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAClE,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CACrC,IAAI,EACJ,QAAQ,CAAC,WAAW,EACpB,WAAW,EACX,YAAY,CACb,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;IAOD,gBAAgB;QACd,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;QAC1D,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC1B,MAAM,YAAY,GAAG,IAAA,2CAAmB,EAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAA,kCAAqB,EAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uBAAuB,CAAC,YAAoB;QAC1C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,YAAoB,EACpB,MAA+B,EAC/B,QAAsB,EACtB,KAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,YAAY,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC/C,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,CACN,CAAC;QACF,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAGD,KAAK,CAAC,0BAA0B,CAC9B,QAA0B,EAC1B,QAAsB,EACtB,KAA6B;QAE7B,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,uBAAuB,CACjD,CAAC,QAAQ,CAAC,EACV,QAAQ,EACR,KAAK,CACN,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,SAA6B,EAC7B,QAAsB,EACtB,KAA6B;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;YACnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wCAAwC,YAAY,IAAI,CACzD,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAClD,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,CACN,CAAC;YACF,MAAM,MAAM,GACV,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACxE,OAAO;gBACL,YAAY;gBACZ,EAAE;gBACF,MAAM;gBACN,OAAO,EAAE,IAAI;aACY,CAAC;QAC9B,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO;gBACL,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EACH,OAAO,CAAC,MAAM,YAAY,KAAK;oBAC7B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;oBACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC5B,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnJY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAOR,mBAAA,IAAA,eAAM,EAAC,6CAAkB,CAAC,CAAA;6CADA,4BAAe;GALjC,iBAAiB,CAmJ7B"}
|