openclaw-weixin 2.4.6

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 (80) hide show
  1. package/CHANGELOG.md +175 -0
  2. package/CHANGELOG.zh_CN.md +171 -0
  3. package/LICENSE +28 -0
  4. package/README.md +371 -0
  5. package/README.zh_CN.md +358 -0
  6. package/dist/index.js +16 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/src/api/api.js +513 -0
  9. package/dist/src/api/api.js.map +1 -0
  10. package/dist/src/api/config-cache.js +64 -0
  11. package/dist/src/api/config-cache.js.map +1 -0
  12. package/dist/src/api/session-guard.js +49 -0
  13. package/dist/src/api/session-guard.js.map +1 -0
  14. package/dist/src/api/types.js +37 -0
  15. package/dist/src/api/types.js.map +1 -0
  16. package/dist/src/auth/accounts.js +318 -0
  17. package/dist/src/auth/accounts.js.map +1 -0
  18. package/dist/src/auth/login-qr.js +337 -0
  19. package/dist/src/auth/login-qr.js.map +1 -0
  20. package/dist/src/auth/pairing.js +104 -0
  21. package/dist/src/auth/pairing.js.map +1 -0
  22. package/dist/src/cdn/aes-ecb.js +19 -0
  23. package/dist/src/cdn/aes-ecb.js.map +1 -0
  24. package/dist/src/cdn/cdn-upload.js +72 -0
  25. package/dist/src/cdn/cdn-upload.js.map +1 -0
  26. package/dist/src/cdn/cdn-url.js +14 -0
  27. package/dist/src/cdn/cdn-url.js.map +1 -0
  28. package/dist/src/cdn/pic-decrypt.js +89 -0
  29. package/dist/src/cdn/pic-decrypt.js.map +1 -0
  30. package/dist/src/cdn/upload.js +115 -0
  31. package/dist/src/cdn/upload.js.map +1 -0
  32. package/dist/src/channel.js +498 -0
  33. package/dist/src/channel.js.map +1 -0
  34. package/dist/src/compat.js +70 -0
  35. package/dist/src/compat.js.map +1 -0
  36. package/dist/src/config/config-schema.js +20 -0
  37. package/dist/src/config/config-schema.js.map +1 -0
  38. package/dist/src/config/reply-progress.js +5 -0
  39. package/dist/src/config/reply-progress.js.map +1 -0
  40. package/dist/src/media/media-download.js +93 -0
  41. package/dist/src/media/media-download.js.map +1 -0
  42. package/dist/src/media/mime.js +73 -0
  43. package/dist/src/media/mime.js.map +1 -0
  44. package/dist/src/media/silk-transcode.js +64 -0
  45. package/dist/src/media/silk-transcode.js.map +1 -0
  46. package/dist/src/messaging/debug-mode.js +63 -0
  47. package/dist/src/messaging/debug-mode.js.map +1 -0
  48. package/dist/src/messaging/error-notice.js +29 -0
  49. package/dist/src/messaging/error-notice.js.map +1 -0
  50. package/dist/src/messaging/inbound.js +204 -0
  51. package/dist/src/messaging/inbound.js.map +1 -0
  52. package/dist/src/messaging/markdown-filter.js +367 -0
  53. package/dist/src/messaging/markdown-filter.js.map +1 -0
  54. package/dist/src/messaging/outbound-hooks.js +58 -0
  55. package/dist/src/messaging/outbound-hooks.js.map +1 -0
  56. package/dist/src/messaging/process-message.js +429 -0
  57. package/dist/src/messaging/process-message.js.map +1 -0
  58. package/dist/src/messaging/reply-progress-sender.js +93 -0
  59. package/dist/src/messaging/reply-progress-sender.js.map +1 -0
  60. package/dist/src/messaging/send-media.js +54 -0
  61. package/dist/src/messaging/send-media.js.map +1 -0
  62. package/dist/src/messaging/send.js +218 -0
  63. package/dist/src/messaging/send.js.map +1 -0
  64. package/dist/src/messaging/slash-commands.js +68 -0
  65. package/dist/src/messaging/slash-commands.js.map +1 -0
  66. package/dist/src/monitor/monitor.js +190 -0
  67. package/dist/src/monitor/monitor.js.map +1 -0
  68. package/dist/src/storage/state-dir.js +9 -0
  69. package/dist/src/storage/state-dir.js.map +1 -0
  70. package/dist/src/storage/sync-buf.js +64 -0
  71. package/dist/src/storage/sync-buf.js.map +1 -0
  72. package/dist/src/util/logger.js +120 -0
  73. package/dist/src/util/logger.js.map +1 -0
  74. package/dist/src/util/random.js +16 -0
  75. package/dist/src/util/random.js.map +1 -0
  76. package/dist/src/util/redact.js +52 -0
  77. package/dist/src/util/redact.js.map +1 -0
  78. package/index.ts +19 -0
  79. package/openclaw.plugin.json +20 -0
  80. package/package.json +109 -0
@@ -0,0 +1,367 @@
1
+ /**
2
+ * Streaming markdown filter — character-level state machine that strips
3
+ * unsupported markdown syntax on-the-fly.
4
+ *
5
+ * Outputs as much filtered text as possible on each `feed()` call, only
6
+ * holding back the minimum characters needed for pattern disambiguation
7
+ * (e.g. a trailing `*` that might become `***`).
8
+ *
9
+ * Constructs passed through (not filtered):
10
+ * - Code fences (```)
11
+ * - Inline code (`)
12
+ * - Tables (|...|)
13
+ * - Horizontal rules (---, ***, ___)
14
+ * - Bold (**)
15
+ * - Italic/bold-italic wrapping non-CJK content
16
+ *
17
+ * Constructs filtered (markers stripped, content kept):
18
+ * - Italic/bold-italic wrapping CJK content
19
+ * - Headings H5/H6 (#####, ######)
20
+ * - Images (![alt](url)) — removed entirely
21
+ *
22
+ * States:
23
+ * - **sol** (start-of-line): checks for line-start patterns (```, >, #####, indent)
24
+ * - **body**: scans for inline patterns (![, ~~, ***) and outputs safe chars
25
+ * - **fence**: inside a fenced code block, passes through until closing ```
26
+ * - **inline**: accumulating content inside an inline marker pair
27
+ */
28
+ export class StreamingMarkdownFilter {
29
+ buf = "";
30
+ fence = false;
31
+ sol = true;
32
+ inl = null;
33
+ feed(delta) {
34
+ this.buf += delta;
35
+ return this.pump(false);
36
+ }
37
+ flush() {
38
+ return this.pump(true);
39
+ }
40
+ pump(eof) {
41
+ let out = "";
42
+ while (this.buf) {
43
+ const sLen = this.buf.length;
44
+ const sSol = this.sol;
45
+ const sFence = this.fence;
46
+ const sInl = this.inl;
47
+ if (this.fence)
48
+ out += this.pumpFence(eof);
49
+ else if (this.inl)
50
+ out += this.pumpInline(eof);
51
+ else if (this.sol)
52
+ out += this.pumpSOL(eof);
53
+ else
54
+ out += this.pumpBody(eof);
55
+ if (this.buf.length === sLen && this.sol === sSol && this.fence === sFence && this.inl === sInl)
56
+ break;
57
+ }
58
+ if (eof && this.inl) {
59
+ const markers = { image: "![", bold3: "***", italic: "*", ubold3: "___", uitalic: "_" };
60
+ out += (markers[this.inl.type] ?? "") + this.inl.acc;
61
+ this.inl = null;
62
+ }
63
+ return out;
64
+ }
65
+ /** Inside a code fence: pass content and markers through verbatim. */
66
+ pumpFence(eof) {
67
+ if (this.sol) {
68
+ if (this.buf.length < 3 && !eof)
69
+ return "";
70
+ if (this.buf.startsWith("```")) {
71
+ const nl = this.buf.indexOf("\n", 3);
72
+ if (nl !== -1) {
73
+ this.fence = false;
74
+ const line = this.buf.slice(0, nl + 1);
75
+ this.buf = this.buf.slice(nl + 1);
76
+ this.sol = true;
77
+ return line;
78
+ }
79
+ if (eof) {
80
+ this.fence = false;
81
+ const line = this.buf;
82
+ this.buf = "";
83
+ return line;
84
+ }
85
+ return "";
86
+ }
87
+ this.sol = false;
88
+ }
89
+ const nl = this.buf.indexOf("\n");
90
+ if (nl !== -1) {
91
+ const chunk = this.buf.slice(0, nl + 1);
92
+ this.buf = this.buf.slice(nl + 1);
93
+ this.sol = true;
94
+ return chunk;
95
+ }
96
+ const chunk = this.buf;
97
+ this.buf = "";
98
+ return chunk;
99
+ }
100
+ /** At start of line: detect and consume line-start patterns, then transition to body. */
101
+ pumpSOL(eof) {
102
+ const b = this.buf;
103
+ if (b[0] === "\n") {
104
+ this.buf = b.slice(1);
105
+ return "\n";
106
+ }
107
+ if (b[0] === "`") {
108
+ if (b.length < 3 && !eof)
109
+ return "";
110
+ if (b.startsWith("```")) {
111
+ const nl = b.indexOf("\n", 3);
112
+ if (nl !== -1) {
113
+ this.fence = true;
114
+ const line = b.slice(0, nl + 1);
115
+ this.buf = b.slice(nl + 1);
116
+ this.sol = true;
117
+ return line;
118
+ }
119
+ if (eof) {
120
+ this.buf = "";
121
+ return b;
122
+ }
123
+ return "";
124
+ }
125
+ this.sol = false;
126
+ return "";
127
+ }
128
+ if (b[0] === ">") {
129
+ this.sol = false;
130
+ return "";
131
+ }
132
+ if (b[0] === "#") {
133
+ let n = 0;
134
+ while (n < b.length && b[n] === "#")
135
+ n++;
136
+ if (n === b.length && !eof)
137
+ return "";
138
+ if (n >= 5 && n <= 6 && n < b.length && b[n] === " ") {
139
+ this.buf = b.slice(n + 1);
140
+ this.sol = false;
141
+ return "";
142
+ }
143
+ this.sol = false;
144
+ return "";
145
+ }
146
+ if (b[0] === " " || b[0] === "\t") {
147
+ if (b.search(/[^ \t]/) === -1 && !eof)
148
+ return "";
149
+ this.sol = false;
150
+ return "";
151
+ }
152
+ if (b[0] === "-" || b[0] === "*" || b[0] === "_") {
153
+ const ch = b[0];
154
+ let j = 0;
155
+ while (j < b.length && (b[j] === ch || b[j] === " "))
156
+ j++;
157
+ if (j === b.length && !eof)
158
+ return "";
159
+ if (j === b.length || b[j] === "\n") {
160
+ let count = 0;
161
+ for (let k = 0; k < j; k++)
162
+ if (b[k] === ch)
163
+ count++;
164
+ if (count >= 3) {
165
+ if (j < b.length) {
166
+ this.buf = b.slice(j + 1);
167
+ this.sol = true;
168
+ return b.slice(0, j + 1);
169
+ }
170
+ this.buf = "";
171
+ return b;
172
+ }
173
+ }
174
+ this.sol = false;
175
+ return "";
176
+ }
177
+ this.sol = false;
178
+ return "";
179
+ }
180
+ /** Scan line body for inline pattern triggers; output safe chars eagerly. */
181
+ pumpBody(eof) {
182
+ let out = "";
183
+ let i = 0;
184
+ while (i < this.buf.length) {
185
+ const c = this.buf[i];
186
+ if (c === "\n") {
187
+ out += this.buf.slice(0, i + 1);
188
+ this.buf = this.buf.slice(i + 1);
189
+ this.sol = true;
190
+ return out;
191
+ }
192
+ if (c === "!" && i + 1 < this.buf.length && this.buf[i + 1] === "[") {
193
+ out += this.buf.slice(0, i);
194
+ this.buf = this.buf.slice(i + 2);
195
+ this.inl = { type: "image", acc: "" };
196
+ return out;
197
+ }
198
+ if (c === "~") {
199
+ i++;
200
+ continue;
201
+ }
202
+ if (c === "*") {
203
+ if (i + 2 < this.buf.length && this.buf[i + 1] === "*" && this.buf[i + 2] === "*") {
204
+ out += this.buf.slice(0, i);
205
+ this.buf = this.buf.slice(i + 3);
206
+ this.inl = { type: "bold3", acc: "" };
207
+ return out;
208
+ }
209
+ if (i + 1 < this.buf.length && this.buf[i + 1] === "*") {
210
+ i += 2;
211
+ continue;
212
+ }
213
+ if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
214
+ out += this.buf.slice(0, i);
215
+ this.buf = this.buf.slice(i + 1);
216
+ this.inl = { type: "italic", acc: "" };
217
+ return out;
218
+ }
219
+ i++;
220
+ continue;
221
+ }
222
+ if (c === "_") {
223
+ if (i + 2 < this.buf.length && this.buf[i + 1] === "_" && this.buf[i + 2] === "_") {
224
+ out += this.buf.slice(0, i);
225
+ this.buf = this.buf.slice(i + 3);
226
+ this.inl = { type: "ubold3", acc: "" };
227
+ return out;
228
+ }
229
+ if (i + 1 < this.buf.length && this.buf[i + 1] === "_") {
230
+ i += 2;
231
+ continue;
232
+ }
233
+ if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
234
+ out += this.buf.slice(0, i);
235
+ this.buf = this.buf.slice(i + 1);
236
+ this.inl = { type: "uitalic", acc: "" };
237
+ return out;
238
+ }
239
+ i++;
240
+ continue;
241
+ }
242
+ i++;
243
+ }
244
+ let hold = 0;
245
+ if (!eof) {
246
+ if (this.buf.endsWith("**"))
247
+ hold = 2;
248
+ else if (this.buf.endsWith("__"))
249
+ hold = 2;
250
+ else if (this.buf.endsWith("*"))
251
+ hold = 1;
252
+ else if (this.buf.endsWith("_"))
253
+ hold = 1;
254
+ else if (this.buf.endsWith("!"))
255
+ hold = 1;
256
+ }
257
+ out += this.buf.slice(0, this.buf.length - hold);
258
+ this.buf = hold > 0 ? this.buf.slice(-hold) : "";
259
+ return out;
260
+ }
261
+ /** Accumulate inline content until closing marker is found. */
262
+ pumpInline(_eof) {
263
+ if (!this.inl)
264
+ return "";
265
+ this.inl.acc += this.buf;
266
+ this.buf = "";
267
+ switch (this.inl.type) {
268
+ case "bold3": {
269
+ const idx = this.inl.acc.indexOf("***");
270
+ if (idx !== -1) {
271
+ const content = this.inl.acc.slice(0, idx);
272
+ this.buf = this.inl.acc.slice(idx + 3);
273
+ this.inl = null;
274
+ if (StreamingMarkdownFilter.containsCJK(content))
275
+ return content;
276
+ return `***${content}***`;
277
+ }
278
+ return "";
279
+ }
280
+ case "ubold3": {
281
+ const idx = this.inl.acc.indexOf("___");
282
+ if (idx !== -1) {
283
+ const content = this.inl.acc.slice(0, idx);
284
+ this.buf = this.inl.acc.slice(idx + 3);
285
+ this.inl = null;
286
+ if (StreamingMarkdownFilter.containsCJK(content))
287
+ return content;
288
+ return `___${content}___`;
289
+ }
290
+ return "";
291
+ }
292
+ case "italic": {
293
+ for (let j = 0; j < this.inl.acc.length; j++) {
294
+ if (this.inl.acc[j] === "\n") {
295
+ const r = `*${this.inl.acc.slice(0, j + 1)}`;
296
+ this.buf = this.inl.acc.slice(j + 1);
297
+ this.inl = null;
298
+ this.sol = true;
299
+ return r;
300
+ }
301
+ if (this.inl.acc[j] === "*") {
302
+ if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "*") {
303
+ j++;
304
+ continue;
305
+ }
306
+ const content = this.inl.acc.slice(0, j);
307
+ this.buf = this.inl.acc.slice(j + 1);
308
+ this.inl = null;
309
+ if (StreamingMarkdownFilter.containsCJK(content))
310
+ return content;
311
+ return `*${content}*`;
312
+ }
313
+ }
314
+ return "";
315
+ }
316
+ case "uitalic": {
317
+ for (let j = 0; j < this.inl.acc.length; j++) {
318
+ if (this.inl.acc[j] === "\n") {
319
+ const r = `_${this.inl.acc.slice(0, j + 1)}`;
320
+ this.buf = this.inl.acc.slice(j + 1);
321
+ this.inl = null;
322
+ this.sol = true;
323
+ return r;
324
+ }
325
+ if (this.inl.acc[j] === "_") {
326
+ if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "_") {
327
+ j++;
328
+ continue;
329
+ }
330
+ const content = this.inl.acc.slice(0, j);
331
+ this.buf = this.inl.acc.slice(j + 1);
332
+ this.inl = null;
333
+ if (StreamingMarkdownFilter.containsCJK(content))
334
+ return content;
335
+ return `_${content}_`;
336
+ }
337
+ }
338
+ return "";
339
+ }
340
+ case "image": {
341
+ const cb = this.inl.acc.indexOf("]");
342
+ if (cb === -1)
343
+ return "";
344
+ if (cb + 1 >= this.inl.acc.length)
345
+ return "";
346
+ if (this.inl.acc[cb + 1] !== "(") {
347
+ const r = `![${this.inl.acc.slice(0, cb + 1)}`;
348
+ this.buf = this.inl.acc.slice(cb + 1);
349
+ this.inl = null;
350
+ return r;
351
+ }
352
+ const cp = this.inl.acc.indexOf(")", cb + 2);
353
+ if (cp !== -1) {
354
+ this.buf = this.inl.acc.slice(cp + 1);
355
+ this.inl = null;
356
+ return "";
357
+ }
358
+ return "";
359
+ }
360
+ }
361
+ return "";
362
+ }
363
+ static containsCJK(text) {
364
+ return /[\u2E80-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF]/.test(text);
365
+ }
366
+ }
367
+ //# sourceMappingURL=markdown-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-filter.js","sourceRoot":"","sources":["../../../src/messaging/markdown-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { buildCanonicalSentMessageHookContext, fireAndForgetHook, toPluginMessageContext, toPluginMessageSentEvent, } from "openclaw/plugin-sdk/hook-runtime";
2
+ import { getGlobalHookRunner } from "openclaw/plugin-sdk/plugin-runtime";
3
+ import { logger } from "../util/logger.js";
4
+ const CHANNEL_ID = "openclaw-weixin";
5
+ /**
6
+ * Run message_sending hook before sending.
7
+ * Returns the (possibly modified) text content plus a cancelled flag.
8
+ * Hook errors are caught and logged — sending proceeds regardless.
9
+ */
10
+ export async function applyWeixinMessageSendingHook(params) {
11
+ const hookRunner = getGlobalHookRunner();
12
+ if (!hookRunner?.hasHooks("message_sending")) {
13
+ return { cancelled: false, text: params.text };
14
+ }
15
+ try {
16
+ const hookResult = await hookRunner.runMessageSending({
17
+ to: params.to,
18
+ content: params.text,
19
+ metadata: {
20
+ channel: CHANNEL_ID,
21
+ accountId: params.accountId,
22
+ runId: params.runId,
23
+ ...(params.mediaUrl ? { mediaUrls: [params.mediaUrl] } : {}),
24
+ },
25
+ }, { channelId: CHANNEL_ID, accountId: params.accountId });
26
+ if (hookResult?.cancel) {
27
+ return { cancelled: true, text: params.text };
28
+ }
29
+ return {
30
+ cancelled: false,
31
+ text: hookResult?.content ?? params.text,
32
+ };
33
+ }
34
+ catch (err) {
35
+ logger.warn(`message_sending hook error, proceeding with send: ${String(err)}`);
36
+ return { cancelled: false, text: params.text };
37
+ }
38
+ }
39
+ /**
40
+ * Fire message_sent hook (fire-and-forget) after a send attempt.
41
+ */
42
+ export function emitWeixinMessageSent(params) {
43
+ const hookRunner = getGlobalHookRunner();
44
+ if (!hookRunner?.hasHooks("message_sent"))
45
+ return;
46
+ const canonical = buildCanonicalSentMessageHookContext({
47
+ to: params.to,
48
+ content: params.content,
49
+ success: params.success,
50
+ error: params.error,
51
+ channelId: CHANNEL_ID,
52
+ accountId: params.accountId,
53
+ conversationId: params.to,
54
+ runId: params.runId,
55
+ });
56
+ fireAndForgetHook(Promise.resolve(hookRunner.runMessageSent(toPluginMessageSentEvent(canonical), toPluginMessageContext(canonical))), "weixin: message_sent plugin hook failed");
57
+ }
58
+ //# sourceMappingURL=outbound-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-hooks.js","sourceRoot":"","sources":["../../../src/messaging/outbound-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,MAMnD;IACC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,iBAAiB,CACnD;YACE,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,QAAQ,EAAE;gBACR,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;SACF,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CACvD,CAAC;QACF,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,qDAAqD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAOrC;IACC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO;IAClD,MAAM,SAAS,GAAG,oCAAoC,CAAC;QACrD,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,MAAM,CAAC,EAAE;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;IACH,iBAAiB,CACf,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,EAClH,yCAAyC,CAC1C,CAAC;AACJ,CAAC"}