codex-orchestrator 0.1.47 → 0.1.48

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 (156) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/src/config/schema.d.ts +5 -1
  3. package/dist/src/config/schema.d.ts.map +1 -1
  4. package/dist/src/config/schema.js +16 -0
  5. package/dist/src/config/schema.js.map +1 -1
  6. package/dist/src/runner/command-utils.d.ts.map +1 -1
  7. package/dist/src/runner/command-utils.js +1 -0
  8. package/dist/src/runner/command-utils.js.map +1 -1
  9. package/dist/src/runner/local-execution-session.d.ts.map +1 -1
  10. package/dist/src/runner/local-execution-session.js +5 -2
  11. package/dist/src/runner/local-execution-session.js.map +1 -1
  12. package/dist/src/runner/mission-activation.d.ts +29 -0
  13. package/dist/src/runner/mission-activation.d.ts.map +1 -0
  14. package/dist/src/runner/mission-activation.js +54 -0
  15. package/dist/src/runner/mission-activation.js.map +1 -0
  16. package/dist/src/runner/mission-agent-broker.d.ts +53 -0
  17. package/dist/src/runner/mission-agent-broker.d.ts.map +1 -0
  18. package/dist/src/runner/mission-agent-broker.js +182 -0
  19. package/dist/src/runner/mission-agent-broker.js.map +1 -0
  20. package/dist/src/runner/mission-cancellation.d.ts +77 -0
  21. package/dist/src/runner/mission-cancellation.d.ts.map +1 -0
  22. package/dist/src/runner/mission-cancellation.js +180 -0
  23. package/dist/src/runner/mission-cancellation.js.map +1 -0
  24. package/dist/src/runner/mission-canonical-path.d.ts +34 -0
  25. package/dist/src/runner/mission-canonical-path.d.ts.map +1 -0
  26. package/dist/src/runner/mission-canonical-path.js +121 -0
  27. package/dist/src/runner/mission-canonical-path.js.map +1 -0
  28. package/dist/src/runner/mission-capability-kernel.d.ts +34 -0
  29. package/dist/src/runner/mission-capability-kernel.d.ts.map +1 -0
  30. package/dist/src/runner/mission-capability-kernel.js +158 -0
  31. package/dist/src/runner/mission-capability-kernel.js.map +1 -0
  32. package/dist/src/runner/mission-check-policy.d.ts +17 -0
  33. package/dist/src/runner/mission-check-policy.d.ts.map +1 -0
  34. package/dist/src/runner/mission-check-policy.js +31 -0
  35. package/dist/src/runner/mission-check-policy.js.map +1 -0
  36. package/dist/src/runner/mission-coordinator-lock.d.ts +16 -0
  37. package/dist/src/runner/mission-coordinator-lock.d.ts.map +1 -0
  38. package/dist/src/runner/mission-coordinator-lock.js +170 -0
  39. package/dist/src/runner/mission-coordinator-lock.js.map +1 -0
  40. package/dist/src/runner/mission-deployment.d.ts +21 -0
  41. package/dist/src/runner/mission-deployment.d.ts.map +1 -0
  42. package/dist/src/runner/mission-deployment.js +108 -0
  43. package/dist/src/runner/mission-deployment.js.map +1 -0
  44. package/dist/src/runner/mission-evaluation.d.ts +61 -0
  45. package/dist/src/runner/mission-evaluation.d.ts.map +1 -0
  46. package/dist/src/runner/mission-evaluation.js +183 -0
  47. package/dist/src/runner/mission-evaluation.js.map +1 -0
  48. package/dist/src/runner/mission-executor-probe.d.ts +10 -0
  49. package/dist/src/runner/mission-executor-probe.d.ts.map +1 -0
  50. package/dist/src/runner/mission-executor-probe.js +180 -0
  51. package/dist/src/runner/mission-executor-probe.js.map +1 -0
  52. package/dist/src/runner/mission-git-contracts.d.ts +75 -0
  53. package/dist/src/runner/mission-git-contracts.d.ts.map +1 -0
  54. package/dist/src/runner/mission-git-contracts.js +201 -0
  55. package/dist/src/runner/mission-git-contracts.js.map +1 -0
  56. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +13 -0
  57. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +1 -0
  58. package/dist/src/runner/mission-git-runtime-owner-ref.js +111 -0
  59. package/dist/src/runner/mission-git-runtime-owner-ref.js.map +1 -0
  60. package/dist/src/runner/mission-git-transaction.d.ts +97 -0
  61. package/dist/src/runner/mission-git-transaction.d.ts.map +1 -0
  62. package/dist/src/runner/mission-git-transaction.js +1009 -0
  63. package/dist/src/runner/mission-git-transaction.js.map +1 -0
  64. package/dist/src/runner/mission-identifiers.d.ts +31 -0
  65. package/dist/src/runner/mission-identifiers.d.ts.map +1 -0
  66. package/dist/src/runner/mission-identifiers.js +75 -0
  67. package/dist/src/runner/mission-identifiers.js.map +1 -0
  68. package/dist/src/runner/mission-input-snapshot.d.ts +21 -0
  69. package/dist/src/runner/mission-input-snapshot.d.ts.map +1 -0
  70. package/dist/src/runner/mission-input-snapshot.js +63 -0
  71. package/dist/src/runner/mission-input-snapshot.js.map +1 -0
  72. package/dist/src/runner/mission-ownership.d.ts +38 -0
  73. package/dist/src/runner/mission-ownership.d.ts.map +1 -0
  74. package/dist/src/runner/mission-ownership.js +88 -0
  75. package/dist/src/runner/mission-ownership.js.map +1 -0
  76. package/dist/src/runner/mission-patch-audit.d.ts +21 -0
  77. package/dist/src/runner/mission-patch-audit.d.ts.map +1 -0
  78. package/dist/src/runner/mission-patch-audit.js +186 -0
  79. package/dist/src/runner/mission-patch-audit.js.map +1 -0
  80. package/dist/src/runner/mission-path-language.d.ts +6 -0
  81. package/dist/src/runner/mission-path-language.d.ts.map +1 -0
  82. package/dist/src/runner/mission-path-language.js +106 -0
  83. package/dist/src/runner/mission-path-language.js.map +1 -0
  84. package/dist/src/runner/mission-permit-authority.d.ts +26 -0
  85. package/dist/src/runner/mission-permit-authority.d.ts.map +1 -0
  86. package/dist/src/runner/mission-permit-authority.js +145 -0
  87. package/dist/src/runner/mission-permit-authority.js.map +1 -0
  88. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +87 -0
  89. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +1 -0
  90. package/dist/src/runner/mission-plan-parent-coordinator.js +412 -0
  91. package/dist/src/runner/mission-plan-parent-coordinator.js.map +1 -0
  92. package/dist/src/runner/mission-plan-parent.d.ts +154 -0
  93. package/dist/src/runner/mission-plan-parent.d.ts.map +1 -0
  94. package/dist/src/runner/mission-plan-parent.js +583 -0
  95. package/dist/src/runner/mission-plan-parent.js.map +1 -0
  96. package/dist/src/runner/mission-process-executor.d.ts +25 -0
  97. package/dist/src/runner/mission-process-executor.d.ts.map +1 -0
  98. package/dist/src/runner/mission-process-executor.js +182 -0
  99. package/dist/src/runner/mission-process-executor.js.map +1 -0
  100. package/dist/src/runner/mission-quarantine-patch-executor.d.ts +29 -0
  101. package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +1 -0
  102. package/dist/src/runner/mission-quarantine-patch-executor.js +121 -0
  103. package/dist/src/runner/mission-quarantine-patch-executor.js.map +1 -0
  104. package/dist/src/runner/mission-repository-executor.d.ts +54 -0
  105. package/dist/src/runner/mission-repository-executor.d.ts.map +1 -0
  106. package/dist/src/runner/mission-repository-executor.js +192 -0
  107. package/dist/src/runner/mission-repository-executor.js.map +1 -0
  108. package/dist/src/runner/mission-repository-observer.d.ts +8 -0
  109. package/dist/src/runner/mission-repository-observer.d.ts.map +1 -0
  110. package/dist/src/runner/mission-repository-observer.js +24 -0
  111. package/dist/src/runner/mission-repository-observer.js.map +1 -0
  112. package/dist/src/runner/mission-reservations.d.ts +15 -0
  113. package/dist/src/runner/mission-reservations.d.ts.map +1 -0
  114. package/dist/src/runner/mission-reservations.js +116 -0
  115. package/dist/src/runner/mission-reservations.js.map +1 -0
  116. package/dist/src/runner/mission-resolution-loop.d.ts +172 -0
  117. package/dist/src/runner/mission-resolution-loop.d.ts.map +1 -0
  118. package/dist/src/runner/mission-resolution-loop.js +318 -0
  119. package/dist/src/runner/mission-resolution-loop.js.map +1 -0
  120. package/dist/src/runner/mission-runtime-owner.d.ts +36 -0
  121. package/dist/src/runner/mission-runtime-owner.d.ts.map +1 -0
  122. package/dist/src/runner/mission-runtime-owner.js +174 -0
  123. package/dist/src/runner/mission-runtime-owner.js.map +1 -0
  124. package/dist/src/runner/mission-safe-executor.d.ts +96 -0
  125. package/dist/src/runner/mission-safe-executor.d.ts.map +1 -0
  126. package/dist/src/runner/mission-safe-executor.js +288 -0
  127. package/dist/src/runner/mission-safe-executor.js.map +1 -0
  128. package/dist/src/runner/mission-sandbox.d.ts +16 -0
  129. package/dist/src/runner/mission-sandbox.d.ts.map +1 -0
  130. package/dist/src/runner/mission-sandbox.js +91 -0
  131. package/dist/src/runner/mission-sandbox.js.map +1 -0
  132. package/dist/src/runner/mission-scheduler.d.ts +57 -0
  133. package/dist/src/runner/mission-scheduler.d.ts.map +1 -0
  134. package/dist/src/runner/mission-scheduler.js +205 -0
  135. package/dist/src/runner/mission-scheduler.js.map +1 -0
  136. package/dist/src/runner/mission-scope-expansion.d.ts +47 -0
  137. package/dist/src/runner/mission-scope-expansion.d.ts.map +1 -0
  138. package/dist/src/runner/mission-scope-expansion.js +147 -0
  139. package/dist/src/runner/mission-scope-expansion.js.map +1 -0
  140. package/dist/src/runner/mission-state-machine.d.ts +118 -0
  141. package/dist/src/runner/mission-state-machine.d.ts.map +1 -0
  142. package/dist/src/runner/mission-state-machine.js +316 -0
  143. package/dist/src/runner/mission-state-machine.js.map +1 -0
  144. package/dist/src/runner/mission-state-store.d.ts +70 -0
  145. package/dist/src/runner/mission-state-store.d.ts.map +1 -0
  146. package/dist/src/runner/mission-state-store.js +856 -0
  147. package/dist/src/runner/mission-state-store.js.map +1 -0
  148. package/dist/src/runner/rework-policy.d.ts +2 -1
  149. package/dist/src/runner/rework-policy.d.ts.map +1 -1
  150. package/dist/src/runner/rework-policy.js +3 -0
  151. package/dist/src/runner/rework-policy.js.map +1 -1
  152. package/dist/src/setup/project-config.d.ts.map +1 -1
  153. package/dist/src/setup/project-config.js +5 -0
  154. package/dist/src/setup/project-config.js.map +1 -1
  155. package/docs/deep-dive.md +25 -16
  156. package/package.json +1 -1
@@ -0,0 +1,583 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { childMissionId } from './mission-identifiers.js';
3
+ import { validatePlanGraph } from './issue-tree.js';
4
+ export const planParentStates = [
5
+ 'created', 'wave-running', 'wave-waiting', 'wave-prepared', 'integrating',
6
+ 'recovery-waiting', 'wave-validating', 'checkpointing', 'next-wave',
7
+ 'final-validating', 'publication-prepared', 'cancelling',
8
+ 'external-input-required', 'safety-stop', 'cancelled', 'completed',
9
+ ];
10
+ export const planParentEventTypes = [
11
+ 'wave-linked', 'wave-prepared', 'integration-started', 'integration-completed',
12
+ 'integration-conflict', 'recovery-ready', 'validation-failed',
13
+ 'validation-recovery-ready', 'validation-passed', 'checkpoint-committed',
14
+ 'final-validation-passed', 'publication-review-ready', 'label-transition-recorded',
15
+ 'transient-failure', 'resume-eligible', 'cancel-requested',
16
+ 'cancellation-integration-reconciled', 'cancellation-reconciled',
17
+ 'external-input-required', 'safety-stop',
18
+ ];
19
+ const planParentEventsAreExhaustive = true;
20
+ void planParentEventsAreExhaustive;
21
+ export function createPlanParent(input) {
22
+ requireText(input.id, 'Plan Parent id');
23
+ requireText(input.repository, 'Plan Parent repository');
24
+ if (!Number.isSafeInteger(input.issueNumber) || input.issueNumber <= 0) {
25
+ throw new Error('Plan Parent issueNumber must be a positive integer.');
26
+ }
27
+ digest(input.configHash, 'Plan Parent configHash');
28
+ objectId(input.baseCommit, 'Plan Parent baseCommit');
29
+ objectId(input.baseTree, 'Plan Parent baseTree');
30
+ const validation = validatePlanGraph(input.graph);
31
+ if (!validation.ok)
32
+ throw new Error(`Plan Parent graph is invalid: ${validation.errors.join('; ')}`);
33
+ const graph = structuredClone(input.graph);
34
+ const waves = computeWaves(graph);
35
+ return {
36
+ id: input.id,
37
+ revision: 1,
38
+ state: 'created',
39
+ repository: input.repository,
40
+ issueNumber: input.issueNumber,
41
+ configHash: input.configHash,
42
+ baseCommit: input.baseCommit,
43
+ baseTree: input.baseTree,
44
+ graph,
45
+ graphHash: sha256(canonicalJson(graph)),
46
+ waves,
47
+ currentWave: 0,
48
+ checkpoint: { commitSha: input.baseCommit, treeSha: input.baseTree },
49
+ children: {},
50
+ integrationCursor: 0,
51
+ integratedCommit: input.baseCommit,
52
+ integratedTree: input.baseTree,
53
+ integrationHistory: [],
54
+ validationReceiptIds: [],
55
+ validationHistory: [],
56
+ labelTransitions: [],
57
+ };
58
+ }
59
+ export function transitionPlanParent(record, event) {
60
+ const next = structuredClone(record);
61
+ if (event.type === 'label-transition-recorded' && !terminal(record.state)) {
62
+ validateLabelTransition(event.transition);
63
+ if (!next.labelTransitions.some((entry) => entry.receiptId === event.transition.receiptId)) {
64
+ next.labelTransitions.push(structuredClone(event.transition));
65
+ next.revision += 1;
66
+ }
67
+ return next;
68
+ }
69
+ if (event.type === 'cancel-requested' && !terminal(record.state) && record.state !== 'cancelling') {
70
+ validateCancellation(event.cancellation);
71
+ revokeTransient(next);
72
+ next.state = 'cancelling';
73
+ next.cancellation = structuredClone(event.cancellation);
74
+ next.revision += 1;
75
+ return next;
76
+ }
77
+ if (record.state === 'cancelling' && event.type === 'cancellation-reconciled') {
78
+ revokeTransient(next);
79
+ delete next.integrationIntent;
80
+ delete next.claim;
81
+ next.state = 'cancelled';
82
+ next.revision += 1;
83
+ return next;
84
+ }
85
+ if (record.state === 'cancelling' && event.type === 'cancellation-integration-reconciled') {
86
+ if (!record.integrationIntent)
87
+ throw new Error('Plan Parent cancellation has no integration intent.');
88
+ if (event.applied) {
89
+ if (!next.integrationHistory.some((entry) => entry.actionKey === record.integrationIntent.actionKey)) {
90
+ next.integrationHistory.push(structuredClone(record.integrationIntent));
91
+ }
92
+ next.integratedCommit = record.integrationIntent.expectedNewCommit;
93
+ next.integratedTree = record.integrationIntent.expectedNewTree;
94
+ next.integrationCursor = Math.max(next.integrationCursor, record.integrationIntent.cursor + 1);
95
+ }
96
+ delete next.integrationIntent;
97
+ next.revision += 1;
98
+ return next;
99
+ }
100
+ if ((event.type === 'external-input-required' || event.type === 'safety-stop')
101
+ && !terminal(record.state)) {
102
+ revokeTransient(next);
103
+ delete next.claim;
104
+ next.state = event.type;
105
+ next.revision += 1;
106
+ return next;
107
+ }
108
+ if (event.type === 'transient-failure' && transientAllowed(record.state, event.resumeTarget)) {
109
+ exactTimestamp(event.nextEligibleAt, 'Plan Parent nextEligibleAt');
110
+ requireText(event.actionKey, 'Plan Parent actionKey');
111
+ requireText(event.reason, 'Plan Parent resumable reason');
112
+ requireText(event.requiredPredicate, 'Plan Parent required predicate');
113
+ revokeTransient(next);
114
+ delete next.claim;
115
+ next.state = 'wave-waiting';
116
+ next.resumeTarget = event.resumeTarget;
117
+ next.nextEligibleAt = event.nextEligibleAt;
118
+ next.resumableReason = event.reason;
119
+ next.requiredPredicate = event.requiredPredicate;
120
+ next.actionKey = event.actionKey;
121
+ next.revision += 1;
122
+ return next;
123
+ }
124
+ if (record.state === 'wave-waiting' && event.type === 'resume-eligible') {
125
+ exactTimestamp(event.now, 'Plan Parent resume time');
126
+ if (!record.resumeTarget || !record.nextEligibleAt || event.now < record.nextEligibleAt) {
127
+ throw new Error('Plan Parent is not eligible to resume.');
128
+ }
129
+ next.state = record.resumeTarget;
130
+ revokeTransient(next);
131
+ next.revision += 1;
132
+ return next;
133
+ }
134
+ if ((record.state === 'created' || record.state === 'next-wave') && event.type === 'wave-linked') {
135
+ next.state = 'wave-running';
136
+ next.revision += 1;
137
+ return next;
138
+ }
139
+ if (record.state === 'wave-running' && event.type === 'wave-prepared') {
140
+ const expected = record.waves[record.currentWave] ?? [];
141
+ if (event.descriptors.length !== expected.length)
142
+ throw new Error('Plan Parent wave descriptors are incomplete.');
143
+ for (const descriptor of event.descriptors) {
144
+ validateDescriptor(descriptor, record);
145
+ const child = next.children[descriptor.stableId];
146
+ if (!child || child.wave !== record.currentWave
147
+ || descriptor.baseCheckpointCommit !== child.baseCheckpointCommit) {
148
+ throw new Error(`Plan Parent descriptor does not match child ${descriptor.stableId}.`);
149
+ }
150
+ child.descriptor = structuredClone(descriptor);
151
+ }
152
+ if (expected.some((stableId) => !next.children[stableId]?.descriptor)) {
153
+ throw new Error('Plan Parent wave descriptors do not cover the deterministic wave.');
154
+ }
155
+ next.integrationCursor = 0;
156
+ next.integratedCommit = record.checkpoint.commitSha;
157
+ next.integratedTree = record.checkpoint.treeSha;
158
+ next.state = 'wave-prepared';
159
+ next.revision += 1;
160
+ return next;
161
+ }
162
+ if (record.state === 'wave-prepared' && event.type === 'integration-started') {
163
+ validateIntent(event.intent, record);
164
+ next.integrationIntent = structuredClone(event.intent);
165
+ next.state = 'integrating';
166
+ next.actionKey = event.intent.actionKey;
167
+ next.revision += 1;
168
+ return next;
169
+ }
170
+ if (record.state === 'integrating' && event.type === 'integration-started') {
171
+ validateIntent(event.intent, record);
172
+ if (canonicalJson(record.integrationIntent) !== canonicalJson(event.intent)) {
173
+ throw new Error('Plan Parent integration replay does not match durable intent.');
174
+ }
175
+ return record;
176
+ }
177
+ if (record.state === 'integrating' && event.type === 'integration-completed') {
178
+ if (!record.integrationIntent || record.integrationIntent.actionKey !== event.actionKey) {
179
+ throw new Error('Plan Parent integration intent does not match completion.');
180
+ }
181
+ next.integrationHistory.push(structuredClone(record.integrationIntent));
182
+ next.integratedCommit = record.integrationIntent.expectedNewCommit;
183
+ next.integratedTree = record.integrationIntent.expectedNewTree;
184
+ next.integrationCursor += 1;
185
+ delete next.integrationIntent;
186
+ delete next.actionKey;
187
+ next.state = next.integrationCursor === (record.waves[record.currentWave]?.length ?? 0)
188
+ ? 'wave-validating' : 'wave-prepared';
189
+ next.revision += 1;
190
+ return next;
191
+ }
192
+ if ((record.state === 'wave-prepared' || record.state === 'integrating')
193
+ && event.type === 'integration-conflict') {
194
+ requireText(event.recoveryMissionId, 'Plan Parent recoveryMissionId');
195
+ next.recoveryMissionId = event.recoveryMissionId;
196
+ next.state = 'recovery-waiting';
197
+ next.revision += 1;
198
+ return next;
199
+ }
200
+ if (record.state === 'recovery-waiting' && event.type === 'recovery-ready') {
201
+ validateDescriptor(event.descriptor, record);
202
+ if (event.descriptor.stableId !== record.waves[record.currentWave]?.[record.integrationCursor]) {
203
+ throw new Error('Plan Parent recovery descriptor does not match the integration cursor.');
204
+ }
205
+ const child = next.children[event.descriptor.stableId];
206
+ if (!child)
207
+ throw new Error('Plan Parent recovery descriptor child is missing.');
208
+ child.descriptor = structuredClone(event.descriptor);
209
+ delete next.recoveryMissionId;
210
+ delete next.recoveryTarget;
211
+ delete next.integrationIntent;
212
+ next.state = 'wave-prepared';
213
+ next.revision += 1;
214
+ return next;
215
+ }
216
+ if ((record.state === 'wave-validating' || record.state === 'final-validating')
217
+ && event.type === 'validation-failed' && event.recoveryTarget === record.state) {
218
+ requireText(event.recoveryMissionId, 'Plan Parent validation recoveryMissionId');
219
+ next.recoveryMissionId = event.recoveryMissionId;
220
+ next.recoveryTarget = event.recoveryTarget;
221
+ next.state = 'recovery-waiting';
222
+ next.revision += 1;
223
+ return next;
224
+ }
225
+ if (record.state === 'recovery-waiting' && event.type === 'validation-recovery-ready') {
226
+ if (!record.recoveryMissionId || !record.recoveryTarget) {
227
+ throw new Error('Plan Parent validation recovery context is missing.');
228
+ }
229
+ next.state = record.recoveryTarget;
230
+ delete next.recoveryMissionId;
231
+ delete next.recoveryTarget;
232
+ next.revision += 1;
233
+ return next;
234
+ }
235
+ if (record.state === 'wave-validating' && event.type === 'validation-passed') {
236
+ validateStrings(event.receiptIds, 'Plan Parent validation receipts');
237
+ next.validationReceiptIds = [...event.receiptIds];
238
+ next.state = 'checkpointing';
239
+ next.revision += 1;
240
+ return next;
241
+ }
242
+ if (record.state === 'checkpointing' && event.type === 'checkpoint-committed') {
243
+ validateCheckpoint(event.checkpoint);
244
+ if (event.checkpoint.commitSha !== record.integratedCommit
245
+ || event.checkpoint.treeSha !== record.integratedTree) {
246
+ throw new Error('Plan Parent checkpoint does not match integrated identity.');
247
+ }
248
+ next.checkpoint = structuredClone(event.checkpoint);
249
+ next.validationHistory.push(...record.validationReceiptIds);
250
+ next.validationReceiptIds = [];
251
+ next.integrationCursor = 0;
252
+ if (record.currentWave + 1 < record.waves.length) {
253
+ next.currentWave += 1;
254
+ next.state = 'next-wave';
255
+ }
256
+ else {
257
+ next.state = 'final-validating';
258
+ }
259
+ next.revision += 1;
260
+ return next;
261
+ }
262
+ if (record.state === 'final-validating' && event.type === 'final-validation-passed') {
263
+ validateStrings(event.receiptIds, 'Plan Parent final validation receipts');
264
+ requireText(event.publicationId, 'Plan Parent publicationId');
265
+ next.validationHistory.push(...event.receiptIds);
266
+ next.publicationId = event.publicationId;
267
+ next.state = 'publication-prepared';
268
+ next.revision += 1;
269
+ return next;
270
+ }
271
+ if (record.state === 'publication-prepared' && event.type === 'publication-review-ready') {
272
+ delete next.claim;
273
+ next.state = 'completed';
274
+ next.revision += 1;
275
+ return next;
276
+ }
277
+ throw new Error(`Plan Parent transition is not allowed: ${record.state} + ${event.type}`);
278
+ }
279
+ export function planParentScheduleKey(id) {
280
+ requireText(id, 'Plan Parent schedule id');
281
+ return `plan-parent:${id}`;
282
+ }
283
+ export function assertPlanParentRecord(value, path = 'Plan Parent') {
284
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
285
+ throw new Error(`${path} must be an object.`);
286
+ }
287
+ const record = value;
288
+ exactKeys(value, [
289
+ 'id', 'revision', 'state', 'repository', 'issueNumber', 'configHash', 'baseCommit',
290
+ 'baseTree', 'graph', 'graphHash', 'waves', 'currentWave', 'checkpoint', 'children',
291
+ 'integrationCursor', 'integratedCommit', 'integratedTree', 'integrationIntent',
292
+ 'integrationHistory', 'validationReceiptIds', 'validationHistory', 'labelTransitions',
293
+ 'recoveryMissionId', 'recoveryTarget', 'publicationId', 'resumeTarget', 'nextEligibleAt',
294
+ 'resumableReason', 'requiredPredicate', 'actionKey', 'claim', 'cancellation',
295
+ ], path);
296
+ requireText(record.id, `${path}.id`);
297
+ requireText(record.repository, `${path}.repository`);
298
+ if (!Number.isSafeInteger(record.revision) || record.revision < 1)
299
+ throw new Error(`${path}.revision is invalid.`);
300
+ if (!planParentStates.includes(record.state))
301
+ throw new Error(`${path}.state is invalid.`);
302
+ if (!Number.isSafeInteger(record.issueNumber) || record.issueNumber <= 0)
303
+ throw new Error(`${path}.issueNumber is invalid.`);
304
+ digest(record.configHash, `${path}.configHash`);
305
+ objectId(record.baseCommit, `${path}.baseCommit`);
306
+ objectId(record.baseTree, `${path}.baseTree`);
307
+ const baseline = createPlanParent({
308
+ id: record.id, repository: record.repository, issueNumber: record.issueNumber,
309
+ configHash: record.configHash, baseCommit: record.baseCommit, baseTree: record.baseTree,
310
+ graph: record.graph,
311
+ });
312
+ if (record.graphHash !== baseline.graphHash || canonicalJson(record.waves) !== canonicalJson(baseline.waves)) {
313
+ throw new Error(`${path} graph hash or deterministic waves do not match.`);
314
+ }
315
+ if (!Number.isSafeInteger(record.currentWave) || record.currentWave < 0
316
+ || record.currentWave >= record.waves.length)
317
+ throw new Error(`${path}.currentWave is invalid.`);
318
+ validateCheckpoint(record.checkpoint);
319
+ objectId(record.integratedCommit, `${path}.integratedCommit`);
320
+ objectId(record.integratedTree, `${path}.integratedTree`);
321
+ if (!Number.isSafeInteger(record.integrationCursor) || record.integrationCursor < 0
322
+ || record.integrationCursor > (record.waves[record.currentWave]?.length ?? 0)) {
323
+ throw new Error(`${path}.integrationCursor is invalid.`);
324
+ }
325
+ if (!record.children || typeof record.children !== 'object' || Array.isArray(record.children)) {
326
+ throw new Error(`${path}.children must be an object.`);
327
+ }
328
+ for (const [stableId, child] of Object.entries(record.children)) {
329
+ exactKeys(child, [
330
+ 'stableId', 'missionId', 'wave', 'baseCheckpointCommit', 'baseCheckpointTree', 'descriptor',
331
+ ], `${path}.children.${stableId}`);
332
+ if (child.stableId !== stableId
333
+ || child.missionId !== childMissionId({ parentId: record.id, nodeId: stableId })
334
+ || !Number.isSafeInteger(child.wave) || child.wave < 0 || child.wave >= record.waves.length
335
+ || !record.waves[child.wave]?.includes(stableId)) {
336
+ throw new Error(`${path}.children.${stableId} identity is invalid.`);
337
+ }
338
+ objectId(child.baseCheckpointCommit, `${path}.children.${stableId}.baseCheckpointCommit`);
339
+ objectId(child.baseCheckpointTree, `${path}.children.${stableId}.baseCheckpointTree`);
340
+ if (child.descriptor)
341
+ validateDescriptor(child.descriptor, record);
342
+ }
343
+ if (!Array.isArray(record.integrationHistory) || !Array.isArray(record.validationReceiptIds)
344
+ || !Array.isArray(record.validationHistory) || !Array.isArray(record.labelTransitions)) {
345
+ throw new Error(`${path} histories must be arrays.`);
346
+ }
347
+ record.integrationHistory.forEach((intent) => validateStoredIntent(intent, record));
348
+ if (record.integrationIntent)
349
+ validateStoredIntent(record.integrationIntent, record);
350
+ if (new Set(record.integrationHistory.map((intent) => intent.actionKey)).size
351
+ !== record.integrationHistory.length)
352
+ throw new Error(`${path}.integrationHistory contains duplicates.`);
353
+ if (record.state === 'integrating' && !record.integrationIntent) {
354
+ throw new Error(`${path} integrating state requires an integration intent.`);
355
+ }
356
+ if (record.integrationIntent && ![
357
+ 'integrating', 'wave-waiting', 'recovery-waiting', 'cancelling',
358
+ 'external-input-required', 'safety-stop',
359
+ ].includes(record.state))
360
+ throw new Error(`${path}.integrationIntent is invalid in ${record.state}.`);
361
+ record.labelTransitions.forEach(validateLabelTransition);
362
+ validateOptionalStrings(record.validationReceiptIds, `${path}.validationReceiptIds`);
363
+ validateOptionalStrings(record.validationHistory, `${path}.validationHistory`);
364
+ if (record.state === 'wave-waiting') {
365
+ if (!record.resumeTarget || !record.nextEligibleAt || !record.resumableReason
366
+ || !record.requiredPredicate || !record.actionKey) {
367
+ throw new Error(`${path} wave-waiting requires complete resume metadata.`);
368
+ }
369
+ exactTimestamp(record.nextEligibleAt, `${path}.nextEligibleAt`);
370
+ if (record.resumeTarget === 'integrating' && !record.integrationIntent) {
371
+ throw new Error(`${path} integrating resume requires its durable intent.`);
372
+ }
373
+ }
374
+ else if (record.resumeTarget || record.nextEligibleAt || record.resumableReason || record.requiredPredicate) {
375
+ throw new Error(`${path} resume metadata is allowed only in wave-waiting.`);
376
+ }
377
+ if (record.cancellation)
378
+ validateCancellation(record.cancellation);
379
+ if (record.cancellation && record.state !== 'cancelling' && record.state !== 'cancelled'
380
+ && record.state !== 'safety-stop')
381
+ throw new Error(`${path}.cancellation state is invalid.`);
382
+ if (record.claim)
383
+ validateParentClaim(record.claim, path);
384
+ if (record.claim && terminal(record.state))
385
+ throw new Error(`${path}.claim is forbidden in terminal state.`);
386
+ if (record.state !== 'created' && record.state !== 'next-wave') {
387
+ for (const stableId of record.waves[record.currentWave] ?? []) {
388
+ if (!record.children[stableId])
389
+ throw new Error(`${path} current wave child ${stableId} is missing.`);
390
+ }
391
+ }
392
+ if (record.state === 'publication-prepared' && !record.publicationId) {
393
+ throw new Error(`${path} publication-prepared requires publicationId.`);
394
+ }
395
+ if (record.recoveryTarget && record.state !== 'recovery-waiting') {
396
+ throw new Error(`${path}.recoveryTarget is allowed only in recovery-waiting.`);
397
+ }
398
+ if (record.state === 'recovery-waiting' && !record.recoveryMissionId) {
399
+ throw new Error(`${path} recovery-waiting requires recoveryMissionId.`);
400
+ }
401
+ }
402
+ export function linkWaveChildren(record) {
403
+ if (record.state !== 'created' && record.state !== 'next-wave') {
404
+ throw new Error(`Plan Parent cannot link children from state ${record.state}.`);
405
+ }
406
+ const next = structuredClone(record);
407
+ for (const stableId of record.waves[record.currentWave] ?? []) {
408
+ if (next.children[stableId])
409
+ continue;
410
+ next.children[stableId] = {
411
+ stableId,
412
+ missionId: childMissionId({ parentId: record.id, nodeId: stableId }),
413
+ wave: record.currentWave,
414
+ baseCheckpointCommit: record.checkpoint.commitSha,
415
+ baseCheckpointTree: record.checkpoint.treeSha,
416
+ };
417
+ }
418
+ return transitionPlanParent(next, { type: 'wave-linked' });
419
+ }
420
+ function computeWaves(graph) {
421
+ const dependencies = new Map(graph.nodes.map((node) => [node.stableId, new Set(node.dependsOn)]));
422
+ for (const edge of graph.edges)
423
+ dependencies.get(edge.to)?.add(edge.from);
424
+ const waves = [];
425
+ while (dependencies.size > 0) {
426
+ const ready = [...dependencies].filter(([, deps]) => deps.size === 0)
427
+ .map(([id]) => id).sort();
428
+ if (ready.length === 0)
429
+ throw new Error('Plan Parent graph contains a dependency cycle.');
430
+ waves.push(ready);
431
+ for (const id of ready)
432
+ dependencies.delete(id);
433
+ for (const deps of dependencies.values())
434
+ ready.forEach((id) => deps.delete(id));
435
+ }
436
+ return waves;
437
+ }
438
+ function validateDescriptor(value, parent) {
439
+ requireText(value.stableId, 'Plan Parent descriptor stableId');
440
+ objectId(value.childCommit, 'Plan Parent descriptor childCommit');
441
+ objectId(value.childTree, 'Plan Parent descriptor childTree');
442
+ objectId(value.baseCheckpointCommit, 'Plan Parent descriptor base checkpoint');
443
+ digest(value.configHash, 'Plan Parent descriptor configHash');
444
+ digest(value.reservationFingerprint, 'Plan Parent descriptor reservationFingerprint');
445
+ requireText(value.executorVersion, 'Plan Parent descriptor executorVersion');
446
+ validateStrings(value.changedPaths, 'Plan Parent descriptor changedPaths');
447
+ validateStrings(value.validationReceiptIds, 'Plan Parent descriptor validation receipts');
448
+ if (value.configHash !== parent.configHash)
449
+ throw new Error('Plan Parent descriptor config hash mismatch.');
450
+ }
451
+ function validateIntent(value, parent) {
452
+ if (value.version !== 1 || value.wave !== parent.currentWave
453
+ || value.cursor !== parent.integrationCursor
454
+ || value.stableId !== parent.waves[parent.currentWave]?.[parent.integrationCursor]) {
455
+ throw new Error('Plan Parent integration intent cursor does not match deterministic order.');
456
+ }
457
+ requireText(value.actionKey, 'Plan Parent integration actionKey');
458
+ objectId(value.expectedOldCommit, 'Plan Parent integration old commit');
459
+ objectId(value.expectedNewCommit, 'Plan Parent integration new commit');
460
+ objectId(value.expectedNewTree, 'Plan Parent integration new tree');
461
+ if (value.expectedOldCommit !== parent.integratedCommit) {
462
+ throw new Error('Plan Parent integration intent old identity mismatch.');
463
+ }
464
+ }
465
+ function validateStoredIntent(value, parent) {
466
+ if (value.version !== 1 || !Number.isSafeInteger(value.wave) || value.wave < 0
467
+ || value.wave >= parent.waves.length || !Number.isSafeInteger(value.cursor) || value.cursor < 0
468
+ || value.stableId !== parent.waves[value.wave]?.[value.cursor]) {
469
+ throw new Error('Plan Parent stored integration intent is invalid.');
470
+ }
471
+ requireText(value.actionKey, 'Plan Parent stored integration actionKey');
472
+ objectId(value.expectedOldCommit, 'Plan Parent stored integration old commit');
473
+ objectId(value.expectedNewCommit, 'Plan Parent stored integration new commit');
474
+ objectId(value.expectedNewTree, 'Plan Parent stored integration new tree');
475
+ }
476
+ function validateCheckpoint(value) {
477
+ objectId(value.commitSha, 'Plan Parent checkpoint commit');
478
+ objectId(value.treeSha, 'Plan Parent checkpoint tree');
479
+ }
480
+ function validateLabelTransition(value) {
481
+ requireText(value.stableId, 'Plan Parent label stableId');
482
+ requireText(value.from, 'Plan Parent label from');
483
+ requireText(value.to, 'Plan Parent label to');
484
+ requireText(value.receiptId, 'Plan Parent label receiptId');
485
+ }
486
+ function validateCancellation(value) {
487
+ exactTimestamp(value.requestedAt, 'Plan Parent cancellation requestedAt');
488
+ requireText(value.requestedBy, 'Plan Parent cancellation requestedBy');
489
+ }
490
+ function transientAllowed(state, target) {
491
+ return state === target || (state === 'integrating' && target === 'wave-prepared')
492
+ || (state === 'publication-prepared' && target === 'publication-prepared')
493
+ || (state === 'recovery-waiting' && target === 'recovery-waiting');
494
+ }
495
+ function revokeTransient(record) {
496
+ delete record.resumeTarget;
497
+ delete record.nextEligibleAt;
498
+ delete record.resumableReason;
499
+ delete record.requiredPredicate;
500
+ delete record.actionKey;
501
+ }
502
+ function terminal(state) {
503
+ return ['external-input-required', 'safety-stop', 'cancelled', 'completed'].includes(state);
504
+ }
505
+ function validateStrings(values, field) {
506
+ if (!Array.isArray(values) || values.length === 0)
507
+ throw new Error(`${field} must be non-empty.`);
508
+ values.forEach((value) => requireText(value, field));
509
+ if (new Set(values).size !== values.length)
510
+ throw new Error(`${field} must not contain duplicates.`);
511
+ }
512
+ function validateOptionalStrings(values, field) {
513
+ if (!Array.isArray(values))
514
+ throw new Error(`${field} must be an array.`);
515
+ values.forEach((value) => requireText(value, field));
516
+ if (new Set(values).size !== values.length)
517
+ throw new Error(`${field} must not contain duplicates.`);
518
+ }
519
+ function validateParentClaim(claim, path) {
520
+ if (claim.version !== 1 || !Number.isSafeInteger(claim.fencingEpoch) || claim.fencingEpoch <= 0) {
521
+ throw new Error(`${path}.claim is invalid.`);
522
+ }
523
+ [claim.token, claim.daemonId, claim.hostId, claim.bootNonce].forEach((value) => requireText(value, `${path}.claim identity`));
524
+ exactTimestamp(claim.claimedAt, `${path}.claim.claimedAt`);
525
+ exactTimestamp(claim.leaseUntil, `${path}.claim.leaseUntil`);
526
+ if (claim.leaseUntil <= claim.claimedAt)
527
+ throw new Error(`${path}.claim lease is invalid.`);
528
+ if (!Array.isArray(claim.processes))
529
+ throw new Error(`${path}.claim.processes must be an array.`);
530
+ const identities = new Set();
531
+ for (const process of claim.processes) {
532
+ requireText(process.actionKey, `${path}.claim.process.actionKey`);
533
+ if (!Number.isSafeInteger(process.pid) || process.pid <= 0) {
534
+ throw new Error(`${path}.claim.process.pid is invalid.`);
535
+ }
536
+ if (process.hostId !== claim.hostId || process.bootNonce !== claim.bootNonce) {
537
+ throw new Error(`${path}.claim process host or boot identity is invalid.`);
538
+ }
539
+ exactTimestamp(process.startedAt, `${path}.claim.process.startedAt`);
540
+ const identity = `${process.hostId}:${process.bootNonce}:${process.pid}:${process.actionKey}`;
541
+ if (identities.has(identity))
542
+ throw new Error(`${path}.claim contains duplicate process identity.`);
543
+ identities.add(identity);
544
+ }
545
+ }
546
+ function exactKeys(record, allowed, path) {
547
+ const allowedSet = new Set(allowed);
548
+ for (const key of Object.keys(record)) {
549
+ if (!allowedSet.has(key))
550
+ throw new Error(`${path} has unexpected field ${key}.`);
551
+ }
552
+ }
553
+ function requireText(value, field) {
554
+ if (typeof value !== 'string' || value.trim().length === 0)
555
+ throw new Error(`${field} must be non-empty.`);
556
+ }
557
+ function objectId(value, field) {
558
+ if (!/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/u.test(value))
559
+ throw new Error(`${field} must be a Git object ID.`);
560
+ }
561
+ function digest(value, field) {
562
+ if (!/^sha256:[a-f0-9]{64}$/u.test(value))
563
+ throw new Error(`${field} must be a SHA-256 digest.`);
564
+ }
565
+ function exactTimestamp(value, field) {
566
+ const milliseconds = Date.parse(value);
567
+ if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {
568
+ throw new Error(`${field} must be an exact UTC ISO timestamp.`);
569
+ }
570
+ }
571
+ function sha256(value) {
572
+ return `sha256:${createHash('sha256').update(value, 'utf8').digest('hex')}`;
573
+ }
574
+ function canonicalJson(value) {
575
+ if (Array.isArray(value))
576
+ return `[${value.map(canonicalJson).join(',')}]`;
577
+ if (value && typeof value === 'object') {
578
+ return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b))
579
+ .map(([key, child]) => `${JSON.stringify(key)}:${canonicalJson(child)}`).join(',')}}`;
580
+ }
581
+ return JSON.stringify(value);
582
+ }
583
+ //# sourceMappingURL=mission-plan-parent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-plan-parent.js","sourceRoot":"","sources":["../../../src/runner/mission-plan-parent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAGpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa;IACzE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW;IACnE,kBAAkB,EAAE,sBAAsB,EAAE,YAAY;IACxD,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW;CAC1D,CAAC;AAuHX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB;IAC9E,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB;IAC7D,2BAA2B,EAAE,mBAAmB,EAAE,sBAAsB;IACxE,yBAAyB,EAAE,0BAA0B,EAAE,2BAA2B;IAClF,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB;IAC1D,qCAAqC,EAAE,yBAAyB;IAChE,yBAAyB,EAAE,aAAa;CACiB,CAAC;AAG5D,MAAM,6BAA6B,GAAwD,IAAI,CAAC;AAChG,KAAK,6BAA6B,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,KAQhC;IACC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACxC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK;QACL,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK;QACL,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;QACpE,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,KAAK,CAAC,UAAU;QAClC,cAAc,EAAE,KAAK,CAAC,QAAQ;QAC9B,kBAAkB,EAAE,EAAE;QACtB,oBAAoB,EAAE,EAAE;QACxB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAwB,EACxB,KAAsB;IAEtB,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QAClG,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QAC9E,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,qCAAqC,EAAE,CAAC;QAC1F,IAAI,CAAC,MAAM,CAAC,iBAAiB;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACtG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,iBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;YACnE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC;YAC/D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,yBAAyB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;WACzE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7F,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;QACnE,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACtD,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;QAC1D,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QACvE,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACxE,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjG,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;QAC5B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClH,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAC3C,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW;mBAC1C,UAAU,CAAC,oBAAoB,KAAK,KAAK,CAAC,oBAAoB,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,+CAA+C,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;YACzF,CAAC;YACD,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC7E,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC3E,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;QACnE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC;QAC/D,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACrF,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC;WACnE,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAC3C,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;QACtE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC;QAChC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC3E,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACjF,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,iBAAiB,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAAC;WAC1E,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACjF,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAC;QACjF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC;QAChC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC;QAC3B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC7E,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;QACrE,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAC9E,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB;eACrD,KAAK,CAAC,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACjD,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACpF,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,uCAAuC,CAAC,CAAC;QAC3E,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC;QACpC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,WAAW,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC3C,OAAO,eAAe,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc,EAAE,IAAI,GAAG,aAAa;IACzE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAAG,KAAoC,CAAC;IACpD,SAAS,CAAC,KAAgC,EAAE;QAC1C,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY;QAClF,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU;QAClF,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB;QAC9E,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,kBAAkB;QACrF,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB;QACxF,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;KAC7E,EAAE,IAAI,CAAC,CAAC;IACT,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IACrC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;IACnH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IAC3F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IAC7H,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC;QAChC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW;QAC7E,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACvF,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7G,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kDAAkD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC;WAClE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACnG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC9D,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,iBAAiB,GAAG,CAAC;WAC9E,MAAM,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,SAAS,CAAC,KAA2C,EAAE;YACrD,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,YAAY;SAC5F,EAAE,GAAG,IAAI,aAAa,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;eAC1B,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;eAC7E,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM;eACxF,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,aAAa,QAAQ,uBAAuB,CAAC,CAAC;QACvE,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,IAAI,aAAa,QAAQ,uBAAuB,CAAC,CAAC;QAC1F,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,IAAI,aAAa,QAAQ,qBAAqB,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,UAAU;YAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC;WACvF,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,IAAI,MAAM,CAAC,iBAAiB;QAAE,oBAAoB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACrF,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACvE,MAAM,CAAC,kBAAkB,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0CAA0C,CAAC,CAAC;IAC3G,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oDAAoD,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC;QAC/B,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY;QAC/D,yBAAyB,EAAE,aAAa;KACzC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oCAAoC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACtG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzD,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,IAAI,uBAAuB,CAAC,CAAC;IACrF,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,IAAI,oBAAoB,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe;eACxE,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kDAAkD,CAAC,CAAC;QAC7E,CAAC;QACD,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,YAAY,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kDAAkD,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9G,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mDAAmD,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,YAAY;QAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW;WACnF,MAAM,CAAC,KAAK,KAAK,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,KAAK;QAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;IAC7G,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/D,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,QAAQ,cAAc,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,sBAAsB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+CAA+C,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,sDAAsD,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+CAA+C,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;YACxB,QAAQ;YACR,SAAS,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACpE,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,oBAAoB,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;YACjD,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;SAC9C,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;QAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;aAClE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgC,EAAE,MAAwB;IACpF,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;IAC/D,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;IAC9D,QAAQ,CAAC,KAAK,CAAC,oBAAoB,EAAE,wCAAwC,CAAC,CAAC;IAC/E,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,+CAA+C,CAAC,CAAC;IACtF,WAAW,CAAC,KAAK,CAAC,eAAe,EAAE,wCAAwC,CAAC,CAAC;IAC7E,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,qCAAqC,CAAC,CAAC;IAC3E,eAAe,CAAC,KAAK,CAAC,oBAAoB,EAAE,4CAA4C,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,cAAc,CAAC,KAAkC,EAAE,MAAwB;IAClF,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW;WACvD,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB;WACzC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,mCAAmC,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;IACxE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;IACxE,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,iBAAiB,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAkC,EAAE,MAAwB;IACxF,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;WACzE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;WAC5F,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,0CAA0C,CAAC,CAAC;IACzE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;IAC/E,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,2CAA2C,CAAC,CAAC;IAC/E,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA2B;IACrD,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAgC;IAC/D,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC1D,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IAClD,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAC9C,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA0B;IACtD,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;IAC1E,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAsB,EAAE,MAA8B;IAC9E,OAAO,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,aAAa,IAAI,MAAM,KAAK,eAAe,CAAC;WAC7E,CAAC,KAAK,KAAK,sBAAsB,IAAI,MAAM,KAAK,sBAAsB,CAAC;WACvE,CAAC,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK,kBAAkB,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,MAAwB;IAC/C,OAAO,MAAM,CAAC,YAAY,CAAC;IAC3B,OAAO,MAAM,CAAC,cAAc,CAAC;IAC7B,OAAO,MAAM,CAAC,eAAe,CAAC;IAC9B,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAChC,OAAO,MAAM,CAAC,SAAS,CAAC;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAsB;IACtC,OAAO,CAAC,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,KAAa;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAClG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAgB,EAAE,KAAa;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAC1E,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAmB,EAAE,IAAY;IAC5D,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7E,WAAW,CAAC,KAAK,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAChD,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,kBAAkB,CAAC,CAAC;IAC3D,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IAC5F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,0BAA0B,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kDAAkD,CAAC,CAAC;QAC7E,CAAC;QACD,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,0BAA0B,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9F,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6CAA6C,CAAC,CAAC;QACpG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAA+B,EAAE,OAAiB,EAAE,IAAY;IACjF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,GAAG,GAAG,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;AAC7G,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2BAA2B,CAAC,CAAC;AAC5G,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,KAAa;IAC1C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,sCAAsC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3E,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACpE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}