@tencent-weixin/openclaw-weixin 2.4.3 → 2.4.5
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/CHANGELOG.md +34 -0
- package/CHANGELOG.zh_CN.md +34 -0
- package/dist/src/api/api.js +79 -4
- package/dist/src/api/api.js.map +1 -1
- package/dist/src/api/session-guard.js +3 -3
- package/dist/src/api/session-guard.js.map +1 -1
- package/dist/src/api/types.js +2 -0
- package/dist/src/api/types.js.map +1 -1
- package/dist/src/cdn/cdn-upload.js +3 -2
- package/dist/src/cdn/cdn-upload.js.map +1 -1
- package/dist/src/cdn/upload.js +12 -3
- package/dist/src/cdn/upload.js.map +1 -1
- package/dist/src/channel.js +7 -1
- package/dist/src/channel.js.map +1 -1
- package/dist/src/config/config-schema.js +1 -0
- package/dist/src/config/config-schema.js.map +1 -1
- package/dist/src/config/reply-progress.js +5 -0
- package/dist/src/config/reply-progress.js.map +1 -0
- package/dist/src/messaging/error-notice.js +1 -0
- package/dist/src/messaging/error-notice.js.map +1 -1
- package/dist/src/messaging/outbound-hooks.js +2 -0
- package/dist/src/messaging/outbound-hooks.js.map +1 -1
- package/dist/src/messaging/process-message.js +32 -7
- package/dist/src/messaging/process-message.js.map +1 -1
- package/dist/src/messaging/reply-progress-sender.js +93 -0
- package/dist/src/messaging/reply-progress-sender.js.map +1 -0
- package/dist/src/messaging/send.js +40 -2
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/monitor/monitor.js +11 -8
- package/dist/src/monitor/monitor.js.map +1 -1
- package/npm-shrinkwrap.json +21848 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +7 -5
- package/src/api/api.ts +102 -4
- package/src/api/session-guard.ts +3 -3
- package/src/api/types.ts +18 -1
- package/src/cdn/cdn-upload.ts +8 -2
- package/src/cdn/upload.ts +14 -3
- package/src/channel.ts +7 -1
- package/src/config/config-schema.ts +1 -0
- package/src/config/reply-progress.ts +10 -0
- package/src/messaging/error-notice.ts +2 -0
- package/src/messaging/outbound-hooks.ts +4 -0
- package/src/messaging/process-message.ts +32 -7
- package/src/messaging/reply-progress-sender.ts +122 -0
- package/src/messaging/send-media.ts +1 -1
- package/src/messaging/send.ts +60 -7
- package/src/monitor/monitor.ts +12 -11
- package/dist/src/media/voice-outbound.js +0 -177
- package/dist/src/media/voice-outbound.js.map +0 -1
- package/dist/src/messaging/abort-fence.js +0 -70
- package/dist/src/messaging/abort-fence.js.map +0 -1
- package/dist/src/messaging/buttons.js +0 -117
- package/dist/src/messaging/buttons.js.map +0 -1
- package/dist/src/messaging/lane-key.js +0 -66
- package/dist/src/messaging/lane-key.js.map +0 -1
- package/dist/src/messaging/merged-record.js +0 -149
- package/dist/src/messaging/merged-record.js.map +0 -1
- package/dist/src/messaging/model-buttons.js +0 -182
- package/dist/src/messaging/model-buttons.js.map +0 -1
- package/dist/src/messaging/model-callback-handler.js +0 -133
- package/dist/src/messaging/model-callback-handler.js.map +0 -1
- package/dist/src/monitor/lane-scheduler.js +0 -46
- package/dist/src/monitor/lane-scheduler.js.map +0 -1
- package/dist/src/runtime.js +0 -54
- package/dist/src/runtime.js.map +0 -1
- package/dist/src/streaming/stream-pipeline.js +0 -431
- package/dist/src/streaming/stream-pipeline.js.map +0 -1
- package/dist/src/streaming/stream-session.js +0 -260
- package/dist/src/streaming/stream-session.js.map +0 -1
- package/dist/src/streaming/stream.js +0 -239
- package/dist/src/streaming/stream.js.map +0 -1
- package/dist/src/util/markdown-fences.js +0 -54
- package/dist/src/util/markdown-fences.js.map +0 -1
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Handle mdl_* button callbacks for /model interactive flow.
|
|
3
|
-
*
|
|
4
|
-
* When a user taps a model-selection button, the BUTTON_CALLBACK arrives
|
|
5
|
-
* as an inbound message with call_back_data = "mdl_...". We intercept
|
|
6
|
-
* it here, build the next response (provider list / model list / confirmation),
|
|
7
|
-
* and send a NEW message (no editing).
|
|
8
|
-
*/
|
|
9
|
-
import { buildModelsProviderData, formatModelsAvailableHeader } from "openclaw/plugin-sdk/models-provider-runtime";
|
|
10
|
-
import { resolveAgentDir, resolveDefaultModelForAgent } from "openclaw/plugin-sdk/agent-runtime";
|
|
11
|
-
import { applyModelOverrideToSessionEntry, updateSessionStore, resolveStorePath, } from "openclaw/plugin-sdk/config-runtime";
|
|
12
|
-
import { logger } from "../util/logger.js";
|
|
13
|
-
import { sendMessageWeixin } from "./send.js";
|
|
14
|
-
import { getContextToken } from "./inbound.js";
|
|
15
|
-
import { parseModelCallbackData, buildProviderKeyboard, buildModelsKeyboard, calculateTotalPages, getModelsPageSize, resolveModelSelection, } from "./model-buttons.js";
|
|
16
|
-
/**
|
|
17
|
-
* Try to handle an inbound message as a model callback.
|
|
18
|
-
* Returns true if the callback was handled, false otherwise.
|
|
19
|
-
*/
|
|
20
|
-
export async function handleModelCallback(callbackData, deps) {
|
|
21
|
-
const parsed = parseModelCallbackData(callbackData);
|
|
22
|
-
if (!parsed)
|
|
23
|
-
return false;
|
|
24
|
-
const contextToken = getContextToken(deps.accountId, deps.to);
|
|
25
|
-
const sendOpts = { baseUrl: deps.baseUrl, token: deps.token, contextToken };
|
|
26
|
-
const modelData = await buildModelsProviderData(deps.cfg, deps.agentId);
|
|
27
|
-
const { byProvider, providers } = modelData;
|
|
28
|
-
const sendWithButtons = async (text, buttons) => {
|
|
29
|
-
await sendMessageWeixin({
|
|
30
|
-
to: deps.to,
|
|
31
|
-
text,
|
|
32
|
-
opts: sendOpts,
|
|
33
|
-
buttons: buttons.length > 0 ? buttons : undefined,
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
if (parsed.type === "providers" || parsed.type === "back") {
|
|
37
|
-
if (providers.length === 0) {
|
|
38
|
-
await sendWithButtons("No providers available.", []);
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
const providerInfos = providers.map((p) => ({
|
|
42
|
-
id: p,
|
|
43
|
-
count: byProvider.get(p)?.size ?? 0,
|
|
44
|
-
}));
|
|
45
|
-
await sendWithButtons("Select a provider:", buildProviderKeyboard(providerInfos));
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
if (parsed.type === "list") {
|
|
49
|
-
const { provider, page } = parsed;
|
|
50
|
-
const modelSet = byProvider.get(provider);
|
|
51
|
-
if (!modelSet || modelSet.size === 0) {
|
|
52
|
-
const providerInfos = providers.map((p) => ({
|
|
53
|
-
id: p,
|
|
54
|
-
count: byProvider.get(p)?.size ?? 0,
|
|
55
|
-
}));
|
|
56
|
-
await sendWithButtons(`Unknown provider: ${provider}\n\nSelect a provider:`, buildProviderKeyboard(providerInfos));
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
const models = [...modelSet].toSorted();
|
|
60
|
-
const pageSize = getModelsPageSize();
|
|
61
|
-
const totalPages = calculateTotalPages(models.length, pageSize);
|
|
62
|
-
const safePage = Math.max(1, Math.min(page, totalPages));
|
|
63
|
-
const currentModel = undefined; // TODO: resolve from session if needed
|
|
64
|
-
const buttons = buildModelsKeyboard({
|
|
65
|
-
provider,
|
|
66
|
-
models,
|
|
67
|
-
currentModel,
|
|
68
|
-
currentPage: safePage,
|
|
69
|
-
totalPages,
|
|
70
|
-
pageSize,
|
|
71
|
-
modelNames: modelData.modelNames,
|
|
72
|
-
});
|
|
73
|
-
const text = formatModelsAvailableHeader({
|
|
74
|
-
provider,
|
|
75
|
-
total: models.length,
|
|
76
|
-
cfg: deps.cfg,
|
|
77
|
-
agentDir: deps.agentId ? resolveAgentDir(deps.cfg, deps.agentId) : undefined,
|
|
78
|
-
});
|
|
79
|
-
await sendWithButtons(text, buttons);
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
if (parsed.type === "select") {
|
|
83
|
-
const selection = resolveModelSelection({
|
|
84
|
-
callback: parsed,
|
|
85
|
-
providers,
|
|
86
|
-
byProvider,
|
|
87
|
-
});
|
|
88
|
-
if (selection.kind !== "resolved") {
|
|
89
|
-
const providerInfos = providers.map((p) => ({
|
|
90
|
-
id: p,
|
|
91
|
-
count: byProvider.get(p)?.size ?? 0,
|
|
92
|
-
}));
|
|
93
|
-
await sendWithButtons(`Could not resolve model "${selection.model}".\n\nSelect a provider:`, buildProviderKeyboard(providerInfos));
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
const modelSet = byProvider.get(selection.provider);
|
|
97
|
-
if (!modelSet?.has(selection.model)) {
|
|
98
|
-
await sendWithButtons(`❌ Model "${selection.provider}/${selection.model}" is not allowed.`, []);
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
const storePath = resolveStorePath(deps.cfg.session?.store, { agentId: deps.agentId }) ?? "";
|
|
103
|
-
const resolvedDefault = resolveDefaultModelForAgent({ cfg: deps.cfg, agentId: deps.agentId });
|
|
104
|
-
const isDefaultSelection = selection.provider === resolvedDefault.provider &&
|
|
105
|
-
selection.model === resolvedDefault.model;
|
|
106
|
-
await updateSessionStore(storePath, (store) => {
|
|
107
|
-
if (!deps.sessionKey)
|
|
108
|
-
return;
|
|
109
|
-
const entry = store[deps.sessionKey] ?? {};
|
|
110
|
-
store[deps.sessionKey] = entry;
|
|
111
|
-
applyModelOverrideToSessionEntry({
|
|
112
|
-
entry,
|
|
113
|
-
selection: {
|
|
114
|
-
provider: selection.provider,
|
|
115
|
-
model: selection.model,
|
|
116
|
-
isDefault: isDefaultSelection,
|
|
117
|
-
},
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
const actionText = isDefaultSelection
|
|
121
|
-
? "reset to default"
|
|
122
|
-
: `changed to ${selection.provider}/${selection.model}`;
|
|
123
|
-
await sendWithButtons(`✅ Model ${actionText}\n\nThis model will be used for your next message.`, []);
|
|
124
|
-
}
|
|
125
|
-
catch (err) {
|
|
126
|
-
logger.error(`handleModelCallback: failed to set model: ${String(err)}`);
|
|
127
|
-
await sendWithButtons(`❌ Failed to set model: ${String(err)}`, []);
|
|
128
|
-
}
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=model-callback-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-callback-handler.js","sourceRoot":"","sources":["../../../src/messaging/model-callback-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
export function createLaneScheduler() {
|
|
2
|
-
/**
|
|
3
|
-
* laneKey -> tail promise of the lane's in-flight chain. The chain is built
|
|
4
|
-
* with internal `try/catch` so failures of earlier tasks do not poison later
|
|
5
|
-
* tasks on the same lane. Entries are pruned when the lane goes idle.
|
|
6
|
-
*/
|
|
7
|
-
const lanes = new Map();
|
|
8
|
-
function enqueue(key, task) {
|
|
9
|
-
const previousTail = lanes.get(key) ?? Promise.resolve();
|
|
10
|
-
let resolveResult;
|
|
11
|
-
let rejectResult;
|
|
12
|
-
const result = new Promise((resolve, reject) => {
|
|
13
|
-
resolveResult = resolve;
|
|
14
|
-
rejectResult = reject;
|
|
15
|
-
});
|
|
16
|
-
const nextTail = previousTail.then(async () => {
|
|
17
|
-
try {
|
|
18
|
-
const value = await task();
|
|
19
|
-
resolveResult(value);
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
rejectResult(err);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
lanes.set(key, nextTail);
|
|
26
|
-
void nextTail.finally(() => {
|
|
27
|
-
// Only prune if no one queued behind us in the meantime; otherwise the
|
|
28
|
-
// newer enqueue() owns the slot.
|
|
29
|
-
if (lanes.get(key) === nextTail) {
|
|
30
|
-
lanes.delete(key);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return result;
|
|
34
|
-
}
|
|
35
|
-
function size() {
|
|
36
|
-
return lanes.size;
|
|
37
|
-
}
|
|
38
|
-
async function drain() {
|
|
39
|
-
while (lanes.size > 0) {
|
|
40
|
-
const tails = [...lanes.values()];
|
|
41
|
-
await Promise.allSettled(tails);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return { enqueue, size, drain };
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=lane-scheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lane-scheduler.js","sourceRoot":"","sources":["../../../src/monitor/lane-scheduler.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,mBAAmB;IACjC;;;;OAIG;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,SAAS,OAAO,CAAI,GAAW,EAAE,IAAsB;QACrD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACzD,IAAI,aAAmD,CAAC;QACxD,IAAI,YAAyC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,aAAa,GAAG,OAAO,CAAC;YACxB,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC3B,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzB,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YACzB,uEAAuE;YACvE,iCAAiC;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,IAAI;QACX,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAClC,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
|
package/dist/src/runtime.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { logger } from "./util/logger.js";
|
|
2
|
-
let pluginRuntime = null;
|
|
3
|
-
/**
|
|
4
|
-
* Sets the global Weixin runtime (called from plugin register).
|
|
5
|
-
*/
|
|
6
|
-
export function setWeixinRuntime(next) {
|
|
7
|
-
pluginRuntime = next;
|
|
8
|
-
logger.info(`[runtime] setWeixinRuntime called, runtime set successfully`);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Gets the global Weixin runtime (throws if not initialized).
|
|
12
|
-
*/
|
|
13
|
-
export function getWeixinRuntime() {
|
|
14
|
-
if (!pluginRuntime) {
|
|
15
|
-
throw new Error("Weixin runtime not initialized");
|
|
16
|
-
}
|
|
17
|
-
return pluginRuntime;
|
|
18
|
-
}
|
|
19
|
-
const WAIT_INTERVAL_MS = 100;
|
|
20
|
-
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
21
|
-
/**
|
|
22
|
-
* Waits for the Weixin runtime to be initialized (async polling).
|
|
23
|
-
*/
|
|
24
|
-
export async function waitForWeixinRuntime(timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
25
|
-
const start = Date.now();
|
|
26
|
-
while (!pluginRuntime) {
|
|
27
|
-
if (Date.now() - start > timeoutMs) {
|
|
28
|
-
throw new Error("Weixin runtime initialization timeout");
|
|
29
|
-
}
|
|
30
|
-
await new Promise((resolve) => setTimeout(resolve, WAIT_INTERVAL_MS));
|
|
31
|
-
}
|
|
32
|
-
return pluginRuntime;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Resolves `PluginRuntime["channel"]` for the long-poll monitor.
|
|
36
|
-
*
|
|
37
|
-
* Prefer the gateway-injected `channelRuntime` on `ChannelGatewayContext` when present (avoids
|
|
38
|
-
* races with the module-global from `register()`). Fall back to the global set by `setWeixinRuntime()`,
|
|
39
|
-
* then to a short wait for legacy hosts.
|
|
40
|
-
*/
|
|
41
|
-
export async function resolveWeixinChannelRuntime(params) {
|
|
42
|
-
if (params.channelRuntime) {
|
|
43
|
-
logger.debug("[runtime] channelRuntime from gateway context");
|
|
44
|
-
return params.channelRuntime;
|
|
45
|
-
}
|
|
46
|
-
if (pluginRuntime) {
|
|
47
|
-
logger.debug("[runtime] channelRuntime from register() global");
|
|
48
|
-
return pluginRuntime.channel;
|
|
49
|
-
}
|
|
50
|
-
logger.warn("[runtime] no channelRuntime on ctx and no global runtime yet; waiting for register()");
|
|
51
|
-
const pr = await waitForWeixinRuntime(params.waitTimeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
52
|
-
return pr.channel;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=runtime.js.map
|
package/dist/src/runtime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAI/C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,aAAa,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAS,GAAG,kBAAkB;IAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAGjD;IACC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IACD,MAAM,CAAC,IAAI,CACT,sFAAsF,CACvF,CAAC;IACF,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC;IAClF,OAAO,EAAE,CAAC,OAAO,CAAC;AACpB,CAAC"}
|