@pawastation/wechat-kf 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -28
- package/README.zh-CN.md +34 -28
- package/dist/index.d.ts +5 -15
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/src/accounts.d.ts +2 -1
- package/dist/src/accounts.js +61 -19
- package/dist/src/accounts.js.map +1 -1
- package/dist/src/api.d.ts +31 -2
- package/dist/src/api.js +41 -13
- package/dist/src/api.js.map +1 -1
- package/dist/src/bot.d.ts +10 -8
- package/dist/src/bot.js +232 -79
- package/dist/src/bot.js.map +1 -1
- package/dist/src/channel.d.ts +7 -106
- package/dist/src/channel.js +208 -71
- package/dist/src/channel.js.map +1 -1
- package/dist/src/config-schema.d.ts +0 -6
- package/dist/src/config-schema.js +2 -7
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/constants.d.ts +20 -0
- package/dist/src/constants.js +29 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/crypto.js +7 -6
- package/dist/src/crypto.js.map +1 -1
- package/dist/src/monitor.d.ts +27 -14
- package/dist/src/monitor.js +67 -120
- package/dist/src/monitor.js.map +1 -1
- package/dist/src/outbound.d.ts +10 -44
- package/dist/src/outbound.js +277 -92
- package/dist/src/outbound.js.map +1 -1
- package/dist/src/reply-dispatcher.d.ts +2 -6
- package/dist/src/reply-dispatcher.js +131 -32
- package/dist/src/reply-dispatcher.js.map +1 -1
- package/dist/src/runtime.d.ts +1 -119
- package/dist/src/runtime.js +2 -1
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/send-utils.d.ts +13 -0
- package/dist/src/send-utils.js +56 -4
- package/dist/src/send-utils.js.map +1 -1
- package/dist/src/token.js +7 -3
- package/dist/src/token.js.map +1 -1
- package/dist/src/types.d.ts +68 -6
- package/dist/src/webhook.d.ts +16 -16
- package/dist/src/webhook.js +92 -75
- package/dist/src/webhook.js.map +1 -1
- package/dist/src/wechat-kf-directives.d.ts +132 -9
- package/dist/src/wechat-kf-directives.js +535 -24
- package/dist/src/wechat-kf-directives.js.map +1 -1
- package/openclaw.plugin.json +1 -3
- package/package.json +4 -4
- package/dist/src/chunk-utils.d.ts +0 -18
- package/dist/src/chunk-utils.js +0 -58
- package/dist/src/chunk-utils.js.map +0 -1
- package/index.ts +0 -32
package/dist/src/bot.js
CHANGED
|
@@ -10,10 +10,13 @@
|
|
|
10
10
|
import { mkdir, readFile } from "node:fs/promises";
|
|
11
11
|
import { join } from "node:path";
|
|
12
12
|
import { getChannelConfig, registerKfId, resolveAccount } from "./accounts.js";
|
|
13
|
-
import { downloadMedia, syncMessages } from "./api.js";
|
|
13
|
+
import { downloadMedia, sendTextMessage, syncMessages } from "./api.js";
|
|
14
|
+
import { CHANNEL_ID, cursorFileName, formatError, logTag, MAX_MESSAGE_AGE_S } from "./constants.js";
|
|
14
15
|
import { atomicWriteFile } from "./fs-utils.js";
|
|
16
|
+
import { setPairingKfId } from "./monitor.js";
|
|
15
17
|
import { createReplyDispatcher } from "./reply-dispatcher.js";
|
|
16
18
|
import { getRuntime } from "./runtime.js";
|
|
19
|
+
import { contentTypeToExt, detectImageMime } from "./send-utils.js";
|
|
17
20
|
// ── Per-kfId async mutex ──
|
|
18
21
|
// Ensures that concurrent calls to handleWebhookEvent for the same openKfId
|
|
19
22
|
// (e.g. from webhook + polling simultaneously) are serialized.
|
|
@@ -44,6 +47,7 @@ export const _testing = {
|
|
|
44
47
|
isDuplicate,
|
|
45
48
|
DEDUP_MAX_SIZE,
|
|
46
49
|
handleEvent,
|
|
50
|
+
drainToLatestCursor,
|
|
47
51
|
resetState() {
|
|
48
52
|
kfLocks.clear();
|
|
49
53
|
processedMsgIds.clear();
|
|
@@ -52,7 +56,7 @@ export const _testing = {
|
|
|
52
56
|
// ── Cursor persistence (per kfid) ──
|
|
53
57
|
async function loadCursor(stateDir, kfId) {
|
|
54
58
|
try {
|
|
55
|
-
return (await readFile(join(stateDir,
|
|
59
|
+
return (await readFile(join(stateDir, cursorFileName(kfId)), "utf8")).trim();
|
|
56
60
|
}
|
|
57
61
|
catch {
|
|
58
62
|
return "";
|
|
@@ -64,7 +68,7 @@ async function saveCursor(stateDir, kfId, cursor) {
|
|
|
64
68
|
await mkdir(stateDir, { recursive: true });
|
|
65
69
|
dirCreated = true;
|
|
66
70
|
}
|
|
67
|
-
await atomicWriteFile(join(stateDir,
|
|
71
|
+
await atomicWriteFile(join(stateDir, cursorFileName(kfId)), cursor);
|
|
68
72
|
}
|
|
69
73
|
// ── Message text extraction ──
|
|
70
74
|
// Descriptions of non-text messages injected into the AI agent's context.
|
|
@@ -72,8 +76,11 @@ async function saveCursor(stateDir, kfId, cursor) {
|
|
|
72
76
|
// replies in Chinese. These are NOT displayed to end-users directly.
|
|
73
77
|
function extractText(msg) {
|
|
74
78
|
switch (msg.msgtype) {
|
|
75
|
-
case "text":
|
|
76
|
-
|
|
79
|
+
case "text": {
|
|
80
|
+
const textContent = msg.text?.content ?? "";
|
|
81
|
+
const menuId = msg.text?.menu_id;
|
|
82
|
+
return menuId ? `${textContent} [menu_id: ${menuId}]` : textContent;
|
|
83
|
+
}
|
|
77
84
|
case "image":
|
|
78
85
|
return "[用户发送了一张图片]";
|
|
79
86
|
case "voice":
|
|
@@ -83,11 +90,18 @@ function extractText(msg) {
|
|
|
83
90
|
case "file":
|
|
84
91
|
return "[用户发送了一个文件]";
|
|
85
92
|
case "location": {
|
|
86
|
-
const
|
|
87
|
-
|
|
93
|
+
const loc = msg.location;
|
|
94
|
+
const parts = [loc?.name, loc?.address].filter(Boolean).join(" ");
|
|
95
|
+
const coords = loc?.latitude != null && loc?.longitude != null ? ` (${loc.latitude}, ${loc.longitude})` : "";
|
|
96
|
+
return parts ? `[位置: ${parts}${coords}]` : coords ? `[位置:${coords}]` : "[位置]";
|
|
97
|
+
}
|
|
98
|
+
case "link": {
|
|
99
|
+
const lk = msg.link;
|
|
100
|
+
const linkParts = [lk?.title, lk?.desc].filter(Boolean).join(" - ");
|
|
101
|
+
const url = lk?.url ?? "";
|
|
102
|
+
const pic = lk?.pic_url ? ` pic_url: ${lk.pic_url}` : "";
|
|
103
|
+
return `[链接: ${linkParts} ${url}${pic}]`;
|
|
88
104
|
}
|
|
89
|
-
case "link":
|
|
90
|
-
return `[链接: ${msg.link?.title ?? ""} ${msg.link?.url ?? ""}]`;
|
|
91
105
|
case "merged_msg": {
|
|
92
106
|
const merged = msg.merged_msg;
|
|
93
107
|
if (!merged)
|
|
@@ -96,6 +110,9 @@ function extractText(msg) {
|
|
|
96
110
|
const items = Array.isArray(merged.item) ? merged.item : [];
|
|
97
111
|
const lines = items.map((item) => {
|
|
98
112
|
const sender = item.sender_name ?? "未知";
|
|
113
|
+
const timeStr = item.send_time
|
|
114
|
+
? ` (${new Date(item.send_time * 1000).toLocaleString("zh-CN", { hour12: false })})`
|
|
115
|
+
: "";
|
|
99
116
|
let content = "";
|
|
100
117
|
try {
|
|
101
118
|
const parsed = JSON.parse(item.msg_content ?? "{}");
|
|
@@ -113,12 +130,12 @@ function extractText(msg) {
|
|
|
113
130
|
else if (parsed.link)
|
|
114
131
|
content = `[链接: ${parsed.link?.title ?? ""}]`;
|
|
115
132
|
else
|
|
116
|
-
content = `[${parsed.msgtype ?? "未知类型"}]`;
|
|
133
|
+
content = `[${item.msgtype ?? parsed.msgtype ?? "未知类型"}]`;
|
|
117
134
|
}
|
|
118
135
|
catch {
|
|
119
136
|
content = item.msg_content ?? "";
|
|
120
137
|
}
|
|
121
|
-
return `${sender}: ${content}`;
|
|
138
|
+
return `${sender}${timeStr}: ${content}`;
|
|
122
139
|
});
|
|
123
140
|
return `[转发的聊天记录: ${title}]\n${lines.join("\n")}`;
|
|
124
141
|
}
|
|
@@ -130,41 +147,133 @@ function extractText(msg) {
|
|
|
130
147
|
}
|
|
131
148
|
case "miniprogram": {
|
|
132
149
|
const mp = msg.miniprogram;
|
|
133
|
-
|
|
150
|
+
const mpParts = [`[小程序] ${mp?.title ?? ""} (appid: ${mp?.appid ?? ""})`];
|
|
151
|
+
if (mp?.pagepath)
|
|
152
|
+
mpParts.push(`pagepath: ${mp.pagepath}`);
|
|
153
|
+
if (mp?.thumb_media_id)
|
|
154
|
+
mpParts.push(`thumb_media_id: ${mp.thumb_media_id}`);
|
|
155
|
+
return mpParts.join(", ");
|
|
134
156
|
}
|
|
135
157
|
case "msgmenu": {
|
|
136
158
|
const menu = msg.msgmenu;
|
|
137
159
|
const head = menu?.head_content ?? "";
|
|
138
|
-
const
|
|
139
|
-
return head ? `${head} [选项: ${
|
|
160
|
+
const menuItems = Array.isArray(menu?.list) ? menu.list.map((item) => item.content ?? item.id).join(", ") : "";
|
|
161
|
+
return head ? `${head} [选项: ${menuItems}]` : `[菜单消息: ${menuItems}]`;
|
|
140
162
|
}
|
|
141
163
|
case "business_card":
|
|
142
164
|
return `[名片] userid: ${msg.business_card?.userid ?? ""}`;
|
|
165
|
+
case "channels_shop_product": {
|
|
166
|
+
const p = msg.channels_shop_product;
|
|
167
|
+
const productParts = ["[视频号商品]"];
|
|
168
|
+
if (p?.title)
|
|
169
|
+
productParts.push(p.title);
|
|
170
|
+
if (p?.sales_price)
|
|
171
|
+
productParts.push(`价格: ${p.sales_price}`);
|
|
172
|
+
if (p?.shop_nickname)
|
|
173
|
+
productParts.push(`店铺: ${p.shop_nickname}`);
|
|
174
|
+
if (p?.product_id)
|
|
175
|
+
productParts.push(`商品ID: ${p.product_id}`);
|
|
176
|
+
if (p?.head_image)
|
|
177
|
+
productParts.push(`图片: ${p.head_image}`);
|
|
178
|
+
if (p?.shop_head_image)
|
|
179
|
+
productParts.push(`店铺头像: ${p.shop_head_image}`);
|
|
180
|
+
return productParts.join(" | ");
|
|
181
|
+
}
|
|
182
|
+
case "channels_shop_order": {
|
|
183
|
+
const o = msg.channels_shop_order;
|
|
184
|
+
const orderParts = ["[视频号订单]"];
|
|
185
|
+
if (o?.product_titles)
|
|
186
|
+
orderParts.push(o.product_titles);
|
|
187
|
+
if (o?.price_wording)
|
|
188
|
+
orderParts.push(`金额: ${o.price_wording}`);
|
|
189
|
+
if (o?.state)
|
|
190
|
+
orderParts.push(`状态: ${o.state}`);
|
|
191
|
+
if (o?.shop_nickname)
|
|
192
|
+
orderParts.push(`店铺: ${o.shop_nickname}`);
|
|
193
|
+
if (o?.order_id)
|
|
194
|
+
orderParts.push(`订单ID: ${o.order_id}`);
|
|
195
|
+
if (o?.image_url)
|
|
196
|
+
orderParts.push(`图片: ${o.image_url}`);
|
|
197
|
+
return orderParts.join(" | ");
|
|
198
|
+
}
|
|
199
|
+
case "note":
|
|
200
|
+
return "[用户发送了一条笔记]";
|
|
143
201
|
case "event":
|
|
144
202
|
return null;
|
|
145
|
-
default:
|
|
146
|
-
|
|
203
|
+
default: {
|
|
204
|
+
const rawJson = JSON.stringify(msg, null, 2);
|
|
205
|
+
return `[未支持的消息类型: ${msg.msgtype}]\n\n原始JSON:\n${rawJson}`;
|
|
206
|
+
}
|
|
147
207
|
}
|
|
148
208
|
}
|
|
149
209
|
// ── Event handling ──
|
|
210
|
+
/** Map known msg_send_fail fail_type codes to human-readable descriptions. */
|
|
211
|
+
function failTypeLabel(failType) {
|
|
212
|
+
switch (failType) {
|
|
213
|
+
case 0:
|
|
214
|
+
return "unknown";
|
|
215
|
+
case 10:
|
|
216
|
+
return "user rejected";
|
|
217
|
+
case 13:
|
|
218
|
+
return "content security (phishing/scam pattern detected)";
|
|
219
|
+
default:
|
|
220
|
+
return "unrecognized";
|
|
221
|
+
}
|
|
222
|
+
}
|
|
150
223
|
async function handleEvent(ctx, _account, msg) {
|
|
151
224
|
const event = msg.event;
|
|
152
225
|
const { log } = ctx;
|
|
153
226
|
const kfId = msg.open_kfid;
|
|
154
227
|
switch (event?.event_type) {
|
|
155
228
|
case "enter_session":
|
|
156
|
-
log?.info(
|
|
229
|
+
log?.info(`${logTag(kfId)} user ${msg.external_userid} entered session` +
|
|
157
230
|
(event.welcome_code ? `, welcome_code=${event.welcome_code}` : "") +
|
|
158
231
|
(event.scene ? `, scene=${event.scene}` : ""));
|
|
159
232
|
break;
|
|
160
233
|
case "msg_send_fail":
|
|
161
|
-
log?.error(
|
|
234
|
+
log?.error(`${logTag(kfId)} message send failed: msgid=${event.fail_msgid}, type=${event.fail_type} (${failTypeLabel(event.fail_type)})`);
|
|
235
|
+
if (event.fail_type === 13) {
|
|
236
|
+
log?.warn?.(`${logTag(kfId)} content security block: avoid numbered lists (1. 2. 3.) when discussing passwords, API keys, or credentials. Use bullet points or conversational prose instead.`);
|
|
237
|
+
}
|
|
162
238
|
break;
|
|
163
239
|
case "servicer_status_change":
|
|
164
|
-
log?.info(
|
|
240
|
+
log?.info(`${logTag(kfId)} servicer status changed: ${event.servicer_userid} -> ${event.status}`);
|
|
165
241
|
break;
|
|
166
242
|
default:
|
|
167
|
-
log?.info(
|
|
243
|
+
log?.info(`${logTag(kfId)} unhandled event: ${event?.event_type}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// ── Cold Start Catch-up (Layer 1) ──
|
|
247
|
+
// When there is no cursor (file missing, empty, corrupt), drain all pending
|
|
248
|
+
// messages without dispatching them. This prevents historical message
|
|
249
|
+
// bombardment after cursor loss.
|
|
250
|
+
async function drainToLatestCursor(corpId, appSecret, openKfId, syncToken, stateDir, log) {
|
|
251
|
+
let cursor = "";
|
|
252
|
+
let hasMore = true;
|
|
253
|
+
let totalDrained = 0;
|
|
254
|
+
while (hasMore) {
|
|
255
|
+
const syncReq = { limit: 1000, open_kfid: openKfId };
|
|
256
|
+
if (cursor)
|
|
257
|
+
syncReq.cursor = cursor;
|
|
258
|
+
else if (syncToken)
|
|
259
|
+
syncReq.token = syncToken;
|
|
260
|
+
let resp;
|
|
261
|
+
try {
|
|
262
|
+
resp = await syncMessages(corpId, appSecret, syncReq);
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
log?.error(`${logTag(openKfId)} drain failed: ${formatError(err)}`);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
totalDrained += resp.msg_list?.length ?? 0;
|
|
269
|
+
if (resp.next_cursor) {
|
|
270
|
+
cursor = resp.next_cursor;
|
|
271
|
+
await saveCursor(stateDir, openKfId, cursor);
|
|
272
|
+
}
|
|
273
|
+
hasMore = resp.has_more === 1;
|
|
274
|
+
}
|
|
275
|
+
if (totalDrained > 0) {
|
|
276
|
+
log?.info(`${logTag(openKfId)} cold start catch-up: skipped ${totalDrained} messages, cursor saved`);
|
|
168
277
|
}
|
|
169
278
|
}
|
|
170
279
|
// ── Core message handler (per kfid) ──
|
|
@@ -193,64 +302,71 @@ async function _handleWebhookEventInner(ctx, openKfId, syncToken) {
|
|
|
193
302
|
const account = resolveAccount(cfg, openKfId); // kfid as accountId
|
|
194
303
|
const { corpId, appSecret } = account;
|
|
195
304
|
if (!corpId || !appSecret) {
|
|
196
|
-
log?.error(
|
|
305
|
+
log?.error(`${logTag()} missing corpId/appSecret`);
|
|
197
306
|
return;
|
|
198
307
|
}
|
|
199
308
|
// Register this kfid as discovered
|
|
200
309
|
await registerKfId(openKfId);
|
|
201
310
|
let cursor = await loadCursor(stateDir, openKfId);
|
|
311
|
+
// Layer 1: Cold Start Catch-up — no cursor means drain without dispatching
|
|
312
|
+
if (!cursor) {
|
|
313
|
+
log?.info(`${logTag(openKfId)} no cursor, draining to current position`);
|
|
314
|
+
await drainToLatestCursor(corpId, appSecret, openKfId, syncToken, stateDir, log);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
// Normal incremental pull — cursor is always present at this point
|
|
202
318
|
let hasMore = true;
|
|
203
319
|
while (hasMore) {
|
|
204
320
|
const syncReq = {
|
|
205
321
|
limit: 1000,
|
|
206
322
|
open_kfid: openKfId, // Only pull messages for this kf account
|
|
323
|
+
cursor,
|
|
207
324
|
};
|
|
208
|
-
if (cursor) {
|
|
209
|
-
// Have a persisted cursor — use it for incremental fetch (token is ignored)
|
|
210
|
-
syncReq.cursor = cursor;
|
|
211
|
-
}
|
|
212
|
-
else if (syncToken) {
|
|
213
|
-
// No cursor but webhook provided a token — use it for the first fetch
|
|
214
|
-
syncReq.token = syncToken;
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
// Neither cursor nor token — will fetch the initial batch (up to 3 days history)
|
|
218
|
-
log?.info(`[wechat-kf:${openKfId}] no cursor or token, fetching initial batch`);
|
|
219
|
-
}
|
|
220
325
|
let resp;
|
|
221
326
|
try {
|
|
222
327
|
resp = await syncMessages(corpId, appSecret, syncReq);
|
|
223
328
|
}
|
|
224
329
|
catch (err) {
|
|
225
|
-
log?.error(
|
|
330
|
+
log?.error(`${logTag(openKfId)} sync_msg failed: ${formatError(err)}`);
|
|
226
331
|
return;
|
|
227
332
|
}
|
|
228
333
|
for (const msg of resp.msg_list ?? []) {
|
|
334
|
+
log?.debug?.(`${logTag(openKfId)} raw_msg ${msg.msgid} type=${msg.msgtype}: ${JSON.stringify(msg)}`);
|
|
229
335
|
// Handle event messages (any origin) before normal message processing
|
|
230
336
|
if (msg.msgtype === "event") {
|
|
231
337
|
await handleEvent(ctx, account, msg);
|
|
232
338
|
continue;
|
|
233
339
|
}
|
|
234
|
-
if (msg.origin !== 3)
|
|
235
|
-
|
|
340
|
+
if (msg.origin !== 3) {
|
|
341
|
+
log?.debug?.(`${logTag(openKfId)} skipping non-customer msg ${msg.msgid} (origin=${msg.origin})`);
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
// Layer 2: skip stale messages to prevent bombardment from corrupt cursors
|
|
345
|
+
const messageAgeS = Math.floor(Date.now() / 1000) - msg.send_time;
|
|
346
|
+
if (messageAgeS > MAX_MESSAGE_AGE_S) {
|
|
347
|
+
log?.debug?.(`${logTag(openKfId)} skipping stale msg ${msg.msgid} (age=${messageAgeS}s)`);
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
236
350
|
// Dedup: skip messages we have already processed
|
|
237
351
|
if (isDuplicate(msg.msgid)) {
|
|
238
|
-
log?.
|
|
352
|
+
log?.debug?.(`${logTag(openKfId)} skipping duplicate msg ${msg.msgid}`);
|
|
239
353
|
continue;
|
|
240
354
|
}
|
|
241
355
|
const text = extractText(msg);
|
|
242
|
-
if (text === null || text === "")
|
|
356
|
+
if (text === null || text === "") {
|
|
357
|
+
log?.debug?.(`${logTag(openKfId)} skipping empty text for msg ${msg.msgid} (type=${msg.msgtype})`);
|
|
243
358
|
continue;
|
|
359
|
+
}
|
|
244
360
|
try {
|
|
245
361
|
await dispatchMessage(ctx, account, msg, text);
|
|
246
362
|
}
|
|
247
363
|
catch (err) {
|
|
248
|
-
log?.error(
|
|
364
|
+
log?.error(`${logTag(openKfId)} dispatch error for msg ${msg.msgid}: ${formatError(err)}`);
|
|
249
365
|
}
|
|
250
366
|
}
|
|
251
367
|
// P1-02: Save cursor AFTER all messages in the batch are processed
|
|
252
368
|
// (at-least-once delivery). If the process crashes mid-batch, the
|
|
253
|
-
// cursor has not advanced and the batch will be re-
|
|
369
|
+
// cursor has not advanced and the batch will be re-pulled on restart.
|
|
254
370
|
// P1-01 msgid dedup ensures replayed messages are not dispatched twice.
|
|
255
371
|
if (resp.next_cursor) {
|
|
256
372
|
cursor = resp.next_cursor;
|
|
@@ -267,63 +383,100 @@ async function dispatchMessage(ctx, account, msg, text) {
|
|
|
267
383
|
const dmPolicy = channelConfig.dmPolicy ?? "open";
|
|
268
384
|
const externalUserId = msg.external_userid;
|
|
269
385
|
if (dmPolicy === "disabled") {
|
|
270
|
-
log?.info
|
|
386
|
+
log?.info(`${logTag()} drop DM (dmPolicy: disabled)`);
|
|
271
387
|
return;
|
|
272
388
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
389
|
+
const core = getRuntime();
|
|
390
|
+
if (dmPolicy !== "open") {
|
|
391
|
+
const configAllowFrom = channelConfig.allowFrom ?? [];
|
|
392
|
+
const storeAllowFrom = await core.channel.pairing.readAllowFromStore(CHANNEL_ID).catch(() => []);
|
|
393
|
+
const effectiveAllowFrom = [...configAllowFrom, ...storeAllowFrom];
|
|
394
|
+
const allowed = effectiveAllowFrom.includes(externalUserId);
|
|
395
|
+
if (!allowed) {
|
|
396
|
+
if (dmPolicy === "pairing") {
|
|
397
|
+
setPairingKfId(externalUserId, msg.open_kfid);
|
|
398
|
+
const { code, created } = await core.channel.pairing.upsertPairingRequest({
|
|
399
|
+
channel: CHANNEL_ID,
|
|
400
|
+
id: externalUserId,
|
|
401
|
+
meta: { openKfId: msg.open_kfid },
|
|
402
|
+
});
|
|
403
|
+
if (created && account.corpId && account.appSecret) {
|
|
404
|
+
log?.info(`${logTag()} pairing request sender=${externalUserId}`);
|
|
405
|
+
try {
|
|
406
|
+
await sendTextMessage(account.corpId, account.appSecret, externalUserId, msg.open_kfid, core.channel.pairing.buildPairingReply({
|
|
407
|
+
channel: CHANNEL_ID,
|
|
408
|
+
idLine: `Your WeChat KF external_userid: ${externalUserId}`,
|
|
409
|
+
code,
|
|
410
|
+
}));
|
|
411
|
+
}
|
|
412
|
+
catch (err) {
|
|
413
|
+
log?.error(`${logTag()} pairing reply failed for ${externalUserId}: ${formatError(err)}`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
log?.info(`${logTag()} blocked sender ${externalUserId} (dmPolicy: ${dmPolicy})`);
|
|
419
|
+
}
|
|
277
420
|
return;
|
|
278
421
|
}
|
|
279
422
|
}
|
|
280
|
-
// "open" and "pairing" modes: allow message through
|
|
281
|
-
// Note: full pairing flow requires runtime API support, deferred to P2
|
|
282
|
-
const core = getRuntime();
|
|
283
423
|
const kfId = msg.open_kfid;
|
|
284
|
-
const from =
|
|
424
|
+
const from = `${CHANNEL_ID}:${msg.external_userid}`;
|
|
285
425
|
const to = `user:${msg.external_userid}`;
|
|
286
426
|
// Download media
|
|
287
427
|
const mediaPaths = [];
|
|
288
428
|
const mediaTypes = [];
|
|
289
|
-
async function saveMedia(mediaId, mimeType, filename) {
|
|
290
|
-
try {
|
|
291
|
-
const buffer = await downloadMedia(account.corpId, account.appSecret, mediaId);
|
|
292
|
-
const saved = await core.channel.media.saveMediaBuffer(buffer, mimeType, "inbound", undefined, filename);
|
|
293
|
-
mediaPaths.push(saved.path);
|
|
294
|
-
mediaTypes.push(mimeType);
|
|
295
|
-
log?.info(`[wechat-kf:${kfId}] saved media: ${saved.path} (${mimeType})`);
|
|
296
|
-
}
|
|
297
|
-
catch (err) {
|
|
298
|
-
log?.error(`[wechat-kf:${kfId}] failed to save media ${mediaId}: ${err instanceof Error ? err.message : err}`);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
429
|
if (account.corpId && account.appSecret) {
|
|
302
430
|
const mediaId = msg.image?.media_id || msg.voice?.media_id || msg.video?.media_id || msg.file?.media_id;
|
|
303
431
|
if (mediaId) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
432
|
+
try {
|
|
433
|
+
const { buffer, contentType } = await downloadMedia(account.corpId, account.appSecret, mediaId);
|
|
434
|
+
let mime;
|
|
435
|
+
let filename;
|
|
436
|
+
if (msg.msgtype === "image") {
|
|
437
|
+
// Detect actual image format: magic bytes first, content-type fallback
|
|
438
|
+
const detected = detectImageMime(buffer);
|
|
439
|
+
if (detected) {
|
|
440
|
+
mime = detected;
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
const ct = contentType.split(";")[0].trim();
|
|
444
|
+
mime = ct.startsWith("image/") ? ct : "image/jpeg";
|
|
445
|
+
}
|
|
446
|
+
const ext = contentTypeToExt(mime) || ".jpg";
|
|
447
|
+
filename = `wechat_image_${msg.msgid}${ext}`;
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
const staticMap = {
|
|
451
|
+
voice: ["audio/amr", `wechat_voice_${msg.msgid}.amr`],
|
|
452
|
+
video: ["video/mp4", `wechat_video_${msg.msgid}.mp4`],
|
|
453
|
+
file: ["application/octet-stream", `wechat_file_${msg.msgid}`],
|
|
454
|
+
};
|
|
455
|
+
[mime, filename] = staticMap[msg.msgtype] ?? ["application/octet-stream", `wechat_media_${msg.msgid}`];
|
|
456
|
+
}
|
|
457
|
+
const saved = await core.channel.media.saveMediaBuffer(buffer, mime, "inbound", undefined, filename);
|
|
458
|
+
mediaPaths.push(saved.path);
|
|
459
|
+
mediaTypes.push(mime);
|
|
460
|
+
log?.info(`${logTag(kfId)} saved media: ${saved.path} (${mime})`);
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
log?.error(`${logTag(kfId)} failed to save media ${mediaId}: ${formatError(err)}`);
|
|
464
|
+
}
|
|
312
465
|
}
|
|
313
466
|
}
|
|
314
|
-
// Route using kfid as accountId —
|
|
315
|
-
//
|
|
467
|
+
// Route using kfid as accountId — multi-account isolation is handled by the framework
|
|
468
|
+
// via dmScope config (e.g. "per-account-channel-peer"), not by embedding kfId in peer.id
|
|
316
469
|
const route = core.channel.routing.resolveAgentRoute({
|
|
317
470
|
cfg,
|
|
318
|
-
channel:
|
|
471
|
+
channel: CHANNEL_ID,
|
|
319
472
|
accountId: kfId,
|
|
320
|
-
peer: { kind: "direct", id:
|
|
473
|
+
peer: { kind: "direct", id: msg.external_userid },
|
|
321
474
|
});
|
|
322
475
|
// System event
|
|
323
476
|
const preview = text.replace(/\s+/g, " ").slice(0, 160);
|
|
324
477
|
core.system.enqueueSystemEvent(`WeChat-KF[${kfId}] DM from ${msg.external_userid}: ${preview}`, {
|
|
325
478
|
sessionKey: route.sessionKey,
|
|
326
|
-
contextKey:
|
|
479
|
+
contextKey: `${CHANNEL_ID}:message:${msg.msgid}`,
|
|
327
480
|
});
|
|
328
481
|
// Format envelope
|
|
329
482
|
const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(cfg);
|
|
@@ -346,13 +499,13 @@ async function dispatchMessage(ctx, account, msg, text) {
|
|
|
346
499
|
ChatType: "direct",
|
|
347
500
|
SenderName: msg.external_userid,
|
|
348
501
|
SenderId: msg.external_userid,
|
|
349
|
-
Provider:
|
|
350
|
-
Surface:
|
|
502
|
+
Provider: CHANNEL_ID,
|
|
503
|
+
Surface: CHANNEL_ID,
|
|
351
504
|
MessageSid: msg.msgid,
|
|
352
505
|
Timestamp: msg.send_time * 1000,
|
|
353
506
|
WasMentioned: false,
|
|
354
507
|
CommandAuthorized: true,
|
|
355
|
-
OriginatingChannel:
|
|
508
|
+
OriginatingChannel: CHANNEL_ID,
|
|
356
509
|
OriginatingTo: to,
|
|
357
510
|
MediaPaths: mediaPaths.length > 0 ? mediaPaths : undefined,
|
|
358
511
|
MediaTypes: mediaTypes.length > 0 ? mediaTypes : undefined,
|
|
@@ -366,7 +519,7 @@ async function dispatchMessage(ctx, account, msg, text) {
|
|
|
366
519
|
openKfId: kfId,
|
|
367
520
|
accountId: kfId,
|
|
368
521
|
});
|
|
369
|
-
log?.info(
|
|
522
|
+
log?.info(`${logTag(kfId)} dispatching to agent (session=${route.sessionKey})`);
|
|
370
523
|
const { queuedFinal, counts } = await core.channel.reply.dispatchReplyFromConfig({
|
|
371
524
|
ctx: inboundCtx,
|
|
372
525
|
cfg,
|
|
@@ -374,6 +527,6 @@ async function dispatchMessage(ctx, account, msg, text) {
|
|
|
374
527
|
replyOptions,
|
|
375
528
|
});
|
|
376
529
|
markDispatchIdle?.();
|
|
377
|
-
log?.info(
|
|
530
|
+
log?.info(`${logTag(kfId)} dispatch complete (queuedFinal=${queuedFinal}, replies=${counts?.final})`);
|
|
378
531
|
}
|
|
379
532
|
//# sourceMappingURL=bot.js.map
|
package/dist/src/bot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/bot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/bot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAqBpE,6BAA6B;AAC7B,4EAA4E;AAC5E,+DAA+D;AAE/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEjD,8BAA8B;AAC9B,gFAAgF;AAChF,sEAAsE;AAEtE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;AAC1C,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,eAAe,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;QAC3C,wDAAwD;QACxD,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QACrC,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACrD,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO;IACP,eAAe;IACf,WAAW;IACX,cAAc;IACd,WAAW;IACX,mBAAmB;IACnB,UAAU;QACR,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF,CAAC;AAEF,sCAAsC;AAEtC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAY;IACtD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAY,EAAE,MAAc;IACtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,gCAAgC;AAEhC,0EAA0E;AAC1E,2EAA2E;AAC3E,qEAAqE;AACrE,SAAS,WAAW,CAAC,GAAoB;IACvC,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;YACjC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,cAAc,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;QACtE,CAAC;QACD,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,GAAG,EAAE,QAAQ,IAAI,IAAI,IAAI,GAAG,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7G,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAChF,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACpB,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,QAAQ,SAAS,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;QAC3C,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,OAAO,WAAW,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS;oBAC5B,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG;oBACpF,CAAC,CAAC,EAAE,CAAC;gBACP,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAA4B,CAAC;oBAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAwC,CAAC;oBACnE,IAAI,UAAU,EAAE,OAAO;wBAAE,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;yBACjD,IAAI,MAAM,CAAC,KAAK;wBAAE,OAAO,GAAG,MAAM,CAAC;yBACnC,IAAI,MAAM,CAAC,KAAK;wBAAE,OAAO,GAAG,MAAM,CAAC;yBACnC,IAAI,MAAM,CAAC,KAAK;wBAAE,OAAO,GAAG,MAAM,CAAC;yBACnC,IAAI,MAAM,CAAC,IAAI;wBAAE,OAAO,GAAG,MAAM,CAAC;yBAClC,IAAI,MAAM,CAAC,IAAI;wBAAE,OAAO,GAAG,QAAS,MAAM,CAAC,IAA2B,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC;;wBACvF,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,IAAK,MAAM,CAAC,OAAkB,IAAI,MAAM,GAAG,CAAC;gBAC7E,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,MAAM,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,OAAO,aAAa,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;YACxB,MAAM,OAAO,GAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;YAC/E,MAAM,QAAQ,GAAG,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACpF,OAAO,IAAI,QAAQ,KAAK,EAAE,EAAE,QAAQ,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QACnE,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC;YAC3B,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;YACzE,IAAI,EAAE,EAAE,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,EAAE,cAAc;gBAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YAC7E,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/G,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,SAAS,GAAG,CAAC,CAAC,CAAC,UAAU,SAAS,GAAG,CAAC;QACtE,CAAC;QACD,KAAK,eAAe;YAClB,OAAO,gBAAgB,GAAG,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QAC3D,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,qBAAqB,CAAC;YACpC,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,CAAC,EAAE,KAAK;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,WAAW;gBAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,EAAE,aAAa;gBAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,EAAE,UAAU;gBAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,EAAE,UAAU;gBAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,EAAE,eAAe;gBAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACxE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC;YAClC,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,cAAc;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,EAAE,aAAa;gBAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,EAAE,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,aAAa;gBAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,EAAE,QAAQ;gBAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,EAAE,SAAS;gBAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACxD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO,cAAc,GAAG,CAAC,OAAO,iBAAiB,OAAO,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED,uBAAuB;AAEvB,8EAA8E;AAC9E,SAAS,aAAa,CAAC,QAA4B;IACjD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,CAAC;YACJ,OAAO,SAAS,CAAC;QACnB,KAAK,EAAE;YACL,OAAO,eAAe,CAAC;QACzB,KAAK,EAAE;YACL,OAAO,mDAAmD,CAAC;QAC7D;YACE,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAe,EAAE,QAAiC,EAAE,GAAoB;IACjG,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACpB,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAE3B,QAAQ,KAAK,EAAE,UAAU,EAAE,CAAC;QAC1B,KAAK,eAAe;YAClB,GAAG,EAAE,IAAI,CACP,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,eAAe,kBAAkB;gBAC3D,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChD,CAAC;YACF,MAAM;QACR,KAAK,eAAe;YAClB,GAAG,EAAE,KAAK,CACR,GAAG,MAAM,CAAC,IAAI,CAAC,+BAA+B,KAAK,CAAC,UAAU,UAAU,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAC9H,CAAC;YACF,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;gBAC3B,GAAG,EAAE,IAAI,EAAE,CACT,GAAG,MAAM,CAAC,IAAI,CAAC,kKAAkK,CAClL,CAAC;YACJ,CAAC;YACD,MAAM;QACR,KAAK,wBAAwB;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,eAAe,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAClG,MAAM;QACR;YACE,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,4EAA4E;AAC5E,uEAAuE;AACvE,iCAAiC;AAEjC,KAAK,UAAU,mBAAmB,CAChC,MAAc,EACd,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,QAAgB,EAChB,GAAoB;IAEpB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,OAAO,GAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC7E,IAAI,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;aAC/B,IAAI,SAAS;YAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;QAE9C,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1B,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,iCAAiC,YAAY,yBAAyB,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,wCAAwC;AAExC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAe,EAAE,QAAgB,EAAE,SAAiB;IAC3F,8EAA8E;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD,IAAI,OAAoB,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;QACtC,OAAO,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,IAAI,CAAC;QACX,MAAM,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,6DAA6D;QAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,GAAe,EAAE,QAAgB,EAAE,SAAiB;IAC1F,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACnC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,oBAAoB;IAEnE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,2BAA2B,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE7B,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAElD,2EAA2E;IAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;QACzE,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,OAAO,GAA2B;YACtC,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,QAAQ,EAAE,yCAAyC;YAC9D,MAAM;SACP,CAAC;QAEF,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,qBAAqB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACtC,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAErG,sEAAsE;YACtE,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,8BAA8B,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClG,SAAS;YACX,CAAC;YAED,2EAA2E;YAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;YAClE,IAAI,WAAW,GAAG,iBAAiB,EAAE,CAAC;gBACpC,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,uBAAuB,GAAG,CAAC,KAAK,SAAS,WAAW,IAAI,CAAC,CAAC;gBAC1F,SAAS;YACX,CAAC;YAED,iDAAiD;YACjD,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACjC,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,gCAAgC,GAAG,CAAC,KAAK,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;gBACnG,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,2BAA2B,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,kEAAkE;QAClE,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1B,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,kCAAkC;AAElC,KAAK,UAAU,eAAe,CAC5B,GAAe,EACf,OAAgC,EAChC,GAAoB,EACpB,IAAY;IAEZ,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAElC,wBAAwB;IACxB,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,MAAM,CAAC;IAClD,MAAM,cAAc,GAAG,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,+BAA+B,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACjG,MAAM,kBAAkB,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,cAAc,CAAC,cAAc,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;oBACxE,OAAO,EAAE,UAAU;oBACnB,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE;iBAClC,CAAC,CAAC;gBACH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACnD,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,2BAA2B,cAAc,EAAE,CAAC,CAAC;oBAClE,IAAI,CAAC;wBACH,MAAM,eAAe,CACnB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,cAAc,EACd,GAAG,CAAC,SAAS,EACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;4BACrC,OAAO,EAAE,UAAU;4BACnB,MAAM,EAAE,mCAAmC,cAAc,EAAE;4BAC3D,IAAI;yBACL,CAAC,CACH,CAAC;oBACJ,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,6BAA6B,cAAc,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC5F,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,EAAE,mBAAmB,cAAc,eAAe,QAAQ,GAAG,CAAC,CAAC;YACpF,CAAC;YACD,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;IAE3B,MAAM,IAAI,GAAG,GAAG,UAAU,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;IACpD,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,eAAe,EAAE,CAAC;IAEzC,iBAAiB;IACjB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QACxG,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAEhG,IAAI,IAAY,CAAC;gBACjB,IAAI,QAAgB,CAAC;gBACrB,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;oBAC5B,uEAAuE;oBACvE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,GAAG,QAAQ,CAAC;oBAClB,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC5C,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;oBACrD,CAAC;oBACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;oBAC7C,QAAQ,GAAG,gBAAgB,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAqC;wBAClD,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,GAAG,CAAC,KAAK,MAAM,CAAC;wBACrD,KAAK,EAAE,CAAC,WAAW,EAAE,gBAAgB,GAAG,CAAC,KAAK,MAAM,CAAC;wBACrD,IAAI,EAAE,CAAC,0BAA0B,EAAE,eAAe,GAAG,CAAC,KAAK,EAAE,CAAC;qBAC/D,CAAC;oBACF,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACzG,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACrG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,OAAO,KAAK,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,yFAAyF;IACzF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACnD,GAAG;QACH,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,eAAe,EAAE;KAClD,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,aAAa,IAAI,aAAa,GAAG,CAAC,eAAe,KAAK,OAAO,EAAE,EAAE;QAC9F,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,GAAG,UAAU,YAAY,GAAG,CAAC,KAAK,EAAE;KACjD,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAClD,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,GAAG,CAAC,eAAe;QACzB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACzC,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC3D,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,GAAG,CAAC,eAAe;QAC/B,QAAQ,EAAE,GAAG,CAAC,eAAe;QAC7B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,GAAG,CAAC,KAAK;QACrB,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG,IAAI;QAC/B,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,UAAU;QAC9B,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC1D,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KAC3D,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAAC;QAC3E,GAAG;QACH,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,kCAAkC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAEhF,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAC/E,GAAG,EAAE,UAAU;QACf,GAAG;QACH,UAAU;QACV,YAAY;KACb,CAAC,CAAC;IAEH,gBAAgB,EAAE,EAAE,CAAC;IACrB,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,mCAAmC,WAAW,aAAa,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC;AACxG,CAAC"}
|