omp-worker-mcp 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.
- package/LICENSE +21 -0
- package/README.md +263 -0
- package/README.zh-CN.md +260 -0
- package/bin/omp-worker-mcp.mjs +34 -0
- package/dist/group-orchestrator.js +390 -0
- package/dist/group-orchestrator.js.map +1 -0
- package/dist/group-runner.js +13 -0
- package/dist/group-runner.js.map +1 -0
- package/dist/index.js +892 -0
- package/dist/index.js.map +1 -0
- package/dist/job-store.js +603 -0
- package/dist/job-store.js.map +1 -0
- package/dist/protocol.js +123 -0
- package/dist/protocol.js.map +1 -0
- package/dist/runner.js +230 -0
- package/dist/runner.js.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { stat } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { clearGroupCancellationRequest, createJobId, ensureJobDirectory, hasGroupCancellationRequest, jobFilePath, readGroup, readGroupCancellationRequest, readJob, validateGroupId, writeCancellationRequest, writeGroup, writeJob, writePrompt, } from "./job-store.js";
|
|
7
|
+
import { buildDelegatePrompt } from "./protocol.js";
|
|
8
|
+
import { TERMINAL_STATUSES, } from "./types.js";
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const runnerPath = path.join(__dirname, "runner.js");
|
|
11
|
+
function attemptPaths(directory, number) {
|
|
12
|
+
const prefix = `attempt-${String(number).padStart(2, "0")}`;
|
|
13
|
+
return {
|
|
14
|
+
stdoutPath: path.join(directory, `${prefix}.stdout.jsonl`),
|
|
15
|
+
stderrPath: path.join(directory, `${prefix}.stderr.log`),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
async function validateWorkingDirectory(cwd) {
|
|
19
|
+
const resolved = path.resolve(cwd);
|
|
20
|
+
const info = await stat(resolved).catch((error) => {
|
|
21
|
+
if (error.code === "ENOENT")
|
|
22
|
+
throw new Error(`cwd does not exist: ${resolved}`);
|
|
23
|
+
throw error;
|
|
24
|
+
});
|
|
25
|
+
if (!info.isDirectory())
|
|
26
|
+
throw new Error(`cwd is not a directory: ${resolved}`);
|
|
27
|
+
return resolved;
|
|
28
|
+
}
|
|
29
|
+
async function launchRunner(job) {
|
|
30
|
+
const child = spawn(process.execPath, [runnerPath, jobFilePath(job.id)], {
|
|
31
|
+
detached: true,
|
|
32
|
+
windowsHide: true,
|
|
33
|
+
stdio: "ignore",
|
|
34
|
+
env: process.env,
|
|
35
|
+
});
|
|
36
|
+
child.on("error", (error) => {
|
|
37
|
+
console.error(`Failed to launch runner for job ${job.id}:`, error);
|
|
38
|
+
});
|
|
39
|
+
child.unref();
|
|
40
|
+
}
|
|
41
|
+
async function createAndStartJob(params) {
|
|
42
|
+
const resolvedCwd = await validateWorkingDirectory(params.cwd);
|
|
43
|
+
const id = createJobId();
|
|
44
|
+
const directory = await ensureJobDirectory(id);
|
|
45
|
+
const now = new Date().toISOString();
|
|
46
|
+
const job = {
|
|
47
|
+
version: 1,
|
|
48
|
+
id,
|
|
49
|
+
status: "queued",
|
|
50
|
+
goal: params.goal,
|
|
51
|
+
supervisorBrief: params.supervisor_brief,
|
|
52
|
+
cwd: resolvedCwd,
|
|
53
|
+
acceptance: params.acceptance,
|
|
54
|
+
maxAttempts: params.max_attempts,
|
|
55
|
+
currentAttempt: 1,
|
|
56
|
+
createdAt: now,
|
|
57
|
+
updatedAt: now,
|
|
58
|
+
artifacts: [],
|
|
59
|
+
verification: [],
|
|
60
|
+
remaining: [],
|
|
61
|
+
attempts: [],
|
|
62
|
+
groupId: params.groupId,
|
|
63
|
+
groupTaskId: params.groupTaskId,
|
|
64
|
+
access: params.access,
|
|
65
|
+
ownership: params.ownership,
|
|
66
|
+
};
|
|
67
|
+
const promptPath = await writePrompt(id, 1, buildDelegatePrompt(job));
|
|
68
|
+
const paths = attemptPaths(directory, 1);
|
|
69
|
+
const attempt = {
|
|
70
|
+
number: 1,
|
|
71
|
+
kind: "delegate",
|
|
72
|
+
status: "queued",
|
|
73
|
+
promptPath,
|
|
74
|
+
timeoutMinutes: params.timeout_minutes,
|
|
75
|
+
...paths,
|
|
76
|
+
};
|
|
77
|
+
job.attempts.push(attempt);
|
|
78
|
+
await writeJob(job);
|
|
79
|
+
try {
|
|
80
|
+
await launchRunner(job);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
job.status = "failed";
|
|
84
|
+
job.error = error instanceof Error ? error.message : String(error);
|
|
85
|
+
attempt.status = "failed";
|
|
86
|
+
attempt.error = job.error;
|
|
87
|
+
await writeJob(job);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
return { job, directory };
|
|
91
|
+
}
|
|
92
|
+
export function parseGroupId(input) {
|
|
93
|
+
const trimmed = input.trim();
|
|
94
|
+
if (trimmed.endsWith("group.json")) {
|
|
95
|
+
const parentDir = path.basename(path.dirname(path.resolve(trimmed)));
|
|
96
|
+
validateGroupId(parentDir);
|
|
97
|
+
return parentDir;
|
|
98
|
+
}
|
|
99
|
+
validateGroupId(trimmed);
|
|
100
|
+
return trimmed;
|
|
101
|
+
}
|
|
102
|
+
export async function runGroupOrchestrator(groupIdOrPath) {
|
|
103
|
+
const groupId = parseGroupId(groupIdOrPath);
|
|
104
|
+
let group;
|
|
105
|
+
try {
|
|
106
|
+
group = await readGroup(groupId);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
throw new Error(`Failed to read group definition for ${groupId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const resolvedCwd = await validateWorkingDirectory(group.cwd);
|
|
113
|
+
group.cwd = resolvedCwd;
|
|
114
|
+
const now = new Date().toISOString();
|
|
115
|
+
group.status = "running";
|
|
116
|
+
group.coordinatorPid = process.pid;
|
|
117
|
+
group.runnerPid = process.pid;
|
|
118
|
+
if (!group.startedAt) {
|
|
119
|
+
group.startedAt = now;
|
|
120
|
+
}
|
|
121
|
+
group.updatedAt = now;
|
|
122
|
+
await writeGroup(group);
|
|
123
|
+
const taskRecordMap = new Map();
|
|
124
|
+
const completedTaskIds = new Set();
|
|
125
|
+
const failedTaskIds = new Set();
|
|
126
|
+
const activeJobs = new Map();
|
|
127
|
+
for (const t of group.tasks) {
|
|
128
|
+
taskRecordMap.set(t.id, t);
|
|
129
|
+
if (t.status === "completed") {
|
|
130
|
+
completedTaskIds.add(t.id);
|
|
131
|
+
}
|
|
132
|
+
else if (t.status === "failed" || t.status === "blocked" || t.status === "cancelled" || t.status === "timed_out") {
|
|
133
|
+
failedTaskIds.add(t.id);
|
|
134
|
+
}
|
|
135
|
+
else if (t.status === "running" && t.jobId) {
|
|
136
|
+
activeJobs.set(t.jobId, { taskId: t.id, jobId: t.jobId });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Refresh ready tasks initially
|
|
140
|
+
for (const pendingTask of group.tasks) {
|
|
141
|
+
if (pendingTask.status === "pending") {
|
|
142
|
+
const allDepsCompleted = (pendingTask.dependsOn || []).every((dep) => completedTaskIds.has(dep));
|
|
143
|
+
if (allDepsCompleted) {
|
|
144
|
+
pendingTask.status = "ready";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
await writeGroup(group);
|
|
149
|
+
const groupDeadline = new Date(group.createdAt).getTime() + group.groupTimeoutMinutes * 60_000;
|
|
150
|
+
let groupTerminatedStatus;
|
|
151
|
+
const blockDownstream = (failedId) => {
|
|
152
|
+
const queue = [failedId];
|
|
153
|
+
while (queue.length > 0) {
|
|
154
|
+
const currId = queue.shift();
|
|
155
|
+
for (const t of group.tasks) {
|
|
156
|
+
if (t.status === "pending" || t.status === "ready") {
|
|
157
|
+
if (t.dependsOn && t.dependsOn.includes(currId)) {
|
|
158
|
+
t.status = "blocked";
|
|
159
|
+
t.error = `Dependency failed: ${currId}`;
|
|
160
|
+
queue.push(t.id);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
while (true) {
|
|
167
|
+
// 1. Check for group cancellation request
|
|
168
|
+
const isCancelled = await hasGroupCancellationRequest(groupId);
|
|
169
|
+
if (isCancelled) {
|
|
170
|
+
const cancelReq = await readGroupCancellationRequest(groupId);
|
|
171
|
+
groupTerminatedStatus = "cancelled";
|
|
172
|
+
group.cancelRequestedAt = cancelReq?.requestedAt || new Date().toISOString();
|
|
173
|
+
group.cancelReason = cancelReq?.reason || "Group cancelled";
|
|
174
|
+
for (const { jobId } of activeJobs.values()) {
|
|
175
|
+
try {
|
|
176
|
+
await writeCancellationRequest(jobId, cancelReq?.reason || "Group cancelled");
|
|
177
|
+
}
|
|
178
|
+
catch { }
|
|
179
|
+
}
|
|
180
|
+
for (const t of group.tasks) {
|
|
181
|
+
if (t.status === "pending" || t.status === "ready") {
|
|
182
|
+
t.status = "cancelled";
|
|
183
|
+
t.error = "Group execution cancelled";
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const cancelGraceDeadline = Date.now() + 5_000;
|
|
187
|
+
while (activeJobs.size > 0 && Date.now() < cancelGraceDeadline) {
|
|
188
|
+
await sleep(150);
|
|
189
|
+
for (const [jobId, { taskId }] of Array.from(activeJobs.entries())) {
|
|
190
|
+
try {
|
|
191
|
+
const job = await readJob(jobId);
|
|
192
|
+
if (TERMINAL_STATUSES.has(job.status)) {
|
|
193
|
+
activeJobs.delete(jobId);
|
|
194
|
+
const task = taskRecordMap.get(taskId);
|
|
195
|
+
task.status = "cancelled";
|
|
196
|
+
task.completedAt = new Date().toISOString();
|
|
197
|
+
task.error = job.error || "Task cancelled";
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch { }
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
for (const { taskId } of activeJobs.values()) {
|
|
204
|
+
const task = taskRecordMap.get(taskId);
|
|
205
|
+
task.status = "cancelled";
|
|
206
|
+
task.completedAt = new Date().toISOString();
|
|
207
|
+
task.error = "Group cancelled";
|
|
208
|
+
}
|
|
209
|
+
activeJobs.clear();
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
// 2. Check for group timeout
|
|
213
|
+
if (Date.now() >= groupDeadline) {
|
|
214
|
+
groupTerminatedStatus = "timed_out";
|
|
215
|
+
for (const { jobId } of activeJobs.values()) {
|
|
216
|
+
try {
|
|
217
|
+
await writeCancellationRequest(jobId, "Group timeout exceeded");
|
|
218
|
+
}
|
|
219
|
+
catch { }
|
|
220
|
+
}
|
|
221
|
+
for (const t of group.tasks) {
|
|
222
|
+
if (t.status === "pending" || t.status === "ready") {
|
|
223
|
+
t.status = "timed_out";
|
|
224
|
+
t.error = "Group timeout exceeded before task could start";
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const waitGraceDeadline = Date.now() + 5_000;
|
|
228
|
+
while (activeJobs.size > 0 && Date.now() < waitGraceDeadline) {
|
|
229
|
+
await sleep(150);
|
|
230
|
+
for (const [jobId, { taskId }] of Array.from(activeJobs.entries())) {
|
|
231
|
+
try {
|
|
232
|
+
const job = await readJob(jobId);
|
|
233
|
+
if (TERMINAL_STATUSES.has(job.status)) {
|
|
234
|
+
activeJobs.delete(jobId);
|
|
235
|
+
const task = taskRecordMap.get(taskId);
|
|
236
|
+
task.status = "timed_out";
|
|
237
|
+
task.completedAt = new Date().toISOString();
|
|
238
|
+
task.error = "Group timeout exceeded";
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch { }
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
for (const { taskId } of activeJobs.values()) {
|
|
245
|
+
const task = taskRecordMap.get(taskId);
|
|
246
|
+
task.status = "timed_out";
|
|
247
|
+
task.completedAt = new Date().toISOString();
|
|
248
|
+
task.error = "Group timeout exceeded";
|
|
249
|
+
}
|
|
250
|
+
activeJobs.clear();
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
// 3. Poll existing active jobs first to release completed slots
|
|
254
|
+
for (const [jobId, { taskId }] of Array.from(activeJobs.entries())) {
|
|
255
|
+
try {
|
|
256
|
+
const job = await readJob(jobId);
|
|
257
|
+
if (TERMINAL_STATUSES.has(job.status)) {
|
|
258
|
+
activeJobs.delete(jobId);
|
|
259
|
+
const task = taskRecordMap.get(taskId);
|
|
260
|
+
task.completedAt = new Date().toISOString();
|
|
261
|
+
if (job.status === "completed") {
|
|
262
|
+
task.status = "completed";
|
|
263
|
+
completedTaskIds.add(task.id);
|
|
264
|
+
for (const pendingTask of group.tasks) {
|
|
265
|
+
if (pendingTask.status === "pending") {
|
|
266
|
+
const allDepsCompleted = (pendingTask.dependsOn || []).every((dep) => completedTaskIds.has(dep));
|
|
267
|
+
if (allDepsCompleted) {
|
|
268
|
+
pendingTask.status = "ready";
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
task.status = (job.status === "cancelled" || job.status === "timed_out" ? job.status : "failed");
|
|
275
|
+
task.error = job.error || `Task ended with status ${job.status}`;
|
|
276
|
+
failedTaskIds.add(task.id);
|
|
277
|
+
blockDownstream(task.id);
|
|
278
|
+
}
|
|
279
|
+
await writeGroup(group);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch { }
|
|
283
|
+
}
|
|
284
|
+
// 4. Dispatch ready tasks up to maxParallel
|
|
285
|
+
while (activeJobs.size < group.maxParallel) {
|
|
286
|
+
const nextReady = group.tasks.find((t) => t.status === "ready");
|
|
287
|
+
if (!nextReady)
|
|
288
|
+
break;
|
|
289
|
+
nextReady.status = "running";
|
|
290
|
+
nextReady.startedAt = new Date().toISOString();
|
|
291
|
+
try {
|
|
292
|
+
const { job } = await createAndStartJob({
|
|
293
|
+
goal: nextReady.goal,
|
|
294
|
+
cwd: group.cwd,
|
|
295
|
+
acceptance: nextReady.acceptance,
|
|
296
|
+
supervisor_brief: group.supervisorBrief,
|
|
297
|
+
timeout_minutes: nextReady.timeoutMinutes,
|
|
298
|
+
max_attempts: nextReady.maxAttempts,
|
|
299
|
+
groupId: group.id,
|
|
300
|
+
groupTaskId: nextReady.id,
|
|
301
|
+
access: nextReady.access,
|
|
302
|
+
ownership: nextReady.ownership,
|
|
303
|
+
});
|
|
304
|
+
nextReady.jobId = job.id;
|
|
305
|
+
activeJobs.set(job.id, { taskId: nextReady.id, jobId: job.id });
|
|
306
|
+
await writeGroup(group);
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
nextReady.status = "failed";
|
|
310
|
+
nextReady.completedAt = new Date().toISOString();
|
|
311
|
+
nextReady.error = err instanceof Error ? err.message : String(err);
|
|
312
|
+
failedTaskIds.add(nextReady.id);
|
|
313
|
+
blockDownstream(nextReady.id);
|
|
314
|
+
await writeGroup(group);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// 5. Check if all tasks have settled or deadlock
|
|
318
|
+
if (activeJobs.size === 0) {
|
|
319
|
+
const hasReady = group.tasks.some((t) => t.status === "ready");
|
|
320
|
+
if (!hasReady) {
|
|
321
|
+
const remainingPending = group.tasks.filter((t) => t.status === "pending");
|
|
322
|
+
if (remainingPending.length > 0) {
|
|
323
|
+
for (const t of remainingPending) {
|
|
324
|
+
t.status = "blocked";
|
|
325
|
+
t.error = "Deadlock or unsatisfied dependencies prevented execution";
|
|
326
|
+
}
|
|
327
|
+
await writeGroup(group);
|
|
328
|
+
}
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
await sleep(150);
|
|
333
|
+
}
|
|
334
|
+
// 6. Aggregate results
|
|
335
|
+
const totalTasks = group.tasks.length;
|
|
336
|
+
let completedCount = 0;
|
|
337
|
+
let failedCount = 0;
|
|
338
|
+
let cancelledCount = 0;
|
|
339
|
+
let blockedCount = 0;
|
|
340
|
+
let timedOutCount = 0;
|
|
341
|
+
for (const t of group.tasks) {
|
|
342
|
+
if (t.status === "completed")
|
|
343
|
+
completedCount++;
|
|
344
|
+
else if (t.status === "failed")
|
|
345
|
+
failedCount++;
|
|
346
|
+
else if (t.status === "cancelled")
|
|
347
|
+
cancelledCount++;
|
|
348
|
+
else if (t.status === "blocked")
|
|
349
|
+
blockedCount++;
|
|
350
|
+
else if (t.status === "timed_out")
|
|
351
|
+
timedOutCount++;
|
|
352
|
+
}
|
|
353
|
+
let finalGroupStatus;
|
|
354
|
+
if (groupTerminatedStatus) {
|
|
355
|
+
finalGroupStatus = groupTerminatedStatus;
|
|
356
|
+
}
|
|
357
|
+
else if (completedCount === totalTasks) {
|
|
358
|
+
finalGroupStatus = "completed";
|
|
359
|
+
}
|
|
360
|
+
else if (completedCount === 0) {
|
|
361
|
+
finalGroupStatus = "failed";
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
finalGroupStatus = "partial";
|
|
365
|
+
}
|
|
366
|
+
group.status = finalGroupStatus;
|
|
367
|
+
group.completedAt = new Date().toISOString();
|
|
368
|
+
group.updatedAt = new Date().toISOString();
|
|
369
|
+
group.summary = `Batch execution ${group.id} finished with status '${finalGroupStatus}': ${completedCount}/${totalTasks} tasks completed, ${failedCount} failed, ${blockedCount} blocked, ${cancelledCount} cancelled, ${timedOutCount} timed out.`;
|
|
370
|
+
if (finalGroupStatus === "cancelled") {
|
|
371
|
+
await clearGroupCancellationRequest(group.id).catch(() => { });
|
|
372
|
+
}
|
|
373
|
+
await writeGroup(group);
|
|
374
|
+
return group;
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
const errorMessage = error instanceof Error ? `${error.message}\n${error.stack}` : String(error);
|
|
378
|
+
try {
|
|
379
|
+
const latest = await readGroup(groupId).catch(() => group);
|
|
380
|
+
latest.status = "failed";
|
|
381
|
+
latest.error = errorMessage;
|
|
382
|
+
latest.completedAt = new Date().toISOString();
|
|
383
|
+
latest.updatedAt = new Date().toISOString();
|
|
384
|
+
await writeGroup(latest);
|
|
385
|
+
}
|
|
386
|
+
catch { }
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=group-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-orchestrator.js","sourceRoot":"","sources":["../src/group-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { runGroupOrchestrator } from "./group-orchestrator.js";
|
|
2
|
+
async function main() {
|
|
3
|
+
const target = process.argv[2];
|
|
4
|
+
if (!target) {
|
|
5
|
+
throw new Error("group-runner requires a group.json path or groupId");
|
|
6
|
+
}
|
|
7
|
+
await runGroupOrchestrator(target);
|
|
8
|
+
}
|
|
9
|
+
main().catch((error) => {
|
|
10
|
+
console.error("group-runner fatal error:", error);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=group-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group-runner.js","sourceRoot":"","sources":["../src/group-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|