codex-orchestrator 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.
Files changed (122) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/dist/src/cli.d.ts +3 -0
  4. package/dist/src/cli.d.ts.map +1 -0
  5. package/dist/src/cli.js +253 -0
  6. package/dist/src/cli.js.map +1 -0
  7. package/dist/src/codex/command-adapter.d.ts +27 -0
  8. package/dist/src/codex/command-adapter.d.ts.map +1 -0
  9. package/dist/src/codex/command-adapter.js +49 -0
  10. package/dist/src/codex/command-adapter.js.map +1 -0
  11. package/dist/src/config/constants.d.ts +6 -0
  12. package/dist/src/config/constants.d.ts.map +1 -0
  13. package/dist/src/config/constants.js +13 -0
  14. package/dist/src/config/constants.js.map +1 -0
  15. package/dist/src/config/schema.d.ts +87 -0
  16. package/dist/src/config/schema.d.ts.map +1 -0
  17. package/dist/src/config/schema.js +180 -0
  18. package/dist/src/config/schema.js.map +1 -0
  19. package/dist/src/git/worktree.d.ts +50 -0
  20. package/dist/src/git/worktree.d.ts.map +1 -0
  21. package/dist/src/git/worktree.js +139 -0
  22. package/dist/src/git/worktree.js.map +1 -0
  23. package/dist/src/github/gh-cli.d.ts +11 -0
  24. package/dist/src/github/gh-cli.d.ts.map +1 -0
  25. package/dist/src/github/gh-cli.js +28 -0
  26. package/dist/src/github/gh-cli.js.map +1 -0
  27. package/dist/src/github/gh-issue-adapter.d.ts +15 -0
  28. package/dist/src/github/gh-issue-adapter.d.ts.map +1 -0
  29. package/dist/src/github/gh-issue-adapter.js +193 -0
  30. package/dist/src/github/gh-issue-adapter.js.map +1 -0
  31. package/dist/src/github/gh-pull-request-adapter.d.ts +9 -0
  32. package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -0
  33. package/dist/src/github/gh-pull-request-adapter.js +39 -0
  34. package/dist/src/github/gh-pull-request-adapter.js.map +1 -0
  35. package/dist/src/github/issues.d.ts +80 -0
  36. package/dist/src/github/issues.d.ts.map +1 -0
  37. package/dist/src/github/issues.js +122 -0
  38. package/dist/src/github/issues.js.map +1 -0
  39. package/dist/src/github/pull-requests.d.ts +24 -0
  40. package/dist/src/github/pull-requests.d.ts.map +1 -0
  41. package/dist/src/github/pull-requests.js +21 -0
  42. package/dist/src/github/pull-requests.js.map +1 -0
  43. package/dist/src/index.d.ts +31 -0
  44. package/dist/src/index.d.ts.map +1 -0
  45. package/dist/src/index.js +17 -0
  46. package/dist/src/index.js.map +1 -0
  47. package/dist/src/package-info.d.ts +6 -0
  48. package/dist/src/package-info.d.ts.map +1 -0
  49. package/dist/src/package-info.js +13 -0
  50. package/dist/src/package-info.js.map +1 -0
  51. package/dist/src/process/command.d.ts +15 -0
  52. package/dist/src/process/command.d.ts.map +1 -0
  53. package/dist/src/process/command.js +34 -0
  54. package/dist/src/process/command.js.map +1 -0
  55. package/dist/src/runner/command-utils.d.ts +5 -0
  56. package/dist/src/runner/command-utils.d.ts.map +1 -0
  57. package/dist/src/runner/command-utils.js +19 -0
  58. package/dist/src/runner/command-utils.js.map +1 -0
  59. package/dist/src/runner/issue-state-machine.d.ts +39 -0
  60. package/dist/src/runner/issue-state-machine.d.ts.map +1 -0
  61. package/dist/src/runner/issue-state-machine.js +119 -0
  62. package/dist/src/runner/issue-state-machine.js.map +1 -0
  63. package/dist/src/runner/issue-tree.d.ts +62 -0
  64. package/dist/src/runner/issue-tree.d.ts.map +1 -0
  65. package/dist/src/runner/issue-tree.js +376 -0
  66. package/dist/src/runner/issue-tree.js.map +1 -0
  67. package/dist/src/runner/local-state.d.ts +31 -0
  68. package/dist/src/runner/local-state.d.ts.map +1 -0
  69. package/dist/src/runner/local-state.js +125 -0
  70. package/dist/src/runner/local-state.js.map +1 -0
  71. package/dist/src/runner/plan-auto-command.d.ts +30 -0
  72. package/dist/src/runner/plan-auto-command.d.ts.map +1 -0
  73. package/dist/src/runner/plan-auto-command.js +611 -0
  74. package/dist/src/runner/plan-auto-command.js.map +1 -0
  75. package/dist/src/runner/prompt.d.ts +108 -0
  76. package/dist/src/runner/prompt.d.ts.map +1 -0
  77. package/dist/src/runner/prompt.js +322 -0
  78. package/dist/src/runner/prompt.js.map +1 -0
  79. package/dist/src/runner/recovery.d.ts +24 -0
  80. package/dist/src/runner/recovery.d.ts.map +1 -0
  81. package/dist/src/runner/recovery.js +62 -0
  82. package/dist/src/runner/recovery.js.map +1 -0
  83. package/dist/src/runner/safety.d.ts +14 -0
  84. package/dist/src/runner/safety.d.ts.map +1 -0
  85. package/dist/src/runner/safety.js +46 -0
  86. package/dist/src/runner/safety.js.map +1 -0
  87. package/dist/src/runner/scoped-auto-command.d.ts +29 -0
  88. package/dist/src/runner/scoped-auto-command.d.ts.map +1 -0
  89. package/dist/src/runner/scoped-auto-command.js +262 -0
  90. package/dist/src/runner/scoped-auto-command.js.map +1 -0
  91. package/dist/src/runner/status-command.d.ts +17 -0
  92. package/dist/src/runner/status-command.d.ts.map +1 -0
  93. package/dist/src/runner/status-command.js +72 -0
  94. package/dist/src/runner/status-command.js.map +1 -0
  95. package/dist/src/setup/github-label-adapter.d.ts +13 -0
  96. package/dist/src/setup/github-label-adapter.d.ts.map +1 -0
  97. package/dist/src/setup/github-label-adapter.js +28 -0
  98. package/dist/src/setup/github-label-adapter.js.map +1 -0
  99. package/dist/src/setup/labels.d.ts +27 -0
  100. package/dist/src/setup/labels.d.ts.map +1 -0
  101. package/dist/src/setup/labels.js +42 -0
  102. package/dist/src/setup/labels.js.map +1 -0
  103. package/dist/src/setup/project-config.d.ts +15 -0
  104. package/dist/src/setup/project-config.d.ts.map +1 -0
  105. package/dist/src/setup/project-config.js +124 -0
  106. package/dist/src/setup/project-config.js.map +1 -0
  107. package/dist/src/setup/setup-command.d.ts +22 -0
  108. package/dist/src/setup/setup-command.d.ts.map +1 -0
  109. package/dist/src/setup/setup-command.js +104 -0
  110. package/dist/src/setup/setup-command.js.map +1 -0
  111. package/dist/src/setup/workflows.d.ts +11 -0
  112. package/dist/src/setup/workflows.d.ts.map +1 -0
  113. package/dist/src/setup/workflows.js +60 -0
  114. package/dist/src/setup/workflows.js.map +1 -0
  115. package/package.json +45 -0
  116. package/prompts/setup-skill.md +11 -0
  117. package/prompts/workflows/breakdown-review.md +4 -0
  118. package/prompts/workflows/issue-breakdown.md +4 -0
  119. package/prompts/workflows/issue-tree-orchestration.md +4 -0
  120. package/prompts/workflows/prd.md +4 -0
  121. package/prompts/workflows/scoped-implementation.md +4 -0
  122. package/prompts/workflows/triage.md +4 -0
@@ -0,0 +1,611 @@
1
+ import { mkdir, readFile } from 'node:fs/promises';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ import { CodexCommandAdapter } from '../codex/command-adapter.js';
4
+ import { GitMergeConflictError, GitWorktreeManager, renderBranchTemplate } from '../git/worktree.js';
5
+ import { GhCliIssueAdapter } from '../github/gh-issue-adapter.js';
6
+ import { GhCliPullRequestAdapter } from '../github/gh-pull-request-adapter.js';
7
+ import { defaultShellCommandExecutor } from '../process/command.js';
8
+ import { bulletList, formatSessionTimestamp, readRunnerConfig } from './command-utils.js';
9
+ import { claimIssue, discoverIssueWork } from './issue-state-machine.js';
10
+ import { collectExecutableChildBatches, ensureAutonomousChildBody, isAutonomousChildOfParent, parseAutonomousChildMetadata, topologicalPlanNodes, } from './issue-tree.js';
11
+ import { RunnerStateStore } from './local-state.js';
12
+ import { buildIssueTreeChildPrompt, buildPlanAutoPrompt, readScopedCompletionReport, readPlanAutoCompletionReport, sessionPromptPath, sessionReportPath, writeDurablePrompt, } from './prompt.js';
13
+ import { validateChangedPaths, validateCompletionReportSafety, validateNoAgentOwnedGitPublication, } from './safety.js';
14
+ export async function runPlanAutoCommand(options) {
15
+ const targetRoot = resolve(options.targetRoot);
16
+ const now = options.now ?? new Date();
17
+ const config = await readRunnerConfig(targetRoot);
18
+ const issueAdapter = options.issueAdapter ?? new GhCliIssueAdapter(config.github.owner, config.github.repo);
19
+ const pullRequestAdapter = options.pullRequestAdapter ?? new GhCliPullRequestAdapter(config.github.owner, config.github.repo);
20
+ const git = options.git ?? new GitWorktreeManager();
21
+ const shellExecutor = options.shellExecutor ?? defaultShellCommandExecutor;
22
+ const codexAdapter = options.codexAdapter ?? new CodexCommandAdapter(config);
23
+ const parentIssue = await issueAdapter.getIssue(options.issueNumber);
24
+ if (!parentIssue) {
25
+ throw new Error(`Issue #${options.issueNumber} was not found`);
26
+ }
27
+ const decision = discoverIssueWork([parentIssue], config)[0];
28
+ if (!decision || decision.kind !== 'eligible' || decision.mode !== 'plan-parent') {
29
+ const reason = decision?.kind === 'skipped' ? decision.reason : 'not agent:plan-auto';
30
+ throw new Error(`Issue #${options.issueNumber} is not eligible for agent:plan-auto planning: ${reason}`);
31
+ }
32
+ const workflowPrompts = await readPlanWorkflowPrompts(targetRoot, config);
33
+ const issueTreeWorkflowPrompt = await readIssueTreeWorkflowPrompt(targetRoot, config);
34
+ const branchName = renderBranchTemplate(config.branches.issueTree, { parentIssueNumber: options.issueNumber });
35
+ const worktreePath = join(targetRoot, config.runner.workspaceRoot, `tree-${options.issueNumber}`);
36
+ let promptPath = '';
37
+ let reportPath = '';
38
+ const childIssues = [];
39
+ let pullRequest;
40
+ await claimIssue(issueAdapter, config, options.issueNumber, 'plan-parent', now);
41
+ try {
42
+ await git.createIssueWorktree({
43
+ targetRoot,
44
+ workspacePath: worktreePath,
45
+ branchName,
46
+ baseBranch: config.branches.base,
47
+ });
48
+ const sessionId = `plan-${options.issueNumber}-${formatSessionTimestamp(now)}`;
49
+ promptPath = sessionPromptPath({ targetRoot, config, issueNumber: options.issueNumber, sessionId });
50
+ reportPath = sessionReportPath({ targetRoot, config, issueNumber: options.issueNumber, sessionId });
51
+ const isolatedHomePath = join(targetRoot, config.runner.stateDir, 'codex-home', sessionId);
52
+ await mkdir(dirname(reportPath), { recursive: true });
53
+ await mkdir(isolatedHomePath, { recursive: true });
54
+ const promptText = buildPlanAutoPrompt({
55
+ parentIssue,
56
+ config,
57
+ prompts: workflowPrompts,
58
+ promptPath,
59
+ reportPath,
60
+ branchName,
61
+ worktreePath,
62
+ });
63
+ await writeDurablePrompt({
64
+ targetRoot,
65
+ config,
66
+ issueNumber: options.issueNumber,
67
+ sessionId,
68
+ promptText,
69
+ });
70
+ const store = new RunnerStateStore(targetRoot, config);
71
+ await store.upsertRun({
72
+ issueNumber: options.issueNumber,
73
+ mode: 'plan-parent',
74
+ workspacePath: worktreePath,
75
+ sessionId,
76
+ branchName,
77
+ promptPath,
78
+ reportPath,
79
+ retryCount: 0,
80
+ createdAt: now.toISOString(),
81
+ updatedAt: now.toISOString(),
82
+ });
83
+ const beforeHead = await git.getHead(worktreePath);
84
+ const codexResult = await codexAdapter.run({
85
+ targetRoot,
86
+ config,
87
+ worktreePath,
88
+ promptPath,
89
+ promptText,
90
+ reportPath,
91
+ isolatedHomePath,
92
+ issueNumber: options.issueNumber,
93
+ sessionId,
94
+ branchName,
95
+ });
96
+ const afterHead = await git.getHead(worktreePath);
97
+ const base = baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues);
98
+ if (beforeHead !== afterHead) {
99
+ return finishPlanBlocked(issueAdapter, config, base, ['Planning session changed git HEAD; planning must not commit.'], []);
100
+ }
101
+ const changedFiles = await git.listChangedFiles(worktreePath);
102
+ if (changedFiles.length > 0) {
103
+ return finishPlanBlocked(issueAdapter, config, base, ['Planning session changed repository files; planning must return structured output only.'], []);
104
+ }
105
+ if (codexResult.exitCode !== 0) {
106
+ return finishPlanBlocked(issueAdapter, config, base, [`Codex exited with code ${codexResult.exitCode}: ${codexResult.stderr || codexResult.stdout}`], []);
107
+ }
108
+ const reportRead = await readPlanReport(reportPath);
109
+ if (reportRead.kind === 'missing') {
110
+ return finishPlanBlocked(issueAdapter, config, base, ['Codex did not write CODEX_ORCHESTRATOR_REPORT_FILE; runner cannot prove planning graph.'], []);
111
+ }
112
+ const report = reportRead.report;
113
+ await issueAdapter.updateIssue(options.issueNumber, {
114
+ title: report.parent.title,
115
+ body: report.parent.body,
116
+ });
117
+ for (const node of topologicalPlanNodes(report.graph)) {
118
+ const persisted = await persistChildNode(issueAdapter, config, options.issueNumber, node);
119
+ childIssues.push(persisted);
120
+ }
121
+ const childNodes = await readExecutableChildren(issueAdapter, config, options.issueNumber, childIssues);
122
+ const batches = collectExecutableChildBatches(childNodes, config);
123
+ if (!batches.ok) {
124
+ return finishPlanBlocked(issueAdapter, config, base, batches.errors, childIssues);
125
+ }
126
+ const executionResults = [];
127
+ for (const batch of batches.batches) {
128
+ const settled = await Promise.allSettled(batch.map((child) => executeChild({
129
+ targetRoot,
130
+ config,
131
+ parentIssue,
132
+ child,
133
+ dependencyIssues: dependencyIssuesFor(child, childNodes),
134
+ parentBranchName: branchName,
135
+ issueAdapter,
136
+ git,
137
+ codexAdapter,
138
+ shellExecutor,
139
+ issueTreeWorkflowPrompt,
140
+ now,
141
+ })));
142
+ const failures = [];
143
+ for (const [index, result] of settled.entries()) {
144
+ if (result.status === 'fulfilled') {
145
+ continue;
146
+ }
147
+ failures.push({
148
+ child: batch[index],
149
+ message: result.reason instanceof Error ? result.reason.message : 'child execution failed',
150
+ });
151
+ }
152
+ if (failures.length > 0) {
153
+ const successful = settled.flatMap((result) => result.status === 'fulfilled' ? [result.value] : []);
154
+ await blockFailedBatch(issueAdapter, config, options.issueNumber, failures, successful);
155
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [
156
+ 'Child batch failed before merge; no child from the failed batch was merged, pushed, or published.',
157
+ ...failures.map((failure) => failure.child ? `#${failure.child.issue.number}: ${failure.message}` : failure.message),
158
+ ], childIssues);
159
+ }
160
+ const batchResults = settled.flatMap((result) => result.status === 'fulfilled' ? [result.value] : []);
161
+ const orderedBatchResults = batchResults.sort((left, right) => left.child.issue.number - right.child.issue.number);
162
+ for (const childResult of orderedBatchResults) {
163
+ try {
164
+ await git.mergeBranch({
165
+ worktreePath,
166
+ branchName: childResult.branchName,
167
+ message: `Codex: merge issue #${childResult.child.issue.number} into parent #${options.issueNumber}`,
168
+ });
169
+ }
170
+ catch (error) {
171
+ if (error instanceof GitMergeConflictError) {
172
+ await handleMergeConflict(git, issueAdapter, config, options.issueNumber, error, childResult, orderedBatchResults);
173
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [
174
+ `Merge conflict while merging #${childResult.child.issue.number} from ${childResult.branchName}.`,
175
+ error.stderr || error.stdout,
176
+ ], childIssues);
177
+ }
178
+ throw error;
179
+ }
180
+ }
181
+ for (const childResult of orderedBatchResults) {
182
+ await git.removeWorktree({ targetRoot, worktreePath: childResult.worktreePath });
183
+ await issueAdapter.removeLabels(childResult.child.issue.number, [config.github.labels.running.name]);
184
+ await issueAdapter.addLabels(childResult.child.issue.number, [config.github.labels.review.name]);
185
+ await issueAdapter.postComment(childResult.child.issue.number, buildChildReviewReport(options.issueNumber, childResult));
186
+ await store.removeRun(childResult.child.issue.number);
187
+ executionResults.push(childResult);
188
+ }
189
+ }
190
+ const finalValidation = await runConfiguredChecks(config, worktreePath, shellExecutor, []);
191
+ await git.pushBranch({ worktreePath, branchName });
192
+ pullRequest = await pullRequestAdapter.createDraftPullRequest({
193
+ title: renderParentTemplate(config.pullRequests.issueTreeTitle, options.issueNumber),
194
+ body: buildIssueTreePullRequestBody(options.issueNumber, childIssues, executionResults, finalValidation),
195
+ headBranch: branchName,
196
+ baseBranch: config.branches.base,
197
+ });
198
+ const reportComment = buildIssueTreeReviewReport(options.issueNumber, pullRequest, batches.batches, executionResults, finalValidation);
199
+ await issueAdapter.removeLabels(options.issueNumber, [config.github.labels.running.name]);
200
+ await issueAdapter.addLabels(options.issueNumber, [config.github.labels.review.name]);
201
+ await issueAdapter.postComment(options.issueNumber, reportComment);
202
+ await store.removeRun(options.issueNumber);
203
+ return {
204
+ ...baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues),
205
+ status: 'review-ready',
206
+ pullRequest,
207
+ reportComment,
208
+ };
209
+ }
210
+ catch (error) {
211
+ const message = error instanceof Error ? error.message : 'plan-auto planning failed';
212
+ if (pullRequest) {
213
+ throw new Error(`Issue-tree execution failed after draft PR creation (${pullRequest.url}); not marking parent blocked: ${message}`);
214
+ }
215
+ return finishPlanBlocked(issueAdapter, config, baseResult(options.issueNumber, branchName, worktreePath, promptPath, reportPath, childIssues), [message], childIssues);
216
+ }
217
+ }
218
+ async function persistChildNode(issueAdapter, config, parentIssueNumber, node) {
219
+ const body = buildChildBody(node, parentIssueNumber);
220
+ const childLabel = config.github.labels.child.name;
221
+ const autoLabel = config.github.labels.auto.name;
222
+ let issue;
223
+ if (node.issueNumber !== undefined) {
224
+ const existing = await issueAdapter.getIssue(node.issueNumber);
225
+ if (!existing) {
226
+ throw new Error(`Existing issue #${node.issueNumber} was not found`);
227
+ }
228
+ if (!isAutonomousChildOfParent(existing, config, parentIssueNumber)) {
229
+ throw new Error(`Existing issue #${node.issueNumber} is not an autonomous child of #${parentIssueNumber}; refusing to update arbitrary issue.`);
230
+ }
231
+ issue = await issueAdapter.updateIssue(node.issueNumber, {
232
+ title: node.title,
233
+ body,
234
+ addLabels: [childLabel],
235
+ removeLabels: node.afkHitl === 'hitl' ? [autoLabel] : undefined,
236
+ });
237
+ }
238
+ else {
239
+ issue = await issueAdapter.createIssue({
240
+ title: node.title,
241
+ body,
242
+ labels: [childLabel],
243
+ });
244
+ }
245
+ if (!isAutonomousChildOfParent(issue, config, parentIssueNumber)) {
246
+ throw new Error(`Child issue #${issue.number} was not persisted with the autonomous marker for #${parentIssueNumber}.`);
247
+ }
248
+ if (node.afkHitl === 'afk') {
249
+ issue = await issueAdapter.updateIssue(issue.number, { addLabels: [autoLabel] });
250
+ if (!isAutonomousChildOfParent(issue, config, parentIssueNumber)) {
251
+ throw new Error(`Child issue #${issue.number} lost the autonomous marker for #${parentIssueNumber} while enabling agent:auto.`);
252
+ }
253
+ }
254
+ return issue;
255
+ }
256
+ async function readPlanReport(reportPath) {
257
+ try {
258
+ return await readPlanAutoCompletionReport(reportPath);
259
+ }
260
+ catch (error) {
261
+ const message = error instanceof Error ? error.message : 'Invalid plan-auto completion report';
262
+ throw new Error(message);
263
+ }
264
+ }
265
+ async function readPlanWorkflowPrompts(targetRoot, config) {
266
+ return {
267
+ prd: await readPlanWorkflowPrompt(targetRoot, config.workflows.prd.promptPath),
268
+ issueBreakdown: await readPlanWorkflowPrompt(targetRoot, config.workflows.issueBreakdown.promptPath),
269
+ breakdownReview: await readPlanWorkflowPrompt(targetRoot, config.workflows.breakdownReview.promptPath),
270
+ triage: await readPlanWorkflowPrompt(targetRoot, config.workflows.triage.promptPath),
271
+ };
272
+ }
273
+ async function readPlanWorkflowPrompt(targetRoot, promptPath) {
274
+ return readWorkflowPrompt(targetRoot, promptPath, 'Plan-auto workflow prompt');
275
+ }
276
+ async function readIssueTreeWorkflowPrompt(targetRoot, config) {
277
+ return readWorkflowPrompt(targetRoot, config.workflows.issueTreeOrchestration.promptPath, 'Issue-tree orchestration workflow prompt');
278
+ }
279
+ async function readWorkflowPrompt(targetRoot, promptPath, promptName) {
280
+ const absolutePath = promptPath ? join(targetRoot, promptPath) : 'undefined';
281
+ try {
282
+ return await readFile(absolutePath, 'utf8');
283
+ }
284
+ catch (error) {
285
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
286
+ throw new Error(`${promptName} not found at ${absolutePath}`);
287
+ }
288
+ throw error;
289
+ }
290
+ }
291
+ async function readExecutableChildren(issueAdapter, config, parentIssueNumber, childIssues) {
292
+ const nodes = [];
293
+ const errors = [];
294
+ for (const child of childIssues) {
295
+ const current = await issueAdapter.getIssue(child.number);
296
+ if (!current) {
297
+ errors.push(`Child issue #${child.number} was not found during execution readback`);
298
+ continue;
299
+ }
300
+ const parsed = parseAutonomousChildMetadata(current, config, parentIssueNumber);
301
+ if (!parsed.ok) {
302
+ errors.push(...parsed.errors);
303
+ continue;
304
+ }
305
+ nodes.push(parsed.node);
306
+ }
307
+ if (errors.length > 0) {
308
+ throw new Error(errors.join('; '));
309
+ }
310
+ return nodes;
311
+ }
312
+ async function executeChild(input) {
313
+ const childIssueNumber = input.child.issue.number;
314
+ const branchName = `codex/tree-${input.parentIssue.number}-issue-${childIssueNumber}`;
315
+ const worktreePath = join(input.targetRoot, input.config.runner.workspaceRoot, `tree-${input.parentIssue.number}-issue-${childIssueNumber}`);
316
+ const sessionId = `tree-${input.parentIssue.number}-issue-${childIssueNumber}-${formatSessionTimestamp(input.now)}`;
317
+ const promptPath = sessionPromptPath({
318
+ targetRoot: input.targetRoot,
319
+ config: input.config,
320
+ issueNumber: childIssueNumber,
321
+ sessionId,
322
+ });
323
+ const reportPath = sessionReportPath({
324
+ targetRoot: input.targetRoot,
325
+ config: input.config,
326
+ issueNumber: childIssueNumber,
327
+ sessionId,
328
+ });
329
+ const isolatedHomePath = join(input.targetRoot, input.config.runner.stateDir, 'codex-home', sessionId);
330
+ const store = new RunnerStateStore(input.targetRoot, input.config);
331
+ await input.git.createIssueWorktree({
332
+ targetRoot: input.targetRoot,
333
+ workspacePath: worktreePath,
334
+ branchName,
335
+ baseBranch: input.parentBranchName,
336
+ });
337
+ await input.issueAdapter.addLabels(childIssueNumber, [input.config.github.labels.running.name]);
338
+ await input.issueAdapter.postComment(childIssueNumber, `codex-orchestrator: claimed #${childIssueNumber} for tree-child autonomous work under #${input.parentIssue.number} at ${input.now.toISOString()}.`);
339
+ await mkdir(dirname(reportPath), { recursive: true });
340
+ await mkdir(isolatedHomePath, { recursive: true });
341
+ const promptText = buildIssueTreeChildPrompt({
342
+ parentIssue: input.parentIssue,
343
+ childIssue: input.child.issue,
344
+ config: input.config,
345
+ workflowPromptText: input.issueTreeWorkflowPrompt,
346
+ childMetadata: input.child.metadata,
347
+ dependencyIssues: input.dependencyIssues,
348
+ promptPath,
349
+ reportPath,
350
+ branchName,
351
+ worktreePath,
352
+ });
353
+ await writeDurablePrompt({
354
+ targetRoot: input.targetRoot,
355
+ config: input.config,
356
+ issueNumber: childIssueNumber,
357
+ sessionId,
358
+ promptText,
359
+ });
360
+ await store.upsertRun({
361
+ issueNumber: childIssueNumber,
362
+ parentIssueNumber: input.parentIssue.number,
363
+ mode: 'tree-child',
364
+ workspacePath: worktreePath,
365
+ sessionId,
366
+ branchName,
367
+ promptPath,
368
+ reportPath,
369
+ retryCount: 0,
370
+ createdAt: input.now.toISOString(),
371
+ updatedAt: input.now.toISOString(),
372
+ });
373
+ const beforeHead = await input.git.getHead(worktreePath);
374
+ const codexResult = await input.codexAdapter.run({
375
+ targetRoot: input.targetRoot,
376
+ config: input.config,
377
+ worktreePath,
378
+ promptPath,
379
+ promptText,
380
+ reportPath,
381
+ isolatedHomePath,
382
+ issueNumber: childIssueNumber,
383
+ sessionId,
384
+ branchName,
385
+ });
386
+ const afterHead = await input.git.getHead(worktreePath);
387
+ const publicationViolations = validateNoAgentOwnedGitPublication(beforeHead, afterHead);
388
+ if (publicationViolations.length > 0) {
389
+ throw new Error(publicationViolations.map((violation) => violation.message).join('; '));
390
+ }
391
+ if (codexResult.exitCode !== 0) {
392
+ throw new Error(`Codex exited with code ${codexResult.exitCode}: ${codexResult.stderr || codexResult.stdout}`);
393
+ }
394
+ const report = await readRequiredScopedReport(reportPath);
395
+ if (report.status === 'needs-promotion') {
396
+ const promotion = report.promotion;
397
+ throw new Error([
398
+ 'Child requested promotion instead of completing issue-tree work.',
399
+ promotion ? `Reason: ${promotion.reason}` : undefined,
400
+ promotion ? `Evidence: ${promotion.evidence.join(', ')}` : undefined,
401
+ ].filter(Boolean).join(' '));
402
+ }
403
+ const changedFiles = await input.git.listChangedFiles(worktreePath);
404
+ if (changedFiles.length === 0) {
405
+ throw new Error('Codex completed without file changes');
406
+ }
407
+ const violations = [
408
+ ...validateChangedPaths(changedFiles, input.config),
409
+ ...validateCompletionReportSafety(report),
410
+ ];
411
+ if (violations.length > 0) {
412
+ throw new Error(violations.map((violation) => violation.message).join('; '));
413
+ }
414
+ const validation = await runConfiguredChecks(input.config, worktreePath, input.shellExecutor, report.validation);
415
+ const residualRisks = [...report.residualRisks];
416
+ if (validation.some((line) => line.status === 'failed')) {
417
+ residualRisks.push('One or more configured checks failed.');
418
+ }
419
+ await input.git.commitAll({
420
+ worktreePath,
421
+ message: `Codex: implement issue #${childIssueNumber} for parent #${input.parentIssue.number}`,
422
+ });
423
+ return {
424
+ child: input.child,
425
+ branchName,
426
+ worktreePath,
427
+ promptPath,
428
+ reportPath,
429
+ changedFiles,
430
+ validation,
431
+ skippedChecks: report.skippedChecks,
432
+ residualRisks,
433
+ };
434
+ }
435
+ async function readRequiredScopedReport(reportPath) {
436
+ const reportRead = await readScopedCompletionReport(reportPath);
437
+ if (reportRead.kind === 'missing') {
438
+ throw new Error('Codex did not write CODEX_ORCHESTRATOR_REPORT_FILE; runner cannot prove child safety contract.');
439
+ }
440
+ return reportRead.report;
441
+ }
442
+ async function runConfiguredChecks(config, worktreePath, shellExecutor, reportValidation) {
443
+ const lines = [...reportValidation];
444
+ for (const [name, command] of Object.entries(config.checks)) {
445
+ const result = await shellExecutor(command, { cwd: worktreePath });
446
+ lines.push({
447
+ command,
448
+ status: result.exitCode === 0 ? 'passed' : 'failed',
449
+ summary: `${name}: ${result.exitCode === 0 ? 'passed' : result.stderr || result.stdout || `exit ${result.exitCode}`}`,
450
+ });
451
+ }
452
+ return lines;
453
+ }
454
+ async function blockFailedBatch(issueAdapter, config, parentIssueNumber, failures, successfulUnmerged) {
455
+ for (const failure of failures) {
456
+ if (!failure.child) {
457
+ continue;
458
+ }
459
+ await issueAdapter.removeLabels(failure.child.issue.number, [config.github.labels.running.name]);
460
+ await issueAdapter.addLabels(failure.child.issue.number, [config.github.labels.blocked.name]);
461
+ await issueAdapter.postComment(failure.child.issue.number, [
462
+ `codex-orchestrator blocked child #${failure.child.issue.number} for parent #${parentIssueNumber}`,
463
+ 'Reasons',
464
+ `- ${failure.message}`,
465
+ 'Worktree preserved for maintainer inspection.',
466
+ ].join('\n'));
467
+ }
468
+ for (const result of successfulUnmerged) {
469
+ await issueAdapter.removeLabels(result.child.issue.number, [config.github.labels.running.name]);
470
+ await issueAdapter.addLabels(result.child.issue.number, [config.github.labels.blocked.name]);
471
+ await issueAdapter.postComment(result.child.issue.number, [
472
+ `codex-orchestrator blocked child #${result.child.issue.number} for parent #${parentIssueNumber}`,
473
+ 'Reasons',
474
+ '- A sibling child failed before the batch merge; this child branch was not merged.',
475
+ `- Branch preserved: ${result.branchName}`,
476
+ `- Worktree preserved: ${result.worktreePath}`,
477
+ ].join('\n'));
478
+ }
479
+ }
480
+ async function handleMergeConflict(git, issueAdapter, config, parentIssueNumber, error, childResult, batchResults) {
481
+ let abortMessage = '';
482
+ try {
483
+ await git.abortMerge(error.worktreePath);
484
+ }
485
+ catch (abortError) {
486
+ abortMessage = abortError instanceof Error ? abortError.message : 'merge abort failed';
487
+ }
488
+ for (const result of batchResults) {
489
+ await issueAdapter.removeLabels(result.child.issue.number, [config.github.labels.running.name]);
490
+ await issueAdapter.addLabels(result.child.issue.number, [config.github.labels.blocked.name]);
491
+ await issueAdapter.postComment(result.child.issue.number, [
492
+ `codex-orchestrator blocked child #${result.child.issue.number} for parent #${parentIssueNumber}`,
493
+ 'Reasons',
494
+ result.child.issue.number === childResult.child.issue.number
495
+ ? `- Merge conflict from branch ${childResult.branchName}`
496
+ : `- A sibling merge conflict stopped the batch before publication: ${childResult.branchName}`,
497
+ `- Parent worktree: ${error.worktreePath}`,
498
+ `- Child worktree: ${result.worktreePath}`,
499
+ `- Child branch preserved: ${result.branchName}`,
500
+ abortMessage ? `- Merge abort also failed: ${abortMessage}` : '- Merge abort completed.',
501
+ 'Batch Children',
502
+ ...bulletList(batchResults.map((batchResult) => `#${batchResult.child.issue.number} ${batchResult.branchName}`)),
503
+ 'Git Output',
504
+ ...bulletList([error.stderr || error.stdout || 'no git output']),
505
+ ].join('\n'));
506
+ }
507
+ }
508
+ async function finishPlanBlocked(issueAdapter, config, result, reasons, mutatedChildren) {
509
+ const reportComment = [
510
+ `codex-orchestrator blocked parent issue-tree execution for #${result.parentIssueNumber}`,
511
+ 'Reasons',
512
+ ...bulletList(reasons),
513
+ 'Mutated Child Issues',
514
+ ...bulletList(mutatedChildren.map((issue) => `#${issue.number} ${issue.title}`)),
515
+ ].join('\n');
516
+ await issueAdapter.removeLabels(result.parentIssueNumber, [config.github.labels.running.name]);
517
+ await issueAdapter.addLabels(result.parentIssueNumber, [config.github.labels.blocked.name]);
518
+ await issueAdapter.postComment(result.parentIssueNumber, reportComment);
519
+ return { ...result, status: 'blocked', reportComment };
520
+ }
521
+ function buildChildBody(node, parentIssueNumber) {
522
+ return [
523
+ ensureAutonomousChildBody(node.body, parentIssueNumber),
524
+ '',
525
+ '## codex-orchestrator metadata',
526
+ `Stable ID: ${node.stableId}`,
527
+ `AFK/HITL: ${node.afkHitl}`,
528
+ `Depends on: ${node.dependsOn.length > 0 ? node.dependsOn.join(', ') : 'none'}`,
529
+ 'Ownership:',
530
+ ...bulletList(node.ownershipScope),
531
+ 'Spec gate: wave-level',
532
+ 'Verification:',
533
+ ...bulletList(node.verification),
534
+ ].join('\n');
535
+ }
536
+ function dependencyIssuesFor(child, allChildren) {
537
+ const issuesByStableId = new Map(allChildren.map((node) => [node.metadata.stableId, node.issue]));
538
+ return child.metadata.dependsOn.flatMap((stableId) => {
539
+ const issue = issuesByStableId.get(stableId);
540
+ return issue ? [issue] : [];
541
+ });
542
+ }
543
+ function buildChildReviewReport(parentIssueNumber, result) {
544
+ return [
545
+ `codex-orchestrator child review report for #${result.child.issue.number}`,
546
+ `Parent issue: #${parentIssueNumber}`,
547
+ `Integration branch: ${result.branchName}`,
548
+ 'Changes',
549
+ ...bulletList(result.changedFiles),
550
+ 'Validation',
551
+ ...result.validation.map((line) => `- ${line.command}: ${line.status} - ${line.summary}`),
552
+ 'Skipped Checks',
553
+ ...bulletList(result.skippedChecks),
554
+ 'Residual Risks',
555
+ ...bulletList(result.residualRisks),
556
+ ].join('\n');
557
+ }
558
+ function buildIssueTreeReviewReport(parentIssueNumber, pullRequest, batches, childResults, finalValidation) {
559
+ return [
560
+ `codex-orchestrator issue-tree review report for #${parentIssueNumber}`,
561
+ 'Pull Request',
562
+ `- ${pullRequest.url}`,
563
+ 'Execution Batches',
564
+ ...batches.map((batch, index) => `- Batch ${index + 1}: ${batch.map((child) => `#${child.issue.number}`).join(', ')}`),
565
+ 'Child Issues',
566
+ ...childResults.map((result) => `- #${result.child.issue.number} ${result.child.issue.title}: ${result.branchName}`),
567
+ 'Validation',
568
+ ...childResults.flatMap((result) => result.validation.map((line) => `- #${result.child.issue.number} ${line.command}: ${line.status} - ${line.summary}`)),
569
+ ...finalValidation.map((line) => `- final ${line.command}: ${line.status} - ${line.summary}`),
570
+ 'Skipped Checks',
571
+ ...bulletList(childResults.flatMap((result) => result.skippedChecks)),
572
+ 'Residual Risks',
573
+ ...bulletList(childResults.flatMap((result) => result.residualRisks)),
574
+ ].join('\n');
575
+ }
576
+ function buildIssueTreePullRequestBody(parentIssueNumber, childIssues, childResults, finalValidation) {
577
+ return [
578
+ `Parent issue: #${parentIssueNumber}`,
579
+ '',
580
+ 'Child issues:',
581
+ ...childIssues.map((issue) => `- #${issue.number} ${issue.title}`),
582
+ '',
583
+ 'Changed files:',
584
+ ...childResults.flatMap((result) => [
585
+ `- #${result.child.issue.number}:`,
586
+ ...result.changedFiles.map((file) => ` - ${file}`),
587
+ ]),
588
+ '',
589
+ 'Validation:',
590
+ ...childResults.flatMap((result) => result.validation.map((line) => `- #${result.child.issue.number} ${line.command}: ${line.status} - ${line.summary}`)),
591
+ ...finalValidation.map((line) => `- final ${line.command}: ${line.status} - ${line.summary}`),
592
+ '',
593
+ 'Skipped checks:',
594
+ ...bulletList(childResults.flatMap((result) => result.skippedChecks)),
595
+ '',
596
+ 'Residual risks:',
597
+ ...bulletList(childResults.flatMap((result) => result.residualRisks)),
598
+ '',
599
+ 'Merge summary:',
600
+ ...childResults.map((result) => `- ${result.branchName} merged for #${result.child.issue.number}`),
601
+ '',
602
+ 'Auto-merge is disabled.',
603
+ ].join('\n');
604
+ }
605
+ function renderParentTemplate(template, parentIssueNumber) {
606
+ return template.replaceAll('${parentIssueNumber}', String(parentIssueNumber));
607
+ }
608
+ function baseResult(parentIssueNumber, branchName, worktreePath, promptPath, reportPath, childIssues) {
609
+ return { parentIssueNumber, branchName, worktreePath, promptPath, reportPath, childIssues };
610
+ }
611
+ //# sourceMappingURL=plan-auto-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-auto-command.js","sourceRoot":"","sources":["../../../src/runner/plan-auto-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAyD,MAAM,6BAA6B,CAAC;AAEzH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,2BAA2B,EAA6B,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,GAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,iBAAiB,EAGjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,aAAa,CAAC;AA2DrB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA+B;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5G,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9H,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,kBAAkB,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,2BAA2B,CAAC;IAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAErE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,WAAW,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjF,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,WAAW,kDAAkD,MAAM,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,uBAAuB,GAAG,MAAM,2BAA2B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtF,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/G,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAClG,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,MAAM,WAAW,GAAkB,EAAE,CAAC;IACtC,IAAI,WAA0C,CAAC;IAE/C,MAAM,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;IAEhF,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,mBAAmB,CAAC;YAC5B,UAAU;YACV,aAAa,EAAE,YAAY;YAC3B,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;SACjC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,QAAQ,OAAO,CAAC,WAAW,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,UAAU,GAAG,iBAAiB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACpG,UAAU,GAAG,iBAAiB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACpG,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC3F,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,mBAAmB,CAAC;YACrC,WAAW;YACX,MAAM;YACN,OAAO,EAAE,eAAe;YACxB,UAAU;YACV,UAAU;YACV,UAAU;YACV,YAAY;SACb,CAAC,CAAC;QACH,MAAM,kBAAkB,CAAC;YACvB,UAAU;YACV,MAAM;YACN,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS;YACT,UAAU;SACX,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,SAAS,CAAC;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,IAAI,EAAE,aAAa;YACnB,aAAa,EAAE,YAAY;YAC3B,SAAS;YACT,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;YAC5B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;SAC7B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC;YACzC,UAAU;YACV,MAAM;YACN,YAAY;YACZ,UAAU;YACV,UAAU;YACV,UAAU;YACV,gBAAgB;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS;YACT,UAAU;SACX,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE5G,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,8DAA8D,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7H,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC9D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,CAAC,yFAAyF,CAAC,EAC3F,EAAE,CACH,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,CAAC,0BAA0B,WAAW,CAAC,QAAQ,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,EAC/F,EAAE,CACH,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,CAAC,yFAAyF,CAAC,EAC3F,EAAE,CACH,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAEjC,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE;YAClD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;YAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;SACzB,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC1F,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxG,MAAM,OAAO,GAAG,6BAA6B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,gBAAgB,GAA2B,EAAE,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC;gBACzE,UAAU;gBACV,MAAM;gBACN,WAAW;gBACX,KAAK;gBACL,gBAAgB,EAAE,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC;gBACxD,gBAAgB,EAAE,UAAU;gBAC5B,YAAY;gBACZ,GAAG;gBACH,YAAY;gBACZ,aAAa;gBACb,uBAAuB;gBACvB,GAAG;aACJ,CAAC,CAAC,CAAC,CAAC;YACL,MAAM,QAAQ,GAA4D,EAAE,CAAC;YAC7E,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;oBACnB,OAAO,EAAE,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;iBAC3F,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpG,MAAM,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACxF,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,EAC9F;oBACE,mGAAmG;oBACnG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;iBACrH,EACD,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtG,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnH,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,WAAW,CAAC;wBACpB,YAAY;wBACZ,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,OAAO,EAAE,uBAAuB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,iBAAiB,OAAO,CAAC,WAAW,EAAE;qBACrG,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;wBAC3C,MAAM,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;wBACnH,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,EAC9F;4BACE,iCAAiC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,WAAW,CAAC,UAAU,GAAG;4BACjG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;yBAC7B,EACD,WAAW,CACZ,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,KAAK,MAAM,WAAW,IAAI,mBAAmB,EAAE,CAAC;gBAC9C,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;gBACjF,MAAM,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrG,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjG,MAAM,YAAY,CAAC,WAAW,CAC5B,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAC9B,sBAAsB,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CACzD,CAAC;gBACF,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtD,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;QACnD,WAAW,GAAG,MAAM,kBAAkB,CAAC,sBAAsB,CAAC;YAC5D,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC;YACpF,IAAI,EAAE,6BAA6B,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,CAAC;YACxG,UAAU,EAAE,UAAU;YACtB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;SACjC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,0BAA0B,CAC9C,OAAO,CAAC,WAAW,EACnB,WAAW,EACX,OAAO,CAAC,OAAO,EACf,gBAAgB,EAChB,eAAe,CAChB,CAAC;QACF,MAAM,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,MAAM,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACnE,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE3C,OAAO;YACL,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;YACjG,MAAM,EAAE,cAAc;YACtB,WAAW;YACX,aAAa;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;QACrF,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,wDAAwD,WAAW,CAAC,GAAG,kCAAkC,OAAO,EAAE,CAAC,CAAC;QACtI,CAAC;QACD,OAAO,iBAAiB,CACtB,YAAY,EACZ,MAAM,EACN,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,EAC9F,CAAC,OAAO,CAAC,EACT,WAAW,CACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,YAAgC,EAChC,MAA+B,EAC/B,iBAAyB,EACzB,IAAmB;IAEnB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAEjD,IAAI,KAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,WAAW,gBAAgB,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,CAAC,WAAW,mCAAmC,iBAAiB,uCAAuC,CAC/H,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE;YACvD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;YACJ,SAAS,EAAE,CAAC,UAAU,CAAC;YACvB,YAAY,EAAE,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SAChE,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;YACrC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;YACJ,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,MAAM,sDAAsD,iBAAiB,GAAG,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,gBAAgB,KAAK,CAAC,MAAM,oCAAoC,iBAAiB,6BAA6B,CAC/G,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,UAAkB;IAElB,IAAI,CAAC;QACH,OAAO,MAAM,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qCAAqC,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,UAAkB,EAAE,MAA+B;IACxF,OAAO;QACL,GAAG,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QAC9E,cAAc,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;QACpG,eAAe,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC;QACtG,MAAM,EAAE,MAAM,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,UAAkB,EAAE,UAA8B;IACtF,OAAO,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,UAAkB,EAAE,MAA+B;IAC5F,OAAO,kBAAkB,CACvB,UAAU,EACV,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,UAAU,EAClD,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,UAAkB,EAAE,UAA8B,EAAE,UAAkB;IACtG,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7E,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,iBAAiB,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,YAAgC,EAChC,MAA+B,EAC/B,iBAAyB,EACzB,WAA0B;IAE1B,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,0CAA0C,CAAC,CAAC;YACpF,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAa3B;IACC,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,KAAK,CAAC,WAAW,CAAC,MAAM,UAAU,gBAAgB,EAAE,CAAC;IACtF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,KAAK,CAAC,WAAW,CAAC,MAAM,UAAU,gBAAgB,EAAE,CAAC,CAAC;IAC7I,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,WAAW,CAAC,MAAM,UAAU,gBAAgB,IAAI,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpH,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACnC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,gBAAgB;QAC7B,SAAS;KACV,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACnC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,gBAAgB;QAC7B,SAAS;KACV,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEnE,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,YAAY;QAC3B,UAAU;QACV,UAAU,EAAE,KAAK,CAAC,gBAAgB;KACnC,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,MAAM,KAAK,CAAC,YAAY,CAAC,WAAW,CAClC,gBAAgB,EAChB,gCAAgC,gBAAgB,0CAA0C,KAAK,CAAC,WAAW,CAAC,MAAM,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CACpJ,CAAC;IACF,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC3C,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,kBAAkB,EAAE,KAAK,CAAC,uBAAuB;QACjD,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ;QACnC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU;QACV,UAAU;QACV,UAAU;QACV,YAAY;KACb,CAAC,CAAC;IACH,MAAM,kBAAkB,CAAC;QACvB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,gBAAgB;QAC7B,SAAS;QACT,UAAU;KACX,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,SAAS,CAAC;QACpB,WAAW,EAAE,gBAAgB;QAC7B,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;QAC3C,IAAI,EAAE,YAAY;QAClB,aAAa,EAAE,YAAY;QAC3B,SAAS;QACT,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;QAClC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE;KACnC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;QAC/C,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,YAAY;QACZ,UAAU;QACV,UAAU;QACV,UAAU;QACV,gBAAgB;QAChB,WAAW,EAAE,gBAAgB;QAC7B,SAAS;QACT,UAAU;KACX,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,qBAAqB,GAAG,kCAAkC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxF,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,WAAW,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,CAAC,QAAQ,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,IAAI,KAAK,CACb;YACE,kEAAkE;YAClE,SAAS,CAAC,CAAC,CAAC,WAAW,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;YACrD,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,UAAU,GAAG;QACjB,GAAG,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;QACnD,GAAG,8BAA8B,CAAC,MAAM,CAAC;KAC1C,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACjH,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACxD,aAAa,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACxB,YAAY;QACZ,OAAO,EAAE,2BAA2B,gBAAgB,gBAAgB,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE;KAC/F,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,UAAU;QACV,YAAY;QACZ,UAAU;QACV,UAAU;QACV,YAAY;QACZ,UAAU;QACV,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,aAAa;KACd,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,UAAkB;IACxD,MAAM,UAAU,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAA+B,EAC/B,YAAoB,EACpB,aAAmC,EACnC,gBAAkC;IAElC,MAAM,KAAK,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC;YACT,OAAO;YACP,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACnD,OAAO,EAAE,GAAG,IAAI,KAAK,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,MAAM,CAAC,QAAQ,EAAE,EAAE;SACtH,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,YAAgC,EAChC,MAA+B,EAC/B,iBAAyB,EACzB,QAAiE,EACjE,kBAA0C;IAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjG,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9F,MAAM,YAAY,CAAC,WAAW,CAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAC1B;YACE,qCAAqC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,gBAAgB,iBAAiB,EAAE;YAClG,SAAS;YACT,KAAK,OAAO,CAAC,OAAO,EAAE;YACtB,+CAA+C;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,MAAM,YAAY,CAAC,WAAW,CAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EACzB;YACE,qCAAqC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,gBAAgB,iBAAiB,EAAE;YACjG,SAAS;YACT,oFAAoF;YACpF,uBAAuB,MAAM,CAAC,UAAU,EAAE;YAC1C,yBAAyB,MAAM,CAAC,YAAY,EAAE;SAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAAuB,EACvB,YAAgC,EAChC,MAA+B,EAC/B,iBAAyB,EACzB,KAA4B,EAC5B,WAAiC,EACjC,YAAoC;IAEpC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;IACzF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,MAAM,YAAY,CAAC,WAAW,CAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EACzB;YACE,qCAAqC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,gBAAgB,iBAAiB,EAAE;YACjG,SAAS;YACT,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC1D,CAAC,CAAC,gCAAgC,WAAW,CAAC,UAAU,EAAE;gBAC1D,CAAC,CAAC,oEAAoE,WAAW,CAAC,UAAU,EAAE;YAChG,sBAAsB,KAAK,CAAC,YAAY,EAAE;YAC1C,qBAAqB,MAAM,CAAC,YAAY,EAAE;YAC1C,6BAA6B,MAAM,CAAC,UAAU,EAAE;YAChD,YAAY,CAAC,CAAC,CAAC,8BAA8B,YAAY,EAAE,CAAC,CAAC,CAAC,0BAA0B;YACxF,gBAAgB;YAChB,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;YAChH,YAAY;YACZ,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC;SACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,YAAgC,EAChC,MAA+B,EAC/B,MAA0B,EAC1B,OAAiB,EACjB,eAA8B;IAE9B,MAAM,aAAa,GAAG;QACpB,+DAA+D,MAAM,CAAC,iBAAiB,EAAE;QACzF,SAAS;QACT,GAAG,UAAU,CAAC,OAAO,CAAC;QACtB,sBAAsB;QACtB,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KACjF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,MAAM,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5F,MAAM,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACxE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,IAAmB,EAAE,iBAAyB;IACpE,OAAO;QACL,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC;QACvD,EAAE;QACF,gCAAgC;QAChC,cAAc,IAAI,CAAC,QAAQ,EAAE;QAC7B,aAAa,IAAI,CAAC,OAAO,EAAE;QAC3B,eAAe,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;QAC/E,YAAY;QACZ,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QAClC,uBAAuB;QACvB,eAAe;QACf,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;KACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0B,EAAE,WAAkC;IACzF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClG,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,iBAAyB,EAAE,MAA4B;IACrF,OAAO;QACL,+CAA+C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;QAC1E,kBAAkB,iBAAiB,EAAE;QACrC,uBAAuB,MAAM,CAAC,UAAU,EAAE;QAC1C,SAAS;QACT,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;QAClC,YAAY;QACZ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACzF,gBAAgB;QAChB,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC;QACnC,gBAAgB;QAChB,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC;KACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CACjC,iBAAyB,EACzB,WAA8B,EAC9B,OAAgC,EAChC,YAAoC,EACpC,eAAiC;IAEjC,OAAO;QACL,oDAAoD,iBAAiB,EAAE;QACvE,cAAc;QACd,KAAK,WAAW,CAAC,GAAG,EAAE;QACtB,mBAAmB;QACnB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtH,cAAc;QACd,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;QACpH,YAAY;QACZ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzJ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7F,gBAAgB;QAChB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrE,gBAAgB;QAChB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CACpC,iBAAyB,EACzB,WAA0B,EAC1B,YAAoC,EACpC,eAAiC;IAEjC,OAAO;QACL,kBAAkB,iBAAiB,EAAE;QACrC,EAAE;QACF,eAAe;QACf,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAClE,EAAE;QACF,gBAAgB;QAChB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG;YAClC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;SACpD,CAAC;QACF,EAAE;QACF,aAAa;QACb,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzJ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7F,EAAE;QACF,iBAAiB;QACjB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrE,EAAE;QACF,iBAAiB;QACjB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrE,EAAE;QACF,gBAAgB;QAChB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClG,EAAE;QACF,yBAAyB;KAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,iBAAyB;IACvE,OAAO,QAAQ,CAAC,UAAU,CAAC,sBAAsB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,UAAU,CACjB,iBAAyB,EACzB,UAAkB,EAClB,YAAoB,EACpB,UAAkB,EAClB,UAAkB,EAClB,WAA0B;IAE1B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC9F,CAAC"}