@bldg-7/proxmox-mcp 0.6.1 → 1.0.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.
- package/README.md +37 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/access-control.d.ts +503 -14
- package/dist/schemas/access-control.d.ts.map +1 -1
- package/dist/schemas/access-control.js +93 -0
- package/dist/schemas/access-control.js.map +1 -1
- package/dist/schemas/acme.d.ts +45 -24
- package/dist/schemas/acme.d.ts.map +1 -1
- package/dist/schemas/acme.js +37 -30
- package/dist/schemas/acme.js.map +1 -1
- package/dist/schemas/backup.d.ts +156 -6
- package/dist/schemas/backup.d.ts.map +1 -1
- package/dist/schemas/backup.js +35 -0
- package/dist/schemas/backup.js.map +1 -1
- package/dist/schemas/ceph.d.ts +240 -0
- package/dist/schemas/ceph.d.ts.map +1 -1
- package/dist/schemas/ceph.js +111 -1
- package/dist/schemas/ceph.js.map +1 -1
- package/dist/schemas/certificate.d.ts +41 -23
- package/dist/schemas/certificate.d.ts.map +1 -1
- package/dist/schemas/certificate.js +32 -32
- package/dist/schemas/certificate.js.map +1 -1
- package/dist/schemas/cloud-init.d.ts +19 -12
- package/dist/schemas/cloud-init.d.ts.map +1 -1
- package/dist/schemas/cloud-init.js +12 -8
- package/dist/schemas/cloud-init.js.map +1 -1
- package/dist/schemas/cluster-management.d.ts +1065 -76
- package/dist/schemas/cluster-management.d.ts.map +1 -1
- package/dist/schemas/cluster-management.js +222 -0
- package/dist/schemas/cluster-management.js.map +1 -1
- package/dist/schemas/console-access.d.ts +14 -28
- package/dist/schemas/console-access.d.ts.map +1 -1
- package/dist/schemas/console-access.js +6 -9
- package/dist/schemas/console-access.js.map +1 -1
- package/dist/schemas/disk.d.ts +203 -10
- package/dist/schemas/disk.d.ts.map +1 -1
- package/dist/schemas/disk.js +48 -0
- package/dist/schemas/disk.js.map +1 -1
- package/dist/schemas/guest.d.ts +693 -0
- package/dist/schemas/guest.d.ts.map +1 -0
- package/dist/schemas/guest.js +320 -0
- package/dist/schemas/guest.js.map +1 -0
- package/dist/schemas/network.d.ts +98 -0
- package/dist/schemas/network.d.ts.map +1 -1
- package/dist/schemas/network.js +38 -0
- package/dist/schemas/network.js.map +1 -1
- package/dist/schemas/node-network.d.ts +185 -12
- package/dist/schemas/node-network.d.ts.map +1 -1
- package/dist/schemas/node-network.js +64 -0
- package/dist/schemas/node-network.js.map +1 -1
- package/dist/schemas/node.d.ts +277 -2
- package/dist/schemas/node.d.ts.map +1 -1
- package/dist/schemas/node.js +135 -0
- package/dist/schemas/node.js.map +1 -1
- package/dist/schemas/notifications.d.ts +37 -27
- package/dist/schemas/notifications.d.ts.map +1 -1
- package/dist/schemas/notifications.js +36 -37
- package/dist/schemas/notifications.js.map +1 -1
- package/dist/schemas/pool-management.d.ts +58 -2
- package/dist/schemas/pool-management.d.ts.map +1 -1
- package/dist/schemas/pool-management.js +26 -0
- package/dist/schemas/pool-management.js.map +1 -1
- package/dist/schemas/sdn.d.ts +436 -0
- package/dist/schemas/sdn.d.ts.map +1 -1
- package/dist/schemas/sdn.js +72 -0
- package/dist/schemas/sdn.js.map +1 -1
- package/dist/schemas/snapshot.d.ts +150 -0
- package/dist/schemas/snapshot.d.ts.map +1 -1
- package/dist/schemas/snapshot.js +35 -0
- package/dist/schemas/snapshot.js.map +1 -1
- package/dist/schemas/storage-management.d.ts +399 -16
- package/dist/schemas/storage-management.d.ts.map +1 -1
- package/dist/schemas/storage-management.js +141 -0
- package/dist/schemas/storage-management.js.map +1 -1
- package/dist/schemas/system-operations.d.ts +253 -4
- package/dist/schemas/system-operations.d.ts.map +1 -1
- package/dist/schemas/system-operations.js +117 -0
- package/dist/schemas/system-operations.js.map +1 -1
- package/dist/schemas/vm-advanced.d.ts +425 -60
- package/dist/schemas/vm-advanced.d.ts.map +1 -1
- package/dist/schemas/vm-advanced.js +69 -0
- package/dist/schemas/vm-advanced.js.map +1 -1
- package/dist/schemas/vm.d.ts +15 -15
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +106 -322
- package/dist/server.js.map +1 -1
- package/dist/tools/access-control.d.ts +7 -1
- package/dist/tools/access-control.d.ts.map +1 -1
- package/dist/tools/access-control.js +143 -1
- package/dist/tools/access-control.js.map +1 -1
- package/dist/tools/acme.d.ts +3 -9
- package/dist/tools/acme.d.ts.map +1 -1
- package/dist/tools/acme.js +128 -166
- package/dist/tools/acme.js.map +1 -1
- package/dist/tools/backup.d.ts +2 -1
- package/dist/tools/backup.d.ts.map +1 -1
- package/dist/tools/backup.js +55 -2
- package/dist/tools/backup.js.map +1 -1
- package/dist/tools/ceph.d.ts +7 -1
- package/dist/tools/ceph.d.ts.map +1 -1
- package/dist/tools/ceph.js +68 -0
- package/dist/tools/ceph.js.map +1 -1
- package/dist/tools/certificate.d.ts +3 -8
- package/dist/tools/certificate.d.ts.map +1 -1
- package/dist/tools/certificate.js +107 -139
- package/dist/tools/certificate.js.map +1 -1
- package/dist/tools/cloud-init.d.ts +2 -15
- package/dist/tools/cloud-init.d.ts.map +1 -1
- package/dist/tools/cloud-init.js +34 -53
- package/dist/tools/cloud-init.js.map +1 -1
- package/dist/tools/cluster-management.d.ts +12 -1
- package/dist/tools/cluster-management.d.ts.map +1 -1
- package/dist/tools/cluster-management.js +268 -1
- package/dist/tools/cluster-management.js.map +1 -1
- package/dist/tools/cluster.d.ts +2 -1
- package/dist/tools/cluster.d.ts.map +1 -1
- package/dist/tools/cluster.js +13 -0
- package/dist/tools/cluster.js.map +1 -1
- package/dist/tools/console-access.d.ts +3 -20
- package/dist/tools/console-access.d.ts.map +1 -1
- package/dist/tools/console-access.js +25 -70
- package/dist/tools/console-access.js.map +1 -1
- package/dist/tools/disk.d.ts +6 -1
- package/dist/tools/disk.d.ts.map +1 -1
- package/dist/tools/disk.js +78 -1
- package/dist/tools/disk.js.map +1 -1
- package/dist/tools/guest-lifecycle.d.ts +12 -0
- package/dist/tools/guest-lifecycle.d.ts.map +1 -0
- package/dist/tools/guest-lifecycle.js +66 -0
- package/dist/tools/guest-lifecycle.js.map +1 -0
- package/dist/tools/guest-modify.d.ts +10 -0
- package/dist/tools/guest-modify.d.ts.map +1 -0
- package/dist/tools/guest-modify.js +105 -0
- package/dist/tools/guest-modify.js.map +1 -0
- package/dist/tools/guest-query.d.ts +11 -0
- package/dist/tools/guest-query.d.ts.map +1 -0
- package/dist/tools/guest-query.js +57 -0
- package/dist/tools/guest-query.js.map +1 -0
- package/dist/tools/index.d.ts +23 -20
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +31 -26
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/network.d.ts +2 -1
- package/dist/tools/network.d.ts.map +1 -1
- package/dist/tools/network.js +65 -1
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/node-disk.d.ts +6 -0
- package/dist/tools/node-disk.d.ts.map +1 -0
- package/dist/tools/node-disk.js +39 -0
- package/dist/tools/node-disk.js.map +1 -0
- package/dist/tools/node-network.d.ts +2 -1
- package/dist/tools/node-network.d.ts.map +1 -1
- package/dist/tools/node-network.js +14 -0
- package/dist/tools/node-network.js.map +1 -1
- package/dist/tools/node.d.ts +6 -0
- package/dist/tools/node.d.ts.map +1 -1
- package/dist/tools/node.js +62 -0
- package/dist/tools/node.js.map +1 -1
- package/dist/tools/notifications.d.ts +2 -6
- package/dist/tools/notifications.d.ts.map +1 -1
- package/dist/tools/notifications.js +100 -123
- package/dist/tools/notifications.js.map +1 -1
- package/dist/tools/permissions.d.ts +5 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +405 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +154 -558
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/sdn.d.ts +5 -1
- package/dist/tools/sdn.d.ts.map +1 -1
- package/dist/tools/sdn.js +109 -1
- package/dist/tools/sdn.js.map +1 -1
- package/dist/tools/snapshot.d.ts +2 -1
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/snapshot.js +68 -1
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/storage-management.d.ts +6 -1
- package/dist/tools/storage-management.d.ts.map +1 -1
- package/dist/tools/storage-management.js +69 -1
- package/dist/tools/storage-management.js.map +1 -1
- package/dist/tools/system-operations.d.ts +7 -1
- package/dist/tools/system-operations.d.ts.map +1 -1
- package/dist/tools/system-operations.js +76 -0
- package/dist/tools/system-operations.js.map +1 -1
- package/dist/tools/vm-advanced.d.ts +10 -1
- package/dist/tools/vm-advanced.d.ts.map +1 -1
- package/dist/tools/vm-advanced.js +141 -1
- package/dist/tools/vm-advanced.js.map +1 -1
- package/dist/tools/vm-create.js +4 -4
- package/dist/tools/vm-create.js.map +1 -1
- package/dist/tools/vm-modify.js +2 -2
- package/dist/tools/vm-modify.js.map +1 -1
- package/dist/types/tools.d.ts +1 -1
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/types/tools.js +87 -309
- package/dist/types/tools.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
[](https://www.typescriptlang.org/)
|
|
9
9
|
[](https://nodejs.org/)
|
|
10
10
|
|
|
11
|
-
A comprehensive MCP server providing
|
|
11
|
+
A comprehensive MCP server providing 91 tools for managing Proxmox Virtual Environment, including QEMU VMs and LXC containers.
|
|
12
12
|
|
|
13
13
|
## Credits & Background
|
|
14
14
|
|
|
@@ -23,20 +23,20 @@ This project is a TypeScript rewrite of [mcp-proxmox-server](https://github.com/
|
|
|
23
23
|
- Giant switch statement (55 cases) → tool registry with handler/schema pairs
|
|
24
24
|
|
|
25
25
|
**Quality**:
|
|
26
|
-
- 0 tests →
|
|
26
|
+
- 0 tests → 1,114 tests
|
|
27
27
|
- No input validation → Zod runtime validation on every tool call
|
|
28
28
|
- Implicit error handling → structured MCP error responses with context
|
|
29
29
|
- No permission checks → two-tier permission model (basic / elevated)
|
|
30
30
|
|
|
31
31
|
**Developer Experience**:
|
|
32
32
|
- `npx @bldg-7/proxmox-mcp` just works
|
|
33
|
-
- All
|
|
33
|
+
- All 91 tool descriptions exposed via MCP `ListTools`
|
|
34
34
|
- Rate limiter middleware included
|
|
35
35
|
- Pino structured logging instead of `console.log`
|
|
36
36
|
|
|
37
37
|
## Features
|
|
38
38
|
|
|
39
|
-
- **
|
|
39
|
+
- **91 comprehensive tools** for Proxmox management
|
|
40
40
|
- **Full TypeScript implementation** with strict type safety
|
|
41
41
|
- **Support for both QEMU VMs and LXC containers**
|
|
42
42
|
- **Secure authentication** (API token)
|
|
@@ -125,35 +125,30 @@ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/
|
|
|
125
125
|
|
|
126
126
|
## Available Tools
|
|
127
127
|
|
|
128
|
-
This server provides **
|
|
128
|
+
This server provides **91 comprehensive tools** for Proxmox management:
|
|
129
129
|
|
|
130
130
|
| Category | Tools | Permission |
|
|
131
131
|
|----------|-------|------------|
|
|
132
|
-
| Node
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
| Cluster
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
| SDN Networking |
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
| VM
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
| VM Creation | 6 | Mixed |
|
|
153
|
-
| Certificates | 7 | Mixed |
|
|
154
|
-
| ACME | 8 | Mixed |
|
|
155
|
-
| Notifications | 5 | Mixed |
|
|
156
|
-
| **Total** | **309** | |
|
|
132
|
+
| Node Management | 14 | Mixed |
|
|
133
|
+
| Guest (VM/LXC) | 23 | Mixed |
|
|
134
|
+
| Guest Creation | 2 | Elevated 🔒 |
|
|
135
|
+
| QEMU Agent | 7 | Elevated 🔒 |
|
|
136
|
+
| Cluster Operations | 5 | Mixed |
|
|
137
|
+
| Cluster Firewall | 6 | Mixed |
|
|
138
|
+
| High Availability | 2 | Mixed |
|
|
139
|
+
| Storage | 3 | Mixed |
|
|
140
|
+
| SDN Networking | 4 | Mixed |
|
|
141
|
+
| Access Control | 7 | Mixed |
|
|
142
|
+
| Ceph | 6 | Mixed |
|
|
143
|
+
| Console Access | 3 | Elevated 🔒 |
|
|
144
|
+
| Backup | 1 | Mixed |
|
|
145
|
+
| VM Disks | 1 | Elevated 🔒 |
|
|
146
|
+
| LXC Mount Points | 1 | Elevated 🔒 |
|
|
147
|
+
| Cloud-Init | 1 | Mixed |
|
|
148
|
+
| Certificates | 1 | Mixed |
|
|
149
|
+
| ACME | 3 | Mixed |
|
|
150
|
+
| Notifications | 1 | Mixed |
|
|
151
|
+
| **Total** | **91** | |
|
|
157
152
|
|
|
158
153
|
📖 **[Full Tools Reference →](docs/TOOLS.md)**
|
|
159
154
|
|
|
@@ -165,7 +160,7 @@ This package includes **Agent Skills** - AI-optimized documentation that teaches
|
|
|
165
160
|
|
|
166
161
|
| Skill | Description | Tools/Topics |
|
|
167
162
|
|-------|-------------|--------------|
|
|
168
|
-
| **proxmox-mcp-tools** | Complete MCP tool reference for Proxmox VE |
|
|
163
|
+
| **proxmox-mcp-tools** | Complete MCP tool reference for Proxmox VE | 91 tools across 14 domains (VMs, LXC, cluster, storage, networking, Ceph, certificates, ACME, notifications) |
|
|
169
164
|
| **proxmox-admin** | Operational expertise for Proxmox infrastructure | VM lifecycle, storage management, HA configuration, troubleshooting |
|
|
170
165
|
|
|
171
166
|
### Installation
|
|
@@ -202,9 +197,9 @@ You: "Create an Ubuntu VM with 4 cores, 8GB RAM, and 50GB disk on pve1"
|
|
|
202
197
|
Agent knows the workflow from the skill:
|
|
203
198
|
1. proxmox_get_next_vmid → gets available VM ID (e.g., 105)
|
|
204
199
|
2. proxmox_create_vm → creates VM 105 with 4 cores, 8GB RAM
|
|
205
|
-
3.
|
|
206
|
-
4.
|
|
207
|
-
5.
|
|
200
|
+
3. proxmox_vm_disk → attaches 50GB virtio disk (action: 'add')
|
|
201
|
+
4. proxmox_guest_network → adds network interface on vmbr0 (action: 'add', type: 'vm')
|
|
202
|
+
5. proxmox_guest_start → powers on the VM (type: 'vm')
|
|
208
203
|
```
|
|
209
204
|
|
|
210
205
|
**Example — Setting up HA** (agent uses `proxmox-admin` skill):
|
|
@@ -212,9 +207,9 @@ Agent knows the workflow from the skill:
|
|
|
212
207
|
You: "Make VM 100 highly available"
|
|
213
208
|
|
|
214
209
|
Agent knows the operational playbook:
|
|
215
|
-
1.
|
|
216
|
-
2.
|
|
217
|
-
3.
|
|
210
|
+
1. proxmox_ha_group → checks existing HA groups (action: 'list')
|
|
211
|
+
2. proxmox_ha_resource → adds VM 100 to HA with priority (action: 'create')
|
|
212
|
+
3. proxmox_ha_resource → verifies HA is active (action: 'status')
|
|
218
213
|
```
|
|
219
214
|
|
|
220
215
|
**Example — Troubleshooting** (agent uses both skills together):
|
|
@@ -222,10 +217,10 @@ Agent knows the operational playbook:
|
|
|
222
217
|
You: "VM 100 won't start, help me figure out why"
|
|
223
218
|
|
|
224
219
|
Agent combines tool knowledge + operational expertise:
|
|
225
|
-
1.
|
|
226
|
-
2.
|
|
227
|
-
3.
|
|
228
|
-
4.
|
|
220
|
+
1. proxmox_guest_status → checks current state (type: 'vm')
|
|
221
|
+
2. proxmox_guest_config → reviews configuration (action: 'get', type: 'vm')
|
|
222
|
+
3. proxmox_node → checks node resource availability (action: 'status')
|
|
223
|
+
4. proxmox_node_task → finds recent failed tasks (action: 'list')
|
|
229
224
|
→ Diagnoses: "Node pve1 has insufficient memory. VM requires 8GB but only 2GB free."
|
|
230
225
|
→ Suggests: resize VM memory, migrate to another node, or free resources
|
|
231
226
|
```
|
|
@@ -233,7 +228,7 @@ Agent combines tool knowledge + operational expertise:
|
|
|
233
228
|
### Skill Contents
|
|
234
229
|
|
|
235
230
|
**proxmox-mcp-tools** — Tool Reference:
|
|
236
|
-
-
|
|
231
|
+
- 91 tools organized into 14 domains (VMs, LXC, cluster, storage, networking, Ceph, access control, pools, certificates, ACME, notifications)
|
|
237
232
|
- Parameters, types, and descriptions for every tool
|
|
238
233
|
- Permission levels (basic vs elevated 🔒)
|
|
239
234
|
- Common workflow patterns (create VM, backup/restore, clone, migrate)
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B1C"}
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,13 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { loadConfig } from './config/index.js';
|
|
4
4
|
import { ProxmoxApiClient } from './client/proxmox.js';
|
|
5
5
|
import { createServer } from './server.js';
|
|
6
|
+
import { TOOL_NAMES } from './types/tools.js';
|
|
6
7
|
import { logger } from './utils/index.js';
|
|
7
8
|
export async function main() {
|
|
8
9
|
try {
|
|
10
|
+
if (process.env.NODE_TLS_REJECT_UNAUTHORIZED === '0') {
|
|
11
|
+
logger.warn('NODE_TLS_REJECT_UNAUTHORIZED=0 disables TLS certificate verification for all HTTPS requests. Remove it and use PROXMOX_SSL_MODE/PROXMOX_SSL_CA_CERT instead.');
|
|
12
|
+
}
|
|
9
13
|
// Load configuration from environment variables
|
|
10
14
|
const config = loadConfig();
|
|
11
15
|
logger.info('Configuration loaded successfully');
|
|
@@ -14,7 +18,7 @@ export async function main() {
|
|
|
14
18
|
logger.info('Proxmox API client initialized');
|
|
15
19
|
// Create MCP server with all tools registered
|
|
16
20
|
const server = createServer(client, config);
|
|
17
|
-
logger.info(
|
|
21
|
+
logger.info(`MCP server created with ${TOOL_NAMES.length} tools registered`);
|
|
18
22
|
// Create stdio transport and connect server
|
|
19
23
|
const transport = new StdioServerTransport();
|
|
20
24
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC;QACH,gDAAgD;QAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAEjD,4BAA4B;QAC5B,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE9C,8CAA8C;QAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,GAAG,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CACT,8JAA8J,CAC/J,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAEjD,4BAA4B;QAC5B,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE9C,8CAA8C;QAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,CAAC,MAAM,mBAAmB,CAAC,CAAC;QAE7E,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,sCAAsC;AACtC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,IAAI,EAAE,CAAC"}
|