From c63e23a3708b2cd86d94b9eefab61e55c6e5e03f Mon Sep 17 00:00:00 2001 From: Kang Zhang Date: Fri, 30 Oct 2026 11:50:03 +0800 Subject: [PATCH 1/2] Add optional native Feishu/Lark messaging Install OpenClaw's Feishu channel plugin, pinned to the chart's OpenClaw release, and connect through the plugin's outbound persistent connection so no ingress is required. Install it by npm spec, which OpenClaw trusts as the official package, and stop the pod unless the integrity that npm verified matches the pinned value. Allowlisted users can message the bot directly or mention it in listed group chats. Feishu runs always stay in View, and the plugin's document, wiki, drive, Bitable, chat, and permission tools are disabled. Sender names need the contact:contact.base:readonly scope and can be turned off. Document setup, egress, and log-based troubleshooting, since the Feishu connection does not affect gateway readiness. Signed-off-by: Kang Zhang Co-Authored-By: Claude Opus 5.5 --- docs/installation.md | 77 +++++++++++- docs/security_model.md | 2 + .../files/agent-documentation.tar.gz | Bin 33660 -> 35815 bytes .../extensions/automation-guard/index.ts | 16 +++ .../automation-guard/openclaw.plugin.json | 3 + .../files/openclaw-seed/nemoclaw.json | 48 ++++++- helm/mosaic-stack/templates/openclaw.yaml | 41 ++++++ helm/mosaic-stack/templates/validation.yaml | 20 +++ .../tests/automation-context.test.mjs | 22 ++++ helm/mosaic-stack/tests/chart-render.test.mjs | 119 ++++++++++++++++++ helm/mosaic-stack/values.yaml | 21 ++++ 11 files changed, 362 insertions(+), 7 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 681a2283..a51ebce5 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -379,6 +379,81 @@ helm upgrade mosaic "$MOSAIC_CHART" \ --timeout 12m ``` +### Feishu / Lark + +Feishu and Lark messaging is optional and uses OpenClaw's native `feishu` channel plugin, pinned to the chart's OpenClaw release. The gateway opens an outbound persistent connection to the Feishu Open Platform, so no ingress or public endpoint is required. The `openclaw` pod needs HTTPS egress to `open.feishu.cn` and to the persistent connection endpoint that it returns, currently `msg-frontier.feishu.cn` (`open.larksuite.com` and `msg-frontier.larksuite.com` for Lark). Before the gateway starts, an init container installs `@openclaw/feishu` at `openclaw.feishu.pluginVersion` from `registry.npmjs.org` and stops the pod unless the integrity that npm verified matches `openclaw.feishu.pluginIntegrity`, so the pod also needs egress to `registry.npmjs.org`. + +In the [Feishu Open Platform](https://open.feishu.cn/app) or Lark Developer console, create a custom app and: + +1. Enable the **Bot** capability. +2. Grant the messaging scopes `im:message`, `im:message.p2p_msg:readonly`, `im:message.group_at_msg:readonly`, `im:message:send_as_bot`, and `im:resource`, plus `cardkit:card:write` for streaming replies and `contact:contact.base:readonly` so the agent sees sender names instead of `open_id` values. Name lookups also require the senders to be inside the app's contact data range, configured under the app's data permissions. If the contact scope cannot be granted, set `openclaw.feishu.resolveSenderNames: false`; otherwise every message makes a failed name lookup. The chart disables the plugin's document, wiki, drive, Bitable, chat, and permission tools, so their scopes are not needed. +3. Under event subscriptions, choose the persistent connection mode and add `im.message.receive_v1`. The console verifies the connection, so save this step after the gateway is running with the app credentials. +4. Publish a version and set the app's availability to the intended users. + +Create a Secret in the release namespace from the app's App ID and App Secret. Keep the secret values outside Helm values and source control. + +```bash +read -rp 'Feishu App ID (cli_...): ' FEISHU_APP_ID +read -rsp 'Feishu App Secret: ' FEISHU_APP_SECRET; echo + +kubectl -n mosaic create secret generic mosaic-feishu \ + --from-literal=FEISHU_APP_ID="$FEISHU_APP_ID" \ + --from-literal=FEISHU_APP_SECRET="$FEISHU_APP_SECRET" \ + --dry-run=client -o yaml | kubectl apply -f - +unset FEISHU_APP_SECRET +``` + +Add these values to the release configuration and apply them through the normal Helm upgrade workflow: + +```yaml +openclaw: + feishu: + enabled: true + existingSecret: mosaic-feishu + # Use lark for Lark tenants. + domain: feishu + allowedUserIds: + - "ou_xxxxxxxxxxxxxxxx" + # Optional group chats where allowed users can @mention the bot. + groupChatIds: + - "oc_xxxxxxxxxxxxxxxx" +``` + +`allowedUserIds` lists Feishu `open_id` values (`ou_...`). An `open_id` is specific to the app. To find one, deploy with a placeholder ID, have the user send the bot a direct message, and read the rejected sender from the gateway log: + +```bash +kubectl -n mosaic logs deploy/openclaw -c gateway | grep 'blocked unauthorized sender' +``` + +`groupChatIds` lists group `chat_id` values (`oc_...`), shown in the group's settings. A group message reaches the agent only when its chat is listed, its sender is in `allowedUserIds`, and it @mentions the bot. Group messages are ignored while `groupChatIds` is empty. + +Each Feishu user has a separate direct-message session, and each group chat shares one session among its allowed members. Feishu conversations always run in View, whether or not the Edit module is enabled; use the web UI for Edit or Auto. Slack can remain enabled alongside Feishu. + +To rotate the App Secret, update the Secret and run `kubectl -n mosaic rollout restart deployment/openclaw`. Updating only the Secret does not restart the pod. When changing `openclaw.feishu.pluginVersion`, set `openclaw.feishu.pluginIntegrity` to the new package's integrity: + +```bash +read -rp 'Feishu plugin version: ' VERSION +curl -fsSL "https://registry.npmjs.org/@openclaw/feishu/-/feishu-${VERSION}.tgz" \ + | python3 -c 'import base64, hashlib, sys; print("sha512-" + base64.b64encode(hashlib.sha512(sys.stdin.buffer.read()).digest()).decode())' +``` + +The Feishu connection does not affect the gateway's readiness, so a Ready `openclaw` pod does not mean that Feishu is connected. Check the plugin's log lines instead: + +```bash +kubectl -n mosaic logs deploy/openclaw -c gateway | grep '\[feishu\]' +``` + +| Log message | Meaning | +|---|---| +| `app_id or app_secret is invalid` | The Secret holds a wrong App ID or App Secret. | +| `bot open_id unknown` | The bot identity lookup failed, usually because of wrong credentials or a missing Bot capability. Group mentions are ignored until a later retry succeeds. | +| `blocked unauthorized sender ou_...` | The direct-message sender is not in `allowedUserIds`. | +| `not in groupAllowFrom` | The group chat is not in `groupChatIds`. | +| `not in group ... sender allowlist` | The group message sender is not in `allowedUserIds`. | +| `did not mention bot` | A group message without an @mention, ignored by design. | +| `permission error resolving sender name` or `ignoring stale permission scope error` | The app lacks `contact:contact.base:readonly`. | +| `failed to resolve sender name` | The name lookup failed for another reason, most often because the sender is outside the app's contact data range. | + ### Access Modes Enable guarded write operations with the Edit module: @@ -394,7 +469,7 @@ modules: Every interactive conversation starts in **View**. Users can switch that conversation to **Edit** for approval-gated changes or **Auto** for validated changes without approval. Auto requires confirmation through a warning dialog. Other conversations remain in View, and automated alert and cluster-health sessions are always read-only. When the module is disabled, the access control is not shown. -Native Slack users remain read-only unless their verified Slack user ID is listed under `openclaw.slack.editUserIds`. Edit users approve their own mutations with Slack buttons. The broader `openclaw.slack.allowedUserIds` list controls who may use AI Factory Operations Agent through DMs, group DMs, and channel mentions. +Native Slack users remain read-only unless their verified Slack user ID is listed under `openclaw.slack.editUserIds`. Edit users approve their own mutations with Slack buttons. The broader `openclaw.slack.allowedUserIds` list controls who may use AI Factory Operations Agent through DMs, group DMs, and channel mentions. Feishu users are always read-only. Privileges are attached to separate tools and credentials. Read-only infrastructure tools and sandbox-local execution run automatically in View. OpenShell enforces local execution boundaries; the diagnostic command allowlist applies to remote SSH. Mutating Kubernetes, Base Command Manager, and SSH operations are blocked in View, approval-gated in Edit when `hitl: true`, and automatic in Auto. Kubernetes RBAC, request validation, configured SSH hosts, and audit logging apply in every mode. diff --git a/docs/security_model.md b/docs/security_model.md index 3dffa9cc..512f8f2e 100644 --- a/docs/security_model.md +++ b/docs/security_model.md @@ -18,6 +18,8 @@ Automated alert and cluster-health sessions are always View-only. They cannot be For native Slack, `openclaw.slack.allowedUserIds` remains the messaging allowlist for DMs, group DMs, and channel mentions. `openclaw.slack.editUserIds` is narrower: those verified users receive Edit and approve their own mutations through Slack buttons; every other allowed Slack user remains in View. +For native Feishu, `openclaw.feishu.allowedUserIds` is the messaging allowlist for DMs and group mentions, and `openclaw.feishu.groupChatIds` limits which group chats are admitted. Feishu has no identity-verified approval path, so every Feishu run is View even if the conversation's stored mode was changed elsewhere. The chart also disables the Feishu plugin's document, wiki, drive, Bitable, chat, and permission tools. + Setting `modules.edit.hitl=false` also removes approvals from Edit mode. Keep the default `true` unless every user permitted to select Edit is trusted to make changes directly. ## Kubernetes Boundaries diff --git a/helm/mosaic-stack/files/agent-documentation.tar.gz b/helm/mosaic-stack/files/agent-documentation.tar.gz index 37c5d506e0a2f4f4f4320425b32cf84295459935..24709212e5fe5150f8036207f46431e4d1ac0d7b 100644 GIT binary patch literal 35815 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 BV9o#l literal 33660 zcmV(&K;ge1iwFP!00002|Lnc%RvTHCE?U3!6j7wRG2RLZ@FlZwlDjdGHkH_L06VJ& z?Lh=m0Fjmyst5^8WqObPwIAS&^JkB7&dc?aocYbmS}UXg?5s>zRd>=|X^8s%Yap8%awPAcX@7<5uhVLM z@kO*pk6h;2Rjc()bo~2Qdq>-E>9?bcyrM>_!6qPtfFa3R% zmD#A5MaPG)_xJY>j)<(^-tTn%UrW)r%!^V+P8&ZMaQD>vEvuk?zk0K?wX+eO4yGA3 zLLZ+|Lw#PKd~`0On`EOZKOJPULU}KkVRTle!|bXk-$kd>d@zZw^2tT?DjOD?gY>Es z9R^FR>r1P8LF=h+V7pt6I=6#-I+AE8ya;sil(?7$i9nrh!6Z?^+WmFc$BNzt@Kid9 zCbYHGKTSOCr{f70mByQwQE@d2cR3qf=4CO$u3?`Kr{i%^PH39Gy?jK|=x1xKRvaB< zX+JJTgX`$K=_$rAA!5R#gCgzAVi=)~K$o(CakO6+!;A(n71Dc?qxU?0nN7;PS4DrB zW|%sE_qbD#tb!!>HrL^!PzaXS z?En*oTQ@m08)fezpU^r?%dFM<{qb#-oCeRny?-&8jH|V7H?69Swq|tR>(Ey9^Rz=_ z>5j{yKkZGbZaU6s5$LcK=Ut)aEKc)SwwIPP#yDf4*)F|J(;Iev7@se-S~P&s;YBtW z&>1Q~zLk>aK&LV{=}xfg?Wj1dh$Ez@`5>QMw`FI9c%R|KZ|d7Gd3|X!dcBN}1omrK zV1Hs}TxWC;(GKlIMY}|VS`35`h+MGseH_-5J|q4z$b0#Oh_6?S&hm3wr#>I_$wlE> ztvb=OlE_xK|K;XB?R3sZwqHaeI&XBevi#Ds#GsFGg3)0{-_UDiHcayoH9sBUU@-O5 z-x%Jw=<9hav%gI9GQ+1s+4=+dgijWZ&fZ}++~Kt-4Lb|YA=Z6Nl)%IRnX_S(Bh%ZVPOesoDKqT%QJue<${R=QlX z<lTGHlRzRILin1vkijEiQLvg#zV81;X7?( zHjaAfnFhXK3sEVxWy12SaWU#+0!Def@6WTz1Roxf=t84xwT|fde$kuq&B(l?%5ekG znxAHR-wcW#-FMf*z|g_@lnz5Bbe4k##|6Dbe1k5dj4sh<^cwd)nQi^;efqQNp6Ua* zSZQE8vUYUoP%nBE>5e_m+Cs?F(?MPl-xR{&9nrgOhVG2eaixZhk+6~L^yIF=ZGMTX z?$z^6dh0wVdE@$Nl#DKWWhXBZaAukwajp?&KuzOt5`UrvA5V!ZNyDA!sNhaXl(D`} zGunsDqy(B|J30p44v5sb>te(=2iAw49C~hwzpBppAnQ(wHyf*?;@iLe_3`V2)${W4 z5;h-4eGnZx4tgDXAwjt4zj-eF_CB7T6l)*%_);hOb1{`Wc~BLyw7p4mT}(?8U}%D1 zGkks1uDz}@B{!X1C>RNiFiCO~0Sn=~`dHh1NirWE-=zM^Vo+;CiDfkGoz!G5A{w;N z$jEDB0D~%~lYrG2{q=^{%6Ivw-_+|n`n<8*O*(;e4r(1?1ai(C_Yd2eYX(R0bwvXv z@$qajGwe22?FzC5R`<3``Sp%56I#V%!QESM2?;ip&;w0`*lMfw zQ?%orlHW&th%5X(eZqSVBKwIRjpI0~{g*zoyOQQfPb-TTA}-2G+e8a|W70U!@Og09n1RXZmniqaFb-#AM2t%%f9+OBLu^6(^;VI{Il zNwm4kLt|kGkBXF;PKgSI`Y`Sh-SyyAG8AyRbaXrI9PDyyS7~0mI-18=8&W*%jT7Dx zk}q)t`^2d6-}kcS1uGw+aPw2N3t}Rs-p`BZw9NbGnQ`LV2FY8aB>ogK7Li}2J54ta zUTT{pIJ4n;99d$+==r9*Rm8QejjDI~V4z2rew z-gI8-AM^-0-#;d%MC{CuJ}7Z-*b@ z?H6{EWibQI*){Srw(xJ^2�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 diff --git a/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/index.ts b/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/index.ts index 4156ea3d..c4a3193e 100644 --- a/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/index.ts +++ b/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/index.ts @@ -58,6 +58,22 @@ export default definePluginEntry({ }); api.on("agent_end", (_event, context) => clearRunAccess(context.runId)); } + if (pluginConfig.feishuEnabled === true) { + // Feishu has no identity-verified approval path, so its runs stay in View + // even if the conversation's stored access state was changed elsewhere. + api.on("before_prompt_build", (_event, context) => { + if (context.channel !== "feishu" && context.messageProvider !== "feishu") return; + setRunAccess(context.runId, { + mode: "view", + provider: "feishu", + ...(context.senderId ? { senderId: context.senderId } : {}), + }); + return { + prependContext: "[Runtime Context]\nai_factory_operations_agent_access_mode=view\nThis access mode is authoritative for the current Feishu user.", + }; + }); + api.on("agent_end", (_event, context) => clearRunAccess(context.runId)); + } api.session.state.registerSessionExtension(sessionAccessExtension); api.registerTrustedToolPolicy({ id: "session-access", diff --git a/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/openclaw.plugin.json b/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/openclaw.plugin.json index c6334fe9..0d8f1842 100644 --- a/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/openclaw.plugin.json +++ b/helm/mosaic-stack/files/openclaw-seed/extensions/automation-guard/openclaw.plugin.json @@ -20,6 +20,9 @@ "type": "array", "items": { "type": "string" } }, + "feishuEnabled": { + "type": "boolean" + }, "hitl": { "type": "boolean" }, diff --git a/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json b/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json index 094a90a0..9b264a82 100644 --- a/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json +++ b/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json @@ -97,10 +97,12 @@ } ] }, - {{- if .Values.openclaw.slack.enabled }} + {{- if or .Values.openclaw.slack.enabled .Values.openclaw.feishu.enabled }} "session": { - "dmScope": {{ .Values.openclaw.slack.session.dmScope | quote }} + "dmScope": {{ ternary .Values.openclaw.slack.session.dmScope "per-channel-peer" .Values.openclaw.slack.enabled | quote }} }, + {{- end }} + {{- if .Values.openclaw.slack.enabled }} "diagnostics": { "enabled": true, "stuckSessionWarnMs": {{ .Values.openclaw.slack.diagnostics.stuckSessionWarnMs }}, @@ -141,8 +143,36 @@ "servers": {{ $managedMcpServers | toJson }} }, {{- end }} - {{- if .Values.openclaw.slack.enabled }} + {{- if or .Values.openclaw.slack.enabled .Values.openclaw.feishu.enabled }} "channels": { + {{- if .Values.openclaw.feishu.enabled }} + "feishu": { + "enabled": true, + "domain": {{ .Values.openclaw.feishu.domain | quote }}, + "connectionMode": "websocket", + "appId": "${FEISHU_APP_ID}", + "appSecret": "${FEISHU_APP_SECRET}", + "configWrites": false, + "dmPolicy": "allowlist", + "allowFrom": {{ .Values.openclaw.feishu.allowedUserIds | toJson }}, + "groupPolicy": {{ ternary "allowlist" "disabled" (gt (len .Values.openclaw.feishu.groupChatIds) 0) | quote }}, + "groupAllowFrom": {{ .Values.openclaw.feishu.groupChatIds | toJson }}, + "groupSenderAllowFrom": {{ .Values.openclaw.feishu.allowedUserIds | toJson }}, + "requireMention": true, + "streaming": {{ .Values.openclaw.feishu.streaming }}, + "resolveSenderNames": {{ .Values.openclaw.feishu.resolveSenderNames }}, + "tools": { + "doc": false, + "chat": false, + "wiki": false, + "drive": false, + "perm": false, + "scopes": false, + "bitable": false + } + }{{- if .Values.openclaw.slack.enabled }},{{- end }} + {{- end }} + {{- if .Values.openclaw.slack.enabled }} "slack": { "enabled": true, "mode": "socket", @@ -177,6 +207,7 @@ "unfurlLinks": false, "unfurlMedia": false } + {{- end }} }, {{- end }} "models": { @@ -227,7 +258,8 @@ "observability", "remote-ssh", "slurm", - "llm"{{- if .Values.openclaw.slack.enabled }}, + "llm"{{- if .Values.openclaw.feishu.enabled }}, + "feishu"{{- end }}{{- if .Values.openclaw.slack.enabled }}, "slack"{{- end }}{{- if .Values.modules.webSearch.enabled }}, {{ .Values.modules.webSearch.provider | quote }}{{- end }} ], @@ -258,12 +290,16 @@ {{- end }} }, "slackEnabled": {{ .Values.openclaw.slack.enabled }}, - "slackEditUserIds": {{ .Values.openclaw.slack.editUserIds | toJson }} + "slackEditUserIds": {{ .Values.openclaw.slack.editUserIds | toJson }}, + "feishuEnabled": {{ .Values.openclaw.feishu.enabled }} } }, "llm": { "enabled": true - }{{- if .Values.openclaw.slack.enabled }}, + }{{- if .Values.openclaw.feishu.enabled }}, + "feishu": { + "enabled": true + }{{- end }}{{- if .Values.openclaw.slack.enabled }}, "slack": { "enabled": true }{{- end }}{{- if .Values.modules.webSearch.enabled }}, diff --git a/helm/mosaic-stack/templates/openclaw.yaml b/helm/mosaic-stack/templates/openclaw.yaml index e0bb7746..f11eab91 100644 --- a/helm/mosaic-stack/templates/openclaw.yaml +++ b/helm/mosaic-stack/templates/openclaw.yaml @@ -306,6 +306,35 @@ spec: - name: remote-ssh-credentials mountPath: /credentials {{- end }} + {{- if .Values.openclaw.feishu.enabled }} + - name: init-feishu-plugin + image: {{ include "mosaic-stack.image" .Values.openclaw.image | quote }} + imagePullPolicy: {{ .Values.openclaw.image.pullPolicy }} + command: + - sh + - -c + - | + set -eu + node /app/dist/index.js plugins install {{ printf "@openclaw/feishu@%v" .Values.openclaw.feishu.pluginVersion | quote }} --force + node /app/dist/index.js plugins inspect feishu --json > /tmp/feishu-plugin.json + node -e ' + const install = JSON.parse(require("fs").readFileSync("/tmp/feishu-plugin.json", "utf8")).install; + if (install?.integrity !== process.argv[1]) { + console.error(`@openclaw/feishu integrity ${install?.integrity} does not match ${process.argv[1]}`); + process.exit(1); + } + console.log(`@openclaw/feishu integrity verified: ${install.integrity}`); + ' {{ .Values.openclaw.feishu.pluginIntegrity | quote }} + env: + - name: HOME + value: /home/node + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + volumeMounts: + - name: openclaw-home + mountPath: /home/node/.openclaw + {{- end }} {{- if .Values.openclaw.slack.enabled }} - name: init-slack-plugin image: {{ include "mosaic-stack.image" .Values.openclaw.image | quote }} @@ -578,6 +607,18 @@ spec: name: {{ .Values.openclaw.slack.existingSecret | quote }} key: {{ .Values.openclaw.slack.appTokenKey | quote }} {{- end }} + {{- if .Values.openclaw.feishu.enabled }} + - name: FEISHU_APP_ID + valueFrom: + secretKeyRef: + name: {{ .Values.openclaw.feishu.existingSecret | quote }} + key: {{ .Values.openclaw.feishu.appIdKey | quote }} + - name: FEISHU_APP_SECRET + valueFrom: + secretKeyRef: + name: {{ .Values.openclaw.feishu.existingSecret | quote }} + key: {{ .Values.openclaw.feishu.appSecretKey | quote }} + {{- end }} {{- if and .Values.modules.webSearch.enabled (eq .Values.modules.webSearch.provider "brave") }} - name: WEB_SEARCH_KEY valueFrom: diff --git a/helm/mosaic-stack/templates/validation.yaml b/helm/mosaic-stack/templates/validation.yaml index df312868..c97a7be4 100644 --- a/helm/mosaic-stack/templates/validation.yaml +++ b/helm/mosaic-stack/templates/validation.yaml @@ -24,6 +24,26 @@ {{- fail (printf "Slack edit user %q must also appear in openclaw.slack.allowedUserIds" .) -}} {{- end -}} {{- end -}} +{{- if .Values.openclaw.feishu.enabled -}} +{{- if not (and .Values.modules.execution.enabled .Values.openclaw.enabled) -}} +{{- fail "openclaw.feishu.enabled requires modules.execution.enabled and openclaw.enabled" -}} +{{- end -}} +{{- if not .Values.openclaw.feishu.existingSecret -}} +{{- fail "openclaw.feishu.existingSecret is required when Feishu is enabled" -}} +{{- end -}} +{{- if empty .Values.openclaw.feishu.allowedUserIds -}} +{{- fail "openclaw.feishu.allowedUserIds must contain at least one Feishu open_id or user_id" -}} +{{- end -}} +{{- if has "*" .Values.openclaw.feishu.allowedUserIds -}} +{{- fail "openclaw.feishu.allowedUserIds must list individual users, not \"*\"" -}} +{{- end -}} +{{- if not (has .Values.openclaw.feishu.domain (list "feishu" "lark")) -}} +{{- fail "openclaw.feishu.domain must be one of: feishu, lark" -}} +{{- end -}} +{{- if and .Values.openclaw.slack.enabled (eq .Values.openclaw.slack.session.dmScope "main") -}} +{{- fail "Feishu requires separate DM sessions per sender; set openclaw.slack.session.dmScope to per-channel-peer" -}} +{{- end -}} +{{- end -}} {{- if .Values.modules.webSearch.enabled -}} {{- if not (has .Values.modules.webSearch.provider (list "duckduckgo" "brave")) -}} {{- fail "modules.webSearch.provider must be one of: duckduckgo, brave" -}} diff --git a/helm/mosaic-stack/tests/automation-context.test.mjs b/helm/mosaic-stack/tests/automation-context.test.mjs index 5af38931..066d04c0 100644 --- a/helm/mosaic-stack/tests/automation-context.test.mjs +++ b/helm/mosaic-stack/tests/automation-context.test.mjs @@ -108,6 +108,28 @@ test("fails closed when a Slack Edit run has no identity approval broker", async clearRunAccess("run-no-broker"); }); +test("keeps Feishu runs in View even when the conversation stores Auto", () => { + const feishu = { + runId: "run-feishu", + sessionKey: "agent:default:feishu:direct:ou_1234567890", + getSessionExtension: () => ({ mode: "auto" }), + }; + setRunAccess(feishu.runId, { mode: "view", provider: "feishu", senderId: "ou_1234567890" }); + assert.equal(runAccessMode(feishu), "view"); + assert.equal(contextAllowsMutation(true, feishu), false); + assert.equal(contextSkipsApproval(feishu), false); + clearRunAccess(feishu.runId); + assert.equal(runAccessMode(feishu), "auto"); + + const guard = readFileSync( + new URL("../files/openclaw-seed/extensions/automation-guard/index.ts", import.meta.url), + "utf8", + ); + assert.match(guard, /pluginConfig\.feishuEnabled === true/); + assert.match(guard, /context\.channel !== "feishu" && context\.messageProvider !== "feishu"/); + assert.match(guard, /mode: "view",\s*provider: "feishu"/); +}); + test("projects and registers access state in every approval-owning plugin", () => { assert.deepEqual(sessionAccessExtension.project({ state: { mode: "auto" } }), { mode: "auto" }); for (const plugin of ["automation-guard", "kubernetes", "bcm", "remote-ssh"]) { diff --git a/helm/mosaic-stack/tests/chart-render.test.mjs b/helm/mosaic-stack/tests/chart-render.test.mjs index 26363ba4..4b089de4 100644 --- a/helm/mosaic-stack/tests/chart-render.test.mjs +++ b/helm/mosaic-stack/tests/chart-render.test.mjs @@ -600,6 +600,125 @@ test("rejects incomplete native Slack configuration", () => { } }); +const feishuArgs = [ + "--set", + "openclaw.feishu.enabled=true", + "--set", + "openclaw.feishu.existingSecret=mosaic-feishu", + "--set", + "openclaw.feishu.allowedUserIds[0]=ou_1234567890", +]; + +test("does not render Feishu runtime behavior when disabled", () => { + const output = render(); + assert.doesNotMatch(output, /init-feishu-plugin|FEISHU_APP_(?:ID|SECRET)|@openclaw\/feishu/); + assert.match(output, /"feishuEnabled": false/); + const config = openclawConfig(); + assert.equal(config.channels, undefined); + assert.equal(config.plugins.allow.includes("feishu"), false); +}); + +test("renders native Feishu WebSocket messaging for approved users", () => { + const output = render(...feishuArgs); + assert.match(output, /name: init-feishu-plugin/); + // An npm spec install keeps OpenClaw's trusted official plugin status; a path install would not. + assert.match(output, /node \/app\/dist\/index\.js plugins install "@openclaw\/feishu@2026\.6\.10" --force/); + assert.match(output, /plugins inspect feishu --json > \/tmp\/feishu-plugin\.json/); + assert.match(output, /' "sha512-9kTlp3[A-Za-z0-9+/]+={0,2}"/); + assert.match(output, /name: FEISHU_APP_ID\s+valueFrom:\s+secretKeyRef:\s+name: "mosaic-feishu"\s+key: "FEISHU_APP_ID"/); + assert.match(output, /name: FEISHU_APP_SECRET\s+valueFrom:\s+secretKeyRef:\s+name: "mosaic-feishu"\s+key: "FEISHU_APP_SECRET"/); + assert.doesNotMatch(output, /init-slack-plugin|SLACK_(?:BOT|APP)_TOKEN/); + const config = openclawConfig(...feishuArgs); + assert.deepEqual(config.session, { dmScope: "per-channel-peer" }); + assert.deepEqual(Object.keys(config.channels), ["feishu"]); + assert.deepEqual(config.channels.feishu, { + enabled: true, + domain: "feishu", + connectionMode: "websocket", + appId: "${FEISHU_APP_ID}", + appSecret: "${FEISHU_APP_SECRET}", + configWrites: false, + dmPolicy: "allowlist", + allowFrom: ["ou_1234567890"], + groupPolicy: "disabled", + groupAllowFrom: [], + groupSenderAllowFrom: ["ou_1234567890"], + requireMention: true, + streaming: true, + resolveSenderNames: true, + tools: { doc: false, chat: false, wiki: false, drive: false, perm: false, scopes: false, bitable: false }, + }); + // OpenClaw 2026.6.10 accepts per-channel queue modes only for built-in channels. + assert.equal(config.messages, undefined); + assert.ok(config.plugins.allow.includes("feishu")); + assert.deepEqual(config.plugins.entries.feishu, { enabled: true }); + assert.equal(config.plugins.entries["automation-guard"].config.feishuEnabled, true); + const guardSchema = JSON.parse( + readFileSync(new URL("../files/openclaw-seed/extensions/automation-guard/openclaw.plugin.json", import.meta.url)), + ).configSchema; + assert.equal(guardSchema.additionalProperties, false); + for (const key of Object.keys(config.plugins.entries["automation-guard"].config)) { + assert.ok(Object.hasOwn(guardSchema.properties, key), `automation-guard schema is missing ${key}`); + } +}); + +test("restricts Feishu group mentions to approved chats and users alongside Slack", () => { + const config = openclawConfig( + ...feishuArgs, + "--set", + "openclaw.feishu.groupChatIds[0]=oc_1234567890", + "--set", + "openclaw.feishu.domain=lark", + "--set", + "openclaw.slack.enabled=true", + "--set", + "openclaw.slack.existingSecret=mosaic-slack", + "--set", + "openclaw.slack.allowedUserIds[0]=U12345678", + ); + assert.deepEqual(Object.keys(config.channels), ["feishu", "slack"]); + assert.equal(config.channels.feishu.domain, "lark"); + assert.equal(config.channels.feishu.groupPolicy, "allowlist"); + assert.deepEqual(config.channels.feishu.groupAllowFrom, ["oc_1234567890"]); + assert.deepEqual(config.channels.feishu.groupSenderAllowFrom, ["ou_1234567890"]); + assert.equal(config.channels.feishu.requireMention, true); + assert.deepEqual(config.session, { dmScope: "per-channel-peer" }); + assert.deepEqual(config.messages, { queue: { byChannel: { slack: "followup" } } }); +}); + +test("can disable Feishu sender name lookup", () => { + const config = openclawConfig(...feishuArgs, "--set", "openclaw.feishu.resolveSenderNames=false"); + assert.equal(config.channels.feishu.resolveSenderNames, false); +}); + +test("rejects incomplete or shared Feishu configuration", () => { + for (const args of [ + ["--set", "openclaw.feishu.enabled=true"], + ["--set", "openclaw.feishu.enabled=true", "--set", "openclaw.feishu.existingSecret=mosaic-feishu"], + [...feishuArgs, "--set", "openclaw.feishu.allowedUserIds[1]=*"], + [...feishuArgs, "--set", "openclaw.feishu.domain=larksuite"], + [...feishuArgs, "--set", "modules.execution.enabled=false"], + [ + ...feishuArgs, + "--set", + "openclaw.slack.enabled=true", + "--set", + "openclaw.slack.existingSecret=mosaic-slack", + "--set", + "openclaw.slack.allowedUserIds[0]=U12345678", + "--set", + "openclaw.slack.session.dmScope=main", + ], + ]) { + const result = spawnSync( + "helm", + ["template", "mosaic", chart, "--namespace", "mosaic-test", ...args], + { encoding: "utf8" }, + ); + assert.notEqual(result.status, 0, args.join(" ")); + } +}); + const disableWebSearch = ["--set", "modules.webSearch.enabled=false"]; const braveArgs = [ "--set", diff --git a/helm/mosaic-stack/values.yaml b/helm/mosaic-stack/values.yaml index 7c905e07..35907771 100644 --- a/helm/mosaic-stack/values.yaml +++ b/helm/mosaic-stack/values.yaml @@ -287,6 +287,27 @@ openclaw: mode: partial nativeTransport: true pluginVersion: 2026.6.6 + feishu: + enabled: false + pluginVersion: 2026.6.10 + # npm integrity of the @openclaw/feishu tarball for pluginVersion. The plugin is + # installed by npm spec, which OpenClaw trusts as the official package, and the + # pod does not start unless npm's recorded integrity matches this value. + pluginIntegrity: sha512-9kTlp3KynPbiQ4OBst4TW+zFE4rTOlRxwfslTWJ4/jhueHAHoVtPEwEheIEijdT9tO9fESOHMUxPMsAaOgiagw== + # API domain: feishu (Feishu) or lark (Lark international). + domain: feishu + existingSecret: "" + appIdKey: FEISHU_APP_ID + appSecretKey: FEISHU_APP_SECRET + # Feishu open_id (ou_...) or user_id values permitted to message the bot. + allowedUserIds: [] + # Group chat IDs (oc_...) where allowed users can @mention the bot. + # Group messages are disabled while this list is empty. + groupChatIds: [] + streaming: true + # Show sender display names to the agent. Requires the contact:contact.base:readonly + # scope, with senders inside the app's contact data range. + resolveSenderNames: true image: repository: ghcr.io/openclaw/openclaw tag: 2026.6.10 From c769c8b7587308b065f2d54c14f0423cb06f7ac2 Mon Sep 17 00:00:00 2001 From: Kang Zhang Date: Fri, 30 Oct 2026 11:50:03 +0800 Subject: [PATCH 2/2] Allow scheduled reports to be delivered to Feishu Make the OpenClaw scheduler an explicit opt-in through openclaw.cron.enabled, matching the Teams follow-up, so isolated jobs can announce their results to a Feishu user or group. Document job creation and the admin scope the gateway CLI must be granted after each pod start. Verified against a live tenant: a manual run of a daily read-only check was delivered to a Feishu direct message. Signed-off-by: Kang Zhang Co-Authored-By: Claude Opus 5.5 --- docs/installation.md | 19 ++++++++++++++++++ .../files/agent-documentation.tar.gz | Bin 35815 -> 36344 bytes .../files/openclaw-seed/nemoclaw.json | 2 +- helm/mosaic-stack/tests/chart-render.test.mjs | 6 ++++++ helm/mosaic-stack/values.yaml | 2 ++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/installation.md b/docs/installation.md index a51ebce5..59e0af29 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -454,6 +454,25 @@ kubectl -n mosaic logs deploy/openclaw -c gateway | grep '\[feishu\]' | `permission error resolving sender name` or `ignoring stale permission scope error` | The app lacks `contact:contact.base:readonly`. | | `failed to resolve sender name` | The name lookup failed for another reason, most often because the sender is outside the app's contact data range. | +To deliver scheduled reports to Feishu, enable the OpenClaw scheduler, which is disabled by default: + +```yaml +openclaw: + cron: + enabled: true +``` + +Then create an isolated job that announces its result to a user (`user:ou_...`) or a group chat (`chat:oc_...`): + +```bash +kubectl -n mosaic exec deploy/openclaw -c gateway -- node /app/dist/index.js cron create "0 9 * * *" \ + --tz Asia/Shanghai --name "Daily cluster check" --session isolated \ + --message "Run a read-only cluster check. Summarize node status, GPU capacity, allocatable and requested counts, failing pods, and recent warning events." \ + --announce --channel feishu --to "user:ou_xxxxxxxxxxxxxxxx" +``` + +Creating, editing, and manually running jobs requires the `operator.admin` scope. After each pod start, the gateway CLI is paired with read access only, so its first job command opens a scope upgrade request. Approve that request from the OpenClaw Control UI, which listens on the `openclaw` Service's gateway port and accepts the token from the `openclaw-secrets` Secret. Alternatively, manage jobs directly in the Control UI. Jobs persist on the OpenClaw volume across pod restarts, and scheduled runs stay in View. + ### Access Modes Enable guarded write operations with the Edit module: diff --git a/helm/mosaic-stack/files/agent-documentation.tar.gz b/helm/mosaic-stack/files/agent-documentation.tar.gz index 24709212e5fe5150f8036207f46431e4d1ac0d7b..f4860bc795198b24de360753b634783939a82ede 100644 GIT binary patch literal 36344 zcmV(=K-s?^iwFP!00002|Lnc%RvTHCE?U3!6w#!+0dIu__>!48$=w)8n@(;AVQ1B# zJcvLFAkvaTrI4_xOz+XZ_5+-8{_HW%dAWX)GrxIRYlRemot5Rv?oQXJ1f+;{oolXn z{pRt`=Jx(hYtZ|{-|ycF{d@ZOG5@50Ge1`!KUsZhpXujcu04A6hiK&wpW)xMoTOvw z@(=$#|9uf{?nd9G-AOUNi4I5EIGyChu#7e@v*D!C*v>}%;wCCbSvODn`Cqdho=@>* z8BK~PA6{qWB)?22S=8;*T4v)YFUx6GM(MB@m6LIn4*K~pi!O`nY&?|rFSNhH_19`N zzW5?Kq(`pv>|LYrZFKri2Ztv+Z|Jv^tGuK}slh0FPjBP{>OJj8hW!8$0_$U2+ zk&UxqH;Ya?ua1rmk57oK-z>G-{;%a|G|r2$jGQ*U-{P(wXlpL}>Jqnl*IGC%KUvO;+`m|=7=P6ye$V*EBbpXU8Z^e&%VMF-iS*y^Y6 zT2UuhVqITa)hk+0EM&JB({!=Q*>&FINv7R#QI>Ai%NzPJD4P+zi$1X*Svro!MKOuG z>68|zoDK%*IM3)Iv^mbY#emkb7Y%9Tv{%`P_Vj98OfRq8cG08LUOq`NDGdIiU%bOp z=_H!a)>8j8@wAtYCRkJ&Z$6HScf)X(v*C3~m*28WrOSP1CoR4`~{`Y`xKl zqvI^?#l^6H6Ma8D#~3C=On9_kq&-;-BeWstQZ_J-j>g3xqXA5X^j_!aJx}+u$vE$p z(O;$+rq18J7^fHMFpYX?d39c-V``G<)Eesar{h8NV{y)F7t7kw>#!vqs~ePVb`RGHcYzsYSahk`ny|kn;#u*FEw&`t}-k|m4=yJKypaBd! zS6RPLXQ%-AmP(#|oyy##Tfwe3qvE_Ij*y<`{d{uMl${aceU1~qrEl-^`qE}}yBQq` z?AM^c{>03AmU$+=u70*juZV_p-sos$`L$<>K_B4+qfSQO&}-vtkmf^bemca# zVCtv8F}zXH)AKgY{xZ$S89p7z)*s6!e6nzK4m<5|hu5Pt>?}BkSoaZ82A^tB881XZ zY?W9w9jpN@XGv?;r-o=eG?bTFe-K@##Qd0Sk7=O9hu15+mAs`tx|4n)Tg0zC!qag)$WaH zrN`^GJi2=CuCigko#$VFW-kn61)O(6{45xv`H=*|coS8CW82^+aiPwpDr z=GVCD4qj~0TbDV>8#m9QWO&^jxAGzZXQt^9=Ne)L)HDt!@h4jF(UiE7G~9|#3htCd z8SCpjqkYIsN}x$Lqf^jrpGcj%E{1$_V14Mxf#;_9t888Nv-YHTy}33lzWeK6pS(I= zyBt4R#^&Rw_oGwCL2qI&BnTJ%SI>ptEaB-%vHo$7FSnvU6;rvB`(+_Z+nq!=#dK@} z3{4PhhOckhwO3`P@vx>|` zM1vM;8F^(4U{J+$60jPhzwW?V`92@^>Uw=kpVxM~MJJHXL8T*%K+c)t{$X2l&EP1$ zDrvwZK3+^_hTX)fy@PCl)xGOdezj}Ngw`}kl5>(u8p=we7`H;1(hUZoDYiDt>uy^< zkEeO`h_t44{0Fbgts5nvM?XlYLD%W9teg`PMd=CJZyY81Rz&J4ZC5rSd3ch_ zuoBs&B-+~Jp|LQ8M@7m^r$mK9eHizU?t1Vl849>uI=q{9j`z5=cWGX^I_k$*8B#px zjuPGxk}q)td&H>m-}kcS1uGw+aPxDt2Vx?o-ph;Ve4O_#GvmZ}4U)G;N&FdPEF!;B zcbaYbPcW;k%#Y-Yc z8fU>w-gI8-AM>Bw6Tllwd1Xa4&+*C&Y5*-(5Z;+0}Y9U4_UxX0V9=j<=1FY?LD>A4!yymWa5^@cmZXF(+9Pd7Vb+UV)L$7|Y3^nMxqEA;Z z6W=KgJXAGm9|i-wu)TA3_}v-3xczGD#NO%TmtrFuvuz|84XNxTQ^?(Qx}9BTeQZXw zm5nD*-XY;r`-kJ4r1>{X+gpd$B&#S);iQ`8y;NoMP{Dv|2N~d8^jK4L-9oU0t7;Y7 zyiyp~{)I%*T-6d@A^#n1?Tf?LJI4o`2U|P5K$SnSxxu^i^#11V!3q6;=eWaquB#*-Djke zw}o8y=$0Fn8RR)y2%9+l+LteSAxGF8rKFbFJJDKe<;~LG?$*vhX9vq*dM(@Y@^LR7 z(L&!u=_KGUY^K%sC&Yv3lQAzi%(l!JP7e-GsLeM^@^hJAIn{3BN7ig>@_yoauYOEp z`OoM72^8snkpFM(34J^3|NHXk@BY8f5?Y4QVfvQQjGfO^=(~_hfGqLjayjhwR=H=#Cr3-1Cv8ffdV%pNRKCr^%yfJd*JTPJ#*co0c-axNW(yGsOENTUU}G zyk^WSJ*ddOVhujI2MaWqdO?CqPQC^_A;?e^htVO6eVwyG_cTY zYNk|idgm%>iZM6s^~RtJdY*)6nm#;G;@^F-MQ=3jvydd|MUlqp&`#Ji>-;}z;x_Yk zE7~M#fN_Y`PiGN-cSUj=QT^pm?lX1kq!TmvKI2iPuEBFP%e|v@BT+uTpyd{u4-L9u zR$}VU+fZ~2?=vztIPD8`qw zZbv>3>~o|>%H^i{hMByNbnM5v7=gkpj)aSRJW%iSRpw0Hu!pnQh7Zk8)RUgi&(9@aqqhUJ8yq~4SU-Pc7y}f-C zK*lXGY}FqEIM?wL27Mho2P6;!a+`?-=V@cAv<}0pYYurno(&n2Is|uULPmX);^8G*4eod6HpA;XySZlre0|K=+_Y$ z&36jll=8lp>A3d}@|hft=lfexzbM{LN2Pd@Y(>yXspA6`5Oc+|b{c6B8x_av=J1BZ zN+K{!eaxE#={+q=(!zTY`@qVge+`$fY#yzRYZ~*vq|^JXAs>0)vbaT~N%|JYHS1;) z2@q`so@HW-H@rT2tk0qD4|~Fk*Z5g13#fqa6t$BF4gtQy|z`L%;7ZnmVW*7a4}kV z5Dap`{?wr?$Q{5tp=VSGErBt;NA#IQu=79`Ax(;1i1h7tb@QIxh}1sJXC5zD)S_rY#kFLfrSn zRjy3L%SRmYf@9n8Pe53oG!gn$q&>ET(!#Ov3XG4huXlL~hQPi|>1DArUmX0njf2e- zxi8qGrfzAN_{S34@qLz!f?gyhLlxZgz{9 zx1D#LZk`5--4e1=kyx<}J@HDAtT3Q?q~lveD7p}38aymmD`-Ss?N&MOg3Wnlbn2!} zYo=Qi*j@d_UD|Uky29J?Wb0}&=r1?K9aTDuTu-hAzo1WAYpt(ZGao$0q!1xA7Cx+Z zGzOe(A8viWbF4>|?yl#=JLz^30qi~9-5d+yn!|PD9Qbr`O>|WUt;TM>RL%>k!cRr8 zR$}CkHa^7kE;rxg`5dd zNlV(3-Ye8t(#|Gbzv#j8qp1W3V$@H&Mm}o$Z>WooFA4E+hD%5qj90VvL zc0SA-vhW*!BJH5E2OGrFS60^^J$~}^%dfsp&sAdX5hpXM`77L*#EE7{j?c?Py1;eB zQhY@J^3nBU-;O&3-pe@KlJi~HHa9aueALSj7bRb!(MoS6Vv%I?lyWeHi=0i>aEr$v zEwN(Kjx=URBj41GAgV zAs2=OJV6?qQ*F<0j8QO~#|&>8HEYS7FC4s#XB|W3rK`+k(jDQ)+M0$N45RJrJWq!) zNwPVlCl`w<@`^1Mf7;WZ0S&7V-|DsH{uiRgsnKtY$#ZC5gYMvhHD+ptCQ6z%N4jE` zj^FcyJRzTINWh!M&iky}q4ziZZ|!M0ZkOlz&<`nkaCmgGdw9^nF(1h^f2iSNe2pl@ zuYKL*aTd_O^)ntuMRM;oFcpi0lE4Bue=Z(G8&F6c&otHb? zQT(HxCF;g^Nxi}OThq~QrK8nf)K&ci4qu%dy*i2FVpi1ryUs>?UHz5%ZMaS1Gq81) z(YxwH3$8FFKoVYumv#wRTbOFS5F`=aK9ik<`L*AbRPhL95D70{Zqxzl%9Ggh@d+>ZR20Fcy(B_}m0f;aN3b zxF(&N#rhfRF&kaPbza(ER&6S z@bt=f5XCuu%2+lIGDIJMYT}rqEH}E-abMys+xT_;tJdn1)(U;iPvIlbh*%PA1kn@v zY>>X^zoS+9tL%W#JZW+d@1jM>i5vg?6Mmc_w&X)J>6i3DS@zFl=gw$o)BfZGbTPbT zlBJ28St}jop<(EHwawNQT7u8D)*>JbC4fnSaXF2G?p&Bs9=rBeZw z24RYz*I>oHnD(QSy^hc?j4JFKg!ULpYv)95!^_f4IJ6yOm_qdAXzQ)$l{e9N;;tUe z{K5-UPOmQAp;Hy{ai}5&b_*wtI#ZQNr5szwVbWEZgYGHx6PMjk0)^4@15=K z?Vmm0?ChMqI^Nq@{0LH9tZicdaC?W|mnYjp;u}O;!}w9_NnB1x**L!L$3$4?ak{#8 z?wZ)zd)1*v&h|GCHeb-smphx=XD<&sCmXXyiCbQvRXzKD=TB!xn-Ngjb+v!k+1%Ya+j_Zqe6q1vbaR@e21~bBzJC1G)5nj#eERjHm9@1mSK6UX z+KvmIw(i@-Mgyj|C?1!iXb~1(HIlAJi?9Ws(VrO5vncCc72&fx7X1O^XYf*G6{~MI zCWy+8$8?+BHSdK+30r=C-(z4`&mqt66RmFC5FsSWx{5zO1)pd&*INhDmiw+s5l-(!5|-9e0a=a>ir zK7?>^(A_ueRBYTwDxW?^zA#P#uMPT#eND6iwf!cuLrms#g80gq$p_NQ;7(@ejDAnN zGw#j|Psy$f-M!`uMPILWn`*fVM(FeIERj&1rj6Tz`7KQ^Iusj=OW^a#aFzqr%S*Pm zwLG^*mwqA|`E& z`XIzA+({dE-ad2fgSm9dD`LR1mIp+H8@DjVa9$jO>&AXTgjF~DN>=8*PhU#@+r7_` zl$arV@!kiKVmhRGTd6h#n`g%CquOIw=P31hWbuznTKHx;AJu#D^Fh zvs(E@E(7AkPg~Jzi%zX&kee*#l6F1ozpm=EcLfkweze53vA(qLaxau6SYsEF;BwC^ zYN!ibXw{P%{7Fn%X^$8Su3;WnV_tfplmBIl<39K}z1n3dW|EPZ)L<8*#9D<}eP%NI zs9>vKoGiGu8YT;VXFedy$XgV&g>s^yWp6Q74L6z407={l0!xHF>A*vK8mM_sI&)6z zb^OVy{lD^MMDMrM>AwEf5UJGv9MiqXv&w%HTXy4EB2XSCE^j@DMzo?0~Q*5UEd;qfMXq|v`bo8Nu6 zySKYZ7jG-tgnI?=a5NoIS9&etY2P+{PnyUP?=m;P$bsG=IUeyEyCA-$+cUZye&SZV z3yx@%5z;Nz8C~VW_Z<0=sht8jC1TjvPseY204h=xj9xwlH@|5`J3V#27o2ZKda^z; z7C0u7&NcQGgDbO9%4kb3PxkjXNSKBsx4%zLV<#41t;`~GI=%L>G&q8-6p}hRKSF zH;IbBgZMl`=n-Nd+SOL&g5@wgb57TV0}{uqW{N7FuEwroW&oD9S? zX1GOF`oGS{lWE$ofc$_Ma#EGYl4ABESHjeswj((IIY?2AsK)NDVkR4Blb>lrzFS z%c)&q+O(S?LDI(AJ|vQe7?1FI5|TD`9`cev7o*K&30G8ovHC<0A9jSJmeGIw@Bdr- z!Ec^L2O0ACqEk%ANcGi`ZL;~geE3k8E;keu;BU}TNsO1PlTb4#^Wx4lRbmsbh^G5G zAP&%ySW{Lo!!fb*IO}l$d@8UX?AFBDV74_+0Yo8%XWj_>92!1is7QgRfKw1~^D1Eo z0SnaJWra7oqjA8Ps12K3{xES!O9=J z3`j83RgP_Df+HA`lQ)5Io;p@Z^U8z*<@#We3G|cU1~I1%J2a}v4JpSj3uE%B6AhR8 zaT0_u0LsPPGLn{iEdVc(M1(j`kg`gU;WdXYHy9TVR%ZipB$6IOa+)&U9kZ3}cWw5Q z^}m@6!OyDyt*))EtUj65|GxZP|N9N#{|Zyzc6{Srm|QQyFwep3n*JcE!gjOBt)RK8 z>Tzu%D5R;Ln-lgInwyXd2w+ut#)HJ-PNbkzDIkv|AHvO(G4V zF)A@+zchsGv&D3LQl#2{-QX<=QjXp5F>nb4j-lwq`k2PF$ird|*{IG@zq6@s)J;{N zxjQ7~Q)V~sad(+AfH!0XNwYCo`9l(gQ^dpQQDwsa@$df!uuvB%iJK%`^P5{fjZ?H3 zpB`;bR+SYeax>oqN&{fJK^V^>j5aZto!02O+bV-zz#Lf>Q6$D!d5hmYs(;SG84J4> zuz5{Z<3S4pMiQ|gdu|SKl{%nLWMX;Uk7H&LUi?nIMEJnn+&;!uCdr4DLFG5{|&a4RW zrz>w-%x~)%_u}tyet%n>-{%c=3&RI*d*1ZGGJC8$Bo)@1uWaW?#%q?%s^bC^t=GLK{DG(!WWbwWAn(^%b*AeqAu7K z8@AYrUdqkpzjoLF0;%pxP7rGuBf~8UmVwx0D}sh8w}q&CNj+b8^*o4~L-DYin$rY#Wqv%;iH^ABquW z7XwEDx<~x>T{^xjqs5;Vg#6Ed*@9${g>^m$9}FNWgnS2EU0gqvdtCSgx{F(&M&o9&DTN+7I8X+ z+hV3*hsnj23I(BXa|T$S?cL*z2TOyuI7w05TNd$%{fPI9LNW25bR7QP%f~aXStkqC zt~u+i{>h5TVZq-s79GLIpOY*P^zw-4@&INnQN`;$;=|t^J;u?%jsyo99b)WJqbS_;q zD@C1}k(9&Hh>)ByrpHpOho}TFg+ehhl&}Pj@{lj;*W%OEociSq!dq8)26Sw$S?8%L zFP|b-hpAdsdHSO6$+l5?8~1^V39FZ*X$xZh!mlfd|1P@zrx#rxtqeTd5JI+laFlCB zkkfipcjt&*RP2wdXN&Bjf#!7cu{4 zGGtJ{D)N%DuIFpSfY^Ek0632}Bs0L`sQKW7jnLcCU4BqIbXvV?ml(=(FHbqcbJos*}=N zlrW4~TCHTe6A$|VmNH=;j6MPR(r=J#PZP0nA`7}E)&I>&BXB?jY3`0+#>~3u`@d$I zT_e_jxo}3F%1zK5-6eW^T^f4MbitQKt-{+6`*GCWzcx0qFaIo#mRr^RKQ$#n> zNs~Rmw@rp19>b-|n0X28E1b|R|eXNI)?ds@9|WldJm2V;IY#;$LWpMA(1iisgX5Y zed>>maaz_b&NBp)3IxnE=L;(OJr9%S@Sw(-3nCj>@S*`K&$EcoRPFptjzNI$_%-2; z-C_X_Tp)4#P$}!^!xq`qTY<&tAV%e4+Q(X77yapg5hU|LWC|!2kSEu4%%>bku`Rh< z%pKu+DX(aTZ!7Z<8S@_@Qpq+x{#~T{U8K54r20Z?(kSQ*aO$+ukuYH`R1|7#uIf=~ z-unT7FP*I_m7^K}8wMpz%_73K5ViBsH8TKe?*O-xpbJ&aV^&b3iShZ4=m-)^mhovA zq4W0ni2!1xf28k}bRF*?fZ8?UZw8!Py;2*ZF(QK%oJ^Ktcbk~#z6{SQltOlJ)l>Oi zw#sqbItL^)+?8w}OTm&}e!;5|mK`l-s??r@E~wq@hAeFEvpSqRbaoq1Vo>}v2_4`9 zaJe_J%1^$B#9}Z^M(`eR^U1*=)ffWww{NHz+y`u4K~h^&ON|=@9?Yh`BYXsBp{87h z!LJd>krp|uZOij^P zo5z0==ZrJHGdQKRid4{b{UA~&+xOYcadzQ9jkLKtb~bpHoqXbVi@xBXAgq$4V$;$X zhH(|hmHTZ`E4Q5_8I2o(4Ne_d>j9LQt!W{gaa1LH0bF- z(8Sgw2nd=^n|cq3vhAQAxZ~AqV|Ec-E({;c+bMa(yPt(ASthhuM1rI7#;i@=)$?RL zYj@#rrDazVA>;=VB@%cfTpbaI$!Ov&N7J+V)KHIwp1wf$MS+m{`;LRXOGy~u&9-e@ zEE`qiIb`KY;5xf7bU;oR4wOha9USB(wB^}i8I(K_My*mTbLx;&I*C1mr<5`e19ya^ zq=-${-EZN|$AzrvymN|&Wy5F)JvEDsQEX^#uv87HIlohMe-J0g8Y; zfez+_d>m~B)6rgW+hIwd>{mwR6hkiBHa*uQrHC%qlCuXal}DDd;g<8z;ICaJC8&jezWui{SnI_%ONbHnt?b}HprN% z#0vT3rPGSXF7VY={C#Rhs(Adkq%^%V#ZRr)Q&(o%S?RKzx2_uF)#S@a7lu>y<}e!m zmKxK~Z%hwu2Hee1VmN!Nih+;>z-BJWxD@k+4$@WPP=Sf}kQIUyRwJwq-A}D(FN2^I z2G32d9F&5ZJ*r=71AMAipkgN^ z*!AD#(qpu36H)Z;skBb=L+K(nID?Yo={z`}jt;hyDh*YmmUxJ)5O7U}fGL$$OP$MD zR4_|iF$aq^Y(+olG`I*y8AVe|3pmqo5F??-jb#+0YQHhfU{|y- zS7irUcbAb@JNe}>h=$L6Ssga@yVK0NHnXvisc*9VNs5`N4P5jswRVT*th-}OM1Ry2 zcyG0HP6>!Kvu*;8mI%!`48LV%lfu492pS+pb;>&O>m0+#(|w%lZt3FWS(Hku2BMLB zlhl&Lg;Zdr=uW1&xUeI4k7!vSVhcZWnG0N%Khv_QK5EaSjC&l%k^Yzd3P$;}+ccc_ z*pEW|;K2vM2wTMMTNeDmo4x+^%Gb2fXuK2D(wkiX-`ll*Gmvju15!}%!SJ%C@vk1Q zeI$I6WdbYQJz%%zOdg{QY0&$^ ze;4a_Brd;}C>cd7K|(=^=)Hgf$}75MR#zepFV&(iz7$SM_vPvn=o{0CQ%W}b*?6MG zfbI@?45NzJ8X3IlZVR6$N#jFw83_z`Gwn2J=H4U!C}GpKe-Yt?aN{Apb%9;s* zu`^L_iZxx##O;QX+6!?TRk+t(oz1W`ef=J;_TqT+J6fZUxM|Fbbr;RG^`XVt=C?Ob zHamx}j<}^ui&`xQoBQ+-$6i(vO>F)qej>@l-aFdtbbdHI z-u{INCOXRi(yy9e;*#PP9?Xt(q3-!0L2h=0e|tL0-{%^d^=W?01*GrD@eBxW;Uiz% zCe>4*Fka>1T2+bb(_1^a8D;g&fdE6tb!|hN^Ge~y?Syi7TEy)3D_im_mv~c`5;!W7 zdXqGtc33n?U2ic^?nI-FxO^6hX^4o6Ut_ga*ik_yq8;JHx%H|+&pyxH-(9Cef##SM zn|p4FXF$$oH3W9YR6lEnnD92Jwr{b$+-z`mWjz(JpbaidzcYk>avOh{={L5YzAMs! z#itPHR{mQBMoj`mLmBvqI?S1aD*}-Ktf~vo3?SxNzl~RahVwk<+z$@)eIoaFSzcaE zqjt2Hj^7e_$e+-N@PQhfIrOabbH~@5f#cl0S<6Uy}a%v?=A3t{%x}5|dB(%FF}c1K7yrR`lH0m$UU1uUk_XLOwAk zxwlS}p!2V`7;W3xG)#-uA<8blmQ;QX-AEiD!*DeCu|$#4#Jv0?4gM&Ax7L^XK$(`3 z;2PFgB6>|LEWr_{m`b;Fy=$)~&YXtEIju-GFxa}9fr-b6ZT@v+6aX?*ww=Vl(Q>4V z9BtzS1A>`>975UZ_d$Mcnk51$v4hYur%j&##%thK=1hZ^he zPGZ@mE@&b0!Mgf`U@>4XxBlS@V1C}qD}$p66kHPG0Zzi~h-p5(`^=tz>N zXuS=rL<*-(0;14}Gd{X@4>*KD_EPzfs?_ZIw?TL7q=xld8RMvub zWMDH-cXqapcTRqxx+Z6&PVuUYhg5*d-wXG=A!Dk(C7=BgrA_4jxu#}o6YEweaoDC; z<1Lu@xn+)f4slO3h%StuaClm`M3KqrNyL&0hY}$ppH%do_3D!I6JM|v0-3@|5^CTp zC1k2s0OfBz3f|$UoUBJLj(2-5S}Kkfis{+=nSTq~i$P&Ud^a%%DkCX8ug$5W7X{+~ z70fHw5K6kBWF-9N7QHyrX}6|RvloQ}O*rDGG$C^KhJgS!#aT#5l-e8y--EqK5NOxs zVvj~_ySo4iSusRHp9BhN1WJhL3Pb6Y#tiZ#`LeRP0r8O`jE(dAVqHo^KZ?gxZ%W5E zjK%efyMqN_3AU0RMmfM>w)cOgg(W7lc&-@E(_sL9E1fPnMc40ut)}c}f(@Nn%&shE zlMT5;_n{l75Y@ zN=H~Eeg$2Z6)a{(6N_dh4fI#UB@l1rcrzs?-qx$M4D)MbTVtD+mQ0bsFh;XK3KAJy za%ixXR!Ikl{letzfDE$1IVWmpr_~^!v`@Rq*B#d2b)LQRusw9L4gY{~)77Etp=_VI z>}Q17yxL`Ez>m_;&FQ3QMI9vQ@bOgOPltl*AYWx%k`g{HCRX#*-y2Qy8iz5Of{GI* z^Q1cl2H$kzYxp`lhoj^~tE);XQ9ty$d)J4(uR4Re^IeGBJ-W^1sUX-1^Xu8jW=Qxh}|MW~k*9|dOcE8bYDn~K1lXCIbHvAZz1MNwp^sHHt}7{yDFX}wOps9y6;|7Zefv!n=@qWCm}9|qONc{s?xxTV z^jqf7n|J~t_ts{>wS$H#w?s`d5sk|F=T32ZRh#_OQTFnl61NCT(B!GX+3VB=l6twS z8P*%2Px0KLun!2FkaU1;2B<*LRDk<7AH(*nQ(uE78yw66U15ve? zp~hKxuJ$jD21>E%$!tDXXR1WsBW{_qbV#gqB-)N zT%tWjxF3rrS-49xG$%Xzr@b)7wVc!SpO>x*=pp`R>e}S5(Po*a?GCQ(s}xn~c>fo+Y3FZTJQ62G zF9ap(+-gWOb}SZ-N#;m>QQT?+B<{G9ggjhemQU%jVK@-tWL@H8O+LxMnL6)V=^8^9 zVaO1A9%RWLpQ2ZqWZ&hSXel%zW|XpJv$UN;Wm>hbtAb1`P(%y1QMaf(TUzj@X|Vdz zr$FxaU34)hBM8}_s7ag)Gql)Qo5&${ApM*YSMQ0@e#qqHAiN^H1>veGvXA40#;$2=y7J>jlTZJ@>K zkUu+JsRpaPsxc>Z$GevUgswhqL-i=9tpzY2tX5@8l~!Z*Dogu}XeCBz7Mo1#Gd8BW zjZcCIubHOd$bm4_NN92fE9pc!2jb-uZBI-xR))~AO7GCg$KHSAUxB>o6!d5|^R~ou zEs&8HXqf7xx73|@v<}O`U^)q@RQfreP9`qP<$R3%zxht;3_vzruy-{dusvS-2qW-)1m#Rs z4gb6rV~M3Ayvwj>ExQ`2ZydvC+|UW7a{x(U_HB00rij9mL^+?u?s&NqY}vq>izRf- zcOVZnU>gElz4uWG-ptB=s~e- z1b`67&o{T4?w0ZOY%9JZ42n@Etwn{CW>bO~c3~V5XAbZ>5Y|lB;pu$<_;jyK*)__! zV{ex1?=$|JivcJ=3v*F)SFz9t+uzr`g8i){OHi!j<`dIYQ>Eo#+LI`>T&X6bN6^?0 z6GX$OqVr+23ro{4%_gL9g;L!s64gJ}00BmhXg0Q_+1(?%kedunlHn1SG;BG{QrN6! z1^Ru{L~lvNtQ?ljp$iKb75%(Rs%$>Ut*(WJ-2};zt>DI!b=>ccIKS$jho4}A2Tv}4Z76lYy-PAED0RuqVLSUescKz&cS?cdNA3$ z^3qujv;6Gt$hU(eLbn<6?~n1}_%a>lf8~R<9x#uYeEFC2?{2CsL0%2Ms2wjOy;L5W z8?5}3421P);dw^6fz^ThBu522P98pcMoow7Te1Tx+=hjTM2R~Nw3qx-G&NG4tI?K${0db(?)EVVy(@R- z)A1_Trk2k!Wy9TzVIVhNaEHy51-W54s1EmYqXI4UYS(}O)p1-C=oUKm88blgptI2| zIfp|DBpG%1`s>Ux53BcCK7{q5FmR4(2+IMg4DTkplib-~*B~HVdokW>+{#~X;jO|~ z-5_djff}}2&r;_Z>h0__WTs+2d@~C>8y>q(5PVT{;#6pIPzbq&eKbHEa^zaRCdK>- zi^3DO2kLi9mAjoA@>-Sl`M5A6{rGdJC$8aSf4bNehZ$^*qad586Nmy!EK!B>pOc#S zEmrLs$y}xZF|bPZHLZ`NQcB3Tk1ArL@k9l8G}#J~f2*mrP08uwIadqK2AQ>vuS|f+ zY=GOx)8TrWlOWDN#dD%{5K|FQ)eal70nwioUPD~6v`aniv)91dWn)ovBs&T<9VM1z z*V5bNPfJDSuI3JDv%%N`YBF}T;{v!*kk<-x)}spDFRGH}m*#f~suhv%_|?H?ozTav z)QEjtTFAf7hqZ$6GxuT}Z?sWacTmc=$ON4f-J;J%bPD zYYptOB`aGaMTvD^8COt0)MO~V0qb<{*?{=kBCZZ8qv^8NZ+#XVP~f&rsRvV^OLp4Y zd(}DFIX<(ju$McV+h;EiJ0}~9=iLFUU%hHR=PmD12f!W@#PP*8QYqT4vb<{Ny|b*_ zE7QdW*Di~JTz=Qf3m+fL#sj1o#?%jrwuQlIIISDj_r^V4{zemuLh!>GfJXXiAELsY z-*TlJtWDZWM-ZXrvVinK>@rGm)U1=EhlTm}vG$$v>ig_QNFG798@FuAT?rHHMJEDv zu5VYUOk;59Sb3m_AehBn41t++YoA(Td#Hk&n#^sv(4xPoThSE=ca_Y=EQB+|<~jb* z7oI{ekia$h0#j^1Z)gQ7L7*Owrllgy@I6z_T?xzXNi~zXX1N9*e>YS3Nsr&|@c=_W zyuaq*k$pwmw!|KtvJbZ@wSASnj~=ZpFWBRrEKfeQPL=QQZ0qp&=vBv#cz4hi$m4cC zP7Bh`dDe>`e|+UNb?npymR1)4rSd8tEZp%9&(vPr**`k@Q{BU}t62H_x5^dfz)5ex zZgtP;3b$kzX0c3-71-lU|1I8|mZ){Da7~4J!YQ51RkXUhNl*#1jw8V5@S=y5weV3% zfmKSV9tWR=_0n*cwd5^hb5%ZLIAnFk-hPc*nN=1qXBk`)+NljY)rr$4b%-HB(xK{m z(vXTEi^A1lsh~pTlhUI%hXg_j!~Rf{m%siWTdH)US7K5H&r9s2J5 z>2!W4e{dLNjfVdnI>p0>X8!j29Nd+(7?=5VC89M*tMm6o@-90+ljc-^zy}xE1b=IK zh9H-1PrGmN{}+Y1yCnl^Sh&)&kR+{O)QRiYC~P2_T`?FHLsu&YbF~USmO`Tb55vUM zT+}9`NJuoqp~ej~BSmNoK9RB^oJ=?pV?opbM6!H_AxM-_mumshFMr(KR$wO4HUq6% z5x}}I^zoW@bHgwL)(&Ue^>eAF!12DNgK$IsOeV%Hu9}52!=|KWw0mSnDr1A{7=WHA|gLYGOjWDw}dlceeDP$a7>$ugvvQUxb@M%G+l;rV^o2J~>zihGJ@7{h`s zG~NP(NapwSLe4Zxs%LKS4*o^dj5^uhbL|t2Ua^xaWiwiFagld(Dc;QSDhPq3Eg%)# zLIp+)6{dj!um~32Zdz)I@93O5e5)hI7Iri?fq@^W(fC}Hcn4>hOKmR3w1a5@1=LvU zQkJ5o7BgaOi;*IF7cd}J81r#_NmP!AzzT0H>Ide}}nNEvL!Sxv0MMAJ+mK?H#i zqq>(R-EOF1)!whbAo`z|k$a-6gFL?{En4zko{y22(NPXAfxeAK_0#f}?PDG!ryejC zc~4t&rN&c{)48S-hsbI`mL!8p^A8`wO95m_IDKuBu7> zu=D(^v$J`;^)k?;G*s#nlIA@2Dbsi~r%zP-A=$S2!GeG7Q@#yVSkawY#U;4#zoI(w3nVz)5l&yg@CdgVcTU-~e-y*=^VbNgZDkq^=;RiR~@F ziDV{&8+JiK75z@uG^lP#6QhGZu3`woiSJ>E70X!9=jJflF%RQzAYU+OZmPTyGNi*L zujaeX;OB;?e52^*#F|l0rj-}%m9HOv_4M(hFQ0z>Xk~5f%awL|QKYf5-Aa+j2CQeO zG35Az!Qmj(yJYV+gct{;&Y28?EtzXQsyMb(@0Hd{Yn3mgd}x8jf>rYO5@SB56f?7e zT`hZ&TcIKW8V}uHyn6?)w~iT?Mt5IGTM>*cJde+*qEuAyxjA`$Rf4l+^IsZ3H^PTS z-?;~|*ZhKfmEsf$Xa%N*sqW-;s$is*W`@I)6JIoXD@a1vL z6VYdU5{DzBkDrt`=-)-T9JAx_9yR5PeaE;q!{CmVaX(SsC%wGj@6X41?=rIhewCsO z3VrDS5uiVo(dt*6gv-9d0FEfkrMbiv%{69CW~EQArspi5ij}dwxf|n8^L$7&PR%Sl-YW4 z*3pe5b2Bf#hkr0yBh*=ve1PG*MGF@!PFFsq{untVWUyHc8>!-8>!G}R2HZDw`o8JQ zAmGY=mrH4CHma~UC!u!07T&kjDoqTvpEUJ`u`AfPuE!lYFN^+k62gjt3&|wWMB|hO zb7rnx8Q+_RwX+c|w6BUm)&^K%{X`ZT+3@=8Ivtnv^yz|MmW5`ta2t!!$d`^2Dma2o z$k-R?;@EJ(Ye;;%Dly&Cv_#hl3+I?C2k(3fTDe;);S2Y{#2@cDczLORsg!0(H3kDL1*(`_^KfqR0#+fL>eJ4;|l_K|=E z=N%g3fvQDI3B*jwklxiFrJ+yQVtd@9yoj20afUsCAHBeR4${5lP^6 zI;6H!vD-$+TbsgD6=F?3wKv!dXO@24p}kgAUxC7k+=mHx(w2KaKqnSBApMih{&c9u zLk=q7s)jej{s%#0q3^=INf%So5d!Bk&=T_vAgf-jB&QK~rDT`P^=0X8Qk)DOp~SD| zUch3hhE3l+A`wbD?s1f~>5u}UI^jQ@|5E`47d%&1=nMqd9p}pdsNV&web<&uk+SbsS&t1Ls_Jz6iY*C9T9HX(y#7 z)+AaOJ=)_!*sxdj?b?BHHpJJ`EhKzciSua5W6cIblMIoR4cJ3c%- z*;urF;`RJ2(BswGlec(c`iXJ1+}%eATx2!`^XDfvXj#DqwaLIs+{h%(k`h2I{JLl$!Q{%2{cacNA;0l(k ze0^7gKYgYmW6Ri@6Xg>3&L^CVR%1T6FXT(3!(<~YJx&$t&x?%u3#cA6_EAoPFji9n zYwyOC_hEfmKu?vMorDJBA!n)%CEm4yDCj~E|1?d?R3;MfP!~}ka~XID{byg80H)FpLH~pQ(Tg?eh1FB$)xW?g z<-PDh!LRv5@J(}*?=llY);Hh%ey%B(ot3*xrHg8|HZAP4AcsN+b&Ge%atsDO8w4sJZ?qxgv?oQ| zO(}RuR_fTNVAA|_BFqBrnnrE;xPLfBIJsgmc+P~mjnkhNu=)$@3o{G3&|L7VA}es5 zT`a8M_I$90c$F<#`saraZx%mNHVLam`clFnS3&O*et|{o_PlOeS#|d&Pz=i}K~Uf*jiC0UUTrSa!Z&lcwHx(Z zQ|eN>yb{NN28eQCDV|PzfEgpUTXX6bLb%chyuBL*VN>9 zhjGt>Hr!no(>{bxj9|=&Niu%LDs_!(#yzi9N3}W~4l@JB-@d2@6RI~uPY}ln6azXs zIj+BCX4ylJ#b<=zubt4x2AZ6N7W10(V0k^WbKN@L*6?k&Q^79&;rD<4-TtwaFFXNf zT=AG>oSKleJ$?L`f6~9%pR11_t=aGL`Rb#`Yft|Wt$dCJn8N8z-Tyb;|1T=8 z_eeLt(a>lc_Dxg^3k&X-)j*Fi(LybwGdkiv9z!phH*)%qb1KcBoB5)M_S9qWjI&w0CCSq=$A47uxj)C z81*R{RBUa=;WNt`mgcLI)>b9mI(kL-<>o#IKudsLFE8J^lBgAo9bd;Xtj+ye?imyw zHxVl@t5Mg62m2rY{(nk;_3}MW89?(K+OEfM+BCdx`HuZ>#Q)#YIXRml z>0hyrd-(s;FCVYY@c*?hA3gb<|9>9-|2>fAtMOMSU>STqyx@PAc|bDQb5b8A#9ItW z+^~t{Ftzlg#?8Qz4>QQb3T0wy7c*sz9f#Vpxf=(fI~-yB=Fk@>v3w3Q;sgp(P)n?J zi*;PHMqK)dul3cO$(Iz(WhS*MtX9UFj0av-K-d&9)#X)nHJokVr#Qn1X<%8R3aPDoCvj9Ai~6A?PUwCL95*Mjur@B z=?iCV#Goz09gD0QsB4=I0U?$yUQjc5-^H8rg?);zI*^5;Z~2?=vzs!gA~n8j4KKSb zv0ZQs4+~Blh|ZDbP16N=zDGLtW0STjnz*7&%B&T{ktcyWeKggeBp>xTv$90uz{HhNZJIEd2?S3N7lOa)8Gs8*=2Nofat@#qEB0Gp zY|XtyXs1u{eML!kB&`NE=;~@-i|}$h`cpMPpnTuOW$8+OEjB0C)g7~8=v&$z{R{&<3-s(WWd z3=T}h*C;lYoV5^d9nAN7b+NXIPfQm7b>fV}{CGO8S0=s@g`24;YVyP0nWZwi326S7z{e@p|ICzUKlj zKP4;V6LVKgaESXfr~)Ko-zY@a7!G+ZBJDz9N+i!Y!&F+o|}Vlxb4BZ z)cNpPG&K42Oa}u}@Z?j=D1Df&9+lGai@ItM0=KQ$YMKUu?efT*h&2{7lt?u$vV1DV zx5`Xz#8V0260x0?tT}VivfTbpT6D*=;p}$NrY8^7i#8u&#$f%wU%btKU6ub+^#8|e zkDt!y|0}CcAN{WXe;)lGfC~zu=ZINOLx3L18U~Yf^(t92(PVL*7Yi%v32dBVZnRAcN1JUo{CkN(N87Z!;YY2)f|peTH%J=D%;vbT20(B z(8+HwRu7&Wv%K}~f@e~6_^r>{z>+vRJP&RhRylNWTam`kBPyOe|kuD>^DOXq=kqH-r!uPSC;Sc}=awz4&J zH{92T3}m;r!OJgy#d%Mb{cw;^!r{xrS^uwWgC+WyzAQIEVQ)*T4gWSzmkHf6g@SBM ziLOi|w?wU=78i=~ikjKrO!AULTs=J{V!B9fTdm5&-!s&)45w`L*zjM5y$M5MzQkiqsdXdeyM09)iFUav z-bMI7Ba_k88m{mL!?ENDrNLowSn7>9`j3DAe}7<18wX0y)ib%qnzM@i&;R)M|4*Ln zpnZ;2DFeHN63t3`*G5oRi{*3MY}A6&&3=xKZ20v1+GGB$lvlX0Jwp43 zfUKbpqt%ra{FkvS@W?Ae{E>hq*iDhO_cN{8|AXeD{rtJMCG{41mN9IP&}NkgsOq6l z+%>7Y0Hs1`D${Qgb<^65V@dfS5lJRh=z!FUCxCuMGN@bv&(E;c6W~ zaa7%p(WE8UoC);D3Nc* z`6sS^kY3d+?JFA)_$$W*>Xz|u6)yMH$WtX@&cWo7aCJ_mX{d2SsJ+>;iA2Vytn3*6A`mBu|i8s{*_iuMB{5(Gi`%FZp~s9HM5e{GX2D^?oygRx7utR5~Lu#Fs0Tm|ZJ)!D?5E*C38?P!X>39vlPeL$-Zo z{hggeWhEk8#bXmFT&=g00AqPD#52g%xMdP(Zh$bsq1vO zPnBpz^J_s9f3sv`t6Wd*`6rjXkTJ9RRqwot!RDRwFoq)Wh)iN5(N8~OB*Bx*>_jGd z2Lw`}8L99Ur%BatF_VhIn`t>HmKo^tPE-|hjRkoLNwfqlFwwtw90r`>`fl-}+X3cf zcTD0V7QXJ;WfzHIt2ro!s6)jEz9JLKd`|14Fy1V|kPWkE;O!KcKx>Qz;-;IE8lV|` z#mZ%Bu~{zT%SDC6=8-HnZ^N{8?-_5kq#%1dMC}gN)z%|n;s3KmI6C%ZP9E?l z{vZgscgapYK9t=_0Hg9zi-x5Ruxk>Dth7d4Kxoj6IMKVd+d)g+SEDhic3wCUf;`@bW-Sf*o}_WJ6Mrk)vhBNQ^1j zyfZERFp#vX4RO@Ar8{C4ulF@s%7trz2x+&aL^pLLEjqevsQy13bpMXwzxU|>kDsnQ znbrT-o_x9TyZ--q^#6nXtzRMhcW5!6jJHCcSV3~8R-Z`y8}qV%$C~E*=mNTQF#Gi(svb2L#3kRWdo~2PM$U1XYha=x8|jvNFeB6Ot>8kV0e6B% z54&(<4y|_R|21*Zzc~I`Nz|zma{#Rcw z3|q%+2MSmQznSMB{yD~3!g93SXQ(-u7!PvO#p0>R7i;-!r_J)^W3vr~MnzaYr}r`- zsc`3`qNgGyexZJ->BW-q4j7|2osbALs7S?WcU+)J+Ix7`oJ7h+0;R%?CF+&cVf&d% zDSBAUS?CTzCYnJCBA3=6Ig^v_(|%MtRU4xal8Y=*a5yU?v3<}95nG%$7)v z@Tio}a}uHVxs`hTF~ioONuHsWP^P6kJ38Fk-TIU0en}N4CLyUYuIwTWAhFsaj4!DV3HU;nXT}DV` zORPttZ9;Ke78etkv@5xsF}K!UYdvbM@>6_xt*X3y%L#{HxN5y~>lB0S#L(vBx@BC} z8%eDvY-2V5MnVtcK|WT2jZrn*Ge@k{|zK(0tXMnZqYNdS8^I+I`5@f3%!rOT8)9gp< znsM`?F;Bwu`22_Kv7U&^8(|l9AFs!HU_Sgx86CG*8GZ26t>3N350r$MeZ`-}>x;>os`|f*&Jg1u`&P_55Y$M1Ta5h7?+DJ8_ z`+F3{e|aC>WM!Dz;l-X1VZBx&GQ)p3s_vk?isEjx_^v;A#y9h#?<|iv{{1(S1XH&z zpO$e#Z2I&Ri&i0Orrh=TL-ghiyNXfP*l+smgQ#k5JUqURe*8zqW3ts04w8e|Yd zc!FEe|AxUb*PN7G^cmua@R+?XjCQ$MMi1^k4G+LJZKWI|xnnn`RtnBNKC9&G20 zi@Z{av~Hb#TM1LYXt4j#638!(H@~B{&VY@Mk#1B9L;MofRaYm1x1X6zrAkC^+4X<4 z+3Eanc)b1h?BDp<>=^zQ5(_=GbtGntmG*9SscUQB23cXVOY@8N_diW0-fc|qHG-0Bn}&7wh4qE}a#)PBg%6AWb(8w4ak2hTV#r#op#He}4}!N^ z<#pE(E~QYz`qwL8uiV<7p1ylKvxL68dTJX3xu-Lvw@9SYtGu@naHxCU+pJ0AxSfgo zSFIuc>p@W0WxI_~H${tlM`USQxh?+HIVnDiko65xU*ebdkvVh zh?*drz(Ej{Iz!-I6&G1;PxaXCx^G;j_E5SK&y3whwXebXtK}r6goL#d6o)H)`iaKw zE6}R({CoWv70@n;`IA68!%%ZD^OKqS31)A;4PD-%ip=0wTyVliY%6DI?^bJ|HCtDD zzN)lb(3kuJ|j5Jex7DaTD zkE+<}ES5&tR=QkJ#44pUaqUmX!=MN*;9pq`7;B!RU%dGcE?=_t~O&YNaoUiFKNF(tXoI9ld_}ZQ~m$ZgunR$+(!pvVK(* z6Bv~laYO9aT>KC9Q-w2p)3$dSjZKv42B}?4`&PqU>E65QT)K$HwqS#)hnBiL*g($} ziG8WWEm|acq-nosMMbmvJF=N^G>DDe-eIES#2r4at{ynPvyw+jj%NHu!kAB5G>>lu zs>D{q3R?2XD#Hp}K}d#L(o?O0m;coVW~jjugE3w>9XbaSf>L0_=h9&OP{scp#I@aP zn+$|>u}4d!HPixL`nVtQ!=up#f8V2#&>^}i-o+xI-PM9Q^X$#Lo^`oReNM4MzaG#a zFWTA`%d2iEiXTO^-#5b{`^9Lut?KLiT9@{|2OuFwbj+n?raT?HIFi{(2gq0s^Jv~r zBwVa7`Hlgu?hGXoVVPsnwNZ6*BWk;k;?1Zt!_;983a$z!By2PrR|qsO%PDs&zP^ep zO4S@?>$iy5h(?8&pW}|VVqM0i z_=?d`I`~t-HWGuI>LHc|#r?APU1Ee8!f=g0Xi--2R>E5$q4rjHS95R2$f-c;ErNn) zU^|)G9Xqp$_ogi1D!XgaV5Z~#dbIR(nW)oZLX3#HqMDy4d!Q1-@igQ)2f8W@4P%{- zZ>fJ!x8}yN?t6|iJ!)#*!WKL;Cdj)qjEzSt%4ayLgdy*R&+sKAw?URhoI@X7AP!(%p!v*i7OYKpFjm1yKE^vZ+=rtf>}zv@ z>5eH7LU4WaW%W(lNd}1IsSR6ld0+m5#BPI~!e*0L48hQ-GgUyuN>~K)izlu|vM+ea z-bOcCPQxbYaz2Q1mGU!Q2oV!W=LamgtJD z@dZCBO5`2fRK2hYvtDuqYuIzd8RUcEpJ~BB7c=H~tgl@lt0Zw2(Vu7yAo6gc@Mf4f zgJ`qLatnECj9o9|+gM64Yv>T(&{$F#wn_A-2a0GGJ!(CPIzTjwUhi47n0Ja_O)o)h zs6R!LxS_*IkMTi>ipFikulIn8_B`HPU3(rMy#DU!@v>=CQmN<#z>L3&wvJwr(Ejvs z^df&Q3F!lB3@%U}_mh<`c#E)t2aI?Ej`SXm6TS*umn}Uc(Ba^G>X+Ws z5j+;t7Z&5s(2b7A1f)(gBK4$HKyhO}=1ynfJY^7Vyv9KbLAer6m{QKlGKsk0`+XPK zsFg4IAl9E)4z4o_h~1T0%@F+v!5p&*!TW0Y>_?*b-Re`U@}OVtkC|zw-l$)F=vJft zukJUx&3ryH=vKRiEt>(o?$e8?_R!pJE?c|u)-q$TL_hT`mYHG`F4Mf1YQae`#^-Cq z^CUmy{lxI|&AR494XNG+iGu|?Uqfh|Spp&7!0yfn`PbNr&a`H^B}ZmWGD(o6j%df8 z8M_YDsSL3^*TBT!tEdb*f*FYemksDePmNmxS%Id7ah~!+dd11r}MP@^kqvS7V; zJB;b~VyDRc)mjh8fgP>T|BoSp|~(SY|A*lvh|P%ahlLY*8IVByjh)L>42u8#NBK zqCE1zBaT3I0zvX{UNKF4AupAc)yy6xau)W%3JxS~Qz{~)hN@NG661b%%?m55;BvF% zEL7@VIFhWfEOsgZsVw`2DOr$*j01$G#aIfEs^q$5f=1$YGLUPVk2sq!>$)>VSI&=miMG&)<6+Udu+w{CA6`(=w1PWx!HQa7ahR z#uCb(nx*FXp7)%X4sK~N>)Z?%!3t4utSlT+1zu-oK~P3ZYpao{mJeJ_Cye|%u|gri zZQ`;@jFpud>&u^Vs_%>oj_77HAFDB*Vd%w(3)zgXnnBL!R3gleiqW*6`ffy$*Fi`L zC)OOqHHAC;S!7B1)RVu#6zw4V!P>> zIZ0<&qjQAFPoiRvJwg;4v0+tYW-9UvTjw(z`0^4PzLm)K5z@xu^=%Sz zHec)wm)P4}FmRozOx@(@6}3*A112<1AWi^fS3;Hll@vXAKq$Sd(0$Y4QqB zhi_qQRPfmrFU&H(@;^4@>t_vl)*&2jXd4$9osFgB!B6%wapUXL)i*5-N?U6Gx&5Hs zq@I^Q%-7v$MnBQ$5sy>!)}w_ZgsU_;3N~e9Q1sJg6_YkmOxg!O(da(V`wI~10qS!? zvtFP!0#Kti0>2hMpuzK^ce5V-Tj%hgC1P5BakKOj%LMCDW$0^fnlzvi{FVAY{fXFM zM$N)>vY>TthZFh$H6=8cf)7?};RD`G-=A?PHog03?ZYzqMml3k-E5wd{MX?>T6+C0 zt*#-#oF4nIEK5wik-&YqlvYQf7 z7@R~l#u${-kV{l9~P=CXlB$4A7@R|J^lRlG#hXb@*XV0!W4Sg*5Fx9!q z-&qCsKV7)zU7I%du56sVi5--`KdNZK?S%^1wrz0765XUqfKRnj^eMI~k^FLTA!o}c z&5}IqY+ZZ`O}6vq6^OwJ2{L67R0{Vo&BR>n9k0|FLc%kP0-Bd3qyXnhh^;VhkMl*| zY|ti)DL6_#w4&Y+q*QBZMaKnF+Zp1;pIL{P&He+KkESl_5}E9RD}l7=aVb8TzVfYn z9O^^QM3`h8aZbrKChIhjYMoB)Lzews@mIWFW)75O;?PhN1QRb)#LMFicA#DGXNS25Ey-kLu!cNdhZg&4xWMfrb7m= zijH1yRUcQQm_FNzw!JAvj3)R)NVq4bB^LUru{OhAMfwCEZq(hf@#!J)KoTNRXr!NU zo3aqgqU4M-_0Xs+&Au8?LJF_wWl+^k6{|*nIuC0I>kL`y6QbCH@C?tFxGkzI0z~10u{+KM0FXuB4@%XM2E9@S{H;2`ZYy{brex#Zi{jG zJ8LAjYa`J&-z@%HXHk_2F1okjW!2$z>+opjU~6ylhqKq=B|582{QvD;{cjvca{Zlu z#e_gY3)ore!?b+T83-*>7HvxMk#u~3VsMAtAvxxL-OjEkUab7>>G!ItyJmJs=@8>C zIqV=G)^c~Ir@OkkK3=`r+InCPiFyj*Ht;0w^cMUx{=*$$!G#Dv+wxAt*0XG@?L=$^ z16@2P^_kwGTB&FKCVqkU^e)`!-PShOz1|9*P4EZgqqf_FKbp_81)nE;(CwhGwobj2 zJ2D?V`Ob>RvIUj7KRQa(K*~|8IFyq0TY%ow0`i)Ncc&IXLV^*--byPK=niSJl1`DNIGTJ`?COaI z7VXSX1Gg#L`=w>P`uT zLJF%%WX}5X;iD*I=|s!MRZT3dcxWwyWzCoWPs#spf$dXn#NWLG!2SGxk9HpJJZL0h&HwlJ;s3jjr|Q@;B}_L5%j}--nm1Qld0#TPjBqqF%Ju1V)N^<$<+?6~IdD|m zvSx$NZ04VA<~~-Rf*Zj+g7K;lgXkpQGzoIgA8`S7U9$9x<`Z-OJ7vK!u4?_ubABCe7!7#ExPm*cEL|pW~}<;WO4X1 zUp76;aM`{$zw{z_MZB{#_5$}~@aE?r%c7HOB1o(NJ&nTYan$=UC z7yTWI7%LGkq0v^Hj@JcSwFLXc0SLleN1+QoUCGKhr5qFDH-zqDuLs;sA0|L}uzOF> zmza!R*hSY>PoUvJSyl_FV8V;aBn7>s*>_Ps%;+o2=;{vEYSKn5)Fwdd6iuU+4%QGG z!HWi1PRLX%^F&$UC>BcIsnwjk5tiS`ny0~Gye?zJH+A*GdFGCXZyj0sQK>M+n|T#` z*ifiFnY25AI**x}g$V#>oyO{(7$Gr6b=N6DB7wU~R?1#2%6@$mJj)<#Z16LkV9vL81<`u4ifF#VEz!L?~zkNE5U=k(~Q;%ZP#l9EQ!GNqQ@$CEc7ikXyAn7p3fV3}`))SBb6$e3Uh&)LB&g)_p`~4h8R@6Pu z$-Y;FojEzC6gXsD_}BMr7Q~|A`E(-xVgZPa1c0LfBHG)SdtlxssW}tkqp7C_5+HaP zI~|J z(4woFp>ud$I^x7!7TbPmGxXvx^Gj`>;P!W_5U{O{<`}Dw+^SodL1hQ;kRtSQK%6X$ z?{3FJmw7sI3Mg%pTvLy}PA1VqC)9vdLB;b|J5}wavf>w3G`kB(;PI=CjYDCa<>rKG zL5*w_pEIf{Im=N&cq}?yU5PlQGJ%+{#x$1E@eIdG`nh%ysih>)e8}gDVvvVjE}^s& z{;-$}M`<$EQtK;uqwuQHT@t;r1k#bWF9qK^y>OE3YOP}>F?%b=WffY2sElxYiMw=K zhs`5raAd>{`ZnHB%h3CaU=mu5gz+6?M@ZTTX;{gp%r9wK@nB<)g(V?l*UqnJhxO!A z`2be?zX`pGW}94_XqKp65xXw<$h;m`*of6E92q$1$Bf2K@!7Az3JB*W%#rY~I_&Ia z+@!T)Daj8$=$p=JIgp8&R;&m2%G6dpH4I``!yYlMd<}!xGVlUfV^8&RqRLHL=UtZJAb2-7_XjW(h_qQ1!UBA}+eZeX+k~3#U+q_69HHB~(Q=B2?LK$BtL~ zgZBLG;wt)rQp(5N_@-{YpcC7jpT0FvmMH55BvB(K0S(eS2F zO*&z4EPTJR4kCgIc03lzGB#EdRN$le6Phaa)7w7zsMdy7B3AMVQ+;M6s{1FUuhN1 zQ;s3bafuhH>T#b2HV##29y{!`k12Jr4v2cOWu@K`nRGs7&mUjZK#(dslcB$Yb`1h1 zg$^tq1F1F?ii(@sKbSEM7*a8d^o1L+s!02^CyT=>>n0i@%NO(N^0J&e1Aq!*T+FX! z*B9|Y8ivGS!NvhmZOb~$%gb;E(z)mHO=*|LOr3Z4l}>t0b+HWf}f+$nBz29|V-aZfOLH1t=rAi?z!I%v*|~=xm$w zxI*Ekvy92?Byls8m;%aJP!v8NJBv7;A{GB8<_*XM;ZRHEmPSsrZkM7FyVD*?VpEHB zHa4Pp%L6j#haxtys6jhWuuj2j;@jAqt?tFyYU~z9ajvF328^(P)r#uuY408~^2I8z#Z&{HE{YW7ZGK)+k3ySz-yj*| z3D*)7KvH<}>gz`A|D^d}&<)nxMU`Jjb}y}bEmgU>_1W4!{^8*8@NY{Ie=7gG^W;%8 z|NHpi&ciR)`QN|CmFM}!gd`oGv-%qX;hYKH3y7ZkGQy@xkdH8g?b&>K1Cs>m>tOPJ zdQBn^kCllX-3aU1{qZ2U3c-M3RpN`o16p(_nVFKmQ?MQv)eiNUQWsni)UH zFdUFE-8-MJY-Th7YPIJuR7n^reqPY*Lx(9OrQ#==Q3Yq`hOym7ygfph(6djw)QQ0( z)JYS~f$=WJJ;ZZZK+MQ{?M|}&gu~WhvmRuilwLm_oW9byM zC=Akr%KYMAzUcS2!~e9)_3i8QEglFJUVP5cA!GT5>I`@6>1zcC32$=4!*PD=njC2u z+aWu_kCx>Z^)Y~*>DJG3C0Ks+_-UU!;Ln}}UG@=8%p!1e+s1Fj27=Vf{{4?%SgBhJ zQmKf_f35#>vXxlS+Ecdqz_)N9+D;0ton@B53gUq0!M?dc{7T9GY?H(~Yd3A(z*glh zZ``bYf9^=~Faw+hW0*+y{HAld5>l|U)YuW-YAfo28JkecV) zTWAzw=Pj6+`eYBJz+FAaTjB9!ywPbRhEL8)-yygGcjgS`F+3T?c~gMBG)IrC(yeFY!Tp!mwu29cFsF{!w=Fp(MR!F)0-vt zM%SH>_m8DIm3P+{v>PfuF(232>*H|Caq*!VFUQ%9@t_o7KtT?K8mRRI!Km83fD8_| zP!h$6p9F|E0vYwIVdSuM`EAK{uxKBVgXLnjT(qSCM@^EuxJoE7zcI)RR=a9|bQ)_d zdVy*oO*waeG@X!r{{448@AoR(Qsgla;LoxZNVR-#m~H*nrmpf2 z@Y!bz=f|x?hZF(JkuY_jw1ey>FNkRdY~$ncuW)W0u-|++DrR*#d|eL=4mL-83|zYQ zYlxLwxZN5ifIOYXf;;FvtANOvrck5ha5k@omn9j%Vkk!gP2n8m{RZ3P^Vz`j7CLm6 z{NBhWv<_@sph%(2zIX%I|JOQu^fmUyq`Z-dGxFdEPI4|mA<53x#uE@exmuo)B0vm| z?cIZ1&+j~)-#O3ke)#sr`7pcZD;tI?3+w;i+e+tuR!!39DYn1>gmCX+T3oUuf3C{A)PvtSru-4f z_wK!Guz>IfZuer?)LZ(uPu|0h=5P~9-HgK8q(D3a8Z>mm|ITlPT?#kdXM83SelkAR zYT#--3id+26?u0D&vb70n#~e=l0os{1q}rO2}dx zSD(m$k<7lKNt5y7)v??s$SJv5?pb+JjO8b76II;zZ-@9sh}+tbr+l3cd>)<8m7KaU7xZscUqT8nXU%M4^Tz_A`&SPm5+_Kcw`{sN8;!r&_lWF$T5`gY2m4*?Z%Teks5yYoJHjdCI1$wjWTh_+TG zB-u+Xt~wv#ut6mqdR+*0l;9b(8_Iy=yZ#z8-evDPcz-f^mAw+!fF+nT>|>Tg$BKJP zshrbbVCk|xu5p^{?f~}^7~8NgOTcPkC9O_9GT7Rb3^kZ2qLcg6skSjA2ccx0SJOr3 z^DY6>0!Lu>oi=kC2IYG;^~}nCBms{NaPoQ+_87{3ot|Y+p8SF7Qs^ub8o_i(nKhvh zHkr&!#mVn$RN}ssKLR=2Og0$%U%MSGm50V3uv=eq#Kxv%f40?4yXfG}@yYJt;r`L- z%iV*+{XJ;87l&_;_xG|d_TK*d<^jDBRqke=59s#Kf&fiGnoKXGbKu6_9>!TGERzHx z4=w0eizf)e;VP;~9*qAt8q|HFE3R*Z+ts{I?{aUyy8D__ zk=m8m-yGGi2=#`$PiGR&(zq`*_Pii2MgZff$3>)ccQbqc8!MOa>YIJu+x(5)x4v!h ztqCooFf7Kw2UWejD0G{Fe2rP*)?pPZQzIXm@~VU%NW8O)KvlR8yO>tAYxpXQiZY6F zrXy|O`}h*a+@o6zMt4_`^NS_nLi@kps7H_*{q+pB-cso*&+*wyy*H^@RV26*_k z3@2UD`${ZS!BL3Fg~u=R{M2f9MAWzus&ATTgCVNzPrs@~cqT~6b25UyfGId+;_uiS=K%gVT~SU=QU`bN7h%-1--;?XZp!AX=AN6;*6Op zerHW6bSz;4Fommq6Qb(KN8#@|e*Qp%G)CXWIo=57S5cF&1{#!u(Y{<#AR)6Q(AQX~ zVNDIQIgr`Ab& z&~^q5Y3wiPu=kPyLDhLDb3JRJk6~3FOQzsiIBFNXLAJ23Ab|p=FdYAu3sGw$(p?CC z4R~e*4|vivqO=x(J1?wQ$Uz?fg$vdJEITA!J!6RA2%9Eo9}LV0C}Xfm`ANXj(vdju z{#wqb9JxL~`DcPYx=Ddhxq;@NX`x;bZ#5N1a|X)LzaU`(KY#aJU>_$Ql8)nRdaceq z=d)CL!(GWEi=`?LiiUzrLfhVMSl20J+q0l~rH>g^*UbLKxNVGOhqJe2Dm|49t{2q@NuilFgxP1a?qGjjAY{o9rL~YojvK?~<5`b4q^TUl0guxL151=U!{|h-ySt?7FOv3Y zA`8q;=%oO@bcI;D87|00t46ivdthYHXps~MUgD~{yc!7z)`o2z#ww6>h$&u2kAdwy zf-e%x9YRXe3$~a4Nm~B=kP&8Q${fV9(hec$(j!-rJPTsb36zw!XAz8IcA{{|u!M`w zkY%`peM#(^h9(j3jsYTUhjf2riP4r2Bg!?hiLZRemYFJe6Q>+~5A-nOw!=*3Qvao9 zql!D^AjS>d+b86-@VVYtxTPiBsaHKaL7X z$=szens8{Opo$B&&zxBCo&yZ5E^kXQ@HE3#u2~oBg{+#Ckz^REqPg?w?+Z=QPzW}M zIPfk!U?GgVmV^~>iKD6>2c^T7=ymm1svyjihPyvsIGpsy3PRy7X{Ir?fi>7I=0Txj zI^tA`BZ972O62ywT&?;}=@ZZRkqT8Q<<>d`85i9qxiEH1OY~vg7J!|;8ZFr_NwHpH z25$17W*uv;)KE2#c;(p?9#07{2Q3k$Q#UToM}>}HhX$oOIoCbQ=It#BXlNpvvzVib z27~C_VB|4z)bp!xGE8RE+`rOo=v8B%AFcje-TX$5d2d?jM-stQX z_0NU$nbkCd(-2PHS4+4lCiAp2o3(tcCH<Ryfy*=L0BD9_HQ^Z&% zuyK3x+AxzYrzSZHf-q=@Ngvg}voyR(Z;L@4B9)AoyY}XO+Rt7YGz8&0mYZa{2o#cT zIq3E%Zn^J=rC(hjxJm~=nKqk8M)=9<(wklzUVg|QJxQy_Qh|gTkz*wJ54H$y(%Z2a zixxUy#eEvQJ6ewTWem`pR*4P-dmpgWmG2^h?fG>UBM*)ZdK@Gltg*WBaA%56{R)m) z%v{?Asw$g{`*lCc>?;wSlVE~e-n*oQxKkO29!yJ(ZVMz^Y)YN@9vdL`9H)i&c-(sU zPiV0Q8p$p3ry;uzqw7ktC9}y!--a0(Qcw45;R*se`{()*2g`?AAVbv?JI zEeW~V7%i8aH*2!RqeJymL+P_(oRNK*NwM@uq~|%Ut!e$q=ne2kJWKe$y%i zM@>L)uct(GFcGAmIzgu#yW*D?ucoM*OYc=2&EoEyHQMJE^tI4eeQk%nF@ z#j-kXzb_|=0>g-5q>!A>5)xd?NHBMe0P`XgV9UHIK>^Y+;hxy?uj6 zF0T8Y;Hjm&rHHK5;Uo;Ac@rdYITE9*2E~*C8fxXXPOTT(L@l=KQfAyxVTxJiHjlY+ zuP?iW1zj4#5??Aoj7x86hSH!&+mRHeCwghM_m`2)3G1Qs%oWP86vCYk>qb3Cp`E0f zOfQIoj{2>xw#L|&&}PQwm}a9%6|1D-BW13-=`ZZW^D%oupk~>uY_j zul2RQ*4O%4U+Zgqt*`a9zSh_JT3_pHeXXzcwZ7KZ`dVM>YkjS+^|ij%*ZNvt>uY_j Quiy9jAIUUKcmN0j0PGWc82|tP literal 35815 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 BV9o#l diff --git a/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json b/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json index 9b264a82..1facbc0b 100644 --- a/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json +++ b/helm/mosaic-stack/files/openclaw-seed/nemoclaw.json @@ -244,7 +244,7 @@ } }, "cron": { - "enabled": false + "enabled": {{ .Values.openclaw.cron.enabled }} }, "plugins": { "allow": [ diff --git a/helm/mosaic-stack/tests/chart-render.test.mjs b/helm/mosaic-stack/tests/chart-render.test.mjs index 4b089de4..5ec94038 100644 --- a/helm/mosaic-stack/tests/chart-render.test.mjs +++ b/helm/mosaic-stack/tests/chart-render.test.mjs @@ -691,6 +691,12 @@ test("can disable Feishu sender name lookup", () => { assert.equal(config.channels.feishu.resolveSenderNames, false); }); +test("Feishu scheduled delivery requires explicit cron enablement", () => { + assert.equal(openclawConfig().cron.enabled, false); + assert.equal(openclawConfig(...feishuArgs).cron.enabled, false); + assert.equal(openclawConfig(...feishuArgs, "--set", "openclaw.cron.enabled=true").cron.enabled, true); +}); + test("rejects incomplete or shared Feishu configuration", () => { for (const args of [ ["--set", "openclaw.feishu.enabled=true"], diff --git a/helm/mosaic-stack/values.yaml b/helm/mosaic-stack/values.yaml index 35907771..1b7a2998 100644 --- a/helm/mosaic-stack/values.yaml +++ b/helm/mosaic-stack/values.yaml @@ -263,6 +263,8 @@ openclaw: # Skill instructions included in every session, without a separate file read. bootstrapSkills: [] gatewayProtocol: 4 + cron: + enabled: false slack: enabled: false maxConcurrent: 8