wezard 2.6.3 → 2.7.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 (106) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CLAUDE.md +6 -6
  3. package/README.md +1 -15
  4. package/dist/cli/codex-hook.js +5 -1
  5. package/dist/cli/codex-hook.js.map +1 -1
  6. package/dist/cli/sync.js +5 -4
  7. package/dist/cli/sync.js.map +1 -1
  8. package/dist/daemon/approval.js +12 -5
  9. package/dist/daemon/approval.js.map +1 -1
  10. package/dist/daemon/bot-mux.js +4 -0
  11. package/dist/daemon/bot-mux.js.map +1 -1
  12. package/dist/daemon/chat-log.js +5 -5
  13. package/dist/daemon/chat-log.js.map +1 -1
  14. package/dist/daemon/chat-name.js +5 -2
  15. package/dist/daemon/chat-name.js.map +1 -1
  16. package/dist/daemon/detail.js +28 -5
  17. package/dist/daemon/detail.js.map +1 -1
  18. package/dist/daemon/direction.js +3 -2
  19. package/dist/daemon/direction.js.map +1 -1
  20. package/dist/daemon/dispatch.js +6 -0
  21. package/dist/daemon/dispatch.js.map +1 -0
  22. package/dist/daemon/handoff.js +66 -15
  23. package/dist/daemon/handoff.js.map +1 -1
  24. package/dist/daemon/image-input.js +25 -5
  25. package/dist/daemon/image-input.js.map +1 -1
  26. package/dist/daemon/inbound.js +5 -6
  27. package/dist/daemon/inbound.js.map +1 -1
  28. package/dist/daemon/index.js +1232 -671
  29. package/dist/daemon/index.js.map +1 -1
  30. package/dist/daemon/jobs.js +13 -3
  31. package/dist/daemon/jobs.js.map +1 -1
  32. package/dist/daemon/last-response.js +29 -4
  33. package/dist/daemon/last-response.js.map +1 -1
  34. package/dist/daemon/message-events.js +534 -0
  35. package/dist/daemon/message-events.js.map +1 -0
  36. package/dist/daemon/mirror-bridge.js +702 -790
  37. package/dist/daemon/mirror-bridge.js.map +1 -1
  38. package/dist/daemon/mirror-store.js.map +1 -1
  39. package/dist/daemon/notices.js +9 -2
  40. package/dist/daemon/notices.js.map +1 -1
  41. package/dist/daemon/peers.js +124 -145
  42. package/dist/daemon/peers.js.map +1 -1
  43. package/dist/daemon/pending-items.js +33 -34
  44. package/dist/daemon/pending-items.js.map +1 -1
  45. package/dist/daemon/route.js +5 -2
  46. package/dist/daemon/route.js.map +1 -1
  47. package/dist/daemon/router.js +643 -0
  48. package/dist/daemon/router.js.map +1 -0
  49. package/dist/daemon/session-name.js +1 -1
  50. package/dist/daemon/session-name.js.map +1 -1
  51. package/dist/daemon/spawn-tmux.js +32 -13
  52. package/dist/daemon/spawn-tmux.js.map +1 -1
  53. package/dist/daemon/subagent-tail.js +3 -3
  54. package/dist/daemon/subagent-tail.js.map +1 -1
  55. package/dist/daemon/weixin.js +111 -7
  56. package/dist/daemon/weixin.js.map +1 -1
  57. package/dist/daemon/{cc-session.js → wezard-session.js} +32 -2
  58. package/dist/daemon/wezard-session.js.map +1 -0
  59. package/dist/daemon/wizard.js +5 -5
  60. package/dist/daemon/wizard.js.map +1 -1
  61. package/dist/daemon/workflow-nodes.js +3 -3
  62. package/dist/daemon/workflow-nodes.js.map +1 -1
  63. package/dist/daemon/workflow-plans.js +9 -6
  64. package/dist/daemon/workflow-plans.js.map +1 -1
  65. package/dist/mcp/server.js +38 -47
  66. package/dist/mcp/server.js.map +1 -1
  67. package/dist/shared/chat-http.js +2 -2
  68. package/dist/shared/chat-http.js.map +1 -1
  69. package/dist/shared/chat-view.js +0 -4
  70. package/dist/shared/chat-view.js.map +1 -1
  71. package/dist/shared/cli-backends.js +11 -1
  72. package/dist/shared/cli-backends.js.map +1 -1
  73. package/dist/shared/codex.js +1 -1
  74. package/dist/shared/codex.js.map +1 -1
  75. package/dist/shared/config.js +3 -44
  76. package/dist/shared/config.js.map +1 -1
  77. package/dist/shared/detail-render.js +36 -11
  78. package/dist/shared/detail-render.js.map +1 -1
  79. package/dist/shared/detail-store.js.map +1 -1
  80. package/dist/shared/message-footer.js +8 -8
  81. package/dist/shared/message-footer.js.map +1 -1
  82. package/dist/shared/reminder.js +109 -37
  83. package/dist/shared/reminder.js.map +1 -1
  84. package/dist/shared/role-render.js +28 -20
  85. package/dist/shared/role-render.js.map +1 -1
  86. package/dist/shared/role-search.js +3 -3
  87. package/dist/shared/role-search.js.map +1 -1
  88. package/dist/shared/role-view.js +50 -30
  89. package/dist/shared/role-view.js.map +1 -1
  90. package/dist/shared/session-label.js +25 -6
  91. package/dist/shared/session-label.js.map +1 -1
  92. package/dist/shared/turn-state.js +7 -7
  93. package/dist/shared/turn-state.js.map +1 -1
  94. package/dist/shared/world.js +1 -3
  95. package/dist/shared/world.js.map +1 -1
  96. package/hooks/pre-tool-use.sh +5 -25
  97. package/package.json +1 -1
  98. package/web/chat.css +3 -33
  99. package/web/chat.js +11 -62
  100. package/dist/daemon/answer-transfer.js +0 -56
  101. package/dist/daemon/answer-transfer.js.map +0 -1
  102. package/dist/daemon/cc-session.js.map +0 -1
  103. package/dist/daemon/receipts.js +0 -906
  104. package/dist/daemon/receipts.js.map +0 -1
  105. package/dist/shared/keepalive.js +0 -46
  106. package/dist/shared/keepalive.js.map +0 -1
@@ -0,0 +1,534 @@
1
+ import { createHash } from "node:crypto";
2
+ import { loadJsonMap } from "../shared/json-map-store.js";
3
+ const HOLD_LOG_MS = 30_000;
4
+ const HOLD_RELOG_MS = 5 * 60_000;
5
+ const canonical = (x) => Array.isArray(x) ? x.map(canonical)
6
+ : x && typeof x === "object" ? Object.fromEntries(Object.entries(x).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => [k, canonical(v)])) : x;
7
+ const digest = (x) => createHash("sha256").update(JSON.stringify(canonical(x))).digest("hex");
8
+ export const messageId = (bot, chat, id) => `h${digest([bot, chat, id])}`;
9
+ export const finalId = (event, channel, revision) => `f${digest([event, channel, revision])}`;
10
+ const clone = (x) => JSON.parse(JSON.stringify(x));
11
+ const backoff = (n) => Date.now() + Math.min(60_000, 1000 * 2 ** Math.min(n, 6));
12
+ const why = (e) => e instanceof Error ? e.message : typeof e === "object" ? JSON.stringify(e) : String(e);
13
+ // A negative transport ACK proves non-delivery; a timeout or disconnected socket does not.
14
+ export const rejectedAck = (e) => !!e && typeof e === "object"
15
+ && typeof e.errcode === "number" && e.errcode !== 0
16
+ && typeof e.errmsg === "string" && !!e.headers;
17
+ export const createMessageEvents = (file, io) => {
18
+ const db = loadJsonMap(file, undefined, { strict: true });
19
+ const outbox = loadJsonMap(`${file}.finals`, undefined, { strict: true });
20
+ Object.entries(db.all()).forEach(([id, e]) => {
21
+ if (!e || e.id !== id || typeof e.fingerprint !== "string" || !e.target || typeof e.speaker !== "string" || typeof e.channel !== "string" || (e.serves !== undefined && typeof e.serves !== "string") || !e.payload || typeof e.payload.text !== "string" || (!e.payload.human === !e.payload.peer) || !Number.isFinite(e.at) || !Number.isFinite(e.attempts) || !Number.isFinite(e.deadline) || !["queued", "dispatching", "awaiting-result", "complete", "canceled", "uncertain"].includes(e.execution))
22
+ throw new Error(`invalid message event ${id}`);
23
+ });
24
+ Object.entries(outbox.all()).forEach(([id, d]) => {
25
+ if (!d || d.id !== id || !Array.isArray(d.parts) || d.parts.length !== d.chunks?.length || !d.chunks.every((c) => typeof c === "string") || !d.parts.every((p) => ["pending", "sending", "waiting-ack", "delivered", "uncertain", "failed"].includes(p.state)) || !d.channel)
26
+ throw new Error(`invalid final delivery ${id}`);
27
+ });
28
+ let stopped = true;
29
+ let accepting = true;
30
+ let pumping = false;
31
+ let timer;
32
+ const active = new Set();
33
+ const targets = new Set();
34
+ const delivering = new Set();
35
+ const probing = new Map();
36
+ let deliveryCursor = 0;
37
+ let probeCursor = 0;
38
+ let probeCount = 0;
39
+ const probeTargets = new Map();
40
+ /** 排队的回执 / 派活从哪一刻起被扣、此刻为什么、上次报到哪 (只在内存: 日志与 status 用)。 */
41
+ const holding = new Map();
42
+ const hold = (e, why) => {
43
+ const now = Date.now();
44
+ const h = { since: now, ...holding.get(e.id), why };
45
+ const due = now - h.since >= HOLD_LOG_MS && (!h.told || h.told.why !== why || now - h.told.at >= HOLD_RELOG_MS);
46
+ holding.set(e.id, due ? { ...h, told: { why, at: now } } : h);
47
+ if (due)
48
+ io.held?.(e, why, now - h.since);
49
+ };
50
+ // An exposed event belongs to the session that received it, not a replacement
51
+ // pane now bound to the same wizard. Keep its uncertain history for reconciliation.
52
+ const resourceOf = (e) => {
53
+ const transcript = io.transcript(e.target);
54
+ const sessionId = io.sessionId(e.target);
55
+ if (e.exposure === "none")
56
+ return io.resource(e.target);
57
+ if (e.sessionId)
58
+ return e.sessionId === sessionId ? io.resource(e.target) : `session:${e.sessionId}`;
59
+ if (e.transcript)
60
+ return e.transcript === transcript ? io.resource(e.target) : `transcript:${e.transcript}`;
61
+ return io.resource(e.target);
62
+ };
63
+ const bounded = (id, read) => {
64
+ const e = db.get(id);
65
+ const target = e ? resourceOf(e) : id;
66
+ if (probing.has(id) || probeTargets.has(target) || probeCount >= 16)
67
+ return Promise.reject(new Error("probe already running or probe capacity occupied"));
68
+ const token = Symbol(id);
69
+ probing.set(id, token);
70
+ probeTargets.set(target, token);
71
+ probeCount++;
72
+ const release = () => {
73
+ if (probing.get(id) === token)
74
+ probing.delete(id);
75
+ if (probeTargets.get(target) === token)
76
+ probeTargets.delete(target);
77
+ };
78
+ let timer;
79
+ const work = Promise.resolve().then(read);
80
+ void work.finally(release).catch(() => undefined);
81
+ return Promise.race([work, new Promise((_, reject) => {
82
+ timer = setTimeout(() => reject(new Error("pane probe exceeded 5s; no transport attempted")), 5000);
83
+ })]).finally(() => { clearTimeout(timer); probeCount--; release(); });
84
+ };
85
+ const patch = (id, p) => db.set(id, { ...db.get(id), ...p });
86
+ const part = (id, n, p) => {
87
+ const d = outbox.get(id);
88
+ outbox.set(id, { ...d, parts: d.parts.map((x, i) => i === n ? { ...x, ...p } : x) });
89
+ };
90
+ const cancel = (select, reason = "canceled by owner") => {
91
+ const rows = Object.values(db.all()).filter((e) => !["complete", "canceled"].includes(e.execution) && select(e));
92
+ rows.forEach((e) => {
93
+ const next = patch(e.id, { canceled: true, reason, execution: e.exposure === "none" ? "canceled" : "uncertain" });
94
+ io.canceled(next); // Cancellation after exposure never asserts the pane stopped.
95
+ });
96
+ return rows.length;
97
+ };
98
+ const accept = (input) => {
99
+ if (!accepting)
100
+ throw new Error("message scheduler is stopped");
101
+ const clean = clone(input);
102
+ // `serves` 是路由元数据, 不参与身份: 同一个 id 重放 (含 reload 后重入箱) 带着同一份
103
+ // 内容就该是同一条消息, 哪怕 serves 的来历变了 —— 它不算内容的一部分。
104
+ const { serves: _routing, ...identified } = clean;
105
+ const fingerprint = digest(identified.identity ? [JSON.parse(identified.identity), identified.speaker, identified.channel] : identified);
106
+ const old = db.get(input.id);
107
+ if (old && old.fingerprint !== fingerprint)
108
+ throw new Error(`event identity conflict: ${input.id}`);
109
+ let e = old;
110
+ if (!e) {
111
+ e = { ...clean, fingerprint, at: Date.now(), execution: "queued", exposure: "none", attempts: 0 };
112
+ db.merge({ [e.id]: e });
113
+ }
114
+ if (e.execution === "queued") {
115
+ try {
116
+ io.accepted(e);
117
+ }
118
+ catch (error) {
119
+ patch(e.id, { execution: "uncertain", reason: `acceptance projection failed: ${why(error)}` });
120
+ throw error;
121
+ }
122
+ } // Idempotent adapters restore accounting/receipt intent after a torn cross-store write.
123
+ void pump();
124
+ return { ok: true, queued: e.execution === "queued", eventId: e.id };
125
+ };
126
+ const result = (id, body, revision, turn) => {
127
+ const e = db.get(id);
128
+ if (!e || e.result?.revision === revision)
129
+ return;
130
+ patch(id, { finalized: false, result: { body, revision, at: Date.now() }, execution: "complete", exposure: "consumed", ...(turn ? { turn } : {}) });
131
+ io.final?.(db.get(id), { text: body });
132
+ };
133
+ const delivery = (input) => {
134
+ const old = outbox.get(input.id);
135
+ if (old) {
136
+ if (old.body !== input.body || old.channel !== input.channel || old.revision !== input.revision)
137
+ throw new Error(`final identity conflict: ${input.id}`);
138
+ return old.id;
139
+ }
140
+ const frozen = clone(io.format?.(input) ?? input);
141
+ outbox.set(input.id, { ...frozen, at: Date.now(), parts: frozen.chunks.map(() => ({ state: "pending", attempts: 0 })) });
142
+ void pump();
143
+ return input.id;
144
+ };
145
+ const send = async (id) => {
146
+ delivering.add(id);
147
+ try {
148
+ for (let n = 0; n < outbox.get(id).parts.length && !stopped; n++) {
149
+ const d = outbox.get(id);
150
+ const p = d.parts[n];
151
+ if (p.state === "delivered")
152
+ continue;
153
+ if (p.state !== "pending" || (p.retryAt ?? 0) > Date.now())
154
+ break;
155
+ part(id, n, { state: "sending", attempts: p.attempts + 1 });
156
+ try {
157
+ const ack = await io.send(d, n);
158
+ part(id, n, { state: ack.failed ? "failed" : ack.uncertain ? "uncertain" : ack.queued ? "waiting-ack" : "delivered", ack: ack.ack, reason: ack.failed ?? ack.uncertain });
159
+ if (ack.uncertain || ack.queued || ack.failed)
160
+ break;
161
+ }
162
+ catch (e) {
163
+ part(id, n, { state: rejectedAck(e) ? "pending" : "uncertain", reason: why(e), retryAt: backoff(p.attempts + 1) });
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ finally {
169
+ delivering.delete(id);
170
+ }
171
+ };
172
+ const observe = async (e) => {
173
+ const evidence = await bounded(e.id, () => io.evidence(e));
174
+ if (stopped)
175
+ return;
176
+ if (!evidence.consumed)
177
+ return;
178
+ const current = db.get(e.id);
179
+ if (["complete", "canceled"].includes(current.execution))
180
+ return;
181
+ if (current.exposure !== "consumed" || (evidence.closedAt && !current.turnClosedAt))
182
+ patch(e.id, {
183
+ exposure: "consumed", interjected: evidence.interjected,
184
+ execution: current.canceled || (evidence.closedAt && !evidence.body) ? "uncertain" : "awaiting-result",
185
+ reason: current.canceled ? current.reason : evidence.closedAt && !evidence.body
186
+ ? "input turn closed without a final assistant answer; delivery remains uncertain and will not be retried" : undefined,
187
+ ...(evidence.closedAt ? { turnClosedAt: evidence.closedAt } : {}), turn: evidence.turn ?? current.turn,
188
+ });
189
+ if (!current.canceled)
190
+ io.committed(db.get(e.id));
191
+ if (evidence.body !== undefined && evidence.error) {
192
+ // CLI 报错收尾: 那段报错不是定论 (§5), 交路由表落中途态 —— 事件本身不动, 它的执行态
193
+ // 自有 deadline / 续跑那条路管 (与改动前一致)。
194
+ io.final?.(db.get(e.id), { text: evidence.body, error: true });
195
+ }
196
+ else if (evidence.body !== undefined && evidence.revision) {
197
+ result(e.id, evidence.body, evidence.revision, evidence.turn);
198
+ io.recovered(db.get(e.id));
199
+ }
200
+ };
201
+ /** 收件箱里的回执事件 (`rcpt:<event>:<rev>`): 只有它带路由归属 (serves), 也只有它该合并。 */
202
+ const isRcpt = (e) => e.id.startsWith("rcpt:") && !!e.serves;
203
+ /** §9.3 Aggregator: 同一个 target、服务同一笔 (`serves` = `receiver.event`) 还排着队的其它回执,
204
+ * 并进这一次注入 —— 扇出的兄弟陆续回来时是一轮, 不是一人一轮。被吸收的那些各自收口
205
+ * (`execution: complete`, 它们的 id 已终态, 重放不再注入); 结论由这一轮的终句统一交代。
206
+ * 回执的正文与信封是分开的两件 (`payload.text` 不含信封), 所以并的只是正文, 信封留注入那一份。 */
207
+ const absorb = (id) => {
208
+ const e = db.get(id);
209
+ if (!e || !isRcpt(e))
210
+ return;
211
+ const absorbed = Object.values(db.all())
212
+ .filter((x) => x.id !== e.id && isRcpt(x) && x.target === e.target && x.serves === e.serves
213
+ && x.execution === "queued" && !x.canceled)
214
+ .sort((a, b) => a.at - b.at || (a.id < b.id ? -1 : 1));
215
+ if (!absorbed.length)
216
+ return;
217
+ patch(e.id, { payload: { ...e.payload, text: [e.payload.text,
218
+ ...absorbed.map((x) => `(另一份回执 ${x.id} · ${x.speaker})\n${x.payload.text}`)].join("\n\n") } });
219
+ absorbed.forEach((x) => patch(x.id, { execution: "complete", exposure: "consumed", finalized: true, reason: `merged into ${e.id}` }));
220
+ };
221
+ const inject = async (id, resource) => {
222
+ active.add(resource);
223
+ targets.add(db.get(id).target);
224
+ try {
225
+ absorb(id);
226
+ const e = db.get(id);
227
+ if (stopped || e.execution !== "queued" || !io.valid(e))
228
+ return;
229
+ io.accepted(e);
230
+ patch(id, { execution: "dispatching", attempts: e.attempts + 1, transcript: io.transcript(e.target) ?? e.transcript });
231
+ const boundary = (phase, identity) => {
232
+ const current = db.get(id);
233
+ if (stopped || current.canceled || !io.valid(current))
234
+ return false;
235
+ if (current.exposure !== "none" && current.transcript && current.transcript !== io.transcript(e.target))
236
+ return false;
237
+ if (phase)
238
+ patch(id, { exposure: "possible", sessionId: identity?.sessionId,
239
+ transcript: identity?.transcript ?? io.transcript(e.target) ?? current.transcript });
240
+ return true;
241
+ };
242
+ let r;
243
+ try {
244
+ r = await io.inject(db.get(id), boundary);
245
+ }
246
+ catch (error) {
247
+ r = { ok: false, uncertain: db.get(id).exposure !== "none", retryable: db.get(id).exposure === "none", reason: why(error) };
248
+ }
249
+ const latest = db.get(id);
250
+ if (latest.result || latest.execution === "complete") {
251
+ if (!latest.canceled)
252
+ io.committed(latest);
253
+ return;
254
+ }
255
+ if (r.ok && !r.uncertain) {
256
+ const committed = patch(id, { execution: latest.canceled ? "uncertain" : "awaiting-result", exposure: "submitted", transcript: latest.transcript ?? io.transcript(e.target) });
257
+ if (!latest.canceled)
258
+ io.committed(committed);
259
+ }
260
+ else if (r.retryable && !r.uncertain && !latest.canceled) {
261
+ patch(id, { execution: "queued", exposure: "none", retryAt: backoff(latest.attempts), reason: r.reason });
262
+ }
263
+ else
264
+ patch(id, { execution: "uncertain", reason: r.reason || "submission acknowledgement unknown" });
265
+ }
266
+ catch (e) {
267
+ try {
268
+ patch(id, { reason: why(e), retryAt: backoff(db.get(id).attempts) });
269
+ }
270
+ catch {
271
+ accepting = false;
272
+ stopped = true;
273
+ clearInterval(timer);
274
+ timer = undefined;
275
+ }
276
+ io.error(e);
277
+ }
278
+ finally {
279
+ active.delete(resource);
280
+ targets.delete(db.get(id).target);
281
+ void pump();
282
+ }
283
+ };
284
+ /** 人说的这一句不受 daemon 的顺序管辖 (§9.1): 只要同一只 pane 上没有正在贴的那一次
285
+ * (物理互斥), 就贴进去 —— 排在它前面的回执、正在跑的那一轮都不挡它, 顺序交给 backend CLI
286
+ * 自己的输入队列 (贴进运行中的一轮会被记成 queued 轮, 终句照样归到这条 event)。多笔 event
287
+ * 因此天然并行: 人话补一句还是新起一件, 由读它的 LLM 判。回执 (peer) 仍按老规矩排 ——
288
+ * 它要的是结果归属, 不是语义。 */
289
+ const direct = (e) => !!e.payload.human;
290
+ /** 同一资源上, 排在 `e` 前面且此刻真挡得住它的那一行; 没有 = 它可以贴了。
291
+ * `retryAt` 未到的行不算挡住 —— 它在退避, 不该把整条 pane 的后来者一起钉住: 队头一次
292
+ * 探测超时 (5s) 就能把一个 target 静音十几分钟, 人话排在后面时是纯损失。
293
+ * injectable 与 blocker 共用这一条 —— 判据分家过一次, 表现是「对外说没人挡着, 实际谁也进不去」。 */
294
+ const pinOf = (e) => {
295
+ const rows = Object.values(db.all()).sort((a, b) => a.at - b.at);
296
+ const resource = io.resource(e.target);
297
+ const older = new Set(rows.slice(0, rows.findIndex((x) => x.id === e.id)).map((x) => x.id));
298
+ return rows.find((x) => x.id !== e.id && resourceOf(x) === resource
299
+ && (x.execution === "dispatching"
300
+ || (!direct(e) && ((x.execution === "uncertain" && !x.releasedAt)
301
+ || (e.priority === "normal" && (x.execution === "awaiting-result"
302
+ || (x.execution === "queued" && (x.retryAt ?? 0) <= Date.now() && older.has(x.id))))))));
303
+ };
304
+ /** 全局 4 路并发只限回执 / 派活: 人话之间、人话与别的 pane 都互不相干, 只认同 pane 物理互斥。 */
305
+ const injectable = (e) => !stopped && e.execution === "queued" && !e.canceled && e.deadline > Date.now() && io.valid(e)
306
+ && !targets.has(e.target) && !active.has(io.resource(e.target)) && (direct(e) || active.size < 4)
307
+ && pinOf(e) === undefined;
308
+ const blocker = (id) => {
309
+ const e = db.get(id);
310
+ if (!e || e.execution !== "queued")
311
+ return undefined;
312
+ const hit = pinOf(e);
313
+ return hit ? { id: hit.id, execution: hit.execution,
314
+ reason: hit.reason ?? (hit.execution === "uncertain" ? "旧事件投递结果不确定,需对账" : `等待较早事件(${hit.execution})`) } : undefined;
315
+ };
316
+ /** 一条还没贴出去的 event 此刻的排队全貌: 同 pane 上排在它前面的未了结行, 以及 injectable
317
+ * 的每一条否决项各自落在哪 —— 给人看「卡在谁后面、为什么、几时再试」, 不是一句「已排队」。 */
318
+ const queue = (id) => {
319
+ const e = db.get(id);
320
+ if (!e)
321
+ return undefined;
322
+ const resource = io.resource(e.target);
323
+ const ahead = Object.values(db.all())
324
+ .filter((x) => x.id !== e.id && x.at <= e.at && resourceOf(x) === resource
325
+ && ["queued", "dispatching", "awaiting-result"].includes(x.execution) && !x.canceled)
326
+ .sort((a, b) => a.at - b.at);
327
+ const pin = pinOf(e);
328
+ const holds = [
329
+ stopped ? "调度器未运行 (daemon 正在启停)" : "",
330
+ (e.retryAt ?? 0) > Date.now() ? `上次投递失败, ${new Date(e.retryAt).toTimeString().slice(0, 8)} 重试${e.reason ? `(${e.reason})` : ""}` : "",
331
+ targets.has(e.target) || active.has(resource) ? "同一 pane 正在贴另一条" : "",
332
+ !direct(e) && active.size >= 4 ? `全局同时投递已满 ${active.size} 路` : "",
333
+ pin ? `挡在前面: ${pin.id.slice(0, 10)}(${pin.execution}${pin.reason ? ` · ${pin.reason}` : ""})` : "",
334
+ ].filter(Boolean);
335
+ return { execution: e.execution, ahead: ahead.map(clone), holds };
336
+ };
337
+ const release = (id, reason) => {
338
+ const e = db.get(id);
339
+ const note = reason.trim().slice(0, 500);
340
+ if (!e)
341
+ return { ok: false, reason: "unknown event" };
342
+ if (!note)
343
+ return { ok: false, reason: "a reconciliation reason is required" };
344
+ if (!["awaiting-result", "uncertain"].includes(e.execution) || e.exposure === "none")
345
+ return { ok: false, reason: `event is not an exposed unresolved delivery (${e.execution}/${e.exposure})` };
346
+ if (e.releaseSource === "manual")
347
+ return { ok: false, event: clone(e), reason: "event already manually released" };
348
+ const next = patch(id, { execution: "uncertain", releasedAt: e.releasedAt ?? Date.now(), releaseSource: "manual", releaseReason: note,
349
+ reason: `manually released from queue; delivery remains uncertain: ${note}` });
350
+ void pump();
351
+ return { ok: true, event: clone(next) };
352
+ };
353
+ async function pump() {
354
+ if (stopped || pumping)
355
+ return;
356
+ pumping = true;
357
+ try {
358
+ // Scan the first unfinished part; later pending parts cannot jump an uncertain predecessor.
359
+ Object.values(outbox.all()).forEach((d) => d.parts.forEach((p, n) => {
360
+ if (!["waiting-ack", "uncertain"].includes(p.state))
361
+ return;
362
+ const evidence = io.deliveryEvidence?.(d, n);
363
+ if (evidence)
364
+ part(d.id, n, { state: evidence.state === "queued" ? "waiting-ack" : evidence.state, ack: evidence.ack, reason: evidence.reason });
365
+ }));
366
+ const finals = Object.values(outbox.all());
367
+ const rotated = [...finals.slice(deliveryCursor), ...finals.slice(0, deliveryCursor)];
368
+ rotated.filter((d) => {
369
+ const p = d.parts.find((x) => x.state !== "delivered");
370
+ return !delivering.has(d.id) && p?.state === "pending" && (p.retryAt ?? 0) <= Date.now();
371
+ }).slice(0, Math.max(0, 4 - delivering.size)).forEach((d) => {
372
+ deliveryCursor = (finals.findIndex((x) => x.id === d.id) + 1) % Math.max(1, finals.length);
373
+ void send(d.id).catch(io.error);
374
+ });
375
+ const rows = Object.values(db.all()).sort((a, b) => a.at - b.at);
376
+ [...holding.keys()].filter((id) => db.get(id)?.execution !== "queued").forEach((id) => holding.delete(id));
377
+ const fair = [...rows.slice(probeCursor), ...rows.slice(0, probeCursor)];
378
+ fair.forEach((e) => {
379
+ if (stopped)
380
+ return;
381
+ // Expiration and permission withdrawal are ledger work; a busy or hung
382
+ // probe on this pane must not prevent queued messages from expiring.
383
+ if (e.execution === "queued" && (e.deadline <= Date.now() || !io.valid(e))) {
384
+ cancel((x) => x.id === e.id, e.deadline <= Date.now() ? "deadline expired before submission" : "permission withdrawn");
385
+ return;
386
+ }
387
+ if (["awaiting-result", "uncertain"].includes(e.execution) && e.deadline <= Date.now() && !e.releasedAt) {
388
+ patch(e.id, { execution: "uncertain", releasedAt: Date.now(),
389
+ releaseSource: "deadline",
390
+ releaseReason: "event deadline elapsed; uncertainty retained and automatic retry withheld",
391
+ reason: `${e.reason ? `${e.reason}; ` : ""}event deadline elapsed; queue released with uncertain delivery` });
392
+ return;
393
+ }
394
+ // 人话的 ready 不碰 pane (只看交接闸), 不必占探测位: 否则同 pane 上一条 awaiting-result
395
+ // 每秒一次的 evidence 探测 (最长 5s) 几乎一直占着 probeTargets, 人话被反复跳过或误判失败退避。
396
+ if (e.execution === "queued" && direct(e)) {
397
+ if ((e.retryAt ?? 0) > Date.now() || !injectable(e))
398
+ return;
399
+ void io.ready(e).then((ready) => {
400
+ const current = db.get(e.id);
401
+ if (ready && injectable(current))
402
+ void inject(e.id, io.resource(current.target));
403
+ }).catch(io.error);
404
+ return;
405
+ }
406
+ if (probing.has(e.id) || probeTargets.has(resourceOf(e)) || probeCount >= 16) {
407
+ if (e.execution === "queued")
408
+ hold(e, "探测位被占 (同 pane 上另一条正在探测)");
409
+ return;
410
+ }
411
+ probeCursor = (rows.findIndex((x) => x.id === e.id) + 1) % Math.max(1, rows.length);
412
+ const failed = (error) => {
413
+ const current = db.get(e.id);
414
+ if (!stopped && current && !["complete", "canceled"].includes(current.execution)) {
415
+ const probeAttempts = (current.probeAttempts ?? 0) + 1;
416
+ patch(e.id, { probeAttempts, retryAt: backoff(probeAttempts), reason: `${current.reason ? `${current.reason}; ` : ""}${why(error)}` });
417
+ }
418
+ io.error(error);
419
+ };
420
+ if (["awaiting-result", "uncertain"].includes(e.execution)) {
421
+ if (e.execution === "uncertain" && (e.turnClosedAt || e.releasedAt))
422
+ return;
423
+ if ((e.retryAt ?? 0) > Date.now())
424
+ return;
425
+ const currentSession = io.sessionId(e.target);
426
+ const currentTranscript = io.transcript(e.target);
427
+ const replaced = e.exposure !== "none" && (e.sessionId
428
+ ? e.sessionId !== currentSession : !!e.transcript && e.transcript !== currentTranscript);
429
+ if (replaced && !e.supersededBy)
430
+ patch(e.id, { supersededBy: currentSession ?? (currentTranscript ? `transcript:${currentTranscript}` : "replacement-session-unavailable"),
431
+ reason: `${e.reason ? `${e.reason}; ` : ""}session replaced; old execution remains uncertain pending transcript reconciliation` });
432
+ void observe(e).then(() => {
433
+ if (!stopped && e.deadline <= Date.now() && db.get(e.id).execution === "awaiting-result")
434
+ patch(e.id, { execution: "uncertain", reason: "deadline exceeded; result/physical completion not confirmed" });
435
+ }).catch(failed);
436
+ return;
437
+ }
438
+ if (e.execution === "complete") {
439
+ if (!e.finalized) {
440
+ if (!e.canceled)
441
+ io.committed(e);
442
+ if (e.result) {
443
+ io.recovered(e);
444
+ // reload 落在 result 与 finalized 之间: 重放这一刻补上路由判定 (幂等 —— 同一条
445
+ // 定论重放只会在表上再写一次同样的 op)。
446
+ io.final?.(e, { text: e.result.body });
447
+ }
448
+ patch(e.id, { finalized: true });
449
+ }
450
+ return;
451
+ }
452
+ if (e.execution !== "queued")
453
+ return;
454
+ // 原因里不带重试时刻: 每次退避时刻都在变, 带上就成了「原因变了」, 日志每轮重报。
455
+ if ((e.retryAt ?? 0) > Date.now()) {
456
+ hold(e, `投递失败退避中${e.reason ? `(${e.reason})` : ""}`);
457
+ return;
458
+ }
459
+ if (!injectable(e)) {
460
+ hold(e, `injectable=false: ${queue(e.id)?.holds.join("; ") || "无效 / 过期"}`);
461
+ return;
462
+ }
463
+ void bounded(e.id, () => io.ready(e)).then((ready) => {
464
+ const current = db.get(e.id);
465
+ if (ready && injectable(current))
466
+ void inject(e.id, io.resource(current.target));
467
+ else if (current.execution === "queued")
468
+ hold(current, ready ? "injectable=false (ready 之后)" : "ready=false (前置未落定 / owner 未判闲)");
469
+ }).catch(failed);
470
+ });
471
+ }
472
+ catch (e) {
473
+ io.error(e);
474
+ }
475
+ finally {
476
+ pumping = false;
477
+ }
478
+ }
479
+ const resume = () => {
480
+ Object.values(db.all()).filter((e) => e.execution === "dispatching").forEach((e) => patch(e.id, {
481
+ execution: e.exposure === "none" ? "queued" : "uncertain", reason: "daemon restarted at input boundary; transcript evidence required",
482
+ }));
483
+ Object.values(outbox.all()).forEach((d) => d.parts.forEach((p, n) => {
484
+ if (p.state === "sending")
485
+ part(d.id, n, { state: "uncertain", reason: "daemon restarted before final ACK was persisted" });
486
+ }));
487
+ stopped = false;
488
+ accepting = true;
489
+ timer ??= setInterval(() => { void pump(); }, 1000);
490
+ timer.unref();
491
+ void pump();
492
+ };
493
+ return {
494
+ accept, pump, resume, result, delivery, cancel, blocker, queue, release,
495
+ running: () => !stopped,
496
+ bind: (id, turn) => { if (db.get(id))
497
+ patch(id, { turn }); },
498
+ finished: (id) => { const e = db.get(id); if (e && !e.canceled && !e.result)
499
+ patch(id, { execution: "complete", exposure: "consumed" }); },
500
+ released: (id) => { const e = db.get(id); if (e?.canceled)
501
+ patch(id, { execution: "canceled", reason: `${e.reason ?? "canceled"}; pane idle confirmed` }); },
502
+ stopped: (target, reason) => Object.values(db.all()).filter((e) => e.target === target && e.canceled).forEach((e) => patch(e.id, { execution: "canceled", reason })),
503
+ submission: async (id) => {
504
+ for (;;) {
505
+ const e = db.get(id);
506
+ if (!e)
507
+ return { ok: false, retryable: true, reason: "event missing" };
508
+ if (["submitted", "consumed"].includes(e.exposure))
509
+ return { ok: true };
510
+ if (e.execution === "uncertain" || stopped)
511
+ return { ok: false, uncertain: true, reason: e.reason || "scheduler stopped" };
512
+ if (e.execution === "canceled")
513
+ return { ok: false, reason: e.reason };
514
+ await new Promise((resolve) => setTimeout(resolve, 250));
515
+ }
516
+ },
517
+ stop: () => { accepting = false; stopped = true; clearInterval(timer); timer = undefined; },
518
+ get: (id) => { const e = db.get(id); return e && clone(e); },
519
+ status: () => ({ events: Object.values(db.all()).map((e) => ({ ...clone(e),
520
+ status: e.execution === "dispatching" ? "executing" : e.execution,
521
+ ...(e.execution === "queued" && blocker(e.id) ? { blockedBy: blocker(e.id) } : {}),
522
+ // 回执 / 派活排着时把扣住它的每一条都摆出来 (含 ready=false 这种 queue() 看不见的)。
523
+ ...(e.execution === "queued" && !direct(e) ? { holds: [...queue(e.id).holds,
524
+ ...(holding.get(e.id) ? [`${holding.get(e.id).why} · 已扣 ${Math.round((Date.now() - holding.get(e.id).since) / 1000)}s`] : [])] } : {}),
525
+ delivery: (() => {
526
+ const parts = Object.values(outbox.all()).filter((d) => d.eventId === e.id).flatMap((d) => d.parts);
527
+ return parts.some((p) => p.state === "failed") ? "failed" : parts.some((p) => p.state === "uncertain") ? "uncertain" : parts.some((p) => p.state !== "delivered") ? "delivery-pending" : parts.length ? "delivered" : "none";
528
+ })(), })), deliveries: Object.values(outbox.all()).map(clone) }),
529
+ deliveryStatus: (id) => outbox.get(id)?.parts.map((p) => p.state),
530
+ reconcile: async (id) => { const e = db.get(id); if (e)
531
+ await observe(e); return db.get(id); },
532
+ };
533
+ };
534
+ //# sourceMappingURL=message-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-events.js","sourceRoot":"","sources":["../../daemon/message-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AA8G1D,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC;AACjC,MAAM,SAAS,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5E,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrJ,MAAM,MAAM,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/G,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAU,EAAU,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1G,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,QAAgB,EAAU,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC9H,MAAM,KAAK,GAAG,CAAI,CAAI,EAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAM,CAAC;AACjE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,MAAM,GAAG,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3H,2FAA2F;AAC3F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;OAC3E,OAAQ,CAA2B,CAAC,OAAO,KAAK,QAAQ,IAAK,CAAyB,CAAC,OAAO,KAAK,CAAC;OACpG,OAAQ,CAA0B,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAE,CAA2B,CAAC,OAAO,CAAC;AAEtG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAmB,EAAE,EAAE;IACvE,MAAM,EAAE,GAAG,WAAW,CAAe,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,WAAW,CAAgB,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;IAC5hB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;IAChU,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,KAAiD,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8E,CAAC;IACtG,MAAM,IAAI,GAAG,CAAC,CAAe,EAAE,GAAW,EAAQ,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,GAAG;YAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,8EAA8E;IAC9E,oFAAoF;IACpF,MAAM,UAAU,GAAG,CAAC,CAAe,EAAU,EAAE;QAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;YAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;QACrG,IAAI,CAAC,CAAC,UAAU;YAAE,OAAO,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5G,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAI,EAAU,EAAE,IAAsB,EAAc,EAAE;QACpE,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,IAAI,EAAE;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC1J,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACvB,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,UAAU,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK;gBAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,CAAC,CAAC;QACF,IAAI,KAAoC,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC1D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,CAAwB,EAAgB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3G,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,CAAS,EAAE,CAA0C,EAAQ,EAAE;QACvF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAoC,EAAE,MAAM,GAAG,mBAAmB,EAAU,EAAE;QAC5F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAClH,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,8DAA8D;QACnF,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAkD,EAAE;QACrF,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,0DAA0D;QAC1D,4CAA4C;QAC5C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzI,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACvB,OAAO,KAAK,EAAE,CAAC;gBAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,iCAAiC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAAC,MAAM,KAAK,CAAC;YAAC,CAAC;QAChI,CAAC,CAAC,wFAAwF;QAC1F,KAAK,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,KAAK,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,QAAgB,EAAE,IAAa,EAAQ,EAAE;QACjF,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,KAAK,QAAQ;YAAE,OAAO;QAClD,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpJ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAU,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACzJ,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACzH,KAAK,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,EAAU,EAAiB,EAAE;QAC/C,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;oBAAE,SAAS;gBACtC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;oBAAE,MAAM;gBAClE,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC1K,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM;wBAAE,MAAM;gBACvD,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBACnH,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,CAAe,EAAiB,EAAE;QACvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAAE,OAAO;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO;QACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/F,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACvD,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB;gBACtG,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI;oBAC7E,CAAC,CAAC,wGAAwG,CAAC,CAAC,CAAC,SAAS;gBACxH,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;aACvG,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClD,qDAAqD;YACrD,iCAAiC;YACjC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC5D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IACF,oEAAoE;IACpE,MAAM,MAAM,GAAG,CAAC,CAAe,EAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpF;;;oEAGgE;IAChE,MAAM,MAAM,GAAG,CAAC,EAAU,EAAQ,EAAE;QAClC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;eACtF,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO;QAC7B,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;oBAC1D,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACjG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACxI,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,EAAE,EAAU,EAAE,QAAgB,EAAiB,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,CAAC;YACX,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACtB,IAAI,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO;YAChE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YACvH,MAAM,QAAQ,GAAG,CAAC,KAA0B,EAAE,QAAsD,EAAW,EAAE;gBAC/G,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC5B,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACpE,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtH,IAAI,KAAK;oBAAE,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;wBACzE,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;gBACvF,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YACF,IAAI,CAAiB,CAAC;YACtB,IAAI,CAAC;gBAAC,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,QAAQ,CAAC,CAAC;YAAC,CAAC;YACnD,OAAO,KAAK,EAAE,CAAC;gBAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,KAAK,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAC,CAAC;YAChJ,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC7G,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC/K,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3D,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5G,CAAC;;gBAAM,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,oCAAoC,EAAE,CAAC,CAAC;QACzG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC;gBAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS,GAAG,KAAK,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAAC,KAAK,GAAG,SAAS,CAAC;YAAC,CAAC;YACpK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;gBACO,CAAC;YAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC;YAAC,KAAK,IAAI,EAAE,CAAC;QAAC,CAAC;IACvF,CAAC,CAAC;IACF;;;;0BAIsB;IACtB,MAAM,MAAM,GAAG,CAAC,CAAe,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/D;;;wEAGoE;IACpE,MAAM,KAAK,GAAG,CAAC,CAAe,EAA4B,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ;eAC9D,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa;mBAC5B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;uBAC5D,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,iBAAiB;2BAC5D,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC;IACF,+DAA+D;IAC/D,MAAM,UAAU,GAAG,CAAC,CAAe,EAAW,EAAE,CAC9C,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;WAC1F,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;WAC9F,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,EAAU,EAAoF,EAAE;QAC/G,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;YACjD,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxH,CAAC,CAAC;IACF;0DACsD;IACtD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAgG,EAAE;QACzH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ;eACrE,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;aACtF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG;YACZ,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;YACrC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,OAAQ,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;YACtI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACrE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;YACjE,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE;SACnG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,MAAc,EAA0D,EAAE;QACrG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAC/E,IAAI,CAAC,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;YAClF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC7G,IAAI,CAAC,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;QACnH,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI;YACnI,MAAM,EAAE,6DAA6D,IAAI,EAAE,EAAE,CAAC,CAAC;QACjF,KAAK,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC;IACF,KAAK,UAAU,IAAI;QACjB,IAAI,OAAO,IAAI,OAAO;YAAE,OAAO;QAC/B,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,4FAA4F;YAC5F,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAClE,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,OAAO;gBAC5D,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,QAAQ;oBAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnJ,CAAC,CAAC,CAAC,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YACtF,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;gBAC7E,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3F,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1D,cAAc,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3F,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3G,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjB,IAAI,OAAO;oBAAE,OAAO;gBACpB,uEAAuE;gBACvE,qEAAqE;gBACrE,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;oBACvH,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;oBACxG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;wBAC1D,aAAa,EAAE,UAAU;wBACzB,aAAa,EAAE,2EAA2E;wBAC1F,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,gEAAgE,EAAE,CAAC,CAAC;oBAChH,OAAO;gBACT,CAAC;gBACD,kEAAkE;gBAClE,iEAAiE;gBACjE,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;wBAAE,OAAO;oBAC5D,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;wBAC9B,IAAI,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC;4BAAE,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnF,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;oBAC7E,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ;wBAAE,IAAI,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;oBACjE,OAAO;gBACT,CAAC;gBACD,WAAW,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpF,MAAM,MAAM,GAAG,CAAC,KAAc,EAAQ,EAAE;oBACtC,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;wBACjF,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBACvD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzI,CAAC;oBACD,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC;gBACF,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3D,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC;wBAAE,OAAO;oBAC5E,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;wBAAE,OAAO;oBAC1C,MAAM,cAAc,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAClD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS;wBACpD,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,iBAAiB,CAAC,CAAC;oBAC3F,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY;wBAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,iBAAiB,EAAE,CAAC,CAAC,CAAC,iCAAiC,CAAC;4BACxK,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,qFAAqF,EAAE,CAAC,CAAC;oBACrI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;wBACxB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,SAAS,KAAK,iBAAiB;4BACvF,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,6DAA6D,EAAE,CAAC,CAAC;oBACnH,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;oBAC/B,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,CAAC,CAAC,QAAQ;4BAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;4BACb,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;4BAChB,0DAA0D;4BAC1D,wBAAwB;4BACxB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;wBACzC,CAAC;wBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnC,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,CAAC,SAAS,KAAK,QAAQ;oBAAE,OAAO;gBACrC,6CAA6C;gBAC7C,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACpG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBAC3G,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnD,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;oBAC9B,IAAI,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC;wBAAE,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;yBAC5E,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ;wBAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC;gBACpI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;gBACpB,CAAC;YAAC,OAAO,GAAG,KAAK,CAAC;QAAC,CAAC;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9F,SAAS,EAAE,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,kEAAkE;SACtI,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC,CAAC;QAC9H,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,GAAG,KAAK,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC;QACjB,KAAK,KAAK,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;IACF,OAAO;QACL,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;QACvE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO;QACvB,IAAI,EAAE,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAClJ,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ;YAAE,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,UAAU,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC;QACpK,OAAO,EAAE,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QACpL,UAAU,EAAE,KAAK,EAAE,EAAU,EAA2B,EAAE;YACxD,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;gBACvE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACxE,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;gBAC3H,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;gBACvE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;QAC3F,GAAG,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;gBACxE,MAAM,EAAE,CAAC,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,0DAA0D;gBAC1D,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,KAAK;wBAC1E,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1I,QAAQ,EAAE,CAAC,GAAG,EAAE;oBAAG,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACrH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAC,CAAC,CAAC,EAAE,GACrO,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,cAAc,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACzE,SAAS,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACvG,CAAC;AACJ,CAAC,CAAC"}