From f8a3c2dc6f5630d5ee7ea0c41ab83f53d61e28b6 Mon Sep 17 00:00:00 2001 From: Tommy <46983364+TommyFang2077@users.noreply.github.com> Date: Sat, 15 Aug 2026 22:02:13 +0800 Subject: [PATCH] Add README, plugin citations, and multi-platform release CI. Ship screenshots and third-party notices for the desktop shell, and package Windows, macOS, deb, rpm, and Flatpak from GitHub Releases. Co-authored-by: Cursor --- .github/workflows/ci.yml | 27 + .github/workflows/release.yml | 178 + .gitignore | 27 + Cargo.lock | 5419 +++++++++++++++++ Cargo.toml | 9 + LICENSE | 21 + Makefile | 136 + README.md | 215 + THIRD_PARTY.md | 34 + bin/dsh-desktop | 13 + crates/dsh-core/Cargo.toml | 23 + crates/dsh-core/src/clipboard.rs | 227 + crates/dsh-core/src/launcher.rs | 437 ++ crates/dsh-core/src/lib.rs | 21 + crates/dsh-core/src/modlens.rs | 473 ++ crates/dsh-core/src/paths.rs | 179 + crates/dsh-core/src/preset.rs | 379 ++ crates/dsh-core/src/updater.rs | 348 ++ .../io.github.tommyfang.DshDesktop.desktop | 16 + .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 8226 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 728 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 1235 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 17803 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 1722 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 2775 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 16655 bytes .../apps/io.github.tommyfang.DshDesktop.png | Bin 0 -> 3759 bytes ...o.github.tommyfang.DshDesktop.metainfo.xml | 53 + docs/licenses/deepseek-harness.LICENSE | 21 + docs/licenses/dsh-anchored-standard.LICENSE | 22 + docs/licenses/dsh-anchored-standard.NOTICE | 14 + docs/licenses/modlens.LICENSE | 21 + docs/screenshots/icon.png | Bin 0 -> 17803 bytes docs/screenshots/menu.png | Bin 0 -> 55163 bytes docs/screenshots/session.png | Bin 0 -> 86352 bytes docs/screenshots/splash.png | Bin 0 -> 42355 bytes docs/screenshots/src/chrome.css | 61 + docs/screenshots/src/menu.html | 42 + docs/screenshots/src/session.html | 135 + docs/screenshots/src/splash.html | 34 + docs/screenshots/src/vision.html | 115 + docs/screenshots/vision.png | Bin 0 -> 104626 bytes flatpak/io.github.tommyfang.DshDesktop.yml | 97 + plugins/dsh-desktop-vision/client.js | 209 + plugins/dsh-desktop-vision/cordis.patch.yml | 4 + plugins/dsh-desktop-vision/index.js | 181 + plugins/dsh-desktop-vision/package.json | 23 + scripts/capture-screenshots.sh | 29 + scripts/localize_preset.py | 58 + scripts/vendor-native.sh | 48 + src-tauri/Cargo.toml | 32 + src-tauri/build.rs | 3 + src-tauri/capabilities/default.json | 18 + src-tauri/icons/128x128.png | Bin 0 -> 8983 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 19103 bytes src-tauri/icons/32x32.png | Bin 0 -> 1843 bytes src-tauri/icons/64x64.png | Bin 0 -> 4285 bytes src-tauri/icons/icon.icns | Bin 0 -> 254374 bytes src-tauri/icons/icon.ico | Bin 0 -> 31982 bytes src-tauri/icons/icon.png | Bin 0 -> 23441 bytes src-tauri/linux/dsh-desktop.desktop | 15 + src-tauri/src/lib.rs | 383 ++ src-tauri/src/main.rs | 5 + src-tauri/tauri.conf.json | 71 + tests/test_plugins.py | 60 + ui/app.js | 52 + ui/icon.png | Bin 0 -> 17803 bytes ui/index.html | 22 + ui/inject/chrome.js | 168 + ui/inject/hide-twins.js | 35 + ui/inject/ingest.js | 45 + ui/styles.css | 114 + 72 files changed, 10372 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 THIRD_PARTY.md create mode 100755 bin/dsh-desktop create mode 100644 crates/dsh-core/Cargo.toml create mode 100644 crates/dsh-core/src/clipboard.rs create mode 100644 crates/dsh-core/src/launcher.rs create mode 100644 crates/dsh-core/src/lib.rs create mode 100644 crates/dsh-core/src/modlens.rs create mode 100644 crates/dsh-core/src/paths.rs create mode 100644 crates/dsh-core/src/preset.rs create mode 100644 crates/dsh-core/src/updater.rs create mode 100644 data/applications/io.github.tommyfang.DshDesktop.desktop create mode 100644 data/icons/hicolor/128x128/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/16x16/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/24x24/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/256x256/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/32x32/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/48x48/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/512x512/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/icons/hicolor/64x64/apps/io.github.tommyfang.DshDesktop.png create mode 100644 data/metainfo/io.github.tommyfang.DshDesktop.metainfo.xml create mode 100644 docs/licenses/deepseek-harness.LICENSE create mode 100644 docs/licenses/dsh-anchored-standard.LICENSE create mode 100644 docs/licenses/dsh-anchored-standard.NOTICE create mode 100644 docs/licenses/modlens.LICENSE create mode 100644 docs/screenshots/icon.png create mode 100644 docs/screenshots/menu.png create mode 100644 docs/screenshots/session.png create mode 100644 docs/screenshots/splash.png create mode 100644 docs/screenshots/src/chrome.css create mode 100644 docs/screenshots/src/menu.html create mode 100644 docs/screenshots/src/session.html create mode 100644 docs/screenshots/src/splash.html create mode 100644 docs/screenshots/src/vision.html create mode 100644 docs/screenshots/vision.png create mode 100644 flatpak/io.github.tommyfang.DshDesktop.yml create mode 100644 plugins/dsh-desktop-vision/client.js create mode 100644 plugins/dsh-desktop-vision/cordis.patch.yml create mode 100644 plugins/dsh-desktop-vision/index.js create mode 100644 plugins/dsh-desktop-vision/package.json create mode 100755 scripts/capture-screenshots.sh create mode 100755 scripts/localize_preset.py create mode 100755 scripts/vendor-native.sh create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/64x64.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/linux/dsh-desktop.desktop create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 tests/test_plugins.py create mode 100644 ui/app.js create mode 100644 ui/icon.png create mode 100644 ui/index.html create mode 100644 ui/inject/chrome.js create mode 100644 ui/inject/hide-twins.js create mode 100644 ui/inject/ingest.js create mode 100644 ui/styles.css diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8f15834 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +jobs: + test: + name: Test + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + + - uses: swatinem/rust-cache@v2 + with: + workspaces: ". -> target" + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Test + run: make test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..cf69958 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,178 @@ +name: Release + +on: + push: + tags: ["v*"] + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +jobs: + test: + name: Test + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: swatinem/rust-cache@v2 + with: + workspaces: ". -> target" + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Test + run: make test + + version: + name: Version + runs-on: ubuntu-22.04 + outputs: + version: ${{ steps.meta.outputs.version }} + tag: ${{ steps.meta.outputs.tag }} + steps: + - uses: actions/checkout@v4 + - id: meta + run: | + VERSION=$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1) + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" + if [ "${GITHUB_REF_TYPE}" = "tag" ] && [ "${GITHUB_REF_NAME}" != "v${VERSION}" ]; then + echo "Git tag ${GITHUB_REF_NAME} must match Cargo.toml version v${VERSION}" >&2 + exit 1 + fi + + vendor: + name: Vendor Flatpak runtime + needs: test + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "24" + - name: Vendor dsh, ModLens, and presets + run: make vendor + - uses: actions/upload-artifact@v4 + with: + name: vendor + path: vendor + include-hidden-files: true + retention-days: 1 + + package: + name: Package ${{ matrix.name }} + needs: [test, version] + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - name: macos-arm64 + platform: macos-latest + rust_targets: aarch64-apple-darwin + args: --target aarch64-apple-darwin --bundles app,dmg + - name: macos-x64 + platform: macos-latest + rust_targets: x86_64-apple-darwin + args: --target x86_64-apple-darwin --bundles app,dmg + - name: linux + platform: ubuntu-22.04 + rust_targets: "" + args: --bundles deb,rpm + - name: windows + platform: windows-latest + rust_targets: "" + args: --bundles nsis,msi + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: "24" + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.rust_targets }} + + - uses: swatinem/rust-cache@v2 + with: + workspaces: ". -> target" + + - name: Install Linux packaging deps + if: matrix.platform == 'ubuntu-22.04' + run: | + sudo apt-get update + sudo apt-get install -y \ + libwebkit2gtk-4.1-dev \ + libgtk-3-dev \ + librsvg2-dev \ + patchelf \ + xdg-utils \ + rpm + + - name: Vendor bundled plugins + shell: bash + run: bash scripts/vendor-native.sh + + - uses: tauri-apps/tauri-action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + projectPath: . + tauriScript: cargo tauri + tagName: v__VERSION__ + releaseName: DeepSeek Harness Desktop v__VERSION__ + releaseBody: | + 跨平台安装包:Windows NSIS/MSI、macOS DMG(Apple Silicon 与 Intel)、Linux deb/rpm。 + Flatpak 由同一次 Release 工作流另外上传。 + + - Windows / macOS / deb / rpm 需要本机已安装 `dsh`(`npm i -g @deepseek-ai/dsh`),或设置 `DSH_DESKTOP_DSH_BIN`。 + - Flatpak 自带 Node.js 与 `dsh`。 + - macOS 包未公证,需在「系统设置 → 隐私与安全性」中允许打开。 + releaseDraft: false + prerelease: false + includeUpdaterJson: false + args: ${{ matrix.args }} + + flatpak: + name: Flatpak + needs: [test, version, vendor] + runs-on: ubuntu-latest + container: + image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-47 + options: --privileged + steps: + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + with: + name: vendor + path: vendor + + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + with: + bundle: io.github.tommyfang.DshDesktop.flatpak + manifest-path: flatpak/io.github.tommyfang.DshDesktop.yml + cache-key: flatpak-gnome-47-${{ hashFiles('flatpak/io.github.tommyfang.DshDesktop.yml', 'Cargo.lock') }} + upload-artifact: false + + - name: Attach Flatpak to GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.version.outputs.tag }} + name: DeepSeek Harness Desktop v${{ needs.version.outputs.version }} + files: io.github.tommyfang.DshDesktop.flatpak + fail_on_unmatched_files: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe4c904 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Python helpers (scripts/, tests/) +__pycache__/ +*.py[cod] +*.egg-info/ + +# Rust / Cargo +/target/ +**/*.rs.bk +*.pdb + +# Tauri generated schemas +src-tauri/gen/ + +# Vendored dsh, ModLens, presets (make vendor) +/vendor/ + +# Packaging +/dist/ +/build/ +*.flatpak +.flatpak-build/ +.flatpak-builder/ +.flatpak-repo/ + +# OS +.DS_Store +*~ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..76f63df --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5419 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "anyhow" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" + +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "image", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", + "x11rb", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "brotli" +version = "8.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.13.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1307f12aa967b5a58416e87b3653360e0fd614a016b6e970db08fecbb1b80d" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.20", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" +dependencies = [ + "find-msvc-tools", + "shlex 2.0.1", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "cookie" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.13.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dbus" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "defmt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +dependencies = [ + "defmt-parser", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.20", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dsh-core" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "dirs", + "libc", + "regex", + "serde", + "serde_json", + "shlex 1.3.0", + "tempfile", + "thiserror 2.0.20", + "which", +] + +[[package]] +name = "dsh-desktop" +version = "0.1.0" +dependencies = [ + "arboard", + "dsh-core", + "env_logger", + "image", + "log", + "open", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-opener", + "tauri-plugin-single-instance", + "url", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbfdaacccebec3b28e4866b8973543c7647797db5ada1bdab552e48fe665fbbd" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.4+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "env_filter" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900d271a03799a1ee8d1ca9b19893b48ca674a9284fefcfb85f05e74ed314217" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de671bd27a75a797dc9ae289ba1e77276e75e2026408aab65185384e2d5cd3f6" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "error-code" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" + +[[package]] +name = "event-listener" +version = "5.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +dependencies = [ + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "fax" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-executor" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix", + "windows-link 0.2.1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.13.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", + "png 0.18.1", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a756c3fac73139e83f14c2d742155dd2b78d3ee56597b419a0579b7bdd6dd78" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jiff" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" +dependencies = [ + "defmt", + "jiff-core", + "jiff-static", + "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", + "windows-link 0.2.1", +] + +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + +[[package]] +name = "jiff-static" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" +dependencies = [ + "jiff-core", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jiff-tzdb" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" + +[[package]] +name = "jiff-tzdb-platform" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" +dependencies = [ + "jiff-tzdb", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "js-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.13.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" +dependencies = [ + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "muda" +version = "0.19.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd04e60bc0b07438a6771710ee1698f98f6ebbc7f89b61264af1563b8aeb878" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.13.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "open" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cfef937e9c486488c7e3d949ae31c0f1d06bdacd75b99c086cb35356e30408" +dependencies = [ + "dunce", + "is-wsl", + "libc", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plist" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da1d65da6dd5d1e44199ac0f58712d241c0f439f80adea8924d832384087f85" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.13+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.20", +] + +[[package]] +name = "ref-cast" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "reqwest" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.119", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.13.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78f1fbe43ac4a0e47aadb3dbd357b69eb0d3793e948624cd03dd2750ab1c0a" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "jiff", + "schemars 0.9.0", + "schemars 1.2.2", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8705578779c2b6bd90d84d66eb2e206b708b1a4d7b9f17641b293545bf1c7e46" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.13.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7eeb6d99155545da6150a1795945f16ac9c178deb2a5f2e74d776107bd5849" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "667b20e2726d572dea2de7370da16e188eb06008faf9a92fab7cdc46791190b5" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.20", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc9ce40b16101cb6ea63d3e221567affd1c3a9205f95d7bc574941a10636b632" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08279169ff42f8fc45a1dbc9dcae888893ba95288142e5880c59b93a26d2cfc5" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.119", + "tauri-utils", + "thiserror 2.0.20", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8b394794f399a421811d06966343e7933fcae92d59f5180b9388d1174497a45" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.119", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74be5dd4bed9afbd145e5716b5fa2ec28cbc29c34ffa61c258c9273d896c8020" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-opener" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e1bea14edce6b793a04e2417e3fd924b9bc4faae83cdee7d714156cceeed29" +dependencies = [ + "dunce", + "glob", + "objc2-app-kit", + "objc2-foundation", + "open", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.20", + "url", + "windows", + "zbus", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3214becf9ef5783c0ae99a3bb25adf5353a7a16ebf53e74b909e29205735c6c" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.20", + "tokio", + "tracing", + "windows-sys 0.60.2", + "zbus", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b4bc95aed361b0019067d189a1174a603d460d0f6c72606512d59fc9c12ec8" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e6fac707727b7a2f48e4ded90976324267371073edbb415ffb73bb0458d203f" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e176a18e67764923c4f1ce66f25ae4abe5f688384d5eb1a0fa6c77f3d90f887" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.20", + "toml 1.1.4+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.4+spec-1.1.0", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.3", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fed54709c5b3a53d09bb1c113ea4f5ceafd1e772ddcb0030a82e1d56c087b08" +dependencies = [ + "new_debug_unreachable", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "tiff" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" +dependencies = [ + "fax", + "flate2", + "half", + "quick-error", + "weezl", + "zune-jpeg", +] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.4", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.13+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.4", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow 1.0.4", +] + +[[package]] +name = "toml_writer" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.13.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045979e3f037cd18ad1cb2a419dfda133c5c29c9f3453370079f2255d46c257e" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.20", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7777d5cc23d0e91404e53ce2d5e8ec7acae3026b16233dba62cd3246457950" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c435338968042f4f59a557f690a253676d47ce13ceb55d70100e7facf6620a30" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba8b815c1b593dc0baf78dd0f4fc8fdb2de53198fb1163738093e9a311c33fb3" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.20", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "weezl" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" + +[[package]] +name = "which" +version = "8.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3ef584124b911bcc3875c2f1472e80f24361ceb789bd1c62b3e9a3df9ff43c" +dependencies = [ + "libc", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.20", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "gethostname", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.4", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 3.0.3", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" +dependencies = [ + "serde", + "winnow 1.0.4", + "zvariant", +] + +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + +[[package]] +name = "zerocopy" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b5c6b5976d66c1d703c4fd17d3f5e43c8cedaacf604961b171adc7130896d8" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47402523226a02bfe5230160dc3ccc089aa6f6f19e7fcbb4e6f824bbb1b4aa62" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] + +[[package]] +name = "zvariant" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e28c25bd8bb8da5a1f3e7065d0c156b9ee9a7973adf78b0e35eaefdf3b1b5c" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.4", + "zcheapstr", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d496a145685283b67e232bd9e47377f6b60ad9d51e3601b23867f77c42477f96" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 3.0.3", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629d80ece222cad20fe0e8741be493c4ab166acf3b85341bdc2cdbcfd8f3c2d6" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 3.0.3", + "winnow 1.0.4", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..119e9d1 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] +members = ["crates/dsh-core", "src-tauri"] +resolver = "2" + +[workspace.package] +version = "0.1.0" +edition = "2021" +license = "MIT" +authors = ["TommyFang2077"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f6b1e61 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 TommyFang2077 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN ANY ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..051d673 --- /dev/null +++ b/Makefile @@ -0,0 +1,136 @@ +PYTHON ?= python3 +CARGO ?= cargo +PREFIX ?= $(HOME)/.local +APP_ID := io.github.tommyfang.DshDesktop +DSH_VERSION := 0.1.0-rc.6 +MODLENS_VERSION := 3.16.6 +ANCHORED_COMMIT := ffb845c5480adc953392a6db6f8a98ede621174b +ANCHORED_REPO := https://github.com/xiaobright/dsh-anchored-standard.git +VENDOR_DIR := vendor/dsh-prefix +MODLENS_DIR := vendor/modlens +ANCHORED_DIR := vendor/anchored-standard +ZERO_DIR := vendor/zero-anchored-standard +FLATPAK ?= flatpak +BUILDER ?= flatpak run --user org.flatpak.Builder +BUILD_DIR ?= .flatpak-build +REPO_DIR ?= .flatpak-repo +MANIFEST := flatpak/$(APP_ID).yml +VERSION := $(shell sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1) +BUNDLE := dist/$(APP_ID)-$(VERSION).flatpak +BIN := target/release/dsh-desktop + +.PHONY: all run dev test vendor vendor-native vendor-anchored build install uninstall flatpak-build flatpak-export flatpak-install flatpak-bundle flatpak-run clean + +all: test + +run: + $(CARGO) run -p dsh-desktop -- --no-update + +dev: + $(CARGO) run -p dsh-desktop -- --dev --verbose + +build: + $(CARGO) build -p dsh-desktop --release + +test: + $(CARGO) test -p dsh-core + $(PYTHON) -m unittest discover -s tests -v + +vendor: + mkdir -p vendor + rm -rf $(VENDOR_DIR) $(MODLENS_DIR) + npm install --prefix=$(CURDIR)/$(VENDOR_DIR) --global --prefer-offline --no-audit --no-fund @deepseek-ai/dsh@$(DSH_VERSION) + npm install --prefix=$(CURDIR)/$(MODLENS_DIR) --prefer-offline --no-audit --no-fund @liustack/modlens@$(MODLENS_VERSION) + $(MAKE) vendor-anchored + +vendor-native: + MODLENS_VERSION=$(MODLENS_VERSION) ANCHORED_COMMIT=$(ANCHORED_COMMIT) ANCHORED_REPO=$(ANCHORED_REPO) bash scripts/vendor-native.sh + +vendor-anchored: + rm -rf vendor/.anchored-src $(ANCHORED_DIR) $(ZERO_DIR) + mkdir -p vendor/.anchored-src + git -C vendor/.anchored-src init --initial-branch=main + git -C vendor/.anchored-src remote add origin $(ANCHORED_REPO) + git -C vendor/.anchored-src fetch --depth 1 origin $(ANCHORED_COMMIT) + git -C vendor/.anchored-src checkout --detach FETCH_HEAD + mkdir -p $(ANCHORED_DIR) $(ZERO_DIR) + cp -R vendor/.anchored-src/preset/. $(ANCHORED_DIR)/ + cp -R vendor/.anchored-src/zero-anchored-standard/. $(ZERO_DIR)/ + cp vendor/.anchored-src/LICENSE vendor/.anchored-src/NOTICE $(ANCHORED_DIR)/ + cp vendor/.anchored-src/LICENSE vendor/.anchored-src/NOTICE $(ZERO_DIR)/ + printf '%s\n' $(ANCHORED_COMMIT) > $(ANCHORED_DIR)/.dsh-desktop-source + printf '%s\n' $(ANCHORED_COMMIT) > $(ZERO_DIR)/.dsh-desktop-source + $(PYTHON) scripts/localize_preset.py $(ANCHORED_DIR)/preset.yml + $(PYTHON) scripts/localize_preset.py $(ZERO_DIR)/preset.yml zero + rm -rf vendor/.anchored-src + +install: build + install -Dm755 $(BIN) $(DESTDIR)$(PREFIX)/bin/dsh-desktop + install -Dm644 data/applications/$(APP_ID).desktop $(DESTDIR)$(PREFIX)/share/applications/$(APP_ID).desktop + install -Dm644 data/metainfo/$(APP_ID).metainfo.xml $(DESTDIR)$(PREFIX)/share/metainfo/$(APP_ID).metainfo.xml + for size in 16 24 32 48 64 128 256 512; do \ + install -Dm644 "data/icons/hicolor/$${size}x$${size}/apps/$(APP_ID).png" "$(DESTDIR)$(PREFIX)/share/icons/hicolor/$${size}x$${size}/apps/$(APP_ID).png"; \ + done + if [ -z "$(DESTDIR)" ]; then \ + update-desktop-database "$(PREFIX)/share/applications" >/dev/null 2>&1 || true; \ + fi + if [ -d $(MODLENS_DIR)/node_modules/@liustack/modlens ]; then \ + rm -rf $(DESTDIR)$(PREFIX)/share/dsh-desktop/modlens; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/dsh-desktop; \ + cp -R $(MODLENS_DIR) $(DESTDIR)$(PREFIX)/share/dsh-desktop/modlens; \ + fi + if [ -f plugins/dsh-desktop-vision/package.json ]; then \ + rm -rf $(DESTDIR)$(PREFIX)/share/dsh-desktop/vision; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/dsh-desktop; \ + cp -R plugins/dsh-desktop-vision $(DESTDIR)$(PREFIX)/share/dsh-desktop/vision; \ + fi + if [ -f $(ANCHORED_DIR)/preset.yml ]; then \ + rm -rf $(DESTDIR)$(PREFIX)/share/dsh-desktop/anchored-standard; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/dsh-desktop; \ + cp -R $(ANCHORED_DIR) $(DESTDIR)$(PREFIX)/share/dsh-desktop/anchored-standard; \ + fi + if [ -f $(ZERO_DIR)/preset.yml ]; then \ + rm -rf $(DESTDIR)$(PREFIX)/share/dsh-desktop/zero-anchored-standard; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/dsh-desktop; \ + cp -R $(ZERO_DIR) $(DESTDIR)$(PREFIX)/share/dsh-desktop/zero-anchored-standard; \ + fi + @echo "installed to $(PREFIX) — make sure $(PREFIX)/bin is on PATH" + +uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/dsh-desktop + rm -rf $(DESTDIR)$(PREFIX)/share/dsh-desktop + rm -f $(DESTDIR)$(PREFIX)/share/applications/$(APP_ID).desktop + rm -f $(DESTDIR)$(PREFIX)/share/metainfo/$(APP_ID).metainfo.xml + for size in 16 24 32 48 64 128 256 512; do \ + rm -f "$(DESTDIR)$(PREFIX)/share/icons/hicolor/$${size}x$${size}/apps/$(APP_ID).png"; \ + done + +flatpak-build: $(VENDOR_DIR)/bin/dsh $(MODLENS_DIR)/node_modules/@liustack/modlens $(ANCHORED_DIR)/preset.yml $(ZERO_DIR)/preset.yml + $(BUILDER) --user --force-clean --install-deps-from=flathub $(BUILD_DIR) $(MANIFEST) + +$(VENDOR_DIR)/bin/dsh: + $(MAKE) vendor + +$(MODLENS_DIR)/node_modules/@liustack/modlens: + $(MAKE) vendor + +$(ANCHORED_DIR)/preset.yml $(ZERO_DIR)/preset.yml: + $(MAKE) vendor-anchored + +flatpak-export: + $(FLATPAK) build-export $(REPO_DIR) $(BUILD_DIR) master + +flatpak-install: flatpak-build flatpak-export + $(FLATPAK) --user install -y "$(CURDIR)/$(REPO_DIR)" $(APP_ID) + +flatpak-bundle: flatpak-build flatpak-export + mkdir -p dist + $(FLATPAK) build-bundle $(REPO_DIR) "$(BUNDLE)" $(APP_ID) master + +flatpak-run: + $(FLATPAK) run $(APP_ID) + +clean: + $(CARGO) clean + rm -rf $(BUILD_DIR) $(REPO_DIR) build dist + find . -name __pycache__ -type d -prune -exec rm -rf {} + diff --git a/README.md b/README.md new file mode 100644 index 0000000..08c5ee5 --- /dev/null +++ b/README.md @@ -0,0 +1,215 @@ +# DeepSeek Harness Desktop + +

+ DeepSeek Harness +

+ +

+ 把官方 DeepSeek Harnessdsh)WebUI 放进原生窗口。
+ Tauri 2 壳 · 系统 WebView · 苹果风薄标题栏 · Linux / Windows / macOS +

+ +

+ CI + Release + MIT + release +

+ +本仓库是第三方桌面壳,**不包含** DeepSeek Harness 源码。官方 WebUI 由本机或 Flatpak 内的 `dsh web` 提供;升级 `dsh` 后界面跟着升级,不必重打包前端。 + +![启动页:正在启动官方 WebUI](docs/screenshots/splash.png) + +## 功能 + +| 能力 | 说明 | +| --- | --- | +| 原生窗口 | 启动 `dsh web --host 127.0.0.1 --port 0`,解析 stdout 里的随机端口,用系统 WebView 加载官方 WebUI | +| 薄标题栏 | 左侧 `•••` 菜单(重新启动 / 在浏览器中打开),右侧最小化 · 缩放 · 关闭;不再占用一排后退/前进/刷新 | +| 零重写 | 官方会话、工作区、插件、技能全部保留 | +| 内置 ModLens | 启动时写入 `~/.dsh/profiles/web`,纯文本模型自动套视觉桥 | +| 视觉设置页 | WebUI **设置 → 视觉模型** 配置引擎,写入 `~/.modlens/config.json` | +| 内置锚定预设 | **锚定式标准(实验)**、**零工具锚定式标准(实验)** 写入 `~/.dsh/.agent-presets/` | +| 生命周期 | 启动页显示状态;关窗口停掉 `dsh web`;崩溃可从标题栏重新启动 | + +![主窗口:官方 WebUI 嵌在原生壳里](docs/screenshots/session.png) + +*上图为桌面壳嵌套官方 WebUI 的界面示意(自定义标题栏为实际注入样式)。凭据、会话和插件仍在 `~/.dsh`,截图未使用真实对话记录。* + +![标题栏菜单:重新启动 / 在浏览器中打开](docs/screenshots/menu.png) + +## 内置插件与预设 + +应用启动时会把下面这些东西同步到用户目录。版本钉死在 [Makefile](Makefile);第三方原文许可证见 [docs/licenses/](docs/licenses/) 与 [THIRD_PARTY.md](THIRD_PARTY.md)。 + +### 1. DeepSeek Harness(`dsh`) + +| | | +| --- | --- | +| 上游 | [@deepseek-ai/dsh](https://www.npmjs.com/package/@deepseek-ai/dsh) · [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) | +| 当前版本 | `0.1.0-rc.6` | +| 许可证 | MIT,Copyright (c) 2026 DeepSeek · [docs/licenses/deepseek-harness.LICENSE](docs/licenses/deepseek-harness.LICENSE) | +| 本仓库 | **不 vendoring 源码**。Flatpak 构建时 `make vendor` 打进 Node 24 + npm 包;Windows / macOS / deb / rpm 运行时调用本机 `dsh` | + +解析顺序: + +1. 环境变量 `DSH_DESKTOP_DSH_BIN` +2. 命令行 `--dsh` +3. 应用自己的更新目录(`$XDG_DATA_HOME/dsh-desktop/dsh-prefix/bin/dsh`) +4. **Flatpak**:内置 `/app/bin/dsh` +5. **宿主机**:`~/.local/bin/dsh` → `~/.npm/_npx` 缓存 → `PATH` → `npx --yes @deepseek-ai/dsh` + +设 `DSH_DESKTOP_NO_UPDATE=1` 或传 `--no-update` 可关掉启动时的 npm 更新检查。 + +### 2. ModLens(`@liustack/modlens`) + +| | | +| --- | --- | +| 上游 | [liustack/modlens](https://github.com/liustack/modlens) · [npm @liustack/modlens](https://www.npmjs.com/package/@liustack/modlens) | +| 当前版本 | `3.16.6` | +| 作者 | Leon Liu / [liustack](https://github.com/liustack) | +| 许可证 | MIT · [docs/licenses/modlens.LICENSE](docs/licenses/modlens.LICENSE) | +| 作用 | 给纯文本对话模型补视觉能力(粘贴图片即可)。已声明视觉能力的模型(如 Qwen)不会走这条桥 | +| 安装位置 | 启动时复制到 `~/.dsh/profiles/web/node_modules/@liustack/modlens` | + +官方安装方式(本应用已内置,一般不必再跑): + +```bash +npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens@3.16.6 +``` + +### 3. `dsh-desktop-vision`(本仓库) + +| | | +| --- | --- | +| 路径 | [`plugins/dsh-desktop-vision/`](plugins/dsh-desktop-vision/) | +| 版本 | `0.1.4` | +| 许可证 | 与本仓库相同(MIT) | +| 作用 | 在官方 WebUI **设置 → 视觉模型** 增加表单,读写 `~/.modlens/config.json` | + +支持的引擎: + +| 引擎 | 默认接口 | 获取密钥 | +| --- | --- | --- | +| OpenAI 兼容 | `https://api.openai.com/v1` | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) | +| Gemini API | `https://generativelanguage.googleapis.com` | [aistudio.google.com/apikey](https://aistudio.google.com/apikey) | +| Anthropic | `https://api.anthropic.com` | [console.anthropic.com/settings/keys](https://console.anthropic.com/settings/keys) | +| Antigravity CLI | 本机 CLI,无需填 URL | [antigravity.google](https://antigravity.google/) | +| Claude CLI | 本机 CLI,无需填 URL | [code.claude.com](https://code.claude.com) | + +外链在系统浏览器中打开(Tauri `on_navigation`),密钥只写在本机 ModLens 配置里。 + +![设置 → 视觉模型](docs/screenshots/vision.png) + +### 4. Anchored Standard 预设 + +| | | +| --- | --- | +| 上游 | [xiaobright/dsh-anchored-standard](https://github.com/xiaobright/dsh-anchored-standard) | +| 钉选提交 | [`ffb845c5480adc953392a6db6f8a98ede621174b`](https://github.com/xiaobright/dsh-anchored-standard/commit/ffb845c5480adc953392a6db6f8a98ede621174b) | +| 作者 | [xiaobright](https://github.com/xiaobright) | +| 许可证 | MIT(含 DeepSeek 部分版权)· [LICENSE](docs/licenses/dsh-anchored-standard.LICENSE) · [NOTICE](docs/licenses/dsh-anchored-standard.NOTICE) | +| 本仓库中的名称 | **锚定式标准(实验)**、**零工具锚定式标准(实验)**(`scripts/localize_preset.py` 本地化) | +| 安装位置 | `~/.dsh/.agent-presets/anchored-standard` 与 `zero-anchored-standard` | + +NOTICE 写明:预设改编自 DeepSeek Harness Standard agent preset([deepseek-harness@47f9438](https://github.com/deepseek-ai/deepseek-harness))。这是社区实验 preset,**不是** DeepSeek 官方预设。若用户还没有默认 preset,桌面会把默认设为锚定式标准。 + +## 安装包 + +打 `v*` 标签(例如 `git tag v0.1.0 && git push origin v0.1.0`)后,[Release 工作流](.github/workflows/release.yml)会测试、打包并发布: + +| 平台 | 产物 | 运行时要求 | +| --- | --- | --- | +| Windows | NSIS `.exe`、MSI | [WebView2](https://developer.microsoft.com/microsoft-edge/webview2/)(安装器可引导下载);本机 `dsh` | +| macOS | Apple Silicon / Intel `.dmg` | 未公证,首次打开需在「系统设置 → 隐私与安全性」允许;本机 `dsh` | +| Linux | `.deb`、`.rpm` | WebKitGTK 4.1;本机 `dsh` | +| Linux | `.flatpak` | **自带** Node.js 24 与 `@deepseek-ai/dsh`,不需要本机安装 dsh | + +从 [GitHub Releases](https://github.com/TommyFang2077/dsh-desktop/releases) 下载对应文件。 + +本机 `dsh`: + +```bash +npm install -g @deepseek-ai/dsh +# 或 +npx --yes @deepseek-ai/dsh --version +``` + +## 从源码运行 + +开发依赖:Rust stable、系统 WebView。 + +- Linux:GTK 3 + WebKitGTK 4.1(Fedora:`gtk3-devel webkit2gtk4.1-devel`;Debian/Ubuntu:`libgtk-3-dev libwebkit2gtk-4.1-dev`) +- macOS:WKWebView(Xcode Command Line Tools) +- Windows:WebView2 + +```bash +git clone https://github.com/TommyFang2077/dsh-desktop.git +cd dsh-desktop +make vendor-native # ModLens + 锚定预设(Tauri 打包资源) +make run # 普通模式(跳过更新,便于开发) +make dev # 开 WebView 检查器和调试日志 +cargo run -p dsh-desktop -- --cwd ~/your-project +``` + +```bash +make test +``` + +`make install` 把二进制装到 `~/.local/bin/dsh-desktop`,应用菜单里会出现 **DeepSeek Harness**。 + +本地打原生包(先 `make vendor-native`): + +```bash +cargo tauri build --bundles deb,rpm # Linux +cargo tauri build --bundles nsis,msi # Windows +cargo tauri build --bundles app,dmg # macOS +``` + +## Flatpak + +Flatpak 是唯一把 `dsh` 打进包内的渠道。 + +```bash +flatpak remote-add --user --if-not-exists flathub \ + https://dl.flathub.org/repo/flathub.flatpakrepo +flatpak install --user -y flathub org.gnome.Sdk//47 org.flatpak.Builder \ + org.freedesktop.Sdk.Extension.rust-stable//24.08 \ + org.freedesktop.Sdk.Extension.node24//24.08 + +make vendor +make flatpak-build +make flatpak-install +make flatpak-run +make flatpak-bundle +``` + +清单:[flatpak/io.github.tommyfang.DshDesktop.yml](flatpak/io.github.tommyfang.DshDesktop.yml)。权限:网络、宿主文件系统、Wayland/X11、下载目录。 + +## 项目结构 + +```text +dsh-desktop/ +├── ui/ # 启动页 + 注入到 WebUI 的标题栏 +├── src-tauri/ # Tauri 窗口、命令、deb/rpm/nsis/dmg +├── crates/dsh-core/ # 启动 / 更新 / ModLens / 预设 / 剪贴板 +├── plugins/dsh-desktop-vision/ # 设置 → 视觉模型 +├── data/ # .desktop、图标、AppStream +├── flatpak/ +├── docs/screenshots/ # README 截图 +├── docs/licenses/ # 第三方许可证副本 +├── vendor/ # make vendor 生成(git 忽略) +├── scripts/vendor-native.sh +├── scripts/localize_preset.py +└── .github/workflows/ # 测试 + 多平台发布 +``` + +## 图标与商标 + +应用图标使用 [Icons8 上的 DeepSeek 图标](https://icons8.com/icon/YWOidjGxCpFW/deepseek)。DeepSeek 名称与鲸鱼标志归 DeepSeek 所有。本项目是独立第三方桌面壳,与 DeepSeek、ModLens、Anchored Standard 的作者均无从属关系。 + +## License + +本仓库源码为 [MIT](LICENSE),Copyright © 2026 TommyFang2077。 + +运行时还会用到上游 MIT 组件,版权仍归原作者,详见 [THIRD_PARTY.md](THIRD_PARTY.md)。 diff --git a/THIRD_PARTY.md b/THIRD_PARTY.md new file mode 100644 index 0000000..a1de674 --- /dev/null +++ b/THIRD_PARTY.md @@ -0,0 +1,34 @@ +# Third-party notices + +DeepSeek Harness Desktop (this repository) is MIT-licensed. It is a native +shell around other projects. Those projects keep their own copyright and +license. Copies of the relevant texts live in `docs/licenses/`. + +This project is **not** affiliated with, endorsed by, or maintained by +DeepSeek, liustack, or xiaobright. + +## Bundled or launched at runtime + +| Component | Upstream | Version / pin | License | How this app uses it | +| --- | --- | --- | --- | --- | +| DeepSeek Harness (`@deepseek-ai/dsh`) | [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) | `0.1.0-rc.6` | MIT, © 2026 DeepSeek | Official WebUI. Not shipped as source. Flatpak vendors the npm package; other packages call a host `dsh`. See `docs/licenses/deepseek-harness.LICENSE`. | +| ModLens (`@liustack/modlens`) | [liustack/modlens](https://github.com/liustack/modlens) | `3.16.6` | MIT, © 2026 Leon Liu (liustack) | Copied into `~/.dsh/profiles/web` so text-only models can read images. See `docs/licenses/modlens.LICENSE`. | +| Anchored Standard | [xiaobright/dsh-anchored-standard](https://github.com/xiaobright/dsh-anchored-standard) | commit `ffb845c5480adc953392a6db6f8a98ede621174b` | MIT, © 2026 xiaobright; portions © 2026 DeepSeek | Localized as **锚定式标准(实验)** and **零工具锚定式标准(实验)**, written to `~/.dsh/.agent-presets/`. See `docs/licenses/dsh-anchored-standard.LICENSE` and `.NOTICE`. | +| `dsh-desktop-vision` | this repo `plugins/dsh-desktop-vision/` | `0.1.4` | MIT, © 2026 TommyFang2077 | Settings page **设置 → 视觉模型**; writes `~/.modlens/config.json`. | + +The Anchored Standard NOTICE records that the presets adapt the DeepSeek +Harness Standard agent preset from +https://github.com/deepseek-ai/deepseek-harness +(commit `47f943859bef60e4160492346772ded9b24f765a`). + +## App icon + +The application icon is the [Icons8 DeepSeek icon](https://icons8.com/icon/YWOidjGxCpFW/deepseek). +DeepSeek and the whale mark belong to their owners. + +## Tauri and system WebView + +The window is built with [Tauri 2](https://tauri.app/) (MIT / Apache-2.0) and +the platform WebView (WebKitGTK 4.1, WKWebView, or WebView2). Those components +are linked or bundled by the respective platform toolchains, not copied into +this source tree. diff --git a/bin/dsh-desktop b/bin/dsh-desktop new file mode 100755 index 0000000..dbd0f65 --- /dev/null +++ b/bin/dsh-desktop @@ -0,0 +1,13 @@ +#!/bin/sh +# Run a built binary from the checkout, or fall back to cargo. +set -e +ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) +for candidate in \ + "$ROOT/target/release/dsh-desktop" \ + "$ROOT/target/debug/dsh-desktop" +do + if [ -x "$candidate" ]; then + exec "$candidate" "$@" + fi +done +exec cargo run --manifest-path "$ROOT/Cargo.toml" -p dsh-desktop -- "$@" diff --git a/crates/dsh-core/Cargo.toml b/crates/dsh-core/Cargo.toml new file mode 100644 index 0000000..544822a --- /dev/null +++ b/crates/dsh-core/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "dsh-core" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description = "Launcher, updater, and profile helpers for DeepSeek Harness Desktop" + +[dependencies] +base64 = "0.22" +dirs = "6" +regex = "1" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +shlex = "1" +thiserror = "2" +which = "8" + +[target.'cfg(unix)'.dependencies] +libc = "0.2" + +[dev-dependencies] +tempfile = "3" diff --git a/crates/dsh-core/src/clipboard.rs b/crates/dsh-core/src/clipboard.rs new file mode 100644 index 0000000..4922334 --- /dev/null +++ b/crates/dsh-core/src/clipboard.rs @@ -0,0 +1,227 @@ +use std::path::Path; + +use base64::Engine; +use serde::Serialize; + +pub const IMAGE_MIMES: &[&str] = &[ + "image/png", + "image/jpeg", + "image/jpg", + "image/webp", + "image/gif", + "image/bmp", + "image/tiff", +]; + +pub const INGEST_JS: &str = include_str!("../../../ui/inject/ingest.js"); + +#[derive(Debug, Clone, Serialize)] +pub struct ClipboardFile { + pub name: String, + #[serde(rename = "type")] + pub mime: String, + pub b64: String, +} + +pub fn is_image_mime(mime: &str) -> bool { + let mime = mime.split(';').next().unwrap_or(mime).trim().to_ascii_lowercase(); + let mime = if mime == "image/jpg" { + "image/jpeg" + } else { + mime.as_str() + }; + IMAGE_MIMES.contains(&mime) || mime == "image/jpeg" +} + +pub fn filename_for_mime(mime: &str, index: usize) -> String { + let mime = mime.split(';').next().unwrap_or(mime).trim().to_ascii_lowercase(); + let ext = match mime.as_str() { + "image/png" => "png", + "image/jpeg" | "image/jpg" => "jpg", + "image/webp" => "webp", + "image/gif" => "gif", + "image/bmp" => "bmp", + "image/tiff" => "tiff", + _ => "png", + }; + if index == 0 { + format!("clipboard.{ext}") + } else { + format!("clipboard-{}.{ext}", index + 1) + } +} + +pub fn build_ingest_call(files: &[ClipboardFile]) -> String { + let payload = serde_json::to_string(files).unwrap_or_else(|_| "[]".into()); + format!("window.__dshDesktopPasteFiles && window.__dshDesktopPasteFiles({payload});") +} + +pub fn parse_uri_list(payload: &str) -> Vec { + let mut paths = Vec::new(); + for raw in payload.lines() { + let line = raw.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + if let Some(rest) = line.strip_prefix("file:") { + if let Ok(url) = url_parse_file(rest) { + paths.push(url); + } + } else if line.starts_with('/') { + paths.push(line.to_string()); + } + } + paths +} + +fn url_parse_file(rest: &str) -> Result { + // file:///home/me/Pictures/shot.png or file://localhost/home/... + let uri = if rest.starts_with("//") { + format!("file:{rest}") + } else { + format!("file:{rest}") + }; + let decoded = percent_decode(&uri); + if let Some(idx) = decoded.find("://") { + let after = &decoded[idx + 3..]; + let path = after + .strip_prefix("localhost") + .unwrap_or(after); + return Ok(path.to_string()); + } + if let Some(path) = decoded.strip_prefix("file:") { + return Ok(path.to_string()); + } + Ok(decoded) +} + +fn percent_decode(input: &str) -> String { + let bytes = input.as_bytes(); + let mut out = Vec::with_capacity(bytes.len()); + let mut i = 0; + while i < bytes.len() { + if bytes[i] == b'%' && i + 2 < bytes.len() { + if let Ok(v) = u8::from_str_radix(std::str::from_utf8(&bytes[i + 1..i + 3]).unwrap_or(""), 16) + { + out.push(v); + i += 3; + continue; + } + } + out.push(bytes[i]); + i += 1; + } + String::from_utf8_lossy(&out).into_owned() +} + +pub fn files_from_paths(paths: I) -> Vec +where + I: IntoIterator, + S: AsRef, +{ + let mut out = Vec::new(); + for (index, raw) in paths.into_iter().enumerate() { + let path = Path::new(raw.as_ref()); + if !path.is_file() { + continue; + } + let suffix = path + .extension() + .and_then(|s| s.to_str()) + .unwrap_or("") + .to_ascii_lowercase(); + let mime = match suffix.as_str() { + "png" => "image/png", + "jpg" | "jpeg" => "image/jpeg", + "webp" => "image/webp", + "gif" => "image/gif", + "bmp" => "image/bmp", + "tif" | "tiff" => "image/tiff", + _ => continue, + }; + let Ok(data) = std::fs::read(path) else { + continue; + }; + if data.is_empty() { + continue; + } + let name = path + .file_name() + .and_then(|s| s.to_str()) + .map(|s| s.to_string()) + .unwrap_or_else(|| filename_for_mime(mime, index)); + out.push(ClipboardFile { + name, + mime: mime.to_string(), + b64: base64::engine::general_purpose::STANDARD.encode(data), + }); + } + out +} + +pub fn file_from_bytes(name: String, mime: String, data: Vec) -> Option { + if data.is_empty() || !is_image_mime(&mime) { + return None; + } + Some(ClipboardFile { + name, + mime: mime.split(';').next().unwrap_or(&mime).trim().to_string(), + b64: base64::engine::general_purpose::STANDARD.encode(data), + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn mime_and_filename() { + assert!(is_image_mime("image/png")); + assert!(is_image_mime("image/jpeg; charset=binary")); + assert!(is_image_mime("image/jpg")); + assert!(!is_image_mime("text/plain")); + assert_eq!(filename_for_mime("image/png", 0), "clipboard.png"); + assert_eq!(filename_for_mime("image/jpeg", 1), "clipboard-2.jpg"); + } + + #[test] + fn ingest_js_defines_helper() { + assert!(INGEST_JS.contains("window.__dshDesktopPasteFiles")); + assert!(INGEST_JS.contains("DragEvent")); + assert!(INGEST_JS.contains("new File")); + assert!(INGEST_JS.contains("text/uri-list")); + } + + #[test] + fn build_ingest_call_embeds_payload() { + let files = [ClipboardFile { + name: "shot.png".into(), + mime: "image/png".into(), + b64: base64::engine::general_purpose::STANDARD.encode(b"\x89PNG"), + }]; + let script = build_ingest_call(&files); + assert!(script.contains("__dshDesktopPasteFiles")); + assert!(script.contains("shot.png")); + assert!(script.contains("image/png")); + assert!(!script.contains(", \"hi\"")); + } + + #[test] + fn parse_file_uri() { + let payload = "# comment\nfile:///home/me/Pictures/shot.png\n"; + assert_eq!( + parse_uri_list(payload), + vec!["/home/me/Pictures/shot.png".to_string()] + ); + } + + #[test] + fn parse_plain_path() { + assert_eq!(parse_uri_list("/tmp/a.jpg"), vec!["/tmp/a.jpg".to_string()]); + } + + #[test] + fn skips_non_images() { + assert!(files_from_paths(["/no/such/file.txt"]).is_empty()); + } +} diff --git a/crates/dsh-core/src/launcher.rs b/crates/dsh-core/src/launcher.rs new file mode 100644 index 0000000..1d0eaca --- /dev/null +++ b/crates/dsh-core/src/launcher.rs @@ -0,0 +1,437 @@ +use std::collections::VecDeque; +use std::io::{BufRead, BufReader}; +use std::path::{Path, PathBuf}; +use std::process::{Child, Command, Stdio}; +use std::sync::{Arc, Mutex}; +use std::thread; +use std::time::Instant; + +use regex::Regex; +use thiserror::Error; + +use crate::paths::{home_dir, is_flatpak}; +use crate::updater::update_dsh_bin; +use crate::{ENV_BIN_OVERRIDE, ENV_CWD_OVERRIDE}; + +pub const DSH_DEFAULT_HOST: &str = "127.0.0.1"; +pub const URL_TIMEOUT_SECONDS: u64 = 120; + +#[derive(Debug, Error)] +pub enum DshNotFound { + #[error("{0}")] + Message(String), +} + +impl DshNotFound { + fn new(msg: impl Into) -> Self { + Self::Message(msg.into()) + } +} + +pub fn strip_ansi(text: &str) -> String { + let re = Regex::new(r"\x1b\[[0-9;?]*[ -/]*[@-~]").expect("ansi regex"); + re.replace_all(text, "").into_owned() +} + +pub fn parse_dsh_url(line: &str) -> Option { + let re = Regex::new(r"https?://(?:\[[0-9a-fA-F:]+\]|[^/\s:]+)(?::\d+)?(?:/[^\s]*)?") + .expect("url regex"); + re.find(&strip_ansi(line)).map(|m| m.as_str().to_string()) +} + +pub fn default_workspace() -> PathBuf { + if let Ok(raw) = std::env::var(ENV_CWD_OVERRIDE) { + if !raw.is_empty() { + return PathBuf::from(&raw) + .canonicalize() + .unwrap_or_else(|_| PathBuf::from(raw)); + } + } + if is_flatpak() { + return home_dir(); + } + std::env::current_dir().unwrap_or_else(|_| home_dir()) +} + +pub fn find_npx_dsh_bins() -> Vec { + let pattern = home_dir().join(".npm/_npx/*/node_modules/.bin/dsh"); + let mut bins = Vec::new(); + if let Some(globbed) = pattern.to_str() { + if let Ok(paths) = glob_simple(globbed) { + for path in paths { + if is_executable(&path) { + bins.push(path); + } + } + } + } + bins.sort_by_key(|p| std::fs::metadata(p).and_then(|m| m.modified()).ok()); + bins.reverse(); + bins +} + +fn glob_simple(pattern: &str) -> std::io::Result> { + // Only the `_npx/*/` segment is a wildcard. + let Some((prefix, rest)) = pattern.split_once('*') else { + return Ok(vec![PathBuf::from(pattern)]); + }; + let suffix = rest.trim_start_matches('/'); + let parent = Path::new(prefix); + let mut out = Vec::new(); + if parent.is_dir() { + for entry in std::fs::read_dir(parent)? { + let entry = entry?; + let candidate = entry.path().join(suffix); + if candidate.is_file() { + out.push(candidate); + } + } + } + Ok(out) +} + +pub struct DshLauncher { + dsh_bin_override: Option, + in_flatpak: bool, + pub workspace: PathBuf, +} + +impl DshLauncher { + pub fn new(dsh_bin: Option, workspace: Option) -> Self { + Self { + dsh_bin_override: dsh_bin, + in_flatpak: is_flatpak(), + workspace: workspace.unwrap_or_else(default_workspace), + } + } + + pub fn resolve(&self) -> Result, DshNotFound> { + let mut candidates: Vec> = Vec::new(); + + if let Ok(env_override) = std::env::var(ENV_BIN_OVERRIDE) { + if !env_override.is_empty() { + let parts = shlex::split(&env_override).ok_or_else(|| { + DshNotFound::new(format!("{ENV_BIN_OVERRIDE} 不是合法的命令")) + })?; + candidates.push(parts); + } + } + if let Some(cli) = &self.dsh_bin_override { + let parts = shlex::split(cli) + .ok_or_else(|| DshNotFound::new("dsh 命令不是合法的命令"))?; + candidates.push(parts); + } + + let updated = update_dsh_bin(); + if is_executable(&updated) { + candidates.push(vec![updated.to_string_lossy().into_owned()]); + } + + if self.in_flatpak { + if let Some(bundled) = which::which("dsh").ok() { + candidates.push(vec![bundled.to_string_lossy().into_owned()]); + } + for path in crate::updater::BUNDLED_DSH { + let path = PathBuf::from(path); + if is_executable(&path) + && candidates + .first() + .and_then(|c| c.first()) + .map(|s| s.as_str()) + != Some(path.to_string_lossy().as_ref()) + { + candidates.push(vec![path.to_string_lossy().into_owned()]); + } + } + } else { + let local_bin = dsh_bin_name(&home_dir().join(".local/bin")); + if is_executable(&local_bin) { + candidates.push(vec![local_bin.to_string_lossy().into_owned()]); + } + if let Some(cached) = find_npx_dsh_bins().into_iter().next() { + candidates.push(vec![cached.to_string_lossy().into_owned()]); + } + if let Ok(host) = which::which("dsh") { + candidates.push(vec![host.to_string_lossy().into_owned()]); + } + if which::which("npx").is_ok() { + candidates.push(vec![ + "npx".into(), + "--yes".into(), + "@deepseek-ai/dsh".into(), + ]); + } + } + + let chosen = candidates.into_iter().next().ok_or_else(|| { + if self.in_flatpak { + DshNotFound::new( + "此 Flatpak 没有内置 dsh 可执行文件。\n请重新构建/安装 io.github.tommyfang.DshDesktop。", + ) + } else { + DshNotFound::new( + "找不到 DeepSeek Harness (dsh),也没有可用的 npx。\n请先安装:npm install -g @deepseek-ai/dsh\n或用 DSH_DESKTOP_DSH_BIN 指定 dsh 的完整路径。", + ) + } + })?; + Ok(chosen) + } + + pub fn web_argv(&self) -> Result, DshNotFound> { + let mut argv = self.resolve()?; + argv.extend([ + "web".into(), + "--host".into(), + DSH_DEFAULT_HOST.into(), + "--port".into(), + "0".into(), + ]); + Ok(argv) + } + + pub fn start(&self) -> Result { + let argv = self.web_argv()?; + let mut cmd = Command::new(&argv[0]); + cmd.args(&argv[1..]) + .current_dir(&self.workspace) + .stdout(Stdio::piped()) + .stderr(Stdio::inherit()) + .stdin(Stdio::null()); + #[cfg(unix)] + { + use std::os::unix::process::CommandExt; + cmd.process_group(0); + } + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + const CREATE_NEW_PROCESS_GROUP: u32 = 0x00000200; + cmd.creation_flags(CREATE_NEW_PROCESS_GROUP); + } + let mut child = cmd.spawn().map_err(|exc| { + DshNotFound::new(format!("无法启动 dsh web: {exc}")) + })?; + let stdout = child.stdout.take(); + Ok(DshProcess::new(child, stdout, self.in_flatpak)) + } +} + +fn dsh_bin_name(dir: &Path) -> PathBuf { + #[cfg(windows)] + { + let cmd = dir.join("dsh.cmd"); + if cmd.is_file() { + return cmd; + } + } + dir.join("dsh") +} + +pub fn is_executable(path: &Path) -> bool { + if !path.is_file() { + return false; + } + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + std::fs::metadata(path) + .map(|m| m.permissions().mode() & 0o111 != 0) + .unwrap_or(false) + } + #[cfg(windows)] + { + true + } +} + +pub struct DshProcess { + child: Arc>, + pub in_flatpak: bool, + pub url: Arc>>, + pub lines: Arc>>, + pub started_at: Instant, +} + +impl DshProcess { + fn new(child: Child, stdout: Option, in_flatpak: bool) -> Self { + let proc = Self { + child: Arc::new(Mutex::new(child)), + in_flatpak, + url: Arc::new(Mutex::new(None)), + lines: Arc::new(Mutex::new(VecDeque::with_capacity(400))), + started_at: Instant::now(), + }; + if let Some(stdout) = stdout { + let lines = Arc::clone(&proc.lines); + let url = Arc::clone(&proc.url); + thread::spawn(move || { + let reader = BufReader::new(stdout); + for line in reader.lines() { + let Ok(line) = line else { break }; + let clean = strip_ansi(&line); + let trimmed = clean.trim_end(); + if !trimmed.is_empty() { + if let Ok(mut buf) = lines.lock() { + if buf.len() == 400 { + buf.pop_front(); + } + buf.push_back(trimmed.to_string()); + } + } + if let Some(found) = parse_dsh_url(&line) { + if let Ok(mut slot) = url.lock() { + if slot.is_none() { + *slot = Some(found); + } + } + } + } + }); + } + proc + } + + pub fn poll(&self) -> Option { + self.child + .lock() + .ok() + .and_then(|mut child| child.try_wait().ok().flatten().and_then(|s| s.code())) + } + + pub fn take_url(&self) -> Option { + self.url.lock().ok().and_then(|g| g.clone()) + } + + pub fn snapshot_lines(&self) -> Vec { + self.lines + .lock() + .map(|g| g.iter().cloned().collect()) + .unwrap_or_default() + } + + pub fn stop(&self) { + let Ok(mut child) = self.child.lock() else { + return; + }; + if child.try_wait().ok().flatten().is_some() { + return; + } + let pid = child.id(); + #[cfg(unix)] + unsafe { + libc::killpg(pid as i32, libc::SIGTERM); + } + #[cfg(windows)] + { + let _ = child.kill(); + } + let start = Instant::now(); + while start.elapsed() < std::time::Duration::from_secs(3) { + if child.try_wait().ok().flatten().is_some() { + return; + } + thread::sleep(std::time::Duration::from_millis(50)); + } + #[cfg(unix)] + unsafe { + libc::killpg(pid as i32, libc::SIGKILL); + } + let _ = child.kill(); + let _ = child.wait(); + } +} + +impl Drop for DshProcess { + fn drop(&mut self) { + self.stop(); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + static ENV_LOCK: Mutex<()> = Mutex::new(()); + + #[test] + fn parse_ipv4_url() { + assert_eq!( + parse_dsh_url("dsh web: http://127.0.0.1:39095"), + Some("http://127.0.0.1:39095".into()) + ); + } + + #[test] + fn parse_ipv6_url() { + assert_eq!( + parse_dsh_url("dsh web: http://[::1]:39096"), + Some("http://[::1]:39096".into()) + ); + } + + #[test] + fn parse_url_with_trailing_text() { + assert_eq!( + parse_dsh_url("booted profile web on http://127.0.0.1:39095 (ready)"), + Some("http://127.0.0.1:39095".into()) + ); + } + + #[test] + fn parse_no_url() { + assert_eq!(parse_dsh_url("waiting for network…"), None); + } + + #[test] + fn strip_ansi_codes() { + assert_eq!(strip_ansi("\x1b[36mhttp://x\x1b[0m"), "http://x"); + } + + #[test] + fn workspace_uses_env_override() { + let _guard = ENV_LOCK.lock().unwrap(); + std::env::set_var(ENV_CWD_OVERRIDE, "/tmp/some-workspace"); + let ws = default_workspace(); + std::env::remove_var(ENV_CWD_OVERRIDE); + assert!(ws.ends_with("some-workspace") || ws == PathBuf::from("/tmp/some-workspace")); + } + + #[test] + fn env_override_wins() { + let _guard = ENV_LOCK.lock().unwrap(); + std::env::set_var(ENV_BIN_OVERRIDE, "echo"); + let argv = DshLauncher::new(None, None).resolve().unwrap(); + std::env::remove_var(ENV_BIN_OVERRIDE); + assert_eq!(argv, vec!["echo"]); + } + + #[test] + fn invalid_env_override_raises() { + let _guard = ENV_LOCK.lock().unwrap(); + std::env::set_var(ENV_BIN_OVERRIDE, "'unterminated"); + let err = DshLauncher::new(None, None).resolve(); + std::env::remove_var(ENV_BIN_OVERRIDE); + assert!(err.is_err()); + } + + #[test] + fn cli_override() { + let _guard = ENV_LOCK.lock().unwrap(); + std::env::remove_var(ENV_BIN_OVERRIDE); + let argv = DshLauncher::new(Some("/opt/dsh/bin/dsh".into()), None) + .resolve() + .unwrap(); + assert_eq!(argv, vec!["/opt/dsh/bin/dsh"]); + } + + #[test] + fn web_argv_shape() { + let _guard = ENV_LOCK.lock().unwrap(); + std::env::set_var(ENV_BIN_OVERRIDE, "dsh-test"); + let argv = DshLauncher::new(None, None).web_argv().unwrap(); + std::env::remove_var(ENV_BIN_OVERRIDE); + assert_eq!(&argv[0..4], ["dsh-test", "web", "--host", "127.0.0.1"]); + assert!(argv.contains(&"--port".into())); + assert_eq!(argv.last().map(String::as_str), Some("0")); + } +} diff --git a/crates/dsh-core/src/lib.rs b/crates/dsh-core/src/lib.rs new file mode 100644 index 0000000..f020855 --- /dev/null +++ b/crates/dsh-core/src/lib.rs @@ -0,0 +1,21 @@ +//! Shared desktop-shell logic for DeepSeek Harness Desktop. +//! +//! This crate has no GUI dependency. The Tauri (or any other) shell starts +//! `dsh web`, keeps the bundled plugins/presets current, and embeds the +//! official WebUI. + +pub mod clipboard; +pub mod launcher; +pub mod modlens; +pub mod paths; +pub mod preset; +pub mod updater; + +pub const APP_ID: &str = "io.github.tommyfang.DshDesktop"; +pub const APP_NAME: &str = "DeepSeek Harness"; +pub const APP_SUMMARY: &str = "Desktop shell for DeepSeek Harness"; +pub const VERSION: &str = env!("CARGO_PKG_VERSION"); + +pub const ENV_BIN_OVERRIDE: &str = "DSH_DESKTOP_DSH_BIN"; +pub const ENV_CWD_OVERRIDE: &str = "DSH_DESKTOP_CWD"; +pub const ENV_NO_UPDATE: &str = "DSH_DESKTOP_NO_UPDATE"; diff --git a/crates/dsh-core/src/modlens.rs b/crates/dsh-core/src/modlens.rs new file mode 100644 index 0000000..67bcd30 --- /dev/null +++ b/crates/dsh-core/src/modlens.rs @@ -0,0 +1,473 @@ +use std::collections::BTreeMap; +use std::path::{Path, PathBuf}; + +use regex::Regex; +use serde_json::{json, Value}; + +use crate::paths::{copy_tree, dsh_home, replace_symlink, BundledPaths}; + +pub const PACKAGE: &str = "@liustack/modlens"; +pub const VISION_PACKAGE: &str = "dsh-desktop-vision"; +pub const MODLENS_VERSION: &str = "3.16.6"; +pub const HIDE_PLAIN_TWINS_JS: &str = include_str!("../../../ui/inject/hide-twins.js"); + +pub const MANAGED_OVERLAY: &str = "\ +# dsh-desktop manages this modlens overlay (wrap every text-only model). +- id: modlens + config: + autoRead: true + families: + - \"\" +"; + +const OFFICIAL_TEXT_PROVIDERS: &[(&str, &str)] = &[ + ("deepseek-official", "deepseek-modlens"), + ("deepseek", "deepseek-modlens"), +]; + +#[derive(Debug, Clone)] +pub struct ModlensEnsureResult { + pub status: &'static str, + pub version: Option, + pub message: String, +} + +pub fn web_profile_dir() -> PathBuf { + dsh_home().join("profiles/web") +} + +fn package_dir(prefix: &Path) -> PathBuf { + prefix.join("node_modules/@liustack/modlens") +} + +pub fn read_modlens_version(prefix: &Path) -> Option { + let text = std::fs::read_to_string(package_dir(prefix).join("package.json")).ok()?; + let data: Value = serde_json::from_str(&text).ok()?; + data.get("version") + .and_then(|v| v.as_str()) + .map(|s| s.to_string()) +} + +pub fn bundled_vision_plugin(paths: &BundledPaths) -> Option { + paths + .find_dir("vision", "package.json") + .or_else(|| paths.find_dir("dsh-desktop-vision", "package.json")) + .or_else(|| paths.find_dir("plugins/dsh-desktop-vision", "package.json")) + .filter(|p| p.join("client.js").is_file()) +} + +pub fn bundled_modlens_prefix(paths: &BundledPaths) -> Option { + paths + .find_dir("modlens", "node_modules/@liustack/modlens") + .or_else(|| paths.find_dir("vendor/modlens", "node_modules/@liustack/modlens")) +} + +fn install_into_profile(src_prefix: &Path, profile: &Path) -> std::io::Result<()> { + let dest_pkg = package_dir(profile); + copy_tree(&package_dir(src_prefix), &dest_pkg, true)?; + let dest_nm = profile.join("node_modules"); + let src_nm = src_prefix.join("node_modules"); + for dep in ["commander", "undici"] { + let src_dep = src_nm.join(dep); + if src_dep.is_dir() { + copy_tree(&src_dep, &dest_nm.join(dep), true)?; + } + } + let fallback = dsh_home().join("profiles/node_modules/@liustack/modlens"); + let _ = replace_symlink(&fallback, &dest_pkg); + Ok(()) +} + +fn read_pkg_version(dir: &Path) -> Option { + let text = std::fs::read_to_string(dir.join("package.json")).ok()?; + let data: Value = serde_json::from_str(&text).ok()?; + data.get("version") + .and_then(|v| v.as_str()) + .map(|s| s.to_string()) +} + +fn install_vision_plugin(paths: &BundledPaths, profile: &Path) -> bool { + let Some(src) = bundled_vision_plugin(paths) else { + return false; + }; + let dest = profile.join("node_modules").join(VISION_PACKAGE); + let up_to_date = dest.join("client.js").is_file() + && dest.join("index.js").is_file() + && read_pkg_version(&dest) == read_pkg_version(&src); + if !up_to_date && copy_tree(&src, &dest, true).is_err() { + return false; + } + let fallback = dsh_home().join("profiles/node_modules").join(VISION_PACKAGE); + let _ = replace_symlink(&fallback, &dest); + true +} + +fn ensure_manifest(profile: &Path, packages: &BTreeMap) -> std::io::Result<()> { + let path = profile.join("package.json"); + let mut data = if path.is_file() { + serde_json::from_str(&std::fs::read_to_string(&path)?).unwrap_or_else(|_| json!({})) + } else { + json!({ + "name": "dsh-profile-web", + "private": true, + "dsh": {"profile": {"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app"]}} + }) + }; + { + let obj = data.as_object_mut().unwrap(); + obj.entry("dependencies").or_insert_with(|| json!({})); + let dsh = obj.entry("dsh").or_insert_with(|| json!({})); + let profile_meta = dsh + .as_object_mut() + .unwrap() + .entry("profile") + .or_insert_with(|| json!({})); + let bundles = profile_meta + .as_object_mut() + .unwrap() + .entry("bundles") + .or_insert_with(|| json!(["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app"])); + if !bundles.is_array() { + *bundles = json!(["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app"]); + } + } + for (name, version) in packages { + data["dependencies"][name] = json!(version); + let arr = data["dsh"]["profile"]["bundles"].as_array_mut().unwrap(); + if !arr.iter().any(|v| v.as_str() == Some(name)) { + arr.push(json!(name)); + } + } + if let Some(parent) = path.parent() { + std::fs::create_dir_all(parent)?; + } + std::fs::write(path, serde_json::to_string_pretty(&data)? + "\n") +} + +pub fn ensure_modlens_overlay(text: &str) -> String { + let body = text.replace("\r\n", "\n"); + let stripped = body.trim(); + if stripped.is_empty() || stripped == "[]" || stripped == "#" { + return MANAGED_OVERLAY.to_string(); + } + let re = Regex::new(r"(?m)^- id:\s*modlens\s*$").unwrap(); + if re.is_match(&body) { + return patch_existing_modlens_entry(&body); + } + let mut body = body; + if !body.ends_with('\n') { + body.push('\n'); + } + body.push('\n'); + body.push_str(MANAGED_OVERLAY); + body +} + +fn patch_existing_modlens_entry(body: &str) -> String { + let lines: Vec<&str> = body.split('\n').collect(); + let mut start = None; + let start_re = Regex::new(r"^- id:\s*modlens\s*$").unwrap(); + for (index, line) in lines.iter().enumerate() { + if start_re.is_match(line) { + start = Some(index); + break; + } + } + let Some(start) = start else { + let mut out = body.trim_end().to_string(); + out.push_str("\n\n"); + out.push_str(MANAGED_OVERLAY); + return out; + }; + let mut end = lines.len(); + for (index, line) in lines.iter().enumerate().skip(start + 1) { + if line.starts_with("- ") && !line.starts_with(' ') { + end = index; + break; + } + } + let block: Vec = lines[start..end].iter().map(|s| (*s).to_string()).collect(); + let new_block = force_wrap_all_config(block).join("\n"); + let new_block = new_block.trim_end(); + let mut out = String::new(); + out.push_str(&lines[..start].join("\n")); + if start > 0 && !out.ends_with('\n') && !out.is_empty() { + out.push('\n'); + } + // reconstruct like Python: lines[:start] + new_block.split + lines[end:] + let mut combined: Vec = lines[..start].iter().map(|s| (*s).to_string()).collect(); + combined.extend(new_block.split('\n').map(|s| s.to_string())); + combined.extend(lines[end..].iter().map(|s| (*s).to_string())); + let mut text = combined.join("\n"); + text = text.trim_end().to_string(); + text.push('\n'); + text +} + +fn force_wrap_all_config(block: Vec) -> Vec { + let config_re = Regex::new(r"^\s+config:\s*$").unwrap(); + let mut block = block; + if !block.iter().any(|line| config_re.is_match(line)) { + block.push(" config:".into()); + } + let mut stripped = Vec::new(); + let mut skipping_families = false; + let families_re = Regex::new(r"^\s+families:\s*").unwrap(); + let item_re = Regex::new(r"^\s+- ").unwrap(); + for line in block { + if skipping_families { + if item_re.is_match(&line) || line.trim().is_empty() { + continue; + } + skipping_families = false; + } + if families_re.is_match(&line) { + skipping_families = true; + continue; + } + stripped.push(line); + } + let autoread_re = Regex::new(r"^\s+autoRead:\s*").unwrap(); + let has_autoread = stripped.iter().any(|line| autoread_re.is_match(line)); + let mut out = Vec::new(); + let mut inserted = false; + for line in stripped { + if autoread_re.is_match(&line) { + let replaced = Regex::new(r"^(\s+autoRead:\s*).*$") + .unwrap() + .replace(&line, "${1}true"); + out.push(replaced.into_owned()); + out.push(" families:".into()); + out.push(" - \"\"".into()); + inserted = true; + continue; + } + let is_config = config_re.is_match(&line); + out.push(line); + if is_config && !has_autoread && !inserted { + out.push(" autoRead: true".into()); + out.push(" families:".into()); + out.push(" - \"\"".into()); + inserted = true; + } + } + if !inserted { + out.push(" autoRead: true".into()); + out.push(" families:".into()); + out.push(" - \"\"".into()); + } + out +} + +pub fn remap_default_text_model(settings_text: &str) -> String { + let mut text = settings_text.to_string(); + if !text.ends_with('\n') { + text.push('\n'); + } + let re = Regex::new(r"(?m)^(agent-default-model:\n(?: .*\n)*)").unwrap(); + let Some(caps) = re.captures(&text) else { + return settings_text.to_string(); + }; + let block = caps.get(1).unwrap().as_str().to_string(); + let provider_re = Regex::new(r"(?m)^ provider:\s*(\S+)\s*$").unwrap(); + let Some(provider) = provider_re.captures(&block) else { + return settings_text.to_string(); + }; + let current = provider[1].trim_matches(|c| c == '"' || c == '\''); + let Some((_, wrapped)) = OFFICIAL_TEXT_PROVIDERS.iter().find(|(k, _)| *k == current) else { + return settings_text.to_string(); + }; + let new_block = Regex::new(r"(?m)^( provider:\s*)\S+\s*$") + .unwrap() + .replacen(&block, 1, format!("${{1}}{wrapped}")); + let start = caps.get(1).unwrap().start(); + let end = caps.get(1).unwrap().end(); + let mut out = String::new(); + out.push_str(&text[..start]); + out.push_str(&new_block); + out.push_str(&text[end..]); + if !settings_text.ends_with('\n') && out.ends_with('\n') { + // keep a trailing newline; Python operated on the padded copy + } + out +} + +pub fn ensure_modlens(paths: &BundledPaths) -> ModlensEnsureResult { + let src = bundled_modlens_prefix(paths); + let profile = web_profile_dir(); + let installed = read_modlens_version(&profile); + let version = src + .as_ref() + .and_then(|p| read_modlens_version(p)) + .or_else(|| installed.clone()) + .unwrap_or_else(|| MODLENS_VERSION.to_string()); + + match ensure_modlens_inner(paths, src.as_deref(), &profile, installed, &version) { + Ok(result) => result, + Err(exc) => ModlensEnsureResult { + status: "failed", + version: Some(version), + message: format!("内置 ModLens 安装失败:{exc}"), + }, + } +} + +fn ensure_modlens_inner( + paths: &BundledPaths, + src: Option<&Path>, + profile: &Path, + installed: Option, + version: &str, +) -> std::io::Result { + std::fs::create_dir_all(profile)?; + let vision_ok = install_vision_plugin(paths, profile); + let mut packages = BTreeMap::new(); + if vision_ok { + packages.insert(VISION_PACKAGE.to_string(), "0.1.0".into()); + } + if src.is_none() && installed.is_none() { + if !packages.is_empty() { + ensure_manifest(profile, &packages)?; + } + return Ok(ModlensEnsureResult { + status: "skipped", + version: None, + message: "未找到内置 ModLens,跳过插件安装".into(), + }); + } + let installed_after = if let Some(src) = src { + if installed.as_deref() != Some(version) { + install_into_profile(src, profile)?; + read_modlens_version(profile).unwrap_or_else(|| version.to_string()) + } else { + installed.clone().unwrap_or_else(|| version.to_string()) + } + } else { + installed.clone().unwrap_or_else(|| version.to_string()) + }; + packages.insert(PACKAGE.to_string(), installed_after.clone()); + ensure_manifest(profile, &packages)?; + let patch = profile.join("cordis.patch.yml"); + let previous = if patch.is_file() { + std::fs::read_to_string(&patch)? + } else { + String::new() + }; + let updated = ensure_modlens_overlay(&previous); + if updated != previous { + std::fs::write(&patch, updated)?; + } + let settings = dsh_home().join("settings.yaml"); + if settings.is_file() { + let original = std::fs::read_to_string(&settings)?; + let remapped = remap_default_text_model(&original); + if remapped != original { + std::fs::write(&settings, remapped)?; + } + } + if src.is_none() { + return Ok(ModlensEnsureResult { + status: "current", + version: Some(installed_after.clone()), + message: format!("已配置已安装的 ModLens {installed_after}(纯文本自动套视觉桥)"), + }); + } + if installed.as_deref() == Some(version) { + return Ok(ModlensEnsureResult { + status: "current", + version: Some(version.to_string()), + message: format!("内置 ModLens {version} 已就绪"), + }); + } + if installed.is_some() { + return Ok(ModlensEnsureResult { + status: "updated", + version: Some(version.to_string()), + message: format!("已将内置 ModLens 更新到 {version}"), + }); + } + Ok(ModlensEnsureResult { + status: "installed", + version: Some(version.to_string()), + message: format!("已启用内置 ModLens {version}"), + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn empty_file_gets_managed_overlay() { + let text = ensure_modlens_overlay(""); + assert!(text.contains("id: modlens")); + assert!(text.contains("autoRead: true")); + assert!(text.contains("families:")); + assert!(text.contains("- \"\"")); + } + + #[test] + fn existing_modlens_gains_wrap_all_families() { + let text = ensure_modlens_overlay("- id: modlens\n config:\n autoRead: true\n"); + assert!(text.contains("autoRead: true")); + assert!(text.contains(" - \"\"")); + } + + #[test] + fn replaces_narrow_families() { + let original = "\ +- id: modlens + config: + autoRead: true + families: + - deepseek + - glm +"; + let text = ensure_modlens_overlay(original); + assert!(!text.contains("deepseek")); + assert!(!text.contains("glm")); + assert!(text.contains("- \"\"")); + } + + #[test] + fn keeps_other_entries() { + let original = "- id: other\n config:\n x: 1\n- id: modlens\n config:\n autoRead: false\n"; + let text = ensure_modlens_overlay(original); + assert!(text.contains("id: other")); + assert!(text.contains("autoRead: true")); + assert!(text.contains(" - \"\"")); + } + + #[test] + fn official_deepseek_becomes_modlens() { + let original = "\ +agent-default-model: + provider: deepseek-official + model: deepseek-v4-pro +ui-theme: + preference: dark +"; + let updated = remap_default_text_model(original); + assert!(updated.contains("provider: deepseek-modlens")); + assert!(updated.contains("model: deepseek-v4-pro")); + assert!(updated.contains("preference: dark")); + } + + #[test] + fn qwen_is_left_alone() { + let original = "agent-default-model:\n provider: qwen\n model: qwen-agent\n"; + assert_eq!(remap_default_text_model(original), original); + } + + #[test] + fn already_wrapped_is_left_alone() { + let original = "agent-default-model:\n provider: deepseek-modlens\n model: deepseek-v4-pro\n"; + assert_eq!(remap_default_text_model(original), original); + } + + #[test] + fn hide_twins_script_targets_suffix() { + assert!(HIDE_PLAIN_TWINS_JS.contains("(modlens vision)")); + assert!(HIDE_PLAIN_TWINS_JS.contains("MutationObserver")); + } +} diff --git a/crates/dsh-core/src/paths.rs b/crates/dsh-core/src/paths.rs new file mode 100644 index 0000000..e191b46 --- /dev/null +++ b/crates/dsh-core/src/paths.rs @@ -0,0 +1,179 @@ +use std::env; +use std::path::{Path, PathBuf}; + +/// XDG-style data directory (`~/.local/share` on Linux). +pub fn data_home() -> PathBuf { + if let Some(raw) = env::var_os("XDG_DATA_HOME") { + if !raw.is_empty() { + return PathBuf::from(raw); + } + } + dirs::data_dir().unwrap_or_else(|| home_dir().join(".local/share")) +} + +/// XDG-style cache directory (`~/.cache` on Linux). +pub fn cache_home() -> PathBuf { + if let Some(raw) = env::var_os("XDG_CACHE_HOME") { + if !raw.is_empty() { + return PathBuf::from(raw); + } + } + dirs::cache_dir().unwrap_or_else(|| home_dir().join(".cache")) +} + +pub fn home_dir() -> PathBuf { + dirs::home_dir().unwrap_or_else(|| PathBuf::from(".")) +} + +pub fn dsh_home() -> PathBuf { + if let Some(raw) = env::var_os("DSH_HOME") { + if !raw.is_empty() { + return PathBuf::from(raw); + } + } + home_dir().join(".dsh") +} + +pub fn downloads_dir() -> PathBuf { + dirs::download_dir().unwrap_or_else(|| home_dir().join("Downloads")) +} + +pub fn is_flatpak() -> bool { + Path::new("/.flatpak-info").exists() +} + +/// Roots that may contain bundled ModLens / presets / vision plugin. +/// +/// Search order: extra roots (Tauri resource dir), `$XDG_DATA_HOME/dsh-desktop`, +/// `/app/share/dsh-desktop`, `/usr/share/dsh-desktop`, `~/.local/share/dsh-desktop`, +/// then the source-tree `vendor/` / `plugins/` next to the executable or crate. +#[derive(Debug, Clone, Default)] +pub struct BundledPaths { + extra_roots: Vec, +} + +impl BundledPaths { + pub fn discover() -> Self { + Self::default() + } + + pub fn with_resource_dir(mut self, dir: PathBuf) -> Self { + if dir.is_dir() { + self.extra_roots.insert(0, dir); + } + self + } + + pub fn roots(&self) -> Vec { + let mut roots = self.extra_roots.clone(); + if let Some(xdg) = env::var_os("XDG_DATA_HOME") { + roots.push(PathBuf::from(xdg).join("dsh-desktop")); + } + roots.push(PathBuf::from("/app/share/dsh-desktop")); + roots.push(PathBuf::from("/usr/share/dsh-desktop")); + roots.push(home_dir().join(".local/share/dsh-desktop")); + for repo in repo_roots() { + roots.push(repo); + } + roots + } + + pub fn find_dir(&self, rel: &str, marker: &str) -> Option { + for root in self.roots() { + let candidate = root.join(rel); + if candidate.join(marker).is_file() || candidate.join(marker).is_dir() { + return Some(candidate); + } + } + None + } +} + +fn repo_roots() -> Vec { + let mut roots = Vec::new(); + if let Ok(exe) = env::current_exe() { + if let Some(parent) = exe.parent() { + roots.push(parent.to_path_buf()); + if let Some(grand) = parent.parent() { + roots.push(grand.to_path_buf()); + } + } + } + // crates/dsh-core -> repo root; src-tauri -> repo root + let manifest = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + if let Some(parent) = manifest.parent() { + roots.push(parent.to_path_buf()); + if let Some(grand) = parent.parent() { + roots.push(grand.to_path_buf()); + } + } + roots +} + +pub fn copy_tree(src: &Path, dest: &Path, keep_symlinks: bool) -> std::io::Result<()> { + if dest.exists() { + std::fs::remove_dir_all(dest)?; + } + if let Some(parent) = dest.parent() { + std::fs::create_dir_all(parent)?; + } + copy_tree_inner(src, dest, keep_symlinks) +} + +fn copy_tree_inner(src: &Path, dest: &Path, keep_symlinks: bool) -> std::io::Result<()> { + if src + .file_name() + .and_then(|n| n.to_str()) + .is_some_and(|n| n == ".git") + { + return Ok(()); + } + if src.is_symlink() && keep_symlinks { + let target = std::fs::read_link(src)?; + #[cfg(unix)] + std::os::unix::fs::symlink(target, dest)?; + #[cfg(windows)] + { + if src.is_dir() { + std::os::windows::fs::symlink_dir(target, dest)?; + } else { + std::os::windows::fs::symlink_file(target, dest)?; + } + } + return Ok(()); + } + if src.is_dir() { + std::fs::create_dir_all(dest)?; + for entry in std::fs::read_dir(src)? { + let entry = entry?; + copy_tree_inner(&entry.path(), &dest.join(entry.file_name()), keep_symlinks)?; + } + return Ok(()); + } + std::fs::copy(src, dest)?; + Ok(()) +} + +pub fn replace_symlink(link: &Path, target: &Path) -> std::io::Result<()> { + if let Some(parent) = link.parent() { + std::fs::create_dir_all(parent)?; + } + if link.exists() || link.is_symlink() { + if link.is_dir() && !link.is_symlink() { + std::fs::remove_dir_all(link)?; + } else { + std::fs::remove_file(link)?; + } + } + #[cfg(unix)] + std::os::unix::fs::symlink(target, link)?; + #[cfg(windows)] + { + if target.is_dir() { + std::os::windows::fs::symlink_dir(target, link)?; + } else { + std::os::windows::fs::symlink_file(target, link)?; + } + } + Ok(()) +} diff --git a/crates/dsh-core/src/preset.rs b/crates/dsh-core/src/preset.rs new file mode 100644 index 0000000..bd5f0e0 --- /dev/null +++ b/crates/dsh-core/src/preset.rs @@ -0,0 +1,379 @@ +use std::path::{Path, PathBuf}; + +use regex::Regex; + +use crate::paths::{copy_tree, dsh_home, BundledPaths}; + +pub const PRESET_ID: &str = "anchored-standard"; +pub const ZERO_PRESET_ID: &str = "zero-anchored-standard"; +pub const SOURCE_MARKER: &str = ".dsh-desktop-source"; +pub const DEFAULT_BLOCK: &str = "agent-presets:\n default: anchored-standard\n"; +pub const PRESET_NAME_ZH: &str = "锚定式标准(实验)"; +pub const PRESET_DESCRIPTION_ZH: &str = + "首轮使用 Minimal 的真实工具对(持久 bash + str_replace_editor),不自动注入工作区或技能上下文;首次工具调用或回复后开放完整 Standard 工具。"; +pub const ZERO_PRESET_NAME_ZH: &str = "零工具锚定式标准(实验)"; +pub const ZERO_PRESET_DESCRIPTION_ZH: &str = + "先插入一轮无工具的锚定对话(固定提示),从下一轮起开放完整 Standard 工具。"; + +#[derive(Debug, Clone)] +pub struct BundledPreset { + pub preset_id: &'static str, + pub name_zh: &'static str, + pub description_zh: &'static str, +} + +pub const BUNDLED_PRESETS: &[BundledPreset] = &[ + BundledPreset { + preset_id: PRESET_ID, + name_zh: PRESET_NAME_ZH, + description_zh: PRESET_DESCRIPTION_ZH, + }, + BundledPreset { + preset_id: ZERO_PRESET_ID, + name_zh: ZERO_PRESET_NAME_ZH, + description_zh: ZERO_PRESET_DESCRIPTION_ZH, + }, +]; + +#[derive(Debug, Clone)] +pub struct PresetEnsureResult { + pub status: &'static str, + pub version: Option, + pub message: String, +} + +pub fn preset_install_dir(preset_id: &str) -> PathBuf { + dsh_home().join(".agent-presets").join(preset_id) +} + +fn is_preset_dir(path: &Path) -> bool { + path.is_dir() && path.join("preset.yml").is_file() +} + +pub fn read_source_version(path: &Path) -> Option { + let version = std::fs::read_to_string(path.join(SOURCE_MARKER)).ok()?; + let version = version.trim(); + if version.is_empty() { + None + } else { + Some(version.to_string()) + } +} + +pub fn bundled_preset_dir(paths: &BundledPaths, preset_id: &str) -> Option { + paths + .find_dir(preset_id, "preset.yml") + .or_else(|| paths.find_dir(&format!("vendor/{preset_id}"), "preset.yml")) + .filter(|p| is_preset_dir(p)) +} + +pub fn ensure_default_preset(text: &str) -> String { + let mut body = text.replace("\r\n", "\n"); + if !body.ends_with('\n') { + body.push('\n'); + } + if body.trim().is_empty() { + return DEFAULT_BLOCK.to_string(); + } + let re = Regex::new(r"(?m)^agent-presets:\n((?:[ \t]+.*\n)*)").unwrap(); + let Some(caps) = re.captures(&body) else { + body.push('\n'); + body.push_str(DEFAULT_BLOCK); + return body; + }; + let inner = caps.get(1).unwrap().as_str(); + if Regex::new(r"(?m)^[ \t]+default:\s*\S+") + .unwrap() + .is_match(inner) + { + return body; + } + let insert = format!(" default: {PRESET_ID}\n"); + let start = caps.get(1).unwrap().start(); + let end = caps.get(1).unwrap().end(); + format!("{}{}{}{}", &body[..start], insert, inner, &body[end..]) +} + +pub fn localize_preset_yml(text: &str, name: &str, description: &str) -> String { + let mut body = text.replace("\r\n", "\n"); + if !body.ends_with('\n') { + body.push('\n'); + } + let name_line = format!("name: {}\n", serde_json::to_string(name).unwrap()); + let desc_line = format!( + "description: {}\n", + serde_json::to_string(description).unwrap() + ); + let name_re = Regex::new(r"(?m)^name:.*\n").unwrap(); + if let Some(m) = name_re.find(&body) { + body = format!("{}{}{}", &body[..m.start()], name_line, &body[m.end()..]); + } else { + body = format!("{name_line}{body}"); + } + let desc_re = Regex::new(r"(?m)^description:(?:[ \t].*)?\n(?:[ \t].+\n)*").unwrap(); + if let Some(m) = desc_re.find(&body) { + return format!("{}{}{}", &body[..m.start()], desc_line, &body[m.end()..]); + } + if let Some(m) = name_re.find(&body) { + return format!("{}{}{}", &body[..m.end()], desc_line, &body[m.end()..]); + } + format!("{desc_line}{body}") +} + +fn write_localized_preset(dest: &Path, spec: &BundledPreset) -> std::io::Result<()> { + let path = dest.join("preset.yml"); + let previous = std::fs::read_to_string(&path)?; + let updated = localize_preset_yml(&previous, spec.name_zh, spec.description_zh); + if updated != previous { + std::fs::write(path, updated)?; + } + Ok(()) +} + +fn short_version(version: Option<&str>) -> String { + match version { + None => "bundled".into(), + Some(v) if v.len() > 12 => v[..12].into(), + Some(v) => v.into(), + } +} + +fn ensure_one(paths: &BundledPaths, spec: &BundledPreset) -> PresetEnsureResult { + let src = bundled_preset_dir(paths, spec.preset_id); + let dest = preset_install_dir(spec.preset_id); + let bundled = src.as_ref().and_then(|p| read_source_version(p)); + let installed = if dest.is_dir() { + read_source_version(&dest) + } else { + None + }; + let version = bundled.clone().or_else(|| installed.clone()); + let label = spec.name_zh; + if src.is_none() { + if dest.is_dir() && dest.join("preset.yml").is_file() { + let _ = write_localized_preset(&dest, spec); + return PresetEnsureResult { + status: "current", + version: version.clone(), + message: format!("已配置已安装的{label}({})", short_version(version.as_deref())), + }; + } + return PresetEnsureResult { + status: "skipped", + version: None, + message: format!("未找到内置{label},跳过安装"), + }; + } + let src = src.unwrap(); + if let Err(exc) = (|| -> std::io::Result<()> { + if installed != bundled || !dest.join("preset.yml").is_file() { + copy_tree(&src, &dest, false)?; + } + write_localized_preset(&dest, spec)?; + Ok(()) + })() { + return PresetEnsureResult { + status: "failed", + version, + message: format!("内置{label}安装失败:{exc}"), + }; + } + let sha = short_version(bundled.as_deref()); + if installed == bundled && dest.join("preset.yml").is_file() { + return PresetEnsureResult { + status: "current", + version: bundled, + message: format!("内置{label} {sha} 已就绪"), + }; + } + if installed.is_some() { + return PresetEnsureResult { + status: "updated", + version: bundled, + message: format!("已将内置{label}更新到 {sha}"), + }; + } + PresetEnsureResult { + status: "installed", + version: bundled, + message: format!("已启用内置{label} {sha}"), + } +} + +fn combine(results: &[PresetEnsureResult]) -> PresetEnsureResult { + if results.iter().any(|item| item.status == "failed") { + let failed: Vec<_> = results + .iter() + .filter(|item| item.status == "failed") + .map(|item| item.message.clone()) + .collect(); + return PresetEnsureResult { + status: "failed", + version: None, + message: failed.join(";"), + }; + } + let active: Vec<_> = results + .iter() + .filter(|item| item.status != "skipped") + .collect(); + if active.is_empty() { + return PresetEnsureResult { + status: "skipped", + version: None, + message: "未找到内置锚定预设,跳过安装".into(), + }; + } + let version = active.iter().find_map(|item| item.version.clone()); + let (status, lead) = if active.iter().any(|item| item.status == "updated") { + ("updated", "已更新内置锚定预设") + } else if active.iter().any(|item| item.status == "installed") { + ("installed", "已启用内置锚定预设") + } else { + ("current", "内置锚定预设已就绪") + }; + let detail = active + .iter() + .map(|item| item.message.as_str()) + .collect::>() + .join(";"); + PresetEnsureResult { + status, + version, + message: format!("{lead}。{detail}"), + } +} + +pub fn ensure_anchored_standard(paths: &BundledPaths) -> PresetEnsureResult { + let results: Vec<_> = BUNDLED_PRESETS + .iter() + .map(|spec| ensure_one(paths, spec)) + .collect(); + let combined = combine(&results); + if combined.status == "failed" { + return combined; + } + let settings = dsh_home().join("settings.yaml"); + match (|| -> std::io::Result<()> { + let previous = if settings.is_file() { + std::fs::read_to_string(&settings)? + } else { + String::new() + }; + let updated = ensure_default_preset(&previous); + if updated != previous { + if let Some(parent) = settings.parent() { + std::fs::create_dir_all(parent)?; + } + std::fs::write(&settings, updated)?; + } + Ok(()) + })() { + Ok(()) => combined, + Err(exc) => PresetEnsureResult { + status: "failed", + version: combined.version, + message: format!("写入默认 preset 失败:{exc}"), + }, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::paths::BundledPaths; + + #[test] + fn empty_file_gets_default_block() { + assert_eq!( + ensure_default_preset(""), + "agent-presets:\n default: anchored-standard\n" + ); + } + + #[test] + fn appends_when_section_missing() { + let updated = ensure_default_preset("ui-theme:\n preference: dark\n"); + assert!(updated.contains("preference: dark")); + assert!(updated.contains("agent-presets:\n default: anchored-standard\n")); + } + + #[test] + fn inserts_default_into_empty_section() { + let updated = ensure_default_preset("agent-presets:\nui-theme:\n preference: dark\n"); + assert!(updated.contains("agent-presets:\n default: anchored-standard\n")); + assert!(updated.contains("preference: dark")); + } + + #[test] + fn keeps_existing_default() { + let original = "agent-presets:\n default: standard\n"; + assert_eq!(ensure_default_preset(original), original); + } + + #[test] + fn does_not_match_permission_default_preset() { + let original = "permission:\n defaultPreset: danger-full-access\n"; + let updated = ensure_default_preset(original); + assert!(updated.contains("defaultPreset: danger-full-access")); + assert!(updated.contains("agent-presets:\n default: anchored-standard\n")); + } + + #[test] + fn replaces_english_name_and_description() { + let original = "\ +name: Anchored Standard (experimental) +description: Bootstrap with the Minimal preset's real tool pair. +order: 5 +"; + let updated = localize_preset_yml(original, PRESET_NAME_ZH, PRESET_DESCRIPTION_ZH); + assert!(updated.contains(PRESET_NAME_ZH)); + assert!(updated.contains(PRESET_DESCRIPTION_ZH)); + assert!(!updated.contains("Anchored Standard (experimental)")); + assert!(!updated.contains("Bootstrap")); + assert!(updated.contains("order: 5")); + } + + #[test] + fn inserts_description_after_name() { + let updated = localize_preset_yml("name: Anchored Standard\norder: 5\n", PRESET_NAME_ZH, PRESET_DESCRIPTION_ZH); + assert!(updated.contains(PRESET_NAME_ZH)); + assert!(!updated.contains("name: Anchored Standard\n")); + assert!(updated.contains(PRESET_DESCRIPTION_ZH)); + assert!(updated.contains("order: 5")); + } + + #[test] + fn installs_from_bundle_and_sets_default() { + let tmp = tempfile::TempDir::new().unwrap(); + let src = tmp.path().join("anchored-standard"); + std::fs::create_dir_all(&src).unwrap(); + std::fs::write(src.join("preset.yml"), "name: Anchored Standard\n").unwrap(); + std::fs::write(src.join(SOURCE_MARKER), "abc123def456\n").unwrap(); + let home = tmp.path().join(".dsh"); + std::env::set_var("DSH_HOME", &home); + let paths = BundledPaths::discover().with_resource_dir(tmp.path().to_path_buf()); + let result = ensure_anchored_standard(&paths); + std::env::remove_var("DSH_HOME"); + assert_eq!(result.status, "installed"); + let dest = home.join(".agent-presets").join(PRESET_ID); + assert!(dest.join("preset.yml").is_file()); + let yml = std::fs::read_to_string(dest.join("preset.yml")).unwrap(); + assert!(yml.contains(PRESET_DESCRIPTION_ZH)); + let settings = std::fs::read_to_string(home.join("settings.yaml")).unwrap(); + assert!(settings.contains("default: anchored-standard")); + } + + #[test] + fn localizes_zero_preset() { + let original = "\ +name: Zero-Anchored Standard (experimental) +description: Inject one zero-tool anchor turn. +order: 6 +"; + let updated = localize_preset_yml(original, ZERO_PRESET_NAME_ZH, ZERO_PRESET_DESCRIPTION_ZH); + assert!(updated.contains(ZERO_PRESET_NAME_ZH)); + assert!(updated.contains(ZERO_PRESET_DESCRIPTION_ZH)); + assert!(!updated.contains("Zero-Anchored")); + } +} diff --git a/crates/dsh-core/src/updater.rs b/crates/dsh-core/src/updater.rs new file mode 100644 index 0000000..bdb659c --- /dev/null +++ b/crates/dsh-core/src/updater.rs @@ -0,0 +1,348 @@ +use std::path::{Path, PathBuf}; +use std::process::{Command, Stdio}; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::Arc; +use std::thread; +use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; + +use crate::paths::{cache_home, data_home}; +use crate::ENV_NO_UPDATE; + +pub const DSH_PACKAGE: &str = "@deepseek-ai/dsh"; +pub const VIEW_TIMEOUT_SECONDS: u64 = 20; +pub const INSTALL_TIMEOUT_SECONDS: u64 = 180; +pub const BUNDLED_PREFIX: &str = "/app"; +pub const BUNDLED_DSH: &[&str] = &["/app/bin/dsh", "/app/node24/bin/dsh"]; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct UpdateResult { + pub status: &'static str, + pub version: Option, + pub previous: Option, + pub message: String, +} + +impl UpdateResult { + fn new(status: &'static str, version: Option, message: impl Into) -> Self { + Self { + status, + version, + previous: None, + message: message.into(), + } + } +} + +pub fn update_prefix() -> PathBuf { + data_home().join("dsh-desktop/dsh-prefix") +} + +pub fn update_dsh_bin() -> PathBuf { + let prefix = update_prefix(); + #[cfg(windows)] + { + let cmd = prefix.join("dsh.cmd"); + if cmd.is_file() { + return cmd; + } + } + prefix.join("bin/dsh") +} + +pub fn package_json(prefix: &Path) -> PathBuf { + prefix.join("lib/node_modules/@deepseek-ai/dsh/package.json") +} + +pub fn read_version(prefix: &Path) -> Option { + let text = std::fs::read_to_string(package_json(prefix)).ok()?; + let data: serde_json::Value = serde_json::from_str(&text).ok()?; + data.get("version") + .and_then(|v| v.as_str()) + .map(|s| s.to_string()) +} + +pub fn find_npm() -> Option { + for candidate in ["/app/bin/npm", "/app/node24/bin/npm"] { + let path = PathBuf::from(candidate); + if crate::launcher::is_executable(&path) { + return Some(path); + } + } + which::which("npm").ok() +} + +fn find_node_dir() -> Option { + for candidate in ["/app/bin/node", "/app/node24/bin/node"] { + let path = PathBuf::from(candidate); + if crate::launcher::is_executable(&path) { + return path.parent().map(|p| p.to_path_buf()); + } + } + which::which("node") + .ok() + .and_then(|p| p.parent().map(|d| d.to_path_buf())) +} + +fn npm_command(npm: &Path) -> Command { + let mut cmd = Command::new(npm); + let cache = cache_home().join("dsh-desktop/npm"); + let _ = std::fs::create_dir_all(&cache); + cmd.env("npm_config_cache", &cache); + cmd.env("npm_config_update_notifier", "false"); + cmd.env("npm_config_fund", "false"); + cmd.env("npm_config_audit", "false"); + if let Some(node_dir) = find_node_dir() { + let mut path = node_dir.into_os_string(); + path.push(if cfg!(windows) { ";" } else { ":" }); + if let Some(existing) = std::env::var_os("PATH") { + path.push(existing); + } + cmd.env("PATH", path); + } + cmd +} + +fn run_npm(npm: &Path, args: &[&str], timeout: Duration) -> Result { + let mut cmd = npm_command(npm); + cmd.args(args); + cmd.stdout(Stdio::piped()); + cmd.stderr(Stdio::piped()); + let child = cmd.spawn().map_err(|e| e.to_string())?; + let pid = child.id(); + let done = Arc::new(AtomicBool::new(false)); + let flag = Arc::clone(&done); + thread::spawn(move || { + let start = Instant::now(); + while start.elapsed() < timeout { + if flag.load(Ordering::Relaxed) { + return; + } + thread::sleep(Duration::from_millis(50)); + } + if flag.load(Ordering::Relaxed) { + return; + } + #[cfg(unix)] + unsafe { + libc::kill(pid as i32, libc::SIGKILL); + } + #[cfg(windows)] + { + let _ = Command::new("taskkill") + .args(["/PID", &pid.to_string(), "/F"]) + .status(); + } + }); + let out = child.wait_with_output().map_err(|e| e.to_string()); + done.store(true, Ordering::Relaxed); + out +} + +fn last_check_path() -> PathBuf { + cache_home().join("dsh-desktop/last-update-check") +} + +/// True when a network update check has not run in the last 24 hours. +pub fn update_check_due() -> bool { + let path = last_check_path(); + let Ok(raw) = std::fs::read_to_string(&path) else { + return true; + }; + let ts: u64 = raw.trim().parse().unwrap_or(0); + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_secs()) + .unwrap_or(0); + now.saturating_sub(ts) >= 24 * 60 * 60 +} + +pub fn mark_update_checked() { + let path = last_check_path(); + if let Some(parent) = path.parent() { + let _ = std::fs::create_dir_all(parent); + } + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_secs()) + .unwrap_or(0); + let _ = std::fs::write(path, format!("{now}\n")); +} + +pub fn fetch_latest_version(npm: &Path) -> Option { + let out = run_npm(npm, &["view", DSH_PACKAGE, "version"], Duration::from_secs(VIEW_TIMEOUT_SECONDS)) + .ok()?; + if !out.status.success() { + return None; + } + String::from_utf8_lossy(&out.stdout) + .lines() + .map(str::trim) + .filter(|l| !l.is_empty()) + .last() + .map(|s| s.to_string()) +} + +fn seed_from_bundle(dest: &Path) { + let src_pkg = Path::new(BUNDLED_PREFIX).join("lib/node_modules/@deepseek-ai/dsh"); + if !src_pkg.is_dir() { + return; + } + let dest_pkg = dest.join("lib/node_modules/@deepseek-ai/dsh"); + if dest_pkg.exists() { + return; + } + if crate::paths::copy_tree(&src_pkg, &dest_pkg, true).is_err() { + return; + } + let dest_bin = dest.join("bin"); + let _ = std::fs::create_dir_all(&dest_bin); + let link = dest_bin.join("dsh"); + if !link.exists() { + let _ = crate::paths::replace_symlink( + &link, + Path::new("../lib/node_modules/@deepseek-ai/dsh/lib/bin.js"), + ); + } +} + +fn env_skips_update() -> bool { + std::env::var(ENV_NO_UPDATE) + .map(|v| matches!(v.to_ascii_lowercase().as_str(), "1" | "true" | "yes")) + .unwrap_or(false) +} + +pub fn update_dsh(enabled: bool) -> UpdateResult { + if !enabled || env_skips_update() { + let version = read_version(&update_prefix()).or_else(|| read_version(Path::new(BUNDLED_PREFIX))); + return UpdateResult::new("skipped", version, "已跳过 dsh 更新"); + } + + let npm = find_npm(); + let current = read_version(&update_prefix()).or_else(|| read_version(Path::new(BUNDLED_PREFIX))); + let Some(npm) = npm else { + let extra = current + .as_deref() + .map(|v| format!("({v})")) + .unwrap_or_default(); + return UpdateResult::new( + "skipped", + current, + format!("未找到 npm,使用已安装的 dsh{extra}"), + ); + }; + + let latest = match fetch_latest_version(&npm) { + Some(v) => v, + None => { + let extra = current + .as_deref() + .map(|v| format!("({v})")) + .unwrap_or_default(); + return UpdateResult::new( + "failed", + current, + format!("无法获取 dsh 最新版本,使用已安装版本{extra}"), + ); + } + }; + + if current.as_deref() == Some(latest.as_str()) { + return UpdateResult::new( + "current", + current, + format!("内置 dsh 已是最新({latest})"), + ); + } + + let dest = update_prefix(); + let _ = std::fs::create_dir_all(&dest); + if read_version(&dest).is_none() { + seed_from_bundle(&dest); + } + + let prefix_arg = format!("--prefix={}", dest.display()); + let pkg = format!("{DSH_PACKAGE}@latest"); + let previous = current.clone(); + match run_npm( + &npm, + &[ + "install", + &prefix_arg, + "--global", + "--no-audit", + "--no-fund", + &pkg, + ], + Duration::from_secs(INSTALL_TIMEOUT_SECONDS), + ) { + Ok(out) if out.status.success() => { + let installed = read_version(&dest).or(current); + UpdateResult { + status: "updated", + version: installed.clone(), + previous, + message: format!( + "已将内置 dsh 更新到 {}", + installed.as_deref().unwrap_or("latest") + ), + } + } + Ok(_) | Err(_) => { + let installed = read_version(&dest).or(current); + let extra = installed + .as_deref() + .map(|v| format!("({v})")) + .unwrap_or_default(); + UpdateResult { + status: "failed", + version: installed, + previous, + message: format!("dsh 更新失败,使用已安装版本{extra}"), + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use tempfile::TempDir; + + #[test] + fn read_version_ok() { + let tmp = TempDir::new().unwrap(); + let pkg = package_json(tmp.path()); + std::fs::create_dir_all(pkg.parent().unwrap()).unwrap(); + std::fs::write(&pkg, r#"{"version":"0.1.0-rc.6"}"#).unwrap(); + assert_eq!(read_version(tmp.path()).as_deref(), Some("0.1.0-rc.6")); + } + + #[test] + fn read_version_missing() { + assert_eq!(read_version(Path::new("/no/such/prefix")), None); + } + + #[test] + fn skip_when_disabled() { + let result = update_dsh(false); + assert_eq!(result.status, "skipped"); + } + + #[test] + fn skip_when_env_set() { + std::env::set_var(ENV_NO_UPDATE, "1"); + let result = update_dsh(true); + std::env::remove_var(ENV_NO_UPDATE); + assert_eq!(result.status, "skipped"); + } + + #[test] + fn update_check_due_without_stamp() { + let tmp = TempDir::new().unwrap(); + std::env::set_var("XDG_CACHE_HOME", tmp.path()); + assert!(update_check_due()); + mark_update_checked(); + assert!(!update_check_due()); + std::env::remove_var("XDG_CACHE_HOME"); + } +} diff --git a/data/applications/io.github.tommyfang.DshDesktop.desktop b/data/applications/io.github.tommyfang.DshDesktop.desktop new file mode 100644 index 0000000..a99edd9 --- /dev/null +++ b/data/applications/io.github.tommyfang.DshDesktop.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Name=DeepSeek Harness +Name[zh_CN]=DeepSeek Harness +GenericName=AI Agent Harness +GenericName[zh_CN]=AI 智能体工作台 +Comment=Desktop shell for DeepSeek Harness +Comment[zh_CN]=在原生桌面窗口中运行 DeepSeek Harness +Exec=dsh-desktop +Icon=io.github.tommyfang.DshDesktop +Terminal=false +Type=Application +Categories=Development; +Keywords=AI;DeepSeek;agent;harness;dsh;assistant; +StartupNotify=true +StartupWMClass=io.github.tommyfang.DshDesktop +X-Flatpak-RenamedFrom=dsh-desktop.desktop; diff --git a/data/icons/hicolor/128x128/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/128x128/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..65cbf81bbcbad0bb06b66f067d486b4ee7b40537 GIT binary patch literal 8226 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 literal 0 HcmV?d00001 diff --git a/data/icons/hicolor/16x16/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/16x16/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..3cbb2a4b003b2934ad8b14be61647281aba1dad6 GIT binary patch literal 728 zcmV;}0w?{6P)C_`HG|sv=UhmMDfG12v~S1(clW9(VhCL^0H$oZtUIuJBEL^A2Q)eej{Zk_tX9Km-0*c&%B=&8H{} zc0SOy&m3Ih;*fx4W{^<{@$*S}^$6x2Q`dzvm2@+bUO>G* z-)>?r$Q9whFwnMWu7`S+6(tdY5`}Bj=aG2+A_cN_b))s1;)iiWf*SHIc?W=TgSS#blrvB0)uoHSsk-wW9u3i z-CDY}>n>2qAiH$qBA|jA1IF-U8iQgq#F*$0{%FD?3F0Lri#Ujvpb`@2Ez>N>rUoX3 zZtG>A?|Uw#tS5s1{E}}yefz!7dwZVmOd|PTEvZzBf9^NY)NkW77kv#nrtZ)d^k z?OpnOdwpr;-hoEnr3;>5c(&Z~+(F)p^=aMx$8^!U{s50dCu6Y{a6ObrC|bc(*1vk( zH86L>e}Is#L)=b&-Zm5tQM5b(pit_y?!i#VyO+#YHM~A5*cn-dLTjwEG1F%2tnWV z_P0-3+s=)-`fpzEe1a@Fcg;+*0j#d`A9O#78Qxv!0KkqtOGIpAFg&*<@bkCI^gILl z);Qid)q9w&ZV{^mU`&u~2iw}(W6wx(i#;vqgqe5lCjbNoFk{g`gm{AUiwLr{Z+cRp z)M+q?-T(FHKJfJnFUIhb_3*#y4LBTLc3^TSHBqUtGiv;8tZ6m^elOO_8<; z0s-C=_?pc7vg!ka;Is(YCCYE~UH({S+GH^nwb{WQ!2zQk!GVD{(^SSB9*WZhWEh6l zOo7M}ntV zD{HG0rST#G&a-qh6l`vQEMf4`7+Xzn;kK#N+nQVAX@S6TtPU~CAASBXC&8o};gP0O zCj-wCVsX6t7ArVPCQDMHlx9@yHL$k!=n(_~7Dcfg0wsBNfnK6vb!L%i`OP5F3YmTSs3=$zE7C*ZH$}sO9mg??L`qf;~%D zZLZk($}zZ~SX*ZHx>BI+9bWCI@;KM~OXI=}MQ>FVaM{&=Yo>=&=`{c@M>`|er~oVs zzx`?|Y2S*rm8+Z%q$e-P2;4=ppam_DoeD0Lv_fyGa1Y*|!Af9=q00IbqXlbrcsB=r zoWv|~S8hCU9M2k8Ih!ExT~sXETX)a?X12ZbB4AMhK}3V7HO2WrwNKG;#}Q8QUQPqp z4uV65p+-T36F`oaq3=iQJr~Z|yRJ;YMfU~}gcc33d^m+`0^Wx9@ekbtbAS4HA>pTc z;P1bh{9le2n}>F$B0R+6-wlcIY3kgZY(s68&eX7Bg?_ymzbBtYK?*M!B=o}vV&BD7 x>N}Xj1*J2z=x_gdasL2N?28`*im~JY>mM!2Q831n*c|`>002ovPDHLkV1f-SQau0w literal 0 HcmV?d00001 diff --git a/data/icons/hicolor/256x256/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/256x256/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..7a47edbabe80a7319e3bc9e11b460b8977d5ef03 GIT binary patch literal 17803 zcmd43b8{u#`#pS4>||n_C)UKaZQJIAC$?={lZkEJNhY>A!Gsg@m(Nr6eGgCnv%9*x zs;jH^-q*SoI!akl3K;<(0RR9X%Sel>0sz3TQy>5i=4;S*t+f0a;GLy)-2T6-|GT3^ zHM|S}paEpWMby1>FZ^Ns)W`BZH>zREaX1qzlPh8FVMJln+p1&G36u?F;3yNV>E-P! zHZnF1{yPes82SC|m%;r9ch)r4tz&i7tD{*iSMK*wF1HIlT&Q?bbJxFuo$joq6f{zs z4LzIQf;aNoTTjdFDW`yU8aTrLKOJiD2w}2C>b96qBnW{CVId(yR-{&jJZCv2pE)5R zX4OH44~IV^#*V}4WzG>$QL@CSz+IUTu&`r`!RV9kwqz|Q_A(X(K7GZ=_i5jE0_af$dTy(MzQt%c1p4UiU3e7d;Zj9+fvU*YT$jue?BpMqR&);Ke8cT==ktu+3 z`RTpltsFwwdSA)W?ls!NKkQm_x7uP{F}g2S)HJ%(|TiMfZ3lMnoCzXWtmU zXN=GktjF{%(@^T^-K<#3zh2MCpU(^BH`Drz>6d}*pD<2>QXp4#P!h(m{?nb+qmF?@ z=}83w#Dp_hxwRbs%7*S}s3rx4m_-Ydp%pw<5*SwHkwJw`VQW(7N9(pchYB{ezqWVW z9RHJe_5J87g}zrOkqFVafYTtt%K_cYTwm=HVBX`NzcL-BcCYgbv3a5Rb{m!RB0Mo* zST+kDoCa@6Olf$3fvVd%GHZ-!^?VP{v`Ez-Hd1| zn7^p(xy2KEkDJ80IH49CuY5xjrJ9CIYbEtzML@@aTbVcUP9f!a1K`{|5>Ue{A$n;(A$?}r9gp0pxOG56+9OZQ@G%ErlAGuoOW9;LJCr(mK^0(%#6(u^|pY7^}n z35n0CB=R?Gi3_;3%zJZ}xuBYz;kNDj+oAoU3a)NQM_YME67PxWD~|6-Xg5YiZtq<; z6U!V9vka%j&(Kp(IOx1`{l)KgsW)3GK%`HkcS`9L&V4+>1%$rIy23Q{H28?$w9$+Q2bJ}H-c<4` z8e3a9oMa?5LhIh}fcn_kQ4-8Tnf*d%bVE=(Wd+1$Vg5jm(dZmp2Ys(s;M-E|?)%g9 zvQDtGykZ#G)PB7FO2t^&_CkwaX)E>Hw_}1>`pM~r-7$l+g!paB=)mf;tGD&BW4^OS zsa{D)Eh1|;UL%So<7-9E4Q2+5{i#fMIEmb-ZdyvycI?%6f!cza+mJ{45i)L1Hs?S* zcS_=}JcZ3Cs2DG4x<~cl z$B`m0qJYSfz&ogyh2uN5NfYFyGtxLhE_m@zoTbelM}n7qtnlQ}B3RPQy>FqqShD$4 zKAMMIQddBv$$CUpM*J*DmyhBwze9xvxNq1@YplLz%PG%4Uh4%ND*JBC{C+xq+gkHL zBO1D7^@|+YSQ0_a;X)z&Q6Hjv98o!w7aR0^EGJ3q(-8gi*g+PRpR2N1r}d3auj*!_ zs|Qw_*2&x3(OM?upI1sYy)=aONR{KIFEv{^SU@Yi=yyJhfuO6Q@Vy3fhq|gpKd$6N zOme5|u$a*K-d`HITax!lwmvoBMB_b9V~hQ@`huMv5_Z#ZBt#>|{P)!I z`jZWp!eI{3mFgl|G(Z}^qMkE?!#+o;3N}TN!6^l867D&dXW~5@vP?udIBDmu9{qwP zhIpR}%OQoy7&=`@25lCPtT(OS2Ar0F1RM@UGoaxW+!qB*l&TA{8qLz_zOhX$a{kQ|F)D`5N8rcSNch{>H|>rGlY zv`T`sS$Lx@+G;GgSDu{5;>-cI=B5)5{}KR62$8046iAQ>&`t62sR@+gMM(7izQ22b z6Jn%HzpVD@wW@vmEAjOe4Vs|?-7=b4_f&OqS?aew_=c|H%o-w5N}cy-PbPz>F@&=C z;ZW@Uzl4UZ&2L25-!uH(h1cOEi9Qq)ljD#>O0uX0g*@Nhg97jWIpbjlt4h?Snh)H> zkp!cDnD|`>s*#2JqZ7r)Jm!)k{#WtR6}?tKl4dQ?g~2( z?EW!gZs>c+@`y@ccJc3({l-EJ$zlbkULP@J#7O+{$|8S9BZR8Macz<>VR$<@vJuJ{ z9RwxAt*>CCrU(1KlbOe_sE5VOJ&(*3^1;uh0#~E};w_jz0 zjVGcwQKsfb(F#3hQfYyW4E=3jXrOdVnCt@^8A1 zXG+Z4enNP0e_Zaqn;seLh@M*LqG11(Pff;O#%r6E?C5(tOp4`y@6edHEyr0*%M(Cn4*tw>{|8|Fjeorpk_!cDSfvSgTbW#+s?=S`% z@ue||`tJS3LI=`Y3qSSHl88aQI6pLJ!$P5+I&BZK6ssYg<^g|MIFLj$x&C9j6QqOV zGp0p2GkRpfJRnP7JdOs3mDUlyPwLgI&u$!3ThbHkypG{q>g5-V`BPV-4^4;uK#Z(( zb=QK$=fHq0*bMe47YrgpbHYz`@bhQ>!N)e8<%I`SQ)>O&+XYvduxvXET)vAny~89( z_YDS2i&jAEQ{h$DJ|Xhm$il}x2}>`;%bn`hH1s^^pOVcPeh(_-x_Qi=Yun5mhANlC zmfJLr$vB>7;)^tdpeXp}m-4p!h?8W`!=TwmfTbr4VS1>|W3`HG?LU>`*dLYLIB*FV z(zSH)%Cm0DZ{Io$fY#?c%L>+goi!*ef->nAA!}NyAr@@3H+VTnz$QBRQT2<6N4giD zE>4iFMTene+wXPZvabkMF`I?yhKkzLX;lA@7Fth42k7zWHA@n~;CEiaRzDnih zwuGVO#Ac7Cy&h?mdx#+JkgVv`zY6f3B=&WSWi zP7#8y1`Zupa)%1a()0Go6-`-0%j$0B=T~P7t0*^MSVCw~n0o#;JJ?k9W+K{oxf<%60~6}Rs>v!t zI6A?K!qY9QC-jiotQE=kTyW1lzaKUn9rCcvLEx9w!D(>a``fzMe_RLM70K?NAv8aq zfTjT9Zw_!!O^TlSa7$W^~|P|btJb>So$E}L3W4Z)j=P16o?&|zZCh-6nnIaXdx>6%vn z$%=neH4`7n`7^JE0YB-q2z9b5l{p9rX#am)0JhgvCCud;7*kv^NQOFQ%W(d0=ssSb z93B57od2sV3HG$I9fz&R<4MbmvRL7clg{i7E5;L~rdN>6;Nzk1Q%?A~aP5pwXL2{c zSCg>Kfvkx|Cnrjbm=?0BXhJPcPznJQj3~ptspQqvq7gS`WowfEE}|A$4BTeoyZa?E z9DKgHi?UM61e^Hy&H*lS8nL(*4&#K5^mYzkJyCfEWBddnCl^XDGFA8#|F{)zV#)|o zX7(Hoh3W0^d!efD68HG`^I{7g-P-s!W`Y=`WeS$a=+7Ss4}L=qHwC?jRPK7LI=M4q zdUPEGg4{pS`~O4!0d)jBHyM-umlB35O}6I2^_c-HG&9T2ryw~7AB}d{6z97+zkxJL zgRe$mKSC`!Tl5Y;TsWHJT~0ofJV~(ZHS~4Lh@6*Xl<$zQh?xADe$G0U(N;Xn;Vv>9 z8u}|Gv1ngp^nX;af%E%9lVDltR_aTE@Jn2L@6-BI`F^P3zlwiea~A4cnqeEXd=S|t z)Ce#^m`itoQb-8A>9=JtF2dLR6yo$e{#>n4~r4DPR6vTvrrfAt$UMmEE z7+`|qxq}nbtkFx%PJ?c8c zT)_gI>&f{QDMR*S`MLd+!ifuYe<_$W5d!7T%Z+aLQP!r(6>DM>`VrxJPCV+zWfO2}P-L$6;k`mfxli<#4p;mm$gO9;!>2>vOk$TU{+R%4fElRKJ5 zTI#-3%0uufVT#3d3pC>VNwR|Jd)7G>)6w03TSS#4XT=l7uDORwipsFp$mTN)t!c9t zhc?v0j?JlqOU0z^r&k&E?jN$EX9@G2&45~uW-pGvQIj&thv3N@EOD=!DUrDf zJ53u%&85W-{v+r&t5B|{E;yfY{A84HN>y*U*(gYniuwWT(-h;N<39N#89p-3+PxL~ zKd5rgHXDWqF;(>?6?e`dYqPp38YeT8&OqsLqygmwLuQ+YKs-xDwfIc0UEXvkwv*+5 zm>AAj71OgD*)MN8{Klrby-Z%9Bts%R^FFI10b__D4)NXWK&P>FJX9{cZoei{c z%8}kmW0QT&DfCrnpiKEFpBl&toVqcV;bw#Qq9SfDf|S=O)lL83Zem2}Amlr9+AW%# z;x-jEy#55}7uDSRA3AD)k$8^q-m?@4r9`OTO4LCNZ)$_c6&L?fxWiL@D>~l*lTr5- zYc^(PYiNcryoRf_cH2J{M}PMa!xbFaTSN3tRa5JWu@y~h1+mAPFlOrUAS74hqj8`t zybfK6kWw`Pj1zD=O!seKWpl0Zb`;Qvj|sBuk?SXk5@J2_;num9F5Ol# zh7^Jjh6~@uO|7J+x$^kq#Etaf1QCr|_>6J&oBKMO&TL=Z7DMtcVvEDe7oUXDtY;-YC_^D?}u}K6A~*#nA!hkFE17otEMbWffkx$kO`r zm-D%J-VLAI8*bnbLndN(QSFMpvYL(uM7M>yh6|PrhRN^lwW#oUHLA8&(qoYl{&9no z3YwBk(&EGMqzvKRlh}qZ%mo-UqGc><(AkyMXX;mHT@bg|gPPf`4Q? zi+*Q3ZVf*J3=t7_*l20V{*}xpO1@aZA2cIuD};r#eqGcXI$vIu!18U)2IZs9himWk zRCXIK5U-S;4_eRAL#@=9jSH{w6*h7EJDc5Ll#pf!DlegD`w`ZM;B`q6prN>)xJUg= z@|Z;M$rKhnQe_mjqZoN>e&znd$z{6b5`D6c*^0p4KpW{7WvTl`v{EZR3zq46ybTTY zdv^ddUz=|TA6$aFTIe%xy^ z3(I1aw=6F|eCD3(zbH7*`fWcD`Z+Itnq_$*az1C#jdf!{>HHL0u-Gxw2vwebG~RH0 zi%msN^uwdyn)1r4(UaRtHPt*sEbu$D1)RQUCJYo42W? zUb$&X)5PFt(GnT50O-$J$#$tL*EFASa8@+A<3W`~4OhWxepOQ*%lA9~mCewP<{Gn1 zvP|*Q{(-U(IweYWlx`?*)NbMociWop;~s0V#!&KasPNMorvw*$g*XvhOo$cZ0LMNu z6TmGtaJe*pO{wNX@vfiSm<;*Vr?0XclnGIb?{&(Hktg&{K>Li4fKdQDwZ}9H7(kCn zzs$``wBJfE;`?-|b?nxdi-!T@W%96RVv9GuMrK!jEhSOE=z9}*3gy9V6}w>R>zQce z8A`L8ozoF{twBJvo#Q8$CBSwfJe>wCheh1ZN*6=RK%P!WNWh-I4L74&#hKC|_MHiB zv=DGyjG4l>I9NG?jGRNmurb>RnzXm;pW0>6#BmHllp)9KC+x^(IU3(H7Wtm}jXMTa z-1`v%Z1IlS9>kP?Suy{pGL* zHrxeV^KW>-zkg&ImcDv%o<62``H^Uav0}FShLgrl=QztwpO{RjYoH}ypk4u_1r;%c z1gh`(CujjU=)+@7T_9?|57K1}ogJGnE-qdd&I+>Q??*~+xYEw4IuC%5gT4Y=0UZ%n z8Mbesm4L3Y2TL+=^c2)8K#H`37ZDTzGpLJUc8@Oo?&qFfOW+7#ADu75^gVEYDUiXm z8N(9Lr&R-meL>n31qyA<6nUD@8z5-P=fJ$^^T8gLSe-4_Qwb+n3xthq_Yg51v@>5> zdHB%Oa(h?szqps{Tt9a@J@*NW=o5mARqy5}ysd4fkcCn_`~EOu#RhZT1pW!El@Ule zk5|Inf$Bj_KSY<96aw{old(bC#F)>bVkFn)xWm>5;{C^vrgksPf&ZWJzn3U!ANwW@ zlutfwQ{G?pVt>|mXL$x}r{%*WUlRdFA)?2jwd;PSoY)OsIDfltTjoPfl(0%o zpL|gQC=lHsxBWOtH^KD8jvMT2NW!*I-96M7YDw1&%gW-HxUG1Rd#eLvZejN_W9g+> zkAA=Q(K^Z3;V((m7Vc8u1Dp{CaH*yL8(I@P;yee5*WyxxI z(+HPx6%>6FARv_I09=*b_(1%yXz-A4tpTwBY6X$LHUW9Cl|nsYkx&s>RfWa!%n%9d zSn4?3iPgZ5uwlZ8lx?0n&i-rVam%cF(!b!;QYT@lL^~Q_HwXqtikGP;IL|Oe`iLhv zbheY6Zv@iX6d%=CuyB#o7ZF9rnxA~poyp#7?8nsC#-G{vlGGyrVV{0ej??SnJL@Di zqu?soA!d5hwX8_;$+!wK|E5$t#EPJm!cypWR(@(HrrLq0n(63#Tur}}S|j@aN=?My zAsj4unE>f|XKGCc+nQhx<*H5Vxg*3~U|*kmAUtzS9O@1q9ukGYa(R1Vu-!hw`$JnY~p(ncv+kyjUbWHRMzWakYX zZ9V_soy!Xs&UMDJPyB@Wl@WbY*rx<5ghv1tJM_G0xn@{%>w*WMw?lz?MVQ3&=c^cx zsqbJ|Am$l7&Q9CJ-&U58d*K_&0AyEYIX-qxK6}ALC26{7bhjJ?)GJZh* zgql4cwfuHJnw_(S&pO{8qxpYa0J8A*=5K|_aHcsy0GGM$z#2LO(4X`{IhVH;2$vbO zORF2PSKeFy7+rt-;>4o%l+r>tHuO@Lf>kxX<@XrmvI?D3bDMdQg6xZ^-fYGrn z7pFui5MPZM8It;2U~@L3CYIp3txuW9@;+fFHHI;SkDkx{w?)3COh8l&PxS2Bv{a;u zepz-d*-`~d7v5h{0U+0kl?s5K8~1kk%?S*Ry>uo+L$NwuAPLan7%f?Ol7iVXjAv`%szcQ5lZ7C$oo482ncA9r2Q9BdbysvelPx9f_RwX z{J@2HU?k~WXgx~vY3JpZZ$eS8@Ey9c(RWat*vzPtU0{}5gU z9=H}!7GIrZVc`St8i*n#;={*s4Wp@IgkC ztDM#T{4J2k!xgz%KX2rUz$Yp#iMrnPsi|kSNDMYIoiG{~l|lgrQ6uii5C=%R1D|VK z6JnfuJw)S;f(KQc*HfpKaD)U1C&Dtr{b6#Ra9z5yJJ6!0NbG0zo9>xUkLr|U(jt8b zgVhQVSGH9WRA9ZDWIpQd=Tn0s)ta>6#(|H=GREIvwXCT{qWT&FKYB{*<7*f=C}XT$ ze^h(?n`LQ%CW3q(BIKY)h{?*B*i{g}>O;?ht5R&x5G+*E{9``v_! z1g8$exUaGyN`O@{I%yXRc?QW_`EzH#IyfIo=j7tZM=1SZjm zKlLtlKWt%=>!Gr+Tn#9TW>ndwm8R>bFXEjk7$khnX|Q9Uy@gWLoqVQJkHFp5)p98w zqRK4mGpFNUSOrm!$nst#d*cr~3vF%dx_%h3mgEI=M_I|UwlV65I zVX#^|yr@xU7zIbgpRccmgi}ww%jS<6ye!Tx+Y=hh+;Xsck zOyx*n#5i99=HP}nosz+U|Hn=%RQzFrBsIcjkj9uwC)2EzY^?_T`)ru>DaVB&cGhUz zPf^rVYz1A@nikJ8i-}rI^bvO!d=VcyBdxh-6t|kNmtwWl!#ma^%D^^M0Ag{JoM2iw zGfmfK893Q;tVKf3^*H8=6FeLUNbM{}2TQe+1*DsejHWAG+Y_TY2TErN`!q6=$U#i8 z;7T8&ZGqd25D{~<37%kuu`mfiUo+$r`$CUSimso`(C5Tr9gF=Zijc9`F-^wRsc=Y& z4YFXiHotr4hboP~pYf?!0CfS^6;AaI z(!%+B^%_($%%F>DV!Sk(o_6>g)J_`!_!lzt>A>0deDmKBG0W6Tyfn$ct=P%Rmug6f z+mCUT_ak}PqF3jbj4zEQ%D~ep4CdAXhY%fvi$A*}D~@vh5N_5c627NO{~pHk^A;j{Q4VZ#!l`!wH-_Z0k+*Y}6pwznB_ zwhY6)J*aDDA)1-Ef&Xvg^sy==trZggP$bEK<8KK$F9h!eBajVBt`CIrHX;bY>ZEhy z#2phAgv*OUOPW)B-CyUZBAXV0FHB`H_8&4MLD>}}X`|1-Z%uqe!B>skV%{#xga06X zT;2f7>J4h;jVoo#G!%}Bm8&D6ie_y&g6kc3 zt<+`HhIoIu)-2xr?i6?wW9Hv=nz2BG99Mz3E^CONh>5IrEgU7tftapm1w0*o~SMGbhJuolU{ zm{+P(rPb%6I%R-5S|~h6=lQ#@g_YM}S1@IiOm9#B;{uRQ>lj}zakA49wG^mjZ?B_3 zjk$|n4-t)fMlc&gMeN@4a}fRfS3b2z83dEKDvYzmcon9oNy-6YkS4!cvjO*Pz2ahl zMf;8V-_hThiL)J#d2ZIL{3c5;@h5ltmzH0mKHPWcY{JySqLo@CslJf0VaMsygS(g)-^cUh)9#}dp{2u0xH;Ja zJA_7UHF8axh11`n2HKw^f!JO|1@_Y$8&Qcg$513Fv4n9@Yj81EN>%?7LF z-R#EErY>@+netHd!}b$@jK}rA`fI}eo6?#-wHI|dJl6?F+c42Erwjrm^=6;tS*Uoo z&d9ONR9uKq$phdyYCOTxcoXHI#%Qf`_HB;nD-(ntE&8l0a;~JuFOS>W{6BLo zar#Wk3%ES6XGlmN0BJv${GOdXd`UMTA;O2vD>U!^RaUy=uX1SAf104hQ9JG2TTKp6 z2`jzij3BQ^ZqHi(+HES|e|i1_6V^BT>I3GDMuj81JQ&yLB2li&X6$i7m0|Y<$+iq~ zJ^DEhi`#Q`1^mAvu_G`BdD^i16m2V9==ueW>*6-WbLMO1gghY(IH8EX^A=n90X=s11vY3!6xwQS*#UpP8Z%NG_W#TqwykW8xzrf43Ak-9pLA-<{?Pq{( z`8Qh1j(45Llq#=RNNwo!M7$;_H42|7B3&gWYH2JqoJ6~)pr8Qi42VsDuhlO8;>yM+ zkMQf+M3#0@ir38ri72)&X!`>l?XtD$?!Ko~P`G5Qse$k*i&XL5+r=H`5zZShg+ugB z?`Pqgb3exd92~>}2)BW~{N-Y%ALZaJvN`N)kLQH*y}K)hPy;4`Htu-i5O4x94OEx99 z0QO2uVkLwdJxU2`2WS`j+p*5P`RBl2s;Zy03u6u!2nf2p3UOTX%snkh{SGZ%koO~H zxrQhOTxt8&@6eudWjOhqFuE}gJl}fWiN53?He&&u(!b3?b`)5B>oPH6K4ug=vN?Hh zynU4;ok?mmt?NpO)exO9uPYr|#`{p`(4f?!)+>T_(*1`5!w8ao$AcpR)X~e}d=JC3 z|MqQZRh-kq;M_F&724HRL0EKE%)bPrt54b*SQO_+1u+NH|SXzEuh8y%P5P^IGbdYxG#!#dD>}yv>1W24YnN?d*$1=oQm%{FoFL~M#hnn z|IlnHp^q_B#Hi^@F4u8WmUaM+aK1PAs39231NsvAqF&r6;lzp#9{^r^Ao_fBe{UsN zW{Ocbb#mJJY+dJiq+pefi&J9fA5f~bdOeKLX!V=iq5rMVI#HPZ!-+0vKp_o@gmA zF6Ai7&v6RguFh zOgR-jbdvCenTofC(m-!Mc(#d@O$xu2W(9){dqiS61WCmnm*H3bOe)KpMF{az3$1Gh z4r#81J8FHozK^LF?P{-H1Ij-JCsyO~?1Dx0iCje(uVcn1>_K#4e>}ew=!ixaYh4*2 z<@yyI{uC{5n?ffs;Q^p42uB=SFqEfKX@BYzQ7nsh!^|Dm)f@uBK{>Oqrp<_a%bs9Z zQ;Q{F8L{CE4j;tpd{GvfTHjrm2vLqiYprL$gRDO9>1Q{QW1yT1-Qd#iPUz{yEOL;8 zWZ(s9fXs7A^&`L}c3}{5E)?p%`-u1!J^;ll5lzN#`1KLjNka`^Wh@u%X`+r6p-YvsoD;E*DPEVt# zN0$Zfub=-pNUo)`Wwa?!%&ciRD`oQqXzF2W5{r@q8`|d=KLAW`#*(#9Mec6*O-k5= z-cz8v?w9R(d)!x4+_$7SPvJ58&x8Zh2hznN_PwZCaydMB-5{`12`wklw2Pv|3mbZF z%EniNNA8le8JC_y5n1}YJU=?*yXzs8)bN|*iyN(tE>CKyZdHJ&JY_x;V^N(HZ#VoZTjlNOfC7i^cBgGW7hQ3DPvwo>#4M4{PQ9x+(Q1t3aA9%i5L*j^)Em(T;}+5&0i&vUACIA5 zizZmdoX0+6JJHV&YJ;>V92`i6J$aQhf_1(<+%m{*Prm5r0>Q z`m!Mvx-{FsCd|~+-AX@a(qYk0GP=1@8id-Ubwx--)ra> zJX^NFik1xYAwWg(~1gYFM`EGKsxM)q-o)|?lQc$YUG=1*O` z3flU`r6ViC+iiV(pX5WoU~z^m!^Da2CX zyj&yX*5G{q-ZNs>)`D+71T}eseB0=SKzu#!nGA!N@DCWu0W+Gl<~Il0{99vKQZ{PT zn8c7BoP#NUFJEKo-F^@pNGLMjsM$P1lQ3m|Mc;_3Rjcm?8ufUqs}$%)(b>*4*BQ;* zkcv>&wh!}@Bjhu~@?=|6A~rh&I0VRSFtQRcLI}OSp@XIt4Ikqtj^p}UuxI)G_4)xo z4N&o-VmyiPMv^=Ix!C&)k;O?^Usp@t;}xn0h`PS2j=#DQRd3ShSs6BYO6CXVos{+<=?Zt zcJEI_77b|vLeRO_^d^p;wURvt)m|HhNgnlQQ6 zl=)j*g-A&hPTX>;)e9hgwM*Z@KXHrGaX3F0L7So`T3rsCMYvRuX6w@j=l26^SZ!&xciUC@)0 z`8l((lpV2py@XIX&|ml23(MXeDs=?^1n5QD&l38MBIhvz8i+WBwz>zEW%`v|n_}bU zybg}57nQCBWW|rrD`@ophLEp6B<02Vc3|pCtO393N3Qi3^S_N*ocDXCF|nfvvf7sy zu7l)GO}k)&Sm6=8Ad-G0mMX>jxT*Uono6?j5%FQ%%~S5wLhVM=cmd}GcdEtmJyy=L=2`V4}-$SRK1B%QESP^^23tArX3CxP?sR{zpCuvTL5 zyrXw_Swyt>u0e4qcee1H%J9|0-jVe@dwL`HkA<>@>QVB>h76Vv*mqiG;w>pAtlxfN zLngW+gXW3+r&}7ROSQSILoAW|aM5+Dk|gRz=}@~}B2`$v>`68j1TS?RHnUw3dm=d@ zvXG-My$zBK^xDD^GVIsg#thlTd!oluM~-cn!`&V%#B*V43SANP|L9g)9sJVf7d<5$aZ zX~e+EyPy+>lAurBZVo4EYzZOb*e{0;WEbSHsre~$Gi|DAbYn#+VRoiCu1NXs2UgQR z*4OlEB(PCcE2O~SM(0PBMXlz~GcGPmferzXPpEn!>E5z={Fki)Y4NNcnB%%k(dwaX z^bW}y|IBlabl!MqENX)C6~hWNKetb}_Tvi;pC%B1{z(lfrVLaoEH(ZdeM830m0KPK zDX|E??UdEC2X4k|Q{j@I#di=35D=%}i0*_)*%Qxm2f6pu6~54(aYkLKr4vJ(b{fMc zvOu!Pho~$6fO}{7%CfCSBNNp~^?0d{tZ8Xvm-CkfiFQC+t!TED>?DevJSq&ydXTyD zrILvFmydopSz)c7WjLI~BBJD#s8?C>I|qO?BCltY9jc{bapI2ZPX16$D+Uq;(1lQJ zImKe%Erep8^QOyz%Ybbo2B)v`J1$I(`)EE!xlIg^;iG<6@*uzld^!y54b^N<%isNv zj&B>-@c+&3b@+5}Pc{d+FNhBxkL?rOYL)%EVdNXXFfMNUGCKd~$zff2{%*7Pk>60O zz~|4x^sKHT>bg??glQ-5SIr3$?4YM+I$b=z$Fq{1{<6L3xT3uimcpyDuFXX3j6ezh z7d$m+R*4$(mlHvQ$(P7ciwOT-5a;0W`O3oe9&Ixxx7N9)1OA&O_|I(0=c-ZuR`U_v z*5HZMxc(2*qzFKcq=*B=mkCop66aOw7LkQ)$E#E*t#87_xM0bEc^qOgt4ZH{2m<{*j4?@0wH~MBL24z~La?_JD z@>~7T-^}K6^X(cl+2X$}FzkSS=-10Kb(Vt-gF-Cr2~)peI6ENFv{0w$1xLoA7k^$r zt)y&n@kd2idlnkxok)HqBNqOVyWz+h!Ef)_hMBq=qCq=|R`(aXNxHO+U_nvQj|vt& zI&v-Uv}z^AFJ&am+qi~+X$GP>n4;Io)SHVNG!r38LfE=RDlj`rgZ>*jQTj?J&}iA8 z=wlJ`4kAJjf^h|k*62Kr;80DG78RuVp{ico^s3iqeXp~C<>;~6HOZD0YDNi6u&}Ul zE8# z?S^O;=qN7nvu{P)Xvpc1!MpU|vM4gnu}wX8Hwww;6jg&HuxX<3=y+#819j`ZYyUza z%!i6Iph3*hv9DQoL%JUbhrioT4H7m6m^n6{mB4kA^^}JP=%v@cK2c`+#Qb#T*~ z$IHfjB?bhj&DxmTvI{D0_7ZY_GJMmZ@75J*(wnzfN+xjlAWTT%+DV}&Fv6A zI)MwiZ&w<2s-2pYrP^8tpWCegb z7OG6-jE+nQmYTd8u-|0R`0ZN$`lG)qt)d9c2a)^Ho!s}UnUY*h>7L3|DnwHUF`7X9 z!?wqAl{GrAwH2du&!~a=Am?tT%m;gmv6wl>KSbhEar`G29GG!P+t1e=q8@?z@tMYX z&w)qq!ju$V1xsc&Pv)sXJ=Nd9im7ZqjN(ZKoemG+R<(Jr0(EF)iIr^w&1H z<}gFUBOvr1UF=stIGf2wSxiyc^andiL0>WM!YX$Gl3>Wq5H0rz4tUVb2a!X8;-+Zm z-CSZ~pEx>8hDgfQBWh(|={U)&%of)3iQ>1hdO@?V3RWu8k&^sAtHa=V)`D7)l^SnU2Q0?t95&uih;;lGFK_H_A^2fRf;NH%55CMlz8ALN1~>8E1?|ZRgMfU zE2W#Wd&`K}n&daw+giQI1l5F2-7qqcds4e5- z3Q}IFRY#wtNTe8?IXf4F^2puc})I-P6K*>KC8>{SR6V>P^Vl9tJH` zS#&cr4uPAvQ1Pm5XM5W|+Dq9u9AWM^@0VRJq(nget>#^X{lAfNo}`Ucn?GruJa3Sd z|8Mt?b@ehlbGH?mmRhrv(YPtzp!0ynvvX6Xm01tGkN@P-+9*~Vmq?9G(x%j zr-wg(FvFt5+w%~In2W8@l-#;h{e5feIP4OHoE55gpGY+8nHLGk%Io}2n)~;5TkZAz zJB;p1t-g9@(d)GZyZ1=2w;wm0C8*PLZ{@8SKU)@N)SoY3uydJ2p%Ke+d6x_-P{ScwihAHt4yb4-QlGd7luTzztX-_{%PK` zCyy&%UuwT^d&2#x&p#;syt|I?V;M_mqXA18?~O+j)Ppzl*u1&)#{9&F+p5d%{S!O? z{`Koi=WTY?T>iN9Qe7oe{=Achdl|mI?TlM3wj_M6k_&K^1h==xwq;ADcir~ot-Wt( zD!lukfQ#(3O=pa=oENn7N*uay!lumMfP;Pa(YeY&vF@TT4Wj2LZ+egsI*$>!k*xe| zulfF+OJCGv+sr%vXvW-y2KxoOA53IhDI?R!vq&jJWXtpW9NOERMAgp3Zc{F)y*1M` zJ81VRu5Vv!!hrjeSMB@ut9@$jl0Xj6K;5OP>z8D%49L$fIXdU}M3wh*|Kz^3y%f82 z<;EWy_-904nBT?sCFYpY-|L%8?=BC^wabf}Tar~7@F7R{-OSdOX`~U5xP;mhZ z$BJ1Fzg}`GFJ;}37oGf(5QzXn`H z#bMlHSL2X>S*mJr_Um5PbElL~@U=_*&$YKLfzhdvl97o^t%daoBty2NE z^74G5&6m{ISf&LSKS(>CES2q)B4;4K?s{>7kA&Xt#-K@^W#UtA&0IGnq~`UiDXTVI zIC}Bg&TQjzI;~o}K5AYwSrhi;QN4JAR?GSy`@eovdV9eB{IUOYWu~XZ_LqKn%Kh>F zA>$95O(s3((t2C#UE19qduG;bhtZ-<%56T(xdjTimaNq5~hFPYema zwx;>sn?Dgb^dD*6- UoABx$@KhBBPgg&ebxsLQ09%>ajQ{`u literal 0 HcmV?d00001 diff --git a/data/icons/hicolor/32x32/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/32x32/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..8738aee35c510a19777df0354080237a5e07f56f GIT binary patch literal 1722 zcmV;r21WUaP)PZ zmE|ETh#DXmDB8mrAI;=HIa!lU!wlv$R+DK{mNhljm^C)O8lRaDv?fcfm@?DkwRdmd zch0@b?y@S`*k7HQGiUeAIp6pDe&6d{k?8;NP=;6}7BkGl6EBuX#Eeu*R+yg3T~9us z0)`P3z(0lvf=%4>(BO4Qq`q=xU}Cf&>mG(M9vh5!yhYHb^sU#58crXpUCD9vYv_zkUe-7!mjcig?dWTKisLl;4XXs13?q|yx+EkrUnk;` z6XkN>U}dIp*S4B2ZUlwb^>AG6s53^MIb%l!i4r0Bobe;>WW|QL$Fote+{C%l12UBghiKR8)^=H3ZSo; z+HT!wcmnoq{bvX&sZ8Zlw)o2VT0mXBd}tIEOk^SmR0RIM5D=V_AXpirX||$bltlrv z4r@2C2=aklG>+U$H@vb%#QUtbfnFGysB&RecMRK+30Mavhv}1vJ0w1mqJ?L^Mi9Ka z5GGk30oOLB?zvmSkZ6K^5)+M@?i*^Jq1yMYaDa72zyt!c7m z6u!E(e95)Tu0Xs2SnxPUCi+zP5B?t2=+^aU^cz>B)p)ZK%j!JB(1}kqY=)x?r)08E?9%T_kVcm(N ze9Ft*iVz57F*>KlRh7~JlFLaM=8Fm+R7^&}wk_03h>K2^P>+AQ=ii!L2bNME@e&m^YzwAWF#SRp_$#^TeuTF1+WQEa<-3X4L%<%@m1%5lAb z^a!Ai2eFJ-U>5>#;gcMfGUvGsPMMA8PST2LXYmX$Vuw1BB$(tTJg4IQ-B>o^;E*af zIo|6b3PU7-$SCZ4k>oh0Dkwlj$VQg&ogEp4+g_?_zx@XWBZ5T6pqCuvWsH{_pVr+f z)co0n+qV**yU^}JgIH*v08mt7JI`A=$_nX-au66Qr}PgK`qi4|8n5)@P$;9OKn~xs zK;Xc|p}^2|4LvM#iv{5q)O#OXq2Qzf04!F{^d!B5utI!Kqrd*dAt!}*8|jAL7tpU5 z)y0k99s^57o`@&;M}^CMCaWkzaspyz_Onl8{6PA-_YcStOh+*24j7b3O}NK91KZ>L z$8KE1^g+~l)%*82EtXDF;F?|b?i=P#_G(;8o6YrZo_YU=SR>q<80!E4L(xf%77Eyl zOP%EMR)(vMd8izF0@j7Xy5k2Fs+e%$9MtYS!N&+tD5u!pAr(&|6Xp)mvdMi2$n74Q z?(TxIr&NoTW`u)OF=!gUX)`yj0UBpUPOmP)SizvfGr-u75wY_NcnP9h(P=JimLTYfql82X47pLJo;#kuMkHp{dGYlSL!R?KV;(!`1VQ%&OU^vlN6>_!P*w;a3I9pP;P%7R`k#!y0a+Iw8Hn6{ QasU7T07*qoM6N<$g6>@~{{R30 literal 0 HcmV?d00001 diff --git a/data/icons/hicolor/48x48/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/48x48/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..b185769b4e3e84e55af50e462cbd99e28abd445b GIT binary patch literal 2775 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 M!=A#FS$f_1Kjt=Rx&QzG literal 0 HcmV?d00001 diff --git a/data/icons/hicolor/64x64/apps/io.github.tommyfang.DshDesktop.png b/data/icons/hicolor/64x64/apps/io.github.tommyfang.DshDesktop.png new file mode 100644 index 0000000000000000000000000000000000000000..5beae9a4ad3be4d08fb2315c10e575b523a6ac34 GIT binary patch literal 3759 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 Z<9~vDa0#=j*3 + + io.github.tommyfang.DshDesktop + DeepSeek Harness Desktop + Desktop shell for DeepSeek Harness + DeepSeek Harness 的原生桌面壳 + + MIT + MIT + + + TommyFang2077 + + + +

+ DeepSeek Harness Desktop runs the official DeepSeek Harness (dsh) WebUI + in a native Tauri window. It starts dsh web, waits for its local URL and + embeds the UI with the system WebView. Credentials, plugins and agent + permissions stay in ~/.dsh. +

+

+ The app bundles ModLens for text-only vision, a settings page at + 设置 → 视觉模型, and the community Anchored Standard presets. + The Flatpak also bundles Node.js and @deepseek-ai/dsh. +

+
+ + io.github.tommyfang.DshDesktop.desktop + + https://github.com/TommyFang2077/dsh-desktop + https://github.com/TommyFang2077/dsh-desktop/issues + + + dsh-desktop + + + + Development + Utility + Network + + + + + + + +

Tauri shell with an Apple-style title bar, bundled dsh, and on-launch updates.

+
+
+
+
diff --git a/docs/licenses/deepseek-harness.LICENSE b/docs/licenses/deepseek-harness.LICENSE new file mode 100644 index 0000000..c1f7a78 --- /dev/null +++ b/docs/licenses/deepseek-harness.LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 DeepSeek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/licenses/dsh-anchored-standard.LICENSE b/docs/licenses/dsh-anchored-standard.LICENSE new file mode 100644 index 0000000..ff546b6 --- /dev/null +++ b/docs/licenses/dsh-anchored-standard.LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2026 xiaobright +Portions Copyright (c) 2026 DeepSeek + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/licenses/dsh-anchored-standard.NOTICE b/docs/licenses/dsh-anchored-standard.NOTICE new file mode 100644 index 0000000..e8b7c14 --- /dev/null +++ b/docs/licenses/dsh-anchored-standard.NOTICE @@ -0,0 +1,14 @@ +dsh-anchored-standard includes an adapted copy of the DeepSeek Harness +Standard agent preset from: + + https://github.com/deepseek-ai/deepseek-harness + commit 47f943859bef60e4160492346772ded9b24f765a + +DeepSeek Harness is distributed under the MIT License: + + Copyright (c) 2026 DeepSeek + +The full MIT permission notice is included in this repository's LICENSE file. + +DeepSeek and DeepSeek Harness are names of their respective owner. This +community project is not affiliated with or endorsed by DeepSeek. diff --git a/docs/licenses/modlens.LICENSE b/docs/licenses/modlens.LICENSE new file mode 100644 index 0000000..d97d8d6 --- /dev/null +++ b/docs/licenses/modlens.LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Leon Liu (liustack) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/screenshots/icon.png b/docs/screenshots/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a47edbabe80a7319e3bc9e11b460b8977d5ef03 GIT binary patch literal 17803 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
c`+#Qb#T*~ z$IHfjB?bhj&DxmTvI{D0_7ZY_GJMmZ@75J*(wnzfN+xjlAWTT%+DV}&Fv6A zI)MwiZ&w<2s-2pYrP^8tpWCegb z7OG6-jE+nQmYTd8u-|0R`0ZN$`lG)qt)d9c2a)^Ho!s}UnUY*h>7L3|DnwHUF`7X9 z!?wqAl{GrAwH2du&!~a=Am?tT%m;gmv6wl>KSbhEar`G29GG!P+t1e=q8@?z@tMYX z&w)qq!ju$V1xsc&Pv)sXJ=Nd9im7ZqjN(ZKoemG+R<(Jr0(EF)iIr^w&1H z<}gFUBOvr1UF=stIGf2wSxiyc^andiL0>WM!YX$Gl3>Wq5H0rz4tUVb2a!X8;-+Zm z-CSZ~pEx>8hDgfQBWh(|={U)&%of)3iQ>1hdO@?V3RWu8k&^sAtHa=V)`D7)l^SnU2Q0?t95&uih;;lGFK_H_A^2fRf;NH%55CMlz8ALN1~>8E1?|ZRgMfU zE2W#Wd&`K}n&daw+giQI1l5F2-7qqcds4e5- z3Q}IFRY#wtNTe8?IXf4F^2puc})I-P6K*>KC8>{SR6V>P^Vl9tJH` zS#&cr4uPAvQ1Pm5XM5W|+Dq9u9AWM^@0VRJq(nget>#^X{lAfNo}`Ucn?GruJa3Sd z|8Mt?b@ehlbGH?mmRhrv(YPtzp!0ynvvX6Xm01tGkN@P-+9*~Vmq?9G(x%j zr-wg(FvFt5+w%~In2W8@l-#;h{e5feIP4OHoE55gpGY+8nHLGk%Io}2n)~;5TkZAz zJB;p1t-g9@(d)GZyZ1=2w;wm0C8*PLZ{@8SKU)@N)SoY3uydJ2p%Ke+d6x_-P{ScwihAHt4yb4-QlGd7luTzztX-_{%PK` zCyy&%UuwT^d&2#x&p#;syt|I?V;M_mqXA18?~O+j)Ppzl*u1&)#{9&F+p5d%{S!O? z{`Koi=WTY?T>iN9Qe7oe{=Achdl|mI?TlM3wj_M6k_&K^1h==xwq;ADcir~ot-Wt( zD!lukfQ#(3O=pa=oENn7N*uay!lumMfP;Pa(YeY&vF@TT4Wj2LZ+egsI*$>!k*xe| zulfF+OJCGv+sr%vXvW-y2KxoOA53IhDI?R!vq&jJWXtpW9NOERMAgp3Zc{F)y*1M` zJ81VRu5Vv!!hrjeSMB@ut9@$jl0Xj6K;5OP>z8D%49L$fIXdU}M3wh*|Kz^3y%f82 z<;EWy_-904nBT?sCFYpY-|L%8?=BC^wabf}Tar~7@F7R{-OSdOX`~U5xP;mhZ z$BJ1Fzg}`GFJ;}37oGf(5QzXn`H z#bMlHSL2X>S*mJr_Um5PbElL~@U=_*&$YKLfzhdvl97o^t%daoBty2NE z^74G5&6m{ISf&LSKS(>CES2q)B4;4K?s{>7kA&Xt#-K@^W#UtA&0IGnq~`UiDXTVI zIC}Bg&TQjzI;~o}K5AYwSrhi;QN4JAR?GSy`@eovdV9eB{IUOYWu~XZ_LqKn%Kh>F zA>$95O(s3((t2C#UE19qduG;bhtZ-<%56T(xdjTimaNq5~hFPYema zwx;>sn?Dgb^dD*6- UoABx$@KhBBPgg&ebxsLQ09%>ajQ{`u literal 0 HcmV?d00001 diff --git a/docs/screenshots/menu.png b/docs/screenshots/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..4a37ea221fcf9b5f7adb8bc14c67dea56e9be3cd GIT binary patch literal 55163 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 BMmqoi literal 0 HcmV?d00001 diff --git a/docs/screenshots/session.png b/docs/screenshots/session.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6c282fdef6ca5a09f00c84ab1796ea2fdf0f89 GIT binary patch literal 86352 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 QNVvI_gq(QV<5&OwKYdaRpa1{> literal 0 HcmV?d00001 diff --git a/docs/screenshots/splash.png b/docs/screenshots/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..ade364bc98a2e860fb9cb04d37695efe9e96cfc6 GIT binary patch literal 42355 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%0AMnDck^g1g3;g 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 IxpDhH00LNL + + + + 标题栏菜单 + + + + + +
+ + +
+
+ + + +
+
+
+
+ +

DeepSeek Harness

+

已连接到本地 dsh web

+
+
+ + diff --git a/docs/screenshots/src/session.html b/docs/screenshots/src/session.html new file mode 100644 index 0000000..3fa349d --- /dev/null +++ b/docs/screenshots/src/session.html @@ -0,0 +1,135 @@ + + + + + 新会话 + + + + +
+ + +
+
+ + + +
+
+
+ +
+
+ +

探索未至之境

+ 预览版 +

官方 WebUI 运行在原生窗口中,凭据仍保存在 ~/.dsh

+
+
+
给 Harness 发送消息
+
+
+ 锚定式标准(实验) + 工作区 +
+
+
+
+
+
+ + diff --git a/docs/screenshots/src/splash.html b/docs/screenshots/src/splash.html new file mode 100644 index 0000000..6942eb2 --- /dev/null +++ b/docs/screenshots/src/splash.html @@ -0,0 +1,34 @@ + + + + + 启动页 + + + + + +
+ + +
+
+ + + +
+
+
+
+ +

DeepSeek Harness

+

正在启动官方 WebUI…

+ +
+
+ + diff --git a/docs/screenshots/src/vision.html b/docs/screenshots/src/vision.html new file mode 100644 index 0000000..a7f44ef --- /dev/null +++ b/docs/screenshots/src/vision.html @@ -0,0 +1,115 @@ + + + + + 视觉模型 + + + + +
+ + +
+
+ + + +
+
+
+ + diff --git a/docs/screenshots/vision.png b/docs/screenshots/vision.png new file mode 100644 index 0000000000000000000000000000000000000000..febfe351d670dcd59c809f4d522c51aa95ce9974 GIT binary patch literal 104626 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 { + var module = { exports: {} } + var exports = module.exports + var React = require('react') + var jsx = require('react/jsx-runtime') + + var css = [ + '.dshdv{width:100%;max-width:640px;display:flex;flex-direction:column;gap:14px;color:var(--dsw-alias-label-primary)}', + '.dshdv h3{margin:0;font-size:15px;font-weight:600;line-height:22px}', + '.dshdv p{margin:0;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px}', + '.dshdv label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--dsw-alias-label-secondary)}', + '.dshdv .head{display:flex;align-items:center;justify-content:space-between;gap:12px}', + '.dshdv a{color:var(--dsw-alias-state-business-primary);text-decoration:none;font-size:12px;line-height:18px}', + '.dshdv a:hover{text-decoration:underline}', + '.dshdv input,.dshdv select{height:36px;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);border-radius:8px;padding:0 12px;font:inherit}', + '.dshdv input:focus,.dshdv select:focus{outline:none;border-color:var(--dsw-alias-state-business-primary)}', + '.dshdv button{align-self:flex-start;height:32px;padding:0 14px;border:0;border-radius:8px;background:var(--dsw-alias-state-business-primary);color:#fff;font:inherit;cursor:pointer}', + '.dshdv button:disabled{opacity:.55;cursor:default}', + '.dshdv .ok{color:var(--dsw-alias-state-success-primary)}', + '.dshdv .err{color:var(--dsw-alias-state-error-primary)}', + ].join('') + + function ensureCss() { + if (typeof document === 'undefined') return + if (document.querySelector('style[data-plugin-css="dsh-desktop-vision"]')) return + var tag = document.createElement('style') + tag.dataset.pluginCss = 'dsh-desktop-vision' + tag.textContent = css + document.head.appendChild(tag) + } + + function remote(provider) { + var q = provider ? '?provider=' + encodeURIComponent(provider) : '' + return fetch('/dsh-desktop/modlens' + q).then(function (res) { + if (!res.ok) throw new Error('load failed ' + res.status) + return res.json() + }) + } + + function VisionSettings() { + ensureCss() + var state = React.useState({ status: 'loading' }) + var snap = state[0] + var setSnap = state[1] + React.useEffect(function () { + var live = true + remote() + .then(function (form) { + if (live) setSnap({ status: 'ready', form: form, message: '' }) + }) + .catch(function (error) { + if (live) setSnap({ status: 'error', message: String(error.message || error) }) + }) + return function () { + live = false + } + }, []) + + function patch(field, value) { + setSnap(function (cur) { + if (cur.status !== 'ready') return cur + return { status: 'ready', form: Object.assign({}, cur.form, { [field]: value }), message: '' } + }) + } + + function onProvider(id) { + remote(id) + .then(function (form) { + setSnap({ status: 'ready', form: form, message: '' }) + }) + .catch(function () { + patch('provider', id) + }) + } + + function save() { + if (snap.status !== 'ready' || snap.saving) return + setSnap(Object.assign({}, snap, { saving: true, message: '' })) + fetch('/dsh-desktop/modlens', { + method: 'PUT', + headers: { 'content-type': 'application/json' }, + body: JSON.stringify(snap.form), + }) + .then(function (res) { + return res.json().then(function (body) { + if (!res.ok) throw new Error(body.error || 'save failed') + return body + }) + }) + .then(function (form) { + setSnap({ status: 'ready', form: form, message: '已保存', saving: false }) + }) + .catch(function (error) { + setSnap(Object.assign({}, snap, { saving: false, message: String(error.message || error) })) + }) + } + + if (snap.status === 'loading') { + return jsx.jsx('div', { className: 'dshdv', children: jsx.jsx('p', { children: '正在读取 ModLens 配置…' }) }) + } + if (snap.status === 'error') { + return jsx.jsx('div', { className: 'dshdv', children: jsx.jsx('p', { className: 'err', children: snap.message }) }) + } + var form = snap.form + var remoteEngine = form.provider === 'openai' || form.provider === 'gemini-api' || form.provider === 'anthropic' + var options = form.options || [] + var current = options.filter(function (item) { return item.id === form.provider })[0] + var apiUrl = (current && current.apiUrl) || form.apiUrl || '' + var example = (current && current.example) || form.example || '' + var getApi = apiUrl + ? jsx.jsx('a', { href: apiUrl, children: '获取 API' }) + : null + return jsx.jsxs('div', { + className: 'dshdv', + children: [ + jsx.jsx('h3', { children: 'ModLens 视觉模型' }), + jsx.jsx('p', { + children: + '纯文本对话模型读图时使用这里的引擎。已声明视觉能力的模型(如 Qwen)不会走这条桥。', + }), + jsx.jsxs('label', { + children: [ + '引擎', + jsx.jsx('select', { + value: form.provider, + onChange: function (event) { + onProvider(event.target.value) + }, + children: options.map(function (item) { + return jsx.jsx('option', { value: item.id, children: item.label }, item.id) + }), + }), + ], + }), + jsx.jsxs('label', { + children: [ + '接口地址', + jsx.jsx('input', { + value: form.baseUrl || '', + disabled: !remoteEngine, + placeholder: form.officialBaseUrl || '', + onChange: function (event) { + patch('baseUrl', event.target.value) + }, + }), + ], + }), + jsx.jsxs('label', { + children: [ + jsx.jsxs('span', { className: 'head', children: ['API 密钥', getApi] }), + jsx.jsx('input', { + type: 'password', + value: form.apiKey || '', + disabled: !remoteEngine, + onChange: function (event) { + patch('apiKey', event.target.value) + }, + }), + ], + }), + jsx.jsxs('label', { + children: [ + '视觉模型', + jsx.jsx('input', { + value: form.model || '', + placeholder: example ? '例如 ' + example : '', + onChange: function (event) { + patch('model', event.target.value) + }, + }), + ], + }), + jsx.jsx('button', { + type: 'button', + disabled: !!snap.saving, + onClick: save, + children: snap.saving ? '保存中…' : '保存', + }), + snap.message + ? jsx.jsx('p', { + className: /失败|failed|error/i.test(snap.message) ? 'err' : 'ok', + children: snap.message, + }) + : null, + ], + }) + } + + function apply(ctx) { + ctx.slots.inject('settings.section', function () { + return ctx.slots.register( + { + name: 'settings.section', + id: 'modlens-vision', + order: 12, + label: '视觉模型', + }, + VisionSettings, + ) + }) + } + + exports.apply = apply + exports.inject = ['slots'] + return module.exports + }, +}) diff --git a/plugins/dsh-desktop-vision/cordis.patch.yml b/plugins/dsh-desktop-vision/cordis.patch.yml new file mode 100644 index 0000000..f10e590 --- /dev/null +++ b/plugins/dsh-desktop-vision/cordis.patch.yml @@ -0,0 +1,4 @@ +# Settings page + host route for the ModLens vision engine. +- insert: + - id: dsh-desktop-vision + name: dsh-desktop-vision diff --git a/plugins/dsh-desktop-vision/index.js b/plugins/dsh-desktop-vision/index.js new file mode 100644 index 0000000..d7e9373 --- /dev/null +++ b/plugins/dsh-desktop-vision/index.js @@ -0,0 +1,181 @@ +import { chmodSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs' +import { homedir } from 'node:os' +import { dirname, join } from 'node:path' + +export const name = 'dsh-desktop-vision' +export const inject = [] + +const PROVIDERS = [ + { + id: 'openai', + label: 'OpenAI 兼容', + baseUrl: 'https://api.openai.com/v1', + apiUrl: 'https://platform.openai.com/api-keys', + example: 'gpt-4o', + }, + { + id: 'gemini-api', + label: 'Gemini API', + baseUrl: 'https://generativelanguage.googleapis.com', + apiUrl: 'https://aistudio.google.com/apikey', + example: 'gemini-3.6-flash', + }, + { + id: 'anthropic', + label: 'Anthropic API', + baseUrl: 'https://api.anthropic.com', + apiUrl: 'https://console.anthropic.com/settings/keys', + example: 'claude-haiku-4-5-20251001', + }, + { + id: 'antigravity-cli', + label: 'Antigravity CLI(免费)', + baseUrl: '', + apiUrl: 'https://antigravity.google/', + example: 'gemini-3.6-flash-low', + }, + { + id: 'claude-cli', + label: 'Claude Code 登录', + baseUrl: '', + apiUrl: 'https://code.claude.com', + example: 'haiku', + }, +] +const PROVIDER_IDS = new Set(PROVIDERS.map((item) => item.id)) + +function providerOf(id) { + return PROVIDERS.find((entry) => entry.id === id) +} + +function officialBaseUrl(provider) { + const item = providerOf(provider) + return item ? item.baseUrl : '' +} + +function officialApiUrl(provider) { + const item = providerOf(provider) + return item ? item.apiUrl : '' +} + +function officialExample(provider) { + const item = providerOf(provider) + return item ? item.example : '' +} +const FORM_FIELDS = ['apiKey', 'baseUrl', 'model'] + +function configPath() { + const home = process.env.MODLENS_HOME || join(homedir(), '.modlens') + return join(home, 'config.json') +} + +function loadConfig() { + try { + const data = JSON.parse(readFileSync(configPath(), 'utf8')) + return data && typeof data === 'object' ? data : {} + } catch { + return {} + } +} + +function formOf(cfg, provider) { + const id = PROVIDER_IDS.has(provider) ? provider : 'openai' + const entry = + cfg.providers && typeof cfg.providers === 'object' && typeof cfg.providers[id] === 'object' + ? cfg.providers[id] + : {} + return { + provider: id, + apiKey: String(entry.apiKey || ''), + baseUrl: String(entry.baseUrl || officialBaseUrl(id)), + officialBaseUrl: officialBaseUrl(id), + apiUrl: officialApiUrl(id), + example: officialExample(id), + model: String(entry.model || ''), + } +} + +function saveForm(values) { + const provider = String(values.provider || 'openai').trim() + if (!PROVIDER_IDS.has(provider)) { + const error = new Error(`unknown provider: ${provider}`) + error.status = 400 + throw error + } + const cfg = loadConfig() + cfg.provider = provider + if (!cfg.providers || typeof cfg.providers !== 'object') cfg.providers = {} + if (!cfg.providers[provider] || typeof cfg.providers[provider] !== 'object') { + cfg.providers[provider] = {} + } + const entry = cfg.providers[provider] + for (const field of FORM_FIELDS) { + const raw = String(values[field] || '').trim() + if (raw) entry[field] = raw + else delete entry[field] + } + const path = configPath() + mkdirSync(dirname(path), { recursive: true }) + writeFileSync(path, `${JSON.stringify(cfg, null, 2)}\n`, { encoding: 'utf8' }) + try { + chmodSync(path, 0o600) + } catch { + // best-effort; some filesystems ignore mode + } + return formOf(cfg, provider) +} + +async function readJsonBody(req) { + const chunks = [] + for await (const chunk of req) chunks.push(chunk) + const raw = Buffer.concat(chunks).toString('utf8').trim() + if (!raw) return {} + return JSON.parse(raw) +} + +function json(res, status, body) { + res.writeHead(status, { 'content-type': 'application/json; charset=utf-8' }) + res.end(JSON.stringify(body)) +} + +export function apply(ctx) { + if (typeof ctx.inject !== 'function') return + ctx.inject(['webServer'], (scope) => { + try { + scope.webServer.register({ + name: 'dsh-desktop-modlens', + kind: 'exact', + path: '/dsh-desktop/modlens', + handler: async (req, res) => { + try { + if (req.method === 'GET') { + const cfg = loadConfig() + const provider = new URL(req.url, 'http://localhost').searchParams.get('provider') + json(res, 200, { + ...formOf(cfg, provider || cfg.provider || 'openai'), + options: PROVIDERS.map((item) => ({ + id: item.id, + label: item.label, + officialBaseUrl: item.baseUrl, + apiUrl: item.apiUrl, + example: item.example, + })), + }) + return + } + if (req.method === 'PUT' || req.method === 'POST') { + const body = await readJsonBody(req) + json(res, 200, { ...saveForm(body), saved: true }) + return + } + res.writeHead(405).end() + } catch (error) { + json(res, error.status || 500, { error: String(error?.message || error) }) + } + }, + }) + } catch (error) { + console.error(`[dsh-desktop-vision] config route skipped: ${error}`) + } + }) +} diff --git a/plugins/dsh-desktop-vision/package.json b/plugins/dsh-desktop-vision/package.json new file mode 100644 index 0000000..b08ae21 --- /dev/null +++ b/plugins/dsh-desktop-vision/package.json @@ -0,0 +1,23 @@ +{ + "name": "dsh-desktop-vision", + "version": "0.1.4", + "private": true, + "type": "module", + "exports": { + ".": "./index.js", + "./client": "./client.js", + "./package.json": "./package.json" + }, + "dsh": { + "bundle": { + "patch": "./cordis.patch.yml" + }, + "client": { + "inject": [ + "@deepseek-ai/dsh-client-ui-settings" + ], + "platform": "web", + "immediately": true + } + } +} diff --git a/scripts/capture-screenshots.sh b/scripts/capture-screenshots.sh new file mode 100755 index 0000000..f830edf --- /dev/null +++ b/scripts/capture-screenshots.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +OUT="$ROOT/docs/screenshots" +SRC="$OUT/src" +CHROME="${CHROME:-google-chrome}" + +capture() { + local name="$1" + local html="$2" + "$CHROME" \ + --headless=new \ + --disable-gpu \ + --no-sandbox \ + --hide-scrollbars \ + --force-device-scale-factor=2 \ + --window-size=1280,800 \ + --default-background-color=00000000 \ + --screenshot="$OUT/$name.png" \ + "file://$html" + echo "wrote $OUT/$name.png" +} + +mkdir -p "$OUT" +capture splash "$SRC/splash.html" +capture session "$SRC/session.html" +capture vision "$SRC/vision.html" +capture menu "$SRC/menu.html" +cp -f "$ROOT/ui/icon.png" "$OUT/icon.png" diff --git a/scripts/localize_preset.py b/scripts/localize_preset.py new file mode 100755 index 0000000..ec4a9ba --- /dev/null +++ b/scripts/localize_preset.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Localize vendored anchored-standard preset.yml files (used by make vendor).""" + +from __future__ import annotations + +import json +import re +import sys +from pathlib import Path + +PRESET_NAME_ZH = "锚定式标准(实验)" +PRESET_DESCRIPTION_ZH = ( + "首轮使用 Minimal 的真实工具对(持久 bash + str_replace_editor)," + "不自动注入工作区或技能上下文;首次工具调用或回复后开放完整 Standard 工具。" +) +ZERO_PRESET_NAME_ZH = "零工具锚定式标准(实验)" +ZERO_PRESET_DESCRIPTION_ZH = ( + "先插入一轮无工具的锚定对话(固定提示),从下一轮起开放完整 Standard 工具。" +) + + +def localize_preset_yml(text: str, name: str, description: str) -> str: + body = text.replace("\r\n", "\n") + if not body.endswith("\n"): + body += "\n" + name_line = f"name: {json.dumps(name, ensure_ascii=False)}\n" + desc_line = f"description: {json.dumps(description, ensure_ascii=False)}\n" + name_match = re.search(r"(?m)^name:.*\n", body) + if name_match: + body = body[: name_match.start()] + name_line + body[name_match.end() :] + else: + body = name_line + body + desc_match = re.search(r"(?m)^description:(?:[ \t].*)?\n(?:[ \t].+\n)*", body) + if desc_match: + return body[: desc_match.start()] + desc_line + body[desc_match.end() :] + name_written = re.search(r"(?m)^name:.*\n", body) + if name_written: + return body[: name_written.end()] + desc_line + body[name_written.end() :] + return desc_line + body + + +def main(argv: list[str]) -> int: + if len(argv) < 2: + print("usage: localize_preset.py [zero]", file=sys.stderr) + return 2 + path = Path(argv[1]) + zero = len(argv) > 2 and argv[2] == "zero" + name = ZERO_PRESET_NAME_ZH if zero else PRESET_NAME_ZH + description = ZERO_PRESET_DESCRIPTION_ZH if zero else PRESET_DESCRIPTION_ZH + path.write_text( + localize_preset_yml(path.read_text(encoding="utf-8"), name, description), + encoding="utf-8", + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main(sys.argv)) diff --git a/scripts/vendor-native.sh b/scripts/vendor-native.sh new file mode 100755 index 0000000..340063e --- /dev/null +++ b/scripts/vendor-native.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Fetch ModLens + Anchored Standard into vendor/ for Tauri resource bundling. +# Does not vendor @deepseek-ai/dsh (that is Flatpak-only; see `make vendor`). +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +MODLENS_VERSION="${MODLENS_VERSION:-3.16.6}" +ANCHORED_COMMIT="${ANCHORED_COMMIT:-ffb845c5480adc953392a6db6f8a98ede621174b}" +ANCHORED_REPO="${ANCHORED_REPO:-https://github.com/xiaobright/dsh-anchored-standard.git}" +if [ -z "${PYTHON:-}" ]; then + if command -v python3 >/dev/null 2>&1; then + PYTHON=python3 + else + PYTHON=python + fi +fi + +ANCHORED_DIR="vendor/anchored-standard" +ZERO_DIR="vendor/zero-anchored-standard" +MODLENS_DIR="vendor/modlens" + +rm -rf vendor/.anchored-src "$ANCHORED_DIR" "$ZERO_DIR" +mkdir -p vendor/.anchored-src +git -C vendor/.anchored-src init --initial-branch=main +git -C vendor/.anchored-src remote add origin "$ANCHORED_REPO" +git -C vendor/.anchored-src fetch --depth 1 origin "$ANCHORED_COMMIT" +git -C vendor/.anchored-src checkout --detach FETCH_HEAD +mkdir -p "$ANCHORED_DIR" "$ZERO_DIR" +cp -R vendor/.anchored-src/preset/. "$ANCHORED_DIR/" +cp -R vendor/.anchored-src/zero-anchored-standard/. "$ZERO_DIR/" +cp vendor/.anchored-src/LICENSE vendor/.anchored-src/NOTICE "$ANCHORED_DIR/" +cp vendor/.anchored-src/LICENSE vendor/.anchored-src/NOTICE "$ZERO_DIR/" +printf '%s\n' "$ANCHORED_COMMIT" > "$ANCHORED_DIR/.dsh-desktop-source" +printf '%s\n' "$ANCHORED_COMMIT" > "$ZERO_DIR/.dsh-desktop-source" +"$PYTHON" scripts/localize_preset.py "$ANCHORED_DIR/preset.yml" +"$PYTHON" scripts/localize_preset.py "$ZERO_DIR/preset.yml" zero +rm -rf vendor/.anchored-src + +rm -rf "$MODLENS_DIR" +mkdir -p "$MODLENS_DIR" +npm install --prefix "$MODLENS_DIR" --prefer-offline --no-audit --no-fund "@liustack/modlens@${MODLENS_VERSION}" + +test -f "$ANCHORED_DIR/preset.yml" +test -f "$ZERO_DIR/preset.yml" +test -d "$MODLENS_DIR/node_modules/@liustack/modlens" +echo "vendored ModLens ${MODLENS_VERSION} and Anchored Standard ${ANCHORED_COMMIT}" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..868247a --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "dsh-desktop" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +description = "Tauri desktop shell for DeepSeek Harness" + +[lib] +name = "dsh_desktop_lib" +crate-type = ["lib", "cdylib", "staticlib"] + +[[bin]] +name = "dsh-desktop" +path = "src/main.rs" + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +dsh-core = { path = "../crates/dsh-core" } +tauri = { version = "2", features = ["devtools"] } +tauri-plugin-opener = "2" +tauri-plugin-single-instance = "2" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +arboard = "3" +image = { version = "0.25", default-features = false, features = ["png"] } +open = "5" +url = "2" +log = "0.4" +env_logger = "0.11" diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..091a6a1 --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,18 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Main window, including the embedded dsh WebUI", + "windows": ["main"], + "remote": { + "urls": ["http://127.0.0.1:*", "http://localhost:*"] + }, + "permissions": [ + "core:default", + "core:window:allow-close", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-start-dragging", + "core:webview:allow-internal-toggle-devtools", + "opener:default" + ] +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd5f2e3f0372f64cf9f87e6f756e39a5ea30f33 GIT binary patch literal 8983 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7de92a9373468a63fe2c59bed9db7151011cb6c GIT binary patch literal 19103 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 DGPa~e literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..4c45497b12e7ad1b904fbb5612b4bd32bdb0eaec GIT binary patch literal 1843 zcmV-32h8}1P)ge?Z+&a6y}kL4fBbh1fW9rmBO`oNw(YSPuU5r<+$+VmCr?;uG;ElECu0xE*9M^I zci>Ak-rFlus~H&?F;>@h)=W5(Q2>lhk2$4rm))nfYBl180+|bd*;cQzv~Wc2pEbjB zj^%K%wRQ!NeB@4`;YQ7-7mTpqS)+XIuw2c|w>0bSjEE0!|KMyNzU(D3=lGH{f`zPQu2bg<-qfaC2>-fk5iRW-%r`gd zev3Nauz{nV9uw55GFk*OBggYp2AycGRTh3b!ewj=*mlrZYx0aI%U!fA z`P@HL-6$IZ@ohHYvk+4yF4N*6l51HlOytY3Qz(9bxel&~j zBQjwm^PVD5{$FS9d5uw;xcpE2Lm$i2M07Ts0t6U{j6vQ_>vKMg|1TXMwYw>>tdB}y zC&E@o*hV%kk&7$johKB$1f}|`5&>gT$T-3N?_u-qD>kO*J#jC6kdwVsqfny|Y?5VW z7xYzQu}jps>dzaZi*ys`W|K9^b9qkPA<&Ny{Q1_(YJfS7HE$VqSnI!>2C~2>2%?mw zMXrx0L%aKiWV2;h_w8y5Y~E{*+Ld$49^&`b@RE>|$#OIP#NW#Mr{2Gc-$zipn+}Ot zD~A7qd@hA*L8T@M(BM^B%X5CkgyhPk6)i`k55oB(6sZ9CmVi1!S_;7hYd%xMGyS05 zm^{FhRGl287ys|qHi|x9P(D^8RI_;)#s81~VZIYl-jJtKs9%8;^olvjxYA8gPBqZ~ z^I&)aiHsn)4DY;(5D9?3?1b9f+hb&GR%=$_CFGP#{)sNAb8V;kt6E$E#2`}8aBj>J zvmVMd?LJ`I(+K5`=M|YZs~@|E-nA^lDz;+MV&k+@tbJ+Tag2`-PGxgdXS&UP{rVVK z0P{*+vu^K0hg%=TZM&#v72uhbZu%KY;bdJKzuRv`^lzdnoC;WVgZ~8#@6h)bBC0tW z>KhEtAV-&=E;A&mSEE>Hf+>hG0KzwSLK8QplPXN(lnre($o+!=av1Q|K@Z2F_H!ST zhwWX>QMYnFyGVgNqq&S@irASUT|98WxG#@(wkjTd#FX2Vws?;km+3|$2Ew}@z=jIv zx}Xt~@<^llyknjNki`Hxg^Axr1dFv{U};&iPVaO^>lY6e+P0q^waJ=6`KcrGrYQQN z(2#Fw&yS*9@vQv?^zR1XUoCVvp~gM-L%h1r$J(XPg{=HtU#N2h(b0ke)oH2D6~wl> z-Gh<%=TgOL=bUkjU#$`Zi^Ca}Y?(w_nkOC~l@^Y!0evBTkPFVGnCUQSg z`G+H&4~u%5K1vPdRf^oBYDRm54i`M#YB_z1Eu9K+HNkfm#x_BOAED5%d8|$^6eD;r zG?BtJDm~WWgL4ZS#Y+(218K!<+kS`rbUqN%jbfUKLB0q&XreTa(^HL$bPlxDto>2d ztvPp2X)l~@N27Zhrn{~1Ml3Bx8c)yww8N^m$K*>IjyaRM`U$_w!CuCR{TFqcucg7<=n32QrasfrKAW(jud3Aut) zw2peV_mU002ovPDHLkV1h#ems|h< literal 0 HcmV?d00001 diff --git a/src-tauri/icons/64x64.png b/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..22c9449bdbe6fdb5a31dbbdff9ab22f2f7fd0f81 GIT binary patch literal 4285 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..aa92b6c793ee0fa45b0d1b9db85c18a40c155cd4 GIT binary patch literal 254374 zcmd2?^K&KM&%XE8Znw6!_SUv-du!Y6t+h3_TigD$Tidp6+y3tRU%Wq^Gm}hCGINrd zJb7YeYVQJo*eSL$Wnl#XWJ)5H6eN-0@!$af0Ftznm1l&l3l zx283iFEcez(0{WA^4x@|C{pY+;@v_Igow~$sI)eoW@LnjVgb=?h2ic}hKUx6U8?&yz;$fd1M57x2%}K((@l?LWVK)f?>I=jDGpGzCfJRY3r1-$qqBI>_IcsKfiwZZsTQnLKK z*Xz_xS5VR?AmlUgjxocqth)l${%;mxpd?Dwj}*p#Uk`#hPCj6Yj|jd8^Wg8Zkz_Wl z2aW+6(Rd3NBnpa&%;jEjzvGh2_#pDcAqT!b3nq1$+<6HX5eR8pnVNbVw;9zIX2>|a zN17n@U`Jck!lEl`BEaxlCcqej(jKz}-gr}V=_>E301d<#M@Ep_Ryv$650s&8=iJt_ zzgrl$Tw}PVjoa5FiVRO8&^+Jw7V5S752j(JZYU)Z9(HDr?@QpWYTf0(o?(aWfECxG z((#7yslRLy9dbnco-eKz69KX7=vL!LB>{}vW!F&Egb7>Hry(C9GW7iKT7Q%);T82v<^cFW+eR_0-y_F& zi!x>zYu3qAlx19eRV7TPcYU)4wm7!0kL@pFb6*t zcj&d}!sMdjLpHuY;Vi-qfYL}HytJ(2BuaJAxt$GnyS zng9|pd*$18S2VhiG;@Zsx@>y?Y~)>`%?+4z2f$GkT2p=0le$&BpQLycfu&w_zd}v5 z&+Didqr^vWLhbQ$xL1bW4_h!hXf5L9fb{qHkV^yZR$ti*(eFu#!Yq6=zAjwXTBMU0 z`rvE+wufO;)gx6_(F;m_jiL}f;P7Lh0bT&fG$QA#x%O~UXWK*^`rJU-E0fT#q0ROF zoMA;#=(kvfOwYJB?}t2LH+`i&ugMrkm5|Tqs;(jhh3=$D{M|WML3%8uzc^svSekjH zanEjrc`98@mT!IKGFPG>q@v$9?u$z;-Zo>_i)yuII*toVqFX|JQd%YKp+r*Z^#$FD zBG@F475At*9GU{#Kd2UEg0egt|6MXKVj-J4nACOlq)-NlDWzR)&$6vJ@3!BBANz0Hg*7=a9KC;c)Dmyo_!wPb$E)SBo&gz{ljODcaYrVmFX}md4>k@9)y}fR$*dt#-Ci`~ zqRMrEzH7Yj?xJ)&xyi?q>NresRe5?vArA7avT1G$P9AnEkk}ha@R7~`!Tvc?k*vn! z?#|mqwROr4A>f)W(uS;;S#Jt-(~=sx>$UnGjZI~F_n-W*U=u_ppR>(NfX5Y@Ao;tT zqp)m&he6_qeC03!yat5rS)@E}e*5<=Dc@O1j)(oGrakf|et6W>8TZ+JC`|N4x6;*s^<)Pe<(QC z$ofpgLHh@1m-O%0KcwMBDz~`nOZsJ}dHN2DS4fv26$0d;o3+%JNe?%jJeI(H<*aDw z+|x^LgC8Y+*!HhGtn+`#=T2eIbFH-C4MiAyEtX=eck+-&PToX1UNFSt{8pC5xm@;! zO_Gj{Q4Qck0&-6jDAC_L8++b#RD|m%Ujwq%7*dB%%JPn(=IVcM zt%ocb|JG^dCe_O>v@I%^)EF z8Ln5vG*fV`^>6Ro?rZ z_V*SVZ}ZFkTL_oGr%^-X`K_@Wm-OZO&==LsBCDF{JAFKio zRrBybC|N$Ff_YB1&(NmC&o})OC-)dajR+sqXt===etY~TJ^3{vaHB(Iu7Z}Ltqw%P z6}E{Y09LW8iT#z=y!~$*HoLSMDS+q2HKo{1`Yb6Wh^L-yf#p1pczgc~s+n+A-#+^X z5S!CC^`d_}=T#)3DeDK_9qzo>m2^p#jj-HGv_0$w&h7li$V;UgIuJ}(CYz8Mcj~p( zXC%qc3QQ~875Xn|@sBjpHf#t^q{6UQij06BzpP*2Vu>$nOLqjq@R)|oi|TXXfBeZ-+l?ZsWP8;yH_;J5*bBHvd2h&g z-5(IDMR|;)IOG7OSHt7xR^rM@9ot$;QC3A{qgCmpL4o{1mOtvhi)j0oc9R0etm>np zrr!xY98X*2a$XnyTd+WjHb8cGE3*wtXf81JT*)$YMFgjXH&05U^+1;k+DR`=`fx4n zujQdKJDVt9?`qoI1pF@TS7VVX$&_#6R8VULxnaUn6S9 z7rJ&wc*IkEqXZ2BAPn{?iWfF7N+JU;FNC)PjH9C+q7NyzOc2n$3>!2{hZ^|U-M4q` zBrnz=qeo%XpEkJ|&5_k~8)&L9;|=MjJG%qfxZ{FqP?0L(WZ)ZtS#M>BZg%LEP8~%` z#jS~5!7dq~sZsUFxI3HouD-6)LVO?JBB$EQdIk?MD;Pd)zCaNiUC+6*77*5ZGt09?4enpsw?I z<1@NiH7>%HE+s-}iSI7Tazdy{g#NgpbXL71Wv3f!d5p+FnfQWa-zS(|+fLSS(xSx` zgy_CIt*Eg|eqee%74X~Bj-vaFz%|PVxN#6iEByNE)m=q*o2+|2;N8u#4-P2w=Jzuk zgyf4N%eh$bZiIRD@K7uw&_~OIV8bt(=m3rGh`9wIs!p{+DF6N*pWnJzbI8{YG)c)` zd4HT&1Ym+v1!kg_wjp0LD{#Xb_^cr);e^9EGGD8- zy5WIIc&BYYtGMIWi^fu#OWL{I|4u@F>siQZcGkLqEC9bPqz zoD;UnFcmv}{V^pSfQ2TwAH~)RN-(71FFale{0;{V9L#>eRzJ`a zEo|?KEZ#=wi!#0}81F~krK;&uL z88{U`?`Kx9ydZLYE1~9Ux<8p8m`vJnR;K&JT~s2HRfFwjX^*BY7#}GO9SffU^O8OX zu-#aqA&pn)maK{gztoxLcRz>1w7E4E2fD5KlWJR|wlyR;DYDweZ|7-ps4V+R391gh zeLYBj;Jt;*hjr_moIo*|s+nteVWqBIoyf5i0{2>5Hwa5VhQO09$z>FD3P-02K>vob zxJM_CY_tfarpK>kDg)?K71r;$-#zk%S&3w5FR_qH-d)=SCrKiz#;HC45c@9J3l>TM zo73?V1~|{uVfGD|5X!zt;?()uJ34+HEANdvMc3Y2;lBT|O|-b*QEeh@6U~T-4;?5N zK(#?5zYm(4xAV$8Sy)mrbIEbhDoYrC24gu0zXIWFBZUm!tbeKYlYZ^1Zf?NYe3^qQ zGzaU@TO0A5;33m1|r|Q3>ehl&_ux`@&Jaco#p}$QlRK z9{1U*ttdlf7a-J-u9!+8BHH4WsQ6)wr&dB3QDVna8b#Pgjx7P-^bA7Vf@Zm~r0bAe zWteHmK(bhTA$(SpRmTRyL<+2=^_kTzSUg?2js!gsQsP9vBL7Cu&S*Sj%@@{yQoL{cb~|Wm;jx zdg)k>n=W8~`m~{OyoglUUZDr;#d$cjZO53Qx?<19jFXA(zXp4>cXsX?6#9WTmb zDN`X3Lne622fEyP>12XQe$6}4M<_xTV7+%ie+t6oy`*0FVB(i0_4o9hZ$D zHn+9T(EiIf`t(?e*SQ7Bm)ukva|487w6(}YIdylw=!pwzH#RM4*5-7ReIhq4x{fJ!u-ibH|?hG@Q21 z>Td-?Km20TqbCB$Qr@nq_}cixP|X0b;MHbe2q6+_)SHcYxxR}pP-DImfLU+zA7LJf zOa*WA0zl)3P__9N)UDGKgNK>F7{zP)lj0DhE=8|wDN#9$gBE@w4bTxtJbc@kM|G9) zL)JfN5t_XNV{d9EPqgeP5o%ZZ{YKYSDkFlLn^aPaz!{Be z9dju_p}ww}zB;mG3K2l%);_pw#g)+L(i_Q^2u27pd5>#PKipr1LNMoj^+z`UiG8i2 zG_kI+5e=}((14wmKn*H81Al7+g%8yIbHoX+wJ>2T?#KF7djr-)opLu;!Lb^j8y?k_P@K*V$aU#JhqebZk|(uw#GA0-R}2^ppTGa%lbuuD}6+YXl)&HLOA z{yF1s^~yTh7+|ZvZGf)0ar$bPPZdJ^+GE9fFqCKHm~C#%g8!;}7Ktttd)&+rUzKfO zNrifbvHjDBuagEx46KcWj5}MoZ~zPw8|q16^~-IrRZ$aDJ`WRUy5z+&3-Y9MF-5C8KvAmK?(n{@@1J$iR^=a#{f>&L`gV1v);=BdLR6Yyd zw@Ztn`w{R+E_$ZF)v*s6K4d!bq-o?7lScj>+S1AM1d$*Z^ZjbBvQ~IBat5)&A449` z>#puI-m>oK4ecFVLFOkBzXsz&(8OBnC;L}&TFaZ*v_RB5_`rs=1qQuUp5^ zwa08QZ}Uue9-rfyiPZ!zb6)!cXNS+HZG3^ z`e}Cg9scW1^(y{SRe_qDtgz>Nf;JHPqwre?oi580(J!K*zaVcFrSmC7N8e<|pVs`R zj}UC#_E@dUojWj0El>OioyG#t+iK$HGQ^i=4VzhcL8pxFce?nV$_e1)&`diunNPGN zcLB}iQvioxDw|y3ki z4Qha*E4iy)5e%_T6}wF^1?_H>9kbKEy&U!D?yksav~kTDFuSC}RW{fYKI4LH2>+Z> z)pX#qOM=n@RrX)&iRhaMl^~F+=q&P zuvpIBQ+E8;C8C%cORHW9Pz}5G5U5fAc%W|EJ-B(L>sWc{R)S8i-@M*O2AoP$+XzOo zn9{X;8`DYe&$)^E*?v<-Z)iBxM`jIuc=E9j`rEkv%0udE#i=g- zfTDI6kQu^#XfHvGfbMcPZ$=UA+_P8U+HVWYUNkj_I`#x z`Rdy#CD_ZpQiXF1KUA*e zs!=Z_k3UQ6MEU1-@q8`;hyCmMxHRWdH2aOxY-b^)CE9CLv_PP3w^VIE!~IB{=sm-G zil`2dqn<(PqN>+FEd)L7(U3H-!$3cLIZ2@cVNyYztLy#^?Q_VMA`xN8k6d3$qDhf1 z37&s8@@G^7)wE;8Xht=bUrsD<@{7Pn$Lm{)1}Wu{kU~FCDCs!nwd)$)Aw)T=F8+G4 zo{Uh-BTQDN^0S~~QP9JVAm7r9XWrOGdI3s0V^|S=S4+owDQK%@sSUt6fZfT(2r<_bbnSf z^HZb5(J~nh0tvYoP{9=X2IejyYOUaBe+v3es4lZZ5$^TZa;YiXal*j`}&?5rQ%ja7^nOjN? zGA3!cz(!2ZCmq{zk39(Qh@YEOwXhN*D4RuH_T8AyojCe-MySQzMIDyZEy|9d!G=@nKr~Ex0p%8pj z6IiW+eH1=@3{yb`X_qG8(p=W z9bZnJ5U%dRHo>e^lSA;o&$fGkg_S+j)XvDd&WNgt{yw}MzWtC(PLw;)1c4<2!E>bI z0cle5i@3>cumVZh;jtnzD575EDE&*guZF@j?We=7;-4{$bnHA4o`)o#XhFF; zR4Ke7FB;R7k6P|fTU?&mlZCjeq^@O1X9A9zL@^A8P%xY{;(Ru~FnL|A=cP1L9Ms3a zf{Ay@0c|sQ&ck{NhWuUEFMTHYeNrTen*Q{5c+OWQSg5By`kk}*(^&e{NhonZE(=03 z&=993;mYq}A)kB(4FI&ej`Fc`Z!qCE2Z%)n28BJTu66Pa8^mH5X<1ZDu0zAW#Vq_c?|C1b6S3sS=fktUTOJmAAA_q5OF0F(SL zI^PD}%K4ekM!o0KUomfN8)%d zQ=-mG>)L>BZ+axp#?N&lsAcPa@UkJ}b_cmKj@~n;B}PnoL|X#jwNV@FOJX@o&Yzrz|V8 zHM%4{=ntD1H5^-7k*kF0{=3C~U>TOR?>7SwV%bEu#`k>~ZTG&%tX098$?QWshOQF- zQ|DD@p7c@b9oEWLv2WX6qjLefJ8uN*DtTJZIBIna-BH#!^M=PS8O3KhSR4O*nsK*+ zv?y}0@})bxHK?jN3nOD!B0RkZ;!0FrsT4j6Pef;Tf(}SMaOFrk0|>q0uf-{$y+P_! zj1r5-S&^r#PDFLMWD+$j+D!R7<$(LesS}ml&Klm7*BEliT-gXnyr8MtN~hw(y>fmM7Y_ERwN}sq5js+;>dW#;wzeX?K@EYdwNnyYpEVMbJx~tjUTtQw57R{Kx=5RAx4ly7hkjV56e|-|NJDuK*Uzrp6g=n1^Sbyf*$ZH!)2C27>@^ zO}GbNgXCmA7_dgGottqXiY*R^?|9JU;#|d^vtD2d?Km(gW|KD4GH0qGw2?%xiZiMT zoI19zM&2*bKN3p4-Ce%A-A123i3iF1gvL9F;tYM`YSrqFv$lZ&-Q!gHP3BplL@x^* z^$2m^;wM?xB)i)w3bSpNX=VB*7TZlDHQpNQ?#0db;ql6v_x&XGYcqc9a+mo9KX+ru z=7*dTBME6BkHipga$95m0ehtKZ7J%$^-0~kB>pSI;_k{pF_gzN%G0eX0P=mDp_Hdc z>aOPe8si*>zr8?Te`%JwGvOXy=sUt>6N|9S6%g-q;5XiyaoeFHCZlAuB3m%ZwdT&X z0>H?f&wR3@ydbc?8=6gCAwhzO;BBU?p>4b(c`DRozAL#VTMT<6I5);H{IG8B-&9WW zk4?~ophNa^?g^ioypY+B0@zd%%(o~3HszK8>3qeFl-yF;QLF)}Q#3w?@h1{BiP<3t z5Ty%!S@|Gb2gv_SU#=j&9Qx&M`9q*tgs38OSChW0yu=a!S;XqJB?BK?cuzafRZ@0s zFjFRX)nux&46rkC4`hF&9<3%01Pkh>t2_nyO7!upNnid~2^Mygh!6xZwWc1Fp-{EM zgPG+X{K}+U-Ud50dOW5Lkpi8_FcxPdA-`2ivRyC4{=MeS9q5uw333L&A_XJYW7WoU zbpl5;Wu+6H0HRhJ8wzDIN4ux1*C@>=l=CUN9-kAMA|;Vwvy8kl(@>PW=uuY=|Hk= za!k({69D0c7$FJT)YiayD@hjCR+>hM0*O~k^ZOF|P$XQ_@1LwaL2BtK{_~JW$I}bO zyDa&N8Oc(~V2I-qHh5#A2Ks4Eo>(N~0&zR6E+qye1N~_V45+Crsjfd_g-MN znZVb6M2s(rVN^%nyDJ2LPPDBfKuNZlGBNZ&Z6@&c>#>VXFegkxzaQIEXYxP%0|G28 zWFvDzf)SzWw-{H-Ukyp}dwIeJRQ7Z!nDuG!m1~nhC<70%~fZpe``1 zG{6B!;No-BKOM^eU^M7%-q#c;)L{B~>fVylsm^ygATeKHDnVdzAETUL;>7LL?!F%8 zZ+Ki;E@ljMckq{?1d6n%;1_G>j`ISN8vzQfR;nE~C)~rl@#%b7WEbo&CykS+23!E@ zMghL+_(z++17~s=c|k5kTV$d(F)i?3!)a(J7H?8;F#}3z^3f5}eWPBhePMQ+AWCKD zK#Y7*MJAH}z>*XqVQ%5$TK{8yl{!CKK$P!LpMo=oNc{9%JFcq+<;ja5rfYZJN;}B| z{T_x9=1VBqV6@*=5mBIO0CjF@FH4;a8QihdMZ};=n;*$A9Po%ACA1B*2TDg*6x9rX zc8q^alPX5f#idgM-BO3`B^0u|l)6gJ+1*1N_|Dwi$D-WLI4s-DMjqF6w7)sE*cLEN zirh^{cjL;?Vv-QZajG~m2#uQ1mx>VpwouF7Ni1 zD||gMENnQGu&%*NE9(C(h>0|mxk?hx9S+w}GfsVvfh12hnRej$sP)d)=FYKrB@4jR zRKC<1|AL_0T~~=F-or9dDj_nWSj3>(?&Q30lI86LXz{`9&zWC5PR$XZ9{$vt9mWm| zOfN1d{?0Lo`U1o5kLoAE6WeaHdUE?TclPt+zV(`N-rGTZONytF_v#jjJ1J zg_4@SZHP+dsx4;^58`x;6!l6V&Rm?>m>F#_G{0EycyC6HPA}znR$T#oGvO=SRoWxB zp2#|pzzE|~^WJxPl^#Zg>y(YiiJ%BGd`hN4;jK9wT9tB&6Sz4sv_m>Yfq z4Uy!wwMN@ytHd?LpW~v^azjx=B8Pk-m^+C7n6XMs{r8a?u~gXa*>#d7igo{zn9CuQSkf1&@q)6 zki1LjeRYa9_2&c0dIhfx=F>NP&TCDl%Nou;#Mc14W3#arWo~(H8-8eL{EkJTdfa1z z2sS*~JVgVD?qgy{30ls|d<)8P6Gl4Jfc$@yM|`{r2U!CQ@GY@9CFuKupI~!R3K-zD|eWE7(n`p`PJ(AoH~H1D6al15u#IEZOm8U?5*N+5Wt0m`ejNc zw~BeIl>vSKI6r5{MbNO51Lp8$k2$7=`hj=@ZAnC8aAnX}_^xh$_sE190c4NkrVFa{ z{SzXcm`^m%4U!9MIvfqCWFrIwRUE;~#pY((ohmt?Tq0;wLo3V(-7~PEZm7~$^(Pn1 zL6Y3_jEBzNYZtS(cA@2-(2EC8_;_B6k><~X%Bk8`Vo|xJJ!Q+nzFJ_xWhEe1z$gtQ z^-mej^W0PIKR0!$?HlWrLqF4+1BahpZiZP5f5d1|C=u;{qhJX&PM8#T1l^Ug^L%~W zufocW+f|^Hg%kq&KMTTW+IPZJIf{rUh*>n#kpX03rJ`?apXFcO=puq;6+lLp4ZMHR zBLSjyBPkGUa%YH9x0ByT!MNDiiItwKFEo&%HF?T5_x=%g(|f@}crOoHhIy?TewaI7 zB_~gmCi`3(TpjT7$2zyY0UGH%lyaP9g}E=CSlBP7g`cZi(Q*iwJc08hb?*N<;Vn;d zy|M)16;vKK|HuW1N-8Yv4#w(r-2mzP{VA+Ha-`aTek3 z0JxEF=0bjutqBtQiz5xIM$qo-zG@Pxt#FYjk6>l;&%j^96-GpjF2%F z<8wo6EfiMs{Yp@|gea1lYq;c})Xj>wb)KK2NtZn6CG)$7?P8J6EaTV&1Q(P|Nl zK#T;M_OJCRGAy)yQ;Hv>7bz`l4OA-G?ip2?mQwu5BQ&cr@hcG1L&8n}`9*E? zg^xqciVN5-vGw~qg8+S&iJ*uX1i;u6`}DN}RiLIvD(bgW+TYO5-s=QM&iC$4Pd>Pw zKCx1&m~OZ+U&06G?9!QC8Q!2X(_55_oJ2Q3)&xS3U~S~I=ogTbO&Zpklh1s$@{u2v zjNfoHZ`Q~faZnl1&(#@*bmQTQVlUeIUKEe4#3oJtt-cgBo*dxG0i~z_*8naaCzF8{ zE)mBM$;ihAHnhOTFK&dtjw??4h^fhDW#GWUJdoG@N)b+x?Qhgbb|mUe_ikerGWyOW zZe*l`sH*UqF&-570S)zg9D8bK|3!ffoZn!MG87BI&zQv#fupV&k}R6Mx=G6}2`IUm z(~lT&am-5DU~G3G6D?78q2O-vPVj0hOw;3(^4srupeF@g!i*t5EySQ1qTb^h zLLcmS1~;*F_Otz_qlW2cDkl61HW9#wWo)WfL{Ai;d!j&;FQ5I@lUV%*lbCcV*}Ql7 z@}A%YQv(c5{7Qqt5;E1UOwdJ?DVs%|3w@; z&?JXKL^uH?Z((v(pQ1*q0OkR&S9!H-OK_2R=dj*$v^J zG%~z4(T!%NTNBOotolSMwSaMkm5NYSb@$yM(o6;g|c<}RREZ#MoHJ8s<6dSN}DCwV6BC$DW2IV$|qK`E(xGS7kFDet1-}yy|~B# zJGHP0HDEw#Uh?J5E4t=1sUtIHhT6Hvnx#pc5PXWj_sKLr2WGh2Fg48uu)<7p&r%!F zIq5i%gszGd12LfDoe^n4Z|Y084lH8`)LOLDt&aOVj>nyJwthuMC4$|K*yH^c5}kC_ z^qNliGmVp#bKp>4LiZ0DP6v2f(z7z}cedYx)qe^kve2;1q6y;_9bZpkTBoj9aZ!w4g$plWzMsrmy*MW?(yVO$bm7M|Uo#}w_=UkOV28NxdAo(ZQ@z$>awhf9{ zML0_xS01^%Ed4@pjHR*?lMM41w$zx~ccmEA0r4536w2NuY}W5}FnjY9m=3n3Q&B^8 zZ~viB)2WU~LmSf|a>kF?iyg#akz=NL9rK-Rq|y?WE+Umg>-Pz~2d$ zXJk{wAby08x)-O{E%A&TZ-%g5OWwMJ>i_m0Z2x9pmk^D;v!Eqe5OSz^@1_!6!Wwwo*v7X#Cl8o5vfGs{0C@6Jm8(sGcxE-}BJW z^!VJ|AG@C+|C4PDSOrQ**amDVmmX^2)~$ySZ+ynqh_FYu8d+5#v9EZ~WN=^T-5?-} zmP_4kuK&V@AsN;mYRU6X#UmtNrEpUZB*8}%ee@CIpv(P*gYmC-%6{{sBRBWfE9D95 zp}=lpbj+}dL4um^QbZ<+1=-tURG>nw1L(on6_sLy!N$2qaK8?!+eyE!s6I^G?O!cv ztKle+{&TK16lAc6{m*&7BK1ZQhzvWNd!DT#5UrSPX{TXqeF`X971%F-*-?0)l!%nw#HnGESISxXNU_MKigK1C9XQZLTQ}0N?UcwVG zMpQ&O?YDC6FIJ^Rd&6T+%3Y=Rjp`Q>jZ4(kmxzUP_3e>@XuLl_nlJ_P7+a##HF5pS z)oT-S$VD>38C^mT{?(G$Z#~9U2pw(VptTw!WRmQVe>Bua`J!GUc+GQz2&Y}$tU(Zj zewt{>_1eFYc*;n-vH3kWQfDOrBl4MLH1x`@V0wd?CY9`@O4%BVR;QD6aPx$o!iXZ5 z@iw8bFA|IQ+q+tks-X&c_*>+wDhNkvkfKnIC_!GtoA`DrZy%e{ z?i<}MYI3>)G;&~SRuLmt)!K9l_aBw&dUuf8RZVWYVA|H~_C({}>01P_pPoNmIXrQ8 zLW@uQ;EzpWe4#m36}9hOvi9dr!^;TV_Z^UXJp~kTpI0G?g*ByblD6lJk({kRPbjiN z$xD?~k$uh&sy8p42#7Hs=21m7BF7)hS(=&kgAmPE|0q!oc@tB&ga7uvrfcA~xBpo5 z#AD5&G(H50s0X0Fn_KzuX8Fs!TwoM|UY% z2+8+<*nvhFp}Mqy#|Y@=XD6d5%a-svCm4pU8+XBc41n=#39eYR3%h)~yC~*lh~Zds z8-wJxa@2|x)FM*Is~iEG(rTcTk@y3_S2KaGBeN%nGRJ^BC&{`u*fr`=K_un}#HC4| zOcZQ97D24gdxBNtX}hPpNL@i77qPvS<0%i%^gUFf98FRPo8vE6iBpe(ii<<0M2HAg zppu;7ka!NJdZ$*MuEGc$Dy2|(6h6{^jcVt?!ea!xo ztO%elI(*``^F@aFyeYJhGBW3q{~ZJm+3QbgnRSG$w!E&7cb%f`{06Vd50`0TQAmx3 zn;Z8IQwY@n2gG@$CdouV?iZ)8K^%)3MoIfe4(oNJ$j7zN6{F0n{+XX2Zo^}W1D}s=V5DWm5@}@62tdY4^ZX<2MvUMpR7*-${IB z%_oEzI$yI(Z zI~y3>D*3jF=u3bzLy0W*^>4JaoYDbN=*p{15j*kKpm}jFAVp(15LqFX930pUWht77 z-d-fk2L*c#Kc9`jsu6=9AD;=R4MZ!0cgM~DC8*S@Oi#7MZJ0aKfkn}9)oOrv`F#$~ zlHKt1(&jfx6aU-#P1e(T>KpVV(3VVif%-DpUkg75CywF^x)-H6mlB40AjX;R>F+NK;Fz9#E*EYsHnWzlE4>5gwbPLm)c~%M2Di zKvQHos1}KIF|HPh>k+iXj%@#O4ZXw9|H2{=6K$5A*Z*dXr0zMH2>paT0ECrZ4slwQ zo3rkVR!!NJOSEGRVjejr`b7YS?Y$P~un|34&2m z`#akM_3(5aD5}`EHUY8hNqCV_F@+vh4KD}^lMs=wx|UQz#!QU$d;iuxY<@SHZSQMz zkNkO(D3c6y-jcsM0IiQ{N4kQlt#BaV&R$8j1$F-_@$qxTXozw_9rKuHcG~Xka%J{D znUZ@#=xRtj@`s$Jz>GNEbH%%q=YAEMlXH^+PZa_sMSqY8|EoqKSAR_;Ak?@aEG6-P9@~Dz z%D<>d1Sy!sOd9Yk4g#7uxbNUUHl3p+BOt9mWK~lx_4H)Rc7(G@SkUwk%DYivqnDO| z*lzrm!v8o&&!!oLR(GfrD`6yqFmk>o3Tu~gg_ka>lZ?jh@y&yOGT5E+K*KWR;q4%a-T#m)+JD;WrC2vi0VU|!#Y(WgZ2$QHkD0C}NKKVhI`C-gNm>+@Z6BgW ze5tN!&$GhuTO1KRRXi~V`V3UbvNhJ|D^|SWtzw%x7uI{oh#0Wb*Y#55+uSm9vp}$F8VEz(!$;)M{<@fQ(AR zz)rzK(KZR^?hS({ou-$=ji9>$HXln}Hn%8+IL`FCUGJ}OK0GC5emd6dHb!w!0rVW) z@uc`Mjwewgwka_DmQ+rl72aZf_I-|YlkaShM!=gv6Hk5703-{GANcK3y+Q+l!-_1r z@1m6dnR5SY2!s7=ODBaSAFZ!PpUL2;WWzPdl1Wb{UN)orXm~`gRAYTAO4#kRqxpzs zK8rXVuv^qwRI02sg_4d~I78tft+HxmhSgV`*mD)9<@3q7O1~H_U zu^ve3DQ*O2KJ1Z)QE4g(@j9^yjS{aUMEhH*lO5JEomi zq{s*bW1MQ+Cw5SpE87ZfE+nKs`CIOPsIh+`t}ff8;IOd2T}50S)s>WIb;x+3k0!!c zM9=|f=Ec-u|HdLHuME27V;;}73k_=IWA6>72_{ZO)*|N$DdZlywy2UUTmVJ|k_fy` zsV#nb|7;O0ff(_b%PLt3RdX7I_@|q1{vAap6ge_bX;a=iz{!tC8G@zRE5^~fs&hQM zqrL2QMFeQnGB4uHMz0^{{a)r;l}uaYzT5uBC>1cv7d^bKVUd+4pa%?P9tzqo$*$G1 zcMMIyAD>DMWHXk5Lch{ZUgw(Zd^h|*_U<}1a^`&ye21AinM{~r!aQMSW==)^Ve`+6AB55hyqj@He@1)x~*XU9QxJ>v1(BLQ>QxZ9vy@A zDjWo%knj%D!LAz){MHq9#kG`E7sne4+d{qGc|t*_`MB>uHYy|s)M%moTz9=*5$-bK zt=J)aN;sZ??^Rl$3s$!Js_ z2+t+Z1L|5nL#yon3j0U7VOdAB3+Q|Q;s?-`TS}5lmvKLZFx_%hMHyG&Y4fVTLSH~Y zbz53DzuRNrY(Uu?3#{^AgQwAokn- zcKq`(6P-7FGp4uz<0u@6=+ba#Hs&B>IrW_SBpyhtrB_+386vm-0bm_A6&Y1UW8D8i zJ&+n_oJsI5K#CLj^G^M-->I0j(LnZl*TYUBzmT7vED^~~w(T(~1-2(Yo;5i6y;XYPk655@!5z zu`?NA#tjY$%0)f8etoKVR8Eg=n!ur>8GZ*N)@}HGm-F|INn2Ah*&3RuVb;+5Hh+8 zdkWG=Wy|!6GV-j4Td>L1@VccGKw+Y!^Ne$t7sC=$BGzpOu%Hd{(Y&4>Wj%M~;P#%e zMt8@vaV_MnaD`Gq+buSwk0;Lpel*s?^2=ItblRO%dNHwfxZd4VwMR~fS#4D z(xsbDVJ15CA%_r~$!Se(!5Hh zh_&{I!bJTQPT#>A)ajzn>*7vRU)7oYdmo!eJ;zy3A}ZaW$^eB9fc_fQ0Sa4CB?nvV zBg(^V;*}^_gB^I{7KzGl&rq5)wSN&Y`FK=UM5O}yGdgw0IlM1YLOEn`h70GfWBFt_ zG1h#d6y$Y@eD#YjMp*eSKiDIXR$sYQYvFaXW_?50T$EE|50kKLlMb&H{G%Np<#@2< zWSA*P)LKAD7T63~JaN8t6DmG=0Tov}2xOZZ;qo5ufu(~IE>O&1Wds9sX@dnbvn^zl zKx+m30i~MoMbsffKJ^z_ICcp`_>O>9t zX75Ci`W{7=9W!@T$AfW?u!T)v49mPEK(z4ZpE6lx4``AFD%@jD0fmI~DXCL{_zDu@ zDz(=&GK5E}A{&<5n==;|G8`3A(g?d>u*5}Dsgg82Uq7{r>ES-TP9~O;W{hwrNJQ1* z+igUlN}0v?%zB(n4)2lf3lAyX9>|;vh(J? z@n>`u6HMkVW}a$${E~Lv8Q2W7Qm0gM?4JSa)i!d>DsTV@ko-)V6T*HuN;XxQghLpd zc1C?xL-6V7SN$<=UmNnhHNOsDSbDi&mIAiGAb7=2X)Xk>6pP3g$h8tCD-tL3=5Bpk z!Wz63AGn4xH?37A>&3zjg55sISRI0HuLqcd)R8E{qi=EkYJ2th#oN%8?jEVQ*ApGX zifMdn)|54SIPrHWrVx}=*!=Ag$IH?kS7U!)lN&dszX_+v>8BXS)>A#{~CPv{!9)OD44J_l9Z zmY{meidCDs{`o_P3c<7;WZ1pU`LUaEPovfW>tLzCXvEt1pBza8BPMjg|68*p{ST*R zD(^f00OGPnlxHI*i2O`E1rQUG7Oddc_5E!?#|i)t;r+L1ssP@f)x7^rQ`O6@Hwpj{ zZv013|8!YR|xu}%Q>V1{xS`?9k8!pxXV*2y6JgeLi2IUKH zzky9w7Ejz39++YP&qXq2$U>#6T^`*FdRIcW5}b%fx-%6)+8P)vMvBoIL=eQy(?|K5jY zh!QtjI@u%F7lMLW@-rF1GX5B*8(eA$ZsSCh@zIZj_^+|4PeU)MkDq~n!9am}NCevM ze{LgC;@&5AwfENji+-8!!i36zEo0*ZP)9Cdm>%@k$hVw)b|<-UjgegKZP1GPulfdC z9(`|usrLGMO~h_a?0`gsT+|Uzg#)qF3ie!WZ6v&IFG`!ghVtBt3x-k*V@UK}h$tRL z?XThTXT1IUpc9XUd_L8Z)s&IBA)A{9np~6a4Mi3}UbXn7kp1o!erxl_CraJ@CdGMC zUNnmanL0JzJX)}%tI}oO0D{R>3_8M)qm0SM8YmQ_li8W2Aw?D@DV!Ey8N_J~jb!x7 z!m${oYc@`CdItt>`%uLbJ88{6|6laa#BT&8hjIWvO&vy+4A>oNoU)>fnV~ZH0WO^z zyB#HW`x*t;yZkih9k>tY*XO%XfcvEh?34$`aizV-s?^$=;9V%wDapCro$+{4tODPd z72>vq$Qc3kg!>RMlzdCYoeM+WPZ=?u5E1H8bbi+xz0n=3DL)j_BEFF0NMUq_2riIA z?zYIOMTkToiz>6D3{FQ-G~Hk!Z>rhfCFSj_q36n+gvq*`wN2Pi$7%r>?7;k}wrcA5 z$y9sFVf{RJR7(&Nl}dQVF#zVjS`c)+gVsQ%J!Dq(h^tV+U!GVKe9z=aVL z#Pg;xU?KO55@kz2$xU&6ryY8B;`&P|{b;ADX291{xpPUhqr^WY_Mi!=zKEC}n}?X( ztVzK|Q^#@j7Q2eUHVWB>rVoWVZCM&BaK>f_cy)JIp&|kC&aaon1Cj-vm=p2iyG-RSwjC5AE;&w%qi#;&Z06I{sAEl-)&ls>;)Fu= zf^Y_Ppb7Xy3_FWCxuS^~CcrZ;XmvQ`-D_SQQAB^jsb zN(z@e27^!SylaI$cg3RmD59u4Ug{VpaNP(Y!XE1E2o82Ez=4xC?f&S++r~+g!(op= zv!Yb^qp^bSdmQ!8zNwNOZe6X_920rkoSwIh7R|c1M;-6Hr#mHq)$f>Q zt!=$gqc>vP;2#I1`P07_W21sdf;<1V*rp{|rYx|mvEWXf!1u_OMbIb<$5=N23@s6# zTaee7DLVuKAhrZW=~baDG5WZTm4)Jy7z2k5ywf8gzPpt2=z#tdA+2wyy6}BIC+PNv zmNHZ0REfCrR|mw~N0NG)!2Q|kXMdE11wSgcM6z^9=g5ZV8PuASXIG2)$va6)j(MLG*; z>j!xqL#?^7iOkEG(%u?F;RC0G3Izw4XZ;qV(exWt;=+nU+%5HG^nRZ zw9JcY$6X@OLioxN&@-4+em0baR92RIa4)QIbkoeKL`8V2SUIGiMH3ke@D>@i$)Ei> zigVh^MsWp^WJ{@2FS3-?0nOk-XZnfhbrF(@l>I&W(uNuOB5tyeDrvu&U&3euCcHG2rX%nTocdqt)SCmxtFQI zjX-WZDQlgP&}j!oP3uwztFop7ka!Y*vA0B;40u5JD^#M3H)v#LcJewJ;hfHOI_bjL z07Wlx(JnYc5{nj{8{bo(DNy8kuHB(!|7QeDR8vFl*BkZ&CzPd`5Gd)i^hx4em2yAt zBU_TZ8-8t(;adIxul!RfcpRYK$!^-2V>sY_kP9+esv1bKkw<-|i`_EHSFm9B4ZkX}S*VkL%4N1beKlQb9CYyR>y}usZ z9uY9T)51zs3G^&78Wni1e7aCQGMn!e-Z~<>1YrPpX%HA)o|;)cpsSw2n}eL7<=|fJ zyQGG|id>}@9koN=RqpNf%y93u4K$=P#nh0PRQ0gh{jqh+Cl3zP`v@L!cmk5Bb?#Z^ z%N%@nLHEqpr|Y|AN%dV)AL5lw>s=U2Bl1<&CzTb0jnK>&O*y>pj}(ezStjZzpKw+r`Ud6)xT)I ze|J2lT|#uyfN+0Oha`p<-RvReG!ypgbRUW9+E3@$Rznwq;oy}(@5>Bqe)E#0Fm!tH z8zdj0Oqt6EsA@|1a9*}2TV-7mGKA8xq3fRNgritfO9OW!1)W<<4B~&gvD-rY#%h$~ znpP7o$^hR7IzW);Zj&FkAL9x^;X7MN1CiXeAWHQ|>`vkRn{@ZQx_>cltFyl~A8-)B z@d-np{x4>;GK4;GE^V~VBP4bBMvC@H^B2=TUP)ca9z$Q9q@z35UVl5LNbHQ>OZG_X7>)hW z)J(6vn!7pXX|e>ZA5nfA9B{wYJ?Ui+9fv?soWzIX<8CXHb;XTHvu1^0ZFRz&5u$f+ z^mhD&JRh@vK8+kERMq z?HM(~#iXb%664w;eRCz7P-qSo5ONn6A?xI!Rckl&d~LpXgDgtoZi4uas}~L%2L;j`jCKSoSFRSFosWOo4a?T!G7kA%T$0cJtF? zF;3kitvFx{p??Ij4L(m7*Zrl6JLn$Xx72r12R0@XwC1!7^@eYU#AKl>)_^4Yax+)+ zI0__Pnski+bc3#Nl_9J@Ty+YP~)DCLx)&?uEURT7Pj z6P7eMtd}5QG0o8@WuYeegGLv4Wa}79dSl2J1>wiGp@=^eHoI(Q9vFcuEB<3^$E0?j zuoFJnnHL7DM(K=_ltCm^zGHM3epFO9l_VN-@(##KLLN0?-yaGJ4Hd0BLV6Dpit$c8 zv4r8bO(0@udLVNP4COgvEb;C_ovn8qJitsbR96mkM{xVa(2+ z0n4h`9XR3x&nXN8I-X2({qKDh^F*Rj?=`7o=I`v)SzR$r@Lun@Rx92yWe-T|Cp+R8 zj%T3!QN4CVMt9NjGRXQ{&R&Q+WniGas8LrvS zc|`jhZH{pTWC+hc|H#&#OYMA5FgX7ujqGjdPsI)-cZDC->2wbn2iG-Hp61f{ zoN)UbliJ5q>w)=eVIbC&tEj#5&~^?`(;MyTLe3wZ3GBBV7bw{5kBD;oOLJ9=4GTi3 zP-n2DFCUUDGZf;7sl@?;sc;hD4I%pC@m)nfexV3|xWFqjOs*OcwAJ1Ka=$=D2*GhV zQV|7+Vqi#H(}Y0;9}PXXwm(g>KeH_H5=Sf-mD`o*)n$rK=vRysuy#7Q5w9%>G&@y* z1vEQ|tOBh(U%vQa5$&J5W!=04J@e2uK6|`iokTyRi&$|@sH=xU*Zp~mZ1&w{ z%r!UysD&{h&?uy8qVx{=(i9D@#*w@qT$Ye7Ua{gc0kvVN_&#%YJJUH7BfbpMpZ!mX5>6SAj9`vyrRM5 ztVG!$0oSPB4GLY5qt|0P*H48lmWX&mN@@yhnP}~Npob9fh~*1lDCwE9?8G7kl=2LX z7JS>g@&wx5ew{gZ&|Ee$^V=S?254*21(zR&Cd)Y0%>cZYdMOe{V@ggg3Ff^N8|jiA-KhPTA<-(|@n%(FLw+ro1=Ljz4*{AI(*>?)FkHaZ zE_NmAZ;#U{MJel8O@)j2gkbyfS_qUW;Q2w}8s%D!@+f+|#ctR=Wag-{Ft+kva>Z8@ zz+T1X&Tzw-nt9~4yQ1?(r`wlT(l+o>UeDd#DB*^p0VEne9+YknKH;}O_y<_3KoGSA zraCbbm_^2!5RIRPTR71BA zq~sJv1ZJ?yT#DUyOF5*cMfy%SBy=c~s6cb|5kM?U=_LxTEZnr|f}#iob|hnSs_Ys{vi+%*=eAdD6;HUt?^~)G1ck8i`AjUdt(XRPUQ6 zb95L%zmbp~&6*)rupYlk*VuELoA-Z3W!pxPCAq4im@k+$CUh;;fER*bv>_z!YDM*? z`QMWnNlRihR~>%Gy0v5b&R0rA?r zj?AyctePeGr**r*^yG1-VN3UK<^`3T*SlE}N!~HBZDpq75-46Ky*Ol1GHH^Hy`ZWE z^i^Ow%C2$nnuy2l2aY_Er&~l?8n_;9!MQ<%H>ODMiVavB3k77+98 zn3AqW2LOx-miK(8!y)IRc&o`xHa^yVs7!w<|WPQf&(j|wpM??5KIJE${oYGkN>bRG)+TyeaD4$Tpb~pMwH7{Cu!r(;EO%v%esxj>fx+O4p4o z4^al0N8KYUQGK&rcELLb?{=^QZ0^SG93_aDoHn}STlU#BE=ksD03APVNzahKl5#rfm$9O z9d!K!(NDM@=0Cfk7{Q6YusSqp%4_hQe$|1Y2$lZMa%N@JZ)N1Z`3^Y7L7wH=X8i1M zyyEmgYmFUbk$$}SVA0>&K2F`*L!^Yw)kJh5|vG1tUIfi;T^DOU=gI( z>u5U7Ypk$?FtlZD2@f>$(H4SL?E}qm9RGf=s5kD`IKP5BI6@wed|U&OmN)YhJ>R@T zX{|NXQ}V`Rm7kPW*smJVUGy5P)ztEUVf&|rkcy5r6v%7%qJczx^vfQ@uxpcM7PQ42 z>cZiUN}pV8bIesx@0f~b${60uAN$&2SH7kGkenL#Ama7}zBL^hvyxa5x>T0Ko$IhxIc*=`SK{Co|I9ITr8L`ARQZIFwwCjWqIY2`|xI4Qkrz#2v z-ZdtBb`}TBN1-Jhn@{n$TQ@q02urXU(Ha6?pakn1PR2(ozpGZaI2VJq(rA^$hXWm<{z#wv0II1Z42nA0 z^qe1MbGqVvON<+Y_l#=xGhb30p@lOAv#W~F@?rc?Q9&A+( z4g@t?o7Xp9hUnK_$Ul+b8rq7XpkT^-+i+JW?ii9)$t4bfEk8$frFj&^fZ@C=jRjEM zQ4R>#P$Y`xlHvBc@DD|!XI|SY=Zn`zkzuMXzW*$j+R-|iW%p5uC}yCgUnska1ZFS4Y`l0b!iG@X&3+?eyYC(UG6HB$2dB#6Rn z>$`uGebxUXh~bXb69 zfONDFN;xI*+Qs>e^d1+$42sN)!ZYR=pk!x8J58M~96wjGMVDu#Bc4fbrtIQ~#>|&{ z|CED!aB<#bY}Ul-R6w>4`V;LHMwOD;^9cUW(YcVowJXfo)Pooq+z~GjeqImU-i3~m zRw7#-XGkqnVS64B)xkz94>hbOH(`S~uD8vJ`6^5S zo%JTfPr2J8^@z#t#|>1LeGwLd72b@9y3ihba};Kqlmi!M>_b&-ePn+`!{>h{vgt0k zr^^=8YK>3$4FPv>ut-X!IRw~Db<~f32C4=L+!?1c831O(Ihe_m`_W^fKBM-?Or?Vd z5XiThpxIw}hP`fnIqoQkz~*-T17LpH$Yf33T37b% zYb8IoPLn?g%8#qAQLm7vnm8mx>I+Z;wUpXoYA|JP0`Ks|+m$e~Aj%8$EWBTbb5u?c zo1zA8fc(hq9PTvfGjYTXc7T$7{do`BY$@FC)qlsqPTI8TesJ#Ci7tjw2!d*fCI5rq z8}}Ud_j8Ryr0a3~iR~G|oK8Zi<1mh&`bwRaTfx}HN~|G&lx<3}B&{>Vc4>XHH~_m! z)2>>Maybx?jW~JZGIGTCln0pFJw5oc0A2`Xm~K_J@J^w7c;b=do)hNcwz{mSygjda z=H*0)TdY9VL3zVfdfOPO7eb(}+(I=H3#69A^nWNs&5X4}O7q zgR7&nuz+gR{q|yDZSB$C9@6DY((-lFWxnGuvF1JJbSz@6}S$;xxOVaPn)IZmd7~6Eo zv(JGEBC)Suh0Pt2-=LQG=BT}fWQdI zC24KltrRRC;uvmn;oky2tL+!M)b~C2WPG;twH$TVwg(we{^VK{0c9bkVuG$RL}ZiTWX zg+Lo=)Ztec1i3k{mOz3o2 zG;9Wca7;B;b5bb$vk|VH06V4NFK&;iFbXjUDvX`AMOh(p$YVnm=DmN(M==*WYKe6D z&`cX6>yd96NOJYJTXJu~k*(Mt6o|nEJdm8`ax&f=l5duup3WAl;}A8%qbS`Hs20^v zSY?U2$#)n?NR8L|Q9I3_vs~*OqWHbaoP<}0bSfqbj>xE#KF%6Z3K!%z?*U1Ej+_D| zL*iB6?PHnB^_r1Bb(@LT>rXV$Z%~UCd?YG9{8=a89rEilKE~V;hywiz7FYJOW@HQ; z+P$dClGTRu(09Se;*zjtanJ`peT}u-O?~(+d4C=_O5lq?zX* zdHeCt`ZoHsKH&U4AR0e_X7)74hO<+6;(X}Y?v~z%$T_6_sj(X37DKcs0(A?X?g0lS z&_;CA(mlWTOv3VGafNM??m(0~V5c~*YxvGX+H6viJQQmr@+El&Mw*EQ@{PV7%az8Z z5U4sqSZu6U|M>>1$TwdvWZ93m*^TqivuY&Z?j?L`oB#HW`skwk+E*T{J&}nIbrGd| z??((?-hr&z>steERC-BDJws1=9c*8!9;L(yI@9Yl)F^-4?Gcj?=3n zbr~0@Y4^?SG3bMQlSlKr!#kLmSf3Ni0H!2K=77f@S}MEx=9<6cBj$OOwYO~9ReGZ-Nqh`{0*I+tzZkN$B|+d?RwF}YTY zOdwY<*O}SAjMctKFu94o%t1e_d;C!!Nea^j!QVOsy&@?Qqgz?MBo| zuF7oA$>>~3Cg(jF-u(+F^ri90tl`iwn!WrC4egO_xE1pfgj3MKKh7i`(bC!Hrxn-2 zhBi%B;SUdzpZc>pcew1Bx)v50q}Rp^B(ARlLF@>}#D9q%Hs^3!S-uQka!Hg? zCIQ3o+4`N|uSGE3IDQaXrNK}9xPU~ol+YQW81l}$YMr8k1hR)@O!pHCLZryDKwq!K z#dRq0e9H_6cNbm&$egZ{{`QS^BA3N2Jl?D~^fOXKiDfjh0ssFgIOP9~969%R`v1Cmz<=$d|23WS z-(CIxZ3zC~3>UA&(8x?N^ZL?v3qo^+ClGxQYG8f1ASeI;-v;)3C4zX(9WE0N0=lMu znhv9|mu?+(^+I)zbrNfr_`ln77gXG+SEN*Arrzy?|x*1E(rX?|%j(DmJ6? z#g2j@_4&3=HYFE0y=7r$@RET`xQPJ^ti0sqtWTg=!kHQRMBJY~O5JCD-SC!+$`*4;K%3`Z*?Rg7L$hzS>H4++la>5PVGiaWD&uRD>(sVLXy>TbGPpZBpv zCT4g2x+mh|gihRy5tZJS>E*Xod9BS94~!?4h>kWeGvLpb`!+@IB}Gcs7?@9Z_BMG? z8^6j@9?!2@FZiK5KGOu@c@C&60*x`f+u$;otNOeJupD@WYuuJ`C{XPvx_D1EoGr7g%X#&jtQtH72iG>ep+bgxb)hz=1>nK-;+Y zwQDD87(%=x9D`=2_^|eQ(x{z%IwWXFEd5V~`DqZ5q|M3HiN>zjR#M`#wRPO#x-HDl z;m7~n-)?mYlIq+&eYYI3%X0*Nck|4QW(xmyaQdZpBy&Zzs&u2n*&6g5)ANCw!{Az1 zvEHEOsKXXv732U!2mmytrG3Lyr&?0eEV*Ty6*!_)oisUzMClCMdfVRCnw?7jr6#BT zy4rhaAf2%GpCUCZ9ID_z5}X?BVaebf$+F+EhWQchrnhSF3TnY7=x5 zPD|bP?`iEmZ z0$TqoK{)Wj9-*|z_ac@7+i>#!AQkj$GF^**8cW}E+@B%H>5*C*Mv?1QIe_TJyT_=- z=~myNoWbM7@BvGdef+KC2Pee>@ShwRR)y;#tTOebDz?wv4`19cVqS|->=l>*HT|?U z_SL*r*3)u4OLGY5K)c`B$cgES)nR2W{}~x?hjS9@eBWcphy637`sdO@6CP& zH>d$OYrPf)bhjWY&f#kKIr{=44;YXA^dcF_!2t$`G9;EjOpx>-s8C4}LynkX7_ML2xCBk!|xy53$B2^rpU#`=8 zq~1}~bP|4V>>IC=CIaHv#vo(|8BI&O3F2MOpQ<1nvx&>3t%Vu83KDvLm5i~)I|q`* zg~B`rZoN&^IO z)I$6;-MsYrgPi#{5-CkBi-OC-OL+4Zs$3h7!GNX_O`{`!;!^>oWH~>({KhnJCoOIC z7GCvInLFY>S5Pm3DDcX;{$%DNM1uaY5V1`An&d1TMLuIK*(!a)mjV*Fs|?@;^?vHC zI}@IWikQ-$jPqcMH^|33BTunk>E+;Qu6+l?Wi88cut?rsI7EHQN@!`rlS+E&<={MJ zDzvO1hh7Ir)J2B7$CBk!=wDxsUdfz{TH|tko<6wuEn}oMq;pgmSWHOkX{L*(KF$iE zo`!+&>g|n$^4n;eMJjYP8Xky<2gI>MiLbTQ=Fr_4I|I>u1EQPUAh>AlJQi7W2bUde zniXBeD-EdXbF$DUSOEg9MbcoS7{`yc44n1C9uB31!<|t3y_EdpFJlwfX z(A-}I0O}2c6_bllPwmDgg)VU1vTk)m$}r3Vs*-NhNr@afObQs2ZQ?9FWsEkf_<@jPkOv(dh}uRh zMuXJ~>4oREN)^FOFz8OxE(MKYvb8AO&j0<=(Jb9T0~0L$m4@5yFG0iH!?es~PQB1s zFlf15iqkTZ%jg-yH5@1}a1))1Q-##dvSxAE5s%Ev1UrD({-JWNlPZkgD}W@29B?x( zDv=VT={#3EmqV4Yt*;ID<0+~RIQ_THPYV?hnY|CIaP(cOu>SB%Pq;AIvh)~($jKzc zWKFWai8D#^g$$VJURyEgdh7Qz3tCm6VfW3ZR;=6@Qk){cN2y2BbQ2Lq<{`Qi#zY#W z#~_CtoSj_A_C72%PskW<$4G(!ebJt8_Tq&^k6>|Qi82p2GTuVo5@20tp&<*hs=h+a z;JkaD6#Hz6FWmepJOy)$>W$gMv4>{TnxX-l-*f5*O!bM2x)*NzOY}QX7XfPallKZS zXH)@Gxndy>Lf&9>Dw!Xn(5eLJtN<68MjoPdI_T;9%bGn!X3ARpo2p-U zE7a626GGZS^E*QLcy-(>f-NXl?QLiHNnc#uooI7M1|9^^6g2o@N(aI3k9gD%upBIC zSO6=NY6|`I36w-1FF>*?amL*`FUTseO*kF@LqW}OL{4-lKg`RgIkM-yvF>1{N#Pzx z1VE$qIGCCnOYJ~ZTxmZ+B8YmmK|HxMSOpxWgse*@!^5*rBWCm+PdRH-X=II~wvP*( zV5=nkgIPXFL&KwQ?1=&qFus*0G0ttVy3{C3^ZsXO58`_wAhQRYUO^@OHCkJWe~V5c z>3GiK*0p?$M(lKXS5btwyBkXLwUUmVztl^FqVo(utzRY<-_9YQGj?vVTJlibJxEUd z-USh+NE438DF1e+XVStM2aO}u=vK7<+r^b`Ep@8Dlh|}#pZzov60qtqy3S0HVaE6u z!L(``4jqV_0~oR!n!dLD$Egb^zjp(7EybXoV>?Ynng$`aPvdUg<6*L<`fFH@CZ)C> z*{Gw|gq@aXrw~EaOByhA6{KzlN8v%cZa@-ETt|iqMYoM;&78zBwJUIb3;{%Ff7{R` zUO@Qs&L#OgBq4w&_d|5OUI4-Yg5)tm*x>t?0le?0gNF`;#BT8$?1^UtVW_GhIjmRV z$@DQpsJ+xMFGvbUHWn`|g`uuV2odOUyMN!lUSBZ?{#gt9A*y=^;Z>_F@H~-O*~y0_ zN3v5_>4T79YSXfEBX7-{ar^bi<_2>%!zPoYESU|o zj*AZTjsfr$iFsVE5{xT08lfmbAxG*G`XO-yhFbDH3TVo8#&*2AU4EXb4m}-b*RJaa z=!Ig+XbklmDclYt-5qb0pm#bDm7oVZlcIbjskK4K$rQ|Q@uP-0+#wiU8g6d!Nk*>( z`Svr-?(nD1fiVmphq=#*_WLY9he{vGnjuvHnD4~94+&(tZsP6V@ z24~Z4+o+7l9~Ddg9<&Vsc%j9rG7}ehaeY2!t`eSG0!NW0<{ddDA3UiYA@t-ayQZ-p z@T!S+1Y)E-U7e^7f$0%}eTjp}4UORz5q%40T-JjGz6!graugihEeU;+SM?Jjg3u+6 z#OTD+_&bwO7$osjN}csE)^3@HLff2G^MM}3F-B0nMZR8Zp%;i#$0LFF3g;u{#dztd3(!4YF1`I2BT*l13}q0kj(9}QcqMg?Z&ls0jk0Pk~df-6xnp1_Oh!*1+y>9R*`;m2Y6S#AgUbrBxi;{@Z8 z&x^W0maon$=->OB))TQj+1_q^PLnozDfZLG#v)Cd1JxE9;l6i>c)ny#RN@$U-hcOa zfpZrr{)zEW>b&`MA^}8a5`JtEG^d#|2S0cU!8=>qcpPrKJf^P=YE}nKbyshP26%1K z&uU{M(n(Z74@nMLS*}btQ>2({jsx{f*?DFQ3!8eNa_u5ySxZ82rvRi;iYF-Ak>Axp zXmbKmAf%!n3Jy=>8N>QCRdWMcOCf~-Q@?(Z0V`|@a9)D#@8_^c*WbmSw5IqdsvZ)q zEN9{%=kz*dKW1f4nHVuc19bWaf(}l7X5=Rgt|79}(AJx1@lr~?5X|bri6>OLp*e9i zUY378D$(ma4xaWh-VmV_C%i9aBc_T?2W{urTto1bC|x&Hg7O;qU}5aEg!a6jZ)pS6 z=eJ1aV_cP8E4UFBOt>?b4nU;3kU7JEi+DJ3RSaUT(o2I3(U&Gqh#UCD)p&O?$15DQ zffVP>|Na4FiHox;jP|{_7&MRo@UhRe%Mqyxb68~9e%0#zDX7hpoRba5lJia%0a|Ii z%&G`K=*d*hVl1Y)M#j=tVzQi$zglDjZ2oh7^WX!pu6Po<$VmuU>@5ZK?K$!~wnmx? zxmGkoE|{QSc7wKJDunA?)U{fiZ!+4qu?L{PCmxA!z^Xq+1^h}a18h8YV`ON*&I_u) zen18RBhH%evQilqaDrJ*U>n@~3#Hf&m~I52Ibwkw%`pbltIBd1M7O|me}^u{Ffq>n z4P$Y#R@cS=sLR%dy!^hN3}OWeUiG-BgD*A}GRnY;5dP80BBXZN1KElrY3eS);*tDh z{?>R zcI-Oa@D`i8+6>#=(_Udz2H~6Wy|k1v!ghFPe2e1g$}hap3B2*$zZqeGGu2nT&q02qg9wpfS6iO zwYcGY!^2bsb_IpBjWKInKn4nsTXD2&hTyA?FRml=Ej_j)r}Vwk#7i;UU+b__k>A%c zflB%U=@uni1OV{;6A<$XN;*uym9sIQ-n)>}>UZc98lX{CL_jC-e&iZOUP`1kEq(h( zr@d#f>ai;juU>B?h5V%BNK}sn;88D;OynN^xF6)lECl#@t&_45y;O$=9ke4SH*J0f z3UWd)iP6Hu3qw5G_iGRNC_w z7(chNCDHNyuuBW@SW~NOOmRouvV8l1{}*{moE!Yo&p(1ES7nTL*Q!Y!Ad4)@o$>d~D8d_kz|i&fuGXu!!CQM3d&MEjdy~1*k^XZ>9Vq(qBmzndO?ZF@;1dR(7K1u7d0Fy} z`c?&ML1fz|8jztu7f@+i44Bd^JPJB8uVQ@#1^gczU3FYkO&h(tEU<*g(t^?*(jhH^ zl(ck%fJ!Pz$08u5Al=>FT`SVvNQVd#(p~%A_xqFI&Ye4Vm^<^F^PKZsJd2O3=A!x? zu@cLvf44@Tl_Y9UTJODZe_Yu(ll5K8m7`N%#`gB4V*;Jt zR)Q!9gaa+#o@RCXJ#54QDr2aieuJrmZ0DAS=7xsE<8*{w<`?K+5!SEwiGb}ZYsT$c zb0-8~HY*S16J{_~xiBn4f|32y74%^MMfx38xc-H}wnX?=fJXj-iA}SKqeFy=P6UoOiWKsNg@;l|e zSFcp{bqwydP%X4%L4G@NtwsF@x~9%Ky6{BsN0=O*`$l?P-WoWUE(s4>g>ZcT{{dIt z0>ZYV&mE2|U^%I%jo0l=$$Zp;cI%p-c|s$12R9p|m=t@aU6$#jW7r4>Q0wlG)eE|l zoWr|YhFatyYT3HDZ))~2f z5}`e&GIz~+B$UIx0O0VRc1kSon*k4P@7`MXmZ=s)uV&)~mphS28bck|(=zr=<(%sX z+27our)K0@P*qd#)k7`LNVDdq-`(j=PTG#PyYsCmrA>Vq+vvbe$G_fR0YRgz_@lFn zoI1bf9loM@%BFYi#2*7v0N|-gs^`i)^C(>HPf6SPo~jQ9yX&dc{F_goSujLg^be)Fr>!cF#O#G+8+maHl0Yv<@S>qv1kONw`Zmi7eG7t2R9#O2_ZgOS3JD zOIqV`3`yc~7^d0(2%`xCZ?u}FfT}vv9336ueF9!__`!ZqnUyGWRdI#;e){9LzOX;* zE9{WfH~0MI<)2FcV91aZLrtAd&~X($`NNq$Gf*l!?lA;`x;5Iom=mn~_|~JT@LLnD z!#2%V7n`l9WJ&lwI4pJ8tx#P|vNBbYYx-B%+h-&1F!9u`_lM9LO*-kji$G{^2aADk z+siCXQUK|3DY8n^5}drHh*0k;U}dgmB~r&$yT-`V){x6;6`3(d>);`4jeN-3#Cv~O z0RT-1Qor}lUm+8(bN!&~&iZaMT$r6dOHx7jE$gsjAtyemY)O~nD@$r zG29d;srnFCNO)Z_9Y5G8q$i_qN?D(BiRU0qN0XZUvnip=F2;RQ7PYNS)qS`8%UgG45kRiX8-~hD z48VI?n)MqI22H^NL~+^6(>(R$O_>~4G=_1*u3skAA00Vf? zTd+4Ep}D7mSe?Qp)P7Jel70*|2@oc3KP2Aipo$Ow-Fb1uR8G{Qa@SMq?X0PgoUo<} zNF!zHYZ81IYb29R?+P`cW)#H z2n!Ve@)r@J>e`;Xykl9VuVmT7WM&Nz9_(B%GdgoV7+%`OX`=J3CFNT_9XWmkk#4Ga zFzc0CNWBvmfW)kjylFifl(YU+cWC#g4bS=0mZ-ASMhK<5z!yuo?XZ7Jx9|QR@c1vp zI)*8@(t#TkfOkmxbkodj^*-XmYi;mzSZwAuwk!W_ z9OKNn?b1*%BPXDGIXdeQ{bEaHE4|Hn)-QK|J}c+`a|DLws>aNOC&Kg*1NvQ=)rD7$ zwJb3`P^4qIV9I$9W{T_?S6$dc&WFA~UK%dRSW61-_O$**bN}lf>5p{w+;rv9Nrpn0V;*^WlL}Ql!RVbpOh)## za~xMj>RGv7S8>pjkgArFmCTwl39(uYQ*}%Hh&3>S+(G$N=VgBhd-zqGgWt>$^yXcd z$?3z&3Zcma^4ci8=vaNir-%dWae|hwK&_fJ#(%3Huzhcl`6j-}M$dNx^@w95W3f4W zh_a;RZT?Nw>gx}+Y?cQYqJw_JdNb<^7>42nvaP?j#(Z}pfj|i)Z)gK003<^aj*o{J z&Y~91d4H0Fr~A^mH+$&Atfh|bTQ}~GFJ#w|+n&FBPfckkt;;GI?B={O21!lqH)Fpu z0Pp?Tibyvp!vL3{Pyoo3!<%4lc}|dH%~Qee7KG+Vb?qIx**fRuW5~$F^K^7@G^6pl z6wM!mq1>IbRrxAV;s7vKT(c>f|HfC2*Kh2>=w91$WuBvS8f2|Me;|x;u&C2tA z>=qsM{%rgul;|QnusJiN;!W1GbAY(K|2eWsJxXXlge7SAz)GYvKWvx^pMQak-z8>k z=xV-_;U>$U-?rt0?Dr}$(e=dTK7!L-#nTkyZCl~%gYwfG3AV4Zh!>auVbFlTKu4k& zKi(;l($JJ_^tjrVNlfeG_#AeUts!qTIJQ9b4(FS*j-DR;uVovlT(k4usHQqis*`uo z797I%TNzxb*7lK`9c~~^*zQcUYyY7}>dDT(-XtGZn_Hgivi4IMw_YA7AfN?Loo3EW z$Rkg*wINIHbYD~~=yBM(T6-^SzdzO~;`#}=bTn?vK_lPua|=y)vUUB6jzb*nNAqbA zSNQoIz1e3S`6K3g3oBrHTf8AJOCk0Z?*>kU6|6P2%If)}#oQeNxW>@_ir6_?ksn8{ zMTJlcx4dd4FYzlmdf%Y_Xoy^%jid;Zmk_wC?QW7>W(vPIn4ebDJey(AjwvN|5TtFZ zT^UQ*c_P)$Vw<`wMYPU>Yn~zf;v9x+c-P~x#=8N&@F1umQkrnICP`c<6Wkm*{-{Cq z&o8H)UyP|s?xEkJaRVJ-K?i(!+!?8KN{T2*7b?4Vn|7#nNCTO{qhj+xmQc0r@RQ$1 z2PEz)x~_UeHY^n88M0BIeNWeE!sy^2IfAFjpPb^NCLzjYYRX@t5G#Ln@NjPHDzCc4 z9859D0)aAnZa9wl<{Q5TWF)5@zYqjBSx7x*5Fo>Rc4IM_W63fzDs*1N2v^M-n{gcT zg8*b3BcE@^d2K|TKezSi91nmXL;#ncW0+lZQvT2Gyk%||BQ{EsEsK4;Z}+zG@*wQV zr_P^ZzLk(?){(En9n5)B94ro<74i21=y0WJ8K5?Sfd$01m zR^Lcd6EdMrQL$Rw6|G_LmdF5AW%_iMaG!1zl%?gdOjX=Aul*G6)P5 zbjqwRF?hGG)ytvE-OX(!CA|b&k4|XRCc{szTegJzB{X~)0Wf7giITRmohc7ldZM@4 z5hzoTyk@s0|6kZ?Y3f?ev*SH-rA~xlZ%zj!jymF34r(@1%lChFjwNy%W+xl1N^`l7 z(L{Uca+xN&RX}JpMCYMMnZaO|z0|(Sy6Nd`g8jFW-&{+qNlzznw}MuB*IyK_&&r*K z;b(`^!|))e+j&FexxF2n)PaVt6lGGLcaKXoyEm3S`YL+=&4Jw5itSSBy6SN-)Wp&mA1%7T9$H?+7jMXVav z;&_gW;&y~E9>M_z!Rx?+hnkzQLj z!NK2_2D&uyNsd6i`^!u4MD}7I>D40Rispg=sR$<)Q#3vhV7K$%Y-=%CIK7v& ztxcsGx86_H-2It<`^;u>PEj?6^QPhRk-y6qABs{Oy-ArKLSVcULlhwNv#+U!)L)CNs#v2kCf7-x9o=$9*4agAF(#q5>Y-D9(p z)Z@lu@7-9koYR#OF73MEkOO>y1Zq#ID6Ms}3Z33NEQCGCH(pV$R9q!T>(<-HV-)c( zS(9ZrBrR}&k$^>=NT92aut?qE8Yba;oM5S&gCX%-g*Ol!*=DWDfhY!cU zhIM<_N{{h-IGQCYgkqg@;OM?#a8Qmb$lI~JC?a3^NC#mT;5`{``M3dQgH`A=ESDMYyT8iVhRodZd1jU! zz5;sbZ4NqdHH_TE4!eTUZX#q*l(Ia=V0YAr>?@g722IgYE?h4gpJ zck91L>DS+sO$)fQDg=znz-XJ(m^>aP?D2X2c(VNSSq2l`p`!*1!PLv8U6L>U+KDUs zxPIM6^S5D2Mv*T2L1Mimhq36YIDa7IJrS*&JgH=JSO^@M5Ckx7zJ7&&mu1p#x!vWC z;9TdxtPD<}8D+z@jBSnWF@}vC3!j}mmIpMx0Xz##Pyhi)@e~Ad7f@l?%nNlOvmvG^ zdf&H#C45WwU;mTE*oS8^LhFB64pm?l3UMb|@D#{45lGu?Mlc|K)(Ftjik6X%OPmj< zm6lXx0H*XdAJxm2uinmCyS+xCiH-{+^#I@ zjuj-=c}>eeOzm?mh%@&5<0RG7BW_iUhqfu=pP4s5>iw+gg=_^y58EbTp3{qxHQFge zND6Q$7c~ESmXSWxkA}_j7|#~I zmdMy_{JqBHsGDPC%pmqOeMkesmkc%2^KVOLUQ6FE6fVD4zVNL0V))rV=0t;K+D~LF zhplVK9AT=qYFj5%V`mvR{B*OT`($MV#QguhCo6lrWcf+F{7>$AZwPiL5$C`s7mkOfeokZ-A3J zYwQSxVZGJsx)?_WXlYJs9kIi7w1*PjGd;~#Kz=@xhypIH+}TYZD0gj$sKVVO2!jEj z6a=`1VXG_lhWNQSW=}ZRZxm4GpW=OE^KTj#v5GhmHQ%EAzWkAZxT1N#0*!XUW;6s1 z$OAXqJc}$Vt>EWnrh$Uqrf=R#zm%jIUe`_BdHUYm7&^$Gzyc`2k(qEH8j%0Vwb~n~ ze3bykJFoJlm;T=DFMHjK`6kYU0%xP{OZZNImuV|#KU_h@|C*5S69WFB0FSGP0~Dx_ zVelX59LxB-Cp7pD4>z1gICa?fEr+BiTW9l7;@dM9Ujcy-YNaD@rE0^u&KzXA{Ql^d zUT33e*$pR3EfGssHnuu^VZee3Sd53iAeKH(=)(Y7GOP85-iCw_zx97^`Mpc$pSR1; zj~}Ln=q0<^{+=#Xj6Nk^c};e-K3#XrdOV&=HVn~BBOe{*>-g$d#;`8qX+o9$DXs5T z;5Jj5Kz%4;iIVtWNiNz<1Pf?+qgr(N9Tz)ICgvx;UH}vQV#k<)?YGi$vQI77)CJZz z6On&BxY$}>*uV?Mr)XyXZVYKw_3>P}xzAczeoN}El(E|drkeJP8huENFn;ahVcS=* zlIX{hJK-He*XK`JG-(i+uk{af8G`>yjk#<|b~N2*y+Mu4<>=44`_+fZIAeznBpp_V z!;tl~z-KZ@W;)Q@DVWK29d``9&#G%hk|k08VtD#YG&~jlN~^<92gff)2W_3PHp6(5 z9!ddzFgv75Ain)`fw30#J(C_?{V;OJh~nZI-7=l@s`1~UD;&0sZ4!rj=uF62#8B(h zXZ_nhWJ3@>M8*L~30#LbkU&D%s{-Xy>X|C!i8J+9poMPc8sAj|j@1!_0%?an-u>qx z;!!e<6(~yH)YzuFDomT}VKo0DW9e&0?WjbXug`suU5+r*cLN&4Z_|K6=idQLIKK3Y z7<&9QO>F#k`18-iacsMG;HdrOJt<4QQETQ$$tn-TvyxU8gbZgzW*@H|1+oKy=-;$J zeTz%>Gn{?MaCiT!ibU2CVWm5oQbhPgbjHkW2(?sBl2`|Knjwtyhhly`mwXPn+D8GN!WzzW!D40{@kHlX#FK2x* zY?^zB8Tdx#qe^XCd&CQ%>z*=mZgu20jVt3Bjw2qqe>`7J;);3gW5tw4EIkI#rJvE9 z+A|dys#kRf!{9!tP=sgbba5lm;Js|0Qo8&0)*Cw7>vL}!{g+i;Jp!0%spVB*%`1EM z=qa=;D?3DO_9cF{qBmYCLJ;9(G0SkqY2&{#eSuF=aiPU_4T?e}D(BG1`em!9#ll&& z6u}Cbtrh4bxk{P6D*T!m;T)JIJN9V>Wt}Gm1o=i@t$F1xe{gwvLFW0 z5A~|kG;c@}ZweFLNsVW($9CS!)NcmQ$ES4%jpQA?n~d%-e01WUBDq^?ab&a^sK7QY z-50c_pGpZR!jX+&Hd2fM5X(=RT%$*2Yf2_|aP4%n!M9#&!(8Gz7fEoFgk896>gc+J z{=TWvQ@ARKe|k^A_NA$uSMA@+UG74D{}Vs-A3z}S>}k2Et0u^O2Bk;~ux2ny*3loo zGCKGuylcPT{OsMbOMCYW6oI@0~jJy48@fV<<( zI4$j~CB%h>7-o#lvscg}DiP@xymk=Ij4!0?Apbp-FtmjIZ40GByAuWM@V1+$h{P~E zzox=ap%DhPMP*|`BCg>b%l9J%kDma)nScQrLaNk!yr;fB#N0#EX>06+_QeHZDz@)8 zfMgdFq@WQobk)JHE7wtvZ8&LgwKS2@S7NI+>I>bvE;g!Yx^18>4>#zm-YsV%ZWokg z?yXAMEmQqwwaHzT&h1?)QjQ|pplgJmQ?Tfp=OB~B4= z?PWj^$dV1jT-nqHc~Y3z-ko)*aQv#Nl%eN&=8%+Jc#~}oqm47K|n$SF z&XF7cNTA8mBFt;OLSjZ)f|)g{8ERsy0+$~7j3A1G^#$gmZ^kfs0q~6Zz+}{gmXBL` z%H&^a{;jcn@8=E3U$q|B)<@?Z>WBYCdoJh*VaF>Z0!};!9;?1!sOWGZ_VoT)vtorIwzz?UXdK-~?s5rN;2 zq(#uL64<}S;Y5sHq?tYgg;S&a_S&_a0kZ~#5cO&z9feAOXUKCD?;&RsB|(F~tXWwV z^VpemAp37!Eb+W=c?H%sRNFyY+Vx3FzcD`Tr6_hKe$=D;0Y$2ctehycjMdci>^yaP zVun));hr79W1YIeDn&HpASeHUss|JInK`R}kb{6znx3YVi|>BbltS zzeMxucv$LYjs)*YXD6EWbU1|cxfHnLlp-=XP(~%$U&WoPZWv-`tldku_0HhvmJKrL z-+zsF;*`wia$a#aK4c7gmUnC4{D>z$0s|kss(#g|uqf$j6W5Ic@OtPTE+}}5j@NR+ zi+2hIGW+d9g=Ic>zJELT66J$ry7bKC-Bi`1cj)z#QE+y&e!d~)pn{)k*8S-4wN?(( zF^=93Z79m~r&x?XCFX^{tYukUd7d}m!W+KZ!d;;$F*Ov^n|SWvS$^s*5kgNYk9wiP zaX+a(NbS#L#0b>So-k44;!r>PPe}3q>NW`E@X)?;m@-CAU4u9`1(@QZ1Duz ztXxEHy(#Yyc44%7>*d0~rWBXGk{$Af#y#hq$Z(yI-HY=M4otwK_k{b)&r}iF=7axLt0HOOM^;)ftQ$kIvSAE#>>fnr~sAa-FP-^O`uyIUPqR#Bk3F0T@oGZ`aD@*K zaE>{OHt@&$by|B1M9Sw0II2bv_}Ew7lj-I>o7`44jZXWQfvR{BRUK@GIcrpeW}Evx zY$Dq4{X<+!Q7Pp*MC8A~jBp?3uv*G%JxX9dl~PN4h7{DJ=N}fPu%_l$8o~AXna<5k zUN?MoGQt($(7)-zHpP?7&aW_)1@qY5+O4qWByQ8Mt2BQ=jtc~v6Yq__JD%?q<8Hoo zlr#VPzLB^w=&QI70r@rC){bcDT3Ap)55>8t@aBW&{nn|O&2W-pWP4hT=+;Hvu$El( z_V9z11e_bQk*jwk#gaWm&!D?<&KDK;`uY^j1o2K)K&A}U!%5?XaEa586{a1p_KZO_ z#;WEj*AuQ}7%k>C@~Mq(Z}Qk>=}zI5^* zM4*uc$@ z^3dDDGaZaJFdaJC%B?s)K;)n#r4VT9_p9N2w_$v}PGWgLwXw%b1EAaESkqh;vL+4R zqS(Oz$o^iU@A}4%qk*xRlOZp1|ItCpf{S27h_k5=lB#Ive6SJ*H~S-{ox^y|=&lF| z@H~786w)Uu=`=ZUI6ZMWXi^PDfQY=4g4WE(&t`<1l*1hU5C_@Ry(f`eI^)iR>-1>) zuLJfhw1F2)3|Z86@sh&zVA3Q%a6zrtsiBMQPtHR#l1%4Z>_LB9f2tzZ&4-!_0{F^E zWFT61h|^-UlPH}SP~FTI4ECsQj=CmphCv&u%}e^SLJ@6a{s&nhv&JLVMDd52fP$tS zwaRP6!+Q8qNfs3q&IMF>-9=`y{&8rDKWZhs!=&azkOwUOun+*_jNw>R)vs`xuaxe$ z-?9Osr&tbeta1GO%U>?xCVX`AFov+E4l{j}s0YpyOtS=-H|8hf)K{O- z!YCqYa^OGpgTQl-YJZGB(8nq1y%THJt2)KZN2CThmb7NRqBj*4?<)6^Oy0Br<#ei$ zn#UQ2QkG*DE8tm;G0Ruex2Qrlxn+j48uJrf?GbZH&J(Bxla}pguke)~!2Fw%KFGKB zesz6TefF0HekhWw64PwC{lb(b?#xlIQy!YRBXOR}QUdk8pyTo(&IVA!B6*r@Yv+-b zu*37smDnH<^i>8%!jM|MM*JtaHd2h_@^3c4HA>Z(G(azz(;q~VBmlqiPHTf92TApJO*ZX-wlX-1t*lV(>s2;NH703kj;8@g)b=ZZ3&% zF}(l2L!hPwUwm{CZlrEZvY{s1{YKUVJ}YVsjix)10-%}WvqSD;kG_XTWHAN}*dm+I zI>htXL2dqphHF{K|Ahr>_} z5eXMw_W^hxbPUp|ztRDVs$dFO!L5`gkO^?so}@XFFHm^QiQs{JKYdW*G~(NOzm_+3 zar)?OG%r4Kp=jyNU6iX)1~^V88*~kOcsEp!9tov=y!oJ(A!+C8;iy~&1A!Sa57;&d zOx29P{Q5%!FbnNCCod`^o<$KsNCARRXCI?!m>Jj+-go~+Toky-rgr;E_b(<*H|99s z6$&N1*R*1~u)*PCBKd)@=HcFin16rKX)lFm0j;QH(cSkuq?JVR04Hx2`mEnz8DAM@ z1cYxw7+*GBB^-Zr zLYn=&xdPCjrA?nc-9z$|2-$rxzrs)2ZH>zb?u32vC+=;$AG5jf>AKoo-ENriaaJ*P zfb2l&qS)lm^8gAjFx*3My6#>|58CB^f!68%cw(vt zg_>>oDF(Er@Wt3?Fv8CNc>xhnq_Ez3)ET)bt{y}gNwIXL%TCYzqFV}%G?s@jhpIiW zA@$|O-MUQ%jX{)Ou${zIsa12Io2--A_zQv(wYCl~>$sy?b2uEilwEtO5~3iYaEAKu ztogwgxRcm_W~5r}mM8Im2Emy`0P{r>JqFTp_TP1_X{;6)tUmka)|yESDtz32USl&55gTjE#WqnBk)g zXs*#0AejOGf&|Ql3$-N^T8L2IiQ52$8DcVB`t zk%^hbuvWs)Ad35USyEd5=kIJKDysWpQAC75nZ4Vf%;u1-QiC(-leyOLfG+!y31B4qC_ z4QOTg$u%gxsr!Px?7xUe=E*thZxYk&Ydk;U)HCPzytlPivCDlA3|~zTlFi5uX{o6Y z(V#3^dP8;orR1728B#-RVSK0Pnfl@5*DhBWA4ma#Q+I2BU;py)v~^v}`LM`z{jLHt zJvl{z&6E;Qx+|)Zlq}N3W&Toi#b}h;;~dhCMYj0tKc9KOOvlRu3q!pC%;H~a#^1z0 z?7z8xR0;u+H3e0)jVc`Hj88?pGqNZ5$-Ay!^ljC$;z3!{^WCNw2{PPvJL~8Z7|YLB zdTh4zBhTE}%3m5xh{Kd&EZdP`HD_)+H7H7CHwVsP?-0mwk9X}Y7)+ArJit*-nDjV1 z;Hfn*bW&WIi0<~2ugYgEe$GqJ_Qr%#$E+hZy&zZ=!KxQ`SNKWTFLC5E4U*~eXHL}m zLn3zIu?%9@09VfE&%$?Ha{ImS$r3K9KOWiQJ=@Z(c~~~n@ohro+lm2MieRa9M^b!6 zjRG95=iVD#`O-vHqr|E*up{d>_l6z!ict^B2=2Xq6zhl*ZoDqooAvtN-)HjX3xCl& zQB)D^t#i5PprUhf0mbrvvN#_lS73JzxCmAnO&Qepom-|6pxVVQO!bwKBYG`yLulq&~(!m-ERDzs}k!zdrm$d(R^}Wv-FF zNb#M=&tP-QQ|&j10c_TuzLW70)7=VNJKoE2qAJ7;P)-csAHBTR-w#?m#fzaYiuA_lr*M9K;}f(CRrdb$ zDq20fD17EPeYQA zJSlkC!?V~Q(bKnO#PBk(vM^|0FqW}VoK-F`H5WDfi7y4WzqIqM%Y`wTglQzlyBJFk z!(9ic1bgzPT$1;t7r}Jwk}T@KzM^}!DNGS2)iKaT*39#<2HhYRNIx0yy?4#!buHBf z4-rI=B5LTH_I-Ob{jt&F8Fo7%KtNUBfAoC*)7XBs4XCRv*mn!ydF+>2{EIV(AuDp} zQCk#wQN8Cg!AAp!Ej0ff#P&=h1ucJYb0)NB@9O94AFs=*nm<^jf~bSYH%zum57&Ns z)uo--zUao7sqSqX$%|vJ5(4_7dWES8FwvqNrXFqn<<%_7(GM&i^6=#@#A zoE&X0-g&RFrEGILsbg&_5l*kOWwG-n^!-0CWw2la4HyI4 z!&Yxf{1>|6xNbfOkpj5KTr*=^Cg{Wz{EIQgbA^f4WiriTWF>3!Sd-0m) z3`g$s`RQv3SIhf_pYgLdykX8W6g4)%LOWJlWO(^wje?i@wR;TD4s$#nTO~gyqzCqH zCUR@>ZVhSE7`h+>6Wm($S7Vt3>NcHPO3S-dDNo2gS>6mbf4>J6DUw}|lK*kQVSHng zY30s|GQX=YD}GgKzp*&N_9q5Pc_ICaDlKb|{PD-(<0c9!bDNv*lX2Y%?JLXENxiC+ z7;zej6;W+bQI5=)!)~fr%~?=^Qe2QnYCH!q7?yCz-ssQLCMn^lu)MNV*$^-I_G z4v`rSPX6DJ_HJTKDo3UhId#{`|HY)C& z$}bSAgk!U@?R>kDa2zWBN)X!9eAk?h{qr7?BPT@WhlHad6$W_=2EQ9nbmgLGR0tMo zqkmhIo%9BrHu0Yf!|8?vA`f=n<_QoN&5ca^DiJcS7(H)qN`R0B5p}$L_srTFkpZ;@ z;7C(dq2KSS*>J8IpDUTIPpFmJevWyZ>j56bp{fb+1tEOT}4v6+B?;sj3MZ;-<1CjX#o~) zDZ~kea`oaj6Rh)NvrW*43;z%Rgpl+GiLlNAM{1=`6W9{Cwu)8a%BHmBVSnbjx7ie8GBlI>lQ8IG$~*QlvC zckMLcW8V)XbH@%azdd`HP7ZlbxkMmBZy5*Cl^L^lR}O zDK1tSv|CHvNb_)H%a*JoEZ;u+WF5w704V5;>dX=?#q6086-3K8ZjmN6?6I!3m_E}S)g8npv(FB+f>Oi5 z))Zpef7IszjL?_s_Fp}hN0~)WIB@55G#X?5aKe!&TtI5-TjVFw<}rg^(J-vb?3jgT z3CTY54Z<1NC^uy)yC}he*WQ2E)adw_3l*aW$K9zcwIzRvE6S`&cHsB`kTK3Lf8_U_ zasQyY#X8ssdFd;P72Mk+K0Eu}{|$Kc1W!Szk+Gx1AY(dwfltw_(3;8$Jfz zQk9SiojA;`Qf-T@VzmbG`t|BgX0p}Q>ofi5qvV7_>4A1qND}6bZ}Qt7)O5=`&fGuW zBwm@wvz`z6VMT*^LBhNQ{irY6kC>RX<14RT z*J=D@M`CCDziMYkXl|mGT8!0~b(LNvf&lvbm+G-Okvlo|l+A9R4Y|j#jg<9YcOTcj z3AJeW+sKCR-DT;3ToiSF?&`#`;<}a|42n9?%5&boq)ihufhHVCw!TtX+R{_HXE7Qo zS-Nix_^-Nw%#L6)76tC1euaJFt(RO@)6b&rgYMDQsn!G|ZH*t9`|fzZDM{5yNE0g( z6Q?+2?1j9i(kZ0@9-|lUjb)MZ(c+2OujX=?IzQR${m1vWq>*@D)4dZ(H zA*Vu5OW9LdBJ$RQur(>s2r_}zD)W3+bPG8`a6%!gYKXB(Uj-)*gwe{^>(idszg|je z)_s=v_ob_*C#@r|Q;*XZ@!(RAGKmy4mU$dq`AN;3?j;smYsqf8yYu^NNdGhu(3DJ_ zH|sPZjRl})Zc#|K=MusW_J4RaVUhB&XYK=7=X}Q8nw%q6R`i zfSmYnt)Qc=L<;)9`c2{HY;#}Ry#vj5JPjxa0?$&W)ZbPcF|fE-d1f+9Ff9G^8z)^Z zSyP-1L7&BnTqaJ;)czle0eq92@gZtv z2skhr9c5EaqPg^K8KPn8E%fo{@+`Q%zn;;}?kS5J8Ikkea{L^AXzxJPm~FUf++^jc z_vM0TQ8L=u7k_I{?^sb+kB|L9P9%JI z9%f&2>;yqAwH$5~YHb>Cz1ifr@V6QT%G zU9JYs_aTPjRi3Q}1 zyynRVXEu=k0g^2D2uPDButezeKGyBCptSl;pH{@IjAd!T3&FkZ!`JP} zO{IZOFWka0_6acTsW$z5(Yz7^ih`F{3S7d4(7SQj79oCm9`DtF^wM< z_NBUlmKEAoOkEjw?qi3JpCwA z3PGviJs3~;^Lpp%Nlxj70(0vEq4~kAcb{YhDAhR{S?T9oo#kPnMCP3)|X2>Txt<{?A@XdQ=S8?zi62jtZgSV1#hzATQ^gp zwSF~RVF_ssSwzd}wTRkBN55!|DbwS_s}kz5{#WEEYiPYk?SjZ8zr!i8k#@VT!j=O> zQO6%HoWB*4-o#4L3ZcL?+s@3@oBA|n>UZtWznHcFKryebR?3Q>H7xpqj&_B=#Xi&`RYYh@gnsK|tNdz7l1l1ib75d5co48evY*mJRjX*3(#FxxyT`lJ# zaIL){kpBMY|5c^5C)ps|BzhQt?pbMtt^wH)=jOvoQ^vEM`_!Tju?mU)@vGxiY)Amk z3>KR62y9Nr@qMDgOoRoYJ(BxMUoT!!9N5v?a?tW$*&@qKWo9ZO|Z%weqY=vKmEfLTi^^)ES=T}7j?S9%!8MpI=kv$ZCq{_z66kmKIU>MM>%@kAZ3lr#0TvGA%B6_9T!JG{@p%FMTtC0$ogl z9T8+DQre(WOz-v%G}~>wxUiAer*q|;J+B%%v@D_>k0SYJ`#Yf9m!oWdkV05Fsebvr z`re;sd8f{t*Mvak9}&9l^P=KFB3N)ICD6qwdzWst5wu2suhTmC(B_+E8v~hGqM|R4 z@Ht)TNx)y>^E{fHF|U;wD|$AWIAYysCy#`uM{V}8-Yq6o4Vz1&l0Pg!+p~r2%k-wi zdAyYuEkWg#Sb)ZZE4AhNxn_$sf%YZ)Q6Ugmj!$v&Dw8x91eawa{Cx~ zp4;!PmK^0J$8j{qHmF>3DSGXuGwyKje0`1i>7$Vx2f9}$&`0kcVYvNeQw4z1I=zYH zYkO^|9k>X3a;j67hQ1D!v2H|qTsecH$gv*yZmml7$Unvd5=4FslZSjUZ*(Wuc{o{b zzP~-5KBs2Iu#SUXo4L0SW2aEcf9M)VlyOKmANgL+b3n0r3GBbku>hz6Aaw>+Pl~ z9*E$~0A>v>_mOd2J;PvNZT0{xLv~wTfk^VWwP2p|Q-r$&NC21posPEFVPFs9QGnEJU7V0}luN0AHJT&f01^$eViFZ`ZhRTdop*~b%!T;*} zVOU+R%r6O{*}>9t|Mh@0dxE!dg7-+b;XC0knsWeRaBFI(&gTXaH3Z73;Ls zx_nzct%6=zz6-iGp7{Wv#a9jvQu)*FUcXJTF`$)*rpOupX zS7uwMHQW_J6^Jy4|rL*jX z`Z9u|7;Y&r+M#Z{biLF6<6-)eMnnl54zva>?EhO4qi|WVRl0Je<`c-HH`-{pxfs3} z#!$1fCn&}O+dMFBtU!;wnUqN6z!KVg;;%@$M&GjImqjDE;$vr6qbn#4ta6s3UmEkK zQu-9U8xZbY)6=wAoIR!4UO0~m%{huOZc!?rrv(VNBn5eR$L%9Dsr#&dlxPRaxt5?S z>g;Lm{~YWP6pZ@=C=aK}{Oj~TT2)2wnh$IuQA(t1P`C3A1KXRQb1So4YEnx>Mc}wo zZFWKTryn}gyDZkh8OuMi1b%Q#iVpXwl}dKcb8wU8f&*Pa;!bZ*%TlQ?l~f(eXExI>84*C%W-ZySI7L!o)&@- z&?|kuIwIOs$=RMdiE)uYlrb=k;mabDlIM*cc;M|iGTI>J`_bz}o)iK>hWBl?n^YJ# z3$!Pjn`wc=Dug@!4)bFcyDl(IE|K~q&J72?DpsImgy;3L7voa!xU>+hiT!`0g{i4lKAyGr6f9hCF4F+c9n5w9Hrzx8G6qp>7>NOr-Ux7Rafy| zhDj*ieVU8}n(#?fDL|`KT=Ayrna&E(oQBp_8kno>$Oxl$;ju%3u++)4KCD~UbVf!z z1(8Z~;^sO7dfU-JEatIWFy=k^EF3T7&ogks z9;XJ@idH|YVD_|oe%_s@gRY&){I#do z-8pJ^s!8weldp3-`#PspGELXg?o|0T6ivxeM zd5N;eij24e{>bS+wIKz6_6fTGXEy&?lc3*!(`3Omo+bInJ&32et_HXSsVHjP%DZV6 zU}GUFen`ws%m_qsum%YP%k_gbapb`Azn|Lr`hnj6W9o?o3zq8#>;L`U|2y^nE(r1i zi)Rkj|Gj)35_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O z9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP z5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CC za~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O z9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP5_2CCa~~3O9};sP z5_2CCa~~3O9};u_2R`lp*NC}Y#4ZEs@Y+WZxjYtvuz?VXJT?HL1pD$3gz|@|& z6QPGf=pc-c2o&gnKtZ6Vt}YUxkJ3j#w{;P~h#FECp@}d62CzU83I%B)fq(%xgb+q3 z$W$BBHqy~WX+fYfLKk=ftm%T@Ryc?Qg)~AS?jp5;Q#zoXD1ju}(?%hH>kt+Pk!qq) zk3lT{5E&K-_(OpZ1p$kN2*gOSAW|w~)DQthz(Lel=mFXhvbTk-K&Tir8iRI3Ll`s$ zvH}|qCr2j-369Z+o z#du=SUKl%IlGsj^z&K(Ya2OJ_(?5X%-$0<)gFp!&P=APo0O1Iv5P=W?wj>aUkct37 z1c(3=g9Tdx4E7-cP_XZhr-2F3J|2c(7{Uj_WO%USj|acq4c25Z9>U{bwmlfeHnKobroCmP%jfR8~i1c8na5CNP0 z1Lufp!T&uRo(Z@?l=y23CJ?m%OE?fm0N4^k11oY62r(2FX$DF( zdwU?BDkui*>Wt>a_5okv1-SASoOKG?VTB;gX&8<%1FcAi3cSc6#sPTij5oY50Fh1> zL6npb?;bq%6RrhLpy6xK5jM!0Xha?&gP?j?3QCKC!eH3vz#rOnIK3IJ)o$2dumtTu z!gCScg?~yj$#4*P&WTZ-;b$Ux{+IR~{6GU(NXh=j21xcrA&5%miI#>k9Su7TXrfcO zeG37$XNa#Olwj@Rq( z)VZi+L-&+iLhKX&Q%OuGBd=H*ch#;!y^%IK2l=$^B#y?s&?}LHuJYLPM`pDw?2#Re ziYheP@j8fHmo|(1Zihq}56-I==31v%e>cnRvC%9KAIW2zD(g93?5d^`%3t3ZO3Z zPas>V68la>y&?i8$TG8>(qFk$ZJSzu&&6zV4)y2x|+-nq4;vswgG>xGBm+Hqz3 zn)?b|O`W$~B@;-=Ss#bp7*U^dkqd)`PjeNQUo6OpxMRlmO;@>3NmA%}sKBp8KE^NP z?{>3KkXUGcm;Opvy0^9{AelZb>m=+O8C9W^rj>RK{o=kA%R0)UP_^sRY#T>vsO!mT zt0;*^mxmg|-0cy^_IG-I*y65)OE|E(>(5msP=2W9JCgeHonl@DpF;Uwuw~JG{jCLC z8uWGGKR740dX`^AMm0K%5o$+&>}8BpJsnlnDvzgsVjvI<2lxmD+1_}^OWi(( zGH7z~t9$h8$6F>r<+lvqcFrs$c0Oo_fmyFZD`3 zl{3|n)8)}AddOM_M-c8+p41+R%s{+1^=DjvdZn@Kr@FR=L_54@=1KY_>`WQ$(wC>l zsBx9^j|PSYEiBQxcDm!|f4x*CJP~^Dg2~v;HZ&%wJ%ea>v~NC9#Q8&FLC$QT^T^b* zX{K1IY_9TX1={3Yf;%_l!1a(rz@oWdd)H14~gtUtH-;dfc}p|v}Ai|m&aLX5cT zFy-&9nZ{yY+3&L58MnO4Q8nnGxbBe3pFpGU76?<&F12s5oXxtzKFdMdc1HPiijdg3 zEWI@S2LTr!i$dR|JZ_$pN{`}Kn|w)!5&w=4gq&HIdu}i^yxDZ&iV9h{+oE0SELVQp z|61CoFpH;svD|mBIaZemN4S^pbNbf49DG^g8NvQ~Mu~^=TRCTSFwOMml;bZ}Z>Q~k zu}C6|tb?uwJsDLZ4=uiDW@AvKvE-^W$HKroP?CJQxH0a=PA1P<`i0%p_DBbtwun^Y zl^i_9`V!@ssi3R$n|j$zg)g7m8V26A2j%SFHGS_w(a{k=+HI5B%2ZqOc{uR-_B5i- zb~?c+%ry4|`LE8G3Q5*g4!!vO)5ZGh{`N|8@;%a8gH3x>HJkL0yE)3Tk0nIO1WaPn zz8Yto8OU5NE#=+0Nc;APMrUlRzRnZ=s?WZ55A$uU-zYp=&>EJC%v*Q*DAucjx*4dl zqe$~nm+fb`FWHC7{PBtJZ31tsom;P3Tq&Q4B)wF(>YN$x7si>dp}+Bx*I6F16T*|o z5b6~tcZcpb>giCLt&(>jJXK5p4_NBa`i!~ctj^MJk*u`V|NZ-yF2%a zhlY)C0!BH_n?1cecUkF@pc1=gJM^(8tF*DrlBv(rZ?WGo3F$;tt8>4r5n08KP#Sx` zEG2<;JNvk`%~{X8)^C@(s_Cmq{S!QkTm006$Wi6c+gf_w&$F)CdV8wjuRBXjlH&x7+o*K3Ontysz!Pda8Q09G4E0vj?sL?i0(3q` zPAE)W8`xUb-L+hN%+&LuGqkC>B49hlUMZ2IT}{Do`@|Z`yV5_~VDIvq99P||Qt3Ry zFDhS^k4x>WVMFNGBH3U1rhpH_|MK@~z-{ocy8p&U=XD@<{otcB%f@L02tE4y(YauB z)KRCKO)kQFiP!%zL)e8`{W=z=!k@Oe7MUe9X%s5aVb@OOUR8g7?!8+=YoBeHn_=!% znulFh=@yxW{M^(f%*V3MR~qI<=rU6H=n3*uFx_@vnoRJ6KY16$7nJv3d*syIddbpZ zGs&9(`@maR7^`t<^E}poho04``Z1Z(DUk`B@QSKW2k*6Fje8x8TzMC(tW zl0S!x-WLQgbYzF$$la?IxF;?CE)({w##u}3bxl$o7n zjgW4bjc}3)T9#p3v%d5*r0;4>TWn7C8Ph09;pZ@AJRgs_HLyZc6A-a>=zJ(o=Kvk>m8N4GwNpIixRx4p!2`PA$E z$8QqOJ{*+HW3IDX&mUmlIT6)`yzul)Qlo5c?!61+ds4M``dU2wB*}4OW0^f(i+VcQ zHvU>wp-fMlOkRkU8tsUaj96&dpMFk4*&)>`0%d4bFGUENrZgGiaP8FJnr5_)U*#C5 zoV202<4w(cCahjY5$&X?zC66C^pLyd0&V@CWQLBc_4E&3 z<4_EvE+vVq{V&~P7hd({zNky9YxY!kJbJIrQ7Jqws7+v^*lY4ay5y?|#cX4qEl-|& zGCA>vkAiz$Hd{)}dGgATK9|68Dc*9Ngng0?L#faiWv@J^Z{kbGHh9e*ikj^|8V}ID zED?79X+I;WNy8RXhO~$_lMpHQaqj!&)RPHKR^3_N?|RfVM3d8m3t<}-J3ntZklbvWUDRc87yo|6=A70GCNHnt5r)G3 ztKxNEALCECbY10A9_O~#E_6IWy_vRo{)?hoCXJZ?)wio&1+r{Q3%-+`Z=?U{nm84f z9l5Qaq(nOT=%)nTzF1usX&@{bB3n^yO zzZ?;0ZwsMFmsRVcWDvA-h+MlYaQlbWR5wBM>78G>_CJ5&{iZ`#Xt|DkHruDntS!}2 zTSygE534iZr`i9&Xx=c`Tc2^6oJ~_B#z_105DPcA^DX5lH>1>e!IWxT>Mxt5Hd?-g zcqu|5hI`@cz4PVzMl%|I>};BkQ$@oIaf7Ol@hZW0k$xbV4nj{{DdFr6UqHD-w4y!^)Ib1CeOH{a*?TH~6nn4X-r43U~Luwfp?$ zM=MmhHSP=_MWy5wQtBrsRbMndH%)tFVJR|W%9PGJbVlCP+A+S1@3tK$V(f;>YrX3t zZvM0umhmU9`KLlq!$3?OO*oaw>{S1CY^>ZcV1+E_v=X3JY~p{+V>}&p9kPA zuX|mySJc31R~FQcZ~x{`xyLl&d@Qf=xY{`rCw_ZfM1tkP5| zxUGdwiA8MA>zcB;Cb(X z$Zi;gREeNd((Sum`#)7tlS1jyfsl3ClaD7;3zmn5PFc?0s+Y8m{`v4UL>~6EuT@Qn zO8J+=+oS4qCno8nEq;(%<(8=)v$c=Co5qP-sZ!KWScr2*X8R0XuS)x%FSa9cxkKjq z^1yJ|=oiL-5O&QK!wuzHf}%;PRMySd_zJ4yPq7tm#(e!vPSPH2J4rK&I<~tLUBIC* zW22bnnVqYhL?%9Dc|~g~U_k8ZcNQ{k(mwZVdn@{)Rm_O3#m8j>?6s#@VFm$8_sdr* zB56)~(0t;i>GxAVBJjT8w}f$Ze`9R;cT(9mnMoP@cQVr}I-MEqMmJY#UEw2U`(lA4iL*aN z@ZGD~8*kn?P?nG>JW^mdFCO^^XC-}9F*Lc8`sKul;0hs%A}p@`VvT}S`h;GGbgt@l zdBNhjuI=Ip zI$=gbVqSC)`!qm@{c8l1Lbv1fK#r?lAD&37w{i2-{Pa2FWQx$MB}9IddiMJjs}4MO zsutN1!;CRGn-GCSLFmFQE%~zBUUM|z*h%qqf?qHS{-h%K>)36T<|(99Bj2^5vn6!y zliXg4EgIJ{=n+MM( z#OzbZeK~%+xXyk1P8VN;!s%JGjl@kM`!616mZj(~IOSNsNhh3iS7|9yydC@{n3r?0 zjP}0F)o@N74i<}7a_{1JtS@bS{KD-Ulwx@`&d^vV(@LP*=G1^yO_>9ROF)-aJn+fh z(ywyS`83_WExIu2m6r@m?(+hJJ5#Qrv+Q)6icV^8t`C|%&ftGK_0qO&@N}x~wTg>X z(~LTi&&4?_J*fnB`{XZOvkX^m%I^N8aolw7UEGt4`800}7#`K}vA&bKCG@BJVIFlf zck}OaQR#RqhBq#ZDbbPF8`3wGbh7K0{V}l|`R?LR+(ZaW>|tSi4oHb$6;8?@pSvUb z1HNe=qfV{t<*}kaS9Kz+B3x2=?Oidc%o82|yNXH-t{dTGsnKGQ?$-RM%-e5qAGLB< z6sL|>%+&rOpZrGgTua`g&+{Kd7 zP*@(%Vko$=w^Ty;@Q2p3=EshjXNFYjvW#1JoT9UO%)Uf?OJ^Jyb6_!fx7il-=s{TF zVE+}xx_!}{_H4&LKYu9he!mcPYxIf!=L!{FviriR+~zEZ`CCpA^^d3cy7{)@fb}A( z2F9}Y=$($HUO5~VtteI3cx+8Dl?t(-}*}0|dCw8&=A3g2({k-Fl z6}l83!+X1pI`Q?mtB_UdBSKi%52Gte7c~Pi)Fzb@2EACY$-nQu|1&cksYA|PH(9)| z*mN)IxT(#96Z5C;jSqwvPTo>JiRB*T{L){OO-BgQiVJf`k)A`{3R1iLHR*`4Z=*uh zafcA@>VW02h-K^XZQ54tYp1(;K6&`GCs}?(wq$ggzd4Rfm{p{0xbpP@ihP4o_{?K& zfwynixWAqVNpbg-Gg;7!8eh*d&O6VBGGIw1Rod@b&x?8b{6iY6$0_${*Y)fomYFN} zZXZ!M8b!W$Mo(ZHDn}_^&IF0XUie<(#H&^l?E8S4aPe+v*ph0A!c|_D<2n!3oi7`{ zY`e}-8xThMuK)gx`&5AiS+=<^_Ge#()@A!PkkE_-O~|Awm)AVkDS!<6QgvJURx%f7 z*7*D%y*sO2*e;W-Iw$-x{C3!awpg{;Tm44uGq#MfUkv=d>uHaR_mLs5nUWw)60b42 zc%C{ZK{FKjwQF37H!kW3^{#e)JxQ=cOb@e8$;W`#_s$Er=F^3~$A=4Mo#j4$qV4JR zHdB9|%dy=P$mpYs^B@~y@VnW-Kr;Tl>OQ{-%=*-7+cy z&0maP8=g(KH*wYF9N#C>|6<#kW|f=Ik;u-4gtw-ZMrM}nKU#ws|L5&5CZ z>PO=2$w#QiMg8*K<5S1oItuH_S$s?RAOhZnr3FXPZDP_4xz2colkr>r&)xhHl zU)pP0p1%~#?+!`RsA94dA1$Gt9k+ViFMYZ_^90g+?zUGHeTstjk)qP^U)fs8`!;84 zqZe+s6mUhi-cooNo)pG&yVvZI=OtbxB{3+-LCYoTOoE+E?Xlog zGVP~}*rQy@ln<`f`uj+@V}|{?e20}AruMD|nB0m^+p<1sHsZv(eS4liqRx;d#8+#C zf@zDo=ahFS!Mpi|g9dxeNUQOu+uZaGqa^bcRV=qpr}OI5D@8?hj91JQ`J?lbl-PRo zJb$|S%444@P=8b0EboYN zCxC&XATpG^JnA_>^5jui2rC~9PN0bR9uWkCP(cta5z9jX08R%01SlL44Z{H$VmsnE z65wbC`bZ)ONJR4>E6{cXKz9HB;Apj}}$)g~ozAk|FAVm~X7c?UbaY!73 z74!#K9YF6Ogg(L$U~-@v0Q?a8kC9XW>(c@_paBkXL`NTm&;wwh;Zty04=6+-3~)$V z1UQL80Ubm&!AMqwE^t(ns722Z;DiW$T@*^+0EGZ;%qXBtQ->%C5JH5W4oVw=04@b0 zX>^eKNF5yna0`Kh$bq9en*I=%6~GpWigghPZ3GJW*8wX40umhoDZ@c0ka|EH2vko8 zK#9O{Bm~Zq69WKSMlm1?07~#5;Gg<`10%KrwGb)*I$=c&8L49gvIdMGfm>J{L;M3X!RQbH)7v0{2pp0EV5}MtDiAt?Lh9&&Ry7C*A}0lo;gDoH+K^Qs#061gW;R z0Z0g_6;PO=5D7~D5vV=+SDxfM`JLc z39?83Tm4c28xBN}6o;mFbaO=moEO4)0s&$HUm!xKwg7Th&I1%?; zY%xwK$O+>PfL|Pjjfn0#p^5r2u4s3(9XRVo1cP1CAs9xqD*$I9fZd|e4la&pXAA^H zo?;lB(Y6o@;|?4{W1KNgzzZ_43wp3P0o>La16*?kt&p9IlY@h+8^DJjVc6^e%4`QY z*c0Qi1Kpi57#m>S)d?Mdp|QufU>pFn>*R<&C}NDgjXxw|MRW#ecEZ@&VH_~72QCnc z7~>2y0B9K^pk06uj%bXHEyfP!JRBf)0WhFdz?LARx%r79u9nAGA4O9voCM=;cft zJqU*Zl?=ScVaV+54=Nc8**bzC0n%>k>B+yQN1!T@mw0N5is0Nlbsr-)G# zTfqy2chC+zCu#!e0tSeBfB{M%0F(kJsfjv4`$2aK;w}Ux4UiG@hXbNGJjGwzpiuV@ zW-RzaNB%m32g!vgfCE6YKg3QH1AT#Q;*b!H1OJE~5J&D9F@(QO#F+}fBOHNfY#Rb2 zee@teVkFzB7=rf*gvZ2_&@PTB19BJ%4uMH9G&=_s zbTD-Slq?uz;$(`K#1#$(t6T_uFr9+@U^)fy_Tqo<@^@y&f2EU*oE%JdATD5@!+)`m zl9Q2=kdpu3Cn-4(WyCE5Y4eC}B_jg=`sz?2JP zFdqbpgIyqqg4iexnrV}Xb1{eu9{vqMz=b>*?h=NeqqJc#8N@L{oB*=Fzkg7&*_7ZH z>Eqx{xbsTY?Qbm1N1=m32&(98d_83q$MRs|rkCU_4f>}+MpRgmpgxc=y~tgGB*FfSSa^Z(gi|?%)2NwTI#7f2ZLPr|YzXj>H9+M;)k#SeIb@g#!=3 zq!vgRG=aeY-Ru5UB4FN33m7yAVx@A|4z6u*`k&#CT6V>ak63D^=G2kOp^Q9 zV&9X53+@BQqxx+6qbJq>cs^lKp}vopIQv3BYtc7pM|Nw3pYeKR>N%k^JNUk1xSRL5 z9p`#{34>AW2LU?PsqQcx>|H-t1L*dj?Y|QBPfGp=&HuU({*!myKT6L0v;7}5|IgXD z{*SW%;NkzIjsO3;@c%5+|3|X$zvKe$pKis$YFu5dh^<-Cfbw8`|5{^)h=TB9zdo`enHMVukC{ zQRwwW4KpB6W?L78w=kTE;F!}mCF;K2&sXzC)_Z?Dr+dz9^BK zM8G$Au)L-yhOTY%ly{`xt8kd+X&rceO(i(W?1XhofM}hH!%r4;rRUkc-zz)Kr?Bfh z?uDg6xM&CpCVpN*P|@%7y@q+XIZSY3aEr5KFi>E`>SkFJ?;_>o{B7HtHPS3Mmv6Wc zLM6AS)#7~R$=A9G(L1Sf3wDY5+uO(E)zyRCnLzC;9L%*f>#44;nz5Ol99;4=Wku7* z4YI4OSV`1X-fi0Iz29PqjO+I3aUPkyV-V`siKrZ9sVm|=hfUjp2ZERN7J4%K<#!jx zxwNUFYLSDxJ`p?qwb4(T!!qE(8Mljd+%ChPXwzl~#`!iRf5xhj8%uP<`Hbe<}WQqrc7ThONaN#|M%wMZH(y z$ingI-MuKM{5YIX$8^?KL>j)reb2}}{8T7Of(u>7vcI~y;&tsuX7Y9}RaFl%u$v)O z7Md}rELx~q>)^5<6RNZ6fQFx!q4O<+`WF(g$&~wewYYPWqD@>A;*cFOcUNo!FLl#r zcrBF%_d&F}w+?R*{ouM;S?9UmZ!A;Frbj{|p1D;LET%S!`5Gy!MaYSjEW*OK#>E1= zNmeEdVB6aE)SsZ*sw5mR>*tMp3>KHB)jlmtJz?G*Ag|8*?78)or9S>Fqfqy>(cFnw zFpI;{`lNXevZBvT9iCMy26L{{0pcA043VSLwH}w;y=q~uQIYngrH;py9yUQ$f{*MU zVk@>w7tzCoCA)?;w3o;yeNQpJf8!sYOYI>YKP>)9>LrRaWRslB<5&uqb$k%}n7P&n zcBpT$*nVQKgwk#_D|=K*z+XPH)F)4az)JF-1s3M*q3kRB!0;6MW%xVZnHN`V)XiS7 zwLH?3&C7c;P0a3$y~J%0?_YH{HSv1Pei78eg7D3sWvDuQzHX17!hjYPHg>=FLY0f* zzHm1AV*(J)m74eys-$7EC|-=560VmQ(G=*kkW5lMO@F9fHyG z@_+AOai4HV*jp9urPHS)G>wkuU_%1P;>~;H?Dtq$R;Cby`yJN7m&3Gb4WO1v%iI3A zVM*#inJsC{7zzkSe1k!bU)3}PvgP+Iw|oURJ>GMT75DI#+OElEWWu>A>lHl&l~0k_ z*qf-^T7H$;dGC8=mh!Q4R2rCYaACQGV~rfkC;dl}ochDNgIQbHwj^V+ofqDI7tyMT z55uF!dac!qbXbm=?3D6bll;Mo(xlLlT3oo-cg1_Kz^znMZQyw;-pbk{(w`rK>=b_F z1E-2Msp1mv|J*T9=a6yhVd#Yu<7lRncpd%0d&qLBioTW1OQ8ZLBr$|Mue|m}uFUZ@ zKO|ZE#@Fq~NaE`RpA89PG~Z(q$c>!#&lIYa7h4+B;;Xz%;`P%We2Ib}oS5)# zMl|yhin(ye;){>(>X_cViA#nkgD{+vrfj{jGMMGD*_E9A`lPb1>8e^z#HV(wi6W_$ zy0zEC;_77a-$q7R#xvVFf~HIT$lo#;11t42kQHWw(6+fwUDqoomk^r5ZV=rwI@YMJ^ZRTXBHFg|h*hwS{Sk^K5I8FU7CRy`Hlm|wJo z>}+D09kv_~0( zY%U&)y!i5W*cDBtos}l?1z|G@T9J+$$>-))qeqiI`3!$Z7L=1q-{BxRFoY^xUb^(s zf>+*ZMUzw9eW^y&!eL=PX^L(4Ntu3`Afp(ATl(XC*^^aVC)VDoaOPtdpKQfBKH%Th zzj!R0JUv791{4!Iu$TV<7BotK+P8-_??M-vRKS_T&n0Iw;ZIBS%ktPC!_Wi^{Yn$> z=MO>yO7X|u8cnu|idh^*^)RZIlPt$Tjy9r^Px>$Z;Vu3NU-}v()&HEyT__zf!R1(Dwp>~xv_!9#`!^U3CU8y*B^7& z8ds-%^&ZTa7kxX=`|A_6kj;!WhEY*}{p$u(|4@P{n)a6v!^5h|{lY6z`9|Ukv9axP z89`zBSm9?`knz|Ed@;&3eX+`S_4^;K4~v+qLnD(p-qt-L98Gfgp=qbNs;pnxARDzqI2WWlFEO`bc-^2IW4bB z)a>S)9jlgLx`j$zdjuUPa#d7a0U`d>jNNct{Kc)dHNzf0?k2T~c%i;??t;B`%z{BT zPu(p^A-76;|ENDMC)f7(PM0L}%@LDjgOc_m3sI78e1`R>PqTjDV~+d1T~4su+i&FB z(|m1 zzuw=`C8;1LZkW4MDNbw2OGh^GnObNiHw zBX$ZZ*RJMDP_8rWt-IG4_I5EuWzicX+fA-{DX@7^P^$6NPCw-MSRxhMv)97EXRvj9 z(3wR{aJMGFL_qq@<@<^!*B`EZt_i5jGieSW+~?caeH5*wydjp@?jge*SJ$EL{enx@ zH5+R}5;Pe)GvRY2{2|ADs(Q_k*xK)|W=$g$^&h*u{fgQwNLd1ErkKO`PMXCRjk^a` z=7p**rY$Tp-)zy2^1;@6R{$!@h4P#TX)tx{pC>3#6L!X$P({KwsA4>~SqSx<52 zHifu)2+k%lugP_IofVrR9kuZ{r58c!RyF6$SvcL$wvwB?%9p;0Ni=aaj4AiZSY2%- zs42ENef{v!b#-MypJ~j(F~tkBdii<^SDDY?=V<$9NB0yfn&;${Hyk`QlD9sZ$Xndq z#ecz64r06fGUl<1g$_S5R<>9?n59L!XF@5P1-=tJe#~ay6&u;e8BUFk*^`)G(&O-5 z{2lYWSF2K&HlXeeo@I8ry>KZ}Cxh0lgM5ulR!%SlCA-ARsVu^90-R(H#wSYMds_lThBTe}L=ip3p&uaS~_bwA|%Zrgcs znIpP#KL06rlS5H}N~`qa-#Ae_7GU3qPUJ7xP?d^_ESvT9RTSJ*FGn>C3@v}8TeOj2 z_NjW_zqAuRZp5HgLLaAwB2`@Ldk&v?R?E4txa9D;$kRgR#+Utud5doUxk*viw&&Bq zotAjJ90rd+PUU&DrVo)|ZlLtk{W)fcV&>_s)zrSccz4fHsrHJ_q%5z;3lItM7HSM3 zwC|f>?r@i{Cf{%3at&9;%2LOlf};D|OFN%LQoZ&t>@Q2zEvlsioGP!BxkmBNZn%HY z_UPAQl{Y&&tBaiyWb) zqQt54>>v0V8*pQ}Y(PV%(AH)?r+07XZj|_p-cOg;_DIaFGWAik_DSfO0JoRE$G&bs z-D_nBH&YR+Z>8QfjJvWKCr_rw#EMchaGUHZ^v1+}0{3(NRfXxl6QtAN#)#VqVRb7hV!Ia$BfUpBum!jyd$)G%FHR-4DNmkLt)V zV43ltd=!*bP#NDH;o!a0bgP1L!|uE368mV+QOsaVPw&w<6!WY#|7z)Q`C#`foXvIb z74O$}OB}OHOgS?nzs*$x2)UVr#F|~J8Wmr+!O%Ki+F+fIX=3FkSzfJkPe=+K5Iw!{qbMZa?V2P__r%DwB}lYg28_7lNR^)KRk?jZks<@@)}n3-Am83gZ-VMWNKe0(yHzNX(3Xd zyTRyh2;M4W{b(acaG8_okvOeI1&0@-aZEvb*7^;}eilpS)0gHr2iJUc*Xd(WG-UG# z#p_Fn>vr!$vU}yf2uJ(T6yI&o4JqGPv|DfOq;p8pZ(f!6-q`zw-Q5K@G%J1)Ts!uX z62;|rDM)ZGw7+LW%dLNS)I1D2D&u-?(SH4Wpy>DCMowQBhJ)turYnv=PpRn@lj=nH zzp4Gq;ejrevfp*w9-Of$@3Rp#SEhx6xp5Gb0IOm9U1U%jtH}#uBioTnRaQl8j`!|; zXY>tMR3Fe&@=mnfd^H>)JbpE|zSQ58_qfD(u}4v((v=;In-;44VqakP8uu<|1#uPkzDeUmV_Y z36jG8^4;Cez%~&o3?$pb??5rHMfQa&CxFg;s_Ww z2+9}f%nu^;Q*PEZ4}P|=`rgvEF+EeABDTOSsM}CcWF+xrQ3*3uta@ec?&mqTAIlNe z;a(s0_-eRZcH`_blJJq!yuAS<9+&r;cGnb&dvdo%i#D^~m(5XI_O;{r8b)9FIf&{Y z{_v{He9Uy0Vbu$E|MEpa%x8KyitwFhZ;sPOIYQjTXFK`fQq+^oX?I!)mf)lD3*GS^ zwvXzyIu={o9eYfgq4?Y^uZiQvieD(#2^;)J%j6nwCeOqgiAXSA5)?kT>vwDog&bs} z_GDrSjg4blOA#*Xnx@zIn?|KJ6FN$a>%w_4Ly=|XrF1jyQ-4bN)umIrcT;A2-JaW1 zy?VDO?9x}a+U!@lRB;I-oUG7v+-tbmk8jwsKYGnHQbOC9@%)r|&VcfnU}f}+SJ-dy zAGN%^qj#dVe6~L|FnxLW_2u3>BPlUtiDtp|Z?l_2C9aQmEGtxpvR&T}=QVN+s3=TB z6mdBf+y13qGS&L)QFGRfI*_Y+5=;5&w`cB)E)(B9=GUu+PEY8@K-a;j;9S11Z)q%= zs<2J@H}`YT{oY$kb+qdH2fIzalA=Cg8a?a1?(gw? zC5suQK2kNKiIt{8_nM3n?*O@drPk z>OTE;uA6Wg6J*Uw@ObaBo!nS5J2ues$L0PjjZ>fBpgcu35#;0M)!8}P%PZx4;nGK| z(K^Fg9x~OZL(64f2|+?kNrohlom?kZhSk!b^@}H4tyU3Sg|U}w{LWqG^89g^bTqZy^9MhvS(PUHE`ew{NMi|2ATMq|?K zUnlvW+=$LqF;15a+c1_oj#gw(L65Q1a1~>MG@+h>cW`+mUc{+E3?iD9q zn=qnEzgy|R|CV7NQP#-2DS29y<8#Dq?-_5#n@gJG^N(9Cq=vSRjt^`*^i_>crH|0z zsxBTprx?p>Th5Ick-xhnWUYH~&U6%Odk#apF;y5=bz1V`LdjsPPR;&)i(#6;AeVh} zT;B1mbcPLMLfM~u)9D}Udmn`EW_P@s*&n8bQ9r93ghs;FTkC_Ju9~499?w@iVVbiq zt2qb%~Yb;L7JE=L9Lew$@H@W-mukIUmo^d;M3EQ))U1TbOjTtX<_Z%v)Qw;A%lDnFUw&{*@ZeWOOm+xlX4|%82a(uoNbc7 zlx!&NOkb(G_ezl$Z1%;;7$(KAXthTk#etNMW&N4*Rcj)E8zsq2p9pooEAyk+X`7S# zTk4PAp!13aY75$V7Bb}XVZ2kgd0*9gXxp}WuvyKF3QFKD zAy;4533~8JKAi$yyyOx;8F;nLO?*bWlV>p3UtP4DR4b3LCf;ceeKn3R4K-32tXmMS zx;tXiBNBd;_<*YVm2BN;S3kjv0gW}QlYOg^LFQaoeZ$iYFLTls#AS>LOa=Ld7=8$s%Hfk#*?$w`cYq51^rgto7!wbH!XIz zi$1S#%u;U~_qa#2?Uyja9~=hGQLTIA@V+IpPA23t?lGTMjsK~H(l*bY*}I1!-^$|T zk);QD|FF$k5TDrO{$+32Z|u49P{Kul#6G%%hjZ0Tl6BaLik>>ZUZ)C4@2p8}PTHI}X|8*!QVIDCo@Mhm`yMV!Lg6>tBU~#*)@0@h0Y`o|`ADWWC<5?RYfc zjOMAs5dp{Z6G0MGQ(3e41l|TtXJ{dl)2d$3a?iP6#2}qp+3OPu>|L5@{NR0`3Yh7J>iX= z*VybYsAju~(TMdGuB`LB*-8*% zD{u?g({q1PX)qdHoq_!pt`V}iYU=8++Nb*q@6WW3%`>nV-H0GTQbP2cT|F@-HKNph zBxgY3mkoVzEgHT^=uuaTSzd|QD=~Waw!ETasJ-CFsu9-P93O7jV4AGYbFde%-wfvjtIB=0wPK(`^2!?$CVD zH>xRY^k)fX4dqH0-m3r6<;Qm0mB;-%v*=!au3Qa!JOP`25BKJjmh>!U#UgHhtD>YZ zx#Ki_gSYHEm#Hq-f=;{lu7IKgINMsBKf125lB~T8zroJ#O*2m`aj0B=ux43NG*i6$ zad2Y7G<$1slF>nZnd`#qO-0n@ynB9f402YxH6PTfGWmR>W~$aH;BGDx3ua7~8k(KO zd?8v}z6x6(zf6ZIU1qTzBFyv2%~lTX#fnaHQOR>6$fvJg3pf>vjbTY7z_+Xoh7IQ# zY@7o*3FRo~%kRfw)F6C5nNVeWq&nDETq(~sy?MtnD)`kr&8OiUh6a8}?90d_>9I(R z@WEHeoSlmV;htU?S;g8ToM1aT)Vyn7WMXvBAe#jno)^|TbI13(2b-J9&&N%T8W$a` z?;2<5L22VFLUsy^Xb=QkK-`nTBTjenKK&|(8O4|n-@Ryx8tyxpf#t$+z z`gF_i)odw0i&Ge&OJVmhSPJ-RdO#jxCot*V>LK6Mke-1_9LN-M?-G{Vpz-@KlLSYb z7VYmMS77VP7_Y|j4SH)q{jnL_`CmryOY(B;!98?uCBqm$4ZjT<5AQiAHMhGZDLAur zPUw@Ioz9k!_im{33+!?4JsDs8)RCPJ$*&i7dwzX0EpDFOEG-04r^!r0*Qjp@ba;IXYIE?2AOJYy4RWvAoNYRV(Qo}3q-wywh; zXw5K^FZyidZhW#+>CZ|LR8ud@mX~Pb9I%8t{UZjVR_wjGBxg>JOkb0PjJH?LL5|TB zrl)>e>9W;!9nUD=s>J?%xNN)HbHI&Y39I~wv2}>al9nz{2dFgE2>fB*^bRkL|8T@hH(a#Xp zU{NLLwrmni)8-K3g zw^1N>%w8wv+Qee9``E>YFkz)gFD^Zs?0d~~diJKEXlumNOcP5`|2K6bL%0=hGJ z=kLo)+QN(v_4S11@{I1j!O>wLn!||uT^jCCzwsF;`S-QEk=aDqlQe6$g^5)yLZvU? zOc7UNgsUp%JogRr#^9eXt)q^tYdhyl49@-s{Ej8c4c6+jHTcK~bAH->YA^XrK_N%< z^N>Dk&WffIT_!h$3kXop;(*|U%}iO!VCX;)?}4ly|Y(bW^aP#`H^6 zs3swf6>U?kI{s^APOi3p3RwSc;d=75rvJOoMN7T`hEj&c3;K^8w;RPMit&NjxR2TfczHRESGC`ek*E`&GLWnFSx zo!z~5zZEBQ$%S;Upai^*upFsIcUq{7~lTf4g;YmY%ritlg>E?;39M zU$M!OhKkU3FQ{p3q~8LhY^vm^$b!{DDkJ|Sa!{{#SOuS4>@5u(*-nX(nEPKp0_5*8b`tvq^dE(@tftt(tx z`QUy+uL97y<3a43@R5w7k-)5MOPl%h57Yi7BVLV=x}zx7ERTbre_r=}ZdbF{I~<@k z(E4pFqWd@Rfqyb@m?S@|g$x?!FZr0LQODlTHofFEo7ree-fe2hOb`94R%Oa;)YP>W zCzdOFIJi-o&SvniuMWR$a>vljOha!>a<}ZkbxJvTpdfilqjOgDri)oI7%C!Xf@-7d z5{+jjIkNb{apJZNG3qqDg}K2%WQbo{W$g-w*V zmc=Z4NNsXq=Y6i~W8lCKuu=-%K{*WqMBi<1F??94e8f+NUB}*1=aaqkieIx&Ah4gD zn4s@G7M*xxW+nrRFsKC|xteV(GE8`_$!V zuM_Xtk>9@ia~I{L@^2CdjdtC~izIDYEPku~w^qYK%R>>Cv`-S2;;FzMzpJg%;)ww_ zMr&8uyaS^weE+gbWa!@gi2=-I;v`Nxw+!8(Eg!^_<_XBN7``(s`#imA++Fur(NJ>D ziqF*6BZMH3$u5c-n)=t$0;>u*$wCLVvVbh4!~ts?8_-brPa>itUPtpbk9>3slf>`- zD+_d+aLDsppi_Y~t|D<}dh$P^SgT4r~Y46h74eqUb3S!;C#P0`IO zD;_d2qkTOTHl8=V0f((nwk}sfJEPE%N*XEdansGi9+<^hJDXeg#HVd$z{5HGc%kc2 z$4r#$5VpN&1YDsPHWF$CUIfm-v57#$pCp=x^Zc9#=ijjnviSux>e|>+kHPp6>FrS-!>3OTcMpAmV6*z&HPgysjYzOE}TdRYYkPH0>7dsUP)N+D10Cnnp3D5~Y}=z+=$ z%gZL8$Nu_8x4hd1vhZczLx)*Y0N$^ z;=c6>KV2b{2D;)@cN{+-uves^V$6cK@?5dknw1Rw`%TwmU1EO-HaH+MJcqlpW)}T+5U&6Bc+_cosmf5$yC|E@?Di2+RY#OhzH)KzN@>@$ zg4IysyM->DxM>MMUInf1(Ew~{-%U9?^e=wDk?o5IN}O$dIX2SQRNzRaLZ~UVlOsiR z?zyQ)EvGT+73y~jD_u!$sU=Q$tft~wsUZHyl?y^ebQr6Y9yAs+3MOqY|VLt!G5Nt7d=et6=x}r;R5Am-3XP^Y&<;Tf`&cG~6Ha8PA!g zzKvqElBqpwUs)7eT}m&a{sb!;)BOs4_r{)Lk*~|qe8-;lS=O(rIzkt|&mcmE!~OFN zbw!L_QUO;xBW%73yg7z@Zl(eJ0#fnnehnM5F}7qWD6bxbObJ=9W`yqFf!d;cuwIUirDIe-(Zg5i*Phg|NtUVYD}Iw>5kb(5OaXp4?_CGt4^KSg8-=?2^;7^+9)R%S zVi0uX&pzdrm*ZPLUc={|13Np5Oa260X!eT3KwQ+q&!}Ka=G*q=qFe@z_%By|Y1I?z zakj8Bo{;%gcRjeJ(v@RC$YEn5?z>As_`f!mkj{D2IktMV%ktdtTw#)`?o0ozKdY5p z4mOlzY18$W`FvC$9XAqSNbUXdXI>TmuAb{UqJ}<%1^QZdDMY)e1fj=S1Ht_@1%cgJ z55@F^2+he!lU9o*@HaMJz^U`}w(eP4+3jmXuvm{LapkOlipbC`lRFm7KlFa}mm%`> z`oiQrLq05*Y^M#!F|(Tay@+H~_hzFliByuPQ)FLlo(7g^Ob%EdPX@q3-kL7GJGy`R zHggeJ6l?>DJG|mYwt~-Np3QtjYRzKjJTsSkL~`!4n}OhGT@ks*q(pz3 zCMG;@my?Q-F8&ubSH@6-JJ(Fi!0&hD@`PVrZYH$_p0T04l9!#mSwV2PPku5#v|KIN z{(;xq2=tWfKC8235hk-if~#4)9i+{ESGGX?G_5-HrS#nZ9;Cy7{>pKRTd2$A+`^}- z`n;pgPEU1e$C#kQ61tMA9gp#aKh-Vo&3x}dB^1G9Y>%PKk_M(qOm9pIqh|%PQcdg^ zldlZ2@l(NnbV5|G2B=mb49<6-s8^?i=V-N52+;0leFP!8>z0nD;DS!|i*Z|A$G31- zX`YFY#QFP*u|ZXAn2sUt96_zK4%)gNH0^*vBlGTu8pf%<`Ro-xTnHNUPWauE0$LuJ z=QskvQli9W2^C$=Q??n_V+bm8xN{nD^hkkB@ zKr5RbEP<-$o4^(c`(H>1hSnS)bX~b6-Xn)E7k>#_@C2Rr8ooOef9U**MZ_V~a_3qg zS5*BEf)yA96TFaBGODc(?b7z0F2_S;l- zc;?Xq{;S@%kWzuI(zGs}uHY4icxia;6@D>6z+^@Wkya}=9C`My9oPMRvc_z5b939U z>kXTG0-y3yo^*)>c7ZqP^XSm7+n+X$nIV16AR5Y8%%T}gYWB24D|K(5^fpb2Hd3K4 zQQ4-`2fQ#Om({ezs&ODWv*b9hpwF+KLr5qNd9@0Igp}fR){*a=L(lK1P>nv%=NW$CIyZ)J% zmhVzH+5MlFSpIQK-dBu0`eEX}ch0ob-i~SoF3azkT&4B5%~d{^X{1%5{XYeqL6h5S zXfZNV8_imK>lg62>VEn9*NDZW$>e7R1$?H4xZ%sAp--n1G#|xhPAGFwC1%X!_hOw% zge%R_J>Zpl>(i^nxkpx5_1O)0&F$Z}rqjPOj3!1F=j``OoB7lid}Gx=7)kzc*~j;_ z?&PH)K`Jgh%%S5Qv;SW16&)S+bp>M31{7TD4G$0hRz{zv{rErJrd#dr`GEW9y~|TK zFQ5TDbWJNRSbGgD(;QOun<1o38{@GGn@C3FQK9B1|5#Ua9gN1%ZI<`L^LP%NtR~zi z7{gX&H_MPRI`%R^GjlK3p1iuL2bCkc7`d>O0qt+8jwc5cs3uthuC|_q6zAgAl@xh%?^CeN8xr>$@!v{(yf*;Y?>CLf8C016YFa5RcI ztZ%#e@^cHu+mU6T7;0&HL=Fy`*N2|+OkhsGM3-q>%04)4SS4uXG%K%w59#o8-%taO ze_jd#Rw>yoi*rO7J1TPt3LdXgaoz^<@iJo{XZgEWE82T*VQ7uu_pWdshT*m1xYxlW zzES=96#qey?};?;a0QLDB*}vN#xgp$cn}gjQ235>&_;F|b>Vn=&0~+x9wO8>g){py zo0s&=_Wd40^jyPNZ02KSGjQ3Vs`CxI@zRIgtx_VV9X50Lu1AvXLUEPx&sxjg?~X2u z4lgbl&DCqU0O5~sH_866Yiq@CL9Yd*)>4fa=8tpha~xahJo63I^h8(NBW~OGKG4p{ zKZWhvvw18pPAs-Oe%nra`VOPE1kpH7xG(o4Hm95v6ew`tUH*3-t=0q#RNYkzb{rXW z6AG}V4G6XtwVBywNmM>3P=^lww>NhL58KB3f6Ew{xX%sp-zbj_Gc^}=?yR|cL*~{6ytPMR2u0E|IsP42y+~CSL!Rn6Sw9VDIKQ98t+;)Q!=9-?d zoPePxipoBAHQ6O0=5JkWf?)2M{d)TszKiT9tV+2y47tV0Y4C#ffj)xF&X1~ElbZrT z3i{Hj*#_FB-4nK%vtP{)ol9zjNY*1B>+V)Fv@Zm?X-rq6Vo8FUTtC%)?!L}pA<5nk zKR&*_MKsYlYGfhSpZ~R~tozM0(r3pXjY|DmCUCAtXW^6Iw%g!c?i*3XYEM1=c zGmT^zngCauT5=oA%OpN0vj40DqqzC`RzpY02wT_pvAu+??TXi7a2PU^t`_%Sw^_I5 z==p$k&q>0qX3b7)eb7eIe$v^W7P;xw_LH1THtAWg^9DHt#1m@4dFZFM-^|n0VvNIb z_oLt$}~d*G(M!N9(K(?%jRj255uHtw^XZ8T9Cq5r(K)eJsTG zHvmf(@-@L^;nKt8wAF1&g-1%o4z0I$ zladmLsl!@$3G7n1GeJ$1MSAag_q;OY(ZNik0}sO0i#zj5pOSC?>m2ATC(>I zn+}4@WnJ|Ftga-RlxF5-Jr*f{{$m&Ko)wR9FAqK0au*yE0krH(;%4nIhjdvjHs~^% z0kTXpdoi6|5TlP$MHTOSG)VH5 z5QWu)|I+qHlC?AQ`mXVDPOd}kW;748(~UKgo}NAfSCDPq=(_nUe`|4gHF|FCAy^%3 z*SSHK)E}kHC3W3+62+~b%rj`F${-p?<&RZK*CZ_J zv(9R*PSOgj{#p-h=28MI)e^Zue5-C&hl1=dH|hF}=LV}>X?_(i$F4eom!pWxl?1WC z2z_LG7Js!#1YX2SM37`%U8+<&sLQROt$qlZ8A@ZOIb>*F`&4^LV{^dmUZ;+S?+Qno z#jddCZvCqsRN4Ktv_Ek?Y?~}kQt+wH)pphviMKGXtXqKSXwYY8MSl#QKM8o|6)EO? zoxHvgE9tKQa*O_{Ory-9DuP6)zE|yG^$#tmyqn=+m(A^-0C?H&ml9&7Zm~p4L?AuI zOQw)N$Gz`P-d1!@AqpH8kd%OHPqzg*ljQDyk8mrAF# z6Q2aCkOrd4HusLfAi{()dbiL|T;~QbhMZXr*%31XZMm2m6GM4C!(B&$LLYaS$>O<2 ziLUyumor5JSE^+c*|J(cMGvP)5;Y)UMbC{r>GV7&%{uaizd-dl)=x@W71t8yOH7P+ zdnsd0^f{?*g%4Gl(3{PH!MTo{x|O#Bzx&cL0$M(lTpj#PeE#{XXRV*R#AjiP;Mzr! z?d+ttanh(9At}!$HLr-*$4yIe4dZCvz$Ol<+0XcAO3AeSTIr%AE(WLrbyt1hqH1R} zcE~S;2@jZ4-Td;Ju-Q6P6tL8Mc}(Y1dkTy3z@-8M8z7eN6FB0pVwvv>J$O$c66(9m zk#ngz4pZhbnze$~Yf5@=XiW4zw@p}DfCBRf2HoGQ5-wgz(pAOX=%`txB>94VAtbK2_=snucN~dzVezS)E zN=x>6jDp>8B-nIy*yf}oRe<$d+B9!j(hB)|)Ft7{of%chn#vipANfzT3x9w#+!67I z(5u`UQQHqncoyu~G{hK6cqv)lf+@}UP~XB~EsdD5QPXY9&$*)iaa=5h@QtbWZ1!Ep zt)e?!PRZ|0U?f+tA9p1A_(J>)aXoMY#((Y2X$3l80jBnD=`j=s$iuVzX5Sq*Le0lc z4`iog8g?|@3l=>?YjKb{+g7+N(2-5*KQg~ztM33_@^?E@hPRk0*V5eM4AR zV0$~Fk~psejuR@Hb3ymUXUIKFk;(c;CM-Y%xp35 z(`|KO^JI=0TpqT{0L8R>=3kU~)odIFG9ZtFM&KdMSET4L&DP4vulD;_CqJ>NiIcfk znXGdieeKxJeeo_$g!1MXZ^Cth<-ZCT`D2$K0^R{h$L&T3*|Pj%r$tVj_*230dFWg; zxS_!<%s2c0%NHuJH|kwP&DP;CNR-btC{YfXn<_YV`wfwFKCz-xf9%bj9YJa1aa*N&-flwna8cc>0H zUGD=$@+e*p!rzbk`x$+qW#1iDVRa$}q&~QSw_k%{3sEtj;CNOyd(C+-O1(v+eNb;>B^zo%-dMm5Kep_w(MV0E>0=P z)y3jr6RxMIQ*5s{ zbYeeI?znLZQc#VCn04vq=#a8?LG3$rZGeIZ0St zeb)k}Mk9CEY`V7(+>_qyvN|}vx68hgO3cmMZXL$XsTEO7l z92yx^d&{+~;|9>l+_%_a325o+KXB=Td#Vi5FZpd^o@>kq2q$CoUKAlRdZafCXq)GU zAe!dMQNiQ^6{k-kviep{&;ufawa6#=xOP5$zP73I zHGH#1FFUcTOUASl*Y0ao4qR5|&8Eep{widu-A!dV%4_T2djP~C z-~R9y6C4v{o(`91X?nMEo)m*PnT|jRyA=0<+p7&_x*+Dw9e?+#X=zJeKA3H-T^!UR z`uvi6@E)LpuQz1$Q`{^tH_ji}7O8e;gf$JhbOcnyX*k_fiMK;NP5T7wWd@r{=hU8i z{^1BrX*bCIXkTw5ejFGJUKN2*FN#kU-7sUFHYYz}6zm5#m?Hh#>__$yw!ymfx;lF) z5CNO(vODKsLK&R>qrz&J2{T^zFtPKC<>BU(HM5pZM#Js|Hd`XrDIczAYIq=xU37jMGRdQp69v7V##Sg&6frmH+FSeJ$ zSO&yx7g*66ofd!1n$QkqcgIgkXZyx>4NLFlz#u$gJ~*=;zjMih+cYy4#vhD;>nY!N zbwrz&PL(H2EXa4?ggQ>LlD}0bl z2(IZ`k&t!4)EqSAcQ;nU-9vVt<3Z9qm;46v+LKfk~A%&e9CP2!Es%^upgp4F2Y2f%F;XVLHmi;=Ooc(#TNr* z6Loc>_^wWxy*ukO?0CJKSckOK0JhdV7oZep{0$z7Izcv~L7OHRDV3&>85SUDY z$qy9JqhjJt3DHMwtT*p)WxC>?-+nlBg9&DZi*=&3JzsF4ls3#;sz9M(r1uSPCu&W<-1-~Jab<{%cND~fwV40)Jk6+;(wGQxZjZM6zEO!X=m8JQX*8Wtcf-ngwg#@+3j zPMFuJZ+Up=H`Zm;io#rW2YDMLkM2lbfOK>LX`Uku=#wug+KQ`)jJZ)#fUStbzk}Li zL&CHq{tEy1a6}(+3w++s(+FwGpD!oz?)*CS%!Cek;DBk2w6WV@3eCQX!IN~$TOp%A zD7<&Z053jiPBSZT0lj)niwX9lX)?n(u+2GS+b82&VS5$&ur3CoH54Jaf$Xzw1?5oN zqX*j*7yB8*3ojG}BV~8HWXqUQ0Yx9WQXLnP9#SR3ud;AMT&x##Hw)6Tx+_){3wZ2y zn>Y+H9y#h{jgUl$eWcEzqqnDv>!7nGIE=0j~#W zaMvR7&20?6`5m>51b!B$vl%Wr>bd>!s6wg2T#-(~kDC-g&Cnf^^@B(XFm%2~-N|{h zEZsm zdMm)E!jIgP2M~4=5@(C`5yvkkT71>-rd+nG;q$Icgus zA^=o8X|<#=#^Jg$thCdCfR4&7=n&0j0WgLc5E!Br04;n-u|k!!j^Ne0sQAN5U!mUy zgLGAqs_2^lelj;~#k>C?+PQJkt2__Bnm-YYvQy>7k6C5>>N=Gz6SghXz-Ic4mo!uo zoNPRmZ(5>5-{fA!o4vVv2QK1IllIjn@&RDPXz_yU5SO%#TpI!EZxfy=%_GZKiZe!R zlmzOizN2g=$@Q|OD?pPF^6SRfLUUq(9NhtajI(ykO%Ph(Z+F;9hY{y+*la^C7gdRb zYU%QUCV%4>E7RR$&#EOh;mC*M2-`Qe+k{Mx9I)xzbO1=hEiqcsCNHL%RpoMvuZ_>` z%ZMKoTL7yqVu)>NVub;1PVW>_dFDhsTwN89q4j8w|X#~Zxg{PZ;cw6UP^^y&!TwWC{cd)JaX1$@&-MoRL2)&b9Tz4gA3 z^VwDDhCC7r|6Vo$6!n)d*oIqoj}YpfmF4eCJb@;RUVh`89?by&tj~zRr*D&<&Ndv= z7<5^2VT*!7S3$3>YIS$8xq9&7?7+Z<>gQe&#z>Ov-47$L`{E3g)*T#8q07xF@i%9< zfrTEK3Gt7WHz)21teF}MjoP!YQCWVory&Qh3fKsv_c??%T&3_pF_JY^auU_7)_;ME zx60*-&a9XPB}aTkj6uc7#vx~A$GU!5ZBD$aqngUHV{ZqH=j>^{7Rp z*-6Ks{tY-a;i#$AEGg6T^(PkHOuu1ZfLyQ=-TGdu0kWp)zS67(W1At3%40zF+6W;U zM^o$wejS6vT$U~@z2ij|Tw- _8UZ(OrHjz$9)!SZZ+1fBiaM*#tW60EB;Qu*+Y# zEL)@tJY9M!WYGbcps?t7(831u?$e9s8t4PZs~C}Y`Tw5bz>i!I0leQH5DiJFWJ9cS znzmDH0w&xer5*5*Ts{yA`c(b}O9$}-ODkaSoiGtD_qDe50v&2YHI>;<--W8SQe)#0 zzd6ux9R|%^BEPm>aFJb8>@wh{6Wn?nc_@tYAb3m(>cpnV6akmmI&cLL6N#A^ZWC4s zVM%k>Oec@RMET+?mJtA3tH{12DQ!GWRsjIEEgxAX?j1hGTOaiEhRomOLBNIvw*F;d1mO&E9D_nNa<^Dm z;m=DeyJ6=jy{qeky+@6{{ka^$H=V~)BtMsk+QP%bkE?<;87n4O2A=W6WR z8F^S7lqRf<3KtO*1duhS5{$(wc>qj@4+wfiwAUV$v$23_i@SG{loqA)%3Q;=Gq_vI zRw!ZodNp3%>G}S;OPwVWlBUJllb4ZpFT#(50~eWwnF!EB(3HkL zN8p8WRrKooAeK2Y7iRy<%SDnfTMpg%@c@4)f5Rr|@NH^nUx7Q!Jo}nkW_Gw(s}h_* z?WZUDw+1sC%Hd@ZK@l=vSmGD(6WUUd4eZAzzNm{18UQmGVZ(fw;d-4YO*zFIp{9!9 z5`hGJUkUs%4l?(8Q`=M?=PsS}kl&xSX7;Q73JXzxf(zYc?w1H+={sn*Hkfk`&GtAV zALQHhhc4dbFjEEQ8-J+KUM`Wr>A!Lc`?t~X=sEH>`a#Nh$!f%F3cEA2{6T=qhy4tD)N$1 zR|%S{Hvya|*^_4d*&NQBxGj*|qQ0K@2H;=+@A+M!S$m9*6kFE0Xiv~xP2o9iY;#Gq zmKm51S=iw!PYQiHury!c95mE(6VM9m+xYJ9$68pFwfuX^^!nVKwV< z#@4fV+H-6XM+tEFMK3boomf#$WOw~iF(0$<@QX4`Yp_6eFUu!;Oamm*6OoHbx1r9( zUO_#;4*RWuGsJZzjilr%18KK;-u_RAP@&$P(N>*gpG_22*n9xepV*gcNc>F; zW>4ZvKR-yu^JU-FD!E@MMk`K6qLtxiT)}snAW8$0G`jt=P z@ZIk`yPzHPVOGTNWBgSr4)W+)J`7)cSh~Rcyr-Qz4$m{Xj8GT>zph2BXmpB9O&@)V z%5j?;V;#ndW&>~ZUh;F>wEVKT>>fD*5lp7kO0UiBp3>RY;D4l5D^73=+{fcV}}S(t`S-+_Tu36s&C z8y$ikd_N~`bs1t(eIGG-0AzoeCCW+td$pu;=fG!rE)6XNQ=27APY}3lOc}x-eCT#v z1qELU?;pt%158l(WQ0cJ(g9(uhp(SX)~D0&EUpL-GHU$0#5(FA6{;1~PNvqf_|Q1< z$pOUvDSw3qwHp{OcB-d`@V$dgwJqcbt@TCtsVt8X8PIa?pfJ#F zsK6W3u51g@j@|H7^3d6}4b}Y7_Wk1vJmIi2z{hGf`M5o!QLv+IL`}X!?A#l=1 z)A!@OA}A=6UvEylxUaw5u^a?v19gCX5CfQtE>>xYACEXS_Pqql0%J-I6~2)0nDUef z=!?4m7&5|K5@?PcHFvT)VS#W<%wZw7{cSQ$;|pB*Jq-(s`BmrKMp)KGCR|ILp2o$m zRku)!;z+&vkzU0}Pj`iNvC-^xmQAZ;+}CsK3ielcW;u(lS=TGDt=2#0@1>orEQ|cV zSAe6ptk(S>75}4n=rD5)*!@Ov+tan}7Rz#yN#zxl*lZut=a!58N0C$4@86^Dj_+&r z(<5gyED|THZ;8D%2Oz)OX$go{8tSgo0BraPCV%f>wSN~25>AU1T2WUH+X}EJ1yR4L zw2vE+$diTbO}FF8o!*oyE+D)YA;GKm6KuQu#u z83C@r2(-VSW4ds#NmU}E9^;I0d7~y8uN8RfIMK-Tv#9DUlqXZI1yj)wWle}`2a;N5 z#ECup9A7{kHYmGjI;{DTN$AT@YrXVetNkpPEh(NzX(NCG&qOoG%|7vMNGW5ma24wTU`(YpmVo~6Fd6@K~VlGR}nbn}raJL8M-jv1Lh`%wSdQcAxhCjhuc z;Nw#6Yu^DVpS&fuWnWq2I52AP)%n{Yqh*XPDGliBwelzs`?C?ed~cv9y>ZRb-mk$S zaqXCktn<88^Y+6+YEc7o%WEMj^b2!_Gd%9J>CF5y!uD%%a_yu{`#<1h{Z+X3|@iID?5ltC*VlLry{uPW7@Q@>~ zue^r&M3fiM-w{#7dS}XG{!XBwDsVPKw6&}_L+B5O7t8U=ffv});7Mk|Q-{fMeNFoG zm3^K*g-?VREgpXVY6P?_yt(S$->a(QtEvRqOuP@k8@9t5AH?rO2ZX3pVs8 zif4%GdYFrkD~&z$W&e~8?P{DiMt42KdoD{3(FJEWlrbmP}wG^v5ujd(o_~2UJJo36OS(8;}nOdgWBz7RnF6UX3f_HJdgPS5|{+f&`!5AEHfX;4xl0PQrgu+?f~ zQ|9dEQ%c0p@&#^s1wKc9?gFr~((!t({W6MJMP3fX{XnbMIr*7aR4tUXorFuWkv_P@ z(8=8O1x4Nne_ChPGMmSa+Foz^6?&leo}P3u$u+A*>fazEOds6I*ko>~f?53+~dQ_<{> zRDJw!Xy~3qyL1rc50wHP-$=uwlzE%6u@VwJif&sV>Fq&%;{xoEENxcD5q`OLpa12Nb{93beDH!Qu=&pweb*6Xes0;TT7Oo^|NE}W z26yTx*Q9{=IM;0XZn1A29`foN&z_p(14e-Tz#hE&pYCI&^Nml82Z7E5eV30MbWCD< zfLeH+y9SJVh-g$2&u#a)6Nofd!RI>?I*aa-5hfad`I}ir6^#A@t{!pU#X>zVoD6~v zxpd0!pAm-@2wjjqaJarhH-s!c(biX^8RMNVT{?KhP+tq-j6+30kTZ( zmu3XH7s?lRuvu|I`x49c%*?NgpFpiDoQ%NBAmx_$SmwofmuO_dwx`z8#47u41%DtQ z9$gN0zOPQiY0x@Ms8d`S^g3L;ixnNHKlkZ4mE4MCHq-o=`HHFY?Ed4MMUE{JU8*>C zbJ2M>CXOpX+uVLX#sh0xk7?NWMqVBpf3JxV}iVkOs=Sfg-3 ze+#|JqOqfbie#`N^(Nb%|gmwbv7m151hsPu&EMKxM-hJ9~e#!rR}` zs^*sc_0;|24S6yfYLm-H?2nbh3L@@bs17F;EkH}7QldkoA*(mOxuG5FU)G->Dnf{) zaD98PXn3Mw>TA&TpHf?~W_60AUuwpaMGI}* zu-ruE(ab02utH`4i(eCUFw3*JPvz|NfHnb}g6QOD1UVz(cj>g>G71_2UhqSf?i!!cl~q@4Pu8^3kB~-=iECE6heEiz3HdmWl_{IOY+K5v zFr8*52F8*#xRg!$rB9ZZGXB}l%ezl`sLZ-^XL@Bui$0PSqa@!%*X_=qt6uyj&NCwl zs}?x9!f#~md+-8gc70IlNWniV7NhXAqYa0>-Yp=G$J$Z6A&or7c~hICzrsQJPVh&1 z)xRId0JfZA<3e8<8i;=C?En>xjy)P8-xAoViDnP2f{nk~KX-F8NUn*cX)_}ClI8r_ zO`Dlk9O7o(&h7g236Wtj={I9zwoE&HZAfH=MwQ--g<@@}FaM^K$HJ$C6MA02s^}@i zu|8oYxlmvb0)uBOx%Eqon28VA$Q>ArJKDjH+z+O$p*qe|mNd z)4OC&x`VDwy_2j@|0WIp(eTLxVngseBf%3A!jmm#>H^^)l6a;;_+dgJ?1m9-7apnCiJ3N1aLTEzczC6mo%#qQ1bh$@!|j?Sd;?6p0(>l+Q$wsMS^)a9!(*Cg zl}1b(%jd^Z;vCtG&{LXT%uflIO2y6GUb>$1w&frEOq<(YP>5N>s){MW$MKL)gD>Y~ z;g*9Z6a+%o4utXk?BilY4|T-gkx z0dfQ*@e8lHn#bt^>4wL*>e+#E&(vp0lm)bmz4{P+-$CKr@4%$oUx?3vb+lSq*}384 zR6k>MR2_g^kgLIKh-gi1HhVmGkuRwqfuH?F-skFk!pflBve=U7B|7n_8@j5>U_7jK zwu8}1(K6Bk#6S84C!~kG_T1}wDd60s&=csdWNjV1>+ODgp1akz8Qw(aG)VFAvy=z5 z-YY75qWY>ecK3KsruMYi=A~>PIwjD6cC1&j1UE+>EbG|lU`iYs>_Z*wHvK`rvC;ao zSLb|1549d+!1tMJBjW4#(Y>wofTSuXyFBS&ZiaTjI>obk=AJSOqtBnx4_Ffoi1xXE z%dVeadK&CztB(htsnuHw>t85zw4W%arg3ZSt`c8iLktY%1@=|jW>bgae17wme}1#k zN0DSy`wd;H|IuI7lU`u7w2N<+@}+`~q02&rIbo#Iw>7Q&+BUA~iFP2%)&rtp(tz)0 z+9xkO#H;;2<&^RkmAN%4QmE)P-yYs|e8}fq?(UKfLApUg5RmRJY3Y_`6HvOlyGy!LX%Ok|?#{vX&j0&qA9sKE zo_Nl4iV-n2A&zZOfHWcVo1o3SOO$WN3l)B+9a_C0>ERbU9UE6nUp(_z37J1!OaA2S zD*lfYo9RV#l$o2-*dJQ9A4;}Ms~@Z1K2E9(ddh1voC$o zF;DBvzlN~n3;=6tv)+%M+J%tFv+Rx_4;}Efk34$t^s(bErztnXh9fex%GCVblMl%4 zUXZxXu00H36-4rw?&lN02+ohC=6Gt*xkPKA*Qw} zxbJbext>n6<61McF+pp9BSz&tahwCjFZ^M#MH1{Prtl>4yBs@ltSIjYLt}CFT9;eD zGf`D=jO`Wf1ulP-^C|Y_f(u*wubcet8XkxDa8y~gciY$Eb`1;o&q+~hhulm@<+_lC z^&_*d@f-t@%Q21f$%pQ?SYjOVtzb59HW`m6<`CTL4_?z6XJ|z5BmxREuA6pLa<6_| z))*46U0L&MXvrm~55J=_0|Az4Tm#{Y;G#>w<)Pu6gETFI0^s6T`*$6Hclx2c(6j5w zS+_}P&d`GDh;1b8w+n8I$zE0bIv%uB7aPw)Q~Rf`?nCVJY&F&aMvGA^-D+Yy{=$Mc zO$CI3@6EsO{QNT(c4_-1B=;?m=gYBD$i0SfE;$jd@o#)ZLG47m8^NGcSY2{}fbsz) zlcxLOjVyok&28u{^zhfqL;jO9;^UUPOOWIT3XXW_d+{}l4O5tSNn7KTP&6C*yYyXi-ezxO9F<;~uZN|2aMyp<>|YZ1`hCT141pO% z%B3`R>ZDY2Ows|_tY#8AioeKR`(u^oS6vdY$q@4C4h>5`Y&2jk8kYDVOst0H!@;gS zbF^niPNzR6r%oCZ!~mY3Ze(c4djfrY1mQOO{V&gSA@K)mw=xg=INcRr&73+h_z%^z zD5~vsG?iQ`>s5Q-*CKSi#9c37dwr!~ePPnRQT&dEflHJ1#ltr!{FIV#<-qQ&WV64C zv~}NXfK$GMOB_8751CERxR)`S;Sfh5(^tbguBh{A49AWCRnEWT*$b-AgHAYE!EyrY zFvRg%7Ip~}D8yLH{yk6lzO}dzDIJAvx zq>CU8+>u;qw9%5r@!1&RsHAD@%y!oP~^TKka&9$RULe7-YE2I z?)>T8bkHe!e{kPv-|j|$z}+o?H2xLhILcv6zMjFF`Y?Vq(l)#v zK+L&~^{AJJ(n)n<%#~iq8w~t+4Q57au5_~0OuX)^#sl}{#X)khA`-E7_H8;z7@!C<#jE~?cE%8tT-~9*05HONe?GxE||n0oEvV5`|wgN2UW z`nv65N$7oQE5n3EIFs(nyIMnCjMyO`Z@VmXKqs1W#5mQTxy#pksS2;*4Ax0|lz z9Z2qCF(ZZUNNjbRVs41;p27QNr}(NIEmMZaNmgi0*%$8*sI-=4$pDRrIhW8H-K2tH z73Jw$0z6qc8LsU1b8MI!+L-OQ-dJqcCK8#i^g!seO-H1WqnEUEOy-_v?Scl*^c+Vz zF*}U0t-{4WC>i;FeE;F?2_=3iL4twr+oF0=R-zkH6>rTy2|3Re&Iq74z_QZW6sXyN zswbM%!+v}qo5Y^=Z-T^zy1gEjDOjUgri=nC*|p1A%cN)TFdSHnuphA0qaY_jx>Gq0 zQO0rmb|7l=Qk~E0U1FK2`5bV(@jTTs4#{Kb>*`1B<@Uev^89`*j|$;De020L5ChT% zL5sa7bZDKul_pI{V<=>3BSJgW+z-&)n$R$AF5y5KebvYfk?BrTt_jmHhq z6Vs=yjdU^mqVJ|Fak?!@QFXW}|wB z$022P>A42d_e#%e{VXaZIkWfIytTJkt34lA|4IkBwRQoH9Z@*k?=H@r&adP!0IM&| zi~%!BS~`>tNz@s30xT3Xr+IRwa@_f;8tO9U+=n@Y7nv$bM)DN@{qEi091mzaDyewdRVwC^xVj>{SX~F zxd`#oTK2mM@b+pcO8mi$Mia52{P@e-vu~~E*Ao_n5<7IM{?6BW>ItJjs2hH#dvY*8 z@rs*@x_WTYe0`p4b1_z-r$YC64rE4c8o9CT0iOUN_xR-nnfZc`Cn2j|KNoZ_ zTUcNjJC~9scIHh1ag62fikATINe%+9Yz_8%*{awi z5I;R}1;I~RK%CC#+Ks`iD7(NvD;-HT+WJ_|dmFiz2KlZ4ib8qCXNi)mSGM=VPJ^OP zMpKr%?jjAFrew%aSj-U9hEL-j=MUkF3XglKNS|2G`N=-C5y%6mjV2nLoSfo@I|kDg=8O_j=9kg*Iyt!3jdmUR zcqJ4&0jqJD{-X5u)CT(7`?>GX`g%lKK1ZJXbb^@b6r27i+^`F|kGy=C!$N_^t?)FT zug4xrx<8XV0p?(nr(`2lervma7VY+DYwDJesEk??*8-H8)xJEGcOF2qccmP6=Dfq5 zK;s7<MRO=&=gbmj)GTn05p=zs%-8k8fzP}28+`8C{q7v%E3@4GaXipsy5iC0fj-{?ODijOIm5!7TW+=K+ zn?{NiSEwUEW=B>{x&EJtqHqKw(SC8WV$T7G;noL}!hXPi zo;HMi=2qnk_}i$2?8-R*L8IBt?c2^FUAladAgHYN!2dteG6UoL(-e;)Id4($32gs? zWoe#(CzY=rRJL+=3`N;-qW&&$p5|@Uc>8)mp#!lX?FGVD$;`~|yYTUvdo{peb}K?< zTbrk~yUcJ$G(%Sn#fAK>!>z|B*+1<^PQdoz3%_=ygol0Vv)68+suoX?6@SV?O`G}W z)$31kruFd0n;l7try2daEH-j<<95lXnui6gtSFExyPtK){?W#(q-rditAE1 z>xQmc=gulM8gO|(I<7Ca3Ftl1Ow#xt?|mIl>Fnz_sXdeJn#*}G|AiS*e+eb&%Z4mz zAK^ouPD=<$xJnet8#b}H7LLEzEtM7%c|Aivbpo5*l9w0eEbx61;&4WP3nNg_X5KTc zr#$2}H=#V3vQzJ;IDbVW>r@h!*UEVRAzaTF{@v7{x$vc9X7HI1u9BkQcbb&|4;hWa zyVOxAXh;|39-Jl?#;-m(BhZB_3O;FaqmGQ6a!u&PAK>(Tu|MY`0(OHw2DCbfy@i5l z$VSFBD!-)ou9QAIR(e?MzPRfdrUTS|X*^8^K{05+f=5l>>P|s?N93JDs&!x0B&?Dg zt6Qn*VEzNW9bWBIFTvR84{3oFvz`12zTZ}g@vA157*6g};9TYR1NUWb?i3)EhRLi( zKTV1=Y5lE40m7930;+(mXC^IAvNr%^RzPiq0h?3uuxZ41B@=zQg#^B&tWt;iCVWO{ z4l}?dmTWG(L433k9}zlz($iE>bi7eke}3uv#=k3t?&_z~`|h6xfBKGvxRqEw-Mj%( z*)%)0s5diGGS)pU8VDqirUAK4q_AoYG`eN!O z4i0mgTIatv)3FDQQ%HVYx+`RgnfUmAhgcW9iIsPUsI8Ic+&%`CrCNPBpnlm&%6{;| zx73|FHk6+lQnpN`}W2YI60qVU4 z!>IfidR|z>d@xQoK>t zm{(6Z7dN>T9Z0qP^3=CJ$9Tm8*c)Gj5#y4@7-)Upg%^%e0KRwu|8G=-x_+ z+U`VwFtWx+s%E<7ci}phZ>Q`aqu8F?s{5@AnG=8xaWx9bU$96DR{QDa;_%cJSYKU{ zNS_!;34P7P3pFMuQIx{eVkkV45&)Is9tpZ&`dxxJvA0IV&iE-)m?~KKB^tJQW z7($@hTx8rsMc5BD!%({~U)0kyH(c2tfw)AV(;GpvXgl#{hprql zX2^1or>U&Tv5698DZNd$6SUaO)*O7zcY(I3j4g{WKNtyx@w5@X&=Ze_Xn*v5xy5!k0 zUaS`VbY4sG0K)#rl5=bYwp@s}R{mK(EJ~RxE(ygiw3qbwf-}e7-t-wmbiZ~^1sw%V zPy6BB-;UMwu7OOTZ#lGHjoIbv`Bho#^|16^7^Nv8HZu&C@=4`xt#_tF@q*~;#TmJC z?N|rtgGJf}F;aUy#REf64{`8B8>~fXp;hAFyzhskSG_}TnJR@2^-@9)<(%cv`^4qj6q)ZTWN;<+3m5qQG!1Xb2ezndA%DVxj70lI<@%wdSxGRp_SJGVp}PX>Sw zD3+2}R@QV^*SMLXqf$ma;Sg8{} z$h5a~zGJ>Zg`;1r6&<>F;$W#d&?>=LL6|B+sx>P1_KiK}>j>BSf#(C1%S`1caJAK$ z)p`A$Hj1pKb)mKx5#YG&(~L)<`PBTqp2v*X$WWuo{PwiT_d5EUs)_oTyBug(EYrW2 zYUb<>?U(*=zhj$0!f`AAI6|H@3IQW#uQvI%ix^^QECo!CHV9}U#JM7wTulTgF9saG z^&x1P%xrai_B=1FDF@J8NMHd3HCe@tzMBj28CH6ikTXP!Tap8un(r@c8@3hOr*1gu zAJ}e`^}qMCSQK_bAEnidu5Ug z=1MiVJaL7+jZZr5>cwep&(jTY2u4UtP&a?Sh}kEZf|R?LnKPIQp}GV5C;;y8dEwIe zbnht&g>)J&JF}7>Jw%q_F$I=q)c!nbjyc>3P;OSXjdHNS6=~R%A(C<`IV4oKXVfk) zUi79q?}%4yT4x-d%yH@%j(}AWT+FUb1f-^wKw3Z*ztG(2t`8S$F4PrZ3RwAuXCK;p z8f-^pJZ+%$fG@uU&pG+3%^7MlNAPZs%q*Pz+z7DshsE@|B7&xy!}&!!ykvsWV|xS` z96d{7l6b&8t6`7@1=b z3QPV+GVU5{fPNCmWoF5h8bxqT=F7F{u`Dko2ewekG51cjT1`A3&vqN!j{n-=>o~s{ zEk!IVsWVnWjIzqGsuaz+dL>Y8sI~a`J9GXxgV2ztn9&J2wkzcxvwzsn62QaTTXi=~ zR0kQCE``X;6q=}e@?XSIWqPPiYRg0H$HaG-3CHZvWD%=mq0`I-1!DS6&5ipBvkN=G z_LoEps?1}D84KWs5J{EUlqyEhVOzZUAup7a7zhd=F4}f@_Q^*C)2?p zBYz1&w>^!((H~ePOu4BW`_?IA$M9Mj&Qg0o?R?8pMOPd+9qMP)Z5K{EWQZkV2o&o^ zqG(Jrw3+3V#|_?4vk;uA%+Ya9@qRA|9fU*rBDflQGAL~?`a(H8S;HsdxWL*a5~1{t zUh-I~DeeD)_sJdZkJPg%u6A{;?g^KAX;iKecJdnVZRTyH(~tH`zcOS&6sTcR%_Mvbyo zbU6KbP3zDkNAjJvke^udON;rqDJrC4_Zu6}BQw40i)lcwf9=Dw%x;;@nA|rJxC#G1b3OGtR0~B z*+>!}K>Jxkp4oyR2LhbAE8_P8vwzpO^V2OsF59PgJim}C8+!|9f$m!C)Z@A7M=^l% z^T-#=aAQI9U_bwv(aqse?#BdIFt3|;X`>R9a|f_RV#Zu*E5cs?eem^Pi2{jV09nP$ z;s*F6g1!0OKo_5DfC%9O-wsoO?DC_8JYab7iI4kL4<4H3eYY(tI{Sft_|qJ*N5E^Zgh&$@hZ(b>`3H zsG$1pBQzoJ?Fv}E)1JKDcYbWJpQjaCG7v32PpabLg5L^i8G_w1Je|W)72}kvk|^kR zF6g)0;kY8=C^SJSP^vHszRjB05c$hgS1FSn@o}uwwQXgJfUi29OzZ#FNjeo(l4spU z6F%W1!{*lE_n%_VjRNNw>U{P~@+U^W#_dmZlHbCmA*xxpQf`K1YvO$5@Fn}UG`6_@ zX1EkCj55WL`&yh$UQdxh4}GUSIWeU`(SiG^ivP%1$W4qXE@`H{eqpRta!}!8v=)LS zT*Hy8gf4c;W!0@S4R<%aghflMQOJ02hvD|(n48c~v$$w!k_yyEj#id+?^Hue&vtml zAy3zlKln3bM`%Gum_b15DgP9hrzacD0q7yNe}2-DmM;v6Zf8JL@oMtG57ZO)GAGZT z--4dmP~0|yF9g#O+;rDRO9`0~%cjJzf6iFdGS5=+AQg1|>WSz-tz2x-W`M)Jh0}k$ zAQH6N6(h!9rGu$blS`tKtonu9s;SHU!vSGk#V1!Bi3_<)>Y16ysLjg_3MJ^T1JtXs zU&hZO*j?mo3tUi5!}XTR2ucN5Dr#2!v~dwGr52m7Gjhk z`%f@=!HnIV3d5(-@-y!GAbGN*j--#RTg%z>@yN0A+!Z6!xXUU+^~*sa`RAkqK)oyI z%#eq^`5eoa(^uN$`^ufk#k$pl?6BV+zH;1y4O-z_As1q&G+y>BMhXi??(mRN6Q1cI zDAEJ;9r~Hf`)4}rt-{$)fX3$T7HV`DCS2Qrw0AVUg9~u8oJd{O()QHdk=h7T|7bI6 zfz%b29LHWn!2&b$JmVSwEwPX2dB2hXY!to}M`T=wT|Ay@2%Dj7qO3TXMVC?!Ew_-t z+OJmh2p#Q~x~lvj^5W`r)l+iR%P!B3O9@fC#A-H;*%+3}H&|z_YP7JQ3 z@~u7&KeECwC7Qk_W-ySae&U@67qr2xl+JbTf(wEpXR0Po+=JdRAh;*?#zny319GoRu464 zS3C}(+#bKiD!)$Xro>^Sx9jk*K*Mc1ydIhLJ2uSK;WA|L(LPraU_}%#(`MM`a|fkT1d! zFM0DRIZ#lhoo;MdS+8#W^($;wxX5h4T(s#_a`fFi==|I(R+f%l4B_vQmj^Z~r1~vY z2EBXvA|lR!mdyD#Ihq_zI>-hD(GJTHwtn}+$Q*H z-yQP#bszC*cD!W;%z{6SHan2T-LzEuwKdx5K-})Z8R<}Mo^hL7gnARdTrvs^J^EdGBf|kR0l4O zLDDcY(y4QdQ>qt8^oB}TCf+!VTbk(*qag%?Hw4DF4-d<%`bNKTU3E+pzXcL=6vU_4AASLTHSwJ|`a|b>Y#2zN5udrJ2+1Cx^ zqZJbdk=#MP=Tgt=S+33i+svUwt-W-BH}%(dSJ5aRZR>Jum3^^(Td}!llc3p|0@U0MEQOT&-nZ~)X{JYoRF+yFC6wy^aZC&_VkMs})0DpxR zV7mRu&Nc7*ueRlt#o{jg@}lx6w;9$2c(rzUR5HbLVBf0*L(A3K2UPeRS^@M*u9)PJCoiOk zDd(9HSpwio{MbWh7P@LqA-;1|kk*$MWkc;X0+2j_pS2T^?3{!AxzK~!q(fqBOrqG< zU?8X3mK@*?2#KqUhX*a?j;%q}v(|Hqp3@;>$LVt2)i{>n4#n*~;8ZN9AscwWAgW_F zM?&PxT5;v|U9?wu|GIR(-QLL8Gd5koAqE{wplaCnXz82w?X&$=R++nZ0}` zC`;c4q><~kJ3?i z*5{hhZ+eeb<~pTz#lyLv#1^MjMJ7)RqXSte3NU9-re2vZ7=K^Zi5{@&JBvROWXcZdH`3V~*CclGgi zEDDc3wSmt%toenV8BiS(P3=k6v~e$<=bVdZjhfA68PU8O%6bp3&UT;_lE|`=xtx^R=1s8&wjGCQgZi zHetP2Oaj31-{YRB=MKw^+C8~vjANzY0jJ)bE%b4;oHPcG)}ifkJS!Yb*d2vLmHTWI z+`4c1nD(`r8nY}Tv9N3;87x3%*D4&XLNjTLEtYtPLjY)e!iRKF-$?U2P4Vy?jSg++z~$*ppXGwej}*^V+_h(iF0RBotjz#Q^i^{ToO6$ojNm27u}ihqb$fSn?{~ZS65?-Q zw-HxYi!AvDAOd1gHp)c|AE?j%Cen+Q&;GZreKa|P) z8!D@{zB5{mKlJWf7XO@0mck8pr-MadHxj)MobD=#CQA0LPIwcNJuyFfBB+)4WP0zw zqXZ}`IqorvTX)ol?5_I-;L#KO>9>ITGK6r((rM$T>xmVb|6kDum93C061BKV0fis9 zVjR&-6a~E#*T1=r*#|zPh*Uq_!VFM;*DKsF3_-VXz)eMJlt zpx~^NIOZapN{{B^l&_V0c@Q8o{*CNkrh#^+np%>g3=oVj83Fgbz_!nNQ^6adx-Qx}9sR#1410)8QUXT@+30OW0u0p*o=FdOTKXYdT4o{_=fG406D5M}GR_?24 z&E~}5;!(m`Dhfh9o4No~7|c%7?%<#x<*_0LOGcqbVdxA(jbpaQOeu0#m)jo`B9YI= zR4%`-8iqyTHkXw&#sE?3AexuH{@CGE>1dL?l2XHmH;~E>=ol(RS;p7WOFx^>ofPd6F(Nbx%V zkCZ+R4vusW|L$`Xjz0p>3c94!Sy#_J^WJQGl%rn*S>a^K6@Q^tMR|v=Ys!yXm(t6_ zpC&J;n-n|D68zJz_&1Qy(H=`y`l#|+M)_xagT-7{hN-V}RlaV=zxI`eXt+XP_0hfX z&I#pdSCy$-BY{W>-30bcTu@!#w{+IuU`bTm0&)caCPK&x{#SIOCAPdr=SJ?*EoQ;Z zkS6<*C$^Q%w+uFs_>zNMNU8uiRRF)#IAD+8=TQ76;eNzjsMXkH={*BHmrA~9Is3-NEYqQKnR-KxaOs6aLn|Iq2V-<V?T`JWJdA_iFQ1MAH{VE#m*vV)fUU+0cE zbs190-tl!40Q4S3-Hv*=A-x_FZF*YNa!Eayaw^kzY{z@Pu1EiTdYEtR5n%CC7-4Tm z1u23Q3TPrNJ(l{NbkHV&rlE@7{Q6cY3+#20NO~2kC;9@+P>dRKd*hk$Zm2=-&HPIo z+M)yWlXrY z%xs-1wbFaQ`uDxTGEurI@Ld0VLRn89qS`bE3qNVDFgJyx4ZWaCH2-tW@1isN`L=Q` z_$W%^;ZIc}Qz}io%7v!eO<+b5JFjIHP4{63$35Fsm{$8-1B-tp4wmpA;TfjzOQUrX_@3{;l$7WIJQVrqh?6i3u%b1(3sgf@HukX(ODa zCRx()p-WvSvBYz`FEQr^bzHv>TU6lv-P3YLEe=eN-a@tQq%I^nza)u(<{TRCpEsiK zL}%3xU#T_G0Ax?4DVSOi-72r@a1~uT)p}&M7qr07eWfS=2}+CuxqGwEPqTjidv?~5 zW~33&7_MwhZBpW7mEMA=C^WkIZ;rc2Z`~dIq8Kyh?dLLjS(~ky6g$SXWTq{oA`$@X z|HbTrj!knY=aIR4In+7ZGM=m+_?k4SzOO^MlK?ITtWeVLar<)UI=Mf_m;#`wbnY7o zI>tf5-Ah5LI}-oB54|S5B^V`~)HtF}NreGUpgGa1A9opE98a008h^)3*l;#X3!c(~ z6Xb}{7ofq?d6pdrzq~y0*NrlYPMY(dl$^d!?k6+JKi-P$LV=Hcg5x*nbv0!fvvQ}e z)bwb8Qt3PD*$FRnwsV(KdMX!2c&Ph!LH4^>ll)-LcbETFLf~G<4g8=%$G*ySS5gM-uc=%LAfXQ4m?ygOTI#`*-EQ{t~C?WpWh zU)bs(2;Ko&KM(c(ix+6+lHu+kQ?_a`*cWs>QSYX7HP>Knlyu2%F;(q25-dnVM1UudYW=<{6d1knv zy!j8NXSbs-^#*l4FC#xjF3JiQ!4jhcfOObw2k)1`+QSISwj&j<3PD?nlqYu##;}fl zw+rwq=tSb;KOLczVU*-Tx-CHL4FR!g0bB`}8h(oD8}d0#D4V*J4yTJ@F@hXq(-28j zI6+kD#C$7XQn$~zoF9q0UvN4dP_|n~Fkn%P)NmcSU}b!M)dR$0dBdJm=w?=WW4d;j zY`qW*|shx5(J@NWvHfj$wgqk^z7~z-7^$WkbkY zBxcnX9dd67qk(SRVPu5`E8LINVrA`y+!u-cY=x#v7XN(e0sAK7m2nIh?|a8e31gEE zHYJ#2as9~{n+PMIw^r|!a-z_Wi9A28bcnRKsq?cMLo<2XKxenWt!jgeXFXLX*0%moe*~Q2w&Th$9>2e+xHj zYf@^e_Wc%v?OdmHuhdCh#2jA|tJ1b{`FgzfLH@ep;izZJf)`&PK$fDCmklt<05cJ- zzEFNbfG4kp|3!6gDDA4A9_uwvsX#DXi6Cf!HY&Ze7m6Y^O7h^4)+8K53 zz}(AyL{1G%8c~Ir_Ca)rF5#7n!!Y4f8R*M2Kbx=V9%DZ`y)Efb)Gg+jU;vQ|Z~}_| ze7bRFOB@v?NOq9w>_OW&kKi&EWurMtLSm2_<|2ek*lpjm}!)S_K1W8tqGW)TZO#ea1AZ7Igc)ZRm=;y3e1T8;sEZdDr2eEeN05 zm~`%ZdG38M>gGBomTzN9H_CEq$`FODE#RyecK#6?k0ayLJw7&mSr4_ssa-1h5c=mHHFXP;A`nTBU&K$Ta(whE@tawUX8 z0rZ~b?AY!2%h>yoO$LyW4YxU_pZw|D#E#Wm^kt}cc?rfQEx)3nW>Qf!20@XV83(NC z#PO^r4Qe$?@4p;_xNDIH+a$}WgLMSW5>8Vw|FNIWWe2~ftPIp0pLd)iSmhx-F^YAL zeYhKE=P1elzdw=9!teb~k5QM|#vYw0`fM{z@VWKqSj(is?&*Q3cIz$GEBsN~kc$V- zk54w5aE<0{FzE<;gQbrznIt!-a12}gRuyn2h!bes^V2N2yveg&E$`x(yj^=Ziufi) z-w?UtSw=gvvZ}{`0*F+z&0sle-1U%K^DhiVCHo)`uyIobu)uBJJE(r!TFv-WELeMV zX=D6%%iI?plc21`u~n6^?YO|RZn3&Lo$aK4@)2#FFlBQ&i-hDf zi)9cezWh!+>UGCW`Jd+El_OqasRB9xa?XNvCu#P#=}+nA9+U}y768!MGMom+c z<%@08%EBxw$+9tUt~ujX}s#YqVBtkKFzGOB7MIDjTbk@3mLNAmrX64~P@$(@gAaqWST z*~Xz{t{{fm`|d)P_^6oi}4rmVt3&VdEi;^?s`26dU?nDj(Hs{7++^ef%%%BVTaaH0?R-xDoW!^&gQ^AJConPBd;5!5lh7}4^0z57zF zftL5f`Q2x(#fqE10o5Jg`<3Xw3F2XH(-a!{mG%lV4y}Z=A^suxKofL`xsHv4hP(DK zv}NlKX9&<055>d&Be_ z^P+az;1Eqn%UocK#4X$x%>?~5o(56-b()YkdaqX!3-xegM@sC|e)mn1Panj2imO`o zO3&7-*IZ=wt&5PMXJ_e0rVq@X?e)K!s=8K83H>}7-(=r7img6WJ^zbBEeToSwAKhD zlcLn%$AjBljVYPEIKF6K=)iNqF2;^kvQ7vFVdH^F&>LKnRJl#0pRj&b7*w$63sn!` zs!~mi!}Z47IiU{!Dl4`D$$gfrxjlxQ|5b#_eTDB0$Ltq`IQ>;>q+2wNsPrQ0&gLND zOoi|w!HQ>K{6Z<>-+3$@_^h&E{N8HguJv5OPiVaiy?>RF%39zzoBk4fJq}2Y@TGJl zkKO#smhY14xUTO;7gC0E^6X5n`P(2C5wrq-0v$2}-imV5CO4!2p1Xk8}nURnV7A zJ%?^n_o<$jOX!_5%&{onNS{AT^b-J74#?tQq&<;v{qtAg`y^cwnq`SDJy~?d%t-@j z(UhIV|3GLI8lz;wTR3zXUYuOr0?S70xiyHx+_|GyYE1+_jeV>o{$^S5?&!870)HUM znGagfn%qxDD3Lj2T}a1_6|}7dLmMcKufb+rRSPmt-P5_F@f(#Np)Y;4ClWM>USk(` zGV#zcM9@|OBvucpx1^+pz!z$BsNtKNwhrecl>#?NH=YX zQP;T*g8_kaNyoNNJ`FZ(FyVyP+Q=w{f4RIccvy^hDp#G0y*iu!X51w&LfW0DC7ov3<7)p z^xVt`NW=e8M_nOe9I^TpVw|13(NE@Iq%O&C7x~%Fzm`VQPwVEz6fyVyRYCevsfy&i znQ5(CHD1eYe_Ut47+~Cd9Cwuxoh)lyg#6!O0xR1`#PbY*Gaa{hrDuhnoT>gI3z9r zzcdHk!&X(T=Vs(S{N|wIh3SSRD=0&PE6^9J)5Whm{-8DqCb6_$N7IC>XEVWg?IJA1 zmzw>22JBY&G}Ue(4_4a@M9)4ElX$5JR4`awnVM&mxHx|!z5vC`0FaV`nPXZ=JX#-T z$(kBm@HqRIef?9!M)p~(F<{OS=J!dp;d@UP8Eee{UZOJgN_~>oO|9y%z4L9+yH}zp zMJznzVcEzW{&8bet}!s zP98D&iMw!o$!9;;Jimgsrcy)OGBD zjswi$XZvmel0p}b!Ef$A`-x}BuQxwDP1gP2oZ~3KJT41^ z?WJW0_#d?XDNRV!6GJa8jE9jn3CUh@6jyOJ?K0ti4`*P|Jf95M{ZbC7hZrfL{{CS+ z=plCdu&-Zjm)YsoBX4&ULwE!5XpWuN_hW^5yC}H>;@J2=@0$e%1tQNl)fq=UD##M! zh{S;3?fi?9e>`GteEiRTs*}y0YR$Q5T#xos-askgdlK4{S8mFT84t%NHTr+T@~8#> zSwwOl?Xwo)il(bKzb~C`b^9;&q=xez=q^MFjb>j17SvWVfDr$cvXFPo2m9p?ysyYL zN7>lv+(5GWkrIw|iQv*{5>n>6czdBi+GJ2QVI>To8)u>gp?>)D{;?1o(UbVt+%-dz zWoOS8|`+bO5`z6h47j!@r>Tp?>u<-F~ zrAZwTDDFz@DfAkJ=RTvVRXyrDFyY>}6u7Oq7R^mNxo>lh%iMw2%$jM@^>g0>+F$I^ z^H-t{6*isIS(~)V*Y$Vt%YU)%jv!jzaSos&NGu_|N=(|mN0ww;dtqZv(DYAx z&)98f1dIfcQ$~tYHgu7F_S*Y2x!`f}E#j52`z74{$U3z|o-iGr6%>Z5Gztqd>`rwd zczL4?xc-_6uo2N%93bFt^2^V~1#f_d;tdp)o_fKl$Q^z==>Xj09h`I6I&N5cs{QE= zFrne9&3kYn7Twc5`T6iaZ-DCyAI1!dI7VW5f--CT$5L$)4 zMbZl;147EUg${8>J(3{tk?dhmxu58Fu%af!pTx6));1@)*9~6pKC}yz0bmIhDVv4O zbs&|ljajzCFQGXB%4}kM0Edyab?v`ESPEMm{&OPXdpIqf0C5Bb5a;iK$7a|J0)H7s z5IHs@XeA$Nq+AG17J1F)Q{MP__e0wi5r?2kZ-CD7-2k+HyTlAm7F}|Cj!)iHPPBK2 zH9YXTuvXc-02aF4%=n3LZ#jk3bnoj4K@}zDV&2){e~LB+2}JO2IfyC}t1@>%?=Ug^ z{sRnB>w9Q<8^wrRzK&Y+f;CT_66)$`T$T!e@?-X%ho=Ig6_lPD=>KTC3Wg}OCACEe1wE8X3-bfyyKCbt^e=ujx%zQI*=6n<1dNEvv zBxbPZ+3|~23GMY)KY$DR#E>45)LY*Tu%1U#Z1i`OqdmJ33=wRsNoptGVZ=*u*C&#I z*S7iJ{%m+L0JOFrIG`59QY%8b2JS85D??L*f<96KlKsyN+5akJ{XKd-%ac0Tdx!Vd zOIr3m-DOaSdzv_!ANT}vs9`v}c}^s)8_cR9T`YS=UEe|RY5k}lVfOl#zOR2VpE)?tP4u&&^)IK{S1m;P0G_1Ju!YjQQ{HuNqL|$eLHjFTn^Z=V|9+6 zp^JYQl+H@@sX-s704b~l>3w-sdH9tNCkc3UVEps<&C4fCzNS`UNd!P9v=yZ>Bvb)X zZ>>&ir7GsO*~HW;dY)#oI7|R{$mg+-eDm`(_dUPA*03IYe!ce2_BSH^6`<%Ee4P!H z2OE@sn_M;uRrF?3(q!nEmAr|IIv^?jTb#Y5mO+na0@_>FMB`PDW6l5zE_jZvZQ6T!Wke~3rdw#5pmzTPy zcZ*Rbm*U9{8}-76L3q5{@XLetx z{;4^F{dOI6jW8frW2E*K>_G%;--k*B8lUDnE2L8ZvG+A`nV@*P#reI0hmj$t-39-i zyEln|4bLAKlVRI{r){?{>BLVbeBsI;&AnTgk-;gV=$haNe1!4+^|JA=UW9ek1D+j{ zgb#v@_Y%&?Rxwxpi_oxAF+L}kG*vR~9-#^Ur@w_?AeKxg(baj#^OQz_#&*sF3GzmRBVoD$Q{plV?r+!ac&w`uy#f0UxbI&*cR!mVCI)`)4fv^46utjq6Hx{Kdp$2G=^>*G zEL)Z6`hXWA6Egc(Wla~lEvs84>KM)!o^zr(0r7+q(ZKq_BT2$dXx9SX0<#UF`akL@ zf4FDGR6di_TAoh8UkojbGkexGaZPoz{?DlP(9;(Y`4i5@am3Sn^OakMv%2oaG2@=u z7p?aV^R}*Zq%i$YxACU(AG>LZ{;fy$U+Xk$sp-+;ZBAmFytE0~*LcKis&q=vT)L5% z8RDeBh3cvbduP#yn}Cz-?r*vjA&w0-Z1jk6T_ z#pBxL_WhU0g6HYDrwTpVc)kujpTmEKoq_~S4ixm%kv5Z)$ztP8s~)26-d0u=t-ZSO z)aO2yRVo5cGVW7*TrNYmdl7o&4|uvruu6Jmu%1C~2$nws6<5?&@bi2wHpzphcYU+V zzi9mtT?FVy+{eh<#W+o1Ku+&hLc76~LLZ6D zaYY1<{iI6?+RJrr)@C!f8eA9lLBcNx%|ETx__GBw(EH*Q#=utNA(L$Vl^B{b%s*sVhcHFQH?P z5eaE01VA}p;jjs^lJ=|SC;C+_BF%dS`AE0=Lz!$jmfUU=J^_uI7hph7`Q{;HR22Fc*&zvv@A^*X2XIFH%yjVlIpe_U#P=xpWOg zV;zi>S9wbxLbxBh-CuyP)k_ALo}}#o+{z$J++s%9 zDccT2n0stTlmQ9>9>$d%pM+pj&j=P@JYb10ncyBb+-+2f-7zD@JGJqyJ+E;~$IY`{ zeD zoXhwq<-$UmIqTP97dgKl@60L8X(08=!$bTGXIR$wax|cVkPmF-#m6-jUGtqAhQ22i z`>6w(8foo2Xzz`h>~!5P1FE{Vvo{{PS;Qp=J=seP+NyS{IIY~;eGu2UcdX`8{OY3y zb!_acjT!9Yg|ijeD3@lQwD{;Cq|XwZEJ_emP0i9w0A+ly599pZk3QQ4rw<(`2jcB^ zOI}7qn{O|ABQ+kgRFJT7exI8g)v{9g1X7)}$${6OJs)HMN7MXf`-~$oNjLm?jGLc- z&L#duw8W`FC0r<4fAvqW2CoKySm@IOzoE8q@xZEp>2A3&yi{oRp_}&xxx*+~5FHO3#GQgp~2w!=3 z5+oSt-j6PdFg2#XJC1`(##LG>LnIpgYlPcA(wrq6 z@1uDD9*-Nk)qyPkbZ;)}CE7?6un59{-}!ut+O%X#E{P2;2p_oQi3R6|UT-{VDR!S# zvkeY^iotbsUtW196z(yOTr$I?3b?@gG7=%r{W+<4{%+&*>Bgnn`G=4H1M=hM@*Wgoh>h6f9mO-hrA5tBH;as8DAU20S zvVi?CTJM^4_2ZsXkqV}M%Vy2XIwwiaIReyDn~rXc(Mbm&^~#4ef(Y1$Gi4VaLX!10 z+(kkk0eE5IhteCZF&>m@BNrJ#Ihkar^rbovwN^#ybHn~cME-~qST0!Dk^M+MW}4L! zACa_a{Euu;A~ppx03`D<5Cy+i^%{uJTQ)-Z9xn$`M(^*@%92_-e`;DL27xV+iY$== z1*)+i`sc8PkuTQ9)Ia}&WNC}2grmT8FsAS6lYEvQuL z6VC;K8}D+RwV`lI(RRzvlzRfmy1MgrjnirgbjL2v_wgRhpI0!v*^Lhzh?x0_G`ZlW z$Tdp1s=IC$y#@(VgJl{_noSm%{b#U~2FHM3j;AfizA&`jQ+ILwB>ix|hd zY|TqaR`{@Z8{&zvZDCa^Eq<;iv?)q8?FZzqMIwFPBxV3MerZ#qjI!#bb>=Ggc3t3k zUJ{G)wMLdOZyc0<7*PIN38INcN@E@qvhDsS;4)p|n{H?wuy$mK*XZ2@UPbd>KvC2g7mXqL+d|dI0Fv4 zPe|6*y#?>YW@fb;gkieszC3*(L6XhKH{FJ^*K5xcfu_(8O{1Q4$6#pvapA~xCmzp@ z>r{zp#(s7?D45jR1q1(ESUr=7L~Re3{vAO?J+sRFV=Jx)jrtY-jiP73Pw+nUw=UB4 zt@tOkVIyBHTH2D*NFZb%+;C%DtfP;t&V`=P`m*%{C?8ZjW+8NB3Xx}?GV#uLjw5TvWOZj^L2LQTt0$^+ zsVi011Ho&quH)@}i`}7{p3|*`zHXVqcNpIQlzi{M|7(i)=mx&s)q3_S2d_s2Z06lQ znUCQ5;pGBbs29Pf_x;j4FSMV;6NNpr_f)Y)+RrY$OO8xoa{ta2;IA}#5|sZ3n0&_G z_h+}ho~gu1{cvZq|AjGc3&@q>Sk?FOkFlIwiAS*{nmKi@XhXok);?6y_dsxAX!s9)`0u+!r7$7h$Yt?5(hkXfuUwsa4dtYMys}K1mP7ji&fM)2 zY$WPT>k!E}Ni2_!XX#ExLqz9u*Pud;g$N&@QmBvx)~8kWuQ*nAf4WBPBmKO*oWJQ| zZp_dYv7fV5giU(Dtwcq(8s&Qz?8|4ywHiQLyN($1Ik-VY=K+TXS(5^GRj1X;-} zb~Ew-KlkB(S6|kUh>@q2gAsqVzAWp!?xSk|4a#v)4exDQ&`2XxhRl3Lg?zddCIf%r zKbmZm6>s75?eKt~G%XlQnOR!(&nEaIaS>Tb4#y89jJ9qbs$HW+p&XNzgt{&kJHGm? zK3@Kr(M18Q?R)3+>(C)ZL-Q1B#Hd^KK|AM!8Bv-BgmobV3a-JgkDfLIJ3VBEuYMFAx7wVfJzD;aM7>MLxUhB=8xD4)aTiM@lXkeQz;jWrG)~~`Ggl0g zd{}hIJzrIac|?1sWfFz6{d(N(wU1I)M>LLdYdN`q_mfvQo-ImAw)GWhgF_WXN^4@x zmV%UcYpxR=>Z9i&*7O5#=XZWdzTB$2> z#-?A?=0?kzPnO5_UdiFBWePT);%Ti)54s66yv37~&lr|4Bj9C#5fehF=J~r3PY5I?;Yx_D$-4YVP`9cO$CfR=a+$Vx;f@WkT+W z`(Ok#oW++gzyNv2X!NCR7rpyWpR1CdOSHIFwKq8fh7X^d0XjbxWqzq=|12EN0dfnF zHOfJIxD3y987TB&%zc~OvTE159d*66bz7$dy56V0(1XRC9$)9ltarGMag1cOp8XaW z4-;xwFtya1Ic3)2I5;m{f7wFHDz^073MhFRn6Hm-x5HAkdd?De^BBpFUVg3j~@V zmzr)8j#TWwH2{Jdbp9+blaS&RhBGa`J~*#M$?u_**%qUHM9wazTf8V17B|QJ_V7Xl zsVIUI13saLlm}K@GBo-V+H)FZbSN$}2gOJWH|{=ge)y^uX9LK@z(@oF0* z?;k%6ALlRt8dLlk1YJj^;GYjZpy{{fVW+(dlU$t$^GFFQyE;KCe^A$*yQUN?qW;eI zRy%W++2cr_2(9n6MnfJDV$^Ngm>_a0yY`#SC^*Q6E7!vtN@e>(X78TxUuCMf&QeJT zY$uB3x6FH(h2A(ueuL^_9f#uC7lmAMn$VNT5N%#Gq12t-J|ShXJ2Ev;jERs>54LDspsW?YNSwWGUWF3F|zQ6@SN!M>hxlzY?o3 zU<0bNDf-P=?GTT8bLFT1QbKeB@LXlMFrE{?xwnM@FHi-lZSo8aa?OFox&0jb&w6Q# zPMX7RD5IzFhYugkn|NE1yx8{=zRjVOmiCB$C7`AK71_hZaPr40wN>bsZ2&gK@z5B7 z(;;5G-~(3~T=-0NkNQG=BAkE1gUD#D(ge-=l__5(24H**S7gd99ZRuyNbkLMgOOjS zKMr&3nBqy#f1$|F1PL_HxYyY`tGBX6bnPe-oyyenOB%e@a|a{))+cfqmLH)@*Zm_ z%09~HM0vyxvTknT-i0yd8TjH(*$p8eaM1OJ zNJ6G_*2WwO+f;!n9pJCk*JkLHV*j`SWclL@E(3@3t6?D>% z=*6a5=-8G$H^DdDTJ$u--dQt!SS^%yl753QJ=%S@v1p%bAIl}+c)`{1?K%)jyANk8 z1jbh&D&v(O$_{!)TP|6($!snV<`!hXyAZo*GiKb(|H(R$4rpulBmMBUIb471_k2an z`YinBE@n2%sY{c|5=qYCgg3u7&f2fEVx~m-aBFPSIB@LFv}Pc%(Nubp;brP34hr0+ z56{Io5ZXB#p7I#fWUTW?b)wto*QI9{4^)}(an!Z|5mq_f@`I|&yd-uom5uqCMso0` zF=0@J1vvoEqFgFqb*)@zq&%uA6p+X5VEBla8f$|q_g@0SX`BJTunb4%aQN5`19{<% z1sGVv zM^9zz+F@nY_392a>-N{gL=Cnjeh zuzT~-3r)w*(B`^S_wh~jSj&3b`E4}DCOtqj=2T14xY;zyae;UY15|4?YP`Vmh!G{1 zXsdNEO$cKQYqfx8!!h5SU&q=n+4$PcW!-=Ha`Es@b^XiW?0TD*zr%rL%9HN$3=)Bp zRd6S_>ZFmX{+GsB^=U|7A~NoJ2xZm(^Y7bnki;T{%4ApS85)BGMPR6+={u{!0^v`; zjc+?n?mL%U?vLzBrqM|-07;C%U>s*=PXF}}yo=X$HnTb5OSEEwI9-kzEm*OY7gpKF zp^4z*lhn%Fr1PKJrLkMw;(^uI<_A`%%eC?7UKf)eFBVUaw&OF^|LnMa@l7rh(0U-T z&<0C>WdLv*xH-MD#Xhop2G_^AM8rDNhTr|?)}Lvtkaq2t<-{yi(jw^xw^DtppOCj?99@~4j%YkvtKuy9QB$%>4AEsN$2On0w z9Z^o-Rv^w>##Gxp8HXKhRK?R=4pQLGBtKYP#e(D^WNaVD4+OMinQFtE^zG{fDQv-4AJtGiWNVMO!v4v>!Y^afw_aQy3x}-GL||4 zQ0<$=<<^9K|G933H3ki=Acq#Bm1FOfuW>A#FYe!_Kqrt3yINZ3u`6AijlpWaPYsVe zt0?|pfAU&6-7cMkKVsL6SydJKyGT-(yA2Fe-9%GCZ&#%9PW)qPf4|I*>QDS8d`}MW zy)P3JRASSiJoQqVLo_kpDm_9+UvLNimmQ<4jG#*V>Ya6ckW=~?nNV+Mr|p^3(0z6@ z?EWWo0I`p2j+;7DZc#=YsR*NpK&04O9>cerWo0YfW$T*K~0*hO5S? zZSV8bpyqr=0teV}ZrZ2kH~c>FrV zcynGKUotpujo#f44>eNXF^iGxnCOETC#FGwN`#Y!Pzyml{hW<$05a;IsCcn`OsY7W zO^&Vqt9_H?1yVTOt>7glHZG9mMO$2gHcQTw@okRyRsY7Ll`9PxZ6`yIqY9{UX%4h*?xR5+}nv_ z-rC$~bLn(Jn->exRt=*6f=uwxATx(twB|LH#_;ozH{hDm=hL>6z~|zi#JY*D%~Mx7 zLJuoZWRuLu*EX-i+nc;v8OjjC>WKduBlw*X9tQZPJ8<`;y7 zl(y)ouf@IZKQ%=mFXn%$zyUlm3G)u*SAt0Q-8nrwgv*gT?vX$idRo3}PNkDbG`|oH zWCD7z}HB6?%#N)P0ee%zQ#w5W46GO}+d zj^?J_NBmb11TFwCUbyn&*#LBr>GMp4X|TPjr)qSQj+TTJ@HQ_?_gy9wn6a^U_b1g( z>&ZIbZr9|Ot7wE^amx1qTrY8<^>BH`xf=~coJK~Ca zWX;dn|nWG*>F98>RfiQ5w3vv zRNQg(8mV&NI@-G8`pQ)?w(NFd5CqWDLrWQFqmbxgR$|k#dkGl1K*Z*;DCncA`-K0~ z#{B1SwZeG#>45xkjIO6rGQDVfBgj3f`g$kT*6w&H`{Mr1B_e{ZV$oQKPpg$^$@}ST z=K`kG@saCU1AnB0fVe85Ci0x{JmJHHMrAN(vpkB)t4DVMgkuAVv*-M)NY+r6P3M z>b)W7WV(ivD@N1HkIaVt4N*fQ;&-Q(JoD%Velv%ffr)owlAFz*ob-2i%uZCgwr}P+ zB7UsGC!!uV?6n`=4VD({bJmFm7AkL-QhzBK%w6}|;Y8JZ5kuuK`@vJOSX9twXG<6t zw*IF@}q9XFasp)fgjzQBm z#_NDn^NY(9KY6sVGgw~ibwRQ}3jbf|%}np;w@A9c)42G$X3KW<6D3?wxb*wV=xh2C zOe?^Pm)gHy`9l8WQLVkkc>yn2?AF}1!9&Gf&XT-H29rN%7AM1%U{nd3vwd2 z_$>%tR~KczkCZDf^#6QL4WB7Lq4cl0F+9eNk6J@3X@aME0G_`tG^1!aG$}x%W*;Y2O7acGU*KFSZ!P zs^g?FjUAKOtFm>7c97n@U?*R=9-#aadK_hItlkfw5?Qp0f+Y}GprJ9zCjrihCOn*e z_Zi_I^J8J=ocfvn1~(%Ph_`Em3RA$iaCaY8+M26UGyh}q*k0H0)_14G%nx@KA3I{b zKo52L;z+XJ=&0s=LDqcSta18f^AB1YkqUE}Z$o-2D#Iw}LY;O7dhHb5EJy-G^;FE; z^VyWof~JM&Fd!M5KsS>*uJE@J2Enf+RP(LV3qr(bPc)}6pS}BkSSTH*gh(??AQ<-y zc_WoE4miqn49WBlYP$5@^$Hl*eQ=LB(we>^Z`|$^!Y&X5?iuTuqN>?8L5ZtEj)f9= zOIwu11&GgWEUwoxnAy#Sw-e^o1~Dvfxa{HmaQ!v)!nim}P7j$KMwj9F{;B^&;IX)U z;=(zL;9l`v^6xP*@tyqufr@)?Jn>rLnm!Kv&QC}*O$bdoV$_)|$1{iF#`h5fbWI4w z{c7oHz<)8CMiA!*BpE~5j&fkCE{|pNVW302zK9)?e3wI4c;~xlq6@FdQ4ATcaH}~G8fWyhK;e~Nd z1-vy6*MYkID7$bbQeO-&eA|a6ne>?7@#0S^Tiq>kP1~UHGm5*3!Nj&`S&}5%U4h}w zoak)TQiS24_w(ZBD7gHEI-*c@_rNn?{ZMeKp5i8xe+@5jNqhFvJW2QBmP_~YcE=^f zALA5dpO_nvDJ!GkGV9-t&vt&oEhsNwTs1u0Vf zWVroY-Ttv@fUO%ZdJfI8N0j8Pc^c$cS;icB84stvZgUkU_0uJS_vZR;tY>z|0Qrx& zEEdH+X1POw(z}^%V-|rXQ}HTe!=tfCzCuNr?$&@I%E}o3I4vpxLAF14aASDw?z1i+*1v}PEtD5~(SI&0YSrQ)Yt2M4Zw(Ys0YE@4j$HP>}|*ui$+8jP*Ia6j>KXvH1< zg<@w*pFI}|BFTHzCI&v$(D#fqJG<%%4+G0l*;`}y&-l=ve3d38?R#RBeej#dFpWpP zr|%Jrkq?19nE+UMi)qqyTeU*H%#q5}^P-0N_$zYjm_@{Q_UhO7;P%B`j9|AEom%75 zAeH173}eU7Z2C-v?xhov{tf@*dQ5@(fDld#_a#=D1J^$%VFag+a&Bi`Wde6X46N_n zjX00&t`dTTo|CJMPO34J3Z_jOwjv8PSzLmXDiHVf+~kLdUk`8A&fRjn3%ym7Qb5uBw0Xp++d$DLzr#9*!PRzzdCeO)fR}Wt;E?9h2nW9Wzd&O1d&m|Vfu{;5HnxEi^;L|mU=}LC{fE|@qko{^AtqQ2D ziUVF1i}EJ1@%RT=1{d}F-M%aSod?G1O@To(MV$>mxxEXTraxX!3rda89ZDiL9LQwMITk(p_6mtTA+& zqH^4+?y$2TN#yyp{uTe6%^7UJWJR8bEANeDLM@~1exlGbR|zche5p_K;KzEa8%$qg0ir?TsuAW{~}Fvtr&=CED^Nz~8^8Ct3;IMu9|=}O7E@u9}X z@>+g<{}p8z1N>|4c2WOwGmD7+k|xdE-sw-IsY|@iY!=$&_qbadotzy{G%l^~Lb%k0w}ZCK%3q0hm24f!EF`>!z(Pm+>MbkgY0Uvp|zt?+!<~Ht;%xzti@O zWb{f13R^x7^qKk?VZ`aWM`uegcYv^1LHG{6p9fQ9)nE*1Zs*?hL=utrBoxXsCLn+v zoC6v{_Ffyou^!8M@%k}?k>*PPGn)YWzwpnf3<7l(aHe6nGBkp$TS11guUpB^GZj}> zW`n5PGmgDCpITxMIgdeN&wFRlmI23Av#2Jd$UdVj_E!{PN|Spw_+fH5pc8R*?tJxUaKHJLQjNF&0(r>eFywU}BakuQ)pcMpm|8_w(aZngTNx&N77pd&)c_7{FpN2 z=9wbr&pKnW%O_SyWq+=6lF~2?DWw1z774I2@=s)L1^PftEpn zC4ahW%RPA`!+yn6t`G))bhDS$h9ZfIrR>an@4955#Fs*WdXtRD{CvExyP{e5$LFBz zWfzT}AP=+KeW`qf9(dRv-ztiJ-Y8Bs)q(C!Gnn#HXl%W(W{H&C`Zl4Lpie`P@o|msJ7z?hG>Sku z+P^Lz==}{gL_9|3rII?qGT9wI8h@{R!BfMX;7zULZ}laMs;^S@_esZ@lY71$UNf#e zAUCBkfH2Q{{g@%nbX^;=4y@mnEKT#iw^v6{L_(+rIhCghi2*7++;gl#IJ=mTYTo~L+|zviSDul`oZ ztXj5M$#wWO$m^>Zs96p`^Ryg|miFkSRH4nwMO-YlJ^GP1ZiU-DAn-Y1w$#@O?H+XRYxcuZT0%4wOT0}wOeQ-> zy2a!GIj4FTeL)1J1fv3}+TBS6AIe7n=|6oilYmALsGEKfAi~J`I$W>pXQg`z6PRlI zg;BE!si7wpo2<)^JtxO`-;)k)-B~3Eh>iyqY_(zMt;2qjkJC!x>%d292lOZ6h)?3y zbV*Pix9#6bQEmZ|*u*VM`+Z(+W?Sx`O|FOlb%znkGrvjgnp~K8ylCw7M( zdC^X%7$}o4*8_3H)#pZo2~YRz1fM%rhGxwBW2|f6kp+CPm&Yc6tb88 zw6*`kXjgZ{jAF!t;uMvj%l9hTjlc*gXE7v7B1#XHU}JDGDw}5aZ8Px%vbhPNy|3=AeWktw$T5ihStSTJ*j6hfT z+Utp$P_r}N(TXs!2N%SVub5Tt=!OvIDc}8wB;{q=D2{JuB}&rMw(&=~q`RItRx)k= z%_v8RjArkaZz0UgVx7mX8sIlg%!S|}Ri*>hd2)=_<2R}xLC_Kt)`tKIWoFUaN52J= zbYU9wxWH6?eFVafT<)wwT<)XN@dW$2R{R8YW&31U+~5nTJuu#MK%rMRh0`j5o zm->F?O$YLTFs$l8mSq?tI2!+CDuHduC?h*=oc)SB43lD!ReQ7i*2q-hh8NZBa1pNuKMB}p06eq_h;_NgvBbevPWRhHzQo2zp zG(v?A4&av~ym%oLao4M>agqVcA2=4!9=e~M`~rlQ0lhr*;9?+j)iZ-Ci}j69M|SltZV}Jq5=~XCWu7Z{6NGFXLDEF#pyS z>CzE^FQ0KIx|TAe6Q=mz7Q!r+2`5Z)!|iF+^)8C z9E)WG7Dg)8!k10TxK9R`-PJGo>s)$9K+i~?_kZvr;BXk`7gy}OC!w_S{gDgi?ohpw z_bh7+vv<>4>P)0&zG;ofYgb+InR#5}Nkkp@_qP%7eX3NZ4I%k&f8|hD@d)|lI5Vci z-HTOCrCE-k{bBV?M%OB3fxV+pc9JkR$@mq)uukSnP=J?~!jk5m_=dKVw&sD(0K!8A z?9r#P+aHY84;=|W30Qd}cYOUrrxpGB7FX=^AAf}^7D(+^b~NWEP6vEM#A1kqKpP&f z9Y)bRSXeXO@w4Esft;X!bxAZ0VEwioQ?#Pf%K2`7&TkH0SuU`v zBcO9$eIPQ{Pa%s+3P=)@kr)u(q%u?_(MV)V>zGLwQz2tqCQ-hLY6 zMoFeej(>4#z!&|9G-D!YMU-4VPW8G6$h_u{cu&1Y9Zd2=tf@nooDjk$QOsX-X>Mgp zUyGTuxF)*TB8vY3C@pd6C2fyrKoYn*?`jaup8cUOu{=ICNis72XI6}>>THG_>F_FV zz~)~(ZV(j#_>fNaNvTWp6At#|mxvdA;0bR6{J}{8;9TdI`>S8(jh1kV_&c~ zeA1Q=21HWJ!5g6H+tQ`~$UgXa=2L&gVYmDvSjCDkiy5I-vcor5@ly=JSa;WPn%suC zeFwh$S^XZ|HUCfpm!!TdvIJN7@>cH)=w7(`JUrDZ-ZfAIMvVRM7>mf+qf|;0l|pua zW`0I9?8BgO*j$%;vqVX+Gp(2FoN@&t^WKMDy$c%3dL(9vuK0RA6pFs}a*VZp5XjFK zBRG}(Pk^vvir}^ucPg*~nmdkZ&50snu^!B0Z~ThsZ-LgUKSP+u;{XWzLDqpHkwNa- zbX5jnZr5Z<8mJvQz*?c}x>)WhF-{b{>uc!{zQRdycQ;@xo=6Ye#wKy$!-U@y4#RhNWsB`mnhRi|aQ80)b4M7nPdo5Y^+$gb1d{}gsn_ zCSr3ie84^DY)FJ|AO+&A&gn~|+(&fQ`G-Ksv}kp}=6&GP0^K>xvr_z9I)~$4wSWnu zmdvy>Hm4h5<7q5dGPydt*3H-QcdXZD@^#=yePjj@oVVeGT~LR{W>5(@UUX)X$%7I& z)JNZn0oLmHHj|e2(}3^p-hb9V-+-hgBW2Q6FMw z2`Zy>B$s`KswAx`s7yHNvJCvb5V`92cNo?BPYFaV*u)!v4(t<~Fvqlxn?~=KL& z-TR^~(TqxVcBDCKit08z_a|aLLo1^pB6rF z&(r>9mCf+{_Exk$0xkO3bWxiw^@~BDzhosnK#C(_x{dC|S-M))?9OW}1>U=YAXG^1 z`CHmN#om3@u(f(LvQtm4Q24=0TE&s4B?Uy~gWrx>MT#mN+eBSv?;g!1p_mlQ8(s12rm*E)XID(bB;S1wf&zV+5^y0p@ zUX#P+ZA57_mFt|4(0u?`QD;XdKVThfnArQfF&5) z96?3<8s~E%!A4nXD&|U5I+NGtAc;(~Oy()|Xvn)0JR$bKufGtYqdz*_3O| zxwsrm<22Y}L+fGjbI*0y#$9y4;d|xxCA~e^PGam4v=k!-PpyytDGOxKrco1zzbHehf)d}H&INfH>0O{I3u(Ql3Z6Qzr|Oh`q)^Gosjx<@b^HpW zUX&B}!Iy`;6@V=0J|103E&NcOUJqzRHQZX_+r()><+bxLvew!OZmxO&19d!tQ;nz% zJYpsh@6EX@79$O^q`8rXD6N;{kc89V@QAI9;Uc&y|RA zenAl@0N#fI9NfRsyx5%+!be%yROz6K;Pyh77M8HHMk`Z^zGQuvj>vNEh*A2el;kLp z^Kvo|jrWEx5&v)ZAunYS(Doj1ye9U2HS0BVh2!ceJ8Bub#mBH^_ zM0{71yhZ+Kk;Tk#1Tw5MX0*4B5?WhhfI=m@>{wphCQ-SStmEL`kp;j5#liy-KS{KY zSTmXv&zc6QmVtux^L9TMIHdv9ZKTnk`I_0f=+N9vp;N%j44}=>2VUgAxtO(j3#6)@ z>UgG?DO@90U=etrrnxU!eBGs!W!1&@FspOXPyImt`0FV~4`+(o(3RbrTU0~W?5jQqM);J)kXO`1D)GVRJ7bk&@GvO zum~k--+RBV_83X~gxE4VY%bI430}a?tNf?A=i!aWZ+n6@a|BtFGqS~5NAPSl#14-1 zX6uIz%TO5ms#j0|3>``&DNbXBcBrj7NhpEG5|htC2UDfMo2`#Cyj3g@rB=qCRF8pa(Cr> z7nV3%O2-KhMDNe@#{P07EHSsVzM$wnCh-0-V!4MC6v|WjS$77{#Pc(p#roZZb)%J( z>H}fJXWB2YoLnzJ^Bk}Qb&C#%0h zBqloMozCKxkFRn2+h()49@2%a?OQF3gK>2Aey^*dTq4o-8VfOt-F=R^E5&nE@0h)4 zmWq1QO4<7}CTlWKFwfr@TI$0MfC@X)rB#GW5g@gm#aRQ%!w>#+q`h-#xa%RiMCixD zHLt+o95)iq^?aWaQwbV1kn-3W0wJL+X-5WZA&(noV){Ypa!J-pFQO6Nzi`3&k5UxtB1}Z-?W^{;aJipnKQ7_3uK=LJB&ks7m~D!2IY9FP|YotPoIJ7=VnLb z@eZ8zTO3Uy%o7<>^F=!a$xse+MG5$^~ady;vW)e<~f%H=@hrr^j z=7y3B0+~$%ym5Jv?(zughO9fj@aXJ(a8-23YW7I0R*I&qYK+5Kt0~o*U#Kn7jW{@u z>y~^4(qOA#u0)XW8ATdjIzH4Ci;=y+9YlJ=%0^)FD-w`D8!l#UEzfUWw|9yOvJ&~H z_b`VXUW3yPdGSjFUnkYnLVfCirgXR69!<&6@RP~c`PS6SUA=9u90P<-uc6yBIZ9M# zwh(tlapUeslt=D6U>v&v=l^K>2FEzNC*0lGHaAXVn~jYoX_CffV{3!9vDwD9Z8dI; z#E58-~;3=RMzKzdOyz#W`u-{bYui&zvV8*O9O?S(fbTWiRU`;-v$nQZlRn@z>_l)qtQR(!9 zK$r4fO@p!j(QqOKd0z!5T(q4gR^}weQJ>1MsUj%#G4qgSVJ0yL7YwC)IAEhg3*rJ% za$NI1VN3u5FfMkZLae|T6W~dt2{4b|!US6BDLkVo{Qv%{pAW!;T2=xJeg0c1Kvx5$3vf)-?ylnJjW%7Cs$_mgf{uT7ou3je**GTihKh}t(l}-o^m{Y>^T~T&{ zz&6q^eryxKDXIHf8pWy5iu4CO?wHI4LuOeCUQ+HX{qVDD`&hu@%gmJ7I3+j-d$LvFSdK9hj4(wicbF?yU zz(IA64Np3!C2j}YE$3bdcV~5u@xlTEYv|VuvQU;sVlxWsqP- z2Zk&v0F)_g!vXZ=B&3#UCdoTR67ytFr)_rd>2+=)i$9$LKeXs$Bh4S1Ai`Nm2+pC| zm?1=iiEBm75t3ET*+w)<-AzRT?iRY&E5U|Ep2D0A-UO;J_Do492H8AY7Diy^c34%| zX(FzS@6)5YKrU10hg<8NZk*mZ5F+W%@`Bbfk@YhU|xdja~t?oyeTlR0I z%0;)o9h$#HK(no4C2v`~h&eNM*S>;EaMtr0Ce9qrPF&5s*R3yKxq%G9!;URJ1ax3T zQ932+$R&g?lCGsBrN#rK>?4M7j4d}>+)Xf@mZxUR(8j^sqR_zd4!g1pdh5Qi79%VB zpA{BG8my^hA*reewfRo;G?jB_U^}}*bHw0hJr$J?92SU!mzOM2yd&d*SdH>eA$5Bm7B@Jnz^C{HJ+zu)xh2aeLvhQ`|~w@hMw=q;l4}nRo0jLwXmB#IAv|2h7LB zac*W1I*G?_^5Sxaec>U5B|Zq0#Nepze;rZat&fn);-|pz3mF`M_^bX<>{v5FuQx@i zm?)2yVkb;+6fn&|jY5t6B_1s+mo5Vs$c+0wffn3{hJ~F;L{!L-lol6DuQ812!K)YY zp&x|@#sG#e*vllzt97udp$@&ocN)cnliD${S4`Otw`v+09;Pn?^GzywpjiaZeeT0_ z-X{e&?`)ixY}enPD1#u`g8IDt$QF)j!Dca-w|bzWhN0nP%0#AJuR7Ww8+t zYaCT}k)kt#>1q{EVjT(Ac4DTlZA>*SyPnef9>) zSN0C7$xspSBs~U8XUIoMvZs*frjQ0OaWA)73Rhb+7^{zeAQ)03cS?w>Po+^IH5F6aui={e}g)_pyp|^_1+a!VevVd{ouXF_{D*4I%g@ zA2Ic0sg(49nA`B4*y;hw@SvPJ7;oZ%`Wxt^IRnG$AMTZQLiLZUdKK+a_S#KkH(#va z+*d}Dqem6(zWQ1!Gnqk$tp7wlxp4fk2!z`Uo}C&%Z6W(e<%c8r6joiPfcABo{~Fi( z8VMnr=I;sCh9AADSg>;8>AVMC^@SP%Tfv9$-=QM_RT_gIEic%(z)!X?^4Touqn7 z68X*{l2`trk#6Ax4!?B$bN+uNWwBUvx+e2>nED>iEAD!sf1UI0crx(k^21yADgGa8 z1$4$cIlCSSMALzly=j7&u@G(-gKB1Osz|1N%c2!zHvcA&awCC!(7cu;4bT&7vdhtGV2vIiH@v`#?z4?o($ zAInqbK60cr!cds$NTe^8YcX%>81@y2F8`bF&3PJ5OkDjIaq+d_Z1SW~oH7mWuY>{X z+qq$n&zZP%k_b&wNnDn1^dq78|U zZwfn+j|}xq_etcZK=l!<;2_CO1SLDPBgW;(jOofJWf=eE=*&R%=^wj4PjpR2S){)U z)BmJA@FFf^Hz+iS=#|mGqL1Bc#G2qF1d@=^260t^^Voj|P`25gF_d>bhE?Q!B>2s& zvFj_GXqJ}bmF8#eN0W4bZ;<||$%=-Z*>k{0RrVbjE+nbx1@SIG=V^(PVI@f)>)?D^Z@3Uz80UfwO9l5k$kZv1KBo zV`c?}5GVo29Qi?jBa9kQY5@pY*2nGjHDkdVrXQj4@MCwieO-S2Uw5PfMQHC83K7w? zl@q0{6})>KjwBq<)8hF7meJlmJWEe&Any5K)`<)nkR5c=Q+smcZ$M{*s~I)JOiKSR z#x7j|5elDnE8f>qoMM{2&1Q_WRB)P5X=b=}1A{%{r19^PYW%4JpITcAW`b%f&u9=y zqdTibBVD&Et4#k)X<1(u4b$<&#WDpD2gb(4n2@zg$FMs&r`&6g7_V0tv`yTXNJ?M* zop|W6PP)8U^bII{MR+AwbK}b8+y8vy9MM;e+JhAmQXHxWoNLky!-k?c5>6RD6z6I2 zh!3-ck)+h%X}g~cMLLp73;;!Z#x1!(V6qRvl~BIVa?VHt2I&XGi6s~3y$rR zo7Ky_;boO*f%9LkGSWiuuVQ;qO6`ln$RrX!<5-~KAst*Jm2#^kx+`#iC@jgrW-1Kz zUU1O$L+Ub)rWJF+a#<`t9-$q0RP-rJXDOK;Ezrd#|Fcb1 zb-Rjlk#y6a7W7KilWF}GI4<~d=O;#Z{xxv87l1FIa~LL!YVKm`P#TwB2X~NI#sDxP z#I1>lHqO?u8t5X+8BqXI+@vEn0i%Hw4_c|Wm*=dZRJjb-?p&l0q8_r=Z>bCso3S{f zY_BmLxheGsxNj7lF4$|y1p3jTAAG2A)!^ws9_aDcYM}Jb3xj8oOUE~GG`#||A-jHY ziO_tZDg|(*jVqar*w1fA^>M2;up{%78vJJg(z_2^q(%drR!bmR9F@;KLV|N6J*E{_ zjt*$WQq9Gk4pcuUHl_%uSue{;((WqV>w>3(IGMaWv<@1E*`;q+(9J)&iaVOZA;I0$ z{-ac`4N)#t^M@CwfL}eLOe*h!WV0Xb9=%IRITI7J*f;rbn6D)W1w?nOi7g!32Juc{ zjtoU8DI#ujfFB$rAgm>Kk&|L-$-u% zI*HBlS??v>^vz~{N8!JGhCeC!j0Xq9OQ;9rUW1jDOZmfW9uSE`i?TIbz|sT^vxNEjzI+2-sHL-Hm}6mA1>IB za!-QpWH+<%S~^CJtGqrNAjBm8%dnQ@{R`s}gV()@xt4xh7%lM^^DN9-u4Q(S zwa18bB_GqA#>lAu-(NYtSvK++iaik{SM4B;{Dr5#s7f4c&AVBA(Lt(Yuy7$h(tuo% z;_19wQ=C@;BDLARJgQv|iu~0Ti)XW0eHLg1Pr^YfOstvhce61W41@n_NKW-n%sYtf z93kzMql-@hv{eaB5-UXppw3||1B=~;na`Cfgsj}75n#=Ie%eF#+(%tQF^oDMQ8Kz= zT#ZfyoV=5%tgO;~=QGeNla){(N1%~l&H$joxg|cw$rCOK3;}-Fzged%_)}@j^lWte zj^6*0I^sgUwP_srcDx5^r(aDTrM+ zx#xVOr$U!2&l3zMktm4aq7)V#1k<-h2&m)+IRE*~i7gb5%v!O@hNv_n9T^#tDi6>q zE?<;w=4O+o7xu|OaX5H(WLk^=Rm`5e@)JKlpRG_x`gkww1%8}*=|j4g4;VBk)5hc_ z{?$N~siB>O*j1_}Alc8)$7j1-C9p&L9lmqlQtDvY?sv_=?}bpkOHBhg8!V3U8A|2_ zj$jj2ct{}`6J&aN0b4($_{zV+>s>W~r5&;nq#7Dj{Tlax@%hJ?btu-NdscELeu{n3 z8Iv7%Te?A#4oU-Qv*81OBW0G>kIGrU68g8_L~A-A=2>i+KO`TBl%=3MuEc^(CQD>e zYI+UN<-6G?@;Kl+H9Ha{oMkUuw`qB0XkpwxYsr6L#*=r>h>812_#Si@jwq=#s#8{o zFfw*bg~gKy9I)JP#WyKcZh|(LtKKwp5soeIovTI1_JlVtL3YUByu3F9;mvg8q=21P zm1Ca}Me4!Wxprhcwd$#72EkjEpS$ie=#bdewui-^^k4UdAU2%VNpaU7nZH9}TV+WwIrKHEutl_syH$rl;a^FV(qo8W0o0bR9Q5LjF3Q4&X5q zhjJwo-*gz8@g6o9Kcm)<{7BN(w%A0{=Ynbi86XPHq5Nq9Y2GLUK(Bo)#(Tn*OXT)L zj4NZ>im{He|D0t&So6fdOg6GXt$VnW<$;#tf;axBpi76SoKXHn*sZzFZ+AefQwX0X zg1tjBJ?Q{mx-!1vipW|mOd0kn3-mA5b+{f~a86v639N+LKdBn@YZ8p>Dmp80ErwsxLSEI4#XjN>#QxPIPdZX$$|2DQS9y$eA8*LB$IOoRtv@-+oscY z9mQhYT=)4{fi2JIpf!?jtQ1{P>6rJC`cYD6_D?h`Vp{@ zCO1xk3ebC#YVvqbK#Q@&B`4<}*9&wT1atV2;TqBbj|1X`7bs6`JXO*k(8U^tezCg| zjX3}YicV?dy*wozS_-(b>uI1lsl5^c8YWF;O@)M{0whMP`69HT`GPZOK>jlGK3|gK(w@aV()rX;397-U01v${Um3A zQk-DooZtgiKEknpBbY{M9@Vhm)-l>CZuR49pwxvp=qjkglpZe)T@MxB0p(1Jv=dL- zO&26Unv}1VQ{@d4nvSt^2#oZ&^S34 z5B=t2S*~2vOQ!O9G3G&H5y4bxu*CGo8FAnJ-ibRj0nWuIK65F$j8DDqnCm;k9NYDi9WKUmgy!ozjIybN%)6gd@Q5$rLK>EhSOV0g zOg+%Fhw7wD&Ih9%yAs!N8%Ner%tY7I&Aqmxqf2L&_|=?5#6GecAzt*8qpqg30-(9O z8TCZuvQ&UGI+4W^Kvd=K8NSLh17#hyD+cm~?m%1;W{Z;Z@=Y(Xm8k(3J&Nm=_cOJy zd^vxB3ab&xjZLea%WDeRAZJSQ;Y6>oh0;+m^X19lc;`CK@Y6?BXm?#zeKpWEIH=|!~)r#87!Y~W2XaE&d>iyNc zPW(Jal|NE1)axc<@!#^*geh8>`RR}W!CP8(aA+TC0CNTx!K?K$bYD_}rNBFutCSA; z8Z~c{@sSTY4C@HBCTZqxA4z}Z>y+t&D&ZTf^jx52Ju5>44uimkMGk_ooqfP z1{F_F*_j|IxCz*4+5%RrsjozLh7gEC16I(~YDeb4nmt$9(}S6DH9T%EfPCI;T8iq@ z9f{5&6BlVR(L3bl(C?r3cF}qO^5Q-~yo<)P&_7;%*4`dEk!&`Y(!=d&S=&a*bPR(* zas}-rUI1UTB9jrwdyWKH8s;Js9SX@v{n;+9_Io98K|2W&xw;z^n)jEV1Gv$btb389 z;#4}g0`RBtkak6c7D6@Na!x)7)Vf{mrqcy9s%WTqPDkJXhn$ux6BkNR4(xM!)|J~% zHV`F}9!1K-AR*-Kyb2%~EXy1AkMNwOj3c*FAOT^saQaVbRZLj-0sx^YU{j6D`okS^ zlEySixI5f}pNvdaf({IR%)w_|iMfSvL9}v6;Yz{%{joa|dp|jpQaXwI!)$hzBifd} zMsCR+vCw(ewte}^r|t1lx1X-GHZG=d>LPc}IfPfG!v1%f`PYjLDyal0U9@*I35X*6 zfxTmQVGZUPF`)4*Jo54}Iiu5WybafTzl8Fgw0v-E{;y`O&^~*N*(!ocav}#1YTiug zrQ854Il7IGx>00d&#CE&!O{d;u*toXLgevnpV_uS&j1JQC zfNH_4LNvTFK1eKF#GEjGNIya`!X5}UQSKBl#P58wyc6&|;O9Vpq4qq2ZTeZU(mGjN zT5phaCJ5!8Q6mcH!arJyQM7(N4H1bljifY=`kpK zjB@6@4?(X@zXLv+Yx03xq17$xS+SOER~qAf-c}s1sSWdDD%$z=nBk*+js8sGuWO_q zNpTV3cE`2dH>=tcBMQX=-i&9%*h%EM+giD{H(=>|VMv3K|=psZUQC(a|C2!g6f$2+})rcO59%#1^so)l=-`~C?ndD?LLP_AG1WRa7 zlkb}0uZ6jlWp?I6h_KI%t#arkEUAf;;WrWa6RbH4`yB!hRw=i}IhUefeE z7&exncACv%O%2al7WA_dd;^%->*`>qcXnr3yAz=6ftyYFqmY3H#%eo4WH}P91jxql zp=VmskdknLGdl6dzooX;?d_`%w?UGpjQ|@=poHKBG&>j>6e~QH~a< z;ba89pRmvY!6wa&^`)`s0V#G5>+OO1HD_JpHcoW0-33hdkUsSLp2QpDzPpz~H^l{J zOKIfI(3Jm-rlc-l@+M}^Wv5fU*0J_#4Nx-aWzZAh>zal6_1tGKHx?10krt?mK&#Mv z%jH(4LEL#tdFvf~J0ROJWo8UX^7`s!B7A%m#Oi?Mm5*--+AL$$6> zzjaP-(yD)R5n?wIP_L;dwnh<7bS|{2ReVb>^O7AI=z!yqEkSYhg=)2aCLfn8R2CV| z{}Jo!;*;vMAa_MJzT|1(HSU3k^@FV6va^LNkIzKp%jC(jM)F4T4U=U$zx{C*K9Z^> zC3q4YIM;hC5^o@mMENp`8I;)_G!Uq^@ZI@Bb59_sp2WaA;PRy=XN>Wigk;UkR0%y1AYq^j+ zMnC!oI3QM>^%`KkCOmqwDHXfL-`H&EFDgt~JbYH-*!L%j78&XppB9n9 zfQ4ElYv+m-1jjFBGdqLeL2XC? z5$QwTiMrsVmkP)x1rDIP!k5_&pV>=4b%H3{ncahut!w5T<#BMDO)GJIrHBu9wqefL)#|r>e0Dz>T6HAV)$ZHX^Yw~Vr1zF z^e8jR;6a6RVngih*YUTcJJMjsTRDTdt?U`L53(^$v+X#rdj7`S_%c~!=b*H#jN3`7 z6a1bHe9-Y9W41jHQ$hTNb8W@;Z1=03d29qJkxm_Bvz|^DLF~Tcmw%Im2LlUC%{Rjt znZ=b}P4`$^{C+qrXbyA_*t-su?W59#kb_xVy5LQ|)Zk&mv!(*Tvkr(h7LEcg=l++B z1!qD-I8wI$eH~w~igMOW>1$+zHgp6(!-b?yBmPB+TsO&Zmu0Ws{nC==Y4orZh;(yU zRT^s;%XtpV=0YizHXBg{Fvi;jJ!S}L*Y(YKw-hhW z0Bg2~N0Y55TzVxU$q4ku;U6K(euRu2cZ|Oi}wUc&qitDz{oY~!2eORpGydXM^by00O-wsztAt@><3i*eGwWrry z`d1c<3JaNPPm(UBkg04bu#)$%b5ndt-|rFycvDK-^zbgeUU0FI!^~M8U!wDtY*JfsgB6fcIp&ylu-n#-o z8**=hkw4C1V5V+8K5!G9fe!*#GrB5q5OhfEx9zpVUo0KmTzJ5d&FJEe1GL=_wvK3@u5P`6N60c*w=U`13)`U zv?{cOYcxlM=JHeMhbq0|&MYDxlPN&Jr47BD@~ zTjS<>{#DhhrK%lxYoR5B5XvcKWwlKJde8Bm`@DwN0$u}NA6UqUqQ(4!Ttq)IAi;|T z%lQQr-z0op#Q#~K;?P8dHZ&^Tmkn)YXrslf@f;%9d3;G2sg_#5fXoZM`%xA2#Ja!s zwdHj_h6Y(q{j3&U`10d^Y`Ozu4K#2;kr$!3`Pa|0e(2Ay&q}luhBcmpyU$;Am%3w9 zPT{|N=~A`}9J?<;8zTNmDXSb@-Lpn1cOkJVuL29geX!uLnqYmo?uiKcZhUB#B!-x> z7puj)I;wLLnSczy2?nWC(IIN+b()$zoc|qp85;YF8Wydn2i}Gs)kOsNrMrx*!8Ch0 zdj4|i5TP#ykVEzuxqYH?n%$`zf6BvMOf`!_g4Pla&P(mgs{&$F)b z+P=BdhDbYX1;33i}AZkI2TMY^c3&5T-pq0WGgrJ?E z*qnnJei6a9qcFnLm1u`$5){A-xempkl1C3Xn!ss=N-?QR^^fGmo#FW1SGhQS-C!vw zAV6@EcaWA_RP-x^PP4&%xIG*i`E+;La!l&_(8S+%SO4d1cvY>>@AbhWw_+ z!c42K=f{r#!R+^C$zTxyOZ?r=V|GbZ{JzG9CUKJi z0}-Ra7{?g^qZRpLoc+#JPNEWdDdoa4sU4m@`X+_Mp#I5DFGa~eNga^r40;&G5d?K_ zQi)-GiVPI$L?FMM9Y4cjxjukM|J)nbl7j@8yLLzQ1O}xOmkNtaGhi6`CHX5(;`B%^ zL0m-+DTlTnXrzrYW|HA;VRQA6ZEwI)(7-o(47)>2v#pYXw~*LJ>NIYf*qEFx=(9(W zNq}HcTE>y%Hi?S=$>l3XHzGP8_I4vuNphC7i$n*t7+XGwBR_1z+VIt`Z^HN5!O*9> zW4KFbnz`a*sQuzHmQH@Y#xh{g9R@eI+-J6@+x(I@hoXbo=JYQn&TkbHwNA|4%)Bc+ zK$^0Eq7@7WQOO`AZc*SzKG|XeE@&<=Hv_cNSmCI`&caMeG*t$ zU3FPGHfLmJqxc+?>L&Lz-tn(Mbe)xBpFced9pqp|wl zEr!3a`b^K=9%DiEs6*cy>g9g%vM2Q7tS~?>@d5Q^jx5ZM5&FYxG4p`sB=c$n$g5`oE&+A+YDm8b`_AbrF~bV9ffGUR87pz(T<9f7hLeG zicppWA<Ss;ggKeWJF(l;geHsMB0hvg>_vnUWMXW#{q*#RfO z!p>;hz+TC??E@N8{**^BKR>@KF9M+bN1~nx)YC=O&h5ON_J4X%AIUcX`PR9DlADhz zy7xQ@seOnJf2SlqNx@BzCrGj=Yn@tVkLge8gxrXTzo@L(FAd$Da%%iD}YHS1Wx5$I;Y><>_y z1ridLe-p%^+(-SLo**1v0`U_hds;+qZ-Pm5=fl=9;b83#6~Q!~7-%%D_Fb{-HYJLd zWk+y8Al({E$=3{WpJR1(H#2xIHAsa-tL~&FT#3gt^`^a+@~0%3j&xA-@}iJrdZ1;8l^}Y;)^3+bTR$@Jg2ss59=79x~nw3+qd#zjjXhjTCY#9|nF8U;Tk& zmIAExsB=C8^kQ+(!%NV;l-VB>gDpNzLiW)|z5|=**~pISZD=hHqtQ{3H8_{Yc>o9n z9~yytA4yGA+7-kXnH5?O_b=39FD`#_Gk>fy!BYkHM2+|ew%e#Le&>_uhjXs_!eYr` zg%rAlw3JVh1Sk?dU2p3u18=Tq@Pp?NpWN9aX?!!D1ZLms;9UaG=Dyw}d5r{|`e`fh zaN%xIltjgKybg)+E^mroUftz1$Nd)UKpK^!uwNv3eY;W67#tcg;Hfc08@g=`FHysB zP+AAtE&#u{FNCc1v(CDV^`>W_0jBrKo-P|-jp9=Q)3Uiwn;e&25$*ABhfjQ_9MYfc zU>#JOfC#?Y+I0R~7t4qSM(ga#S5vxJ-Ld%FoADf4@}#{Dz_8DtxKFZNmuF~0(YPe> zO!)k&?(n&%Qlm8ypZX+ZNPs7}`sI)+?&$Y_aZavE^_LXi=_SKoXt07BL&J!hbT>!chO_qf5(NoNhp<7EqbmZ z5)*4RFkWOjf|~Qa0Cwuq_A|X5;hkMJ?Ll8+Hq?vw9Kjyb2#o9mKZSxHf@H}1`+|Bd z8a#;*EOvE?Bli;xLyNY_9@7p><&WORs#=!oBgO>1=82*+iUo8n;faVmwuAoe!P04m ziv}tfxF|JhHVFN*+8N+qQHiVmEc~@i=6Ng2>NLV=lS3K6@yo=AWG<)U?;U+Q;80m? zg#oeVxiX+JcfC#H_e6-qPTNldRYsp{Wk8=Y6bnf2B9ahS#{x=Gx;GdU%{ITI*C%H+ z`8K(Q7%me3XKsQ$Dr2ea$Q>=}eij=?xy*jz(sN;oMU@{BLT8kfs086F@jf*HWmCiX zP1pj192SDyhSp=>-hFi6XnzI%{5%qd-TMwg8=9aXoo0hBaiQPdW|zSHxBqzO=16`~ z92YoglpZkrml~Ug7I({U5Kh;?aF~xgQP_bjh%hUrqs|ju(~TyDd#Jsr(!@{#VHfTn zJahf`ynpb3FGDcg0?nT~71pIlMzKH4#n%u>P3WQn65FcpA%@IT|K!tjJ{r`sB9vZw zNNTr4g?S+OPK)PW^r-w`AVQO!vxTix3G2I^J}Ge&BB{+WlE=U}Fs(!9>*Z(!vJI74 zBj!z-ca41UL^k0d3C059mKnc_E0Vz-5f7z8I;gpblDvLYKQ#ty^$E}OA%&)HV}aT` zpivE>U8R5%Xe0PMviWs_u?Qu=DfHRn zZpTq~!t%XLE;P|v_ov0jfhj?k{0ZdW zRLqKvDCm9y$Ywc+h7shlf+Aq@^Q}xXuN-B~keN+27)Uk-F!9Y1F0nUM8F-hsQ6x^z z61V{1X?cErl)be)J+=wezxCgk_t9jzmt_3>B1r7%K7`bKu^u3G^6%P;f^G3UTffr2 zBU-T%2ai0$4*jJ}QL+ltQB}8Joz@;lYK}z(LanEns1R{J_jBxL8AK)|7!Tr*Jm{vv z*BK9E5r2ZLw!ki?8D9x|Npt-7lnyR(m3(o(pd1m0sAoBW_uOyqwnfPk>{6I{07+?? z4dhNMPNHEU_Om$#88sEHh;frOGM;+Pou~nuOzJw#4gIu=o&{onp4{=M>99C6-bH2e zGS@I+c%MzzNAMDY?o-u=6+lCjUpAuUBb)j8XNlZ(Fq~P?A3E^JZ!A*tG^kHK3fq4& zD#=9MA_bM1OUz=Y?U=m|@iQ(5l2_gySRP{Zb2ZK+i`75vR@%Bid_9l|A|M#&vxwKg zHI>q ze(hT%0!USme^w%jCYVPc`q@N7_IMEa&v##R!1!g_xV`I}C%^2RWJ+Qij$|K7k-KWq zT+kl#7#s9nh0mJV+~)HYq(47o(qgLp(<|0=kIbgRd*8;9_$?e-EYC2svl+MP)tQ*a zzB6ZCLd3womRyo@$EoyH_kxLiHZFe|d&g-VUOP#ti#H$Wry!IfEzzmNNpvXz@$yiU zC$?WQI-H1)LS2xR{G8@ii9eJ+(*bK7LPO!05eayv29F2R3K%nS8_P}rOgN;Y>|qVs zTxICyV5meq(=vPYucKX0n2BIo;eP~Td~~6;C}-Gt<-qn@B#Nd9v0;iXQqBm^*P5)&{bp!4=AY#S4?2j2jB2v>Rcx?lH0>yC&XI5ru0o<1Bs!R?7eyk+|)Q|yr3(PjbzCY*kROa z%s?ip<|?ie_qN+y00p?MGD3^m<{YrO31Ptoe-N-hQ8nL=kXfRY+v2l$x%z=3p)+GN zK-jK+T6S#@l%pQQiw}b*9lE0L#92+312$*ciu8?>YcgC=Cn&IddG9{G6n-5nEE3cg zq0};Zm_oicQl5YQTx_96?o-9}5xwq~++#;YA31#^Jlg1DwAVi=RvR zw$Mwl?79O-OQMQt(&W5w7kLI8fbGLARosYcI{C~QLPq)Uh{TA?WywM0gb$D>28?!N zyoht!n6>dUb#NJjzMCLOz@7r0+p~DpZx{LaP_Zyrrd4%_0p?LAm%)JCv~fQ)SybUt z6t%MR3vA!MqYLMOv^2uYi%*DK7*_*vK{LtN;)E&=Lk=t(GTp0tI3O}!%&LkH3EV_g z^LKKa#&j`=NY?EFt^-8rRHu~+nH<5!atYfnAd)fSCjp!+?@i{@^Ptefo<{DJ@68`8jA#?1$Ph3_SZ<5h&2t4%XZy(N?FZ>j6rwx~Ju^nA~a4nVt{Hb{MHw~pfu4fX{BhUdR*Z^xqFvG zk?qHAE2wFBAUjie0K?J2YDR6oS)!n(^xUDKHj8&Gr7^A|4Xxy{4!FXv)@(BZhaTxO z(OE$?tRo-Ut_YgW9fRPqE9?ovqcn6^i=@%Yt9&p6 zx0oyr-EdoCjy?7hBCu-f^?X!MU~GafLr#XBn3M)3$pobjMc-}#n)_ep!ez$a15M>| zw~90p80dQo0$i_Xa$3|B_u0yl{}@!=Q4fka#uBh;85TMbaN>gd;yv_DBV;17!ZMDW z7tf84#=pl5VVE^q97X<_E6!rqf6BS%D_QeLk$&w^vWexdTiUMp4GpFXbP`%8 zagKxX5;l9dI;BCfwa&r>$%LgY8R3X}W3Mqw@K=V)Myf=Aif@filV|o&-w|QD0w#za zre@Ng8KzGuA{y83CNWcao;p{>u%i&ibRhhHVb?+^@0@DaNmQTTBdUwt7PC9J&pff7XOA8j&H$}L?HLF(WA-Q z0mI=aG2ty$QtAm=MZ-xBx6h*MOrwz=uB;}p(0c*#M#+lLtNK>@ogp58K|Ic0EbP8l z@t>>*;vWXP-^Cv!J4ygt&?_Y53u`qIm>J z1Gq#aw=*M!73&>X5CPbLn(`NooIh>2Jr+v)gQ-vVKGDba^qg=0!*pCuoSr`R(d(Z4 zE`0Nkl_p}anY4e-MXiRB>V#hB&-TOm-aR|xBeJO0^cm$xovq474>h$J9{2J9UaA=w z#Yh52f%<;Iu8%rnj>~#9Q7*}L80EpgmAlsRuuh%dI9Jq9x@X?ptD}Xr7(dIJ?P5-H5>q}^Zn&Xj}5EOLdf9i~ow-7NR3qxX^L-N}!on4kt$ zMh7X8x5NI7ueA6#qP#-b_{ABk0HwGC-t-x?`Jf&t-@rV<=Ceeo%Dk4g*eT$e&Z)?d#(Q}%nz{bwgpzt?XadxIf8^{`o4_x>WZhO#OCCJfOp;$tXR0j}LB=A-U zE!)2}v;kKQG%KDbZJB4wi1v4<9b#g4$+{K1+uuB?pRIZ1pZJHwtjpVa@C*>HxUr$x zXZDkb5aAWD8I?xx=hP%Il#vv+fCfBFcm7d2lcG{vSds60`?YhVb**dP4fZMEuzL9D z?N=eW=2UNYceEhq*mC#3`&kP94HwceSR|!sw{%L9JQ#{77OxPD3;^cgBpLf*eFu>4X9r+7Ln+5j?+4RL|k!sxbhT z+Kq=<_;*vlU>SMt_`jgxMF1~0h!RPDWV^LNI`?pts~rsuA=D+44QPScXrdKX*e>c^ zK{m`F-hJW3gg=Y(5wXGGL&SJU=GWm)$6rpOB#Uq+JSO)!YgK^|9tC3ilDg+j{tY&- zY0}5Z7DKKt$qDnrushze_Q{9C@m7F9^;jZa%yoL>&I_v!Ww?t0Z>v;#waBc+qarpU z6bV+F8UhXxaSmKq=#n3a{hHH;0ld>&U!}Q!Hjiee%|39(o)Y%ku%@bBvjT|kD(3ET zFck16jVrSUng{^=_jmzqXB&29`Fp0*a=u}xwK^L|N zx_^&T%dI+54y%<=9Jv6B)$i6qL)dKzO$Xe)uZB5qI%N~GwUTztu43tlkjYuidU4_Y zG#!K6iX|;DrH5!VYP!G7u5|+5ARxY(B`lk>Ka<39MWTYU)XCmI?2|o8=>BY9gasJV zB{U8k1us#icOTNfDFA;0&o8?+e5rbwW!%o+3k_%6miWU&_}-$()`R3l!x9Q#t~`H~ z;(tW57KlzgM;{Bbl|}>1_uhl#yxq)mO1YABYVMyIUi~?&0)c=8dIEo2-FIU$PDq;0 zD~@QMNVic~{I0|K781ygsaGzNfD>9BTjd0TKz1P7@|x$wafZd<%j&fU?Ym#Cj1)~n z>ruZCwiQRu3i=Bc%X1r1>^>k7!Vqz{O0t<+|w!xVb<1V(gsC&(FV>2P@>p-evs4B{_&nB*7}EiWmrs;t091^ynf-^|NFTvSWq9&G zSPlSp-V{aAF`qxC6S@y;EcMPCi<+?#OqcP$DkJn4nJ05><`b6}>1Y5Apl550?Qzr2 zD6W*Rg6E@Um}e@5g$lv}^?DhK0Raj?fc>Z1IyDuHl>Prh(p4~2)ivF7FWucBA>G|b zcSwVDcZhVifFRv1-Q5k+NOvQsba&qGKJWJr_Bng@%&awQWuLPN(EU!Xw|^~V&7u15g&$Yl$E3)TmuqFUK6gQGUV1{4{n=w$%BV-k!mmdBnq z{SqJSqXGx960E8Ze2^ZVfe`07ml*1+h+0=@I7&t2{8y;k8<5$V z{DVu7PrH4Oa72y%Y--ry9{5`x_Z|6A=5;2UD6Jv(orD>;FXs+ZdijGfQtt^RLQn|L z5OgM{DZ7d*%D6YYn7fh6JIa9hqY5ZauWyAJtQC+W$s;57Y{4wBLuj)^dH&4_El?J3 z(85WZfh`y}NX~QpP0s5AVEgajnP=lNR?h0;1($=V(}J?8d7Pj{B&!%%?GEFo&e^~0 z)B*VD*>HJ3>_8@dTK8kC`+BwSRneMZuE=n|fC8L*+170n$CGWj&%0(!N}f(>j}3zo zdn3LmchZ^)N3F>7ZP}oFSUOC@v)(h7@VeYqvM_qTE}d+ArLMsiWe6fvR)njG1wYr* z{=O4W@!SskKE9Zg`)&ti$c7z0DB04%9IF#}xr>EoRR#6`!lpS*Y#D6?NlC!{Q5-R0 zFQGelcYyUTakYS0_r)QUakzdhvV6VvJ&reK|43zWd_1=2xOxSD9{wfgApc%gvChLa zoGYbmoWVB=^YY2gPpb_3-?I(+v%^}3@fR7s9Jlbc-7t@wcY}NJFMK=Q96qZ2o*?Zl z{^3@BphNnY=gD8i1T=j+Aehbctg31UpLjfqP@(T2Q;-8pwsO{mzzK4njUJ?TjUF@C z%kA~niT(Oc33p$U2tXk)8oU2cI4cFfO*U%%VZfcXy@~x=$qA6caa#-7PUHU=jq+in zNZNtg7oUR2%SpNpg-gkavnG1--&TN^V0+bokQUuB@M8HkpK9j)3SQ* z5bi1o?t9H;Z?jdy3D88a>FkE4@P1pXjJhsJ`j~wT*BTSuc|pQ9ug8{ef!o{e5=Hhy zxV$1zT}?yNL9&$uPJk~Y*Q*_Gxlrlc#xZUp;dHfT@{GWSTqJ6ui6?diFKBk-vG=n) zDCka~J%%woV~fjaz%b(-qUo*O{t7sL)`mA|ugy`>XjFRPKHdxKBXcXZLZPxCvDCA1 zNShfFb=z7)ql}CfEELNqu|*=y@HP~&{yu2#?_UmJ*190GU)ZEqcoT;AoS+k#lV$t` zYm)s)90VhvU6CI0m%Y?9t8!|dRhUlb?}>NK6!i{2NKo+5(!#lOxdWZky)bgvv?vHtxtc>Exd#9d0D6NJ?AL(z_2LtGVN(a2|0WqZRk|c<0Com%fmjD= z6&JXji-cLt`97@#H%)%J@b8`?-VqzJ=gZa4(&=jsNl;gb6FiN4=L?mD_a$=~(9TuZNb%?F<#$)k~}u zo^bS$ufCW6I1Fk^BguaJ^w9y(sfd)5VT#shhcO05CF%Xhetp=^$U{rTtXA82wdUSJ z?1Ods*Fe`k@oP}$>bn8t!50HCEh|izu%~`=N>D2>B;}wRS%wCDCB7Y06S~&XvNv5P zDF^Z7SD2z#&-~3N8v_nYGw^6KQc&?G)Ujs^Jd;-1I>dslx%h6FVOkrUtYc6*HFG~F2ef4?o$8OBa) z_WDaOl^@3iZIijxS8)Qo)}-V3^K@fxj{iXuKhKv+^51z6F3A!eUPygX!n2<_2Qepq z19D9P3U4r>ogM1D(lLD93_nfW6kev$#AINoJ`dxkEUC7JtFRfzwI18F#ej>tQtPwP zw0F8r_WoLi36|&aIs2i)n|HvRLx~J}c^?nmuUSqBmS*rfp^nP|v&xK>Ge4Td+il)7 zFpmTVVK0`7hgU7oGi8$rOa0LSLyqml5&EF<{txGz#eXSzmU{wDo1NxiFh=V;-_%qh z3*Da`Q+4TlZ565~H9h>mZ

)^>hCuSJFGNdaLq;dmMpK7_HM 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1b88e9d12c4ce96dd985e30ce6f4da9d7dcce399 GIT binary patch literal 31982 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 Oswy`nS?vFfr}`fZ$_``z literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..881267b320ce6aae112fb00f6b8492bf0c026dff GIT binary patch literal 23441 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 Vz, + pub cwd: Option, + pub no_update: bool, + pub force_update: bool, + pub dev: bool, + pub verbose: bool, +} + +impl Args { + pub fn parse() -> Self { + let mut args = Args { + dsh: std::env::var(dsh_core::ENV_BIN_OVERRIDE).ok().filter(|s| !s.is_empty()), + cwd: std::env::var(dsh_core::ENV_CWD_OVERRIDE) + .ok() + .filter(|s| !s.is_empty()) + .map(PathBuf::from), + no_update: std::env::var(ENV_NO_UPDATE) + .map(|v| matches!(v.to_ascii_lowercase().as_str(), "1" | "true" | "yes")) + .unwrap_or(false), + force_update: false, + dev: false, + verbose: false, + }; + let mut argv = std::env::args().skip(1); + while let Some(arg) = argv.next() { + match arg.as_str() { + "--dsh" => args.dsh = argv.next(), + "--cwd" => args.cwd = argv.next().map(PathBuf::from), + "--no-update" => args.no_update = true, + "--update" => args.force_update = true, + "--dev" => args.dev = true, + "--verbose" => args.verbose = true, + "--help" | "-h" => { + print_help(); + std::process::exit(0); + } + "--version" | "-V" => { + println!("{APP_NAME} {}", dsh_core::VERSION); + std::process::exit(0); + } + _ => {} + } + } + args + } +} + +fn print_help() { + println!( + "{APP_NAME} — native window around the official dsh WebUI.\n\n\ + --dsh PATH dsh 可执行文件路径或命令\n\ + --cwd DIR 传给 dsh 的工作目录\n\ + --no-update 不检查 dsh 更新\n\ + --update 启动前强制检查/安装 dsh 更新\n\ + --dev 打开 WebView 开发者工具\n\ + --verbose 输出调试日志" + ); +} + +struct AppState { + args: Args, + paths: BundledPaths, + process: Mutex>>, + url: Mutex>, +} + +impl AppState { + fn stop(&self) { + if let Ok(mut slot) = self.process.lock() { + if let Some(proc) = slot.take() { + proc.stop(); + } + } + } +} + +#[derive(Clone, Serialize)] +struct StatusPayload { + message: String, +} + +#[derive(Clone, Serialize)] +struct ErrorPayload { + message: String, + detail: String, +} + +#[derive(Clone, Serialize)] +struct ReadyPayload { + url: String, +} + +#[tauri::command] +fn restart(app: AppHandle) { + thread::spawn(move || boot(app)); +} + +#[tauri::command] +fn open_in_browser(state: tauri::State) -> Result<(), String> { + let url = state + .url + .lock() + .ok() + .and_then(|g| g.clone()) + .ok_or_else(|| "服务尚未就绪".to_string())?; + open::that(&url).map_err(|e| e.to_string()) +} + +#[tauri::command] +fn read_clipboard_images() -> Result, String> { + read_images().map_err(|e| e.to_string()) +} + +fn read_images() -> Result, String> { + let mut clipboard = arboard::Clipboard::new().map_err(|e| e.to_string())?; + if let Ok(img) = clipboard.get_image() { + let width = img.width as u32; + let height = img.height as u32; + let bytes = img.bytes.into_owned(); + if let Some(buffer) = image::RgbaImage::from_raw(width, height, bytes) { + let mut png = Vec::new(); + if buffer + .write_to(&mut Cursor::new(&mut png), image::ImageFormat::Png) + .is_ok() + { + if let Some(file) = file_from_bytes( + filename_for_mime("image/png", 0), + "image/png".into(), + png, + ) { + return Ok(vec![file]); + } + } + } + } + if let Ok(text) = clipboard.get_text() { + let loaded = files_from_paths(parse_uri_list(&text)); + if !loaded.is_empty() { + return Ok(loaded); + } + } + Ok(Vec::new()) +} + +fn is_internal(url: &Url) -> bool { + matches!(url.scheme(), "tauri" | "asset" | "about" | "data" | "blob") + || matches!( + url.host_str(), + Some("127.0.0.1" | "localhost" | "::1" | "tauri.localhost") + ) +} + +fn boot(app: AppHandle) { + let Some(state) = app.try_state::() else { + return; + }; + state.stop(); + let started = Instant::now(); + let _ = app.emit( + "status", + StatusPayload { + message: "正在启动…".into(), + }, + ); + + if state.args.force_update && !state.args.no_update { + let _ = app.emit( + "status", + StatusPayload { + message: "正在检查 dsh 更新…".into(), + }, + ); + let result = update_dsh(true); + mark_update_checked(); + log::info!("dsh update: {} ({})", result.status, result.message); + } + + let plugin = ensure_modlens(&state.paths); + log::info!( + "modlens: {} ({}) in {:?}", + plugin.status, + plugin.message, + started.elapsed() + ); + let preset = ensure_anchored_standard(&state.paths); + log::info!( + "anchored-standard: {} ({}) in {:?}", + preset.status, + preset.message, + started.elapsed() + ); + let _ = app.emit( + "status", + StatusPayload { + message: "正在启动 dsh web 服务…".into(), + }, + ); + + let launcher = DshLauncher::new(state.args.dsh.clone(), state.args.cwd.clone()); + let process = match launcher.start() { + Ok(p) => Arc::new(p), + Err(err) => { + let _ = app.emit( + "error", + ErrorPayload { + message: err.to_string(), + detail: String::new(), + }, + ); + return; + } + }; + if let Ok(mut slot) = state.process.lock() { + *slot = Some(Arc::clone(&process)); + } + log::info!("dsh web spawned in {:?}", started.elapsed()); + + if !state.args.no_update && !state.args.force_update && update_check_due() { + thread::spawn(|| { + log::info!("background dsh update check"); + let result = update_dsh(true); + mark_update_checked(); + log::info!( + "background dsh update: {} ({})", + result.status, + result.message + ); + }); + } + + let deadline = Instant::now() + Duration::from_secs(URL_TIMEOUT_SECONDS); + loop { + if let Some(url) = process.take_url() { + if let Ok(mut slot) = state.url.lock() { + *slot = Some(url.clone()); + } + let _ = app.emit("ready", ReadyPayload { url }); + log::info!("dsh web ready in {:?}", started.elapsed()); + return; + } + if let Some(code) = process.poll() { + let detail = process.snapshot_lines().join("\n"); + let _ = app.emit( + "error", + ErrorPayload { + message: format!("服务已退出(exit {code})。"), + detail, + }, + ); + return; + } + if Instant::now() >= deadline { + let detail = process + .snapshot_lines() + .into_iter() + .rev() + .take(80) + .collect::>() + .into_iter() + .rev() + .collect::>() + .join("\n"); + process.stop(); + let _ = app.emit( + "error", + ErrorPayload { + message: format!("等待 dsh web 输出 URL 超时({URL_TIMEOUT_SECONDS} 秒)。"), + detail, + }, + ); + return; + } + thread::sleep(Duration::from_millis(80)); + } +} + +pub fn run() { + let args = Args::parse(); + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(if args.verbose { + "debug" + } else { + "info" + })) + .init(); + + let mut paths = BundledPaths::discover(); + let dev = args.dev; + + tauri::Builder::default() + .plugin(tauri_plugin_opener::init()) + .plugin(tauri_plugin_single_instance::init(|app, _argv, _cwd| { + if let Some(window) = app.get_webview_window("main") { + let _ = window.unminimize(); + let _ = window.set_focus(); + } + })) + .setup(move |app| { + if let Ok(dir) = app.path().resource_dir() { + paths = paths.with_resource_dir(dir); + } + app.manage(AppState { + args: args.clone(), + paths, + process: Mutex::new(None), + url: Mutex::new(None), + }); + + let mut builder = WebviewWindowBuilder::new(app, "main", WebviewUrl::App("index.html".into())) + .title(APP_NAME) + .inner_size(1320.0, 860.0) + .min_inner_size(800.0, 560.0) + .decorations(false) + .resizable(true) + .initialization_script(INJECT) + .on_navigation(|url| { + if is_internal(&url) { + true + } else { + let _ = open::that(url.as_str()); + false + } + }); + + if let Some(icon) = app.default_window_icon().cloned() { + builder = builder.icon(icon)?; + } + + if dev { + builder = builder.devtools(true); + } + + let window = builder.build()?; + if dev { + window.open_devtools(); + } + + let app_handle = app.handle().clone(); + let _ = window; + thread::spawn(move || boot(app_handle)); + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + restart, + open_in_browser, + read_clipboard_images + ]) + .on_window_event(|window, event| { + if let tauri::WindowEvent::CloseRequested { .. } = event { + if let Some(state) = window.try_state::() { + state.stop(); + } + } + }) + .run(tauri::generate_context!()) + .expect("error while running DeepSeek Harness Desktop"); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..89a64c4 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + dsh_desktop_lib::run(); +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..0d67756 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "DeepSeek Harness", + "version": "0.1.0", + "identifier": "io.github.tommyfang.DshDesktop", + "build": { + "frontendDist": "../ui" + }, + "app": { + "withGlobalTauri": true, + "enableGTKAppId": true, + "macOSPrivateApi": false, + "windows": [], + "security": { + "csp": null + } + }, + "bundle": { + "active": true, + "targets": ["deb", "rpm", "nsis", "msi", "app", "dmg"], + "publisher": "TommyFang2077", + "homepage": "https://github.com/TommyFang2077/dsh-desktop", + "copyright": "Copyright © 2026 TommyFang2077", + "category": "DeveloperTool", + "shortDescription": "Desktop shell for DeepSeek Harness", + "longDescription": "Runs the official DeepSeek Harness (dsh) WebUI in a native window. Starts dsh web, embeds the UI with the system WebView, and ships ModLens plus Anchored Standard presets. Credentials stay in ~/.dsh.", + "licenseFile": "../LICENSE", + "icon": [ + "icons/32x32.png", + "icons/64x64.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "resources": [ + "../plugins/dsh-desktop-vision/", + "../vendor/modlens/", + "../vendor/anchored-standard/", + "../vendor/zero-anchored-standard/" + ], + "linux": { + "deb": { + "section": "devel", + "desktopTemplate": "linux/dsh-desktop.desktop" + }, + "rpm": { + "release": "1", + "desktopTemplate": "linux/dsh-desktop.desktop" + } + }, + "windows": { + "nsis": { + "installMode": "currentUser", + "displayLanguageSelector": true, + "languages": ["SimpChinese", "English"] + }, + "webviewInstallMode": { + "type": "downloadBootstrapper" + } + }, + "macOS": { + "minimumSystemVersion": "10.15", + "dmg": { + "appPosition": { "x": 180, "y": 170 }, + "applicationFolderPosition": { "x": 480, "y": 170 } + } + } + } +} diff --git a/tests/test_plugins.py b/tests/test_plugins.py new file mode 100644 index 0000000..34b93a9 --- /dev/null +++ b/tests/test_plugins.py @@ -0,0 +1,60 @@ +"""Sanity checks for the bundled dsh WebUI plugin (no desktop runtime).""" + +import unittest +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + + +class VisionPluginFilesTests(unittest.TestCase): + def test_client_registers_system_settings_slots(self): + client = (ROOT / "plugins" / "dsh-desktop-vision" / "client.js").read_text( + encoding="utf-8" + ) + self.assertIn("settings.section", client) + self.assertNotIn("settings.plugins.tab", client) + self.assertIn("modlens-vision", client) + host = (ROOT / "plugins" / "dsh-desktop-vision" / "index.js").read_text( + encoding="utf-8" + ) + self.assertIn("/dsh-desktop/modlens", host) + self.assertIn("'OpenAI 兼容'", host) + self.assertNotIn("Qwen / 自建网关", host) + self.assertIn("https://api.openai.com/v1", host) + self.assertIn("https://generativelanguage.googleapis.com", host) + self.assertIn("https://api.anthropic.com", host) + self.assertIn("https://platform.openai.com/api-keys", host) + self.assertIn("https://aistudio.google.com/apikey", host) + self.assertIn("https://console.anthropic.com/settings/keys", host) + self.assertIn("获取 API", client) + self.assertNotIn("qwen-agent", client) + self.assertIn("example: 'gpt-4o'", host) + self.assertIn("example: 'gemini-3.6-flash'", host) + self.assertIn("example: 'claude-haiku-4-5-20251001'", host) + self.assertIn("example: 'gemini-3.6-flash-low'", host) + self.assertIn("example: 'haiku'", host) + + +class BundledAttributionTests(unittest.TestCase): + def test_readme_cites_upstream_plugins(self): + readme = (ROOT / "README.md").read_text(encoding="utf-8") + third = (ROOT / "THIRD_PARTY.md").read_text(encoding="utf-8") + for text in (readme, third): + self.assertIn("https://github.com/deepseek-ai/deepseek-harness", text) + self.assertIn("https://github.com/liustack/modlens", text) + self.assertIn("https://github.com/xiaobright/dsh-anchored-standard", text) + self.assertIn("0.1.0-rc.6", text) + self.assertIn("3.16.6", text) + self.assertIn("ffb845c5480adc953392a6db6f8a98ede621174b", text) + self.assertIn("dsh-desktop-vision", text) + self.assertTrue((ROOT / "docs" / "licenses" / "modlens.LICENSE").is_file()) + self.assertTrue( + (ROOT / "docs" / "licenses" / "dsh-anchored-standard.NOTICE").is_file() + ) + for name in ("splash.png", "session.png", "vision.png", "menu.png"): + self.assertTrue((ROOT / "docs" / "screenshots" / name).is_file()) + + +if __name__ == "__main__": + unittest.main() diff --git a/ui/app.js b/ui/app.js new file mode 100644 index 0000000..9468722 --- /dev/null +++ b/ui/app.js @@ -0,0 +1,52 @@ +const statusEl = document.getElementById("status"); +const spinner = document.getElementById("spinner"); +const retry = document.getElementById("retry"); +const detail = document.getElementById("detail"); + +function tauri() { + return window.__TAURI__; +} + +function setStatus(message, kind) { + statusEl.textContent = message; + const failed = kind === "error"; + spinner.hidden = failed; + retry.hidden = !failed; + if (!failed) { + detail.hidden = true; + detail.textContent = ""; + } +} + +async function boot() { + const api = tauri(); + if (!api) { + setStatus("桌面接口未就绪", "error"); + return; + } + await api.event.listen("status", function (event) { + setStatus(event.payload.message || "正在启动…", "ok"); + }); + await api.event.listen("error", function (event) { + setStatus(event.payload.message || "启动失败", "error"); + if (event.payload.detail) { + detail.hidden = false; + detail.textContent = event.payload.detail; + } + }); + await api.event.listen("ready", function (event) { + if (event.payload && event.payload.url) { + window.location.replace(event.payload.url); + } + }); + retry.addEventListener("click", function () { + setStatus("正在重新启动…", "ok"); + api.core.invoke("restart"); + }); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", boot); +} else { + boot(); +} diff --git a/ui/icon.png b/ui/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a47edbabe80a7319e3bc9e11b460b8977d5ef03 GIT binary patch literal 17803 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 UoABx$@KhBBPgg&ebxsLQ09%>ajQ{`u literal 0 HcmV?d00001 diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..806056b --- /dev/null +++ b/ui/index.html @@ -0,0 +1,22 @@ + + + + + + DeepSeek Harness + + + +

+
+ +

DeepSeek Harness

+

正在启动…

+ + + +
+
+ + + diff --git a/ui/inject/chrome.js b/ui/inject/chrome.js new file mode 100644 index 0000000..d6c1ca0 --- /dev/null +++ b/ui/inject/chrome.js @@ -0,0 +1,168 @@ +(function () { + if (window.__dshDesktopChrome) return; + window.__dshDesktopChrome = true; + + const css = ` + :root { --dsh-desktop-titlebar-h: 36px; } + html.dsh-desktop-offset { + box-sizing: border-box !important; + padding-top: var(--dsh-desktop-titlebar-h); + } + #dsh-desktop-titlebar { + position: fixed; top: 0; left: 0; right: 0; height: var(--dsh-desktop-titlebar-h); + z-index: 2147483646; display: flex; align-items: center; + padding: 0 12px; box-sizing: border-box; + background: rgba(246, 246, 248, 0.72); + -webkit-backdrop-filter: saturate(180%) blur(20px); + backdrop-filter: saturate(180%) blur(20px); + border-bottom: 0.5px solid rgba(0, 0, 0, 0.06); + user-select: none; -webkit-user-select: none; + } + @media (prefers-color-scheme: dark) { + #dsh-desktop-titlebar { + background: rgba(28, 28, 30, 0.72); + border-bottom-color: rgba(255, 255, 255, 0.08); + } + #dsh-desktop-titlebar .more { color: rgba(255,255,255,0.45); } + #dsh-desktop-titlebar .menu { + background: rgba(44, 44, 46, 0.96); + box-shadow: 0 8px 28px rgba(0,0,0,0.45); + } + #dsh-desktop-titlebar .menu button { color: #f5f5f7; } + #dsh-desktop-titlebar .menu button:hover { background: rgba(255,255,255,0.08); } + } + #dsh-desktop-titlebar .traffic { + display: flex; gap: 8px; align-items: center; height: 100%; + } + #dsh-desktop-titlebar .tl { + width: 12px; height: 12px; min-width: 12px; min-height: 12px; + max-width: 12px; max-height: 12px; flex: none; overflow: hidden; + box-sizing: border-box; border-radius: 50%; border: 0; + padding: 0; margin: 0; display: grid; place-items: center; cursor: default; + position: relative; + } + #dsh-desktop-titlebar .tl.close { background: #ff5f57; } + #dsh-desktop-titlebar .tl.min { background: #febc2e; } + #dsh-desktop-titlebar .tl.zoom { background: #28c840; } + #dsh-desktop-titlebar .tl::after { + content: ""; font-size: 9px; line-height: 1; font-weight: 700; + color: rgba(0,0,0,0.55); opacity: 0; + } + #dsh-desktop-titlebar .traffic:hover .tl.close::after { content: "×"; opacity: 1; } + #dsh-desktop-titlebar .traffic:hover .tl.min::after { content: "–"; opacity: 1; } + #dsh-desktop-titlebar .traffic:hover .tl.zoom::after { content: "+"; opacity: 1; } + #dsh-desktop-titlebar .drag { flex: 1; height: 100%; } + #dsh-desktop-titlebar .more { + appearance: none; border: 0; background: transparent; + color: rgba(0,0,0,0.35); font-size: 15px; letter-spacing: 0.08em; + width: 28px; height: 20px; border-radius: 6px; cursor: default; + } + #dsh-desktop-titlebar .more:hover { background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.7); } + #dsh-desktop-titlebar .menu { + position: absolute; top: calc(var(--dsh-desktop-titlebar-h) + 2px); left: 8px; min-width: 168px; + padding: 4px; border-radius: 10px; + background: rgba(255,255,255,0.96); + box-shadow: 0 8px 28px rgba(0,0,0,0.16); + display: none; flex-direction: column; + } + #dsh-desktop-titlebar .menu.open { display: flex; } + #dsh-desktop-titlebar .menu button { + appearance: none; border: 0; background: transparent; + text-align: left; padding: 7px 10px; border-radius: 6px; + font: 13px/1.3 -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif; + color: #1d1d1f; cursor: default; + } + #dsh-desktop-titlebar .menu button:hover { background: rgba(0,0,0,0.05); } + #dsh-desktop-titlebar .menu button:disabled { opacity: 0.35; } + `; + + function api() { + return window.__TAURI__ || null; + } + + function inject() { + if (document.getElementById("dsh-desktop-titlebar")) return; + const style = document.createElement("style"); + style.textContent = css; + document.documentElement.appendChild(style); + + const bar = document.createElement("header"); + bar.id = "dsh-desktop-titlebar"; + bar.innerHTML = + '' + + '" + + '
' + + '
' + + '' + + '' + + '' + + "
"; + document.documentElement.appendChild(bar); + if (/^(127\.0\.0\.1|localhost|\[::1\])$/.test(location.hostname)) { + document.documentElement.classList.add("dsh-desktop-offset"); + } + + const menu = bar.querySelector(".menu"); + const more = bar.querySelector(".more"); + more.addEventListener("click", function (e) { + e.stopPropagation(); + menu.classList.toggle("open"); + }); + document.addEventListener("click", function () { + menu.classList.remove("open"); + }); + + bar.addEventListener("dblclick", function (e) { + if (e.target.closest(".tl, .more, .menu")) return; + const t = api(); + if (t && t.window) t.window.getCurrentWindow().toggleMaximize(); + }); + + bar.addEventListener("click", function (e) { + const t = api(); + const winBtn = e.target.closest("[data-win]"); + if (winBtn && t && t.window) { + const w = t.window.getCurrentWindow(); + const act = winBtn.getAttribute("data-win"); + if (act === "close") w.close(); + else if (act === "minimize") w.minimize(); + else if (act === "zoom") w.toggleMaximize(); + return; + } + const cmd = e.target.closest("[data-cmd]"); + if (cmd && t && t.core) { + menu.classList.remove("open"); + t.core.invoke(cmd.getAttribute("data-cmd")); + } + }); + } + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", inject); + } else { + inject(); + } + + const harness = /^(127\.0\.0\.1|localhost|\[::1\])$/.test(location.hostname); + if (harness && location.protocol.indexOf("http") === 0) { + document.addEventListener("paste", async function (e) { + const t = api(); + if (!t || !t.core) return; + try { + const items = e.clipboardData ? Array.from(e.clipboardData.items) : []; + if (items.some(function (item) { return item.kind === "file" && item.getAsFile(); })) { + return; + } + const files = await t.core.invoke("read_clipboard_images"); + if (files && files.length) { + e.preventDefault(); + e.stopImmediatePropagation(); + if (window.__dshDesktopPasteFiles) window.__dshDesktopPasteFiles(files); + } + } catch (err) {} + }, true); + } +})(); diff --git a/ui/inject/hide-twins.js b/ui/inject/hide-twins.js new file mode 100644 index 0000000..2bb3c65 --- /dev/null +++ b/ui/inject/hide-twins.js @@ -0,0 +1,35 @@ +(function () { + const SUFFIX = " (modlens vision)"; + function textOf(el) { + return (el.textContent || "").replace(/\s+/g, " ").trim(); + } + function hideTwins(root) { + const nodes = root.querySelectorAll("button, [role='menuitem'], [role='option'], [role='group'], h1, h2, h3, h4, span, div, p"); + const visionBases = new Set(); + for (const el of nodes) { + if (el.childElementCount > 3) continue; + const t = textOf(el); + if (t.endsWith(SUFFIX) && t.length > SUFFIX.length) { + visionBases.add(t.slice(0, -SUFFIX.length)); + } + } + if (visionBases.size === 0) return; + for (const el of nodes) { + if (el.childElementCount > 3) continue; + const t = textOf(el); + if (!visionBases.has(t)) continue; + const row = el.closest("[role='group'], [role='menuitem'], li, section") || el; + if (row && row.style.display !== "none") row.style.display = "none"; + } + } + const run = function () { + try { hideTwins(document.body); } catch (e) {} + }; + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", run); + } else { + run(); + } + const obs = new MutationObserver(run); + obs.observe(document.documentElement, { childList: true, subtree: true }); +})(); diff --git a/ui/inject/ingest.js b/ui/inject/ingest.js new file mode 100644 index 0000000..02ae5e0 --- /dev/null +++ b/ui/inject/ingest.js @@ -0,0 +1,45 @@ +(function () { + const IMAGE_PATH = /^(?:file:\/\/|(?:\/|\.{1,2}\/)).+\.(?:png|jpe?g|gif|webp|bmp|tiff?)$/i; + function looksLikeImagePath(text) { + const first = (text || "").trim().split(/\s+/, 1)[0] || ""; + return IMAGE_PATH.test(first); + } + document.addEventListener("paste", function (e) { + try { + const items = Array.from(e.clipboardData ? e.clipboardData.items : []); + const files = items.filter(function (item) { return item.kind === "file"; }) + .map(function (item) { return item.getAsFile(); }) + .filter(Boolean); + if (files.length > 0) return; + const text = e.clipboardData ? (e.clipboardData.getData("text/plain") || "") : ""; + const uris = e.clipboardData ? (e.clipboardData.getData("text/uri-list") || "") : ""; + if (looksLikeImagePath(text) || looksLikeImagePath(uris)) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + } catch (err) {} + }, true); + + window.__dshDesktopPasteFiles = function (items) { + try { + const dt = new DataTransfer(); + for (const item of items) { + const bin = atob(item.b64); + const bytes = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i); + dt.items.add(new File([bytes], item.name, { type: item.type })); + } + const drop = new DragEvent("drop", { + bubbles: true, + cancelable: true, + dataTransfer: dt + }); + try { + Object.defineProperty(drop, "dataTransfer", { value: dt, configurable: true }); + } catch (e) {} + document.dispatchEvent(drop); + } catch (err) { + console.error("dsh-desktop paste image failed", err); + } + }; +})(); diff --git a/ui/styles.css b/ui/styles.css new file mode 100644 index 0000000..9750cfc --- /dev/null +++ b/ui/styles.css @@ -0,0 +1,114 @@ +:root { + color-scheme: light dark; + --bg: #f5f5f7; + --text: #1d1d1f; + --muted: #86868b; + --accent: #0071e3; + --card: rgba(255, 255, 255, 0.64); +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #000000; + --text: #f5f5f7; + --muted: #86868b; + --accent: #0a84ff; + --card: rgba(28, 28, 30, 0.72); + } +} + +* { box-sizing: border-box; } + +html, body { + margin: 0; + min-height: 100%; + background: var(--bg); + color: var(--text); + font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", + "Helvetica Neue", system-ui, sans-serif; + -webkit-font-smoothing: antialiased; +} + +body { + min-height: 100vh; +} + +.stage { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 72px 32px 48px; +} + +.hero { + width: min(420px, 100%); + text-align: center; +} + +.mark { + display: block; + width: 72px; + height: 72px; + margin: 0 auto 22px; + border-radius: 18px; + object-fit: contain; +} + +h1 { + margin: 0; + font-size: 28px; + font-weight: 600; + letter-spacing: -0.03em; +} + +#status { + margin: 10px 0 0; + color: var(--muted); + font-size: 13px; + line-height: 1.5; + min-height: 1.5em; +} + +.ring { + width: 22px; + height: 22px; + margin: 28px auto 0; + border-radius: 50%; + border: 1.5px solid rgba(134, 134, 139, 0.28); + border-top-color: var(--text); + animation: spin 0.8s linear infinite; +} + +.ring[hidden] { display: none; } + +@keyframes spin { to { transform: rotate(360deg); } } + +.pill { + margin-top: 28px; + appearance: none; + border: 0; + border-radius: 980px; + background: var(--accent); + color: #fff; + font: 600 13px/1 -apple-system, BlinkMacSystemFont, system-ui, sans-serif; + padding: 9px 18px; + cursor: default; +} + +.pill[hidden] { display: none; } + +#detail { + margin: 22px 0 0; + text-align: left; + max-height: 180px; + overflow: auto; + padding: 12px 14px; + border-radius: 12px; + background: var(--card); + color: var(--muted); + font: 11px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; + white-space: pre-wrap; +} + +#detail[hidden] { display: none; }
+ +
+

视觉模型

+

内置插件 dsh-desktop-vision · 写入 ~/.modlens/config.json

+
+

ModLens 视觉模型

+

纯文本对话模型读图时使用这里的引擎。已声明视觉能力的模型(如 Qwen)不会走这条桥。

+ + + + + +

已保存

+
+
+