pax_global_header00006660000000000000000000000064151266530000014510gustar00rootroot0000000000000052 comment=224ba9c2085609ff5d96ee4b72ef3bbc52f2daa1 python-gaphas-5.1.2/000077500000000000000000000000001512665300000142775ustar00rootroot00000000000000python-gaphas-5.1.2/.all-contributorsrc000066400000000000000000000056671512665300000201460ustar00rootroot00000000000000{ "projectName": "gaphas", "projectOwner": "gaphor", "repoType": "github", "repoHost": "https://github.com", "files": [ "README.md" ], "imageSize": 100, "commit": true, "contributors": [ { "login": "amolenaar", "name": "Arjan Molenaar", "avatar_url": "https://avatars0.githubusercontent.com/u/96249?v=4", "profile": "https://github.com/amolenaar", "contributions": [ "code", "bug", "doc", "review", "question", "plugin" ] }, { "login": "danyeaw", "name": "Dan Yeaw", "avatar_url": "https://avatars1.githubusercontent.com/u/10014976?v=4", "profile": "https://ghuser.io/danyeaw", "contributions": [ "code", "test", "review", "bug", "question", "infra", "doc" ] }, { "login": "wrobell", "name": "wrobell", "avatar_url": "https://avatars2.githubusercontent.com/u/105664?v=4", "profile": "https://github.com/wrobell", "contributions": [ "code", "test", "review" ] }, { "login": "jlstevens", "name": "Jean-Luc Stevens", "avatar_url": "https://avatars3.githubusercontent.com/u/890576?v=4", "profile": "https://github.com/jlstevens", "contributions": [ "code", "bug", "doc" ] }, { "login": "franzlst", "name": "Franz Steinmetz", "avatar_url": "https://avatars1.githubusercontent.com/u/1144966?v=4", "profile": "http://www.franework.de", "contributions": [ "code", "bug" ] }, { "login": "adrianboguszewski", "name": "Adrian Boguszewski", "avatar_url": "https://avatars3.githubusercontent.com/u/4547501?v=4", "profile": "https://github.com/adrianboguszewski", "contributions": [ "code" ] }, { "login": "Rbelder", "name": "Rico Belder", "avatar_url": "https://avatars3.githubusercontent.com/u/15119522?v=4", "profile": "https://github.com/Rbelder", "contributions": [ "bug", "review" ] }, { "login": "adamboduch", "name": "Adam Boduch", "avatar_url": "https://avatars2.githubusercontent.com/u/114619?v=4", "profile": "http://www.boduch.ca", "contributions": [ "bug" ] }, { "login": "janettech", "name": "Janet Jose", "avatar_url": "https://avatars3.githubusercontent.com/u/13398384?v=4", "profile": "https://github.com/janettech", "contributions": [ "doc" ] }, { "login": "cjmayo", "name": "Chris Mayo", "avatar_url": "https://avatars.githubusercontent.com/u/921089?v=4", "profile": "https://github.com/cjmayo", "contributions": [ "doc" ] } ], "contributorsPerLine": 7, "commitType": "docs", "commitConvention": "angular" } python-gaphas-5.1.2/.dockerignore000066400000000000000000000000531512665300000167510ustar00rootroot00000000000000.venv __pycache__ dist .mypy_cache .github python-gaphas-5.1.2/.github/000077500000000000000000000000001512665300000156375ustar00rootroot00000000000000python-gaphas-5.1.2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001512665300000200225ustar00rootroot00000000000000python-gaphas-5.1.2/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012271512665300000225160ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **OS** - [ ] Linux (Please put in notes the specific distro) - [ ] MacOS - [ ] Windows NOTES: **Version** Version of Gaphas: **Additional context** Add any other context about the problem here. python-gaphas-5.1.2/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011231512665300000235440ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. python-gaphas-5.1.2/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000020551512665300000214420ustar00rootroot00000000000000 ### PR Checklist Please check if your PR fulfills the following requirements: - [ ] I have read and I am following the [Contributor guide](https://github.com/gaphor/gaphas/blob/main/CONTRIBUTING.md) - [ ] I have read and I understand the [Code of Conduct](https://github.com/gaphor/gaphas/blob/main/CODE_OF_CONDUCT.md) ### PR Type What kind of change does this PR introduce? - [ ] Bugfix - [ ] Feature - [ ] Code style update (formatting, local variables) - [ ] Refactoring (no functional changes, no api changes) - [ ] Documentation content changes ### What is the current behavior? Issue Number: N/A ### What is the new behavior? ### Does this PR introduce a breaking change? - [ ] Yes - [ ] No ### Other information python-gaphas-5.1.2/.github/dependabot.yml000066400000000000000000000006241512665300000204710ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" groups: github-action-updates: patterns: - "*" schedule: interval: weekly labels: ["skip-changelog"] - package-ecosystem: "pip" directory: "/" groups: pip-updates: patterns: - "*" schedule: interval: weekly labels: ["skip-changelog"] python-gaphas-5.1.2/.github/github-requirements.txt000066400000000000000000000000401512665300000223750ustar00rootroot00000000000000poetry==2.1.1 pre-commit==4.5.0 python-gaphas-5.1.2/.github/labeler.yml000066400000000000000000000005651512665300000177760ustar00rootroot00000000000000documentation: - changed-files: - any-glob-to-any-file: 'docs/*.md' - any-glob-to-any-file: 'docs/*.rst' - any-glob-to-any-file: '*.md' python: - changed-files: - any-glob-to-any-file: 'gaphas/**/*.py' skip-changelog: - changed-files: - any-glob-to-any-file: '.pre-commit-config.yaml' - any-glob-to-any-file: '.all-contributorsrc' python-gaphas-5.1.2/.github/release-drafter.yml000066400000000000000000000013631512665300000214320ustar00rootroot00000000000000name-template: 'Version $NEXT_PATCH_VERSION - Summary Here🌈' tag-template: 'v$NEXT_PATCH_VERSION' exclude-labels: - 'skip-changelog' categories: - title: 'πŸš€ Features' labels: - 'feature' - 'enhancement' - title: 'πŸ› Bug Fixes' labels: - 'fix' - 'bugfix' - 'bug' - title: '🧰 Maintenance' label: 'chore' change-template: '- $TITLE @$AUTHOR (#$NUMBER)' template: | ## Changes $CHANGES Thanks again to $CONTRIBUTORS! πŸŽ‰ no-changes-template: 'Changes are coming soon 😎' replacers: - search: '(?:and )?@dependabot(?:\[bot\])?,?' replace: '' - search: '(?:and )?@sourcery-ai-bot(?:\[bot\])?,?' replace: '' - search: '(?:and )?@allcontributors(?:\[bot\])?,?' replace: '' python-gaphas-5.1.2/.github/scripts/000077500000000000000000000000001512665300000173265ustar00rootroot00000000000000python-gaphas-5.1.2/.github/scripts/metadata.sh000077500000000000000000000012121512665300000214410ustar00rootroot00000000000000#!/bin/bash echo "GITHUB_REF is $GITHUB_REF" TAG="${GITHUB_REF/refs\/tags\//}" echo "TAG is $TAG" if ! [ -x "$(command -v poetry)" ]; then echo 'Poetry not found!' >&2 exit 1 fi VERSION="$(poetry version --no-ansi | cut -d' ' -f2)" echo "VERSION is $VERSION" if [[ "$GITHUB_REF" =~ refs\/tags\/.* && "$TAG" == "${VERSION}" ]] then REV="" RELEASE="true" else # PEP440 version scheme, different from semver 2.0 REV=".dev${GITHUB_RUN_NUMBER:-0}+${GITHUB_SHA:0:8}" RELEASE="false" poetry version "${VERSION}""${REV}" fi echo "version=${VERSION}${REV}" >> "$GITHUB_OUTPUT" echo "release=${RELEASE}" >> "$GITHUB_OUTPUT" python-gaphas-5.1.2/.github/workflows/000077500000000000000000000000001512665300000176745ustar00rootroot00000000000000python-gaphas-5.1.2/.github/workflows/build.yml000066400000000000000000000132001512665300000215120ustar00rootroot00000000000000name: build on: push: release: types: [created, published] env: python-version: '3.14' permissions: contents: read jobs: lint: runs-on: ubuntu-24.04 steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: disable-sudo: true egress-policy: block allowed-endpoints: > files.pythonhosted.org:443 pypi.org:443 github.com:443 *.githubusercontent.com:443 ghcr.io - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Set up Python uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ env.python-version }} - name: Lint with pre-commit run: pipx run --pip-args='--constraint=.github/github-requirements.txt' pre-commit run --all-files - name: Check REUSE compliance run: pip install reuse && python -m reuse lint - name: Check Poetry lock file integrity run: | python${{ env.python-version }} -m pip install --constraint=.github/github-requirements.txt poetry poetry config virtualenvs.in-project true poetry check build: needs: lint runs-on: ubuntu-24.04 permissions: contents: write strategy: matrix: python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] name: build python ${{ matrix.python-version }} outputs: targz: gaphas-${{ steps.meta.outputs.version }}.tar.gz wheel: gaphas-${{ steps.meta.outputs.version }}-py3-none-any.whl steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: block allowed-endpoints: > azure.archive.ubuntu.com:80 qlty.sh/d/coverage:443 qlty-releases.s3.amazonaws.com:443 files.pythonhosted.org:443 pypi.org:443 github.com:443 *.githubusercontent.com:443 ghcr.io gitlab.gnome.org:443 keys.openpgp.org:443 motd.ubuntu.com:443 esm.ubuntu.com:443 packages.microsoft.com:443 ppa.launchpadcontent.net:443 - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Use Python Dependency Cache uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1 with: path: ~/.cache/pip key: ${{ runner.os }}-${{ hashFiles('**/poetry.lock') }} - name: Install Ubuntu Dependencies run: | sudo apt-get update -qq sudo apt-get install -qq --no-install-recommends gir1.2-gtk-4.0 libgirepository-2.0-dev libcairo2-dev - name: Install Poetry run: | python${{ matrix.python-version }} -m pip install --constraint=.github/github-requirements.txt poetry poetry config virtualenvs.in-project true - name: Collect Project Data id: meta run: .github/scripts/metadata.sh - name: Install dependencies run: poetry install --no-interaction - name: Test run: | xvfb-run poetry run pytest --cov=gaphas poetry run coverage lcov - name: Upload Code Coverage to Qlty.sh uses: qltysh/qlty-action/coverage@a19242102d17e497f437d7466aa01b528537e899 # v2.2.0 with: token: ${{ secrets.QLTY_COVERAGE_TOKEN }} files: coverage.lcov - name: Create Source Dist and Wheel if: ${{ matrix.python-version == env.python-version }} run: poetry build - name: Upload gaphas-${{ steps.meta.outputs.version }}.tar.gz if: ${{ matrix.python-version == env.python-version }} uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: gaphas-${{ steps.meta.outputs.version }}.tar.gz path: dist/gaphas-${{ steps.meta.outputs.version }}.tar.gz - name: Upload gaphas-${{ steps.meta.outputs.version }}-py3-none-any.whl if: ${{ matrix.python-version == env.python-version }} uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: gaphas-${{ steps.meta.outputs.version }}-py3-none-any.whl path: dist/gaphas-${{ steps.meta.outputs.version }}-py3-none-any.whl publish-to-pypi: name: Publish to PyPI (release only) needs: build runs-on: ubuntu-24.04 permissions: id-token: write if: ${{ github.event_name == 'release' }} steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: disable-sudo: true egress-policy: block allowed-endpoints: > upload.pypi.org:443 *.sigstore.dev:443 *.githubusercontent.com:443 ghcr.io:443 - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: ${{ needs.build.outputs.targz }} path: dist - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: ${{ needs.build.outputs.wheel }} path: dist - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # release/v1 python-gaphas-5.1.2/.github/workflows/codeql.yml000066400000000000000000000027151512665300000216730ustar00rootroot00000000000000name: "CodeQL" on: push: branches: ["main"] pull_request: # The branches below must be a subset of the branches above branches: ["main"] schedule: - cron: "0 0 * * 1" permissions: contents: read jobs: analyze: name: Analyze runs-on: ubuntu-24.04 permissions: actions: read contents: read security-events: write steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: block allowed-endpoints: > api.github.com:443 github.com:443 *.githubusercontent.com:443 ghcr.io uploads.github.com:443 azure.archive.ubuntu.com:80 esm.ubuntu.com:443 motd.ubuntu.com:443 packages.microsoft.com:443 ppa.launchpadcontent.net:443 files.pythonhosted.org:443 pypi.org:443 gitlab.gnome.org:443 - name: Checkout repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 with: languages: actions,python - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 python-gaphas-5.1.2/.github/workflows/dependency-review.yml000066400000000000000000000022121512665300000240310ustar00rootroot00000000000000# Dependency Review Action # # This Action will scan dependency manifest files that change as part of a Pull Request, # surfacing known-vulnerable versions of the packages declared or updated in the PR. # Once installed, if the workflow run is marked as required, # PRs introducing known-vulnerable packages will be blocked from merging. # # Source repository: https://github.com/actions/dependency-review-action name: 'Dependency Review' on: [pull_request] permissions: contents: read jobs: dependency-review: runs-on: ubuntu-24.04 steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: block allowed-endpoints: > api.github.com:443 api.securityscorecards.dev:443 github.com:443 *.githubusercontent.com:443 ghcr.io - name: 'Checkout Repository' uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: 'Dependency Review' uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261 # v4.8.2 python-gaphas-5.1.2/.github/workflows/pr-labeler.yml000066400000000000000000000014221512665300000224430ustar00rootroot00000000000000name: "Pull Request Labeler" on: # pull_request_target is not considered safe, but only updates PRs in our case. - pull_request_target permissions: contents: read jobs: pr-labeler: permissions: contents: read pull-requests: write runs-on: ubuntu-24.04 steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: disable-sudo: true egress-policy: block allowed-endpoints: > api.github.com:443 *.githubusercontent.com:443 ghcr.io - uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" sync-labels: false python-gaphas-5.1.2/.github/workflows/pre-commit-updater.yml000066400000000000000000000037421512665300000241430ustar00rootroot00000000000000name: Pre-commit updater on: workflow_dispatch: schedule: # min hour dom month dow - cron: '0 5 * * 3' env: python_version: '3.13' jobs: updater: name: Update runs-on: ubuntu-24.04 steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: disable-sudo: true egress-policy: block allowed-endpoints: > files.pythonhosted.org:443 pypi.org:443 github.com:443 api.github.com:443 *.githubusercontent.com:443 ghcr.io - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: ref: main - name: Set up Python uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ env.python_version }} cache: pip - name: Install pre-commit run: python -m pip install pre-commit - name: Update pre-commit hooks run: pre-commit autoupdate --freeze - name: Run pre-commit hooks run: pre-commit run --all-files - name: Create GitHub App Token uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1 id: generate-token with: app-id: ${{ secrets.GAPHOR_UPDATER_APP_ID }} private-key: ${{ secrets.GAPHOR_UPDATER_APP_PRIVATE_KEY }} - name: Create Pull Request uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0 with: token: ${{ steps.generate-token.outputs.token }} commit-message: Update pre-commit hooks branch: pre-commit-update delete-branch: true title: 'Update pre-commit hooks' body: | This PR was automatically created to make the following update: - Update pre-commit hooks labels: | skip-changelog python-gaphas-5.1.2/.github/workflows/release-drafter.yml000066400000000000000000000016511512665300000234670ustar00rootroot00000000000000name: Release Drafter on: push: branches: main permissions: contents: read jobs: update-release-draft: permissions: contents: write # for release-drafter/release-drafter to create a github release pull-requests: write # for release-drafter/release-drafter to add label to PR runs-on: ubuntu-24.04 if: "!contains(github.event.head_commit.message, 'skip ci')" steps: # Drafts your next Release notes as Pull Requests are merged into "main" - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: block allowed-endpoints: > api.github.com:443 *.githubusercontent.com:443 ghcr.io - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} python-gaphas-5.1.2/.github/workflows/scorecards.yml000066400000000000000000000070761512665300000225610ustar00rootroot00000000000000# This workflow uses actions that are not certified by GitHub. They are provided # by a third-party and are governed by separate terms of service, privacy # policy, and support documentation. name: Scorecard supply-chain security on: # For Branch-Protection check. Only the default branch is supported. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection branch_protection_rule: # To guarantee Maintained check is occasionally updated. See # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained schedule: - cron: '20 7 * * 2' push: branches: ["main"] # Declare default permissions as read only. permissions: read-all jobs: analysis: name: Scorecard analysis runs-on: ubuntu-24.04 permissions: # Needed to upload the results to code-scanning dashboard. security-events: write # Needed to publish results and get a badge (see publish_results below). id-token: write contents: read actions: read steps: - name: Harden Runner uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0 with: egress-policy: block allowed-endpoints: > api.deps.dev:443 api.github.com:443 github.com:443 *.githubusercontent.com:443 ghcr.io api.osv.dev:443 api.scorecard.dev:443 api.securityscorecards.dev:443 auth.docker.io:443 cdn.fwupd.org:443 fulcio.sigstore.dev:443 index.docker.io:443 oss-fuzz-build-logs.storage.googleapis.com:443 rekor.sigstore.dev:443 tuf-repo-cdn.sigstore.dev:443 www.bestpractices.dev:443 - name: "Checkout code" uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: persist-credentials: false - name: "Run analysis" uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: # - you want to enable the Branch-Protection check on a *public* repository, or # - you are installing Scorecards on a *private* repository # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. # repo_token: ${{ secrets.SCORECARD_TOKEN }} # Public repositories: # - Publish results to OpenSSF REST API for easy access by consumers # - Allows the repository to include the Scorecard badge. # - See https://github.com/ossf/scorecard-action#publishing-results. # For private repositories: # - `publish_results` will always be set to `false`, regardless # of the value entered here. publish_results: true # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: SARIF file path: results.sarif retention-days: 5 # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5 with: sarif_file: results.sarif python-gaphas-5.1.2/.gitignore000066400000000000000000000004001512665300000162610ustar00rootroot00000000000000# python *.pyc *.egg .eggs/ *.egg-info/ build/ dist/ pip-wheel-metadata # virtual env .venv*/ .env # docs docs/_build # pyenv .python-version # tox .tox/ # coverage .coverage htmlcov/ # gaphas *.svg *.pickled # VS Code .vscode/ # mypy .mypy_cache/ python-gaphas-5.1.2/.pre-commit-config.yaml000066400000000000000000000014371512665300000205650ustar00rootroot00000000000000repos: - repo: https://github.com/codespell-project/codespell rev: 63c8f8312b7559622c0d82815639671ae42132ac # frozen: v2.4.1 hooks: - id: codespell additional_dependencies: - tomli - repo: https://github.com/pre-commit/mirrors-mypy rev: a66e98df7b4aeeb3724184b332785976d062b92e # frozen: v1.19.1 hooks: - id: mypy - repo: https://github.com/pre-commit/pre-commit-hooks rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0 hooks: - id: check-toml - id: check-yaml - id: end-of-file-fixer exclude: '\.gaphor' - repo: https://github.com/astral-sh/ruff-pre-commit rev: '5ba58aca0bd5bc7c0e1c0fc45af2e88d6a2bde83' # frozen: v0.14.10 hooks: - id: ruff args: [--fix] - id: ruff-format python-gaphas-5.1.2/.readthedocs.yaml000066400000000000000000000006531512665300000175320ustar00rootroot00000000000000version: 2 formats: all build: os: ubuntu-24.04 tools: python: "3.13" apt_packages: - libgirepository-2.0-dev jobs: pre_install: - python -m pip install --constraint=.github/github-requirements.txt poetry - poetry config virtualenvs.create false post_install: - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs sphinx: configuration: docs/conf.py fail_on_warning: false python-gaphas-5.1.2/.reuse/000077500000000000000000000000001512665300000155005ustar00rootroot00000000000000python-gaphas-5.1.2/.reuse/dep5000066400000000000000000000005561512665300000162660ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Gaphas Upstream-Contact: Arjan Molenaar Source: https://github.com/gaphor/gaphas Files: * Copyright: 2006 Arjan Molenaar and Dan Yeaw License: Apache-2.0 Files: gaphas/geometry.py Copyright: Mukesh Prasad, Arjan Molenaar, and Dan Yeaw License: Apache-2.0 python-gaphas-5.1.2/.sourcery.yaml000066400000000000000000000000521512665300000171110ustar00rootroot00000000000000ignore: - tests/test_solver_variable.py python-gaphas-5.1.2/CODE_OF_CONDUCT.md000066400000000000000000000121351512665300000171000ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at dan@yeaw.me. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. python-gaphas-5.1.2/CONTRIBUTING.md000066400000000000000000000131421512665300000165310ustar00rootroot00000000000000# Contributing ### We :heart: our Contributors! First off, thank you for considering contributing to Gaphas. It's people like you that make Gaphas such a great library. ### Why a Guideline? Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. ### What we are Looking For Gaphas is an open source project and we love to receive contributions from our community β€” you! There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into Gaphas itself. ### What we are not Looking For Please, don't use the issue tracker for support questions. Check whether your question can be answered on the [Gaphor Matrix Channel](https://matrix.to/#/#gaphor_Lobby:gitter.im). # Ground Rules ### Responsibilities * Ensure cross-platform compatibility for every change that's accepted. Windows, Mac, Debian & Ubuntu Linux. * Ensure that code that goes into core meets all requirements in this [PR Review Checklist](https://gist.github.com/audreyr/4feef90445b9680475f2). * Create issues for any major changes and enhancements that you wish to make. * Discuss things transparently and get community feedback. * Don't add any classes to the codebase unless absolutely needed. Err on the side of using functions. * Keep feature versions as small as possible, preferably one new feature per version. * Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See the [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/). # Your First Contribution Unsure where to begin contributing to Gaphas? You can start by looking through these `first-timers-only` and `up-for-grabs` issues: * [First-timers-only issues](https://github.com/gaphor/gaphas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Afirst-timers-only) - issues which should only require a few lines of code, and a test or two. * [Up-for-grabs issues](https://github.com/gaphor/gaphas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs) - issues which should be a bit more involved than `first-timers-only` issues. ### Is This Your First Open Source Contribution? Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). At this point, you're ready to make your changes! Feel free to ask for help; everyone is a beginner at first :smile_cat: If a maintainer asks you to "rebase" your PR, they're saying that a lot of code has changed, and that you need to update your branch so it's easier to merge. # Getting Started For something that is bigger than a one or two line fix: 1. Create your own fork of the code 2. Install all development dependencies using: ``` $ poetry install $ pre-commit install ``` If you haven't used poetry before, just run `pip install poetry`, and then run the commands above, it will do the correct thing. 3. Add tests for your changes, run the tests with `pytest`. 4. Do the changes in your fork. 5. If you like the change and think the project could use it: * Be sure you have the pre-commit hook installed above, it will ensure that [Ruff](https://docs.astral.sh/ruff/) is automatically run on any changes for consistent code formatting. * [Sign](https://help.github.com/articles/signing-commits/) your commits. * Note the Gaphas Code of Conduct. * Create a pull request. Small contributions such as fixing spelling errors, where the content is small enough to not be considered intellectual property, can be submitted by a contributor as a patch, without signing your commit. As a rule of thumb, changes are obvious fixes if they do not introduce any new functionality or creative thinking. As long as the change does not affect functionality, some likely examples include the following: * Spelling / grammar fixes * Typo correction, white space and formatting changes * Comment clean up * Bug fixes that change default return values or error codes stored in constants * Adding logging messages or debugging output * Changes to β€˜metadata’ files like pyproject.toml, .gitignore, build scripts, etc. * Moving source files from one directory or package to another # How to Report a Bug If you find a security vulnerability, do NOT open an issue. Email dan@yeaw.me instead. When filing an issue, make sure to answer the questions in the issue template. 1. What version are you using? 2. What operating system are you using? 3. What did you do? 4. What did you expect to see? 5. What did you see instead? # How to Suggest a Feature or Enhancement If you find yourself wishing for a feature that doesn't exist in Gaphas, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that Gaphas has today have been added because our users saw the need. Open an issue on our issues list on GitHub which describes the feature you would like to see, why you need it, and how it should work. # Code review process The core team looks at Pull Requests on a regular basis, you should expect a response within a week. After feedback has been given we expect responses within two weeks. After two weeks we may close the pull request if it isn't showing any activity. # Community You can chat with the Gaphas community on gitter: https://gitter.im/Gaphor/Lobby. python-gaphas-5.1.2/LICENSES/000077500000000000000000000000001512665300000155045ustar00rootroot00000000000000python-gaphas-5.1.2/LICENSES/Apache-2.0.txt000066400000000000000000000240501512665300000177240ustar00rootroot00000000000000Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. python-gaphas-5.1.2/NEWS.pre-3.0000066400000000000000000000062571512665300000160730ustar00rootroot000000000000002.1.2 ----- - Fix API compatibility: restore draw_all attribute with draw method 2.1.1 ----- - Allow for custom update context for Canvas - Render (GTK) background for the view - Allow FreeHandPainter to be a child of BoundingBoxPainter 2.1.0 ----- - Fix issue where port could not be updated when reconnecting two items - Documentation fixes - BoundingBoxPainter now takes an Item painter as its argument (composition over inheritance) 2.0.1 ----- - Fix issue where undo events for handle movements were not recorded 2.0.0 ----- - Drop support for Python 2.7 1.1.2 ----- - Fix issue with placing popovers in the new 1.1.1 ----- - Fix issue where views are not rendered 1.1.0 ----- - Remove dependency on simplegeneric and decorator - Speed up rendering by using a back-buffer - Deprecate Handle.x and Handle.y, use Handle.pos instead 1.0.0 ----- - Change license from LGPL 2.0 to Apache 2.0 - Port to Python 3 with support for 3.5, 3.6, and 3.7 - Python < 2.7 is no longer supported - Port from GTK+ 2 and PyGTK to GTK+ 3 with PyGObject - Migrate tests from Nose to PyTest with Tox - Reorganize project files - Overhaul the README - Add contributing guide and code of conduct - Adopt Black as code formatter - Add Continuous Integration with Travis and Read The Docs 0.7.2 ----- - Fix bug in calculating bounding box for rotated text - Few minor updates 0.7.1 ----- - Views no longer lose reference to canvas on unrealize() - bug fix in log message 0.7.0 ----- - Painters are bound to a specific view, like tools - Introduced aspects for finding items and handles - New feature: Guides, for aligning elements - Free hand drawing style 0.6.0 ----- - Handlers are no longer called recursively for observed methods/properties. - removed enable_dispatching() and disable_dispatching() calls. - Made aspect code simpler. - Moved disconnect code from tool to aspect, as stated in Aspect's docstring. - Fixed issues in connections. - Lot's of fixes and testing has been done on the undo mechanism. 0.5.0 ----- - Split tools in tools and aspects, separating the _what_ from the _how_. For this, a dependency to the simplegeneric module is introduced. - Renamed VariablePoint to Position. - Handle is no longer inheriting from VariablePoint/Position. - Handle connections are no longer registered on the handle, but are maintained in the Canvas instance. This makes for much easier querying (e.g. which elements are attached to some element). Added a Table class to support this functionality. - Added a timeout property on the @async decorator. The method is invoked the amount of milliseconds after the first invocation. 0.4.1 ------ - Call Item._set_canvas after matrix update - Verify if value changed before marking variable as dirty. 0.4.0 ------ - allow to define connectable parts of item's (ports feature) - implemented default connection tool (thanks to ports feature) - line segment tool implemented (code taken from gaphor) - implemented Item.constraint method to simplify item's constraint creation - The canvas (-view) is no longer tied to the (0, 0) position. Scrolling can be done quite fluidly with the new PanTool implementation. - API changes - use positions instead of "x, y" pairs in all method calls python-gaphas-5.1.2/README.md000066400000000000000000000244561512665300000155710ustar00rootroot00000000000000# Gaphas [![Build state](https://github.com/gaphor/gaphas/workflows/build/badge.svg)](https://github.com/gaphor/gaphas/actions) [![Maintainability](https://qlty.sh/gh/gaphor/projects/gaphas/maintainability.svg)](https://qlty.sh/gh/gaphor/projects/gaphas) [![Code Coverage](https://qlty.sh/gh/gaphor/projects/gaphas/coverage.svg)](https://qlty.sh/gh/gaphor/projects/gaphas) ![Docs build state](https://readthedocs.org/projects/gaphas/badge/?version=latest) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat)](https://github.com/RichardLitt/standard-readme) [![Matrix](https://img.shields.io/badge/chat-on%20Matrix-success)](https://matrix.to/#/#gaphor_Lobby:gitter.im) [![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors) > Gaphas is the diagramming widget library for Python. ![Gaphas Demo](https://raw.githubusercontent.com/gaphor/gaphas/main/docs/images/gaphas-demo.gif) Gaphas is a library that provides the user interface component (widget) for drawing diagrams. Diagrams can be drawn to screen and then easily exported to a variety of formats, including SVG and PDF. Want to build an app with chart-like diagrams? Then Gaphas is for you! Use this library to build a tree, network, flowchart, or other diagrams. This library is currently being used by [Gaphor](https://github.com/gaphor/gaphor) for UML drawing, [RAFCON](https://github.com/DLR-RM/RAFCON) for state-machine based robot control, and [ASCEND](http://ascend4.org/) for solving mathematical models. ## πŸ“‘ Table of Contents - [Background](#background) - [Install](#install) - [Usage](#usage) - [Contributing](#contributing) - [License](#license) ## πŸ“œ Background Gaphas was built to provide the foundational diagramming portions of [Gaphor](https://github.com/gaphor/gaphor). Since Gaphor is built on GTK and Cairo, [PyGObject](https://pygobject.readthedocs.io/) provides access to the GUI toolkit and [PyCairo](https://pycairo.readthedocs.io/) to the 2D graphics library. However, there wasn't a project that abstracted these technologies to easily create a diagramming tool. Hence, Gaphas was created as a library to allow others to create a diagramming tool using GTK and Cairo. Here is how it works: - Items (Canvas items) can be added to a Canvas. - The Canvas maintains the tree structure (parent-child relationships between items). - A constraint solver is used to maintain item constraints and inter-item constraints. - The item (and user) should not be bothered with things like bounding-box calculations. - Very modular--e.g., handle support could be swapped in and swapped out. - Rendering using Cairo. The main portions of the library include: - canvas - The main canvas class (container for Items). - items - Objects placed on a Canvas. - solver - A constraint solver to define the layout and connection of items. - gtkview - A view to be used in GTK applications that interacts with users with tools. - painters - The workers used to paint items. - tools - Tools are used to handle user events (such as mouse movement and button presses). - aspects - Provides an intermediate step between tools and items. Gaphas contains default implementations for `Canvas` and `Item`s. There are protocols in place to allow you to make your own canvas. ## πŸ’Ύ Install To install Gaphas, simply use pip: ```bash $ pip install gaphas ``` Use of a [virtual environment](https://virtualenv.pypa.io/en/latest/) is highly recommended. ### Development To setup a development environment with Linux: ```bash $ sudo apt-get install -y python3-dev python3-gi python3-gi-cairo gir1.2-gtk-4.0 libgirepository-2.0-dev libcairo2-dev $ pip install poetry $ poetry install ``` ## πŸ”¦ Usage API docs and tutorials can be found on [Read the Docs](https://gaphas.readthedocs.io). ## β™₯ Contributing Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
Arjan Molenaar
Arjan Molenaar

πŸ’» πŸ› πŸ“– πŸ‘€ πŸ’¬ πŸ”Œ
Dan Yeaw
Dan Yeaw

πŸ’» ⚠️ πŸ‘€ πŸ› πŸ’¬ πŸš‡ πŸ“–
wrobell
wrobell

πŸ’» ⚠️ πŸ‘€
Jean-Luc Stevens
Jean-Luc Stevens

πŸ’» πŸ› πŸ“–
Franz Steinmetz
Franz Steinmetz

πŸ’» πŸ›
Adrian Boguszewski
Adrian Boguszewski

πŸ’»
Rico Belder
Rico Belder

πŸ› πŸ‘€
Adam Boduch
Adam Boduch

πŸ›
Janet Jose
Janet Jose

πŸ“–
Chris Mayo
Chris Mayo

πŸ“–
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind are welcome! 1. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a [first-timers-only](https://github.com/gaphor/gaphas/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Afirst-timers-only) tag for issues that should be ideal for people who are not very familiar with the codebase yet. 2. Fork [the repository](https://github.com/gaphor/gaphas) on GitHub to start making your changes to the **main** branch (or branch off of it). 3. Write a test which shows that the bug was fixed or that the feature works as expected. 4. Send a pull request and bug the maintainers until it gets merged and published. :smile: See [the contributing file](CONTRIBUTING.md)! ## Β© License Copyright Β© Arjan Molenaar and Dan Yeaw Licensed under the [Apache License 2.0](LICENSES/Apache-2.0.txt). Summary: You can do what you like with Gaphas, as long as you include the required notices. This permissive license contains a patent license from the contributors of the code. python-gaphas-5.1.2/SECURITY.md000066400000000000000000000010331512665300000160650ustar00rootroot00000000000000# Security Policy ## Supported Versions We are currently supporting the latest released version of Gaphas. ## Reporting a Vulnerability Gaphas has GitHub's Private Security Vulnerability Reporting enabled. Please go to the Security tab to report security vulnerabilities. For more information, please see the [GitHub docs on privately reporting]( https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability). python-gaphas-5.1.2/docs/000077500000000000000000000000001512665300000152275ustar00rootroot00000000000000python-gaphas-5.1.2/docs/Makefile000066400000000000000000000011051512665300000166640ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) python-gaphas-5.1.2/docs/api.rst000066400000000000000000000011621512665300000165320ustar00rootroot00000000000000API reference ############# .. toctree:: :caption: View :maxdepth: 1 api/view api/model api/painters api/tools The central part for Gaphas is the View. That's the class that ensures stuff is displayed and can be interacted with. .. toctree:: :caption: Connections :maxdepth: 1 api/handles api/connections api/variable One of Gaphas' USP is it's the way it handles connections and the constraint solver. .. toctree:: :caption: Primitives :maxdepth: 1 api/matrix api/geometry Finally there are classes and modules that make up the building blocks on which Gaphas is built: python-gaphas-5.1.2/docs/api/000077500000000000000000000000001512665300000160005ustar00rootroot00000000000000python-gaphas-5.1.2/docs/api/connections.rst000066400000000000000000000002671512665300000210610ustar00rootroot00000000000000Connections =========== The ``Connections`` class can be used to manage any type of constraint within, and between items. .. autoclass:: gaphas.connections.Connections :members: python-gaphas-5.1.2/docs/api/geometry.rst000066400000000000000000000011371512665300000203670ustar00rootroot00000000000000Rectangle ========= .. autoclass:: gaphas.geometry.Rectangle :members: Geometry functions ================== .. autofunction:: gaphas.geometry.distance_point_point .. autofunction:: gaphas.geometry.distance_point_point_fast .. autofunction:: gaphas.geometry.distance_rectangle_point .. autofunction:: gaphas.geometry.point_on_rectangle .. autofunction:: gaphas.geometry.distance_line_point .. autofunction:: gaphas.geometry.intersect_line_line .. autofunction:: gaphas.geometry.rectangle_contains .. autofunction:: gaphas.geometry.rectangle_intersects .. autofunction:: gaphas.geometry.rectangle_clip python-gaphas-5.1.2/docs/api/handles.rst000066400000000000000000000020531512665300000201500ustar00rootroot00000000000000Handles and Ports ================= To connect one item to another, you need something to connect, and something to connect to. These roles are fulfilled by ``Handle`` and ``Port``. The Handle is an item you normally see on screen as a small square, either green or red. Although the actual shape depends on the Painter_ used. Ports represent the receiving side. A port decides if it wants a connection with a handle. If it does, a constraint can be created and this constraint will be managed by a Connections_ instance. It is not uncommon to create special ports to suite your application's behavior, whereas Handles are rarely subtyped. Handle ------ .. autoclass:: gaphas.connector.Handle :members: Port ---- The ``Port`` class. There are two default implementations: ``LinePort`` and ``PointPort``. .. autoclass:: gaphas.connector.Port :members: .. autoclass:: gaphas.connector.LinePort :members: .. autoclass:: gaphas.connector.PointPort :members: .. _Painter: painters.html#gaphas.painter.HandlePainter .. _Connections: connections.html python-gaphas-5.1.2/docs/api/matrix.rst000066400000000000000000000002241512665300000200340ustar00rootroot00000000000000Matrix ====== The ``Matrix`` class used to records item placement (translation), scale and skew. .. autoclass:: gaphas.matrix.Matrix :members: python-gaphas-5.1.2/docs/api/model.rst000066400000000000000000000013741512665300000176370ustar00rootroot00000000000000 Model ===== Protocols --------- Although ``gaphas.Canvas`` can be used as a default model, any class that adhere's to the Model protocol can be used as a model. .. autoclass:: gaphas.model.Model :members: An item should implement these methods, so it can be rendered by the View. Not that painters or tools can require additional methods. .. autoclass:: gaphas.item.Item :members: Default implementations ----------------------- Canvas ~~~~~~ The default implementation for a ``Model``, is a class called ``Canvas``. .. autoclass:: gaphas.canvas.Canvas :members: Items ~~~~~ Gaphas provides two default items, an box-like element and a line shape. .. autoclass:: gaphas.item.Element :members: .. autoclass:: gaphas.item.Line :members: python-gaphas-5.1.2/docs/api/painters.rst000066400000000000000000000015501512665300000203600ustar00rootroot00000000000000Painters ======== Painters are used to draw the view. Protocols --------- Each painter adheres to the ``Painter`` protocol. .. autoclass:: gaphas.painter.Painter :members: Some painters, such as ``FreeHandPainter`` and ``BoundingBoxPainter``, require a special painter protocol: .. autoclass:: gaphas.painter.painter.ItemPainterType :members: Default implementations ----------------------- .. autoclass:: gaphas.painter.PainterChain :members: append, prepend .. autoclass:: gaphas.painter.ItemPainter .. autoclass:: gaphas.painter.HandlePainter .. autoclass:: gaphas.painter.BoundingBoxPainter .. autoclass:: gaphas.painter.FreeHandPainter Rubberband tool --------------- A special painter is used to display rubberband selection. This painter shares some state with the rubberband tool. .. autoclass:: gaphas.tool.rubberband.RubberbandPainter python-gaphas-5.1.2/docs/api/tools.rst000066400000000000000000000007251512665300000176760ustar00rootroot00000000000000Tools ===== Tools are used to interact with the view. Each tool is basically a function that produces a `Gtk.EventController`_. The event controllers are already configured. .. autofunction:: gaphas.tool.hover_tool .. autofunction:: gaphas.tool.item_tool .. autofunction:: gaphas.tool.placement_tool .. autofunction:: gaphas.tool.rubberband_tool .. autofunction:: gaphas.tool.zoom_tool .. _Gtk.EventController: https://docs.gtk.org/gtk4/class.EventController.html python-gaphas-5.1.2/docs/api/variable.rst000066400000000000000000000016711512665300000203240ustar00rootroot00000000000000Variables and Position ====================== The most basic class for a solvable value is ``Variable``. It acts a lot like a ``float``, which makes it easy to work with. Next to that there's Position, which is a coordinate ``(x, y)`` defined by two variables. To support connections between variables, a ``MatrixProjection`` class is available. It translates a position to a common coordinate space, based on ``Item.matrix_i2c``. Normally, it's only ``Ports`` that deal with item-to-common translation of positions. .. autoclass:: gaphas.solver.Variable :members: Variables can have different strengths. The higher the number, the stronger the variable. Variables can be ``VERY_WEAK`` (0), up to ``REQUIRED`` (100). Other constants are ``WEAK`` (10) ``NORMAL`` (20) ``STRONG`` (30), and ``VERY_STRONG`` (40). .. autofunction:: gaphas.solver.variable .. autoclass:: gaphas.position.Position .. autoclass:: gaphas.position.MatrixProjection python-gaphas-5.1.2/docs/api/view.rst000066400000000000000000000002331512665300000175020ustar00rootroot00000000000000View ==== View is the central class in Gaphas. It shows your diagram and allows you to interact with it. .. autoclass:: gaphas.view.GtkView :members: python-gaphas-5.1.2/docs/conf.py000066400000000000000000000125131512665300000165300ustar00rootroot00000000000000# # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. from __future__ import annotations # -- Project information ----------------------------------------------------- project = "Gaphas" copyright = "2006, Arjan J. Molenaar" author = "Arjan J. Molenaar" # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.doctest", "sphinx.ext.coverage", "sphinx.ext.viewcode", "sphinx.ext.napoleon", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = ".rst" # The master toctree document. master_doc = "index" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [ "_build", "Thumbs.db", ".DS_Store", "constraints.rst", "comparison.rst", "undo_tests.rst", "requirements.txt", ] # The name of the Pygments (syntax highlighting) style to use. pygments_style = None autodoc_member_order = "bysource" autodoc_mock_imports = ["cairo", "gi.repository.Gtk", "gi.repository.Gdk"] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "furo" html_title = "Gaphas" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ["_static"] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = "Gaphasdoc" # -- Options for LaTeX output ------------------------------------------------ latex_elements: dict[str, str] = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [(master_doc, "Gaphas.tex", "Gaphas Documentation", author, "manual")] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "gaphas", "Gaphas Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( master_doc, "Gaphas", "Gaphas Documentation", author, "Gaphas", "One line description of project.", "Miscellaneous", ) ] # -- Options for Epub output ------------------------------------------------- # Bibliographic Dublin Core info. epub_title = project # The unique identifier of the text. This can be a ISBN number # or the project homepage. # # epub_identifier = '' # A unique identification for the text. # # epub_uid = '' # A list of files that should not be packed into the epub file. epub_exclude_files = ["search.html"] # -- Extension configuration ------------------------------------------------- python-gaphas-5.1.2/docs/connectors.rst000066400000000000000000000032121512665300000201340ustar00rootroot00000000000000Connections =========== A Port defines a connectable part of an item. Handles can connect to ports to make connections between items. Constraints ----------- Diagram items can have internal constraints, which can be used to position item's ports within an item itself. For example, `Element` item could create constraints to position ports over its edges of rectanglular area. The result is duplication of constraints as `Element` already constraints position of handles to keep them in a rectangle. For example, a horizontal line could be implemented like:: class HorizontalLine(gaphas.item.Item): def __init__(self, connections: gaphas.connections.Connections): super(HorizontalLine, self).__init__() self.start = Handle() self.end = Handle() self.port = LinePort(self.start.pos, self.end.pos) connections.add_constraint(self, constraint(horizontal=(self.start.pos, self.end.pos))) Connections ----------- Connection between two items is established by creating a constraint between handle's position and port's positions (positions are constraint solver variables). To create a constraint between two items, the constraint needs a common coordinate space (each item has it's own origin coordinate). This can be done with the `gaphas.position.MatrixProjection` class, which translates coordinates to a common ("canvas") coordinate space where they can be used to connect two different items. Examples of ports can be found in Gaphas and Gaphor source code - `gaphas.item.Line` and `gaphas.item.Element` classes - Gaphor interface and lifeline items have own specific ports python-gaphas-5.1.2/docs/constraints.rst000066400000000000000000000037001512665300000203300ustar00rootroot00000000000000Constraints =========== Introduction ------------ There are problems related to canvas items, which can be solved in `declarative way `_ allowing for simpler and less error prone implementation of canvas item. For example, if an item should be a rectangle, then it could be declared that - bottom-right vertex should be below and on the right side of top-left vertex - two top rectangle vertices should be always at the same y-axis - two left rectangle vertices should be always at the same x-axis - ... Above rules are constraints, which need to be applied to a rectangular item. The rules can be satisfied (constraints can be solved) using `constraint solver `_. Gaphas implements its own constraint solver (`gaphas.solver.Solver`). Items can be constrained using APIs defined in `Connections` class. Constraints API --------------- The `Connections` class' constraints API supports adding a constraint to constraint solver. Instance of a constraint has to be created and then added using `Canvas.add_constraint` method. For example, it allows to declare that two variables should be equal. The `Item` class constraint API is more abstract, it allows to constraint positions, i.e. - positions of two item handles should be on the same x-axis - position should be always on a line If this API does not provide some constraint declaration, then one can fallback to `Canvas` class constraint API. Further Reading --------------- Theory and examples related to constraint solving - http://en.wikipedia.org/wiki/Declarative_programming - http://en.wikipedia.org/wiki/Constraint_satisfaction_problem - http://norvig.com/sudoku.html There are other projects providing constraint solvers - http://adaptagrams.sourceforge.net/ - http://minion.sourceforge.net/ - http://labix.org/python-constraint - http://www.cs.washington.edu/research/constraints/cassowary/ python-gaphas-5.1.2/docs/diagram.rst000066400000000000000000000013451512665300000173700ustar00rootroot00000000000000Class diagram ============= This class diagram describes the basic layout of Gaphas. The central class is ``GtkView``. It takes a model. A default implementation is provided by `gaphas.Canvas`. A view is rendered by Painters. Interaction is handled by Tools. .. image:: images/view.png :align: center Painting is done by painters. Each painter will paint a layer of the canvas. .. image:: images/painter.png :align: center Besides the view, there is constraint based connection management. Constraints can be used within an item, and to connect different items. .. image:: images/connections.png :align: center A default model and item implementations, a line and an element. .. image:: images/canvas.png :align: center python-gaphas-5.1.2/docs/gaphas-canvas.png000066400000000000000000002741231512665300000204620ustar00rootroot00000000000000‰PNG  IHDRη’‘ΞbKGD ½§“ IDATxœμwΈά<Έ˜™ν[ lIہuΩ{Λ³ν΅ΐ¦΄½X“½B‘tόΖ΄½X••[•φlΦ§νΑšt 5ΧΆQ§±˜ ,σ@^šΆη§νιυβTv~Ϊ·$mΟ–eϋ΅yν2›€Yτχy[\ <›ΖίάcŒ1ΖS,Ξ‡Ÿ_υ»= <`b ³{pΝ-ΐ½ΐ=i}oΕλ{²Χ±ΞλΉ=w“½žœέ/ΓcŒ1ΖΣ=fŽ]Δ 8KΣzΰl.`g λq°ˆβޘ,Μή[œΚƒάζη—Bpr©‡B$σ)ζa—―½0]s¬kΟBVν ί ιΥiY‡¬ξ+υ~]Ϊ^—–UH@―Kλ•YΉεi{-^γeEZ/oYͺϋœ †ŸycŒ1Ζcj‰;κΓΟ.i}δ“-»Νlηr/₯˜“έ‰ϋϋTaCZΟhYΚcŒ1ΖΣ,Ξ‡›`Άžα ·‰F>θƒ ½&ζώ[œcŒ1ΖSC¦χ»¦§μ‚\ΚομwELί‰ €3ΖcŒ1¦†Xœ7Ϋ§υ½}­…©ηΖcŒ1ΖΤ‹σα&ζΟoYΚLμΦnŒ1ΖcL±8nςτbfjβά–scŒ1ΖcjˆΕωpcqn‚pk·εάcŒ1Ƙbq>ά¬E’l>Eξp35ρœscŒ1ΖcjŒΕωπ³*­χ΅¦ίxΞΉ1ΖcŒ15Ζβ|ψ±k»[΍1ΖcŒ©5ηΓOXΞ—φ΅¦ίΨrnŒ1ΖcL±8~l97`qnŒ1ΖcL­±8~V€΅ΕωΤfsZ;0 1ΖcŒ15Δβ|ψY›ΦσϋZ ΣoΆ₯΅ŸycŒ1Ζcjˆ;κΓΟϊ΄žΧΧZ˜~γ€pΖcŒ1ΖΤ‹σαΗβά€ηœcŒ1ΖSk,Ξ‡Ÿ i=·―΅0ύΖ–scŒ1ΖcjŒΕωπcΛΉΒrnqnŒ1ΖcL ±8~¦‚εό*`8­Ου¨3a9·[»1ΖcŒ15Δβ|ψ™¨εό\$|Gυu p=πUΰ έΰρBŠοcΨ―ΏΥi»΅cŒ1ΖSc,Ξ‡Ÿηέ°œO@"υgΐ»Ϊ8nv݊G’Α‡Wφψ:GρΊ½ώΖΒαŒ1ΖcŒ©1ηΓOΈ΅OtΞω=ιχ^ܜφš• σ/ ά\ή{π{`9°9½χ $φABw („˜=+νϋ|z½ ΝΰΉiί₯ι˜“+κρeΰύΐνιΊ_eε§#€;R?ŸŽ½Άτμ‘}ΦKϊF[£[}ӁIe6+€oɎλ{ΆœcŒ1ΖcLyŠgŒσψpkki£(\»Ώ‘νaΊ‰θΣ>€Χίώ ώΰOΐ,$ό㜏IΗά–^!½~Fz½ Ψ‘tΝΣ*κ±ΈψMvξdεΎ–νΏX–*qώφ΄^ΰΑ©#ΐ3KεZ}'₯χ6₯ο!Κφjσ{q|mœΗcŒ1ΖcŒ™ΟB’μœqίLœƒ,Ν#HH!67Nϋζ€uˆι‘}.…0>(½wczύ&d)V¦υNΘ=\YqΝΣ*φ-OΧψIΪχλτz/ ύ™΄o·tL•8cΪBz}azύ­RΉfίΑήΩυώ)νŸ\“φ}6νkη{κ”η₯γΟηρΖcŒ1Ƙb·φα§[nνUΔύ3RρήωΐΕi{cZ†άΛοBVΰάβΎ[Z_Φ§νΓgϋΞo³Žηw§νzη΄ή˜–ΆΏ’Φ·ηUœηρH\|1­OOλgP ”―fΧ;ƒΒ²ΏoΪ·Z·σ=uŠηœcŒ1ΖSc7­£Ξ³€/Sώ¦eΫ'#χψœΫh{κΟ97ΖcŒ1¦ΖΈ£>όL4•ZΞ\$ΘŸν?±’lYμζVκnž_q\XΔwGΧnGœκ0‚"ΕO”p?Ÿ†άΜ…,Σ‡–Κ-Hu –Tœλ₯Œηεοΰ·ΩφuΐG²Χ ί¨έο©Sl97ΖcŒ1¦ΖΨ­}ψι–[ϋφHθΉ€ο‘φΏ0‹Λ(β)((Ϋg+ΚέLα~ΎψeΪώ°0m_Ιh«σxΈ83mΏψ3 ‚ζš_œ›ŽΧ  p—‘t—«ˆύr•XV~ πΐΏΟLϋž|oœΧŸ,ζ₯΅ΕΉ1ΖcŒ1ΖτCQ °χ»"cp π…>]{~ZΟ~ŽΚuΒχ¨žΟ^'>ξƒΧχ»"ΖcŒ1ƘΡ8 άπ3(–σί"wυιΉΞ'‹Oϋ#Χϊ―R”k‡ωΐW¨Ώ[»S©cŒ1ΖSc,Ξ‡ŸA˜s|ΎOΧ}εŽ]‡}έq@8cŒ1ΖcjŒηœ?ƒb97½ΕβάcŒ1Ƙcq>ό„8ΛΉιgŒ1ΖcL±[ϋπ0ηS[΍1ΖLUάάΙδ{ΞGg璁ςΩΐ`°M?\ L–¦c–¦Χ‹Σϋ‹PŸ}£ΣΞnEYf‚MΐΪμυ:” 6XEcŸpyΆ½X½ή˜ŽΦ¦σ+)β+0ΖL‹σαgVZoξk-LΏY–Φώγ4Ζ3ΥψmZoξJΛ-i}+ν±Ύ Έ‰ιeH(/-m7Ϋ7BP/€θƒME6£τ³ΑƒAo~=‰υ2¦ΦXœ?ƒΞτŽϊ―}­…1Ζ3ωΌx π7ΐ.iyΨ$];DiX‘C΄†Ε{²@CaΕ‹tXΉΧ€γΚVp(,οAXζƒ°ά1x,ΛΆg"+}Φώ <ΰ°„ΒCszzΜ*»ožΧF9c¦ηÏΒ€ΣϊξΎΦΒcŒ™|ŽG)O―GƒΥΫgλXv,νΫ€ΌΝͺ–εMφ―₯pύS‰ς Α<Š)vΞφ˜ΜJSw,Ξ‡[ΞΝ\τΉ‘F3cŒ1fͺπ(ΰΜ~Wb ±‰ΖωιΛKοΗ9H7’A‘ϋ7φΊβΖcLˆωζΫυ΅&'ϊ£+[–2fŠaq>ό\ŸΦ{¦₯]BŒ†5Šœ##Ο(Fvη3Ζ3υؐΦηυΑ–sc*°8~F€ ϋ]‰IfUZ–g£ϋό$ΰ‰ΐƒ€Ÿ=¬αΉEπ KΫΉ§@x„—Aξy° ν|`$KŒ1Ζ3q6¦΅Εy}°εάc¦οDBψF$˜‹Dσπά>ΦΛcŒ1“Η7Πσϊ]σ< ύ&ΣοŠS'œJΝ +ϋώ£‘UϊWΐGΣϋ';υ§jΖcŒ™DμΦ^?"ΞΞκ–₯Œ™bXœ›ad:p r=πγμ½wW‘t*ŸόͺcŒ1f’±[{ύˆŒAN£fL†ΕΉFή<E'[齍ΐ‘hŽχ ±{»1Ζ3μ„8ŸΫ²”™Lβ·ΨΨ²”1S ‹s3l<xOΪ~%ΥΡΙ/ŽOΫ' +Ί1Ζc†»΅ΧηZ–2fŠaqn†‰pgŸœό EΩγ€ί!aώ±žΧΜcŒ1ύΒ–σϊ%Šσ}Ρ΄Δ§u·:ΖcΊΝλQΈΫh/ωΓΡφpXλeŒ1Ƙώρτ_žώVΓd‡~“w΅Qv.πb”x$-WΣzV;cŒ1bOρsxNΗ½#s;°]χ«eŒ1Ƙ>σVτ_Ÿύˆω?ŽGΏΙ›[”y π!ΰ. QΎϋ}x―+hŒ1f|L~ˆν―vxμLΰβtμ—Ί\/cŒ1ΖτŸAσ«ΰqϊά§υΉU|Υν ₯ύ³ΓQ¦m’ό”wΑ$ΦΡcΜ885άw3ΎάεϋλθάκnŒ1ΖT±M―ZμμΠ€ΜnΐI¬ΧTε5θ?ώ³ήϋkΆοΔ΄οΪήW­i}bΩ†ΌϋΞžάαΉ&"Ξ{ύ|.˜τzod%Ώ“β³―JεφοQŒ©3ϋ]c&Θn¨1x-r}κ”kw|ψpoWjgŒ1¦WΜAΒ6,i Υ `-£EΕƒCφRδu5Xό8»TώΙHΤ-I―η’€£ ‘τŽRω—ŸoRΧΟ―(ν{pzφzmZΦgo/•ίψ'”…d]ZV’)]7W7ΉΆΜhν!Ng»€ε©ΐίη΅yŽG’`Ή[{QΑq0Ψ”Άγ·x(²’?…bω7δšΙ¬`™‡ΪΉΩvΎžΜ―XΟ¦hΫςυ,`aΕ`9ΊV Α•θXlAmΖfτέΖzj6’ΆeΚAΏ>m―Λήsϊ»bqnΟ‘NΦΤ°#­|§Qm₯˜²]Ρ<¨Wv·šΖcΊΜ hnό"pTiί£ΡF_b΄8ίxn“ςUBxsΆ½–B„,§:­η6ΰΤ_Œ:ά X•₯ύQΐ[šΤ§JόΏe#Y“-+ϊ‡(•h΁G |”_³‰φ™Λθ(ά»»SŒψpi©ό!ΐ£qP$‚½~‡Ζ €W^:ο’τϊ;ιu;βόrŠωΜF}Πχy»o^ެ½Π ώΫ€kRΩkΣ±_nŽEχΗ‡€SO£Α™»q όY@F‚Έώψ^ΊφHœΏ ΉοDΩr0ν-θϋ}§CγσpUΪχΰΟιsΜMη5ϊΝ»ρΔuNnMeW’ϋ ŠΎΨkΣzphZž>σ‘r5–«Π\™ŽY‘κ׎ …j<‘u•ΠZΡΖ}šφ‚ϊ™6±87ƒΞγΣz!š‹Τ φμyŒ1ΖτŽ5Hά„e-·θό±’ό΅ΘEΗ>:νΧT”Ώ‰ŸΦa5Ή—ω2Υ"«_₯1NΚ"Τα_@΅Ύ‰Ÿπ˜ŸŽY \VQ~²ϊ/©xοζŠ}OEήcUœˆ„[Ξ+R}£ξ,FB9ηΕie΄8$Ν#naτw=M!¨"R·#’Dυ;!ΡyEΪwZŸˆπ7#‘|_ΰ™h0α‘ΐ ΩΉKΧ܌>ŠΎ·’ϋοώH¬_D!¨«¨ŠJώx4Θρ+t„“φGΣυ6W“σ$†oDΏΟMΘc£›ίΑᩞ‘Ρ⺐F¦£Αˆͺ©a ·:W­Γrέl]ΆtΗ:Ϊ°|b…1j:jb==³1ˆχ²e>žη`ˆA†”ˆΑΔηaqήU,ΞΝ σh 7ΕhΐΚΜAβ‘K`U™œ‹ΊV;cŒ1έ`›€Χ₯}g3ΪΪ݊߀₯]ώ’–v»HKVSt«ψ]ZΪε“Θr»0[–’y•ό3pV*S>fyEωVbΈκ»ΈΥ?IX5‘zpαBe=‰zό‘’ό©ΐ·Kη σΐ3hΟr~$ΊΧŽAbυ1Ω{{Sx(Ό8‰ί£όΫoBS!‚$Δ7’ΟτΎH(]‹ϊβOdτo²}ͺΜ¬ή#hΰ…hžόŽθ7έψϊMώψεŸs5°ά?AΣ8ž‚Δy7Ώƒ™ΐγPπέόϋΑƒ―O@^±WHτ_GαΪΫα ƒB1E₯J–…(χ_Έkwέι1ΓΖ|tO;f†1¦cζ‘?΄uc4ΖSKf£vάsλΓb$wDΒ¨ΞQ΄ŸŠξŸWΌΧI@Έ¬­Όό*•»6½ώvvμ=iί²}›Ύ¨¨Oξ4!w4ςΰ¨ͺΗα©LU@ΈΨχΝlίΙiߍ]όβ:?’šσΣϋODbϊPΰλHœΗΉCήΓjMtnΒ}λcΛΉ™ D ”}­…1Ƙρ·Nζ=›ή²ŠΒB]wbPgvΛRc“»—ŸΜθΰ±·•^ηa)Ύ'Ϋ7½΄ΞΉ‡ζ’t?$ž§!o‡o!Kϋ§ϋντwςί.ϊIUξσe:ύͺ¦€@1Ε`€8/-»£yυ―„ζιόš–ς&ξ₯bΊΓjδ2œv ‹s3ˆ?ͺ??cŒ1υ'D•;€f<Δ}Σn΄φ°–½~›m_|${}EΰΊ^³…HώWδ^όό._£[ίA3!βΌόLߊσώ7ς8Ο;<-@S>O£·ƒ™|bΞR”Οt‹3Ψ–ΦΆœcΜ`βά–s3:ηαΚ½GΪώ5p?hπΤτή‡ΡΌξο"‘z s³{Ιe†‡S€PΓ}"τϊ;λ™kϊσΡ<χχ#«|XΣ/lσ:¦w„χ…ηw‹s3ˆΉKΣhΟeΛcL½°87‘Sq~:Κ5Ώ₯{4…Eψhd­ώ=²‚ϊ§ yα“Αu(5Ϊ ΐ“€§‘Τfέ€ΧίANΪι—έΌ <ψΝΣ"šΙ#·œcLGD€[ύ1fπxjΓ«’t3@χO«tefrΉύ&ϋχ»"fά|ύ†OοwE† Ο97S…ά΅}k«‚ΖcjΗέ(­S«TcΖ4£SΛΉι=[ΪZdp±εΌψ0S…3ƘΑe9ŠΤlΜx°8―烏Εy°P1S…°œϋž7Ζc¦έJ₯fΊG€–›ΥΧZ˜‰`qή,TΜTΑΉΞ1Ƙ©‰-ηυΓ–σΑΗβΌXœ›©‚έڍ1Ƙ©Ι&Έj6ΞΪRl9|,Ξ{€…Š™*8ΧΉ1Ζ .E©“^έd‰ΑiX Φ[Ξ‹σ`qn¦ ΆœcΜΰ²7Κ­όΤq{πιξV§Χ2aΧφzaq>ψXœχ?fͺ`ΛΉ1Ζ .!¨6γ؟χv±.ΓΖwλ7φ»"=f#°έKޒo1κοΜDŸ`…[ˆ©ΉΐΌ΄½0f ΣΎ…ιυττ>©όά΄½X¬V¦νΥi½*ν[‘νېΥΡnνƒΟϊ΄^Ψ²”ι‹s3U°εάc—ˆ²½±e©j>Ω͊˜%ιΏ‰Dγz”’oCΪ^‘ΆΧ₯χ7k)Dε$2Χ§eq:_.V«nˆb€ei=;ν‡jœ‹ζΪ3²kΞ§°ZŠχœ΄ΏΞl’ξρ],j^άԜΈο7΄,e:ΒβάL­έc—7Ν,ηΣ‘HΉ—BΔ,Oοά›^Ÿ\ŽΡ‘Θϊwp2πQΰΕH„½8-»ΖyΐΉŸŒΔΠ)ΐΫ(„_™iΐΏ―vn>œZ:οxκΣξΉ―BθΓR=OގζaŸ<#•}CZο μ | mo^άμܝΚζΫu'ΔμγϋZ‹Ιa5ΊΆ"! tˆΑ­x66¦ύ€r[‘E{MΪ·&½ή†,@Ή[F1@ΫσΠσ8?m/)mοAρLoΖ *!ΞΗ3hjš`qn¦ ΞsnŒ1ƒK+·φΩΐ—Ο?ΞD’φg-Ξχr47ό ΐ‘ΘΊώΐΟ‘x{&pr‰Kvά+—/Aσΰά™WΕ{Έ~ΈD‚~π Φ§έsΌx-°pπ;ΰlΰ(`έΪ—¦σ ͺGSό~8 Y OΎ€\γλΝH>'m/@br~Ϊ^D!"€ν…i{›±=ŸBτζbu%ϊžΆPΈΞη’xΩ„¬ςPΰ‘τ>4ŠζΪΝr\3?η πtΩ­}p±εά3nG|χοwEŒ1ΖtΜ«PώΉώEH  Ψ Έψ"Ζ‡rΆσ€σKηΉψ~φzpG”Ž»°tά±Θ*_u­yH,=­tΜ»N°>œϋ;₯2g'd―Ώ |<{½ϊχ₯š‡7#Ρp+YuηrτΉήοŠ@ƒM#hΐΛ &/FΏαWϊ]‘aΒ–s3U°εάc—Ÿ#!|Ei€E‘ά όxκ0Άβλہ˲Χ#ΐHπη”―9r)_LaI φAΦ2š?M°>œϋΪ뻁έ*Ž nΎ\ό ~|#]ΰJdΝΏxpHΪވIꊣ΅Χ Gk|βY²εΌ‹X¨˜©Bό xΞΉ1Ζ WŸ~QΪ.‡χKΫOFσYΗ’<Οu€ΙΎr?©μ‚;›ζΔ±E–ο|Ω{‚υιδά[M«ώίšŸώ$4ψp$πGδΪšΞqπwθ?φΚη¬ηυΒΡΪ»΅χV™©BXQ< eŒ1ΓΓϋ‘%ψBdΝ½YΩBξΦέζq₯Χ·1Ϊj²θ―GσΕ―κr=ΊyξMT\&-Η!„.Fž ―Cσ㟠Ό8˜ΖΉωu$ϊΌγIΗgΊ-烏Εyπa¦ ŽΦnŒ1ΓΙη€»PL‘O₯νϋqΎ'π_随ήΌ―IΩu©μΫQP―’ΉβCΦΒ‰€xλζΉoD{’ΰd»ΟΎ‡φEΦψΟ§ςKΏ ΉΦΜ`䑏4cƒ4m6°}Ε²CΆ½€ΡΑΰ"ς:οEΉ‰Ό—¬+ΏΧ.烏Εyπa¦ ΞsnŒ1ΓΛ·²ν3{xSPΤξKΡΚIΐΗZ”±―>ŒDΣΐw‘.έ:χ'Ρԁωΐώx5Šf~k*sJ*ώμΨγΖWυΎσυΟD^yΚ°΅HŒ6‹˜b·Yj²VQΨ«’¬ΟvAΣ1ξ“-χvMuݞΑΜήJΈηοEά»΅όϋˆ IDAT.1EΔ©ΤΊΘ΄~Wΐ˜Iβw(ΝΜώh1ƘΑaΑ Q*³~p ’φΦ>]ίLŒεh`eXΌbΉ§΄Ύ ΜBΟF°˜ΒSp6²K( ­ή›Cαm0Φ{KΏ¦xƒ5Θc Žή Όyς˜.`ΛΉ™*Ψ­έc—­(Ϊ,dΡ΅₯ΖtJĞy<²`ηΒt!Ί·¦# rٝ—ΆCμΞ€°fΟ§°.KλvΟΉ Eδ3JKχ—lΉ yDάΛ`ΏϿ7hξω{/GΟ²΅Θΰb·φΰΒLœJΝc›UΘΥw1 gL'ΜEύWTG°7έabmy“rOMkk‘ΑΕβΌψ0S[΍1f°Y‰Δωϊ#ΞνΓ5Mw˜†„Δ,ΜλB„σœσΑΕβΌXœ›©BXΞ-ΞΝTgšΗΈe¬‚¦₯ΐΞ(JςŽ(`ΣNQ“Χ!ρΈ:-kλ|ίjdύΰQ¦3"¨Φ’–₯ŒΝ<$Π)Rϋ°yΞ­E‹σΰΒLl97F”Sε‹‘ύ<刼Ήΰά€ζtΉ[cD+†ΖΘΘΠύ8p<Φ{kQη{Ρ1/4‚ΕάИ7Ί,­S̝‡:1OtI:f‡΄Μ¦»¬‘ρ«€·?ξς5† ‹s3^bžσΊ–₯ΜdβTjƒΕyπa¦ žsnŒxŠŒU³(‚QΪ6«€;€Ώ"—κΏf―Š£AX–€%ί· ,€1ΊςηQnnΣ‹s3^:ΝqƒwωρόmQίΛΠς¨ζε(κ1ψβ  ͺ" ―@œλΡ η†l;φ―@ƒλΡ3iβκFXΞνΦ>ΈΔύκ]ΔβάLl97F|x'zvF€\—;“εcž’§άΉ,§ΧΙ;’”“G=ξΖuΦ‘η|²Θ¬¦°ξ‡Υ=Ό–Sδ+ο€°θ‡Λœ'„x·; ΡηΏp1{SΝg€o£γΖtB<_ώ”ΆΛiΔ1ΌύβhοΦ φξžl‰ΗςΎΨžƒΪζθ;‹οi)j›—2Ϊ),bP#މ‹eΘ# ,Ξ[Ξ{ΐ°6BΖ”ρœscΔ ΤYڊυ@σhΊ¦w¬IKΈΩΊƒ:6vϋ7γεF”ΊlW`―6Κ‡˜ ςi5ΠΨf–§ψδSƒb 0Θ­Ψει9ω”¨ŽM±‰ήyHΰΖφR$„η!9Άg§ςuσŒΪ œΥοJ˜qcqή,ΞΝT!ώ(νΦn¦:ž{Y/Β΅³Ϋsڍ1›ύ‘w[Ά/·±†βy6Β²;ΫgKΔΥΨΎbφ©Ρb`!χ.Ϊ–Φ1˜ίi X¬γΨ;€ΫzψΉMo±8οηfͺ`ΛΉ1"άΑΧ·,e&‹°’ΩrnLoΉ3-S‘˜Ξc/)ΣM,Ξ{€­ˆfͺ0ΥηœO§q±™Ί„εάβΌlAƒ‡3ρ²1ƘΑΑβΌΨrn¦ Γ­=ζœν μF1Ÿ,Ϋ;’η}ΕθωrδNv{‹Χ·γ|ΜΓ†έΪλΗδΦ> G½mΕKΗ_.μs]Œ1fͺ ,Ξ»ˆΕy}9x3²ψ§qTlέ”ΚALΚsͺΚω‡Λ)6b>P$)/)Ÿ»₯@₯|ξ¬Ή¨1fP°K{¦ΘΥΓHtD¦‚87υ'<,Ξ»΅Χ[ΞΫΓ–scŒ©η=μzs²-ΞMaλή`c·φϊaΛy{|8 ΈΊί1Ƙ)ΞTςξT,ΞλMˆs[ LΛΉΔ`c·φϊၯφψaΏ+`Œ1pŽσžaq^oμΦnκ„ηœvk―1k·vczΓ¦N_*‚ΰF–œΕ¨mΙχ-Iϋ5ΩuͺφA‘yŠΉ‘…Š`ΉyάœΩi ’›§Οl7yΆšΘ|“θ-§Τ5“‹½{{„;ΩυΖ7Ύ©žs>Ψr^?Ζc9Ÿ<eͺψxΧkdΜpqp$…Xμfv–vS§ζD֘…z…Hžžρ؞‹²Π„^–ΦσώΉ©\9³ΝTa9ϊž ό¦Οu™*X£τw²λΛ4ΤQΑ‘iM=°λνpΰ9ηυ£Λω>ΐQΐ+€νQ§Λ(ε¦1¦š_"q>›β9Ϋq’λεT±έ&bP`uΊφJŠƒͺ}«ΎU +ΣΎΥ4Zͺc`ŠΤΆs(ώ_–  Σ‘ͺЁƒYhPŠο"Oq»0•©Ϊ—§ΖΝSπ.KΛ›η΅ω=™‰α9η=ΒβΌΎxΎΉ©žs>Ψr^?Ζψ +ωΡΐγ²ύΏ>GcΚa棨Cώΐ=}‹,B ~ ψ!CπMCB qβ1\ΊC€†ΐœžΚ‚Δ!"4ΔcX»σ°ά―A‚w°!ΌœB<―HΫλ(DυΪtμ†t5L=ƒΞtΰΩΐΩbήτ[Ξ{„Εy}ρ|sS7<η|8πœσϊΡΜrώ`ΰ₯VrPGό ΰΰςI©]}x>°;πή~WΔ ! οnλSb0 άαMwΨܞΆ·*hΊŠΕyp'»Ύψ¦7uΓnνÁέΪΗΗ9ΐ-ΐ±=8wώlΝž‰¬δOAΦ<€ί‘y³_aκXΚΛ8ΟΉ/a_Ω²ToΩ„οέ^±*­m9Ÿ<¬Sz„Εy}ρMoκ†Β ƒμΦώ]ΰzΰύH—‰ϋ?';€Χƒj%Ή’KΠΰ₯χw^€ξΑεin»«€?69o N5·]3qΒrήOqnzGˆs[Ξ'λ”αNv}±…ΐΤ [Ξ‡ƒ:Ά-³©W}&›ƒΣϊΣz πΰN4―΅,Μ·ώ“"j4‘’WŸ-•Ÿ<ƒΖHΤ€ν­ΐe₯ςː;ύ,Šω³1w πo₯ς~Κ,€θ΄\ μWQfζ€άωsφ. θxOε{Ōη«Z–2ƒŠ-瓏σœ›)ΗΎ¨#uMΏ+bLβEθžόJΏ+b&Δ ίρ™8Ηt$°@ΒmYφήyH~ΝνΌ8>“—ω4pŠ2~>θζn~ <9;ζ΄Tο|Ω§γ@ΦΫAΒo#p+π_ΩϋνœγœTη`Η&۝2Ή©—?[,7TsΛοΩ’|••zοεTQώ~₯2[{›Πo]f)π δ¦uΰ{ΐOK€oV”DvξίSΈϊΣ.?AχΟ“ϊ]Σ¦£Ήη[pϋ0YΌ =S'τ»"Γ†-ηυΕξ"¦nΨr>Δ|ε-K5g6ޟ~œ‰’h,+σJΰeΐKΠϋ ²4+s4π괞 ΌΉuΏΈx π}4Py#JΆ£έΪkŒγ@Δ^,Ύ 1}@vޱ]Ε'³˜<ψr»ο”Mΐ7Pš§ε[€‹ω§‘NPp/p 9#štUσ ©ydiRω;*Κί|,Υ-’?‡•Ύͺό-ΐR™΅Œ=ebπ†1Κδ\…f’Ÿ‘–₯έΪ‡›m¨νYˆώΫΦτ·:Sλ3εψ[ΤΉΈί1&ρltO~«ί1βτ;ΎbΗ.BBϋkΐNΐ…ΐiθ=/νΟ9 ΈΌLnQ‹d^§iΘJš»?·τΊγζ#—οfάΪ½vΩrώ0ΰf$’@Φψ£š\c,>~“7‡"kς&­ΫoAίΉ1¦sFΟCϊ]Σ3bΰnΧ~WdŠπfτ}ίοŠ ΣΗ.bϊ„G€Lέp@Έα`"–σ ·ι!Λς•H–Σ]Qz}9J•λΉ*Ϋή ΅y?ΟφΏ€ugΊγφAAπ~2sTq%πxΰνΐCC€/lqL3bυL4hρ|ΰ>ΐ[Ρχ½7ΚΝ|3ξ‡bΧMc:!ζΕΞkYΚ 2ρŸζ4‘“ƒuJ°8―/ΎιMέ°[ϋp0q~.‘χKΫOφ¨(WΎGΚω»‘:ˆL•»r;.Μ­ŽkWĎηΪ‡’ΡΛ€ΏCƒWΆy½œͺgλNd‘x πTδ–> 8ψ1š?okΊ1ννήό–₯Μ 2 yvmΑA& λ”aq^_’3λ›~4W‘Nσi5=ί°bΛωp0qώ~ΰ#ΘmύdζηΘ*žσΈλƒΛa³NΣ ¨­;8Ϋ7-—ΕάD1ΗΊέγώ́~Κ―]ζuΘ­ο ΐΣ€Χ¦s\έβ˜f„εΌjc…5ύ~ΘR#…5ύ/ΨUט±kͺΕωp²j·οΕ1)& ‹σaq^_β¦Ά”1sQΤδ‹PP (’οQ¦~'’φΪq\γ‚tμ͌ΎΗw ˜Λω©qœ{*cΛωp0Ρ€pŸCΑΌξž‘·χ-•Ωj{π\ΰM(ΐX36 yΧDιΔφI―˜ΦΑΐ£Σωw@χδXΗ­KΧώπςT§Q{ΣΙ΅Λ,AbόΤα? ερΠξ³u{ͺηήΦτσpVcΖ"ΔωxΫ=SoΆOλͺ€˜¦7ΜMk‹σ.c X}Ζ©QΊœ<ηνF4·ςΎΘϊτu”Zi"|ΉήξάnσΐS/€θ!­‰DόVL+,Ξ‡ƒ‰Šsh xfΕϋ§ tY—’ηκ$Z‹s€w"«ψΙ(bω•ΐίΞΚ| λ«‘ ή·ΝγށYϋοBη;Ήv™χgΫǍρΩΖ’Σg+¬ιηαΉηΖ΄ƒέΪ‡‹σΙguŠ1-9’αs΅>‡"ϊπiΘς6 Ήrξ‹\D’ΰQUωuJη)»‘οM₯σΗΘ’Ά:½ώR©ΏMϋσ€UUnνΣ‘…*dY[|›Β}τ¨tΜz WΤ³ΎΟ§ΧK‘0AΦΓAη@τY~ΣοŠ )KΫSd>…ΕwΌDΎϊ―Nπ<Ν8Ή[›φy#ϊMΖΐ0ƌΟ‘gμ˜~WΔτ„Θ&sNΏ+2…ψ"ϊΞΉί6μΦ^_†Ν­}gΰ™iϋΧΐK‘‹κϊŒ‹ά`Χ «Υ]©μ”NξbΰξŠσήEaήΉΖ#²Ό=½……pΰQiϋ ΄ζD”“ωAΘΪKͺE(Ίσω©ά\dyΝQEpŽΧΣΣgΜs@*Άœ7²šwά-V#α܊ρˆσi4Άυέ°œ›ξβg˘ήbΛωpyμWτ΅S‹Π)UΑ]Ν°8―/|kX:k‘pΏό!EΐŽ/Σhς·Ω›€Η€ε{₯sξ‚„ω}QZ§gQ4§₯υ «uŒξmΎ’{Sδ<~ ro}8@X’κx…ΛλΑhλ(ΰΥQε0uwΥ―ΧΘRΰoZΌΏ Ѝ},:y†όΉ|_Eα²ˆΒš½ ²’ = ίCAοB'PΈU?y3\ œŽώ0wAχλgPϊ³<’·ΕyύhΞ3q<η|Έ‰ίumΛR¦›Ψ­½GXœΧ—•i½Έe©Α!Ÿ™GΌ‰ŠρπwHHx ΔρλΣφKυ_œ^j+|p`Vί3R}· Χ{€ύΣϊ‚΄>ˆBˆŸΦgϋΒΚ>θΨΊΧ9@ϋωH@kΪδqq πzͺŸσϋ£€dΟώ„άφή‹ŽΦ>άDώzη8Ÿ<,Ξ{„-`υ%R ‹8Ώ‰άiHTΏ7½~Š>Ό~η\ƒ,‘@ξμg—ή? YŸ ΟΑΨ.νω@ΒΙ(5GΞmi}>²z„,γ‘˜zsΊfΈΠ_0Ζυ q%z.η ϋοιiΡΘ"žs²žƒ…bNρkΣq[Π}Ή£ƒ]Ÿν» ρ2OLϋ˜^ΟCΣ0@‚ώΊŠcl9―Άœχ–Ÿ2Ί7ίEνΝϋ]‘bq>άΔο:žΎ€η=ΒβΌΎ ›8Ώψš·ύX$zί‡RU}Ζv\ΠΞFBϊHδό4Š£/’A€ιΘ½4—ύϋcΤυ·Ωφu(―spΕmXΔw.A©ŽF.τsžωζ`·φΰaiύ48σͺegUl? εeηR€$Ιٜmo£ϊ{Ÿ–Ž/ΧašwR,Ξλ‡ΎzΛ'ϋ]Σw,Ξ‡›θ—YœOη=ΒnνυeΨΔ9Θ²ωx_ެ‚;+ΚFΤκ=φ―ϋU”{9'³o"αάB‘FmQZŸN!2›ρGΰΤ΄ύaΰ—Θ²pΰIο݌,£ ΉθΏLΫΏ ˜[|%Γc±±€θœϋQLo8Έ₯κΊ σ‘Po—5χ2Θ+γ™Θςš€1Ξ1hβό$4Θυ‡± 0a1– ύ`:°]ڞž³ μj~jΫ?,GӜŽEΝΟ  R7Săȏϋ,Š•rJΫt<­ϋRΣPœ’λ‘pΈxYΕyΗSŸvΟύqδτ.4PώA ±Σ€go ˆύ²ςμω΅ΛΡ[ό?ί3ƒΤ~‡<{GUV™Ι¦uh†Εωδcqή#,ΞλΛ0Šσ;ΡΫ·‘?ύ5(ΥΨ (hΥ?SΜΩ>Νχ^<x4Eγ›³ΔΊύι~xhφ~Ω…ύ΄6λz4šό{d-?ύ)BαB σΙ‘Φ?Οφ]Πζυ[Ξ;η*t__τǐɞ(HάYΜ… Θ;δͺtW£ qΧ /ϋ4=ZLV'υJƒ=nC‚ζKΐnœη€΄ΎluψPΊvέsίΊ“31f£‹‘Κ7)<\šρrτ?ϋ$V?‰eή†b8œˆ†ξ[:ξ•θ?`w4PϋBZ»ƒΏyΆΌF}ςΖz^κΣAK»OAΣjKο…ώ7?ϋ44°ύMΰLŠίΡ3Lͺ["π->]ˆ`±s*ή;΅εΐ­’hΏΥε?>[ήߞφ?yλq"£ΊIxDxΞωδα-3εXˆ²5ύˆ1‰₯θž\ήοŠ »—χψοBS*:0™~Η­4ΖWθ&s‘§Εκ―@Vαθ ^ΤΑΉζ€σgPθ'ιz?«`τΒsδΥ¨žŸνΑΉ‡EθwώΚJp!š”ί/U–σr Ξhœς4 (Q:ξΒqΗ"1[u­yh0μi₯cήMγ=9žϊtrξο”ΚœI1ς ϋxφz/t?ξK5C–όcΠΰΩ­ŒΆκ׍@Ÿι»οΥMœwΣrŸmj‡ΧR|¦­(€g»ΜFmρxΪΐ^ˆσΆTšznνΎλΑί"ΛΩΧQμ†χО‹ιV4=j+R7x8Ε}ςz4°³MOYw@εQŽχυθΟώ-ΩyφCβ~=²ψΕΎθ\Ύ}ώUHΈDψ}ϋazEΦ…°°μ‚,€7¦kάGΡαΛ―ή «Q”όn1œ/Άs~€~»!1{%ŠcM_*{¬άN£wΖrί©TξŠλΛ‘½ΚΛmtΏEϊΠXήΓθι'Φ§“s—ΡέhJM3nDχϋ%i},z^‚+‘5νΘSνdνa‹sφ›xΆͺβ{tΚ»WέrτΏxπ ΏχΣ_FioOεΏLγΤ€%(΅λτϋΎ“φM§’ƒ ίF^eξEνπ4!Ž1ΫΞgΊ΅Ε'wψ9/G9 OŒΈWκΰsΔuΎ„<ΞξBΣ8»΅O>ρ,Ωrήe,ΞλΛκN£±!7¦_Dg·ΣQσωt§C4h܁2 τŠ+PηζχΘ]υέȚυuŠΈ͈LΥT‘np@ΆΡγw§pgΏYίB ?BΡε„\ΡΓ-7ώ¨ΨχQ$Rζ Ρς Τ^ξ‚:sΑ5ΐΕHh¬CΒϋ ΰuh τΗ©~ο>PqNu]CoΌ!,ΞΗΟΉHޏΒUw6ŽΫ\z=d_ΉŸTnZE؏cJα2Λή¬O'ηήΪ’nUŒ ·υ'‘ϋύH‹εΡY™CΣ9.CXΆ Ρ^WΪηs³₯Ωoϋψτή―ΠΰΠ ΰΉ¨+ί/@S!nFβψΕ4¦š< ,-@ήEoE©7ΫαDΤ>΅³· $QΔ!©’Jόwς™ͺhυ9―Dbτ;\œ–HiΫΙη8eΔYK£(œˆ[ϋ+cΖΖnν=Β°z³’ΒβdWbΣoBΘΝFΦΠEθތ{tqΆo Θ΄ˆ’Ωˆξι•ΘΉ<{ϋV––₯χ-^ 6"+Β—PΠΉΧ£œθ‡§εwΘ2ό5FwςΧ£ίm½i[rq~9κθE§xYΗ/E–ώιHLΟEΆ₯HYΰ‘dEΆ4ŸLdΑ{?ΊΧΆG±ή“ΞΚδΑ§§cvBYŽHu:uϊžό{ι:οGƒΠ›MwrΖΟϋQ'B$0ξDσ«BξΦέ¦ΐρ 4/|UEΩEΟΪ3i,κέ<χ&τŒ–ωMZŽC^/„žΡΧ₯ε Hΐ½΅A™`=zI;β|{Ϊ³ΌΎΉΐοˆώγφGmΝ^Θ£ι—YΩΥh0πn4ύβΙΘ θν©όα©άηPό€έi΄7coΰiϋ%¨M›kχE_“•ί .Ξ€hoΒβέιgͺ’Υη< πc€›h<ξτsΜDΟΰΕ4z~uj9_„>σkΡ@ρ™h€Α΄O|ξ—u‹σz3ŒAαΜΰ²:­§! e»¬@£Ϊaέ,»‰vB»UΆ½&[V€υ°EΕώEZξ:@―Dω‹HTž„ζΑƜΚΙ΄œ/@σοEn²F–κ—#WΖ‡0Ϊ’B<¬ΧΉ΅:φ]‚:TPXv6 ΛM^n5rΣ žJα.ω’΄δDη=Ž=…0‡±έ₯ΗΓxΔωžθwžΎΗ©ΜηΠΞύO₯νϋž8_ŠξΏ™TIœξηe(όΖOΗΚ±(-h0 x$€Z‚‘ήƒ¬ΛΧ ‘ςΈTξ“h`jtή(4Œ\ΟίSͺΟτόlDχυ{‘›ςΝ¨½»<;wΤ(Š{΄αχAΣJD΍h`cOdy|0πPPΈΫHΪψ|:~ γw‘ϋο`κŸ•€U@ΈN9 XμRρ^9Ψεωβh)ϋeεB$ߊξ­Γh́νζiΙΩΏβ˜Hί‰<‡Ž§πlκδ3UΡκsΆ’ΣΟq>Ίga|–σ‡"±EVλΡs3 }?¦=<¨ά#,ΞλMˆσ%}­…1b+²ΐΞBξΤλPgp+½›‘π9Βkh΄ΨΞEχς ‹ϋμυ’ϋKP‡8έ η!ΦWSˆχ*AΏΌτ:ΔΌ^M}ΈΉΎ‡ΒΌry+π?Θ}°—9ηPˆί"ΛI™—S=ϊ(Ϊώ#½.μa½ΞΕyμ» Ϋ— ι­ϋF*Κ‚:§eΒϊΧιf0Ήf΄;wo& lu4{ΣΡ3φƒ’M%vBsv§Σψ_Ή‰Η—ΚίYτžBc|Π‰/ν[„ξϜg§eΊ?–½7₯τ|lι˜'€Ί<έߝφΟB’;$ŽΛŸ­ΜFρ kώ6$^ώ;{orΫύ»Šs}}ŸD"ιjΫ„·eη݈DΝΙΘ[!8 ’ φΤfn@ί+κψTvΕΘzzi{& μβ­,ηχ A‹ΰQΐoKeφC,Σ€³Π@ΝφhPF{ δΡ6UΉ•oj²έŒό'3zpδΆλςgΛιτ3UΡξη,ΣιηΈ½ΙyβΎ­²œΟž…ΪΝ§€kn@Ÿυ$Šΐ‘¦3œ΄GXœΧ›hμ<ηάԁ¨£·ΉRwϊgΆ’Γ6^ζ(δ—R-κe―¦eQ*Ώύ©D‡Έ„EΎl‘Ο};Μ₯»Φ싐ΨάYΛΒε=ώL{a9…%»™»mΜ)Ώ Ή-Bπm‰—έ(ά…XΟχU φ<€VDšΎ©tν»³ν/!k&θžxκ¨εΧO ·NΛ=p7δςωjŠ\ΣΡ`ΛIτΖ}»nLGBoz&Ν#N‡%όΩΩΎς•)ΒΚχΚ# y:œDΛW gh9£ΕόαƒL«(„Jδ r©όέΘ›#XM᝱ΆTφH„ό”ΖΆ"rΊoDή29‡!Λώ, Kax „'ΝMhπδΖ| ϊ^£ο1=]«Κ³`1ΝΏ?1ZœοŽ,Uόy?δμ‚"qη~%zVώ œZQώΈ΄½+ŠG{N΄ΝۏBPώ+kwŽx™ά}ύ4…`£§NT‘\‡θ‚θμsvσ35#^ΚχP§Ÿ£YΏ£ΚŠνζ±q(Aνώ)Τ?Εf™‰Ϊβ-TΗ΄0ΐβΌήΨ­}8ΨΉwEκ›Mi‰”&αΉ΄₯ IDAT+šZ+’£Άšώ2‡ΐΏk¬‚m0uj—Qtt›½nUf' /€A!FΌ{!Ξs—φfβ<:EEVΗΡ|VKδ*4—7!ώπŠ}‹),ŽΉ‘ϋ\Τι=YJΏŸΏ=š πσ΄½ϊM(–ΚΡΉ{A•ε|:r = Δυuΐ‹q9υΣ0³ δΜ@^ Ρ!ό+ϊ½ΆΡ8ΆšjO„Ϋθ,…ΰ_‘”–μz•Y5Ζϋe6€σΆΛΊΛίE)»n`τ εbτ½W}o·£ο?<¦‘Άp>Υ^EΫPύ—‘φg.E{ZŒ=›ΝΔ2Zœ/CΟLΞΠ@εQLά­ύ2tοΝ@οwtφύζό 8΅QDs±D{ ˆ>ϋΛΠT‘ΓΠΰΟΣ9ώ΅oνΠΝΟԌΘ°GΪ^Ϊόn}Žhf ϋ%o7W AΜΟ1:+Βd³#4ZOQη|€pPβKΩ₯½‡XœΧ›ΘqΎ°e)ΣB€νŠFgc½¬΄}_:ϋύΒ%ΌΌο{Ÿ[zΚΔ QUΰ£Ad}ZΚnsγ!,ς±,EƒρΊέΆό7ιχGΎΏ₯pϋΫ‚:ΑKθ­8ί‚„dο@ΟƁ¨ur)>€ΡB|Cvž|ί΅₯}ΠhM3rΛΌΊΞώ;•ώ½hΞνΣ‘»Ή9nir^’[ΞwE”^E1θ°ΉšNu̍ρ+Β·‰ΞΔͺιœVmώZ:ϋώLγΰΧXό%•ΟD#˜eΥTŽ;Π³3‚ϊP?Gσρ!q>ΡΜ!Χ₯σ‡’ΩoΌΡνς t? M?ψjΗΪΙΧ}4})j;7#/šSθl:N·?S§§sŠiΕO7>GˆΫί άδr%œYξ£§’6>8Κ§ΰm₯ρ~ƒJ\#\G‘–t{δeλΠΐύΞΘkmχ΄nχώΛ 7yςΊ‡‘‡ThΧ£Ž'΄y­ρ`qήC:=6“ΟΗQ @.œς‡Gής‡τ€GgάωΟGιB°ΑθF(o ΚWή°•½άE―NDtρ%ΩφbΤX\±„ uˆοNζκή‹: λ‘KΧμ΄, °2Τ‰ΈGςίy%Ε\⫐ΕΣԓݐkνKiαΞw*² <Y)Ύ5Ω4£8ύΏBVژ0ˆVς…¨ώ!’Gh ΘjOŸFα^–ٍh°μλMΞ}/jƒ·§ώΘL½˜…ϊ0›iώΞ &@ΦφΊs7ς6™Ka ]B‘ΪpYΥAγδ©τnΰr;δv/jM±εΌή„ȝŸ–n>΄ύ †½lXEγ\δ*‘ݍοq-j`οLΛmξΘ•πΆ΄nwd1’τ†«_>η/:±­Δ}tpΫ9~Ί§ς Jq|δx…κ2u €fΔ$v^B£ τνΘό­ΚρΜτ" œιŒισν‹ΪΆ΅¨ άŒζ’–Χm‡\@7S΄10Ίψl©ό"δB:Ζ6cV:φ#₯ς»£ι3(Ό>’ΝΈ Ήαζ<ΉWεΞΎyEδμBsώNJχφBΣ bΎj7"n›©ΕfΤߘ…ξkΟ“.˜t'E”ψ4uΰb½,ςΎŠΠΨζAΡg‚ΡA'£―΅ υώšΦw¦υέ¨x+κήJϋύΑΌΞλ”ΗŽˆ6cPΌ yΛυλΆ›ΩL ‹σzBφΘέ(]ΛJ(ΔŒ*•‹ΡhL`΄Υ6,0ΊΚ¨rγ•7lεF/Οs=«T—~6”ΣmΕφ ͺSrΕ{+ψš7QBτφ{ΞQ•Έ_†„Γ§·φaΰδύbŠΡλΐΉΘJ~£`AοS©™φ‰4^ωλiٍκίh)ςŒ¨βFF‹σQ$δ*ώΔhq>—"r™ͺv{3ΕSxY…'V•λρr4hƒ°αa5—κφo;ŠŽζΝMΚ3ΠsΥl~»\ΒCσΩ¨=:₯Ιά;-w§‘vπO}¨_§ŒΠΨΞuβ9υΒμ½"ΔωD§‰˜ ,ΞλMˆ΅Yθ!τI>β…₯ Kp0ށˆΕ4ζΏ^UZV28ΨϊEΜΕ†ΖΘΦEΧ–σzπ6#!_Œ"5ŸΑΨmEx’XœχŸ­Θ«α ˜ινΫ ("ϋv4ΊqߍΡεž6ΡΎζΟl°ΉΖo₯q.γͺ#½ίŽ’5ηΣ›Β»©*mΞM©.νZ#ο’³hΠ— Ά};$Ξ·΅.nL%ηΓK BΟBσ­AΑδ^€b쏂ΎΕν8 ψ6Γ™,ώ?z)Ξ·‘ο.<9‡ρ{4¦’#ΡΓUNbL?xΊ?ίοŠ@)΅ώ‚FΩ2Η£ίςΝέ”ΏAΏΗΘΚσ!dιIΛzδκέ,j΅1flnEΟΣξύˆι:?EΏν“šΌŠ΅ΩfF䇀LF'‘sΠη{f―³2]Η₯ΊLΥό0SΒBι<η¦Δ}h·φzpθo σt_vk―y*΅λQ*ϋ λςyΘ{θp”ϊd*§»2Ζ΄Ζσd‡—pkoζιαφ^‹ώ3wFmιP`Τa ’=–s(ϊvmο2ηυΖ©ΤLΘσœ›z0‚έάMσœβUXœΧ‹<•Z° ΝΛ~* Έvq¬»Θ@1Ynν!Ξ‡±ΡW,ΞλMX(»νΦ~Š~ϋΦ.Ÿ·›|=ψ―H―ΟAΠc'±ƒπ=M&Άœ‘%αΕΐ“‘(\W±Ξ#tW­7£NT³uPΎ‘©!R-FͺΖHηΘ#SCdsˆτ~‘Ξ1OΩΟԌ%:QZ–jδz4_Σ‘ζz$μrQVn³"`νZi‘1«AΥΉb0sεΩΪ9W³ ν°y,₯hk’φv)E»ιr—eϋ’ΝΞχm‡„ψd‰΅ψŸZN‘JtVσβS†Ι²œ{Ξy°8―7vk/ψ)©„Μδ"hΨF™§"a©μΥϊτ€άn―c!:¦1Θ°Œbΰ`NE™™θωiV&ΛrnŒ?Ρ獲ν›`Z ύΜ,§§ν6kQ:Ζ;ΣrŠ—ϋξBΣj€ϊΜOΛ4ƒK²χ–¦ςσQΊ8}Ž94ΜZΧLΎεάβΌΛψ&7ν„; 8ΉV>Ωο vLλΏφ΅¦ܐΦ?EΡaωhΆŽΪνC„‘w=:Žα’€°Φ‡΅*¬Ce ύΦtlήιŒs‡ˆDΆ’•ΕΉ1½#β,ν@αΑD[„O^>AxΕy—΄8WxΡVK²Ί•Οmj0—FΛty€/?ZguXƒΪΨmm³}›Q[ϋΒbŸο[…„ψd吏A†eΐΗPκ0λš‹σΕ7q½Ω”–ΩiiζΊ4ΖΖΉf#1b4Wηΰm#³G ΖύJδBωΣμ—#χσgϋΞ@ yΈ£Ÿ‡’HΟKη?x;EΓ1ψ t΄EΟ,»ε”έΪΫ9ο|ΰΣ(h†tή=Q§?κ7ωžvL―Oή›Κ? ε4>ψF›u¨ ;€΅Εωΰσσ6QuΣf£ω&ŠvΕΣ]f’ηl pOΪ7ŒeΉΠΟ§ύ@1¨ξΰƒΞΖ΄,§ψ-­knΰq΄φϊθ-KuΞ+Π(η#‘εμΰΩϋοώxπpΰWΐχϋγZΗ?vž‚rL–½Ÿΐ3€η£άΝΨ…σώJ3τlΰ $–Ϋ9oΞDΎ§»£€wEƒ(_KΛ  s(\‡±C3Θ|=FX/oγFͺcEj7ΖLœ©ζ­Dbu9š xCΆά˜φƒ0/3‘€pΓΖdη9w@83ε،°V ΞwiŒcqpYiίΫ("ώΞ₯1θa=πρlίεΐ›Jη9Y—σk}§TζLdM=Τλ‘ΐ ζ’9IωyΞAVπvΟ;uv_˜½?}ΖShn}OGŒ_@h1oύ,dΥΫΔδΚšήq8jWΎήοŠvDΏΕέύˆ1CΜRτœ-« H>ƒ~ίΧτ»"5ΰθ»xz―sjΊΞQ=ΎΞ”Γ–σz3 ΚŠQA€γλXώψHiί!cœϋW₯Χ‘4‹Q€¨9ΘŒΏ2ŽΟqmιυέΐΞi{/$r/Κήί€’€OδΌχG#εgοoa΄Ψ‹n|OoA’φHδŸG^ΆGχγ= ξΌ^SΠnκ.Σ{bnκdΝΣ4f*–sη8Nl9/p@ΈΗ7q½‰€!ε?“Ο  pωλ_‘ωίΑ^«ΚZυ`ηϋͺζGVΉίo­ΨW*»š΅γzΦκΌ½²ξŽη{ΪΈOΪ·ƒBΜ7Ώ§e)3(XœΜφ@ΣcξƒRνςτξžΚT§‹œε€.)U«+Β[Ž_ƒΕΉ1“Α Ί΅·›Φ¬έTgωΎrŠΆ<Κ{ž­ρ=Oέm`ηφ2ΘvζiκΚiθς4s­κX&Žq*5‹σΗβΌή4ηw₯%X ܁€΅ΛcJ―‹’lB.ΨΡόο?€χ§‘yΫη•걍<ψmυˆk=Έ)»Φ~ΐœ§κΌ›€GSΌš μœΫΑy&ϊ=ΝΎόε' Λϊ_:¨Cp0Έα""οβ4„X ςNŒξε‘εΞ[Ή³Uξΐ•;\εN\9o9ίpDv"Ίq€αY”ΦKΣφ’l²΄ΏΞ#6χ[τŒιџΪψcG'}<­jίκ΄o%£ƒ¬ΝDνˊul7{Ρή{ΕN“p^QώŸAj]S0YsΞ-Ξ»ŒoβzΣΛ‘ή½'£@foAΑΝ@ή'€"Wρ?’y<€1 Ϊyΐ«"Ρv,rηξDœ―NDϊΏF–ΩCΦζ‰°}Ά‘Όš7Ž:β4Xύžή‡ώEΰONžΔ`Efv0Έα"βT剝jlnEƒn· ΞΏ œΌ·’ηt>£ΣΚEΊΈ¨]‰A‚ XœΧ»΅›Ί`q>\Ψ­½>D'|p8Ν­δ_er]Χη!ρ ¨³w7JM™3#-H6u%Dς!(UbL')g‡&"CΕXΛς&―[‰»ό{[HΡ_Œ<‹Gž‘#²žΝ=š œΔŸ8ΖΊΖsΞίΔυ¦nνη ςΗΙuΜΨXœuηέ|φwBњoNn >Q}£σωA½₯.B©*O*3ΕΟ؊:Hλ)RΚmAβ£|ΏEίŎΐiΩΈxc©ό#iΥϊj`ΏΎ}ΠwDe€λ€Η–Κο|"οr~Μ-(x§1έδ ΤήΝ§1vΞz ΑΉΓA^+a…^žΦ[)R‹Fq(žGP:΄hcWSΈ^‡π‘H‘Έ…"˜\δ4!ρΊ$­σν|ίϋ Σ²G“Ο;‘Ž2,ϊε4˜ucπ₯~W’μ™Φ½Ν1°w―3ε°8―7SΙ­ύ»hxήIό)poͺcJx„tΈ¨ϋœσρ<ϋUm(νYΦήχ‘ΰ'R<ΏyΗ7˜βe<Έψl阝s›œο&ŠΞYp?τVρFg«Π3Ώ:m‡€˜Žj–™†J|†ΩƒΛUVΙEh°€Š+K―wvMΧ½½Ι1ƌşϋ {/Βω@°±‰τeT ψ₯Mή‹}K(¬ίeςAˆ| c%(ŒΑBh>xΡΙqΝNςγώŠcή₯ay‰ό¨‡Χϊϋ΄ή 9νs—°8―7νΊ΅ŸœΟθά σΙ~WΐόŸ½σ—*χgŸή8E:J₯\―ˆ"¨ 6ibCΡ+’ΘUA ˆβEΚ½xΕ *xA7ˆ± ‚€ ½œ†§χ²ΌλύeMvf&³χΜN&σύu²”ΕΫAt'sΙΎί«Κ’0==Δύ]œ{GF,–E9ω*I;ν£ΐ·±Ψv³πΎπy2πeΰm8₯γυ˜ΫΣυMΚ]Ο`ΛG#Ζ\—a ‘Ϋ0Λ ˜δT¬qΆsa<>΅uΐ7’ε<ϋτΑ+±—ΕyaΫ$.^>mŸqžqΐ—0λΙJΰΟΐώ©στXΕfaξ’ΚΜ><6Ε~υŒVƒ_`ΏηMΚ΅ϊlιΗ„ό՘₯σ9ΰ\Α p8p;fρ˜ό§;&ύίoφΏΎ‚μgΘ»μβ ζ6}oΖϊ"ψ%Ιo±1πqL¨ϋχX‰Ή€@o>Η>‹]‡O]!„(12ψ=xC‡Ξεmˆx: Cη’TΌ »αά€\+ θ)˜(? sρz!ptψ p&²ΑΜG`ώΝΡ1 η<ϋ|kŒŸˆΕ§Ό‚Ϊxλ±ΖwLϊ<ηa σ7` ο 17§Έaߏu…Y’v η="λbˆάlˆέ‹σŠˆh ΏΖ~ΟW6)7qΎ{¦τa½λOPC|φήΨžwQ+ΰ³Δy³uΦ3δr²ŸŸϋbίΓάί¬sό«K—= kθ|s»υΖΟC˜xώΧ±H$Ξ…’1γ€ϋ,˜°χm;9’ΞyώΌ+Eπμ†^“r­4 ·Ηά!cΫD,φκ ΤϊΟ7EΛqΓ9Ο>“°Fɝš‰σ ˜?1Ϊήό-΅_?π³ΤqΎ‡ ?$†ΞμΎYά¬ θ ώ€ύž/oRn(βό7©u'ΣΨγb'ΛηΝώΧYϐ~ΰ’Œsϊs°^άσHr7V—ΧٞeM_ƒY܏Δ:+ͺΜη°οόŸEWD!JΚid ζ,Ιδϊ»ΆΔD,tͺήΉ>ή¦στ4£šβ1|ι€Mga3Ÿ^|%΅žEμQΰZΰŽ0?˜Άm5”o’φΟv&°MγεΩg{μ}s£/Ϋ„­±ΉίFλ0—όSeH-Ο₯·,M@1ηΥ’ΟηξΤς]XX„u³ζΚ>Kβ³˜›79ξPώΧI’Ε,ΆΗdΧΩΟb‘ΫbΏΗu$.„ίΗ²‘oZg_!„Υf&pFƒν›ŸhΣΉΞ`pΒјO7Ω.r q^nκ%„»ˆ$“οn˜`ύRjέuŽ9€Ε|Ύ k4ƒΉJξEr?μ‚Y₯γ©ήP yφigœdΦΈιuY ˆt―Υ˜Kυ-u½€w²€…λpž-ΞΨΤrœ(¬ψ9– lΟPΡΨύ5ŽΖ ε=X?c½―+Cr¨ηΒ|FΓRφϋ?,άιXcλμ7ΜΚ .„’ϊœOω]Σ€ σ<Ϋ`Iζ1 k3ˆa ΑRnκs>KfδΣb,ARΌΩΠ Β¬d{b άފū,k‘Žyφρ2―nPfEί#˜υ6ΞΊά샍,:[Ο›‰(Q~κ ₯֎gΛή©ε}0ρΈ³πnŽY‚Þm;3XΠ…¬gΘ_1K}šC}nΓy‡‹—Υ‰PYΨ5άx ٝ–Uα,©†QBˆZφΓΪοΝ|}˜ηϊω†Σ}3πΪaž«§ΡPjε¦γœοŒ%sΈkτμ€YΈ/ΗβΒΟΓάVcκ±ΖφX²‡7Κ³Ο2¬gοlL€ίŠ5Dχ ’ιQμ!³%6TGz8ΨƒαΜΪυπ~¬qzθƒh•Ψo;žΔ-Xt'.Ξ› ₯6ΆΔž ίΒ,ν§bqΓ`σωXςΘ―aρ 0«πpΙz†ά|³*,ŠΚξ‡ΕlgYγGš‘ˆsgC&©[ψ/”3D!ŒΑr³δυN=σœm–d:‹C±χv^.ΔτF'Ϊ•G–σr“wœσVX‚YΛ―Η³—b’ΛΒφ3οΕ’­υcbώΑΗΜ³ΟŸΗΚχcρξqŒ©g^ΏίΫeœηSΨM—bq­―ΐb0kψE»π‡lžžSQnςŽs>.¦cc‰_ \‚u΁=Λήœ„‰Κί…ννθμΙz†άŽΕͺ•–/iΓ9ہ‹σfnνB!„σ>κ'­Ηω΄ή†Λΰd«ΝΨ–Φ’Ι Ρ5|sW<·θЁu‚ [\1|`Ώετ6·ψb›9\Η: έΊπ.lψ²²p*φ[”νΊu;ιŒU9—B€u0Χ˚ήhš™u°Μβyς7λqd9/7pkb¨(c{uθ€[{Ωψ1π?ΐ&aΉxOqΥ„'„Š[»¨Ο-ؐ"›¬‘…έΓΕ΄šυ#,gI+Μ§ωΞi0Ο91$ΞΛM'άΪ…*rk―υ†R«*_%‰ΝΎ³€—…αĜχ›`γΡoάβ~"ˍ’ΊάIkαYΛ1O­‘πajσΆ4γ*ΰΧC<—₯ζ¬χιτ’+2LΕ\gfaγšϋ΄+Φ8Ϋςν€hΪ+¬ί!”έ,£Ω°’uώ„ݏ{]1,ΖbΏ£:ύΚΑ~ΨοqKΡ))gcΧη“ΫF‘tjŒ¦6n?νjή|KD8ΛKp2ζErκρ$plκύXβ«±$ͺΟa‘f±q#}>¬ό0Φ Ύ8>γΈC©Oήc_€YΦζ`–²sHB;`° κφΐΑXfόe‘N·‘„1=/:~όYQ3°x7σ¬gh+|,ηyzgͺˆPΆφrSo(5g"‰3ώάMΫΦcdξΓXC¦Ωfΐ»¬IΉ‡― σ\ηο€yΊO£‘/‡…ΔyΉρFν9ΐ—ЬΘΰi¨mdCψ&ΜGΫ¦b}ψΛa4΅Φσ λŽνίΟ…ϋRL ,Ζ^@ΛΒΊ…Ψw_¦ΡΆE‘ΌοΫι—Υ¬Q·#ɐ{ ·φnΗEνΰŸα³ iœ‰Αψw-Iγqq˜–„eϋzo`Ζε„γ­CnνCa=ΜZ=ΛώΨθ#·5Ωο.lΤ°Π†bΏΑΩaέ½ΐ‡0±»ΔߎΉi‚ γyπ ²ΕωDΜ²ύ¦P/BέvΖD~, [­O+ΗξΎ>ί܈uό(£Ξ`kŸa{€DΫΏ€ Αϊ<¬MςSlΥ+κ―ΜLώˆ}/Cς†€“.ξΰσΆΘ:μg :Aq IDATŸ%X›¦Ω>kIžΑΣ°η°3\όzέϋHΪΔπsΜ¬ΑΌ{~Mύϋδ>’!’Ε‘8/7·`„±©υKI¬^ρ‹%½-~€ :s4‘φe΅Β/Ά A­%8Ά8Ab‰jΆΝ_^oΒzΰoήFgπ–χψϊKΝ_\±χ—“—υ—£—Νz‘ε)λΗo·u,Kδ/Γ~£%᳋Ψz[‘ΦΒΉ&Κ7gπxφπέΛ"¬ΡύB,€qC’Ζ¦3ΏAΩψy”.›ξ„K—οΩtΩψYζΏΈ‘κ ±%ίΌ±'€‡'`_Hώ£ώŽΆ£ržΎM}ΡΤλψ3(~~ύ6$ηIΐŸ±Δo€Ή‡©εg1qο `.ΰ₯ΚݝZΎ Ψ»Οq˜ΫcχΧMηgjΉΥϊ΄rμRΛsI’"fρ(6Δι˜πΏϋž<κ̚Μ2φΚπy%fiο&ΆΑžN»ώΛUa>I۟ιήFτηΏς”υΆί|μ?“ž¦aΟΨ¬mΣSεήƒΔyšμΊάIΆϋ!φΜlΏΕώοο¨S“QΘά°‘8/7?!idΆ’ˆ‘›p›ξ€h'σSσ"ΨD³€}0A1 ΣΓ|ΙKΘ]ΓfDΫΦΓ•oσύ&Σ™ΐεXο~Μ}ς~¬!,w₯ξf –7`ƒh],ΈΣw"Α;΅ά’5#Μ§„ωzΨ2^η Μ)Ρϊ΅˜KπO0ΣjΖέ^ηFΰ¬#ρFlΈΌΝH,ΎυH7³r/ 08YnϊύΤ(΄Ηχέ³|·³>­;λžj”x»Ž{―Εο0kϋC™Β1ώ Ό{–άΣ€eΔ―Γ_W“tΘΕwήφŠ­Φn‘Ž;μβŽ=οŒ; σξ3šδ7K{ΪΕFΊΎ-φ&τM,;5}›w‚Ζ©ή6Š=ΛΘrμ·‹`šΏaα&'§Φ/ΓbΕΫΙGCμaw5pk›ΟΥ“Hœ—Ÿ₯Ν‹t5n)λ€8/’Œ+ύH;kLL Ηvα>Ϊ€΄Ε>mύŒ½žΑΔψcΡ:Q-άύZ΄†{¦€Y"E1|»ώΏΑ¬Ή³1‹Ξ>$YωΫΙή©ε}°ηdV§ωύ˜ˆ8ŒζΊUΪyμU$nΤ1 ΣY˜GΒ[1qώΑ0ύpp°/΅±ωέ‚·7–cΒTρΜέΑ<¬nCd$ΘβSΐ[¨υόωΦ–k'³°ηCΦ³8­…cLΗ:©&₯>OΓ:š}^Aβ=—φ¬‹Οq[7φN{ΗmΰΨ3/ξΔJ.βΫΆ"q.ŠΖ4UO2ζ½Ϋn_ΦΈxn–„iN›Ž'„eβ,‘YΊ1ώ-μΉ·πυπys:#Ξ·ΔβΜΏμ†Ε}NΩe‘μΨ3&¬QΉ7& /F=ΪyμG±Ž-±wΘ¦ΐ±ΈςgHςŒ\ΚOΓΔψμΆ/IΎ„n£Y²]QNζbβόyTWœ?€ύ]HΊPt!Έ– HΪ•q8Α·I,εͺ²~ΨgΈςžp:–`ςQμω f1?9ΪξΖ‘z"ΌjΔΒ?+Ρ‹Γχόw»ψίψ`η’hόεXuΛ9XCf*ζNά.q.„UζΤSsmτω{¬ΓeXΓςN¬‘{ –ΉΈgb"φΨpi‹°Έυv$vmΧ±/φΐrˆLΒ\Ωχή‡yZ=ΚxθΟGϋž5΄ͺ—ooHœwξ­”Ξ Q%ncπЈCe+ηžp+³η„rρŸΞ0™$€O“©ΟaaΚΛB’Ξ‡‘|O’œ8=šKμ)ηSŠΓII£=ΌjGމσΦ€“εΖ‰tΣI§[ 5=K:ϊ¨―(sVFΡx‚™ίbξrUζlLφ—` …„B”›~μΩύ‰’+"ΪΖλ0 ŸEwπΏΐΫΓtMΑuι“0kκJl†‰$Ή|ξ‚Ρη.N=?ΒXLLΘXˆ•5$Γέ-ΐάΗWaaE λ|ZD’œxEΖηͺέJgΑ7°ά)»εοε\M―Έ΅CβΈAΓRB!„θή8^Υ°”(ήNμHœoIποΈ‚dψΖvα–_ŸΗI g€ζ.¦c1Ηu‹Z–S;ͺUήPΣΟbβΌFKœ‹’iδΦ> s―Ήψp΄ά­ψwί°”B!:…bΞ»ϚΏΈa©ξ¦“G>œΨž’xΌ£©&9§ΔΉ(šFΩΪί‰%©™ œŽΕΐ]9Bυκξζ’ήG!„ΘΗ¦ΐLμω?«IΩNp@ηE–σξΔ]³«:΄0(B―αβΌF7σRˆ‘ ‘[ϋ•˜kΘqXLK7 sH’JT}x&„ωςBkΡyδΦή[Θr.JΙΊ0Ββ‰ͺJ―τϊ !„eF¨ϋpqΎ’ΠZtέ›½…ΔΉ(-½`=—8B!ŠG¨ϋθq.―ŽήBβ\”–^H Χ+/!„’ΜHu½†RΗQo!q.JK/$…λ•‹B΄“̀݁η]QFJέ Wtψ<’υξ±z₯ %qή[Hœ‹ nνγΓ|e‘΅Bˆξβΰΰθ’+"*C#t#&"}Z<Φο?"΅3.η Cǟ|ψ° Ήϋ;πUΰ:ηp8UDΩΪEiι·vηU±ˆZΖ`γ³LΔ²φO Ÿ'ΣΒηIΐt¬βŸ'†iΦxZ7½ΌkDΦ[^€5τκ-ΟOΥ;^ελ-― η«·,„e"ΐž³c™a:x ПσΏΈ{ΌηŸŽΔΒ.¦`šΏΑ¬Ρ ϋέ μ|86¬»7¬ϋπpΦ>Έxφμ» Ψ5”IGκq˜h…y”œl‹½η~ œŽYΏγσ\<Κ.Ά.%ζŸΕΌfG„ςiN>‚uΗu₯ΓΧΒιq.Λyo!q.JK/Ή΅WύΕ.bŠv‘%Ψcχ^Όn °>&Ί]ˆoΔΠ‡ω[…Ή z'ΓpΎεΐ²ΤηασςΤηω˜πλ^žFm˜Rzy:ΠΧ`yFτΉ/l―·<*ΏήςθPΏx9>>$ή‘πšPŸf…"ƒVP_ΖΊύ0‘;ΦΐήΆ/ΆΟqμ·Ο{G…Οg`–덱wΟ ΰξ°Οά0Ώxw8G?°9pπJΜBύHtž#C=ŸΐŒ3CΓΆίc"Ψ™\”QΧ7Η`ο©Ι©ΊvϊZ8睑8xvΟυ―ώΠΖsx'Lά13Ryξζ™Τς³©εΏcοΔ>ΰ LT7#ξLυNQ―ΗH]‹^±œηρκx‹οί !8Λ°ͺΰΒ΅Yn‚~ΜCΜ0αη |’ζyfa(`ωΐ:‹ήŠ=³_V§ώΝr*8UΞϋΰx›¦F¨#Κ@/Έ΅Λrήή{,먈‘8ο=.S·ΰ^8ι^Œε_ˆίu>ΊΑ½ ž[B!2νΕ―s#qވIΔΣOon₯R, σΙ©υŽ>?|%ZޝΔΒμ€ssΜ~†Ε¨ο λΟa’ήΒ=ά”³ž#q- wbΞσtyΉ'ΒτΙ}ρ^qή,7Αί1wνM±ηΛaΏZΛ#Πjώ—f9²¨Rή‡YΞEiι%·φͺχϊΆ '"²p’wWoη-πœO08όd_Μ²3*cŸΛ©΅Ψ|Ϟ0q<Φp›“*W` 'E$¬"΅ξgX#.‹m¨mΠωρ·Ž–γa _ŠY}bΓZϊ{ΖEύπ,.8ζƒ$ίo1Ιυ›όK`³3vM–`οmοXHΐPv\5sk―Η_±ο<Έ ³Ύ§ υŠρρΝ7 Ÿ`Ι‡€ŽΎŒΉ”ΟΗ¬q/>όΙ±OΒ¬};†zΏ‡δϋ€Yσ2Χ†'Ξ_Ž]£ΫWŽαnϋιN–F܁…^<Ψ%¬Λ››`&F—P›Ϋ •<ιNΘf4Κ©SΥΌ1Š9₯₯άΪ%Ξ[Cβ\d‘ΩΛ,z†R+VcΆM­»ΨͺNωŸ2XPΩΰψS,Ξ§0x$‚•˜Υ3«}u'&¨γηš'LL aΒqζ“ŒΎΠ/+ΖK1χΦ,N­³^gΑuΊ‘Aω­άYЏutψ¨ρόΜjσ.μ]ιΓg.ΓηRμΪ₯ߟ£iΝ£`cLΜ–뉂f<ˆΉΘžΌ §ˆ†vpU8φk0·ZHΫI˜§Εq˜΅|5ζ6{ω,ή³1Kᇀ7‡γΑ:‡~Nώx^™k­‹σ©˜eτ}X2»?cYΘΛξββ|RΓRƒρΡY܊έjn‚4ΓΝ#Π.ͺ˜χ!‹Ο‰sQzΑ­½W\²Ϊ…ί η"Fnν½?bK­ ΈQεo%±μ₯χΙ²τžŽ‰IwIw1 ƒcwφΒޱE»oΚQ&f—Τrl‘_˜Qώυ$Ι/!υ£,„ΎA2‚E<<γ jǘvξΗ³S°g΄w,Œ!;QΧNd7œΑ,ΌiΞ‘~£z3ΏύXXο–|’ΊmΔ`7Ω»1+›³ŒΑ\ηόif°ύNjyηŒύ²Φ½7L1Λ1Λ`k±QLΞoPΏ¬σΔ,Γ…lQεο‰Ιa{zHΖ4Ο`‰žζaβMI»‡FΟώ Xœϋ)˜χΨ₯νεZΊgΔ•Όnν0AΎfMv.σVsΔδΝ#0λ|Ϋ&,{‚Ί<ΤΛ©—nΞϋ#q.J‹,η"ΔΉΘBβΌ·i5ρ(–΄Xώ-–wΤ©˜Kβ6ŸΕnaώ˜8jB81ςd΅wΔbƒO" χx gΉ˜Αaέ@qΎٞ*Ÿ~>'7Aή<7cI. ΗΪ–όb»^N…ΗsξίνyοP”8₯£ΔΉ,η­!q.²8B€i5έpΒ‰‘ΗŸύ±ά'„u±•ό:jΫ”>ΔV·Χr>ΚΞΖΒ]„ ε3Τάyσ| Cy-&Μ/Γ²€Ρ€ξΠ8§BΊ=οƒγKβ•jΰˆ2Π nνηΌ5$ΞEηBˆα2ά‘ΤΔΘγ‚ϋ\’xβ5˜λ±η|ψAjŸΧ`#$@2²ΐ,ŸΒ-ΨPX1»cγu/₯6ΔbΜrϊ£TωM0λ=Τζ=˜φ½7U~[LΘz²7·φOΒς!\NcqήjXIžά¦4yς,ΐ’ξ5#+·@£œ ½’χδΦ.JL/XΞ=YQΩ3…–Ώ4ΞΉˆ‘8B —ΌcI‹ςΰ"&Nτ5 i€d˜Δ˜Ρ˜€œŽ΅Α\ ?ΛώŸf ’Lώie°8ί ψqς?Δ,ό1»6(‹σV³΅‹ξDβ\”–^η­!ΛΉΘB#!ΔpqΛΉάΪ»‡yΡ<Ξΰ}{EΖ>?!δ>²€»Ίg%ό36nυ$jGF˜J’=fΙ°sλ…cNΔ¬τχg”!ΑΟ½€Δ=έ㛇2ΞΉθ^<ζ\nν’tτ‚[{/t@΄‰s‘…{žθέ%„*²œwή1{π],ΦχkτΩaύ·ΘΆŠ―%‰=ŸSηOZΜςmΐ-”Ώψ`“2η½…,η’΄τ‚pν…ˆv"q.²πZž1L…" %„λ “1«σz˜ΥyRX7 ³NΣτhΫΤP~ fI~K¬εσg1Ρ{M=ˆeφ p–œλΥa~–ΉϋΰIY$»‰σήBβ\”–^η½πΫ‰ΔΉΘBnνBˆαββόί±ρΦWQΫ8vwc°„cξΏ–ΪΜπ‹HΌyV’Œ‹'ƒΪαέΨ8L3£sdαΦτ37c™ΨΔš~{X^Sg²°kχŒΓ:>4ΒO΅‘8₯₯\Ύύ;VΉ’ψu’81ηBˆαβVηG€—Qk5ξΓ¬ΟΞd’ΆΙj³‚»ΥΜJνΦΞFLj­ΦŽ[Ό!±zg#ΆόΗIΖVPkΕw ~l½wλ£cΔVότ1܊{t‚S€ hή†ZA2ΔΦ γΓτεζΞΜC` ηU¦σH Φ›F Q zΙr^εοΨNd9YHœ !†‹7„'‘$ εΖΫ­<ϋAbMŸΦΈh©ˆΕωsΧ₯ xx…wryG•‡XLΕB/Ό£ΛC;f0Έ£ ’)E‰;°<|$«³ΚC\βΞ­8,₯U¦…ϊ/$5l°8’ τ‚pνο€vβΧIγœ—›{€oΗ6XΧ.$Ξ…ΓΕΦS–eb8Οώ$yΊχμψ0›D0.ΔDε’ό."=_{6,ŠΚvΒ£a*φ[L'Ι?ΰ"ΪEη4―ΤΣI΅{€€σΈ‰ηMθόϊΗ^&‘Υ °”δ»Εy,5pD9θαΪM“0QυΝχ›όΨ>υy(4²œίΌ¦Ξ~ο.β9‡ΛΕΐ{°Ψ·¬ο= F到}4π8φ}ΞΗ2ŽtΊ ‰s!ΔpYŠ5’'c–Ά‘ZΎΔΘΡMm¨αβqυohΣρ\0ΊΕΧΕ’‡-Έψ_Šύ'\»ez‰.B0{=έrν^oΑή!αΦμω NΞΙχςΞ€ΨΊξήaI^ ·άΗa%n₯Ÿ@r]6hρϋ Q@ Qzα‘ΫοΈ=6ζΧ‡yœFLήOΆ8ο S»3ιγϊPYk³‹wΏvŒΦ­vΣ=ΐ#_­AŒ£\‘ιϊHœ !†‹»¨ϊπ^‹% —žύnIύπ0‰`tχν$9 \(Ί vλ΅ Π鑬 Μη΅©Ž.ˆη“δp½(l[@bΩwa½ˆZ//η/π}βʎ_χ8/…»Ωϋoη‘Xx1–Kavϊ`½p“‹ς#Λy~¦c.Í8ψΟπω!’Μ₯Βπ€³°μ§·l‰]#€O[…mΏΎ Λ[€m0«ϊ‘ΗkΔ›Σ°gΞ}ΐ‰ΨΛ"}άY‘όά0ί¨Α1Ÿ6K­σλό-,Cλ½ΐ.Ρφ€ΧύX'Η(μαx°-φbω5p:πχ°»iK*sφ°½xφRΉ Ψ5”‰Ωq˜θΎ”D˜_ |Ώu&v͟ΫF ϋmκσ'ΰsΐo’οю:ω1 η?{anΧB=ςΚuΞͺΣK 4!DηXŒ‰š)Hœ§Ιn!lu› ίΆ t 2¦x}ΪΥ·Œ8Ž»Eί\Ϋ†γΉeΨ· »άΕdj]δέ2½€ΔBχ'–‘t$ΜmT0βmHœ‹γV*»–TΔΦΐΉΐޘΠ]fφΐ¬··abh+,ι1ΰBΰ˜pάL@nΆ=ΨΰxwΤ©Σ–ΐΙΐ~XOθYXgΑSǍy&Μ7iα»Cr]‰σΓt/v- Ϋ'Μ/uY φ́ÀW/Ε²ω:oΓ:ΗΎϋQασ˜ε{c¬3apwΨg.vύ ΛΏΗΔ³3 Έ(ZΎxWψό°!pπ*Μ•ζΤχjbŽΔξΛ'H2ΓΆZf΄r³κγΈ'Εh„bθxGί_0±α–ΐ΄‹lΪUΦcx}ξ εζ§Φ/ q'NY[ΠβLρqFv·tΖB7v)v+j½cΕβ]<ΗΗr±œε’[όZ»hχλRe#ŽγEλ5,•Ÿψ>Ν+EηY?Μ•ή q.Κΐψ0濾­2ά^ί{°—ρxμEzpXπ‹¨ά+Ÿ‘X Ό Έž€qp 6ή罘ΛΤcaύ˜ΞβŸ$zί:Η«'Ξ=χ¦°<³–§σl˜o\η˜`q=ιά­°οs;IGΒΫ0O‚#°λΏλή³ΰ |kμό s5?sοwcB.&Nχ^ αcHβ»^νχ*’Oό[₯y!‰ ΎψΦθΊΨλ4I‹β‘Φ)f Φ™σGμώJ=ΡκuNΧ'F–s!D;πgI£wL―βξΙYY©‡»m"Φ–Y{―LΛιiz˜\ΐ8½Π1Ϋnq.Κ‰w4 .O QΌ'XβΌ>/σ—cξίο­SΦ2sΖΩΠΧQ™07¦>,ιYΊΞ3w¨–σ˜oηoΕΔωΫΒϊkΒyχ ΝΧ„)ζ%©ε_‘τ:?‚ αηη¨G^KΔΛ’Οί σ…ΐΟ1kϋΛν1τ:₯ρΗπyελш‘\ηΈ>1ηBˆv0 λΜ}#ΦQθVιzΓ6εΎ)k§τ˜ε±%=Ž«υDWXΰc‘»»…?Nxδ1Ύdχ€D,Ηλ†3,T§˜‚]λC€Kθ ·vO¦Ρͺ—'¦7¨#Κ€‹σA½Gb€άΪoΕ„θΉ˜υωyXάψi˜;ω Kr=–ΠΈΗΆΥγέ œ œ‡ Θι˜Υ{iƒ}ςˆση0wλz\ |³άΎσ*€$ρZ,š/e°kΡ3©ε8Ξέ«σοΏc ¨>ΰ šΗηCώ–‘Φ)ζΩΫΪ1K«ΧΉQ}$Ξ…νΐίqSV#ΚΕ’0=–{αΩοοΉ^πθvfx€LK}φaζžΒξίΗΓά ‘ή)7‰½p“‹ς#·φφρπ ΰ—aω~,†χ+˜«wfΉΌ³\g±sΏΎ7ηάΤφλo:Ω<ŠY\―ΕΎj, Ζ Ύ‡ Άf.‡ι!=֐ΌΨžΖβ›ΒDαθPχΫΓφ?Gϋωwrv'£7³ ώ œZ? 58 sΧΎK¬φ IBΈ‡¨ xG¨ί4,ΤJbΌέυhυ:7κ8B΄ξθΉBk!ςKΟώ©a~$°IΌ8$͝ΨCj½b―œΜΝΎ9­œ§μΈ‹{Č&ΉξυβYΤ ₯6™Α‚;αCαYL¨»AeFΊ@/άδ’όΈ8ο¦?~«ψpΈ–σ?„©ίSΜ%aŠ™…=ψ‹£ΟοN•έ-΅œuΌ$ciǟ~¦4ιγ:σΒ<o“s~.Φ9α\‰σ™Ρ²σπίΐρΐ—Γ±—ΣvXάυΗ0/ΌxgΓfασΜ₯ώq,7ΐΆXΖφχ„i-IΟψqXLώ·±xοcn|`Χ`-–EΏUΥ©hs=Ϊy{©&„θu“1‰RβΟώ^pkχˆέ¨ίF*šV:<;žΥ ΰÏ₯‡«76yΦψγ#ΕBμϋΤ›―6Ε’ΰn¦©5< ςPG”^ˆ9w·φ^x±ΔŒΕ2΅/ΓE4ΐ3δz<ίPγΰΕ(μeŒ IDATΣΓ1Jmχα֎ìΈ«1‹ϋe$ μςrI6σ…unžΕ^VξEΨσχ,–»?”;sƒ?^nζ•π9lθ±ViT§F΄»νΊΞηBˆα2kδ/&y7‹rγŽ^xφ{›ψΜΣ/ΆΠΊEΧ‰³ςCmΖύΨZμǍί.x‘VμfΗs18qhbXήyΰqžο,ˆs4ΈΧ€{x‡εΤί±§A+l€%Χ=K°›N|[š!Doσ ΰΐΓη*ςΰ:ΜzόΖ‚λ2’Ό K*ΆKτu πcwžF<‡Y7fPΫΣ*z—s°±Ρ? |‘ΰΊ!Ί“Ν€'±α·β1b±’Nψ ¦΄@ЇKK[ϊάέ‹#暴Ϊ!Σ d±2-Nb‹₯'ž‹“Νe OJηΙγC$»c!U‘υ€€έΖυ˜p{=pCΑu©G|?§ ύ˜DrίζΤYχs7πr¬σεΐ+β ½Π%ΚO/Ŝχ1aΦλC±q²ΐ¬Ε—b.ζ³κνˆ5 $ΞEŒ,ηBˆαβ.νΏ![θΒ`‘1(6΄‡ρxeοpa4Ÿ$‰ΫbΜ najέ‚0χe_7€ύ&cnΐ›`.Α›a!PΠή‡ή)Σ(inΡ€;iζe–πœ@ΚΦ.J‰άΪ«Λ°γ™X σIΐ֘Υσσ4Ά¦{―θ ,©œ~(‹­b¨<… ŸΙΐ~C<†[“apmœ<+'αJ[ϊβΨάΨB΅1ΎρπkΌ+c+€[6³’^Ήe IΦϊFI²²ΚΗΦ΍hq–zτ7Ω^όΪ.iXJt;—―lν’”τΒPj#•­½¬ΜΒ’΅} ‹ϋ$Μ½ί­ιOί.Βά ‘Vœ bF1|ώμ…Yh[Αnέ‰˜w{~zΨ6%Lλ…uώy Φq05΅nF8ήl¬=π–ΈτΙπωΙ°άh¨Νͺ qήΘr.JM/Έ΅·2Ξωμeη/ΊIXς*’ψ1w%+2l(¬ΓzΎϋlM8p*‰5έΏ—ΔΉpz)c―’sά&145/2£Ι—¦κ Η­=Ξ‡exgJξÌεΩξž±χ$^"ξυ1ŸΔ[Δ;Ύe„y\¦Ρ8η’Ττ‚[»[Ξ·Ε†9›„=€ΧΓ„“ΓΊ‘Ž›I―Ύ?ύθ½ξBΧ,1L«‰dΌόJ¬£ΕέαςΜΑ2vϋ!Ϋ’XΣύ~8N/<+„’‘07άr~I5OͺΦL|w+&Hΐ{›v>IϋtaψΌ4μλΗX>/€6₯έx§…·igόFήΡαα&žδΡ7οδε\”’^pkŸ… τηG6)»{-ΓBΛ°?χX’žL“Η½œ.μ«"fύΎθ†ο3νUXGΕiΐ±˜ΐ ¨Ο€pώo†ε™ΐ 3u2– v†>\έH ‰r„Bˆ‘ςΦξ9hϋΖΖ”8,ΓEoμmGξΓΧΖ9bQλF˜tž΅ΐ;fXΧ=δΑsL Ϋ¦Ge\¨ϊΤΙφ^Qοmk―»·Ήύ{ϊh qϊας·τ ‰sQzΑ­ύ)`o`{쁙%ΐύ!1Tό‘ζI ϊΓΟ{οβžWΠΔ‰dΌΠJΝΚ{Οαψπέόεΰ/FσEXV֝€Iz~=ξlw‘^fN~@"pίμΒΰί³/LΒ“BΎΩ€άR,iί±€|eG±xB!ͺΜαXΫ'vωŽ z>žzΫ»‘<~ ΦΜF>A"€§‘hο˜»ΒίΫ²σIΪΎήΑαώ;yg‰wzΈ'ΐO•8e W\UοS§˜Ÿš—™ηc–έwΫ„uk±XtΟήώYμ΅&c²qφBψ:6ΜΟ°οr fAΏϋΗbCΛ}κ?ΞΒ¬ΫύΐŸ°ρ/†‰λs±lΈ'„γ€95l{λΤψ ΓΏp+π;ΰQωmΒ9OξΔ†Ίϋ8ηB!DΡ<¦^bi˜:Υ~υpJϊΣ1ρ>πγ1AοΪ-μ.€=€Σ;AάΣ@ˆΚς Φγτ’’+":Ξξΐ•$φΜBώEΰ©²_ ΫOΙ  ΐ3©uρψν3±ΏΏ_όƒ€—χv,ΖήΛ튽HnΑΌφΒ„vš0οξWw6ξMΥα.ΜsγNΜͺρxσeβGΨ=ρ¦’+"„BΡnd9e W,η½Κ ,ΞώC˜ϋ: Ά’gυ@Ž‰Κ–™°‘yρO¬ `_ΰz’Έ―k€ΓΔτC˜ΐΣχa.SΆΜ8ξ>X¬»Η• rŠx>pζΒώ@΄~I¨BΩέβάr˜s!„BT‰sQz!ζΌWypΙraH›ζγ•ϊσ©μnνΛiΏΌΙv'NŠΈ.Z^GφσΊ/c]=Oc€Ά¦όΒδΦ.„Bˆ 3ͺy!:N/dkοUnΕd?π`;ΰlš sθq>—$ƒ~~BβΦώ6ΰΧC<χmΐλHάΪίΦ/‘v,R°ΧγΒ9M±N“n@β\!„•Eβ\”Ή΅W—ϋ1μ5δξxζφ²»΅܌eγΟΓƒΐW°Xσ»°!Ξnβy\…Ή½,Μa₯_`ςηGε—―> Φ½ N­π‘Τ$Ξ…B!„h3>¬Τ­ΉθŠξαΰtΰ0?&η~—bχΕ‰ͺW;ΩψŸ‚Ξ=)ΜΗΏΕΚ΅Β dΗ³—‘YΨ=±QΡB!„’jLΐΫ²šW›0«ωρ-μσ?Ψ½ql'*ΤN o€K±!ϊξ>ΩβΎ“€w΄½Fc vOLjVP!„BΡΣ°Ζφ‚’+":Ζ±˜pύZ˜›sΏ+±{γθŽΤJt£0/›΅ΘΛF!„DΩΪEΡ(\υΉ"ΜΟ.oaΏnI'F†I˜(wλΉB!D₯PB8Q4JΧ;œΩbωnJ':Ο†aήlLy!„BˆDβ\Ζ8υε\Δlζy†αB!„θ:$ΞEΡΘ­]ΤCβ\ΔΜ σY…ΦB!„’CHœ‹’‘[»¨‡ΔΉˆ‘8B!D₯‘8E#·vQŜ‹η³ ­…B!D‡8E#·vQYΞEŒ‹sŜ !„’’Hœ‹’‘[»¨‡,η"fZ˜/(΄B!„Bβ\Ν”0_Rh-D‘ε\Δxή„†₯„B!Ί‰sQ4η’η"fY˜O,΄B!„Bβ\ΔΉ¨‡ΔΉˆYζ“ ­…B!D‡8E#q.ꑘsγ–s‰s!„BT‰sQ4“Γ|i‘΅eD–sγ–sΉ΅ !„’’Hœ‹’‘ε\ΤCβ\ΔΘ­]!„•Fβ\,η’rk1J'„BˆJ#q.ŠF–sQYΞEŒbΞ…BQi$ΞEΡHœ‹zHœ‹Ή΅ !„’Hœ‹’‘8υpq.·v²œ !„’βHœ‹’‘8υπ˜sYΞ(ζ\!„Gβ\ΔΉ¨‡άΪEŒάΪ…BQiΖ4/"DG‘8υh”­}"°°a˜ž–}έ˜₯uq4- Σ’ΤϊωaN€rγ#:LnXJ!„’K‘8Eγ m‰s‘ΖŸO—S1ξbΌΦΣXΜ»χeτ+0 ξjμž]Ά‰|Β~λΒφΥαΈ+ΓδΩ­ςMΰ}ΐ'€s‡xŒN1X/ZžLˆ–§‘xiΖ~Kg΅nκSI:eF…}£γ !„BTŽΎ’+ zš>ΜZΩ‡5πΧ[Q2Ά¬³m0x˜}~.ϊ<>Mfd¬›F­€μ4.μΧaBaΏό.μ—믏φύ*φύγ©ν¨X€S£˜mG­Υy 06Zž}KβΥBΨo\΄<βήΏφ/θάB!„Cβ\ΙdL„,Cͺb0»{bΒu^4=GάN&“φυ,䧐X…]»Υ8ΆςΊpu+° Ϋ΄EΉ*¬ΑΌ œε˜‡γPΫ!ƒ½ βπ‚`A΄mζΪ~9v!„BT ‰sQ$ΟfsΒg!z·`»‹wlαv Ύ[ΐί‹Y‰ŸΔ:%v εΕ<άΝήΙ#n·Ξ;σ£Οnέwά5ίqΧ}!„B!DΨ,Ί"B”ύ1ΌΨπOa™Η©u;B!„Bˆ!³+&4ξ.Ί"B”ŒΙΐΓΨγτhύ‘aέπΕκ%„B!„¨ ϋ`"γΆ’+"DΙΈϋoάIm6€kΒΆΥΐ‹GΈ^B!„Bˆ ²7ηB€‰έΩwΞΨΎ!0ϋοόεB!„B “0q_Ρ’$LΖr0 `cšΧγ­$ξνοz !„B!*ΜLL\ 8ΌMΗά«MΗB!„#ˆΔΉ(ša.ΛΉθE^ Ό2GΉυ—ύ9ΚώeX5B!„… q.ŠF–sΡΛΜ~£άhΰ@ΰΖΞVG!„BΕ¨’+ zYΞ…hΞZdB!„¨4η’hd9"ӊ€B!„θrkEγβόΰ—ΐ$`|²c) ŽεΦχUXΆκί΄£‚B”€ιΐŽΐΓEWD!„BQMvVbc4·sΚ“8KˆnαΕΐ{‹„B!„θ²œ‹’ΉΨΨ&,/Ε,ίY¬–ΥΩΆXμ \YΩ…¨ [] !„BΡ9$ΞEx4Lνΐέδuo‹*±9°IΡ•B!„C αDΥX沜‹*±9°iΡ•B!„Cβ\T ‰sQEΆ@–s!„BˆJ#q.ͺƚ0—8UBnνB!„Gβ\T ·œ+ζ\T‰Ν qEWD!„Bt‰sQ5δΦ.ͺΘ έΧB!„•Eβ\T Ή΅‹*²25B!„Cβ\T Ή΅‹*² XGω$„B!*†ΔΉ¨rkUdU˜„B!DE‘8UCβ\T‘•Θ₯]!„’Hœ‹ͺ‘˜sQEV!q.„BQi$ΞEΥPΜΉ¨"ηB!„Gβ\T Ή΅‹*"·v!„BˆŠ#q.ͺΖ°ztΑu’](!œB!DΕ‘8UDΦsQ5δΦ.„BQq$ΞEρ€pŠ;UAnνB!„GβETYΞEՈ-η›››†i"Ξ°,*» X>―FΗ\€…,!ωί¬–‡Οk€ΕΡ>σ‡ω=„B!D$ΞE‘8?Ά Ÿ“xSΔ"4±± ]ΆΚ. ŸΧ‹Βη΄ΠEλΒ°½ΡΉ³˜„ ν™˜ψφωΖΐ«0Ύ,ΜΛΐ"ZοΈψβˆΤN!„’Λθ+ΊBt€§1Q³Yψ,zM€_Ϋ]‘:€;¦λεΨo9πl˜fcχχœ°ή;['γΓηqΐδπy0-:Φt’wΐ’Ξ¬ $cΓ6BΩι9κ،ƒ€_Άα8B!„•B–sQE4ΦΉxΈηηΏfDΫΧ£Ή˜ Lφ‰ΕlΌDLΠB­˜M‹αi$y>&…)fππD˜? <}~†Δr_¦’Œˆ_Γρ$ί-Ύ†Ÿφ£φš !„Bˆ€Δ‹¨"rk`BΰN ΏΘŠdΆT/&qŸοβŽ‚<±θ'„ωΈ†₯„¨}ΐaΪ0ϊΌ°Q΄ή;΄zYĝˆυ˜Κyn‰8DμΉγΫγžαn_J2τcΦv!„u8UDβ\@"˘εΌ©ήX—8Ud ΰ j·‹π"GΖ™ΡΌΘˆ‹wοΨ«'ξ³Ά{Ύ Ο2€u@’Ϋ#Ξ}αή©η‰sgt»a9Hώ ϋώBˆŠ!q.ͺˆ†RˆΐU K‰‘Bβ\T™S€wΧΩφ0/̟‹–γΙ…d,4λ ΟzΈΐυpœ8δ&CΙΪξVχ<Ϋ]όΗΦό<Ϋ'§Ά'ΝϊqΗ€ ύε˜8Ž…Ύ'Ν:Všzήρoγ,ΐ~Ο₯ΐG}€ƒ7’$2BT‰QEd9 q^6άƒAβ\Tο|ΈŒZΎήN#@‡?ŒΓz²Δ»o“PΖΉ,<‡ηϋˆC<H|Šύ~υhv ςόΦυpq~j¨{6Αϊ5ΐλsξ'„B΄…/a/°tΊθ6ΒξΩEWDόφΓ~“ί]!:ΔΧ°{ό”ŒmΏ&y'υGDΫ·ϋΦswοgπηdΰ©πy"°8(Uζ3˜e`f©=ΉΑwHǜ7«W3&aζ;GλϊΓδδ©{Ν,ηκžηœ1‹ϊ»’ν€9΄–.} †sM―&ρjκ΄ΣΞ+„!dYUDnνΒϋΥ KUŸoa–©‡ν ‹Gέ‡B£Ίη9η֘}΄mE8^#š]ƒV―iΜΏΒrͺ΄Κ±ΐ+€bV}!D Q#IT‰sQΆLν“1WΙfy>ή\ΩΖσξζw΅ρ˜CΕcΝj ͺʌ0Wjύ‰˜˜z"Zη‚νΐ“˜`?Ψx-p &πώΚ¦ίiqˆˆ?[v‘VψΖδ‰SN“§^ρρŽ Ξ=±xφ΅˜ M‡³¬h±ξYdΉΗ’΅Qέ½³0Ο9Σο‘Fο•<Χ •kšfpy“2υx]˜?Χ°”’P”NTYθD+IsF‚]ΙχΌύkΟ9ŠΔ² β|b˜―hXJˆξΕΕω‚hέ¬Σνt¬³Μ§]±ψσγRΗψp&άξήmΫ;Uv,ΩΧ"ΰ~Μϋ°υσ2―nPfΩVΩFυr6Ε¬Γηbnϋ«±gP³Žςj]τΣ΄r ς\ΣvβΧ*έy$„(璊Θr.ά²Q–ΜΰΐΔιD¬δŸK£υ±FφeXιr,‘Ο Ά:m‘£ά‹0·M(‡8Ÿζη’ͺΈ8Ÿ­;ϋΟ_ŠYhγι,Α›w€}x–Όλ՘;όύΡ±ΆΔ2«oƒΕ«Ÿ œΆ- ΫΞ>ˆ‰Τ]±€kŠΚœe?!gΰύΡ9Ε’“mκ½kŽz9³Γw?$,―Ε―7Kt–§ξYτGb9FF…²;FΫ]Σ<η\\Œ hwO(vmκ‘ηδω­;Αa.q.„bD9³œ~©θŠˆΒΨ»ζ]‘ φ!IΜsb΄ώ%X£iιDεΎ>„roΦoځοΡ*^Ÿο]!:ΔSΨ=ΎY΄ξ§˜‹sžμ Lπέ€Ε―Δ¬ΆŸ&ρώιΗ²²_‚Ε΄ {Η₯­άοΗ¬°+±‘ΏϊΧDΫϋ€aqΥ«BΏmίK<·4Τνΰ&υJs@8ΣXτ·K€7FeϊSηΜ[χ4°NΚΉXΘΐyΐH’΅m™£ξΝΞ9s#_€ek–©½QBΈfΧ O½:Α\μ7Π¬ BΡN|ŒΦ š•e v,.Ί"ΔcΏ$¬ W4ό™$±ΤUaέ²P&o90·Κ¬AVŽΓκσίEWDˆ±»Η'wΰΨυ­y……ό-)Ί"BˆΖΘ­]TΉ΅‹²Ή΅Ηψ˜Β+IL"Τ?E’νωα0ŸLo‘”+Θ­]T›q˜(_Y…(3°Ž[Ή΄ Qr”0KT‰s± ³`Ε\Q\œίCr―Ζ †ξ‰>οζ³°FUήrρΊ²‰σ­±αέϊ°Ž„+gSe?Ό{GΉθσ8žΑΩ•‰£Ύ ϋΝWcn¨k0—;Sε?Š -· ”]‚Ε—~–QŸΝB=`χV'¬O°Ξ•ρXήχ‘nΐ;Ε4,%D1(ή\ˆ.Aβ\Tek`"j<&rΚ2|Χdl|]€ΏDλγρm·Γ20Ό!¬»λ`Θ[n&πό°lβό5ΤΖtήΖ`1|°oγΜΘX7ϋ­Ηg”Λz‰%½Κ➌ϊ|8f)vHνo π9,!XˆΕXμ·‡Εή?”*7Φ‘Εn ίZ”¬dpνδ€WτΚΤ.D— ρ"ͺˆ,ηL»`+‹8ߍ$œ(tžh&πX⑆²ύΨΈ­”sΧw(8wα|7ΙXΎσ,„Αβε ϋ/»e’!£Ό>”[LΕήmΣ±gΐ“εΏ„exžJb‘žκψtFωΉXλι$–νΙaΚΚDύ:ΰ₯λ!±°Ζ¬ΐξΡe˜ΰ_Jς½Χd”εΓΧN‰s!†ƒΔΉ]‚ΔΉ¨"ηΚwΎ{τ9ησ€ύs°±Œ·Δ\·―.$Ή§σ–s—φX6χ2ΰ–σοbβ»Χ·xμ8ρί’0oΤύQ‹ΗCΖΊ)˜°Οrq$&ό!±°/ΓψƒελYρEχ5ΖΉeAnνB! γΜ΅χ‡EWDŠkT†aΔ„ž0€e«­ρbμΪΙ½½Ό”i¨ΐ«©κλ:ΰΥe((3}ϋωvκΊ Qr”­]TYΞ$μe²œχ2ΚΦ>tόYΆΊa)Q$>¬a-η·hqŸλιώαH«πΪ…{ςh(5!JŽάΪE‘8PN·φ^fb˜Kœ·ΞΈ0_Υ°”(’υΓΌŒnΓxξqθΎ-z Ρ%Θr.ͺˆΔΉ€Δr>a)1RΘr>td9/?†RλΎ | K78J…}žŽMνΧœ <Œ υw6”`ΜΰR,ΧΒ\ΰμ°_LΪ­ύpΰv`!–Ηβ§ΐVΡφ+°NΑ\‘°Q&ΖaΙŸΕž―Ζr`€Ώλ7Β1ζ7…υcy6–…kp°υ|3Τρ9,OEάfmvm²ΎΓG°όn˜Ϊ.¬―hΏ³±‘σœ#o™~Μ‚10Kκyƒ§N²4Μ'ΰ9…Bώ{αώͺΰzˆbω#v(ΩV9ψ φ{d%W9»vύEWDΤεRμ7:1c[?&H?삉Δuΐΐaέ˜usσhΏ³0Ρw&žΗysTζ|lHΕƒ°αϋΖ„z£˜σ£°αΆXςΘοc£:Δβ7Λ%όZΛ— IDATΜΪyPjΏΟX£'b’ο]Ρφ ˜€n%!ά$lΘΎ£uia;βqηCπ·TΉ~w"m]›Τ!¦ψkjέιX’OΘwm »ƒααXί ϋ,6ΖΓ*¬ ‘χϊη©G?π³T™οQk±ο4GcΏΑU#xN!ΔPΜΉ¨"rk ·φ²19Μ—Z‹ξΔοaΉ΅—Ο©°ΌΞφ;SΛΟR+@0wηΒςφ˜XΌ‰Αό3Μ·ΖDσο£m+€;šΤu'ΰ ˜yCχκΝ±‘³ΨsΓmͺΞ·;¦Κ¦ρ(pm¨Χ/€›±ΡTf5¨γν©είcΰS1kz³kS[1οΊ/―ΔB φλζa±?aΝΞ‘η7rCZΞ6iRΧvβΟέ‰ K ! G1璊¬ su>υ6ΚΦ^.<ΦQβΌu~‚ (…”—fβ<έ±2Pg·Λ|Ύ φΫΗΣΆ©ύ Χ%`λΓ,φ³=±ηγθP—<™9Φ₯σJ `ι―Βά珒΅£8>»•k“ζVΜ2Ύ#°k¨ΫΏc«sž£•z¬Ν¨ΛHΆΑύΉ;Ήa)!DαHœ‹*"ΛΉe§-η’Κ΄{4‚ϋ1‘Xƒ2`»Dλϊ¨uOO³)f!?x {_ξΜΰχε*L΄§Ο΅oκ\ϋopΎ˜?a1Ϊ{b‰ΣήΪ μΛSΛ―ΐbλ‘οΪΐΰοfωΕΏΝ·’ˆσ[CΉ<ηΘ[2ΰΟ]%„’δΘ²(ͺˆΔΉ€Δ‚%7Ύr q.ͺŒFPΟrή*Λ°lg`Ζože{cοΆ ΓΉ.Ζο°¬ζΆlpάΩXΒ²C0—ξυ±Έμu©rbω:ΆΔΖƞʟƒΉd?ΌΛx~h“ο²3–όμL`ο€Y–/o°ΟΆXBΈK±€u>ΆεΉ6υΎΓ,Δΰΐ'BΉΫ±δt[a’=ο9ςΦ£ ([»]‚ΔΉ¨"η$ΞΛ†7 —6,%DwΜ­}(œ‰%wϋ6Ϋ"ΰnl83ηt,ΩΫΓXπ78ζj,iέΧ0!Ίψ,f͎ΉΨ³pOΒυ§0Kτ₯ΐ ΰΰu˜ΎKΒρίφ{:²ϋ\†uά‰Y·/Ε2Σ;gόΪd}‡°δ|{’XΙW`{`ΦύVΞ‘§L[»BˆΒΨ‹q{¬ΰzˆbω:vœ\tE` ΰ £UβaμώήΊθŠ‘Α–¨]$DW ˜sQEd9X°δΖW<£±8Οu$‰ϊD~>Œ5¬ΟoVPF',ηB΄ Ή΅ Ρ%Hœ‹*"q.@ pΚDož•νY4ƟeJ­Ό΄;!œνDnνBt 璊τ5/"zŜ—%ƒ>ΔU£!²D±΄;!œνΔ;F'’6’₯Fβ\T%žA‰σβΡrxΘr^nϊ0q>€Β6D9ΐΌ:ϊΠ;QˆR#q.ͺˆ¬tδΦ^&ό7UqhHœ—›ρ˜θρ€‡B”ŝ ΡHœ‹*β1U罍άΪΛΓΪ0—;εΠp·v‰σrRdΌωuΨPjEp5‡C+²ne lί_qηBtη’ŠΘ…V€²΅—‰%aΎ^‘΅θ^άr˜σr,ήόzΰ‚ͺK™Έ?ά)Λu˜‚y84š..¬vCήdBtcŠ€@nνs^&\œO)΄έΛ‡Γ$Κ‰2΅gsaΡ¨Γ2ΰ%Ρς[φŠΦΝэ n°ε\ˆ#ΛΉ¨"ηd%(η’Κ4γό ΰΰ«μφX¨Β—€g±$rφOν›§L3nb‚σ§ΐV©2ύ˜Eϋb`0 8‡Ϊ0” ΐ₯ΐ"`.p6ΝΓTb·ξ+ΘΎ}ΐ©ΐΓΨυ»8>£~_ΎΜη?‹υΏX< Ϋ€>Ξ:ΰhz:ΤΗ—κΩξίζ`ΰ/Ψ»i>p°EΞ:·½…BΒ1Ψ‹φΚ’+" ewμ>ψsΡ@νP>BT‰fϚ,wξσ0!όL€^ˆYή·j±L³Έζ£ΒώΫ»ίΗhlœιΗ„ρQΐh`'LΜ•9x8xoΎˆΦbΞ³ΓY˜0?$|―#0αϊζTύζŸv>‚ μ3ΒΊ3°°ΝΤ§'SλυΠ‰ίf φ < xπBΰθπy€Έ»OΑs !„Ό{ύWΡ…²vάTtE` Ω`Γ’+"D›Ω»·[g{Z”Nΐ„ά‰ΡΊ>ΰoQΉ˜ wή2ΝΨ³ŸKς|1Ιύ”―Λ.$}˜kό­-'}ξΗ:4ξm±N’ӿ͟Βt6Μά[?Ά©ξΝΠ8ηBt璊Hœ €iaώΰΥ$’ΠE²—&/?žδšBλ ΩᰚlΡΎ šζg¬συkZ8Χh`jψw"ΔρχχΞ‰ψZ%ΉHά{'“X榆sΉ%Lnν­γΏAΪR(ΚA3·φGύ€-±NͺωXζρs0χρ‡€χΫ‡†}Vδ(ӌΩα\‡„c­ΕD―ΛΉΏ³Λδξ‚ς9ΰ£αϋ΄BΦu8KζΆsoŸμέσΓŠνxΰHΰ΅-μ“ηΊε·Ω‹υΎK¬·φLΌΌ…Ί —8^QR$ΞE‘8`Ωp^Χ¦γ-ΐ\אΈh/'iπ,ΫBY0K‘». Λγašžϊ<ε±wία’TΥήΗΏgΒ™œΘIΌ‚"APQPP1‹Š¨‚WE― "—¨2’HPQρΑ,θ ¨ ’ΓHf†Ι9χ΅Χ­έuͺs¨ΏΟστSέU»ͺvχ9½»Vνl΅XJ¬cp€L8W^fcS%Iuό祥σφTnžσiΐnΨώh,0ϋμ;y)φΌ+«žŒφ«$M)k€wcδIΨμ_ÚΈWλlp³ΗΒq©ςYŸΓιXψOcΣ₯-ξΕ¦)«ΧΦΐ^5μ׌ΏΝRμsTH,φy”P―ΡV…εˆ’©D$Wεζ¨ιDW`SΒ|ψYΞy‘όlŒMs3„βυb¬―eΉ€ΊU†S΄ΗΛrλ&Rέ ΧuΨϋ‡Βχ>KIjka5nρg«Hnˆ-'Ήτ›`sόΞͺ"bnφčΫ2ΆΑώώσIZD,ΫξΑΚΔσ’τWa[mϊMΨΌΥ;`·™X‹“§°λ„Οa³`l‰ύύΞ~oc¬1ύΌWœˆM5φmlš/‘vτEΰ,¬›ΓΙ9ηEDŠPΝΉt#ož»¬d*ιvsim­D#¬Αj‘ζΤΈX’€} ɍΏ IΠ&£TΝy?|Έ ›λ›αy%Ζb5 §Wb΅ΐ{4}>»Ωy΄Ώϋ^-i¦Ώ Ηω>π#lΪ¬^Qλ€p"­δ7LΥ¬]€)8—n€fν«–†Η3ygDͺXŸσqΨ\Κs°i₯ώŒυλύ{Ηή Θ<Φω W£€ΟοΗ&*πq’ΰό±Ύ΄cύp‹υ#ΎΌŠ|t²rΝΪEځͺY»HSp.έHΑΉˆt“WY'lΔλc€aMޏ§ς©Ά pώε?7`Aχl η‘N{ λ7O΅z,V Ύ*g:Φt]ΜΥΨoΞEΆ›f­Z 0ανΨ ;b3Q ΝH“υωκ³μμtzή‘β4 œt#5k‘nς+¬_ψہίTΉοJl>σ£‹l8€Μ1Ύ’­ΧGkο'{šΏFΨ»a4³IΗο%ͺ9ιjΦ.έfφΓ³žή½P‘ξβeΩΨ\s!Ε”šηόrμζΗ X­ε6 ώαΐ­ΐ"¬΅Χo± ₯Ό%€`xέ‡MuχX8χƒΐGΛ£ψ,6]ή*ΰY¬5…«$_Ӂ Γ{›‡ζ_K^ϊsηC^ώ… jθΫ_}neγr²?_°Zφ³±–!gRΨ"€–:œ{/ΰΈς΅ψ`­1/η`†ΤΣ°2Ύp26Ν_)Ś΅/ΐ>ΏWοΕnΔ]jΙs'Ϋ ϋ?½?ˆHοΨϋρy!ˆ4ΘωXΉφΉΌ3"™nΒώ>―+²½’>η£±ιη¦Fλ<8? γγΒ==(uœΣȞ—ήΟ±œΒ`ΌœbωŠϋ-Χ’—‘$].\8ƟU=ΑωM©uΏΑf4¨5ϝξεΨιΏσΈˆ§>ηm|€vυ7‘nα-Τ¬½=­ Λj©^ό/°'6՝7·ήx Jχ~`c¬†ϋξhύ,pΞ $/rΞ)XPzCς?―%/ΫbΝ«o‰Φ §p6zά™zύ °yx^Kž;š΅‹tυ9—n³IXΞΝ5""γΣBŽ)™JςRmpήόkα΅;, Φ`ΝΔcw`΅ζG₯ΦϋυΫNαxρc»ηmTΎβ1]jΙ‹¨p]-ƒΤ δ΅ž}ŸŠl―&_YΗ­&/³°`qίh]ΦoΏΪ‘Ωӟo%jΙs§SΝΉHΠ½tη"mΎOWVΪOΉΰό ΰ΅ΨœςK±Ξ`‘]l€ήλ‹μ°pcx}"ΦuλΰTμζΝυX“υ½±`zZΖq–ίΎ¦3ΒΉwΓ¦Κ{‘Κ|ΕΗ­6/+Γ9ΞΔ~―ŽΆήVζ|iιΟwAϋΤ’ηNη5η ΞED€eNšS.‘ˆˆHό ϋέ9ΌΘφm€›±ξ >ΥׁΨΤ]Οb5ΕοΑΛ·GϋΕ£΅ƒυΕ~ °έ±α8«° w:pp‰Όφ_ΐϊU―ΖϊaΗη¨%_΅ζ₯8›ζ,k*5¨l@Έ¬Ο7+Ώ3ϝ¬»Ρ²žς]DDDβ\μΗω ygDDDzΒϱߝw睑2Va«ͺ=iSκs.έFΝΪED€•j­]$κw.ζœK·Ρhν"­ΖεΙ΄&,Λ œ&’7υ;is Ξ₯Ϋ¨ζ\DΊΝFX?ΡΗςΈdRΝΉt M§&ζœK·ρΰ|NΉiœ…aΉΘ©)8—N‘fν"mNΑΉt՜‹H·Y‹˜= ›s^d0η)Ts.ζœK7Λ±)UDDΊΕό°ά Χ\H–VηΕ¦/©†jΞEڜ‚sι& NDΊΥ‚°Tpή~ΚηWg±i¬6kE¦Šψ=πνΤΊvʟ4—„is Ξ₯›LΛ…%S‰ˆt―9Ÿ”k.$‹š΅K§P³v‘6§ΰ\Ί‰7׏Žˆt›Xw1ygD©e*΅7KHϊν±Zλ‹’4ίώ½ œ ΌΜΞ€p€ΐÁ[Eΐ<ΰ·ΐK£ν—‡'„s SͺΘ³t>5kis Ξ₯›, K]ΌŠH·y'6άοςΈ ².,‹ΥœΟΖκuΐγXMϋ-؍δΧ„4oΐκύ’ύή̈^ΤϋŸ>‡δnΦ/}Wΰ,»–δZο(ΰΐXPί<\$Ts.""-γύε”K("" _Ζ~{Ύ^ε~N Οœ¬6Η7] μΆOnJν kΪΣFcφΤh]VŸsιWb«οΙ;#"’M5ηMΌζ\S ‰ˆH«ΤΪη|V;πzΰOΐνaέ>XsωΫ£τw¦φΨ4zύ ¬)ϋ`=Φ b(°u•ω’ξ₯αDڜ‚sι&k±žaθ‡GDDZ£žΰ|`G`|Οΐš­ΏψIv°šτΨΙu\πGΰ`wμ7phΨΏΏΚ|IχΨ<"mNΑΉtυ;‘n4•kνͺΦΰό,ˆ> ψΦη{Ip>£Šcm‰ΥŸ <‰εS‘wFdZFkϋ{ή|Έ1¬»x °Υη/`γ­^o€υ-_ŸJχD8φd`#Jκ/ŽC΅¬έDΣώ‰΄9ηmΤο\DΊΡ¨°\Y2•δ‘ž€ηF,@ž^―nΓj8o/²O–5ΐ»c€g±šψK°ζbΣΒ9ζbSΈ³π’=ι|ήΕ!έEBDD€)ώ‰υΓΫ-ˆ4Π XΩv@ή‘A>†ύm.Λ;# v.6Htοc«ŸΘ;#"’M5ηΙφΔΡ‰kΦ>˜\Υ<ΠԜ‰ˆΤf4pXΖzoZΧ„nΌ±ι9’rΊ΅©π€―ζ i(՜‹΄9ηRΚΰψΌ3QΒVΐGSλŠ5k? ˜ Μήδ|‰ˆΤbΦωgΐ„ΤΆ¬fνCύΠσΦ­ΑωnX{ι>.‚‚s‘6₯ΰ\J™ˆΝ›ZΚ»€{Γγκ°ξΟΨζΐQaέfΐΓΐ·€k?`5AgΗFΗ;ψ\‰γL λοΞΎDα€6Y£΅ޏM5s6hŽˆH»Y ^sΎ¦d*iK{bύ“ŠΩ˜…ή`£ΓΖΛQXp=>€Y…5/”ζ=ΐ«€›’c>ˆT[μ8Ώί½ΎλOut΄Ξϋώ-Όή5k‘φτ6¬ΌΊ7΅ώn,0ί6Ό>œΒrMςsφ·ΈΊ\B‘œ]‹ύ―Ύ=H6έε•,χaπ¬yψ›Βϊc°Zkχzΰwΐμπz~X~:μ³ ΄· iΓζ_«ι™ \lllŽρt‰γάœ†5Ιϊπΰ³ΐ5aŸ¬šσcΒς’ΚήΎˆHnώ<ΌΨ ›Z μFfΜΛ΅K[”/Ι6„δ¦s‰t"νΐ›΅«ζ\€M©Y»dy%v±ρ¬ογδπψs*]v6v°7°ΌίI3ώ1XOrsθjΰΐ‘X°^κ8χ»η`΅λ{bSΎΐΰα^/D΅"ώΦ? Ο‹¨όRl ΈEΐ/[‘)ω?›`7M>ˆ 0:8/lϋ―Ό2Υα¦g坉œ ΑΊέΝΗ«^Σ€σh@8‘6§ΰ\κ18Ψ<Όή˜<ό›bv9WaM܏  ‹g+` Vc~6Gλtΰ„°έƒs―9χ‹ΫŸΛ+}c""9ϊΦbθέ$έ{bΗ~Ώ―@εZ£ψ+aέ§Ύ μš‘ξlΰΨoΚϋ±ί½9aΫ’ζg³©~|;Ηύ{Ω‘Ψ5ΠΎΨυΟέM:jΞEڜš΅K=f' ―Β.j> όkb~WΗy›ν?ΐ aέοŠη5ΐΧ±Ϊ₯•Xπ½VΣt2…£΅ή^{ΣΟk°Z€g°&ς?¨μ튈΄Δ3XσφC±Ϊ ’mΓ°²TvUcC¬ΕVz@ΠΣ±AHΣ3|€ύΖά™Zχ pΦύκfl΄ό-°yθ5.»†ϊi^σvΨ5ΥΜ&ί©ζ\DDšn Vcq66zρvΡϊQ4`’ˆt¦C°ςλ!¬–|6ˆ>φΟό²ΦΦvΑ‚νiΨMήϋ±ί‡¬6<ν”°m έ€ΥŠ/πΪ ΟωΊpŒ›Šl?;`6ηo± ±7a7–c7ώŽΝcΦ:μ{XK‰η€±ί»Έυcπyll—ΨM„τT£}Ψ-Ζh}λpyxρcJ™|Ŋν_Ι{O7kKHΑ*ή[Z©χJωΊ0Ό·yΐ5ζ₯8x>δε_ΐώΡφ«)όά+sΌzάΞ±[Ο!""ΒO± ‡a?η-ώ‚š{Xxύ²°Τ@p"©.Γτ·…ΧύXΝή£σλΎ6ΫNX“ν―₯¬^ž?‰>-gΊ?8XSε[3Φ7ΣΪ°,vMυ ¬™όžΨx'}aύΦΐΨΰ§ΧbΑٟ±¦υW“LS ƒη½ΏΨ›φτeXp™ >–S°ΰς†JήPPIΎΚ)χޝ·…ƒ‘M‘ό{K«δ½Vš―ψy-yΩλŽrK΄Ξ[Yδ «ΟΉH›Σhν-Φa£ΎϋΘρ›†₯L‘Nυ<π’–}ŠNžΫόεX χI?ή ±Α=ί•‘ώV¬Ωψ¬π[±ZρoSπδΙƒσαΫϊ°Αύ^ΐjΨG`MτאJXsύύ° ϋCΐ£$S„f;žSέ―εv η‹ΫEω¨V%ω*₯’χξξΐj͏J­―δ½e·QωZYg^\zΪΩbλšM£΅‹΄9ηMβ&ŽC±‹ΊtmƒˆH'Ή$z> ’ZΡό΅Γ±fΑGί p”y· ›£}s¬φŸΨΝ†Ιn†Ό+Λ7!ΏRͺζ|K¬6φl¬Ά φeς·c}šwΗZmKOKΊvƒc16hΰ ltb<Ν%¬Ζ~;«ΙW©ύ«yο`ƒ€IasοJή[ZΉχZMΎ²Ž[M^faƒΐν­λΓώ~Ν™=‹jΞEڜš΅KΪΆΨtd~Wu1V+έ ξΔFf}yx}I‰΄`SIλό1ϋa»`\^―Δ>―₯$ύά!ωμ–c?Ξ«± ΣJˆHγlKς]…Ξϊž]Υ {« rεšΫΨ D6Ά Λ-±ςl}HηS‹ωη—OΛ°ΟjIpμΏk±rpXΏΕ;ΎX|…Β)ƞΕjΏg’ xΧιόχ2λšκμ3>»Y±|LΕϋpο€ΥΔΖ-Ώ&c‹]Œυ£<6θΨοΗ9ΐ©Ψίδz¬YχήXΐ9-€ωvΣd0#δe7l$x°fμ― ηZŠύ―Ό½LΎbιύηUπήca΅τ7†Χ'VψήΚ½ΧJώ&YjΙΛΚpŽ3ΉXΛƒc±Aύή–‘ΎΩTs.ζœKΪMΨEάƒ›†ωEάz’‹-JΑ~„L·Y‡ύxϋcAκuΦcTΨwv!6 u8μχaP`υ Ε.RF`?Šc°ξ$Bš αυ˜°}Ω£ΛίμZχ;ιMϋSέ@Xέ`.VCψ,6€—/ŸΓΚ:οΦζ#™{Y—a^. ΕΚ3°rn8I™ΦDxvσΐΛΘ‰αX#£ui«ΓφN―= 6΅ΩΣΨgΡhΣ± '7αΨ[–cίΗΡ$7E€¨ζ\ζ†εcX³+H.Ϊ 4K=χ ΊτsΏ¨K?χ@7ύάƒΫ¬ηk±š¬…X­Γ²πX=_Άϋλ%ΨrίΦΞ£ϋΕπŽΐί(ίNDŠ»-,—“ ͺ…SlΕeU”.V‘°μŠo¦₯ΣΕeYœ.Ύ9—N²qΊ₯XΩζ7Tπh·š±ψσΥNΐΚΉEΕvκεFkiͺ9isϊ!‘4°WEλVάa]€΄Β:’‹lΘ€GD*γ7W¦Φ/(ς\o€δ3^€έž€Mc₯ΰ\€ω†`Χλ霱„DzŽ~H$-+8—όθ’O€~œ«\kσ°ΑΕ6’ψѝ’ΩετM:τ―5Χ`p"mLS©Iš‚σφβw·œ‹ΤXΝΉδg^Xnœk.£Τ<η"νΒ?Υ€]€)8—4ηνE5η"υσrMΑyϋπρM6Κ5Qj*5‘v‘šs‘ ΰ\ΌπVpή<8WŸs‘Ϊ©ζΌύxΝy7η΅άDœΥ„Ό΄Λω€ύ¨ζ\€(8—4՜·՜‹ΤO}ΞΫΟ‹aΉaΉhŒ΅Ψ€wΓȞ’φχΐ·[”—«€3°‘ρ€ΝZtήrΪ5_½D5η"@ΑΉ€)8o/ ΞEκ§fννΗη6ο–VA>>H·Όι>ͺ9ι Ξ%MΑy{Qp.R?5ko?>‡{§O£ζŠ•Υ—‡'`7$€)aΫPΰl¬ΑlΰL kήϋ€ΟaΣ™>|΄Ž<–;_?p.π‰φ;_ΞήY"³±ΰ{6EέΪh[Ήσ|8œsgΰVΰΐKΓφ[°οkΒλ7`cμγ ΐŒ*σ%­‘šs‘t,φγύέΌ3"€έ,@5~"υ8ϋ]•wFδ\ύM>wFdφ~&flΛκs>Έ)΅ξ7$΅Π£€eΐA©4§ΧאΏrη‰ύΞmοξ§0οN Ος³Ψ~ϋԐ?iΎΧ`£wδ)N5η’ζ5ηΊ³Ϊ4ΟΉHύΤ¬½ύtkΝy5sί™zύ °ix> v―'i?€Υ¦Ώ¬Ζ<–:ίΆΨο-ΡφΰοX­½›ΥŽΌψp{X·Φdϊφσ'Ν₯šs‘ ΰ\Τ¬½½ψ(ΐCΙXDΚSpή~ΌΟωΒ\sΡ8΅tAJI$ΧeΎά‰€9Ό?Ά«1₯Ξ―K‹ΧΝΐ‚πqXΐ?kΪώΰ¨Os»ς>η ΞEژ‚sISpή~4 °H}T΅Ÿn«9χ€4+8_MυεχCXsρCλΙTfaߏ}£u}X >3Zw φ}: ψφϋ4ƒ$8ŸΡτœJ­Όζ\7ODژšΚJšίYΥElϋX‹}W‡‘AtDj‘šσφΣK5ηO―&K±ώιε,ΞNΕFHΏλ‡Ύ7dM«/»ƒ¬Δ­;˜ <ŠA³=πΆ(έRΰ.l¬€“ΓΊ[—`ǝΦ}x6Β»΄՜‹tη’¦¦φ£ΫEκ£ΰΌύt[Νy©rz°6Ϊh`‡ y:0ψ4p°Έ›ξ¬ώ«αΏ˜άΌx2•ξF`w’Zς•ΐmΨ{τώζ[{5)ŸRM₯&"Ύƒυ/;.οŒΘ)5 °ˆ”χ μ;τ₯Ό3"€€λ±&Ρέ½n&φ?Viΰ-jοΒώG‘wFD€ΈnωQ”ΖQΝyϋQΝΉH}T΅—1XζeXή TNK»SΝΉHPp.iΊˆm?Ίθ©š΅·—QaΉ"Χ\4–ΚiiwšJM€(8—4η΅ω5pa“Ž­ΡΪEκ£ΰΌ½tγί£–yΞEZI5η"@wx%­“ƒσߏ'村SŒH}:Ή\k…V—έœ—šJMkφ?4֍Γ>ϋΨ {}$㴌Εnšτc]*ΐΌ#€φΦMΐ*―ό<λ°Αψΐ0\uΙX•)ΛΓΊEE¬&ιΒ‘N³<ΓΣ4“¦Rιϊ‘΄vœj£ŸφΚO«ω©jdDj£‹φ7Kό&κG€©ΐll€υηθž#± uTτ7,g‡ηΟbΑf±…X°[Bς{ I;œ$荗[ƁtΌLήν`%φΏ^ώyxM6$ίC―Αφΐ’ΟΤƒΪ΅$ε„Χj―η‚έ€δvώωΕiΖceŽž&Ύ1αiό³υΏΣ’Ύl΄fΧΠ‹HœKš_,q~ΰ ΰΐMΐρo†ηξγΐGΫ7`5 ߌƒ]HŽyπα°ο#ΐ±ΐ±‹Θ'€£€ά4σœ2ϋ| ψ v;»έ5:FΉsg™όΈψ>π#¬ιh-Τ¬]€>/†ε >nΉςnp6ΏυΰTΰZ¬k=v1~ 6Ÿυ•!ύŽ`^Ό<x?XΟ ΗΎ «-»:€)UΖEvΩy%+ΓΊ±Yϋ°ΉΎ76ΛM€-ΒrBxLΙ+ƒ βΑ―/=P.·Œ›m§ƒζRqά€άk€»Yΐ{S}ΰγVΈϋ Ώy§™ŽηiF`Ÿο₯M}"R]μKšίqεω8l`΄9ΐέΐŸ±ΰυο©t·? ΟΕθ“) ΞoΖ.xΑξ$›{ύ7aέ ΐ~aY¬ŸδΘ φ]°ž„]Π‚]€ήZΕ1²ό/πμ"ψLΰ·Ψ…ωεE—’ΰ\€> 428―€ΌϋYjŸ£°cGΰ,hόx:€ωwjŸRεε(ΰσΐ;Βω y˜ŠυWSΎŒ+¦‘eXZ7糁ο–Ψ> ΨŒΒ€έyoVι}Σΰ΅ΨM†――ΟWa5RΥPp.RŸfԜWRή½ rχΔj§ϋΒϊ­±2ξ ¬&ύ,ΈΎ ¨gGΗ(U^Ύ +«―ΟΘίγaYŒ+¦‘eXZ7ηε,‡ςΈˆˆ΄―nXCͺηwΖk Ξ―Γ.ΰΆ ΟχΆΚH—Ψ¬?#MΦE[:Θ/Άšύϊ2ΆU{ŒbΔΎcwc}ζΧbΌΥRp.RŸωaΩΘΰΌ\yΧ‡uyΨ»Ι7«±τ2oλ—Ύt«ί#:N©ςΓw η‹ΫEω¨U£Κ°΄^ ΞEDDΚRp.iυ4k?ˆθf¬OΣEXσ–©t{§^οΝΞΛ•w[b5δgObAωT²g]Έψ*Δ?m+U^zωuh‰|–+γ`pΩ -Γœ‹ˆˆdPMœ€y³φZGe½λƒωRΰ;αωΦ؈΄n2Φoςb`¬ΟδΧKs%pΦοq.V³t,°=πΆ(έX3ΜΙX_Ίμ·ψ6Zς l°€ €έ€οUqξ΄ Ψ…μ¬ΒΎ$B΅Ts.RξmΨΰγ–*ο^ΐΚ C°2dΰΫφ68λΫύ6Θδv$γm@ιςryΨv*ΦΏψz¬μή» 0ςed—,Γœ‹ˆˆˆT଩εM:ώtl £K°QCηηRXk3α8Φœ‡υΕ\…υρά?•f¬ΛηRα~}ΨH»c5HΟ€Ξ_Ι1~ \Xβ}Χγμύ€Ο)"•Ωϋ=ΣβσˆΥ4?‹΅΄yόΎ=lŸŒζ^ΆΜΒϊw{SτJΚK°††cΜ ϋm/WΖe•ΝδΏ3ίnςyDDDD:ΪΗ±‹¦fM΅‘xKiΧc“ƒςΈH‡}‡––KΨfΊ΅Ό< ϋ{œwFDDDΪ‰ϊœKZ=}Ξ₯9Τ¬]€>Λ±οΡh4vC;πί—%S‰ˆˆτη’VΟTj ΞEκ·kή=6οŒ#ΒrUΉi3ΊΨ—΄z¦R«ΔM:n7Sp.RΏ%ΐDl~πE9η₯RέZ^j@8‘ ͺ9—45ko? ΞEκηS5ŽΛ5 ΞEDD2)8—45ko?šη\€~KΒr|ΉPp.""’IΑΉ€5»Y{;91x=ΥΥ¦]φ{΄™Κ šs‘ϊyΝΉ‚σB—`εΩΏ[xNη"""œKšΧœ·ΊYϋ}ΨβπΣΤΆ-€…ΡφstΝΓςq’Z΅Jμ–χ4(ε(8©ŸΗ›Ω¬} lκ³{°2k9vο*ΰπ&ž·»†εέ-<η@ Ο%""1t±/iyԜvˆ^Ώ>΅ύ"`BτϊΝ׃σj.J‡SΓsη"£ΩΑω»€“άΨ\¬Ά  €kštξZ Ης·76ŠύΪΙΚΟ5Ό…ηi{ͺ9—΄<‚σIΟ•ΐK€—†Χο₯°ωcœo\<ƒΥϊ? œ τ§Ξρzΰ!Νƒΐ>dΩ›Σ€'Β9g_Žχ_$Ÿ‚s‘ΞΡΜfνoΒjΗG‡„η# #€οEιΛ•3SIZ  ό"δ…πšυ)ΰZμFΕ—ΓΆ•XΉx@t̍€s±¦ξ+ΐ_iά4tkΒRešˆˆˆH C±‹ΈuXmJ+KrρxiX…] ΞΑš‡ώ"¬_ελUΐό°~1˜ϋqΎ@μbpX†ςK’΄o ι¦bΏΐΐο°yx° U€χFϋmو7_iα|Η·θ|"έθ μ{tjƒ;x2ϋ9`γ2ι+)g>@RΞ¬ΔΊύxš5$΅Υk)V¦>Ό#΅m³~[ΰ)’߁G€Ωΐ‹•}ω~8ώ'xL‘΄»pY.aƒό œο)ΰαωεΐΟΒ󏷄η ϋ ξ λώEμύ§aέςfIΠξι†DΗ6λ ―Frΰμ(oρ빍zσψ.I šˆΤζ‹Ψχθ¬ΧΛ¬ΰKΡϊίD뽫΄œ97ΪοΘ°ξΤhέδur”ΏaΡΆΒΊ>ΰφhWDλw«μγ¨ΘwΒ9Žkΰ1EDDDΊ’ΧFoΠ’σέΞw ΦtVΓ3LΗ.B½¦ϋΌ°Ο!$œoŠŽuZ΄~CΰΝΡ냣t?€π’τ` /€ΣOw}xύ—zίt<―iα9EΊΝ)ΨχθΜχs$εΔ‘Ρϊk±&ζΎνΥT^Ξό…δ†’;=¬[έx¬φXχeδέ·]^Ώ.Ϊ}•UϋV8Η‰M<‡ˆˆHΗQ/Ι² ˜ŒΑυfμžί…]xή†]$.>Όœ€―£χ7Ÿ#ΎθτAήfcyί)ΪvWτόΏΒϋοm;;#ŸIΏUύΝAΣ‰4‚>Ά¦dͺκ žo=pVž¬ΕjΉγ`΄’rfF΄ΝΛ¨ϋ±ζζΥ–YΧg€I—g»FۚYΖωί@Β‰ˆˆDœK–V χJ’ 4ΌŠη§bƒΕ58žfv΄n{¬―ηΐaaχi\₯›€5Gί‘’‘Ϊγfκ?f†ηύΨEφ XŸΜMΓzη"₯YΑω?£η§`eΓ?° }―°~&Φ"¨’rf ’~λq9“ž]’Ϊc₯g₯ˆ·έ– ’νoŒŽΉ#π°šΖΠ —""""Ί l_Υ‚s}’€₯Ύ#°ΑΰΌεω$ƒΎωΊ°A<«Mς&η>Rρ’Αΰ~Žγη|OH·0/¬›υύ6έJμ"2n"ο}1[ααœonα9EΊχΕ>© Ηώ%…MΚא”G>†Τ^ΌΦ}²ΞcΉx›·^Ϊ<:ζ6^Η¬°‘ΎŽ•WDD€£i*5Ι²,,Η΄ΰ\ތς9’>’«H.ΑϊjBrΣ€°}ΰΧXτΙΨhşΗF_χž‡±‰ΆΒϊΡϋ(ƐΤLΝΖ¦ϊmΨχMΨtnΐ¦ZKRs΅2·UTs.RΏf՜ƒέδϋ pv³p-6‚ϋŸ±9'„t΅–3ΎWfΕΫ ϟΗZ ύ+}JΛ‹ΚUQΝΉˆˆˆH…ώŒΑεμb{€€‰¬ˆTοBμ{τιΌ3"MœODD€£©ζ\²xΝy+ϊœKy^sΎ"Χ\ˆt6οκ¨~ΣR; '""’AΑΉdρAΤZΡ¬]ΚS³v‘ϊ5³Y»TGΝΪEDD2(8—,ͺ9o/£ΒRΑΉHνTsή>Ts.""’AΑΉdQΝy{QΝΉHύTsή>Ts.""’AΑΉdQΝy{Qp.R?՜·՜‹ˆˆdPp.Y|ΰ1ηνAΑΉHύœ·՜‹ˆˆdPp.YV…eΙT }ΐlΪ‘UeŠHqjΦή>Ts.""’Aw­%‹Χ˜kκΔH¬ώ`\x>˜Œ^OŠž i—‹°ξKΓλ…Ρλ₯ΐ‚Τλ…αΌ#°} ‹HmTs^Ή‰$εΨ8¬άσΧγΓΊ±Ψo…—#°Φ=σ£Η‹©ΧΎN5η"""τΓ(YΆ Λ―„Η*’AβZω|%Ι ‚bΟΑb°‹Δ>μβq(v9 »pŽ]Xφc”#°QΠG†Η¨°ntH;6μ;.:^«-₯π³‘ڍ Λ›Βr=vΣΜ-ˆž/Φ…ηKIjzW|W“ŒΟ±»ιvΝožϋ΅%$ι2’q™Ά&œ3ζe›—aύ$vzωηεœ—cC° ’²ΠΛΊ‘XΉFH3„Β›ŠΝ4@ςώF–J(""kœK–Q©Χ#Β£—ω…ΈΧp{-wΊ|a΄}Ixx€ο5μγIj’Όv}bτz,Im”_(+8©OΊ›Ξ’ΐ–Τσ^·˜€[„•cώz!IyΏ^…ύNlFΟΣΏQΧ’w#""!œK–Ήay,pI 3$5/­~ξ΅AιηΤL-ΒjΓΌΦΛk©Ό†j9vι΅_^KΧXy-˜Χ¬Ε5g­4Ψψ ΞEκ΅>,wξ#i$NŒzm2$΅Ξ΄ΊΒr(>V\c I­wϊX^ …e·ά‰yηeX\»ξ5ώ^ΞΕ5ϊΎΝΛ0/σβΪ}/'W„ύΣ|GW£>η"""œKΏHτ€pκž―©η"υς@Π›’―₯°)ϋόΦf§§ω]ƒˆˆˆD4Z»dΡΤ]νΓkγ}PE€:}h΄v‘ Ξ%‹ηͺ-Οί¦aωBΉι|šJ­}h΄v‘ Ξ%KΊY»δg“°œ“k.D:ŸjΞΫ‡jΞEDD2θ΅dΙ;8Ÿ€]΄'(ivq=d &Ÿ:hΙΤB>ΘΔ°m…Σ"Εƒ%A2ˆNγ…S ₯§o‹ϋͺΖΣ+₯§Qςœyˆ[ͺd 9Ξη–L%"εxpήM5η#±rΠg€πωΗ}Ζ‡ρΡλqXY96J7†€Lςς(žΞΛΞΈάτr1.½<τς.ž¦.λΈ^κDDD$’FΙ²aXώ»°Z„]„-O=_ˆ] ωs8.~ξmcΓq7 ˍ’εΖα±…£°χ’ψΒ’”ύo‘ΰ\€>>Κϊ‹aΟ3ξgό=ŒƒO>Ζ7ίβΣγ›p~Γ/Pγρy'`eή’ΰΪ_O’pξρ ΡλρŽόή©Ts.""ιτviŽxJŸI΄~ώίEΨ…οb’ δΕaέ"’ ]―‘Y@r‘μΎ ΓΊ%Ψ…μΠpl―awρ”Iι)Ϊβ)β©ŽΣ.ΕΣ+₯§QЧKςβΌζμ»XjΞe5k©O:τ@:wŽσUX·˜dΪΗ%aΉ0<_­_˜z½”€Όςς(žΞΛΞΈlτrѧ،ΛC/οβ²Ξo"Δe―—»Ί‰θ‡Q²ψ`=;ΟbR#IjwFajŞO ιύy4ΟΓj€η…Η‹Ρσ9αu―ŽJžžΫΨ/Š μ‹‚s‘z –λ)¬yφΰ<ώzπ Ιχ1Dγ`3ΎAηg|£.nγv‹I¦LτΰΪ_/ΛεX ½(ΪΆ˜€6Ώ½ x ՜‹ˆˆPp.Yό‚t vΈ DZi oΰόΉΧκ/FDj5 ϋ.­%c"ξF’2΅4Z»ˆˆHΦ.Y4•Zϋx>,7Λ5"M#΅·Φ.""’AΑΉdΙ{΄vI<–/Ι5"­Gjοdͺ9Ι ΰ\²¨ζΌ}<–[εš ‘Ξζ5΄ͺ9oͺ9Ι »Φ’6«eZGrε#ω F>hR<ΰ‘¨δ'ωΘΏι}}$ΰτ`I«HFaχ9u}Z#Ÿ<žΖΘ§>ςi‹|p$Αέ§6Z>―n§y:,Us.R;½LσςiV&M ΰΝΛ,0nbXŽ')Η|8/οβΡή½Ί—E^ΕS«ωόα>…—q”i^†ΕSΆ₯έ©Όζ\ΑΉˆˆHDΑΉ€y­ωP,Hξ–‹'Ώψυΐί/˜ύβxExξS±ωΕ―ύ~1νΞ~s`ΙMƒυα8>ES?vΡ?»ˆχιΨΖ…uIΏΨO§χyΞ·lπη!KΌYϋt,^~Εσ³{οe——m^φΕ7 Ό<σrΟΛΕψf—u”k“HΚ±$e——qγΓφρ$7;ΌΌK2Κ½ADDD"ϊa”΄ΐ?=HsΏpσ AΏΘΛͺΡφ‹½t Ά_τy-P|Έ »Έσ ;ΏθσzŸ37«¦ή§jσ,―νς‹H_Ÿέκ4睑φ,0Ψ1Ό^„•_ I[/ίΌΌ«6σrΖkη½Ά=.ΏΌ\ςΐ5ž[άΛ4/ΓΌ<Œ§qσύG’άPέΈκO%_k€oδ ‘v—w€-ωEd'Ο£ φ= ˜^Ÿ£H.нΖΪ/„ύ‚Ϊƒ|ΏφΉ‹}ιΠ“H.š‡„γϊ\Δ«±‹v―χ¬Εaέ"’‹ύ₯QϊΥǘίΐΟE€υaίνnκwξε˜ίΘΜ ΰ½Œσ ίovBRŽyΉη7Hγ›ρMMou΄€μZΦ-!Ή»€€[Φ-&)γΪxιϋc€ώxŽξi¦/""""""" Μ}PΈΓsΝ‘ˆˆˆˆˆˆHΩ ΘΧbAωμ°Ό.ΟL‰ˆTiC`[’ώκ"""""ε X0>=,M2έv9ζKD€ίΒΚ°󸈈ˆ4אΌ3 }ΐΡαω•ΨΰD‹€Ÿ‡mΝ)_""ΥZ–ϊ½‘ŽγΑύ™ΨνAΔ]Γ‰H'8+·>—wFDDD€Ήt'^ΊΡΗΓςRlbχOΰn`Sΰ°VgJD€>嘦>ιr Ξ₯ΫlΌξ‡Ϋ/ ΛcZ–#‘Ϊ©Y»ˆˆHΠ½t›#€?Οfl)60܁ΐφ-Μ—ˆH-Ts.""#œK·ωHX^–C€I$Σ-~]θ~¬΅Y©Ϊ<`°8ˆˆˆˆTj?·=ΙTjΞ†›‹Υ²‹ˆˆˆˆˆδJ5ηMΌωe—ζΓm„†‘6 ΰ\ΊE°5Ε‚K»4€άΔ<‰ˆˆˆˆˆˆτ€W§^o‡5a4΅~°mKr$""""""γŠη""`v#qRή‘ζR³vιvš†HD:Ωqΐγΐg󸈈ˆ4—‚sιvλ€h"ιLΊΑ(""#†ε‘&{Ψ οLˆˆΤh}XκfΊˆˆH—ӏ½ˆˆHϋRΝΉˆˆHPp.""ΎΦ…εΠ\s!"""M§ΰ\DDDDDD$g Ξ₯Ϋ Α¦ šwFDDj0˜,Μ;#"""""υ˜ŒυΩ|"η|ˆˆˆˆˆˆ₯ΡΪEDDzΛh`yjέΐ«Qΐx ?,GW§Ώψ:02΅ΟXΰRΰ“©τϋΗc-βΗ"ΰίΐυΏ-‘Ξ¦ΰ\DD€ύmμŒΖaφ¬ΫΞέΐΟSιί| šΣϋ\|0•~Ώ°>Λcpp>Ψ΅Hϊ¬.sS€#‹€1pTjέ{ ±~I ΏΈ1#―[;†νkΕΐJ`°$¬“ցύΟωί!Ά°ex>δf π8vC(Ά;φ? 68βψhΫmΐ―“e‘|)8—n§iˆD€Ό–ΑΈ»:cΫ(ŠΟYžώ,–«°`x%pOFϊ€Χ«Γ>KΒσEEŽ?xΤOK䢌τ„GΪ*η‡9χΕ Ι?ψRΘχ,¨χχr#pU*ύΆΨηιώjΎα IDAT‚°ί°οό"ηΧψpžRΑνp¬ΕΨoέlΰώTϊ]€HϋόF ΐMΐŸRι>Da<), |'•ώΰ4μndjΫYΐ)©u볜 œœZ·_‰τη ΰ\DΊ„‚s‘φχ4p-IΌ œ½YxΪt,x^’±O–Ώ‡T‘Ÿ9αQ©ΗΓ£Rc7<ΙΟt,€τ`ΥΕ%ι·¦ψΝ‹• Ξ¦I!Φd?φ!,X]Nr££?δι§ΐ©τΗ_ Ο'₯Ά œ”Zχ°>ΛyΐRλ,‘~ƒƒσν°Yf9F:ί~³#«ΥΒ³$]“LΈ˜™‘ώŸXΠ°žΒ›@7Ι§ˆHΗQp.""ώn₯x°”eέ{ 07<*qMxTκ*ΰ,ψ–ή ϋΑŒτOΏΔj’‡‡τύX3μΩι7ΕjΫ³ά’±n(ƒƒ[°ΐuMΖϊ8Έυ|°ΦbYωΏψft,ΏipGFϊίOR/ ΗΟΊ)s!πCJߊ]AρnYf}S@D€«¨©―t»­€ϋ€g€Wζœι °¦ωc±`~ /Η‚Ϋ§SιύΖ$A°Tnl\…’έRBDDDDDDDšμnμ†Ζ.ygDD€Y#ͺŠˆˆˆˆˆˆH ©ΟΉτŠ>l ‘ΈŸ]7lƒ½gο9&<ΚΰΑŽ6ΔFϋ]zsΜΩΐ[SιGŸΑϋρѝ‘ŒΪ|_£ίˆˆˆˆH7Sp.½b,ƒ§ΊY–σ±‘ic£°q pŽΦEX€B*}XηƒηΔƒβΌό5•~46Ϊ.Xέ‡υ—† Ψσ?©τb#O ―}^Ψ±αψ;¦oέ7σSlZ›ηH¦ψ‘ (8—^1 Ζ½φ’‘qΧe€M=“εEηc±ΉV³,`π\½£±©‚Š?œƒΝQ›%λ{Ό˜Eα\Όήjΰω"y<ˆ(~hFϊ•Ψ΄6γ°Οt4φyަςΡ•EDZmv“s>VΆ'ΉQ{6‚ψyQϊ«°ςΠo^Ύ ψ°V>ΞΔζo »Ιϊ9lNυ-±2ψ|ls·1I?Qp.=c>…²7s άΣ–o Ο}\Β>YΣΔ¬Ζ.θΖ‡Χ£±ζαΕ,. ΟaσΆ.ΕγEι…όψE€Ο »Œμfϊ‹—•8Ϊ*ΰ*ΟN έ6Ψ@=O―ͺβψ""Φί?ΐζΖώ96½X₯σdΕ¦k;ΈϋmΨ+Ώ λߏݼ ΌΈ +―i¦aS²]|ψπϋšί‘ˆˆˆˆH…^Š ;+HOά€Υ›7?¦°’βΰσ©ύΒl°yΛ°Zσ΄QΨΝƒRλO^Ώλ*τ `WlΎς£ͺz'’εϋΐ_¨ξ¦΄ˆˆˆHOQp."νΰoXλ >ΰΰΒπ½…cn ‡ϋaό‡€G±¦ν~=΅ΔǏτ€£†τwkΡ """"ό«EιΆs΅՜‹H»ψVc½ p<π$…3K\ΗΰY(ξ%©9ΟrΦo}46ˆζ—ΚδαxΰίXω/`}Σ·(χ""υ4 œˆMs–žfMΏΗšež˜wFDDκp10»iψπ|k¬ί7ΐtΰSX°=kΆΎ#π―°}*pπ¬)ϊX­ψ°ΐόΰTl@Ρλ±~θ{cƒŽN ǘμΞ=:<ΧˆˆH:±ζόχΐ·kάW5η")Fb΅δs±φs°‘Υ½ζ|2˜ΟΖfΈ˜|…ΒΎλΗ†νs±€ΰζg½ην‰u›wFDDD€Ό!$S© %™γΜΣ±iΡ.ΐ¦.›‹Υ ŒΎ‹Νώ4ƒG؝|›ͺη9lΎς³)Ϋ!}>l’Η€ΨEέG3Ž[K~*=φ·±‘nη`g’\l^ΞΰΑ¦`sύή‰Υ-ώŽ5›»ΧmŠ}ΦiŽ{±ί§Wζ)­ψV{1ψ 60Λ Ξ_Ηχω,6PΠuX“ŝΒr5…}§cσ” n·Ηj_ώ»ΔΉΎŠΟ‡`΅ΜG„sΏ³ω©τΨ+°Ήy‡―ΐζT?"J“9‹ε'/^ήσKΒφ+±A“~Ό‘ζQp.""*™Ϋ6+8Ώ1uœYΐ£Χ}ΐ ΐRϋݜΪο8ΰ™"ηͺt^άZςSΝ±—Jσsΰ’θu:8/5Χ/h_i-η"4 œt»?Η`ƒϊά†–;PfΏ»R―ŸΗ¦½qXπMRιξM½Ύ x<°8΅m 6 Πυ φxω©ζΨ§^ΟΆΘΨΟ=Νρ{πgμζΗΥαό`S½»Qρ¬•ΒΝXΜ+KWDD€”QΨοωŸ°QοwΕJΆ››~fσ³&"R?Νs.έ’Ήm³¬I½(².ύžzέ_βΥΜ‹[m~ͺ9φΊyΛRj_§y|ED€ΡΞΔZr}²‚΄»bέΑf0ψ·YD€-)8—nwp>Vs{)Φ\ϋ ηΆm€½S―χΑ‡KךƒΥθ―mB>yμΥXτ΄Ϋ±~ν»cƒΝ֏υGπnl »₯!ˆˆH­~–ΒƐ)嘰ό ƒof‹ˆ΄%5k—^PnnΫFšŒMΏs1° 6ZϊΧ‹€­t^άZ4ςΨO`ΝΤ'cAφ–ΐΫɞλΟγ;4œ[DD€χa7†wΗ7½"¬Ώ weix=xOxώΓVfPD€ Ξ₯W\=yΟs0λ#ΎΈψV‰τ§cAμ§±ιcύΦΟm@^uμiΐnXΝχhΰΝΨ…Ρ§°iž i|.ΰ3’}/N¬)χ"""ƒ]Œύ}‚$8?&•ζύΨX/3Ps‘ž48+οL΄™ΙXυ'rΞ‡ˆˆt‡Qΐ|μ·ej‘4w„νοmU¦DDA}ΞEDDD€S¬ώ_xώρŒν―Αƒ{‘ΒVs""mOΑΉˆˆˆˆt’‹ΓςCXw«˜7qΏXΩͺ ‰ˆˆˆ΄»Ι¨Y»ˆˆ4ή?°ί—{bSxnŠ―2μ˜_ΦDDDDΪΟlΠΈ ygDDDΊΚ‡± όοΐύαωWΓςΖσ%""""""3FaύΚ€GΓrfXΎ/Η|‰ˆˆˆˆˆˆτ” °`|^Xϊσ‘yfJDDDDDD€—Ό ΘΧ’ηηηš#‘:τ坑έμ½~π0ΙX'°ρOΖύΐl„χ‘ΐψf"vM<ŽΥΌ†γBšIa9Xλ°θ–5iˆτη"L/ξžvΞ9/""­²5pVφ=<ΜΖ‚―^ЏΓ£°@ΧγρXP< |}ϋp,θνΓe’΄£±€Ϊ9„$πžo^―§ϋ¦ nΕ €xέ}ΐœ&Ό©€‚si¦m€'§°iΥDDzΑΖΐ ^g­ λžΑφ8px.<_€s^Dz’jΞEDDDoxX Λΐ¬π¨D<Y,νŒy y±Ϊj‘r¦‡εΉζB€‡)8‘jΔύλΌYœ_zs»x$άΙ!ΝxμŽ|z€O›5"§υ¦™PΨG0nΪιύγfήl²ή}ΌV¨Ψ>""iύXλD/Oj±–μ~Ώκ ,Νr76OόΛ±ΦnOε›‘ή£fν"•9 x#V± «‰Xž/Γϊϊ-ŽΆ/Δ‚7ίή¬‹)n=€@2˜O©m>κ­Ιϋt2ι€ΫΣΛ`•τΎΥςά‰HΖaΏ ήο\€S\ |Έ<ί¬ˆτ՜‹TζΰeuΓυ₯XπφΛ°οδ0¬φΨk“}pΧGΟΝcDά¬Ρm=8υ€4 w1Ψ/ ΫΌyezΤάxΰ#Ώ‘‘a ΌρΟ’yl}bH>―xτΫΈ9¨ίˆˆo<ψM‰Έ…@ΈΜ‹ΒΆEH;ˆ§:š[$͜°ΤŎHoπί ηiό6kΠAi2η"•iΔ…ΦŠπ˜Wv€ΓψMΙT"-όFœš΅K§ρρRt3Y$CςΞ€H‡PA©‡ηΊΨι ͺ9—N₯šs‘)8©Œ‚s©‡‚s‘ή’šsιTϊ½Ι‘‚s‘Κ(8—z¨&B€·¨ζ\:•7kΧο•Hœ‹TFΑΉΤC5"½E5η©Φ‡₯Ζ₯Ɂ‚s‘Κ(8—zh€‘ή’©Τ€Sω”ŸšF$ ΞEΚ†}WΦ’άQ©†jΞEz‹š΅K§Rp.’#η"ε©Φ\κ₯ΰ\€·¨Y»t*η"9Rp.Rž.²€^ ΞEz‹jΞ₯S)8Ι‘‚s‘ςTs.υRp.[tSW:•‚s‘)8)OΑΉΤKΑΉHoQΝΉt*η"9Rp.Rž‚s©—‚s‘ή’šsιTΓRΑΉHœ‹”§ΰ\κεS©Μ5"*ͺ9οΏ.Μ;-δ5η sΝ…HRp.Rž.²€^ͺ9ι-šηΌ±~|;οLτ5kΙ‘‚s‘ςTs.υRp.[τ»Q™ώςI€Εœ‹δHΑΉHyΊΘ’z)8ι-έΪη|°Ax>˜m›|Έxx8›ΒkΝιXρˁyΐυΨoμΉΐσXYω/`hŸΛC€€π˜RΑ~}ΐg‡4ΟηDΫ+9FΪΖEžw η""ΦφΓ.ώšwF€c€ύMΟ;#"ίΒΎσ'村κ~ŒŸρΰυΡφιΐΰƒXPΌ=πΰΏSiV Η‹Λs€Γ° {6NΗK£ύ²š΅W²ίΧ± σh`;`/ΰΈ*‘ξs~%pxxώ+ΰ­t>μo8 Ο9/"""™Ζ~¨Λ;#±φΕώ‡nΙ;#"ίΓΎσΗ村ά€¦›7?†Ei¦‡υ±γ€gRiβ›”#±`ψθh]p?…Αx:8―dΏΡΐr ƒρX₯ηNη―ž>μŠΥΖUδf,φ»,τ*5k)―š΅Ύά,Ζ~xgί^’cΎz…š΅‹τ–nHτOΐ,ΰ}ΐϋ°€tm*έ½©Χχ[γ£uDΟ·ΕΚΕψΖεπw`Ηω©dΏ)ΐ(μ¦B­ΗΘrπZΰT`'¬υΐ™ΐ{KμΣ)4R»HΞ†•O"σ:=8ίΈ‘Β‹ΥΐαqΦ§OšΗ§RSp.Ίm΄φλ€Ϋ„η‡[a5Θ±tSθ¬ίVf¬¨p]5ϋυU°­η>«ΰΊk]·ϋ-νtκo.’3՜‹”ΧιΑω₯$ωχ-° ΗΝ±ζ~Ο†m_Αšσ-ΐϊœΝ^λμ’ε ΰ lαυΈζβζώT>ώΦ₯Šσ½Έ»‹ΏxληΈiοΏψΊζ9ι ώ»‘vp>ΦlύRΰ"¬ΖyΛTΊ½S―χΑ‡[\δΈ³°ςqίh]_Ψof΄n56]5ϋ=„ύnPηΉΣŽN^|:γΑϋt η""φ>Œ•—ηœZl¬'iͺWΚ_€G°&‹ΏΕFΪ'© ρΰ|-πΦLήGΟύFH³W΄njX·vq5€5‹¬δ|›cNžχί`5λ±ζŠdμ}<™s>D€5~}ηΛ;# φΰ αω‘Xyο¦cAψ9ΨMΦ#° οσ©4g₯Žy60x…ƒ²MŽœύήL6ΒυJφϋFΘΓΗBžv£p€JŽ‘ξsώe¬Eΐi$£Χwƒ7‘1vDD€Ν}ϋ±Ί$οŒΤΐGšΐ."JΩ(,7Ζϊβν»OΨζΑω’)dnλn‹ŽυpXwFxνŸα"¬`%ησAΤV`7άζXϊN²φ^žΟ;#"ΒΎσoΞ;#-4Η䬬ŸMS64•&œχηaAr±ιΜΆΑjν—Q8•ZΉύϊ€/`7}WcƒΣΕη―διΰΌ›½ϋ|žwFDDDŠ9ϋ±ϊnή©ΑώTœƒw…4œ_νwiXχD΄ξ”°ξΡπΪψ‹«8ί¬vήΧ=‡]πCε} ΫΕ$μ=ΜΟ;#"^ζ•›3»›dήY>AηVFˆtυ9)―“φ™I2°ΝA%MΕϊ£oόkz~|΄}h*}άp]XΖσO°ζηΫaύΖ}.άΛ«8ί"¬ βYΨσ}X“»‹± ˆN21,ՏO€7ψοF·τ9—ή >η"9Sp.R^'μ3ψ]xΎ7o‰Ί> άΑX°μΑυcsΩΞ©γΌΟ’Μe{)l?‚ ξF…燕Q§`ϊlό#lΫ£ŽΌεaλ°όOΉ‘VιΆ©Τ€7(8Ι™¦R)―Σ/²ŽΑj°wΔjœ?Υv{mψG° ΩΧ]άIύ΅Σ—c΅υ›E―έέœoKl΄έ°Τϊ=ΓΆ»κΜ[«ypžžvHDΊS'·ΈͺՁyg@κ¦yΞEr¦šs‘ς<8_“k.jχΦ<ό,^н—G °ξG€£°©eφΓ‚κκ<ο΅$?π끟FΫ*9ί‹ΐ/°δφΗˆϋ7p*78ΟKΒR5η"½‘“[\IοRΝΉHΞ²jΞΗΫc}JΧ…‡χ/]M1Ρ«FcwΓΗ`?Ό°ΟpBx=¦Μ6ί<6UTΌm6 ι<,(I?ζ¦^ΟC?ϊ­ YΛ±ΎΫ₯λΉ"ΗA}ΌŸ7ύŽχ‹k¨γύβZmί/M_^{ I“όΥXSqHjκ³Φ­ΒnHjμWb3$7)ZaV…ιώ‹δ3•ζρΦ #sΝ…t2/Kηεš i՜—6Ψ!<Ώ3ZΏ[XV‚SΟ[›.-™JDZj œ.+—PruφwΪ%οŒτ€―`ŸυΧςΈt,Ώι7¦\Bι +±οόˆr {ΤΨη3|˜½ŽkI*!6¦O`Ÿο,ΰ«$7B¦Fϋ\ƒUΌΜvφΑf&Y܎΅@”BΟ`ŸίVygDD`_ΜσΈ”t φwΪ'οŒτ€°Οϊ‚Ό3"iΦ’g Ιάξ"έΦcΏϊΞg;–$ήxp΄ξAΰ6ΰ—!ύTlζ‘lzΝίa­€sCšDϋ/Ζ*™ό΅τρΊ+›χφ:Φ\μ³Ω8Hbsμ‹ω\ή‘’ΗώNoΜ;#=ΰ(μ³Ύ<ίlH‡šˆύ¨I»HoθΗΎσj^ά°Οh IΧΕ#Hηm£΄C°`}›ΡΓoxœΦ=^ŸνΙ°ίνΡΊw`έ( ―olόΫκx‹±Οf|ήιUY}Ξ5ˆIgπnj&Ϋ|>0Κ„’©D²iτ[‘ήβΝ¬uUάa9“d|ο¦·«ιvov ΟίχΩ;σp9ͺjoΏ'!Γ ! “\Β €"£ *‚^υ’™‘ΙQœ "Κ \Όζ"\Ή‚€€\‘((2Ȍ€€Μσ@&B&’σύ±φϊjwκιœξκξίϋ<υTWΥ]»»««χo―΅Χ KŒΗƒρσΞ―‡„υMΐUα΅?O €αŽk€nN›,DHœ·/ΐNβΌωHœwΓ°θΐΓΪ_OŒφΓ, ³0ΛWΓλ™ΐΛa½0U―’ί Ρ]¨U™$b;‹λΎŒύ`Φς4ž’#Ύ)¬W6Jν¬^ίWs‹»ƒ―e§"'$ΞΫ·œ+Z{σqQ΅pc΄ί³€ύ™Ν‰ŽΕΩ I£ηx–'Ξg#€Μ„zγ?ΞJηv"γ0kΘhLP{ΦΟ1,B"ŒΗc±‘L–ψn”ία>“$‹…,BtŠΤ^™MHR”Ζβά£·?[Zœ™Ρλ‹1k;ΨηόiLx―N2Oϊή¨Ύ‘©}±Π—8/ΕϋK(B΄‰σφE–σΦαβ| °Kž Υ„½Gh˜‹S ‚‰ΞΈ³ι© λΨ2§,τԈεΔςP’4‰ž:qxΨ74”‰S-6‹·1+ψλΡ2+Z^Η>―1˜˜_%,“Β²*09΄{JηLBιg)„θ\ԏͺΜζΡλXœϋζ^Ψ\ρ›°œηΧcΟί•ΏaqWƂčΔcγψ;.Ίί›±ΟΕωr,ΏΊHΠ}+D8o_d9os£υήΡ~·ΰB©π„D\:nέu\”Bαι–_§—λc(ύνNˆ^»vF¦ΞΛΆ+> ΰž >hΰή >0ΰ^±WΓμΩζΒΫEψLηvΎ"‰PŸμ|‰κA67ΐ:˜Ω v!ςA–σΚΈ8_<ν?{ώ½ΛwώΗ°`g,ι€]±ηχmX4χ·I\ڏ†Χ.Ξ_ u@"ΞG)ƒΣhΎΉ@βΌ}q+œΔyσqΡ6 ˜‘gC€[’wwά‚ ‰•Ϊq7qΗ­ΫN­ƒ.’cλz5νVϋ¬s‹ΞΰΙ°@2Ώρ*η'™YŽΟί ―Η‹ώˆYς‡?Α² ¬ ά ό_ΈώpΜ5 sύY¨γμσ=½L=γί`Vͺ€γ««΄QˆnGύ¨Κ–4Χ‡%‹€OU¨σδ°Δ|5,1SΓ"ϊγωΊo…(»aζίηέQ‘c(Νο)šΛBμσξ­VPˆίΗξiUΚmEa8‹u€§0α °Rjέ‹Ν«Κ,&8ψfIϊKTηΓΐšκΩξNμ•!„Θfsμ7wή ’ή…έ·ηέ!ΊYΞΫ‰ιΘΠ’9ΜΕF•Η‘Ο\ΤG΅hνΐ„πΜ³aΧ°`·N€€kIά3έx8ηmLh―Κ<<Κ<Š υΛ0w{žτπ|…zξΕ¬εKΒ΅o«ν- ΡΥ¨%Ϊέ·B‰σφEβΌ΅ΜΕ‚'GBΤ‚»χ—›ίΈIXo…Ή[Z¦\ύ#θ~ΨΨΠ qMŒ-'yή_ΉΓ―ЉυJυάΌσ¨:Έ&¬…εQ?J΄#Ίo…(ην‹Δykιζ\η½X 9ŸΏ>²ϋVΔ„c|ΗζσΊ™η§SαUΒΣν ­Xͺ:7cσΝOΑrͺOΒ>Η§1A½ &°«qp!6|ϋ°―\=οΐ‚ε]ŒΕψμ ίƒ­d<6ΐ΄?c*IΌ…f’€p’Q@8! €Δyϋ"qήZ<ΪχΟ°@_žΗά˜ΉX›MΔΜŜ;›ŽΝ₯4ΥX#‹Ν ½žΪολ αυL(Ε:•cιHٌ¬^€Δ9ζγΌχqΪΉΥΒz°σ΅ŸΎάΆΑζ„ο‡m{“$—o%my‹b 沞UΟΐ‰ΨϋZ2Θχ D#©–α`>παυ(ΰΛ΄Fœ«%Ϊ„’d‰sQŽΘ8&ŠƒGΡ–8o σΓϊ}aioaΏΉy˜pŸCqοΉΙίΔDΥxJΕw,ΒΝΌpνΉ$Τη‡}sH\ŒΞŽΪκοΝ#ζ“ fx½ΛH’ΗΗ)γβhοι(ςρϋŒSΕΡδγΑ…85]:ͺ|­>NQ§Ύ‹£Φ§SΥM(σ:‹j–σ;ΒR‰ί„%f·2e7‹^§ΝmœΪ~«B=ŠΞ.ŠJ΅ c€ΑDόχ±]7cΉ²Ώ‹Mο8ϋ]? ˆύŽg`yΆ·Δύ)XΌ†°όΫ•2Θr.Ϊ * Q²ΔΉ[;!r'#Λykq ιOΫIDš‹@OQ6>σ_£HDγΨpl<‰`–Fύήζa"8^Ο°ί_»ˆ^Ά]D·’ΩΥ‹Št~ϊ8΅\œ²ξ«ΐ>˜ϋ~5vΔάΚKιœq!Δΰψ°π‘°½6p°φό›†₯χΊσϋ`BόOΐaΨT-1όρ?ρ IDAT‘~–ΦλAΰλ‘ΎxΠN"gπΔ΄ώl]ύ?Σuγη±Ζƒ±ρΰmμΉζƒα`1=Ό IΚO(Κ{FΕ•εκmtί Q*‰σρΗDq8o-ώ»x ΈΌυzΗΒ­Ά(/όGcιJb[΄Ž>J?σrŸ3a]Ιrώ,·Έ[―Β\Θ]ˆώԚα Βϊ a»ψsxύ8–Wΰ~ΜͺΎΈ$=a₯L±τ¬Λh|ZΣhJ— ~!{=ωXμ}δυΗήM±7T§0ΡΗ8iδ`BΉz—‘€Σ”8"G²ΔΉw0e9/6.ΞίΚ΅έC³Β- ‹„uη‬ηνΚΐ X„φψψΰΰΰ8J;`Bt;΅f8¨D–• }ξͺ”Š“εΡvœυΰAΚg2p δRLďλ»°άηwa±KΚh’8!+’€ω^Ηϊ½Ρλ‘”η^ ηz€Ξ’ ΗΉ$ίƒχy\ˆΖbΣGݚ‹WŸf₯Vωx° ν O{*7…ͺάt¬t½υLΚ›žκE„ΝB–σϊx›ίφίX‡ Od9o-ϊ]ˆ’%Ξ‡_N&–9o&φΎ‰ELB Ωα܌ύώNΕ‚-ŽΗΛj ΤY)“ ·ΡαΨκXf„ν)%–ΛI½½KI¬ΚξM5Ψΐ’Υπx'σ£6Έ8WΗοΙ­·Λ°Ο„¨ώΨΦμ*Ε:‰E<*ύqά“J1TΚΕc‰λ-Oev’9Αj…52q> 8Ψ ›—5xώ)π|ƒΫΨjΞΗάIΓή_Q‘8o-ݜJM Ž΄8ί8 Ψ°ΖσWΕ? Nβ&/„¨E˜ΛϋCXΖƒ―bsΙ―Β„ΙRΰhΰΡλ«”ΙΐΕΟ‹ΨάυΡX€ΖΝ£eCL|Ε™*VσύΜ&Ǎx]OŠHQ;Λ©m Tή œ š! Dφ'ΥG2ζLΖζ^υEΛβθυΤ–΅²yœ½—¬?θαΨiϊsΙƒG±vΎ;1Γ° >ο­‘μ'±Οϋš¦ΆHt"Η`χΞc€ϊ±Ό…ΉΑGQTΎ‹ύ^O¬Rnfντεΐ:a™‚‰ψMΓφdJ³VΡhόΏκ'y7DџYΨ4νnω;’Nβy$ω{WΕ,:ΫC±τ$DΎ‘ώ.]…Ί.~ΌŒ(^B©λV­ε†`£αa£ΑsB›7L•9›υ6Bx76wν~²;ΔSSν˜ΥΧθχϊq,ψl$ϋ™πVIΥχl¨o-Δ@؜δϋ^όλ•c‡Pφ/Νošθ0ΎBrŸ F˜ΗΛ}Ψ|Χ"²"₯‚£–e"‰(©gΩ”Rkdzy/ζ~['…¨— 1χχ΅k,_«8’H|»oOΚ»!Bˆώ<ύ@׎φ­JΉΌ΅ΚωΣI:‘Β"•φaξR;GεŠφΏŠευσN@Ή ΒΎ%ΐυΡys°ŽΨ ‚Ÿϋ:‰6wμΥpl!IήαέSν˜ή€χΊ‰'Β­˜(φΉ§]μg†r“υΠ œLβ/‹€ΣI"–ΖlΚάߚfŠp pQ ―7x X3lOΗr)§9‚Ζ‰ςτςdΛKΨ³©žeN Χo§eφŒφgλEΨ@ιW0ΧγcΖV§ήQ’Όϋίφο«°”l•ψz(zs›&DCωvί~/ο†!ϊσφέ$Ϊ·#I'ηψ η•ϋiΨ7³§…½ ΦΩ$"σOaίu–[dπΐ³ ώφύ,UζJ’ya+‘ DTrkO‹σFΏΧmIVΞ]$h‡3?”­'8ΜϊΨ\ΧΥqN'±5ζαP­€+ΆΆ­Ž=Σ²ΦΆΧgζ݈ΐ@Δω`ΪnXœu189UξμήyŽΖ Ν%$E[ή€ώ€Χ¨} !^ξΓ<ŸΚ-χ/P:ύͺΦε μΰμβ<¬σz$πyμ?q ζΥΤi©ŸD)ο~ŽyΫωύρ6G=+Βω‘‘Μy­j  ΰμΎ=6ο†ΡΝd„ƒ$Δθh_­©Άˆ^:¬ηb–μΓRǝ›0K0XΤԝθοΖ]­ά–Q/ KΜ{SeN'I«αΔziτ{}λ€NΖάή_ΖJΒάκb\8V Χ|sχpΨ~ 8β%i4£0‹ζ7°i ՘€YΧΗ,k‘ό&ͺ₯šΉϋŽ6 –Ϊ\β%UK‰Ό‡MwΩ6Ϊχ$6]ζΰΗΡώ₯a}#p5Φa_cמύžηPϋάσ8Κr­τΡY)άΖaΟΪI˜ύδΤφ*aίΔ°Ο]ξk‰λΡ‡M›Φ―bΟςY˜‡VΌψΎω™5‰"r6Θφ=,ΛΒ—±Αξ3±›Λ°zΤχt_EJM&D5Ό_©<ηBδH=βά-Π=ΐG€i5ΤίWc;ζE―=…FΦ`@₯rqω ι/Ά_ͺ±-₯οu.6€p6ŸtC`Χ° Α¬ϊ`ίΫ αόr‘UG`ίΐ¬;`ίλ`ˆnζΕ,k ΰά5ΓΉab‘UŽ^κ Φ5λЍΖβ <ˆ Ψ|³Ύ¬ βœόWtήHΰ?±οx16₯cmL€Κ܏Y“γΰ.—aχ—ι©αZ»bS/ήυOΰ?°g€Oω8:¬ίCεhΗ΅΄iζ~<6|#°’γ0Ο—rο?ύΜΨ»7ΔΎ·ΫB;ŸΗ§—icTLφΐΦ}©k^μO©8χίωPΰZΜ{ v_Υ“OΦΫυϋ:Ξ sΓς―Λχbβ|5ΜΥ=ύ:ޞ-υ°ϋoς$YK||ΌΛ“Χ°ίξO°όζGaΩƞ_Ζ’]»8O{Ό Qdά›Tβ\ˆ)'Ξ}D?v™~λX~s> vςζ‚½π8ζJθόpf±Ψ-싏7’»’׏Q:Χks¬£υ ΙΓWΓ9K°΄qγ° kυŒx7ϊ½ŽΑDψqΡΎ[±Οϋ$βΌ’Υ|26²ΦiϋŽ.Δ\Ϊ;]”Ε,_γ°ΰ&ϋ6 Ξ-€+ΒλfόiŒ ΘŒ ϋ°9°GcBψ}˜8΅γǘhή s—>ψπ›:―]νZ£1—ή0ο^μ^\ŽYŽ'O`σvΙA˜Θύ"6εO˜5ςŒpόǘ°ήϋέ~ώοίγ <ŒύžΏƒy‘Ό―Jϋ§QύσߞμίχΨ³g"&€ *΅9˜ξlP‘ZΚΖ70λάΉ(ΝQ+Y–—€{ͺ”BbqO[αWΖ¦N­Ά'†mΟ[νΑνje.f‘»7–ω7°{oVt\y‹Λ2¬?t-ζ•w(φ¬Ϊ%,/†r]ύjlΪΘy7D4η‹rm…]N=βL<¬‡Y’ Λ2’ωv_nΐRν‡uxw'ιœ,#;`R#x³l폍jο‰ ΡwaξgίϋŽύ‘ξEb‘XΟ’Xύή^ΟΑ¬sΟf\σ_4φ½Ν‰~›Ϋ<‹"ζ.λxŽσψΊ>ζ†}Ptόl(V§~B™ύ£HώbVΐξΕ•I:Ώξ–:9Ϊφμύ–»ΏC3¬V~^Ε™|ΛΙ f靂}·W`ίϋτ‘ΜΑ˜GK=τΦp­Ι‘ά΅ΐσ‘L­–ΗΑp;π«πϊq,Rς·0qξοΠ¨έbƒ1—¦Ά§b{Cμ7–E-Ÿ ˜'ΖcηΏ/'Ν[°Žύw±9~ι dK€s°AΠNr/οD–cVΥΧκ8g8φLσΕό€ΤvΊΜΈ°¬WΗ΅Q*ή+ύ,@Φωp#6Θ².Ι΄•]°~ΟσjΤΈŽΪ\Μΐ¦Šb"ΛΉ š[{ZœΏŠΉ]…Y¬ήκx ›g=#”;³8} ϋ£Z„YΎN€Ή©¨Ζ:έ_Β¬εK±μ‹°A0ϋΦ™ίKŸυ0φg&vΔά‘}‘‹έ,ω^_Η,›“DƒύWhΣ9Q9·œ/ΒώόΖz°NβΨ Α ˜ηQ; ϋ^³’ Ϋ oΦΜb ΩχQΉΊšΝΨ}Ί~ƒλ½›³Ÿξ΄NΓ,²Ξΰc”ΊmοLε{!Š`ŸΫ εž λu°{ šΈ„κΦ½4΅\λiΜΪ|7&V„ ΤWκΌV½<ΪΎλπŽΕ¦ŒΔάԝEτ·do„YΨ·Βξ}w!7Κ‹σZ>°gB–uaatάρ©YΏΉE˜8_̊ξƒqΧ`ƒ—i§h–Δ©w·O»ΦWJU·φϋL¬Q?=XΏ€š8l¬’Vγ±QΞΞ»!’‘Hœ QͺYΞGg{ s=9㘳 ³tZεϊS2φΉEl ε–aσ©ΪΏψg9ύ£,Η,Δ"ρf‘ΥŽFΎΧ™$‘ζ+αβ|5Λι2μΪ‹‰ΘgœWΚΉΦΏEφŸΒ2Μβ9 ³LΝΔΔα«Ρkίοβy"&nŽfp9Ž_Ε’3?‰}¦ιφ‹u¬βνΫ1—eηi*‹<X·1εd9σ——g”‰£JΧr­>Μ εύΨ ΓΎ˜ΰέψ{ν«₯MNZΘfΝγO”ΔΫ=Ψ€α±ΆΏˆέG‹ΚΤεΤϊωΟ";εžο›ν+g9χλ-ΗωΆΑ¦ΔΌŽέCBd»ΫΧJ/₯ψJ1G£Trυ0 ›ϊ΄°₯Ÿν›ΐgj¨c ±JξΧή{ΖLΓ¦―MΛ™Mχ™7Π8ηΠ?6ʎ”Ί΅OΒRΏzV°Œ?wb©jέλH„’Τk9Εΐ ±¨ŠYό–Μ7œIiΔ`ί?Ÿl·Ε%dΟM¬΅y>Ω.’‹IζοηΑ,Μ ϊ\Μ2Ή?υ»Ή_ŽΝψ`Ψ—ώά¬σ±Α‚z…΅σΦρώd…:žΒ>ί­Βk°Žέϋ0A·mb马OŸ‘–k9w†ef±,&Ξ—P_©jmrΆNmoƒ‰‘y$οc’ι&=ΨΨΝa{ ΜB~ Iϊ»MΘvΫ_λgrIl‰˜)‘ODϋ*‰σ/„Άˆ₯ο{s+’‘,ΔDΤ y7€ƒΨ›gΎ?I ΐ%Ψ€ΰυ˜ό ’gt£9ΝΫcƒ₯gcΒω`;μvζzξS~‡ϊΗFI33œ-f4Έ‹Sςk$ΜΫYΞ…(0Gb‚L.KΕdKμϋ™Oiώή˜ΕvW”w7ΝژkαΫTΟoόύ=vΗnrλ¨/8Ϊ ϊ{‘œ€}—GbΒuS¬StTTζLlψ.‘ΜtLΖyΎΑ,ώ“1kΞQ˜΅$.SνZS€γ1ΛΠκ˜‹ώ,lώ5Xπ³;±Οw"Υο»ZΪ4#Ό—S±©"{aA°ŽI½{HάՏΑΎ[―gΦ1vλΟJX'uiέΙj΅Οl°f ύ>CŽθG°{'ΛU¬“ύ6ΦΙB—Υ°gΚ}”ώg<Œ ΉHŸH’^―ςΏqSjŸO/tz0Ο―/T¨gφμ‰=ϋÞ―ιλΝ ?WS:εŽpξSΐ/1‘Ÿε)ŠΙ-Ψ}»m΅‚BˆΦs(φ=/ο†ˆLΆΓΎŸ[°Ήΰϋb#ΥΛH: ―cbTΩR6Αζσf‰ς·1—ΐ¬Hύeώ˜q,¦β,ξΓΨΰΛΜPξ£Ρρ^,ˆά|μ»> €‹ά‘a{&f99σˆΛT»ΦΪXκWΒρ§°@‡ξBΏΠnφωT‹<^K›f`ίΓ˜(8Rαοοf=9―!g—πΎ^ΔβB|σ ŠΕyΉφWϋόΑ\8ˆΆWΐ:Γιΐ|;…Ί”ώ00KΣX&…ΒΆ’8Œ Ι±„ώ±οΝ8§7”)η=6 ϋΏρe9IjT_v¨Π¦”f€ΛμrRjίΐג퍰ΏΧΒ5ύ½Δ^@εΔyzd‹σ˜ ό2,³‡hξΔξ‡-σnˆ’?²œ·Δ₯…β;°Qύ{)`Φΐu[ΧΔΒ³&–ό3zΚ‰‡rΧ6Ώiζϊ οv€ά€EΡΨ»o| b?JƒΤ9>˜φΧ uΠΠ– !ΕηIώ'až1§ς4©Lœ.'Ϋ›h2f­φε/Ψ3/ήW)kΦ3ςoτŽάOβqΤƒ d^ˆ ΊΓΌ—–P:`YNœg=“³Δω»±ΑΞ·)ΏG“°ϋ|“Ό"D7SξΟΕχ)ύ–Hˆ£΅ΗΌ€YΰΞ"™·/f <>,χ`Ρί/₯v—»NδΜE{ΜρZ*§ς9vJ1$œ+±Nξκ˜uΎˌ¦œsη„F6LΡ0ΐ¬ύKKZKκ°>lžŠ˜ύΝΤρFΗ*©…ΖᨇaXίβ,&Ιy˜E?ζR„’”‹Ψκλ₯eŽ‹|ρθΒ eΖ’½³ά]€u6ΗFΕ?ΧΜΆ~KuΡ-q^υ¨<—ΏžΌΜνΒ˜0›χ`F™ZΔΉ’˜,Ε‚«ƒMιΚΡξšGJΡ,^Ε2₯x4φ•°Ύ@:ƒΖӘΩΪΤG$ζDΜ+ΰ0ΜHpf ¨εσω£€pBYΞΫ“r–σ,–cξnΓζžνύ9w‚ϋs+ρ?­"‹σJZΑτOη6vi@EBβ\ˆφ&Ξͺp6 wq•s|Ύy%χτV²ψwL4‹Εσψ–j2ζllΞρΓΨΐΒ{j¬ΰλX|Οξ2‹ΝρM,§(6ήΟ©₯o)„hε:‹n9 Lΐ"'/kI‹šG0{Οc0Ϋ^ Η†c€£°‡ΤΈpllΨE’vBXυŒ ε†b‚xnΖΪσu—[ΏM’š,k½ss d½Bqζrviη‰ΔreQ/ηB΄7cOΔR‰UζPŸεόγuΆ'k3+ψλf©νΨ”·˜ΛRΫΟbιΩͺ]Jηͺ…ώ.ς―`–tΡΘr.D¨f9fXœE˜+΅‹MHΔcœ#{vX/ϋ]T‚¨zΣΕ$ΒJ\D»(vμβx&„Ηg”uq=&Oc,z΅2ο+7ρ:YΉFEs[»(.ΞΣW!D{05¬ΟΕϊS±i,•(šε\ˆjHœ QΚ‰σxNσ"A<2:ΦLΡΩ,f“X©cž>€0D˜OςΎη…}sλ(ΏŒΔJ?D¨ΆJbu―΄φAˆU°ΉδŠ­£Εω%Ψ}y`‹7 h΄9–ƒ}:–zν-Ί~QρΨ²œ ўLλ°Ž΅ΰΖ ‰sΡ.Hœ QΚuέΚό=JsiΊΫ7$–αΓ~wρ†ΔRνl•ˆR·„»π„DˆB"’έ"οψM¬³λBxvFY·π»n΅[~‰χΐλM¨Kΐ‘ +­€[ώ΄ΓζŽΧ“«έ9ΛYώ|Ψ>Έ8ŸΘΔέ†άΪ…θ N¨£¬[Ξ‹NˆJ¬€υΏί¦ύ§± ΡΦΤn ‰εp6"/\ ެXJ4’Z-η—7?kns Η8ΜΥ3žχψ$p/6W³›ƒIœ Ρ}Θr.Ϊ‰n1@Qx”J­=ρ‡ηˆŠ₯D#qq^ν7ΡK}±ξŽIν»Œhϊ30± πζq ₯Ώί‘ΐ…˜—ΘLΰ$ϊΗYΨΈ›¦1 ΛEϋΞθψt,’Ρ$ιΟ6υƒYΤbQ|χOΥ½GhΧ}©ύΧ`9‚»‰s!ΊYΞE;!q.DA¨&Ξ•J­˜xš ‰σΦ‘w΄φƒ€°t>[Ÿ§Τυόǘ°ή³^―|"UG/p26'|gμ>ΊŠδ90ψ=–j§',bœ‡b’}C,ΧοιαZΞφΐένΎ‹<±ž7Ϋa( œέG7XΞ―ΖςΏ­.Q?ξ‰)q.DΞTsk—εΌ˜Θrήzςw;π«πϊqΰTΰ[ΐ˜θ>4, ežKΥ‘N‘7³΄oˆrΛ’³š:ͺϋi` 6`pEΨ·πXΖω/EΗg•ΉF§£€pBtνj9―'ξȟ7tέt]‡cƒΠa^\χίΑ|EγQŽs! B΅<η#IΏy ΄nΔS²ΑDΪ8’€vž}tX<숹’ΏLώœG’>sΜύ/«rΔul:~'fYίΛVφΏφΰ0ο¬Kc«\KτGβ\ˆ‚P³θ?RO[ζy» ―cQΨ sIύsX€=Έζ :xΞτω©γž=>ώVx=;:ξ–x_Ζ‡υΨhίΨΤρɘ΅3KΨ‰ζPnΞωk”¦ ›ΌBe!›>?ύZΈ+΅/έQΩsŸ‡ε_Œ θgΓρΜυόζ°½vϜ<φmBΡΏ„ΑG°ϋό“T~Oχ»eμŸΪψD…s;‰s!ΊfΟ9?ΝΫc‚υlL8ίl‡=³/ΐάΕέμqGνϊwδ}Xb*φ”εΦ~0&‚&{ af8ZΜΒ}?πλ°Tζ΅0 ϋ_‹z|ϋ―›„ΕTυ#q.DA(ΧYtkΩ€ίeο–θΨβ<‚d΄Ψ-δ=‡Δς ‰υ’<θδKόϊ.˜]$ΗV|·Έ7ͺL³y΅ΞςοΖF±λiƒ£YsΞg`ž3°Q#0«FZœ―Ν39°6όΔpl!–K|p5ύλαηUlPhw,ΰΫJΐ™τΰyλΨ­ύ6f‡λ~xΈϋMoύ~έρΰΫΨ@Ό¨Ύν°ŽZ7ηM]†=G†bΟ/ ͺ Ρω4{Ξωύ˜eΜ’}$φl9)μ{Ϋ“xr $ξˆσWΰαuΉΑ0oΛK±©\#B»ΑYΐΏH¦XΒώηŽ%ΙnςζΉ&κGα„(ΥζœgEk_NiŽσnvWΝ „k=εάΪΛ9ΨΌξ‡1‘}ζή—ζ"l€κ^Lμ]ό4:~\¨λ lΪΗ€+£γKΗ:8Η†2?ΐ\άcΞΆ ν…Ή4ž€YψΗζΟΓζΐŸw;6`τ’ά aϋ‹•?‚ΰmμΉΊωB΄ŽJ–σFΔ*Ή7΅ύ2₯©,ϋ0/ΙΡΎΔqjυϋ&°+ζnΏ56Θ;XNvv y~n€ ©υ „’0(Z{{’Tj­§VΛωΗλ¬wYύΐ*ε–`ξ„—9Ύss< B3°ΞYΜe©νg1KKš¬ψiNΐ:…u χΑ‚Ζύ±Β9έΒR$Ξ…θ&*YΞ«ϊχΟϊΚμsOāΖqjmkcAJϋ€u€ΏΧx^9ΞΔy?„e*qz2K‹"·v! Β@,η"d9o=yη9oΔ:f«cΏΰ<T 4ο\ˆξ’’ε|°±JΒ@γŽΤΓ0Μ₯ύL”ŸάΚΐ’«Α¦k} ³˜§γ–x<”Γk18$Ξ…(²œ·'ώπY±”h$Νrkο4Έ^OΟ«Dβ\ˆξ’hyΞw€VNΔάθwΑ¦Nν ό ‹μ^o¬_bΡεχΕbmφΏ–·°©]'a"ύfμ=mIϋ€€+ηB„j⼜ε<ζ₯Aά 4šϋP,H”Žƒ$Ν™ƒ`qιkŁβΌέc’να”ŽZ§λφ pžϊm)φgδiα δ)ϋ| ΘΗ>δL³Iž s՚mΟήhaϋΌ„ε‚ύHηψ@SΪ’]nνB·άΪ°―cΒ1=HΆΌϋ@’O ŸZ#˜.<]ˆŽ υ^3εŸcΉχ πχν:νyΰŸ“{0€ΦSnΛK”& !:ηEqkΟ“υ(΄žζ]τψ&Z‹Α…-¦’§ž Eζ˜₯<ζΰΧΨ\¨V°sk}‘E׍η`[L ΊXL‹ΖτΊ¨&ό]ψΖΒΏσ4qΛ±ΈeΉΚ;Έ) IDAT@€ ε"M£ροΪΏΫtŒŠt¬ χ HΗ¬ψ+₯^DBˆΞΕΕy/φ,μΛ±-yσe‘ύ‡ΕώΓΖ`ycRΛψPf φΥ_(78ŸtΞςJkδ=ε %Ξ…Θ™NzXf1xX?γΨί°|Ξέό‡)DI€ηζ§²<zθί©ρΞN:x£―½³ΤΜ`ŽBˆξΑ§ΟνF’:-=/Yρ΄=Ρ8Ζ`!cIώOΖ‡Χ.žΗ…et΄olΨ7&ΪWnΊg^dŐραrSΙ²¦”m ά„EΩWf!r’ΣΕωqΐ*?ψ―΅E!„έΓλXz―ΗςρE(ω{iΕΣγX>q,8ζ 6( ”<ˆ½(γΑƒΈ}ιΨ@υ2ždvtx=Žd€v\Ψ7šΔΛj<Ι@ξΨ°o Ι ξo¬F3{Ορ2;cίμsšυ·³Λ >§‘Λ F7ƒ±”ΖoB΄N竏QšΖ-ΝΐΨn!„BˆFρ<–‘αv’ ’q Ωt:Xχϊigͺ ΔVμVOΪ1?jΣμπΪ…τ\!ο››Ϊ7b‘5₯ ²§–₯§˜ΕSΝ6ΆΖ<ΚΒlDϋ`ζ7G!„]„[©ώ9€σcρZολΑž_ολΨμAπ\(V#ŽαβλΩe^Χ{<M¨Σp‡ΑΖ‰ΪΈK₯,a.DŽtͺ8 °Oe§—nZk„BΡm 6šg«€φ λξِvH„ό|Μr=φΟΤIψ΄„NΥB΄ ψ#œEνa=ΐyΐ&tN„m!„Bδ‹[Ξ»)Ϊ’9ξν2  ­]ˆΒΠ¬`y²;°eη¬|ͺ mB!Dwβ"΅›ΔΉhOd9’ t’8³z‘L^mh+„BΡΝHœ‹vA–s! B'Šσ›€kλ<ηjΰ/Mh‹B!Ίη£sm…Υ‘8’ t’88‚δO±K€c›Ψ!„Btέ8η\΄'rk’ tͺ88©Ζ²§7±-B!„θ>ZιΦ~ pQ “Εd,?φš9]ΏΩLΎŸw#šŒ,ηB„Nη§S=―θ‹ΐΙ-h‹B!Ί‹n™s~Μ'± Ύ 3rœ•9 Έ1ΌήxΈ/:ή|ψ°σR<5:>›Rψr8~°SFϋΟΞΗ\ζ_~½ΟιXκά£Cϋϊ€ Βρc€'€…ΐΓΐώαœIᚱ‹ϊ&ΐ"`ο u‚}NϋΠΉΘr.„h“°?ŽΎhYΌ/ΟF !„’£ω"ΦηΈ€JΉλ€―ΤQοO—€ουΟ£Τz=σ <Γ1~ΰSΐzΐ¦ΐo€ϋIŒ5£1+κVaϋ lΰΡ¨ξ[ο„ΧΏL΅οDLόσA,P―s*&Έ?…‰ί³1ΜΐΔυ>ΐP`£Pη^Q™,τi˜0ί=Τ·0ί ŸΛ±A‘‡_V©`[컜˜q¬X {/εέ!Dwp0₯βόό|›#„BˆηΣXŸγͺ*εκ罘hέ/Ϊ7»iq>£†ϊFaVΣ)ΡΎΏΗ…Χ—bsΚbn&n·‰snͺΎ·(γ1#1!~`΄―xRQ<ƒώiq—R ~ZHχbή Iw<‰ηᜧ0Qώ₯©ξΚ‰σu°οrσŒcΐ$μύ½–wC„θv:έ­έΉsγ]ώ^ŽmB!DηSΞ­}&ˆ}Ω bοΫ‘Lλ`χΆhί"ΰeμΫsΡ~ XΪ8ψ·¨ΜΝΐ‡Βλ€ξ ϋΆΑ,λw†γ½αϊΞaߟ*΄6νΠιΓ¬ρ¦Κ>šΪž ¬R¦^Ώφ(LˆΗ™€u£rίΔφΕ,σ΅ΔZΦ½5”mG4η\ˆ‚Π-β|9‰ΫΥSΨ^!„’Y”ηη›EΛ-Ψμx_–ΨŽYReJE3˜…ϊzΰUΰύ˜HŠ ³xΞϋ͘ίάφνˆ τΫHΔά,`₯Τ5j!+Xozί²Œ2•ϊ­~lγЎxY/*·6–φ­,¨Ϊτ9ηηBδL·ˆs€ΒzV­B!D7PNœΏ†Y΅}™<‹χ- ›§° jGϋz(uK/Η˜…όΰL`O‘Ώ »ξΗΓDςΝ$βόζ¨μ}˜5ήy³2ο\₯ύΫ¦ΪΏ ΥΣί¦Y‚ .€―ύΙ η Γ\υ―ΑǝG©Χ@ΊNg ζyωDml|°Eα„Θ™nηo„υ„\[!„Bˆnΐέ₯GW,U ±Έ9Σ°ΰd=ΐΧ1kp5^Ε‚£νΆWΒζW/O•{Kφΰ¦°οvΜΪόJΕω ˜₯lΨ~ XwŒn]`K’Tq‹€³°ΘλŸΐ\ΡΟ’ŸUΓ{ˆy:΄gmμ³XŒ›ϋp$°>τξ0ΰ¨pΞ‰XΎςΓΒυξ~ENΧιB};,B}–5Ώ[»’εx0§ςnˆB!:€ύr•rυFkοΕ’€Οž~ŽE]O„;9γά]°ε/b–κΟab|TΉ“CΫ·ˆφ݌YτΣξ”ζチε_ΌjΛpΰ'˜·@₯TjιφŸ\m―ό5΄)N{φεπcnθ3°(ν;`"τCQ«bž /«Ξ°t ΉNcφž»Ιp'„Θ‘ρΨCgvή B!DΗ3λwΜΛ»!MfO,Ϊz­σΝۍύ( ΐΧ©,ΖξΧαΥ !D#‚ΌXNφ|"!„BˆF1;Λθ\ακ| ›Σή‰L₯tާς&vΏ¦c$!DΣx{π¬œwC„BΡρ,Δϊš‚Kts°{u\ή ’›ιΆy% '„BˆVQ.b»ECAα„(έ&Ξ}ΎΉΔΉB!šΔΉh<ΧΉ© ‘#έ&ΞέrΎR­B!D7ΰιΤ$ΞEΡ‘ε\ˆΠmβ\–s!„B΄Š"[Ξ―Ζ“5‚ΙXJ²5T_5¦ίoΡ΅ΊYΞ…(έ&Ξe9B!D«pq>:ΧVdσgΰŽ:ΟΉ83cρΐεΐσƒmTœƒ ˆΖ ΛΉ ΫΔΉ,ηB!„h΅XΞ/Ύά‚Ά€9Έ€υŒΓ]Τ€ΊjεIΰ^ΰ€^³Σ‘8’t›8χ<£}ΉΆB!„έ@-βΌ^G3€ŸaΒϊ%,Mμ)”φ醧/‹»€Rυ€έΪg`Vρσ1υW€‘τ¦»Gcύ¨>``Π†ϋBΉIαΊ±Ϋω&ΐ"`οήίώαϊi‘ψΏΐo£νk€}j¨OΤ†άΪ…-η,μΟδ¨Ό"„BˆŽηXΏc eΎRG30+η1αό.ΰ9ΰkQ™S1ϋ)L@Ÿ‰γwFe²ΔωBLπ6ζ{₯ښvkpejίG%ΐ±Α‡‡_ΦψώV Χέ3Ϊ·RhnΡΎm±ΟvbυŠΚά…}ž[δέ!Ί™n³œϋœ―7+–B!„<͚s~;π+LL=މqη#1#Δ·ίbΦξΗΓΊ3€Ke˜ ώ°K•sΦΒ,ε17`ΦύKΓzpd•zœΐ―)ΠΨ˜κu^Š/,ηB€nη *–B!„Κμ|›k>skŸ Ό›‡&π“ΚσΕηb©ΣΠ?ό αz ζ͈d9B΄œ°?‰wδέ!„Bt<ŸΒϊΏk`3€“X_#Ψ›#ήS­`ΰ4ΰj(χgLΔ§ΩΈ­Ζk‰ΪΈ»WkΙE/„hέζΊ’9ηB!„hΝ²œ+1WχՁk(!*§V[ ψf…?,γxpH]-ΥpΛy·i! E·ύύΟQnνB!„h6͚s^DΞ¨£μ–UŽ3¨<–q|zΧ΅!·v! @7‰σ^μύ.&y !„B4‹fXΞwi`]EEΣ[„“8"GΊ) œ"΅ !„’•ψμjωΕ…ΘΉ΅ QΊIœ{DΠ…ΉΆB!„έ‚§ [”k+„¨ŽR© QΊIœλΕΉΆB!„έˆ°ndί#οhν—`©άœ«s|Ιΐkΐša{:πύ_C”’9ηB€nηKrm…B!ΊYΞΖρΐεΐσaϋD,8άδάZΤωΘr.DθFq`pB!„hn9―$Ξ/Ύά‚Ά΄ 〩”ZηŸξΘ£A]‚,ηB€n粜 !„’ΈεΌ’[{/I₯V†§――?" >°'p;0˜\Ό3UΗ ΰLΰ|Μ…<«ž‘ΐ…ΐ<`&pRκx=˜•ϋ ,ΞΟΓΐώ©2»χo³[΅Β±=ΒϋΊ/uΞ5ΐ>U-Ž’΅ Q$Ξ…B!šC-–σp ~Gΰ«ΐΧ1Aξτbσ7vΧΏŠώύΎC€[€ΥBΉΓSυόΨΨΨП¨Ά€C£ ±Ήβ§‡:ΐς—_ ό/πnΰΨΑςp|{ΰξŒzο6&VΉΎrk’tΣΠG%Ξ…BΡ j±œ„ߊ^ΛώΫ°οTω©˜υ{Cΰ‘hŒ¨μΓΐ’zz1‘}(πΗPζ@ΰΉ νκŬ柎Ξy˜\Νο%™Sώ―¨Ž΅€Η2κ~):>«BΔΐP*5! €,ηB!„Ν!Λr> ³Rϊ²fYŽχνP₯ή{RΫ/«DΫanΰ―aι˜+όΏ₯Ξ{4΅=3ͺglpαΆθψ"²­ΪΞΐ(ΰΜ²οΛ ΐΊ‘ΜӘξ°>X5ͺ£—lOƒ…ΡqΡx4η\ˆ q.„BΡ²,ηη›EΛ-ΐi©}•0τοΛτ‘τιz€λWχcC1ρ•žΫΎ,£ξtί0}­Jύ(?wγЎxY/j래KώύΐΎΐγ˜{;˜U|₯ŒΊ}ίΜ ΧGnνB‰s!„Bˆζe9 s-χe>Œ-ή·`Χ\³Ÿ<ƒ‰ς)Τo} TΨ8ΪΧκ*Η#˜…ϋ“5Τ'ζEπ~Μ₯ώ³a}˜ε?ΝΜ5‰κυ#ΛΉ@β\!„’9Έ8oτœσJΌŠE@ί=l―„Ee_^φŒlbΪ¦aAΨz°ΐskW8η-ΰTΰ;ΐ‘ΐϊΐ¦ΐaΐQ‘Μ,ωΐκX Ίυ0aζΏ06Uχvΐd[ϋΕΰ‘ε\ˆЍβ\yΞ…BΡ šK^ώ\@2g»ŽΓ\ϟΐ¬ποΒ"­WβΰX Ή± s{‘y{³–_‡Ν?Ώ8›$―ωνΨ\ψΟDuΆ/ΐ{΅!ΛΉ’₯xΪ‘‹ͺB!„hgb}£σnH›±'&μ=§ϊ~”¦g?μ^žs;„θjΊΙuE©Τ„BΡJš•ηΌΣΉsŸ_³ώχ`9ΩEσε\ˆΠMβ\sΞ…BΡJςpkοΈ^OΟ«]„Ο9—8"GΊqΞΉΔΉB!Z,η’]pΛy7ξ„(ηB!„ΝA–sΡ.Θ­]ˆΠMβά6ŠΦ.„BˆV ΛΉh”JMˆΠMβ\–s!„B΄’n±œO^Φ ΫӁοηΦ1d9’Hœ !„B4‡v΄œ_‡₯€«‡γΛηΓφ‰ΐ1˜hν,ηB‰s!„BˆζP‹εόrΰΛ-hK5†W/’Ι8`*pQ΄οIΰ^ΰ€AΆI΄YΞ…(έ$Ξ5η\!„­€Λy/υ γΐΟ€K€—€ΧS(νΣ N^ΖξvΚ¨ηΜ}pCx½;p4Π– €]{€·€Ωΐ­ΐZ‘ž=BξKΥ °OοKδ‹,ηB€nηώ°y»b)!„BˆΖΰ–σF»΅„‰ι5€­€Ο_‰ŽΨ8ΨΈΈxgͺžƒ[€ΥO`πίg=ayΈψ_ΰέΐ€σε‘Žν»3Ϊx'°0q oR΄YΞ…(έ$Ξέ₯lDΕRB!„Αϋw;π+Μ²ύ8p*π΅pl$pπmΰwΐ£˜%όρ°Žω+π lΚί›e5³ξ_‹Ν)WΈΆΟ/_ ³Π§y):.Š―$Ξ…Θ‰s!„Bˆζe9Ÿ† !_vNOνΫ‘J½€ΆοΗ¬θcu°ΎΞ-Ρρ>Μ}ΓΤyΥπžΒ¬γWG«FΗ{Ιφ XΕΗ-ηrk"GΊIœϋΗȊ₯„B!CV@ΈsΝ’εl~xΌ/ΛM<&mέ̚³ήWΓΎZάνϋ€=±A€}1+όΒρYΐJηωΎ™5\Cδ,ηB€n“ε\!„­$+ άkaqζ―P›ΫΩ:΅½ ζF>x λσl‹Ή ƒΝί W%ΐЌύw†epπYΰοX Έέ2ΚO νy’†kŠό‘ε\ˆΠM–s‰s!„B΄ŠΜ’½œΖgŠY›gΎ.°–Sό§αΨ", Ϋ° o„νw…u5žΖ¬βkcΑά6Ες˜oŽΫXx$”Ώ³φMΥ³p#°¬Ύ·&rBα„(έ4:&·v!„B΄ŠZrœ”‹€ρX.ρeΐ$βΰ{˜υϋB`πΜΊύL uŸ l < Œ>Ό8,Τυb(γyΝoΗ‚Ξ} .ΦΏό πΕΌ7‘J₯&„h)‡bσ¦ΞΛ»!B!„θxΖcύŽ7\ο ΰδΧ9XφΔΌΐΈέ–_sĘ@sξW!DtΣθ˜,ηB!„hΝΚq^DΔάΰWΗ,λ=ΐ!y6Hԍ,ηB€nϊjΞΉB!ZE³rœ•3’ΧΣσj„0šs.Dθ&q.ΛΉB!ZE³,η»4Έ>!@©Τ„(έ­]β\!„Ν¦Ϋ,η’½y›s>”$v€’Εt“8χ‘kΉ΅ !„’ΩtӜsΡhήΉ9ΣMβ\–s!„B΄Šf¦R’Θ΅]ˆœι&q.ΛΉB!Z…χ7d9ν‚…“ε\ˆœθ&q.ΛΉB!Z…,η’ݐε\ˆœι&q.ΛΉB!Z…,η’ݐε\ˆœι&q.ΛΉB!Z…Β‰vCΉΞ…Θ™n粜 !„’U(•šh7­]ˆœι&q.ΛΉB!Z…,η’ݐε\ˆœι&q.ΛΉB!Z…,η’ݐε\ˆœι&qΎX §»ή·B!Z,η’ݐε\ˆœι6‘Ί$¬e=B!D3‘ε\΄J₯&DΞt›8—k»B!ZΔΉh7”JMˆœι6q pB!„hrkν†,ηBδL'‹συ€χ¦φ•³œο lΪτ !„’[ε\΄²œ ‘3*ΞwNLνΟ²œΞξήΣό¦ !„’ ε\΄²œ ‘3:2v/6ϊχ1ΰΐΣaΏAΖβό“ΐdΰAΰ‘V5P!„M»[Ξ{)ν/zΒλΐ¨θΨX`hx½0&:Ά"–)‡pώψΤuoσ€Ήΐό°ύ&0'μ_6ˆχ!jΗ'Kœ ‘*Ξη—‡ί ϋύ2vk? ¬/lMΣ„BΡΈ°}°yx=Š>Θ„θu£οHLX;γH<%‡…m»£I„ؐp¬ˆ,^nώ άΌšgƒšΔΏΟεx}ε9"gzͺi[6ξfkb#³Άv―מΕώ€Φe…B!Λ5ΐ'ςnΔ XH©Kώμθυbΰ­h;ΆnΏYΏ$Ω>Μ€3$‹ 2ŒŽ–ρΨ DZ,φΔDϊMΐΐo Αpl Ε‰ίKz0δσΐΧ€«€σ(T©48•y*]3νρnμsίψmω·%„h<2v?πwΰΐg€_Ρίrώ%lTϊr$Μ…BΡ8.ΐ‚ΣΖ"6-xη`B'x…λ8sεXίηr`υ°pΰ ’ `ΛCΩ" lμ–큍ΒrDTΞ?§9$ξρσI\ζί$ι Vς¨δ}Κ•Ό!žaΙ‹§€ΫrΌΎ]M'[Ξφ¦·[ΧΗζ™_<¬ |˜‘O…B!šΞρΐ Ρφσΐ†˜`m7Vΐ¦ ΈX/&Ά{+”K°g>‰λx<²Ι  ΨΛIƒ3oQΛ φjH_σMΚΐ€rζ―QάA!:žNη#°?ŸIΐΨάσ½1KϊlL?ƒ τεω4Q!„’©¬‰½]1΅'ΐ7Zߜ¦αVmw‡Φc1λχwπrBϊ{8ΈχTφb€R‘\ +cΦ걩ύcF&!„θ(NΓ\Ύ.. ―ΏόOxύ½όš&„BΡtΐϊ<ιe)°iŽνp*ΩίMfPBˆŽb]lΞΦlήyp$ζ΄ ‹Œ)„BΡ‰μDyρΧόΞχ€,*«aύΣrίΝL`•άZ'„MβΨCξ–°ώMX_Ÿg£„B!šΘ ΐ?¨,Ξϋ€ύσj`—σ3ͺ7WηΦ:!„hŸΒpo„υ a½WžB!„h"GS]όυ―sjc·²6Τ­–οgί|š(„Νa(π4₯ΊY”¦ΎB!„θ&cΑΙj}ΐ…ω4³kΉ˜ΪΏ›9h¦’Γψ₯ΊΣσmŽB!DΣΈˆΪΕ_|λ\ZΪ}l„E}―ηϋΉ!—– !ZJ΅ kX—γTιόŠνΐ$ΰ%lώΐAΨϋY-ZVΗFš½Lœ2NΉ1 &₯ι5<}†rBizŽeα\(MΕη€\Œ}ΎPš2Φ£ψ%φ™T[–”« '†’€4ƒέΓIRЌΗ~;#±œͺ=a‘Μp’t.Υκθ υτ„e9vοΔλΉ$χŽί7K±ϋΣοΏoόžρϋΕ«ιT/Βθ&`ŸW;}Fγ€!Ψ}:4Z†£°g·ί_#Β>Ώύώτsγ{xB™k ΑξGΏ·|½(΅ΟοE_ϋ=κkΏw}νχ΄―_’ύžuBqΨTΎ!užχkΰ?ί‘βbΰ‹už³”$ œ’CY‘ΚρS«”‰d,,½γ₯B4¨±ˆ…ܐ±θΕp,’γΞτb¬9 Ψ«„Χ“ΒλΙXΣiWχ­Χ€]€σnH μ ¬ZCΉ7©MΔΟΖξ+ΕΓ01 .’]”ΔbΩΕ‡‹f2±xξTήΒ~ΧΛ+νxF`yΧJνχΑ9$Ο1Ÿ.*η„2sID§—ρgΤl’AΊZηΙ„κEΕ ΰc$Οy!Dύ,^ƌ,υpΪ"ϊ3θψΏmx+„…£ΪΓαΫΐI”ZΚc‘ΣnΌu¨Ÿžΐ„ξ‹aύ2πJxνBx9H ”v–½Σ‹EοPCιgηΒJE‘ OH¬^H€s°tpEgU쳁‰™q΄GΊ–xΠΘΕX<ΨδGρ`”,ωo%„r±{Hx>ΈεnkCHέ’{Ιο#·tϊ½δχ‘ίC>αχ‘ίCρύζRχΟz?˜cφ{wο„ψχ^tbKσΫ$χ©X¦­Ϊi«΅ίŸώήγ{~NΨφ{Τ―±»ύž½ξ%ΉχVz_ϋ½κχnΪz?Ψ8¬WÞΗBˆ³7pyεŸΔώΪΝ3²Y ‹’?ΆZΑΐ2μωψHΣZ$„(Υ,η~ό'ΐρΗc ‰¨€RwzcΑι8Ώ– ΧXΠB©₯&Χ]8½yXgϋΰU,?δΛaίΜ°ngΞ§}Δ+X'lΚΐB’Žόμ»οΕΎλΓφ˜°Œ ϋΖ…2£Hξ±G†‹cχ²p‘μ’$Λ.>\ΠΈ‰x§ςΤνψ³γJ­K>2žDPϊs˟9γC™q$βΣΛΈπO©ΞZϋύZλ:φΚ‹ΩΥ‹ ˜η€5IΎ!ΔΐΉψ=°{εΏ‚„y«xψ .FΒ\ˆ š8χ2Ηϋ(ν¨5³Σ&’:ήVŸ~ΰΦ<έ+ωΰΒΪoΏπAτσΝcDˆŠΣ IDATΌΡΒΆΓΏ‹v€’θμHb)ǍΐuΝoŽˆψ6pςι*ε–bΣL…]@΅Ή‹ΥΔΉh-.pΫEœχ`ΦΕ>’˜"_ό{ε\Ο·"nΟ8!ŠΞ³ΐΙUΚ,‘=¦Κu"‡Rέ«σ"ΰ©΄EQͺ‰s·ενF)Œv³*IόYΞ^"ό»h—gœνΐ)Tv‰> x¬Em₯Ό† τr,~Τ’Ά! €,ηνE»Y•Όά)η zΎv€’XF&ζU,π―ȏ«€ΛΚ;x‘…mBδŒ,ηνE»u\ύώ‘ψ)η ηΕ£έ …hώ‚ε0Oσ-’8"?ŽΐΗ, ϊ”!D‡!Λy{ΡnWέ?ΕΓηœKœλώ,"rk’y|$e"ΐέXp‘?―S)υn8‹φΟ2$„¨YΞΫ‹v‹Φ.ρS<ό·¬€pΊ?‹ˆΔΉΝγU’΄Έ}X$χεω5G€ψ#Ι`ΙΰτΫ"„Θ YΞΫ‹vλΈjΞyρ[{BΉTj"?ΪmRˆvγͺ°^ά™gCD&.Ξg£tžBt%²œ·νΦq՜σβ!qž hνΕ£έ …h7όx^­εx%¬ηηΪ !DnΘrή^΄[ΗUχOρ8OΠύY<Ϊν'D»αnμšΪTL<&ΐΈ\[!„Θ YΞΫ‹v³œKό§Ž™ξΟ"nΟ8!Ϊ ¨Φωΰ‘σ%Ξ…θRd9o/ΪΝͺ€9ηΕC–σ=ߊG»=γ„h7d9/6 °ιΡ ₯]‰Δy{ΡnV%Ν9/η zΎ‰s!š‹,ηΕΗγŒΝ΅Bˆ\[{{ΡnW‰Ÿβ!qž ϋ³x΄Ϋ3NˆvC–σβ#Χv!ΊYΞΫ‹v³œλώ)η J₯V<Ϊν'D»!Λyρ‘8’‹‘εΌ½h7«’ξŸβ‘€p J₯V<Ϊν'D»!Λyρ‘8’‹‘εΌ½h7«’ξŸβ!Λy‚Š‡yΖ΅ΛsQˆV²Πm—³œveΟ,SF4‡τη\.ΪαΨw4}GBt,²œ·νfU’8/η ώ;’εΌ8τ†υΒˏ>άόR"D·s>πO`‡h_9Λω‡‘όŠΐqΐšέΐ.g}ΰZΰ;©ύn9ν œŠ=λNBί‘K§[Ξϊ€ι9·£QΌύ±@kGKΗ7G“λ8―έοŸVΠκ{Tβ<‘ορή7΅ž—Χ³stXΟ―RnSΰ\ΰΰ7ΐ.ΐFΐ†ΝkšmΗ+Ψ€ΥaΡΎεΨo»‡Α¬ΒϊΰKΐ«ΐΕ-hc7³*πqΰh’gd»΅ό x}GBt,E³œΎά.ΐ:hOW[΄¨ E'q΅?π!ΰ,ΰEΰχΐηI¬\εΘύ3 ψ&p'–Ndv?œ¬YG=δ|¬3σhNΧ/Η@ΪΥ‰sΞ{k0 B΅{2¦ΡβόfμϋxžώΟΦ‰˜…ΎψΟ]―ρκ›Ηb+ωύΐ—±Ξλ=ΐ!ΐΪΐΓΝo’mΓΟ±η۞ΐΡ~·žϋsjeΰ“a­ΨΐW0΅%­μ^ώŠ}ή+cύ,'Kœ&¬Ÿ k}GBt)ObΙuZt½sΒυϊ0A·(Ϊ>pυ΅ΪϊΣ wσ…Ψ{ͺG„ –ΐ'°Ϊ·HΎ“·0«Υ'Θ,Ψ'”»€ΖλLΖ:Χ}Ρ²8z=u o`Τ+‚λΉ†c’c σe"ΞO η|wΧ+*ϋ“ά#s°ιΆ5œχ£pΞq jΗ~Q;vI;2:φΎA\cx΄Θ}StΛωΥẟŠφ½8xδ3|ϋž7jqϋ„h7.Η~3ί‹φω@‘?OΎΆ― Ϋ'΄ͺq‚ObŸύs$ίΗ1aίOΒφ(lΐrΙ Λ ­k’’H<‡= Ze±|-\ο"L‚ ΆΟ[Eε†ΗbξW‹±QƁνSυ₯;˜?Ϋ¦Κύ>μΏ1lΑώ¬ΒζΏ£ΤeλΎψqhϋγ΅ΏΥΡƒl/'ΏΉ•γ}±ΟΚέγϊ0‹ϊY”Š’©αΨ/k¬ϋwQ}η«…ύ«bP>Άλύώ/~Ό ΜΫc’rnΗΎη…ΐ3‘-«`ΊΎŒejκYχΑχ±{m6f½x σY7£Σλlw΅v•γ„Pξ„*εΪ‰1$χdόY<ŒyaL,sήi‘ά1 jNJ˜·ί1w…ύ„νz{+λΎ©χ~ϋ.ζφΊψ5₯σ³κ―εΉ8Xf„λ~ŒΔJ§wΣΪΑI!Ϊ™Hώ£}0ΟωG†νθ?(&ZCφάξΓx Ϋ†νΟ…νΏΆΌuBˆΒρ2φ@X΅EΧ{)\οz`Κ»ήN'ι¬ύ ³’Έ΅}η¨\ΊƒωΑθΌ)aίJ$£Θφ]Ά—„Άx=sHΌ|ίBl4σι°―™ŒŒYΦΔΔΟcτE'`Ι>μσ¬Ζͺ$bΦ*e§Sίχ667λΞθΌ“B™ΥH¬σ·bbγ‘-`ΒθU’ΟύŽ°μžΊFΦ}p#φΩ\Y$άςχ$I'©’8―Τξjν*ΗwΓ9'V)Χl€YY} ―’>/9Τ:3?ΊΧE¨σML¬{›Ό-_ ϋκΉ7²ξ­¬ϋ¦ž:ηc’ό™¨mWFueΥ_Λsq°x'5φΠ™ήΟQΨ@νΑa9{ώ|³ ž–Ÿb±?ώϋξƒ^ΊŒ½8”ϋ.6wolκΞΖΐκ$ƒΓ`0!,οΐ>«uΒ΅6Λϋ)’‘ψoυΣa{AΨ^3|τaύ=e<Θ‡/bίΑ#Ψ θΏ‡νί„γΏ ΫGζ:!D‘x{ ¬Q­`ƒ8’RkμB,Ωa$nΣλGΗφ#ιdΖΒ.«ƒωhΨχΓ°ν#”s1kΜzQ>Κ Εζ=χ?KΥ½ψ@ΨΧΘ]Β5g7ω:Yτ„λ―Œu,ΧΗ:•[a’ηkΐaσΔύϋρΟρw5ΤΏctήρΚ δϋŸ L ϋώφέΆ·%ΉΧβA¨Υ°N5Tv―tΈΕvφ™ν΅}›ΤωΣλlw΅v•γ[αœΧqN;2›nρlΓ?χη0·vΔ‚Ήl]kί°οΗ$’ΦΏΟz{+λΎ©§Ξ9˜P‹ηΰεήU¦ώZŸ‹ƒa₯ίUήΛ|μΉr&κ}Ή³ΰίή“ay(|ƒ)Y΅.wϊ"›£±{μaΫ§Η`ΦΩnψO(2+`ƒ―}ΐΐGΓλΘviBt0Υ‚ŠyPžΡK5ŽώŽΝUή›Oψ‘°l.Ɓα~Φs1KΞaTχίΨ\ΣΟbV“Ο…ύ—amKλΪea‰yojϋ¦Πf0 l3q΄…˜P‚ Σ‘XDυ°?ΫaΨw6=ΰGb£ΒΎC™Ραœ1‘ޱ‘Ξqαγ˜½Ÿ³MΕR₯e«1ο&`fxύζζ·JΨ~³²NΖ:Χ/c.~W‘Έ”ΥBΦ}°'0lΟ“Υk¬³\»Š?+χΫNΤb=$V½y$AεŠΜΜRz-Φ‘ω4의₯υ$uFeU0@nΑ"ι‡=―~…=Οΐ,Άώ}ΦsoΤϊŒ©§Ξ?cƒ―`Σ%Ύ^O!{zN½Οٰ{ΆΕ7 C;ΕοΫ$‘ά—’όG-Α¬^Ο[αυ"O£…a{86Θ/Γο–΅ωΎή"ωή²^Α>?EšΝb:ζu΅ πn’€pc°ΎPπ_Ή΄L€=ΧNΗϊΐΗ‘xsΓ™WΔώ[^Μ₯uBˆ–RMœ{'hl³q'‰a%ΰ°QΔΗRGΔτ  ώ‹1«ωzΨ\γΒώιa‹Δ 1+HΜK©ν—Π†βσ,W£»šwx}νή…Ρλ!˜ψy₯ξqχΤPΏ[ΰz€`"£΅~σ’Χ.,ύ{ž‹ Γ0Χ ]Γ2³NΧBϊ>˜ΞνΑς\…uψ=Rw-Ρ+΅{ x§lWΜΊΊRXVλ—)£ &φχ=Ψη°+f26‡₯B6ζjύΉTω ˜ ςά¨}`χΩ,W~g4ζ‹°ψύ]”Ϊ7{†Ό ³•°ίΪαψήΨ€]£˜Ž=cvΒΩq°/QΠ| ΟΗΆΩ·f΄―,ξ9ί—˜w!%Ο‹<‹Έ”Β£*ΐώΎΌkΟ₯ώδ‡sŽΝ'N@²<ΒdqΎ M―wώ¬8Ÿΐ"qκΡiaτΰ‹ΨΈ:3[†έΫ ύ±ΡΚ=¦έsŠyΣ#zφ‘~)²vο‹SΕ½ζgbΛφΗΦ—‡yύΗ"ΞŌΛ:tέ<ΖΒγ‘.^Cˆ^q&&ΞO$ŠσγΒφΌBz$RΦaίΡ—ˆŽ¨̐Ύ…Ϊœ Bˆ>¦™8wΟ]―Δω‘D―Ϊ&jϋχΏ±Iκ=Ψδχxl­θD―ίf,cq3ΞΗΔωŽΙsη^,ΌλX‹£0a²;fΝόΐoΫω£:ˆ‡΅ίD9κΎΏ >cI£ΞΔΒw]΅:~ήƒE4μYχέΒοbπDl ΦtΏ”±$,·cλKη+ό1l}Mχ³Γώ( Ψh~sχs‰΅˜;ΙTϊε₯Z–bρŸΙ<²žh0‘·MΞρ™δ·aήw_.α,&ίPσ &$}…3ΏNϋ5˜ΡΗ—k€δy™`aΨ―'†η―Δ½ŠZαΩ !ύσω!vOƒξŒvΟ9»Χ-'†m_†έ_σθΕ}qqY…{Πύοψ$6F>„%Rϋ fΉ»ηxN†*RΥ~‹jq+ζ„x9qnwv/”π+„UyMxΎ»'*€]ρŸό›8Ό£GΧ{+6‰Ύ—θ Ύ›ˆ§ž™΄”ΦμΝRbˆΊS―Vο\lb9A~’YΨΜ?aβ`5&~ΞΑ&†ΞέMχ΅˜`ψ1ΥtΎO’φ`xΎ=pζsOٝΐ§ˆžΘ!,ͺΓ³ΒO`Έλ]Γy–(j=&ߞΌ­ ήίJΏ›υ«ŸνNmκΜΔΌ¬?£6Ι€—βš‡ ½ ΰ»]ΈΎ—ΎρG6Jaͺcƒ―΅{ΞΟK©]Dmθvήω[Ή/N‡mΓ5ŸjΠfφ;Ώ€XjϋΝ~4σ7T…yΨί ΠvΡm<+ΈW¨ιΦύOL/ρΉ™ψ)K»β?ωvcψ@Ρ€‰ LˆφšX’’‡BΦaλχχkπžέ‰Ρ’œŠ}'Ÿ.Ί#]bGΜΛϊ qb³«Ω€eο ―·“ψOt]˜l€jΔfhρΝ«°dWUCβ\τŠΉX΄Lj8|I‘=Y–P[νAYΪ…0ΚΆζ\4Ζ£z]ηόεX¦m°‰σ'°5jΝ’yθ\/ ŠΖxx^ψz•Ω3yή0£ΠχΙO`1aW·K ŠΦπ3«ΆŠŒb!νgcΛfcλα«Κt“=φ »`;ΪIͺW&ΌZŠWEYŽ —βx₯”b₯”!L<{Ε•bΕoŸ.ύI+@m‰Υ΄ͺFϊ9nΐΒ£½μ’/):–Ϊ„œi2Ο΄βA£kzNˆ‰b‘Άͺ‚hΞc˜1ωέαωM΄ξγΜ+ϊ@ΜγγΜ«ϋ@¬ΘγγΜΗ]Z©Ε«ωxΥ―qŒL`χe°ο|#΅ίΏ1o﹎κ΅χΌH>žφBτ-ηΥΒל·’`­“\­Ϊ ι­–’8/ύ(Ώ~φ7bω)ώΛ@ά‰σrΡHœ?K·φ½}“Ϊpάk»Ϋ5ΡCΎ†‰Ε-˜ΈXAœΜ― ϋcΨ8YύŸ ϋ£IΫQbBΤΥΔ₯ca?;Ιw!³8l…mήcqΞλCτ~YΕφΣ|6X€Q―Ȋ«Τ p fψοu†a₯%!Ž1lόψώšΜσΥΔq7†ύώήqj.bέh“-iλ’ΧΛβŽPk̘ƒ‰υΉDρΌ(i;ƒ8ξ²y^ϊσi⬘?Έ’ή 1 ZM'qUŠη`υΐokσ=k±ηωυ³EοιGq~9pπ,Ϊ-ΎOβΌ\4σœϋŽwΐ’5^ƒ•`¬:JWΛϋ°κž΄›‚Χ'ρ©qΊΈXpυJLD¬"VTqa‘V]ρΎx–Ρ:ηr1›νsϊ9₯U5\Bτˆ‹Ϋ…θw‘΅"ΟΕdφš©W΅•k‚@~¦ϋ§·Π[φLϊΡΙ±6F{•T걍—ζαγ&υd{dƒ―Ό2Δqεγ,υ^»‘ΑΗ¬αΤΠβc$nHHnjχμ·Ϋj Νxr.Š Lœϋ:/S³θ=E…΅O‡•˜u1πdΑ}ΥCΝ،eFoηsΆ½’‘8˜X†oΎΎ„ώη’–ΤλΈ=6.ζP*ž†ƒOηΨρžθBfϋΏ•}¬ ΫzmΖ‰s¦^±|Šο;»£½h4’AΰL€ΞΙ{S—qγΨeΐ‡‰Λ'ϋ 0ΟΆ?_σ±q5Ϊdί QΔfKήΊvΡλy“KΪfΛγΊΠφχΈΗ8]ŽΠοψο9S©˜ΏŽš/¨¨ΝΔΉgΝ•8/>‰(Βs>U–a¬8/ύθ9Ÿ*ςœ— ηΝΦ§ξ7t·;’ fbμ-Ψ€QφώιβόμZjΡ6Sk|ρ}Kn6'ν~Νq’°Μ'ώ]’σΈςο1#άμ°/De˜Ωδυ§Γv»†­D―π0ž*M"\οPh/„#q‘8/­$„.Ζ²΄Wι>(ZΗΓ©{1‘φυΑKΕβylf5lΥΊ5ή$Μ‹Ε“aπbZ΄*Ξ·νvGDKx˜T•nϊΛΒVβΌHœG<EβΌ43>ΞΕς |ψΏ=ιQoPΘe-.–65l%ϊ‰"…”Ζ[βίη $Θ}D«aνΫa‹^―§rfb‘υΎΖg.1;κ\l}'€&f΅\φ³dϊ9ωJ'jΩI—‹±Ρ°υ¬₯λ1Ρ½mƒνΆτΎΎvΗ’„F‰εpΦ“@­ Υ‘?£~2šlfΩΌδ5.–[m?(δe8>8«gΑpμο€K{Υ)Ρ3zΦ.ΚAΔy?: Ώ(¬]TŽfƒv›ΐ½n[Ρ{±<<ƒM–Σ₯.ΪκΥAu#ΐj’AaQψ₯^#¨-’zŒš½ζ“l˜\ή$-I’h7z-υbΉ'̏UIœϋ‰T`§Ÿeϊ9Vέ3ŠύCHEœ=Οθ›%Š??ζF°aμ³IΆ>F|Œωψυ¨7ψ8ρq™ΦDέ5μΛsΕ9Ψχ°-V^¨¬Έ!+52₯Ζ*7‚¦εsRVjΛ[‘Φ8ζΩSγ–†}\₯c³ή˜ΜŽΕFορ6½”r ς, 烇ΒΪE§‘η\T–Vn„Ύn 69σ •{{|ς5L.^}‚ζ"Τ†{‡0ΡύtmΊ―uyΆΞςυT+yίONΝy=5l€ΖŠΤ8‘ΦLM½ΤiύΥΤΠ’ORcIjqƒ‡‹΄Žμ†)λ$+š7™cΨηΉͺYΓΐEλjlΩΔ:Ό­<†©Κ.ŽΣ(Ή.lΣε+νΆοw>|•bΚ)‰ώ·Υ"±4x”Αs.cP!q.*K+7BEξQΩDχ„ƒhŒ Ξ*yΞ]HΧ+–4Ί‹Χd]K΅’ v ₯Ρ[0ƒΰΣ“›‹.γcMœ‹Z$––QX»θη’²4ΛΦΎζmτPJQ,Uηnάι΄gY΄—D\ή°Υΰ°»·ΝAΐΛ€JΫ PXϋ βΒΈΘRjηύ…ΔΉ¨,ΝΔΉ„UΉ¨’8oζ9½ΓΕωS [ A° a+Ρ δ9 q>ˆΦξ‰σώB₯ΤDe‘8―U¬s1T\œ+d;’Ϊ.ŠaP=ηΎζ\ ο …eH'cP‘lν’²4΄Uφz¦΅|ΣREy΅|ΣDai’±4A™g―Wc8―†°'&σΜςγXΒ§uΙώΪπH3Ξ― 6½·qΟR•n6ώωx–4“tU˜EλIΒΔε žθ βΪϊ4ΩWš;M–fγNΟ₯™΅ΣΊρ^ώ0ο:Ο Οε9Έ8.²#-ΰό=Abz―ρ{ΡtŽA·yΗ f|Οn} f·^έ·>>³ΫQβ½VžσΑFbiπ(CB8ƒϊ …΅‹ΚμFθŒ€eΨ„k1‘”‹Kšγααε‘Ζ©όΞ 6«Ά‹ίt’˜Šc/• β4sw£sφ3 ›7) ώ])υiZv-‘>Α‡(<ΣlΩiY¨z’6²Γΐ6˜ψh΄ν·:Σ?#ΒƈίΧΌ΄έl|yΗzυΞ]ΜΊA.½§ω}Μο]~ΏςŠ­Άζ6o"ϊ‰σΑCβ\t‰sQYZυœoΔ&±e―œΕ\*όR‘ζ^›Τƒ™ΦnVχ7―Ζpz]‹ΓΨ„{± έ"lς½56‰χΙύHΨΞ mζ†χ-ΐ>YT+Χ -ώω€bc6Υ¨mΎϋNύρLζy½Ηρ7ζ^Oˆsφ³p£KjlJU©a*5B₯uγέ`•ŠC ρσV)ς’W¬Α>Σ­1ƒLqγTzίρ{M/ŽAŒ<ςρ—έzQvλcΤ·ώ{H·[3ΖUΡ%θ<Φ.:ΔΉ¨,­zΞ Ό$μϋ€›PωΆήΎ ·©wΣΕo꜊ct©w4υͺΊΈΞ;g?rp8Υηξ₯=ψuζ΅΄yΊτ žΝΈι’„τ|υDmZW}%΅b;»υύ~©3}$p9Zۚς(πbΰmΐΟ°±΄hH ΗόΉ[˜<ΕljΌsQλχ1Ώwωύ*½οΉπnΤ¦ί9 XΚΰ­9wτ»4TJmπP)5Ρi$ΞEeiΥsž&σš Ρ[ͺ˜Ό*o 9Ρ8κ%nΰκ·0ύιύM­"~N’·ψ=bΠ–]L4o2PΘ“9xYJMβΌ?‘8•EΩΪ«… ‰*9―bRΑ~Cβ|2>1Σψ,xTΟΉ0$Ξ…΅‹N£Rj’²΄*Ξ5q-.Ϋ/žsΡ[$Ξ'³CΨ–=Sϋ  :ηδΙD”Nt•R•₯™8—°*U k—§iJ3JCmr­4ΤfN³OCmb―4ΔlΣP[kj3{§―₯™©!&K“)yB:OΞδYΫ='ršΚ{$Pέ€Κβ|3ρϋσ$oιxς±”Ž#Cιψρ±“Ž3iΈτΨ&jryφώ4KΏΧ^·9›˜+mλ‰=ω`^2°2"q>™ν±±9μLΌ―,ΒΖβ0q\- ΗFˆc³—/&ŽέyΨΈ}K(Ψμρ4–{‘Ÿ“YΆ‚ŸQXϋ`SVq~π7Ψοu»δψΐΒώGoυΈ_ύ€'„+bΝyYΗ[=|:ΐ“ΐ­ΐΧ€k:x­³€χw{uπΌ½@β\T–VΕω1(iM+¬ Φ‚_+‰u“ΣΧF“ύXω¦τ±mΞ1/ρδ΄ ΈεΑ";Ρc\Π»hwΡεΉW+Έ‘ΐnXڌEbΩ©ω˜ΖD£?_œμ/ ―Ο ΗΌlΫ\LP²t†° α]8χφSx}μ¬ΔD«ΧT_Žωx%Φg_φWac&½Ώ§  Φxš5nf ­Y#iΆάYjPM«'ΐdγ«3œΤP›^_ .*₯6xΘsή>Ψ½~+`ΗπψkLΈ/ζΉϋa~ q.*K³αoˆυ‘Ά€D!“½†.D ΆΞ8DΟ#Τ–NƒθΑ„ΪZ»P›Ω;-©–z5!Š‘΄Ž΄O έCλ“DχŠω„4\Ί§Χ'²>)υΙκœδ<σCϋnΧν~ψη._£“\Ό“Ϊ1ΰc#=ζc"yΗ||€c#•΅D/½ Ύο:;>²ίq;m·’άυΫΟ€ϊx;ΕΏ―%T<:fe8ΆŠ8V '>&ύΈ"9Η6[1Άωρj½πƒˆ&ώgΡι1ώΉw^„IDATNaνFΏ”Rϋ,ζΨx66wXΝ©> άΪάμ\ˆ°OΒώ—όx?qN5 |ψoΨ=ζLZ/3“ΓΉ_€έΟώ ϋύyŠ[§‘8oŸgˆoΐΖΜLΰ˜8Ÿ|8Ψ ϋή| ‡ŽΑb₯EOΒώǍϋ…6{οS'Reη’²4»>D΅2ƒ‰ά“ιυ’b“νμ1o»ϋœ s­ώκFͺpRx .]΄»Qgϋ‡9B ιwΟ’\π`c*m;ϋώG±œγΔ_cα±’(Η° α8Ρ³šΖΌ»‹η^6…χΈۍ†ΓΨΈX[‡c>ΆFΒ±ωΔρ΄3ιdӍNj<ΝΦRΟZ³FΤ( ΅Υ¬7k˜mΤ! aΖi$I½ ― ―]ύ¦Ž^Œ…§ί[±οoϋŸ―Ÿƒ }°ΉΐίΣϊ}ό,μ>·mΟŽ^άίβyΊ‰²΅OηΟ·`|δΨ7Γϋ†±θŒ ΰΊδ|>f6…cΎκ,&±ͺπ ¬ο/Ί#B΄K³lνB!„½’ͺaΖYŽΗ"hξώOςΪ’LΫ_=’ξΙ~VΨξ›΄» le²η3‰^ΥcbeπΒpμΕ-œ£(¬}jψR¨'‡ σ₯X’BηGa»ψeΨO_w~άφϋ‘B“<η’²¨ώŸBQu‰σΞrπƒ°‘πό~`l\~ΆΕσψZσg‡ύί…sT‰sQY$Ξ…BQϊΑs~7p&ˆ^‡%Ί›*οΒΦo^ƒ•BϋΧίϋΜ{ζ-?σ’ž \9>u…΅wž“°²}w»bηΥΐa΄–―¬ΌΪ±„…{b γΚmΡ ‰s!„BΡ6³ˆ‰Ί|ϋ8(!œθ4η’²Hœ !„’,ψdZžΜΑAžsΡi$ΞEe)βF(„BΓלΟΐκ /‘d0 , ϋσ±$Z€1` 6]Άk€q`=°2΄[ ¬Φ…γγ]ΛZc˜φG€Εa_žΜΑAβ\t‰sQY$Ξ…Bˆβ™<άγknV…ύQΜPΰBί…Ό‹ύ‰Π†πž!lβ;3@­Π―m…Ϋμ{κ±eŠ“¨η’ΣxE‹Κ!q.„BΗpp&‚έ>Šy»Χ„Η*Μ >³€­y˜θƒyžη`žυωa1Q Ο ο™‹ ιYDO΅o{Ν:Μφ7n,Δ’ΊMjLπύμΆ―ε1RΟ€Ÿ{T‡£5η½c!φ9cΏ‘°]DΌOψ}ΕΗ©ίKχΞΔξnh›^‡|£ίΑγQ;νΆY‰μ΅IρϋΩcm|6B”‰s!„’XŽ+θΊι„Ϊ'³>χ‰ΉOΨSoχ061ވM˜W†γ©σΙ΄{ή!N¬S/|–―§„Η›{{Βφ^ΰ!LΜ-}ia›=Ά€r3—(ήϋV^B­ˆRj~Νea»‚8>}λc<»υώϋvfPσ­}ίϊ2ί:ώ[σίήHΨ." eΘ.„‡‰†87Ί-JήοΏΫ¬ΐξgR?Ž=T\w„˜ηB!Δ`² #$Ϋ’ρ~μ“y}f(˜ξό%5Έ rγBžΗΞ½½©±ΑϋκΜ½y©ΑΒΕ›/pαQ:Ωθ…j³ψg½μ‹¨΄Ωη.φ_Vΰd›‹<'υπη=χ(Η…€γβΡI—8@mδ;'-"‚d ½»φ±κ㍣ΔqοΖ=ψΨΟ{οfl¬§γΪ=ρΗ¬5YcίLβψσ63°ίΔ±νm|,₯mό|ιw(q.*‡ΔΉB!Κ‚ ήσΒc/L€οΌx>6w mGΓcEfΫθX^lΘHΚb0ιΉ±p-Ε¬ή€‰½ΓΎDR±>#9>B–Ύu1κ[»|λB·©@…(‚]όŽbb7Κ.έC?J4Ήα'ούn0Κ.%θG¨Ÿ3€·Ϊ#!¦€ΔΉB!Κ‚{³‡€λΓ#e6&’ep?γ‘Βσuτa=&ΞΧbbΆ—‘™(ρa'qΟύ bΘƒΕtEˆ©£,†B!„( .Žκ…oBΒΌίπPω"ΔΉ_³ˆ5ώζέc;ΜಬYC!Κ†ΔΉB!Κ‚‹σ‘†­D?Q€8w―ύΦ [‰ͺρ<Μk>Ρ€₯Cβ\!„eΑΓΪ‹*ν&zΟ zΞEw˜μ –$k3„ά|™φΦ\O₯yŸƒγaνkΫωŸƒS†„p­ˆσvΗΫ<ΰϋΐj`9pp!pnƒχά‚y·S~œyόΠζ/X΄Αΐ;3οy6ΎoΞ)πφ–‚jβερΆ*΄BL‰s!„B”‰VΕωTx7p%Vjιeΐ>’Ό~*p<π>`?ΰzΰ—˜'`p p>{&J·δ\λΰ˜gzFxά•ΣΩ5χΧ;‡ŽJ^&|·«χΗΧaœθ½n΅/Yυν.ŒΧΣ{ΊΦώ5ΰpL( lΌ±ηύ<φύœ 썭#?xsζΥΐ9ού=°폑*±1l•_T‰s!„B”‰'ΓΆkΞ―~ˆ‰Ψ{1εαάsŸ.ΗδΙ‘έΙ‘Ν˜υgΨZή{Βω|]o»΄rMg)ζy݌yK―ΐğ³Έ(Nš1 xpέN_²4λ[#ά0PδšσNΧ9Ÿ‡‚> \“«¦yή!ΜkώΜΰρπ,rαέI»]ΘOˆφXςzΏβγ_žsQI$Ξ…BQ&άsΎSζψ€MΙ㠘Η0=vH“sߚy~ ζE_μ†yP―M^ŸΐΒΦχΟ.ΕΌ’—bzώVιd½ξΛ©5`\‰E¬lrΝC°ΟjCΈΞ Xτ@;}Ι¬o(λšσ錷ηažΫ’c›˜fή.{aΒJ⁠̛ώό€έωŸηΪδυ~ΕΓΪε9•D α„BQ&κ…΅Ÿ‰%εJŸ_­!w%ƒΙή΄Ό όDƒcXΈφKŠ%Vϋ2ζ%Ύ!η}­θšΞζœ6Sq²άœˆy&&ΞΪΎΎd™NίΚ*Ξ§3ή¦’ ς—GΜJφύ3ύ/ΐν Ξσ°MΞq?ΆΌύUyΞE₯‘η\!„eβ™°]œ9Ύ $ώX ωτΨX“sΏ"σό`,Τwp?&Φ Χ3B›?gήχ{Μ³ϊR,Œϋ-u·Zq•₯kvŠ1μ³Ί›ΪŒΦέμK£Ο‘¬β|:γν~μo>(96xq“ώ,cςzπ=’ύ;1οχ‘MΞs3ΆΆ<ΛΎΨXK“χWyΞE₯‘8B!D™π¨ΎVΧN·ΓΨ:σηGcλwΏ^[‡%-;Kά΅WxΎ{Ψ‚‰›ΟK°δg/ΐDS`mWLtej+Χl•ΧΏΕΚhM…Nφ%K£Ο‘*ΩΪΫa8ψ –ν~w¬Rΐ"G!,ŽΑrΜΔr€K Ζ±ρϋiΰο0αΎπώΠΦΉxQΈ^Κ«€«Θtθδ9•FaνB!„(.”64l55ΞΕκ (gΕ9ΐg0αxζΉΆΦψΑπϊΜ[ώώπϊ£Xέοzε±ΎˆyΧη/ΜiΣ욭²ζ垎(ιT_²δ}ΎN½¬žσις `>–\o=πΏ0ρέθοό.fΉσ+]—ςyΜΓώAΰ˜'όV¬žs=φωœŽΝϏ›βίSδ9B!„’C‰y/οπy—bžLQ.~}ί―)ΰΪύε\k&Nή,σ}§8 «eολߏώ½GΧ.’Σ°οτSEwDˆ© ΟΉB!ΚD‘u―Eο)C)΅nxΞ ;ζA–ΑώβFoκ —`Λ–`3°zτύŽκœ‹J#q.„Bˆ2α“κn„΅‹ςяkΞΑ<ε€­7ί€%i{5±Φx/ψΗdό^·HόΎ‘5η’’Hœ !„’LtΛs~x‡Ο':CΏ9ΏKΚ&z‹Β‰J£lνB!„(ςœύ*ΞE1(!œ¨4ηB!„(ηƒEΔωά†­D•η\T‰s!„B” ‰σΑb~؎pmyΞΫγ2¬ά['Ψ+ χœπό|ΰ³8―<η’Hœ !„’L([ϋΰ0η›(Fœ»·Ύ_=η?ΎΥΑσ]ƒeŸοD>‡e8<p &Ϊ§ƒΔΉ¨4ηB!„(ςœ#a;ŠΥ¦ξ5kΒvA m/>ΠΕΎE;"φ;ΐΈζ0ppnrμ>ΰΐIΣ<χ¦°UX»¨$ηB!„(ξ9—8ο†Γv΄ λ―Ϋ…-΄’=!;ψ(pς(π΅δυ9ΐׁΗΓλ^›9ΗRΜλ|ώpz8·σzΰ&`X\μ‚…‰œŒ>&€½Β9Ώ^ Έ2œη(ΰz`e8ώSΰy™ώdΓΪ›υ―^ή<•—Kω)πv¦‡J©‰J#q.„Bˆ2αHaνύOκ9/‚vΔy»|ψ<&Θχή όGςϊ©ΐρΐϋ€ύ0aόK& βχΧ;‡Δ„4˜Ηΰ"`Oΰ L(oΑ<ΣΏΎ‰εΐ]α}ο η\Ό1Ύμ³Έ”ζZ‘QκυαΥΐ9ηϊ=φYmΧ䚍π„p k•DuΞ…BQ&Φ>8Έ8_YΠυ»%Ξη>A έώ &ΐΑΦΈψpy8v2phΨ~$9ΧRΰΒ°pp8πl}φπ3βΪν{Zθίo€σΒΎΞ.Μ΄9Xμ άήΰ\ϊW]€»sŽ?–ΌώTƒχ7BžsQiδ9B!D™PBΈΑ‘hΟωͺ°]”σΪ°υΛώxpFζΨ!uΞ»&š―σϊnΨ8Ώ696…€οi{WζωrΰYaΜ»}cΨ~Ψ±Ξ5SςΔφ>XXω2Μσ>ΜžΫδ\ϊW!ςKη­M^Ÿ**₯&*ΔΉB!Κ„<ηƒCΡkΞ7bF ΩLΞΨ~&π’δq-ΆF<=–š ΅kΒ‘—/{lsNŸΏO`!δ‡· ά‹…·7"+Œg`!υO/Ε ³°Ο§Yxx£ώΥγ)`›œγ~ly“χ7BΩΪE₯‘8B!D™PBΈΑ‘hΟ9Τm_†y˜ύ±Kx–«WώνNΜ |XΧοnj―LŽΝώά^χ[«ύLXίΌ%ί€‰μfμŒyΘΏ <ˆ‰ς}ιŒχ9―7cžϊ,ϋbΡ ™Ζυδ9•Fβ\!„eB αχœ΅ζΊ³ξ|ψ&pVμωΐΔRlλ°$i§c Ωφ ΟwΫVΩ«~–άν0ΰ˜q,μύ `W,ΙZ=‘ώ$–ιύˆπ|, ϋ–6ϊRΌ>\‰Ed—Ό ΈŠ|o|«Θs.*ΔΉB!Κ„<ηƒC<ηΦO‡ΐ2² Λ—R»~ϋ3XΝπs€[—cλΪlγk0oωΟ1|V‹ά“Π}3܁…Šο^η<c±,Ξ&Ÿy}Έ[«~Lnvx~φ4―'ΟΉB!„β*l-ναEwDtΑΎλγ μΓ΅‘―*°ƒΘQΐmΔυωΗށσξ…}Ÿw6k(DQ)5!„B” %„ς’υšnΦ:υΉ u_‚yλg`5Σ§‹<η’Hœ !„’L(¬}pπΊΦ;Ψ‰σβψΗdόSkΞE₯њs!„B” %„Ϋ"ΕΉ―9—8οδ9•Fβ\!„eBžσΑΑ=ηK μƒ'£“˜λδ9•Fβ\!„eBžσΑ‘ aν7ccνϋ :‡<η’hΝΉB!Κ„‹σ [΅ΖⰝ …ύ,ωΤΦΐΌplsXΜζ‡c‹°šΜyΗΆ„ccXθgšl;Q3Ίί(ƒηό:ΰGΐΙ±!`Μh°π,`Η°? … ΫΥΙce8ξΟ;QŠL΄‡<η’Hœ !„’Lψ€ϊT¬>ςpx>Τ3sŽΝ ΦΜΒΔxΩΕDϊΣa»"ΕDέͺ°Ν>ΌM·2›Ο&·N©ρ"ύLύ3'΄u₯. ; HοmVhοσΠ"=η'{b%ΥΆΗ ZΎ‰|!Ώ*<Ά`ί1a»3φlΐΌωγΐfβΊxk0γΥZμ7²1+鸁Ϊ1’ώN‘ΦπEΨOEυβd?›P;!ŽΉI{!*njζM„B!zΖmΐΎ:—‹:υŽΉ0Ϊ€‰#0A΄ΉΞ±T ΝΆΑ„D£νtη\YρΎŠZAVO({€δ ε2pπϋ¬Άφ³3ΗΗ0Oϊ“ΐςΜώ&ήG°Οpax, ΫΕΙσ­ι-Δ5τ>VΗ±±ξγ85€€7ž8iδ Ԏ―²%η&ΰ@ΚQOˆ–‘8B!D™ψ+ΰ՘˜HΕ†{ ΑΌΞυŽ­£œαΔ#˜HwΑΎ8ΑΔΞp‡·ι֜m±œXjtHιgκb’——pŽMaί…!DcHϊ]¦qpΕ}gK€¨αγ ίΡ:s0‘ξί₯ x€Q n8ργ­ΰγΤλμβΨ½ΗYt‘€γ’—ίY‘μg=ώιΨ‚Ϊˆ‘tœBνojΗάΰ2ΰ©6ϋ.DαHœ !„B”Ÿ<Ÿ ²fβ’0ͺη=Υ&υb»'άCΕ=ά<λw''1'*%(%‚('+((%(('((((())('*#4+&#+'#,#B0.I1%1:22.72:I3-+76ι9&< …„ώ‡‡Λ‡–ˆ{rŠ^JŒ—­Ž2Ž΅Ž’—Ϊ’Ε““S8“uY“‡z“¦œ——ώ™1š•’›š‘‘ό‘¨³’­Λ£€π£Ώΰ§š—¬y¬δΘ'―§―΅¬°‚k°°ώ±ψ³²²Ζ΄΄΄΅΄φΊ΄ψ³Ά΄ΟΆΒΝΊΊηΌaD½ΌΥΐίώΑžΓ\:ΓΪεΓγίΖϋΗΗΖώΘΔΏΘΘκΙ»―ΜΚΞΜήΓΝΧκΞΞύΠ°’Z1ύΣΧϊΤΣοΤΣϋΤΤωΤΤϋΤΦΥΤξ֘‚ΨSLΨX+ΨΨδέR"έόμήήαίζζίοόίϊύαT$αΰόδS"ζSζS ζύζηΡΌθθώιRιΫΟιιημνώξψςοξοοχύπιγρρςρρώσυτττϋτυφτυχτφτυςώυυφυυχυφνυφρφσψψχτωψλϊρξϋΆϋωώόϊωύ‚aύδΚύϋύύόυώιΚώξΠώξݏiΒͺ! NETSCAPE2.0!ω ,°5y¨8‚H*\Θ°‘Γ‡#JœH±’Ε‹3jάΘ±£Η CŠ€D ’#Uμqp€Λ—0cʜI³¦Ν›8ζ(ΉC…9ƒ J΄¨Ρ£H=ͺπα#©Σ§P£JJU`Υ«X³jέΚ΅«Χ―`ÊKΆ¬Ω³hΣͺ]ΛΆ­Ϋ·pγΚ=Ϊ€ –6m°Τ2·―ίΏ_…(Δ–aXŒ$)ΈρD6† ΑΙΤ†!Œ«5bΔΡ€`΄‚‰M VΚS/Δα“—!-iξΨA&#ͺΡ2!̙5nΨ°Y n­·#™sc}ρ‚©dΜI\u³£ _ύUHƒΖ˜‘[œQΔ8BMΆktα΅ς BΑbFmψ΅ϋψ©1ƒεΘΕ{¬Il 9γB†,H³Ο$9L–Ρ²μsˆEI(ΒΛ7γ ƒ 6¨η ε=CHb”„/ςŒ²Ψ6 &ZpΨΰ‡_ŒΦˆΆ"‹Q‘ηŠ8ξΜγΞ8{0αΑ pΩ’νœΝζΒ’ΘM‘„uηƒ ξ)4CtⰏ—έ@Ds><'„ ́'r Ϊ2 zξ1ηά˜‘ ™™ ν€ΣΘΣΟiΙ©&r?μπ$BQ¦N<‹6FMΨAM}Ψόγ3“RγΟ?ά\ƒ©Mΰ ]HσΜMAL” ?…  2αŒ“‹…ή@Š8 QI-α„£Ν"C1ε„<ΘH3Β.Β—Bl"N4‹@#Ί ³γμrΰ ³J“α"L΄9M7ύt³Θb2l[«·FΌΰF,ΰΨ =$D^-Σδ($ς +­γπBn―Ώ;l±±ΓΤΓ>°£QŒ‡ 7ΚΰsOoχ࣌5χaΓ%Š:” OH3 (χrf„«ϋb‚,σŒŽ8σ̍8ύLb-βŒΝ;αPΔ±έ)2M8ȘCΞ"ι%”‚,ύPΒsL‚"Ρ4γ8Ϊ`1sΝΡ€S5εMS³0±uΧ_‡Β0ςtΣK˜Έ%„ήδR*=m5φ8;WDΎL#΄;δ]2[+qFCψ 51^‹?ψψ£ =ώΐς5άΐFr&% }LΣO?£μΠ±φ³G΅T'ϋcξF( ψ±2$!4«Β1 0X8ΘC©ϋ ‚dq (EΚψΔαͺν¬σCi―Κ4³T}ΫKΣύηΖ±f–Œγβ˜Fτ\ΕB  γΆC&΄κ3"•8xBγΕiςΖ°ΰ\m`!?vΡ<Ακ‰έ"ίΤF―aMY Δ(ΡgύΐΗ,τA 怃΄‰ h0H‹‡'”8Αΐ(BˆF4΅θΛ] ‡7>‰RN -ΙΑΤ*Ω )Mβ β’D’Fθ$x‚-²±*Ѝ tXΊ 8YrOδZ?ψ±‡Όωzp<’ΈΜ +—»Όƒ/9!ιωEa F,7Ίή£‚ΚθΗΖ:uC"2‘2™ά` ‘Σή-§Tˆxb πΐ%3™6τ(mpγ$Pπ„hLΓj;8‚^RYN€k]CΔ_0wΑ„!֍N„?’α…9’ ΑΔβF;Z‹Z’ΐφL9@΅-ρ«Ϊπ…ΧΐASξmέ() ›pΠJΕQŽ 8ΛΈΗ‹δ€ ’Ξ}ό:Γ|ΞΤΐ,HφNxΒeΩ G:t(ŽτE²€D%ŠIMΊ)]Σ(kμ·Μ<Ÿ―‹F9Ϊ­ ς˜G\ρΧͺiΓ3¬]?†1 Άι—)­1ϋqΨ¦¬Ό†8&0t!$erΠ‡&”j‹mμ,ΜWΉv•2{˜RΩAΫΪ6υ"U鑌`Π‡Ÿ5QΤy5(3xB%D a‘£(œ3M@IJˆ€ύΨ†hTB/ M„€‚@ ΓfΘΰkB\πΔJœ·Ρ†<€dτCρCν΄Žh| 8(2θ˜R,xη0βπ`₯CCLˆš#Α±‹!!_)kβ~ϋϋ_suχ»Q;ξB†`LŒ΄Θ5`A‹QΓ{ρP˜σ0Ι B "Œ½Ί @M0{›P΄53k’aO‡Œΐ„Θΐ4@“2ƒΠ<@`2{•e#ψCΘpπ$-£ Β[ξ“˜ΐή`ΙtBφŒžΜτ˜ _ζAΦ~Gg8WΖ<ΐΜ%œ1:sΜΈ„xΘ@Qt{83i!»@–Ζ΄Ήΰ„›3u(kbOΤ΄&†Š1Θωΰ£o Ιp2‡ΔΜ€‡ΐ7#J6FMf*›JƒQFx,zΦ„F/DPΕ”Œd4)I°‘ΨΖ6ŠσFKν¨ΰ Βv„0…Όφ"Η:Hlͺ#n„”ΜC‡\Ά₯s"`ί6Y]½lό$Ί.ΡJΊGΜƒ*» tή7Mzbœδ€ΰ±©2™οΤ­‰ lΈDhFC‹K@œ~ω抢ήlEΰζφ8Ηžƒ*°Α~pΔ«ηŒ{δ y΄Iά„*ΨΌ u™ΆΛwΞs¬xΌη@ΊΠ‡Nτ’ύθHOΊ—Ξτ¦;ύιPzΟΥAυͺ[ύκXΟΊΦ·Ξυ{ύλ`»ΨΗNφ²›ύμhO»ΪΧΞφΆ»ν戻άηNχΊΫύξxΟ»ήχΞχΎϋύο€ΌΰOψΒώπˆOΌβΟψΖ;ώρΌδ'OωΚ[ώς˜ΟΌζ7ΟωΞ{ώσ ½θGOϊ›ώτ¨O½κWΟϊΦ»ώυ°½μgOϋΪΫώφΈΟ½ξwΟ{Ζ—£ίΎπ‡OόβψΘOΎπίϋζ;ω£OΔ2`κ[ΏϊΨΏΎφ³Ούν{Ώϋΰ§>As ϊθOΏϊO@ΐϊπ―~ό30ϊΛώτΗΏύσΟ ΈŸη·~8€x@ΐ—€ί € Έ€Ψ€ψ€XX€˜8wΈψ ‚"8‚$X‚&ψΈ*Έ‚ιw€ωπ‚0ƒ28ƒ4Xƒ6xƒ0˜‚,Έƒ<˜{.ˆƒ@„BHƒ:ΨƒFx„―χƒCΈ„LXƒEˆ„P…₯§„MX…Mψ„R˜…ZΈyTh…^„XΈ…b8†‘Χ…_x†NHdΈ†lθxfˆ†p˜ƒjΨ†tX‡„χ†q‡ah‡|Ψ‡u‡‡yx†{臄ȇ€ˆ^8ˆ…ΈˆlxˆˆX…ŠΘˆ’Έ…ŽψˆL‰“˜‰PX‰–8„˜¨‰ ΘƒœΨ‰`8‡‘xŠQ8Š€ˆƒŸˆŠX€ͺΈŠ6؊―X‹κ‹²H„¦h‹Ό˜Έ˜‹2H‹½8Œ»χ‹ΐ(‡Δ˜ŒhŒΗ˜Β¨ŒΠ({ΜxŒΟΦΨzΣŒΥxάˆz٘‹Ϋ؍β8zί(‹α8Žθθy帊瘎ξ˜yλHŠνψŽτHyρΨ‰σXϊψxχh‰ωΈ©xύψˆYx‰ˆy i€ЌΈ‹ 9‘’—Έ™‘wg‘yˆ‘ω‘rΗ‘qθ‘ ω‘"©‡Y’*9x'‰†$Ή’Ω’‚˜’0Y“|'“_ψ’6i8™ˆ4Ή“@ω‡ ‘—ψ“Ay”ζΠ“V¨“HIJ‘M•!9”Dι‰F)•5ω”Wx•XΉ’ZY”]Ω”_Ή„L–έ8–VΙxŠ κ`–gI•UYŠ‹§lι–Χˆ–BΈκ @>p—x z)—‰‡μΰ—€)˜ƒIŒ… „$©˜Ω–9ŒΙŠ\)xθ ™ŒY™΅x™7¨“œI™žωŠ 9‹™9x›ω—“Y𦠗q‰™‘7š‰ŠXη€›Ί™›ΌΉ›ΎΩ›ΐω›ΒœΔΉeΉš‹Iš΅™‰H}ΨχœΞΣ)ΤyΦ™Ψ7©ix΄Ήœ™ δΙϋwžε‰žΦ€0yΘٚΰ)‰Α· τYŸφyŸψ™ŸϊΉŸόYŸΑWyίŸ…ψ{ΚW z ΗΗ|”χž) xϊ Ϊw ͺœz‘y‘Ί‘tW‘ϊ‘u§‘ Ί‘:’#*’&:‘%š’Š’,κ +ϊ’κ’2 ž1Z£J£8κš7Ί£ρ©£>Z™=€΅©˜ŠπD £Π€ δ`‘Iϊ€P₯R:₯TZ₯Vz₯Xš₯ZΊ₯\Ϊ₯^ϊ₯`¦b:¦dZ¦fz¦hš¦jΊ¦lΪ¦nϊ¦p§r:§tZ§vz§xš§zΊ§Jαΰ§Κ§ο(Jωΰ ή‚κŽ •ζ`¨ꀉ α ω`’t¨M©άΘ4ω VŽš©šœͺ@ Š©:ͺΆXͺ*੍ͺͺ¬šŒϊͺ¨ ²:«½8©ω ΦΖdp©ͺ«ΌΘ©?[Αͺ«J¬™h¬?ρϊΒΚ¬΅Θ«?‘ΧzJ€ΰ€©ΤꊜJβJ©1Hεχ­§H”€Š€ £P ͺ@+犠ȩPΰρ G`ο€ Π Αb―ιŠ ω€ͺ€wͺ€«ˆJ°ιJ©Θΐ Ήΐ ͺ―νp¨±ω0±Πΐ κ@Ÿ*°Šδ δΐ ‡ Θ0±Ρ@²%«‰~j¨ζκ « Ή 1{Šυκ§,λ ε€;Λ³δι0΄H›΄J»΄LΫ΄Nϋ΄P΅R;΅T[΅V{΅X›΅Z»΅\Ϋ΅^ϋ΅`Άb;Άd[Άf{Άh›Άj»ΆlΫΆnkŠ r;·Θ§ o;yσٟz»·|›Ÿy·“'žί7ΈαWΈ„{ΈΨǞ€;y˜}κωΈιΉζ‰eΉΈI9λpλP™»Ή¨Ήœ ΊŸλΉ’ΫΉ‘λΉ¦›Ί©[Ί [Ή‹{šihΉe›±‰š² y°«‹·Λ΄[»Ί»»—»3θΊ€+ΌΑ؝ΐϋwΖƒΔ{·Λ‹ŒΙ»xΟϋ‚ΝϋΆΣλŒΘ½7Ω»Ύ{ΌΪ+άΫ½Πϋ½‡w½ΥλΆζ›½δ‹wι»ΎεΎβ‹½ξkxν;ΏwΏβ{Ύm[Ώφ+xόΫΏΏΆ ΐχΏάw|ΐ{—ΐ œw άΐ‰Ώέ«Ώlϋΐ,”»Όΐμ»ΌΆΌΑS™ΑΏ+ΒμΫΑ΅ϋΑjΒ&ΜΒ"μΒ Γ,ΓLΓ lΓ ŒΓ¬ΓΜΓμΓύ Δφ+ΔσKΔξkΔλ‹Δδ«ΔίΛΔΪλΔΡ ΕΙ+ΕΐKΕ»kŷہ'ΈΕ\άΕ#¨Βi{€Ώ7Ζd\Ζf|ΖhœΖjLΖ`ŒΆξ‡ΈplΈrŒΈξgΒy'};ΉzœΗ||δgΗvGt;Θ„L|€|ȈœΘŠBΌΘŒάȎόȐΙ’<Ι”\Ι–|ɘœΙšΌΙœάɞόΙ Κ’<Κ€\Κ¦|Κ¨œΚͺΌΚ¬άΚόΚ°Λ²<ΛP!ω ,―4 !ω ,―4 !ω ,―4 !ω ,2x7Ι…8Π€Αƒ*4HΞ[>oήΒ-œ81\΄| €ΘΡ@8dω¬‹‘œΊŽAͺ©‘Κ…σ©Π@ΖbΙ“/†kfO…O+KζΤ©§Šš$β|“OΙ4šsg>>²ώπ!5©I¦ (±!–,šwI«‚TΒΦΫ#6ά„£ΪΡκ$w@ΛΗ—/9—(cή]θ&d™F‘BΆ±.H(nκACbε2hΠ;ΞW“TΈ;PHiκ±Y>dΌrρRΉ]ItUχ’†Ζ«+α2“IŽWDhΘPGΣ=T ΔΏήV«ΚεμέbnNšβ_ΐΥ³kίΞ½»χοΰΓ‹QOΎΌvsθΣ{O―Ύ»zφζΆΓ‡~>ϋμφι“Άo@Ξόσ `€/ H`GήW`‚ν!Θ z >a‚Q( …Έ†ζwήAΖǝ‚!ω ,(JH 7œA‚*\Θ°‘Γ‡ 4Θ©‹/"„Θ±£G3bάh€T―['C‘¬”ν£Λ— M’Ό₯²Λ„ΰ"έZuj+Ÿ²‘S³hǜ;{ώdt¨t‘zυTΚ–žiεŒj…ΈΙVΥUΆN1JκNV}L€PΫΑΒΦ· =|H‘BD˜U«šM•g t?`0`ΑmaΒ†#^|Έ±bnjW;—‹žMςM"D(OzdΙΒEΊ΄ιΣ¨S«^m:΄§P1gCΘ·«S,<ƒύ«·οίΐƒ Nό·žΧžB°ΐϋθ™SΎ Κ &Œ[ƌΫΞ½»χοΰΓ‹/flΨ£>ΥsΧ€(›»§ι²e{M[ψ} ΟΏΏνΒΤ"‹-²„ Α3ς΅$:ι Ž #α0Βhχί…3‘„ πήCκtHα1–Xb…ΈdβŠfWΜK,Ζx!Œ2Φ86ζθŽ:φΘc9ώdBc‘Fˆd’%.Ι$†N>ω_”RφGe•7ͺˆ₯’ZnΩd—^B f˜SŽI¦•fž™εGjΘf›ΰ] §œm©¦gβI¦žaςι₯Ÿ[Š₯ U*₯‘O"Κ€’I2j€£CB €€>Ύ ηŽ–^Κ₯:rd¦šΎͺ¦žΪΘ‘D,0Lv.†Κ*1@ΡB!‘²ΐlH…‘’—I#™ά:’B2υΩkΤ"L―ΙΎΦ™-«°ΔH:αΥY(‘ΰaΛ~šS Ά°… VP A%Υ*ΧξVάΊμΆkr±’ΧS՞Y`T0ΎϊNΰοΏ,πΐ<Ω\)Δ;om·ιX x0[VbSl1Ζ‡ULΨΕ…el€Η€\rΙrΡ•‚§Θ+”fυ†"‹ΜWIΧΝy"ΪΜ²΄άάs}­,Wα|³4›€‹-s/tPΧIFΓ„NN‘@ u{΄%8‚fƒNΥZ‘sΞ3h§MΨcΓ‡9pwΫd—ΞΨΰ“χ; !ω ,)N@ 4fL Αƒ0φΛ±†J¨«^2]Ώˆ ›¨‘|πta$Θ‘1]―ςY)'’dΔ’Ηˆ₯Τ@&ά/ŒKD™OΝmΎpnΤ)ӞŠ£^Κωr"Ο£GΙΥυ°i˜)y¨ΠΚ Ή›‡Jδ飬;Θ| V"Φ|?~(±aCΧ₯Η¦T2—― %HΠ|»XΠͺ·G$>-ŸcΗΗH*δ™xQ #˜x)R”)–…zσAqΣΪ+ιb½)Μ°ΐ˜±ςΥάδνUK«r䉬Υ&^ͺF³Τu¬δ―”Θ8ιRUŽŒ•mΌr$¨k›*Œž‘ρͺ+―DκT3κς½I91Χ72Τx2–g—:_ͺ'½ΞϋψσλίΟΏΏ(ΰ€hΰ&¨ €ζ4θ`>Θίƒξα…ζδ‡a…ψmxα}ΐaIbHb‰#J„’‰*(a‹.68QŒ/&D£Œ0ΊΘQŒ:έΈ£Ž'Ψ#=Δ"„8!ω ,―4 !ω ,(JH €3 Ap (\Θ°‘Γ‡#2X°’ΐ„ ¬X‘qγ‘lμ$ŠI’aǎA.€iŽ —.W@W²¦M†,aΎ$“¦uζPJT&8s7“Ž*”θP£HΝu…Šί ”SΚbΠͺTΐ‚u* $π` C oγ+·.έ»vσβ₯P#A‚'ž’5 ΅i~=tθΚΨ‘Ύ~ :֝ΒΒC%G‰ΒΆ±g…ΏΤΩ,™2CsζŒs˜1lαφΉ±h-`ΤX "›;€κ(P€‚π"B;V›k±b(>Ό€QΒHoiΗπ!T(…Μ›;ekU( ΄+TwΩ\={ι 0°άΨsρJ‹³o@‚sν°iΦΧa0˜–Πͺ›mf‚ˆ•ζ*V6ͺ¦ΆΪ°gˆπŒβhΕα7rΖ°«ΙdΩOΗg-Ηzh:ΥZ[ΐX ew‹Ϊi7€šcN6εήΒξΈ?΅W9ΰ΄ΣN=ϊ€­{πΤ£Ž9ρ°#πB!ω ,―4 !ω ,―4 !ω ,―4 !ω ,(ΜL ˜H° ƒ*\Θ°‘C…#š{H±’Ε‹3jάΨPbDŽ z4²€Ι“(5Ž$˜δʁ-cʜΉρ%LšmNΔΙ³'O@ƒ ΊΣηΙlH“"NQ‹J•2uJ΄ͺU’OO±bkWG²΅ΛJΡ«Y°b^]ΛΦ#Ω’Ν‘;wNX§oΖ­[χΪΆ€ΩζY`•ΓˆWdΓ;XaaΔ‰ Lkc©ΐ8Α9kδ€z΄ι¨I«>½:υι76Ÿˆ¬²mΛ—1>>‘o ,x œψπβȏ+7Ξ2wΖέΎaΐψ !@ζџOΟ~½{υπΫΗίώ ΐΈž-»vξz‡ΩQœ€ Zha‚-Ώc 1 BHŒ„Fhα„Vˆα†Bh_Dn' GΜ1 5ΐΖ"Τ"Μ/Ώ3£5ή¨cŽ<βθγŽ?φ¨γuάΧ’ŠŠ-Tβm'ntΐ@”ˆ`K1Xf©ε–\vιε—[>ω䔐$‰KRΦ€FΩά2MθJ(Ύψ2 ˜xζ©g–‘ΨbKθqΛ3Ω€£dšj™Q:ί¬ρ ΓDj̞”VΊ₯1Γό²ˆ€σNGˆ¦¨Fίπρ¨0“Zͺͺ₯3Š!"κ0†f¨‚z‘:>šκͺΌκ9££°Κš­€ΩŠQ9¦λ²zώβj° »–±ε ΘΜf»₯¦@ː΄΅RK²jkξΆΟΖ-ΈU‰[‘΅Ψž›-·ήΚn»ξ>D²ςžλμ«κ~{/Ύω6oΏζ°½ U°Cϋ"œpΊΒ"Τ0n+t°ΔΜ*\ρA•1Csά1Ελ†lΣΘ ml2―§¬ςJ,+TςΛ0£,πΜ+׌Λ8[σΞ<ΣμσA7-΄Ξ νΦΡ­τžC7ντGP'=5ΥLΟz5ΦGK½5žU{ύ5KY';v₯ΦkφΩEω,φΪ^–=,ά`ϋ¬5έ_Ά½πΫgC΅£Χς§έγMΡ{Ξ₯ί·ΰs;ž%β +Ž6γj[ήwΧwkwΝ•{ŽΉδ§]ΔΖόbŒ.ΖL/Ω '.:ε„Ον/ΊΤ“Œ.λή7°‡Ήΰgϋΰ+ω”£‹. ί%δ2Ouι½ΞΘΌΞ;ΥΔG.ϊMœ―ήολΜ«ΐ=1ΐ#L³΅g~ϋυΉ#|Œ.ιk@Ζ6ΟxψΥK]ωψΥ―cγφPΙπ φEvίψp§+‰α/ \ΰ7žΧΊοΥ €DSς:Wΐζƒ*@‘ ΠPΊξs ΰΧ(XΈ~ γ‚>ΘαlΠφΟ}μVρlw<ΥP^dή~ 0ΡnΨ μ„G½⍆Λή•ΠD.Ϊ@ 8pC9~‡ͺιΠjΦ Δ’˜# ΑG€F>昏zCv‹κfHΏ Ϊπ‚n\D Ž€ ^(B™hEτfwΊρŽeΙΛΦ‘ΰ†s@ V0@,bρl+"Α>Rψ"‹[k©J?ΐ•°€£€|X\†„α u@Α•<χI ’H>κˆpJΛ|D‚•`:΅€! α‰C‡nΞ©†18γ/ˆα¬hM«ZΧΚΦΆΊU­°AxψS›žyG'{ͺ\}ƒ€ ``€ ¬`KΨΒφ°ƒ•_΅ΊΥώΰ΄IvλaΔ#ςXΒˆΐ¬f3ΛΩΝzΆ³ ύ¬hCkρ$ˆ?“œ’ ²Έ‚e† ZΒ¦ρoi”γΆΈΝ­nwΛΫήϊφΆίx cωγΑ±,EcHξ’{„gόφΉΠnn‰”άꎁ«Ζ­Ω“ΚΔ]3IζDΫνwΩ‘]–΅ιΌ·h“;r"τ¦7½…*oΝbυŽϊΎCθ(ξ‰œv¨γS !ω ,ˆ,vHΝ HМƒ*\Ȑ!8pΩ"JŒΨaΑ‹ 3jlψpβĊ n9ά+P¦LΙNέΑIΚδxrεJ-aœΙ3aΆsζ *HΠvuμΩσ'Q’F‘*]ΚtfΆ#T²jSΐεK₯Uy^ΥΊ΅«©hΣ*ύ©Ζ‰7 Θ1°FŽœΊwνβέ«·oήΏ|ϋΕϋΕΫ·YΉΊTΛΈ±9ΆT΄4@€ Ζω.Ό­k@½ξ‚λ*ΎιΛ―½ώ" π@άδ½ ”°Β42άπΓcZπ― ›CqΕ0J|πΖ»θ1ΐ ‡\ΜΘψ–2ΚπͺΜ1ΛιΊ\1ΜβΚ 1ΝΩΪό€1Ώ£‹1ΖτΉCKςΆ»Zκs=ΙθσΠύ>ϊοΔHΣΛ(ΟΊΤSŽ.Ίˆu£EcϋqΥΜ*­Λ+ωX±΅Σ@G},ΖTΛΛ-»ŒC ڐρ 1N# ΑRχΌe3*ΜΩω¨χ6\? vΰp-wŒήm ˜λΝ·Χ ‡1ΒdSk)β˜gώ Χ<·=#ΞΡκά€έhσ ‚μ* QΞζ=Gμωη‡^ξθhϋ ό6τ wγ~―ΎϋηΧ{>?ό „ ΫΰΖι?ύ"λΙ6_#βJLΎ JΰΰF9M«h1δF§Όm1V/ϊόHΠ4ωδŸO=Η­ύΙΛΛž p ψŽQˆ£ί"qLπBŠΘD+Όφ?ξ™ ?ή£β ΰ†s@ V0@,bΑ5bm}ok_Λ|G7ω#ω C86α;@A›ϋ›ξΨ'Ά£M.~‹ϊڐъMπBάη”ΗCήυξ‡τ“1ξ–dpBͺ(¬° ^8މ)μ‘ϋ (ΊE©HΫhΧHˆ ^ #_DaΈΘΒ}…κ\λZ1tQΔM¨1y; £3(# M±m|aΧrΘ9nnvτ–κώ·½‹}#Ω°ΔΎ _ΤbE- Yxjα Dlr£ΈL‚’xΰ•"ΠBΙ1_˜ –ψ@,S’UfΛ)sC ΒAP U&ƒQ-ŽP‡:3 B‘€:ΠρΉ±Pα?Ϋu~g²Ρ§>Qΰ :ΤQΝd%:ΪΉΑΤ€1ΈσπŒ§<ηIΟzŠα 8:νcΩ–rf% ·©L²€‚τ M¨BΚΠ` ¬ΑΝt“1ΘDα›Ί±"4Κэz΄£ ύ¨HCJ‘"B&€t’0Q_F 2| ΎAŽr”£¦7΅)NwͺӞζτ§<ͺOkzŽiˆ€₯g( EƟώ8•C ±©T§JΥͺZυͺX-Η9žq§>υ(. ‹UV0’²’hNaλHΠ!"³’H*`QkIΐ!€[Τ5"ΰˆ\LδZ’lάυz_I’w΄#P8Θα•—ψh°2AG; ϋŽw¨) !ω ,Ά,ZHΝ HМƒ d—­‘CpΰJœH±βΑ‚).tψ0’Œ’[±DI’ Žd³Θ²εE%Žη¬Xι²θĜ'’γι¨Ο‘8aNTW`•«X‡z4Κ©Ξ„T­b½ͺυ£WŒU―j9ΑE˜5δΐ•wέΊxικ΅+Gnί5ϋ=p[-WAd{gφ,Α΄T ˜όΧΛˆ΅θ­μW € 0‰G~΄A’5κ ‚%UΜ~Έ ΒP ˆ κΨYΒBΧ T81t8ϋm( ψ σ?€ 2―9源5,K HL’—ˆD5?Π‘‚~ԚΙPΖ2ρZ€·ΘΕ.nq4V„bD€Β³@‡°ρ€ ` D΄ρnŒ#η(Η:ρŽv¬ltυ2ˆ‘žρ q|ƒβ(9  HF.²‘|€$YEV’—Μ€%ωԁ 0Δ Χχ™r +xFΌ*ΙΚVΊ•Δ)A4ŜLG<Κ%TΠuŠ˜(—Ί\:Ό’”lά˜Ζh⇡τΑΟd(š…“8›HˆΎ 3"‰%šXLˆ²4"Ο€c€: ]hΞ7œ, Ε0Γ³#=>Έž0‰,P8θτta9MJ1%•$ϊΨ –Z’ΣGL:9&™ šY še¨ιeDθ”³ΙSΐI₯œhJ’ ±¦Ÿ<še„B$Qž‡"Z₯‰tΪYhEmŠ)iœf:θAκζ¦<)šf£Ib曀bdjk> ζ¨­ždͺ ¨ΒQ¦¬ΦκΠ«δδϊW¨³jκkFΐΖ*―Η"Ϋi–Έ‚J¨Ζ6ϋ°ΒH³Φ^ϋlšΚ»j·ήϊθiΆ†J.CΨJ;΅½k@²ξΔ­Ό ~ν₯xοΊνς»λΈψζkξ’–:Ϊ/Α#tλ§toΓσ~Λh½πRμ°Ε §Ί,Γ?Œ¬ oόΰΌσ‹1Ί¬§žFrώ‚πΘ«›œ)λRO2Ί¬ό―Α”"ξ΄ώ.$gƒ ©¬s9ΊθBΜΚΞ n½K–\ρΡ ±όJ>V0έ³ΛΡρ»E³BΗ³΅d|CLΟΔ6ΗCokυΡ''$Œ.[«ΐφ6Mϋ\nΠSmNΖFγtBjΫ£ΒγmΏύτΏb+<°Ν&+^ B|ησ8δί4­2Ψf;Xiέ‡—}³ζ”φΦ<¨» h”#9Τ‰K +ΥgωAϋ ό6τΠvΰqηNψξ†#Ύ:λHΏžΟ?(aCυ6ΈzΛ¬VξρεΥ>½+a½ω6(ƒεπά^ιg ±κΎ.ύHΰ4ωτŸO=RzYύβW8ΛIΜjWƒ^1:‡ΏEβ˜ΰ…"‘‰VLnLήΣΡ¨@”u n84`sΔ"M#†8'ωj˜K β’ΆXδƒ αΨ„7ξUHNnμ’Ϋό88ΎƒόbkΘhΕ&x‘ 2mrAΤ]Η4h·*psκQ[>Α ]¨’d°Β6x!8ε=θtC΄b Π]l£MC!2x1ŒX”~-,ΰχCΚ°uωEӜF>%nŽΙ‹βς¦8¬ ͺρdgSΟzˆα²·ΠiΈ3£ι\hΐ*†ΟUXΔβEΐ― ~ΔyΓ©ΎŸ5K•œΤAV|ΰ‚€03 @"Έ₯HV ŸΜ 5ΈΖ [[f2wp“Lš„β JnnΤβΒ§8ΓIΞqš³œθ<§:Σω ξŒ5€ARώ#KsŒη4¦1Aΐά…~ϊσŸ ¨@JΠΰ7hΐwθΙ‘ΰœf0‡‘ c*@Q‰N΄’½¨F-Κьv£ΨLπ†+ ύ ˆƒ(xš°DLg*Ӛτ¦6Ν)NwͺSKά¦₯-=ι;Iΐ¬4 Zˆ‚¦!o8υ©PͺT§JΥͺBΥ(HΒ^p’“lξe/ (ΎRϊΥ“ϊε#:ΐ€ @!“ŒυQiZ+a(CxuQ6Ί$―Šά5―zeΗCdD؜δδE;Ha ϋΔ2Dκ@‡dωšΨ…@v²θˆlB!ω ,―4 !ω ,―4 !ω ,Ο.KH ˜3ƒ(PA:„#JœH±"ā!*dθP Ήl+Ξ9η<‹(SͺτR$I“ΆΤrp̘’+sκDXά35 hΉy@]̏+¨(5pβč˜‰:U*Υ«V³V݊•«VͺitAΑ΄©9Œ²LJEKƒ j@Eh‘ΔΊwνΥ{οήΌy-Xθΰ!α'¨ U+“­`€™»³2JD†τ|€a‚QΠ"l¬Τ3θΙΏ,«¦ψλ—¬Q΄˜Φ²ψ(Θ₯Ÿ΅€)P¬·οίΐƒ NΈ-²M‡NkϋHD(T8LΨκλ‹«…βΉt Π)¨S7π#ΈlΟ aθ"Λ–-μπ τφεΛ½ _¦eΛ6ΈσΩX’Α²ΠgL|ΧiGΜ0τ!2ΰ4η=$@κ°£Ž%pρ‹0"ΈZ1cΜ0Γς@ί¨5ZyfψΛ1ΖgŒv&’8Qyζ`¨!Œ1&θ[ίH„cŽ.ςΨ£jΏycy:Ύxδ‡?ždDC6iδ“;%)ε’Y‰₯eZΪH%Ž^~™e”bŽΩe‘fžΩ›’jΉc›:…9eœe©’B’Ι¦ž{’yηELώ (J|ΖIδœ‡"*(—‹:Ω¨E‰Z(£“RT©₯‘^™iD›u©€ŸJͺ¨–:Ρ©Uͺjvφ)'©―ΔͺŸ˜Φ*_¬xΊZλ­£zϊκ©Ν*¬ͺΐ εoςωψζ–²¦Š€pΞ'§VVά²ΦBΫkun &―+;­Έnv›&§y¦KœΆδ’š-DΖόbŒ."†hjq½₯{-»Ύto=Ιθbo‡ρΛμJΙΞ+π/ΊΤSŽ.ΊcoΒ ϋ–±Έ*°.―δcΕΔη kΖ ϊμΊςΆ{Π1Δ„¬ίc01ΦνŠrΚ)qlnDΒ€œ 3oCρΑΆξΜ3₯ρ«¬D1Ϋ£ΒΤ4ΫlρŒJ7λθΚƒ–λπABOMυ7Χ+’KkΪt«ΰsΘ<¨· h”c΅½(k½΅Ί]£κ2Ψ!ϋ ψ6τ@σΡ£pΈ\GϋυΫωόπƒ6Lnƒdγ‹5Ώ7ντί­ε£Ϋ n”S0‡‹3ΌvΗΒB~³M>ΈηSΟ13n>\ηG ΊΠ³/Θ˜π’ˆ"™΄rυŒ:Η8ߎ2nœ V˜K,£]ΏΏO½πΓK>d„³‰7w@‘ŠΥ9―šrΪ{Ϋrΐό22­Ψ/T½‰]­G>{½b–dpBͺ(¬° ^ -F‘ΒΘβˆΰƒ FuΔ!]l£2x1ŒX\0>σIBt>ΰ.„1H‰p0Τα#DΔΒΊn…8σoކ1€‡#9@:˜1膇cψ‘06ΔŜ₯&5ΈxΕ+pρΕ-š±‹h<£»˜Έ_ΤΒV|β ΞP’tΨ†-œAΜStΕ.tΑ'@€ A#š;*…&‚”‹*`ƒ0‘\d$ŸΔHΒs|ω”ιΧO|Ώ`ύϋν՟t`^(—²• ‚_1Ψΰq@˜qςW‘…a˜‘€rX ‡"’ˆ ’X’ƒ'’‘Š+Rθβ\Ζ˜Οƒ3†TcŒ8ζψю+φθγB@–(δ ωα‘H £Π΅Ψ€ŽOBY“S2W₯•7J™%CJfˆε—Υmiε˜_†9!šYͺΩ ›SΊy œMΚ H8–x©'”}ϊψ'Ÿ^’™€™€j¨“lνΙ£’‹4裑ώΈ₯£ABZ©@“fΊ)‘—&ϊ©B’EНšnZκ’©VΊͺ˜­Fϊꚱ.:λ›΅z뜹’ `\–Υ—€Kl£PƒgR@°dΉ5‡X7䬦ͺ…@gˆUΟ·ΰ†+ξΈδ–kΈΣqΖ0T;:Ώ%Λ§iΤkο½ψζ«οΎόήk€œ`PΌΙ”'ŒπΒ C”pDCμpΔWLqΔ ‘ŽΖZA–²#—,ςΙ$£lrΚ,―\ΠΆ‘γM>ήxN€quεŸ8ί€3AαD“ΡΨLΑ+χ…ƒL>VSτΖL'­ Σω¨υΤG[m‘iX« αΤάq–Ž9–­ΰ(N3φ¨ ·ΰp]΅ˆζ £7:kϋΡΧ·AaΛ­Ωv{}υΣ<π ‚βdHmτέ†Oχv><ψ`ω>4^xδμaύƒ6|:οLΝΉ|X+‘Ί ͺ‘ΰ}Ίy“„νG@s9δΜΦΆ/Θ˜ “Ι(€ sΆο’? …υ@ƒ„ο Σ 4Λ3ΏΦd“ΞPR4ο «½r“#ΓK.Ό¨ςΌ=6Ÿ―]8Ί« /ιaύ7Λ?Τδ@F4θ‡ υE{ώϋ_ΩΌΑ;o΄OΉ` ωœή DcΠ@)ˆ rp9!ω ,Šo 0G° ΐƒ  g \8r&$η-Ÿ7oα F”.Z>sjδˆ,ŸrΡ0’SgaΈ’*N^TΨςΰΛ|*4ι¨’εΖ†Νμ©Paΐ Ho4[ή:tgΚ‡>Ν5,Ιƒ‡ «d(ͺΤY>>Βώπ‘υιJ©7(±ρCΰ4οžΌ©€ΊlΈ ·Υ\Χ|G<-ŸaΓδ ϊ-xQ #˜eE ™Θ©ω Έ© ‰•wΘ Ac(uqΎ€Β݁B*δΟΏΘxε2 Js;€δΠΩ,―vd¬„ύ₯^ ‘!Cf ρ gRδ₯JU.oΉ%’;ΈP4v‰ΰ&!ω ,‡pώΙ…hΐ€Ήƒ*4@Ξ[>oΒ4·paΈhωΜy‹6PŠ‘ε³B.š·Ž+†C–Oɍ()Zd©B™‹ΙyόXpeK*Ό€σv’\Κ„>ͺ0pΣ$Ý2Γ‰δ‘"ΗR2%‹ξμΙς‡―±šŒiΞη%6 Ψ8‹&«D„Rσ‘U’πHΫ’}A²χˆΘ|ω ’3zP/’@” (B6ͺ’*dσ²„β&΄#Vή!ƒ-2\–7I…»EΥΨ£!σ!γ•‹—*ΚνNN„+r54^κΘX‘ϊV&Γhδx„†lu΄Ξ¨lΐ΅ͺ\ήΘ‘CΝ° 9Δ£SYέ Ο‚!ω ,]Z:0 7œA‚*\Θ°‘Γ‡ Α‘šHq"Bˆ3j$ΥλVΗP+eΣH²dΔH·VZŊε£lδΤ™œ™]€^§±Τω’͟m¦\%θM€U=e]š0έM–o(¬8Υ“©UNSžͺC‘λΛpJ―ώtΪ‹θͺT(€θuN]X±&>¨Ž J@€0`ξΨl€ߊΆΧ/Ptι Έ#ηΞΐ[Ð#KžLΉ²ε˘3kήΜΉ³ηΟ 1šM:4C₯M+,Ί―κΦ­9“ 7›6_Ψ¨7“σ–Ο›·p·q§Ζ.Z>Ύi ~9²|VΘEσf ζςΡ”s |η<Ÿ2Ε[Ώž½ΔJωT|—œάuμ‘A¨X±ͺW*{*ς{7ΆΊε“=²‚T§D’^~*±›xδEvΤ€Θƒ 9¨ΐƒ‚ύ[d6αΤΥΰΨΠƒ$Ϊ  7Ρψ‡[dμ ΔΚ)o€ΟJό`ΓJΨ€Ζ‚α¬ΘαM§δτF>Jΰ Δ‘6ι{Κ1™PD…bΰHPy„@ωd™9ξ9i˜\t "Θr)νVŠyQ $˜rU₯ ΩΐΖΘςAqcΪ+ξ5ƒ6άΦ„αR“ G*ά(€’ΐlξv׌Θxεβ₯ju;ΐ\‘"ηW:2VΒΡ~:<9^‘!$3ΐKψΔθΓΓE$·‘Ήͺ\Γo\Θ^‘@hΠ„siΏΎG› !ω ,―4 !ω ,―4 !ω ,―4 !ω ,yt „3 œ9s*$ΨY>ήΒ\Hя|ζ’E$§aE= δ³ςNc8Ž+ͺΘ§Β 9oсsχ1\.–Θ„S5Š”OpΓ94 Β€•lΘBυ2mbΒpΠX5@&Ϋ©S²θψΤ!9ˆ’‰Φ+PΆp\ ΝχΓG6¨f‹-9t‘²ύ‘$aŽͺ&U’$ξ‘G” q·1―Γ#H"¦/Ÿ={ΘDΈς’@G0₯Ίγ†²“ŽσAqSΪ+ΰzAΣξξΑ΅:IΈEU΄h›rŽŠŒW.ͺV·‹θT-q^ΠΆ’±Υ@σΜΡ πŠ YρhΠ$¦ΜΞ›7Νήx©R•λ<ήρ™­“ο~ώϊΗψφ !ω ,xt  g€œ:"δ‘Ο›pζJμa Ÿ9oήΒ‘3Q’@ω¬„‹–Ρ`G…αrεΣ@fδCpήI ‡,Ÿ –ήTU"ερaM­€λΥKΰ#˜iΪDHζYQ„6ΛΗCE<¬d{ΔJ‘p•ϊ θΓ@2Ωz=Ί£Ο|?”ΨˆkΓ@ΣJΩ4 7U‰BJάdƒ¦1’#H–ο«Ύx0 ΧDΌ(LΉήΈΙΣ«π[(nκA;%]/d$Α™TΪ’TΈ;PT₯‡.)cdΌrρRΊ]Ζ“oσ‚ΖK‘„“‹Fu8hΘ πŠ–^qΉυ–#N{:rΓΧΓC4,²ψΉΖΟ‚?Ο^aωφΆoOΏΎΒωφσΣ/žFΏόρύ'ΰ€([q&¨ΰ‚ 6θ`~>(α„Vhα… Eˆα†vθα‡Λiβˆ$–hβ‰ ‰ˆβŠ,Άθβƒ*Ύ(γŒ4Φ"6ζ¨γŽ<ξc@)€?iδ‘Ec@6K6 Ž’H^Wδ+¬@e•GdΓN”φQΙ‚€ ζ  Γ%}κ0lΆI&8ψ‰XŒζ¨©cŒΑ€oΚΙ^sδY@ZŒ‚ξΔιηn€²y€ hq¨;‹κF§šlRi“*Z©jζ0ΗjΦ©©ΘΓΤ§Λ©sΐ« z€¦τBŽ™¬šE§·πΪ+―P8 A.ιδ\D8Υ£ŽρΌ“Β¦±α©ƒ;αa€ͺΰJ­SE΄,9Ϊ: Š§ίΚfŽ8@ 8ο<ΉlΊΗή‘ΒdΈq‡Ύΰ 3/½ …{Ÿ:dhΒ‘€β8κό "kΏAœtP—BΌAΏN±%Bόάr[ŒnAοΙpΌ°Γ7'Ζ9υΤ³\Ν5—fςΙΉ£ςΚ[―‰¬U †Pύ‡t ,`ςCξPBJ$+k°BοΐμαDΈX0AXq5Ψ‘m€Ωhc5ΆΪe³}vΨX=π@#„UΧ8δ½HΖ9p‡8Zs8Ρ7ΈXbΈ&ΐWAˆΤψ@ΟΕψδŽ dΈ%­SΞΕ½γN6 ƒ^‰°K’Kί|SNκΑ}c@κ°«.Na©ΓŽ™θ΄)ΰ9#žd7b† ?όEΈ«;·~hΌrΟ“ΔŽ*@F8Ο΄œπ)±ΓN.- ΒΖgΩΞ„Ρ3Κ½JζδBA ·|9κ+0iaE#…—ΡjΤϊu(Tύ0² ς0+j *Τ―€²9 αΌ0 Ξn.ϊFU·4 Π«gDΈΧ^υ‚ΣM·ΰ^sμ)R1Τ@ΑpΐΌG”Χ ΤΠK$‚Μ!=ςΙC„8Ω4Σ#u0GΥCTφ‚θ”M ‚t~DΩ¬PΗ-xΡM*s@Ξϊe“Γϋ*¨E6‘ @8ξ‡?†΄―|ύS²1–P!ΰΘΑ#²‘@X!ήπΖ)'Ίε ‚ύˁ#€A>π α@†=rΠƒΆ δˆF 9XΉp@#?ψl C 1Α‹\πBkŒG4˜Ζ #ƒlΘH!ƐΌX$4AΘhΘρ‰ρ\ΑoRΉπ†p@JΗs›T%+²ΕkQi– QέA!ω ,gaxZ Ό3@° Αƒ*\Θ°‘Γ‡!’1`.’Ε‹3jl¨€JπΤmI²€I XA–βΙ—0cRT‡© "w.eκάy:h αΕN$Ο£Hš«ΈIΚ<8“JŠNέ»hnώΘΥrͺΧ£UΥ©*x‡βΧ³:«†»“R…ͺœhγ–4—.]. ‰&·oItιΘB©a“;t~c4χ.2(½@‡X±εˆζi0 ΣΛ B³B 2r•C«F¨ξ“Ν[MΫ`έhh*αΆouκH9Η›Qίͺ}z+k ΗΨγΘ/›σy7ή’Σ&.O[Γ©΅+Χ‘Όd A?žœ"؝ „gοχέ;d€˜N7Ÿ~\tKa²™Š„γίxˆEΠPλˆ–:Σ‘ςšPΑε ZζΐγMVψ jφ΅”*<δu‡7ι„Χtμtη‘ €€¨βŠοδ‚D^{58cR) H~Ά£T=–—Π,₯€…CΖTQ€HΙ`SRŽŒMξdΞh€p^$€DrΗ•Yς΄”:£ΨΒf‘DβpejI8yA ς8κτ'IJVH$€p§ήPφ§“KΉ3h›vζΰΦ’Œšγ%odϊG8p]4}Rϊ8βˆΞ3ΰdC'J*Œ"ލ/½Σ8΄Ϊ‡ΜΦ₯«Nšγή€žM·+Lθؚί~ΓΚdNk¨c² Φ!Α ΄0))άSbkgζΕƒ*νTε- °£ΚžbαΉ$±OwΑ"Ό$½czИ‹οHξ₯€HΟώλPEχAaέJXά€rv“Γm9‘~ΧR|Ρ’›LΈH8 k|°:ρ„ € Ήδ§Θ ™£ΚpwtΛrDκ¬U―*+ό]vΉ€cv:CX žφNΞA€/dH¦h υͺgΑBΝpψεešΥ …UΙ„²1Ι5A촃›u»­PXΫRθMސ1J8ˆgcωε‹Ο\:α “’VX± P€ι¬ šΣy>*€~TΤn»κ™kώ:gdx³B 7h1ΖTh{CcΟA‹0@s0ΩΈƒόξ rησTtEž—XbDσȝ΅So=ΤΠδγƒ<δωoP0Ηκ[LA6όΠdΘF$(PκεΞjηŠ Žΐϊε a_Ap„Δυ8ΘQ°™-"G¨I&FΡ7„ΤΓ4@3J˜²";α Ž"$d6ΜaBςvΐ‚ΓWi_ tHŠμΝ,D€ˆΨ!ω ,―4 !ω ,ba‚\ )ήΐƒ*\Θ°‘Γ‡#JlhΔ€oκ&jάΘ±£Ηˆ8PA*Ή(Sͺ\y+Ϋ-yr°θνδΚ›8s*„Χ.^;pδΘr`€$9t:“*Νωξ―#ΙD3`s©Υ«Ρ±3 ˆ¨RG±ŠλπdP’B«JΆm[sζΘ)`@Γ'qέκ«ξZV εέKΨ*:s˜θjΐ”iαΗ:α"³€dιCތ2]:v‰λ*z—³ιž‘Y! σιΧ?ip A‘»°s?Dη9™ΚPx©s¬»8Csθ6Νv (œfγΠͺ‹η›θαl£CwLJ…œgΧnœœ773•πOή8;U*8Θ#Ύ}ttθΞύ‘Λ€}ςͺπ0S±χŸiκ¨γΝDυ J;θΠΆn¬Θ_6ΩΔγM4΄ΣήΊλ‹š#―ζΞ p€ΜΌ/ϊγ‚ΐΧ ΟD2ΖρΚ{ͺBωh`E65BςQa7䣂dtΙ 'ο9:Τ‘ ψί#FΧ›χß Θp;o„ƒ撚ηΜQ?{¨€‰ ^x£VdψN4μV€Ϊc-ΘO4QVK‚•ͺφ`xΐJd¨"ΉG=ΪκΡ°²Υƒ5G4 !XΒRU!‡μc'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛΪΦΊφ΅°­lgKΫΪΪφΆΈΝ­nwΛ[²¬γ·ΐ ne§i€i—!!ω ,c`„„ θn Αƒ*\Θ°‘Γ‡#JœH±’Ε‹Ϊ3—±£Η P¨”Ί(Sͺ\x‹Œ€Θq\I³fΖwρβ½»ΐ¦tθl *Q:sy*zg`&Ρ§PUΤ3Ο»“Q³F}gΣΛ;ιΜ9ΥJΆ&:v£^’WΆ­ΝtιTi0`%œΫ»*9ζš Ε› xwΛKƒƒ#ΡЍΜx’9uΘTψ­±e‹θ ρ0 ™βΛ !š‹†„3/rXC«N(Φr‰ΌΊφ@sή¬ΐ&e»χΐ ζΘτάτŽΆοՊέpπΣψρΠFστ\Ίψωε©Uγ₯ΆΪά;―ΐr―mn“ZpΞΗ3φκ₯pbΥƒV·Χ@ί°ςA>]ώλ‘MM|1–Ωf5UΰzΡ(€ ΌT·`YgΉ[.ψMˆ—9α要*jθ–:αη@Lι‰˜UPnΐά9Ϋ©¨;μHgu2Ά₯Ξ;T‡vζ8S^VB…NZΈΞQIjΧKd„ƒd”6Υ…•XjUˆ±se—)A¦”ΕH¦Y cΓƒΘdΈζ[@γ „jΞ™:Ζ&§ž4αζ!ˆ!š:θ”θ"ŠcŠ:δ΄hΐ'βκ(JθΨ¨H<^ŠQ /-Ri§žN„x`₯XͺG•Έ%Š@I₯«vΔ<€δ ‘Ιθ‘ZλBˆΎ‚+D‰ΰ5lFιΌ:ΌΟΟRτN ‘<‘#?ξύσ­VίτVΣΈΉΞV’5; {stφ‘c:κ쌏9’Q0΅Βξλ™μΞԍmOƒΖ^BΆΑμv€ς]Ϊ4! ξ‚rsΫ βq³ :Py`)ξ†AϊMo£‡ ³fΓπΰœͺ—3Ldγ†8Όa eH&Έδ!f(ΐ„(ΔdCq½S‡"PƒPα‰O4βyΨ₯r”ƒ‰ 8Α΄0†1ˆΰίγθ ΰs`ΐ<0mΈΡΫXjPƒ€ @ : τ±`[ζX0Μ1 π@.ΰΗ?€l;@q‹7P sΑ4ΔqŽutr€€Ω ˆGάβ€ %²‘ƒ„’m+Ι;  KζωΘ₯.@*F)ΠΘ‡dΐα sΨΓΊΜεβΨLh€ δπ9ځLe.³™*P|GŽxΤc—~c¦0³©hJσ˜ΦΜ`0y ]ρΐœΣDζ5σατΐψ„§7·ΞΚό@ 6ψA@•€†h’ΓΧ4€z„…Ϊ@ N²ψΙ6fΰH@F+cxLTEΒ"qL c£PΕ€>ZΡΚ@Α φ€¬πdD£˜ν§Θΰ U„γPP…7ΡYΉΰ/TρR{„ƒš˜‹G4ΪΔ oΔ‰ u‰Ζ11gω!ΓJΡ@2ͺκ ¨.Ξμ°5Ɂ Uδ"α¨GNύ†ΠcΪC£F\ηš=»Κ!!ω ,―4 !ω ,cbƒ§ 4Π άΐƒ*\Θ°‘Γ‡#Jdx``―t3jάΘ±γΔTπ2η±€Ι“(’„Š #I¦œI³ζB’α¬ΌΜ…Ρ¦ΟŸ3ΝεάIΞ: H“jTŽ ͺ ¨SJ΅jCsδœBj΅«WXΡp ΚœΜ―h‘Nu3–ΤΡ³iγω@žϊŠ3Ρ€Ο½€Γ«κb~~Nt¬ΜZyΤ·κ†ΙΓͺΟ,μi€Fϋ潦›lh—ž-nΊ-βyν9cq»oŽX&έ5·7δοΌSΧ59b›φέλ°ΗΣπyhσ.;#ΛΌω#ί ~Ξ);`’Ϊ/ώ2.|³5kθώώΝΊP†\’9ΘM%hΑYŸ p4$x£~s4ΐ‘  !I˜'α ΓB/²AB D^CŒΦ(@ΐ…‘ ι8x(hΨΰ7 ‚uh€d‚D+G5ΐ€hac BŽ0o”γίX\n€Γ: Q(Α4ΆΑΕm,ξ5¨AE(€x °@ωfб"eμ@Τ¨Ζ Όνλ8ΐζ0Ζ1œAΣΗ:πˆΗΤ#jD"ωΈΗ€Γωˆδβ@@Pΐ” 8")IήιC’œ %B5{¨#qφ°‡B)J»Ωƒ#G; ΙJN„Qk‡7ΐςΐTΦ–d‹G4 `sxC–΄όeα ρ’υ2™΅Δ%ΣΤΑLhΐ™Θόe>ΌjΛ ΰ8f<κ‘Liϊ¬›!!– βsΜT"$0gΞΠΙ¨ΐžμΜf(γΙύ4tϊΰŸ>ψςιK`φ“™?P‚ ΊP4S–$εA  „ŠΪ ’GPΒyδΛ`2σHι ΑΚx¨r›^£¦@Ίˆ@ΘΨΔ(Tq€Ž¦”™Ppƒ= +ΌΡxf'aΗL2xCαΈTαpΔ£•άd&4rΑ ^¨"§φG;V‰R²Ωc˜Θΰ…7‘2(ξδ›=„ŒόDaυ†7fΉ8{ #?γ$2T‘‹\„£ͺT«R X{˜#Πψk`Ν'TΪ°Œ¬d'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛZΥ㗍’G!ω ,eb€§ t‡N Αƒ*\Θ°‘Γ‡#JL™Ή‰3jάΘb uI²€IƒοΌ)1 Y:u'cʜ©Π\΄•-iκάi:oHXΊ4p‘§Ρ£½J©Σ§ • -΅*TvRsZ݊τηRΌΤQεJv&V(,Γ–];Σ`ΝeK·£9·4Xœ[·οDŸή¬ΠKn¬ίΓΡέ΅’7,_Đ.n¬ξqδΛ †c¬Α1ζΟΝmnltdu›ηJgΪ4jΑV—nν5Υ Σ-Ϊ‹jp¬wŸw;vnαˆ+“+ͺ˜Θ›[šœέΡΩNg<»_tΤ5¨z9ΫϋVπdˆGέ<]πh«’λή―T±―Owϊύό••ΗίSζό7Ÿ€vU ~&X{‘’‚ξĎ*V!Wκ¨s~›Ό³!WŠέα€£ˆCαˆ3₯ӎ‰„Θ’Uι€c’)8γI¬ε_Ž;>υΞ;>:π‰80ιdGκ‰_%πhΈ€Qζα€G*9%GκΔc₯PjΉ₯F].&ι`7fL5‚šb9Ρ;μPpΖ)'D¬Ήi&ζ€ηž u©Θ€J¨CοŠa ”(©Š‹’τŽ9ŠΒ€DBΚεTVιHC’AoD‚ͺŠτΚe oœšκ¬ΊΪQ‘ΔͺΑoLs©­₯H$θΊB>R›:ŠΌ!+¬H<ŠK8`[‰2šΚ&&8aΒ­·­†«QAŸάΉH­κn”ΞΆδAmΌ±ΓΞ'άζρ+ΎΥH―ΏrU ,:μŒ/Ak”Ξ&άή‘f{ GτŽΒHΜΕ;T#ΔH,hΗuHJΔι€K²Cζœ²\ΰœΛnˆ*sb4|³Cθ¨Β­:ο̐:>ΰ96 ­Ρ'’NΜJ­N'«τA0©2΅Σ*_-P‡Z@ΜΫΚ^Ψc³ΣυΥ>‘]Τ7³—Λ‰d„c΅ΧΉ2u݁βP.S{ŽΪ~ΰtα nE8Π•νj:ŽC.Ή«θ€ΓΛԏsμ·:›`…7ϋ1.Pθ£h:θœ{³φΥ"35αΌξ5/*…7i^^)LΈλξM;Ύn@π»ϋ΄ϊρΉοΎ8ή±η~ιšŽŒτήnΊΧ0½OΕκSχHx“΄ίγη„λpΛ<>( ;ν―<~ρΟόΥ5"³CώΆš‹ ‘>h€# !^ψ‚€hΐο·ΘC³ΐ)9 ΐ °Α Pmά‘p*Pα +ΘF;6Œ$ ZΓ¨…#Lγε0ΐ7v€œjˆBJ0mlo=¬ΑzΨ€x °o D&& P΄@Όv€9±‹gƒ ¦!Žu¬γλ0H=ΘƊ@0ε˜Β|ΨΡk  ΐ ’G !wdHf2Ϋ3$;βaH{²pφ "ΙΡG"²pνπF>ξΘGz-ΡΘ‡ξBIK~ωΠ@έ\gSz­ωP*ΓαRzrgρ@₯ T`ΑΥ2υΈ₯ΜrK^€ δπF'/‰KTς€ΖD¦2+)̎Σ>ΘŽ™Μe63?P‚ Β9N4²Υl1•°@ KqδZ™ΞxσA*™Ώz2³c°Δη"qL c£P4ΘαO™Α n°4`…w #¬tεΚ`Io¨"w€‚*Ό@ώs˜¨l/x‘ ˆΪ#Τ<)!C‰ ^xΓ%dx\4Ί3{΅‹2jκαiTfφ@Gν€Id¨"ΉG=ŽΊ²B²†΄ 4€JU―΅X­g"ΗJΦ²šυ¬hM«ZΧΚΦΆΊυ­p«\ηJΧΊΪυxΝ«^χΚΧΎς΅hlc"w˜CŽ!ω ,b_ƒͺ #° Αƒ*\Θ°‘Γ‡#:€"±’Ε‹3jάΘ±£ΗoΕc²€Ι“ )<βNΚ—0;ήΚvJƒ2αbκάΡ;rαri0@ƜQžH“"T§N¨7δ\*šΤ8UCο€3G΅λNtH90ηW―hQ’C·iμ"qgΣΚύ¨ξέ§±ŠήΝέλ1]:L `2‡..ίΓΣ) \ žaĐ#;*°‘37|/€0k­°ξT‘Sχ˜4ιtθάΠ ͺλΫΙ8А˨hά€Ι‘™Ν‹5pάα¬PQόΈλΥα ,GVΨ9itގ8Pν¨υΜθyC€4©­Ώο€’h…Σ«Oˎ4Žx;+ΎWsΘ¨ήlεsω V„sTRΕ‹xŽQF˜S@9j8SBUˆ"Ξ…•‰μH•bZ«©βZ­–α‹1­&yΔcŽh±3 Οo@Rυ׌ƒέ˜δKk&>ιΥbŒ—“VšτN¨‘BN|]nΟi©‘X&O~έρY. "Ή¦N²ρΞVs"%qjζSr³!ƒ!—~f€9Κ1§™…ΒδtάEEh£WήyRj’:ήΨΐΡ°Σ§¦ AΣϋeJͺGθΨ'ΰͺΊͺG BNu“ΞΪΠZΘΨΤΰΊ~”N‡VB‰"m™k°5•ƒ VDBJ$w€ί²Μ Φ PE$‘ΈSΨf+P:BdR-kεšϋN ‘Ό±ξSΩ/³ξ,.·‘Ν ζ^N wΌρF 䠈;£όSΰˆ9RR οΎ³.Ί(WŠ}φ‰8πJ¬Ρ—¨UΖ¨Ι1εYš³<ρ;n¦ΦNΙ2WV½ΕœsC{ς›Ο?'„9^μVά΅3« *:hΣΜ>:];SνPxΩmΧΡZ„N;ή(ριyΥ@΅θ@γ©ή\6DΠΌZ ¬s'€Nέή½vΆ 6˜uή ‘Σ!NLΎ:‡ϋ6αΉ •¨x+^Œ4¦ƒσί€†‡yY!rΎͺ:mπΦΤ’SZΧ]δ5Έεω•1a‘Γ.ΆXŽόΊν0Θg•Μ{Aœ½ΪξΆ«sζgͺ΄(όπ°ΥYΫΖ©“ͺ›Π¨YΠΕ!o; PχόπOC±ψΟvά‘^½Ÿ\“gυο7ʞ{‘f―ύ} κ½ν΅ςΫψ,§  ξ–됅˜VΉΉqˆB’ŸφzW"¨$~yΊ …ξ 6ύΩ,˜«υ&–υh„$G&f€ˆl€Γ…0Ό΅V)"8Μa¨΅(`](@ƒψBΚρ°h8@ N@…&6qΩ` βΚQŽ$ ZΓ²h‚i”γ`£Ύ‘Έά€5 p†LcpŒ#μ”Ψ &$θ@,°Η=Z.JΌAИ€x@|δc ΐGFfΐ‘&[G=0‡9ΰ˜ΓD0s¬Γ“Ÿ”dAκ±œΓυΩQAXR +G>fIKΨukXΑ- KZΞ!ψ™>’|ΐ˜!ΐΟμΡΩΓ΅$‘=ΘajΆšΏœ ΩΤ¦ΆgFsxρˆ†¬`oγšίL4 °pμΗ›ΩT§TΠNs’3ž–‹Η:UΐO ½›ΘLˆ2s¦Οyς“(δ°'@aWPπ@σό9γQt$˜]§6j€ Ԝπ θά ϊ%Ψΐ h(η9±‰Κ¬ JˆιI p  iή z$ττЈf:ΰŠPˆ)ϊκDU’o"P ξΈΊ«Gμ€CΌ±ϋ8nΌAo€BμšNλμ²,H6μθΪνCΤ†dΕ΅o΄zGΰάρΖ¬pDnΡω.jΰ€3 8xh•Ήϋ*Δ€Aή@Q c{,QgΡ4ψC’;l°g=Xζ ;TZ<‘₯P΄X±ΗmΪ©ΰ°CςF萊Fb ―μP.H²­Μ@ρtŒ³C£ ©Θ;Ζώάi˜ΐ'€Q:X° Ρ1;-—`ju³Υ %VšKŽό3mmΝuBoh€œ>ŸΡ_ &ΆΜπC43Νm1:μ@Sαή€₯·Ηκt¨UŸm©»½9€’AΪΰ$Σμ€Sξ±Ξ<€yΑκ<ΧSю„ ’˜L^:BOv'Nβ\«“Ηqͺϊω»^‹•μF—„Fœ―~΅^τ'ΈπWυ'2νξvbαHΜπνϋzcƒΖΌ[mψhΩL"k"#/PδΗ‹o€Œ˜—/<8Ζ!W,υο’σ\tf—NN%¨ Ώ΄μ°ΣΤSίιžΜΌˆ0Ox^jή£?ၧ>mΨώ€' Ωΐ ³ΡŽ RJy*θE6²‘, ΐVXPΰπ Υ:s 4 TΘ‘ζP zOε˜†nΨ€9ha <ό†•xΆi”@ ΈyΈ*nΓmπ@@Φΰ°@ΔHΖ1š±ŒhΜ@·:Ё-† ¨A `F3NΔ8–8¦a‚1Œ!o8@ζp€uœcυXΗAyΘDΰ`$"»•ΜaφG$( δγ“ωp›>ŽΠΕzXΧ²(7B€sΑli7ȏzt$²Gί£ΖΝž,έ.U@L”yΓνP₯γ†IL³¬e('‚KώΑ’*ȁ xπLI%sšVΫe|@Nr>3šυηCͺy¬]ώ@ 6ψA<•€h’ΓΚtΪ.•Ο#πΣJpC8@LuΚl—G@ P~2ψό€ΡŠqΘΨΔ(T1˜ˆJ΄!­μΦ.‘ΰ{@ Vx2’ς °$ƒ7TŽ;@AήG<ΚS˜Ήΰ/TAL~“§/υX<’adπΒ"Ck’Ρ„$Υbφ2@ d8Υή8*R Z0]‚*™δ@†*r‘‹pΤC•c•0ρi·š#Πp+\κΈ|Πυ­c%λΟ$Ψ«:­°==bωͺXO"Φ|Ž5,d'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛΪΦΊΦ눭l)ΎrΔΆΆMI@!ω ,―4 !ω ,―4 !ω ,ecr xγΝ€9*\Θ°‘Γ‡#Jœ¨Π<ξRάΘ±£Ηγ‘h:(SͺτXΙ"&+cʜɎ&£ΔΝάΙ₯Ή@U©λI΄hΔwξ0ΛΐI£P£:5‡Ζ€^CaJέ:Σ9+T #χ”«Ω•ΓA mθΩ·*ΝECΐ†7sZακ₯xGΒ‘έK˜’:uΘT°°c‰ι!Σ`€Μΰǘ²ΛEΩ ήΜ ’SεΐAžwyCcfGj©"weUƒώ¦t²U§SdΐΑ&€Ή3ΞΣ[hκΰzΥΕsc5ήΨΘυ²3GΐUuΠ£ΓEΞ ±ΈkηͺΞΫZmΗ>ιν‡%³«7 M1”‚σχ"Vlεsώ·θ˜Γ ed„χ\œ%•ŽxiΕγVƒ[α5ŠKNQΘUd˜,U <reN:”F 9!VψqδBŽ9ς₯Θ“Φε"ƒ2Ζ„9dX…Œ9ΕέyΘ΄3a;‘“N8HπC4κΰˆ$Jεύΐޜ$ε”™SŸP„$—2™3™^€#™(±3 n ΘζNζδbΡι sδœ>™CŠEΌ Ÿ1±σ‰Kj*“"΅εDΊz€N 8 Κ–‘ŎR-bšιCy’QW”’%:}ΚQ”P€`&‘β8QͺΊΡ€GΒ#©ι©­ΌΘ#+θϊΘ¬‡ύͺͺ;Dςˆ« Όα+°ΉCI$< ˜˜Κͺ N oΤceΰΘI-D¨c8L•ζ;ηNtΠAβ@ˆΡšρ.tXkΌ–/ExU²Τmƒώ ;π0κΐHψ,Πp©‚NΓF£ΞuKνPΥ]ηpDάy'V;[ί΅U²ͺF£Δ{Ρΐϋ1Dυpί‚3?”ΨbζζΌΠΔVΰΚͺͺ“ΰ»>;τ EyΔ3f™³‰EŠJt¦κΌΣ‘ŸάυBζ(|βΧ ­X©*F’Π;n8€1nj'Τ12άέwE^ύ©7GπCzq ԞHxSkΰ5‡ )Τϋ-φ4Ωo’±8Τuήَž›Cš%Mξ³9-½Ϊ3Ω5u@Χ‡“₯ OΈ@w”ζ\έβv1/CύΥwXy>³:j₯όhάCEΣχwι­(:μ@ceα˜Ύ3cΉηΩdX¦|€θνYυ9kNΩ½ŸΤ%¬69΄½ wΰ»U: <σΤo<πψn²:yX΄Λύχ“Ωοήq ° ~πύ`„yC€3Η<ˆ k,γ‚Λ¨Β8ΰΑ}Γ’@*0ΈŒ-lc)GΞό° Qψa„#$B5ΘΖQ΄A…(ˆ@„ @Ν,aͺ€ Qt Θ€|Ά6”’Κ`C.hB¬£(œY=Ψ°ŒmT£Λΰ’ ζ‘EŸΥ£ MX‡Ζa4j Œf,G3ς‘/|Γ뀇=ꑏ€ΩΠΘ‡ Tΰ…pŒ#zΜG}φŽ@^ G8Βa{(gΝ€b*Ž‚Δƒ‹όX&y°IX¦1ν°d( –Ιτΐ±Œ'A)Κ@ώ@ 6pΟ{Π@Ž‚Tς’¬ €py„aΪΐn˜€9~ΉΚseςH@BΚx03˜ω€ζ"qL c£P4ΘqΝe n°4`…w #w)§9Io¨"w€‚*Ό_Žx³–}Μ/x‘ tΪ#©ό§Αβ| ƒή@F:Θΐ˜hΘΣ`φΘ2Δ d<ΤήHh3σevˆ)•δ@†*r‘‹pΤC•3³‡@dZƒD.…©Ϊ*i€š*Τ!ω ,―4 !ω ,‘’TR 4`έΐƒ*\Θ°‘Γ‡5π2G‘"Δ‹3j4`€ ^κΤUάH²δΖpP•“Ϋ¬Υ³ dcΦLΪ(―Ο*Tx'Ί΅Ρ#°c§ΎΌ—΅m˜ωx¨Θ‘‚Α˜ΏΜe ίΠ‘ηY9ΙtαHεΫρC‰ έΡ ?ldη|JΌ§·qd‡›pΙΛk<Iύ#“σιΟGn΄όŒτ!%H(‚Μ(•¨‚Μc]tnΌΣΜVΌƒ 4Π0Ψ Dη₯F 4w@aoΞ72ΉδΒ‹*š y%:x"/ΠπGαδcŒYF/†Aƒ 2+ DιeX8΄­¨Šψ€$Fδ€3š^B6“Γ”%υ—:ε€ΑZ`n„W™h¦©ζšlΆιζ›pΖ)ηœtΦiηxζ©ηž|φιηŸ€ϊ(|ŠB¨’ bXΠh8)€’V ι†Λdj ­#P=žžc@=ˆ j©£’ϊ_)Λl± žUlmQΕ¬U€Β<€ΖΉΞΌzΊN=Œ•D@yϋ5§_=φ§~Ζξη첌9+m° Kl΄Σ>λ&³ΩJ[­|άv«νšαŠ«¬šεž+Ίh¦k.›ξvΫfΌγΞ‹­Έo[/Ήζ²‹nΏΜnΫ¬Όvz[R@!ω ,j4LΙ…8Π€Αƒ*\Θ°‘rήςyσΞ‘Ε‹ΓEΛgΐ[΄κ0Ši ΄|VΘE£H.$Ι— Γ!Λ§"₯G0s"”IS,]κ„ΙS…Q/ΰ&Jt¦Q£?Wβd:d>*r¨ΰAFePͺ"yώπA–lW©-Α^«ΔΖ·JΠx­¨Φ’ΥΆJςΆ="—e]‡< |δdΎΓωΘ‘ϋΫ00’@”(B6ͺ’*dK+δ ΕM‰ŒW.^ͺ:·£(;&m^Πx©#cΕ$έή £E#Η‹"4d΅£™FΎ0άDΕήp«Κε:κ Ν-α~hYwπΗ£_ΟΎ½ϋχπγ˟OΏΎύϋψσλίΟΏΏ(ΰ€hΰ&dŽ9χ-θ ƒσ=Έ }π |κHxα{νhX!|z8‘{Ρ°#"„νAαM:'’Έ^J!zΘ/@:-Ί(›9κδ’n°£„λ™Ž*G<'’ηΰ&I*ςŽ:Ιγ;˜ΐ'βΘžƒ8*€€x·α—Ύ“Η˜΄“a{Ύγ†δΒ"œ.€Θ|ǞˆαX€Aνό)’7GπΓ{>θΝ’Ž˜_H* jŠ!ω ,na!  7 ƒ*\Έœ·|ήΌ…cH±"ΒpΡςˆhΠ’Η‹ΠςY!M"9u=†C–OΕHŽδRZ\ΩRŒ&QΚ\HS…O/ΰ`ξδΙ§Ο›% κj \H*r¨ΰAΖ‘I¦iώπΑ•kΥ€'Ν‰λ‘WΘ?”Ψ°‘Υ‰cΙzΜ•O‰Z»6ŽμpΞ$ΩΈζ*ζΘwIα#!σ)ΞGŽ`ΐ s ŒdQ #˜eE ΑǐjΘΕM=hH¬ΌCΦ šAΠ‘š §*ίMRήξ@Α-!μΈ ζC–Η 2U₯ΫE›(ϋ7π¬!yp'+N™pš$9dŸVP…ŒW4ΧΎΉ\%βUεŠ–P½άƒ1Ι±;“·˜ιΩ˜Bο ([}H E *˜: ˆ•}X5Η]…Ϋ‘sa…ή€³a…bθ‘…χaΈƒ!ω ,b\;D Θn Αƒ*\ΘΠΰ›gήJœHaΆhήΒ‘SW±£ΗZ΄Τ#η-šFŽSNΤ2Ο I“UΚTΘΐ€> ^ΐyΛHΞ€ΉŸ@gͺ,ΐ Ÿ Vΐa< τ§Π” Ψ;ͺ"ηNN›>­˜νΦ#£TΙ„Γh`cΣ [ͺ3Y>*r¨ΰA†άR³gΣ6TZΎ>{wνYszςuϋC‰• ±›ρ°ΣΔ ΫζSβψgJά„γiω2ζαšε;‚ kΏωb—%WρiΤnY/ tΣ&J•T!ΓZΫφiΝPάΤƒ†Δ€7ΉœΣ.~[ f±€Β݁B*hx©ίN―\ΌT%θ#»β¦1χ-Ο ―td¬„;bΰH8ψΖaf9Ș 2ζE“‹ θ'ήmδŒζ 9$₯§J.ήπ’u‘sXuυ$P„NˆN.Ίaˆ ‰hN:ζ¨b€yΌ“‹ Ε) ˆ;Ζ‡cBg}b@ιx8δDˆ½(›ΨΈdEκ $•SNO–)Δε—`†)ζ˜d–iζ™h¦©ζšlΆιζ›pΖ)ηœtΦiηxζy§’lڐ%(B‰8iB˜DBŠΰ`I&o€πH$o€ƒΞ™οςΘ ‘>Βh•fΊH$€i₯—†JI$€šΚšΰ)ςΖ¬d¬ΐ8δ€:ζ;œΞ―3:Π¦9„Ωf•<ΊωS%o²œ !ω ,\W  7 ƒ*LHΞ[>oήΒ-œΈ0\΄| €H1΄|VΘE‹f 9Ž‘εSaΕ››„πP" —CŸ–Ω"ΘaΐœΜƒαV€SA”Μ©9+²…S'S]8C‰ͺ€rλMIrθ|r އ 9ryΝAsZ'>—£G6|ΙF’ Ί΄ Ή±ρƒ/_4 Ν’νUΙ%ˆΫp."9΄x =‚Δ0’ω2η#χxp^dρ(’„DΡ(^T!; o8•PάΔƒv$€ yΌunφu>2αH…»…T.0ρn τ#2^Ήx©ŠNςQβ–ΟtΞ ―td¬xΜγΐͺ»ΌŠ4€,šGdΟ£AΐA.sY!«o¬»‘tUΉxŽ9h /θy¦B'AƒŒnhc* ƒUd qΞcω…έ…ZθδY4H`ƒ7&΄‰κ@ΓƒθPτ"ZꨃΜO=έhN:ιμΘcZΛ±ΓγDi•ˆP@!ω ,―4 !ω ,―4 !ω ,\Vlz —-Α‚Α \Θ°‘Γ‡#JœH±"Δo@h\bEŽlι,ŠI²$Ιΰ" ͺ3G ΩΤ™œI³¦ΘξNΝΡB…Α˜ m *%Μ9΄ha¨Σ§#AΔΘ ŒRάAέΚυ!JPnέXš΅«Ω ή1¬Šuœtgγ 5g`EΓό τRHW_šXsπPΑpQ4}*‰LŸˆ¦h±eΖω~(±ρC  7ήFE#wΉtDhω Ψxd‡%“U™žνYjG8ŒΗ‹Άo·:‚ Y¦QVhΰ%σ·οz ί!k-Ή d!kχζ-œ·#vxΣ½]΄pκ ©%yναΜ©CΆžΜΫχ~IG4ǟ—yΈ~¦‘ƒŽ|ζ¨βΔ3 ₯ρg;Ÿ@%π@θ]ό!&€ͺ<¨αY2ğ:ρΈ‘\o'Z&α„κΐuΩΕψ׌θ„ExΡ4§γ†3zcGx“γrΝ¨V0©ΨŒδψ€μHΉ£„ͺόΘ<&ji–9訳ɂŸˆ#f“ς½ƒΙˆ€Έζ˜3ζ1b.χΝΙ•6j€L˜z:ΕaΦA#d O ^’K"J”“λYឣ‰"6!2Ω(₯6‘‰N. Έ)§3IˆΞ™(’©CqψŽ› Ζ9*«%™“N;":€η¬΄ŠΔί;μΈΈ\―’CŽuΨ[“„κxƒ6Œ§μ²θ  μM:m©κ€§φmKӊVή‘―βBdͺ‚ ‚™.I3V@šοŽ4c:Ήͺrh½­ψΞ Λ―½ι€c#ŽϋΪγ*špΏ‰€’WΔ}P&V±D[ιΖΎ;΄"¨ ΎƒξΓ¦’ŠI£!7$_<˜¨πÁP’Hƒ-«(!€H$€άΘKˆPπΘ#o€s2ΏζΌσσ € Θζ̐;”D Υ Έa@·Z €ŽB^?bGds`Ω©υΖάoNΓmΐ;ξτΜ3©8ΰ@€zw[m΅κ² ͺO§ΛαŒζT2β(ησ„π,"Έ*νX2 ˜ή.{c²€[Ϊ,xβ₯ώ!:νxσCΆ[j4€«_κt©ΣΫ•YΊΞε‚_6>0ˆ’ΟΛ²Φt±"#κ[ϋήοΨ)°πζΣηŸΨ/|c΅“/―υGιyΛc |ψό‘Όˆ8λΨ&€:UνέV@œΑK]·μ€+γ%,{ΒBΖτc:fz«ΐ€ε:t€γIνYΰ|2eΐγ©TƒΠτΑ.Eμ/|•Θέ(@δ:v°cΉ“ΝΣ!ΆεhLoό9–Σϊ(<¬]4ofמϊm¬LOŠ ΰ1vt°^όaWρ„‡˜O IMΒ+XeH€Ž.Πΐ°§½0roz>Ϊα§7DάPlzκ1€R$ 5*Υ« £JΕΚUλVT½~λ΄eΆ#V€M»"8²OM’ΛΆbΞAvοRˆ‡R³ ΖΜΉiΞAԍυΛπ˜ς²1\€NΖAkΡβ «ΒΘ5Εά!Αl ΄œΘ§βHΆ9Β‘SL:.κΝϊTh sλM4Ω—k'E=ζk*¬d‹ζ Έp₯tP°‡\+δ˜Λ¦ύ<¨Ϋl«κρ¨ΞƒLφζ³w .›·^ωzδπΡΓ‡σΪΣ―YΎ?(aC€6 ρŽvκνS8Θ䣄€Ϊp„h˜ƒ^p ΖΔ`>G ΡαΠδ#’ˆδˆ6Z†(mΨa ” ‘2Šhޜ„βKBαF<Πa…;Θ¨"£yθΨxcŠ ’)αά…*Μ €,ι”ΰ‘…"2ΌδΒ‹*:Ζγ 9ͺ8ΰΐιy"–YnΙ 4Ό¨C†Z†c)G<Š­ΙζDΩ‘ƒΜoΠ Γe4ΠΨΙΞ(y*ςŽ‘jDN8ތIŽ7_ͺ’Λ˜}€ `’ŽA‘vDB“:fBι(€•ΐ£¦@₯ŽT"8§vj€:κδa&)jϊYλDθθŠP<ράa¦*ιτyε°"₯ι†δBN°ΟBΛQ_d /e«­Fθc…·Θ:Jκ„* 3ͺ°λ’ΞπBγl½+y£?Dc†όŠ„4=€„7ϋŒ4*ΜθΝΌ;Μ2Σι¬ΈCΔː&VάqFκδ"£!s<2C}I‰&½+;Τl™zΖ£nΜm’g 6̳BκΌσ ¨˜@ϊ³D­‚ϊ‰8" ‘:Ό:Κ9>;}PΠyΌͺŠΡV7Δλ―Z;kΧυε†·ΉP|3Ω ‘Σν·κ`Ϋ4ΫαœοGl³¬Ž7οͺMzs³]l4HΰƒΎ\ηm:κDσJx¬β ‘ΓΔΞΪ”³€Ζ3‚Ξ;ΰ¨ΣΉGD±ƒŒGθxΗwπ|ϊBΉ ΅B$‘ˆ;¦Ο~:ΰAVΰΎ»ο γFΓΏρH ς 58wD²Ό±;wΎSŸϋ d/š±§«£H 迁\%δX&½;ξΘ£80 Σ*ΝλAοψ각SάΧ–ΥŽ>Iο B[ΥΘζ6o+€yCGέΰ§όu­]}CF-h5oΑ<€ΖΨ€‡Žtxc«Ω¦hδ@a’γςx:(lŽƒGKG:V獭lιψΜ#Cι•μd€;ΰβ ΰ²fαπg}ΑSΝz§Δƒθ ŠpǏφŽO…κ‡dλKύ>‘¦*ξ j―"ũ̈50q`f4ΐΩͺu-6ΰmΰ:ΘWV·₯‹|›`ΌΨGπ-_q‹#αwrvŒƒΖΏF«)s4JG?—±V±/BTR‘ͺΘ+!’τ9rαάa ©œ]™ ‡wЊ”€pc ζQHs|’•ŽŠeη4ω)|β-fH ZΉ w“rκˆ‡€΅Ιw€Νͺ(€ΩΠΦK·)Δl0@ =ΜN±†BζAxΜ©†—QΘ…ˆ’ž'>χΙO…ŒŸξμg=μΑ€!ω ,ef€n ˜H° 9*\Θ°‘Γ‡#JœH1’Α‹+jάΘ±£G‹ ~I²€I„!Ež\Ι²%Γ”]ʜI¦Jš8s‚΄©³§O…6oώ:3hA’H[=š΄iΝ”Ωr€xC…ͺ+ΐ‘sΚucΘl ݚSgΞAΊͺ­ψ5μ­[‘ ˜s`λΪ»ۊ΅r«† Ίκπ ~‰l[ψF’Kn°c”…AV‘βH6ΊαΘ~Œ7δ3·”A@Ήυ&ZfΝ#ΧιE™2™hΘΌF­φ«Τl*xπpύ šiΝ΄Ή~Ν† =r('šμΖΑ›bDΞ²|?~(±aC;oΡdGžp Ίζω”lWoγˆ4α~_kξόυ#Hπ–―>{δ@7ŸZαά‡D ” ‘2£δayΈCŽ]:U`>PΈ4GXρ2ΠTΔCa…I]Θ)αά)α…σɈ˜€ƒ’…ό!ΓK.Ό¨’a;²£lβΞ‰7ϊ„žŽΠπ’V4—™9y8ΰ€*›%ω9ѐËlΠ £c4Π„Sί;n A.jι9αxγM€ήτ¨J.sn₯Ž9d¨ΙK–nκ$ œΠψ& 9θc* hS6€Ž7P0  r…N:ή(ΐήdŠ:Ρπΐαˆz—:Π¨@”ͺvu9Θhƚ’θδb«Ίv…Ž9ͺΨ!’Αϊ„¨9€v°}οCF;Θ|XΌϊЏΠ`Η ΝΑoμΐJΥ ΐΗm†κ8 ’ΔAκ kd Γ°¦¨_ΐ μ° ΜŽά Γ›":6EΌCώ{ •gB‘ŠxΠ(ΰ1ΕboS4€:Τα†*T!!lπƒŒ`r(Q}[aƒCƏKŽοΩF"GIΚ„H2!¨…‚` ΄pe,a)ΛZΒ²kš„H=²Ρν—θ₯~9ΜRςν‘ Af1;2€¨­Γ˜ιK!ω ,onvf H° ΑƒΑ£°‚!Γ+ΐ©CH±’Ε‹3jΜξȜ η€·±€Ι“Ν‘ ·’₯Ή—/Mf;2¦ζΗ"Ϋ‘άΙ3£JoωΌy eΆT¨03gžP£4.Z>sή’±TgξδΡ€c ΰl*΅lTͺΠς m(9£H©4=p£©Ί‰f󚀊,ŸŠ΅YΓΐ»ρ+•` «·ρFΎj5©κ nRœ7(ά(ϱ狐ͺπN¨Χ#ŠPX½ϊέηΧC¬:πΕlΰ²ιΎ•νΰ` 'ˆ69 πXΫv#:…ΊuηΦΰ8tΓ…S5ο‡οί™Χ.Ιn"ΈJ4TΞώϊ₯`Jlό ψΆ'»xPάIΗΎ=AJΐgΓ€A•‹πb[yuu‘Z<₯“ŽXΑΰ…U’ 2.9xR4@ 9ΨaΘ4zX:κ(€ ο™›*ΑΣNα@ σ”(£v6ήx’*h͏ž-ΨU;±ch,ˆ€gAe’:Θ8@.$N Ϋ’6’€N αš—y!³^Lž€Ž7*€I:R’Ή“ŠlΆi'EzߝTVyvG8pΗ9uZ– &‘s Θ(ϊY•xb„…V$*©TŒ–Mˆ€ψΈiƒz–ˆ<Δ8jƒtŠ‘:απ€"ξ¬Ϊ˜Vf„;€y€­·–šΡ“n£)°(α*dFYnω'²‹ {;w8pΔ³ΠrΚd₯₯γ u•”m΄aj”N%/9ξY”Z δqζΊμ–‹;Ή©¨τφ$mEhTxWΏΪώ[:Ÿ@#ΑυζzQ QΓPΉŠΠ;αΔ©ΘΌίi1B½jMΗ sk:ωΉq,Ι ΅[Q:Ό ˜ Ά,Ÿd/Ewέ q\³FΚ.{2ˆTβNΟ?οE©ΠCDoΌαF ΄OK3 Ξ ½I$ΘsυcYγ ΁P  €’ ;όŽMQ֝IC+DB‰Dr½tA[Gς vίX»LΠΦ€DβΫ {ǍxAe m8%x¬ΐtŒxε©σŽ:ΰΌ3JŸ“·άͺβ₯“ί~©“}sAΌθΛKμ%±.:BA'ξ~Ο.Ρ›Ό#9πSμ"ŒΘοπ`δό°γ<Ν'Ξ΄Dj€ŒNΥWτwAd@χέ{oq³\_Ύ@Β’“™o‘«oΖ‰‰κΛo1Ÿκε―Νόy]:ό·>a=JAς3_Q$!LyξK؈Xΐ›-OU ŒM›b΅£xP°‚εΚή―2¨Α69 J#αά‚„%-ΝL…%d!™Ž .¦$LX±ίοl˜Ό0aβEΡ`Οot˜γρͺΪ)W₯|Aj‰=| vζ…’0H [‰€Sρ`b[lΥκΜ+ωl‹6BGΘ aΕ ‰Xmt#Lb^+ŒyΚ™΅Θ‡Η1z‹:Ÿθ#́ 4a‚d:ϊ!6ΐŽl‚ΰa²+’ΓΛ0*¬Qu2“šL€A2)ŠGв U8ε@Άʁ‘ °€b9KYς–Θpη‡Œœcυπ$A~Lω9”§lΒ$)f ²ͺ4H=μΝiB¨'!ω ,qjŸj H° Αƒ*LH.\C‡ #Jœx…‹)yG±£Η σ–Ο›·p!Sv< hŽΛ—+²©œIΣcΈhω x‹ζP]͟ Μ:τ̘#Σ€*]*0΄|VΘE;IΞ'S•nΘZΰΔ ]†4GΆ¬Y²3Γ!Λ§"κΞbC¨Qck @DΠRAϝ "Vyψlβ΅*R{gbdΙsΆ‚)%Љ€)Gη.φ4ΫΤ*O…ϋZβδΉZΖP‘SσηΠ£KWWΦ€iΌ{§}ΚCE<ΘH}\<⁌ 8’ ςΗμζ°Γ―Rρψρ‹^΅|Bt©ΰΐ-ΩX 8ξy4ί{ΩΥdŸ6ό‘hŒ‡’©Cw€“‡ΰΈi vTb}OA¨ΔŠQ!U„Œ@;ΞΥ4}˜’bG δOεcd>δcAθάαࠣԎΪEδcH@"%H(‚Μ(•¨‚ŒkK δδ’ΞRTV™P›υ­…ρ@s„ο  4d–i@ XqU›nZίu?Υ)αά…*ΓωIP8*@Š”lΒ9’ 9•2ΌδΒ‹*sΆs’€‘ƒ ;ˆE(ςU‡εS BΓ‹†V8u‘€θ(&ι`:%‘»Ι’Tδπr4Θ€ Ÿ¨@ *용¦ΕΫQC&%ιΝ¨ͺδβ 9Β.‰Ž2OΉ@K’Y*))PC̎-/h0.»?QΩ.§ρF;Π†wDζοΏ… <44"³¦«;«­Β39I†ό" ŸΔπR¬™ibΆ:vμqJŠ8<nO|ςD”° GeΒ:¨Ι3Sτ‰<τΧ3M‡ς<΄Bι ρλΡύΝ4BͺδkνΣcY'3Υ©ƒnρ$ˆ5ƒWc―Πδψυ»:­ŽΈσΩΩ&ό4Γ C.άq§ύ4:yκ5ή±Κέs8hζr7ΰhλ=τͺHόΈ‚NMN₯£΄όψ¦‘ŸŒΞ&ΤFyωLχόΞ(ςφη˜‡Mq.ωzƒ:Ρ‘{Όaοdό:δͺ£ŠŒ€Πœ~{ΰŠ ΜΆΫΏ—,Έ€Ρ ykρ ΗΞλ"2ίτρKξ€*ŽKobζebβ€"kŸxπεcΎ T">μ0cΘo±Β oœ³~σ₯Ε¨Ž"‘D²πΗύπΗP"‚Πρ– 0oΉ[J:ρˆ‘! ΄ά·Χ β C°Θ#(ΐ ΟyW‘4…HΒ ,˞ ΑςL ΘC Άδΐr0εQ%°2ΕΠ‡ΈβkjFŠt¨ΆCβ› θŸUΩΰpRLœ }¬,|@‰š ΌαD/z3Aΐ5šq"νSΚΨ\χΖ/F m‹GλG.¬a|œ?’ŽΎ],‚d Θ ·GDφ‘{ I°θΘԁρ#5»Y%Ω‡–KJ?SΠ6yƚ€ƒt˜ ₯ެA‰¨Β˜š*γ–F/€vnœ₯‘ tμΞΡΘ₯.%Η‰ cxΎfΆRΒ0 C™‚€Aςΰ+˜ šό:μ5›Δτ£AΤ±ͺ#°œ_”ζΌ*υ q gA8§xΖμ’θPJ—νL{Z2"μ`ΎόΉJyΞΞί$h8ΡψΛή)”“Τ»ȐχΪ1!Ι/,ͺ1„°cD G!ͺ·š©b€ΡLΫͺ” A”’Ν >ψ•H]JTM«Z4M'Ψ±Ο@Δ#§%›;ζ1\ΐr”jHΠ1¦ΥvΠ@Α” 6ΐ°ͺU©ΊJ,㫨«@ΰΑ՚|ua΅FΚ QΠ«l]ΚVγZQΐY+A ΓWΏτΥ}±ΐΚΚ†RHdηXG= ‚XΕu Λ0¬@ζϊX4ΑM¨Β@4+œ€„• νLςQ{ό. !ω ,±bcp H° Αƒ*\ˆΠ;vζβΥcH±’Ε‹ Ϊ#g€9‰CŠY±7ζΌ‘³g―βD’0cŒΝ€•”δΪ΅”Ι³ηBu55 §$CK|*ΕΤ€ ‘αΒεά©P„₯X)²«©’«pE_6ΜJvαV§]U!§’₯B€ζβΚ- 3Ÿέ»xΑ­އŠ*x¬U©s‘άΉtGβ]œ/ˆGΩrππAΩΗΰbΞ=l.qΖz C‹ž&BΠ-@”Ψ°ρC rαΎ­SΘ™³η‹irλήέEDlͺ•·qd‡o| ˜IXΫφmŠ,dˆ>]z†jΨ:‚„ϋhxΛ9‘N~zΝ?kΙ’¦φπ-qςζ$‹!Α+O<‰tB[zˆ­—Π7&˜ 4€ρΜw€ƒ V€ƒL2Υlc‡ˆPsκ¨cΞ3 ΤpΛPŠάrͺDγM8ο4G‡κy8‡‘ 2”€ˆ*PΈΡN4α0Dc™ϊ Γ 2½@†α@Sδ†Gvf㍒S dΓK4;"γd4V™e\[’'£ή¨&/†N8Ό¨’J.*‘ƒe–mΦF:y€Δ; 4ΠD“θŸGΪ!AΠ8€*ρψIG­©ε–D†d £L€Ά‰€ε€Θ΄Sͺ †:Πδρަ$Ρj£ }β€'Ιδk’Ά†#'&πΪλ±Ο+P ό°Τ§ώͺ4\zjYŸͺj«n`E<ͺFΛͺšΊ}Šά‘Ξ»žuψι&`‹/]κ) €"οό πΊ8 D8ίœΥΆέ’β¬ΓJ­‹NΉVP n¨ΌXΚ‹Ζ;7―n4 ²Oΐ’&4&Ÿl,«δψ@ ™ΊŒ²sŠ Γ6χ€ž7ݎ"NΟ>;wPœCtΡl Τ±ΌΣς!9§ŽΈ!5Υ¨:§ΚΚ\Ο:)9?ΜμNΨ]7&:{31ΪΩ4£€s/άUOZθ缍wE“"ci.ww‡θSfΣ|ν@MŽŽΉΖΣxεΜ±ΩΫ*x³9ηqΞι@;P ι™~ΗoXAœΝz燁γF$‚P  ‹€γχνnΚΞ‘¬@Α €Τ.<ρq¦Žξ‚h@Α#‘Τ½f‡M‡ςdDBJπΟo?£\Σ“‘Αc€d―ΉωηΞ*ΌH ”€3ϊν΅εα€δx8šΏΙάΊΤπ Ψ=4`-όΠaΪ…ŒJ0.σͺ—8φ·½Γ ƒ_Δ² χβ"0E K„Œ %ͺ΅5r). T… γgŽ‹™k†4δΕ«xΑAσ†^φΒaρΜ‘2 DCˆ«"!ζŽΒο09ΫY;XΓhDŒNτa\Τq4(n†‡yΪǐˆ>¬Ή‰nBΗΧ4@92šƒl3›‡γΊ+ Q.V€›έάȎ;8€oY|’9ηΒΉθπ‚ΠP>Ζ…k„ΖΡ%δκS€"θD‡Ζf₯πΘ$τΜΑŒ‹ΰ‹Gέ1q$ ΡAΑvˆzδΐœnΙ?s|BgΡΰ%β4§N d‹€Œ)nΐ»@e'ύ  t„δFι:)  b ψF9ς .ƒ™ ‚ΚΓNσ΄“<¬CbžužG:φΜ'>α7Τc6J›H@κO( Πkη!ω ,ϋbσ h  Αƒ²cg.^½| #&΄GΞ9r!JDhΟ`;oΜy#gϞƍ γ΄"’\;“(7j ndƘ,I0 ΞΰΜpα\ΒܘO„ˆ^ΐΩ|Έ±#B Yς$N9x¨ΰA†άΘ—VQξπΡ£‡]·•;‡Σΰ·?lόP‚f›"3΄U’Δ_%6θn»‚Α … $1€d1΄ωΚ™B¨)gεr³5^θ&d™F©ϊ΅m[[(nΪACbε²fΠFΆ5@Ζ›dw ¨Š&{vΑ\Ήx₯BύΡ·|ΘxAγ₯ŽŒ•pΖΉC-4dΙ£A g§’š#½ςR₯*W4ίκΜU΄h½YoγΙA‡ŸP]Oί!ω ,Ιj@h H° Αƒ‚ ΐ°!%ϊ ’KH±’EƒΝΩΘq8*r¨ΈH²δΑsPž³c>|ό0IΣδ7 ά`pβΔH%6 (©IτβΝ Τh@ΓG‘AΊ©V΄κΐ`nΐ †GG±J– Κ­` DΡβ1lΩ· €9PCΛ*TrdXξΫ·XΟ@8Rα’ςfΨ―ItЍΘFΩ@Ά^φ π¨j`4Η&ΑπΘεlή E˜4QLTSǎ:pΡΘρςΖΨ5Ρ0΅6G|βΐ§½‘Cη›β'ΙΖ‰K7`nω@dΝ/ΪޚΊtsΑg§X)vbοΣ OqGppΜΏ‹g_r”δσίιΧά¨pώωϊY΄Ι}₯ Iο(€"ށ ¨‚7κ8αE .θ:ω]h)h˜|Z„„†–Hˆ"ͺC’Š ¨ˆ;#Aͺ„H‘‹ήXΠP"N‡>”£ή€Cd‘A@ .Ι€G2φβ” γd σΘgc‘Uֈ₯@ZG<<>8¦* ™β˜μXaf<^ŽIe›ήΤ §œyΈ#ε”Ή„Mš_2Ι熨ƒ^‰₯œwΨγ( !ζ–¦YBšΞ₯˜ς"(§˜zΐ›&κ£§Œ:&8¬ZαΐητΘd oΤ Β n€cj‰κ(I$+P@ΖΊξκ!%‘’«§ι,PDςΖ4οΘz#d,τˆ΅CN #%Ph@F$›Ό!‡Ϊ˜ δ%P‚Z€:hΰ†;¬ͺγ/uc"γΘψϋ/¦Έ‘οljމŽΐ·Λ$; £‘*¦;€ŒΔE’£0J6Œ%:Π Μ :<"œ0 ‹Ν†3­ΚΣE2ξΐπ¬ςܐηΫRβt*#:αhPϊΪC€έΡ<ΞH€h-%01ο5!P"s+οL}c@9ΔW?ψ.JDd`φΰ½ψαo~ω”Ψ—λœc@_ξχΥώϋΔoύ…UT!ω ,ΘcMl H° ΑƒΜΗ°‘Β‡#J|ΘΠ@Γ|1NάΘ±`Ε‹;Š©π#H‰š \iΐ;vζβΥhςδC{,YΪ#g€9™1‚tψΠ’„œ#Ϋy3`Ξ9{φj-™ιΖ (P0ΰΞJ87αΤEjΣ*‚ζΜ”Mƒ•lΡά΅K–¨Y–ζδM…ΫlΫΰ­[W―°αΓ…ο²!¨`G•8 B4½δ3α"  2£dB 2αˆί†©s”„ΣL>PΈa4GXa2Π@Σ"‚ Β:Ή }ΘδCF8€„s€D3:DiδCVΗ;α\ˆ /Ήπ’JŽφDΣ"–/n 28 ˜bς /ια•iι&DnΰΖ;ζΘG2jBƒΜ˜ΡπωηFΠ8ΰ/κŽ7N‘㍙ͺδβ:N”V¨Si‚< DN˜Θ8κDήh@.ΰάwPͺ―J€Ž"­Ή²DŽ Œ"°Α’Τ‘ &;;H€Ιl:;’*,™N~֊€N—yΔsj·"ρ’$4§ϊInDκ:(²λJ)Θ4oD£’AN΅χJλ¬ϋrΫοCθπzΔ9ι Q8Δnς– Gτ‰<¬nΔ₯ƒƒ΄πb|Ά„Ώ€„[iΙ ™»dΗ,Dwΐ³‘:€ Ι7t‡d΄Ω³@ζbΔC Pl+πΠ @ ΟCc€φ­„΄N_3)J =4:(Ν,η’m4γ 8Μ|ΗΘ^{ΘoΒ o”σ4Λ»FI @ρ8Ϋ&MI$hu78κ€Ϊs:Dς†XŽψίά8‹X.ΞΚCS’‡+DBА#s:ଐƒBIλuG Ά ΩΈwδœ{ Μ*Ϊ'ωrπ,£#w:’'-2’BΓ|σ’AΊτD#+₯Ή—ŒΞ"€Šέs88 Κυ,[­„ΣάχΔ•ΐ½τ› B8'}2ŠpΗύΖ2o„―dν˜YάΑ>ΑIN„: Ζά…+ι‘c^ΰ‹;ςΰ€R©#~@TΑŽΖΟjΎ2‘‡U,ψI£Π9ΒtDKω‘ Β@V’Γ ^ ~Ζ tο l— "ΏH Θ¨Ό`*md 4 AΘB‡Eqb* T £…‰!FLJͺϋΕ+ \Q,’Ί0ΪΑ€Gb°c —Ρεδε-y"dΐ­Y$#IIIή+ͺ‰଀!ω ,ΙgIk H° ΑƒΪcΗΞ\Όzω"ζKH±’Ε‹ν‘3@ŽάC‰1Š9²7ζΌ‘³g$Ι—0 ‚[❕po@€XΡ2b̟/³x”Mƒ•[‘κθι¨S‹ΣDΊ₯B”l‘¬«·΅^½§`vQ#[UGߘ1“¦mΨ·3tπP#ΪY΄·\Θ`―߁6ΐ.BKœ<„Ή•CEŽΗdͺi²DΩα‚– CQηŽ=lπ°af[΅jΫΎ©ώ¦ω§:uΰžΣ IŽ6~Ɂ\4oαΜ 7ΧhΆ Ž+9’d 7ဓNΌ8ΜlΉΔ;‚d9h.;R·ώ82μ9ˆEΘFURe άταδ_Fsΰ 7π@s„ο  4φ—I‹8E>d@J8w@‘ΚoΑQWέ‚…£›θƒ /Ήπ’Κ&e¨ ‡U€ΰh/κq‚+²h;J€I4δ M8Π0b48β§γEͺ 9ѝ΄‘‰ͺ䍆.™29 D$2*‘£€–!€ΠΔ“%G₯ƒšΉα€οΌI'LήhzξIR (¨Sδ¨)fΞyθKŸ8Π9>ϊR:Gψx¦₯"e§A†œΎDyδ*IΘ8`4žš:w8@F:κ΄κͺA}K:Βέz‘"@Α«­Ύ”(›δIl±l€ Κ2K‘:P Θ;Vδ©7›f;:hpG:•z[4ό!CΉεΐ¬μ”k.Σ‘/A˜€Δ²’Γ•ΐΣχ:«B8ί;΅P"ΏΕzΒ €ρΨKρͺͺ"³ρ@ξZρΪΗΉͺ’ρ½ΰ”― οԊς­°Έ£ΚnC"ΟΝρ‚σ ΌIΝg Ϋ‚h@Α#ψ ΄Ή°έa…PDBŠΟ ƒγ<"S{[#μQb€<”λ­‡8-χ/&’ζΘn:Νaσ±―θ4©ΑI»ΚŽ€Άό±šDƒνΗw\l*ΕθD£ΑŒΐN ϊq’fn@€6PZx¨θ`j€ί§‡ΚΞΆΌnlΞ¨₯–}oͺlΆŽz¬³ΪoŸμͺ;§ΐB!άΙχ›μπ–-ΕΤp-σnKύ‘ΰp‡8Ύ³‹Θ΄Σ½Ήξ’ΌΒΐΣ›yΎϋ^/¨9=ŒΞύΗ€<ζΖθ\ˆ›σβ€γ™ΛΩά'¨ο!ƒ€{Z„D–9Έ™l|Ω2G%  sœο^}[ΧΖv!yΈν^qpΐ"ζ‘96€ €5ϋ‰ξ…0Œ‘ g8#ΐ…’ !ω ,ΘgJk H° Αƒν±cg.^½|JœH±’EφΘΠθbΎ‹ CŠΨΞ›sνΩσ8²₯KƒΰŽΨ³βΝ  °|‰‘ηΕl ς©€b`NAvϊ\Zqš‘Θάͺt]½z°2έz°‹‹z*ΒZζ@š³iΈͺ%˜‘C°a H}s!ƒ»οZΘ‹W ^ΎkBϊP/‡ Γ9¬<Σd©±AM!”‘Έi&μΩθ‘£s2ͺU3π­te¦ζžύ‘ΔƏ6  Ν[8sΈO/Ν†,Ÿ’ίJŽμ0p 9oήpηΦύ2\ο#H €Ά“9εΜ›?Gˆ’EΘFUR…,άυεΩG†«”Š›x͎X1‡¬4σΨΣ· %™p€„s€Τf9θθχ/δƒ /Ήπ’Š{ρΨ–Ÿ‚#έΡΰƒΠπ’V„sί…‚δxƒŒ""σ`4#’WβEŠE4αld€„ͺδβ 9θ 4cH<π‰8™CŽˆΝDsžŒCN€ *ά&€@’%EV‡>Wnω2L§N˜bΆt‡d€£Nš<@.ι  gH˜pψaΓlΩ2TαΛ4φ hΐψωf߁φƒŸ,ˆπE9μ%τΏ cŒrf؝0Κ cΘkŒD!o–ˆœo»}HΒΜgβ‹Ζ£’ˆΪΑhcq3ŠΔ"†7φ˜£DΊΨ£?Fδ>>°bH©$B6Yb‘)ε‹TNΘδ•S>©γ–\f˜₯CV†)¦—@‚i¦}c6Tζšl’i€šp~Χ&CoΦi§œU©'ww.”ηŸ€ς©e”„"¨Bƒ&jά’4κ(qJ:©p•ϊy)¦†’©ι¦ΕdŠ(¨Α‰J꣝Ίω馦žJiͺxzi«rΊδ¨€Zk¨° *λ€ΊΦ¬«ΓžZl½2ϊ«£Η‚Ϊ,«ΙFΊl’ΟΞ­₯ΠήΊ«­Pfh —ΥgΜ/ΖC.pM†Kœ1ΊΤ“Œ.Ώθ–ξ΅Σ7.ΐ£ Όί&ωEΘ‚z(‡…ίΓ„ λx± M4ΡA2φ–hL&}(’F]θqΠTAΡφAc‘€ρ }Β°!I=x1Ξ2ΛΡΝΙϋ’I(“ +¬‘)ΨJώ"ŒΡH­τgl,SŽBhŒS ΊσΩX'­υ„r 5Θr ]TεΕ Wp‘φΪl·Ν†(β,dΗ8h˜‘vΫxηΝΆ,8ΕBkΠE¦‘'ζ±`‚$.–W‰W`A㉳ΑF> ©ΰE5hXπψγ‰sξxγž‡žWεΖ-―‘ΓNF§„²šž„‘‰&ΠνΆΧn€%*―#„ Ba„Υ0dϋρ·'―ϋςrΐ»λT—FΛβΊΣΈG’NϋΰΓ;¨ΰΠ6OΫ4'Φ[Ώ“GΡ΅΄Jλ«Τ!: ΡQ9lΐ’žΰ D˜‡7”bt*8›Mτ"36pφ <ΖQ–ωo!J0Θa€ppΠ&qΰt* b„=κ8Δ‘Bp€£$ό„‘@@ˆ°§=νi!8"xΓF†?1Ꭰ PE OΈCFp‰ ‘PCˆΘ(ZρŠJΌ’k؎-z±$Oό’ΗHΖ2šρŒhά"ΑΑA)¦ρ‹θpγηHΗ:ΪρŽxΜ£χΘΗ>ϊρ€ € IΘBςˆL€"ΙΘF:ς‘Œ€$'IΙJZr$ζΘδBΤaFfήΠxΡΙN&ς“ζP `9"²•κΰ*t˜ς”ζ`‡* ‚p|r‘™d‡wΨς–§„w R‘™ΜΘ€JM.RPΕ1­™Ht| ω%#]‰Θ€!ω ,―4 !ω ,ΥfD H° A‚ΕŠ\Θ°‘CaΏˆύ2ζp`Β‹ +jά(πJ:bΊ" ӈ#Η“ #˜)WNWHc–,‰²ζΐ,κYωRbΜ…ΕΆ4iR…θ–*6“θ2MΕN—Ζ&ώ,¨Φ²«Λͺ0 PιFL5¨πRΞ€.\Ώ ͺMϋ‹ΰ²-WΩd•θ•㇦*Ζ~γsεJEQlϋE —Ί?˜ΐ›χΙ·+*X(yΰ[Df£Γ–  T=™4ε£+\Ψ8‡ŠG ΡβΠδ#£ŒδlH<ͺ8ΰ<<ς9θXbRβ€C:x³b‹‹…"Ȍ’ )Θ„c£@μΜγ…‹τ8Ο6σˆ(δ(™c$Aθ N8+BαF=Θ@a…Θ@• 9 <ίΐ3O@ i’AlζCF8ͺxγͺά8i’)?ϊc$@¦‰αĈ /Ήπ’Š›ρD“CΉŠ¦‚J¨§Ό@_ΓKΌrΘ_Δ„IάΘ±cΔfΚ}σu1£Η“(%FpRΟ 9]¦œIS K ^Ύ%Σe0a͟%8Ι§B…Λ_%5] ρ‰Έ’*Ό”#‰Q)Σ«S(„Jζ±˜>ώ2°μαX¬sΘ‘bGW_Έ œUhυa1΄iψΨλM89W@΄γ/Κ?”Ψ°ρšmN,X0Pa²BQ‰Tha³Ξœ=ƒώ,:ƒG%ŠQ±‘Δ 9M,Π$ΫXiλŽ ΫRοίΌƒ[’ΣργG ε[ž―žm†™_θ&d™F‘Bf€œCQ˜!ͺΦC‡’ΌΒP§FŠ{АXy‡¬΄pδΜ5άb Jτˆκ¨γ@dx£Š7w@AŠ7ή„cΞƒ Ν3Š³Ξ8ΡM#ΞBΰΠ‘Πδ’ /ͺΈΧN4B¨y ­ƒ8κ0£~Π€ /Ππ’V„c@Š…³Žδΐ£ί‘ 9Θ  27‚h€ŠΑӝ•T"IN8 ’CŽ7$ͺ’‹7δ°ψ9ιL‰dCζŽ—α@Ν’G9„ζιežv”ηŸ€fΩηIu:θUͺy(S‚.*Q@!ω ,―4 !ω ,ΥdD δςλX±ƒ*\Θ°‘Γ‡4x°XΔ‹3B”pε±_ƌ!ΤH²δΖ+ηŒιϊELΨH“0aF0Sξ›―•-_Ζά‰1‚zVΘιe €NžH²Θ§ΑΛ·dΊ>Š΄˜΄*Δ ΏpΊ€ͺΠ",‡\­6L!P…^ΚωΒυλ—a έB”+’Š»*Θl“c†‹ί‡’ΨΤΥHφl*|©ζΔ‚… ·4ά2A` –1ΈœΉσζ ϋπΡΓ‡i]Άi²dIΰjš ψYζΠκΧΈ[η†­[·ŒΣ”όd4ίͺU3πMαΆΑ;•HWbC %hΘy[ˆnΐe~ š3W’|ΒS‘’θξχG ε›?ί9†U †\ΆlΉ·H G`‚L&£‚L8χ)*4Ο„ό‰ŽB객PΈQ4HXρ2Π@ΓΰBμ8τœXζ\¨:dˆŒd„CJ8w@AŠ7Ρ4Ρ7πΜc<δΐΘ_BαΘg/Ήπ’J‡νlΡ}DΪgδ‘%™2Ό@ΓK:dX‘d8ζ=„yWb™9Ρ,ιM’Θpi€‰jξDN8ήxCŽvNͺ’‹žiΦY’w–Ψ£ uν‰(L!ω ,Υf δςλX±ƒ*\˜ ΑƒΕJ(Α!D„V,xcF!œθQΤg˜±‹~*˜_#¦ γ)T˜cΏ„ε4 LbΟ„)τ°¨Α₯¨Ρ”*e…ρ0‘‚S N+@Ν¨Ηΐ4=–²Z”U“@ΐ.|ςlX΅mίHϋmaΫ„Ω4X1ηΝ[8rζςκMhœHυ©Pa\4»δΤι5·PΊp«πξέΕ Α€l@² 2αίU,‘±@*r¨ΰA†œΔH{τπAΫGkΡ‰'"3πC‰Ώ• !gyb8dω”ψ>’ά†7―οJ -ί$HWΟΗ=9Χ [kG²(ΠLΘ2"…LzxδPάΤƒ†ΔΚ;dΝ ΉŸ4©pw@AJqQ—2ΌδΒ‹*ρ΅ gΖU‡ 4Ό€C†ΤA(9ѐƒΜƒΠ ƒ`4ϊ}DN8u}ηΝ‚ͺδβ 9θ€ž'†ψ"R"!ω ,Φl (LΨ/ƒ*4(‹0, œHq’C"*΄ Ρ‚Ž)z#P“M–L–LIQ–¬Pz¦M“V±¦PϞEŠŽœ:s6)‚ƒ’-š·žζ’Ϊ7PƒpήxϊjΣΫD+ζΌ%—”κDuδͺ0 Β 8£=%«’-rh§z₯Θƒ‡ »o΅" κ£―>ήΖUgσΗ%6Ϋ@σνά‰JGΆqD š¬k Ρ|ZΎΟŸ „­©9%$АΚD YΟŠΘ @qΪ+οAƒφΆ2αH…»…”QrΰΠU ηΩ―\ΌT͎-(σ|ΘxAγ•ŽŒζα %„kOhΘ²Gγm“\8­δΘy‹*—7rΚΫtώώښ£!ω ,―4 !ω ,―4 !ω ,Γ.X¦ H° #*AžΑ‡#J”ˆPaB†'ΜΆbŽΗsΐ3§±€ΙˆA~Iς$Η1ZΖΘ²άΙ›8 <1&Νκpr€Bτ„Ρr*-Ω…Q£DηPΧδP*Z4HP#ι―;xH@6Α *R©ήΌ #` Kw !=`θEp"ŠTsUK²ε%ξ―Γ~%^\g‰(Z`πΥ’6°Ζ«Z&ƒ)P¬s1ž?7.ΩΩ–ˆΘ’ϋV^{€ΐ ",6ϊ«±Z(\Η¦πš‚Ί . d{ CΆl‰­΄˜/_υ`˜-NtΰΐU7α‹¬ηΜm3>ƒiΒ•ͺc\ νΞαs›?l`νΥ<λ{cύ)Φ]Λ hΰ8ύrL6θΰƒF(α„Vhα…f¨α†vθα‡ †(βˆ$–hβ‰(¦¨βŠ,Άθβ‹0Ζ(γŒ4Φhγ8ζ¨γŽ<φθγ@)δDβ 1Ώ3ߍG&ω‹1ΥTc€4Ξ§ 1ΥlsN2ΫT£KσeYŽ*w ‘A3Ό!#&œ °<ͺˆŒͺp€ΐα@Κ-d@,WGaνΠp@~΅|CFΫHδ6α€+TγΫΈΎπՁ\`’°ΐ$5ΙΙMz’“ š$Ύ.0L_ά*W©JMΰCυXΗ:Ξ±ŽrΘr–먇Ξa]β2–΄τe0q ’|σ˜Θ4f’ΙΜ|,³™ΗΜ‘2•‰£€!ω ,―4 !ω ,Ε.U’ Hp ΉƒζΐHΑ (ΐCW°’Ε‹3jάh‘Ήl+Ξ9η<Ž(Sͺάθ€-cbŽ)Ή²¦Ν•-WPΩy’η˜ :T(Ρ£F“]Š”©›sξ„Ρ A‚@- ¬`@«@^ €έΪ•lΨ±_»r…JP*ΐ”-[DvΊ… # έΌPqή‹ΰ„0ŒiLqή–G AαΐCaΗkVΩ\Άlz0„‘eΛΦζΣ=’η.8@ΦΘςεΛ1κΫU―τ@Ξ/ΫΈƒ[τ¨ΞίΒ“ηFΘΫ7pεΚͺkώΊυާχ~=zvκΟ»ί–^|rςΫΓ›ίŒήωϊΰνΉΏG_ύόΗίΣί§Ÿίύ~φύΙχί`Ϊ7 MυΈX‚ βgŽvώ5ΘƒBEa…ˆ‘…n˜αƒεyXΣ…"’Db‰,uˆ’‰*˜"ˆϊΉ˜Z‹2btbQшcŽ0FΈγp:ώhPBbΧ£€Ey€?ήX€“BBΩ$‘QR9ε’Iς!’YJΉ£—8&XŒΕ”Yf•Kš©&™WniŒškΆ ^1ΖόVη›gθyΗύBŒ1Ί$SM5 sš†<Ζ7±Έ'„ΈT³Ν:Ιl“̝oB‡¨’Œ6ϊ➈Θaΐ7ͺδ„Ιπβ§0pΆκκ«°Ύšθ’ž~ŠP8Έ”s‡ τϊΓ:­θ" ž±k¬¬œ”ž…#G'­πΪ«ΙΔBΜoΗf«m1³vjŽ£‘cN8‰d J+½j@Š.±4Άν»Εv[«F‘CŽ*+¬ΰ <βŠ*„,±π\Œ/I€ ΒϋА/8κΜHN8α¨sJ`ΤPC½€β†±¬j°ΑΆˆ0ίp† €Γ"9ސγF$·άPΓ `ΌI=±θ‚‹0@-τΠDm4ΡΆ˜ 5ΐ0’.ΟN4κπšΚ)qΝEA,Š$’$_‡ φΨb—MφΩf§έ 0ΐpCaQΜQΐ·)N*  ‘  1X0A„nΈα`€ΑαŒ7ξx$@\'P!·J0pGΊ€rFΖH!zRLQΖ¦£~ΊιR,ΡAͺǞϊμ«Χ.ϋ΄-—–€y4υ(‘ nάr bί$ΏMςΜ7Ο|8:hΐΗ7Ϋ,οόυΨ7? QtΕNrGŒR8Π@£w/‚BSFͺε€ή,Nψχ.ώFv{7€ΘT‘ʐƒ"@j”‡wΨοˆ -”Ψ-£Ψ)zΡ [άβ3·¨‡<Β 8 Œk>ΓΒl|p™˜7ŒςE#ή`aGxtwˆZ^V㙆1 ‡7({©γ€τς2ΰd΄‰§Α" @.r!θp>–₯Άx/΄ˆ¦ƒδd€bυ‚hhΉβΑΈ@AsTΈ4ΰUeά“"pDξ±^*ΐ(H#™°#ι '©$7€€U’Žζx‡ ˆ#ͺ˜_8NiI(8`β`γ•Π!? Dƒ§l”θŽM&‰„T„†+ω 4Q—hšbyΜΊΑdH4Γ„4:`΄ΜΞ½ ŽmrΣήΈc.Β‰@ ‘&šΌIC²‹T‚™IŽHn’˜Α²Ÿψ%ϊ ¨¨eD:lΰ€†•U7Πϊ$­B•e§*@Ώ’ ΜC<όʎj¦μTGJ΅ΙNd˜~=MσP4@§EUΗ°ιΥ=65YEͺ_;TU¨CžIΒ'#ΫΩpD’π [01ΉΩz“<ψ$<”Ί"tŒ’”]τ+:pΐPΫΎ†Τ@Ε²zΧ@ v§εkύόڎΐ.σΈΌ0ΐ ―ϋΘ”žΦ―9e,-Ωρ17χ•–§_ίH†σ²~X'j‹€Ž@ tΝ’U ΐ‰rŒVΠAυFK`„e΄ηX‡<Ϊ€!ω ,·.c’ ¬A‘ Α#Ω (\Θ°aCs#J„θ°’Ε‹3:< hŽGcVd§±βΔ“%Sͺ\Y`Ξ-cb†|V¦Ν›8sκ¬Ή²§O‹-©Pq’¨ˆ.f€IΊT)Σ§N£6jΖΐR«U―jΝΚ«Χ­_»¦I”J‚³ 1‘|W³Ž*h ϊοΔ’‹o˜gž7Φ8 £Λ+Π΄"ΊθnPwΪ©Ο§yΠ–νχ&Θδ2»*ΌΌ‚vξξήτΫΔ­K,œπ’Kθκ‚;ςα)Ÿβ†¬³υ―o’‹*w$γ άΒ`OŸφ­D`Κͺ|ο7τΌΨcΊακ―ΏzCίpC5‘kΕχŠρΌM4£Φ;^ώΐ£=N¬‘’SAόt·W˜nΧ[ w”Χ?ΞNΤEί G Τiπ;άD50;Έ‘Ϋ¨[έLxBοhn °B44`ƒ;‚4kΘ_$"ψ€¬C¨C!™ƒ ΐьlδ"ŠΘ—ΑΪB`<γ‘€(@ζp†@Ό‘a+LQΦΨρŽxΜ£χˆšZ˜@Œ0¨Α ΞP‡ 1. d ΞB‚Lΰ‘¨$'IΙJZ’-–Μ€&7ΉI xΰ,‹9AζP€…΄D ZΈ©–ΊΔΕ•w%]䁡Θς–―Μe,u9ΛΆtΰ“ XŒ¨@JS&† ZˆB2=0 ilγ™ΠŒ¦4§IMM8 ΤΜ¦6·ΉΝi|4 J1R–d&SΟψΖ7Κ±NuΊσπŒη;€@°³ςΜ§>χ Οi˜€ Q¨8KIΞc E( Ɂ α@γθИΤ^tžτ €|’nAκx΄"AΠ"ΰu¨ΓhBΟ@–Rΰπ0:ΐ‘τΨT?‡O:TR°CbNR;lJΤ„@4‰RiJ’ϋ CP9" T'ιηͺJeΗB€ ±ƒ ΘC<&ς%“vυ¨9εQ4ŠŒvœ”iΜz :+Œ₯q}Ν;€€Qˆƒ¬y•k. ”vξτίΝΫGν^ώΛδε·ήόa' |ςΧJtτQ– ‚κ!ψ bψ5Hά„‰υ7 †yh!‡ψ!ˆ.x`}$šε‘)*U!‹-"₯‘„1^΅β†5&υ"Ž9ζ4#Š=ϊ8ŒA’΄#Eήτ£ƒI !M)"‘Q^΄δ…U9$Ybt$”]Ziβˆašt#’eZτ%“iz9&•m>t&˜qF΄&–uχ&—yΚΉ%š}Κ9%Ÿpe‘z>Ι&’‚*Š'£†ξ (’s. ©‘ƒNZθ‘—Zχ'›f j œv©£¦ tgͺ‘2gž•>Κθͺ©–Ϊi¬¬jͺ­—βZ«¨–BΚ«°Ÿ;+°²R*ι¨}ϊΊ+²Ω^²I–*νpΜφθ+Άš6Ή*·Σ–y%Έ―ζ+Ή„y'ΊΆ9.»qžYš1ΏcmάΊ;%½τ#L5Υƒo·ήšhŒ1Δ3Μ6λ$³M5ak΅Υ&gL5Ϋ”£J;Π /Ώ,±ΎΎ1μ† h`ΐΘι2πΔΖV`,ΝΈ’²Κn$ 1!—$~Ίl‚L+* )ΊΔ"\»=šfΘi|C’@δ”SoΊΌ"΄*(«ΣŠΛιbθ4ΤR“Ž7䜣 ΊΤ‹ΠάM,ΊΓξέxη­7Ά£!’Αί„dŽCΩ‘‹―tςXlΒΛ:ΌΌςΐ{Wnyε}€ &¬°< <*t Κ- `ΛΫIƒMωε°Η>œ/IΤQaά H$€γΠ‘rs$§φKλ<Ώ.ϋς±Ϋ"‚ZpC©C5§άq3‘΄βŠ)Έ€>.δ—oώωθ§―ώϊμ·ΟΎ'DΟΥ Τ`½δ¬p 7kΰFk˜ΐ"P π€L ¨@Z  Œ '(Α vΐ]ιΚ 28„ƒ ·Π€ά@Šl€(ˆbΠ‚ ΄π….Œ! g(ΓΖΰΈ€hΘΓφπ‡>¬‘<ΰ”h s(€υΘα@DΰHΕ#ήΘbίΨ³ψ .bρ‹^ #΅Έ'8 bLγΥΘΖ5q%p‹[x’Δϋyγ ‘†:Έΰ] δ7ΚΡEBrˆ<€"yŒ”c‘L€$#IΙIvq&xΙ`2‡ά+ ΐ"J„Δ,θP¬`tt°8šYAfIΛΐ!«ΉE6nΑK]nζ,κ@*WΎ7Ήμ%/wYͺακˆ<ΨŽΌ ΗB¨£ŽvΨγυ€G=ԁŽvLD7‰ΙΠ u³9θ  Šϋ±κ!ͺp€ Θ15V±Γ ΈC:ΠaΟ{†Cΰ…υή™ͺMΐ­d¨©Τα"ν:Όα@γ½:0(Έσž01P”:δšπΖ6]ŠŽ<8€ Ϋ )£β‚Ύ£i. T2 whK]Š? 8 ι0*£H€Γ•LEŒJ΅Pή@(2°ϊΥ<ΤGhΗΰʚ§vXa₯3u)4“2•π9 ΚͺtΠ›p:˜j^`3„ˆ:έW”’cžͺh_Y₯ ¨«„h@ΚΦ<΄°“eU%€–oU„; Ž~”°κP₯LΛTupΑΔ ­Faκ Μ’”κd'D™ϊ@‰5ΐPUέšΚ θ`™ϊY^tΆOTύ1³ΊΥ‹&–£€4 ‹ @aΌYU)K―[§k:ΐΎco›a2•©ρ‚OΙ1]—ΦXLΔπ0!ω ,―4 !ω ,―4 !ω ,.}Ϋ d[A‘ A+ΐ‘3ΐ°!Cs#JtH±’Ε‹3jάΘ1c6sBŠT £Δ“;ͺ\Ι²eǏc΄Œ™9f΁r8sκάΉΣ₯ϟ@9~€Bτ„Ρ€1£”ι¦PŸ¦ J΅jΠ‘TN$ΨZγ€…―_+€ ;Φ‚X +0Dk@­Άnαe—ξάΆwλβ}k—ο^Ή~υΎQ `( ZΜΈ±cΗV#K6$”0†£Τ9π«³ηΟ Cψ%Ή΄O £`ΔzΓ°0ŠΙžM»ΆνΫΈsλήΝ»·ξ—+a° °cΎi›^ΞRΆΖπΜ —νΩ liOn›Ήw ](’η.[Ά,8Ιςε 9χΩίγsτΥ­Έlΰ€;'e$aΓσ|ςxΡqƈwQ 蜁Vτ Cκ,θŸ0F¨‘E 6T‘E b8ΰ†$^τaE!fXβŠZΨΰˆ,²x"E)Βc‰3:Tγ{7˜cC;rΧ#Ž.ŠΘγώΘPΙ!™d‘*: ‘’0ι›”RieoXN ₯]Ζ§ε…Q†ωݘ/iζ™_ͺΉ&sh)δ›ήΕY&₯Ω &ž’ιι&Ÿ‘ω9' }Ά9(‘V Ϊ$’Ί(£U)z%€‘::)₯AIΚ%¦™ZΊ)§?iΚ¨@‰Ί©‘z:*ͺ.™ϊ«-Ήš¬±ͺz*­+ɊΉΪϊ*―ιz° Ϋ±[²Ιϊ:+³)«΄IK ΅Y;!Άi[ ·Ω:»+ΈέŠ;,Ήš{,Ί yΛn‹ ’Ή'ΉξΎk@½οβΛΎθςK―ΊΛΪλ/Έs[0ΆS›0΄ 3Ϋ0²1°σZ1Ӛ1¬³Ϊ1ͺ“2¨#sZ2¦'SŠο·C °r»~λrΌiΞ& 1ΏcŒ€JάζΝ9bL5ΥΓsΟΉ³.ΔT³Ν9ΙlS.&M3†;;]Ž*w ‘A3Ό}τ§‰σ6λΈ‘‚lοPN+ΊŒ½ͺΟW£K,ΝΈΒ6Ϋw$ 1B_J7ŠώύRΜ/Ίl‚L+kk@ΚέΒΘύ+«²ςΐTκθG£ΫCŒ.―(Š *„χΌœV~ω7™k䱬³ ΣwsΒK+n@σJάMΚL*m–§ΑzJ›7γF+³#:2λπς 1‘#ϊlΑ―_6GP°Β|³6ς΄Η² 1§Kξΰωθ§?›ηΔ}ΰ"¬:θ R up²w+αΰB .wΣ…ΨΤGΐ:Θ&˜ΐPƒΜAHG…`2†0"{S*’‡8œ γƒ ‘GHΒšπ„(L‘ ?X Μ5€Ακ`€…Δ27Έ 2θ†u$γ@ ’‡HΔ"ρˆHL’—XDWˆ@ ‡Aΐ Tc€λY& §Πΐά@Šo΄B¨@&@Ζ2šρŒhL#Ώr ¨ρpŒ£ΥΨlRΤ‚JΒ¬DβΠG*ξl #H€"ΙΘF:ς‘#xΐ,ΙJZς’˜T$ ,€Gά€ Q˜oH”HΜ! o|A΄olγ°Œ₯,gIΛZΪ’ HΔ+wιΚ^ςς—Ύ &0‡)ΜbΎ•ΣHA–’ˆŠΞΤΒk6Žpƒ‘J\Χ’x(ͺˆΗ½ΤAΞršσœθL§:Χ™Ξ† „(π€‚(?4ΨσžΑζFˆr8ΐή¨ΘIb„=„Τ "y²1†šBT@ŽM„Eγ‘ΞB7Ϊ‡°ƒ6TH#4 XA :>ʏΪpHιΘςΰŽ—nΣ^,QP ˆ6d 8m ΐ‹l¦„›A݈7ώ‡5©AG.°ƒ‘ͺ*A&@†tότ’Xε;ξΰ€@ΜΓ¦` kFΪa‚6L«Z£₯ Γ«ULι\9 h­rέkET€#΄c!WlF7Δυ©Š΅ˆ ˆw<$°‘uΐΔb6³ ‡ΠΌκ΄‘(E+YΤ6d&eνgAϋŽEΜ΄¦³-:vϊ p€£΅eΘP‹jΪΣΧKu@S{άNυμ(ns’UΦΠΈΣEΗfΦa7Έιhλ[ΡρέζŽδ-opϋͺŠζ΄„=;ή›Yt0Φ Μξ;&[YϊFV›U…w§KΡ σU―kUKFΆ€Vξqc €;€ƒΌξΦN{ͺΰΰ5ζg†“gXͺπA‡][έ*b8Γ +w[c†°Υ­pEκtΥQWτκxΊμuoίωΉ!χ]1jΛα$BŸG6 `ŠmD™"Θ@–·¬ε.sωΛ^Nj–듁·”yΜh>³šΝ Υs¬Γ\!nv³ά\uΠωΝwΎσ•χΜη>ϋωΟ€΄ MθBϊЈN΄’ΝθF;ϊѐŽ΄€'MιJ[ϊ˜Ξ΄¦7ΝιN{ϊΣ ΅¨GMκR›ϊΤ¨N΅½κqVοω΄ !ω ,―4 !ω ,―4 !ω ,Ÿˆ  Hp`1Ε&,Θ!B… 6±βΒ‰-Zl¨QγĎ Λς Ca%/2„„2₯Ι‚,]^\ρF ˆ›Ά„σh„ [uj€#ˆBˎ=³Q£Β’JZ°Ξ-(Ο΄8=πͺλ+Œ¬j°² L ͺhUΕΨg`(pA¬ ^*T€°bλΝ°mΫ |ΓΨ6― +Ο’y g@έΔ9βεPΑ2ή“›˜ ™==B‡&CNq8rŽ †C–οΗ―•Ψ@σΞtΓpΠς)QrD6onΒifΈ:ί$HŽηΞΗ<ΉΝͺY_θ&d™F‘Bvš8k(nκA^Cbε²fΠΊ{ΟG&©pw ΚΜx"ξ|Θxεβ₯ |»hυέ–[~Ππ’Vΰ C₯‘Γ €Π “_4ιaDŽpα„Ž7ό©’‹7δ 9ΰπnΝDX ˆQ@!ω ,’2xw ˜Α@Aƒ*LΘ‘Γ…Bœ(±bΔ‹1:Ψ` Ηuhdi$I“%G¦<©₯Λ–0YΚ\IσεL›5cζdiΙ“‡@ž™S άΊuηΔMΊT)R§LŸ6*΅jΤ«P³RΕΊU«U­LΕM3aΰLЁZ¨Μ1―­Ϋ·pγʝK·έ»xνf[A…ΚفζLΈ°αΓnΑ1ψc;tSM— ±ε˘ Η{— œ§Ώ¦ι—Ή΄ιΣϊμg邁ΙΩΪ lUο΄νΫ™5I¨ςμsΈƒ Ο[Οξ ΄‡+_Wζ>ΆZΗΌϊrγΠ₯ΧΆΞ7vΡ=NοNώτχπ³·—_oωΌtκμγv/^½όϋwιΟ†Ώ?]ύ%ηί€qhΐx&Ψ–*H ƒό9θƒφIˆ„Ha†‡^€rί†"ή‡a‰ς‘ˆ"{'ΈžŠ.’ΧbŒέΑH£u3ήX:^ηα{=rΗcΒεHd‘?Φw$sF.yېNš—δ~Qe•™5‰e–SXα–₯i f{]ψε˜—‰‰ζ|e6Έ&fjΎ9Ψ•rΞΩfˆu²™’y’Ή'•}"Fg uΕIθ\ƒ*—‘ŠΒ•h£o1 ι‚mž9ι’w^ŠΧ£—J:)§Ÿfͺ©] Bκ©©•ŽJͺ¨ͺ"šj«ώ "¬±‚§­˜Κz žΈ–Ϊθ©ΏΎŠk€¬K©n ¬’Ύ2[¬²Β›Ο²‡6[ν³ΓZK(΅ΫF -²Όͺm ά’λmΆΨφzΊΰJλΦΈ}‚+TF«>βP°Β_­Ε­ŠΰοYZ¬U@='¬πΒ 7μπΓG,ρΔlΐά πιx€…@Ν„,ςΘ$—lςΙ(§¬ςΚ,«l _~ύu Ad`AΝ8Ϋ¬sΞ<ομsΟ5gόl4ΠG'τ:τQΜFΓοΤTWmυΥX[ντΤ·dν5Pε|τc—MφΩf§φΪj·ΝφΪ}`υΩxταΧ^›£χή|χ›νχί€xΦ9¨0ΤΌα­ψβŒσ ½ ¬ωY9πΠψε˜g~χYJ τCηδx“ωθ€_mŽogΩΠyη69₯Η.ϋΧG ±ΨμΈηnu ” ‘ˆ£T’ŠξΔo@<άn4Ζ7―»¨‚ΈσΤγŽ|υ؏Nφάwούχή€ΞχδηMκȈ^ώϊTΓ쨳/?PθΔ??ϋ!ω ,£ΗII 7œA‚*\Θ°‘Γ‡ 4Έp’Epθ jάΘ1αΕ‰ d#©€IRΩu\ΙRαH“'S Œtk•ΝU·X=ΚΦ²ηJš7qκδi]€^¬p†²ͺΡ4ε|J}Έ‰©­[‘V %§ΞhΝUΆd‰ΥσtͺΩ…<‰•JΦ©U;ΉEΊJ‹x1X0`‘ΒήΎύς xπ^ T૘ρ⽏{ψ€—…žS§βz*DΌ)0T˜Paτ§QŸ6­ΊuκΥ©YΛ~=a2^Ϙ={·ig‘Bιϋ«ΈργΘ“+_Ξά8.=ž‚‡`ρV³ΧU§X€ΗΦ―aƊ‰OΎΌωσθΣφ(x(!rο.Jκ‘ύ !ττιcλXϊhž0μ†gφU’MHδ4Ξψ2Μ0ώ hα…ζ3α„ (πMƒ!•:κ4ax¦¨β„Η(`@‰©(γŒΕ¬DγڈγŽιΘγεωδBωc‘Fξˆd’7.ΙδŒN>©b”RbHe•^‰e€ZnΩcG^Ψe˜ηIf`ž™’™jŠΗf›oͺη™s’Yg˜wz™η–{bΩg•J蓃2Yh’‡™(‘iΆ™e£Žr i€_rD©€‹™ι‘“^Zf§ž’ii¨ιmΚ£©J‚Jͺ›ͺ ‘D,ž1΄’J«1ΔE MτΐΎHXk¨΄»ΐ τR$HP‰•ψ"Μ0‘ΦΘ³„πH$(©dP«ΰ ΰ…Z‰{ΈΑEΤ\ΨyŠ'Γ5'οΌτέ»πU— 9›ΥΤYžΐ+ .ΈόR0Α¬pΒ #μπΒ7Όπp§»AιΕJvwέ₯—a &2a$frΘ%W0YΗΤeφ Wϋ† )ˆ‚Œep_:'dAψΝσΞ?-tΡ MF™aΨ—:Σ΅Š{deuBUΉgKnϋsPN?£ΞΨd—mφΩh§­6ف‹Σ]§CJ%φΥύˆ‚μ\m:rΫ)]7&2 Τ`ƒιSxήzO₯ŽAεΞΰ†΅:”‡˜ψή ρŽ·!!ω ,Ÿ’3g PXa  Αƒ*\ΘΠΰŠ9sn4œH±bΑ1cnH˜y3εȞ1wΠ+bιЌšrλΧ°c˞M»ΆνΫΈsλήΝ»·οίΐƒ NΌΈργΘ“+_ΞΌΉσηΠ£KŸN½ΊυλΨ³kίΞ½{rcΖvƒΧmLΧ0bΊΒΫ.o=±_κg‹•―2]ογΓφ‹Ύ•pΊΰŸlεΡ§α4 ~­CL+ω¨p 7ξ ψͺ ‘ηά—ίkΖΜ‘†*AN€Ά¦ }<¨ΠbdΨ' ƒ—ӟ=?ψ £Ž&’h‘g!χΓJΨ`€hȘ’g+棄8<‰ΓHšƒx4f#„HqD—Πδ#f>υ ƒ%ζσε"‰.Š4’Ι+ΊεbMBαΖ:Ν@Ε9­Π©‹0v†Άe>nRΝP¨rߏ‘™O2­p‹*VΈqŽ.πέωXωθΒ‰.­”CΖ Άž.Ϋ΄ ΝΔ)Ν+Ζ@ΊΩͺΏΤi©œτΚιx€ΥŠε€ΊΌKαyj–Ι€Ÿ²!ω ,―4 !ω ,.}β ˜H°ΰ@*\Θ°‘Γ‡#JœψΠ Es/€Θ±£Η j$(’`Ή“(Cͺ\Ι²#J”θΠ‘Μ8°œ4fΰ4°³§ž?}*΄hΠ£D‘MΚt©S€rβL³&\Ί™ΕXΨΊ‘… Ύ†+Ά,Ω³cӚU‹v­ΫΆpΩΚ}ΛΦ‚ [3D˜gցκ€,(£©°Kš"VœψpγŎKŽL²εǘ'_֜ΉrgΘ ž"`Ν7™ 6UnΈuΞ½Ž=[6lΫ΄oΧή­»wξίΈƒσ>\Έoγ ΧΩ.gιιΏ·ͺW/_ΛλΨ³ηΫžΟ’„ηU/h΅n{φσθ?rΟ§ Bšoiš“^έzϊϋψr―ηύ}xρδ™—ί€g€ώm” 6Έ%A›ƒ’gŸHfH‘wvθα‡ žΧ^ˆ$–hβ‰(¦¨βŠŽΘβ‹0Ζ(γŒ4Φ¨’‹6ζ¨γŽ<φθcv8ώ(δDi€ŠA©δ’L6ι€GI>)ε”TVΙc”Vf©ε–\jˆe—`†)ζ˜}Iζ™h¦Ι₯™jΆιζ›E² ηœtΦ £œvζ©ηžβΙηŸ€Ϊ’Ÿ‚jθ‘ Šθ’Œώ©h£Fϊζ£’Vji˜”^ͺι¦SfΚι§ Ζ a¨€–ϊ€§¦¦ͺ*‹XXή…gΧ|Ρ' š²"HλAζSšΤQg‰{»–έ™ΣL3Ι@Σμ³ΞF ν΄VKν΅Φf‹νΆΪvΛ-΅†« jLPXα₯ξWμλn»πΎ«ξBςΖko½ψή«/^c}΅ΐi”3ξ@οΰ fΒ/ρ‹ΐKΞ7W\α7 mc€ΖoμqΗ ,rΘ$<ς7Ϋ Œς6' : $€˜HA #Cς{§θ<ηD?}υLπa€}α—ž θ&šsΐcŒq`Œα-%ώr@cj0-˜Eκ8€ ζ0‡ "E1&ψ‘ ώ ¬Αζ‚χyoαX ˜ΐΖ Q1D  €€‘γ˜W"uΔƒβP~! ͺΠΒ†, @€«ΐƒ†Ή›‰1|h’ ƒ†s›§HΕ*ZρŠXΜβ’˜h(. Κ‰N,Α¨1’‘Of#ΣΖ=±Qyz#λ$Η9©Žgœνθ¦=ς±M~Μ# ΩΖ>ΕΈ£©ΗEρΔ£IΎ±’a£1ˆΑHER0‘)†1~‘ ]γ) ”1tQf˜•€₯.ςA]Ό2•{Zε+ςar γ–|:1v©/Γΐά“.v©XαΏΤ.σ4L{4SΖ,ε)§I§eζγš* ƒ/“I'aξ’*ȁ x N[nΣNήΜAζ鐑Ώ|ηœΜ™ό@ 6ψ§ ΠPKS ƒ›GΒ› π_ψ‚Γ0B" o* Ł€†r”2…}1ˆαΠ@@n|[Ρί.[Ψ’Ύΰ?€šλ©Η1Œ‡8Τ₯,}Fΰ"Ι€…ŠC-–Ho4”@‚"‘ˆFd"Ί8¨GVA©•{\ŠD>hau †0šΊK(ΈΝ€‹WΌ•=uˆ0ώWΦu/E» _` ‚Zt¦ΘΆ‰mΐ €¨θJ -D‘}TPžχ‹€ήy!ΏΐEh 0Ϊβ‚΄ˆΝG3L‘‰W΄Β­;mHώ7XΜΟΪNEί£Bψ€G=d ›0ΐH° 2Xa$¨@H,p=φΩφ}DυPnO ½ρ] , .0p ` ΘΰΕ+0–Ω/'πλςP$?ϊΥο½"x†4^G‘mTc«†.T‘ŠXΰW%;Cύ<ΫΉ#E \ l`s\."!‡9$LŽp@ސ0€&?/x Ž;0{AΒSΐq,!‡ŠW2›ψΔ ;|ΓxΔ£fθ`Ηƒ?˜ͺγ@ž;ΨέζΝ$~©Α ‰!ω ,£–n| H° ΑƒΘ` ƒ…#JœH±"Ε .XάΘ±£ΗˆΫ hΐ΅ν[Ι“&S’\©²%Λ—.c’όHΣ9+0‰£Ι’ΉžΝ‘Sΐ 9u@“*ύhΞ\.*Ψ-JubSs kW΅«ΧWΡY€)Ί―h§^UȁQ€iγmͺξ© Ήxy†%—YΊΌ€-^mj`l%xKlNQ£RK>ΘΨ)ΤΘ“3ƒeΜ΄£š538φΈΏ‘'ΘΦ-θΤ’GΧ… ΆβΥ;o=k;0nΧξw΄ΗEίό[ ]ΜΛγϝυσπθ^›7{φιΗυžΆ2ΑΩ*x“ώ³ :ένΤ―_ͺ} axςηΟ­/°­εϊΡw•ντΞs Θ_gΠ$¨”y•Ά“ƒϋ†xnPX‘…ΝΖƒ†=ρ7ƒ 25 Dχ•”ˆω§βŠ'"t ΎΈx‘hcE,$αŽΕ†@Z…c‡OΥX€O=ŽXέ’apπ\εfFδβ•” ‘‡\vIX…σd˜A(яh €¦–EYι[e^z$%B³υ@gμΡΉ!™™ιٞ€~Eh– N6‹6ͺ¨›|’H%:{J€(£˜* N‡zΠ’Ω„**£z §μj騣njd§°ήBAΠJλ ΩP +‘3φ «ŸΙjk­ΰšŸB»ΚNsPαμ³Έ‚“μžδ ͺ-Ϋμ³ΞFΛι΄•‘Γ,·QP!Β4ί|SNΊμΆλξ»ι>α@&λΒko»ε0[.ϋ‚@κ«ΰ26.ΏQlΒ4l£πΒ 7μπΒrhΰΖΓ?\@G1†³ώΊΊXΐ•  $ΰCXPAΚ*³ΌrΚ/· sΚt0Λ8Ο¬sΛΤP20pόo” ‡Ό-$›άALΐtΣO;έ΄ΤPOύ΄SW­5Υ\WPΑ>#@·C]τUΜ1Ζ5 Ζ&Ψ"Λ/tΧmχέxη­χήvPΗ` pΓΪ{Ά:’v 7Ό-B(@#ωδ”Wnωδ~Ώ]C sΜQψE―@Αθ°(ψ2Υε¬W.‚§³πΑθΈΒ°:ρ¬SΝ ό"Œ0T΅.|1Ζ σ .( Ž:Π vΆ9ηx3ΒSΥπ­W/Œ.p ΧσΡ'oŒυΑcΟϊοάs@Ξ±<‚οMχΏΏΊωηγ"€ϊμrψ Œ=ύ—ΫήτΦg’³…ρϋ+' ϋα―€EγŸΚ·@Κ πvrόδ·” 2ЁΜ ίΧ?*ΕƒΤΕσ°ύ½&L 'Χΐϋ…Πv._ #7Γb\π†yτ^˜@ ’°†Δaΐ$ΈΓžτΠ‡*Lb5C„,όΨuhEώ0‹f‹ ›Θ“'"ˆ Ϋb »XΑ/B0‡U4’±ψΖ%’p‚σ›‘E(Ζ ²qg#“ΤˆΗφpJΧ‹˜Η+ΪPΘΰεΨΖ(’Ρy[Œc#ηψΘ:*ςŽd€‰- Ι„q‘‘όˆιΘΗNr“•\‘'§…Κ?0³LmI?DN1“Œ4€Y™HZ‚’—ζσeϋ¨Ia:RŠΛte!OxHRζrW΅€$ ‰ωΛ>Ύ™^΄f+νθG‰L"«μδ8?©Γb˜3•₯,ΧiΜ JN!ΖψE2|AŒ`&$ΠΔ€7Η7Ή„Cυh†.ϊ Oy΄}ΐ4ε’O]ΨƒΊX¨υB ΠKBt hAϊŠ|XΘΠΕ/ˆΌVsžΕΤε+gc£€πF5j€&v΄”9%(/W]”T*8iJWΪRƒ8Τ£ϊ#' YG›Ϊ©*πB:2JŒ:υάŒ&9KΨΊ5XUPͺs>¨bbfό„g›–”*ȁ x@†o(T1όι5aΕΔαΰ¬9θ|`ƒ¬u©…|«X#JW»ζγ?P‚ 2k4”CȘkH+P‘Ά“gU‚fUkΥE‘}’δ”©Εηi*x€/|1 _΄Ξ²G@Bp|·υ8†$7ZƒΎ¨En%§ΈΪ6TΟΐ@la‹έ6· ‡-ipˆ#`‚hD&^ΡVΩξΦΘΐž*…ρyΒ:ΐλ PΨβ»”;+ά°h α€­ˆΕ+z*Q/p¨Υ~‹•«¨L[ΞBš³D` –^Ξ¦±ΘΆ± oά ͺ ΖBEkFΏQadc£‚·Z2q Q€jΑ7\˜"Δ0E'^ъ$άαΊΐί–Œ·€! Z@ZΉ>WΫ³ LΚQψ€,p‘δ.{ΩΗυΐ…&pΡ‰o Ϋΰ2—ηe6»yΞΝpn³ί ¦a—mΟ»rN–3™₯  Y"TlŠ@ϋ9fˆξs’Αφ³SΟ•‚ΥΐNP2₯]ΐΐ΄¦3 Δ ΣΈ@Ί`† ˆzΣ¨ζtͺWιžUϊB³/€ί”΄­νΦcΑ3€Q―{•$]ΥHF3ͺq―bϋbgΐυpε Gͺ ˆS\η:·μ;+κ 9 r¨‰$nΪԞqZD7ΊrS Ω¨n^Θmn ΰ @iΑ;βρvΜ[έ€‘7;px£ymβ:ΰ!ω ,»–X€ H° A :\Θ°‘Γ‡#:aΓ‰3jά8p›3Δ|30²$Ι“&S’\©²%Λ—&9|‡Μ€dζrκάΙ³§ΟŸ@ƒκ”i0hΜ]ΚT£9dπR§©Υ« Ν%Σ*Φ―VsB•J¬Y’ζΠ₯3€ΜΪ³pŠ:5݈9ΥnEw·οÜΠΰε·°Α[ +¨s,αΕ†s¦Kw§-9Ύύζ <8³ζ•½¨ΓμξNtδJη΅τYžwX)λΪτ樫kΏ>{Άξέ’‘iϋχםκΜυnmόκNΡp7ΗϊάΊ<¬€›ΆΊpβ—Ή/νY;”v€ΕΛδ }xπκΧ₯jώmόμFͺλ}όCYwP€χFΥ©γ ώˆ`NεA ƒU'‚ό±C‘D $!>‘@ρ,€*!β5"A|)fΰ@bŒ u(P‹Gΐc ŽŒΝh†ς#):<ΒƒdA:Ή`‘Gβ%;”€D)β€δ$ΗmAΩJ»·Ω¬pΐΊμRp<άς”, ΜΖKΊμλ“θ‚@ΕΏΟQ@Ό>aΈβ:KΏ+°@ύώΕΔQΜqΐ7Ϋd¬ρΖw¬q$‚1Ζ—¬ρ4&P…ΓΤιl6 Γ€ΐΜ5PΐΑΝ8η¬σΞ8o°ΐ(ΐσΠ;ΑΜΐΐ2ΔΦΒό/ΤpΐTWmυΥXWm`υΧYwπ ΜΌ΄ΛΎ:MΕΜZΐ`±.Έΐ-wάtΟmwέΈΌ‚·έά}w("P!3ZPρ0™BΑ<Ζ7 Ζu Μδ”Wnωε–€ΉζšcNω/ΒΨ"‚cΤ€ΐβ‚ΠΪΛ Μ1G 5ΤF$cW1Έη»ξƈF°Χ1G$΄ƒxPΩAΑ Δ@"Ψ"Œ1·οn}1ΖΤRΔ "4OΑςΩt,:j΅#Ž ΰ2Μ/ΓL_ύυ»3Œ,Ώ(@€4ηΨΗτ±T‘ΓΑΊ˜υξ?ψΙοή(ΗaβυΏ¦€π†ΐr«Άσ ―g *ΠK`ϋ²ΑλM°‚ ΄XBήyΠ‚*! [˜»~P| ”‘iˆ»Rπ†Η;Φ wΘΓbΨ†Ξ" ‹θCβ0„$"˜Β$κp‰9žΡVTcρF4ξQq)"φώ¨G‘Ψq-Μ# GHnpކt$©HI’-•δd9IPΞŒNldP)J?¦”"!SYΚC†.ŠΔ$,myΚYnρ“Ό”e u©J °—|e1rΜ³δ’”ΐΤ$"‘ΙFeΦRšΒΘέ‡ M‚aPw–ά '½)Bp"Ζ`FžiΝh²œ»C§:1’H#Ά“œ΄žΞΉcό"Ύ Ζ/ζωvΖ„§>ϋ©‹z4C%hCκ9Ξζσzϋ,ˆ?uarθ’Τ“¨A ϊK|f³€ΥΕ+ςar CΏ Ζ- BΡ{Zτ€π+Θ1ˆ±R xΑ£ 5€HBR:b³„Qi>T ‚–Ύ4¦3HMjR€ς“§φ`ͺ ΌŽ#€ )j&ίyΡ D©ZU\ Σt†΅ˆT&ΑrςMu§+ε r αΥ…DλΉHΉΞ΅fˆRsΠψΐ=XλSέJΤzΖ5•s5bQzNΌζγ?P‚ Bk4”CΘ¨P₯ZO]fV³ Ν)?ϋΆR%ˆΦΆ6°­ΘρPΚΆ—½aΌ’•H ΅π…/†QBΟ Ο=4ςAέzΤγΉ3†"—›\ @ΰΪ’B{"­` ΆH/1Z¨Τη."Gΐ/шLΌ’­„M-n‘Ψ‚XγεIΊΦ½ΰ{Σ+‘R‘ΰ†u@ -mE,^1PνjW‘’#° Ό―οDml£ НΖ"dΨΖ&Όq(¨‚(φ+ΊΒ™Νp-σ°N@Œ€(ΐ ΐΕ/p!d"ΉΘDΖ…)κa Shβ¦`°’Œδ#[ΩΘXF²,<ΰγ?ΜW {jΖ‘ ­Μh>³6°u@"ˆA5Θ…jθ ΝhΖ³šσlf``lH+άαx%΅Α 4£@,E;Ϊьnttс €,ΘΰΕ+:ΐθHwϊџu£-ΠΜ,JΓρ5Λζ†α8ή¨†7` YΣΪΦΠh4’fδBΐφΕ­gMμZϋΨƎΖ-VΰjUkDq‹‹vκς‡Žsœ£θ€<¬ν£sΐ#δπ6<Θ± d4#δ(‡Ά}Žux;ΫΦv·Όίmνg€ Ϊ.@€3Χω{‚ €=$BΎ% „δ0ψRυoΧ|ΰIής&Ύ‚dcMΊ‘ψΔ—gqŒ\-κˆΗ;DώŽw0§6ΩΉ=βA•“K€ε0wyshc€€!ω ,Λ–] 8π‚ *LΘp‘Γ†JŒHq!Α‹3j4°`ΓƏ CŠIrΰ7œ4`θ΄­€Λ—0]š+€^1sκάiΐœ:vh¨€¦Ž§Ρ£!Υ…;ΰH8vH£Jhš n¦jEjΞ\.ΉC·΅,ΜθU«Κ¬Ϋ—ζΨ±Λ@²·xCvυωΞ Ρ ζœ±«:o6X!GΈρE΄Θ4Έ“ެγΖhΫ©rΰSΊ’—σξ5—“Ν\δ,‡~;ڜ7u‘­&ΌΧ9(”xK7›υhtΡ’IέΫχ^^’σΔ]\kkΧ€uŽys©­mΧΤ€σΊσΦκβ‘JΤ;φž΅Ρ-%œyμ£’³Šυ=όΪΆΏ†}gŸkvk Š`ύιδZvμ¨C—]υœοc=xΣ pXb‹Yw‘LF6Ye~¨W†nζ@%π˜Χƒ©£gΉΈxVW©£l”gγH0 α :%ώ¨~Ν'œ’@Ζ—#r2”"‘(PtB–KJ‰Ρv݁Ή‘–κ3ήPIš€|θxƒ{α΄ ¦– 3ŸΈ‘ŽjfR…§†ϊ)²\ ‰‰Q%6 ˆ(Ao„Ξ\uέυ¨@‘Ξ„?Xx)zLζxXŠ}Š©’‰˜ΗX—>ηZFθ¨"‹¦ΦφͺFŠΤ… nͺα;°©€ o­β α^±‘fD•!z ± Qi%―XϊJΠ&6yI`―·nτΞ;‹ΤΕ‹SΉŠ*I™^Δۚ> ͺnΈ/Ξ‹a³ΙΙcΞK/ˆφj”M6·l0Αυ€ŠοEz"s•ίϊϋο@|π- +ά.Ε+ΰρΗΠβ© 7i€~˜τ«ξGΩtό±Η!,ρΌΩ€0ΖΝgά,Hί”ΣσΟε΄ΟDύΝΡ‰h 'λ]τΣNύŒcδœσs ΨΜκΦLΕΧQ„=GΫ”mφΩh§½Ν7Ϋ¬ΡAΊ¨-·ΪӘvZ|=φΦ\?η50 Π5Pƒ1΄Pβ-Δ°ψβŽ39δ\Џ7žωδšKΎΈ$08 zΐwί£ύΐκ >Αΐ^μ²Ηnϋμ·ΗώϊΌn»μ΄G€;πΊwϊκ”~:κ]©Ž€Q€Q.ΤWoύυΨWoJφάsΏ½'"DψσTŒmσ©ƒπυκZh!½0ΏΔ/ότΧ‹1ΖΨ―Ώύψc‹λK^ω /τ΅l‚CΐP‡HP@ψ‹ 'HAό D‚¨ ρWŒbΓ.¨C†980θ@_ꎰ‚d€ |! ©tπ†8Μ‘}afΰ"Α²ΡŽφ ΰx8²± ΤΒΓ ‘VtHΕ#ŠΆXžŽ.–H…Ÿα€tρ‹c˜₯ŠhΔί1†Αx#habžŽΪˆ cΈxμ άΗΒ¨Π{ΤE ο˜G*£o<“ ΥΡFA²Tάc"㈾FςŒΜα!ω¨HZς‘™Δ‘$ϋˆ‘?šγ“  ε&'ιGOΐ‘˜ ₯(9IIζ‘2–²\%)εJX–E–9e'+ωΚKώ˜Dδ.UFL_n™7f-QwΛcS—Γ΄e1S)KiΆ²™Ζ|&2±9ΝΎUsŠΠ,†7KωΗs’σšΚΜ&5·‰K`“—ΰ| 4ΙωMm:σΘΌ'3ύN€ͺ2žεδš;m˜Nqž4h&ωΙΞ^”‘Πt(ΙςΙMHRŸνh&5ͺ1ˆ^£ΉDh?M*RH’Τ” EιAiΉRsӚ₯iE9ZΟ‰ͺt§!νi(_ΪΞ›βt¦¬*K…:R‚t©LΝγGjΒΔΔΘΰF©N§RΥ¦‚Δ‘KŒ‘‹a#’ΩηOŸ Vaˆ΅$!«=’‘‹¬j• ιQ-ͺC’#ω€2ΘhΑ‹¨Υ«mk_α ψΦ αΠE]νhGδu―ΰ¬bHΘ X !ƒ½_e-;Ξ΅~U‘ΕΤ,c5r b΄"*πμ6tΑ Ρ’6£ˆέ(Aρψψ½VΐυB:BKŒ¦sͺ‰EmXΡψ¬Έΐ%Γ7šQΧϋ ‘Ή-©bσΈ]–*ΰx‡Cάλ–6»0M-wW;cό"φψzΰƒμ δlV=L½’·¨Λε.Fœ›ό@ 60ππZcπ©»4εh,)ΰλbΔ»ωP‚p „#( JpΓ7ΞϊΰPϊ7©ΪΝl!3βήΧ"α/F4ς‘zΤ8‚πtͺ)+v‹` @ΆΕ08ΈΨ»60% d(’™ˆ….:θΰB>q‘πqΑžq {eΗ. ΜPβ·jΓPp<š(”£―¬[«\Θ dσς˜W³›έ`C°?ΔΟΠΏ@΄@bQ'|ƒΥpTΡ κνo»α΄€5­ιuΞ ‹_”ϊΤ¦N5ͺOύŠzγ–0E.’ΰ†wTOΥΈ^uͺeαρ­tηϋ£σ@Έvζ0N`ΐ:ψ¬°X@qΙΖΆ²:bz€ΙΩίNΠ€΄Ž±@,ΐξu·›έκ†·0€‹ ΨΫŠ /ZqoyΗϋέ·€ρʝ€”.άϋΫΧς–΅j8όαxΔ‡Aq‡#ͺΘΈ0$Ξq‰/ TΘΫΑ?­-… άθoΑIψEŽp4ή ‡Ώ2Žt ™pςΈ3<Ί5Ιο0‘&Ξ΅ν₯Ν©ΫΫ»Π·ƒΞΝ+± dΐ…+/ M QUρ’+wΫœ7+?.<·:rw°.ΪΞ=xitζ‘FŽnyΫΥIa…έ{ψ₯AηJ ωύΦΥ‘26•‹e‰ :ΧuF Z b–Ϋ@丁š"ξD(α„‚šδΈ§‘`ͺσΞ'8h#V@cεΒ—΅θ"‡!¦ΨΩVuζ $e=ϊψγ‚œy‘‘l½(W§p‚L…γ@˜€H†7TV鐑“o~Ωηε‘W§/"ž)Υ•AƒΔssΉΩ•“U…•ΐcη—WͺNx©½σ睐a4–"X±w¨O`Zd")|Ρχ(i‘^΄< Γβ₯#€E\h ¨&eϊd: :`ͺ%Α9P8Θψήsoΐ\ >ψζ—ο=ϊρ£ίΧ[‹§}nΣ£ p‚(€ΑuΑ…OZb\8πŒ MQ hA Υ+ΰβ7¬I―pDΐ ΄†ηΰΏθ‰1Œ1a…0Œ‘ cΈB[ˆ@€δŸ CεAΘ€γsDΒpA‚ΒΘ {RŒbX€+Œ’§(E(ϊΒub ΐ ˆH€t9λ‘9Ψ±‚#|ψ€ DDΆ4ρpŒ£Q ˜€π€ V°¦ρPŒ„a8žˆ |AΎπΕ1κ"ΗF:²Ύ¨ 2q¬ΜΠσ Pρ1ƒ…vy€(›ΈΒaβ|x ;Hu BkHacFΩΘžr εΰ nΔθΚN:†–K·Ξ‹ήσ …ΤC zR”Š‘Λ&21ΚPŽ4Œ1ηBk:L˜FO¦νό¨AmκSΣυ’₯jO9šS“&5£ς,κΰŽΊSiRT₯iKkU¦ώT§4εi:½jT†U™)νΙ3‘*T₯Ž« ΥκSΉΊQΈζΤ£wιUΥZRΉΆͺuελ@«ŠΦ—’uͺfέͺU‰zΨ­Qυ¬…]ͺ]ΏκΤΏυ¦S»+[σ*Ρ½b*«²l’œxcƒ#eμdΛ M9–ΔΊ†/~AŒ6>1΅|ΈœTλO׎V$ΏΠE=š‘ bό”Ρ«jΫQ‚>2$Ζn>Θ‘‹βχΆJΥmc…TQώV#°}E>¬@dXΉΚνκjλKZnδΔ―Ό@_œW ΚΝ-’@ ̍θBΌ*PΎa^] w¨κefGΫߌό7V}“qήόjw½ΌΥf7/_G˜ ε­0‚ϋΩζβW™Ζƒy ‚¨€ qιθRύξ–»μά0i Πα|δ @φ ΘPσΞΨ₯ .ρ‚Νω]‹χJ°Αle4P·ΈŸΜ¨·‹2 2ΈΏ;ξ±’|%ΰ@ H@C9(LG6Ιώμ;βδ| HΈ34ςΑη|Τγ+Τς[_HžέBθB(Ba‹aΪ»ίνρA $(ŠhD&b‘‹,Σ2‘‘X…:†[<γg™όŸΥV₯ΉΩ»;3܏f@ ιˆΕ+^qάW‹†­VΪΡ”†1Ž]X7†:`†3Τ.L‘2lƒΥ€H‘bh{†΅0Χ`Pƒœal«Ž8@πΩΈψEΌη-οΦ›ή €v3La‰W΄bΦίxΰ½ŽoyΛβQΐ ΕΆC‘›έΛC@ @;γYΌβΑ98q"lƒ VΨF `Ό‹“γΙιcžu8Ο‡ƒ X^φ,@σ Xΐ°yΝRά\ Έΐ@V’dπΒB§Ήktηάχ[ής΄ Γ8χ0€†£ϊΨͺΑupύλΥΰΘ0†!EΎB€h1ΐΞφΆ]"Έ ՝gu 놫zΣԝ²ƒ!‡7 Ρ o„ƒΘΚ^žχ ¦Ϊ_? ’δH ”'\ωϋΰTDAH~^¬{βBΖ#πΡτ|lGΊ -΄€γτeδγ όΔΓ¦Qm#‚Μ8VΆ{p`Ά˜Άύ“v―{έ―Œφ¬—™S#|I%Ε\!ω ,Ρ–| Δ€Α‚ΐƒ*\Θ°‘Γ‡#JœhΓ 3jάΘ±cΓjO:tΈ"Μΐ7“(OͺLΙr₯Λ–0_ΚτH“’9xπ09 ‚9tζ‚ J΄¨Ρ£HΦ\Ρ\ΊsΘ ΰ&Σ«X³6$hg\鴊KӜwΉlphΩ·p%šΞΝΞ#ΘΪ‘C·―_Aχͺΰ@¦tμώ*ξλ4Θ@SΗw±e­sƒb@ƒ*u—CkM—.*δ;ήŠ^](ם>ΐ²žΝQ(Z΅lέήm“ΘP©ζMά‘PΎ„ §]ΌΉΒγŽ!KFΗάΉσγ@7σ$UΩϊuΝ!;rΪͺwοΣ½πuψyβCίέ^Ϋφ}q’@½Ω<έ^ϋ΄αη)ΙaNbξ6:ι@σXdΡ ˜`€A©£g=Α3αlEρ… εmȚQ¬›"F”|iΡ§[Š‘%~;υ£eFρ₯…U’ፋ™%#:JMw@ώEsΪυδ^’pε!ˆάa”~%9yΐΖ‹Υaω–QκΔΣbnbΖE"_ϊ—ΧiŠE’@θπ¨Α'ΛΕ9֜ι…‘μ ©'Ssͺch“ͺ J–ŒfMYž Š–ήP qΉΣ_Fz•RšK.BͺiG|Π&Ί©Œ}’Áω¦ͺ•j<ΠX(­e±zΠ‘8 B’Όφ*ΤBžFN±΅!…₯`J³9ϋ«™*¬₯ˆ;Τj$δ±ΰ!„Ξ©ΑιΥνDΦΆj¬wŠsMΎŠ›+ ’Ύϋ\ΌΏͺ£“°ŸΩ ‰f%„N²U.λ―qΆv ­΄?”°§Ω:°mŸ /”πAδ6σNšIœP6·„,ς-ΰ€σŽ– ΥΙY»³ΤρB rɏ™”Bΰp@<χΌB6 ‘Ό‘ΊFζ C/'”σΞ=σόsΛYulΤsŒ1ΖW‘Δ4ε|SŽ]‡νυΨbwHt Κ9_#DφΫe“M5ΦV[ύt”RUΐTPΕίQ”0MBΫn8C'α’Ϊw(dψγGΎχί}χ}D6jζ=ΤήTΐΠŸ{ΰA-Δ ι1Žz₯ή‚¦gЁΈ.λ«·{ξΤ€0T~·Νš5ωηΏ'ΰAMAΞ;ΟΊ@ΟGAτ\pσ§[ύυΥƒ½σ½#@Qτύs½«oΞρD‘ &ΤbJBΈ”Cχ+„Λ  x0DΑ|ι£Βε2ηΎγ%Z ‚l1Œ’δΏΈ b cXπ  ‘G8Bc Z8_‡·(χ™ƒ‚Dj ˆ:Τ‘ΎHHAc8€ΕPˆ{HΔ"±0”! 1‡#€ƒ1ξ[ΑR :x@ΤJΘΕ.zˆ"0ΑDχ¬PΓLρΠŽlL0…-|q Έ|ρŽ\τ…/d‘ ΘBΰH£œ4g(sl#ΐ…0κψ<:ΕΐE,Pi)Ζ…ίˆΑL1 ΪΡ‘w4Ζ/Z@ΙΛΈπ‰τd_@ωEI–’bJr_&7ΩIΏ°‹£΄ΐ0ΨΧΒβ‘ͺŒΛ-»θΚjΐ2–Ε›%'ƒΩΘa1—Ð25χKf6Σ™Εδεžd©ΙeΪ™Ε€¦4³δΎjώœ‘œd5΄9Θdv³–«§8qTNDσœΰΜ&=έIKkŽσ R=S‰Olͺ“jδ§7γιΜ€^r χό¦A)‰Π¨q³Ÿ¦C§™7sfτ–ϊ¨Bα)Ly’2šϋ€¦=ύωΟ|4₯yS&I?ΩΠ“ŽŠΎ\iA‡‡Ž”₯Z4©.oΚ@•τ£¬μ)G₯&S f 6…©Τ<ΚPžΎT€šk*RAΉQrζτ¨UιU}šΥw:+PͺT;FΥ’NtkMŠVΓΚΚβΤ¨₯+(•κΥ²bT―Ž΄kQ;ͺΣ­:’―w©Y ‹GΑβν«yu«U)W€ΜU²·t,ρπzV΄Ί”²XUμ_1[Χ¨†vͺ…,;X¦.V΅wΤl/9»S±‚–¬’](iΉjZά’¬»=μX—Ϊ±ΛT£½%nRΪz\ΫΒυ΄Ε}mp›άΎΈΝMκp­λΪΡf—·j…ξrS;έ;²v›ξΩ4DЁPΈWΓ : [ΨΒ ΕΜωXΝ-­:λΩ Δ§’σ°Σ€Φ_ΝΝ 70 κ7Zx„¨Γ \7’·xπϋ›> \d0+Ώ0±ŠSΜβ«ψ„DŸϊ0ΧΰΌqξs 0Ÿθ @Κ¬θw@VξΚgΎRαg­•ηNpΎσ-o,°ΐ$£I$•TΡ(^†JΖΘεXN> "{RζΈε˜DΡhhV4Υƒl’Iγ…`°dUy9Π™7ΊΗ§QeξΖ›\ρ ΚƒΕίLΑεY9Β5j“—Š‘¨”™­iigΖsh’t~z¦R%©'2νxjκF~’“N8Ψˆ ―žδ¦@”!C©mεZΣ£ Š†Θ€#μ°»ͺC+œΎγκ²ωΙ+hΏ h₯ΤΒ+Mͺπ d²έvδ±Φ:έ"2ιXξUΦΎιk’€€3ν» ΕΫ–*9Œ«,Ύπ†‡Π³λΚt/ΐΝν:PƒΩͺP*N6W<1:n*Έ―ώ[’Δ[œΝΑ›…lr6ΰ€pΊΠ.ΞΏ%rΚ bͺX6+ σΞΟ@ρ N<ΠxΡ”Γξ2dσΝ9ο¬sΟ?oΆτΝ PaυΥsPΊ]¨J\y‘,·@/m@6U_muΦ¦MΆΥQΔΕ|³Νέxη­·ήΥ$rAπ±χΰ„ί= rG±ΆΦ$Ϊό60 y p`ωε˜g9 (pΑd°ω蛐δΐ°xΫK?Ž:”O ϋμ΄Σn@ν²W`Όc€ϋοΐOΠΑ$ ΉT°έ8¦# …`  .ΣWOύυΦgύ+Ψw―ύχΤ‡"δ’―ΎΌ—h1Ζ 5DF#ότΧoΏόΏΜ_Μ/Εάο?ύΏ°…΄°ΎP [“Z‚9́}`ƒ ( ŒbXπ‚Μ 7ΘΑ^Π|_ jΰΐHf,jέ(°‚Δ€"0- ΠAxπ†€‘Q‹"¬@ψ€Xψ ϊΤ U²j‡8F0€W cΖ 1 Yόbπ…8`35C™cx…0Ζ‚C γŠhF9ΈΐψL Œb$£wh  @lδQα8F2–ρ`Δ#nΊψΕ0φя8 δΉGCΎ₯ŒΕ°£ ;ΤΘ8ΊεŠΜc•*yH±@2“Œ|£#/YFI.’’’΄$"=Θ4ž’‹œ|dA‰Κ₯ρQ–84₯&˜ΚNJ‡­œ$,{‰Λr˜Άε*=¨ΛP&S•žζ1YGLR&•»Τ !oiΝ6³–6γζ29ΜWRσ™Ύ΄Κ'±ιΜp*3šΉΌ£9Ο‡)qΒ“•Σ€§—μωΛk σœξ„f?½)ΟlΒe›οhΛiΠ· T κœ%;ΑYΟ„F4žΤ'ψyQ|N™MgUΦ™Ρ#’³˜Μ,h;+ Ρ‘Jσ£e©H©Byš4€(νΰ7A*Ӝn‘+έ§E]κO›J-–έLiIZΝqώ4Ÿ7νιBŒAŒ›Τ΄‘nyθLϘ ]γQ< $wS‘ΆΤΖΠE=šαU°Šυ₯KMa/‹3κ"δΠE[ΓJ’«u£†΄ΰAϊŠ|XΘΨkIΖͺRŠš΅‚‚Θ1ˆQX xΎPlG0 Sς‡<ˆ. «Xα‰Υ_7βWΗVŒeνQZ\Ά«_]-FΧΝ5Άm>j«2 V³αloυψΫ NΆ°Ž€ωˆq>κq cTΨΒΤ°‰?€[<ƒbώ/ϊš&<‚Ζΐ pYJ AΘPD#2 ]θ7"8 ΞŠό4ŸE•FΝ{^τ4(\(ΈΝ€‹WΌ¬7NHˆΌς%q_Oσ’ƒ:Ώΐ. hSδƒ ΥθD5ΰUZΠ‚~΄€#MιA :Π€Ύτ₯eα>οΞ 6Nσ&W9pŽsΨΐZ>Ό" n8†θ,gκZΣϊΤ§Άuo]kΣ½Ξ|yuΪ`Π€Ιΐ@v²3pzd‚w$ΨNKd[;ΛΎφ΅³½ln'Ϋ0A±p`3•yiSέΌ vWƒέΝG.šΡ ^ Όˆ2 ΡξvΏ»ίμx4ώ-p‚œέΡΈΕ Τfn!ƒκ‹ψQ€sœ£ι€G:>p|γCΌP…*rar¬c獀9.Ξςr°耇ΕQs™§<ζΔ%>ρΜ*fC›‡>‡ ΪΓ9:ΪΈLΘρ!h4#νZΜΑ‚ή@’€ Άs²±Β°…+Θ† β10έ\6;[ΧΏΎ‚°‡:S²ŠG<ή1wΚ`νίJΗ… pˆΚ³ κΪήχ–΄ ~π ΅>2xƒ!ω ,―4 !ω ,—‰€ Ό ° Αƒ*\Θ°‘Γ‡#J4Xm’Ε‹3j|ΨN l¨BgΐάΖ“(Sͺ4€.9s€ ’1@NέΚ›8s6DΞ€Β½ΣI΄(NuκΝ4ΐƒ<“F£J½H€ͺ½ KgsͺΧ― _† τΣA‘UΑͺϋR]°A²ΊSZΔ«Ε+QŚό@ 68¬ ΠP] γ.ύk5{yΝ©Ξ5‡Ub5kΝΊότkD”θΑ~/FP‘Ζ.`Šη#€œ+a€ΪωΘm=κqŒ‚ΐ3Εjea“5Ё™† :ΰ Τ"}C₯ͺ0lJΫEβ˜ΰE#‘‰Wl5"ιμ…,*GάβΖ Ή8€)P€8/²–₯ͺM‘ΰ†u@ mE,^ρN§>Dƒλ]oˆ¦΅Η₯QΠ‚λžYΩ#ω Γ661(¨‚ύ„¬CΩW€1D!x€ΛšΜ ¬:ΊEαε-Θ/p‹·˜Ε1E=Œa MΌΒτύ†@bΈbτψΗ<r‹† οmFZδ솀 θ ΰ[”£ ε*Gy¨$°Tƒ P¨† |2/€Κ‘Cœ‚‘‡ ΒλΣ–&|‘Ξͺb’γ”δ8ξ.ΔΘAοZέQw6κ7ό„fpΗy/ƞ—%DZ¦ΉίAΘ@sΙ'”>ψUΒΣ=P ‚ ’„‚ ΖΰκrNΰ€!ω ,―4 !ω , ΑPUΙ…8Pƒ*\Θ°‘Γ‡’σ–Ο›·p3jάΘ1aΈhω X,Ψ±€ΙŽα ε³2ρ"9ƒ'cΚ\Y>V|9³§Μš75Ρι¦Ο£ͺXjEdQ€P#*]ͺbh΄§Q³TΙCE<Θ΄$©΅¬ ?|¨U+v§Q³PΡ*±ρcξ4cαjM™oΏG” ηRoT G$>͞=pϊΐ)4gΈ'b$(!QΤ«£H½nUŽkŠ›xЎXΙvdτ^›CI…»…T*ZΎuR%2^Ήx©‚ςζ™–ά Ώρ6Ιχ74^κΘ$ρ†|ΉOrΡΘρΊ ²S«΄$88ώ` ηΣ£_―^=ϊ  8Θ@Ÿ½ύφχ-(¬nΐœ@‹δL$\ 7Œ=sQ8 6θΰƒz³Ν7VhaƒΜE Qf9‘NMb`BGd“O=,Άθβ‹0Ζ(γŒ.0ǁ¨ΠO>@)δDiδ‘C Τa’ P>HViε•B°”py‡ i,X–iζ‘φδ3M “‘9Z Μ™tΦ d91Tπ ˜U0§€bYŽ'Ιθ‘Uz’Ÿˆ6Zδ |Ι‘‘ŽVz'‘&1ji₯JΊ₯›6ͺh¦†Šh§ύMZͺ©ŽZ’¦¬ΆͺC€©~Ίj¬uΊΪ¬Έζ:«§Ϊ+ΊrΔλ°f’ΚgDΒ"[f±λμ•Κͺ:ν™Πφy롉ώZk°Ϋr{dΆI+‘ΥΪz.΅˜ΎξΊC¦ .Όέ.ϊ.½—Ί,DΝβ+$Ή™λo>ςfΤοΐ·»λ½ψΜ,Γτ ‘ΐώ:Μ/ΔπJόΕ {»οC¬±CG챡Η«°±―k1Θ-Ÿ;rC%g|²Ί)»r΄1i@¬/;2–?³:3C5#Y΄©A74tΗφΊt¨M3τ΄•SozτBI™΅₯U/tu•_sΊ³ΆR=λž;„,ο@Fε™_#(8ΰˆc'Ιί’M6xΣY6’OγeLG€“¦™ƒz€Λ„ΰ *mͺ4€@LQP‚8β”#ϊθ€—nϊ騧Nz†q(›q»²Σn»μδϋξΉίn»ο΅γ>»7ΘΤΐxε!€žBφ°žσν%”_F›χBBΡΝφΪkŸ}φήΏύψΰί½ψη§yVπ΄yŽ›Ό~›ξ»)ΏόυΟ?ύφΗ―;2œ¬³Pΐρ0ΐnJ2ΐ£Pΐ€+0€<ΎεxΌΓϊ  ΰ‚ tˆ:ΈΑ†π κ0J@!ω ,.ƒΰ d«τ¨ ΑJ€ΐXΘ°‘Γ‡#JœH±’Ε‰ΰHάψˆΊ‡θ²=b΅ŠIV½"]\Ι²₯Λ— 3’\U’¦ p𠊜κV([*a Jt₯8N=CΡ,ω(\ĝ«B½ ¦ 8Μ€ΙΊU+Χ―^Γv –¬Ψ²hΟͺ5Λ6m[3œT₯zjΥ©›ξdζƒί,,\A°Β†6PxqγÌGv,ω±bΘ–'cΜ™²c ώ~cχfN½hraF‘0† !šM»ΆνΫΈsλήΝ»·οέjτθΙΒZ© r§ξ<%&„O²τΘΒυ«ΊυλΨ³kίΞ½»χοΰΉΛ‚Κ“žaŒ{§3υ©/!κ”„k˜1aχσγί―Ώ?ώΰ€Hΰϊ’G(‘θQά*Η%ΧP6€DIθ §G5ωγα‡ †(βˆ$–hβ‰(¦8β0™hψ žXΈNDΰΤ8M@"‹/Ύ sŒŠ@)δD3Μ0ΆΘH_LS#Fο($Gi ‘Xf©εFφhˆ_Pc^‘£ΞBTΪ·εšlΆ ’0Β3Œ!¬α$p^ιζž|bi /αΩη „ θqͺθ’!Ϊ’ ŒFͺ¨£,A*ι₯|RΊ’₯˜vΊ¦¦qκι¨D‚j‘¨€¦ͺ’©‘ͺκ«%²J‘«°Φ ’¬Ρj«­ΈJ€λ°φΡ―ΐͺ*,DΔKκ±%«¬§Μ:δ쳘FΫΠ΄ΤJj-CΨfΛθΆh&κm°*ξΈΖ–‹(ΊδšΛξ«ΰζxξ»ΠͺϋθΌτVko₯ψζ«νΎ›φλο·‡*πΐ“|κΑo· ͺp« GœιΔ³Vl±›kΌ1›L°»"'LrΙcœ«Η(crΛƒΎ σΕ'ΟΜ±ΚΎ²l³‘8«σΞ)Κ ΄Δ5­₯ΠFg‰t₯φŒμΟLΈtΤANMυͺN7 υΥZΝυ‰^kΦnύuΨbKMφ΅fsvڍΝmΫWΏ wΧr‡{7ΦEοM’έ{N­1zšΌnΓΖθ2Μ/ΔόR8Ν‡7¬K=ΔθΒ8έ& μ/ΌΤσMεŽ?ή¦ζΐσK,Xρ.Ί4.:Ρ‘ϋ›8κρΉε„οIϊΗӊ*ΤΎMείάχ»Βός» Μ{ρ/–ƒω­yΛ‹81¨3ΟΌν Krυ« κ<¨PΎ ΆC:μχ6|ΜιφόΰΓό=τ€ΖνΕ ώτ©ƒ½?ψl`ƒΨΰ~ Λφ±ρ@ JΐAκB.c Βήχ;$α„FCκ‘ 6νxμςίο@Έˆ@ ΌP„"2 ]γuUΣ Β7΄G°B9bQC]ΰgK»³ @†plΒw€‚*š»ο‘]ώC]3T±‰X¨Β n8ξp(€$Ϊ ~ΎP….ZA2X!¬ϋϋψu½X|£¬{/šΑ hΌBzdΜαΩUΉ ώb›Ψ„1:"Μq7$άψ^1F+ΖNv’#1rHA^²d’λζHΏύ­”¦Ρ(©v¬ŒT( €$Ρ£T~ˆph„*ΠN"!O©Δ-zќΉ’G²ε 3Α σ„A«x„BΪC1°`A‘@&œΆΙΝnzσ›ΰ §8ΗIΞr’³εqPz’9MΤΨ>ιΡΓ#LρŠzΪσžψΜ§>χΙΟ~ϊσŸυg6 g‡ιhIΎΐ‚†f¨D'JъZ”’0ΐ pюzτ£ @,‚†>Hλ‘ζ*γIu₯ˆ9 “6ΝF6Ϊuδ°πΨ)c7«UtxΦ³-gGKښφ΄¨M­jWΛΪΦΊφ΅°­lgKΫΪΪφΆΈΝ­nwΛΫήϊφ·ΐ p‡KάβχΈΘMr—Λάζ:χΉΠt§KέκZχΊΨΝv·Λέξzχ»ΰ ―xΗK^δΖυΌq-οKΠ›^υΊδΌ`―{WΒ^ωΞ·"υ΅ο}%’_ύξχ!ω/z ‘ώΦ—ΐ1πΌ/Α0ƒαφBΈΏ’Ν°CΔz_gXΓ6π(0αχ·s0ό_£˜ +~Θ6φλβ9D‘Δ ©1€c ΧΕ7NΐqΌX`gpΘ άΡγKDφhrDVxHYL‰ς•ΥΑα+{ωΛ`³˜ΗLζ2›ωΜhN³šΧΜζ6»ω7Νp޳œηLη:ΫωΞxΞ³žχΜη>ϋωΟ€΄ MθBϊЈJ—Ε¬3g#e‡–Η<!ω ,άR < Σ5ŒΨ/bΒ (\Θ°‘C†λ όeΜΨΓ‹ρͺχΝ—.ƒ1ŠThμW¬|VΘύu0αHŒOjπ‘%Β—k•O…Š”ΔXZ ‰s‘°_<}ͺ ι±eQˆΔN*UAζ[PŠDŸκ:ΙCEΧUu}€ψΤΐ1“φ~ψXλc•6]β45ߏJlμψMΉ¦΅žT’a%GάΒ JηYžHŽDF-Ÿε|‡Ξέ™Oς’@G0ρR€(S,]‹nΝΕM=hH¬¬kuϊcΩΗωΘxΫδνUΝPgέ|²™*U±TYqSNθπ—h‘qՊ+αΔ–%t[+±―x5Œͺβσ‘ΕV€Ύi“*‘Ϋ³ˆuλιΐηη†άO6ΎΘΤώ(ΰ€hΰ&¨ΰ‚ 6θΰƒSŒ‚V(αVX`†Θa†~’"ŽΈ]‰&>…bŠE­Ψ‘Š.ΎˆSŒ,ŠD£†3ήxaŽ40a‹7Βγ‰A–Υ£‘E"‰b€.IdC ώˆ‘C!ω ,―4 !ω ,•.Ζθ 8МΑƒΝ\Θ°‘Γ‡#JœHQ`Β‹ +jάΘ‘!F„CŠς#H’(S0Ι²₯Λ—0cʜyQ₯Ν‘4sκάΙ³gΖ›@‚—­¨Q’θ|*]Ίt¨Ρ§ΩΪ™ JuaΆ+@¬ΘΚΣ―`g‚;’U+WμΤ}¬ΚΦ@ΆsζŠ+H{aσκύψ–.]AΨMmK5*ˆΟ) .ιήΗz³I¬˜ρ`Β@ #Φ σ 12Ĉaati¦S£^}Ί΅jΧ¬_ˎMΆνΩ·=tθάρb΅1>Lε‚γ5(°\@sη̝?Ÿ>=:tιΦ«K׎½»wκΦ³‡ί>ΐ…ǏŸ ²x­π š©ΐ@# ˜ΈLεί―Ώ?ώΰ€Hΰ&ˆ`~²|Eσ Εoξ½gS|σΑ Eγα‡ †(βˆ$–hβ‰(¦Xβ1ΒΤ‚‚0DE{ Y8άcάP cΤAAˆ©(δD)d-&h1ά0Ζ8vπ­P@Pp@–«όbL1`Cε˜γ‹/XfΉε–RDζ…ΰάςΜΰŠ-Ά &˜oφɐ™Ζ„Š<ρΜ3·ΤS£Ÿ#‘c:κ€3Ő #Œ₯_†Ιθ¦3Μ0–@p…4ΰH΅(§#©SΖ‰ό’ηž|’Κ¨1 V“¬#•±@"Βΐͺ)―~cΙW|ά©Δr΄*°ΒΖΪ,™ΒΨjΖ6N«‘―ΠF«-™Ζ"ϋMΆίNΔm°ή–kc΅·bœΊ=‹°πZn²δΦλйъ©/fμ^›οΏ ΙΫ/Α„έ;ξ»7ΔoΊ S°»»F\π―σΒj1U ±ΑolΣΔ7ό0½"ίΤ1Γ)ƒŒrΚ*‘Μ²Θ'k ³J+Wά2Ζߜ’Μ:ΣΜjΖ{ϊœRΞΜΜsΘF‡t»lsΣ"!}Μ5M΅HO_½s·/oΝ‘ΥSή,΅ΦbsΤuΩX/vΪ‘ν¦ΩCχ ·FkΟέ6ΨSίM‘ά?}Mτ°~S”wΰBσvαe‹οΜQ»έ7γξσΩ„Sΰ—KΎΈζYnΆη™ƒήηt+^Ίι ‰Ύχΰ²ώ§γ uέLΛ>λ‚Ϋ­;A¨ΏξϋοAZK1Τc;ρί{ξΏσž8μώ2ί)ν%#œυκΡŸ=ΑΫ/OΌσΣOΌτ‘«.ώοδί~υΦ£Ÿ<ιλλήώόο[Ώ»χ'ϋΫγΓ^>F?ψ1O~ϋίδ(ού+|<l‡?κιοz  Ιψ9 ΆΛϊ‚ΰ›'@ &0D Ι 8Βϋ…ϊS‘φ8Θ=ϋ•y/΄` 'ˆΓ ΒΠz.\αΘC―)mˆ |œ }¨Γ‘mΟ ϋnhDχ51~OΤ[8Ε .Q{,άα58C$vQ‰=£u'CπΡ°~² ’―HΔ1~|aԟέΈFΩ΅ρy"‘X>θ±1‹ˆK“X»4ⱏ¬ϋcίΑ36²Š4_χμθΘR²…ƒΤβΉI‘ρ‘€΄‘;9IHšN’υαχθIW‚–π’₯C™ΘLφ Žš;!™ψΛjpÜc1—ΙΜf:σ™Π„f­8yΚ\R2šΨΜ¦6·Ή'd&S]NG* ‡aœιUάL§:Χ +bγL–Θ@H•Λόk,[ω@L`ˆ€ θ6}ΡO|0ΑVΌBb½e.a¨ρˆC Νh1kq„:x4 7D${κ Cτ±O.ͺΡ–ΊΤΆ „€Dα XΦ§…Rϊ€€ͺP‡JΤ’υ¨EM„ Τ¦:υ©P ͺb#υΜ¨,iX|Œ“$Η` «XΗJΦ²š•¬θ€Z/³Ίυ­p…«Z»ͺφ`΅‘%NqNp‚€kX`ΨΑΆ°ˆ%¬b»ΨΐZΑ ΜΠΨΚ2φ²‰Ε¬e3»†0 €―|υΝ]§$ΚG¨ƒ °Žuˆ£―…m9dKΫΨΪvΆ·­-nw[ŽfΈΑΐν1ΦΑΫά·ΈΘΥ­rs[Žgˆ ΅c˜PNf˜9<).r);ή„Œίΐh@F:ΤαΌn}Α.vCέPΰ½πέ 8ΘK₯tΨ·»‘u€ΡGΔ€6 |α  ΐc»7C;βΑ`ΏΓΰπ/™ό‹ 2@VΏΠh€U’Ž«#f‚ΣΦaT‘Ό°πwοa O₯—#΄XcPL†ό²R5oŒΥEίGVwˆΖ£œξXdΌ°Βσ ϊζx§Gώ—:r‘dh ή0}7εˆω—ΚKφΖ–-ε.KUΎ²7β±›ΉYγ5€* Y bO.σ›Ώ…Žt cΞ?V„˜Υ’=ΓLGτ8±2cΠS0)Yšmͺ‘‘!ύ/R(‘Šy³Κi‹‘#›B₯1ŽG‘ΊΤ:±‡GaƒU“ΓΏΥ„΅ΆμKŽJ¨*¨90ύj]λKΔ½Bdyπ‰F―DΟΖ–;ΰAL¨ ²=Θ„;NΜεhο:ΥΎ6~0Šs<Ϊή攣ΒaνΘ*aο tΣ-+p„CβV)ΰqnV›WχΦd‘@ŠgZ!0ώ7±ήρŽ€GφͺΠΥΌΎ©wx#TapM'œβκ^πΕ5ٍ·C§9ΌΤaρ<VPE<ΈύM•«Γήpyd­‹~Χάζ¨by4tσ\”τΰ@Χ€ή ’{(ίt7Εr¦ίαεdΰ…9hώρ©oΚΎΠΈpυ¨{]ιι;dΙΎš;ϋμΣκξ…Ιΐ_tΓ3φU‡άΏ»ίŽόξc:±πΛwώΆ πqW1†ΝΡ„wρ6:qŠ/|γGCžL3φρŠ£±υ€<ϋςTˆζ ‰?τ6Jς’‘Ώ£ήFSN3–]zα|YφƒvLν9§yή(ιιw_•ΗyΞuΎsη‰ο§> τΫ™“b{ΡΡΗ4P tλ7δΔ“υ8€bοƒάόA)pXZΤ*AΏΒεT·_¬φ|υέΜiƒΜv€ρ a 1ΠΠ™P (Έ ε ,΄mρ ΐ˜"‘0 @Θr° ΛβuπmΥV!‘€ p`-ˆƒ:˜ƒ<Έƒ8ψΏ %(hί@ΈJ¨„± ± Υΰ N8JX PC8ΖfΫ υ†aΨω ωp†e8aΈ:€…ώ¦k\HΒ€†gΘ)gX:`Y¨…°‡_H‡¨r‡mψ –χo\$f(+eˆ‡@ˆΊ7usSε’y@}Ν"‰ε’‰Γ§p—X.Ÿ(aw§‰ίΒ‰–¨.‘y€¨-¦ˆxŸψ-©ˆx«8-­x―¨-±x³˜‰qŠ (’w»H,΅xw·8-Ή8ŠκRŒpwŒΝ’ŒΒΈŒ½θЍŒͺ(Σ׌Υ8d²ˆψoΞH,ΠxvΓΘ+ΜxvαΘ+γθuε(+ηθuι(+λ8uνˆ*ο8uρˆ*σ˜tυΘ)χ˜tωΘ)ϋtύΈ)tΉ)isΙ(is Ι( ©r ι'©rι' rΩ' rΩ'Iqω&Iq!ω&#©p%I&'ι‰ΫŒδ荾‹Φ؍›8Ά“Χ˜“ΩˆŽο«©\ό†εΩOdHίφ„η’ιͺu$ΰAŽAŒVδCά†φψΧΐΎM.€Ύ‹ Ϊ"Œ_XP(τΒ7|±=bt%dEx°ωΓ~(DaΥηBzΠtπ£a ’ ϋρ@G΄AYΈΎ•ĐhΤ"»rŒϊΩγ>Θbz€rΠ$OόΞαΔ'Ε½ΩΠ~?ψl`ƒΨ ‹κc Iˆΐ…°Œf$’ύ” πρ|„£.δ:žg†xΜΩM˜$αŽ„F>&™z$ƒ1δzƘHu°‚ω€δ"LπBŠΘD,ta€ώΝρ‡Εαρ™"ζ nh4Ž`…rΔb•Ί0ΧI4;ΏTd$Β± oά ͺhΖ}XΈXšF€ό€ύš‘ŠMΔBVpΓ9θΚ’σ=œμ€"bE_¨B­ ¬ύƒšŒ›^Υ©Νo΄B―ΰE3xWΈ°œ―¬¦>eIFd&D{ƒό<7±‰wώ’%ηΤ‹1ZF…@o\|9ρωΑkή‘–D踈!<„&4Ÿΰc¨:Χi—‚– 5ι1;J:œΖT§•βξΕlφT‘? 6Qϊ5ŸΎO¦3ͺ ‹ΚΤ΄9€@i1€ Ε}΅©H}jV£zT˜ŠU©'u(X͊U΄ξT¨e-©[ƒ*DŠ‘UΩU‰κΥΌ‚%£yΩ¨Vσ˜ΐ’ͺZ]«k¨JΦΒξυ¬‘Y*?υ֜ZF²ƒ aΛΨΜp³ƒι¬gΗΪΉΰu΄ρ+­iϋŠZφmA;mksWΊφΔ±³umαΚSΦζ–Ά8- {|‚Ωߺ΁ΓΕIq+:΅%#ΒML–Λ\Λ9%N‘nK¨[έΔ]»Π}vIΒέξκν»ΡννxAR^σΖ ½5QΝz/^χš Ύ˜ tηΛ‘ϊΪ—kψ%ˆQψ[ώ—iFˆz ¬ψf –Μm|?dΖΘ~)\ _ΨcώKiΔKaΈ`!–0P8,Ÿx`)Φ°Mμβ»+ƌι-‰΅[c³ Ηπz{μcuΩ03/‘‹Œ#SDΏ FΟ’™μd‹$™=S.r•72aξdΩΗ[ΖK”©σe‡™#+&sZ™Œ³3s9ΝΔΙΖ-.ζ=„"›mf‹PΨβpΒ-R– tDΞ΄ρWόu€‡ n{˜1½θFC,BΉr’ηp†ά`ƒ lQBa”ϊ§N5ͺW­κV³Υ¦Ž΅©_νκZΣϊΦΆΆ΅¬ΖƒάΰBJlwl™ υκWZ0A- Εμg•°ΩЎv²dE-kќ±Τ₯`ΰ:¨rΔ·Γ=nqƒΫάδ>wΉΧ­ξsΛA ]0ψ@ozˁrH„ΒΝοv§ϋίθ8»>π€ΑW€”˜p•a»0Ϊ0π€Š[όβΟΈΖ7Žρ8ΰγp€:Ё‰[ ΠS$ΐρ–»άε πR½emΫf·ΨΪΪ Npΰ!ί@ΊΎ…Ύο‘½θH'zΎω°†`0δyF^ςθΐ fΨ7Ύt{=ι_78Ο»UsΨ†χαvΙQ˜t!pρPPά wΈ«CsΟ»:μŽwΉϋέξΰH:!pπBŠΘ @Ή  €†ETBΘˆ>’wΎλξ{{ίAοv΅―}Lvs_4Θ> "Θέ pχΪמφ ²½νqϋέdπι |πΣaxU`BρGPAδ—/yΚη˜ο}νΡqwκλ~φ³αϊΦΟA©r_@°‚ς›φΑ\boC“#Θ0>ς•Ο|Θ;`ςdx>ζΙΑvLDζ€θ‡iΝeθP1 ¨€Bch‘αvύgπ'dτyŽyψ§Θν‡ ‚μΰ2 X1ξΰvΉ‘1ρθΠύχ‚HwοΗWX}Θ.ƒ§‘i,φι@hƒŠgυy*phΐ‚R‚α7bh7„>α€oWƒ¨„KMψ„<1˜zΰ%_Xˆ†¦87θ…K†PψSH…O‘zihRθvn˜„9Θ|*€ω7†θΰ wsyΐ—κ x@Hˆp¨ƒG0ˆͺΐ αΐ†u(…']–ˆ„q{ν7|3ˆ(’ψ‡ΛΧ„ƒH ˜¨/Ψx h’Έˆ₯xŠ•©ψ…`(ˆΟηŠQΈ‰!ˆd1α+X‹’}ƒΗρπΉ§‹yΰ“Θ|­ψбheΨ¦ŒΠ1x…ψFhŠρW ‹@*υwω§ΒH‡ΔhŸθΰ1xνβ@ΰ`ŠΠ  戎κh•Œ˜hΫ(`BHγΕ„η  ύψrλ8ξΘ ήΐŏ H‹ Ή^vH{ )|†† Ή°‹‘§•xζπ‚ω‘΅ψ -fΏŠ` – bpp7q$7”Eπp —Ϋ° 4Ω”‘O)π0p@‰$7r•NI“pr'g?™•Z9”–—l)–aω–n—p–π_IL‰Ϋΰ P ήP Υ° Υ ίΰwIω€“d‹™˜‹iυP'!ω ,OVΌ H° @s*4g°‘Γ‡#JœH1βΒ…3jάΘ±£ΗŠ/~I²dÐ Mͺ\Ι²₯”0cʜI³¦Ν›6]κάΙΣ"Ο@ƒ б§Ρ£:‰*]Κt)§PI6J΅*Μ¨X³‚΄Κ΅+S­`ΓτJΆμO±hÚ]ΛeΪ·XΫʝ ·ξΣΉxΝΪέ{4―_ͺ|χόK˜¨ΰΓ; +ŠΈ1ΛŐs:ž,5²ε˜”3—³ηlΐ9ΌάάηΣ35k^±βλΦ­³΅;Iz-8Χ°Y»F'S5et"Ν™#ˆψœΩΠΡ]6ۊβΠηD:―·oΗκ Μ‘Β½;rΡc™7Ρ½ϋœκ¬_Gœ};-0β‹h©ΎύϋψσλίΟΏΏϊ׈ρΑ`^ΌaΆ^cΪq—@ $πA@A…Zˆα†v˜α‡‚θaˆ$Žh’ˆ(–˜’…|a„ܝ—ΰU "Φ  pΒ |!†Y¨‘ƏAώψ#B9δ’H.Y$“A:Ήδ‘Q*i€U"ye“VB™€–^ώψ…;ζ¨η₯Vγa j‘cQx` .ΏΤIgxώr§žyβΉηžyώΩ§~Κ'‘ƒ šh‘‹ϊY‹pζcjΨsŒ‘E 7D†Άΰ)Μ/£ŽZg©€¦jͺͺ¬Šκ«’Άšκ©²ΊZk¬°ΪΊκ/Άˆ 7  Εu ¨ž₯v©sΐ²,{@"„"L1ΤVkm1ΘRdΜ0½Π,³ΛVšm]ΩάςΜ)°J(ΆψrΜ΅πͺF­GΖΤRK(«°€Α)ζήRΟ±γΒ…Ξ7Ό0Β0Γc ΌρfΖ0GΖσΛθ"Ž:νΜθVΐ{•£K/ΜpΓ“œΡΆ#€Μ7ι‰Λρ[επ2ΐΑ#?\²Ν C±.ηΤτ²]/0Β1οΦlνΝ#o€sΌ”Σ2ΐ?‹ε1ΘΓ}-IgtΜΞ=Σ5\1\΅ΥΥb5E[3ν΄Χ_§55ΝdΟKYάΨ’Ν΅Οm£σΜcΗmvΝv«ύ΄‚y‡υvίdkFwέm]qΧ.ŽΥήpϋ=χβŒ?”vΣƒΣ(ΉVA]tβ—cήψέlžΥα‹+n:D›―ΉκH…]9ι“a.·ζ¨ΟN»Q¬Σύ7ΰ™7{ηεˆ[νΊπ§?Ž·ςOoyξΠKt|κΤΕ|λ₯_{οPwΏSθDg=ξ§ Ξ½ω€Ρ*H€ΚAŒ#j±'mğ {(Η0)vLd"Ι G]π‘;αβ'ωEZςlc€"T°J i΄ayI&’R#>„ΰQμθƒ^ϊ ; Γ7φ(KHώQv]ΌeEžˆΚ£ƒŒωψΑ”`Lσ•,!-Ι7Jer§ΔY©¨j–ΣJ@ΎAΓ ‚r%’τœ79ΒLq:šG@B>|ψӟ {'<Ή)Οyβ”ΰƒŠσΉˆ@ΌP„"2 ]@ *‰gς ŠΛJ&tœω€‚ڍ#X!±x……ΡŒt£]&Bu IbΔ"gά„7ξU4ς“FΡhHb:H]-}…ά%‘ΡŠMπB"½β1œω‘5#υ4R~±TNθBε ƒΆΑ RUƒΙΌͺAΐψΡ£HPΫPE +Š ^T#Ϊ4ζ©V‚dυj”b…ΡΘVpb^EbP‰<«φU"„œίQX*BaŒjŠ*½¨fυΊDΎ>Φ=V; †΄ΫDk7?»Φ™&U,-mI-=ϋΨ\ΎVrB k!Ϊ²QoΆie-[iŠ[ΖΪr· υ(q άΥ"W ‘"νr[”ηUΉ·enUukέ‚DWŒΣ5.mϋj[Ι~Ήνnr©ΦVΥQ7%κυ+8Ϋ{ήνV7Ύλc3έ+ήΰ~φ»—δο^ύ[[욷ΈͺMowΌίϊΨΉΟ-―tω›`˜ͺ·· οƒlέαf7oοM~‚awΓ^°k¬έ ;Ώ%ξzSάαOΈΎ.ζ.Œ*Ίε‚ΨΎπqŒΫ_#ΧΓ,ώ1Š_ί!+/Δ1tm ^w–ΐδ5π H,«•ΑIζ،ΗkP Σ7jPΎo„΅¬»6»ωΝp٘½KΜΌΆœŒXƒZΧΒNΆ΅ψόι&[ΩΚΆu§rλ‘T»Ο 5΄·νκεDΉ)pόσΆYmkŠ U/…³σΈΉΝXˆψΪ\Ι[ΉΞ•.|ΥΒα\χ¨ο½ŠP°ΐ‘θ—=FςξΐێqΦ·Όͺκ;ΨέϊΦ³–Ε—ΌΨ€ρ ¦4UŒαS΅0”ΘGNr‘ΏΛ΄Ζ°¬ΚWΞς–·όVΉ*9―Dπρ`X¨xVDς•fο€MoŠ“,θDt>ύθFO:—Ξ'Λ’άε/‡•ΜG~'¦ΣIŠ‚™Π„ ΊόέoΉQŽΠ˜ hO»ΪΧΞφΆ»νp@ά灹w ξΘ;ήσΞχΌ“ 'ΰOψΑ—€E A ŠP‚",ώρŽ/ DΠ%ΰL2B‡ζ7ΟωΞ{ώσ ½θ9jΞOΫ+FΉ‘εΰTΰυ°½μgOϋΪΛήΠ€vΟϋήοθ=π}ο€ΰψΔOώπΟόΰ•~np(XΑ d ƒάΐ}7ά!ίohC)‘L˜?£¨Δ(TΑ~UδβύΉΰ2ζhx#αP;φΟώϋŸ ύwžvzBqk©ηZ€T-₯uψ€X'±ΠT›  › X %Q • ψ}έηd€Ωw}ΧwPH€6€8 Ix€4x|ΝΗ{ΠΗΗ`ƒΝχƒ@„B8„7Hƒ4(ƒι”NP°„Χ—}Ϋ7‚ΰ‚ SΨŠΠ Xœΐ~± Όΰ ςΧ ΌPχζ°y:q#εΟκ€q(ι ρρΐρσηΐκπsXΰpΰaιδ qˆŽhδ@ι@vhα š «@TpŸˆ&ΐ~›π •° ˜P~%~!~έg‚ΪGLω”N2h„ΊG„Ί¨‹»§ww7wr—{FΨ{Ί§|Μ·.ΖaΘΑš'vx‰ρŒ‚ˆΩΓ±‚ `˜ƒθˆƒh谈„HŽq‰Šxˆ’q‰δhκ‰ŽΈy™xΠ0σχ~ ν§ £€~•`~ͺΨPΐuŒFw ‰‹Ιχ{Μ'y‘™‘Ή‘Y!Α·‘ΊqΩP‰,’P ρ@€§›Η—Q‰ΰ°ˆ‹8θπρ° a P AΉ ΫP Ϋΰ E‰”EI”ίΠ”NΫί •HΩκ`žΑ8@ΰΰΩ–ς a ‡b–ρOhYj©–i9υ—l‰–.QŽ˜1€ΔŽ])e|9.Π—#V€‰_9˜κ%˜†Ω]…™˜Ο…˜Œ‰\‹ω˜¬ε˜’ωY‘Y™}E™˜©V—Ή™D₯™žSšš€9O£yšΚdšͺyK©Ωš“Δš°)H―9›^$›ΆΩD΅™›,„›ΌΙA»ω›δ›Β™?ΑYœζCœΘΩ=ΗΉœΚ£œΞω;͝ͺΤω9Σy…cΪ™7Ωٝ_ÝΰΥ5ί9ž/#žζΙ1ε™žγ‚žμ™-λωž–βžςΉ&ρYŸ BŸψΉχΉŸΎ‘Ÿώ©ύ ™ Jz Ža  Ϊ Ϊ ‡Α *:‘|!‘Ίš‘u‘ϊ‘κU ’–R™@I‘ ’,j)κ’+ £-ϊ’4£5ͺ’/J’ΑˆQ χw>jB€@ϊ£Cj€Dz€JŠ€L*€η £qŽyˆπ Ujη°Y Tϊ€\ ˆZΊ_κ₯]¦c:₯`Ί₯]ЦOjŽΌ!ω ,?f• H° @s"4`Ξ Γ‡#JœH±βD…ZάΘ±£Η C̈Q€Ι“(’T˜²₯Λ—0d³¦M†35ήάΙ³gΑœ }  t¨Ρ£)*]Κ΄©Σ§PW"JΥcΤ«X³j…Z΅«Χˆ[Ê{υ«Ω³Ιͺ]Λ6!Ϊ·]Ϋʝ»]£tσκmz·―Π½€gτKx§ΰΓ€ +‰ΈqΫŐa:ž<6²ε–”3Χ½Μ9€ζΟQ;‹ώΊ΄ΣΡ¨-š^]4΅k‰¬cK}M{€μΫAkλN‹ϋφξέ½}Φ\ψπΧΕc―\ωrΧΝW?GέττΤΥK_ǞτφΡέ?^σψΞε3ŸGŸžςϊΛν'Ώ‡ίρόΘυίǟρώΕύφίTΩ¬@ŽL:•ΝFΈΒ Ω€ΓΤ€GQΙvH!ƒ .…Nv(ρ £†F©sΐcΔ(#… ΪβRΩ€ £Œ‚ΐΞ…,ϊ€NsPaδ‘ TθЍLεxδ‘s ΞRAE€‘'4 % \`A_‚™˜d†iζ˜g–‰ζšjΆ™ζ›lΒιfœtfЁ hy‚‘QώHe•=]I„"πΑ  (‹6:£: ι€’Vι₯”bji¦œnκi€|P(0PΡηŸ€ς$(‘QDρ,Έΰς‹¬±ΞJλ­ΆζZλΈςͺk―ΐώ*¬―Δ[쬲|Π*‘Z˜Z€Š¨¦jΣ•Z0 ƒ‘3Œ1ΖΓ­·έrk€Έδ3Ήεž«nΊμ’λξΊο~+oΈτ‚[ΜΈπΒkΜ0‘ˆ  0κ,΄­I{p€"p Άt[ΜΔW|―]g\±Sd‹ 3μ0ΒκLΉ’Α5©“M6Ο„‚ ‘ΨR‹/kLρ]6ΫΌΡΜΆ„β„›<³²…'£\ΣΠΆH‚/΅γ‹05λ WΞsδΛΥΆd1A*Σ¬œFΓ„:λ43Β“6ΥOΝφΔ₯}Μ/KΐI9ι\pΨ1•ΣŒ#@ύφΝώΡΎK,ΠΚ7&ƒΝχK~.ψΰ£E9άSχβύ8δ`ΜδonψGšΐωiŸƒψ/Q³3Υמyβ«;ήzJ‘‹NΊμ³”1H©ηϋξ&υϋεœU~»κŒσ…|K½;νηixτO’ςΧηό^ράGλ½HՎ}φ›—oώωΟόzΪο9ό ₯~Υτ·ίωύψλˆό(7>u/€ρ υΨΏνύooδΘ8ς=p&̟Υ'ΎώAο‚Μ C·< Vwξƒ +’?~Η‚¬[‘E&X:ΪO…2”H OΗ>Ζ0‡‘!πΨχΑQ‡άNXD#ρ!B\ί }xΌ':d‡5$β qhE‚D±ƒZLaNΊˆDΐ-‡SάβΙE*qx6cΩxΕ$Ίp;0t" πE0ΦΔΔΐΧWκ'ΗΩμ± Xβu1 bθBƒ4 ιΨΗ%.ΙΠE 9•<Ύο‰”bLˆ‹|ΐΊ€Ή¨BHς©$k"Œ_” αΠ…&ΡΥII~r‘τ#LŒ‘‹Rj€ α@₯*{ΩΔ*Rσ«Ι1ˆΡŠ|¨ΰ˜ΫΠ/–y”VNς™fδ 0]RΛjͺΰœ^H‡2‰I£xς—l”₯ΕnΘRžσœdψF34ΙMŸΌ“‹ΰτέΫf“bζƒ*ΰBΙ@ŽuΆΣŸ(t%I`ιEhήΡ%s‹…=~ΰƒψΰ;@9tI ^φδŸk€h,νˆΖa’2?ψlΣˆT™&έ JSJQy΄&U‚p „#( JpΓ7ΙIFτ›ρdic2·j"αWE4ς‘zt•[«δΙNηΨS‹^4%€¬&VA $(ŠhD&b‘ „υ&c¨JW΁ ₯„‚ΰΡ (@‘­x….!yWΌ>ͺ]τι_©ϊ‹j’a›Ψ†  Š}ΒΝΎ (₯ͺH—–²­ΨΔ+T!Xvπ³±Nm&<Ι(YΜΩΔ–ωΠE+t{2Xα‹-gK[Šς%άΕ6v« Ε6#ΡxE?OZΡ΄„-E.1S ;έrbœ¨kSΕZ]ž–΅―Ρ¦*ΩiŒ_4W±­c‡K\+ΦΦyڍ/Xο*_ΗΚ QEov―“W½ͺτΎ?}Ž7Ÿr`γžu7~%0ΝzΉ [˜vΞ°Ν"lΰΡ XΓ ±ˆ/ΌΰNψu~±ŠW¬aG‡ 4M0YLγWΨΈ±[Pƒ`ϋΨΖ%fLΚQŽmωΘHN²’·ρ&£O.Η:Κ“ψΚXΆ o„œ‘o@‚`³˜ΗLζ l`-hΑ˜HΠ h@v±Lg:kyΛeΑ`PX’“Γ|#x€˜ΎDθA“iLΈ0ЁF»Ήp€ `θB[Ίƒ†ΐbε:{ZΕ­\’y­²γ”δ ¨V NJoG¬ΓAλZΧΊͺP„ ψϊΧ*HB2Α oΔyΟNφŠοό“QwΖΥF=RjΧγΌΨD¬ ‚_ZPΈC%rAŽiηΓՎσ•Νn3[Τ©¦«/p @C” ΰm8 nP„*Œ=”·ϋΰ υsΖΖp†WƒΝfΰuΏ 2δΘ¨‡=τatΌΰFΈΘΩφξα°ƒαΰΕ'ΆένHχ°‚ΈyA΄|δ/ΉhΞpdlbd°Ώ½έh ΘaΰωΈΝCŽσ¦WLα©a‡7rν†#ΌάΫ<°ψ(xQ LΊ07wz²u~ž-Ή¨ΔΈ=ρ˜ίΉ΅@ς™N‹ηd· ; ΰs  έίί8%T u βΰ1…οΞx¨wΕμc‹Υ­ήod=£@8ށŽΔΧΖξŒGxޏrr΄c"PθvΏUξq‡£ζθH‡Π1œ°‡>Λώσ δΡΡП½νGΈ* ‘Žt€ƒ²ίθoΟnΗίδδμΈ·•pu_[ž Θ|ΝΙρ~φ΄Žν™ογΡς¦_»†l(δξΫ~ψ³|ςΪόΩ;2F‘2¨€ίμ§Α'p…§έ—|©2~φGcΞ7»'}hpμg}>€}™—7%Γσg4υ·€v–{qrސ ˜ ~§2W Ό w±·­£€j XfΧP™°Vΐη˜@xκ€ν°wԁ1ψc hΡ§ θo?€}—BHw2ƒE˜aϋ•ΐ λΐp#ˆ n`/Η~(˜Ÿ°‚†Gπ`u…μΖ-Δ@ W™ ύ§zήn<ˆtοP#η%g)憇€‡Ιpˆ±`‡O h€g}J…Θ€€ΈW|Δt‚b%uˆΊ° KΘkθŒΦV*(k蠁.H‰œΆx—ψ6`‡°xˆΎΠ ŠVi.ηΠDЁΠ[Έκ „ͺD–ΨŠSˆΔ ‰˜^°o€ηr$π|Π%1›CeΕΘB¬(ˆϋ•‰ΛxˆΩ¦hPλ§‹‘ζπnΠœ JνU3Β0ƒΫDx{pΈŒΎ@uά–Ž.ΧEΰ|ΐ ΈΠ-Β lCυhΰP!Ά- Ύ‡Γ`„‹ˆ¨ˆA ‹λΧ‘ΣΘ™ ]%΅_T‡W£5œ J²±2ΩΠ 1s5I~™˜ ΩΦ‰cθrπfН@/Pˆƒ5Άΰ Ο 4,ιγ0"s&1DYc―‹αΈ΅˜ΈxŽκX]   ΙPRΔ01$iaΆ€P) ƒ0ρΠ”1$E2(Π,"` g‰pΚȌΰŒ;ΰ‘Φ’‰–Uω6Ά°ΝB(|"%rI«‚QSω ˜™™šΉ™œΩ™žΙ™™I›ΐ]P‘ΨŒ†ΰb š +³ς™²9›œY P™S*Q™’Y$ΥB*0πtP€@œΖYœΘyœΚ™œΜΉœΛω$ΠkΊ˜š-°Y@œΝ ΫιœέωΛI0Μβ,Ό9“™ ΰ`ξωžπŸς9Ÿτ)ŸmφhE§šphRŸώωŸϊžΰκ‰ Π,»yž (Zp*aΐtΐ:‘J‘Š‘š‘Ϊ‘ϊ‘|`NZ’&z’(š’*Ί’%Ja zΝbž ϊ"c ;"Οpλ β e> €?Ϊ£C€D*€Hz€G*δ0eNeDφ£β0eSZ₯RZ>š₯ZΊ₯\Ϊ₯\*eΟ 2‚£Z0@Œrι"‚P"0B#B16~‘#l:=‚¦ri “§’ $’§3!ΰπ}‘©ρΐρ¨‰ v: §X2%}Ψ}η!ω ,=Œt 4G° A*\Θ°‘Γ‡#JŒh°"Α‰3jάΘ±£ΗŽ~I²δMͺ\Ι²εF”"]ʜ‰ζEš8sκΜhσζΟ{J'8pV$MΊb8u=£JJ΅ͺUƒM—*]‘ Ί’`Úwdށ9hΡ€w΅­Ϋ·p ”6ν‘lνΔκέ«1Ϋ‘1€Ο9ΐ.αÈ+˜8π]u|#Kn˜m*.S™SjβΟ ―˜£ω²'«ž\Yσ‰ jΘ`!mΫ΅oλΞΝ·οέΏ{.ΌxπγΔ‘σ>p#AƒšΉ’3·ΊϊήΦT΄4@€ Ζ€~ΌωςθΙ«?Ώ>=ϋχξ㷟Ÿ>ϊ5Έ'€qy…―ΦvQ$€@`€Λ/Έ,Ψ ƒFα„V(‘…^¨a†bθα†NxQp§E ¨βPΨia ‚SŒ1Ζ@£5ή¨cŽ<βθγŽ?φδBδ‘D"Yc$ž°ίew­(εN~pXf9Μ”Ce‰₯ΐU:\–ιRWΩ<#KΘŠ-7š‰“1Ά„"Λxr šπΘι'Iθ|Ξ;ΏXΠΒ/ΓS̟4ΡhΜ/WD I:Θθ₯ύRA Έ(Š)NΈDͺ‰:P}j*G…rj€Œ§Άτ¨¨ž΅*«DΈΪι’³ͺ€±ζκ«Bκhͺ*«ΏŽτ*―>ϋ«°·*K£&λ쬩β²*Σntl΄Τe›+³žzΛ΄½ŠΫj΅Χš›ΡΆεͺϋ)ΈΨΊK+¬Κϋ'ΊΔΪϋ»υκk&ΌώFDnΏO‰oΌ'Δo· »i³ 340ΓlkΊ#΄pΖ\Μ1B,εΑ"o,²Š‹ςΙ’ό±Ι,[—ςΗ+Η\ΛΓl³j3s\σΞ“αœ±Ξ@GΦsΖ?Ν—Π­΄^GλU#Βa%ύ΄XL‡5£’ω†ετΥ`E-Φ0ΔΨ(Υ@Y vQYƒeŒ.φ£KΩ«z )²―φΓαξU έε c1Ώœ –ΪzΥ6QΒn€αθ2·αD}ψObWK,h@F8Ν  ΧE!~ΉN‹u ݝ“αάeχ½“ε§η”ωP·’η 3χ/€dzν4₯”1t«`€ *AŽδ±£-νΔΟt;PΕθb@><¨Π}d>Έγ·4|υ.Σ1…Ϋc€πΓο<τ•―υθ·tύOΘ τΓJ°•€†ΐύNxτΚ[ώŠw±imsP‚p A€ζ›@j4§»qk;ΩίNΨ'$α&„F>V˜z$Šƒ99M’ΎΩCw(\D Ž€ ](’™x…φfηΑvΝP&"ΤIφ87¬£P0ΐ9Z!D]Γl:‘αGRC°OwŸ3@5ξ`Uxφc ώΆΘEΎ₯‘tK†8 UXΑ η0π`˜Ε²Ρz |£‹|θ‚hE9Θ9ΙՍˆ~όcϊά¨šm΄BrBlF,’ρŠG E‹’άHuςΆ_θBFΊh'V© ΰ―ˆ e¦(i4G.{―ˆ…φΕΗFR–*εœ…Εb3'kfF’h/P*S"ΒTW2Ÿ MZͺμ—ΤΜT KKfS”Φ€6Ώ‰ͺmΎ¬›δœ%§dη³q>mωF9†MsM“c0ΐ π€θ€ς‰fΚΛ™ ³B2p 4 ΠζΜ™3tξ,αΰE&ς 8 !uC#8g»pΆoϊ‚gR–"cυ¨@ @!£\=Ά—ΤQth•<-pEžΖŸΈC$*ΤΤ y 4άgβΔ–ˆAέ…PF₯Δί(ŠΑ LάαL₯)T`…@Hu…ϊΘ‡ϋ°φΣ¦UY G.Ρ8ΰ£N]+‘ oΨγ°«ΩͺΊΊ* ˜T ήP…"ΘπƒJ΄P‘ŠpΘuEυΧ=Wdv°#² šκTΰΰ Έ.ꑏΉΜ€Hsg€RςΨ@Aƒπ‚ς (Α ŠΘE8ΜρK…Φ[£Υ uJΛhŒ"Β%nq›ˆ ^„Γ+©AˆBύ€Xs1v&(ιm ±ΡŽͺΥ©6½C%xAށƒR²znΆ’K”†Ÿˆikα{ΣO ΐ―³Κ+σ‚&κ%GYΟͺνjͺ9Mdξk.ύN‹Ώ± ;τŠ 7 α½NU’ uΌCώJ ΤΕ`o9Ψ!ιU/dχŠ% X°nm1©Β[0; Δ™nEL{ZΙRΕa½v cΘ«qΆΊυFCX”€άΞ€Ι;3²²’•κ’"dPv€7`Βαx‡ž‰ 4-OKm]ξνKaWGΈCwΓ‘šw\NΝΕϊšTq]χ ς₯o‚Ε‘??KF ‰Ž%\‰;tΤΒP5°ΐqެ.ΎZT7Cbڌΐ Pψ+qيSd€γ^™ΨθιKΙθΨΘ>v¨&0*υκUnπ±vUdr8:ΓV&¬”μnΏΚšΈ²7x,mβς`°ͺhρ;ΘQίtκ·²κΆΌM#b ΙHΖ/œ€3ΑΪΐΘΐY*ΰΕ|vχΆ«3οyΫ;ί±Ψ¨δόWšw³Ήπ™Hεnˆ[k Ÿw½‘ |C|£IhΕ1‹'$7WVG°;ΝΊ–)δ'y2ZQβB·φ―(Bψ ‰+0Σ‘9OΜ―cηςyΙσ½sh/5’u@ΠEzIGAk:±TΊBR-9p2Pο61πν ɚΈΒΧ@ΠΝЈWξŽ[ΥΆΐξM±Ÿ„ιnD6XžlG!δ&o»"ΠPf]λO€Cέu‘¨=.Τ »ί RvΑžπτΎw2t±‰@ «άŸ°† ^ρξμeύŠ1λΎϋ}ΥΰθŠ,0YψΒf½πC~-‘Χ{νkΟ7ισ€T\υxB ΡI{γΓύΎ3 ‰εφΙ}6²±&ΘΒp ώπΧϊγ~£Ω}ΎHπ>pβΕΖΦΤ/|τί)OΟ0~~ αp%^BΒ€}μΧ€Θζ(Θ—|Ιqyπ*wEC· Έ`o2’[γ€3’€`RQB€ A ά# (‚θ~wχsU]0GΈπ7ωΗ.xl0%‚0 \‚)hTP ’ xΧ„Nψ„P…R8…Χfπ€Y…ΌΗ‰  ‚w2…dX†O8"QpTΐΆηwb 0e`‡xx‡z˜‡|Έ‡~Ψ‡€xt[xΠK wˆ‹ψ‡ŽΘˆψ‡#άΑm˜ o(v- ήa Š’8Š€XЦ8Š€ ur·…ͺΨP΄qв8‹΄HŠψΡ‰ p"˜‰™HsΨ‘'p7P|PŒΖxŒΘ˜ŒΚΈŒΚhNrΐŒ8ΤXΕΘΑ¨‹—h„ Q€‘‚qυPβpεxŽζ˜ŽθΈŽκ؎μxŽεPη°λPς$OρHŽϊ(δ(ώθϋψ9YY£Αΰ¨ΑQu‘:V‘y‘½Ε%θ0gc0 鐫v ˜ πbƒ P’pV&’αbz{–p£ρ“4©“ρΐ0y:3φ“!ω ,=‚ ˜H°ΰ@*\Θ°‘Γ‡#JœΡ EŠ3jάΘ±£Η ~I²δÐMͺ\Ι²%H”]ʜΙfLš8sκ€hΣάΟ&{J'8pΩ’*MΪ§Σ§P£Jjpι£κŠjέjά+ΐ† ΛNΥ³hΣͺ8Ά-ˆ#ΪqK—γœ9‚ξ t€έΪΏ€‹Μ›οΈYλ*^μ*©Μ1`V°εΛT Μ‰Lα ʌC‹^YΛ‰7¬α²FLΦ¬]Γnύz5νΩ²mηŽ]›7ξή·uίά·πίΘWΈqFd„‰EK§KšŠ–Τ8° ϋƒξΰΏƒ_ >όxςηΛ{OΟ~ΌzτξΫ›O~χ5²7Πω3ΊιjeN6ΥE‘@0€q$‰0θ`ƒ>(a„Nha…^¨a†nψ``ΐp sT¬Ν¦T6GŒαb~`Μqΐ/ΒΤhγ8ζ¨γŽ<φθγ@ώx@cάp.šŠLΔβ]uΤpCuP`Œ1Mu€ `άPCŒs˜ˆb–d„8ξP°‚ ˆΠ¦Γ`YfN"ˆΐ¦¨yΔ‰sφiR:κ€#‹Ιr₯0rϊΩ•ΓΘbΐ`΅€’”v„KBqV:S ©3¦¦ b4i¨.%šΠ§€¦ͺκͺ¬Άκκ«°Ζ*무Φjλ­ΈζͺλΌφκλ―ΐ+μ°Δkμ±Θ&«μ²Μ6λμ³ΠF+ν΄ΤVkν΅Ψf«νΆ΄S ·ΰšδmΈδzδνΉί–«ξDθ’»ξ»΅λ.Ότ o»υΒ{οΌωͺ»/Ύύ’λ­1ΔcΜΎ‡k°.Γ£‹0'Μ­1ΊΨ“Œ.,―ΔΪCŒωΐƒŒ.Ώ\y/ΗΨ σ BV„£ Ζ 0ΚΤ&ͺαŒ\²Μ3Σ,νΗ¨pσ6Ίπ²σΖ>K«2B*4νE:Θπ 1›nΡΜtΣ*ρM3οl/Φ£K,π j“ANBT“=ν1+Ϋσƒ=ψπΓhΌ1B¦ΚΝ¬Φόπƒ6ώCί:cΈΰɚK>J(ƒG(„n|㰏CŽ,έ­δƒΔ§#M>ωΤΣ:θ‘‹~,1₯£%H(‚Œ"d‹.€ΛΎ¬δω@α<Ν@E9­Ός²0  Ώ,ιω±Ν&ΫΈ…*`—,}³OήL+›Ό’Šρμ„ϋχΔώ2Ή.­ΐV|σ<ϋΛ^©Λ6ρλβ|3±ˆΖ+Δ†?dιd%ƒ'6Α ΰE―€Η2ΖΞ¨&A9/!λƒ ―„Α+qƒLΘ6ς>‹X@ ZP`@P€ E(dΐΐB4Ё+ΡPEΌ …@hP„+|θ«zΤ™pΰ„@V„*ΒΑΔ]±.ή’48 w¨DΤ  œ Γ']δΚAb`€c°.Όΐl+‘ ŠΘ9μ²8Φj ε(q(TΡΈ"ς0Šhΐ˜4$«.‚ŽN’#Œp!I ΌP!5«δΡ Jp€yΨ,b‹¬l'=‰Žh"PΠ@$#ιΞA8F._ev„#Š †IxA[D‘– *”πΠψDŽ@Εa: wΨ2Τ‘ŽwLͺά¬”O,FE‘šΰAsŽt “©a<δM^šγ•±€&σ@Šh΄sTη@ vψ2c€f1έ€ dƒžΪˆ@'Z›|䀦4ρ©+`“‹ιπηH$J’Β„μη8ΛI !Q{‡;W2šΚΔ€Ό¬η=©©Ο@’P!u MzT›δΡ ζBϊН•ͺA*//šQsr£δp'@2U°vδ¦)ζ4©iMlz1ΛWέͺ§œœ£ΈCxjFtͺ³CUL[ωΪמΰT©*ΐ')HF54{εfς”oR”₯V­ΐΠhπRE‹ηf+γX² Σ¬εeήρO2eΦ„ϋΒΕ"  ֞4dπK³ˆKΌ’’LJν ο%Αέφ– 8…F`+ΪΒ•2ρ@ξœn+Ί΅ΛƒΔψ….` s@V²”}ͺv+₯\Ωy]W"՞Ё'‘ΊW$-) ‘ŽγƊ»{οw fŒd#ΙΰE#ς„8Έf΄bjΈŸαρŽ‹ •aν§(d' `¨£Θ­αO«"^x1Η]_8@βa*3YΓ‡^ŒŒΑ瀁BPU+Œ+2BΠ π‹²›ύμhO»ΪΧvaΈ8ΖfPδƒ;0ν4$ΒΈ`»ήχΞχ€! '@:#ž— μ ΘzΠ5ΑψΖ;ώρΌδ#Ÿˆ.€œιθΐZ@Lώσ =δ ’μ!\§•ΧηB Θhα@Ϊ9€fOϋΪΫώφΈΟύνsΘt d™Θ€ξ‡Oόβη?Hΐ~ϊ#8ήjފi=dNΣ€Τ8AΧΏφ―Ÿύνc_ΪwχΑούξ‹ϋαwBH@|όιGωΙ~σΓώρ·?ϊ—s‚œ 2&2idB .R€g #λP Xεπ Θ€ θ€  X˜€ί€λπ ؁¨8%ˆ8‚&˜‚Έ€ίps0gP€c $†Χ$r:xδ€"θΐδ§"„DˆzFX„C¨„GψO(Ε@Θπ@„QΈ„Hh…”„WΨ„Aˆ…]Θ…Zh[²ƒc&Ω°^°²z\α5Χq ‰, Π†·'Mψ|s"Tz(T %,μΔΩυρeQeΝV)}ΘX}ŠΨ*j«Ψˆ€Βˆ¨*8‰š"‰–*•˜‰Š‚‰œX)›ψ‰sβ‰’θ'‘XЍˆ51©ψ*ηΠ !|!‹6TC΄x‹Ά˜‹³¨‹΅Έ‹ΎX‹΄ΨбVήP ή ΗhŒΘΈŒΚ˜ŒΗψŒΡЌΡΞȌΤ8ΦˆŒ2%Œ ρηΠ_Qη°εθ@„η€ŽδhŽλΐްŽιXŽη˜ŽρȎτψŽφ(G8!ω ,=” ˜H° 9*\Θ°‘Γ‡#Jœ(Ρ EŠ3jάΘ±£Η/~I²dÐMͺ\Ι²%H”]ʜyζAš8sκΔhσζΟ${JgΟ£H“*]Κ΄)Μ’P£štJ΅ͺΥ«T₯jέͺ«Χ―`―rKΦaΨ³hΣ†,Λ–­Ϊ·pΏΆ»5έ»Mικ•Š·―_‘{CύKΨΰΓD +V‹Έ1ΠŐε:žœ3²e«”3³—ν–ηϝλ]]°σηΟΰΐ½ΣΜΪcΆbΛ>p iΰhΛ–½"›ΊΦΐ5ΎCœψ™9Κ)_ΞΌΉσηΠ£KŸN½zυsΞ'ήϋwπο_SOeL”9Ύ©_ΟΎ½ϋχπγ˟OΏ~ύs’D!OεH6πB$^yT pΒ p‘`W(ΘƒBΈ`ƒFHαƒJˆ‘…Vθα†j(b†$Fxΐ 'œΓγuΰ‹ E PΓ<9κΘcŽ;φ$?ϊ(d‘CIδ‘L.ι€’P&)%’TPC hΡβ0vi€Œ4ΒΖ–tbI™gš‰ζšjΆ™ζ›lΒιfœtΞi§œxΦ™g›€ ΐ°%:^ΒfQ€Q€1Œσ 1Ž#Œ1ΔόB©₯•^ͺi¦œbκ馟v κ¨’–κ©€ZΪ§' h\ 8GΜ!ˆ 5„Q‡ όb@£“"dΜ€Γ2J¬°Δ&k,£Θ.[μ³Ν>«¬1ΡN{μ―Φ:[-³άF ·Ξ៬0²³‚)xΰΑ&ˆ@G"˜`ΒΊˆ ‚νΌ ;©ΙrA²ψβ ΅ϊj$°,NXπejΰxWπwδΰ‚Π/Ε<Ό‘1ΕHœ:„Z žΓΏλ1FŽ*δπΘίU€ςF›Ό2x ‡LπΛ•Ό1ΝΑ©ŒσD-ο ³2ϋμΝB§sΡυŒ4k1‹Ό΄°Ύ>­ΩΡR'€tՎ5=σΣDcέΥX_νυaZcέυΨ‚]΅ΨhοUvΥg·­—ΪR³-χ\oKχέmΡύ΄έ|—•7ΧQN—ίKn8Wƒ/½χβ\!Ž΄βKΥ8W.•δESyQ—ωηEq.΄η€ΊΠ£§”ι>£ξΊN«ϋάϊμ:ΑΎ³μΈΣTϋΞ·χN“ξ8σ.ΌKΏγόρ.O³ρΜ―”<ΝΛGΏ’σ/Co}IΣΏ\½άΫl“Π7―·­ύΨp°Α-ΔpA?uΏςχ^+œΑύ`ΰ€BXόŸH@κ"Ψ[Ωω–ކΓy8BB ‚GιU„ι¨Gz:¨’+¨qJC*Bˆ^1NυˆY‰"ΥwQU VEˆB‘‘+Μ²„@Γ(’ΟΈ~„¬Ο¬§P‡†°ƒQΜ&mš p$„’*™λPκJ.ϊ―KaΘ0£aF ¬3©”4lKϋ5ΕRD)xDπΉˆ$¬“‚wπ*80‹ΝͺN₯fk)BͺZŸ,δœ d Eπ"ΌΕ k|Ϋ%»…– ©‘_Σθ†Α’C§[Τ g«[ŒbPλ Π„:†‘aB6₯βι±ΒqΊ^+oyq^υ"%#μ€FiΣθ…J@Γc u₯΄μιχΑϊuTΧ ˜‰ 3θ#y[SΊ Ώ±ƒ°ˆω›ήυΧΈρF•ΛNηͺ#¬icpΟ*βΧXΒ@0FŠ }ώ•‚hΨ„7ά^Δ°1 ¦‹—\^„Tμfy,,m ΝωVΆ€•qƒΑΓδ.W¬Ι ٚj‡YΜ3¦‘ ˜ˆ<βœ#&ΙZρr  _«mδšGΈmr VϋMΛΏDŒœ»Lg0?d₯W¦Š!)IΎ3Ρm›c̚A?˜Ξ˜~2EΊˆVφx«9tƒMκ%8Λ$&hΜ4]KZ!¬–³ pSΌς=€saRΛjtΘ/*Π\`ΜΠdqυ₯cmηŒΛ (RΙ``xψϊ]¦fIA~‘κU3(Κf2DΎ½FƒΙHΖ&ς@‚(6ΈιDαι_;fΫΔ66²‹ncš$ηΦ…"Τι€hΰb@FIMΌ²l―dΫݞTΏ'NρŠΫΨάΖHΊ[‘‡"Π’–x$œ06veΐv A†]μc[όε0W6Ζ’α‹L0z–(ΑZ!ŒŒM8% ΏχΚ#ξς˜ύθζFw2b‘ˆ$˜v–!oΔ+’Α¨ςώβη'GYΚ§Ής|ύθ`ωΉΥ}˜p–$€',e)“Ψδ(φ˜ΓUqUK<μxt£Ξn^4β OΧ€žΐ‡X˜χQ"ΖΨΥK t­ ]Ψ^Ο»δ½Μ¨tG±8 Ka¬κ>φβαχ‡Ν}*C·ϋΧ'χ€§[6οΐ,iY8΄"S’σθ)œum]ε,Χ7λY©₯Β―³y"tA±žGxΠ»ΗξΛNΟn«~ψHη{ΊCH„Ω; ν›xΤη)Ύ{ŸύΎ-Α_=φ)N)bδσ˜ΙOtQ ηΓΌό;£ώJ¬ονυ»γ— Qδq¦UK] τWtκnψ‡3ηΗιηαVyΊ€ 4{9Η­Π|’Χ€4£#‘· ΆΠ& Ά Ηp xqν—n­p|‚rO uΔπ|x‡‚Ά"ΰ ž‘–υ2Έœ1P΄a-ac— n°ότ}p ’²~Η @œ‘/AΧΩpŁ7up†jΈ†lΨ†nψ†oXyθΖtO {‚Χς§ Ξ‡|Ψ‡}xu07€`ΐͺ!„Ž&(ΰ‡Žψˆlxn‘…`‰€ υ‰šθˆΏΠ'QΠ*―β"_ˆ’a2&šŠͺΈŠ¬ΨŠψŠ­h rP‡‘”?1 ˆŠ¦‹ΌΨ‹ΎΨŠΰ'€’%TΠυφ.C¨₯H#6r°ΟΠ8XΤxΦh0‘t#PΩˆδ8ŽζXŽΣh%XŠΩpŒδ‚1 T'Πβ-p: όΈώ؏ωύθ DΰO ψHω‘ ‘'R'@γ²=*!δλWžd5’"Y’$y’&™’(™ρΐfδεpkO˜E(+©’8βy“:™’δ€ό±%ͺE.% ‰X+Ά2Ά"ΐξ(€ Gy”ώ”…R™PD€ώΓ•[i] –_–d9–fι•h)–^– †++—q VΉ2p)—sιμ€2ιΰaΥΰ ј˜„9˜‚ ˜ˆ †©˜‰y˜…Ω˜Œω˜„y—•Ωp™˜y™{Ή4萙™ω ƒ2θPτašp렚₯I™­ΉšλКπš¬‰πΰšΆ©š΅y›³™›z…>­ΤJρΔ”Rƒν0œΓO©!ω ,=£w ˜H° 9*\Θ°‘Γ‡#Jœ(Ρ EŠ3jάΘ±£Η ~I²€Γ"Mͺ\Ι²₯F”0cʜI³¦Ν›8]κάΙs%Ο@ƒ ²§Ρ£H']Κ΄©Σ€P£"uJ΅ͺ՘R³jm ά­l·ΎŠ­w΅¬Ω`ΑнΥUέΦ·p;‚ΛV έέ{Φΐ»vWp·°aˆΩ ŒYΜx΁uηΚEž,Ή2εΛ–3cή¬Ή3ηϞCƒž|`cΖ‚ ^Ν:Ϋ *°cΟ)PΆνΫΈsλήΝ»·οίΐ˜;vjΦΘ».E ˜ΈLEŸ.½:υλΦ³cί½;χοήΓƒ§^Œ–ζQ`―ΘΖ.Ή{ΈΛ©D9AςλίΟΏΏ(ΰ€x@ υ!λ΅χήƒRΕ§Eυέp@ W΄†rΈa†v’‡$Žh’ˆ(†¨b‰)²Έβ‰/¦xΐ 7  °‘Ν;φ˜T|QPπ‹Υό"LBK&Ή$BM*Ι$’RBIε“D‰₯–S:Ωe•Y^ωε–bZι₯_sh@ Η£pς”ΝsΤ!H aΨI–qE u€QCsΜ‘£j}&jœ+¬πŠ ‚0ΖXY©’-I ι€°‚Žθ`*κGθt•M6²`π,΅Τ2jO­ΚβΔœΪΥ«ΈŽ4BΕδΚŸΰ κλ°νŠ‹1½ΛR² «μ³Yν΄ΤnUΗ2[νΆά²$m·ΰ†k΅ΩŠkξΉ}‹ξΊμ6D.²«Σ«ΆνΦλ’ΊρΚ«―½όΆτ.½oι»―χk°Fψ&πΒ7ΜΡΏ†-ΜpΑWΜPΒ…I,±Ε?qΖ3άρΘ aWΘ“<ςΗ'£œ²Κ›ά²ΛΓμ0ΛpΡ<±Ν Λ°ΞΜ³Α8η τΌCμσVG4ΏE3έ4―OΫ»΄Τ@ ]u½Qk5υΦό^UΣƒ-nΧ^ƒ¬Λf[œΌjλάv»hK•μ0ΔθB°ΘeΟΝ­Ψv£‹=θBŒk3Ϋ·ίΥΦU1ΔΔ’O9Θ~€B‹3ŽΤ7΅%xTΒό"Ήαθbω₯šΓِB«ε8T‚Kα4c:κ©g…―ΤηPCL+ω¨p»7yσ ο½#N+w¨hΫ$Τ=Bίsούψ͞TθΘ« ΎηTξ<τΡ»TO=T*Έ‘J>ω ΔBύσ(ΐt!Η‘KžϊT@r˜ξ}ρsI>μ‘ 7XΟψ»ƒ+βρΏ•”#!θ8ΘBΜ—]HŽ*@aΘ@ΉΣE°$ό‹‡*ξ `PyΘ…§β%ε’³Η|@D"6πΟ{aGψΗUΈ‘†r@Έπ(”ά~ xQ hh!•ؐξUΰIόΛ‡9HΰEρy@ γΓJN Jΐqp0š#ojƒ»gaπ€ ƒ’%ύ›£ah " G8&‘‘Ζ|Τc$£EΎQ όb^Xd‘ dμπ=uΔβρς‘ΙEβ˜Π…"‘‰WθM½³H5:`8 ŠPP4τaΊ‡’F1a> ΰ†u4 P8G+|©‹%Σl1:Ζ‰h`Β Π@:€LDΓπ„S,+ω δαnΥΈTQΉ$Fπ a;Μ …c Έ€)DMžd1Ιh'b‘ +ΈαΊxή7“VrŽŠ€#`L,ιΗΥ<"Ί|θ‚ΊhE9Θ@Ίέi E†"”0R/TΒδ(Ω¨Ί΅ιb­0/›‹hΌΒώJΘ‰Œ@π4Š ΓOΩͺa­Τ‘‚ϋ…ή 'QNΐT£OC /ςpUάnή@‡ƒ.6TlΑ«0P duρŠXόq*³ˆGΡ±V0{€πΖD₯†uΌΫθΑ,"Π\δA‡u)Βr€c"_ QΙΘΑ’“Ή¨^fUρ&0S‘%-H ΒrΜ³Q̟*β‘t8 ΄u-—lM“qΪφ‰UέΑŽήώΆ|£Šνp“p°Q•ψΛa:ΤΡΪ‘HΧZvΝάt©†cŠd€ςΐ w<χ#―UΤwe‹vx½ΖŒ’βh€ξz+Έw/D¦JNoT‚ ωŽxΘ.ΊΖH}½qΞ‘•οπ/Oζ›•Ρϊ­Έδ4§ κ€dBΓ†p„“φ`’ X51w·Βa©x8­0ρ(HEŠΥ’F£ΉοEJ|Uc›΅X§m%ιOƒz˜"CεΖ›‰G«šd­zC ΘrŸœά°™°ƒ‹ ΑaΙWΉΒΐβ%ˆ=ZΨΓ’!±prœΈ\/˜”–Ε­[5&ΛΝR₯Ι8’Z=k@~N”œ\΅šΨV΅ΉΥ_<|«bLAy[ΙΊB4‘ŽΧ‰PΜ +ά1Ξ ϋhΡ>’³²δ… MsΊΊΧe$s±] WZQ—&–Ζ κκN“SœηMo{ΐ^O Υ=Rυ¨BΦκMwZ χ6~^dx[ΚξIΥ4^Σ*ήψ‚Ή`dΜΓΦΠB6„² ‘yΙνNΐΐΌ_\Χ»w²νvwΫΙ F2bΑ‡uv™­Œ9L}μ[w‹lĈ\ ZC dΠVWΧ΅oτ;bd+7π<Α˜Π€b PpτKέκΈέΘf€ˆ·"H€15π>Œ΅g€^vΘG.π›Λε<χyΗ`~f_MMδWEv stΰ ‰Π[J‚ ‡Ιά_ανΩΤVσˆ'CpθΚ―ήΓ]J²φbΊ{Ύ’£ MmΙHΖ&,Xυ«'βp »Ϋφδ„\δˆ‹Έΐχφ”_=ˆKΖDΊή0Ή'‡ξy:βNŒL טθ$ΑŸ σ)Θ/*Π‚lΙkf&Ί/2†Ζ[½ œˆ8d'Βκ^„k}R½ZΏ6e !xΧE&Ήv8p"πΘη½Θαϋί³ υQ=λ]ψξ{_j#ΐ“‘ό'Τ°†$p>1Ύ/±fΏΪϊλ²|a„O|φΫ?kCωΟΉHc¦Ώ°~χ§/Όζlαt}ΑG«WΨ€ ~γ§KVp~@pπ λχ<¨/ξΧiπ‡.ςτΗ}Ψ€ϊ§K…r%°O%rpS‚ΣW}Ρ.Ψ's*ͺ‚ ΅ΰ Ã݁y А;ηEΐ±p>Έ0;(+  Ά,+Ζ7ˆ*ΰ² Ά7Kψo7qΗdL)ΐO•8]¨/ΆΠ ²πΰ Ο`+"„.1Š‚p‡xΨƒg2α'p%wr;w„ng†{(rwxxˆ‡ζr π-‘ˆ“θ:’x‰”ˆ‰–˜‰œΈ‰ž‰•¨―!B2@ˆ…7wsH€t=‡  H©Έ0ε1€# 2λ2hΰ Υΰ ьΏŒΔ8ŒΒŒΘ Ζ¨ŒΙxŒΕ،ΜψŒΑψY‹$BB$Ώ€ Ωψ Ϋ؍ΪθάψβŽδŽάXOyPΥˆπ γXŽΪτ(φhŽγ8QPm’ Œ(.ζ*η]υAηλθp ‰ ‘‘ ™ ‘ y‘ ِ鑐!!‚7@K’*Ή’,Ω’.ω’-ɐr€°0θ™“:Ή“;9# ‚‹λ±qSˆ@r”JΉ”LΩ”Nω”My`uU“‰P©”X™•\Ω•Jy 6Z Ω ”C9ρZp¦Ψ nω–p—r9—t9—fU—x™—zΉ—pYT€‹di–gsΒZ°‚PλŒ 반™’©₯q‹± 7˜ 1'…™s 0W s‚ΰ™… š9₯°­Ωš"…Σ(―隟Β©IΝΥ` ο ›ρa ξ•™Ή©개Μ92ΜωœΙ)!ω ,―4 !ω ,―4 !ω ,―4 !ω ,=₯u Μ.›Αƒΰΐ \Θ°‘Γ‡#JœH±"Ε„fCg±£Η CŠ ]Ζ“Iͺ\Ις!ʌ [ʜI³&H rκ<°"›ΝŸ@f[±3'NxA“*]κQ]9T’JA#Σ«$³*uN¬`Γ&5gξiΤ(Z’D1νΫΆopγʝK·έ»xσκέkwΫ4j©D‰κ՜ΨÈY’5U0ŒΗθ”hreΚ–3cή|Ή³fϜ?‹M΄ιΡ§)Σωπψ1α†Λžέ‘¬Y*$Hΰ‘C…ίΐƒ NΌΈργΘ“+?>‘ƒ‡έΉ΅P)L»Ίυ‡ΆηΠ’ϋ aδΘI$žxςȑ/žύϊτναΏWžΎϋϊρνΛΗ??Ώωa˜pΒ Ρ1Ϋu^GΦsŒ‘E 70†΅ #Μ/ΒXh!†^˜α‡‚ψα†#zΨaˆ$žX"Š&Ѝβ‹.Ζh‹cŒq`Œ1ΗV%θcbζ¨s€ sΜQC s€!‚-ΒcΜ1ΕDYΜ“RN ₯”Tbye”YrΉ₯•Uv ¦–a~)ζ™f¦εŒ`Τq$sr@;?Φy˜9θ¬ 'Δ@&ΤRε „j葈&ͺ蒌rYK+ˆΐΒ ˆ '8κΨ©ιUAͺŽ8Δ 0Β/c€” sj”©ͺͺ@ͺ’ ««­Κz*­³Ϊ+«Ήςz«ΈώΚ«1ΓΘςΛΈ"¦±mκlPd‘UN3ŒjΜ«Ο^Υ$±K‹8θ,–νΈ4EkΞ΄Υ6Ιk¬δώTe·±”m»τͺdξΉΤŽΠd½JI) Ός6Λοΐ"‘«―©εΏή–“πΓ!Ό/Δ6σορR¬qE#Ό±LNόρΘuL2KQώ"ςΙ,›Μ²J―όςΘ.ΟΒK`μ°ΝΧΜσG!7όσΖ>]QΚ2pΡJO³ΠM/οΔQ;³ΞUΜt֝1Χυn 6¬Ε¨ υΨ䊍φΣ_£=Ϊ`㌡ΫoOν1έ y½3ήΞΒΝ5gσ­©ί3άΆΰv^΅ά‡#ώ£βUλνψΰv;xγ“#yΤlοy‚›+ΝΈηŸ_Ί’—zεˆ_NΊκ΄ntη°kΞΊΰ£Χnϊν‚§{μΌγνϊοΥΙ>4νΔΟf<ΟR&όaΛ3_ŒσΟΠVΡΟά|ΰΥ Τ,•=MΏ$%υ΅C“ α €Bx“Τψ ƒΰφ˜— &V8°Π‹ΰΕ9R Π―%ΒπΡωΈ—9d(B ώ3€  dδΓΔ =ζ<Δ\θ~ Μήμ‘‹<π 0α|\0,d‰1ta€|τ Υ αλάfUΈAH‘ά@ rΤγ…ΠλΰaŽQΎ ζP‡`³@CΌ1 28 ‚*ΈC.DΩΔp%w³ΞΥD8΄ ˜€B‚„E #ƒ]τ’Χζ;£‘ƒ#E0ΐŽ€B ZAΠΈ`‹7G±θ"χ3_FUδαŠ€Ȑ‰Φ0q…Λ1ˆΡŠλΰŒ»γBΌ± φI²p‚*Ψaruι £™Α'’ocμ`­ >Ϊ@ °Ά²υE•|Π“cά!ΑD)d }4ΐΑ‹x”CH`Ϊ2‰cΨAu„; PB τΡVΐ4ΤρŽq €τ*&IŽ)Fδ μŽw ‡UΠΗInΒζGΈ&OζΠpΚ;Όρ S¦PnP9ΜρqA¬ #1UωUΎΌ… ­3Ρ¨Ζ5ώ Ή0;F4n^Εb©r’,Α’Μv±ƒP 0Α@ Cκ0ΧΙ0JmΞ4(S2Ζ-«ƒOސ#w°ΑN°Bhά‘₯-siΦμι£\†ƒh" ‡8 oˆγ^?#κΓ>ΉΘ°4Ρhhƒ˜EU\BšZΧz±Ά‚%—TγN•ˆ-¦#AΕͺ^΅ΚΉp‚₯©ΰEtŠΒ r’A2@¦ΐΆΧ„•m©KaG#οΐΟ±’‘­¨›΅ΞŒ­!­ISIιPI1δ€ΗΌηΪΧφ5Ά4Ρ%ˆB h\oλ•TΠ€©Ξ„ζN§Ι‹ŠbvΛe"«’ž°²ι„Ζ;β±R‹ͺ.»ν‚νLπ©O7”V’dψg@Γ΅[έ‘7½Ώ Ck Q‰R΄ΎΟ»οΈš ʊΌ•€ΔΐISz/ΦώNΐήHr‰SΚς >Gbά=@ψYκ50>™‡χRΡΘey;,‘ƒ8ΏaΗWΓDێ"ΰHG^YoŠΐ"lj\­ΘSd1ΊΥ±ŽylXΒaG`k ΒςB‡M.“)βd;…Έ©%΄°e‘ᎊ6xΛι²—a<ΪχN΅θ0σŽΡœfΖ6mJΔΰBb±*φ…%nuΛa:DΝ?ς&1t€#$ΈyH90K_ΊΙv~™L‰Αιd΄"EΐxŠŸ’£ZΎ4I='%ƒ›pxκ€ \ ȇœ ­κ‘°,N"†1’‘ _d Έ’:π„Fl@±XΗ™{-“_wΣΙΠ…"ΌΠΛ+v  ™ψΕ”r/^S[%ΦJ°‰AμX’ΚΦ ΰΐ bXŒKΞ=·―3=0a{ϊH ΅Rΐ‡V#L!Φ7Mέ’u;ΦΙvψžΐ]pϊΰΊB¨ΒkΒp–pZλ’·Ÿ]p©J·JΥτ Όρ}ΗbŠf7/ΑΛ+jΰΫ›Hj‘f₯ς|·ά#§[$(Ϋ$XƒΑος† sU>9¦_NMwZpBΌ‹ΐ‡W$cΧB•―$E©³$θq51ŽΝΟ‘'βǐiΣ;R³Ÿίb φ°³­KœΩ°Έ“vΞσ£­ά―vη2ήΓβκX(’€'8!na`|μ):Ω˞ψ$Ά€@ dα NΓ:χ4¨·‡VόΒήa·I8ν _„ΰΚJHηARlτ"1°…-jα‹£ŠEΨ͈υ*«‚ΏΒbκ”Lj/ό` Ο(vί‘[P ΐ[_)j/φ±#Ύμf›<;ΗΌJlπ‹όΈE-Ή?tά&7Q±$Δ MaΑi3ΗmΚΦfn±'}―’yσ·€ΣQΫΗ‘Q‘Q&` Ώ‚"8‚$X‚&x‚%θMΙ |Π0xk` (Xƒ6xƒ$h Ήx|σ βPΘ ΰ Έ` KΨ„Lψ„N…P8…R(…›Λχ=Πj  UH…`ψ…b†SX QΨ#ˆΊΑ`thP‡x˜‡zΈ‡|X‡>ί#j‡wH‡…h‡~Ψ‡ŠΈˆ‰θ π“cΑd”(E—h‰•˜‰œΈ‰žˆ‰Ÿ¨‰”Θox»Α"P1ΐ|°Š―ψŠ1‹°8‹΅(‹΄h‹²|/xΰŠ¬h‹ΐ8ŒΒh‹Ίx‹ΘxŒΚH‹ΐη"€ Π' Τ!8Ρ`Χ وΫ˜έ؍܈αψβxP ο° 52g0!ΣΠpQτXoQχHωhί€ύ¨Θό8εЏY™Ή  ι ) Ο@#νX#;βNnƒ΄3η°iΉ Ρ‘’#i’&Ή$)’Yι€O†$CR$49T\ Š–“:Ή“<Ω“>ω“@Ή“θπ P“:"'›Υ†nh+@Nω”Πε”TY•Vy•@9Pι”°˜’”K©δ₯k@%ZS‰•h™–jω“θκKρ kξ`^`IŠ:yUk™—zΉ—=Y—ΨΑ“‚Σ—~i—‚I7…9˜κΈ“©˜ˆΉ”sΖ79٘ !ω ,?j¬ H° ΑƒΑΛΆ°‘B„#JœH±’ň jlx±£Η CŠ ξȊ&OΙΖn€Λ—0–Tyε t1sκάΙ3bΆ‚ζ ‰B<œ=“*ύ9TθœHΰ)J΅*Εl ¨hέ:§€:«`]bέΚΥkΨ³h{ŽΥ £-˜βʝK·έ»xσκέΛWo#ma”EšΆ°αkO4h @–y²εʘ)kΎΌ93ηϞCw š4δ¨N ΈkΛΓ°c_ΝJ‚'ΐP£†·š,jzΞ8oίΐ…>\ΉpδΔ‡žΌψsκΡ—Cw>½Ήu5_<œ€aϋΧ²Σ«/ΈΦvuόškώ―ϊφρΫ§ŸώώέχŸϊι·_  ήW‹ο‘wΒ]}΅ή…²a5Ζ7 Ζρ 3ŸˆΏˆH’‰%Ϊ‡βŠ*¦Θβˆ.Ζ#‹$Ζψ’2βxβ/Άˆ ‡7ΐ@αGah€aXPΐL.y€0ΕSΜ”TViε•Xf©ε–\vιε•Ζ Š8Y&“―©fXΩdsΛ-`ʜΆ#ε—xζ©ηž{ γK-‘¬B‡a<γ¦=k& V;휣Ίcη|Vjι₯ysΜ0ΗόRƍl£NšŠ–::   ”˜Άκκ«X†YΖ‰|cκ­U₯Š ₯°φκk₯Γ|*aΈ«¬ϊλ²Μ~yΜ¬΅+ν±μΪμ΅ΨZiΜ¬ΓNλ­KΘ*›νΈΝ>»λXψνΊιΚ+ΉπΎjn#Ά²kοEα²οΎ­nKλ7οά+πDξςkπ₯Ϋ‚Ί ±7LPΎGΌη³:lqAK¬±—ώv{ρΕo,²–ζ&N:ƒ\ν»#·\ Ε§άpΘ.ל0ΊκΚ,pΖ5»<ο7 λΜ.Ν=μo­ ½σΚE»œpΜJ¬ΎMoLq΄QίΛsΥwΌpΦφΝuΔ%Ÿ φΠL­1Μ_Ÿύ­Ψjσ{sΊnΏvάtݷ7ΌGΜχ΄[οΣm^¬ί†g{u½Š/~wγ€s›xδ¦2NyΉŸšŒ2ζ}OΎΉγ–ο ϊ‘šώλά9ŸΎfαͺs*Π—šzμ°žtν―‹Žϋ²ˆ›Ξ»z·ήκγΓ' »ρ½z-|ς±ΟΌ₯e=†ΛOο*ΫΟ_o˜τΪοΙΊχΨϋώρΒNώzΰŸ§ξλ³oΎϋ–?ρSΣ+ςχ§—½ώβ+]dΣ>n©zŒήό˜e§Ζq/°)`ΏX6ΆρAπ{ τ•1~‘ _γ,šή.ψ½όΛΊ¨G3tρΑΪ Z‚#αAΜAΓΪ&kή/tarθ‚…Rr‘Ρ„u9 Δ†H¬αK$X)Ύ"V 2tρ bPM„04β “¨Δ%fpΔx’ΌΰC F©jΞΣ"AΈ˜Dp™0[Ίx’ TΕ)VρŠ>λœΩΤ86ϊρ~Μa―Βh9ͺΐ ιψ!1‚ˆΕ@M€Œ€$™X©8ζÐ* ƒ©ΨΐžY€(ωEy…1ΫΉOtrbΘόζ2WV•cœςH@θ ‘†Φ£Ηˆ1*’­4‚R Έ gU,‰ΠEβ˜ΰE#‘‰Wp²#ΨB 2ˆΡHΊΛ*–„‚Φ $D±±x':Q‹€T€+MfK¨Ρ©4ω Γ66α;@AΔ`! ΠӏοS8 ͺP‡ΚΖ—VεOlF+8‹VΘԚ- ³FTujU1Ζ)yъW΄’d€Β7b1)΅^υ_» ¨[»JPͺ…Ϋh….p ]4ƒՈΕNύΊ:"vΣ–ƒεbQ§²ΓΞ’p¬œΰ„.RUόkmΝl½:•ͺξt‡―hμTGΒ@ T΅«…+Xπ)QaPυ%kΥ£υ‹Ϋ²–]ΑudωX\nφ[Νϊ$q›{άuwv—`s«[{Υ°Zέ. « έ«r3Όβ}·N ΉΫ¦·°ήύλ#™›ήξ"wY*uοvΙ»^όΪvΊΕUο΄’‹UΊ₯vΏπ½ο―Ψͺ_κΪΧΊEzΌ+ΥφΌvπͺξΕ^­n5ΐ †pe•›]oΦwΓφο<7aκ†ΈΌ ώοEOμΫψš7«q…ScμΆ8ΐ†±aΨSΈ΄Ρ§l.<_H$J†M‡μΦ6½ι˜S(l1 ήNδJιρU-|±ŠP„…ΊCJLΎβώDIMro)Š₯ΨψͺGpV’œκ‡˜3•φ@¦e:¦pΙFΌS™h:‚mϊ¦!ω ,_PψΒ H° A‚ΩŽPX±pαŠΰJœH±’Ε‹3 §‘Η‡ΰΤiI²€Ι“Ρe[1§₯KAD’œI³¦Α•.s€g³§ΟŸ³C΄θœλΚ)]Κ΄©Σ§P£JJ΅ͺΤl"Š=Π¨Χ―_…R;Ɯ­ͺ]ΛΆ­Ϋ·pγʝKWn*Z`₯rΨΏ€gŠ₯£Aƒ5(d°ΐΈ±γǐ#KžLΉ²εΛ”;x0œ Α ΎdMΪβΰRί °€΅λΧ°c˞M»ΆνΫΈm‡ψ€ΰFκΟGE—N\ΰi0’Τ9π Χ―ζϝCŸ.½zτλΤ±[ΟΞ}»wν໇w.λC”(0œˆr΄Έ{βƒ}ΓΠ¦ΐ1cŌαןΏώς'ΰHΰ&Xΰ‚2hŒ-xΑpΌgαh+p€Pp@‡ΒS̈$–hβ‰(¦¨βŠ,ΆθbŠΖΤ‚BŠ ‘‡δψuαŽ@eγγ3N| ‡-Dβχβ‘H&©δ’Εψβ ‘zxΠΕ4>FΔγ•=ŽYT°‰,NΙδ˜d–Ω’1ΔψRK-ˆ\π•Ω`)§OΰH±$˜©ηž|ζwΜ}Ζς@ίΜihOvβΩ璌2θ ίwθ€$%šg£˜fΚ’ „JJι§Yͺ騀’Θi€ ¦Š‘¨₯ΆŠι©žͺ*+A¬Ίj+Ÿ°Ξͺ«A΅ήκ+™Ήξ*¬½ώjl’Α«k±Η6Ϋb²ΚΚΚ¬³Τ’m΄©N[νΆ#^‹ν§Ϊr[­·ίNΈΞ’[‘η’{¬ΊλΚΩ»ΏΒοIζδ«οΎ•ήy)½άΪ{oIϋœοHσl«ΐd°Α%¬p« 7œΡΓόFμοΔΫVlρE‡,²9vπ/ΗΝzόqE#·\°Δ(kͺςΚΉl3Ιǜ2€±¬ΡΝ.Γ¬s£3ϋlΠ-'jΐΠοςl4ΎH‹lιnjύτ@QKνοΚ‹Z}΅@Yc<5Υ}zύ5Ψaο;6–ϊω΄§ΩgΆΎkσhŒ.ΓόBΜ/ΖΤ€'άgϝoέ<κR1Ίθ- M;7Α‚~α/ΌΤσ β|χRγ>ωά’ΏgΜ/±δcΕ7Ίθ²·ζ&qŽͺηGΎυ•w——'ήvλfώ΅ΰ8γ‰ε1Δ΄’ ·oƒψκΌ—ιϋΥΐ‡ξž0Ώ―Βυ^|γKβΔ,N’λ=Γ^³μΒΣNLιΧ_;ζέί»γβcύμWκR:*ΰoξΫg>ψρ»ωΌΗ£cΞ?π{Π4δŽy`A6@Ά/?ψl`ƒΨΐ˜ΫέE$8A–UKφΛ‡”€ƒa… Τ…-BΒŽtτΫ‘‡„#‘‡ΠΘ‡σQdΜ°"5΄αAζW>»/?\D € ^(B™ˆ…. ΐ:Ύ―sJΌaΪ€ηžBΑ ν€Ζ¬PŽXhQΒ蒝Ώ0턬^>ΘŽMxγPPE3tη>:‚ΡŽwΔaw„¦5C›ˆ…*¬ΰ†sθNŽsV‰5<ςθ€ΎP….ZA2X!©;F!5yHNvR‘dδωΎΡŠΤ½‚Νΰ4^Ρ=L"ρ‹―sε+ǘC!N†Ώε&6!Κ_”$‰db,?Ω7ύΤξ—\嘞χ4iΚιˆϊ!FΫ|ωKCS˜rσδ§Θ9B`†/Œή449OŸΝ‘υ€Ω=ν˜OΉΓ ο΅Oxͺ“lζ|§ϋ‰PVžS˜ ΅XAzP‰ώ ι„εΣ&jÈ6Œ£%τθΐ@:A‘τ’5iΌH@•‹₯ρsiΉ`*>™~‹¦°³)Άpκ9F‹§σιˆ„ΤΈ ΅DE):mŠ’Y5p=HŠdυΤίE΅ *ZZͺͺ ½«„E[U*D½:°"•R\ν&YΛ V΄Š5škH‹΄z¨΄©.š”]}&Σ#ιυ­τŒλό:§½¬―H’λ• »2ΌKŒύb_TVΘŸ‚MRa/ΛΟΜϊυ¬‹ε¬A5šΙΉ‚6΄ ΕhF‘¦%.U `ςΕ0Κ9WC‰Δ¨…/Ϊτ&ue©Yσ‘œΰ!‰‰΅-“œd‹PDiJUJipWp€pθFˆγD’»Ω%ΥΒF5Π‡¬4Φ¨ &=σ©Oi›ͺX99 BZΘ‹zΨS!ιšcIMrκPλ|§9°x\κ γΐΟI°sώΛΰρ8xΐ²(Αy&Œ†νΌ©AX“›ίF(‚œp…+pΑΓ(Nρœδό†Ύ.~ Σ$Ζ1‹ΑŒŽ#Ӂ8@>Ζ@0€ dΰΘΘρŽ—<ΝΤΨ3 QhIeL–ΌP h©‹–η’ 8XΑΗs˜€ƒ'δ‘œΨ²šν"½œ@ c Ž}‘&­ha όMŠUφ q¬CJ9:ΘΑ‹Jδ *3ΰ !›hΖ:&]Ž€θ™ΟT‡8ž±­ε,μ˜3Π„’“–ΐ„θ^ΨΤΑŽwΌ#_ΠPE Θ°ˆΩΦ°Β*Α r°iAaI©O-κ›%€!YΑ«UΝlu˜θG.0α(h@ΜcV‚‘ o<ΪΰNuΖ.Βd;"RŽiΤ uΔγέρΗ;ΤαlfΫ;_©‡Ύ±‰EX!Ψ³ ¬‡Q Γμψ΅ΎFΒxΏξI±oFοŠ[όή/΄ΝŽt˜Γͺ 6lm Α ˜Θ…7<nUΔβqΖg>σ›ω"΄‘pπ€  2ΰjΥ’„ζHOϊΎXzΗzΦJ Ή˜5…]σ"-wΉΡ ’τ{=_ξΞ—΄1ΘkKέJ@·£­/ρλpχΊ8‘π{dHtΐ^p^ λZΗlάŸt Cθ°Θ©}©‡Ωδ(ΟE4\Β[>ぢ@θt°ƒΘψD¬ Ηϋœ yz;²>εΛ»^Υ©»θ Y£!κ§ΊΥΓ‘nΎΎώχ‚3‰»^έΪ‹ΎυένΏ³ήχΐ~Τl’q Θ EΘΐƒ[ œΰŸ@†―‹~Xι›f?AG:/oδBn8Β΅KŽ”w{ύ€Φωχί²ΡΠΫ — £§wΨ¦¨§z G~ΚΒ ˆ1Δ‘φP{Š@ΈWrU—rαPwα6+ ψγVš'ιP|dGzη;@Š@ Π€j²‚2h(Υ7{Π@ ³¦¦§PŸΰwΞׁW"ƒ*δp„λη~π¦η'§» ν €ΕA„VΈpŸ’#μgȐ ώF€bf€©‡ ωWH„Κ"VB·gzTyXg8‡ ¨Ϋp‡xˆ‡ίp‡ί°‡Ϋ€ ˆ !D&d=F] › Q(=A‡h~ί P‰–x‰˜ˆ‰0π`Dd‘‘xŠΏχ 1Π‰‹ΡŠIφŠ‹p@d=Φ `±‹ΎΨ‹@¨XŒ–§Š€ ᰌΜ،̸ ͍Μθ Υ@ΫΠ‡Δ7᠍ܘήψvΖx~&τ0h4ι”Q«eQΒPξψŽπψŽσ8ξXQ‘Αψψώ˜HX 72`sr“Ž“ Ήθ{nGA"γδ8„™* +ύΧY™*»ƒκ2‚Χ‘ ’‘Y‘Ρ„5)+‘.‰&ω’2I-9“6y1y“:95Ή“>I9ω“BΩ“Bι“AY”;I”Hy“GΉ”6©”N)“M•/ •T‘Sy•ng•ZitYΩ•ͺΕ•` P_9–θ$–fιJe™–œ„–liGkω–aδ–riCqY—%D—x@wΉ—ρ£—~ ;}˜ž˜„7ƒy˜gc˜Šy5‰Ω˜Oؐι39™4#™–ω1•™™ƒ™œ90›ω™χβ™’Ή.‘YšεBš¨‰-§ΉšΡ’š9,­›Β›΄©+³y›³b›Ί©*ΉΩ› œOσ›ΒI)ΌYœΘ™–1Ιi1ηΠ±!Όψ‘ΤyΦ™Σ©ΥΉήYΤٜ]‘y@ή ηYθΉžκ™žηωžΡОρ Ÿξɞτ9Ÿφ‰ž²'ž γη°~Qη° θΐη€ j λΐ °  Z š Κ ϊ *‘<‘Nθ!ω ,w@Ε– H° @pΰ²)\¨°Α‡#JœH±’Ŋ "Tw±£ΗΑ±‚dΙ’μ8‚\Ι²%Θ“0AΙζΠ₯M›ΩVΜ™#h§ AΨέJτ恞=yΞ™©²¨SŒG¨H:§@Σ§X³>,0gκΤΩjk ηT'Nά( GΚΆoݝ+·nά»tρΪΝΛw―_½€ϋ{ΰZ-_³‘#ΛΈμ ©Z @Pγΐƒ .gΖ¬Ή3ηΟ›C{ z΄ι¨I«>½ϊσ 4@LμβΖcΝRΡ˜€ 4ΌΈpγď+OΞΉσεΟ›CŸ.½zταΐΐH€6XάduΓ@pBΛoaΔ~₯'ΆΎ½zχμίˏOΎύωχλγί―ΏώτΩE@QHυxZε4Ζ‚5 F#Μ/Rhα„Z¨a†ώ²‘‡~(bˆ$‚hβˆ'–8’0ΤΖ .–X•S@Α9FhL1@)δDiδ‘H&©δ’Iΐ#ΰX€m5b…Π-ΩxA Ά„bΛ0?2)ζ˜d–i&^Ϊ⁲άrK<4U‰UJΰ˜RAΓδζ™|φι§˜Ζ ƒK ΰ’N<ιά&gVv^Λ0Βμωη€”R*(‘Ώ€“Ξ’c©cΚŽV*κ¨~3h‘κ(ΚιSžNΒ/€Ζ*+“¦bj€ͺ«Υj¨³φ꫐Ζόb+Ή>dΞ±Θ&kNDŸ:ι―ΠΞ*¬ΏάZ¬DΚf»,DŸΎν·±žZ-±Χ€νΉΚ6‹ ΈμV:νΈεF„ξΌζ¨ϋl»ψž)΅ρKοΉέšοΐeΎΛoΏύ 0¨λμ0“ϋ’Ϋ―ΒΪ6kΐ½g\€ΑΗKqΆ€ΘŐlςΘ(—œςΙ*·ΜςΛ+Ημ²Μ0χ1Β}œ.Γ8kΕ'Η=›«3²φτSϊ{΄@Cνj΅Kυ³Q3­³ΊUΕηΝYp5Γ‘v­υ˜@wύυ«b;5&ΧYνhΪR‹YvΫ χMkSM7Ε!ߍ·άzWν6.~ qΰQvα,‘ψgCΝxγb²-xέϋωΟ€¦s€΄ζQΈΛΩMœcŠF;ϊѐŽ΄€'MιJ[ϊ˜Ζτ  d lθψΝ‰ζ w*cR›ϊΤ¨N΅ͺWj `@p΅2ΐκZΫϊΦ·~ wΊΣιOK7T8ApƒθΰΨΘNΆ²—Νμf/»  ΔΐΩΨΞΆΆ΅]€$ 'HŒ―Ν‘ ™{(G9Ύ!u³Ϋέν^wΌί-oxΫ»ήυώΖ7’ (8€ΪpB&ͺοvΌO8Βπ†3όα ΖζpsΛ(,nώ΅Nζ0†π€ΗR²Dς‘›Όδ(7ΙUnrA’ι4‘iOΫ ŸπFΣv~¬‡,ζ(χψŒ2n‘\J  φdΘD8X±γ'ϊ;G‡ήoσχΒ‰*>ήi‹ύςg_δΝW„ΊO†[ςύ\·7Ώό‡Άx•»~ύΠίΔ8‘ͺdΕώψ1υ§Θψο£όΧsΦ€H1θ°w­g€μ· α*6vΈΚ©R€ψ>€δǁ&H1"7!H#x+˜aθ²(ώη5C“dG| Θ~-x7τ214Xƒγχσ|y°‚#˜uDηJ^3:Cƒ,1/{gΘP„έ‡;Ψ_½γ„Mσƒ 8Ah„Η 0Ux„/·aΒ€Θb55xκ°zΐ T{np…hΘ)3Έv Axκ ‡@Π}uHx‡Ή’†mΈ‚„v~ˆ€@„8`l¨0\Έ†Α‡rΘ€¨ 䀁ψ`”h{Pr˜™θˆθ‰‘ˆyy—*—XŠƒxŠ“ŠΥW‰ъt¨ ο‹'$‹=ψ…‹Άˆ€n  .ψ‚Ί˜†ΛΒs‡r¨έwΔxŒ7Δ‹Cy}˜Ξ{ΠΈg(θ3‰MΈzκ ΨψŒͺޘIΰψ/HŽΞw*0Œ)э鸋ɨ3νXŽΉ`Šυ7=ΛgΉpΩ*ν€τψ‡¦-θ ΗR™ΰPηi5Τhiis ُaŒω`KΈŽI!ΉwЏ›r’…³ ± 4i6W™“° ¦ ΰj€y q“2):”I©—q`0GΙ\³6kp`O©S©9$8_‰“α0–$h“]99υ@i)ω`iΉ–!ω ,ˆ<±š 4\6ƒ\Θ°‘Γ‡#JœH±’ΐ„ ΫYάΘ±!Έ#+V€ ]Η“(SͺH2€Θ&WΚl˜m… 97oF:o¦ΟŸ+?β*Huκ€ΞΜ‚ŠΣ§s $UJ΅jĚO‘JjΥ’Ή―ζ 4uͺE 0L½RkŠνZ·mΧΎ•—-ά»tρΪΝΛw―ίΉλžΛΙ„Y*ZœFεΪ΅"XsLΒhΠ A&DΘΜ™³fΟ›5Ί3iΠ¨O«6ΝztλcΓξΰ!ν'¨,nΌρqd*' 8QƒΒ.Ǐ‡Θr%9—εΝ•3oώ|ΊtκΧ©CΧn½:vοά£ƒΟŽ|Όωε,<œ@ΐ>χnގΑ2Œ(u ΰΪΟΏΏώΏψ €ύ7 ξ—`Έ,θ ƒ(K ZDQί QDŸWς0ΖάpVόbβ‰Βs’‰*θβ‹0ώbŒ4Ί8c8ή£Š΅˜`` pΓsΐΨ†ωBLp@PΜ”TViε•Xf©ε–\vι%—Άˆπ$”OF‰$EΎesΛ-_x†-‘ΨBŒ0Ζ|iηxζ™§1Ύψ²J(zx`Β4·<γΞ™=fN;νˆ3Ő 3Œ1tκiι₯˜ξ)Μ1Γh"°ƒθDŠ~•N $ςΛ0Τ™ι«°ΖZ%§–@pΕ6h©ζ”ρ@"Βθ*,GVcɧۈ:¬CΌφšj°ΛFQ±΅:ρ².Δ+ͺΐfλ-CWΦzkί2τ˜―έ–[•Η:‘¬Ί)Κ-΄πfΛ.ΊςώJo½Ρή;.ΐς> °½UΆϋ.Α`Ν{0ΒSV›μΎό6μοΓ&l+Ÿk0ΖΛ&Œ,Άπž{1ΘΓjœ/Εεzœ.ΚΊj<0Γ_9 sΜT*LrΕ5Ÿ|3’*OL³³/Œ€ΜξΏFΓ'rΎ7όqΣ­―SSΝδΦkrΡZwυτΒ^K vΨUYΝς·_36U\G]sΦoÝσΘrνvέ?©­΄Ο|+7Φg>ΣΨ;·lqαΛcΜ·~—=7γΒ£Λ0ΏσΛγ!ηΌqΧ%›½χ²ΊΤCŒ.™^υέPMΉΏπRΟ7§oΞ9Ξγ+΄δz#lΜ/±δcΕ7Ίθ’ων@{>3οKg<₯εΑk@ν¨;Ž{1:ηmsΐΕCL+ω¨ ύ6§?jδ‘OϊΡSͺΎ π{ρ/¨Ο™|ξΛ§ί+ΰΧCLππƒίτjg?φE o„[ŸΣͺ€‹ΰρ@΄Ατθg;bOwWcΞG₯cΟ?π{Π4PΟ| Δ_˜G7>οωψΑ”`όΐ&¬υΆΖ:²ιo{Β²Rσ‘%ࠈG(bu±ΓΖ gϋ{έκΊχ π!αGΈ"4ςΑΕ|Τ#M›ςVψΓή―ώ_$`‚ŠPD&b‘‹V₯{Τ yH₯!BΑ ν€Ζ¬PŽXΠQtšβW–@ηQ|dΗ&Όq(¨’Υ;ΣΰXΈG'RΙΑk†*6 UXΑ η¨ςΔΨΓΔ±mq δγ”>θ Uθ’δ ƒΒQΌchsŒδd,ωΚo΄’x―ΰE3xWΜi•V‘ΨΌΞUιtLόΕ-7± [ώβŒΩk€5©΄94Z/―P₯Ή»2v“ΟsΥ'ύg=h²ς‚ω£ζΟΘ₯λα±uΒ„˜–RΜvκσž4ΐ–ό)i*N}ΞW•ΔVjό';3ψΓ}n%›tη0?ΊΔiΟ£$EΙΪ»”ϊ$€ΤΔ¨K;bR׍t¦Yι+!ŠSŽt½iORΣ€5%:υ–Λ„zT‰ͺ¨,­fSijQqN•XεhP―JΥ§^‘\HQEΦ’fumJ…eY-Σ¨Κt­Nύ§· Χ‰$5[K­«]ϊU¦ru¬tΥ+Dξ*­Ό v°|΅ιa{@€’u±!l΄ ΩΈ6ͺ;’_― X·‚5¬’]VΫ*ېΆfˆ€UhUšZ±žU±­u­W­ΪΪΞ₯‡ ν°([ΫΔ²Ά·kΉ²‘&6ΉιqšTjϋŠUjP…:ΌjΒ€(Uχ± “ΆK¦Π1εC0¨ Ζ@"ΙθΌ*J/zΧ«ήφ²χ½ζu―|ί;ίϊχΎ=ϊP†T$΄Š2cYΟ}Κ 5¨ΐ>°‚ Μΰ7XΑ7Z°ƒ',α ?ψΒ>‘(t4 CRΙμoΦ#œP <\HρvT<S<.>ŒΉ ƒθΰ ΡyρŒWΌγχψΕ<^qœ φ G7`ιo&ƒΛP`3€@”3#eHyUΎr–©e-w™ΛRξ@ΰ \`š©2˜½lε5»Λ_†s›εΜζtΈ{BœΦ―ό10Πΐ–NψεΠ€At]έ‰L<Μθ€ψ θJ'ϊ‹Ζτ‘]!P!ЊI²ˆΗ’•¨ƒκˆ‡9Θ±jrΌƒΥ°†υ«O½κYΛϊΤ·>υ;ΨAx„#I€ <δ‚Χ­~υͺ[½l]ÚٱVv¬›νκg»ΟXSκ#ύΧΟ+ NŒbf™ϋάθ.Υ;ԁŒ<ππ>&’‘/t #έψΞ·|Ž ξ9μDΙ#ΙKΪ‘}ίθ`GΑUα ΐΫdP9ΨqπŠσ*?‚\“>£ζ@ˆ;2bρ’›ΫήζG% 0l¨ΰΌH‡:ξmr}Ό 9ΘΘΑYa• )κ‡Β “°Δθ@ΊγΕτ£3έΰθI»UΠryΣ»+aQRώ(6ΛηιNx<ΤΑp‡ ;β¨Ά7UΠΝ»Η€5ιΝBGΑ½±ς–Ώk?wlΡtξ„ΓƒS‡7¬^oξ}TF;ΧU³C\pεαw{t^Ι]tg9ΌοNtΓOQ}g‡ΎΪ-Αώσo‡»’ΔnΖ;ν3χ<κ7Τw€dήξyΰEͺ·€ Έyς'‚ gnxι*ΘΌ‚­G€Χ|1˜€ θ~x}!˜ƒ2Ρu`‘ή§‚gήπ‚@¨ƒ`ρ5hv“~Ψ·„X—u@ǀΘ0TXΨ‚Iƒ]θ…VψjŒgπ…88†XwA‡…=hSΘ†yGy`„π†„JH‡^XyfHPΘ|bΘ‡?‘xφ†…hX}[HˆVA‚_i1u‰¨‡HLj…κπ‡€†QHp”Ψ‡I Σ'Š(‡X4‰hˆ„₯hΫ`Ϋ  \p fOΠ ί°ŠVΑ°p‘Ζ‹ΈX`xfŒί·ˆŒU‘P!ω ,‹8ɞ h…ƒ)Ι֎ Γ‡#JœH±’Ε‹ &<Έ°!Ə CNTw@М“(WdS'²₯Λ—!IšDyR%K˜8s:,0gŒOŸgDL+Wξ[Ρ£F“"]ͺ΄)Σ§N£B*΅*Υr<ǜρIeŒM`sς€rβDƒ³(LθXΛΆ­Ϋ·pγʝK·]Ίnœ=A₯―Jvac4GΈπΨ 'πΠΑ‚γǐ#KžLΉ²ε˘3_>Pq~³LzbaΓs’$@F”žLɞM»ΆνΫΈsλήΝ»χξ`’ @šΚΒw₯“Cσl4Ξ1ltΝE/ύ:·΅Τ=σΒPγjΜΥcR}³²£Λ0Ώσ ΨιiύτΠ'—ͺK=Δθ’Ά0α†<ξΦ“έκ/ΌΤσMέk³]šΫI—·₯ΖόK>V|£‹.j.˜Ψ/[]Ά.k@ΖΰvvΣάu³Εt 1­δ£‚ηΫΤ]ωΊzΫϋvΓθzΪ‘0Ώ΄Βο^|γ‹έΔΰν/ιAΣ ·Ν‰rΈκγΏώ9αΕ―αΙs]²ΛΝwΘy><¨Ύ Ÿ_ΈzˆW­8σ΄sxŒγφόΰΓό=τ€θ³C\{ι$gΊ―ελΠσςρƒ(Α6ψ ξG8Ρπz2»9”@|θ{JP2x„ 2P<άώ²Χ·νUΠ‚z_λp„#°ωˆa>κ‘Œ’‚NKœˆv-²..\D € ^(B™ˆ…. pΒ£oσ[ή8τ=(Έ‘Π8‚Κ %κ‚} Γ!„†»ΕΡ+…½ΛΒ± oά ͺhFθ¬W μA±_šλ‘σˆρΈf¨b±P…άpŽΠ5±%ιΫϊ]ΕΒΎP….ZA2X!“;ν(ATqot{ŒΕ7Z1ΉWπ’Ό€Ζ+ŠΗȐ$2sΛkeN@T7ώb’›Ψ„$qΖλν­“C±2τ΅η½Β›Œ 'X001NU‰!:Y‚s(ΛγKΔDPΦQ™κ+£3Ÿ’mrr™ž΄&ΣLΤ=1’0бΤ݈τXΗ_’3˜¨3€ˆΜ NEŠS0‘&A:€OsΪ3œό³R'Μoζ‘Δ"ŸΜάIΤ‰ξΌ#Ύ*fΖ‹R›¦3‘G]‰<Ξλt#EΡ©Π”f­€ν¨KA΅Rˆβs¦…)KyˆΣœϊvχ΄hO'ςΚl.r¨D­©?ZO"u :΅©ΙΖ‰Tφ™B}*M3ΪIoQu¨V%#VͺU}Fu©-«CΒͺΌ’U«E ι?ΥΊV₯Βwo}j\―ͺ)™VΥFΕ+@—ΆW±¦•¬\™šΧΏr5¨~«bωzSΔΆ­LlOΩͺ=Α"ͺ•ͺfqΚΩΊu°F»lg±:Ϊ™–žžύlbC‹V―’Vg―Ε£9²q‹‰@‘Ε0|ρY …βF]π€nq‹0™\„9ΐ*‘€J–=†t­»έ4Θ¨˜Γj0ψΎ†zΧΛήφΊχ½π―|ηKίϊΞχuΓ nƒž|7€ξYM΄ Τ‚SαI°‚Μΰb²‘“Μd$;YΘ°€c%?YΙXn²•·œε+kωȜŽ©  ‹΅9;VPYN`‚0¬Arxsœα,η:ΣωΞsΞ³υΌ8`Κ0ƒžρΌηBϊΠƒNτžσR–β'‹%Œvά—J«δδ0G:2½is ƒΣ Φt¦?-κRwšΤNΗ9ΔΑ 28PB&Ζ‘iœ:Τ©5Cκ]{ΪΧ“΄₯WrΥθΞ€'„Jځ©f;ϋΩ§1ačΐ„7˜­ς£Γδρ`GΞοZσžwΫLκˆF Tk δοΈΈΟε-Αg―g=…yΊ€™υ¨SύαUWΗ;Βρ‰#θ› ΉHΗΤ‘.u«“έUG»Ϊ½½LLAŠιιH:ra…W ›p‡.nfœ8½νn”՝νt #vW"Όρƒ#λο°L;Υ?5uhοέοπ†"ˆ άΎΈKΊ½΄fχjν¦'9H‰{!πpόθ£.Ϋ·3θΰμ„J„γδ}―½φ$‡€£Ϊx΅x?Ο6S<ξmƒWο»ί’~[‰?φ‹«Cv§8ξ΅nφ@έLΘp9¬y ˆp$ό'Ό@„Ξy£##Α‡ΏnQΟtΔcλ]χua·wω§οβmq—Ήΰj°v£@ι`€,Γ}…‘i‡χr*γΐw[(v y”?id1™ ™’αP Ϋΰ E‰+υ`ω φ•a!ω ,―4 !ω ,‘8¨ž ˜3— \Άƒ €g ‘Γ‡#JœH±’Ε‹)\ˆ0‘AtCbˆnΕ 'Wq$›Θ—0cΚΤ80[Ž”)QΒ›ΙΣ: ‘ζΜ©#tΊl“*]Κ΄©Σ§P£J*5Ϋ ‘‚° ’`ηLsκ Μ‘BΆμQpTΣͺ]ΛΆmMT’S@H―0Š%{Β@‚(:dΘ``paΒ†#^|Έ±bnjKŽL²εΙ—wπΰ·Α‰ΉuρΖΤ;V ‚Σ>\ 0`kΧ­_ˎMΆνΩ·kγή­»wξίΌ³ΖπΑj-Tθή-’4§£Dω —λΈ°kΏΎ=;χοήΓwžΌψςθΟ«7KΦι§‘ΣežΧά^*nh!"Τ±cc€1Εΰ€H .¨`‚ Bˆ ƒ>H‘ƒ^(!†fha€ΕŠ0ΰ‡€|Πχ@2†5 0Ζ"ΨbŒ*ζ¨cEΕc‹3Ζ8£ ¨³£EIέBAP°d5ήxδ”Gφh̏ΰd–άŽ‘TJΦA·„‚ ‘„βK-8†ι&sϊβK(«¨ΆΚ31τ&DJ•γJK #h›{*SƒΓσΛ4³9†ς9P9±ϊΛ0„Fͺ©HV Á͈cΐrš&E©₯RnͺjH=sΜ –ζͺ“VΊΔ/©ͺ+­Βڌ¬»ΦŠj¦»λP«ΕpΠ(°Ί {kΖF ’«Ύ2K«9§>K¬΄Ί"[ν¬ͺ:‹λΆάͺЬ²Ώ‚»©ΈΠ–Ϋm―Ζͺn©ΨΪ:»Ζz+o°υ‹o±η.;o€μ’ϋo‘­Ζ›.ΏΩή{πͺϊ.άlΏΪ> q«θZ.Ε[¬iΒί2lo»ο±ΖλrLrΙn,ρ΅ ―Μ2• ο;qΜΟΌγΙZ°Ξc,°ΘώύfΝ/oŒ³ΡGχj3Μ#ηΜ4œB'ςSΣ oΘ7G΅Φ=r uΡ»φؐ̆ΊŒ2½XΏk₯.ΓόB ζnύ΄^άͺ.υ£‹άΒlΚ3Ρ—έκ/ΌΤσίβ§V³χΕVώK>V|£‹.sK­#k¬²ηa"kŒ.—k@Ζβ£½³Σ‘‹ήvέπΣJ>*¨Ύί;žμΠ]“M{ˆΏάΒρ^|γΛίΔή4΅w_=ωπΖsωρΗ―ΞxσΟ#6ޏz><¨PΎ «/ίx•=z½δαœ°εφόΰΓύ=τ€뽃­pθ>α¬d½|όΐJ° ~`ƒύ1Ξux\π ηΆbŒ8@ΰ” κ‚^i•§€76 OQ·CΒŽ Bhδγ…ω¨G2@ΘΠυ¬P?«`υnΗΒE ˜ΰ…"‘‰Xθb@`σήϋd7=ρ] nh4Ž`JQΒ ] Ϋ9βP€Da>ΘŽMxγPPE3ZχΌέpO9€\ Ψ Ul"ͺ°‚ΞΡ:-n1lK ΰμ†G?_¨B­ ¬ŽΝ¨eUσ"Α(ΗκΕβ­Ψά+xΡ ^@γΝσγLlHΈυ ψΰ/Ή‰Mς&ƒ$ίΗw–Ίκ^ΡΗξe썴€δΕΞΖ V ˆRε(ν;A6±\:[Ϊd L7Υςk9R[5ΓtMl‡”4₯7E#ΑŠsœ!Œδ6©ΤMt¦zΝόβ έωN%Ζs’σ€η2{τΛRPŸ§9 P‹”|&,θ‘ΤιOe*4"Eθ9š‘ƒJ/~eCΓIЌB$’M¨G+JΝ†Ž&Ϊ4ιI9ΕΜYZS˜+½ˆEα'˜R$₯uθHAJΣ‰Ϊτ£%ΝιOΊΡκΤ£{D bΘ)@Ζ4ά‘t€μ ΟHEB` [ΘI³τl•œZƒ τO.I™“˜$ ΰ&°EάβχΈΘMr—ΛάζΪΌ“œ€Žuͺ,χ‰@ άζzχ»ΰ ―x}$²œ4Υ₯Χ^ŒcDΑ΅ψ…|ηKίϊΪχΎψ½―0ςΛίώϊχΏσ­…΄`œ%'E)»OC`ƒΠ‘ €€°„#Lα [ΈΒΎπ…Χΐ@dψΓ±ˆCLb Σα0(0Š6Ά-$ρ@,@γΫψΖ8Ξ±Žq¬tΘΐއLδ"y3/>οY<‡ŸΰΙ"θΐ‡*SΩΚUžr–―¬e,{ΉΛ`ζƒ`YN³šΧΜζ6»ωΝSƒžάΠlμ˜‘žΗ°‚g”cβǟ=hAΪΠ„>t‘­hE—γͺ ƒ&N¬ΠηG¦7­ιNsϊӞ5¨GέiC?HzΦΒζP€u©£EE)  B*7₯#ζ@F4Pf(Β£B‡°‡MμbϋΨΘ>vCή"”Uc₯μ —9Vΰ€j;ι(ΡΦ”iΙ E¨ !ΈC3ή±1PΫΪ0 8¬Λœ€ ρxGΌα͎ZG $ο Η(’А!>έ]βρξx»£1Ν‘ I—ω£ …πƒ‘Χ͸Ø ‚@ŒΩψΏΐ’o(‚ΰΎ2μ-rn [δ 2¨’μnΉΟ @tπΒα@Β'ŽœλάPθ€ΖqoϋθψRΗ;‰τϋΌH‡Ρ‘N˘[eΆ‚*Έξ.Ÿ „n Ή0As[IQϊ·  @@γ,ϋͺ¦Ž ΩnΰΕΦυ>₯t #4·)Bψb €Ίhη5~€‰p4ήXΥ5G41w δΏόnŽJ Α“vC.΄.zZ-;4‡)vϊU ;Χnΰ΅xπλΧ^UήDη?τίkͺΊϊ>=κ=ρΌHIΙ…Θ (lΒΎ>Ӂ 3ύΧƒΧΎL.^ro§n?σ½‰#όύߐR?- πv4œϊ—Έόίsd|ΜΠqγΠ·Sb$&‡rt§r g€Xt0's`^ πPoΞη€=l?7iT αPo8%n§t¨‹ ¦5‚GR]TgαȐ~,¨#ζ1(vvQƒ:ι€vd†@˜ΰƒ;ΒxrnvGnŒg„’!uT§ύxκ@ƒN( ‡xa·xx…^αvκy`Gyα`…^8Υ₯Ρ |ΰφy=x†^sαπ GƒΉΠpΘEG€@!{=—‡zέ§{Ό'ˆ_ΘxŠΘ@p]6ˆˆ12 Hv}ΨΩ‰1qšΘ@ŠΫΰ ΫP Ϋ`y’ψυΰŠ!ω ,˜>Œm ά0@pšΈr*\Θ°‘Γ‡#JœqΑ‹3jܘ*+²εI²€Ι“(Sͺ\Ι²₯K–Ω@PΉ8“£MŽ7Ξω²§ΟŸ@ƒ’ΜΆΒΐ™5.0w³©y J΅jO’BuΚ•ΰ³[φΐYKΆ,8}Ωn±ΐΠΥιeγΚ­j/_= ˆkΫtίΏ?G\$Ηwγ[ΐˆ§ΔΘ΄pΖÊ#+vμT²eΐ#ςRΦω²η²›9vώLšjh›₯SOΝ|γhΥ°]Ά~ 7Άν–³5ήή­’uξΧΌƒηΎ<ψξα+Οη{vρε°‘x=΅t‚Υy7oM=ϋgιέ½_Ύ^[<μν§Γ› Ύόϊδί«FZ½|ΐνοΓΏŸ4ύΝφυ'W~ŽΗ_– 6\€€ΉΚ9݁j§™sΗ„Ζeh…j‡ƒZΕ‘p‚ˆβnQF’g&γˆΪVcƒ*n(β‚7F—"Πυ8£t%JΦ’c/)Τ‰Jϊ_“ˆYX’PϊΔd• εˆ%YRςEε–ΈΡζ\OŽYV—m}iζbbIV™nV…fWjΖY•vώgžAΝΙU|βΙηK{κ“Ÿn i(›@. T‘ŽΆ„hS€ζ)h€Œ"‡ι‘r§θ¦#] κZŽz€7Uj§¨¦ζi«%‘j“ͺq²jκ«°Ž$«hŸ‚jλ¨ΈζΊ«a½nϊ«―₯ζΚ\§‘Ž³Ο¦Z,¦N‘γM>ήxŽ΄ΚfΚQ8ΡΈΆδ¨ƒZ·§2›Q8Θδc9γ>k.mθžδ»ω¨πnΌε[/©7α«‚d„“m΄IE6κΨ£²ϊ¨8Ω2±μ¬ΫŒ=*tμ8όΞk[ΩLό޲g•<²-Ω|ΫnΗ“a-Ή‰P@+ˆ•k6GUFρ4FΎ<π ‚Ρ2‡LΣN"ν ‚MBN3ωπΰΓΥ?ψ ³7ΡΘKPˆ0Ν:λ”SφΩf§φΪj·ΝφΪυΤCφΫnΧMχέvη]φ4&DvF"έξJΨ@ΈαhΜΌmFzβψγG.ωδ”KΞG"ˆ RωζœwξΉ!z΄…―€Ϋ@ϊJ Ν `”Ό;μ²ΧNϋν³ηn»ξ±; pξ»OόρΊ#oόμ4Πzλ6MΟHP4&‘C˜F|\Τ=Aίώψή—ΎωuyΘ…O·Kύ" 2•Œ’ 2ή\€A1@98ΐr€4`¨ΐ  ζΘ…2’ƒX°€Μ 7¨ΑrΠ€zΩIWπ7ΤH°Β;Ρ h L#Qc_FΆ5sΨπ†8Μ‘wΘΓrdMΑWΑŠHŽ;@AγžΠ!ΓΠτ―‰ΉΩΚ·¨† ^δ‚ͺ(a<΄₯‘w` ŠN±αEŽΰ0ΆκœΐΑDŒ„{U„/ΤA+Όqqf M:‘Ηλΐ‹Όθ4QΕhΈ°ˆLδMœ•-p ‹ͺΘE4IΙJb„0δ@‡³ι Β΄Ρ’ €€φΐΑGŒ!ω ,•@AΝ h  Αƒ*\Θ°‘ΑJœHQ!Aˆζ*jάh#DŽ 7zΔ²€Δ‘Mͺμˆ2βΚ—-SΎ\“δL“5mή™ΣεNŽ=}ώ¬TΰP A"ν©T$ӌM)2ͺq*U©9―­©U€”_»ς*Ά¬Ω³hΣͺ]ΛΆ­Ϋ·pγʝK·έ»xσκέΛ·―Ctθτ’ 7˜π]rήςyσξnΈhω ,6L7΄|VΘEcLNέάpΘς©Θ<™άηΠ*4yΜΩ3\Π’U¨πt\Ψ²e―ήLΨu[Λωx¨Θ‘‚ĜίΒώα£yσγΌ;ύC‰Χ• AήΨm|J¬» oC‰›pΙέζ;‚ ϋΛωβη#gš­λ‘, t²L£‚ ej©N*ω@αF:Π aΕ;Θ4 kΑΆΘά…*’‘cΤo—!“‹+€¨’ 4‘X[ΥSΟ/ΈΐψMOlƒ\ಁ( .Έ˜bΑh @[\ÐAf ΡAAtΐd`©e–\nι%—<6’T 4Νπ‚’ΫxCζZρ$_AυΤY‘Ν!ω ,ΏIW H° AζΜ\Θ°‘Γ‡JT±’Ε‹ '&ΔΘ±cč=ЉPcH’(-š<™²eΓ•]Κ4“εΜ™5cή”™ΣζN”θzϊόιQ¨D’-‘©C4'”nr΅λωΤ@6pW³‚χ €―PH‘cΊ’€V­\’ΛΖΆ-Ϋ­ ƒ"»£α+EαL’\λΆ-\= LxTZ†£)RρUCρ˜’CI˜°`Γ­:Εω«S€g”H.ά($_LΗ₯ζΞA§%§9T(YΈeušζp›οίΎM]ΉΠΑ₯[Έm―ZE*[:䝲υ(„uλrΨΞ}ϋ,hθ}$‹λadq-φτ,β§0‘Β„ϋψσλΧ_αqX°ί€Nπ ς…²{Πi&K ,θJ$zΤ‚‹.fˆα†rΘα+―h(’‡#jΖ)ž°‚m²ƒNt§ΘŸ'Άι1Μ1Βδ¨γŽ:ώςK2ΊσK1Βό²#‘<&©dŽΓBc|ž,Η`t«Θ%άXΜ–\vΙε/ΊЌ.ΔόbŒ—h¦©¦x„’" ²„rKh“‘CJ$|`|V#Μ™jri 1―€Ž.dž h Œv9L#z@Dš‹₯#˜2Μ0Ζ,Κ¨0„`Ε;Θθς 1Β4κκ–Ÿ#K ΘRŽ9Ο$§―r)Œ.…ͺ`E8ˆ£h―3L1Έ΄`.κ4―Θ¬*h@F8©Ϊj΅6 Ρ΄Λ"{ ‘φ¨ ι{,Έ^ ι,΄Ρ.D.ΈΧͺ«.δt*ΌhŠϋΠ½ζ–Κƒ 9¨ΐߌ$ΐ]ΚkZ Œμ΅>dμƒ =πλ―¨π μΕ―ž[θ?(aCΚ6 QŽ.ȘY Θ½JLoΕΤ^\¨*σlΟn3ζΏ‹,mΞ%—zKΝ@υΤsŒ πΪ¬N½‘όκ΅K/Θ˜πH#™Ό’*ΝȍsΉ:…λ@ƒ„δ΄Λ+fΎ ΥX€u£ηΖbΫlβΝP¨B ™2£έ«Ϊφ"ύκ/…6Σ '±΄ςφΛe:^σ/ΞR9Ϋ―Z(/­ΌJ9d@ρM,‘zώx γJή蟺lΣ †±θ /ΥΔ’7Δ[ς½6Έ`&oŒ.—sΒ‰.ΕΏ%δYΫΞθ’yƒωJο2K?3θz|Υ’ΣͺμΥ‚^;ιή·ίe³αO6Ίϋτw©ώΐΦΧO<ό’WΟΎώ»ίΘςΐ…N|σ+`ϋx΄)Π€ρί‰Η@ N`όC .HAΪαρ|Uε·ΑΒ«‚ 4a΅FhANΞƒ‘ ΥΔΒΞΠU(,α ]UCξQ9τΘ₯ Q†DάR ς·$Ύο€$<’΅D‚4qŠΜ‚b ±¨D6‹Σ’ ΑXŒ*δŠS4"‡˜D3 NT£ΩHΔ%^E)°€)jα PΡΎΐE . ‹«†/ΣψLa [€ }*l€,YHCd0zHΑτ†GdιOXΔΓ#τΐ‚MfξΘΜtTD£Pθ!HTa“"‘’xβΜ™flQƒxβ—–.pρ‹a“˜ΖL&2—yΜf*Σ™ΜT¦~΅θE΅IΑu¬#(@ ίτ¦8ΓωMrŽœβ<§9Χ9ΞσX§·dŽs€ A| ψόΐbہ L¬Ÿαγη@ @θA P ˜ š C(Φ³l.g3©„’aoDΓ£ έ(H9JjŒΤ£&ύh4R:R–t€¨C*`³ g΄:Έ¨N7q¬£η*Pse€uœΓ¨HM:ΞT”γ9π8‡ΰŽ¨υT΅jV₯j€oHGA:₯N{q ²Κ©‘IGίͺbετg-kZr'R’vΔ9ΦΚΦƒΨ ―y½S9Β•sl%ΰH‡RωΪΧ‚$Vp9‡8౐«5φ"–eH@!ω ,+Τ-) Δ₯‹ ΑWp½2X°!Γ‡u œHΡ€°‹…YX¬˜ΖŠ CŠ€Ψ±dΙ‘(Ci²₯b)c¦lIS¦Ν4]ΒΌΙσeN“=oώΤtδ/sθ|=Y”β―ŠK]6εˆ dT©MŸ’Ό tgΟbU MΚhV¨e½zv¬²S΅n…»–­ΐ±iaΦε)wβOcΖ°‹6'`ΑEϋΎ5iLΧ0bΊοεIX,ΕΫ#f€˜βΔPύ–$+_9dΊ<›ZΩκNaΏJ[ §+υ―ΥSc6.­LΈf΅qηFyŒX«|*z{ƒ¬zψHΨΗUHχrusη ‘F.]r΅―c槨«4ηs9m[ψψc±νύπAŸώχπ·Η Τ^ϊΗ%6¨쉇]yω(‘ βpΔ€ζ@˜{ΉΑwG!4ωt˜O=ΓL8žvΗiΈH G`’‹"dςŠDŽVJBαΖ:Ν@Ε9­Ό¨‹F1†dŒVΈ¨£ŽJΏηΫ&Υά…*¨εΗӌ#ρ—O2­p‹*VΈqŽ.·))RlωθΒ‰.­”CΖlΑυD嘍mΣJm/6K4― )¦ŸeΧΨ/ΐ&'ˆ‚ ˜~ϋ…ι§‘―Δ£65αjΒΉW©L!ω ,2ε&! (VL Αƒ*\8° Γ‡œθ0’E„)^άΨ0#AŽ=fωP€F’ MŽD‰QεI–]„Ω‘’1bŌ½D)˜aΔt Ϋ ²§.{ΙtαΜω‘₯Gb±ςΑC¦λ—1M!βjIQΨ―¨VΒιRͺs`DcΏβR§Ξ£Ο¨Θ„£j•fΖcΔZεSw›^iqόeG―zU(φ’Ž.1aΣJΜx3ͺbΕdΎ5SjUpΚ­£«IPWT*x &CΞ1d†’ z<φΥή=|ό؁†άXb‚=c-[cε|?~(±‘όGoΊΑ-Š4O‰JŽ(A’ΔΝ· „C’ΤXŒΆ^$GΠ#–/_=χWΕ$Ύπ¦ήτ(!Q„LQ£L±θ"|αIΆ–: Q…π4ε΄ςΚX¨DζεCΖ6›lγͺlVCh©ΕVBΗ5ΣΚ&―¨² ;œYh} }•.­ΰxV|CαC%ιΣ69κ2a3±DσJg4]5Φ/VαΘΙ&œ^“=†–‘$γEWyŸx_.!ω ,“8Ια ˜H° ƒ*\Θ°‘Γ‡#J„X°βΐ‰3jΔh±βƏ CŠ<ΨΡΰΘ“(–$˜²₯ː+/Ύœ©1¦Lš8s"΄iN§Ο†Ο…γ’!ƒ…’ Ušt©Σ¦P™J}:5*Υ«V³V݊•kRG^Cξ˟hUš[+@€ΐ%` n]Ίvσβέ{·―^Ώ| L°αΑ‡Ζ…λΆYΊ³iΣ,ΧvIΉΛ—#k‰ΉάˆΝΜφ܌vr¬Kς©ΞGΊ΅ΖΥω>7+§n΄λœ¦€^}»7DΨ#Μν§iΤ°‹+W\8mΘΛG€ŒœwτεΝ‡ίΌž²-χοX³>ψΌΛζΣ(―Ύ½ϋκޏ ΏΎ}ˆθολίΟΏ}ϊώ¨^~hΰΎ`‚ ΆF`ƒF(!‚ NhαL^¨α†FWa‡ j”aˆ$–hbJž¨bB#θβ‹0bŒ%ΆHγ8^8cŽΪΘγ@ ΈcϊHδ‘HΆ7d’ Ιδ“PφΆd”:Iε•Xζ4e–όYΙε—`‚΄e˜υyIζ™h24fš²ιζ› ­ 'wfΞi'•rή©\zφydž~ήΖg „βh‘› Šθ’+Κ(ZŠ>*)ˆŽNšS€–f:a₯šΎ„i§ RjoŸŽjjœž*R©ͺΆ*_ͺnΔj¬΄‚k­͊λΕέΚλCΊώ*μfΎ»P°Ζ&«S±Κ„l³ΠΆΔμ°Ην¦Ω=gہΥ&cΆΔ1˜›΅γΑξvNwΉΨœvΫhš–­S޽‘­sΎε˜g―½# ―ΈζPF†$li‰°y rp3λ +oΑΘL0ΑQG‘ΦX„₯UW$l²WEih ”N:žπ!³Μ›™€ΰA3w3Λ¬ 9Πq;:λΨ+N9G'τJ7ΝτΣNG}P.h 1—‰c€ΦΚ1}N9!Θ“f考 hΐ 9΅YܚM―΄ΩΛή@‘6)δ Σ‘kc‹-·kα ŠΌ£·AρJӜκδαwtΈGnGk€:κ`β€dxΣΞβ–3TΆ*p4μLώwθ ρ’* #ά¬'„4J€­J<ιΜN;λθxcΕΝ£τΎΣκ‘£ƒ9n<Θ<θ{΄˜+2ΈαΔ§ς–Ώ³ΙγVx³Πh% ϊ;T 4-2<ΐžK:я?½²ΡΨ­*•oy8dΈ&κηΕUnWy\άA@†\„{ΒΚάΰΘ‰π$q»RΕ栍šμΝXθΰ…ΐΩ5°€=qίΤ €m~Ή„w³MΌƒ14 U7 N  cˆΑ݁0‘‘©ΤρŽL€ΟθΠ^‡xͺwΌƒt8t”ͺ("γu*ΰ…?·SiGΠέɘB.Z απΒΝ*””qTρΉΓγς“\0h™z™"‡†μ΅δŽšb")6Ε— ςTsΐΡŽnΡ]l4β§‚\δm&”TώξφIGͺ0Sϋa<ΦhJLZΚq3žqNΙ(ΜiŽsސ%nφΘ@t§ΓαO¨X(ΧΑNvΓΌΰ£p§»v°’&nΤSπ†η€Q€C—ό ZHBK?ΊςEΚ#Ηχ  ΓƍwLε*oψ ΖΖ0p!BoΚCςŠ•Όduΐu€ψΕ0„a+»yΗ‘ο0~!‡sbΖ(‹%€ŽrπΑΞΏhσ›c,g™Ξ^ξjž•If9ΚΗ ΄€?¬:ΫYΡ‹†[£ tζ4 z .F₯»|ηL'ωBNφt¨W=κK›šΡ¨ώ3”?½jB:Ρ―Ϋ¦”κ@ΧΤ­.u λ'#Ώ–τ­…=μςν:@©fs²•K3»Ω}ΆzMλiWy٘Ζ6K΄έŸGΫΫƒvΈΕΒb«έn7»³]lHΓ;ήΥσ΅ηέn E»Ϋχ.tΎqΝοq»ΫΧ§²Ί npΛϊά ‡σΐχ=ο=KˆΫ—8B¬½nq[ΌαpŒθ ΊΥ3μς‹†#ω0Χ₯ώU°#(ιc'{Ν3dδΓ δˆFΧΩζU·Hμc/ϋλžΰ}ν@#νΡχχΈc}πvW(¨w¨ΫœΨ·sΥγ.j¦Sά&αh†=T@z+¨}οDυ»£όnΞ?ώ‚„'=ι)ΏχΛσ²ήw½ηm_Βσ€*>ȁψ/^?€·ϊλyϊ|πΐЁ†_yΎχ"wόξιnχ(Αή?ήQωβf›Χ~Ι nv»+αύ6xl€=Τ_όΧ}Ο?“ζ w:°‘δxz–yφΖy·~ό·„χ‹G€ ΘP £  Θΐv§†7t‚{vnPΠ€VπΘΠ Πΰ ΰ7χs—}7wExD αpP  zg€zv|χ±r ψΜΧ ω€ Ό Ό  "]w^ׁ;·|  GΘ Π Fd`α ^g|Ψ§€ x—QyGΌ ]ˆ H ^…(†TOΗuΰή°„ͺ ѐz@h7ƒϋΗ{4yσtΠ€ ή4Γ₯kT'…37‡U€Χ€xQ(†ƒz³₯Qδ €ΜӣP£^4M€;霚“Κ΅kΓ\&?ΛΊΥ«Ω³0pΐK«²hγBu@E4unεκm +απζέK€:dδy‡npαΗΡ₯Ser”8­O!k–¨N] ΪbήL’Ίxdππ†9sιΧ ½ΩΰεmkΨΈ ’C‡@ y·s H Uδ»]ΠΘ·†Λ|³ΊwV(ρFΦquλή¬’Qg{τχΌ8Pδ]yοη «΅VU<ιζγkΎωχΤι·W:Ip9Mχ–€…Ec•ξΈƒr&ι4]€ž₯–Ήd˜ ‚’΅]*ψgPp%’ΞK­Έ!‡-F…˜X‘Cή†5š•N;”90ŠˆNΨγQι€£‘i8b~GΥ™©©ΰΝA-m$γHHGn°Žˆ”dYΘKŠ€d§˜>Lή1”gl$)…‡IPR”€β!OωΚTΖ²”Ÿt#*9J5š2‘»lΙUιΛ\j2‹°΄€,!iG`Φ2Ž{\εθZ©Λg ³’$ά/ΙDN*—ΜΌa5ρ˜Μl.œ΄$§-ΏΙJc*R‚ΌΌe;#ΒΑˆˆΡ™κ„&1ϋHOk9$’οdˆ1ˆac`DŽμœ¦Dά2ΐ6“›;\ˆ1t1 bθβ{¦<ΪO†A Α<ΘDν‘ ]΄ A¨9I‘s~τ‘U1b‘x C94hD4šPm.Τ§©5 r=šF&5¨N’bvt4 MΘ=!ΚΓ„L”¦ C8nšSˆπt₯}8"Τ|δΔhE>TΥmθ‚]e*6Ϊy’¦!-ΘυΤͺ‚Ύz!\S£IW±.S!e€UgΊΦΎͺ€ ίh†Iγͺ¦ς³vE,^‡j]Π”*ΰhΙ@Žΐb΄²„½¬aΗ*Υ?ŽS±9Ζ/baψ >ψΑΠ@€C©•«j9vΨΦf2¦(Mπ%Ψ€Ή?ΰ-W‹―–Έ¬EHb7©ΟζC JΐŽ $(Α ί°(JbΩGb6»™*rΟϊ ΅"αχE4ς‘zτW‰K=ˆu‡[-Ž6d»Θ\¬ZρJ AΘPD#2 ]$ΐz{Wλ»7―ρ.܏f@ εhΕ+ϊ= λ5΅Ζn‡]βZͺ’P!²U+Ά±‰mΈ ͺl^O>•₯N'lEΚΨf΄b―PňΩ1YΖF~oX=μJ³dΆωΠE+Δ|2Xα,&²†³LO5-Θ‘ζμ…'Ί1λbΕ͈E4^AYφbΉΈS—_ΛέδN§93'6Α ―7Έ½$p7λε‚#§σ»τWliούΎ“§#¨%ZΐΆ2QΧ θΘΔ#pŒ₯R―h@ΰΎπΕ0|ρΞEŽ„ΔπE-nm.ε”r*ΩΧ30[Ψ"Χ£†ΰJrm W\ΰΟH˜‘=@"(@P`‹hη%« @Δΐ=±Š]Χ(8SΩο¨ ?ϊΙ9#Β`0ο–½›L¦‹ ψ‹‚όΰG8K †¬Ν;€l†ŠιΚ¦@XόβΟxΖY7²!nho΅QL§8ΖYΰδ(΄OΉΚUΞΞ%ΐsΐάΏž3-œΰζ"θΦ°†χœη>:ΠΧ`€θFO:—~τ¦ο|w7]θ‚'iŽO Η;ή ž!Ž›μδλ^{9vb“r”ύμEI»ΩΥ~v°ο YΗzΧά±m¨ƒ}ϋίψ―UΝX#wo_ή'Έžm™€L|³ΑŽ…ώRTόβcψzΆδ4μˆΗ;βx4ήρΓϋHg8―ωSΎςώΜH@!ω ,şQz \'° Αƒ*\Θ°‘Γ‚ˆ=œH±’Ε‚ZΈΘ±cΗ'πρH²$Γrε @σ­œΙ—0 Σ`€Ί˜8I* "»œ@-†;ΐ:tζ‚*mˆŽ—ͺ’.ͺP] žήRέZπ]8%ξ€3'•λΦ\¨j‡NYͺιεΰ#œΊ²o—†γ Ο»›y©ζ ™kl`ͺw( gπa θΌ©θοξcΘιT₯εu—μεœκά8BŽηΟ8%PδŽ,^Τ&I…D†τ5l’δΘ8€BΆνΫΡEΣΰ“λΣΐ=’@²±Θ“sŒkŁs₯“TM€OΠk§ˆΙhΗΗOOg™ήΥsœ `”Έτς)’C‡©Ή·ψω]…{ιt`€!“–Mψ!θ:;©ΰ |β9ˆ9DΉa@ƒ.€ŽS¨bځ.΄ˆϊ]‰₯Ž a₯£"‹ ‘₯[ΩшΠMsύΞ†$κXP89τυΞq²¨™…Έ"qέα€δΙ‘Ž‘MΘ<3 Y:™…ΔKk€Ή#pΒ t!Ζ7ηŒσΞ:χŒσΝ\ψ,4ΟDί|ΐ 0L ― ―kΐsŒq`Œ1† Άό"ŒΦΒtνυΧ`ύ‹ΦcsφΩ`r@RSmuΊΑz¦Ξ‚œqC `Tν‚-ΓSΜί€.ψΰ„n8ΰkƒq7sΜ·Σ P ‚|@&ψ2Μαœwn@瀋€9ε&@©ν¬«Ž:ιHγΔ– #Lί‡ΏeΜμΈ„P)ΰεπθ|σzμ~~ΨμΏ\1)q_ΉΝπΕώ™0Ήοf™Ά {νŸ%Ώόο|>Ώ½ρŸα’Ό)·>όλšpYυ¦\―θAβ[βώcή›Ύmλ?Π>ωο;_ϊ~SΏϋ~ς[SώW8Τδo ) cΎε pGΪc τΚ§»ψ₯/‚Γ3``ψΑƒ,P„y© ϊJHΏNπ€L`ͺNψΒž‚‘`Λ'@~)ƒ(| }Xnπ2$tšAhΈΓZˆ1βΰP3D%ώ}A4K]ΦΒρ5‘‚=΄’@˜xD ΖŠ’ΰxC(’qŠ%1†1:’Β ζΠ…_μˆιxF1ΰkτˆ1~‘ _γsόΫη²ETΠ‹eΌˆ1tQfθ␟ \CκθF ֐"ƒΤ…=Θ‘‹K~.z)†BͺΘEƒ¨Q“zΤΕ+ςar CΏ †0ΰˆFΞοŠώΛ’CŽAŒYjΐ €Ό€ί’§JU„“~L##iYζC*¨ε-sΉΛ@„•Ž4‘'σh‘bΪ›*πB:JIŒezS ΎLΦ+Gk’SοΩ¦yihΆrŒγ€&Eˆ9K¨ *ΰΎaI]0–Ή[ž Γ7M~^Ě9θ|`ƒδ—ϋ dIk*₯?΅ΑOέ@K†T“υ  KŽ τH€κ a€|δ£υ8ΰPYŒ‘R’&­ˆ5‘Ίˆ@ΌhD#2ρ §Ώ(y:kBΑ λ€jيXΌ‘ξ€g?ϋψΟ(Vτ!f,ςA†mlΒw€‚*ˆqIš>τs^ε_Ik‘_Μ²­ΰD,Zqטς‘Ξμg +M°r”ΕΜ/ZρŠV”ƒ PψF,δˆZg‚3άlS/"ŒIn£ΊΐE,tΡ ^T#€εefΉSrVδΈ©.BΛ Nd²·«…+XŽΜžrΔξ+–›Κ@ϊ6Eγ<Ησ*r—¨-ˆ3§k? /–π…!ϋfӘΠ7“ε]€€α„ ˜βOΰGN©i<‘ž°…-jα‹Λ>FΓ²H†Ÿρ§lΘο  ’€ŠE0*ΨΒΊS1†ŠgΜβ˜ͺyΐ‚–FΌΌy)’ 1–)Ρ\ Ψq΄πY”νΙP޲”§Le)γΒ\JcZΛΒ ±»λr0 ΖLζ2›ωΜhN³šΛŒ°€!@» Z.!ΔTV±XΰΞxΞ³žχΜη>ϋYΟ(K€ αL…tΙyWT˜ΩΜPΠ>¬a ކτ£#MιI[Z˜t¦/]ι£ΝŒΗ…ή²’ f΅RAΟ(‡8P²jU³ϊՎu«g kZΛΦεΠ•©ί– Ο­ Άγz=ΐbϋΨdAέ‚=†Ζ=Ξe‘›ρŒQ‡μj[ϋ8Ρ–φιL¬Ίx°ƒκxΗκώˆC³¨#θNχ<*Sξ„ϋ6Η^σn!ω ,Ύ Ow HΠ$@*\Θ°‘Γ‡-d0 ‘βĊ/j΄Θ1cǍC^¬Q †’(Sͺ,ΉM…ƒLεΔ­œI3₯9LTxKW³§O…©e>ˆ©‚κθςuYˆ/ε'Λ£²’Θ°MxγPP1φΘPuP¦I)M~QΙf΄‚±hERΚΗκ£ͺ#,ͺ$ YΚ|π’―hE9Θ…oΔΒuf]§πΡ£ΠMΫh….p ]4ƒՈ…TˆVκU’3ω…&5i]Ό•œΠ…έ;Ζvσ'ΖˆTa€WΔΒ ­ž6 Ι«j1ΆoόΫς‚C?’•PΰΘBτ0 _ψbF=Š™G b87 ΨΔ4ςΤRκ θƒ-Ζ‹ΝΆΤq™šσΕx―€JLCQρKΥDπ)OQ@.Υ-blV‰€Uˆ‡ρŠ5ƒΑ u(@ίDc‹ Μΐ)kGΈZ²kΞ°†7ΜαsΈ„muΏΉ΄ η’"VΜβ»ψΕ0ޱŒ]¬ Ε)+1gu‚„)μ ²‡Lδ"ωΘDξ€|œ”mmγΠ^F4˜! VΖς•³Με-{YΛ`ξr˜Ώάε.ˆ`Κ'˜Κ’w4€ΉY}(G9Ύ1g:3«ΞxΎ³žνΜη<χyΟuώ†8ž!7#M s8€ŽΩ6†98ΪΡh‡ρŠFιJ[Ϊ yύh8/ΊqŸ υ V ¦K›ϊΤ”ΖT¨C R‡«tρˆu¬ίQκ’‰&Kμ ΅ί‘–p-Δ·ž AzMi…;ΐ!ω ,· Qv H°ΰ@D† *\Θ°‘Γ‡/ Μ±’Ε‹&q0#£Η ‡90@Μ@9q'S’\©²%Λ—.cœ©’:thάI‡€ΟŸ Νεr Α›9 H“φ„b@Ρ»£I£‚4· € sP₯jΕHN…MO³nΫP"P°Š%ΛΦ 7 r₯kKwαhΐυ¬ΛΧ@:d@ΓΪ·nΊtdδ [Έn.ΒnάΦά˜ΤRn‹ΙA΅k7'MNƒRι&‹Φš.+aC―ώωšΘTώͺ΍NsθdοφΙ r4uΒ‡ƒ„ P<δΙ•_DGΚjΈΰ‘φδΰ“8ΝΩbp^pέα3ΎK{ϊθε@τϋκlγnώ>Fud8pΗ9ΠEηŸBθ U”}Z΄NυΧ`E™XU €NW€%a†Ή–hf¨ΞzΌ@’EΎΉqαŠ©ƒ χ!Œ Yαΐ"ί݈£†ͺ@FΞ‹?€Ž:J8€ O φN6OF™ΰ€„NgJ€ζ#DRJI₯CΩ„)¦˜U~Dšiͺ S GcΆY&Cp@sΚyΔ” ΅γšG6iQœuyΐe0ˆ&ΊB6κ€T[`Θ°e‘‡&Šθ’2dh’QP… Σ|#ꨀ–jκ¨fh`†8§Άzͺ‘ZΊ(‰kmκ) 0Dρ$šXbI―Ώϊ μ°Β«I"`I±Α6K¬³–FΉ^jΐyn $€LP”KΉεŽ›ξΉγNpA²¨‹ξΌςΦkΑ5x›€—fƒm“›žΐ­ΐtq'¬πΒ '|pΓC\ΐ #CΏφwΐcΐP cŒ‚-ΏcςΙ(§¬²0Ώ΄\ςΛ,Η σΜ2r@cά€ZŒ)­ Θ`ΤpΡ"ΨbL1L7ντΣPG-υΤNί FΡ0Μ1Η¬@_π"˜ΰΛT§­φΪL‹‚"x06wςηη‘ι|ΓΗe 3Œ1h³-ψΰLΓ²,r@ˆ97e¬Ϋ‘z/Θ/n9ΫΓƒ‹raΧ–³wίΗTώτjΏ$ξ9­~ €wη”§-ZκN’A―Onϊ鳫n»―“΅r΄―ΞϊBΉΗΞϋn©+ώ»pΑsΜπΓ<ς{"ΜξΔϋΞ:τΩ+οtχ΅=ίSΟΌχΗ+”<χΥsn<θE?ύς³5?νξgΏ½ϊω“ίυϊ;ψ­Οyζ# ππ‡:&wα3`Ψ>’ο~γ‹_ω*X?I°€AήΐnP„±_ {BώYPw+܌υΨΑ Ɛ2ϊΰ ΗΐޝЅ5„aeΘ>Ίntι"FŒQΜƒ#Œΰ +bŒ_$CΔ œGrHΓ(ΪP‰TΤE=šE-bδ‰F4@ξx˜ATQω ‡.ΚhŒ3ˆ^b3b ]Ό"V 2θ(¦=xL!1Ψ4ÏωPΒA B!\„’" 8Ε‡ƒ―°‡ 4@†m 2‹€ΫcAΩΊM.P•ρ£(U Isψ‚ŽJΜdΧψΑ‹|ς΄€%ΎqJΚΞΕ0+·DB0>Dδ r ·Deu™Θ#~–ωe>|`ƒψΰœΓ,fεIe’g“zl$H ω%ΨΰχTδˆE6^R άl₯7_)OˆS φ<Bq€7|γŠΕ0; ΰNπuΟΜ4x$ ‘£ΠΘ‡HλQν.™½£@Υ(Eg:Dœ % d(’™ˆ….0zɊž Ν$‘ΰx4 PHG, π cR- Μl)8-ΙRnΒn€‚* €Ε¦”i>U`§ ‘cό"ωhF+8‹V΅ΌψEαžͺ¨^΄—©b(‘Α ]¨’d°Β6ζ¨Ά”ώp₯Ν$λC§‹j΄BΈΠi3bQX8•-Dμ";ι7V’rΊXλ&ϊΊ΄―6-¬/_AωXGcšΜ―ΠΕ\©–ΜΪ¨( ΰ RLjͰϋΣμ]9ϋ‘ΑΥ6Έ7z’8θ`5Θ’ΎψΫj£"8_ψBk°€!Βdp$2LΣΐθ` [Xχ˜c)¬Κ[‹0`@dJ$  @™ΐŠIn©f ψΧΏ" Σπ¨X όA-R™Ϋτ6ؐ(-’pΰ~%2`‹ J —yψΓ ±ˆG,βQΨb¦†-ƒ$0ޱŒgLγΫψΖ3–ΦΆPL΅nΕέ—†Lδ"ωΘHN²’Œ―tλb=φWmu‚*Ÿ]0C e.oΉΛ`ώ²˜½Lζ0—yΜa>Εͺ¬()ƒn‘c!‹σDπ V}£’Β3žοœη>σωΟ{΄Ÿ θ;ΓYΞ>cθΤ±1­9z VKŸΎGιJ[šDBs΄£D|νΏώ½;.MκRWϊΣ ¦[6FνΒ#©γ9―ŽΗ;nbκZۚqκ`‡¬w=kΗΔΥ™’Τ­‡MlR7䳁Š₯]iι {!”Ο³‹$τH( !ω ,Ά‘Sq H°`A ,HΈP!Γ‡#6œ‘’ĊN0ΘΡ ŒŽ CŠI²δ@b«WŽ₯Λ–0_ʌIs¦Νš8_šhΞ€ζνJ΄hGuͺ¨§Ξ¨Σ§%{ͺ00JΤ«X ͺSdΐJΦ―_£9p€¬'Ψ³E›Ί1p'Ϊ·DsΠΞ,ά»!Ρ‘;S:»xDχ €·‚4Nƒ\δΠ)žŒ.2ˆ'+F6ZSΝ‚υZθdЁՑRJ0κ·θΜMέdΰτkΈζ°ςξv`±d ΈφUΊ΅mm?+—ΉαΛ‘Ζ>bΐ/τθP19@ςξ:v£ι?φώέh˜Υ‘/o2’}fΥάθ ΚιU­΄ϋzύ#‘£€δ Qμβ€Οθ”:ΐ•εΰ~ @rσMh’:Ν…£‘S|ωυaQ˜pDl#ξ„ŽxΉό•βNw8€†q/–”Ξ{xΣ`#ΩGZ<;’8Ωid‘Βν·š A5d‘P™dHDvΤδPΫUΙΡ•e³Βp€™P@£Sμ¦—‰I¦™hͺ™aœ PAAs`œ½ “QΩδΉη@}ώR’z …}~σ Tf8‡₯FM#BQP1)₯~©¨Zΐ`X’‰%Ό+¬²ΦJλ­’Aˆh2λ―ΆK+$ΐCZθΩηsδ CΥp@(TΦbkΐ΅Ωv;PL`­BΫ’[­@η–k@4$»,˜9‹@'ά@όBuOuαΑ ' `ΐ TτΉε£ Œ1 5ΐFό"Œ@ΏρΖwΜρΗP σ‹-Ÿ‚qƒ0Œ!H©Ν‚0Η7ΤΖΔc³oΖ Š`Œ3s¬Lo½+P`ΐˆ  s1qΒψ‚" M΅+Ό™—μ¨SΖ‰Θb±Ε,—σ1Η Sƍ|γ–z$υ΄v"Έ#Œ1ε‰<χ9ά):_'b±1egŒ1kgς  y½€ΰ7³'ΜΪm(’Χ`Mίδl—Γxίsyή”{>ζ‚?-yιŸ;yα€wήzΰλΗy#¦οδΊθ°w{ξ~χ欟ϊθΎ―»πx―.»ρσNόσΛgzμΈΟ=ςΨύ>»υΆ+όφ½w/~I¨Χ>}φΠΏΎ>πθ3Ύφξ;Ο~υ©7=ό$νΞ}tή3ψζΧ>ι}ΕΔ(†ώˆ@όi.+ΖΠΕ0P"Œ€γ«V"hdθ"ε# γ—Ή³#ω€24vΈ†d„ύ;ž ‹"2Z!Ίψ αvΓ‘€oxΤ 5@†p CΏhaIzx9fεΔhE>T@Δmθ‚I$ά ΒĐόpO™§β“!ΡΌΰωbH>žpŠ!Γ7šρΑ$’ν…kτ‘πΐ"Δ|π@<ΰΑeΘqČ₯$]‰Ά8”cό"φψzΰƒμ δΘ!1vˆΘ<6q€|£$"IL0‰[LδQœˆaτQ ΐ, €%ΈαΔΠ…g¨JŽ€,Ž”"r$@#¨‡@wGŽτR+¬ΌJQXΜ@P Š@†"‘‰Xθ2•žτ’ό°E)BΑ λhΖ¬PŽVΌ"‡‡μΘ3 ²Θ¬Έ2υ Γ66±;@A…„/Γ©Θqbε‘φhF+8 UœσHd&8©—AJσ„υΠ…*^ъu Α V4IΠU‚ς ΊΨF+pa€Wπ‚Ό £9O‚Τsƒψ .ξφ‹…€Ί 'εYR_ξ‚+ά/tρ oΞT$5ΘMΏr³ΓCt¨©A’Ϊ8Ϊ †™Z%*EEς$p¨‘}ψ…/|1 j†(1€&Јi€ΓνX—老>Τb™C½ΝZ’ Tb<1՘ ‚4 MΒ8Ftl3‰@ HS;όV{Α@ s8ΐ1lΖHΑΨbΙ‚`°€ƒ³υR”j†ΩόB}Ύ©…’`¬ΥΆΦE Σ“jQ ΡΡC±†ΛΪ>$§:΄P X€\ΔaΧ»ξΥά°ch9•N }₯Α i0zΥ›ήυΊ·½πe―|ί;ίψΊ· " ˜@φΤ§οΆΜaYY9Κρr ΐ&°ΜΰK5xΑŽ0„'όΰ•:ζ¬pΊθ§Ωή»λ»ΓNΉμœ―ϊδš#<ήΖ7Ÿ{ςŸ ϋτΟ+=θΞΣ>˜υΗc:σάcο=_ΰKοχωίσ~ύϊ€wNΎιΞΏd 1:gιΓw―?EΖΠΕ0|ρ bƒ}I_ωΰg’_θ’Ν01Ψ&%Π}αƒb ζƒΊΠΕgO| ΰ+ςar C„lKœ ΒΏχ=n†9†.V¨+„ƒ0$aCLˆ;zD‡<ΤΆρΒκn!5Μΰ ;rŒ_Δ"*Θbg|Δψ)„ˆ†CaGTˆΕ,δM$™ EυM#Η Ζ y ‚¨€d GθΕ‚€±uυσˆ0v˜πΠΨE²ƒnœΗώΰJ° 0‰ŠqΘή}Ȏ r…JΘ$A€†r$C_3™ώΪΈΐ7^€’ω8Ž hδγ—¨Η1p†ΊQΟ”„Τe (aE CΘD,ta· ϊ’΅”€G 7ΐ£PxJ,^ρ 5ζο‘«³ααHΘ%nΒn€‚*€HŒ§Γd_Δζ 58I‡TρŠΝh'DΝuπ"†ή3f)1ΑWΨœΠ…*ΚA+l#„Τ»ζφφiK‹”LΥh…p1Νfπb±θ( —w»0qŒ"Ι ΠMD΄m€%G΅ΙΠ§μm;|EΏξΙ>…Š1…ψX(οΉΤPBQŸET)LΞ9D–ŽE°Z _ƒΓΨΰRΎ: OH ,b‘‚zΤ‹ ΔΐΆ¨…/Φ8_ΤΒΈ@ ž‘ x dKš„[Π•/«Α;Ψ|Ι9x’―Θ$2φS)ΒΣ₯&KnνΕ[•2A-~a°Μ̊QœmPς€…^aJˆ@Δif…pΦ³ρ|¬e}¦ZΨΘ»Π”[9Αΰ'0€Ί`†4Μv]ΙΥΒΆόjyUŒ "x†4Κ!¨o”c0»@΄p±½hŒcs 6d#Ύ cc+3@z  Z/ŌfΚFb¨•ά7Ώ Š:βΑŽx „πHVͺ οHο"„Ά€!ω ,―4 !ω ,Φν 0F¬˜1*¨k1]Š[ΈΠ˜.{ΙtœH1!±Xωΰ!3π˘1Ž…ύi%œ.';2©L8dΊJΖ\xμW«|*jΊ„9₯@‚?Uτb§N£„}ŠΜ·fΊJD©$_yΨtj₯E=zT‹¦œ/^%QφŒeο‡%6 ΨECΙ²3σ)1€cπHΠ|{xΠ@±ž?‘8‚δ΄|λ•5x6ε@”(B¦¨Q¦Xc#φŠ›uΝ (ΧκΥˈ£κŠUΜΆMΥξ@Q…5nΡ¨+ν5kΕ)–*Χμ4VόXO—*]­Κ‘±²-«0…ίum/k…Λΐ+^Δx5{Uό/9ωδd€“ƒ όΕρύ+ΤνA%D˜tΠ/Z-!ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 ;python-gaphas-5.1.2/docs/gaphor-canvas.gaphor000066400000000000000000003165611512665300000211760ustar00rootroot00000000000000 Gaphas gaphas-canvas (1.0, 0.0, 0.0, 1.0, 703.7048118590997, 594.203125) 173.0 193.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 305.7109375, 599.703125) 144.0 91.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 206.8898501407507, 130.51953125) 164.04856185909966 83.0 1 0 0 (1.0, 0.0, 0.0, 1.0, 414.96653060909966, 348.71875) 100.0 58.0 0 0 0 (1.0, 0.0, 0.0, 1.0, 485.5859375, 122.51953125) 100.0 91.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 653.6423118590997, 832.4921875) 124.0 85.19921875 1 0 0 (1.0, 0.0, 0.0, 1.0, 322.50619421075066, 213.51953125) 1 0 [(0.0, 0.0), (0.0, 61.26953125), (75.960336398349, 61.26953125)] 0 (1.0, 0.0, 0.0, 1.0, 370.93841199985036, 166.05078125) 0 0 [(0.0, 0.0), (114.64752550014964, 2.9431266681999944)] 0 (1.0, 0.0, 0.0, 1.0, 741.84765625, 832.4921875) 0 0 [(0.0, 0.0), (-0.43359375, -45.2890625)] 0 (1.0, 0.0, 0.0, 1.0, 703.7048118590997, 662.8133352987421) 0 0 [(0.0, 0.0), (-253.99387435909966, -6.110210298742118)] 0 (1.0, 0.0, 0.0, 1.0, 264.35775671075066, 213.51953125) 1 0 [(0.0, 0.0), (0.0, 115.0020841969997), (20.052468109549864, 115.0020841969997), (20.052468109549864, 244.90625)] 0 (1.0, 0.0, 0.0, 1.0, 111.2109375, 798.3515625) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 162.12109375, 689.3515625) 0 0 [(0.0, 0.0), (1.1484375, 109.0)] 0 (1.0, 0.0, 0.0, 1.0, 803.3046875, 67.60546875) 101.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 803.3046875, 139.51953125) 120.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 806.4140625, 213.51953125) 109.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 973.65625, 217.7890625) 123.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 923.3046875, 170.8515625) 1 1 [(0.0, 0.0), (66.6328125, 0.0), (66.6328125, 46.9375)] 0 (1.0, 0.0, 0.0, 1.0, 904.3046875, 91.54296875) 1 1 [(0.0, 0.0), (112.1875, 0.0), (112.1875, 126.24609375)] 0 (1.0, 0.0, 0.0, 1.0, 255.7109375, 798.3515625) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 423.58203125, 798.3515625) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 423.58203125, 826.4140625) 0 0 [(0.0, 0.0), (-67.87109375, 0.5546875)] 0 (1.0, 0.0, 0.0, 1.0, 211.2109375, 826.4921875) 0 0 [(0.0, 0.0), (44.5, -1.50390625)] 0 (1.0, 0.0, 0.0, 1.0, 223.9384120003005, 15.4765625) 129.95143814 61.2912483318 0 0 0 (1.0, 0.0, 0.0, 1.0, 289.52963171075066, 76.7678108318) 0 0 [(0.0, 0.0), (0.453125, 53.751720418199994)] (1.0, 0.0, 0.0, 1.0, 653.6423118590997, 871.3065485846857) 1 1 [(0.0, 0.0), (-68.05637435909966, 0.0), (-68.05637435909966, -47.10342358468574), (-130.06028060909966, -47.10342358468574)] 0 (1.0, 0.0, 0.0, 1.0, 546.5573460623677, 458.42578125) 100.0 74.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 594.4467233747355, 458.42578125) 1 0 [(0.0, 0.0), (0.0, -81.30804393350002), (-79.48019276563582, -81.30804393350002)] 0 (1.0, 0.0, 0.0, 1.0, 794.8828125, 594.203125) 1 0 [(0.0, 0.0), (0.0, -34.390625), (-201.73296412526452, -34.390625), (-201.73296412526452, -61.77734375)] 0 (1.0, 0.0, 0.0, 1.0, 698.9329699061839, 352.83203125) 169.0 129.0 (1.0, 0.0, 0.0, 1.0, 698.9329699061839, 447.83203125) 0 0 [(0.0, 0.0), (-69.96156134381613, 10.59375)] (1.0, 0.0, 0.0, 1.0, 108.7109375, 632.3515625) 105.0 57.0 (1.0, 0.0, 0.0, 1.0, 213.7109375, 664.9140625) 0 0 [(0.0, 0.0), (92.0, -3.265625)] 0 (1.0, 0.0, 0.0, 1.0, 236.45999079917829, 458.42578125) 100.0 74.0 (1.0, 0.0, 0.0, 1.0, 288.5547560703005, 532.42578125) 1 0 [(0.0, 0.0), (0.0, 34.9453125), (96.00094670082171, 34.9453125), (96.00094670082171, 67.27734375)] 0 (1.0, 0.0, 0.0, 1.0, 398.46653060909966, 237.8046875) 133.0 70.0 0 0 (1.0, 0.0, 0.0, 1.0, 465.7734375, 307.8046875) 0 0 [(0.0, 0.0), (0.00390625, 40.9140625)] (1.0, 0.0, 0.0, 1.0, 809.2331273123677, 832.4921875) 117.39968518763226 85.19921875 0 (1.0, 0.0, 0.0, 1.0, 844.28515625, 787.203125) 0 0 [(0.0, 0.0), (2.618225458220536, 45.2890625)] 0 (1.0, 0.0, 0.0, 1.0, 585.5859375, 145.62890625) 1 1 [(0.0, 0.0), (74.09375, 0.0), (74.09375, -54.17578125), (217.71875, -54.17578125)] 0 (1.0, 0.0, 0.0, 1.0, 585.5859375, 197.8203125) 1 1 [(0.0, 0.0), (71.57421875, 0.0), (71.57421875, 46.65234375), (220.828125, 46.65234375)] 0 (1.0, 0.0, 0.0, 1.0, 585.5859375, 172.48046875) 1 1 [(0.0, 0.0), (74.09375, 0.0), (74.09375, -4.62890625), (217.71875, -4.62890625)] 0 (1.0, 0.0, 0.0, 1.0, 915.4140625, 249.83203125) 0 0 [(0.0, 0.0), (58.2421875, 0.0)] 0 1 Item Canvas GtkView 1 Tool 1 Painter Handle position Point painter 1 1 composite * * composite items * * canvas * * * * model 1 1 Solver composite paint return ItemPainter HandlePainter PainterChain DefaultPainter composite composite Constraint Variable draw return context point return x y matrix handles return bounding_box selection request_update return update return gtk (1.0, 0.0, 0.0, 1.0, 150.0, 139.0) 515.46875 280.4921875 (1.0, 0.0, 0.0, 1.0, 222.625, 318.76171875) 110.0 54.0 0 0 0 (1.0, 0.0, 0.0, 1.0, 473.2421875, 318.76171875) 133.0 54.0 0 0 gtk DrawingArea controller * * 2 2 1 Generic Aspects are used as mediators between tool and item. Tools take care of the "what", aspects take care of the "how." Profile Profile diagram (1.0, 0.0, 0.0, 1.0, 238.0, 289.0) 117.0 74.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 327.18359375, 140.55859375) 100.0 74.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 377.18359375, 214.55859375) 0 0 [(0.0, 0.0), (-84.18359375, 74.44140625)] (1.0, 0.0, 0.0, 1.0, 408.44140625, 289.0) 129.0 74.0 (1.0, 0.0, 0.0, 1.0, 400.16015625, 214.55859375) 0 0 [(0.0, 0.0), (72.6875, 74.44140625)] Aspect Class baseClass composite * { background-color: transparent; color: black; font-family: sans; font-size: 14; highlight-color: rgba(0, 0, 255, 0.4); line-width: 2; padding: 0; } diagram { background-color: white; line-style: normal; line-style: sloppy 0.3; } Protocol baseClass composite Connections composite 1 Model EventController ports matrix_i2c Port composite * * glue return constraint return view (1.0, 0.0, 0.0, 1.0, 165.3625063907507, 172.79296875) 164.04856185909966 83.0 1 0 0 (1.0, 0.0, 0.0, 1.0, 293.50718865618387, 478.984375) 169.0 129.0 (1.0, 0.0, 0.0, 1.0, 356.93918685909966, 280.078125) 133.0 70.0 0 0 (1.0, 0.0, 0.0, 1.0, 250.1015625, 119.0412483318) 0 0 [(0.0, 0.0), (-1.32421875, 53.751720418199994)] (1.0, 0.0, 0.0, 1.0, 182.4110682503005, 57.75) 129.95143814 61.2912483318 0 0 0 (1.0, 0.0, 0.0, 1.0, 373.43918685909966, 390.9921875) 100.0 58.0 0 0 0 (1.0, 0.0, 0.0, 1.0, 462.50718865618387, 520.78515625) 0 0 [(0.0, 0.0), (53.01109490618387, -20.0859375)] (1.0, 0.0, 0.0, 1.0, 515.5182835623677, 448.9921875) 100.0 74.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 439.93918685909966, 162.32421875) 100.0 91.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 424.24609375, 350.078125) 0 0 [(0.0, 0.0), (0.00390625, 40.9140625)] (1.0, 0.0, 0.0, 1.0, 222.83041296075066, 255.79296875) 1 0 [(0.0, 0.0), (0.0, 115.0020841969997), (-9.517672548877727, 115.0020841969997), (-9.517672548877727, 170.90625)] 0 (1.0, 0.0, 0.0, 1.0, 165.3625063907507, 426.69921875) 100.0 74.0 (1.0, 0.0, 0.0, 1.0, 280.97885046075066, 255.79296875) 1 0 [(0.0, 0.0), (0.0, 61.26953125), (75.960336398349, 61.26953125)] 0 (1.0, 0.0, 0.0, 1.0, 563.4076608747355, 448.9921875) 1 0 [(0.0, 0.0), (0.0, -29.601012683500016), (-89.96847401563582, -29.601012683500016)] 0 (1.0, 0.0, 0.0, 1.0, 329.41106824985036, 208.32421875) 0 0 [(0.0, 0.0), (110.5281186092493, 0.47437666819999436)] 0 painter (1.0, 0.0, 0.0, 1.0, 163.2421875, 175.03515625) 1 1 [(0.0, 0.0), (71.57421875, 0.0), (71.57421875, 72.69921875), (220.828125, 72.69921875)] 0 (1.0, 0.0, 0.0, 1.0, 63.2421875, 99.734375) 100.0 91.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 384.0703125, 190.734375) 109.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 380.9609375, 116.734375) 120.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 163.2421875, 149.6953125) 1 1 [(0.0, 0.0), (74.09375, 0.0), (74.09375, -4.62890625), (217.71875, -4.62890625)] 0 (1.0, 0.0, 0.0, 1.0, 493.0703125, 227.046875) 0 0 [(0.0, 0.0), (58.2421875, 0.0)] 0 (1.0, 0.0, 0.0, 1.0, 551.3125, 195.00390625) 123.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 500.9609375, 148.06640625) 1 1 [(0.0, 0.0), (66.6328125, 0.0), (66.6328125, 46.9375)] 0 (1.0, 0.0, 0.0, 1.0, 481.9609375, 68.7578125) 1 1 [(0.0, 0.0), (112.1875, 0.0), (112.1875, 126.24609375)] 0 (1.0, 0.0, 0.0, 1.0, 380.9609375, 44.8203125) 101.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 163.2421875, 122.84375) 1 1 [(0.0, 0.0), (74.09375, 0.0), (74.09375, -54.17578125), (217.71875, -54.17578125)] 0 canvas (1.0, 0.0, 0.0, 1.0, 633.8454368590997, 259.15625) 0 0 [(0.0, 0.0), (-107.14746579673192, -1.3359375)] 0 (1.0, 0.0, 0.0, 1.0, 633.8454368590997, 195.3203125) 173.0 193.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 382.69797106236774, 200.8203125) 144.0 91.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 402.19797106236774, 340.859375) 105.0 57.0 0 0 (1.0, 0.0, 0.0, 1.0, 455.25, 340.859375) 0 0 [(0.0, 0.0), (-1.41796875, -49.0390625)] 0 (1.0, 0.0, 0.0, 1.0, 397.4638970491783, 67.171875) 100.0 58.0 0 0 (1.0, 0.0, 0.0, 1.0, 449.5586623203005, 125.171875) 1 0 [(0.0, 0.0), (0.0, 42.29296875), (11.984074013189456, 42.29296875), (11.984074013189456, 75.6484375)] 0 (1.0, 0.0, 0.0, 1.0, 739.3737523123677, 433.609375) 117.39968518763226 85.19921875 0 (1.0, 0.0, 0.0, 1.0, 774.42578125, 388.3203125) 0 0 [(0.0, 0.0), (2.618225458220536, 45.2890625)] 0 (1.0, 0.0, 0.0, 1.0, 404.69797106236774, 447.708984375) 100.0 57.0 0 0 0 (1.0, 0.0, 0.0, 1.0, 583.7829368590997, 433.609375) 124.0 85.19921875 1 0 0 (1.0, 0.0, 0.0, 1.0, 583.7829368590997, 472.42373608468574) 1 1 [(0.0, 0.0), (-37.478249359099664, 0.0), (-37.478249359099664, 1.1368107903142572), (-79.08496579673192, 1.1368107903142572)] 0 (1.0, 0.0, 0.0, 1.0, 611.9714085623677, 67.171875) 103.69656018763226 58.0 0 0 0 (1.0, 0.0, 0.0, 1.0, 725.0234375, 195.3203125) 1 0 [(0.0, 0.0), (0.0, -34.390625), (-64.7372067343639, -34.390625), (-64.7372067343639, -70.1484375)] 0 (1.0, 0.0, 0.0, 1.0, 671.98828125, 433.609375) 0 0 [(0.0, 0.0), (-0.43359375, -45.2890625)] 0 connections (1.0, 0.0, 0.0, 1.0, 48.98828125, 293.05078125) 105.0 57.0 (1.0, 0.0, 0.0, 1.0, 48.98828125, 405.453125) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 102.3984375, 350.05078125) 0 0 [(0.0, 0.0), (-1.3515625, 55.40234375)] 0 (1.0, 0.0, 0.0, 1.0, 193.48828125, 405.453125) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 361.359375, 405.453125) 100.0 57.0 1 1 0 (1.0, 0.0, 0.0, 1.0, 361.359375, 433.515625) 0 0 [(0.0, 0.0), (-67.87109375, 0.5546875)] 0 (1.0, 0.0, 0.0, 1.0, 148.98828125, 433.59375) 0 0 [(0.0, 0.0), (44.5, -1.50390625)] 0 (1.0, 0.0, 0.0, 1.0, 239.5234375, 405.453125) 1 0 [(0.0, 0.0), (0.0, -87.046875), (-85.53515625, -87.046875)] 0 python-gaphas-5.1.2/docs/guide.rst000066400000000000000000000015101512665300000170530ustar00rootroot00000000000000Guides ###### Guides are a tool to align elements with one another. .. image:: images/guides.png :align: center Guides consist of a couple of elements: aspects that hook into the item-drag cycle, and a dedicated painter. >>> from gaphas.view import GtkView >>> from gaphas.painter import PainterChain, ItemPainter, HandlePainter >>> from gaphas.tool import item_tool, zoom_tool >>> from gaphas.guide import GuidePainter >>> view = GtkView() >>> view.painter = ( ... PainterChain() ... .append(ItemPainter(view.selection)) ... .append(HandlePainter(view)) ... .append(GuidePainter(view)) ... ) >>> view.add_controller(item_tool()) >>> view.add_controller(zoom_tool()) You need to hook up the ``GuidePainter``. The aspect are loaded as soon as the module is loaded. python-gaphas-5.1.2/docs/images/000077500000000000000000000000001512665300000164745ustar00rootroot00000000000000python-gaphas-5.1.2/docs/images/canvas.png000066400000000000000000001026061512665300000204620ustar00rootroot00000000000000‰PNG  IHDRζΟ†0y1bKGD ½§“ IDATxœμwΈ]EΥ?7$7=”P"ͺ”Ύb£‹’’¨Hρ΅JA,¨―β+ADQEͺΎQαgAAŠJ$*‚Š‚J“"„)BIο!χχΗwΦ³ημ»Ο9ϋœ»O_Ÿη9Οn³gΟ9gΟ¬YkΦ¬ΗqΗqΗqΗqΗqΗqΗqΗΙG_Αω ,KΒώR`qΑΟi6Ρo5>cΒΉ‰!ΝX`}`$0LΧΖλ£€~`80>\›ŽV…Οrτϋ­AΏεj`Yψ¬ηΦ„4+€•ΐ’pnq8^Qδΰ8Δ(`°AψΔϋιγI¨N-Gυj)I][ν/Auly8^Ξ- η§0ŠΜσ€Ν€uHΨΔ,"ΤK©γEH¨Ψρ’Šb•₯œ€U0¨, Η#‘XI@ŽχςκdLΈΈ°Εeq†ΖGσΡ;»Υ1€΅θ6¬£fTJ»u…ΐ@Ψ_ƒκ]=i­i,ˆφW‡ςŒ"©«PΗuI½³:ju}ϊξCΪqiΖ£ϊ;šζ³ψπι<Ϋι2ŠΜo~[pžν€5nΦ8Ε ‘5:Φ™v;€/PcΈ–D“]ςuF^ ωŽ$ιPX£5‰€±²Nƒ5`γI§qαάDJ;,„rLΒιd~ΦκBt«€Pέ|!c?}Ό>ͺ/Γv ͺoρρ8TίμxB87†ŽΐFΐσόrNχ³^Αω½Άwϋ“cIz·“HΘΨ°?‘D0#ι)›π±^ϊP€™‹³€i/ω&ψΙΐ3?;ΝgDΨΎΈ•€SΆμX3&”Φκm=iγNαϊθ}\κξTΧ’ Η,%ιΔ֚f%ͺχΝΖ¬…#«%tœjέ`―Ά+ \P!­Σx¬cα‚Ήσ±IGӘίδ²8ƒ1ŸΜΐIΜk ΞΧ©ΓΦsηc ώꊩœVaγο.˜!S΄`6σ• ζφ`mΨoi)œ"ˆ5f§ύ°eTKKαt˜½Wί ­Ή͎uz]0·'ζ ο³3dά”έύ˜ΦμζμΞΖMΩ퍛²ΒpSvχγ‚Ή;pΉ½qSΆSnΚξ~ά¬;π1ζφΖMΩNaΈ)»ϋq°ξΐ4fοτΆ'1;…α‚ΉϋqSvwΰs{γ³Scφ^}ϋΰ‚Ή;pη―φΖ5f§0\cξ~\0wξόΥήΈWΆS.˜»̝Ο0τ­#ω?φΒMΩNaΈ)»ϋ1―lwώκ\||ΉύqSΆS1w?1w>ήαmά”ν† ζξΗsηγsϋc¦lט!γ‚ΉϋqΑάωΈγWϋγmŸS.˜»̝O•jϊΓvEΕTŽ“wώκ~άω«σ±ξŊ©œV2:l—·΄NWΰs{πKΰ; ΚΫ5ζΞgY؎ii)œJΈ`v ΓsΒ ΐy­.DpΑάω, Ϋq--EϋΣΚ:l‚ΩMΩΐιSφˆκIΊ̝ΟR`KρuΦ)טΒ(Ί’[~λ†˜Ηa80)Ί6 ψ.p0x8›ο1 ™…gΟ3‘pώ:πςl½x}tΟ ΰ ΰΤ;δΈ ψπPHσ$pNt=Oi6.³_.˜;ŸuȜ=ŒDM₯zw(p°Υ©λ€­Rχό ¦ΐŸ-Γ΅<υΆ8˜΄Ξϋ€§žQ©Ν »Y—*α‚Ωi[.EβΨ:οό x3šx-°_t}2“Uν€Η€O¦¬ŽωE•w>p0ͺ¬ y‡qγ’eΛsί™¨Α:ΨΨ8©Ζ$°ŸAΪΰH$”אԽd.ή ά#€‡ΧDωTͺ·ΦνžΆΚQ/EΥ₯Jψ³SE fλΥΧ£1ψ2y]\„4Ν)©t{¦ŽχBγo‹ΙfrΩ;:Χξ»?:·š yξ{υί0Δg§9Χν‹Μ{ yάWαžrx€‘ξ Qs΅z7iΖg"<Α‚ΰv4VόjτΎ;ΊV©ήZ=zG…rV«k0ΈC±u©ωΛ)Œ’΅¨‘BΈ™ΛΆΎφ_ŠΖ…Œ©Θ‘κΰεΘ“σΜ yΞGζ«gQOώDδ€ςφ(έ\dςšŠ¦§,Θqίrΰ[ΐY¨Bތ<[_…ΌPσ>;ΝΤxΜG=ρ½*€―„/€Π4Jc†ΚυξTBοςh7žy1 9kύ Ϋ‘¦ϋ½(ΝTΚΧΫεαΪi¨2 Ί=QΰͺΧ5ΘΓEΦ₯JΈΖμ΄-‡#³ΦU Κr0»ygΎ€¦" O₯ωZκΎΐΉΐΣ”Ÿ²΄%–Q:]ͺΪ}}ΐ§GPύ‰ΤσσδΡΘΘ_ΏBίη­ Κίi‘ρ„<ϋ€a>‰,=οA‚οαϊTτžΩ;>ψ"‰ω9O½uZο y<ξ{st½Z]ΛͺΓΝbMxf–%ΑqZʁθεόMƒςΟΊNe|Gwpϊ?έκ‚ΤA·ΧΫθΏιĈ‡NRτσ°­gŒΩi >φΥxXΞφΕΜΨΛ*¦rœœΈ`ξ~\0w.˜Ϋ_v ₯hη/sP)ΪsΤ8 Aωv3.˜»ƒNΜέ^o]0;…R΄ΖΌ(l'œ―S?ήht,˜»―cN‘4B0 ) C ΰ‡iΜήht6.˜ΫΜN‘-˜Χ’„λλφEέOBuΤΦX^ξ{Έ…ΚΐCv.˜+c θ<Τ‚g»`v ₯k»ΆΒœ}I|έ₯m,ŒŸC1좏4šyxyΨήUP9*1 Y‡ιtšιXΉ9šήtͺ;ΛQGς'$+5΅»‡ν-xΆ[₯œBiDόδ…(ŒίJW}j£(]ΥfΏΤυ‹BYŒτ\Μ΅4ΓHVδi†`…†V/.ΈΣΎX]M/κR4οB«K™°Y‡ζηn>W7Έ ΅°>*ߞθ]oτο“…Y]0;…Π σn$ΦJ΄¬­uό7^Τ"Μ[—£Δ ΰA0½0Ζ~ΐ_Hpί‹l») 87ΔRu"ZΗy1 σybκΩ΅δυ΄ŠΥΰ αΪJΗήE{(\_όžβ­>Ωi{šςD’ {YΨ…*ε|€Α,œ_Hβ”φ_(4ΰj,Œςωv”$αφ–!!Ύ$JkίsjpΠ²“Χ£Ft5 ₯ζμΎτβ`‹π¬Ηšπ,§±μώΛί7(υΡ"(ήυΖUηyί?@ςΎ―DCN–f Ιxy­y-Euϋ)ΰΤ5[nrkΰ?αά‹¨£ρ4π|ΎŸ£&¬ Ί°y;N!ό½€‡5ιyί ΟϋπΖ°?Έ2μVΛ‰΅αΐ?ΓΉ;HLέ? η–‡4ΓHΆ₯ε7lΞέŽ―$ώgGe‹Ÿ-κΛWaϋπΌ›τ<§qΌύ—76(«;ΐη£σΧFη­>ε}ίΏέg+M›Zg^•o½θΪ3α\ZιΚξί9:ͺ|?GMœžuAςvœBΈ½€okσξ Ο»™έV‘υŠΡ;ŒDΓ=7άsI%?0Κλτθό†ΐ[’γ8˜ώχ)mήLiγ•ώX:[ώ¦‘~霼&<οoMzžΣ8ށώΛk”§HήΧxωΕkYΩ½‚όοϋM$Zcz8·u~kΝ+ke»63οέΎό?AέžuIžετpώΆ++¦*†‘ΐNaŸ¨²UΜεΐ±Hk΄1%_žεWtsθz™Ήw‰ύ3ΪYΨΪ8ρΛ£kgg”ΣLΙ–3Ζ—AŽ:Иeξœζbc­«”ΌΣ–Ρώ!h=㳑cΥ}ΐΗ£λyήχ›£kVWξE&ζZλΞ̌4ιz΅{t­uΝΪΊQS9NN:]0οJ²Μš έί#Α|r$‰{Μ–ζιθάvhLνΰΰpξb“Ά1™ χ&Yτέ<²cΣτΡx Ζτΰwhμk“pή³S+vώŠ­*ŸCοθ_ΐή#œΏŸdIF£άϋΎ9Ι8uόΎ§g3ԚWzD|νξ°]]c”ηNΐlŠοάΈ`vڞ;P{ežu‰ΙΚ„ήHδψecUί qπ²s!ΗΎ ή»™™M;فΔρk6π‹=σ=!έ¦ΐsαά Θάψ'δlΆu€b³Έy5 ‚ςνj ΆηCθΏό~Ÿq₯fδ5$υΒ|7 ώχ}|tξ„!ζeΔΧΜzΆY”§ωXΜ ηA£‡œ£Σ₯¬Χ،€f²šG2΅Š€R‚ΖΔ@=m;χπzΰ—hόy*ς=yY[ϊAδρω0π€š—($šΐΣhšΖuαήΡ”­Ώ ©kI4…•4ΟΛ5ζξΑ4ζF™²A͏GΦ΅ΘSϋ·hX蔐ήχέΞAqu'Ύφο°²€]‡Ϊ›>yQυŸ .\cvڞ‡άΥqψϊ/>^-‘Σφ| ύ—η·Ί Ξ ΜΩ쏭.ˆΣ4RcnΖ³SӘTLεtvώrκΗ5f§P:έ”νTΖώίV„)tŠ₯‘ΏœϊpΑμJ#³―fΤz,<κ„Š©œNΐ4ζ5--…“… ζ‘S9NN\cξnZ±—ΣL0{½j?\cv ₯hΑ< Ν+^‡…΅1wΝπΚvκΓ³S(E fwόj/†­ ζΞΗ5ζφΕ³S(Μήx΄nΚξά+»}qΑμJΡ!9ΝάΏ¨Ά&πΈπΌa$άH’΅Lνz‰ ©εϊXdF―ƒ"-F…εα³*œ[‹΄Κ΅(Ј­ιΊ 5€‹Β΅EΘιfiΈή)7ew•LΩλSΊΖπAžq„dΕ΄¬|¬NAi½J>Τ·…¨NΩga8oΗ‹Ρ;§iΗ©«ΡπέHτ¬kmqœN§hΑl=ΖΝH’lu+‹‘€^šΪ_‚„·ν― ΫxίΌνAz"ŠM<ύ7γP;†€!΄…λ­ρ΅Fo|Έw"jŒ'‘όΏγρ8MΕν…(pL,{%(’Χ3(ΦφΌ°ν?ƒ:ΣΓIκΘh$<­YΗήκ˜Υ9λ„ĝ«WVΟLQ°zhΕH|FŠ3DŠ̏£Υg,žνj€}‚Ε^XΠuΣ‚Λ]‡€²™`³Š4!\›@Γ· k•nΙΒλO£JgχŸΙy~˜²ψZ« α ™[PΘΜ1αc¨a\Μ*d,FV₯‘泈DS4λ’±Ε“> - {ͺcQ½³ΟΔpގǣϊ§™ŒΆ₯½8ΚN-˜Χ’₯»E[~8ΪΏψRt< ρΡ¨ρθφM£φΗ¦φ­£`ΠRΤ¨-"1½[γfkΝo‘%$ζφuΘΤg¨εεt>W’,Ο ΤNΰ΅θ}ŸΟΠΧ‡¬r“Γg3΄ΒΤ&©ύυΠoduΔ:6euΛκšΥ«‹˜Ξ­~₯σ²ϊ˜ξ¨8ŽΣβΕΦΠΊ°Γ+ήα8N9>ŽκΡ·Z]Ηq:—+H„ςͺ°}[KKδ8ΛHd†]-‘γ8N"³”­EkΛH^ίΚB9Žγ8N―ς $ˆΆsIυ–-,—γ8ŽΣετκt‹jΆ?Ϋuΐ/Πουα–”ΘqΗqzsϊšGiP„}ʜwΗq§˜ΣΧ—2έάΤ9Nηs,πpv« β8νŽ›²K™ŠLΧίΟΈ~YΨί΄9Nw0 yeχWKθ8½Ž ζR>„ށG3x30΅i₯rΗqzΜ₯Ά—•ΉΎψϊݎ)“ΖqœΑX4ΐΎ––ΒqœŽ"ΛΉk*Ιt)γ΅αάSΈ˜γδε$ToΎέκ‚8N»γsΒqa{9Š[ŽΏw’Ε-ήήθB9Žγ8½… f1xƒΎΚ™ί. Χ^Φψ’9Žγ8No2Ψ;unK$€MΌ² erœnΑce;ŽS/E‚ω?­.ˆγ8ŽΣΈ)ΫqΗqΪΜ•ρ)Žγ8Žγ8Žγ8Žγ8Nγψ0Š•}n« β8νŽ›²Ηiξ•ν89qΑμ8N3p ΗΙ‰ fΗqΗi#\0Wf κι?Ρκ‚8N‡γ³γδΔ³γ8Žγ΄.˜ΗqΗι6G&Έ'[]Ηιpά+Ϋqr²^« ΰ8NO°*|Η©‚›²Ηq§pΑ\χ$uΗqΗqΗqΗqΗQ¬μσ[]Ηiwά”ν8N3Ό²Η΄Ί ŽΣξΈWΆγ8Νd<°u؟“Ί6ΨŽG£iV Ÿ₯o| }Π·ύΩΐηSι7>,ΦK£ν`V*ύπPή%ΐΪͺί,›‘‘\#§κΜΓqΗq ηΓΘ™>wd€ye*Mόω{FϊWTH·Œτ―ͺ>«”:7M±ψπ–ΛqΗιR\0Wf)š"ρηŒkΫο*sί¦ΐ*”γ8‰uπ*¦rzΜ•Y Όš$ΰA̍ +Z,ώΰr9Žγ8Žγ8NKlφ‡£ΠžΖ]ΐ©©τ?.ŽDCKΛΡΌδ?[†k}αώΩhήτ}(JΜΖeφk吢|Τςpzwώr§ν«εκjj&ξω)π2ΰ5ΐΕΐΊp}:pp ςEΰΐαQ‡†ύ‹·Υώ5Ηq§σόψ1ςhΎ…ΒŒ‡ΰͺiΜ[#-unjόϋQ07₯Ο̌ŽwEQƎvž€>­wγPžquάλ8mΑ/οtα³ΗΙǟ€ΛΉω﨎¦gHTΜ}Hc^\œDΕοΏ(;{v*Ο©ΐcH o Μή[ηχrœŠ΄³)ϋχΐ_[]ˆΩ†μJέnΞkΒs§Uάμ‡Ζƒo^Ό$•f]ϊ&4m 3τώHˆ<ŒLΪΦών‚xόΩ6•η!ύΐ›ΡjSχΤρΗΙIQ³ fΗ)–㑦Ί%Z°βQ`JtύFΰk©{ξ¦Τω+Ν_o’E,–3xyΘ4'£E.Ά>bdΏ4Wι§©δm™–³€sσ‘gε³Θ,5ΈœΑc?³€οW σΣσΐΩ”Z ΟΚγ©™UžιH0/¬PžΌyŸ‡Mζ£…4ΎBbΖ›Α`ΣΫTφ>-Κ³ΤqšΝ!ΐλΒώ»=’k§’0—“QώZ8Βσ44fόJ`sΰ (6Α±αϊtdζ>ΨΨ ­Ωό±θ_ωςΪΗιRF …ΟߌΌ-―Ef+#K0/ΞD¦§O 3֍ΐiαάih Έ—¦ξ[| ΆνPό“žuœ[‡…gǞšεΚ3€„ΉςδΝ{π~ΤaΩ-wX”&­1Eω3hωνΓwή"\1‰gι/pΟR§;…„π³¨^Ÿ\E"˜§ΏBΫUhωΘ/R:V}"κ ― ωΜBνRΡ|u"ήΩ€ΌgΘδρΆΜΜιΕΖ翎ŽϋΠJPHέwKκΎ“€'Κ<+―§fVy§Τ”.O-y_ŸJσSΰ’θ8-˜+yŸBqž₯ŽγΤΗ¨ŽΎΏΥqΪ›VEώϊ πppσ9™κ‘κώ™:~ 9c¨g<9•ξξΤρ]hœj<ŠΤ³{šΙ`©Ržω”:§€ΛSKή¦ŽŸE¦ΈrΜE^§~‹:>?Ο9ͺμƒ:)_DΦ‰[–πγ ω:Žγ8M€U^ΩyΌ-³H/:>Pζ\ϊ{­Ÿ:Qα΅xjf=;M\žZς~±BΩ²¨δ}jΈg©γ4‡Q”ϊΜ@ωXΩ•:άN*Αόe4ήr š§xp+₯ή–E²gκx/δ–Φ–Ašό ΰu‹f*r Ήx9ςδ<³LΪε!νihQŠ™hlxO€y_0„r™χ\dšžŠVΑš‚œJ~…:;’ΒχBϊ HΟGζτ½†π]ΗΙζ9ΔδCΐ’α"Θ֘@ώ!sΡМγ΄|u©k’ύŸ6π9—јπ‹ΐ₯ΐ·*€ŸŽΨGΡ”¨Ε¨GϋυΚRTή ψΑχ!Aϋ€%™Πž iΜ;υΛΡ½gΤWtΗqrpšΆΈ;κ,Wjێ ΫΛΙ–β8]Ι, pΗi$Η!ΝψχΡΉΙH;Ž7ACRkπqf§ΗpΑμ8N³‹bTšΒψΉpύΝ*”Σ΄s¬μNd*ͺhs[\ΗqZΛRΰΚ°tΖυ>’ˆ—6₯DŽΣ£LΕ³γ8bWΤ<‡¦OΕΌ)\›ƒ+HN !ΗqΓ=(x†$αp ‹ΥνN_ŽΣ`ΆD½ΰG[\ΗqΪƒ£P›πG4Kβ’ӝΎ§IΈ`v'¦-j3€’wϊr*ΰ¦lΗqœΖ±-^š* › ξτε8MΑ5fΗqμˆΖ‘W“¬ŸξN_NYZω«Ϋψ₯λΌ:Žγ<€βaΝu ŒA+έM@Βzβ qθ₯Ρ} ’ύ₯ ^HΗι\ˆ8Žγδ§…Ό„¦@ΕΗYημxϋπ1ΦΕh%2ŸWΪoΗtΛIbŠχ<.˜§7™όΨ†€Q\φΧ’EVΦ‘θU ‘ vIΈžΎΗ4»<χ€λf2ΨMaΪ0μ—ϋLBν8mΆH#νxiΨ_„~Ώ1$KΣOΒJ—’ŒΣu +ΠϋΙ{hΨϋπ΄@HWβ‚Ωqz—MQΘڝ[τό<ΒάΜΊ&Μ+έ³‰P-'t‡’₯Ο^ž½4ϊ,Œφ—!“³νΫυ£u’xμHPƒΪυ‰Ρ΅±$kD‹ή€:’tγH~Στ³'YrΆŸ$xΚπp͈;3qΊυΒ³Œ‰Τ'‹φn«γΎΆΗ³γτ6ŸE±δg’4θΦH[ƒkn“ JΣ – εN_@ӘβmϊcΒuqψΌXΐσGŒ;ƒ:PήZp!π=ν¦ζ­yΈσW±l<<ŽΦ–vœvΗL‘oς³Λ οX£ͺ%ΝZ²lόi΅³” εΚ,c~FšgΓ6ζ΄kpΑάΨΧΔ°΅ύ±$γ0/’τκγ­™όbӟγ&˜[!°€ΆŽ“ƒY1USN0Ώ `‡RoΉx?€―δ…ΧΛΨxΞDΤ»zχ±pΝΪ·cK[€ΣΙɘ\Ό…Α eVΊJύ:²;σΠψšΣޘ`vMΞιLξτœΖ|5°Sω›Η&¨β/Λ؏ηιΕ^xρΎ5φPͺωΕϋ±€^xΌ{φ™`™Θϊ‘@4sΩ€ ϋρ΄ΫίuJ6ω5†oΞ&φYΆKH.ΚmΝqΓΆ}$¦Ώ *_sΒ΅τvǜ‚\0;‚)‡='˜ν 5θVycχόx>φΈ‹χGΕζ†XΗd!κεΩ~,\ΣϋvΌ0:_„Σ‰‘%¨'fl!ΰεΆYχυ‘HG[“qΑάξΈΖμt=«1›kό‘Θc±^b—ϋΨM?vνχc/ΌΨΉ#vÏχc7ώτIeφcΧόΨLl¦ωφΝLο/ Ϋ¬}ΣΜΫ‰u$„‘ό·•ψ5πJ§D8ν‰ f§ΣθIΑά‡–%…•$?’Σ;ΨπE+§Ε8ωh₯σ—γΤCΧ ζ,§’1H`/C㼎S+ζ?ΰsϋγ³ΣiΨsΧ“f f3/ΜΈζ8y0ΑμsϋγΞ_N§ΡυΣ₯²³ΩΊΣŽS/ζeοsϋγ³Σiτ€)Ϋ³3Tά”έ9ψ³Σitύt©J‚ΩMΩN½Έ)»spΩι4zRcΆ1fטzqΉsπ1f§ΣθIΑμ¦lg¨ΈΖά9ΈΖμt=-˜έ”Ί ! IDATνΤ‹k̝ƒ f§Σp―lΗ©̝ƒ;9FOjΜξrIΖ5ΗΙƒ ζΞΑǘN£'³-˜ΰk5;υβc̝ƒ›²N£'§K™¦μڎS/1w.˜»ƒ_ίiu!šDOjΜΆξρψŒkŽ“ט;c.Ž€σZ]ˆ '³kΜΞP髞Δi\cΈκIœ&“^Ω.˜‘bfUΕTN;ЍΞ_Γ€ ΒώpJΧcŸ|Έ˜‡Φ$?›Άp2 Ϟf"αόuΰ)τ^ίΌ>Ίgpp Z2wΨ!Η} Žμ'€‡Bš's’λyςH³q™ύn λ5ζ,ށ^ͺλZ]§cΩ½CjuAœͺ¬EΥπV€ F?ތξkύ’볐ΩώƒH n<|2•f5ptΘo,”󁃑ΐ½ ˆ­’ϋ²LΩyξ;MO=ΨΨ8©Ζΐiΐ.Θjπΰ½ξι$¬mιΚqζnυΚ |Έ}Ÿeΐύΐ7-ZX^ΑsgΠmŽ_7"΄eΨ=π’Œt많³œ»²Μ€9ΟΥr_^GΙzž}jγοD¦ύ΅H`w]ν–D€Σ5ζΙΘ χ&W;†Ο=ΘQΓiζ”α‚Ή½ι6ΑόeΰYdͺήxiš{!S±gκΎ½#Ψb²™ƒή彑ƒH ξE©Ι{5₯cυyξ{XΌ!μΧϋμ4'‡ΟΎΐaΐ‡BUΈ§“θ9°±¨'Ά¬ZΒ6εZ―Θ‹€ΝΒωMo Η_Dγ4 3Θ|ΰηΐ6Q^ ω\*ύS!ύ$—KBš{SεψU8S Ο{pZ@dπhψ>›ΤπύہƒΡwΏΆΥq*²9ϊŸζ΅Ί sπΊ°nδLeΜBψTχCŽW§¦|-•ηΩΐΣΐΫ)uΐš₯ω²M6BB:Ο}g…2Κτ*ΰΔŸcώRRN'ρRοζ’wwj‹ΛΡ4ϊH<5;-,η¦$N’φ&ΰίh,κ:4mbx„ΔΤe‚y-κ}ίN"τΟ iφˆΞM η6@½η4ή•ηy›‘ž±•ύZ€έ―C•±“ψoτ=~Ϊκ‚8ΩύOΆΈΝdΊ ΓΠT€α©4iΑ<8 ΘrS–ΆDΪϊ2J§KU»―ψ4j V#G΄ψωyςθ₯Θ_ λ‚ύΖ=ΓBτ₯'ΆΊ 5bε¨—X‰Βvcδ`qXtο^ᚠζ$sΞύ5ΚλΑpξΛαψΨpΌ9vδyήήaκ`›‘1σNβƒθ»ό°Υq*²ϊŸͺ–°‹ΘΊNηqzw_ήκ‚4‚rζ6Ξάi`΅Dœ:™¦η£žκΟ£k›§ώ]Ζ| ΤΌόƒ°}wΨΎ'l‚mžηݍ ιζ!/Σ·Gyt ξόΥtΫ³Σ;tυs5Αάi±Žο'ρT|S…tΣ€‹‘fz27Ÿ]O[ˆBlΞgά ψ!29o‹Ζ‰- ΑŒž·-} ψ}Θ@4†}|…οŽ˜`φΏ½qΑμt*]ν•]N0wjoδiΰϊ°Ώ'†SΫ Mβ3”&X?‰ΜΒsŸ$ρΌ Ϊ#G.r>oϊ?>‡<47ώ½fekVYz*2O‹ XόO« α ™N•QΉ(ηάΥΙ_ϊ8€Ήξ„4Νγ‘–kZπ‡ΐ΄s—£UCΥJg -}ΣθΨΈ3Ησ¦ ‡†!gœΐkΓ΅±lΝΖMٝA·qz‡N–QUι6δ=ύ*€yώXŠ4‚‡σ‘fϋohr{ >?ANs ³φ’kyžχ<Šρۏ<.mήβitž·₯ ζΞΐMΩN§Ι2ͺnlξ[[]§#ωzάdΨήˆώ§ί΄Ί ŽS#3Π»{d‹ΛΡͺiΜύe;N%\cξ zqŒΉVξA Ž―mΟη[R"’Ά₯+5ζn4e;­ΗsgΰcΜ•…ΒψBιJi― ΫΏ7·8N„{e;NΈWvgΰcٍ̕ΔAφ(ΚΤIΤ­7‘D΄ @›’™sΡϋ?8ƒδ·žFXθ8ΰj΄μγύΐ«Q°‘ΫΒΉΫQg0]-£ΊΡ+Ϋi=1w.˜+³{΄$tEzχ~σαq$H§‘Θ€“ϋPή7‘8ω£QΨΝ8RΥΉh¦F?ΜЦIΎΞ½ ψέ³Tc‘t΅Œ*§1[€©όNΓqΑάΈ`Œ ζ΅hŒωf`ztύνhJγ»P[ϊS$”Zωνΐy!ν‡νnΡύŸAρ ξΗS‘O&5Ολ$tυzΜ1;ΐsg`cΜξό• ζϋI”Σx— s΅ρF’₯fίG²xam©έ/ €‰‚τ4ν’NΣμz ήt΅Œ*'˜»Ϊγ­Kƒblo‚zιΓQθΠΡ|κuaϋb8ΏΝιn.˜;טΛ3’DΠƎ_±`Θ8Z¦1­ƒlσοΒv=`ηΤΉ‰$Λή™»Δ½EO fϋ»‘΅M—DΧ,`ΘΔSξš '#°„b”OABΧ„ο¦hόi“pmLΟY–₯[‰΄€εH€Ϊ w[YkŠεmw:aYΈfkU»`no\0—gW‹B,˜ΝKϋ?©τΟFϋ?DZ6θ7> έΝIV©³h~;’; yΜΩt΅Wv9Αlf›·‡OX£ ƒ…v|Ν„€a‚£Ϊ΅’Θ[‹jΧ@ΒΗ0aSνΪ$$G#A4!:ž΍&Άι΄vΝΦΊφυr΄ ΥΣ(ΪΩ‹hlj8κq ΫααόϊHΰ i ζφΖsyŽ_†΅‡!―ι?ŸEλ¬?lό Έ5μOC‚w,2w&p+㜠ζuh΅3˜Άκ–VQη"§‡x•©Xˆ¬_αΪz$šHΕZήF81«PeaΨΞCχ©πy&œ›ΝX’MUF’NA?z©G‡scΡ™GΈ§σƒyϋ_Ά.˜Ϋc. ζ) .ςΰΫΐVΘkϊ·αόΣhρ™/‘EgžC Ρ\…¬MfΖ^…Φp‡D0?ς€D0?ŒΪg0]mΚ.·~ρP¬η+Π’χE` ?$ ½a {΅kІi˜P}—‰9―™@1&Eϋ£(x6‘δwŠ―-@•f9’‹’γEαœ[ΪeΘdΌ(:^₯{Έ™θv&1ι₯ΩiίnV‘Ϊ”‰ΐ_Ρο1ΕTn“žύU6υσaίq:…ƒ€Pψθ·΅Έ,…ΣL―μ΄γΡsζν΄yŒL$qz)Η»€/„ύ‡Γ‘†²꬝‹bζnЦ²ό9͌@¦Ζ3ΠX  Ίι¨τ2ωLD ‰lˆκΖιΐ/«”±Υ: KHO“oκhW ζrσ˜7GA,ζ‘πi¬±7A=5δՎ'„ϋμh-K˜. Χ’E’‹HBI¦σršΟτ?-¦tΞyΜzΘ©i:πί@dy™τNu†#\ 7 oCσAg¨τ“(m›!Y2©ΚgC’NβZdݚ“ρyΔZ΄ βσΓ~WQNcΆΥNΦ•ΉntA™λNοRm‹7ηS:‡ωΠτ¦“ρ)zυr ²\ŠειδXc8ψ ₯ΩtΠ›ZΝ2UΤ±Y€ς;₯Γ\fΩ²!²Ψ*fΦ5:Œ­lf%³‘3³–­mmλίI¦MΠ ‰­3¬C³*f?ηžΒ3Ϋ–r‚ٝBœz)\d Š.U.’άT4φ{¦Σ‹8εΩ Ε΄ŸŒτ—ΡηK(]š0 ζΝΓ§›H js\¬χ8­„ εxuœΖP:¬dΎ16Ό;—Φ#<›)l/δΨ¦Ο™¬l l>Ϋ¦Ά[’ιί ι»R9,gΚήψ7Z¬ϋeΝ+ŽΣl‹¦ςΜFΞƒ#Π8ιYδοQ/ΎŽ΄8ΜΗ4oω8ΰ€pnš^u)§NέύΝΊ8 πΈ£nV£ŽMΠu‡ΞuDο{hΪL‹¦-™ιΞΜ{f΄Ήλ6Ž΅-CšΒβ°΅ΟΒhΏΣίϋχφ’±ϋ‘1ύӁΟΧ"-Ί›½²¦Ž»δΩΓXGΗ³γδΐσψŠ©ς3 …‘ό0₯¦ΠF²œRΑ½5μ‹Β΅ε¨α_₯]J2#`qt­•a1ΐ—{#}Zδ]$Ήβ8N-˜`ξΚW9ΑάΝ=ιnα d:¦IΟ›ŒζΧξŽLŸ3Π†/₯™`^GιΰP±9搘ξΜΌgγgfζ³q4‹M‚cQ§aBψΨώ€θxtψΨCeΙr ρR‘iΟγτζFz٘τΨ­Ο?YCRονϊ΅Θ±Ζλ»Σ)Ψ"4=%˜]cΞζδΤτρV€N†RώΣΡψ₯-q& >s1šKh˜`ώ3’o¬«€ σωυGTXR$£)ڐ`œΩ\MΰγI"Ս ιϊΓρ€°ίζkΆ#ι‚γ΄;&˜έ”ΑUh›z׏χ; (ήσήΡΉGP(Λ£Ρ4(Γ"ρ,@^ΒοBkΧ`5ϊ_ 9ޞ1f†~ͺ όLH[€ΰim7v艉„”ͺq\τm€ uŸ-<«]‰œΓ\0;DW ζrΌ5Υ’έ@mΪΧ,4lπκ}ΐ©H“[b8uί(΄ΑbδQzp%ς25ξ ωΔό$•&Ο³DλΧΪψΰŸΡάΉθ7‰?;TωΎyΚ4 ul@Ϊασhα†Ψ œηϋ ά†Μ₯Ο!Η«­’λεʟη79EγIσIdގωοwJs" *²6£ YŸλ©έ“Ϋ)eκέ„†μ·½ψ,°jΤhΠΊCα—$s^ξαoθέ}M« LF_ΊZάΰzσj€e@ZΓH(„ΙaH έχ-dB}#šW= ©Zs΅gEω3Θ«x{c‹θϋžWΓχΝ+˜Χ„ητ‘ΉΏ!‘g| ν7‘οƒΏϋΡΆ-°ŒwQ*ΰ³ΚŸηχpuΖχΫ½'Eη>Ξύ(#ύkC™Κ δϋΓwtκgwΤ zžδw]„‚μJ»4\JΔ¦VPK=ό²8έΕΓθέέΎΥi&‡£/}U•tυζYΡq?r†I7Ζ§SΊν d†3F AU‹`Ξσ¬­Ρχή±Lω%˜oI₯9 x"μΫχ?2Ί> λ^NyF# uZt.]ώ<Ώ‰•ρŒgΨο΅{tξ˜p\ΩΦC‹3,& Γ9χ hzΤ=$Ώι:ΰΐ”΅:€Νσ»_œ8δ’Cžz˜εψζtΟ1X)θΚyΝ–c>5φφy+Z€ >·_•gΖ¦ΟP£1“RΝi:5ώΆˆ½±™›k!Ο³ζ’IΫ“(Ξ3·ιΰw‘7γIΎdce(cΜΞΘ|=ŸdΥ¬αΐK+<7Οoΰι› ƒ]7Κ…δ4Φ" ΐNH‹;υzΏ…;ΦΛh4ΞΏ μšΎZς1+nvκ$ε]žΣζ‡ηep.ϊ !˜“Πϋq!κŒ=Ž|bς Ι„:"ρLz˜Μ:–±){cδ7πΕ(Ώ]Ρ»[ˆœφf«δ{ΡΡΤ*˜/Dςνs+ ŸK Œ4qƒmΟί5ρgΫ*ω€Γοe°kςJMΤSPγv6π(ϊί¦1Xΰ§ΛŸχ7Ή“Υ Œi‘Œ³£s•σΠΤ§1aλcΕqzη†γjsΘ›«ΰ.}μ^dyuVΟ ηΎ‚΄ι}£{Dίc6²$…ή³r<οδ±šςk|ΟDΞ–W†νH΄ͺ™Σ9t½GvΉΚk•ΆΡ¦Εεΐ9ΐi¨rl—>‚œ6@‚γb$ti.%YY؅ΌP'£ου1J+sžgMCγ«―D½ξ7 Νρp}.ž§"[MHW+“15”mδ|u*jΘβοFxfπ©pρ jΰ Η ­4­±§ΛΏŠκΏ ¨1{9ƒ£yνƒΌ~γ©6•σQgεC‘Μ?ΜHγΤG­žj‚Ήˆa«¦ŽŸBf‡|Ά£ΤKz š¦t πώ§Η JΙ*tͺώ·!sα»’sλ…γKSΟ¨$˜ Ϋ Q㨌4N}ΤΪι±NeΉ5Œ‹ΆJwμ³Ζ³HΪ‘z‡dŒr~ i¦"“>-―ικpœ•ψziΟ­–°…\Ae―δNaSkwE‚ΫΖφ${Υ§o’wηςš^hΙP'ηh4φz4Υ;=£IV$ΚC=30ουŸόίΗ3^Κϋ7μΞ½3:w5 ZSνy0xσϊ¨Cρcτ}’OwΪ‡χ wβ§­.H£πœN^FšΖζH+οŽΟHWIc6¦Y072θ·ύ^ŽτΆ¬`?JΫ!ςW<$s>•‡dφAογRjӜΞD¦σηχhΞύώΟqΪ“žcvΑ\m©½ͺšWy'ςM$”A‚ΰތ4y³Σ8¦ηLgΪrν`d(C2yΨY Yε(·ΰ³C+ΊΣDΊ^0—γKθ₯ύίVΔι8l± χΈnž@Υ”VΔqjΰθ½Moκ\cvŠΖ±pΉύ±3²–štœv₯띿\0;Eγ¦μΞΑ¦ ₯§:N;3!l»2κt—`nΆ—φd4=ΕΈ˜Ai¨Ώ^Ε"ρT pα΄ΜN'bοk³—ƒmέ$˜λ‘ΦE)bNGύΗg’1Ιeοθ ¬±/·p‚Σ>Ψε¦l§“°χ΅kΓ 5ςW;­8ΣL& oΞXC9Ίj#¬²΄‹§―SΣ8\cv: Μ1—‘Φgς.ƒψ]dšž‡Φ•=;UΦQ(BΦb4]β,/jQο*5}‘Œ³Ρ4ϋ€§ς~g(ם©σΧ‘½Œ¬pΑάώτ‚Ζœ0.y9υγ¦μf$Ε±(>σ΄xΕ{):τU$TG‹ΏoΙΰΥdκ]₯f: Oy ŠkύEδž/ ·/ΩαoG±~»rΠœΈ`ξ:Uceκχ”.;y}Ν΅^€ζΤή„B‰:₯λMΩΥ"5#Vv·‘ω° eΟώΈθG‚σ?ΰΰ±TW¦ŽBφN”vߏ΄εC’Όη’Ε-Ž%YnKJcIσ’λΟ•yF·γ¦μΞ‘ω*χύ»+N‘Œ@νΧζ™Ξλύ¨s²Έ} η]ά9Εα¦μΤω"VœΙΓݩ㻐φ<Eiœζ• Φ`λY₯fδ΄4“(^ΣΡΚOF?ΩσWDΧ{̝C-U­ΓV³P¬ύσ‘Fω,pšNw!šκς8ƒczΧ;5 ™™g„ϋf†τ±ωyc΄ΒU<{bWT—c‹X9¦μ=Ρ0ΪM$‹ΏŒAα>>7ώ!4…πI€h8υ1"|ΦΠΕS2kΜC]q&+mΦ‰ιu„³„΄6Χ»Jύ»˜·ν‡Ψ|Ž$,\Œ{ΆΒ3Ί̝C£Œ¬Tϋ’΅—/@k-ΟC±/F!7γΞr½CP Pž·’xξι‘-P½< ψ°Gx֏ΓηηιkeύPžΈώ uμΟAΚΒαΈ6=Ί~|j_Δb~ψKΠŒyΧAΟΰρΧν;RηφLο…*σb`κ)νό'\οCζζ›ΓρTΩΟFΛ$‚zΖiΏšŽΑHλ}•ΏΣΘZfZ(γμ χv;.˜;‡FΟcΎ‹$¬ο½hΝοuHΛΥ±!Α}E8WΟ”q Ιε†αf"sό•ΐQ§ύδ*ωζε|€›Ά>Εζώ ‰ƒλldpκ£λΝΨΠ|η―Yh ίΙαΩC.ΝTΤΓά™‡N%YŸxκiŸ„|zω§FχΗ«Τ@εUj^ξέ όs€ΣPeέΨ ψH(«1YΖ§ςΫ™΅Ϊa₯žVα‚Ήs¨€11lυΟΤρS”Ξd@ϋxξ=CPF^α³HpΖ‰‹p":x=κΤ[§`€•€όΡυŽ_Π|Αόδ@rd_‚Ζm\LDϋ2dξϊVtύs¨7>;δ³Z–ΠΚ*5ӁO#η²{IƎbg―ېωμ]ΡΉυΒρ₯eΏ}oΰ‚Ήs¨€1uΨ ·eΞY;Tο”‘εχ‘ΕT±oω¬ •σ€rV5S8‘ΣΣ¦μΌFήVγσV"κcͺ€[„κqe―@γW•‚yΜB½ο˜Ÿ€ŽƒΜhiΎKuοΣιH«ψ>ͺΰοGAF~[αž^ΐ#u•4ζ‘[ΥC½CP΅°>2c_ό Έψ3υϋCΦ»· λAzΛ†Ζήφ‘Σ¦μZǘ„«QΟ{s€•χΗ·²@m‚k̝C»Εʎ‡ Ξ§ςΤ>¨ώ-₯ΆU†ΞD¦σηχhjζώΟ©Ζ!/ς#ΠoψςpώιπYŽ,}g!}3ϊN―’s¦΅nΚΖs5Ύ‰„2hšΖ½­+JΫΰ‚Ήsh·e‡2•‡ύ?ΚhΊΦr.ۍ;ΧΚ»‘@ΎΫη„(Ν€/ŸGZσ5δ/w²ι ΉάΘƒΐːσBV f3uΦ#ωc*υVW’ ΈUξ…ΘΑΛ’S9Ε3 ύΦΟ›ΆΈ,Ne&‘ˆU Ȟώη8νΖG‘―…h^|WRΝ”½κU憍<Χ#!DΗεΗ IDAT½iy+ΓΉjύE4pκΎe!νβ–Ή‡ώ«~$”ΧG&Aט۟vӘ§=‘1—ΜvώΝ*H–"3ΧZ’?$λά’υ€G#A11lϋΓώH$4lͺΣΖ *οŠPž%a)Ϊ+£ύH / ϋΛQ'`Eψ,ˆφΣ‹‚›@΄οwd&"kˆurF’ίc8Ιχž€†2ƐDΣΞΩBδγΓ=£Cλ‡<ϋΒ3*ΡΥ§KX‹:œ#Ρ{”Χ«ΉΩ–Rκ4ΫΡΫρ Ϊσ‡θκ1ζr‚ωrδ9½i?‹ΒωeΘ#2λά‹$Ϊbήs&\³ΞΕ·ŒG 8τgDΙ„Π$‘7!μο‹"ΩχΉ7ΊoLH;>δ7–β…ώ Ϊ/ά§ύ_«PΗΒލι-,““Ÿ%θKo ζΩtτ¦‰¨γ=‘NΊ)4V—­­nGzZc>3|Ίλδ Ÿ9…ι[cМΛrΏS?₯Β}RΖq-ϋ2X(›©=½­χZ­íΖι\–’ΰ:γθέ…WZ… δΩNͺ!mΦΦ¬h΅R­¨w[)οE”χο ―μr‚ΩΜY 7= ψpFz3AIςtzΣ.φ_₯;γRχ₯ιjΩΥΥ_@Ξ₯όœο=Πx|―‡βt:ӘOB‹ΙΔ jμδWkΓjZWΊQo•V<Ρ,Cͺ±υ‘έY>΅p) {ƒC έΨ‚25 ΜΥ9…Τ«ΔΧΡRtOVIη8ν†iΜO·7αy΅j[•:#)5“Χ’e¦…ͺΣ^, Ÿt§ΐ|ZώCγ‚Ή2#ΠڰՏ’ΦΨβ8Nα4{.σ*Ίx{§ατΔ"εΜ³Ž8 -ύ˜‡C‘vν8D»ΕΛvœJτΔt)ΜεΩΕΉ­…o“8;8N'ΰΡΏœN’'¦KΉ`.Ο”χ,Η΄rŒγt 1;‚E:\K—ΟPqΑ\žΉuάσՏwœvΒ4ζVΝ­uœΌτD8NpΑ\‰kΡbκ΅p3Βq ™#ά Α|šχί &σ-ZτόF3ψb« Ρ`zb|Ω©Ξζ$Α ͺ}$Y•Λq:…w’χχš&<«•‚ωΒπi67η5!ΟmΠάκΙ?«Ψ ½«Y‘» ט+3ό`ŸAs#§“0ΉšΣβUΐ‰ .ˈκIκbp­λ4ƒG€G·Ί ΔB"w½)Ϋ©Ξ0ΰV*kΛ7·ͺpŽ3DvGοp5߈€Χο(ΰ2€Ε=‹bΝ_I©pœ…½Ÿό3l™ΩCΫP§α94€΄Utί[9Σβ0lΎΓEQš³€›Βώ‘ΐc©ςυŸBσͺŸΞ‰@ƒž Χο^ŸΚc\/Ffς§―,1ƒΑmΕαϊ©hE«ΐ}ΐ‡Γ=‡gΖfι]Q•Γ+δ πIΰ_t/―DίχŽVΔi^†*P–P~½0ŽΣ‰˜P«΄1Τ.˜Ώ…,NoBυη $€Σ‚y5ςF8χΌ8­‘Όπ3ΰ. ίXdzm8> £ΌŒ™ψpuͺ|g"ΑLxΞ(nqΆ#ΑwŽqajޏ"–νςŒ e™Ο@Bω ίa(ΒΥααϊ›Γο² Ey EY)OPΜώ΄ZX7²+ϊ~w·Ί Nϋp:Ω‚ω­,”γ ‘Ιθ=ž_%]-‚ΩVA;2:7*<#-˜gεΘo4š"3-:χ7ΰsaJT?W›…τ«½’ηΔγΛ£QΞXnjBBψ˜θ\Z=ˆ³€λSχώ”RΝ=-DϋQ¨Ι7₯ξ;˜ŸΜAy6₯ΣΩΚ ζ­ΡΉ{Ζ΅n`G|ŒΩIρU›‰VP{Ηi'ΚyeŸ„‘}ή |#unΏ2yn„Ϋ_’s+Ι6—g™^wFζλω(Ζυ2€‘Ύ4Js3πΊ°ΏπλϋuH ―!‰ύέOι’“;„sΏ«Pώ‘hΛ@ZxzSΗΟ›”Ιמ= αΈƒ?9pŸE‹#Fžg\ΥζφΆb΅¬f°:lε‹Π6Έ`Ώ™άβεΣΎ<ޚβ8N!Xμκ‘αc\ˆ–;΅Ο­hΜ5>Wm\zu•cΌFsπkΰΰΥ‘LΓ‘ δ›‘ή M£ωG8·?Ξ!qΖ|Eς‹Ÿ‘‡η²–S¬ΤΪ΅]B9βΟΆQΊ©hjΧκ(δΑΎγ³9ΣwφvύμΜ΅q;πύ°Ώ€RgΗιT‡mμ™=i³φY‚œ›βsΛΚδ7 ϋ]’s}”š’Λ1iΖg’Ζxƒγ[‘Πώ π'$ o&Μ7GiοDZΈρ.Λ­gεί;Uώ½¨έŒΊu,Ο~G…{ΦGζω됓ΨE”Z yΣΠ9»Ζ2v 1;e1OΟΗπ‰ξNwPt‘ΘSω δˆΤ| iΥxuz Η ρΤu©tKΡτ xsί†΄ΜΧP*˜g" ίΎίrδœv²‚mƒBιΪt°•ΐωΘΓϊνΘό|>r”;?Ηwˆ™Κ3ύ«P‡ώ4ΰd΄HΞnΐG€…{ΞDc Οϋ+π#’φ:§ ι}Pϋ”₯Εw=£1;΅σ&d^κκ…ΊžβοTwͺΥ+»yC/Dkη^‚Ό«ΣΞ_YΛͺ€<‘ŸDκ{ ~g*έΧBΉγY7#M>έxίCιί>ΰΣhώοjΰ‰TYFη"+A₯ιRιςψetΌ%pK(S<΅ιΔπW!Σσ,䍽@―‹ςΨY0ΜΩ-+ΟυP§&νTΦMŒCίwq΅„Nο±/>wΩι.~ήι΄ΰι&E^ΥyΗ—;#)uΆλFF‘χ΄«°€d‚Ύ“sVΥR8Nq43^v«Έ™~7Gšx·ΡίκB4˜žcvΑ\;«ΒvdΕTŽΣ9d9u#ίluȌV  ¬CγηΓΓ§[Ηέω«\cvΊ^Иξ 'ΐ\0׎ f§ΫΘ»…γ΄šž0g»`7e;έ†™²]cvΪטL\cvΊvcώ%š‚T“Ρ΄£- Κ―3(]%Κ:1;™Έ`vΊv6eΨ¨…r‹<œŽΦ•nVέ3QδΙMz^/೓Ι*4—Ξ³Σ-δqώΊŠ$2V3Ή-9T&GQΰ€Ρ<‚’“]-‘“טLΠΛΡG—ΏNϐǔέOmοϋ,ΰ»H¨ΞžGρ―γ6gZγ)ΚGΧJ›²g!mψbd–~…Ξ΄ΐ!3P8ΟSHVnΪE {ΕΝΨ8<765οŠ,b‡S‡η§5·ŸΏˆŽ―C«C9ΕΠ³S Q…wg§˜†ήη{+€©5$η,Ԉ~ ΝνP|ωOFiΞAΒν`$΄ώqΖ„ηΫ ”­ΡΉ½Ρo»QΞ|Κ܍~ΟέZ]FβseϊP…ί8u>Λ3{κ[Cδ8B£Ζ˜oC‹/ #Al‚yZ΄ασΐ΅h]γSBΊSͺδ; ­Ύτ"¦7’ψΪ•ΨiΘ13‘Ve؎D Kδaπc€9οGKLΌΞΝ‹žο 3ew΅Ζμ‚Ή2η?gp¨»,°ƒΠJ4Ÿ${WΗiW²LΩgk£Ο[ΡϊγρΉύͺδ{wκψ.΄¬γx΄ΖπH΄|£1ό­±\‰SΗΟ›TΉ§ŸΑk?|5φG ΑΊ΄J>1—›…γ#Sz‘Κβ:χא―Sžž0e»`Œ­s"₯γkY‚ωƒaϋ£FΚq f w8–€MΈ-•hŸ[Ρxp|ξοUςM7žYcΤYΨjΫ¬PŒΥڲ琩9ΝT4}jujαΘό$ϊ=v#Y―έ°g>[cήN6=αόε±²+σΤλί ψoοP3e›`ήi/"σ–γt됦8 ηΕhμw~”f r΄ϊW ωξ™:ή ™vsP=Ϊx(\ο ifΥVόA¬&Y£ΨΈ“±_PΗαJ4υ7ΰ"€±?VΓ³.C¦χ)¨½˜“Ί> }ίΩ5δι”Η5fC ΐ'’s¦1Ϋσ»ΓώM ΗrœN AF¦’qεm―Ζ©ΐ·Β΅•ΐωΘ£ϊνΘωλ|δ$vώŸ;xMxώFHHΟDZmμ°y&šcό‘πΜΏ"‹—΅‹Ϋ'Qyjδ•ΐK€γƒYš}P»Π΅ .4™žΠ˜]0WηJ΄ω+Pο›²έŒνt:ΛΒΆΘ±Πˁ‰h.οeΐ₯$‚ΰ‘κ2d™Ϊi΅ρΉζέ}2!o‡Ρήμ| -Ϋ,‹£€ΡΈ3HΈ›ΚΏΙ"4=jƒ½ΎΧ Ο»t(_Ζ)‘'³“3PΕ½*6l‹LKΠq:‘Ήθ.Κ{xπ΅‚ς*ŠCјpήY_~“#έο‘Os$π—œΟrςρ3τžΎ«ZΒNΖ5ζ|\ˆzΰ‡ 9–ρt)›υsjσθtœvΒ¬?«*¦κlFσ”7Ο™ώu¨S^Ž 'χ~dΗσξcπŒghτΔ³;εc>ꩁ<΄Ν”έOΥΗΝΨN'cώέ,˜ΎYCΪWUΉ~²’ ό;γϊŒžεδΓMΩN …L( ηυπ₯°}‚Α^ ŽΣI,CοςθVΔq*p)zOmuA‰›²σs'p rfyi8g~„{]:M―hΜNgΣ³ ζΪ°i™hχ°½²eqœ’XY|ΦβL§½ι‰1fΜ΅q-šΚ11ASAj Ίΰ8νF#΄εV{e_AιιΕ0Š`2ς?Ω"Ο t΅*§x\cvρ"ƒ+χPΎF“’'N³q3v}œŽ¦P>ŽΟDŽ`“[V’ξ§'4ζfxeCΛ«­Eƒφkќ_€ε$Α"4ψE’(DνΘeΐY¨1@A φFή™γp΅ύ±(ΠΔΤΉ α3–ͺbV οοψχ²ί¨Χ08œ ΣδΜW‘“ίm|q:‚ ( ΙήΡΉGνhΰ«-(S/ΰ‚Ή G‹‡ΧΓJ’ΥY#‘½Žd™ΊUHΈƒζ―AΒra8·š$’Ρ23ˆEϊi¬c@>γ‘MŒΕ! ϋP°‘‘°†ωΟPg¦Ÿ$βPzΩΙFπ"ŠžŽ^δt?ys?΅›‡gΗ χόϋΐi$uοPΰΣΘgc Ζq vbΜBCE£BϊuωŒB>ήΎΓ₯T"‡"€β\ΟA«gΕ‹Pˆ:α;†|οήόx'πBβ™ $lνžˆ*ΛzH(‚*œ>°|Ϊφ/ Λ‘p]‚4OΫ_Š: Sη…σK(ίφ£ο&΄G£Ζ4ΎfΏŸ][Ÿ$™]³ί;Ύ6 JΨ PqΑά{XΛZq(\μμŒΖ`BX‚ήρ―!«Σ$l―AαoΧEωςϊ(Š©ύ—T>_EΛŽ„ζ’ψΫ?«PΆι(Α)HྍI/FΑ‚Ζ’Ί0MμG!:­\ϋ’½ΊΦνHΐo„V΄rŠΕ5ζ‚°J5Υ@OcΒ €ΕG‚Ι΄ΦQ$Zε8τ}ϊHœ³ͺu Ρͺ"»ŒDh.O][N’­7š$Φ‚F/χ^ΰαgz•F1ίόO΄ΖΦjz6ΓQ¨ξνD©Cε¬(ν}ΐQ>ύHλ=Δzu •WˆκGcΑ‡DχΜE+A‹σδξz’1δ‡’<Ά$;¨ΘΌθΊ ζβqΉ Lp¨˜*›X8-(¦8N6EΖƒ€τ&Y‚ω €ΑΓ€·ηFηήό±BΎH?lέΧ" Σ:Λ/₯T0?˜ΚηY’°š[£z“z%•ΧŠήY–ff\{$lη"νύοHx μ§Γυ~²- +’λNρτ„Ζά ΰF™ΙœβXΆ.˜{“,Α|!Z&Ρ>·’Eβs•„$ڍ1@ζτΏF+·½:”a8jxΣΪPΦάκtΫ•~Vϊ8λή]B9βΟΆQYEfψ»P8ή‡‘9€ o‘·k΄•«W1ΑάΥ³ fΑμ¦μή$K0ΟGZ«}– m1>·Œϊ™‚4γ³Ql€5Θ”\«&4'”{—θ\_Θ« Νφ9ςΏY^ΜθοηοDšiΘ?;GήNνX‡Λ5ζ!b‚ΉSΆΣ\0χ6­XYκ4»`:šͺuZ£yp‰CΧR€%ί€Ζ›/. ‰&vϋŽΧ^/_ZΗwpςΡs3ψ―9’ΥqΚςτΝjuAœ–π>τ{ΜχΪ8 usZ;’R'4§xށήΥλZ]FΜιR1·/nΚξm<$g}\Lζ›#­ΏΝΉvGOhΜ.˜HLΩ.˜{ΜυσΝhF« ΡCψt©‚Κ]ͺύqΑάΫ΄Β+ΫqκΑ5ζ‚πιRνO—κmzΕ”=NΩ"ΟΎΨ²8υΰsAΈ)»ύqΉ·ιDΑ| HR §£u₯mQŠ3Ρb“ ,—ΣX\c.‹δӌg9υα‚Ή·Ι#˜―NlBYͺQoƒ<­^uytξΰŸΐΡC,“Σ<\c.ˆ₯a;Άb*§•Έ`ξmςζ~jг€οW ₯ŸGq±γ6gZγ©πμ;€Χgδσdv~…ΒœByž‚‚M  £D+Z-Gα>Œ–_xg(Ý©ό―Cλ2;kΜ±$lΗ5αYN}ψsoΣ(―μc‘ ‚–v|/πρθϊ—Q΄¬P¬κΫЊS[₯ς9­n΅9πv€ωώ 8ŸdU¨'PΐŸ/C«@]Lb±Ϋ—μΥ°nG‹QlTο—tšŠkΜα‚ΉύqΉ·i”WφmΐFϋ0Z8β“αΪ(΄`ΔηkQάιSBΊSRωά|iKKΙf2κ―GcΘ…gΫxς–H3O3/Ίξ΄?1„ ζφΗso“eΚ>½φy+πΤΉύͺδ{wκψ.€=ΆΟ½5Ί>€ΜΟ;₯ξϋWŽο0ΈiΕΧ'›FΧϋΙξx¬ˆ;νkΜα‚ΉχΠzm²‘ΌuŽZ½¨Ί ζή¦QΞ_SΡΈς%HΓ>ΝiΑη_AΪκΓh:ΦvΘΑ«s}Β3–"ω;‘SΨ<Τ~l‹Ζ¦ANhŸGfτΕQ>ϋ7Ρϊ:θδc΅Wλ…ΟΪΚɝr| ύ˜ηf\»–dΊΓEΐfαό¦ΐG7†γαΐg€Pγ±U¦}Sω™iψ δρωš6q₯ƒΌι†ŸιW C™{g&IUζλ·Ί›¦χͺFφe@6‘E― ’‚’‚Θΐ0"Š+h+ŠΧqΧ;Έ#ЍΈ£β  ΆŠΚQΠΗΡaWDegdš₯z©ήθϋΗο|7NFEfεKf~οσδ‘‘'#NFœ<ΏσεϋφL₯yZ9Ž*‰Π,Τ£ίΏ₯ς±8:_·λΏ I8ΛΠxΪ=α7l₯Ω4œΛΐ &ΏGΟ \BνŒκ©X‚z½ΞBeψ1Τ[Ή3Q½π —K}&γό;’Ia«BήC’lηΊ yυŠΎs΅k–g‡Άπ»œςGΟ|NΩιeN@7ρ©γ[£₯ 6ᣋIDν6τ'·–ΣΑQΊ?GΗBέZφ½SΫHwV8Ά-γ°ο-C“W@ ϋξ£$"~,πέpώ $ŠΧ„Χ©|,Ξι·nƒ*)»Η£Κi#ZχiLΞε V–²ΊzΫ₯ž –ΙΡΐΝ$bύzΰͺς²γ΄Ι2T^‡ΛΞH/σZtΏ—:ώ!ωXƒοο₯ϋR86Œ,Ώ΄¨[3 lŽ]Ž]ΣbΊ]I6N5M η qš IΖκ6C]lΠxŒ9-Μέώ­’4 βͺΫ0Ή΅iΏcgΠΈ=ϋ]»xΞ* 3hΉΦva°OyYqΪδaT^·˜*a―RΔδ―ρ°›:ή¬μν0l—# 6ύΉρk’Y–w…νV-¦Ϋ/Κγy$ε“Γ±§₯|dŒξ1$¦­νίz3šΔ3 uu?\ŠΖπΡΎάuκΰ‹Ύ²Ϋε‹ΐύa1ϊ8½EίO+b²ΝάL ³YžChŒηγMœ+kiEρδ›Τ‘Υh”.N6ۘΘ—nόΦε¨ρπV4KuO4wΰ3£ο>Žzfΰa<„ω.žΛqbϊ~ΙTΦQ=a~yι-«8u1 ‘Φ·/¦v­δkΒv9<€©ΧRΆΛυΡώ­ΐ’Χωh²Χυ$ϊ’‚2BβI¨^Aέώ­σΡ3ώ Ÿή†dLmTZŸ™=Έδ5+Ϋqς ο-ζ"»²³fН@²fρ-Θίνzd~ ΙmΐwBšw‡χw!αΫ@~ρToΎφ?Ζw/A"m³ο ™Τφ²ο›Q·ρsΓq[ή>μ_C}χέώ­Ϋ‘e%7£FΠε!ί †EŒ ²O<©+Ϋι}ϊήb.³+4›x?δ3χεΘωό $FΏ@H@KώΌΨΝzΎ­‰όM^G ‡?‡λ>ˆϋQθΈΛCš·…4oB3Ÿˆ˜Γ‚n/FΏ»λζo}ψQΘ»-C1Β_‹MC…|#IkΤ¬‚savzΎ·˜‹`{Τέ{οT ˜ƒžΡTžœœώc&zφ.ΚN―`KCχ+;#yQζ³SΜ‚OΟΤvϊ_vzΎ0Uζr)§:Έ0.>Ύμτ}aͺa^‹&ΝΔgόVζΑΕ…Ωι5άbξff;εγΒ<Έ˜0»Ÿt§Wp‹ΉΛΧΩΨ0•S.Μƒ‹[ΜN―αs—πεΥΖ…ypρΙ_N―αsB7Π£UζΑΕ-f§Χθ{#EσL$Ξλhή³S,.Μƒ‹ ³Σkτ½ƒ‘’„ά£T•1ao˜ΚιG|ς—ΣkΈΕά\˜«[Μƒ‹[ΜN―αspa>.Μƒ‹Oώrz ·˜»€΅jΦ7L唉yeσμΑΓ-f§Χp‹Ή ψΏϊlΆ•š § ͺΌ”q.š8κ81}ΏŽΉ™ή•]}žΆ.ΜƒG3]Ω󁅨Wokϋ#¨1žεεovt½˜9$ ψ,&€e(&ω Τϋ6†&¬­F==kΓ±υ!Ν†πuΎ»6|ou8Ο*TGΩwκχλ˜]˜p‹y1A|ŠΣ%ΌeU€λH–[. Η6/θΪ­ˆΊ½·ΟV†ο/η ΫεαΈ5¬1a‹ͺ³p&p!πύŒΟ§Γa=»y¨ YΓl“pl(€!|gκ%™IΈ›†”έΓΦ-ζpa>.Μƒ‹ Ηήα•Ε*T6FSΫ¬c£θΏžΫΫ,ά4&pΖ©ΐ‡PύτΰZTq[%=Uΰ³Peo· €Uς I„’ήwMζ‡4φ] ϋo…έ£΄Ψ[γ ‘Ψ―D‚΄ΨΗχ½Sq|*η—Ÿ ŸmJr_‹bpYΧ+f’μGKΝ…Sη PŞ%²Qμwΰ½aπ ΰ$"τpAωh$κ&nΦ °χ&d&zΣΡ½ΕΟ¬>Ak˜Ξ"»»Ώj Ϋg·ήHž™5¬‘` 7kl€z&&’΄ΦX³†Iά YŽΚε]ϋ5Γ…Ω·˜™΅ΐ—ΚΞDΔ©¦}€·S|MTŠn¬šΘ›EokXc!{λ2^€Φsn8ΐΤ‚·‘Δβ6KΫΔφDΰE©ό~8ƒΔΒwz„F-‘KΛΈS—GΡ3Z8UBΗΙ‘‘r˜~­ Ϋ:sŠc/$ΠρsوΔxησε΄ΙQθ!ώ€μŒ8uΉ=#ƒ9e1ψΩΒ<œ_^Φ4Ω«ή³Ή_ΦΦsΌ=Ό•§.Χ‘g΄oΩq–§~Εo―)-wƒΝΎΘ:nτl^_Z8=ΈsΛΈS—KΡ3zqΩq’­H&4zέC±3ρK?— h|zΫ²2Ψoτ“KN[wΉ5ΩΞ œϊΨ—'4Lε8ωπY’΅―Ψψ@Ξyqjy.“'|₯™†&ž}9μ EΞΚή8„dY€mm‘-°­Ν0΄­-/ˆΧƎΨTόΡ°]ΆΆ?šzoϋΛHf..C³ ³Φdφρ=²ϋΙ½πJ0q IDAT΅Ζ“ ³S4ΟŽk!ύ‰ΐ€Ώζ“'Εi-€=8Œ>^_\E³‰ΐα•ζ²oYζσ‘ΥΌξΝ4^‰Δz%κ΅αšΆ€`9‰[@σ΄œDδ³’†$¨]β`K' v!Ώ­—„€΅ήwZ‘ˆΗ‰ω­Mš‰[Ό$Ÿμ8G’†S³L‘I€Θ%GBΒ|š6 ‰¦- OoΝEmmMmMxmkλ m›Ζ¬ξ‘°΅Χό&Ž›(šίίΉασωΘςο5μžAr?!Ήχ·QpΎg§6ΎγΛϊŠα-¦BuΌ‡νŸβή<σ‘H/@ΦΈ ·Y³Γ$nη…ύa‘Ε1v”‹£9‡Z7…±K½Ψέaμe'φ’c Η©:'Zw)ΐαΈ_„"xπ;’ή½f88)Ÿμ8Žγ8E0Έ‘©gdΫλβr²9°|ŠζŸΝ(ή›α8ŽΣΐΤλd'ΠΌέλœΓΙ‡™4ίpzIytΗqrΰ¦ψ?]Zξ›½ΠPZ£g³”d"ͺγ8ŽΣl†*χzƒ$«œβω…ωεeΝqΗΙ‹7PΏβoe­³Σ}¦Ώ%ϋΩόšμκ8ŽγτCΐ•Lψ―ΒWT]Π*τσ9ΎΜL9Žγ8ω²'šδϋaή―Τ91ο V”o₯Žγ8N‰ΔKtΎYr^œZ†€%$ΟηΥεfΗqΗ)‚9hπyΚ©{£g³wγλ8Ž30<Ž,2―ψ«Η¦θΩΈλMΗqœb ͺό7™*‘S «‘S˜Vάu:Mβ­QΗqͺˆZρŠΏšŒ’ρζωeg€qav§ŠXζjbArάιKΈ0;ŽSE\˜« sŽΈ0;ŽSE\˜« ³weη€ ³γ8UΔ…ΉΪΈΕœ#.̎γTζjγœ#.̎γT‘zΒlξΏΆ^‡•ΓhΨ¦…ykόuŒί0ΗqΚdoΰ"ΰΩ©γYΒ<ΈψŠύϋAΰ؜σηΐΐkRΗ–‡mZ˜Οώ| ˜‹?#ΗqœžγΘ‘ΘχRΗο ΗwŠŽ½<»y{cωtΆƁ;¨m$€žΕIΡ±aδf=πnό΅[̎γ”ΙY¨?Ψ2:žε`ΔΒ ώ89ΈX”sώ? ΗDΗ³fe…άuފΒCϊ3rΗιQ.BΦΧϋ£c·†c»‡χΫ#'˜ΏAηHτ,ώDϋEαΨ7’t—„coοO.(Žγ8N—9UθχXΘ ǞޟLv—·“?CΐΝθώŽνή0ΌAΡ¦ΦSΫσα8Žγτ C$²Uό&{£!·{ΒϋηŸ=8έ«ΓϋέΒϋŸ‡χ‹ΒϋΛ Ο™γ8Ž“ οCϋΟΒϋΓϋ§‡…ύ;IΊRb™܍žΓΐa·ασŸ‡χo*%wŽγ8NΧY¬BΛ€žόUτOΞϋ(-wΐ;ΠsΈ…γœ@ ¨Έ{‹rη8ŽγtΕ¨²p]ΨΙœmKΛ™0XŠžΛΣ€1΄¬ναΨeεeΝqΗΙƒύQ0pmΨjΨώ€Δ|9 '‘ηρΰ>ΰΰpμψίsΗqz”λQ%o“Αl\σΘ23εό6V ₯k·λP7φ:ΰ %ζΛqΗΙ‰γ‘/ Ϋ δβqF£/9…ς’ηbΟθRsδ8ŽγδΖ a"zZjŽœ4Ϋ#+yΙ3ςnμ.βKΗ©_ήφ'P€‹‡ΡΜνω(€Ε<@aΥcγH,–…ν*δr-κz]&‘™%ξtΖ7Iό`?Ž|j?ZB>6EΉ‘°ƒ|vΟ ϋVNΜqΝT@“ΧΦ£ό― ΗV†χλPμ؈Κx~?%Α…ΩqΪγ τg7ŸΑΡώF’θ;έΪ―2›  p0Eš‰Dtͺ4§£ sF8nkϋ#Ρϋ…ΐv9ζΧ*έzΒ ϋ:τ VΏώšcΎκρI’eHnΡ"±¨¬@Β H:},L&Bν°ςΞ6\ΠΔwFPω˜žρœ°oB:=$ε(-ΈsΓΎ₯++^·5πΦ ²Ι½Ά²Χ Yχ ­>ψeϊδ>nγ8νq4²Š’ž`ΗτNφ‡P%hΒ9U‚³‘ΰΞCl•αΒ°M‡ύλ6λPε6†*Ύ1$(c!οfΝX>G57δyST‘ΗŸΟ ―…-ζe)π$’ΚΆ(>œγωcλ°!·τ‘ _cΘUκT"›ΦYΆγ¨LŒ!\I`Ϊ2keΪΚ<$εΫΚ?α7M#±ΞAε¨lžάtavœφ°ξΠ"QοMΰŒΈς·nWHώμX–TXž„΄ρΉͺ4Φ*j³¬‹ΠDs”€‚­UΩ•$βkΗ7’KrΘ―UΊ„{^κσθΝ)^˜oΫ[o“”Λ3m³ή H*ρη­ph“ι–‘2’虏“4ΈΖ35ά’IίΫψ?•›©Η{‘±>ί…ΩqΪc™Οt=ϋ³CmEοΗ•mάΊ[Φν ΅•„u»YΧh#±έΖΦTό=§σ ―Ρ©FΌUΖeΤ™φμώœ–Γω³Δ:λ˜5,ΣΗLϊ“ΫC1·…λρͺ^Α…yπ¨‚ΕμυCQwŒΉθBv *\ζξ/½5‡διmΑ#¦Šf²)‰s| %63ul>r>>ΦΞ=6χ‡q°sId“ΨωΌ9˜έ$Ϊ=„Δ»O|/—j#ƒŒ[0ƒG™FΌ+»?©ŒΕό‘Ώo’²:ڏ·iQ‡ΔOp£πaybβjωZ‰ξ»΅’,˜AμΓx^τύΌƒά <…βσχ2VQΊΕ<8xWΆΣmκŽ1YΘμZs¨Ζ±0΅5gι&ZΆ^νD@iΔTΡLΦ2Y\Χ5y¬x§‰Δ~;Τ1°ί*°peq`‚¬σΔAvvo#ŸƒŠweξ`Δι6•°˜νZλ€·΄yλ"Ά­ …Ι‹ΓεYwoeY8fβY5β±€GsΌΞ…ΐKνqankΨ¬m˜Κι'ͺ0ΖμΒά_TbŒΩΖfΪ± ;υh(έαή°έΎΤ\τf=•1ήθ”C™Βl±Ώ‡¦rzJ,—²έ‰0;έεΎ°έΤ\τf)oΪ0•ΣO”)Μu»<ž¦F,Ž© su°³.0­αΒΊΨx1π+΄L³SfN€ςΈ0;™Έ0·GΏσIΐΝh•ΓzT.v‰XΧσΉΐ'‘ε3ήΗΞy†ο£₯~₯ωYΔΣ€χ„k­AΛ/φlγ7εE™žΏzΝb6C>)ζG„cΣ€cΓώtΰDΰ―$Ύ"~Κι-ΐ$KoŸDb‘/κϊ/Ι‡ΊΒ\Ζ:fζκ`^Ε.5½G/σ¬hΏžuράπΩΥθyπ2ΰiΐΤΞyZS?ΐ~ΐkΓώ‡ΓηgΗ„ύΗ€ .Μf8xsΈήΰŸ€žάΥδyςΔκ­ι SεC―ZΜ1Y΄o―ϋ·›#kϊΘΊΎ"•ώT^Žώƒ7Ϋ c r/ ½SŸΥζ"Ω΅fn*3N ’g²εT ^…ξΫΛΞHŠτΨ^Φ+cήΖ<ΈLC-Ω 4W: UζfΨ›Dί‹Όΐ½’ΝsΕ]qΧ‘{σœ&Ύ7nΎ½Υ™πT‹Ή*χ’άνΏ•ƒaΰπŒΟ,·FΛ܌ΟͺŽΟΚv&αέΨνΣΒόGΛχ4vΪξxξΐΓώ§Βώ 4ηƒύvΰ[aσhlρ$7Οj3OέΖ…Ή»ά|'μΏ;ΌΏ Ψ•Λ“š<-oφ― ηθ¬ώ˜T»0.ލέ>ύ Μ·’e%w‘Y°‡οκΰ|oBc…λ€ηΏ~ΠδwO@VϋΝΘJ>YGη—w§nβ]ΩέηxΰύHPwB󐦹ω ίCsFΡ’©ύιL%feŠώlUω£ :Ϋ‘ηqίT I<έ»?M•Πιވžω7KΈφΏQ­κNw8=Χ₯?p‹yp±μΥ S9YτƒΕμ΄F™‘>ϋΥbt|ŒΩ™„we· σΰαcΜN·qav&ΡΙ䯝€g »–›ήΒ…yππ1f§ΫTB˜{9μc»‘κšύ^‘π¬υέlWφΐ;ΠdmΡ’˜ΡςΥ Έ0n1;έ¦Βάm‹ω?‘˜έΛδί±9š:Aβ0Α©₯‹y4SχJΰ”°= Έ*ί¬UζΑΓ-f§ΫTΚσW·„ωΫhYΕφ(Ζη’θ³W“Xθίξΰ3‘ΐ?‰†ΖΙ{ŠzΒΌrΥx š}όm΄¬ζο…ε¬ϊΈ0e ³ύG½Όυ}ιωλΰkΐ<ΰuΤ σλΒφ&ΰh±ϊ1HΔη‘.ΨBέ²w†΄φBλβξGkμ–»…sμ…Δ/ ι›9gΜG€·£Py?ފœόΧc²VGŽώΧ ΅‘Dώ;%ξʎΕψ9Θ•ήΐKΒ~™Μώƒζ¬…aŠλš@ez:ύΥ`s²©‚0Οj˜Κι5*a1›οέnUb«Πϊ―7"Qyk8Ά‰t³–[ o—-VVΞω2$#Η―BεθηΟ;žυ(Ž~σςSό3δo=r1Bσqug}Χx;‘5πUe&ƒ»δl•yα5·Αϋ $χiM‹ϋ«IΔ©ή~ήTA˜}ŒΉ»οbΰ“hΨ±hΌ’nμVΓΫ5Z¬ΥsΖ4Σ-\D(β Τ6’ΣΓKVAΏ%ξ1‹o\†Aχ1ξ!Ω¬ωμwkˆ.Gχf²PΧ rΉ’ΔB] 4ίX„»Y§Ω}]Hς7ΛήΚΧί iξEFoY‘Βlέw ¦jοŸ@άαΨR’€Ϋ­†·k&6h«η|²’ ±θ‘6\^L‘πΜbžŽ¬ζΣ€Ο"ς' q>$ΌξG–ώΧρΩΩ† σ·Pdœn‹ΆUφ§Ž+Q«”ν3«|mΜw“…6~ŸG―Fٌ“4ςX_Ώ0—i1Ο@Ρfγw“Έcε̈{. Άa`βd4jŒ’XίΛΒΦφΧ η[άUΒτ­•²χ$Μ₯±Ψ¨›r8χεαάφϊ|τΩ“PΛhΈ …·{$Jϋͺ‘“τg­žs%ͺ ο‰\Τΰό gω–6…7Ζ˜;επpŸΧω|+ΤmvG” ΐ―(―‚ͺ7‘{²OΩq aoτΌo.ιϊkΓυ}ΙTp1z¦“ζτι`$/‹&―U^νw;Ό];ηό1š΄1 ΅ϊl6y#ς…7Υ,S³’wGΏο$Μ‡ όߎZ|ƒŠ΅r} ‹S6†λε­°FΦΊ†©rf Λ Ίq¬/DΟ£ΩΈ§PkE?Μ`/ίψΊ”§ž‰žχ΅S%Μ‰‡Βυ·*ιϊNχω5z¦ΟOP΄Ε<,ζfΧΕ:ωΡΘbή­Ύ9Ky{8[ΡΟbpΧο‚{4Zυ-ίmάΙHQΧσW‘ΒΌ‘dΩD·P8­3UWφ'W³gφŒ>ΫHΆw³AΒ…y°° LeΝDwaξ?¬ξ˜4+»Ha†dν[™SνΡH˜οEξEA3άoeςΪμA§—Η˜‚άΩvš¦Κt;e[ΜeŽ1ηYΆDuŒ-s]Œάu -ΜKΓvΛ‚―λL¦Yƒ»‡WYckU₯—-ζ+k’χ—_ž"M‘,&Y °υΞ|šΦD©όgέΓ-ζ|ψςqox Zu2Q‰ xβΪ’ΰλ:“±u̍ΚΐϊӜ@­λ>§ya>MςψzΎΩi‰―t)Mž\‚Ρl‚†SNGχϊ½M~ΏΫω/ΫbnV˜«Xήκ1ŒV·» :5Ζϊ™Κte»Ε\Μbη₯lZgw:pi!9κ-š Ε7›Δ«T3,A•κΉΘ!Ν£hΒ]ό_ |y©[‹Dμ…©σόYx£h-όŽα³Έkr1pZξgVκLξΎlζšKΕy&ϊ―?ˆ|‰·3ΩsψZ.xr$tT yIηͺΌ-&ϋ>&ΜU·˜[-os“œ•Θp:Ε8§Αwnd²/…σRί iξ@™[˜ΌDτ(TΎ˜:ώSj1υ+•˜ό.ΜU’QWφt8γ2τ§u&“gWφ›ΡZυνΠμχWSλ“ϋ“(XΛžŠ"œύxbψ|p!z†OφG‚”ε1ir2s:ͺL‡ ¦™κšΖ[ϋmΉ·QEνX$z›Χϋρu'©ΘšΝKšFy[Dγϋ`]ΩU·˜[ε³Θ7ΑQhιίΘo§œŒžΟ»ΠΔΡ“Γ—GižܐρέλG¬VΛH―Q‹Ω»²«C#a>y£yZ2uІε$δ)ΜW£€,Θ‘ΛgIΊpgο>„z4ώ†*ΏΫIœάl‰,§Ÿ‘±»ΫΒωl―UšΉ¦±Y\•tͺψ‡Ρ|…υ4Ηtνν8ΤEΫJ^L•·FτJWv+ΜAΐχ#·‘¨uYΡΤZa6IΌŸw#'K_Χ3v$;6ΑΡηύLe,fσΡ[₯pqƒŠUŒYNω―DΓφΡ뒌tƒL½YΩG{Ž,…ψΨASœϋO©χ7"λy ¦°)²ό sΫjKΪξFΟλ†°};ΩQК₯™kikΫb—£^€©B „ξΥΊpkQ―A+yI3UήQUaξ€Ό=u{Η;grΧr«μκψ΄«δ“Qc6ΩαNWGŸχ+3P£sΑ4ŠžόUΧtw 'bα΄N=‹ω jCTž,ΰs£cwOqξtc)kΜ0+ΑD΄=y«ϊg4‰κΣΘ:μdv}£k2΄cάΌ5 ο%Ϋ΅ήΆfς’¦“ΌUuVv'ε­]GOYC"q=bχt ½t֎=œρYΏΠP ‹Ά˜+αΤš_.εdSO˜—’ΚΘ^+ΡD£ψΨTѝž“zκή[ό³―₯v&λPHσ—ΤχCΥ3QΧν+λ\oh­\³[¬BχκVjΕ0ΟΌ4ΊU΅˜;)ow‘ίΌtlSΗ{_Κδρίέ£ύΏ’ϋ4)8CŠ?’±δ4{£²~Ηίοeκvcƒ σ γΒάΝΞΚn‡ΠΈς.ΐΛΠxέ—’랎f‰Ί Ov [PΕφ1`_δζ``WTafq7ͺœwBnZœšΉf³ŠόŒ·—½›yIΣθ>TΕbξfχξ8Šχώ4«}7΄"`{– s[" y'΅Γγ¨ό~xν§’ΈοοŒ]ŽΒi¦=E±ΛκαθZΜEWΚΦ%WjόIpaξ”<'ƒΦUNg‘3ΐG‘hœb3ί„Ζο Ÿ!+ω­ασϋΡΊήzK`Ύ쇬κ9ΐ“3LuΝfΩY·Ysš₯[yI“ul\Ίl‹ΩŒ™Nξ['"Ι£2ύ $Ό†Ώ†D· ϋqZžs2²¬ί†Βπ@s'>₯ΉέίcP˜[P}t šμΧΟ4΄˜‹ζ ¨%φΎ²3β0=‹±²3£,Bχ/r΄S– Ζ©6‘ιE%]΄pύsΎΞ4Τ…άihάf9­U·ρξΧWtν2y2zž™Γ/n1.S9qΣΛ.9Φ){s^uηSPWσ5Θr~/š©~~£/u‘ ΡΠΑΆ¨gg­7οwκϊΙ†ςfe»0—wewF/±pZ§lΟ_y՝Ӏ ρεuhBΦσHΦΑ£ύΕ^·Lve—e1ϋδ―ςyu₯Μ@­Τ©–š8΅δe17λπΒ)–²-ζΌ&Ξވ&`9ΕRΙεRn1W_Λά>yΞΚvͺGΩ³²½ξμ/|Ή”SοΞnc,Μ±Ι#%]ί…ΉΏ¨”Εμ“Ώͺ… sϋΈ0s‘ΕΌš©Γδ… sσ€#‹uΒ–hΩΧαύb£S*i1{αͺΝΔdv²qaΜZ^Ϊ0UΎτ³Qs pΡ-D³Μ»‘‡‘κζδπ§Σ‰•²˜½+»ZΈΕά>>+{p0a.Σws³FΝω(ͺSΏΡJŒι―Pλ+Ό]†‘Ώ‚Ψ1ϝΘρΟρž»αr©²Ί²«"Μ η …ΐ?‘Θ5;“¬ν›W^Φ Α"LΉ0·Ž[ΜƒC/ σlZ±!ΰ=(δγZ΄–ψ³Ρη3‘·„Ο―Gξ;c– kσLΤ«π r™Ι8 ψ=š<7Š’νˆΊ†@M, Υαœ_ Ÿ?‚Ό€’\’“=ό”ΙqΈΣ]ΩSε―^Žer΄­Ÿ―₯3>Ο²–KHg?‡$“³IZ›’Μ„œ‰Ζy@.ιL0gσΓώ4»CΘ₯‘±0Ϊ‘΅¨*γθA>ˆκaϋ*¬vμ!Šš5LΈŠWΌφτΎέkζΦρYΩƒC„9/£ζΘυϋ€DΏυΡηŸD޸ތŠόπ δΉ*ŽZυΰMΘηΘ{ΧοQζyΘ‘ΘΙΐQ=Ώ?ŠR΅ω%Ώ…υŒ9Ή•=δχΟFžρnAšπaΪτιdG½j&υςπο(ΚYšλΛΝi2 ΥΉ“B>Ζ…­•ύ\ΓTΕ±‚dœu%ΙMC’΅ ~³€§b΅b½”€ŸOrΏλν/ YΊοΗοwƒ1Κ[›ΩΛΈΕ<8Ψxb™Βœ‡oε9HO$ι½Y€vΝw’xή‡cο^Ά±ˆ-Ύφo.CkςŒξίlΰg$c΅·5‘Ώ"ρ‘m ’ο§,Bυψž41Ω(υΨ5F<}ή0Ϋ²»Μ $E σ)¨΄†€€­&―5$"±–$σλI|:?ŽD$ͺ+ΒώF’ΰλH$Ρh­9Ә…Z‘Ϋ Ά :ΏexmmGΒ++@,'i%ΦۏoΦώy¨»Ζi~Ž€γ qXΦR)¨ίυωqd5ΣP ξΟGΗ~“qΞ=0\Qηš;‡λώ6:6Ί‘χL₯ύ[κύΓΘΝ&Θ²ΎYŸΏ Χ»υB6"KhχB±ΕŸ…ž‹υ ώSτΝδ―³Ιξ]}ή.¦g™Γ₯E σO˜…€κ¬A­Ό{§JˆΊVΆCΎfmk-έΨ"―·[πe6‡φ IDATυφcΡuΚΓώ”£ S9ύ€ ©•΅T κ σΤϊ΅>YΌρδ§»Ι¦Ω!½,C&},«j={hlψ™¨Ρπ:$‡Χ6ΈnZ‡P7ϊ/ΓΉξΧ]ΓΤγκςWG€Ν2ŽΫ±NzPΜΈ¬„0χ;«PM3έ4NoγΒ<8X―άό†©ς₯ήr©₯Τ.γZ‰,ΡFΦ£ρWdύLv¬ξ»Βυ$©Σ†PΨΞ%MεΊ–λΒλγh9Σ+‘0―£9οƒΫ!Λψ4’ŸO‘;‘0³ςπGN4Νή¨LάΡΑυZΜEΟΚvœ~Α„yYΓTN?`Cd JΜC> ΖQœοSΡςŸ]Pu}ŸŽ^œήΒuφFλχEέΗ»’4ξF“ΑvBέΣυDϊ!Τ>"Όί ΝΆξFbV.G~ΔΣΟύΉΐ―θlΛ„ynΦ‡.̎Σn1f17L•/y9gϊšyύ!$”!«Τψ(κ?ψπldEήΣΒ5ΖPΧσ%HΟFkmΒΩWP#ΰΤ=Ό[σ¬^fiίό8‹ξL^ΝΚΓΥhlϊ˜(݌πώ¬―Χ°+Ϋqœφx;;³μŒ8Ήσjτ¬Pb,œSΕr4p3ΙxόλΡR«NΩ=Ο»²>τ1fΗi·˜λΚ.ΛbžΊVΧγ?‹ζBΤ½½-²‡ΠšθNρΙ_Ž“6SwyΓTN?`]Ωe1{Œrωb΄ΏΈKητΙ_Ž“n1e[Μ.ΜύΗγhL{6“έ\˜§=|VφΰPaJŒ§;ԝ™νΒμ8νασΰPφ¬μ~ω8ΘΤgφ1fΗiσθΦκσpx-ˆ^ζΈbšά³ŒΔυ¬Ή¦]Χ:Ε²Ν Œ™’'`έ•mApζ’FJZŽΚδͺΤΎΣuΗ™]˜§=lςΧΑh¦‰μ‰π¦xdςiZf ΝΞ5Χ¬£$>γΧ‘ŠΡ|Ξ― ΗΜ₯λ²°]N"ό±_yKg€Ψ/ύ `e¦“Lτ²θw«Γώ|ŠŸπgΒ<‹dM­Ή±ˆ|q€½f„Υ~λ¬pŽψϋ²‚€ό­@ei •₯ΥΡώš°χΗPd9I9₯6vB•±ϋGA΄ΐCqΔΔ’Ζ½ ³γt ‹6vj ί1\Ž*¬•ak-ηTΩ“ό±νΟlaβ8„gX—½5 Lόγ@2ΕΦPˆ̘ψ£ΚΦΤΨ½1Q‰C½6LHξE§ί™ŠΗi-Φq·0ΏΤ;?*ΰzΦθK?Ηtp a$κsΒώ,t/­!š+PΉYς΄6δΙΚγ²plIΣ Tή64>¬|ΔΟ?K@­œX(/l ŸΈŒ΅ΚZ2†Γ\˜§=ΞB³ μebkΌ2ϊl,σL­aΚͺ$FH¬«P¬™‡~U&ό H*€ΈR±ŠΙ,΄¦Άύˆ5,Lˆ iˆlΎA9‘Œ‚S<‰Ι $³$γƏ kΊρCτ} ž“Υΐꔨ šH[Yœφη§φη…ύα;³HD*·›Fηƒ$FvΥ°ηχ6Ω½ŽŸƒ=£Ÿ‘d€Ωθ"Žγ .Y] ΊP­A` …ΨΚ¨'ώv ŽΈλ¬μΈ²3k.Άββ°±VρΕ•a,²&b>vί[Δ‚>•!λžM­ˆ[cΥ“Ε2n„Y™‰Λž5Φ¬œΔεΝ>qyrΗqΗqΗqΗqΗqœAΰτlŸ"”TIENDB`‚python-gaphas-5.1.2/docs/images/connections.png000066400000000000000000000275041512665300000215340ustar00rootroot00000000000000‰PNG  IHDR¨΅ k1bKGD ½§“ IDATxœνy˜$E•ΐ=gχ\=Γ1Γpί ‚Κ"’Β*" Χ¨¨θ*¬’βκz²^ˆ«Έβ"2€ ’Β‚Η’ (‚ ’’  7Κ9tχ\=GΟτώρβmΌŠΞ¬««*³ͺίοϋςΛ¬ΜΘ¬ΘΜ—οΕ‹xŽγ8Žγ8Žγ8Žγ8Žγ8Žγ8ŽΣZϊŠΞ@Ι¦ €ιΐ|`0˜ Μfs€ΩΐΠΆη„csCΪyαάωαځΥΐ*`=°XΆ‡Q`0φ­FΒΆž7Φ¦ϋvΗ)yκ»ΐ‘ˆ²Q γˆRέDT–«Ε»Ψ@T²λΒΆ*Ϊ !ΝX8wSΈΦfD ‡Pί, ­ΖBUϊ‹ΒZ HH7=œΡθ¨qΙϊ½NΩΡ禆νλΐGŠΜγ8N»Θ3PΫv2#%‘–^‹†Z†X½%5Θ½ͺyˆ!]€x]ύˆ‘Tγ:Άη"†Έ?¬Υΐ¦l<Ψ’»wΗ)3rφ«αΪ x„θ…΄ͺΚK=œΤ‹Q―Dc‘Ζΐ*}υμΤ€¨‘PΟ ’ΡQ£’Ζ’‡8Ξ);Ӑw1\ μ‚<_Ηqœž#Ο@Ν λG%>”“Ξι,›‰οceΨ7§Έμ8Žγ΄i9ϋΥ@y£|yYΦξA9ŽΣ“δ(υ¬6v*#NΓΈr§§©e άƒ*/n Ηιiά@u/kΓΪΫ ΗιI² Te7ŽDΏ9εΔ=(Ηqzš,ε݁(Ηqzš,ε݁(ΗqzšjΚ=¨rγmPŽγτ4n Ί—Ρ°(4Žγ8mΒΫ Ί5L£US9Žγt)ήΥ½hΥήΪͺ©ΗqΊ―βλ^48bMΥTŽγ8]ЍξE ”{PŽγτ$ήΥ½hŸ{PŽγτ$ήΥ½Έε8NOγU|έ‹·A9ŽΣΣΈκ^ά@9ŽΣΣTkƒς*Ύ‰ά‚ ’»¬ΰ|€‡™;ŽΣγ4γAΝήό™v| πgΰ³ΐ­Ξ`œ‰‘ۊΞH άƒr§§™Qe_–Z \ μmφmφ Λ)‡wΡ.ώ1κe˜†Δƒ$Η™rόβAό8γΨeαΨ8πe`iΨΏ π–p.Θ|R'·λΰJΰΩΙυ΄ΚμλΐΗ€‡€‘π{~ι¦oιΧΓ!Ο{'iήόQg7™ϋ³Λ1I>–™λ΅ϊ^_\ς> άξaIr½ΗΓυΆ X¦‹Β²ΨΥ,OΘHίμΦΟφΛnΘ―γ8]Μ Εχƒd6ΐζpμΊΧXFTξ·•ιπ<“ξ³€ΪPΟϋxιΎφm~hΞF&ˆaΥs#³Χη‡λ#Ζα†°Ό0ΙΗ²6έλRΔΘι3Ύ ρJ7O€’ѐξΐ)ΐ©ΐϋ˜Θ–ΐΕfΉ1 WίΘHΏΈΛ,ΛΓ==ܜ‘~&t]ώΪ`ϊ3oŽm6ωx δν†œϋύnΈΧogŸBžΝ±ιϋ#Ϋ‡°>IeΖqœρD!\–μ.Q‘|ΈΚω{št§‡}ƒˆ'7UΪCΐΦaίOΒΎL·;Ρ€Ύ2μ›Ž΄_J\ΜιΆvΫΥΪ RΥκ{=˜h·1η.₯rZ>svy #ΟK3UKΏm•τYd ΡpNΩ₯J~ξΝHΏS•τχe€ί.[c‘‘ΞqœΣHT_Χ|šΩΎ0¬GζΔδΈr5°"lί ΚΔ*­Zι0yΌ(,–ύ’4ŸAΌˆ ΆQZ}―7#Λb€ π!ΰΐ₯ΐΩζύα>ΖΒ}¬ χ’01e~oB‚[@<Ν”G¨¬j[MŒθܜ“Ύ‘jΖLjUΑυpΡΛ ϋζ …‹¬HΣΐΛCϊ™ΐ<`!R™Υ^·Ή―9Θσ˜Evπγ8&Λ@ιΗ™*#υDϊ€Γ‘j₯ZŒΧ™•f[² b΅t6ύΩL48Y₯VŠ{AŒθ‰ΐΣ‘ͺ¦η‡eβ݁(γρή·ψvyΣ<έέ@ϊN±1Ά˜uk‘*ΎzΉρ΄γ€OγS˜8N)Θ*)j©tf²aΰ{aϋYˆ²άQK·G U5ΚΡa=ˆ΄m‘o%Ώ1ΫA·.ίF‚"~C4$oGJΛ %μΒΆ–²λ™J½Υχ:y'οCΪ―–Ώ Η4ι|.¨Φ3‚TΉΎΈΌΰΌ8Ž“ΓˆΏ"γΨΰOTΦ동νcBΊefίνH΅N΅ΐefŸΆέΫDΊsΜ^|1Vγΐ»B$ρ(R­6ŠIoŽί†΄©ρͺ'Hb2χϊΔπϋf€0π#Δ£N2ηνφέ…γ8N’UΕ§ν2ύΗAͺ ή†Τσ?!\γn€έεͺξ H•ΰ±H{Ζ:€tϊQΰη-Κ{Η#†ΰX$ly#πUDΩƒ„˜ίΌ1» FχΞpό$ δb˜t΅iΥ[y―!Ρgϋ#mS Fοΰ &ζg]ƒΧwΗιjž”Ξ―/:#N.OCήQ»ͺKΗq '« JKεY”Sτέx”γ8=K–*ΎΩǜrΰU|ναH‡η'ΗqάƒκVάƒj/ABήΉΰ|8ŽCuΚ Tyρ0σφΰ†ίqJD5Κ«ψΚ‹Wρ΅7όŽS"ΌŠ―;ΡΖ뫦rΕ ”γ”―βλNtœΔ¬~lNσΈgκ8%"KΑmBΰ dΈ£^™ϊ}2 ΡB³ΦνΑd{dT&Nω0φm Ξ:JTj«ˆDΟKhΥσtΧτΌjcΝι5τžœΦα”γ”ˆΌψ:DAη'6ΗτA”φFdΰRˆ£_[enΈ*m«¨U9[En•·UΨƒΔ ςΦΉ€ϊheΕ>υΔquœΔΕΟQos 2ΝɊZ Ηi?ySh<ŠΜΫΣKl@ŒγHX†“ί#ΙοΥζάA€:ΤNω0‹8 μ±Jt>Ρπ/DžρtdZΰΫI§ Ÿ/¬σžžSgZΗqœ’š°2ώžU°V«ΆΚZ΄=Η*βEaέΜ9 Ζc1&v΅OΧ#tg΅Ν βtπύD/πpdΠ[’p§gΙ3Pͺψ6«Χmvœ„1²Ϋ£nλιΜ‹γ8NGΙ›9TΫ:ζδwŠΕ‡£r§ηΙ3P«Βz~Ξq§X<Š―υΜC¦4ω`ΡqGΘ3P9Ά ηΈS,n ZΟBd°ŠΞˆγ8B^”¨|l$Ÿohή<$\I4Dƒl„ž˜h€ΘF€ο1³¬0ϋ%―¨ς*ΎΦ‘Ζ~CΥTŽγtŒZκ\dZς5Θ‡«}—lΏ¨•Hνλ4F¬"Τ~ν₯}yl)νK₯ύžlŸ*―ΚC•Ίn³Q…j(¬±aέj@ —™ΔNΉYΧθ9›(Φ ΖJŸο’*iΖπ!Ύ§dδ( ɞW„kœ΅Σ±v4VC™Υ k‡[{f5ήjT΅ƒ±ρŽ|±%°cΈΖ¦φάβ”D;Ο­šΚqœŽ‘g  λSΣˆž…υ"Τh©W’ž†νΛ€zAZεe=υT²ώ*G”P₯nGX°#[¨‘°†ΐŽX‘’q±_Φ΅Τλ³ιŠf;ΰ~’7θL\uœ’‘g TΟ"v‚uΚƒVzDλΨ–™ΘsυΆ(Η)’θN<Š―=ΌΙάqJCžR˜†ξ‹Gρ΅‡Σ‹Ξ€γ8‘<΄4¬οκTFœ†Ψ–iψœPŽγτ(yΚm›°Ύ3¬η  'Ή­€0Œ(ΪbxΉ*htΫHH3L TΠΐ@1ΥXOPw¬FZΗqœ#oΊK€—"F’θΎ?υ / έVΆX<ψ π±M@ͺ;J4 6‚ΠvΌΥHEΫGK#m_,~Τ¨EΡ¨‘6’Q§ϊΠ(IύOάbq§Ισ  kU’kE=RηφZD©§ΫZβΧΡΓ5]·¦Y ·¦Q…‘žώZ\Gšnα\b8½3yήμ| ψsΑyqœ)OžΥ‡(ϋ1’·PfΤΛP―B=—ΉˆAό4π“ώΰOTzH="υ\Τ€Ϊ~^ΆΏ•φ±²#a¨W¦^XVzΫΏJGε°³ηͺw€υΰτϊNkΈx1πOa;Eeμq’θϋΉ ψ:π_&ύEˆ,Ό1ό~>πqdž΅υˆ<Έ‘½woBϊΉέ |ψšΉήΦΔΩ~νΆγ8]ΚλΓ`—‡ρ‘ڝ‰\„ΘΗ«2ŽΝ.Ž@ -—Q9›ρMΐ»2χΥ°=)dœ μμ όKΨ™nώNΰ…ΐ.ΐΛγχrs½ #Γφw5rsŽγ”‹-‘κΚΤ@Y`Ύœrr"oHφΟGΪ./ΧηQYE^Λ@ν½WΖ υαΙώ?2ΏŸ ό q}ΰΰ˜κ·δ8NY9lγ4Ž”fw*.kN 9‘“’ύΧg#Υp7"σF₯Υγ΅ T|΄Έx+1Zv?ςετN*Ωψ+b˜v^]ο :N7ΡΛqAͺPς@ΪGΙ0φ €:o§°}(°}’&«-pΊΩGͺηž‹³ΧwΏΓ}Cf—έ“k©nώXσΞΗ) ³ΫΘ/•κ²8¨ <:εγCˆ\œ’qμΔsΩ ρ°ξE‚”+Α•- zPYά|‰n] όGό܎TΎ ²Ψ±κŽγ”ŽOPΫ8ιr=ωьΞΤβ@€κνΐœγ/EΌ½θŒ8ŽΣ» aΐ΅BΜΧ JΙq@ΊŒ#sΗ)˜^υFχΧHΣό>)£ λ9US9ŽγL’>€$œη=ύάs*Ω ‘[‹Ξˆγ8½Οˆ1JΣJβ(Ž£μ„ΘΘ}EgΔqœ©Α7˜θA½¦Π9eE»,/:#ŽγL v@‚!Ζ‘Ιώ.+6;N‰™‡ΘΙͺZ Ηi?Σk'ιzV"ƒΗ>'lN΅Ϊq,cΘ$ί~Wp^Η™"μˆxOn˜ΗqΊ„^ 3Oٌά늒3β8ŽγΤΗT1P³Βzc‘ΉpΗqκfͺ¨ …ζΒqΗ©›©b f†΅(§'g1qJwΗqœΆ°?>ό«’3β”žί ²r@Ρqœ©ΞTρ ΌŠΟ©o Π\8Ž3ε ”I8΅XΦ>`¬γΜT3PξA9΅ΠobS‘ΉpΗ ”γ$Μk—Η)7PŽS‰¨υ…ζΒqfαΚ©—Σ€­€{ŠΞˆγLu¦šς §—Ηq―βsΗqJΙT1P>’„γ8N—1U ”{PŽγ8]ΖT1PκAy”S‹ΎLŒζs§ ¦ŠςΎ-N½Ό),γEgΔq¦:SΕ@yŸS}ˆ·=ŽΛŠγN/¨ωΙ>’pκab€6ΰ”γN―¨>ΰ«ΐQΙώ<υ ΰνΐά6ηΛ)‹/_Kφη"ρiΰ\`·6ηΛqœ¦Kφ)Ÿdφm…L­° Ψ½#ΉsΚΒφΐbˆΆ6ϋ#r²άμϋŸΪ© :ŽΣ{Τ:ΰ;ΐ³€½Μώ¬6¨ƒφ}ΰΎδΞ) χ‹ΘΕλΜώ,κ•ΐ"ΰz঎δΞqœžε€΄{ͺΩwvΨχ―αχ ΰoaίaΜœS^ŒΌΫͺaΆΛγW›tΏ ιŽιdζΗιMϊ€»‡‰mOη!Jζ΅αχ+Γο?•“3΅˜ά‹ΘΑ!9iφ Η‡ρ §γτZˆBω&°x~Ψ—Ž$‘mQgΰΡZS•Mΐ²°}|Nέ>q¦]ΗqœI±bxtdκο†ί μΆ‡π轩Ž –XœσΰΗqΪΖ― ˆm€ΛEσB€Τ<Ž„;ŽΚΖ»’ύΗ„ύiD¨γ8Ξ€y+’`ή\Ά_N -ί΅Έ¬9%βEˆlά μœΌρϊβ²ζ8N―²Rus πSDٜΦ—˜/§\L#KΌ?¬†G8ŽΣfώQ47…υ#a}h‘™rJΗ‡ΉΈ6¬ολΟ™)Ηqz›—Qi˜ΖΚCΛΛφH{εFDFΦγΑŽγ΄™ΩΐcH€–¨ΌbgjsQFΖ‘6(Ηq dFΡh3끋‘ω}Vίhβ:ύHΨρ|δ™-B:Ο ΗΧ }¬V!Ζp%ˆ1ln2οNgω πσϋ¬_.ΊΘ¬Gή_‹Θλ(2d—Χ%ϋΦγ}²&Γ«‘ί» ΞΗ β»_ˆΤκΜEϊlΞ"vY”qΆ*›]“χ{’“ς~—–,u%ρƒΠa’„Η%¬7hΤPX«RV%½©:Q%ή*τ%ͺρ˜ƒxLjD₯`_ΔνΐMΪˆ‘ Ώη…daΈΞ‚δuy&Ί!>C}¦ϊŒυ™«Bwρ#ΰΎδ₯| Ή‡΅Θ3Τ{ƒ‰Κ Δ{…ψ\”ab§j+KVa§Χn„+^ων°±p2Ÿ(#ƒDΉ[ΆΉ±H·›ΜWϊLu½‘ψ­­&>?]―>„· ωW77ΏFŒΦP’v°₯YΆBΦν9ˆaY«ξQ4¨?T „γe"ύΦί*SyΏνχυ;-T₯ΏΧ!CŽύ(ΝXV[Μ›©¦gkiΙ0ύΐ6!Šf&ςr§#0h4ωžΪ>PUCTΎD5jσ|« jώ[Α}ΐžtǜV‡•*’FŒίlΰ ˆΒY+ΚfDn†ΐΊΦ|h‘I˜ϋ3φ 4™‡3›<·W@ϊΆν—μΧΰ˜a’!j§ž±J^ £8¬‚O&TEέ8Xε·5”YΏΛΐ8p$ΨφdyPg§ =λ?Š<(UΌκeΨ JX?žj+Δ’ζdΡ¬ΖCPZέ6ς³ –XI4ŽšfΘ\O«ZFΜω“EŸΓ"’pι3TaΡ*Cυ υYχ#νf;…tΆ ?νζˆϊ1πbAΘ–ӏHe *«O!–>‘RA§ͺ•3¨ό³ͺJςPΓ"Ok‰^Θ("'#a{-’ΤT‡Γ’H‘­’i*ιZεGΧ3ƒ€7#ΓMuF_ κ:δ]ξ|_{&i7"m؏!ίέcˆη₯ΫΆV bν‘κ{LkτX™H ύιχ—ώΆUe/οwZ¨J?x&Ÿn”~δ§“mΑ›EoΜ*–,7 12ZΆUd]SjH«AεH`ΚW5‡šί§”‡τ£³ήlϊ-B -©±iEα€]¬§~E7„¨Ω΅Nτ9œ΄=κΎέ™y1De~­D ι–εY ΫΔ j‚WWΛ@΅Ί:IέW’₯SͺˆΊΝ@m¬šͺ½€]+ Zέ†~s³ͺ¦š:dι·υΘμNηQ/sB•jήhζyS€;Ε m'έf Ζ Ν…£hΗ=(!kbJ§8΄Fl‚•e ϊ3Ž+˜²0Φέb Τ3/ƒr"n *iW ‘Σ ([=γs%•ƒnυ ά@•UΔn }n ΚACJK\Κƒ¨VD?v―β+κAy” ΟΑ«ψΚAS”—.ΚC·yP^ΕW.ΌŠ――β+MyPώςΚC·(―β+n *qW.rkˆj΅A9ε Ϋ‚$ΌŠ―\xT%ΕW.΄Oβ„aΈάƒκΊΝƒς*ΎrαT%$Q.tTІ ”+—ςΠ­A.Cεΐƒ$*ρ ‰r‘jMzΐƒ$Ίƒnυ ΌŠ―h—‘YψdΰTΩΠ*ΎΊ ”Wρ•n3PξA•‹qδ{ΦNψSΧqε’‘*>W.εΓ ”3Y/]”…{SΥTεΑ«ψΚG·rΪ‰Wρ•‹†’ψΌτ[>T©¬«šͺ<Έ •n+δ΄/„— χ Ίήsε4‹ΚΠhΥTSΧqεΒ T—£T·(―β+}ˆ Σ=…œv1 y›ρΑ°Λ‚ž¦Dί-ˆΰ-+8­€¨οΐ6MœΧν2Τ :)§ˆRΕ•ςfD.§Ρ}ΝΚL½η₯;KΕ7 ™ςχψ‹· Έ ψπ΄ε‘μΥυ9ΰΰZΰx2fΌΜ‘šΌψ52xδD&>‹Lw_g"μmύζK‘»Ε―—€…MœΧΚ‘5~†Ό‹Ώ1QŸn…ΤDg΄ΰΏz•ά’,₯¨Σ3Ž΅ƒΟφBf&RrπΤεa2t’w~Τ ΔΐŒgGP]>­β[ ό881„3™x;πΌσ^ΘΒί!ουΈ6εΕ’[…ε|xΈ8Œϊ;!·2’ρά°ή849φjbaν\šGεͺ“2ΣIτ=LϋΟ2Pš¨Sα¨G…υ9ˆ«Χ,ŽF\Ne:p2pkΘγp%πμΧ? )ΑܜμAΨeψ= Q†· < \μmΞQψ|ΰ“ΐrΰO΅oq$1†–―BήΟk+€Gg{pΖΉzPgŸσ™ΐΆHae)πVΔ‹ƒϊe@ίΣׁCα·υ_\ΌλQΰ^δ/nNιž7“όG–,|‘·‘π –#5»™ώ]ψΟ³Μw­|eΡ‹ΤtDqΟ^ΘΑmˆ^«ZΊ•:ξ;ΐκ°ύΊδ˜ώώ#ςΎλ‘‹jr•%3υ\ΣςΔ¨―.€ΆZ^œ, Ձ< +Z˜j<ώο‡ΐ“Ι/™/#~Œ·§₯·%μ΄υ™ζΌ}ΒΎ-ˆχΡaίWˆ=ξh3ŒxtφΪ£ˆ§y•F΄]ό<όοs:π_ΥΨψ7ΰχΔg:ŽŒ?Š»Βώ]'^bΫ¬―«‘vΙΐbHmΞϋxH³QTϊΏ—!Šd3πDDA.όAΌ“έM^LGΪ@Ɓ/%Χήφu’gώ―Β>½U/OBͺδ΄€‘ˍHΙίͺρ\s€kF†€­ΓΎŸ„}7„ίεΝ–Έ—=Žjm=Υda«°ήšX]­y?(9Yƒω•―,ž²ΞτέΘ4€šοbbΑc‘ΟS©T¦ϊœŸΤ’ώ{σκ5}’¨Ψυ]6"Yr•%3\s)d‚4­hΊ=r_―^œ,?Χϋ‡τ@Vι’ΣU|g ψ5ˆ²zb$A>¬‘2XβΒ°A,ϊ‰Τ¦8ψς?Ό*μΏQPλ―/ ‹eΏδχΥ!ΟΠ™αRZQΕ·Ea½©"ΡjՁ°ΥŽ’·yΫ;"οlsόj{˜υΆ4#W+ΒφέHΑ’πϋf€:d1bPώ\JeJ-²dαHಫšΆ­σšyωn†©Πj3R }"γ―@ͺ‡χE<¬w#ΥΉη«ž[₯γ~xe»#ϊκDŸ4%θ»lD.κΥ1\σ§ΐύaϋλHΥHAςŽŒσΥ‹Ν’[Ε—e 4Q'ΗμϊuX@ͺίΎ‰T5›€oβϊη#ήΣξH»ƒV•- k«$ΟFͺŽ,&Ώj"“A« ވ4tΟCάχAΔΨ,d’Ρ@^Ό¦m7›‘η6Ομ›““Φ’₯±>ΰpδc«E½2°lkπΎλδ<ρLχž–iˆ—R©,μΞνΎΌ-‰Q\υUΛw3δ%ƒ|ηsΒ±TξŒ|3εhfΨΎ†‰άːw¨9›(—§#… Λ±H!tsψoΝίbh~›€ίρpW"οo(l§£c !US—ˆLA<ŠƒLϊVN_³ Ρ1‡"ν΄yznX7*υθ˜ΙΘZ=ςΤ¨^l–ά ‰jT§ Τ…ˆΰώ±ξcˆΐj^6!ΥFΚΡHΔΧ π‚°ΟΟβDΰGτt€ήφϊpό7&ν_€Ο˜ίϋ3Q›1’“AίΕIMž―ξύ&δƒήˆΤ—«RE &kΘ·’ΨχC<‘­Ερ(RΏ_?ŒΤAΏQVg ηnƒ(½;˜Ό €ΜG ΡϋΜΎλB ωP…9—|RYΨ‡ψaΏ‘ι£h-υδΛ’ς»;QΙ¨G­ΌψrrήɈΟβ-L4P‡"έ²Έ4cίΣ‘BW'2Ρ@½-όoΚδY%Ω_DOΖ’χύd€ E+8ψOD¦Ύφ-'εFε’Σθ5Ÿ‹xURω\ς½Υ‹Ν”Υ©*Ύη«άΖ¨ΜΣΕΔρσh²G„·DΌ­MH$K-–!jσ[Ήψπ―ˆP‰”Βφ@Jmο¦u‚ά j >Š˜zŒΜ*δyΣzƒΊ‰$;y ²g_Eκ¦w£ώ~SΗ#ΚsοpݐχͺŠδXΰGL^,Ϋ!Α· νX³€g„cΏ kUΐΫ‡νa€4~_•λώήδύ«ˆ’=‘Jϊfh4_…Ι›νIDATκA#Υ_– ˆΜdΙΘ]HΑ’\!²υ—Œτ— Υ€εq3RhΙJς¬u€ νPΌ‰Ζ δώ~ΧΑ°,D uV5Ψ]a™ž4jYυΜ=η4ΛύΔB°ΚύΔ퐋F―9Ρu+>dƒθΧ,:₯UΏΥΥ„±"¬χΧJΨ"^…ΤmήATΈwŸ’BΫ㠈’ΎŠ‰‘my½‘ϋ‘‡;ŽΌΤν’γΣ‘:Ω?"jςρŸΤcW»v»QRo‰Ή]μO¬ΓΧΦk‘ϊ~[b8–UΪΝcπ^ΔZ…(ΈΫ‘Ύ.Ϊ°;Πΐ‚{Γסּo!mkΒr+i\K₯ˆ‡―Ρ‚γHtVή(―Eγz€ϊsώ«ͺœ_OΎkε+‹Cšs΅ˆμΒi·2ŸΚ6~$XαwΔ糉ΩwiΨχηγU沂„š• ͺkτš$†™‹ΚKΦυλΡ‹“εΎπΏ;Φ“x«xE­„NΗΨ„Ό“NužΆLCΒ?―% ώzΔ»Ν‹*<5€{O'2θΤδΘϋψL­„]Έμi¨υ8’*°‹Iwa8φκNgΠΙD»M,N”!ŠΟ©ΞlΔHl σS%„ΛjΙζQ€DE€–‡v\œW%Σ9rG‹ξf„T?θύώi“Ί€‰Ρ‹E‚9ω4$α/―\"Ό1Nw_@άϊz†ΛqU.z1ΜΌ J8Ž‚?‚€3©>Β‹ΒΛEnT–Ϊˆ4lΞDͺ”|‚³b)rͺΛπάkh,ΠbUX/hu†œ¦¨fή­Œ#m“KΆΓ³6ΆΥΥN ψμΒε‘ρ‚΅Ssy ₯λ‘RΧ,z«ΤՍYϊGΒe8¬›iΪi=½ZΕχ~Δ[ϊU­„ ^KTf#Fj…ΰZͺ7PEӍΥ3Ca†4;ΕΠ‹Hžf:‹ͺjeG]§9ͺΞ|5š9tΎ³“(g²΄Β@M#φyΣ!³”›€w%ι/Bϊζ(ΟGΦ"ςq±/N_8NDΞ„τ½±l³έ ϊ-Ή*v*s΄›<ε.pypεL5PΝVρΝB ΞH­Κ%Θ( υ2/œσ-dŠ©CGŒωπ&d€ό½‘Nן^nρy€£(αά5~j7PΕ£νN™s©εUρ©2¬g,΅^FΗ΅ΣρΚ΄ΪSΗΣρΙt!νe―£„ɐ ]λΗ:`Άϋ“4֘θl­ϊR&λΑpΌήazAŸ£ΟMŸγjβ3ۈ<ηΓΉ“,΄Σ¬Dδdpρ±‚o?kΐΥΘCCP±›PŸk¨ŒA”)•UˆςfeJeQ•ŒΐΊ€8ͺό`؞“l/€Ά,<Ž‚Ώ"#Ph'Υ¬ρkρΏH”άρΘH7 cB6Υy2z͈ϊ bxFFΐ˜ƒ e•r—Ωώ#2­Ε5ˆ‡υœ°½ž8Ί}½¨¬=ρό1Δ?j–Z³θLσχ5)0θφ οώ›I³9γ<;κΙx8οιΘθβ―C<’Èο`_jOΝrςŽ~Μv0†FQ₯Έ/qδο”ΥΘh:Λ‘o|. R'QyUd…ŽθrlΡBD™†J½je’…¨³”­hΪ‘jyP_C\q½IΝΈ½aύp΅4©7―ŠΪ6ͺjCk£€Ζ"­>Σ΅ΎΐI4φc±sLισ€ΚΗŒτ|;ˆ53©,l9™›¨[ZTEa€Κ›•)•ΕTήV#ςΊŠ8ακpl4ό-΅ζ11TΫ ϋ^€<“fͺψ>†Θή5ˆσ2`λAΘ, J‡;‘ΡΖ· ω_Φ[!ς5Κ!’R†‘χ³&¬‡‰γ:Bή•l΅@ς`ιΥB»κ$Υei«μ·™Φ,ΩBšύžm Bϊ ΫQτυ»= сΪ‘ς ”~\ί'{˜όFΡLZK­7§֏4―=§XO㇨U΅– άΣι¬q­fΰμeK‰ϊ‘X…`«,TΉΨ*‰vŒί*6Q‚­ωlΆτ,Δν‚xΛ‘FΤ@]… HϋY€zμ­H°ƒ¨}£ςƒ§½ΡλΟ y: iOZ…Tυ ӞΜD‚#@ήγΑαΏη„νt~’zΡwψ˜‘Ε\’ΡκGŒΙΡυŠNͺΕ:*½²v|Λ―!Η@ερ D¨³ζRq:Λλ)fυΙ’UΊνhΛsCOmΆφ’ύHHω Δ£9 ™@OΓΜwFŒΣÈѿiG²U€oFΒΛΧ‡λ\…T㡃§!Ο#υπœbΈ y»Φ{ΒWΒ Η΅+GNέ…Ό‹o‘Ρ*¬ΊKENΫΈyυL7?xς½‰foΐ5ͺDTΉ¨`ΨPš65Œj4Σ‘/Τ·«?”’Κm!±“>³Ea½o€“₯’Ι’%υΗ‘aiT΁i'μt¨ϋΡ@₯ό€ή­ύh ²ŸLœϊ£S¬JKάY₯q+―›e(ωύ8Ω‘ξύΐˆ±Ϊψ Φν” ΅ÈeeIu[ΦH©ΧkεYΏ[Ϋ―^}§zf˜ΨN—‘δ·φ·RC3φ­ λzϊΙ΅kδl§FŒά;‘ΒTΓuo>ΥdΖ-΅ͺΦj^E…l¨JšΥMΚE=¨G‘*Ύ2`ϋ@5cάQ#TfmιX«/’s§Yܐ>H»γ”’κZ£ί,V «ά¨ώ›(τ‘°¨ΡιζiP΄_TΧcΥx b κφ ΄T°ΌΙ?L©G;Ωha‘› ”ζ΅LAΓΙοn™c2t£ ΅5Pν¨ΩΘΔ6{§:ΉAyΥFj ¦G\VΊ1$Φ£ψΚ…‡™W’ͺθa„‘a₯u§­ς œζιΖa5Pέ4EH/γT%ντ œΖi8Μ<ΛƒΪΨiΠ!n© wξΞΆ‡1ͺΜ—RR:νAΩ6"h‘NW`qν4 Γ­@ΪΝVΠΉωp:A7rΪ‰Ά?ΆΪ@iΫeVׁ4ό[C²σΦS‰¦ Τ?"ΓŒŒŠ\‹ΥD£΅’ab£Olό{Ρdƒ"΄Z#οlD]Y^bΪΈn‡³‡‰νVAB₯bM#ά¬rΥH­ΊΓ@©Ψ‰’²Ο₯^£‘>ϋ,;1‹,5Z›ί ΅ …₯ΥsQYefŸέΆŽyΫϊΜφ Ώέ@ *{!aζϊΌ5"­ZΏ5-Ω@›vL½’,;v=λβl ͺW5ψLυ­¦m΅s‘ΟMŸ‘κI•GsO»άμΞ«Ϋ@ΝFnκ`δfnEnJϋχh1νΟ£s₯ΜC†ωο;˜X’±‘ ιθΧi΄W‘ύ²€;ŒΔ€„]i}?“ΌS#nηΔI» Ψήςι,Η[ σ)ιt [†eΒψ`¬DήΟrd: ¨”+«ΐμΆ•ΕNt°Ό·ΝΧο4Ϊς °΄Š4 ΩΚ_ώmηΛZ«ήιΤάqj υ»ΠT5φSγ³€X¨ΤBhZo„ϋΣyV€wοΟόνx¦†k‘ω­½œ³ϊ¨e΅ +DS_ΪdB+I;x¦†₯½ΛSΟ/Z[’Ig’ΌψΓd2ΫaήHΑΐ>—tŽϋL¬ΡHοί>ΛNt?€r~ zAηXZΆ·₯υ,֐Ϊmϋ¬μΆνXl·ν3»™ήΒσ~b@Ώ»j“¦έ ²ϊΆ΅’Τ`i¦ήυ"sΎκUυώ¬'3‰}'‹~»©η¦²©s ιPpk€Ώη¦κ¦iΔ³Pcg]q}ψYύ`β¨VΈRε™§c;U:Ž2)ΠιlΆP)WVζμΆ- tΊƒ₯γXT_ͺNΥκN5Φ“"o-T¦Υ†Žγ8Žγ8Žγ8Žγ8Žγ8cΎ½Ϋ²[oIENDB`‚python-gaphas-5.1.2/docs/images/gaphas-demo.gif000066400000000000000000004463261512665300000213670ustar00rootroot00000000000000GIF89a°5χ1ΌΏΘΚg]³3΄!Ο±|Ή‘ŽN ~ u b T lΘ8.L7[<6š?/Ϋ G6V8KΟ2-A@d  E! Ev!!“")0#(0#ΨL$$€$%<$'3$(0%˜@&)+&°>''1'*%(%‚('+((%(('((((())('*#4+&#+'#,#B0.I1%1:22.72:I3-+76ι9&< …„ώ‡‡Λ‡–ˆ{rŠ^JŒ—­Ž2Ž΅Ž’—Ϊ’Ε““S8“uY“‡z“¦œ——ώ™1š•’›š‘‘ό‘¨³’­Λ£€π£Ώΰ§š—¬y¬δΘ'―§―΅¬°‚k°°ώ±ψ³²²Ζ΄΄΄΅΄φΊ΄ψ³Ά΄ΟΆΒΝΊΊηΌaD½ΌΥΐίώΑžΓ\:ΓΪεΓγίΖϋΗΗΖώΘΔΏΘΘκΙ»―ΜΚΞΜήΓΝΧκΞΞύΠ°’Z1ύΣΧϊΤΣοΤΣϋΤΤωΤΤϋΤΦΥΤξ֘‚ΨSLΨX+ΨΨδέR"έόμήήαίζζίοόίϊύαT$αΰόδS"ζSζS ζύζηΡΌθθώιRιΫΟιιημνώξψςοξοοχύπιγρρςρρώσυτττϋτυφτυχτφτυςώυυφυυχυφνυφρφσψψχτωψλϊρξϋΆϋωώόϊωύ‚aύδΚύϋύύόυώιΚώξΠώξݏiΒͺ! NETSCAPE2.0!ω ,°5y¨8‚H*\Θ°‘Γ‡#JœH±’Ε‹3jάΘ±£Η CŠ€D ’#Uμqp€Λ—0cʜI³¦Ν›8ζ(ΉC…9ƒ J΄¨Ρ£H=ͺπα#©Σ§P£JJU`Υ«X³jέΚ΅«Χ―`ÊKΆ¬Ω³hΣͺ]ΛΆ­Ϋ·pγΚ=Ϊ€ –6m°Τ2·―ίΏ_…(Δ–aXŒ$)ΈρD6† ΑΙΤ†!Œ«5bΔΡ€`΄‚‰M VΚS/Δα“—!-iξΨA&#ͺΡ2!̙5nΨ°Y n­·#™sc}ρ‚©dΜI\u³£ _ύUHƒΖ˜‘[œQΔ8BMΆktα΅ς BΑbFmψ΅ϋψ©1ƒεΘΕ{¬Il 9γB†,H³Ο$9L–Ρ²μsˆEI(ΒΛ7γ ƒ 6¨η ε=CHb”„/ςŒ²Ψ6 &ZpΨΰ‡_ŒΦˆΆ"‹Q‘ηŠ8ξΜγΞ8{0αΑ pΩ’νœΝζΒ’ΘM‘„uηƒ ξ)4CtⰏ—έ@Ds><'„ ́'r Ϊ2 zξ1ηά˜‘ ™™ ν€ΣΘΣΟiΙ©&r?μπ$BQ¦N<‹6FMΨAM}Ψόγ3“RγΟ?ά\ƒ©Mΰ ]HσΜMAL” ?…  2αŒ“‹…ή@Š8 QI-α„£Ν"C1ε„<ΘH3Β.Β—Bl"N4‹@#Ί ³γμrΰ ³J“α"L΄9M7ύt³Θb2l[«·FΌΰF,ΰΨ =$D^-Σδ($ς +­γπBn―Ώ;l±±ΓΤΓ>°£QŒ‡ 7ΚΰsOoχ࣌5χaΓ%Š:” OH3 (χrf„«ϋb‚,σŒŽ8σ̍8ύLb-βŒΝ;αPΔ±έ)2M8ȘCΞ"ι%”‚,ύPΒsL‚"Ρ4γ8Ϊ`1sΝΡ€S5εMS³0±uΧ_‡Β0ςtΣK˜Έ%„ήδR*=m5φ8;WDΎL#΄;δ]2[+qFCψ 51^‹?ψψ£ =ώΐς5άΐFr&% }LΣO?£μΠ±φ³G΅T'ϋcξF( ψ±2$!4«Β1 0X8ΘC©ϋ ‚dq (EΚψΔαͺν¬σCi―Κ4³T}ΫKΣύηΖ±f–Œγβ˜Fτ\ΕB  γΆC&΄κ3"•8xBγΕiςΖ°ΰ\m`!?vΡ<Ακ‰έ"ίΤF―aMY Δ(ΡgύΐΗ,τA 怃΄‰ h0H‹‡'”8Αΐ(BˆF4΅θΛ] ‡7>‰RN -ΙΑΤ*Ω )Mβ β’D’Fθ$x‚-²±*Ѝ tXΊ 8YrOδZ?ψ±‡Όωzp<’ΈΜ +—»Όƒ/9!ιωEa F,7Ίή£‚ΚθΗΖ:uC"2‘2™ά` ‘Σή-§Tˆxb πΐ%3™6τ(mpγ$Pπ„hLΓj;8‚^RYN€k]CΔ_0wΑ„!֍N„?’α…9’ ΑΔβF;Z‹Z’ΐφL9@΅-ρ«Ϊπ…ΧΐASξmέ() ›pΠJΕQŽ 8ΛΈΗ‹δ€ ’Ξ}ό:Γ|ΞΤΐ,HφNxΒeΩ G:t(ŽτE²€D%ŠIMΊ)]Σ(kμ·Μ<Ÿ―‹F9Ϊ­ ς˜G\ρΧͺiΓ3¬]?†1 Άι—)­1ϋqΨ¦¬Ό†8&0t!$erΠ‡&”j‹mμ,ΜWΉv•2{˜RΩAΫΪ6υ"U鑌`Π‡Ÿ5QΤy5(3xB%D a‘£(œ3M@IJˆ€ύΨ†hTB/ M„€‚@ ΓfΘΰkB\πΔJœ·Ρ†<€dτCρCν΄Žh| 8(2θ˜R,xη0βπ`₯CCLˆš#Α±‹!!_)kβ~ϋϋ_suχ»Q;ξB†`LŒ΄Θ5`A‹QΓ{ρP˜σ0Ι B "Œ½Ί @M0{›P΄53k’aO‡Œΐ„Θΐ4@“2ƒΠ<@`2{•e#ψCΘpπ$-£ Β[ξ“˜ΐή`ΙtBφŒžΜτ˜ _ζAΦ~Gg8WΖ<ΐΜ%œ1:sΜΈ„xΘ@Qt{83i!»@–Ζ΄Ήΰ„›3u(kbOΤ΄&†Š1Θωΰ£o Ιp2‡ΔΜ€‡ΐ7#J6FMf*›JƒQFx,zΦ„F/DPΕ”Œd4)I°‘ΨΖ6ŠσFKν¨ΰ Βv„0…Όφ"Η:Hlͺ#n„”ΜC‡\Ά₯s"`ί6Y]½lό$Ί.ΡJΊGΜƒ*» tή7Mzbœδ€ΰ±©2™οΤ­‰ lΈDhFC‹K@œ~ω抢ήlEΰζφ8Ηžƒ*°Α~pΔ«ηŒ{δ y΄Iά„*ΨΌ u™ΆΛwΞs¬xΌη@ΊΠ‡Nτ’ύθHOΊ—Ξτ¦;ύιPzΟΥAυͺ[ύκXΟΊΦ·Ξυ{ύλ`»ΨΗNφ²›ύμhO»ΪΧΞφΆ»ν戻άηNχΊΫύξxΟ»ήχΞχΎϋύο€ΌΰOψΒώπˆOΌβΟψΖ;ώρΌδ'OωΚ[ώς˜ΟΌζ7ΟωΞ{ώσ ½θGOϊ›ώτ¨O½κWΟϊΦ»ώυ°½μgOϋΪΫώφΈΟ½ξwΟ{Ζ—£ίΎπ‡OόβψΘOΎπίϋζ;ω£OΔ2`κ[ΏϊΨΏΎφ³Ούν{Ώϋΰ§>As ϊθOΏϊO@ΐϊπ―~ό30ϊΛώτΗΏύσΟ ΈŸη·~8€x@ΐ—€ί € Έ€Ψ€ψ€XX€˜8wΈψ ‚"8‚$X‚&ψΈ*Έ‚ιw€ωπ‚0ƒ28ƒ4Xƒ6xƒ0˜‚,Έƒ<˜{.ˆƒ@„BHƒ:ΨƒFx„―χƒCΈ„LXƒEˆ„P…₯§„MX…Mψ„R˜…ZΈyTh…^„XΈ…b8†‘Χ…_x†NHdΈ†lθxfˆ†p˜ƒjΨ†tX‡„χ†q‡ah‡|Ψ‡u‡‡yx†{臄ȇ€ˆ^8ˆ…ΈˆlxˆˆX…ŠΘˆ’Έ…ŽψˆL‰“˜‰PX‰–8„˜¨‰ ΘƒœΨ‰`8‡‘xŠQ8Š€ˆƒŸˆŠX€ͺΈŠ6؊―X‹κ‹²H„¦h‹Ό˜Έ˜‹2H‹½8Œ»χ‹ΐ(‡Δ˜ŒhŒΗ˜Β¨ŒΠ({ΜxŒΟΦΨzΣŒΥxάˆz٘‹Ϋ؍β8zί(‹α8Žθθy帊瘎ξ˜yλHŠνψŽτHyρΨ‰σXϊψxχh‰ωΈ©xύψˆYx‰ˆy i€ЌΈ‹ 9‘’—Έ™‘wg‘yˆ‘ω‘rΗ‘qθ‘ ω‘"©‡Y’*9x'‰†$Ή’Ω’‚˜’0Y“|'“_ψ’6i8™ˆ4Ή“@ω‡ ‘—ψ“Ay”ζΠ“V¨“HIJ‘M•!9”Dι‰F)•5ω”Wx•XΉ’ZY”]Ω”_Ή„L–έ8–VΙxŠ κ`–gI•UYŠ‹§lι–Χˆ–BΈκ @>p—x z)—‰‡μΰ—€)˜ƒIŒ… „$©˜Ω–9ŒΙŠ\)xθ ™ŒY™΅x™7¨“œI™žωŠ 9‹™9x›ω—“Y𦠗q‰™‘7š‰ŠXη€›Ί™›ΌΉ›ΎΩ›ΐω›ΒœΔΉeΉš‹Iš΅™‰H}ΨχœΞΣ)ΤyΦ™Ψ7©ix΄Ήœ™ δΙϋwžε‰žΦ€0yΘٚΰ)‰Α· τYŸφyŸψ™ŸϊΉŸόYŸΑWyίŸ…ψ{ΚW z ΗΗ|”χž) xϊ Ϊw ͺœz‘y‘Ί‘tW‘ϊ‘u§‘ Ί‘:’#*’&:‘%š’Š’,κ +ϊ’κ’2 ž1Z£J£8κš7Ί£ρ©£>Z™=€΅©˜ŠπD £Π€ δ`‘Iϊ€P₯R:₯TZ₯Vz₯Xš₯ZΊ₯\Ϊ₯^ϊ₯`¦b:¦dZ¦fz¦hš¦jΊ¦lΪ¦nϊ¦p§r:§tZ§vz§xš§zΊ§Jαΰ§Κ§ο(Jωΰ ή‚κŽ •ζ`¨ꀉ α ω`’t¨M©άΘ4ω VŽš©šœͺ@ Š©:ͺΆXͺ*੍ͺͺ¬šŒϊͺ¨ ²:«½8©ω ΦΖdp©ͺ«ΌΘ©?[Αͺ«J¬™h¬?ρϊΒΚ¬΅Θ«?‘ΧzJ€ΰ€©ΤꊜJβJ©1Hεχ­§H”€Š€ £P ͺ@+犠ȩPΰρ G`ο€ Π Αb―ιŠ ω€ͺ€wͺ€«ˆJ°ιJ©Θΐ Ήΐ ͺ―νp¨±ω0±Πΐ κ@Ÿ*°Šδ δΐ ‡ Θ0±Ρ@²%«‰~j¨ζκ « Ή 1{Šυκ§,λ ε€;Λ³δι0΄H›΄J»΄LΫ΄Nϋ΄P΅R;΅T[΅V{΅X›΅Z»΅\Ϋ΅^ϋ΅`Άb;Άd[Άf{Άh›Άj»ΆlΫΆnkŠ r;·Θ§ o;yσٟz»·|›Ÿy·“'žί7ΈαWΈ„{ΈΨǞ€;y˜}κωΈιΉζ‰eΉΈI9λpλP™»Ή¨Ήœ ΊŸλΉ’ΫΉ‘λΉ¦›Ί©[Ί [Ή‹{šihΉe›±‰š² y°«‹·Λ΄[»Ί»»—»3θΊ€+ΌΑ؝ΐϋwΖƒΔ{·Λ‹ŒΙ»xΟϋ‚ΝϋΆΣλŒΘ½7Ω»Ύ{ΌΪ+άΫ½Πϋ½‡w½ΥλΆζ›½δ‹wι»ΎεΎβ‹½ξkxν;ΏwΏβ{Ύm[Ώφ+xόΫΏΏΆ ΐχΏάw|ΐ{—ΐ œw άΐ‰Ώέ«Ώlϋΐ,”»Όΐμ»ΌΆΌΑS™ΑΏ+ΒμΫΑ΅ϋΑjΒ&ΜΒ"μΒ Γ,ΓLΓ lΓ ŒΓ¬ΓΜΓμΓύ Δφ+ΔσKΔξkΔλ‹Δδ«ΔίΛΔΪλΔΡ ΕΙ+ΕΐKΕ»kŷہ'ΈΕ\άΕ#¨Βi{€Ώ7Ζd\Ζf|ΖhœΖjLΖ`ŒΆξ‡ΈplΈrŒΈξgΒy'};ΉzœΗ||δgΗvGt;Θ„L|€|ȈœΘŠBΌΘŒάȎόȐΙ’<Ι”\Ι–|ɘœΙšΌΙœάɞόΙ Κ’<Κ€\Κ¦|Κ¨œΚͺΌΚ¬άΚόΚ°Λ²<ΛP!ω ,―4 !ω ,―4 !ω ,―4 !ω ,2x7Ι…8Π€Αƒ*4HΞ[>oήΒ-œ81\΄| €ΘΡ@8dω¬‹‘œΊŽAͺ©‘Κ…σ©Π@ΖbΙ“/†kfO…O+KζΤ©§Šš$β|“OΙ4šsg>>²ώπ!5©I¦ (±!–,šwI«‚TΒΦΫ#6ά„£ΪΡκ$w@ΛΗ—/9—(cή]θ&d™F‘BΆ±.H(nκACbε2hΠ;ΞW“TΈ;PHiκ±Y>dΌrρRΉ]ItUχ’†Ζ«+α2“IŽWDhΘPGΣ=T ΔΏήV«ΚεμέbnNšβ_ΐΥ³kίΞ½»χοΰΓ‹QOΎΌvsθΣ{O―Ύ»zφζΆΓ‡~>ϋμφι“Άo@Ξόσ `€/ H`GήW`‚ν!Θ z >a‚Q( …Έ†ζwήAΖǝ‚!ω ,(JH 7œA‚*\Θ°‘Γ‡ 4Θ©‹/"„Θ±£G3bάh€T―['C‘¬”ν£Λ— M’Ό₯²Λ„ΰ"έZuj+Ÿ²‘S³hǜ;{ώdt¨t‘zυTΚ–žiεŒj…ΈΙVΥUΆN1JκNV}L€PΫΑΒΦ· =|H‘BD˜U«šM•g t?`0`ΑmaΒ†#^|Έ±bnjW;—‹žMςM"D(OzdΙΒEΊ΄ιΣ¨S«^m:΄§P1gCΘ·«S,<ƒύ«·οίΐƒ Nό·žΧžB°ΐϋθ™SΎ Κ &Œ[ƌΫΞ½»χοΰΓ‹/flΨ£>ΥsΧ€(›»§ι²e{M[ψ} ΟΏΏνΒΤ"‹-²„ Α3ς΅$:ι Ž #α0Βhχί…3‘„ πήCκtHα1–Xb…ΈdβŠfWΜK,Ζx!Œ2Φ86ζθŽ:φΘc9ώdBc‘Fˆd’%.Ι$†N>ω_”RφGe•7ͺˆ₯’ZnΩd—^B f˜SŽI¦•fž™εGjΘf›ΰ] §œm©¦gβI¦žaςι₯Ÿ[Š₯ U*₯‘O"Κ€’I2j€£CB €€>Ύ ηŽ–^Κ₯:rd¦šΎͺ¦žΪΘ‘D,0Lv.†Κ*1@ΡB!‘²ΐlH…‘’—I#™ά:’B2υΩkΤ"L―ΙΎΦ™-«°ΔH:αΥY(‘ΰaΛ~šS Ά°… VP A%Υ*ΧξVάΊμΆkr±’ΧS՞Y`T0ΎϊNΰοΏ,πΐ<Ω\)Δ;om·ιX x0[VbSl1Ζ‡ULΨΕ…el€Η€\rΙrΡ•‚§Θ+”fυ†"‹ΜWIΧΝy"ΪΜ²΄άάs}­,Wα|³4›€‹-s/tPΧIFΓ„NN‘@ u{΄%8‚fƒNΥZ‘sΞ3h§MΨcΓ‡9pwΫd—ΞΨΰ“χ; !ω ,)N@ 4fL Αƒ0φΛ±†J¨«^2]Ώˆ ›¨‘|πta$Θ‘1]―ςY)'’dΔ’Ηˆ₯Τ@&ά/ŒKD™OΝmΎpnΤ)ӞŠ£^Κωr"Ο£GΙΥυ°i˜)y¨ΠΚ Ή›‡Jδ飬;Θ| V"Φ|?~(±aCΧ₯Η¦T2—― %HΠ|»XΠͺ·G$>-ŸcΗΗH*δ™xQ #˜x)R”)–…zσAqΣΪ+ιb½)Μ°ΐ˜±ςΥάδνUK«r䉬Υ&^ͺF³Τu¬δ―”Θ8ιRUŽŒ•mΌr$¨k›*Œž‘ρͺ+―DκT3κς½I91Χ72Τx2–g—:_ͺ'½ΞϋψσλίΟΏΏ(ΰ€hΰ&¨ €ζ4θ`>Θίƒξα…ζδ‡a…ψmxα}ΐaIbHb‰#J„’‰*(a‹.68QŒ/&D£Œ0ΊΘQŒ:έΈ£Ž'Ψ#=Δ"„8!ω ,―4 !ω ,(JH €3 Ap (\Θ°‘Γ‡#2X°’ΐ„ ¬X‘qγ‘lμ$ŠI’aǎA.€iŽ —.W@W²¦M†,aΎ$“¦uζPJT&8s7“Ž*”θP£HΝu…Šί ”SΚbΠͺTΐ‚u* $π` C oγ+·.έ»vσβ₯P#A‚'ž’5 ΅i~=tθΚΨ‘Ύ~ :֝ΒΒC%G‰ΒΆ±g…ΏΤΩ,™2CsζŒs˜1lαφΉ±h-`ΤX "›;€κ(P€‚π"B;V›k±b(>Ό€QΒHoiΗπ!T(…Μ›;ekU( ΄+TwΩ\={ι 0°άΨsρJ‹³o@‚sν°iΦΧa0˜–Πͺ›mf‚ˆ•ζ*V6ͺ¦ΆΪ°gˆπŒβhΕα7rΖ°«ΙdΩOΗg-Ηzh:ΥZ[ΐX ew‹Ϊi7€šcN6εήΒξΈ?΅W9ΰ΄ΣN=ϊ€­{πΤ£Ž9ρ°#πB!ω ,―4 !ω ,―4 !ω ,―4 !ω ,(ΜL ˜H° ƒ*\Θ°‘C…#š{H±’Ε‹3jάΨPbDŽ z4²€Ι“(5Ž$˜δʁ-cʜΉρ%LšmNΔΙ³'O@ƒ ΊΣηΙlH“"NQ‹J•2uJ΄ͺU’OO±bkWG²΅ΛJΡ«Y°b^]ΛΦ#Ω’Ν‘;wNX§oΖ­[χΪΆ€ΩζY`•ΓˆWdΓ;XaaΔ‰ Lkc©ΐ8Α9kδ€z΄ι¨I«>½:υι76Ÿˆ¬²mΛ—1>>‘o ,x œψπβȏ+7Ξ2wΖέΎaΐψ !@ζџOΟ~½{υπΫΗίώ ΐΈž-»vξz‡ΩQœ€ Zha‚-Ώc 1 BHŒ„Fhα„Vˆα†Bh_Dn' GΜ1 5ΐΖ"Τ"Μ/Ώ3£5ή¨cŽ<βθγŽ?φ¨γuάΧ’ŠŠ-Tβm'ntΐ@”ˆ`K1Xf©ε–\vιε—[>ω䔐$‰KRΦ€FΩά2MθJ(Ύψ2 ˜xζ©g–‘ΨbKθqΛ3Ω€£dšj™Q:ί¬ρ ΓDj̞”VΊ₯1Γό²ˆ€σNGˆ¦¨Fίπρ¨0“Zͺͺ₯3Š!"κ0†f¨‚z‘:>šκͺΌκ9££°Κš­€ΩŠQ9¦λ²zώβj° »–±ε ΘΜf»₯¦@ː΄΅RK²jkξΆΟΖ-ΈU‰[‘΅Ψž›-·ήΚn»ξ>D²ςžλμ«κ~{/Ύω6oΏζ°½ U°Cϋ"œpΊΒ"Τ0n+t°ΔΜ*\ρA•1Csά1Ελ†lΣΘ ml2―§¬ςJ,+TςΛ0£,πΜ+׌Λ8[σΞ<ΣμσA7-΄Ξ νΦΡ­τžC7ντGP'=5ΥLΟz5ΦGK½5žU{ύ5KY';v₯ΦkφΩEω,φΪ^–=,ά`ϋ¬5έ_Ά½πΫgC΅£Χς§έγMΡ{Ξ₯ί·ΰs;ž%β +Ž6γj[ήwΧwkwΝ•{ŽΉδ§]ΔΖόbŒ.ΖL/Ω '.:ε„Ον/ΊΤ“Œ.λή7°‡Ήΰgϋΰ+ω”£‹. ί%δ2Ouι½ΞΘΌΞ;ΥΔG.ϊMœ―ήολΜ«ΐ=1ΐ#L³΅g~ϋυΉ#|Œ.ιk@Ζ6ΟxψΥK]ωψΥ―cγφPΙπ φEvίψp§+‰α/ \ΰ7žΧΊοΥ €DSς:Wΐζƒ*@‘ ΠPΊξs ΰΧ(XΈ~ γ‚>ΘαlΠφΟ}μVρlw<ΥP^dή~ 0ΡnΨ μ„G½⍆Λή•ΠD.Ϊ@ 8pC9~‡ͺιΠjΦ Δ’˜# ΑG€F>昏zCv‹κfHΏ Ϊπ‚n\D Ž€ ^(B™hEτfwΊρŽeΙΛΦ‘ΰ†s@ V0@,bρl+"Α>Rψ"‹[k©J?ΐ•°€£€|X\†„α u@Α•<χI ’H>κˆpJΛ|D‚•`:΅€! α‰C‡nΞ©†18γ/ˆα¬hM«ZΧΚΦΆΊU­°AxψS›žyG'{ͺ\}ƒ€ ``€ ¬`KΨΒφ°ƒ•_΅ΊΥώΰ΄IvλaΔ#ςXΒˆΐ¬f3ΛΩΝzΆ³ ύ¬hCkρ$ˆ?“œ’ ²Έ‚e† ZΒ¦ρoi”γΆΈΝ­nwΛΫήϊφΆίx cωγΑ±,EcHξ’{„gόφΉΠnn‰”άꎁ«Ζ­Ω“ΚΔ]3IζDΫνwΩ‘]–΅ιΌ·h“;r"τ¦7½…*oΝbυŽϊΎCθ(ξ‰œv¨γS !ω ,ˆ,vHΝ HМƒ*\Ȑ!8pΩ"JŒΨaΑ‹ 3jlψpβĊ n9ά+P¦LΙNέΑIΚδxrεJ-aœΙ3aΆsζ *HΠvuμΩσ'Q’F‘*]ΚtfΆ#T²jSΐεK₯Uy^ΥΊ΅«©hΣ*ύ©Ζ‰7 Θ1°FŽœΊwνβέ«·oήΏ|ϋΕϋΕΫ·YΉΊTΛΈ±9ΆT΄4@€ Ζω.Ό­k@½ξ‚λ*ΎιΛ―½ώ" π@άδ½ ”°Β42άπΓcZπ― ›CqΕ0J|πΖ»θ1ΐ ‡\ΜΘψ–2ΚπͺΜ1ΛιΊ\1ΜβΚ 1ΝΩΪό€1Ώ£‹1ΖτΉCKςΆ»Zκs=ΙθσΠύ>ϊοΔHΣΛ(ΟΊΤSŽ.Ίˆu£EcϋqΥΜ*­Λ+ωX±΅Σ@G},ΖTΛΛ-»ŒC ڐρ 1N# ΑRχΌe3*ΜΩω¨χ6\? vΰp-wŒήm ˜λΝ·Χ ‡1ΒdSk)β˜gώ Χ<·=#ΞΡκά€έhσ ‚μ* QΞζ=Gμωη‡^ξθhϋ ό6τ wγ~―ΎϋηΧ{>?ό „ ΫΰΖι?ύ"λΙ6_#βJLΎ JΰΰF9M«h1δF§Όm1V/ϊόHΠ4ωδŸO=Η­ύΙΛΛž p ψŽQˆ£ί"qLπBŠΘD+Όφ?ξ™ ?ή£β ΰ†s@ V0@,bΑ5bm}ok_Λ|G7ω#ω C86α;@A›ϋ›ξΨ'Ά£M.~‹ϊڐъMπBάη”ΗCήυξ‡τ“1ξ–dpBͺ(¬° ^8މ)μ‘ϋ (ΊE©HΫhΧHˆ ^ #_DaΈΘΒ}…κ\λZ1tQΔM¨1y; £3(# M±m|aΧrΘ9nnvτ–κώ·½‹}#Ω°ΔΎ _ΤbE- Yxjα Dlr£ΈL‚’xΰ•"ΠBΙ1_˜ –ψ@,S’UfΛ)sC ΒAP U&ƒQ-ŽP‡:3 B‘€:ΠρΉ±Pα?Ϋu~g²Ρ§>Qΰ :ΤQΝd%:ΪΉΑΤ€1ΈσπŒ§<ηIΟzŠα 8:νcΩ–rf% ·©L²€‚τ M¨BΚΠ` ¬ΑΝt“1ΘDα›Ί±"4Κэz΄£ ύ¨HCJ‘"B&€t’0Q_F 2| ΎAŽr”£¦7΅)NwͺӞζτ§<ͺOkzŽiˆ€₯g( EƟώ8•C ±©T§JΥͺZυͺX-Η9žq§>υ(. ‹UV0’²’hNaλHΠ!"³’H*`QkIΐ!€[Τ5"ΰˆ\LδZ’lάυz_I’w΄#P8Θα•—ψh°2AG; ϋŽw¨) !ω ,Ά,ZHΝ HМƒ d—­‘CpΰJœH±βΑ‚).tψ0’Œ’[±DI’ Žd³Θ²εE%Žη¬Xι²θĜ'’γι¨Ο‘8aNTW`•«X‡z4Κ©Ξ„T­b½ͺυ£WŒU―j9ΑE˜5δΐ•wέΊxικ΅+Gnί5ϋ=p[-WAd{gφ,Α΄T ˜όΧΛˆ΅θ­μW € 0‰G~΄A’5κ ‚%UΜ~Έ ΒP ˆ κΨYΒBΧ T81t8ϋm( ψ σ?€ 2―9源5,K HL’—ˆD5?Π‘‚~ԚΙPΖ2ρZ€·ΘΕ.nq4V„bD€Β³@‡°ρ€ ` D΄ρnŒ#η(Η:ρŽv¬ltυ2ˆ‘žρ q|ƒβ(9  HF.²‘|€$YEV’—Μ€%ωԁ 0Δ Χχ™r +xFΌ*ΙΚVΊ•Δ)A4ŜLG<Κ%TΠuŠ˜(—Ί\:Ό’”lά˜Ζh⇡τΑΟd(š…“8›HˆΎ 3"‰%šXLˆ²4"Ο€c€: ]hΞ7œ, Ε0Γ³#=>Έž0‰,P8θτta9MJ1%•$ϊΨ –Z’ΣGL:9&™ šY še¨ιeDθ”³ΙSΐI₯œhJ’ ±¦Ÿ<še„B$Qž‡"Z₯‰tΪYhEmŠ)iœf:θAκζ¦<)šf£Ib曀bdjk> ζ¨­ždͺ ¨ΒQ¦¬ΦκΠ«δδϊW¨³jκkFΐΖ*―Η"Ϋi–Έ‚J¨Ζ6ϋ°ΒH³Φ^ϋlšΚ»j·ήϊθiΆ†J.CΨJ;΅½k@²ξΔ­Ό ~ν₯xοΊνς»λΈψζkξ’–:Ϊ/Α#tλ§toΓσ~Λh½πRμ°Ε §Ί,Γ?Œ¬ oόΰΌσ‹1Ί¬§žFrώ‚πΘ«›œ)λRO2Ί¬ό―Α”"ξ΄ώ.$gƒ ©¬s9ΊθBΜΚΞ n½K–\ρΡ ±όJ>V0έ³ΛΡρ»E³BΗ³΅d|CLΟΔ6ΗCokυΡ''$Œ.[«ΐφ6Mϋ\nΠSmNΖFγtBjΫ£ΒγmΏύτΏb+<°Ν&+^ B|ησ8δί4­2Ψf;Xiέ‡—}³ζ”φΦ<¨» h”#9Τ‰K +ΥgωAϋ ό6τΠvΰqηNψξ†#Ύ:λHΏžΟ?(aCυ6ΈzΛ¬VξρεΥ>½+a½ω6(ƒεπά^ιg ±κΎ.ύHΰ4ωτŸO=RzYύβW8ΛIΜjWƒ^1:‡ΏEβ˜ΰ…"‘‰VLnLήΣΡ¨@”u n84`sΔ"M#†8'ωj˜K β’ΆXδƒ αΨ„7ξUHNnμ’Ϋό88ΎƒόbkΘhΕ&x‘ 2mrAΤ]Η4h·*psκQ[>Α ]¨’d°Β6x!8ε=θtC΄b Π]l£MC!2x1ŒX”~-,ΰχCΚ°uωEӜF>%nŽΙ‹βς¦8¬ ͺρdgSΟzˆα²·ΠiΈ3£ι\hΐ*†ΟUXΔβEΐ― ~ΔyΓ©ΎŸ5K•œΤAV|ΰ‚€03 @"Έ₯HV ŸΜ 5ΈΖ [[f2wp“Lš„β JnnΤβΒ§8ΓIΞqš³œθ<§:Σω ξŒ5€ARώ#KsŒη4¦1Aΐά…~ϊσŸ ¨@JΠΰ7hΐwθΙ‘ΰœf0‡‘ c*@Q‰N΄’½¨F-Κьv£ΨLπ†+ ύ ˆƒ(xš°DLg*Ӛτ¦6Ν)NwͺSKά¦₯-=ι;Iΐ¬4 Zˆ‚¦!o8υ©PͺT§JΥͺBΥ(HΒ^p’“lξe/ (ΎRϊΥ“ϊε#:ΐ€ @!“ŒυQiZ+a(CxuQ6Ί$―Šά5―zeΗCdD؜δδE;Ha ϋΔ2Dκ@‡dωšΨ…@v²θˆlB!ω ,―4 !ω ,―4 !ω ,Ο.KH ˜3ƒ(PA:„#JœH±"ā!*dθP Ήl+Ξ9η<‹(SͺτR$I“ΆΤrp̘’+sκDXά35 hΉy@]̏+¨(5pβč˜‰:U*Υ«V³V݊•«VͺitAΑ΄©9Œ²LJEKƒ j@Eh‘ΔΊwνΥ{οήΌy-Xθΰ!α'¨ U+“­`€™»³2JD†τ|€a‚QΠ"l¬Τ3θΙΏ,«¦ψλ—¬Q΄˜Φ²ψ(Θ₯Ÿ΅€)P¬·οίΐƒ NΈ-²M‡NkϋHD(T8LΨκλ‹«…βΉt Π)¨S7π#ΈlΟ aθ"Λ–-μπ τφεΛ½ _¦eΛ6ΈσΩX’Α²ΠgL|ΧiGΜ0τ!2ΰ4η=$@κ°£Ž%pρ‹0"ΈZ1cΜ0Γς@ί¨5ZyfψΛ1ΖgŒv&’8Qyζ`¨!Œ1&θ[ίH„cŽ.ςΨ£jΏycy:Ύxδ‡?ždDC6iδ“;%)ε’Y‰₯eZΪH%Ž^~™e”bŽΩe‘fžΩ›’jΉc›:…9eœe©’B’Ι¦ž{’yηELώ (J|ΖIδœ‡"*(—‹:Ω¨E‰Z(£“RT©₯‘^™iD›u©€ŸJͺ¨–:Ρ©Uͺjvφ)'©―ΔͺŸ˜Φ*_¬xΊZλ­£zϊκ©Ν*¬ͺΐ εoςωψζ–²¦Š€pΞ'§VVά²ΦBΫkun &―+;­Έnv›&§y¦KœΆδ’š-DΖόbŒ."†hjq½₯{-»Ύto=Ιθbo‡ρΛμJΙΞ+π/ΊΤSŽ.ΊcoΒ ϋ–±Έ*°.―δcΕΔη kΖ ϊμΊςΆ{Π1Δ„¬ίc01ΦνŠrΚ)qlnDΒ€œ 3oCρΑΆξΜ3₯ρ«¬D1Ϋ£ΒΤ4ΫlρŒJ7λθΚƒ–λπABOMυ7Χ+’KkΪt«ΰsΘ<¨· h”c΅½(k½΅Ί]£κ2Ψ!ϋ ψ6τ@σΡ£pΈ\GϋυΫωόπƒ6Lnƒdγ‹5Ώ7ντί­ε£Ϋ n”S0‡‹3ΌvΗΒB~³M>ΈηSΟ13n>\ηG ΊΠ³/Θ˜π’ˆ"™΄rυŒ:Η8ߎ2nœ V˜K,£]ΏΏO½πΓK>d„³‰7w@‘ŠΥ9―šrΪ{Ϋrΐό22­Ψ/T½‰]­G>{½b–dpBͺ(¬° ^ -F‘ΒΘβˆΰƒ FuΔ!]l£2x1ŒX\0>σIBt>ΰ.„1H‰p0Τα#DΔΒΊn…8σoކ1€‡#9@:˜1膇cψ‘06ΔŜ₯&5ΈxΕ+pρΕ-š±‹h<£»˜Έ_ΤΒV|β ΞP’tΨ†-œAΜStΕ.tΑ'@€ A#š;*…&‚”‹*`ƒ0‘\d$ŸΔHΒs|ω”ιΧO|Ώ`ύϋν՟t`^(—²• ‚_1Ψΰq@˜qςW‘…a˜‘€rX ‡"’ˆ ’X’ƒ'’‘Š+Rθβ\Ζ˜Οƒ3†TcŒ8ζψю+φθγB@–(δ ωα‘H £Π΅Ψ€ŽOBY“S2W₯•7J™%CJfˆε—Υmiε˜_†9!šYͺΩ ›SΊy œMΚ H8–x©'”}ϊψ'Ÿ^’™€™€j¨“lνΙ£’‹4裑ώΈ₯£ABZ©@“fΊ)‘—&ϊ©B’EНšnZκ’©VΊͺ˜­Fϊꚱ.:λ›΅z뜹’ `\–Υ—€Kl£PƒgR@°dΉ5‡X7䬦ͺ…@gˆUΟ·ΰ†+ξΈδ–kΈΣqΖ0T;:Ώ%Λ§iΤkο½ψζ«οΎόήk€œ`PΌΙ”'ŒπΒ C”pDCμpΔWLqΔ ‘ŽΖZA–²#—,ςΙ$£lrΚ,―\ΠΆ‘γM>ήxN€quεŸ8ί€3AαD“ΡΨLΑ+χ…ƒL>VSτΖL'­ Σω¨υΤG[m‘iX« αΤάq–Ž9–­ΰ(N3φ¨ ·ΰp]΅ˆζ £7:kϋΡΧ·AaΛ­Ωv{}υΣ<π ‚βdHmτέ†Oχv><ψ`ω>4^xδμaύƒ6|:οLΝΉ|X+‘Ί ͺ‘ΰ}Ίy“„νG@s9δΜΦΆ/Θ˜ “Ι(€ sΆο’? …υ@ƒ„ο Σ 4Λ3ΏΦd“ΞPR4ο «½r“#ΓK.Ό¨ςΌ=6Ÿ―]8Ί« /ιaύ7Λ?Τδ@F4θ‡ υE{ώϋ_ΩΌΑ;o΄OΉ` ωœή DcΠ@)ˆ rp9!ω ,Šo 0G° ΐƒ  g \8r&$η-Ÿ7oα F”.Z>sjδˆ,ŸrΡ0’SgaΈ’*N^TΨςΰΛ|*4ι¨’εΖ†Νμ©Paΐ Ho4[ή:tgΚ‡>Ν5,Ιƒ‡ «d(ͺΤY>>Βώπ‘υιJ©7(±ρCΰ4οžΌ©€ΊlΈ ·Υ\Χ|G<-ŸaΓδ ϊ-xQ #˜eE ™Θ©ω Έ© ‰•wΘ Ac(uqΎ€Β݁B*δΟΏΘxε2 Js;€δΠΩ,―vd¬„ύ₯^ ‘!Cf ρ gRδ₯JU.oΉ%’;ΈP4v‰ΰ&!ω ,‡pώΙ…hΐ€Ήƒ*4@Ξ[>oΒ4·paΈhωΜy‹6PŠ‘ε³B.š·Ž+†C–Oɍ()Zd©B™‹ΙyόXpeK*Ό€σv’\Κ„>ͺ0pΣ$Ý2Γ‰δ‘"ΗR2%‹ξμΙς‡―±šŒiΞη%6 Ψ8‹&«D„Rσ‘U’πHΫ’}A²χˆΘ|ω ’3zP/’@” (B6ͺ’*dσ²„β&΄#Vή!ƒ-2\–7I…»EΥΨ£!σ!γ•‹—*ΚνNN„+r54^κΘX‘ϊV&Γhδx„†lu΄Ξ¨lΐ΅ͺ\ήΘ‘CΝ° 9Δ£SYέ Ο‚!ω ,]Z:0 7œA‚*\Θ°‘Γ‡ Α‘šHq"Bˆ3j$ΥλVΗP+eΣH²dΔH·VZŊε£lδΤ™œ™]€^§±Τω’͟m¦\%θM€U=e]š0έM–o(¬8Υ“©UNSžͺC‘λΛpJ―ώtΪ‹θͺT(€θuN]X±&>¨Ž J@€0`ξΨl€ߊΆΧ/Ptι Έ#ηΞΐ[Ð#KžLΉ²ε˘3kήΜΉ³ηΟ 1šM:4C₯M+,Ί―κΦ­9“ 7›6_Ψ¨7“σ–Ο›·p·q§Ζ.Z>Ύi ~9²|VΘEσf ζςΡ”s |η<Ÿ2Ε[Ώž½ΔJωT|—œάuμ‘A¨X±ͺW*{*ς{7ΆΊε“=²‚T§D’^~*±›xδEvΤ€Θƒ 9¨ΐƒ‚ύ[d6αΤΥΰΨΠƒ$Ϊ  7Ρψ‡[dμ ΔΚ)o€ΟJό`ΓJΨ€Ζ‚α¬ΘαM§δτF>Jΰ Δ‘6ι{Κ1™PD…bΰHPy„@ωd™9ξ9i˜\t "Θr)νVŠyQ $˜rU₯ ΩΐΖΘςAqcΪ+ξ5ƒ6άΦ„αR“ G*ά(€’ΐlξv׌Θxεβ₯ju;ΐ\‘"ηW:2VΒΡ~:<9^‘!$3ΐKψΔθΓΓE$·‘Ήͺ\Γo\Θ^‘@hΠ„siΏΎG› !ω ,―4 !ω ,―4 !ω ,―4 !ω ,yt „3 œ9s*$ΨY>ήΒ\Hя|ζ’E$§aE= δ³ςNc8Ž+ͺΘ§Β 9oсsχ1\.–Θ„S5Š”OpΓ94 Β€•lΘBυ2mbΒpΠX5@&Ϋ©S²θψΤ!9ˆ’‰Φ+PΆp\ ΝχΓG6¨f‹-9t‘²ύ‘$aŽͺ&U’$ξ‘G” q·1―Γ#H"¦/Ÿ={ΘDΈς’@G0₯Ίγ†²“ŽσAqSΪ+ΰzAΣξξΑ΅:IΈEU΄h›rŽŠŒW.ͺV·‹θT-q^ΠΆ’±Υ@σΜΡ πŠ YρhΠ$¦ΜΞ›7Νήx©R•λ<ήρ™­“ο~ώϊΗψφ !ω ,xt  g€œ:"δ‘Ο›pζJμa Ÿ9oήΒ‘3Q’@ω¬„‹–Ρ`G…αrεΣ@fδCpήI ‡,Ÿ –ήTU"ερaM­€λΥKΰ#˜iΪDHζYQ„6ΛΗCE<¬d{ΔJ‘p•ϊ θΓ@2Ωz=Ί£Ο|?”ΨˆkΓ@ΣJΩ4 7U‰BJάdƒ¦1’#H–ο«Ύx0 ΧDΌ(LΉήΈΙΣ«π[(nκA;%]/d$Α™TΪ’TΈ;PT₯‡.)cdΌrρRΊ]Ζ“oσ‚ΖK‘„“‹Fu8hΘ πŠ–^qΉυ–#N{:rΓΧΓC4,²ψΉΖΟ‚?Ο^aωφΆoOΏΎΒωφσΣ/žFΏόρύ'ΰ€([q&¨ΰ‚ 6θ`~>(α„Vhα… Eˆα†vθα‡Λiβˆ$–hβ‰ ‰ˆβŠ,Άθβƒ*Ύ(γŒ4Φ"6ζ¨γŽ<ξc@)€?iδ‘Ec@6K6 Ž’H^Wδ+¬@e•GdΓN”φQΙ‚€ ζ  Γ%}κ0lΆI&8ψ‰XŒζ¨©cŒΑ€oΚΙ^sδY@ZŒ‚ξΔιηn€²y€ hq¨;‹κF§šlRi“*Z©jζ0ΗjΦ©©ΘΓΤ§Λ©sΐ« z€¦τBŽ™¬šE§·πΪ+―P8 A.ιδ\D8Υ£ŽρΌ“Β¦±α©ƒ;αa€ͺΰJ­SE΄,9Ϊ: Š§ίΚfŽ8@ 8ο<ΉlΊΗή‘ΒdΈq‡Ύΰ 3/½ …{Ÿ:dhΒ‘€β8κό "kΏAœtP—BΌAΏN±%Bόάr[ŒnAοΙpΌ°Γ7'Ζ9υΤ³\Ν5—fςΙΉ£ςΚ[―‰¬U †Pύ‡t ,`ςCξPBJ$+k°BοΐμαDΈX0AXq5Ψ‘m€Ωhc5ΆΪe³}vΨX=π@#„UΧ8δ½HΖ9p‡8Zs8Ρ7ΈXbΈ&ΐWAˆΤψ@ΟΕψδŽ dΈ%­SΞΕ½γN6 ƒ^‰°K’Kί|SNκΑ}c@κ°«.Na©ΓŽ™θ΄)ΰ9#žd7b† ?όEΈ«;·~hΌrΟ“ΔŽ*@F8Ο΄œπ)±ΓN.- ΒΖgΩΞ„Ρ3Κ½JζδBA ·|9κ+0iaE#…—ΡjΤϊu(Tύ0² ς0+j *Τ―€²9 αΌ0 Ξn.ϊFU·4 Π«gDΈΧ^υ‚ΣM·ΰ^sμ)R1Τ@ΑpΐΌG”Χ ΤΠK$‚Μ!=ςΙC„8Ω4Σ#u0GΥCTφ‚θ”M ‚t~DΩ¬PΗ-xΡM*s@Ξϊe“Γϋ*¨E6‘ @8ξ‡?†΄―|ύS²1–P!ΰΘΑ#²‘@X!ήπΖ)'Ίε ‚ύˁ#€A>π α@†=rΠƒΆ δˆF 9XΉp@#?ψl C 1Α‹\πBkŒG4˜Ζ #ƒlΘH!ƐΌX$4AΘhΘρ‰ρ\ΑoRΉπ†p@JΗs›T%+²ΕkQi– QέA!ω ,gaxZ Ό3@° Αƒ*\Θ°‘Γ‡!’1`.’Ε‹3jl¨€JπΤmI²€I XA–βΙ—0cRT‡© "w.eκάy:h αΕN$Ο£Hš«ΈIΚ<8“JŠNέ»hnώΘΥrͺΧ£UΥ©*x‡βΧ³:«†»“R…ͺœhγ–4—.]. ‰&·oItιΘB©a“;t~c4χ.2(½@‡X±εˆζi0 ΣΛ B³B 2r•C«F¨ξ“Ν[MΫ`έhh*αΆouκH9Η›Qίͺ}z+k ΗΨγΘ/›σy7ή’Σ&.O[Γ©΅+Χ‘Όd A?žœ"؝ „gοχέ;d€˜N7Ÿ~\tKa²™Š„γίxˆEΠPλˆ–:Σ‘ςšPΑε ZζΐγMVψ jφ΅”*<δu‡7ι„Χtμtη‘ €€¨βŠοδ‚D^{58cR) H~Ά£T=–—Π,₯€…CΖTQ€HΙ`SRŽŒMξdΞh€p^$€DrΗ•Yς΄”:£ΨΒf‘DβpejI8yA ς8κτ'IJVH$€p§ήPφ§“KΉ3h›vζΰΦ’Œšγ%odϊG8p]4}Rϊ8βˆΞ3ΰdC'J*Œ"ލ/½Σ8΄Ϊ‡ΜΦ₯«Nšγή€žM·+Lθؚί~ΓΚdNk¨c² Φ!Α ΄0))άSbkgζΕƒ*νTε- °£ΚžbαΉ$±OwΑ"Ό$½czИ‹οHξ₯€HΟώλPEχAaέJXά€rv“Γm9‘~ΧR|Ρ’›LΈH8 k|°:ρ„ € Ήδ§Θ ™£ΚpwtΛrDκ¬U―*+ό]vΉ€cv:CX žφNΞA€/dH¦h υͺgΑBΝpψεešΥ …UΙ„²1Ι5A촃›u»­PXΫRθMސ1J8ˆgcωε‹Ο\:α “’VX± P€ι¬ šΣy>*€~TΤn»κ™kώ:gdx³B 7h1ΖTh{CcΟA‹0@s0ΩΈƒόξ rησTtEž—XbDσȝ΅So=ΤΠδγƒ<δωoP0Ηκ[LA6όΠdΘF$(PκεΞjηŠ Žΐϊε a_Ap„Δυ8ΘQ°™-"G¨I&FΡ7„ΤΓ4@3J˜²";α Ž"$d6ΜaBςvΐ‚ΓWi_ tHŠμΝ,D€ˆΨ!ω ,―4 !ω ,ba‚\ )ήΐƒ*\Θ°‘Γ‡#JlhΔ€oκ&jάΘ±£Ηˆ8PA*Ή(Sͺ\y+Ϋ-yr°θνδΚ›8s*„Χ.^;pδΘr`€$9t:“*Νωξ―#ΙD3`s©Υ«Ρ±3 ˆ¨RG±ŠλπdP’B«JΆm[sζΘ)`@Γ'qέκ«ξZV εέKΨ*:s˜θjΐ”iαΗ:α"³€dιCތ2]:v‰λ*z—³ιž‘Y! σιΧ?ip A‘»°s?Dη9™ΚPx©s¬»8Csθ6Νv (œfγΠͺ‹η›θαl£CwLJ…œgΧnœœ773•πOή8;U*8Θ#Ύ}ttθΞύ‘Λ€}ςͺπ0S±χŸiκ¨γΝDυ J;θΠΆn¬Θ_6ΩΔγM4΄ΣήΊλ‹š#―ζΞ p€ΜΌ/ϊγ‚ΐΧ ΟD2ΖρΚ{ͺBωh`E65BςQa7䣂dtΙ 'ο9:Τ‘ ψί#FΧ›χß Θp;o„ƒ撚ηΜQ?{¨€‰ ^x£VdψN4μV€Ϊc-ΘO4QVK‚•ͺφ`xΐJd¨"ΉG=ΪκΡ°²Υƒ5G4 !XΒRU!‡μc'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛΪΦΊφ΅°­lgKΫΪΪφΆΈΝ­nwΛ[²¬γ·ΐ ne§i€i—!!ω ,c`„„ θn Αƒ*\Θ°‘Γ‡#JœH±’Ε‹Ϊ3—±£Η P¨”Ί(Sͺ\x‹Œ€Θq\I³fΖwρβ½»ΐ¦tθl *Q:sy*zg`&Ρ§PUΤ3Ο»“Q³F}gΣΛ;ιΜ9ΥJΆ&:v£^’WΆ­ΝtιTi0`%œΫ»*9ζš Ε› xwΛKƒƒ#ΡЍΜx’9uΘTψ­±e‹θ ρ0 ™βΛ !š‹†„3/rXC«N(Φr‰ΌΊφ@sή¬ΐ&e»χΐ ζΘτάτŽΆοՊέpπΣψρΠFστ\Ίψωε©Uγ₯ΆΪά;―ΐr―mn“ZpΞΗ3φκ₯pbΥƒV·Χ@ί°ςA>]ώλ‘MM|1–Ωf5UΰzΡ(€ ΌT·`YgΉ[.ψMˆ—9α要*jθ–:αη@Lι‰˜UPnΐά9Ϋ©¨;μHgu2Ά₯Ξ;T‡vζ8S^VB…NZΈΞQIjΧKd„ƒd”6Υ…•XjUˆ±se—)A¦”ΕH¦Y cΓƒΘdΈζ[@γ „jΞ™:Ζ&§ž4αζ!ˆ!š:θ”θ"ŠcŠ:δ΄hΐ'βκ(JθΨ¨H<^ŠQ /-Ri§žN„x`₯XͺG•Έ%Š@I₯«vΔ<€δ ‘Ιθ‘ZλBˆΎ‚+D‰ΰ5lFιΌ:ΌΟΟRτN ‘<‘#?ξύσ­VίτVΣΈΉΞV’5; {stφ‘c:κ쌏9’Q0΅Βξλ™μΞԍmOƒΖ^BΆΑμv€ς]Ϊ4! ξ‚rsΫ βq³ :Py`)ξ†AϊMo£‡ ³fΓπΰœͺ—3Ldγ†8Όa eH&Έδ!f(ΐ„(ΔdCq½S‡"PƒPα‰O4βyΨ₯r”ƒ‰ 8Α΄0†1ˆΰίγθ ΰs`ΐ<0mΈΡΫXjPƒ€ @ : τ±`[ζX0Μ1 π@.ΰΗ?€l;@q‹7P sΑ4ΔqŽutr€€Ω ˆGάβ€ %²‘ƒ„’m+Ι;  KζωΘ₯.@*F)ΠΘ‡dΐα sΨΓΊΜεβΨLh€ δπ9ځLe.³™*P|GŽxΤc—~c¦0³©hJσ˜ΦΜ`0y ]ρΐœΣDζ5σατΐψ„§7·ΞΚό@ 6ψA@•€†h’ΓΧ4€z„…Ϊ@ N²ψΙ6fΰH@F+cxLTEΒ"qL c£PΕ€>ZΡΚ@Α φ€¬πdD£˜ν§Θΰ U„γPP…7ΡYΉΰ/TρR{„ƒš˜‹G4ΪΔ oΔ‰ u‰Ζ11gω!ΓJΡ@2ͺκ ¨.Ξμ°5Ɂ Uδ"α¨GNύ†ΠcΪC£F\ηš=»Κ!!ω ,―4 !ω ,cbƒ§ 4Π άΐƒ*\Θ°‘Γ‡#Jdx``―t3jάΘ±γΔTπ2η±€Ι“(’„Š #I¦œI³ζB’α¬ΌΜ…Ρ¦ΟŸ3ΝεάIΞ: H“jTŽ ͺ ¨SJ΅jCsδœBj΅«WXΡp ΚœΜ―h‘Nu3–ΤΡ³iγω@žϊŠ3Ρ€Ο½€Γ«κb~~Nt¬ΜZyΤ·κ†ΙΓͺΟ,μi€Fϋ潦›lh—ž-nΊ-βyν9cq»oŽX&έ5·7δοΌSΧ59b›φέλ°ΗΣπyhσ.;#ΛΌω#ί ~Ξ);`’Ϊ/ώ2.|³5kθώώΝΊP†\’9ΘM%hΑYŸ p4$x£~s4ΐ‘  !I˜'α ΓB/²AB D^CŒΦ(@ΐ…‘ ι8x(hΨΰ7 ‚uh€d‚D+G5ΐ€hac BŽ0o”γίX\n€Γ: Q(Α4ΆΑΕm,ξ5¨AE(€x °@ωfб"eμ@Τ¨Ζ Όνλ8ΐζ0Ζ1œAΣΗ:πˆΗΤ#jD"ωΈΗ€Γωˆδβ@@Pΐ” 8")IήιC’œ %B5{¨#qφ°‡B)J»Ωƒ#G; ΙJN„Qk‡7ΐςΐTΦ–d‹G4 `sxC–΄όeα ρ’υ2™΅Δ%ΣΤΑLhΐ™Θόe>ΌjΛ ΰ8f<κ‘Liϊ¬›!!– βsΜT"$0gΞΠΙ¨ΐžμΜf(γΙύ4tϊΰŸ>ψςιK`φ“™?P‚ ΊP4S–$εA  „ŠΪ ’GPΒyδΛ`2σHι ΑΚx¨r›^£¦@Ίˆ@ΘΨΔ(Tq€Ž¦”™Ppƒ= +ΌΡxf'aΗL2xCαΈTαpΔ£•άd&4rΑ ^¨"§φG;V‰R²Ωc˜Θΰ…7‘2(ξδ›=„ŒόDaυ†7fΉ8{ #?γ$2T‘‹\„£ͺT«R X{˜#Πψk`Ν'TΪ°Œ¬d'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛZΥ㗍’G!ω ,eb€§ t‡N Αƒ*\Θ°‘Γ‡#JL™Ή‰3jάΘb uI²€IƒοΌ)1 Y:u'cʜ©Π\΄•-iκάi:oHXΊ4p‘§Ρ£½J©Σ§ • -΅*TvRsZ݊τηRΌΤQεJv&V(,Γ–];Σ`ΝeK·£9·4Xœ[·οDŸή¬ΠKn¬ίΓΡέ΅’7,_Đ.n¬ξqδΛ †c¬Α1ζΟΝmnltdu›ηJgΪ4jΑV—nν5Υ Σ-Ϊ‹jp¬wŸw;vnαˆ+“+ͺ˜Θ›[šœέΡΩNg<»_tΤ5¨z9ΫϋVπdˆGέ<]πh«’λή―T±―Owϊύό••ΗίSζό7Ÿ€vU ~&X{‘’‚ξĎ*V!Wκ¨s~›Ό³!WŠέα€£ˆCαˆ3₯ӎ‰„Θ’Uι€c’)8γI¬ε_Ž;>υΞ;>:π‰80ιdGκ‰_%πhΈ€Qζα€G*9%GκΔc₯PjΉ₯F].&ι`7fL5‚šb9Ρ;μPpΖ)'D¬Ήi&ζ€ηž u©Θ€J¨CοŠa ”(©Š‹’τŽ9ŠΒ€DBΚεTVιHC’AoD‚ͺŠτΚe oœšκ¬ΊΪQ‘ΔͺΑoLs©­₯H$θΊB>R›:ŠΌ!+¬H<ŠK8`[‰2šΚ&&8aΒ­·­†«QAŸάΉH­κn”ΞΆδAmΌ±ΓΞ'άζρ+ΎΥH―ΏrU ,:μŒ/Ak”Ξ&άή‘f{ GτŽΒHΜΕ;T#ΔH,hΗuHJΔι€K²Cζœ²\ΰœΛnˆ*sb4|³Cθ¨Β­:ο̐:>ΰ96 ­Ρ'’NΜJ­N'«τA0©2΅Σ*_-P‡Z@ΜΫΚ^Ψc³ΣυΥ>‘]Τ7³—Λ‰d„c΅ΧΉ2u݁βP.S{ŽΪ~ΰtα nE8Π•νj:ŽC.Ή«θ€ΓΛԏsμ·:›`…7ϋ1.Pθ£h:θœ{³φΥ"35αΌξ5/*…7i^^)LΈλξM;Ύn@π»ϋ΄ϊρΉοΎ8ή±η~ιšŽŒτήnΊΧ0½OΕκSχHx“΄ίγη„λpΛ<>( ;ν―<~ρΟόΥ5"³CώΆš‹ ‘>h€# !^ψ‚€hΐο·ΘC³ΐ)9 ΐ °Α Pmά‘p*Pα +ΘF;6Œ$ ZΓ¨…#Lγε0ΐ7v€œjˆBJ0mlo=¬ΑzΨ€x °o D&& P΄@Όv€9±‹gƒ ¦!Žu¬γλ0H=ΘƊ@0ε˜Β|ΨΡk  ΐ ’G !wdHf2Ϋ3$;βaH{²pφ "ΙΡG"²pνπF>ξΘGz-ΡΘ‡ξBIK~ωΠ@έ\gSz­ωP*ΓαRzrgρ@₯ T`ΑΥ2υΈ₯ΜrK^€ δπF'/‰KTς€ΖD¦2+)̎Σ>ΘŽ™Μe63?P‚ Β9N4²Υl1•°@ KqδZ™ΞxσA*™Ώz2³c°Δη"qL c£P4ΘαO™Α n°4`…w #¬tεΚ`Io¨"w€‚*Ό@ώs˜¨l/x‘ ˆΪ#Τ<)!C‰ ^xΓ%dx\4Ί3{΅‹2jκαiTfφ@Gν€Id¨"ΉG=ŽΊ²B²†΄ 4€JU―΅X­g"ΗJΦ²šυ¬hM«ZΧΚΦΆΊυ­p«\ηJΧΊΪυxΝ«^χΚΧΎς΅hlc"w˜CŽ!ω ,b_ƒͺ #° Αƒ*\Θ°‘Γ‡#:€"±’Ε‹3jάΘ±£ΗoΕc²€Ι“ )<βNΚ—0;ήΚvJƒ2αbκάΡ;rαri0@ƜQžH“"T§N¨7δ\*šΤ8UCο€3G΅λNtH90ηW―hQ’C·iμ"qgΣΚύ¨ξέ§±ŠήΝέλ1]:L `2‡..ίΓΣ) \ žaĐ#;*°‘37|/€0k­°ξT‘Sχ˜4ιtθάΠ ͺλΫΙ8А˨hά€Ι‘™Ν‹5pάα¬PQόΈλΥα ,GVΨ9itގ8Pν¨υΜθyC€4©­Ώο€’h…Σ«Oˎ4Žx;+ΎWsΘ¨ήlεsω V„sTRΕ‹xŽQF˜S@9j8SBUˆ"Ξ…•‰μH•bZ«©βZ­–α‹1­&yΔcŽh±3 Οo@Rυ׌ƒέ˜δKk&>ιΥbŒ—“VšτN¨‘BN|]nΟi©‘X&O~έρY. "Ή¦N²ρΞVs"%qjζSr³!ƒ!—~f€9Κ1§™…ΒδtάEEh£WήyRj’:ήΨΐΡ°Σ§¦ AΣϋeJͺGθΨ'ΰͺΊͺG BNu“ΞΪΠZΘΨΤΰΊ~”N‡VB‰"m™k°5•ƒ VDBJ$w€ί²Μ Φ PE$‘ΈSΨf+P:BdR-kεšϋN ‘Ό±ξSΩ/³ξ,.·‘Ν ζ^N wΌρF 䠈;£όSΰˆ9RR οΎ³.Ί(WŠ}φ‰8πJ¬Ρ—¨UΖ¨Ι1εYš³<ρ;n¦ΦNΙ2WV½ΕœsC{ς›Ο?'„9^μVά΅3« *:hΣΜ>:];SνPxΩmΧΡZ„N;ή(ριyΥ@΅θ@γ©ή\6DΠΌZ ¬s'€Nέή½vΆ 6˜uή ‘Σ!NLΎ:‡ϋ6αΉ •¨x+^Œ4¦ƒσί€†‡yY!rΎͺ:mπΦΤ’SZΧ]δ5Έεω•1a‘Γ.ΆXŽόΊν0Θg•Μ{Aœ½ΪξΆ«sζgͺ΄(όπ°ΥYΫΖ©“ͺ›Π¨YΠΕ!o; PχόπOC±ψΟvά‘^½Ÿ\“gυο7ʞ{‘f―ύ} κ½ν΅ςΫψ,§  ξ–됅˜VΉΉqˆB’ŸφzW"¨$~yΊ …ξ 6ύΩ,˜«υ&–υh„$G&f€ˆl€Γ…0Ό΅V)"8Μa¨΅(`](@ƒψBΚρ°h8@ N@…&6qΩ` βΚQŽ$ ZΓ²h‚i”γ`£Ύ‘Έά€5 p†LcpŒ#μ”Ψ &$θ@,°Η=Z.JΌAИ€x@|δc ΐGFfΐ‘&[G=0‡9ΰ˜ΓD0s¬Γ“Ÿ”dAκ±œΓυΩQAXR +G>fIKΨukXΑ- KZΞ!ψ™>’|ΐ˜!ΐΟμΡΩΓ΅$‘=ΘajΆšΏœ ΩΤ¦ΆgFsxρˆ†¬`oγšίL4 °pμΗ›ΩT§TΠNs’3ž–‹Η:UΐO ½›ΘLˆ2s¦Οyς“(δ°'@aWPπ@σό9γQt$˜]§6j€ Ԝπ θά ϊ%Ψΐ h(η9±‰Κ¬ JˆιI p  iή z$ττЈf:ΰŠPˆ)ϊκDU’o"P ξΈΊ«Gμ€CΌ±ϋ8nΌAo€BμšNλμ²,H6μθΪνCΤ†dΕ΅o΄zGΰάρΖ¬pDnΡω.jΰ€3 8xh•Ήϋ*Δ€Aή@Q c{,QgΡ4ψC’;l°g=Xζ ;TZ<‘₯P΄X±ΗmΪ©ΰ°CςF萊Fb ―μP.H²­Μ@ρtŒ³C£ ©Θ;Ζώάi˜ΐ'€Q:X° Ρ1;-—`ju³Υ %VšKŽό3mmΝuBoh€œ>ŸΡ_ &ΆΜπC43Νm1:μ@Sαή€₯·Ηκt¨UŸm©»½9€’AΪΰ$Σμ€Sξ±Ξ<€yΑκ<ΧSю„ ’˜L^:BOv'Nβ\«“Ηqͺϊω»^‹•μF—„Fœ―~΅^τ'ΈπWυ'2νξvbαHΜπνϋzcƒΖΌ[mψhΩL"k"#/PδΗ‹o€Œ˜—/<8Ζ!W,υο’σ\tf—NN%¨ Ώ΄μ°ΣΤSίιžΜΌˆ0Ox^jή£?ၧ>mΨώ€' Ωΐ ³ΡŽ RJy*θE6²‘, ΐVXPΰπ Υ:s 4 TΘ‘ζP zOε˜†nΨ€9ha <ό†•xΆi”@ ΈyΈ*nΓmπ@@Φΰ°@ΔHΖ1š±ŒhΜ@·:Ё-† ¨A `F3NΔ8–8¦a‚1Œ!o8@ζp€uœcυXΗAyΘDΰ`$"»•ΜaφG$( δγ“ωp›>ŽΠΕzXΧ²(7B€sΑli7ȏzt$²Gί£ΖΝž,έ.U@L”yΓνP₯γ†IL³¬e('‚KώΑ’*ȁ xπLI%sšVΫe|@Nr>3šυηCͺy¬]ώ@ 6ψA<•€h’ΓΚtΪ.•Ο#πΣJpC8@LuΚl—G@ P~2ψό€ΡŠqΘΨΔ(T1˜ˆJ΄!­μΦ.‘ΰ{@ Vx2’ς °$ƒ7TŽ;@AήG<ΚS˜Ήΰ/TAL~“§/υX<’adπΒ"Ck’Ρ„$Υbφ2@ d8Υή8*R Z0]‚*™δ@†*r‘‹pΤC•c•0ρi·š#Πp+\κΈ|Πυ­c%λΟ$Ψ«:­°==bωͺXO"Φ|Ž5,d'KΩΚZφ²˜Ν¬f7ΛΩΞzφ³  ­hGKښφ΄¨M­jWΛΪΦΊΦ눭l)ΎrΔΆΆMI@!ω ,―4 !ω ,―4 !ω ,ecr xγΝ€9*\Θ°‘Γ‡#Jœ¨Π<ξRάΘ±£Ηγ‘h:(SͺτXΙ"&+cʜɎ&£ΔΝάΙ₯Ή@U©λI΄hΔwξ0ΛΐI£P£:5‡Ζ€^CaJέ:Σ9+T #χ”«Ω•ΓA mθΩ·*ΝECΐ†7sZακ₯xGΒ‘έK˜’:uΘT°°c‰ι!Σ`€Μΰǘ²ΛEΩ ήΜ ’SεΐAžwyCcfGj©"weUƒώ¦t²U§SdΐΑ&€Ή3ΞΣ[hκΰzΥΕsc5ήΨΘυ²3GΐUuΠ£ΓEΞ ±ΈkηͺΞΫZmΗ>ιν‡%³«7 M1”‚σχ"Vlεsώ·θ˜Γ ed„χ\œ%•ŽxiΕγVƒ[α5ŠKNQΘUd˜,U <reN:”F 9!VψqδBŽ9ς₯Θ“Φε"ƒ2Ζ„9dX…Œ9ΕέyΘ΄3a;‘“N8HπC4κΰˆ$Jεύΐޜ$ε”™SŸP„$—2™3™^€#™(±3 n ΘζNζδbΡι sδœ>™CŠEΌ Ÿ1±σ‰Kj*“"΅εDΊz€N 8 Κ–‘ŎR-bšιCy’QW”’%:}ΚQ”P€`&‘β8QͺΊΡ€GΒ#©ι©­ΌΘ#+θϊΘ¬‡ύͺͺ;Dςˆ« Όα+°ΉCI$< ˜˜Κͺ N oΤceΰΘI-D¨c8L•ζ;ηNtΠAβ@ˆΡšρ.tXkΌ–/ExU²Τmƒώ ;π0κΐHψ,Πp©‚NΓF£ΞuKνPΥ]ηpDάy'V;[ί΅U²ͺF£Δ{Ρΐϋ1Dυpί‚3?”ΨbζζΌΠΔVΰΚͺͺ“ΰ»>;τ EyΔ3f™³‰EŠJt¦κΌΣ‘ŸάυBζ(|βΧ ­X©*F’Π;n8€1nj'Τ12άέwE^ύ©7GπCzq ԞHxSkΰ5‡ )Τϋ-φ4Ωo’±8Τuήَž›Cš%Mξ³9-½Ϊ3Ω5u@Χ‡“₯ OΈ@w”ζ\έβv1/CύΥwXy>³:j₯όhάCEΣχwι­(:μ@ceα˜Ύ3cΉηΩdX¦|€θνYυ9kNΩ½ŸΤ%¬69΄½ wΰ»U: <σΤo<πψn²:yX΄Λύχ“Ωοήq ° ~πύ`„yC€3Η<ˆ k,γ‚Λ¨Β8ΰΑ}Γ’@*0ΈŒ-lc)GΞό° Qψa„#$B5ΘΖQ΄A…(ˆ@„ @Ν,aͺ€ Qt Θ€|Ά6”’Κ`C.hB¬£(œY=Ψ°ŒmT£Λΰ’ ζ‘EŸΥ£ MX‡Ζa4j Œf,G3ς‘/|Γ뀇=ꑏ€ΩΠΘ‡ Tΰ…pŒ#zΜG}φŽ@^ G8Βa{(gΝ€b*Ž‚Δƒ‹όX&y°IX¦1ν°d( –Ιτΐ±Œ'A)Κ@ώ@ 6pΟ{Π@Ž‚Tς’¬ €py„aΪΐn˜€9~ΉΚseςH@BΚx03˜ω€ζ"qL c£P4ΘqΝe n°4`…w #w)§9Io¨"w€‚*Ό_Žx³–}Μ/x‘ tΪ#©ό§Αβ| ƒή@F:Θΐ˜hΘΣ`φΘ2Δ d<ΤήHh3σevˆ)•δ@†*r‘‹pΤC•3³‡@dZƒD.…©Ϊ*i€š*Τ!ω ,―4 !ω ,‘’TR 4`έΐƒ*\Θ°‘Γ‡5π2G‘"Δ‹3j4`€ ^κΤUάH²δΖpP•“Ϋ¬Υ³ dcΦLΪ(―Ο*Tx'Ί΅Ρ#°c§ΎΌ—΅m˜ωx¨Θ‘‚Α˜ΏΜe ίΠ‘ηY9ΙtαHεΫρC‰ έΡ ?ldη|JΌ§·qd‡›pΙΛk<Iύ#“σιΟGn΄όŒτ!%H(‚Μ(•¨‚Μc]tnΌΣΜVΌƒ 4Π0Ψ Dη₯F 4w@aoΞ72ΉδΒ‹*š y%:x"/ΠπGαδcŒYF/†Aƒ 2+ DιeX8΄­¨Šψ€$Fδ€3š^B6“Γ”%υ—:ε€ΑZ`n„W™h¦©ζšlΆιζ›pΖ)ηœtΦiηxζ©ηž|φιηŸ€ϊ(|ŠB¨’ bXΠh8)€’V ι†Λdj ­#P=žžc@=ˆ j©£’ϊ_)Λl± žUlmQΕ¬U€Β<€ΖΉΞΌzΊN=Œ•D@yϋ5§_=φ§~Ζξη첌9+m° Kl΄Σ>λ&³ΩJ[­|άv«νšαŠ«¬šεž+Ίh¦k.›ξvΫfΌγΞ‹­Έo[/Ήζ²‹nΏΜnΫ¬Όvz[R@!ω ,j4LΙ…8Π€Αƒ*\Θ°‘rήςyσΞ‘Ε‹ΓEΛgΐ[΄κ0Ši ΄|VΘE£H.$Ι— Γ!Λ§"₯G0s"”IS,]κ„ΙS…Q/ΰ&Jt¦Q£?Wβd:d>*r¨ΰAFePͺ"yώπA–lW©-Α^«ΔΖ·JΠx­¨Φ’ΥΆJςΆ="—e]‡< |δdΎΓωΘ‘ϋΫ00’@”(B6ͺ’*dK+δ ΕM‰ŒW.^ͺ:·£(;&m^Πx©#cΕ$έή £E#Η‹"4d΅£™FΎ0άDΕήp«Κε:κ Ν-α~hYwπΗ£_ΟΎ½ϋχπγ˟OΏΎύϋψσλίΟΏΏ(ΰ€hΰ&dŽ9χ-θ ƒσ=Έ }π |κHxα{νhX!|z8‘{Ρ°#"„νAαM:'’Έ^J!zΘ/@:-Ί(›9κδ’n°£„λ™Ž*G<'’ηΰ&I*ςŽ:Ιγ;˜ΐ'βΘžƒ8*€€x·α—Ύ“Η˜΄“a{Ύγ†δΒ"œ.€Θ|ǞˆαX€Aνό)’7GπΓ{>θΝ’Ž˜_H* jŠ!ω ,na!  7 ƒ*\Έœ·|ήΌ…cH±"ΒpΡςˆhΠ’Η‹ΠςY!M"9u=†C–OΕHŽδRZ\ΩRŒ&QΚ\HS…O/ΰ`ξδΙ§Ο›% κj \H*r¨ΰAΖ‘I¦iώπΑ•kΥ€'Ν‰λ‘WΘ?”Ψ°‘Υ‰cΙzΜ•O‰Z»6ŽμpΞ$ΩΈζ*ζΘwIα#!σ)ΞGŽ`ΐ s ŒdQ #˜eE ΑǐjΘΕM=hH¬ΌCΦ šAΠ‘š §*ίMRήξ@Α-!μΈ ζC–Η 2U₯ΫE›(ϋ7π¬!yp'+N™pš$9dŸVP…ŒW4ΧΎΉ\%βUεŠ–P½άƒ1Ι±;“·˜ιΩ˜Bο ([}H E *˜: ˆ•}X5Η]…Ϋ‘sa…ή€³a…bθ‘…χaΈƒ!ω ,b\;D Θn Αƒ*\ΘΠΰ›gήJœHaΆhήΒ‘SW±£ΗZ΄Τ#η-šFŽSNΤ2Ο I“UΚTΘΐ€> ^ΐyΛHΞ€ΉŸ@gͺ,ΐ Ÿ Vΐa< τ§Π” Ψ;ͺ"ηNN›>­˜νΦ#£TΙ„Γh`cΣ [ͺ3Y>*r¨ΰA†άR³gΣ6TZΎ>{wνYszςuϋC‰• ±›ρ°ΣΔ ΫζSβψgJά„γiω2ζαšε;‚ kΏωb—%WρiΤnY/ tΣ&J•T!ΓZΫφiΝPάΤƒ†Δ€7ΉœΣ.~[ f±€Β݁B*hx©ίN―\ΌT%θ#»β¦1χ-Ο ―td¬„;bΰH8ψΖaf9Ș 2ζE“‹ θ'ήmδŒζ 9$₯§J.ήπ’u‘sXuυ$P„NˆN.Ίaˆ ‰hN:ζ¨b€yΌ“‹ Ε) ˆ;Ζ‡cBg}b@ιx8δDˆ½(›ΨΈdEκ $•SNO–)Δε—`†)ζ˜d–iζ™h¦©ζšlΆιζ›pΖ)ηœtΦiηxζy§’lڐ%(B‰8iB˜DBŠΰ`I&o€πH$o€ƒΞ™οςΘ ‘>Βh•fΊH$€i₯—†JI$€šΚšΰ)ςΖ¬d¬ΐ8δ€:ζ;œΞ―3:Π¦9„Ωf•<ΊωS%o²œ !ω ,\W  7 ƒ*LHΞ[>oήΒ-œΈ0\΄| €H1΄|VΘE‹f 9Ž‘εSaΕ››„πP" —CŸ–Ω"ΘaΐœΜƒαV€SA”Μ©9+²…S'S]8C‰ͺ€rλMIrθ|r އ 9ryΝAsZ'>—£G6|ΙF’ Ί΄ Ή±ρƒ/_4 Ν’νUΙ%ˆΫp."9΄x =‚Δ0’ω2η#χxp^dρ(’„DΡ(^T!; o8•PάΔƒv$€ yΌunφu>2αH…»…T.0ρn τ#2^Ήx©ŠNςQβ–ΟtΞ ―td¬xΜγΐͺ»ΌŠ4€,šGdΟ£AΐA.sY!«o¬»‘tUΉxŽ9h /θy¦B'AƒŒnhc* ƒUd qΞcω…έ…ZθδY4H`ƒ7&΄‰κ@ΓƒθPτ"ZꨃΜO=έhN:ιμΘcZΛ±ΓγDi•ˆP@!ω ,―4 !ω ,―4 !ω ,\Vlz —-Α‚Α \Θ°‘Γ‡#JœH±"Δo@h\bEŽlι,ŠI²$Ιΰ" ͺ3G ΩΤ™œI³¦ΘξNΝΡB…Α˜ m *%Μ9΄ha¨Σ§#AΔΘ ŒRάAέΚυ!JPnέXš΅«Ω ή1¬Šuœtgγ 5g`EΓό τRHW_šXsπPΑpQ4}*‰LŸˆ¦h±eΖω~(±ρC  7ήFE#wΉtDhω Ψxd‡%“U™žνYjG8ŒΗ‹Άo·:‚ Y¦QVhΰ%σ·οz ί!k-Ή d!kχζ-œ·#vxΣ½]΄pκ ©%yναΜ©CΆžΜΫχ~IG4ǟ—yΈ~¦‘ƒŽ|ζ¨βΔ3 ₯ρg;Ÿ@%π@θ]ό!&€ͺ<¨αY2ğ:ρΈ‘\o'Z&α„κΐuΩΕψ׌θ„ExΡ4§γ†3zcGx“γrΝ¨V0©ΨŒδψ€μHΉ£„ͺόΘ<&ji–9訳ɂŸˆ#f“ς½ƒΙˆ€Έζ˜3ζ1b.χΝΙ•6j€L˜z:ΕaΦA#d O ^’K"J”“λYឣ‰"6!2Ω(₯6‘‰N. Έ)§3IˆΞ™(’©CqψŽ› Ζ9*«%™“N;":€η¬΄ŠΔί;μΈΈ\―’CŽuΨ[“„κxƒ6Œ§μ²θ  μM:m©κ€§φmKӊVή‘―βBdͺ‚ ‚™.I3V@šοŽ4c:Ήͺrh½­ψΞ Λ―½ι€c#ŽϋΪγ*špΏ‰€’WΔ}P&V±D[ιΖΎ;΄"¨ ΎƒξΓ¦’ŠI£!7$_<˜¨πÁP’Hƒ-«(!€H$€άΘKˆPπΘ#o€s2ΏζΌσσ € Θζ̐;”D Υ Έa@·Z €ŽB^?bGds`Ω©υΖάoNΓmΐ;ξτΜ3©8ΰ@€zw[m΅κ² ͺO§ΛαŒζT2β(ησ„π,"Έ*νX2 ˜ή.{c²€[Ϊ,xβ₯ώ!:νxσCΆ[j4€«_κt©ΣΫ•YΊΞε‚_6>0ˆ’ΟΛ²Φt±"#κ[ϋήοΨ)°πζΣηŸΨ/|c΅“/―υGιyΛc |ψό‘Όˆ8λΨ&€:UνέV@œΑK]·μ€+γ%,{ΒBΖτc:fz«ΐ€ε:t€γIνYΰ|2eΐγ©TƒΠτΑ.Eμ/|•Θέ(@δ:v°cΉ“ΝΣ!ΆεhLoό9–Σϊ(<¬]4ofמϊm¬LOŠ ΰ1vt°^όaWρ„‡˜O IMΒ+XeH€Ž.Πΐ°§½0roz>Ϊα§7DάPlzκ1€R$ 5*Υ« £JΕΚUλVT½~λ΄eΆ#V€M»"8²OM’ΛΆbΞAvοRˆ‡R³ ΖΜΉiΞAԍυΛπ˜ς²1\€NΖAkΡβ «ΒΘ5Εά!Αl ΄œΘ§βHΆ9Β‘SL:.κΝϊTh sλM4Ω—k'E=ζk*¬d‹ζ Έp₯tP°‡\+δ˜Λ¦ύ<¨Ϋl«κρ¨ΞƒLφζ³w .›·^ωzδπΡΓ‡σΪΣ―YΎ?(aC€6 ρŽvκνS8Θ䣄€Ϊp„h˜ƒ^p ΖΔ`>G ΡαΠδ#’ˆδˆ6Z†(mΨa ” ‘2Šhޜ„βKBαF<Πa…;Θ¨"£yθΨxcŠ ’)αά…*Μ €,ι”ΰ‘…"2ΌδΒ‹*:Ζγ 9ͺ8ΰΐιy"–YnΙ 4Ό¨C†Z†c)G<Š­ΙζDΩ‘ƒΜoΠ Γe4ΠΨΙΞ(y*ςŽ‘jDN8ތIŽ7_ͺ’Λ˜}€ `’ŽA‘vDB“:fBι(€•ΐ£¦@₯ŽT"8§vj€:κδa&)jϊYλDθθŠP<ράa¦*ιτyε°"₯ι†δBN°ΟBΛQ_d /e«­Fθc…·Θ:Jκ„* 3ͺ°λ’ΞπBγl½+y£?Dc†όŠ„4=€„7ϋŒ4*ΜθΝΌ;Μ2Σι¬ΈCΔː&VάqFκδ"£!s<2C}I‰&½+;Τl™zΖ£nΜm’g 6̳BκΌσ ¨˜@ϊ³D­‚ϊ‰8" ‘:Ό:Κ9>;}PΠyΌͺŠΡV7Δλ―Z;kΧυε†·ΉP|3Ω ‘Σν·κ`Ϋ4ΫαœοGl³¬Ž7οͺMzs³]l4HΰƒΎ\ηm:κDσJx¬β ‘ΓΔΞΪ”³€Ζ3‚Ξ;ΰ¨ΣΉGD±ƒŒGθxΗwπ|ϊBΉ ΅B$‘ˆ;¦Ο~:ΰAVΰΎ»ο γFΓΏρH ς 58wD²Ό±;wΎSŸϋ d/š±§«£H 迁\%δX&½;ξΘ£80 Σ*ΝλAοψ각SάΧ–ΥŽ>Iο B[ΥΘζ6o+€yCGέΰ§όu­]}CF-h5oΑ<€ΖΨ€‡Žtxc«Ω¦hδ@a’γςx:(lŽƒGKG:V獭lιψΜ#Cι•μd€;ΰβ ΰ²fαπg}ΑSΝz§Δƒθ ŠpǏφŽO…κ‡dλKύ>‘¦*ξ j―"ũ̈50q`f4ΐΩͺu-6ΰmΰ:ΘWV·₯‹|›`ΌΨGπ-_q‹#αwrvŒƒΖΏF«)s4JG?—±V±/BTR‘ͺΘ+!’τ9rαάa ©œ]™ ‡wЊ”€pc ζQHs|’•ŽŠeη4ω)|β-fH ZΉ w“rκˆ‡€΅Ιw€Νͺ(€ΩΠΦK·)Δl0@ =ΜN±†BζAxΜ©†—QΘ…ˆ’ž'>χΙO…ŒŸξμg=μΑ€!ω ,ef€n ˜H° 9*\Θ°‘Γ‡#JœH1’Α‹+jάΘ±£G‹ ~I²€I„!Ež\Ι²%Γ”]ʜI¦Jš8s‚΄©³§O…6oώ:3hA’H[=š΄iΝ”Ωr€xC…ͺ+ΐ‘sΚucΘl ݚSgΞAΊͺ­ψ5μ­[‘ ˜s`λΪ»ۊ΅r«† Ίκπ ~‰l[ψF’Kn°c”…AV‘βH6ΊαΘ~Œ7δ3·”A@Ήυ&ZfΝ#ΧιE™2™hΘΌF­φ«Τl*xπpύ šiΝ΄Ή~Ν† =r('šμΖΑ›bDΞ²|?~(±aC;oΡdGžp Ίζω”lWoγˆ4α~_kξόυ#Hπ–―>{δ@7ŸZαά‡D ” ‘2£δayΈCŽ]:U`>PΈ4GXρ2ΠTΔCa…I]Θ)αά)α…σɈ˜€ƒ’…ό!ΓK.Ό¨’a;²£lβΞ‰7ϊ„žŽΠπ’V4—™9y8ΰ€*›%ω9ѐËlΠ £c4Π„Sί;n A.jι9αxγM€ήτ¨J.sn₯Ž9d¨ΙK–nκ$ œΠψ& 9θc* hS6€Ž7P0  r…N:ή(ΐήdŠ:Ρπΐαˆz—:Π¨@”ͺvu9Θhƚ’θδb«Ίv…Ž9ͺΨ!’Αϊ„¨9€v°}οCF;Θ|XΌϊЏΠ`Η ΝΑoμΐJΥ ΐΗm†κ8 ’ΔAκ kd Γ°¦¨_ΐ μ° ΜŽά Γ›":6EΌCώ{ •gB‘ŠxΠ(ΰ1ΕboS4€:Τα†*T!!lπƒŒ`r(Q}[aƒCƏKŽοΩF"GIΚ„H2!¨…‚` ΄pe,a)ΛZΒ²kš„H=²Ρν—θ₯~9ΜRςν‘ Af1;2€¨­Γ˜ιK!ω ,onvf H° ΑƒΑ£°‚!Γ+ΐ©CH±’Ε‹3jΜξȜ η€·±€Ι“Ν‘ ·’₯Ή—/Mf;2¦ζΗ"Ϋ‘άΙ3£JoωΌy eΆT¨03gžP£4.Z>sή’±TgξδΡ€c ΰl*΅lTͺΠς m(9£H©4=p£©Ί‰f󚀊,ŸŠ΅YΓΐ»ρ+•` «·ρFΎj5©κ nRœ7(ά(ϱ狐ͺπN¨Χ#ŠPX½ϊέηΧC¬:πΕlΰ²ιΎ•νΰ` 'ˆ69 πXΫv#:…ΊuηΦΰ8tΓ…S5ο‡οί™Χ.Ιn"ΈJ4TΞώϊ₯`Jlό ψΆ'»xPάIΗΎ=AJΐgΓ€A•‹πb[yuu‘Z<₯“ŽXΑΰ…U’ 2.9xR4@ 9ΨaΘ4zX:κ(€ ο™›*ΑΣNα@ σ”(£v6ήx’*h͏ž-ΨU;±ch,ˆ€gAe’:Θ8@.$N Ϋ’6’€N αš—y!³^Lž€Ž7*€I:R’Ή“ŠlΆi'EzߝTVyvG8pΗ9uZ– &‘s Θ(ϊY•xb„…V$*©TŒ–Mˆ€ψΈiƒz–ˆ<Δ8jƒtŠ‘:απ€"ξ¬Ϊ˜Vf„;€y€­·–šΡ“n£)°(α*dFYnω'²‹ {;w8pΔ³ΠrΚd₯₯γ u•”m΄aj”N%/9ξY”Z δqζΊμ–‹;Ή©¨τφ$mEhTxWΏΪώ[:Ÿ@#ΑυζzQ QΓPΉŠΠ;αΔ©ΘΌίi1B½jMΗ sk:ωΉq,Ι ΅[Q:Ό ˜ Ά,Ÿd/Ewέ q\³FΚ.{2ˆTβNΟ?οE©ΠCDoΌαF ΄OK3 Ξ ½I$ΘsυcYγ ΁P  €’ ;όŽMQ֝IC+DB‰Dr½tA[Gς vίX»LΠΦ€DβΫ {ǍxAe m8%x¬ΐtŒxε©σŽ:ΰΌ3JŸ“·άͺβ₯“ί~©“}sAΌθΛKμ%±.:BA'ξ~Ο.Ρ›Ό#9πSμ"ŒΘοπ`δό°γ<Ν'Ξ΄Dj€ŒNΥWτwAd@χέ{oq³\_Ύ@Β’“™o‘«oΖ‰‰κΛo1Ÿκε―Νόy]:ό·>a=JAς3_Q$!LyξK؈Xΐ›-OU ŒM›b΅£xP°‚εΚή―2¨Α69 J#αά‚„%-ΝL…%d!™Ž .¦$LX±ίοl˜Ό0aβEΡ`Οot˜γρͺΪ)W₯|Aj‰=| vζ…’0H [‰€Sρ`b[lΥκΜ+ωl‹6BGΘ aΕ ‰Xmt#Lb^+ŒyΚ™΅Θ‡Η1z‹:Ÿθ#́ 4a‚d:ϊ!6ΐŽl‚ΰa²+’ΓΛ0*¬Qu2“šL€A2)ŠGв U8ε@Άʁ‘ °€b9KYς–Θpη‡Œœcυπ$A~Lω9”§lΒ$)f ²ͺ4H=μΝiB¨'!ω ,qjŸj H° Αƒ*LH.\C‡ #Jœx…‹)yG±£Η σ–Ο›·p!Sv< hŽΛ—+²©œIΣcΈhω x‹ζP]͟ Μ:τ̘#Σ€*]*0΄|VΘE;IΞ'S•nΘZΰΔ ]†4GΆ¬Y²3Γ!Λ§"κΞbC¨Qck @DΠRAϝ "Vyψlβ΅*R{gbdΙsΆ‚)%Љ€)Gη.φ4ΫΤ*O…ϋZβδΉZΖP‘SσηΠ£KWWΦ€iΌ{§}ΚCE<ΘH}\<⁌ 8’ ςΗμζ°Γ―Rρψρ‹^΅|Bt©ΰΐ-ΩX 8ξy4ί{ΩΥdŸ6ό‘hŒ‡’©Cw€“‡ΰΈi vTb}OA¨ΔŠQ!U„Œ@;ΞΥ4}˜’bG δOεcd>δcAθάαࠣԎΪEδcH@"%H(‚Μ(•¨‚ŒkK δδ’ΞRTV™P›υ­…ρ@s„ο  4d–i@ XqU›nZίu?Υ)αά…*ΓωIP8*@Š”lΒ9’ 9•2ΌδΒ‹*sΆs’€‘ƒ ;ˆE(ςU‡εS BΓ‹†V8u‘€θ(&ι`:%‘»Ι’Tδπr4Θ€ Ÿ¨@ *용¦ΕΫQC&%ιΝ¨ͺδβ 9Β.‰Ž2OΉ@K’Y*))PC̎-/h0.»?QΩ.§ρF;Π†wDζοΏ… <44"³¦«;«­Β39I†ό" ŸΔπR¬™ibΆ:vμqJŠ8<nO|ςD”° GeΒ:¨Ι3Sτ‰<τΧ3M‡ς<΄Bι ρλΡύΝ4BͺδkνΣcY'3Υ©ƒnρ$ˆ5ƒWc―Πδψυ»:­ŽΈσΩΩ&ό4Γ C.άq§ύ4:yκ5ή±Κέs8hζr7ΰhλ=τͺHόΈ‚NMN₯£΄όψ¦‘ŸŒΞ&ΤFyωLχόΞ(ςφη˜‡Mq.ωzƒ:Ρ‘{Όaοdό:δͺ£ŠŒ€Πœ~{ΰŠ ΜΆΫΏ—,Έ€Ρ ykρ ΗΞλ"2ίτρKξ€*ŽKobζebβ€"kŸxπεcΎ T">μ0cΘo±Β oœ³~σ₯Ε¨Ž"‘D²πΗύπΗP"‚Πρ– 0oΉ[J:ρˆ‘! ΄ά·Χ β C°Θ#(ΐ ΟyW‘4…HΒ ,˞ ΑςL ΘC Άδΐr0εQ%°2ΕΠ‡ΈβkjFŠt¨ΆCβ› θŸUΩΰpRLœ }¬,|@‰š ΌαD/z3Aΐ5šq"νSΚΨ\χΖ/F m‹GλG.¬a|œ?’ŽΎ],‚d Θ ·GDφ‘{ I°θΘԁρ#5»Y%Ω‡–KJ?SΠ6yƚ€ƒt˜ ₯ެA‰¨Β˜š*γ–F/€vnœ₯‘ tμΞΡΘ₯.%Η‰ cxΎfΆRΒ0 C™‚€Aςΰ+˜ šό:μ5›Δτ£AΤ±ͺ#°œ_”ζΌ*υ q gA8§xΖμ’θPJ—νL{Z2"μ`ΎόΉJyΞΞί$h8ΡψΛή)”“Τ»ȐχΪ1!Ι/,ͺ1„°cD G!ͺ·š©b€ΡLΫͺ” A”’Ν >ψ•H]JTM«Z4M'Ψ±Ο@Δ#§%›;ζ1\ΐr”jHΠ1¦ΥvΠ@Α” 6ΐ°ͺU©ΊJ,㫨«@ΰΑ՚|ua΅FΚ QΠ«l]ΚVγZQΐY+A ΓWΏτΥ}±ΐΚΚ†RHdηXG= ‚XΕu Λ0¬@ζϊX4ΑM¨Β@4+œ€„• νLςQ{ό. !ω ,±bcp H° Αƒ*\ˆΠ;vζβΥcH±’Ε‹ Ϊ#g€9‰CŠY±7ζΌ‘³g―βD’0cŒΝ€•”δΪ΅”Ι³ηBu55 §$CK|*ΕΤ€ ‘αΒεά©P„₯X)²«©’«pE_6ΜJvαV§]U!§’₯B€ζβΚ- 3Ÿέ»xΑ­އŠ*x¬U©s‘άΉtGβ]œ/ˆGΩrππAΩΗΰbΞ=l.qΖz C‹ž&BΠ-@”Ψ°ρC rαΎ­SΘ™³η‹irλήέEDlͺ•·qd‡o| ˜IXΫφmŠ,dˆ>]z†jΨ:‚„ϋhxΛ9‘N~zΝ?kΙ’¦φπ-qςζ$‹!Α+O<‰tB[zˆ­—Π7&˜ 4€ρΜw€ƒ V€ƒL2Υlc‡ˆPsκ¨cΞ3 ΤpΛPŠάrͺDγM8ο4G‡κy8‡‘ 2”€ˆ*PΈΡN4α0Dc™ϊ Γ 2½@†α@Sδ†Gvf㍒S dΓK4;"γd4V™e\[’'£ή¨&/†N8Ό¨’J.*‘ƒe–mΦF:y€Δ; 4ΠD“θŸGΪ!AΠ8€*ρψIG­©ε–D†d £L€Ά‰€ε€Θ΄Sͺ †:Πδρަ$Ρj£ }β€'Ιδk’Ά†#'&πΪλ±Ο+P ό°Τ§ώͺ4\zjYŸͺj«n`E<ͺFΛͺšΊ}Šά‘Ξ»žuψι&`‹/]κ) €"οό πΊ8 D8ίœΥΆέ’β¬ΓJ­‹NΉVP n¨ΌXΚ‹Ζ;7―n4 ²Oΐ’&4&Ÿl,«δψ@ ™ΊŒ²sŠ Γ6χ€ž7ݎ"NΟ>;wPœCtΡl Τ±ΌΣς!9§ŽΈ!5Υ¨:§ΚΚ\Ο:)9?ΜμNΨ]7&:{31ΪΩ4£€s/άUOZθ缍wE“"ci.ww‡θSfΣ|ν@MŽŽΉΖΣxεΜ±ΩΫ*x³9ηqΞι@;P ι™~ΗoXAœΝz燁γF$‚P  ‹€γχνnΚΞ‘¬@Α €Τ.<ρq¦Žξ‚h@Α#‘Τ½f‡M‡ςdDBJπΟo?£\Σ“‘Αc€d―ΉωηΞ*ΌH ”€3ϊν΅εα€δx8šΏΙάΊΤπ Ψ=4`-όΠaΪ…ŒJ0.σͺ—8φ·½Γ ƒ_Δ² χβ"0E K„Œ %ͺ΅5r). T… γgŽ‹™k†4δΕ«xΑAσ†^φΒaρΜ‘2 DCˆ«"!ζŽΒο09ΫY;XΓhDŒNτa\Τq4(n†‡yΪǐˆ>¬Ή‰nBΗΧ4@92šƒl3›‡γΊ+ Q.V€›έάȎ;8€oY|’9ηΒΉθπ‚ΠP>Ζ…k„ΖΡ%δκS€"θD‡Ζf₯πΘ$τΜΑŒ‹ΰ‹Gέ1q$ ΡAΑvˆzδΐœnΙ?s|BgΡΰ%β4§N d‹€Œ)nΐ»@e'ύ  t„δFι:)  b ψF9ς .ƒ™ ‚ΚΓNσ΄“<¬CbžužG:φΜ'>α7Τc6J›H@κO( Πkη!ω ,ϋbσ h  Αƒ²cg.^½| #&΄GΞ9r!JDhΟ`;oΜy#gϞƍ γ΄"’\;“(7j ndƘ,I0 ΞΰΜpα\ΒܘO„ˆ^ΐΩ|Έ±#B Yς$N9x¨ΰA†άΘ—VQξπΡ£‡]·•;‡Σΰ·?lόP‚f›"3΄U’Δ_%6θn»‚Α … $1€d1΄ωΚ™B¨)gεr³5^θ&d™F©ϊ΅m[[(nΪACbε²fΠFΆ5@Ζ›dw ¨Š&{vΑ\Ήx₯BύΡ·|ΘxAγ₯ŽŒ•pΖΉC-4dΙ£A g§’š#½ςR₯*W4ίκΜU΄h½YoγΙA‡ŸP]Oί!ω ,Ιj@h H° Αƒ‚ ΐ°!%ϊ ’KH±’EƒΝΩΘq8*r¨ΈH²δΑsPž³c>|ό0IΣδ7 ά`pβΔH%6 (©IτβΝ Τh@ΓG‘AΊ©V΄κΐ`nΐ †GG±J– Κ­` DΡβ1lΩ· €9PCΛ*TrdXξΫ·XΟ@8Rα’ςfΨ―ItЍΘFΩ@Ά^φ π¨j`4Η&ΑπΘεlή E˜4QLTSǎ:pΡΘρςΖΨ5Ρ0΅6G|βΐ§½‘Cη›β'ΙΖ‰K7`nω@dΝ/ΪޚΊtsΑg§X)vbοΣ OqGppΜΏ‹g_r”δσίιΧά¨pώωϊY΄Ι}₯ Iο(€"ށ ¨‚7κ8αE .θ:ω]h)h˜|Z„„†–Hˆ"ͺC’Š ¨ˆ;#Aͺ„H‘‹ήXΠP"N‡>”£ή€Cd‘A@ .Ι€G2φβ” γd σΘgc‘Uֈ₯@ZG<<>8¦* ™β˜μXaf<^ŽIe›ήΤ §œyΈ#ε”Ή„Mš_2Ι熨ƒ^‰₯œwΨγ( !ζ–¦YBšΞ₯˜ς"(§˜zΐ›&κ£§Œ:&8¬ZαΐητΘd oΤ Β n€cj‰κ(I$+P@ΖΊξκ!%‘’«§ι,PDςΖ4οΘz#d,τˆ΅CN #%Ph@F$›Ό!‡Ϊ˜ δ%P‚Z€:hΰ†;¬ͺγ/uc"γΘψϋ/¦Έ‘οljމŽΐ·Λ$; £‘*¦;€ŒΔE’£0J6Œ%:Π Μ :<"œ0 ‹Ν†3­ΚΣE2ξΐπ¬ςܐηΫRβt*#:αhPϊΪC€έΡ<ΞH€h-%01ο5!P"s+οL}c@9ΔW?ψ.JDd`φΰ½ψαo~ω”Ψ—λœc@_ξχΥώϋΔoύ…UT!ω ,ΘcMl H° ΑƒΜΗ°‘Β‡#J|ΘΠ@Γ|1NάΘ±`Ε‹;Š©π#H‰š \iΐ;vζβΥhςδC{,YΪ#g€9™1‚tψΠ’„œ#Ϋy3`Ξ9{φj-™ιΖ (P0ΰΞJ87αΤEjΣ*‚ζΜ”Mƒ•lΡά΅K–¨Y–ζδM…ΫlΫΰ­[W―°αΓ…ο²!¨`G•8 B4½δ3α"  2£dB 2αˆί†©s”„ΣL>PΈa4GXa2Π@Σ"‚ Β:Ή }ΘδCF8€„s€D3:DiδCVΗ;α\ˆ /Ήπ’JŽφDΣ"–/n 28 ˜bς /ια•iι&DnΰΖ;ζΘG2jBƒΜ˜ΡπωηFΠ8ΰ/κŽ7N‘㍙ͺδβ:N”V¨Si‚< DN˜Θ8κDήh@.ΰάwPͺ―J€Ž"­Ή²DŽ Œ"°Α’Τ‘ &;;H€Ιl:;’*,™N~֊€N—yΔsj·"ρ’$4§ϊInDκ:(²λJ)Θ4oD£’AN΅χJλ¬ϋrΫοCθπzΔ9ι Q8Δnς– Gτ‰<¬nΔ₯ƒƒ΄πb|Ά„Ώ€„[iΙ ™»dΗ,Dwΐ³‘:€ Ι7t‡d΄Ω³@ζbΔC Pl+πΠ @ ΟCc€φ­„΄N_3)J =4:(Ν,η’m4γ 8Μ|ΗΘ^{ΘoΒ o”σ4Λ»FI @ρ8Ϋ&MI$hu78κ€Ϊs:Dς†XŽψίά8‹X.ΞΚCS’‡+DBА#s:ଐƒBIλuG Ά ΩΈwδœ{ Μ*Ϊ'ωrπ,£#w:’'-2’BΓ|σ’AΊτD#+₯Ή—ŒΞ"€Šέs88 Κυ,[­„ΣάχΔ•ΐ½τ› B8'}2ŠpΗύΖ2o„―dν˜YάΑ>ΑIN„: Ζά…+ι‘c^ΰ‹;ςΰ€R©#~@TΑŽΖΟjΎ2‘‡U,ψI£Π9ΒtDKω‘ Β@V’Γ ^ ~Ζ tο l— "ΏH Θ¨Ό`*md 4 AΘB‡Eqb* T £…‰!FLJͺϋΕ+ \Q,’Ί0ΪΑ€Gb°c —Ρεδε-y"dΐ­Y$#IIIή+ͺ‰଀!ω ,ΙgIk H° ΑƒΪcΗΞ\Όzω"ζKH±’Ε‹ν‘3@ŽάC‰1Š9²7ζΌ‘³g$Ι—0 ‚[❕po@€XΡ2b̟/³x”Mƒ•[‘κθι¨S‹ΣDΊ₯B”l‘¬«·΅^½§`vQ#[UGߘ1“¦mΨ·3tπP#ΪY΄·\Θ`―߁6ΐ.BKœ<„Ή•CEŽΗdͺi²DΩα‚– CQηŽ=lπ°af[΅jΫΎ©ώ¦ω§:uΰžΣ IŽ6~Ɂ\4oαΜ 7ΧhΆ Ž+9’d 7ဓNΌ8ΜlΉΔ;‚d9h.;R·ώ82μ9ˆEΘFURe άταδ_Fsΰ 7π@s„ο  4φ—I‹8E>d@J8w@‘ΚoΑQWέ‚…£›θƒ /Ήπ’Κ&e¨ ‡U€ΰh/κq‚+²h;J€I4δ M8Π0b48β§γEͺ 9ѝ΄‘‰ͺ䍆.™29 D$2*‘£€–!€ΠΔ“%G₯ƒšΉα€οΌI'LήhzξIR (¨Sδ¨)fΞyθKŸ8Π9>ϊR:Gψx¦₯"e§A†œΎDyδ*IΘ8`4žš:w8@F:κ΄κͺA}K:Βέz‘"@Α«­Ύ”(›δIl±l€ Κ2K‘:P Θ;Vδ©7›f;:hpG:•z[4ό!CΉεΐ¬μ”k.Σ‘/A˜€Δ²’Γ•ΐΣχ:«B8ί;΅P"ΏΕzΒ €ρΨKρͺͺ"³ρ@ξZρΪΗΉͺ’ρ½ΰ”― οԊς­°Έ£ΚnC"ΟΝρ‚σ ΌIΝg Ϋ‚h@Α#ψ ΄Ή°έa…PDBŠΟ ƒγ<"S{[#μQb€<”λ­‡8-χ/&’ζΘn:Νaσ±―θ4©ΑI»ΚŽ€Άό±šDƒνΗw\l*ΕθD£ΑŒΐN ϊq’fn@€6PZx¨θ`j€ί§‡ΚΞΆΌnlΞ¨₯–}oͺlΆŽz¬³ΪoŸμͺ;§ΐB!άΙχ›μπ–-ΕΤp-σnKύ‘ΰp‡8Ύ³‹Θ΄Σ½Ήξ’ΌΒΐΣ›yΎϋ^/¨9=ŒΞύΗ€<ζΖθ\ˆ›σβ€γ™ΛΩά'¨ο!ƒ€{Z„D–9Έ™l|Ω2G%  sœο^}[ΧΖv!yΈν^qpΐ"ζ‘96€ €5ϋ‰ξ…0Œ‘ g8#ΐ…’ !ω ,ΘgJk H° Αƒν±cg.^½|JœH±’EφΘΠθbΎ‹ CŠΨΞ›sνΩσ8²₯KƒΰŽΨ³βΝ  °|‰‘ηΕl ς©€b`NAvϊ\Zqš‘Θάͺt]½z°2έz°‹‹z*ΒZζ@š³iΈͺ%˜‘C°a H}s!ƒ»οZΘ‹W ^ΎkBϊP/‡ Γ9¬<Σd©±AM!”‘Έi&μΩθ‘£s2ͺU3π­te¦ζžύ‘ΔƏ6  Ν[8sΈO/Ν†,Ÿ’ίJŽμ0p 9oήpηΦύ2\ο#H €Ά“9εΜ›?Gˆ’EΘFUR…,άυεΩG†«”Š›x͎X1‡¬4σΨΣ· %™p€„s€Τf9θθχ/δƒ /Ήπ’Š{ρΨ–Ÿ‚#έΡΰƒΠπ’V„sί…‚δxƒŒ""σ`4#’WβEŠE4αld€„ͺδβ 9θ 4cH<π‰8™CŽˆΝDsžŒCN€ *ά&€@’%EV‡>Wnω2L§N˜bΆt‡d€£Nš<@.ι  gH˜pψaΓlΩ2TαΛ4φ hΐψωf߁φƒŸ,ˆπE9μ%τΏ cŒrf؝0Κ cΘkŒD!o–ˆœo»}HΒΜgβ‹Ζ£’ˆΪΑhcq3ŠΔ"†7φ˜£DΊΨ£?Fδ>>°bH©$B6Yb‘)ε‹TNΘδ•S>©γ–\f˜₯CV†)¦—@‚i¦}c6Tζšl’i€šp~Χ&CoΦi§œU©'ww.”ηŸ€ς©e”„"¨Bƒ&jά’4κ(qJ:©p•ϊy)¦†’©ι¦ΕdŠ(¨Α‰J꣝Ίω馦žJiͺxzi«rΊδ¨€Zk¨° *λ€ΊΦ¬«ΓžZl½2ϊ«£Η‚Ϊ,«ΙFΊl’ΟΞ­₯ΠήΊ«­Pfh —ΥgΜ/ΖC.pM†Kœ1ΊΤ“Œ.Ώθ–ξ΅Σ7.ΐ£ Όί&ωEΘ‚z(‡…ίΓ„ λx± M4ΡA2φ–hL&}(’F]θqΠTAΡφAc‘€ρ }Β°!I=x1Ξ2ΛΡΝΙϋ’I(“ +¬‘)ΨJώ"ŒΡH­τgl,SŽBhŒS ΊσΩX'­υ„r 5Θr ]TεΕ Wp‘φΪl·Ν†(β,dΗ8h˜‘vΫxηΝΆ,8ΕBkΠE¦‘'ζ±`‚$.–W‰W`A㉳ΑF> ©ΰE5hXπψγ‰sξxγž‡žWεΖ-―‘ΓNF§„²šž„‘‰&ΠνΆΧn€%*―#„ Ba„Υ0dϋρ·'―ϋςrΐ»λT—FΛβΊΣΈG’NϋΰΓ;¨ΰΠ6OΫ4'Φ[Ώ“GΡ΅΄Jλ«Τ!: ΡQ9lΐ’žΰ D˜‡7”bt*8›Mτ"36pφ <ΖQ–ωo!J0Θa€ppΠ&qΰt* b„=κ8Δ‘Bp€£$ό„‘@@ˆ°§=νi!8"xΓF†?1Ꭰ PE OΈCFp‰ ‘PCˆΘ(ZρŠJΌ’k؎-z±$Oό’ΗHΖ2šρŒhά"ΑΑA)¦ρ‹θpγηHΗ:ΪρŽxΜ£χΘΗ>ϊρ€ € IΘBςˆL€"ΙΘF:ς‘Œ€$'IΙJZr$ζΘδBΤaFfήΠxΡΙN&ς“ζP `9"²•κΰ*t˜ς”ζ`‡* ‚p|r‘™d‡wΨς–§„w R‘™ΜΘ€JM.RPΕ1­™Ht| ω%#]‰Θ€!ω ,―4 !ω ,ΥfD H° A‚ΕŠ\Θ°‘CaΏˆύ2ζp`Β‹ +jά(πJ:bΊ" ӈ#Η“ #˜)WNWHc–,‰²ζΐ,κYωRbΜ…ΕΆ4iR…θ–*6“θ2MΕN—Ζ&ώ,¨Φ²«Λͺ0 PιFL5¨πRΞ€.\Ώ ͺMϋ‹ΰ²-WΩd•θ•㇦*Ζ~γsεJEQlϋE —Ί?˜ΐ›χΙ·+*X(yΰ[Df£Γ–  T=™4ε£+\Ψ8‡ŠG ΡβΠδ#£ŒδlH<ͺ8ΰ<<ς9θXbRβ€C:x³b‹‹…"Ȍ’ )Θ„c£@μΜγ…‹τ8Ο6σˆ(δ(™c$Aθ N8+BαF=Θ@a…Θ@• 9 <ίΐ3O@ i’AlζCF8ͺxγͺά8i’)?ϊc$@¦‰αĈ /Ήπ’Š›ρD“CΉŠ¦‚J¨§Ό@_ΓKΌrΘ_Δ„IάΘ±cΔfΚ}σu1£Η“(%FpRΟ 9]¦œIS K ^Ύ%Σe0a͟%8Ι§B…Λ_%5] ρ‰Έ’*Ό”#‰Q)Σ«S(„Jζ±˜>ώ2°μαX¬sΘ‘bGW_Έ œUhυa1΄iψΨλM89W@΄γ/Κ?”Ψ°ρšmN,X0Pa²BQ‰Tha³Ξœ=ƒώ,:ƒG%ŠQ±‘Δ 9M,Π$ΫXiλŽ ΫRοίΌƒ[’ΣργG ε[ž―žm†™_θ&d™F‘Bf€œCQ˜!ͺΦC‡’ΌΒP§FŠ{АXy‡¬΄pδΜ5άb Jτˆκ¨γ@dx£Š7w@AŠ7ή„cΞƒ Ν3Š³Ξ8ΡM#ΞBΰΠ‘Πδ’ /ͺΈΧN4B¨y ­ƒ8κ0£~Π€ /Ππ’V„c@Š…³Žδΐ£ί‘ 9Θ  27‚h€ŠΑӝ•T"IN8 ’CŽ7$ͺ’‹7δ°ψ9ιL‰dCζŽ—α@Ν’G9„ζιežv”ηŸ€fΩηIu:θUͺy(S‚.*Q@!ω ,―4 !ω ,ΥdD δςλX±ƒ*\Θ°‘Γ‡4x°XΔ‹3B”pε±_ƌ!ΤH²δΖ+ηŒιϊELΨH“0aF0Sξ›―•-_Ζά‰1‚zVΘιe €NžH²Θ§ΑΛ·dΊ>Š΄˜΄*Δ ΏpΊ€ͺΠ",‡\­6L!P…^ΚωΒυλ—a έB”+’Š»*Θl“c†‹ί‡’ΨΤΥHφl*|©ζΔ‚… ·4ά2A` –1ΈœΉσζ ϋπΡΓ‡i]Άi²dIΰjš ψYζΠκΧΈ[η†­[·ŒΣ”όd4ίͺU3πMαΆΑ;•HWbC %hΘy[ˆnΐe~ š3W’|ΒS‘’θξχG ε›?ί9†U †\ΆlΉ·H G`‚L&£‚L8χ)*4Ο„ό‰ŽB객PΈQ4HXρ2Π@ΓΰBμ8τœXζ\¨:dˆŒd„CJ8w@AŠ7Ρ4Ρ7πΜc<δΐΘ_BαΘg/Ήπ’J‡νlΡ}DΪgδ‘%™2Ό@ΓK:dX‘d8ζ=„yWb™9Ρ,ιM’Θpi€‰jξDN8ήxCŽvNͺ’‹žiΦY’w–Ψ£ uν‰(L!ω ,Υf δςλX±ƒ*\˜ ΑƒΕJ(Α!D„V,xcF!œθQΤg˜±‹~*˜_#¦ γ)T˜cΏ„ε4 LbΟ„)τ°¨Α₯¨Ρ”*e…ρ0‘‚S N+@Ν¨Ηΐ4=–²Z”U“@ΐ.|ςlX΅mίHϋmaΫ„Ω4X1ηΝ[8rζςκMhœHυ©Pa\4»δΤι5·PΊp«πξέΕ Α€l@² 2αίU,‘±@*r¨ΰA†œΔH{τπAΫGkΡ‰'"3πC‰Ώ• !gyb8dω”ψ>’ά†7―οJ -ί$HWΟΗ=9Χ [kG²(ΠLΘ2"…LzxδPάΤƒ†ΔΚ;dΝ ΉŸ4©pw@AJqQ—2ΌδΒ‹*ρ΅ gΖU‡ 4Ό€C†ΤA(9ѐƒΜƒΠ ƒ`4ϊ}DN8u}ηΝ‚ͺδβ 9θ€ž'†ψ"R"!ω ,Φl (LΨ/ƒ*4(‹0, œHq’C"*΄ Ρ‚Ž)z#P“M–L–LIQ–¬Pz¦M“V±¦PϞEŠŽœ:s6)‚ƒ’-š·žζ’Ϊ7PƒpήxϊjΣΫD+ζΌ%—”κDuδͺ0 Β 8£=%«’-rh§z₯Θƒ‡ »o΅" κ£―>ήΖUgσΗ%6Ϋ@σνά‰JGΆqD š¬k Ρ|ZΎΟŸ „­©9%$АΚD YΟŠΘ @qΪ+οAƒφΆ2αH…»…”QrΰΠU ηΩ―\ΌT͎-(σ|ΘxAγ•ŽŒζα %„kOhΘ²Gγm“\8­δΘy‹*—7rΚΫtώώښ£!ω ,―4 !ω ,―4 !ω ,Γ.X¦ H° #*AžΑ‡#J”ˆPaB†'ΜΆbŽΗsΐ3§±€ΙˆA~Iς$Η1ZΖΘ²άΙ›8 <1&Νκpr€Bτ„Ρr*-Ω…Q£DηPΧδP*Z4HP#ι―;xH@6Α *R©ήΌ #` Kw !=`θEp"ŠTsUK²ε%ξ―Γ~%^\g‰(Z`πΥ’6°Ζ«Z&ƒ)P¬s1ž?7.ΩΩ–ˆΘ’ϋV^{€ΐ ",6ϊ«±Z(\Η¦πš‚Ί . d{ CΆl‰­΄˜/_υ`˜-NtΰΐU7α‹¬ηΜm3>ƒiΒ•ͺc\ νΞαs›?l`νΥ<λ{cύ)Φ]Λ hΰ8ύrL6θΰƒF(α„Vhα…f¨α†vθα‡ †(βˆ$–hβ‰(¦¨βŠ,Άθβ‹0Ζ(γŒ4Φhγ8ζ¨γŽ<φθγ@)δDβ 1Ώ3ߍG&ω‹1ΥTc€4Ξ§ 1ΥlsN2ΫT£KσeYŽ*w ‘A3Ό!#&œ °<ͺˆŒͺp€ΐα@Κ-d@,WGaνΠp@~΅|CFΫHδ6α€+TγΫΈΎπՁ\`’°ΐ$5ΙΙMz’“ š$Ύ.0L_ά*W©JMΰCυXΗ:Ξ±ŽrΘr–먇Ξa]β2–΄τe0q ’|σ˜Θ4f’ΙΜ|,³™ΗΜ‘2•‰£€!ω ,―4 !ω ,Ε.U’ Hp ΉƒζΐHΑ (ΐCW°’Ε‹3jάh‘Ήl+Ξ9η<Ž(Sͺάθ€-cbŽ)Ή²¦Ν•-WPΩy’η˜ :T(Ρ£F“]Š”©›sξ„Ρ A‚@- ¬`@«@^ €έΪ•lΨ±_»r…JP*ΐ”-[DvΊ… # έΌPqή‹ΰ„0ŒiLqή–G AαΐCaΗkVΩ\Άlz0„‘eΛΦζΣ=’η.8@ΦΘςεΛ1κΫU―τ@Ξ/ΫΈƒ[τ¨ΞίΒ“ηFΘΫ7pεΚͺkώΊυާχ~=zvκΟ»ί–^|rςΫΓ›ίŒήωϊΰνΉΏG_ύόΗίΣί§Ÿίύ~φύΙχί`Ϊ7 MυΈX‚ βgŽvώ5ΘƒBEa…ˆ‘…n˜αƒεyXΣ…"’Db‰,uˆ’‰*˜"ˆϊΉ˜Z‹2btbQшcŽ0FΈγp:ώhPBbΧ£€Ey€?ήX€“BBΩ$‘QR9ε’Iς!’YJΉ£—8&XŒΕ”Yf•Kš©&™WniŒškΆ ^1ΖόVη›gθyΗύBŒ1Ί$SM5 sš†<Ζ7±Έ'„ΈT³Ν:Ιl“̝oB‡¨’Œ6ϊ➈Θaΐ7ͺδ„Ιπβ§0pΆκκ«°Ύšθ’ž~ŠP8Έ”s‡ τϊΓ:­θ" ž±k¬¬œ”ž…#G'­πΪ«ΙΔBΜoΗf«m1³vjŽ£‘cN8‰d J+½j@Š.±4Άν»Εv[«F‘CŽ*+¬ΰ <βŠ*„,±π\Œ/I€ ΒϋА/8κΜHN8α¨sJ`ΤPC½€β†±¬j°ΑΆˆ0ίp† €Γ"9ސγF$·άPΓ `ΌI=±θ‚‹0@-τΠDm4ΡΆ˜ 5ΐ0’.ΟN4κπšΚ)qΝEA,Š$’$_‡ φΨb—MφΩf§έ 0ΐpCaQΜQΐ·)N*  ‘  1X0A„nΈα`€ΑαŒ7ξx$@\'P!·J0pGΊ€rFΖH!zRLQΖ¦£~ΊιR,ΡAͺǞϊμ«Χ.ϋ΄-—–€y4υ(‘ nάr bί$ΏMςΜ7Ο|8:hΐΗ7Ϋ,οόυΨ7? QtΕNrGŒR8Π@£w/‚BSFͺε€ή,Nψχ.ώFv{7€ΘT‘ʐƒ"@j”‡wΨοˆ -”Ψ-£Ψ)zΡ [άβ3·¨‡<Β 8 Œk>ΓΒl|p™˜7ŒςE#ή`aGxtwˆZ^V㙆1 ‡7({©γ€τς2ΰd΄‰§Α" @.r!θp>–₯Άx/΄ˆ¦ƒδd€bυ‚hhΉβΑΈ@AsTΈ4ΰUeά“"pDξ±^*ΐ(H#™°#ι '©$7€€U’Žζx‡ ˆ#ͺ˜_8NiI(8`β`γ•Π!? Dƒ§l”θŽM&‰„T„†+ω 4Q—hšbyΜΊΑdH4Γ„4:`΄ΜΞ½ ŽmrΣήΈc.Β‰@ ‘&šΌIC²‹T‚™IŽHn’˜Α²Ÿψ%ϊ ¨¨eD:lΰ€†•U7Πϊ$­B•e§*@Ώ’ ΜC<όʎj¦μTGJ΅ΙNd˜~=MσP4@§EUΗ°ιΥ=65YEͺ_;TU¨CžIΒ'#ΫΩpD’π [01ΉΩz“<ψ$<”Ί"tŒ’”]τ+:pΐPΫΎ†Τ@Ε²zΧ@ v§εkύόڎΐ.σΈΌ0ΐ ―ϋΘ”žΦ―9e,-Ωρ17χ•–§_ίH†σ²~X'j‹€Ž@ tΝ’U ΐ‰rŒVΠAυFK`„e΄ηX‡<Ϊ€!ω ,·.c’ ¬A‘ Α#Ω (\Θ°aCs#J„θ°’Ε‹3:< hŽGcVd§±βΔ“%Sͺ\Y`Ξ-cb†|V¦Ν›8sκ¬Ή²§O‹-©Pq’¨ˆ.f€IΊT)Σ§N£6jΖΐR«U―jΝΚ«Χ­_»¦I”J‚³ 1‘|W³Ž*h ϊοΔ’‹o˜gž7Φ8 £Λ+Π΄"ΊθnPwΪ©Ο§yΠ–νχ&Θδ2»*ΌΌ‚vξξήτΫΔ­K,œπ’Kθκ‚;ςα)Ÿβ†¬³υ―o’‹*w$γ άΒ`OŸφ­D`Κͺ|ο7τΌΨcΊακ―ΏzCίpC5‘kΕχŠρΌM4£Φ;^ώΐ£=N¬‘’SAόt·W˜nΧ[ w”Χ?ΞNΤEί G Τiπ;άD50;Έ‘Ϋ¨[έLxBοhn °B44`ƒ;‚4kΘ_$"ψ€¬C¨C!™ƒ ΐьlδ"ŠΘ—ΑΪB`<γ‘€(@ζp†@Ό‘a+LQΦΨρŽxΜ£χˆšZ˜@Œ0¨Α ΞP‡ 1. d ΞB‚Lΰ‘¨$'IΙJZ’-–Μ€&7ΉI xΰ,‹9AζP€…΄D ZΈ©–ΊΔΕ•w%]䁡Θς–―Μe,u9ΛΆtΰ“ XŒ¨@JS&† ZˆB2=0 ilγ™ΠŒ¦4§IMM8 ΤΜ¦6·ΉΝi|4 J1R–d&SΟψΖ7Κ±NuΊσπŒη;€@°³ςΜ§>χ Οi˜€ Q¨8KIΞc E( Ɂ α@γθИΤ^tžτ €|’nAκx΄"AΠ"ΰu¨ΓhBΟ@–Rΰπ0:ΐ‘τΨT?‡O:TR°CbNR;lJΤ„@4‰RiJ’ϋ CP9" T'ιηͺJeΗB€ ±ƒ ΘC<&ς%“vυ¨9εQ4ŠŒvœ”iΜz :+Œ₯q}Ν;€€Qˆƒ¬y•k. ”vξτίΝΫGν^ώΛδε·ήόa' |ςΧJtτQ– ‚κ!ψ bψ5Hά„‰υ7 †yh!‡ψ!ˆ.x`}$šε‘)*U!‹-"₯‘„1^΅β†5&υ"Ž9ζ4#Š=ϊ8ŒA’΄#Eήτ£ƒI !M)"‘Q^΄δ…U9$Ybt$”]Ziβˆašt#’eZτ%“iz9&•m>t&˜qF΄&–uχ&—yΚΉ%š}Κ9%Ÿpe‘z>Ι&’‚*Š'£†ξ (’s. ©‘ƒNZθ‘—Zχ'›f j œv©£¦ tgͺ‘2gž•>Κθͺ©–Ϊi¬¬jͺ­—βZ«¨–BΚ«°Ÿ;+°²R*ι¨}ϊΊ+²Ω^²I–*νpΜφθ+Άš6Ή*·Σ–y%Έ―ζ+Ή„y'ΊΆ9.»qžYš1ΏcmάΊ;%½τ#L5Υƒo·ήšhŒ1Δ3Μ6λ$³M5ak΅Υ&gL5Ϋ”£J;Π /Ώ,±ΎΎ1μ† h`ΐΘι2πΔΖV`,ΝΈ’²Κn$ 1!—$~Ίl‚L+* )ΊΔ"\»=šfΘi|C’@δ”SoΊΌ"΄*(«ΣŠΛιbθ4ΤR“Ž7䜣 ΊΤ‹ΠάM,ΊΓξέxη­7Ά£!’Αί„dŽCΩ‘‹―tςXlΒΛ:ΌΌςΐ{Wnyε}€ &¬°< <*t Κ- `ΛΫIƒMωε°Η>œ/IΤQaά H$€γΠ‘rs$§φKλ<Ώ.ϋς±Ϋ"‚ZpC©C5§άq3‘΄βŠ)Έ€>.δ—oώωθ§―ώϊμ·ΟΎ'DΟΥ Τ`½δ¬p 7kΰFk˜ΐ"P π€L ¨@Z  Œ '(Α vΐ]ιΚ 28„ƒ ·Π€ά@Šl€(ˆbΠ‚ ΄π….Œ! g(ΓΖΰΈ€hΘΓφπ‡>¬‘<ΰ”h s(€υΘα@DΰHΕ#ήΘbίΨ³ψ .bρ‹^ #΅Έ'8 bLγΥΘΖ5q%p‹[x’Δϋyγ ‘†:Έΰ] δ7ΚΡEBrˆ<€"yŒ”c‘L€$#IΙIvq&xΙ`2‡ά+ ΐ"J„Δ,θP¬`tt°8šYAfIΛΐ!«ΉE6nΑK]nζ,κ@*WΎ7Ήμ%/wYͺακˆ<ΨŽΌ ΗB¨£ŽvΨγυ€G=ԁŽvLD7‰ΙΠ u³9θ  Šϋ±κ!ͺp€ Θ15V±Γ ΈC:ΠaΟ{†Cΰ…υή™ͺMΐ­d¨©Τα"ν:Όα@γ½:0(Έσž01P”:δšπΖ6]ŠŽ<8€ Ϋ )£β‚Ύ£i. T2 whK]Š? 8 ι0*£H€Γ•LEŒJ΅Pή@(2°ϊΥ<ΤGhΗΰʚ§vXa₯3u)4“2•π9 ΚͺtΠ›p:˜j^`3„ˆ:έW”’cžͺh_Y₯ ¨«„h@ΚΦ<΄°“eU%€–oU„; Ž~”°κP₯LΛTupΑΔ ­Faκ Μ’”κd'D™ϊ@‰5ΐPUέšΚ θ`™ϊY^tΆOTύ1³ΊΥ‹&–£€4 ‹ @aΌYU)K―[§k:ΐΎco›a2•©ρ‚OΙ1]—ΦXLΔπ0!ω ,―4 !ω ,―4 !ω ,.}Ϋ d[A‘ A+ΐ‘3ΐ°!Cs#JtH±’Ε‹3jάΘ1c6sBŠT £Δ“;ͺ\Ι²eǏc΄Œ™9f΁r8sκάΉΣ₯ϟ@9~€Bτ„Ρ€1£”ι¦PŸ¦ J΅jΠ‘TN$ΨZγ€…―_+€ ;Φ‚X +0Dk@­Άnαe—ξάΆwλβ}k—ο^Ή~υΎQ `( ZΜΈ±cΗV#K6$”0†£Τ9π«³ηΟ Cψ%Ή΄O £`ΔzΓ°0ŠΙžM»ΆνΫΈsλήΝ»·ξ—+a° °cΎi›^ΞRΆΖπΜ —νΩ liOn›Ήw ](’η.[Ά,8Ιςε 9χΩίγsτΥ­Έlΰ€;'e$aΓσ|ςxΡqƈwQ 蜁Vτ Cκ,θŸ0F¨‘E 6T‘E b8ΰ†$^τaE!fXβŠZΨΰˆ,²x"E)Βc‰3:Tγ{7˜cC;rΧ#Ž.ŠΘγώΘPΙ!™d‘*: ‘’0ι›”RieoXN ₯]Ζ§ε…Q†ωݘ/iζ™_ͺΉ&sh)δ›ήΕY&₯Ω &ž’ιι&Ÿ‘ω9' }Ά9(‘V Ϊ$’Ί(£U)z%€‘::)₯AIΚ%¦™ZΊ)§?iΚ¨@‰Ί©‘z:*ͺ.™ϊ«-Ήš¬±ͺz*­+ɊΉΪϊ*―ιz° Ϋ±[²Ιϊ:+³)«΄IK ΅Y;!Άi[ ·Ω:»+ΈέŠ;,Ήš{,Ί yΛn‹ ’Ή'ΉξΎk@½οβΛΎθςK―ΊΛΪλ/Έs[0ΆS›0΄ 3Ϋ0²1°σZ1Ӛ1¬³Ϊ1ͺ“2¨#sZ2¦'SŠο·C °r»~λrΌiΞ& 1ΏcŒ€JάζΝ9bL5ΥΓsΟΉ³.ΔT³Ν9ΙlS.&M3†;;]Ž*w ‘A3Ό}τ§‰σ6λΈ‘‚lοPN+ΊŒ½ͺΟW£K,ΝΈΒ6Ϋw$ 1B_J7ŠώύRΜ/Ίl‚L+kk@ΚέΒΘύ+«²ςΐTκθG£ΫCŒ.―(Š *„χΌœV~ω7™k䱬³ ΣwsΒK+n@σJάMΚL*m–§ΑzJ›7γF+³#:2λπς 1‘#ϊlΑ―_6GP°Β|³6ς΄Η² 1§Kξΰωθ§?›ηΔ}ΰ"¬:θ R up²w+αΰB .wΣ…ΨΤGΐ:Θ&˜ΐPƒΜAHG…`2†0"{S*’‡8œ γƒ ‘GHΒšπ„(L‘ ?X Μ5€Ακ`€…Δ27Έ 2θ†u$γ@ ’‡HΔ"ρˆHL’—XDWˆ@ ‡Aΐ Tc€λY& §Πΐά@Šo΄B¨@&@Ζ2šρŒhL#Ώr ¨ρpŒ£ΥΨlRΤ‚JΒ¬DβΠG*ξl #H€"ΙΘF:ς‘#xΐ,ΙJZς’˜T$ ,€Gά€ Q˜oH”HΜ! o|A΄olγ°Œ₯,gIΛZΪ’ HΔ+wιΚ^ςς—Ύ &0‡)ΜbΎ•ΣHA–’ˆŠΞΤΒk6Žpƒ‘J\Χ’x(ͺˆΗ½ΤAΞršσœθL§:Χ™Ξ† „(π€‚(?4ΨσžΑζFˆr8ΐή¨ΘIb„=„Τ "y²1†šBT@ŽM„Eγ‘ΞB7Ϊ‡°ƒ6TH#4 XA :>ʏΪpHιΘςΰŽ—nΣ^,QP ˆ6d 8m ΐ‹l¦„›A݈7ώ‡5©AG.°ƒ‘ͺ*A&@†tότ’Xε;ξΰ€@ΜΓ¦` kFΪa‚6L«Z£₯ Γ«ULι\9 h­rέkET€#΄c!WlF7Δυ©Š΅ˆ ˆw<$°‘uΐΔb6³ ‡ΠΌκ΄‘(E+YΤ6d&eνgAϋŽEΜ΄¦³-:vϊ p€£΅eΘP‹jΪΣΧKu@S{άNυμ(ns’UΦΠΈΣEΗfΦa7Έιhλ[ΡρέζŽδ-opϋͺŠζ΄„=;ή›Yt0Φ Μξ;&[YϊFV›U…w§KΡ σU―kUKFΆ€Vξqc €;€ƒΌξΦN{ͺΰΰ5ζg†“gXͺπA‡][έ*b8Γ +w[c†°Υ­pEκtΥQWτκxΊμuoίωΉ!χ]1jΛα$BŸG6 `ŠmD™"Θ@–·¬ε.sωΛ^Nj–듁·”yΜh>³šΝ Υs¬Γ\!nv³ά\uΠωΝwΎσ•χΜη>ϋωΟ€΄ MθBϊЈN΄’ΝθF;ϊѐŽ΄€'MιJ[ϊ˜Ξ΄¦7ΝιN{ϊΣ ΅¨GMκR›ϊΤ¨N΅½κqVοω΄ !ω ,―4 !ω ,―4 !ω ,Ÿˆ  Hp`1Ε&,Θ!B… 6±βΒ‰-Zl¨QγĎ Λς Ca%/2„„2₯Ι‚,]^\ρF ˆ›Ά„σh„ [uj€#ˆBˎ=³Q£Β’JZ°Ξ-(Ο΄8=πͺλ+Œ¬j°² L ͺhUΕΨg`(pA¬ ^*T€°bλΝ°mΫ |ΓΨ6― +Ο’y g@έΔ9βεPΑ2ή“›˜ ™==B‡&CNq8rŽ †C–οΗ―•Ψ@σΞtΓpΠς)QrD6onΒifΈ:ί$HŽηΞΗ<ΉΝͺY_θ&d™F‘Bvš8k(nκA^Cbε²fΠΊ{ΟG&©pw ΚΜx"ξ|Θxεβ₯ |»hυέ–[~Ππ’Vΰ C₯‘Γ €Π “_4ιaDŽpα„Ž7ό©’‹7δ 9ΰπnΝDX ˆQ@!ω ,’2xw ˜Α@Aƒ*LΘ‘Γ…Bœ(±bΔ‹1:Ψ` Ηuhdi$I“%G¦<©₯Λ–0YΚ\IσεL›5cζdiΙ“‡@ž™S άΊuηΔMΊT)R§LŸ6*΅jΤ«P³RΕΊU«U­LΕM3aΰLЁZ¨Μ1―­Ϋ·pγʝK·έ»xνf[A…ΚفζLΈ°αΓnΑ1ψc;tSM— ±ε˘ Η{— œ§Ώ¦ι—Ή΄ιΣϊμg邁ΙΩΪ lUο΄νΫ™5I¨ςμsΈƒ Ο[Οξ ΄‡+_Wζ>ΆZΗΌϊrγΠ₯ΧΆΞ7vΡ=NοNώτχπ³·—_oωΌtκμγv/^½όϋwιΟ†Ώ?]ύ%ηί€qhΐx&Ψ–*H ƒό9θƒφIˆ„Ha†‡^€rί†"ή‡a‰ς‘ˆ"{'ΈžŠ.’ΧbŒέΑH£u3ήX:^ηα{=rΗcΒεHd‘?Φw$sF.yېNš—δ~Qe•™5‰e–SXα–₯i f{]ψε˜—‰‰ζ|e6Έ&fjΎ9Ψ•rΞΩfˆu²™’y’Ή'•}"Fg uΕIθ\ƒ*—‘ŠΒ•h£o1 ι‚mž9ι’w^ŠΧ£—J:)§Ÿfͺ©] Bκ©©•ŽJͺ¨ͺ"šj«ώ "¬±‚§­˜Κz žΈ–Ϊθ©ΏΎŠk€¬K©n ¬’Ύ2[¬²Β›Ο²‡6[ν³ΓZK(΅ΫF -²Όͺm ά’λmΆΨφzΊΰJλΦΈ}‚+TF«>βP°Β_­Ε­ŠΰοYZ¬U@='¬πΒ 7μπΓG,ρΔlΐά πιx€…@Ν„,ςΘ$—lςΙ(§¬ςΚ,«l _~ύu Ad`AΝ8Ϋ¬sΞ<ομsΟ5gόl4ΠG'τ:τQΜFΓοΤTWmυΥX[ντΤ·dν5Pε|τc—MφΩf§φΪj·ΝφΪ}`υΩxταΧ^›£χή|χ›νχί€xΦ9¨0ΤΌα­ψβŒσ ½ ¬ωY9πΠψε˜g~χYJ τCηδx“ωθ€_mŽogΩΠyη69₯Η.ϋΧG ±ΨμΈηnu ” ‘ˆ£T’ŠξΔo@<άn4Ζ7―»¨‚ΈσΤγŽ|υ؏Nφάwούχή€ΞχδηMκȈ^ώϊTΓ쨳/?PθΔ??ϋ!ω ,£ΗII 7œA‚*\Θ°‘Γ‡ 4Έp’Epθ jάΘ1αΕ‰ d#©€IRΩu\ΙRαH“'S Œtk•ΝU·X=ΚΦ²ηJš7qκδi]€^¬p†²ͺΡ4ε|J}Έ‰©­[‘V %§ΞhΝUΆd‰ΥσtͺΩ…<‰•JΦ©U;ΉEΊJ‹x1X0`‘ΒήΎύς xπ^ T૘ρ⽏{ψ€—…žS§βz*DΌ)0T˜Paτ§QŸ6­ΊuκΥ©YΛ~=a2^Ϙ={·ig‘Bιϋ«ΈργΘ“+_Ξά8.=ž‚‡`ρV³ΧU§X€ΗΦ―aƊ‰OΎΌωσθΣφ(x(!rο.Jκ‘ύ !ττιcλXϊhž0μ†gφU’MHδ4Ξψ2Μ0ώ hα…ζ3α„ (πMƒ!•:κ4ax¦¨β„Η(`@‰©(γŒΕ¬DγڈγŽιΘγεωδBωc‘Fξˆd’7.ΙδŒN>©b”RbHe•^‰e€ZnΩcG^Ψe˜ηIf`ž™’™jŠΗf›oͺη™s’Yg˜wz™η–{bΩg•J蓃2Yh’‡™(‘iΆ™e£Žr i€_rD©€‹™ι‘“^Zf§ž’ii¨ιmΚ£©J‚Jͺ›ͺ ‘D,ž1΄’J«1ΔE MτΐΎHXk¨΄»ΐ τR$HP‰•ψ"Μ0‘ΦΘ³„πH$(©dP«ΰ ΰ…Z‰{ΈΑEΤ\ΨyŠ'Γ5'οΌτέ»πU— 9›ΥΤYžΐ+ .ΈόR0Α¬pΒ #μπΒ7Όπp§»AιΕJvwέ₯—a &2a$frΘ%W0YΗΤeφ Wϋ† )ˆ‚Œep_:'dAψΝσΞ?-tΡ MF™aΨ—:Σ΅Š{deuBUΉgKnϋsPN?£ΞΨd—mφΩh§­6ف‹Σ]§CJ%φΥύˆ‚μ\m:rΫ)]7&2 Τ`ƒιSxήzO₯ŽAεΞΰ†΅:”‡˜ψή ρŽ·!!ω ,Ÿ’3g PXa  Αƒ*\ΘΠΰŠ9sn4œH±bΑ1cnH˜y3εȞ1wΠ+bιЌšrλΧ°c˞M»ΆνΫΈsλήΝ»·οίΐƒ NΌΈργΘ“+_ΞΌΉσηΠ£KŸN½ΊυλΨ³kίΞ½{rcΖvƒΧmLΧ0bΊΒΫ.o=±_κg‹•―2]ογΓφ‹Ύ•pΊΰŸlεΡ§α4 ~­CL+ω¨p 7ξ ψͺ ‘ηά—ίkΖΜ‘†*AN€Ά¦ }<¨ΠbdΨ' ƒ—ӟ=?ψ £Ž&’h‘g!χΓJΨ`€hȘ’g+棄8<‰ΓHšƒx4f#„HqD—Πδ#f>υ ƒ%ζσε"‰.Š4’Ι+ΊεbMBαΖ:Ν@Ε9­Π©‹0v†Άe>nRΝP¨rߏ‘™O2­p‹*VΈqŽ.πέωXωθΒ‰.­”CΖ Άž.Ϋ΄ ΝΔ)Ν+Ζ@ΊΩͺΏΤi©œτΚιx€ΥŠε€ΊΌKαyj–Ι€Ÿ²!ω ,―4 !ω ,.}β ˜H°ΰ@*\Θ°‘Γ‡#JœψΠ Es/€Θ±£Η j$(’`Ή“(Cͺ\Ι²#J”θΠ‘Μ8°œ4fΰ4°³§ž?}*΄hΠ£D‘MΚt©S€rβL³&\Ί™ΕXΨΊ‘… Ύ†+Ά,Ω³cӚU‹v­ΫΆpΩΚ}ΛΦ‚ [3D˜gցκ€,(£©°Kš"VœψpγŎKŽL²εǘ'_֜ΉrgΘ ž"`Ν7™ 6UnΈuΞ½Ž=[6lΫ΄oΧή­»wξίΈƒσ>\Έoγ ΧΩ.gιιΏ·ͺW/_ΛλΨ³ηΫžΟ’„ηU/h΅n{φσθ?rΟ§ Bšoiš“^έzϊϋψr―ηύ}xρδ™—ί€g€ώm” 6Έ%A›ƒ’gŸHfH‘wvθα‡ žΧ^ˆ$–hβ‰(¦¨βŠŽΘβ‹0Ζ(γŒ4Φ¨’‹6ζ¨γŽ<φθcv8ώ(δDi€ŠA©δ’L6ι€GI>)ε”TVΙc”Vf©ε–\jˆe—`†)ζ˜}Iζ™h¦Ι₯™jΆιζ›E² ηœtΦ £œvζ©ηžβΙηŸ€Ϊ’Ÿ‚jθ‘ Šθ’Œώ©h£Fϊζ£’Vji˜”^ͺι¦SfΚι§ Ζ a¨€–ϊ€§¦¦ͺ*‹XXή…gΧ|Ρ' š²"HλAζSšΤQg‰{»–έ™ΣL3Ι@Σμ³ΞF ν΄VKν΅Φf‹νΆΪvΛ-΅†« jLPXα₯ξWμλn»πΎ«ξBςΖko½ψή«/^c}΅ΐi”3ξ@οΰ fΒ/ρ‹ΐKΞ7W\α7 mc€ΖoμqΗ ,rΘ$<ς7Ϋ Œς6' : $€˜HA #Cς{§θ<ηD?}υLπa€}α—ž θ&šsΐcŒq`Œα-%ώr@cj0-˜Eκ8€ ζ0‡ "E1&ψ‘ ώ ¬Αζ‚χyoαX ˜ΐΖ Q1D  €€‘γ˜W"uΔƒβP~! ͺΠΒ†, @€«ΐƒ†Ή›‰1|h’ ƒ†s›§HΕ*ZρŠXΜβ’˜h(. Κ‰N,Α¨1’‘Of#ΣΖ=±Qyz#λ$Η9©Žgœνθ¦=ς±M~Μ# ΩΖ>ΕΈ£©ΗEρΔ£IΎ±’a£1ˆΑHER0‘)†1~‘ ]γ) ”1tQf˜•€₯.ςA]Ό2•{Zε+ςar γ–|:1v©/Γΐά“.v©XαΏΤ.σ4L{4SΖ,ε)§I§eζγš* ƒ/“I'aξ’*ȁ x N[nΣNήΜAζ鐑Ώ|ηœΜ™ό@ 6ψ§ ΠPKS ƒ›GΒ› π_ψ‚Γ0B" o* Ł€†r”2…}1ˆαΠ@@n|[Ρί.[Ψ’Ύΰ?€šλ©Η1Œ‡8Τ₯,}Fΰ"Ι€…ŠC-–Ho4”@‚"‘ˆFd"Ί8¨GVA©•{\ŠD>hau †0šΊK(ΈΝ€‹WΌ•=uˆ0ώWΦu/E» _` ‚Zt¦ΘΆ‰mΐ €¨θJ -D‘}TPžχ‹€ήy!ΏΐEh 0Ϊβ‚΄ˆΝG3L‘‰W΄Β­;mHώ7XΜΟΪNEί£Bψ€G=d ›0ΐH° 2Xa$¨@H,p=φΩφ}DυPnO ½ρ] , .0p ` ΘΰΕ+0–Ω/'πλςP$?ϊΥο½"x†4^G‘mTc«†.T‘ŠXΰW%;Cύ<ΫΉ#E \ l`s\."!‡9$LŽp@ސ0€&?/x Ž;0{AΒSΐq,!‡ŠW2›ψΔ ;|ΓxΔ£fθ`Ηƒ?˜ͺγ@ž;ΨέζΝ$~©Α ‰!ω ,£–n| H° ΑƒΘ` ƒ…#JœH±"Ε .XάΘ±£ΗˆΫ hΐ΅ν[Ι“&S’\©²%Λ—.c’όHΣ9+0‰£Ι’ΉžΝ‘Sΐ 9u@“*ύhΞ\.*Ψ-JubSs kW΅«ΧWΡY€)Ί―h§^UȁQ€iγmͺξ© Ήxy†%—YΊΌ€-^mj`l%xKlNQ£RK>ΘΨ)ΤΘ“3ƒeΜ΄£š538φΈΏ‘'ΘΦ-θΤ’GΧ… ΆβΥ;o=k;0nΧξw΄ΗEίό[ ]ΜΛγϝυσπθ^›7{φιΗυžΆ2ΑΩ*x“ώ³ :ένΤ―_ͺ} axςηΟ­/°­εϊΡw•ντΞs Θ_gΠ$¨”y•Ά“ƒϋ†xnPX‘…ΝΖƒ†=ρ7ƒ 25 Dχ•”ˆω§βŠ'"t ΎΈx‘hcE,$αŽΕ†@Z…c‡OΥX€O=ŽXέ’apπ\εfFδβ•” ‘‡\vIX…σd˜A(яh €¦–EYι[e^z$%B³υ@gμΡΉ!™™ιٞ€~Eh– N6‹6ͺ¨›|’H%:{J€(£˜* N‡zΠ’Ω„**£z §μj騣njd§°ήBAΠJλ ΩP +‘3φ «ŸΙjk­ΰšŸB»ΚNsPαμ³Έ‚“μžδ ͺ-Ϋμ³ΞFΛι΄•‘Γ,·QP!Β4ί|SNΊμΆλξ»ι>α@&λΒko»ε0[.ϋ‚@κ«ΰ26.ΏQlΒ4l£πΒ 7μπΒrhΰΖΓ?\@G1†³ώΊΊXΐ•  $ΰCXPAΚ*³ΌrΚ/· sΚt0Λ8Ο¬sΛΤP20pόo” ‡Ό-$›άALΐtΣO;έ΄ΤPOύ΄SW­5Υ\WPΑ>#@·C]τUΜ1Ζ5 Ζ&Ψ"Λ/tΧmχέxη­χήvPΗ` pΓΪ{Ά:’v 7Ό-B(@#ωδ”Wnωδ~Ώ]C sΜQψE―@Αθ°(ψ2Υε¬W.‚§³πΑθΈΒ°:ρ¬SΝ ό"Œ0T΅.|1Ζ σ .( Ž:Π vΆ9ηx3ΒSΥπ­W/Œ.p ΧσΡ'oŒυΑcΟϊοάs@Ξ±<‚οMχΏΏΊωηγ"€ϊμrψ Œ=ύ—ΫήτΦg’³…ρϋ+' ϋα―€EγŸΚ·@Κ πvrόδ·” 2ЁΜ ίΧ?*ΕƒΤΕσ°ύ½&L 'Χΐϋ…Πv._ #7Γb\π†yτ^˜@ ’°†Δaΐ$ΈΓžτΠ‡*Lb5C„,όΨuhEώ0‹f‹ ›Θ“'"ˆ Ϋb »XΑ/B0‡U4’±ψΖ%’p‚σ›‘E(Ζ ²qg#“ΤˆΗφpJΧ‹˜Η+ΪPΘΰεΨΖ(’Ρy[Œc#ηψΘ:*ςŽd€‰- Ι„q‘‘όˆιΘΗNr“•\‘'§…Κ?0³LmI?DN1“Œ4€Y™HZ‚’—ζσeϋ¨Ia:RŠΛte!OxHRζrW΅€$ ‰ωΛ>Ύ™^΄f+νθG‰L"«μδ8?©Γb˜3•₯,ΧiΜ JN!ΖψE2|AŒ`&$ΠΔ€7Η7Ή„Cυh†.ϊ Oy΄}ΐ4ε’O]ΨƒΊX¨υB ΠKBt hAϊŠ|XΘΠΕ/ˆΌVsžΕΤε+gc£€πF5j€&v΄”9%(/W]”T*8iJWΪRƒ8Τ£ϊ#' YG›Ϊ©*πB:2JŒ:υάŒ&9KΨΊ5XUPͺs>¨bbfό„g›–”*ȁ x@†o(T1όι5aΕΔαΰ¬9θ|`ƒ¬u©…|«X#JW»ζγ?P‚ 2k4”CȘkH+P‘Ά“gU‚fUkΥE‘}’δ”©Εηi*x€/|1 _΄Ξ²G@Bp|·υ8†$7ZƒΎ¨En%§ΈΪ6TΟΐ@la‹έ6· ‡-ipˆ#`‚hD&^ΡVΩξΦΘΐž*…ρyΒ:ΐλ PΨβ»”;+ά°h α€­ˆΕ+z*Q/p¨Υ~‹•«¨L[ΞBš³D` –^Ξ¦±ΘΆ± oά ͺ ΖBEkFΏQadc£‚·Z2q Q€jΑ7\˜"Δ0E'^ъ$άαΊΐί–Œ·€! Z@ZΉ>WΫ³ LΚQψ€,p‘δ.{ΩΗυΐ…&pΡ‰o Ϋΰ2—ηe6»yΞΝpn³ί ¦a—mΟ»rN–3™₯  Y"TlŠ@ϋ9fˆξs’Αφ³SΟ•‚ΥΐNP2₯]ΐΐ΄¦3 Δ ΣΈ@Ί`† ˆzΣ¨ζtͺWιžUϊB³/€ί”΄­νΦcΑ3€Q―{•$]ΥHF3ͺq―bϋbgΐυpε Gͺ ˆS\η:·μ;+κ 9 r¨‰$nΪԞqZD7ΊrS Ω¨n^Θmn ΰ @iΑ;βρvΜ[έ€‘7;px£ymβ:ΰ!ω ,»–X€ H° A :\Θ°‘Γ‡#:aΓ‰3jά8p›3Δ|30²$Ι“&S’\©²%Λ—&9|‡Μ€dζrκάΙ³§ΟŸ@ƒκ”i0hΜ]ΚT£9dπR§©Υ« Ν%Σ*Φ―VsB•J¬Y’ζΠ₯3€ΜΪ³pŠ:5݈9ΥnEw·οÜΠΰε·°Α[ +¨s,αΕ†s¦Kw§-9Ύύζ <8³ζ•½¨ΓμξNtδJη΅τYžwX)λΪτ樫kΏ>{Άξέ’‘iϋχםκΜυnmόκNΡp7ΗϊάΊ<¬€›ΆΊpβ—Ή/νY;”v€ΕΛδ }xπκΧ₯jώmόμFͺλ}όCYwP€χFΥ©γ ώˆ`NεA ƒU'‚ό±C‘D $!>‘@ρ,€*!β5"A|)fΰ@bŒ u(P‹Gΐc ŽŒΝh†ς#):<ΒƒdA:Ή`‘Gβ%;”€D)β€δ$ΗmAΩJ»·Ω¬pΐΊμRp<άς”, ΜΖKΊμλ“θ‚@ΕΏΟQ@Ό>aΈβ:KΏ+°@ύώΕΔQΜqΐ7Ϋd¬ρΖw¬q$‚1Ζ—¬ρ4&P…ΓΤιl6 Γ€ΐΜ5PΐΑΝ8η¬σΞ8o°ΐ(ΐσΠ;ΑΜΐΐ2ΔΦΒό/ΤpΐTWmυΥXWm`υΧYwπ ΜΌ΄ΛΎ:MΕΜZΐ`±.Έΐ-wάtΟmwέΈΌ‚·έά}w("P!3ZPρ0™BΑ<Ζ7 Ζu Μδ”Wnωε–€ΉζšcNω/ΒΨ"‚cΤ€ΐβ‚ΠΪΛ Μ1G 5ΤF$cW1Έη»ξƈF°Χ1G$΄ƒxPΩAΑ Δ@"Ψ"Œ1·οn}1ΖΤRΔ "4OΑςΩt,:j΅#Ž ΰ2Μ/ΓL_ύυ»3Œ,Ώ(@€4ηΨΗτ±T‘ΓΑΊ˜υξ?ψΙοή(ΗaβυΏ¦€π†ΐr«Άσ ―g *ΠK`ϋ²ΑλM°‚ ΄XBήyΠ‚*! [˜»~P| ”‘iˆ»Rπ†Η;Φ wΘΓbΨ†Ξ" ‹θCβ0„$"˜Β$κp‰9žΡVTcρF4ξQq)"φώ¨G‘Ψq-Μ# GHnpކt$©HI’-•δd9IPΞŒNldP)J?¦”"!SYΚC†.ŠΔ$,myΚYnρ“Ό”e u©J °—|e1rΜ³δ’”ΐΤ$"‘ΙFeΦRšΒΘέ‡ M‚aPw–ά '½)Bp"Ζ`FžiΝh²œ»C§:1’H#Ά“œ΄žΞΉcό"Ύ Ζ/ζωvΖ„§>ϋ©‹z4C%hCκ9Ξζσzϋ,ˆ?uarθ’Τ“¨A ϊK|f³€ΥΕ+ςar CΏ Ζ- BΡ{Zτ€π+Θ1ˆ±R xΑ£ 5€HBR:b³„Qi>T ‚–Ύ4¦3HMjR€ς“§φ`ͺ ΌŽ#€ )j&ίyΡ D©ZU\ Σt†΅ˆT&ΑrςMu§+ε r αΥ…DλΉHΉΞ΅fˆRsΠψΐ=XλSέJΤzΖ5•s5bQzNΌζγ?P‚ Bk4”CΘ¨P₯ZO]fV³ Ν)?ϋΆR%ˆΦΆ6°­ΘρPΚΆ—½aΌ’•H ΅π…/†QBΟ Ο=4ςAέzΤγΉ3†"—›\ @ΰΪ’B{"­` ΆH/1Z¨Τη."Gΐ/шLΌ’­„M-n‘Ψ‚XγεIΊΦ½ΰ{Σ+‘R‘ΰ†u@ -mE,^1PνjW‘’#° Ό―οDml£ НΖ"dΨΖ&Όq(¨‚(φ+ΊΒ™Νp-σ°N@Œ€(ΐ ΐΕ/p!d"ΉΘDΖ…)κa Shβ¦`°’Œδ#[ΩΘXF²,<ΰγ?ΜW {jΖ‘ ­Μh>³6°u@"ˆA5Θ…jθ ΝhΖ³šσlf``lH+άαx%΅Α 4£@,E;Ϊьnttс €,ΘΰΕ+:ΐθHwϊџu£-ΠΜ,JΓρ5Λζ†α8ή¨†7` YΣΪΦΠh4’fδBΐφΕ­gMμZϋΨƎΖ-VΰjUkDq‹‹vκς‡Žsœ£θ€<¬ν£sΐ#δπ6<Θ± d4#δ(‡Ά}Žux;ΫΦv·Όίmνg€ Ϊ.@€3Χω{‚ €=$BΎ% „δ0ψRυoΧ|ΰIής&Ύ‚dcMΊ‘ψΔ—gqŒ\-κˆΗ;DώŽw0§6ΩΉ=βA•“K€ε0wyshc€€!ω ,Λ–] 8π‚ *LΘp‘Γ†JŒHq!Α‹3j4°`ΓƏ CŠIrΰ7œ4`θ΄­€Λ—0]š+€^1sκάiΐœ:vh¨€¦Ž§Ρ£!Υ…;ΰH8vH£Jhš n¦jEjΞ\.ΉC·΅,ΜθU«Κ¬Ϋ—ζΨ±Λ@²·xCvυωΞ Ρ ζœ±«:o6X!GΈρE΄Θ4Έ“ެγΖhΫ©rΰSΊ’—σξ5—“Ν\δ,‡~;ڜ7u‘­&ΌΧ9(”xK7›υhtΡ’IέΫχ^^’σΔ]\kkΧ€uŽys©­mΧΤ€σΊσΦκβ‘JΤ;φž΅Ρ-%œyμ£’³Šυ=όΪΆΏ†}gŸkvk Š`ύιδZvμ¨C—]υœοc=xΣ pXb‹Yw‘LF6Ye~¨W†nζ@%π˜Χƒ©£gΉΈxVW©£l”gγH0 α :%ώ¨~Ν'œ’@Ζ—#r2”"‘(PtB–KJ‰Ρv݁Ή‘–κ3ήPIš€|θxƒ{α΄ ¦– 3ŸΈ‘ŽjfR…§†ϊ)²\ ‰‰Q%6 ˆ(Ao„Ξ\uέυ¨@‘Ξ„?Xx)zLζxXŠ}Š©’‰˜ΗX—>ηZFθ¨"‹¦ΦφͺFŠΤ… nͺα;°©€ o­β α^±‘fD•!z ± Qi%―XϊJΠ&6yI`―·nτΞ;‹ΤΕ‹SΉŠ*I™^Δۚ> ͺnΈ/Ξ‹a³ΙΙcΞK/ˆφj”M6·l0Αυ€ŠοEz"s•ίϊϋο@|π- +ά.Ε+ΰρΗΠβ© 7i€~˜τ«ξGΩtό±Η!,ρΌΩ€0ΖΝgά,Hί”ΣσΟε΄ΟDύΝΡ‰h 'λ]τΣNύŒcδœσs ΨΜκΦLΕΧQ„=GΫ”mφΩh§½Ν7Ϋ¬ΡAΊ¨-·ΪӘvZ|=φΦ\?η50 Π5Pƒ1΄Pβ-Δ°ψβŽ39δ\Џ7žωδšKΎΈ$08 zΐwί£ύΐκ >Αΐ^μ²Ηnϋμ·ΗώϊΌn»μ΄G€;πΊwϊκ”~:κ]©Ž€Q€Q.ΤWoύυΨWoJφάsΏ½'"DψσTŒmσ©ƒπυκZh!½0ΏΔ/ότΧ‹1ΖΨ―Ώύψc‹λK^ω /τ΅l‚CΐP‡HP@ψ‹ 'HAό D‚¨ ρWŒbΓ.¨C†980θ@_ꎰ‚d€ |! ©tπ†8Μ‘}afΰ"Α²ΡŽφ ΰx8²± ΤΒΓ ‘VtHΕ#ŠΆXžŽ.–H…Ÿα€tρ‹c˜₯ŠhΔί1†Αx#habžŽΪˆ cΈxμ άΗΒ¨Π{ΤE ο˜G*£o<“ ΥΡFA²Tάc"㈾FςŒΜα!ω¨HZς‘™Δ‘$ϋˆ‘?šγ“  ε&'ιGOΐ‘˜ ₯(9IIζ‘2–²\%)εJX–E–9e'+ωΚKώ˜Dδ.UFL_n™7f-QwΛcS—Γ΄e1S)KiΆ²™Ζ|&2±9ΝΎUsŠΠ,†7KωΗs’σšΚΜ&5·‰K`“—ΰ| 4ΙωMm:σΘΌ'3ύN€ͺ2žεδš;m˜Nqž4h&ωΙΞ^”‘Πt(ΙςΙMHRŸνh&5ͺ1ˆ^£ΉDh?M*RH’Τ” EιAiΉRsӚ₯iE9ZΟ‰ͺt§!νi(_ΪΞ›βt¦¬*K…:R‚t©LΝγGjΒΔΔΘΰF©N§RΥ¦‚Δ‘KŒ‘‹a#’ΩηOŸ Vaˆ΅$!«=’‘‹¬j• ιQ-ͺC’#ω€2ΘhΑ‹¨Υ«mk_α ψΦ αΠE]νhGδu―ΰ¬bHΘ X !ƒ½_e-;Ξ΅~U‘ΕΤ,c5r b΄"*πμ6tΑ Ρ’6£ˆέ(Aρψψ½VΐυB:BKŒ¦sͺ‰EmXΡψ¬Έΐ%Γ7šQΧϋ ‘Ή-©bσΈ]–*ΰx‡Cάλ–6»0M-wW;cό"φψzΰƒμ δlV=L½’·¨Λε.Fœ›ό@ 60ππZcπ©»4εh,)ΰλbΔ»ωP‚p „#( JpΓ7ΞϊΰPϊ7©ΪΝl!3βήΧ"α/F4ς‘zΤ8‚πtͺ)+v‹` @ΆΕ08ΈΨ»60% d(’™ˆ….:θΰB>q‘πqΑžq {eΗ. ΜPβ·jΓPp<š(”£―¬[«\Θ dσς˜W³›έ`C°?ΔΟΠΏ@΄@bQ'|ƒΥpTΡ κνo»α΄€5­ιuΞ ‹_”ϊΤ¦N5ͺOύŠzγ–0E.’ΰ†wTOΥΈ^uͺeαρ­tηϋ£σ@Έvζ0N`ΐ:ψ¬°X@qΙΖΆ²:bz€ΙΩίNΠ€΄Ž±@,ΐξu·›έκ†·0€‹ ΨΫŠ /ZqoyΗϋέ·€ρʝ€”.άϋΫΧς–΅j8όαxΔ‡Aq‡#ͺΘΈ0$Ξq‰/ TΘΫΑ?­-… άθoΑIψEŽp4ή ‡Ώ2Žt ™pςΈ3<Ί5Ιο0‘&Ξ΅ν₯Ν©ΫΫ»Π·ƒΞΝ+± dΐ…+/ M QUρ’+wΫœ7+?.<·:rw°.ΪΞ=xitζ‘FŽnyΫΥIa…έ{ψ₯AηJ ωύΦΥ‘26•‹e‰ :ΧuF Z b–Ϋ@丁š"ξD(α„‚šδΈ§‘`ͺσΞ'8h#V@cεΒ—΅θ"‡!¦ΨΩVuζ $e=ϊψγ‚œy‘‘l½(W§p‚L…γ@˜€H†7TV鐑“o~Ωηε‘W§/"ž)Υ•AƒΔssΉΩ•“U…•ΐcη—WͺNx©½σ睐a4–"X±w¨O`Zd")|Ρχ(i‘^΄< Γβ₯#€E\h ¨&eϊd: :`ͺ%Α9P8Θψήsoΐ\ >ψζ—ο=ϊρ£ίΧ[‹§}nΣ£ p‚(€ΑuΑ…OZb\8πŒ MQ hA Υ+ΰβ7¬I―pDΐ ΄†ηΰΏθ‰1Œ1a…0Œ‘ cΈB[ˆ@€δŸ CεAΘ€γsDΒpA‚ΒΘ {RŒbX€+Œ’§(E(ϊΒub ΐ ˆH€t9λ‘9Ψ±‚#|ψ€ DDΆ4ρpŒ£Q ˜€π€ V°¦ρPŒ„a8žˆ |AΎπΕ1κ"ΗF:²Ύ¨ 2q¬ΜΠσ Pρ1ƒ…vy€(›ΈΒaβ|x ;Hu BkHacFΩΘžr εΰ nΔθΚN:†–K·Ξ‹ήσ …ΤC zR”Š‘Λ&21ΚPŽ4Œ1ηBk:L˜FO¦νό¨AmκSΣυ’₯jO9šS“&5£ς,κΰŽΊSiRT₯iKkU¦ώT§4εi:½jT†U™)νΙ3‘*T₯Ž« ΥκSΉΊQΈζΤ£wιUΥZRΉΆͺuελ@«ŠΦ—’uͺfέͺU‰zΨ­Qυ¬…]ͺ]ΏκΤΏυ¦S»+[σ*Ρ½b*«²l’œxcƒ#eμdΛ M9–ΔΊ†/~AŒ6>1΅|ΈœTλO׎V$ΏΠE=š‘ bό”Ρ«jΫQ‚>2$Ζn>Θ‘‹βχΆJΥmc…TQώV#°}E>¬@dXΉΚνκjλKZnδΔ―Ό@_œW ΚΝ-’@ ̍θBΌ*PΎa^] w¨κefGΫߌό7V}“qήόjw½ΌΥf7/_G˜ ε­0‚ϋΩζβW™Ζƒy ‚¨€ qιθRύξ–»μά0i Πα|δ @φ ΘPσΞΨ₯ .ρ‚Νω]‹χJ°Αle4P·ΈŸΜ¨·‹2 2ΈΏ;ξ±’|%ΰ@ H@C9(LG6Ιώμ;βδ| HΈ34ςΑη|Τγ+Τς[_HžέBθB(Ba‹aΪ»ίνρA $(ŠhD&b‘‹,Σ2‘‘X…:†[<γg™όŸΥV₯ΉΩ»;3܏f@ ιˆΕ+^qάW‹†­VΪΡ”†1Ž]X7†:`†3Τ.L‘2lƒΥ€H‘bh{†΅0Χ`Pƒœal«Ž8@πΩΈψEΌη-οΦ›ή €v3La‰W΄bΦίxΰ½ŽoyΛβQΐ ΕΆC‘›έΛC@ @;γYΌβΑ98q"lƒ VΨF `Ό‹“γΙιcžu8Ο‡ƒ X^φ,@σ Xΐ°yΝRά\ Έΐ@V’dπΒB§Ήktηάχ[ής΄ Γ8χ0€†£ϊΨͺΑupύλΥΰΘ0†!EΎB€h1ΐΞφΆ]"Έ ՝gu 놫zΣԝ²ƒ!‡7 Ρ o„ƒΘΚ^žχ ¦Ϊ_? ’δH ”'\ωϋΰTDAH~^¬{βBΖ#πΡτ|lGΊ -΄€γτeδγ όΔΓ¦Qm#‚Μ8VΆ{p`Ά˜Άύ“v―{έ―Œφ¬—™S#|I%Ε\!ω ,Ρ–| Δ€Α‚ΐƒ*\Θ°‘Γ‡#JœhΓ 3jάΘ±cΓjO:tΈ"Μΐ7“(OͺLΙr₯Λ–0_ΚτH“’9xπ09 ‚9tζ‚ J΄¨Ρ£HΦ\Ρ\ΊsΘ ΰ&Σ«X³6$hg\鴊KӜwΉlphΩ·p%šΞΝΞ#ΘΪ‘C·―_Aχͺΰ@¦tμώ*ξλ4Θ@SΗw±e­sƒb@ƒ*u—CkM—.*δ;ήŠ^](ם>ΐ²žΝQ(Z΅lέήm“ΘP©ζMά‘PΎ„ §]ΌΉΒγŽ!KFΗάΉσγ@7σ$UΩϊuΝ!;rΪͺwοΣ½πuψyβCίέ^Ϋφ}q’@½Ω<έ^ϋ΄αη)ΙaNbξ6:ι@σXdΡ ˜`€A©£g=Α3αlEρ… εmȚQ¬›"F”|iΡ§[Š‘%~;υ£eFρ₯…U’ፋ™%#:JMw@ώEsΪυδ^’pε!ˆάa”~%9yΐΖ‹Υaω–QκΔΣbnbΖE"_ϊ—ΧiŠE’@θπ¨Α'ΛΕ9֜ι…‘μ ©'Ssͺch“ͺ J–ŒfMYž Š–ήP qΉΣ_Fz•RšK.BͺiG|Π&Ί©Œ}’Áω¦ͺ•j<ΠX(­e±zΠ‘8 B’Όφ*ΤBžFN±΅!…₯`J³9ϋ«™*¬₯ˆ;Τj$δ±ΰ!„Ξ©ΑιΥνDΦΆj¬wŠsMΎŠ›+ ’Ύϋ\ΌΏͺ£“°ŸΩ ‰f%„N²U.λ―qΆv ­΄?”°§Ω:°mŸ /”πAδ6σNšIœP6·„,ς-ΰ€σŽ– ΥΙY»³ΤρB rɏ™”Bΰp@<χΌB6 ‘Ό‘ΊFζ C/'”σΞ=σόsΛYulΤsŒ1ΖW‘Δ4ε|SŽ]‡νυΨbwHt Κ9_#DφΫe“M5ΦV[ύt”RUΐTPΕίQ”0MBΫn8C'α’Ϊw(dψγGΎχί}χ}D6jζ=ΤήTΐΠŸ{ΰA-Δ ι1Žz₯ή‚¦gЁΈ.λ«·{ξΤ€0T~·Νš5ωηΏ'ΰAMAΞ;ΟΊ@ΟGAτ\pσ§[ύυΥƒ½σ½#@Qτύs½«oΞρD‘ &ΤbJBΈ”Cχ+„Λ  x0DΑ|ι£Βε2ηΎγ%Z ‚l1Œ’δΏΈ b cXπ  ‘G8Bc Z8_‡·(χ™ƒ‚Dj ˆ:Τ‘ΎHHAc8€ΕPˆ{HΔ"±0”! 1‡#€ƒ1ξ[ΑR :x@ΤJΘΕ.zˆ"0ΑDχ¬PΓLρΠŽlL0…-|q Έ|ρŽ\τ…/d‘ ΘBΰH£œ4g(sl#ΐ…0κψ<:ΕΐE,Pi)Ζ…ίˆΑL1 ΪΡ‘w4Ζ/Z@ΙΛΈπ‰τd_@ωEI–’bJr_&7ΩIΏ°‹£΄ΐ0ΨΧΒβ‘ͺŒΛ-»θΚjΐ2–Ε›%'ƒΩΘa1—Ð25χKf6Σ™Εδεžd©ΙeΪ™Ε€¦4³δΎjώœ‘œd5΄9Θdv³–«§8qTNDσœΰΜ&=έIKkŽσ R=S‰Olͺ“jδ§7γιΜ€^r χό¦A)‰Π¨q³Ÿ¦C§™7sfτ–ϊ¨Bα)Ly’2šϋ€¦=ύωΟ|4₯yS&I?ΩΠ“ŽŠΎ\iA‡‡Ž”₯Z4©.oΚ@•τ£¬μ)G₯&S f 6…©Τ<ΚPžΎT€šk*RAΉQrζτ¨UιU}šΥw:+PͺT;FΥ’NtkMŠVΓΚΚβΤ¨₯+(•κΥ²bT―Ž΄kQ;ͺΣ­:’―w©Y ‹GΑβν«yu«U)W€ΜU²·t,ρπzV΄Ί”²XUμ_1[Χ¨†vͺ…,;X¦.V΅wΤl/9»S±‚–¬’](iΉjZά’¬»=μX—Ϊ±ΛT£½%nRΪz\ΫΒυ΄Ε}mp›άΎΈΝMκp­λΪΡf—·j…ξrS;έ;²v›ξΩ4DЁPΈWΓ : [ΨΒ ΕΜωXΝ-­:λΩ Δ§’σ°Σ€Φ_ΝΝ 70 κ7Zx„¨Γ \7’·xπϋ›> \d0+Ώ0±ŠSΜβ«ψ„DŸϊ0ΧΰΌqξs 0Ÿθ @Κ¬θw@VξΚgΎRαg­•ηNpΎσ-o,°ΐ$£I$•TΡ(^†JΖΘεXN> "{RζΈε˜DΡhhV4Υƒl’Iγ…`°dUy9Π™7ΊΗ§QeξΖ›\ρ ΚƒΕίLΑεY9Β5j“—Š‘¨”™­iigΖsh’t~z¦R%©'2νxjκF~’“N8Ψˆ ―žδ¦@”!C©mεZΣ£ Š†Θ€#μ°»ͺC+œΎγκ²ωΙ+hΏ h₯ΤΒ+Mͺπ d²έvδ±Φ:έ"2ιXξUΦΎιk’€€3ν» ΕΫ–*9Œ«,Ύπ†‡Π³λΚt/ΐΝν:PƒΩͺP*N6W<1:n*Έ―ώ[’Δ[œΝΑ›…lr6ΰ€pΊΠ.ΞΏ%rΚ bͺX6+ σΞΟ@ρ N<ΠxΡ”Γξ2dσΝ9ο¬sΟ?oΆτΝ PaυΥsPΊ]¨J\y‘,·@/m@6U_muΦ¦MΆΥQΔΕ|³Νέxη­·ήΥ$rAπ±χΰ„ί= rG±ΆΦ$Ϊό60 y p`ωε˜g9 (pΑd°ω蛐δΐ°xΫK?Ž:”O ϋμ΄Σn@ν²W`Όc€ϋοΐOΠΑ$ ΉT°έ8¦# …`  .ΣWOύυΦgύ+Ψw―ύχΤ‡"δ’―ΎΌ—h1Ζ 5DF#ότΧoΏόΏΜ_Μ/Εάο?ύΏ°…΄°ΎP [“Z‚9́}`ƒ ( ŒbXπ‚Μ 7ΘΑ^Π|_ jΰΐHf,jέ(°‚Δ€"0- ΠAxπ†€‘Q‹"¬@ψ€Xψ ϊΤ U²j‡8F0€W cΖ 1 Yόbπ…8`35C™cx…0Ζ‚C γŠhF9ΈΐψL Œb$£wh  @lδQα8F2–ρ`Δ#nΊψΕ0φя8 δΉGCΎ₯ŒΕ°£ ;ΤΘ8ΊεŠΜc•*yH±@2“Œ|£#/YFI.’’’΄$"=Θ4ž’‹œ|dA‰Κ₯ρQ–84₯&˜ΚNJ‡­œ$,{‰Λr˜Άε*=¨ΛP&S•žζ1YGLR&•»Τ !oiΝ6³–6γζ29ΜWRσ™Ύ΄Κ'±ιΜp*3šΉΌ£9Ο‡)qΒ“•Σ€§—μωΛk σœξ„f?½)ΟlΒe›οhΛiΠ· T κœ%;ΑYΟ„F4žΤ'ψyQ|N™MgUΦ™Ρ#’³˜Μ,h;+ Ρ‘Jσ£e©H©Byš4€(νΰ7A*Ӝn‘+έ§E]κO›J-–έLiIZΝqώ4Ÿ7νιBŒAŒ›Τ΄‘nyθLϘ ]γQ< $wS‘ΆΤΖΠE=šαU°Šυ₯KMa/‹3κ"δΠE[ΓJ’«u£†΄ΰAϊŠ|XΘΨkIΖͺRŠš΅‚‚Θ1ˆQX xΎPlG0 Sς‡<ˆ. «Xα‰Υ_7βWΗVŒeνQZ\Ά«_]-FΧΝ5Άm>j«2 V³αloυψΫ NΆ°Ž€ωˆq>κq cTΨΒΤ°‰?€[<ƒbώ/ϊš&<‚Ζΐ pYJ AΘPD#2 ]θ7"8 ΞŠό4ŸE•FΝ{^τ4(\(ΈΝ€‹WΌ¬7NHˆΌς%q_Oσ’ƒ:Ώΐ. hSδƒ ΥθD5ΰUZΠ‚~΄€#MιA :Π€Ύτ₯eα>οΞ 6Nσ&W9pŽsΨΐZ>Ό" n8†θ,gκZΣϊΤ§Άuo]kΣ½Ξ|yuΪ`Π€Ιΐ@v²3pzd‚w$ΨNKd[;ΛΎφ΅³½ln'Ϋ0A±p`3•yiSέΌ vWƒέΝG.šΡ ^ Όˆ2 ΡξvΏ»ίμx4ώ-p‚œέΡΈΕ Τfn!ƒκ‹ψQ€sœ£ι€G:>p|γCΌP…*rar¬c獀9.Ξςr°耇ΕQs™§<ζΔ%>ρΜ*fC›‡>‡ ΪΓ9:ΪΈLΘρ!h4#νZΜΑ‚ή@’€ Άs²±Β°…+Θ† β10έ\6;[ΧΏΎ‚°‡:S²ŠG<ή1wΚ`νίJΗ… pˆΚ³ κΪήχ–΄ ~π ΅>2xƒ!ω ,―4 !ω ,—‰€ Ό ° Αƒ*\Θ°‘Γ‡#J4Xm’Ε‹3j|ΨN l¨BgΐάΖ“(Sͺ4€.9s€ ’1@NέΚ›8s6DΞ€Β½ΣI΄(NuκΝ4ΐƒ<“F£J½H€ͺ½ KgsͺΧ― _† τΣA‘UΑͺϋR]°A²ΊSZΔ«Ε+QŚό@ 68¬ ΠP] γ.ύk5{yΝ©Ξ5‡Ub5kΝΊότkD”θΑ~/FP‘Ζ.`Šη#€œ+a€ΪωΘm=κqŒ‚ΐ3Εjea“5Ё™† :ΰ Τ"}C₯ͺ0lJΫEβ˜ΰE#‘‰Wl5"ιμ…,*GάβΖ Ή8€)P€8/²–₯ͺM‘ΰ†u@ mE,^ρN§>Dƒλ]oˆ¦΅Η₯QΠ‚λžYΩ#ω Γ661(¨‚ύ„¬CΩW€1D!x€ΛšΜ ¬:ΊEαε-Θ/p‹·˜Ε1E=Œa MΌΒτύ†@bΈbτψΗ<r‹† οmFZδ솀 θ ΰ[”£ ε*Gy¨$°Tƒ P¨† |2/€Κ‘Cœ‚‘‡ ΒλΣ–&|‘Ξͺb’γ”δ8ξ.ΔΘAοZέQw6κ7ό„fpΗy/ƞ—%DZ¦ΉίAΘ@sΙ'”>ψUΒΣ=P ‚ ’„‚ ΖΰκrNΰ€!ω ,―4 !ω , ΑPUΙ…8Pƒ*\Θ°‘Γ‡’σ–Ο›·p3jάΘ1aΈhω X,Ψ±€ΙŽα ε³2ρ"9ƒ'cΚ\Y>V|9³§Μš75Ρι¦Ο£ͺXjEdQ€P#*]ͺbh΄§Q³TΙCE<Θ΄$©΅¬ ?|¨U+v§Q³PΡ*±ρcξ4cαjM™oΏG” ηRoT G$>͞=pϊΐ)4gΈ'b$(!QΤ«£H½nUŽkŠ›xЎXΙvdτ^›CI…»…T*ZΎuR%2^Ήx©‚ςζ™–ά Ώρ6Ιχ74^κΘ$ρ†|ΉOrΡΘρΊ ²S«΄$88ώ` ηΣ£_―^=ϊ  8Θ@Ÿ½ύφχ-(¬nΐœ@‹δL$\ 7Œ=sQ8 6θΰƒz³Ν7VhaƒΜE Qf9‘NMb`BGd“O=,Άθβ‹0Ζ(γŒ.0ǁ¨ΠO>@)δDiδ‘C Τa’ P>HViε•B°”py‡ i,X–iζ‘φδ3M “‘9Z Μ™tΦ d91Tπ ˜U0§€bYŽ'Ιθ‘Uz’Ÿˆ6Zδ |Ι‘‘ŽVz'‘&1ji₯JΊ₯›6ͺh¦†Šh§ύMZͺ©ŽZ’¦¬ΆͺC€©~Ίj¬uΊΪ¬Έζ:«§Ϊ+ΊrΔλ°f’ΚgDΒ"[f±λμ•Κͺ:ν™Πφy롉ώZk°Ϋr{dΆI+‘ΥΪz.΅˜ΎξΊC¦ .Όέ.ϊ.½—Ί,DΝβ+$Ή™λo>ςfΤοΐ·»λ½ψΜ,Γτ ‘ΐώ:Μ/ΔπJόΕ {»οC¬±CG챡Η«°±―k1Θ-Ÿ;rC%g|²Ί)»r΄1i@¬/;2–?³:3C5#Y΄©A74tΗφΊt¨M3τ΄•SozτBI™΅₯U/tu•_sΊ³ΆR=λž;„,ο@Fε™_#(8ΰˆc'Ιί’M6xΣY6’OγeLG€“¦™ƒz€Λ„ΰ *mͺ4€@LQP‚8β”#ϊθ€—nϊ騧Nz†q(›q»²Σn»μδϋξΉίn»ο΅γ>»7ΘΤΐxε!€žBφ°žσν%”_F›χBBΡΝφΪkŸ}φήΏύψΰί½ψη§yVπ΄yŽ›Ό~›ξ»)ΏόυΟ?ύφΗ―;2œ¬³Pΐρ0ΐnJ2ΐ£Pΐ€+0€<ΎεxΌΓϊ  ΰ‚ tˆ:ΈΑ†π κ0J@!ω ,.ƒΰ d«τ¨ ΑJ€ΐXΘ°‘Γ‡#JœH±’Ε‰ΰHάψˆΊ‡θ²=b΅ŠIV½"]\Ι²₯Λ— 3’\U’¦ p𠊜κV([*a Jt₯8N=CΡ,ω(\ĝ«B½ ¦ 8Μ€ΙΊU+Χ―^Γv –¬Ψ²hΟͺ5Λ6m[3œT₯zjΥ©›ξdζƒί,,\A°Β†6PxqγÌGv,ω±bΘ–'cΜ™²c ώ~cχfN½hraF‘0† !šM»ΆνΫΈsλήΝ»·οέjτθΙΒZ© r§ξ<%&„O²τΘΒυ«ΊυλΨ³kίΞ½»χοΰΉΛ‚Κ“žaŒ{§3υ©/!κ”„k˜1aχσγί―Ώ?ώΰ€Hΰϊ’G(‘θQά*Η%ΧP6€DIθ §G5ωγα‡ †(βˆ$–hβ‰(¦8β0™hψ žXΈNDΰΤ8M@"‹/Ύ sŒŠ@)δD3Μ0ΆΘH_LS#Fο($Gi ‘Xf©εFφhˆ_Pc^‘£ΞBTΪ·εšlΆ ’0Β3Œ!¬α$p^ιζž|bi /αΩη „ θqͺθ’!Ϊ’ ŒFͺ¨£,A*ι₯|RΊ’₯˜vΊ¦¦qκι¨D‚j‘¨€¦ͺ’©‘ͺκ«%²J‘«°Φ ’¬Ρj«­ΈJ€λ°φΡ―ΐͺ*,DΔKκ±%«¬§Μ:δ쳘FΫΠ΄ΤJj-CΨfΛθΆh&κm°*ξΈΖ–‹(ΊδšΛξ«ΰζxξ»ΠͺϋθΌτVko₯ψζ«νΎ›φλο·‡*πΐ“|κΑo· ͺp« GœιΔ³Vl±›kΌ1›L°»"'LrΙcœ«Η(crΛƒΎ σΕ'ΟΜ±ΚΎ²l³‘8«σΞ)Κ ΄Δ5­₯ΠFg‰t₯φŒμΟLΈtΤANMυͺN7 υΥZΝυ‰^kΦnύuΨbKMφ΅fsvڍΝmΫWΏ wΧr‡{7ΦEοM’έ{N­1zšΌnΓΖθ2Μ/ΔόR8Ν‡7¬K=ΔθΒ8έ& μ/ΌΤσMεŽ?ή¦ζΐσK,Xρ.Ί4.:Ρ‘ϋ›8κρΉε„οIϊΗӊ*ΤΎMείάχ»Βός» Μ{ρ/–ƒω­yΛ‹81¨3ΟΌν Krυ« κ<¨PΎ ΆC:μχ6|ΜιφόΰΓό=τ€ΖνΕ ώτ©ƒ½?ψl`ƒΨΰ~ Λφ±ρ@ JΐAκB.c Βήχ;$α„FCκ‘ 6νxμςίο@Έˆ@ ΌP„"2 ]γuUΣ Β7΄G°B9bQC]ΰgK»³ @†plΒw€‚*š»ο‘]ώC]3T±‰X¨Β n8ξp(€$Ϊ ~ΎP….ZA2X!¬ϋϋψu½X|£¬{/šΑ hΌBzdΜαΩUΉ ώb›Ψ„1:"Μq7$άψ^1F+ΖNv’#1rHA^²d’λζHΏύ­”¦Ρ(©v¬ŒT( €$Ρ£T~ˆph„*ΠN"!O©Δ-zќΉ’G²ε 3Α σ„A«x„BΪC1°`A‘@&œΆΙΝnzσ›ΰ §8ΗIΞr’³εqPz’9MΤΨ>ιΡΓ#LρŠzΪσžψΜ§>χΙΟ~ϊσŸυg6 g‡ιhIΎΐ‚†f¨D'JъZ”’0ΐ pюzτ£ @,‚†>Hλ‘ζ*γIu₯ˆ9 “6ΝF6Ϊuδ°πΨ)c7«UtxΦ³-gGKښφ΄¨M­jWΛΪΦΊφ΅°­lgKΫΪΪφΆΈΝ­nwΛΫήϊφ·ΐ p‡KάβχΈΘMr—Λάζ:χΉΠt§KέκZχΊΨΝv·Λέξzχ»ΰ ―xΗK^δΖυΌq-οKΠ›^υΊδΌ`―{WΒ^ωΞ·"υ΅ο}%’_ύξχ!ω/z ‘ώΦ—ΐ1πΌ/Α0ƒαφBΈΏ’Ν°CΔz_gXΓ6π(0αχ·s0ό_£˜ +~Θ6φλβ9D‘Δ ©1€c ΧΕ7NΐqΌX`gpΘ άΡγKDφhrDVxHYL‰ς•ΥΑα+{ωΛ`³˜ΗLζ2›ωΜhN³šΧΜζ6»ω7Νp޳œηLη:ΫωΞxΞ³žχΜη>ϋωΟ€΄ MθBϊЈJ—Ε¬3g#e‡–Η<!ω ,άR < Σ5ŒΨ/bΒ (\Θ°‘C†λ όeΜΨΓ‹ρͺχΝ—.ƒ1ŠThμW¬|VΘύu0αHŒOjπ‘%Β—k•O…Š”ΔXZ ‰s‘°_<}ͺ ι±eQˆΔN*UAζ[PŠDŸκ:ΙCEΧUu}€ψΤΐ1“φ~ψXλc•6]β45ߏJlμψMΉ¦΅žT’a%GάΒ JηYžHŽDF-Ÿε|‡Ξέ™Oς’@G0ρR€(S,]‹nΝΕM=hH¬¬kuϊcΩΗωΘxΫδνUΝPgέ|²™*U±TYqSNθπ—h‘qՊ+αΔ–%t[+±―x5Œͺβσ‘ΕV€Ύi“*‘Ϋ³ˆuλιΐηη†άO6ΎΘΤώ(ΰ€hΰ&¨ΰ‚ 6θΰƒSŒ‚V(αVX`†Θa†~’"ŽΈ]‰&>…bŠE­Ψ‘Š.ΎˆSŒ,ŠD£†3ήxaŽ40a‹7Βγ‰A–Υ£‘E"‰b€.IdC ώˆ‘C!ω ,―4 !ω ,•.Ζθ 8МΑƒΝ\Θ°‘Γ‡#JœHQ`Β‹ +jάΘ‘!F„CŠς#H’(S0Ι²₯Λ—0cʜyQ₯Ν‘4sκάΙ³gΖ›@‚—­¨Q’θ|*]Ίt¨Ρ§ΩΪ™ JuaΆ+@¬ΘΚΣ―`g‚;’U+WμΤ}¬ΚΦ@ΆsζŠ+H{aσκύψ–.]AΨMmK5*ˆΟ) .ιήΗz³I¬˜ρ`Β@ #Φ σ 12Ĉaati¦S£^}Ί΅jΧ¬_ˎMΆνΩ·=tθάρb΅1>Lε‚γ5(°\@sη̝?Ÿ>=:tιΦ«K׎½»wκΦ³‡ί>ΐ…ǏŸ ²x­π š©ΐ@# ˜ΈLεί―Ώ?ώΰ€Hΰ&ˆ`~²|Eσ Εoξ½gS|σΑ Eγα‡ †(βˆ$–hβ‰(¦Xβ1ΒΤ‚‚0DE{ Y8άcάP cΤAAˆ©(δD)d-&h1ά0Ζ8vπ­P@Pp@–«όbL1`Cε˜γ‹/XfΉε–RDζ…ΰάςΜΰŠ-Ά &˜oφɐ™Ζ„Š<ρΜ3·ΤS£Ÿ#‘c:κ€3Ő #Œ₯_†Ιθ¦3Μ0–@p…4ΰH΅(§#©SΖ‰ό’ηž|’Κ¨1 V“¬#•±@"Βΐͺ)―~cΙW|ά©Δr΄*°ΒΖΪ,™ΒΨjΖ6N«‘―ΠF«-™Ζ"ϋMΆίNΔm°ή–kc΅·bœΊ=‹°πZn²δΦλйъ©/fμ^›οΏ ΙΫ/Α„έ;ξ»7ΔoΊ S°»»F\π―σΒj1U ±ΑolΣΔ7ό0½"ίΤ1Γ)ƒŒrΚ*‘Μ²Θ'k ³J+Wά2Ζߜ’Μ:ΣΜjΖ{ϊœRΞΜΜsΘF‡t»lsΣ"!}Μ5M΅HO_½s·/oΝ‘ΥSή,΅ΦbsΤuΩX/vΪ‘ν¦ΩCχ ·FkΟέ6ΨSίM‘ά?}Mτ°~S”wΰBσvαe‹οΜQ»έ7γξσΩ„Sΰ—KΎΈζYnΆη™ƒήηt+^Ίι ‰Ύχΰ²ώ§γ uέLΛ>λ‚Ϋ­;A¨ΏξϋοAZK1Τc;ρί{ξΏσž8μώ2ί)ν%#œυκΡŸ=ΑΫ/OΌσΣOΌτ‘«.ώοδί~υΦ£Ÿ<ιλλήώόο[Ώ»χ'ϋΫγΓ^>F?ψ1O~ϋίδ(ού+|<l‡?κιοz  Ιψ9 ΆΛϊ‚ΰ›'@ &0D Ι 8Βϋ…ϊS‘φ8Θ=ϋ•y/΄` 'ˆΓ ΒΠz.\αΘC―)mˆ |œ }¨Γ‘mΟ ϋnhDχ51~OΤ[8Ε .Q{,άα58C$vQ‰=£u'CπΡ°~² ’―HΔ1~|aԟέΈFΩ΅ρy"‘X>θ±1‹ˆK“X»4ⱏ¬ϋcίΑ36²Š4_χμθΘR²…ƒΤβΉI‘ρ‘€΄‘;9IHšN’υαχθIW‚–π’₯C™ΘLφ Žš;!™ψΛjpÜc1—ΙΜf:σ™Π„f­8yΚ\R2šΨΜ¦6·Ή'd&S]NG* ‡aœιUάL§:Χ +bγL–Θ@H•Λόk,[ω@L`ˆ€ θ6}ΡO|0ΑVΌBb½e.a¨ρˆC Νh1kq„:x4 7D${κ Cτ±O.ͺΡ–ΊΤΆ „€Dα XΦ§…Rϊ€€ͺP‡JΤ’υ¨EM„ Τ¦:υ©P ͺb#υΜ¨,iX|Œ“$Η` «XΗJΦ²š•¬θ€Z/³Ίυ­p…«Z»ͺφ`΅‘%NqNp‚€kX`ΨΑΆ°ˆ%¬b»ΨΐZΑ ΜΠΨΚ2φ²‰Ε¬e3»†0 €―|υΝ]§$ΚG¨ƒ °Žuˆ£―…m9dKΫΨΪvΆ·­-nw[ŽfΈΑΐν1ΦΑΫά·ΈΘΥ­rs[Žgˆ ΅c˜PNf˜9<).r);ή„Œίΐh@F:ΤαΌn}Α.vCέPΰ½πέ 8ΘK₯tΨ·»‘u€ΡGΔ€6 |α  ΐc»7C;βΑ`ΏΓΰπ/™ό‹ 2@VΏΠh€U’Ž«#f‚ΣΦaT‘Ό°πwοa O₯—#΄XcPL†ό²R5oŒΥEίGVwˆΖ£œξXdΌ°Βσ ϊζx§Gώ—:r‘dh ή0}7εˆω—ΚKφΖ–-ε.KUΎ²7β±›ΉYγ5€* Y bO.σ›Ώ…Žt cΞ?V„˜Υ’=ΓLGτ8±2cΠS0)Yšmͺ‘‘!ύ/R(‘Šy³Κi‹‘#›B₯1ŽG‘ΊΤ:±‡GaƒU“ΓΏΥ„΅ΆμKŽJ¨*¨90ύj]λKΔ½Bdyπ‰F―DΟΖ–;ΰAL¨ ²=Θ„;NΜεhο:ΥΎ6~0Šs<Ϊή攣ΒaνΘ*aο tΣ-+p„CβV)ΰqnV›WχΦd‘@ŠgZ!0ώ7±ήρŽ€GφͺΠΥΌΎ©wx#TapM'œβκ^πΕ5ٍ·C§9ΌΤaρ<VPE<ΈύM•«Γήpyd­‹~Χάζ¨by4tσ\”τΰ@Χ€ή ’{(ίt7Εr¦ίαεdΰ…9hώρ©oΚΎΠΈpυ¨{]ιι;dΙΎš;ϋμΣκξ…Ιΐ_tΓ3φU‡άΏ»ίŽόξc:±πΛwώΆ πqW1†ΝΡ„wρ6:qŠ/|γGCžL3φρŠ£±υ€<ϋςTˆζ ‰?τ6Jς’‘Ώ£ήFSN3–]zα|YφƒvLν9§yή(ιιw_•ΗyΞuΎsη‰ο§> τΫ™“b{ΡΡΗ4P tλ7δΔ“υ8€bοƒάόA)pXZΤ*AΏΒεT·_¬φ|υέΜiƒΜv€ρ a 1ΠΠ™P (Έ ε ,΄mρ ΐ˜"‘0 @Θr° ΛβuπmΥV!‘€ p`-ˆƒ:˜ƒ<Έƒ8ψΏ %(hί@ΈJ¨„± ± Υΰ N8JX PC8ΖfΫ υ†aΨω ωp†e8aΈ:€…ώ¦k\HΒ€†gΘ)gX:`Y¨…°‡_H‡¨r‡mψ –χo\$f(+eˆ‡@ˆΊ7usSε’y@}Ν"‰ε’‰Γ§p—X.Ÿ(aw§‰ίΒ‰–¨.‘y€¨-¦ˆxŸψ-©ˆx«8-­x―¨-±x³˜‰qŠ (’w»H,΅xw·8-Ή8ŠκRŒpwŒΝ’ŒΒΈŒ½θЍŒͺ(Σ׌Υ8d²ˆψoΞH,ΠxvΓΘ+ΜxvαΘ+γθuε(+ηθuι(+λ8uνˆ*ο8uρˆ*σ˜tυΘ)χ˜tωΘ)ϋtύΈ)tΉ)isΙ(is Ι( ©r ι'©rι' rΩ' rΩ'Iqω&Iq!ω&#©p%I&'ι‰ΫŒδ荾‹Φ؍›8Ά“Χ˜“ΩˆŽο«©\ό†εΩOdHίφ„η’ιͺu$ΰAŽAŒVδCά†φψΧΐΎM.€Ύ‹ Ϊ"Œ_XP(τΒ7|±=bt%dEx°ωΓ~(DaΥηBzΠtπ£a ’ ϋρ@G΄AYΈΎ•ĐhΤ"»rŒϊΩγ>Θbz€rΠ$OόΞαΔ'Ε½ΩΠ~?ψl`ƒΨ ‹κc Iˆΐ…°Œf$’ύ” πρ|„£.δ:žg†xΜΩM˜$αŽ„F>&™z$ƒ1δzƘHu°‚ω€δ"LπBŠΘD,ta€ώΝρ‡Εαρ™"ζ nh4Ž`…rΔb•Ί0ΧI4;ΏTd$Β± oά ͺhΖ}XΈXšF€ό€ύš‘ŠMΔBVpΓ9θΚ’σ=œμ€"bE_¨B­ ¬ύƒšŒ›^Υ©Νo΄B―ΰE3xWΈ°œ―¬¦>eIFd&D{ƒό<7±‰wώ’%ηΤ‹1ZF…@o\|9ρωΑkή‘–D踈!<„&4Ÿΰc¨:Χi—‚– 5ι1;J:œΖT§•βξΕlφT‘? 6Qϊ5ŸΎO¦3ͺ ‹ΚΤ΄9€@i1€ Ε}΅©H}jV£zT˜ŠU©'u(X͊U΄ξT¨e-©[ƒ*DŠ‘UΩU‰κΥΌ‚%£yΩ¨Vσ˜ΐ’ͺZ]«k¨JΦΒξυ¬‘Y*?υ֜ZF²ƒ aΛΨΜp³ƒι¬gΗΪΉΰu΄ρ+­iϋŠZφmA;mksWΊφΔ±³umαΚSΦζ–Ά8- {|‚Ωߺ΁ΓΕIq+:΅%#ΒML–Λ\Λ9%N‘nK¨[έΔ]»Π}vIΒέξκν»ΡννxAR^σΖ ½5QΝz/^χš Ύ˜ tηΛ‘ϊΪ—kψ%ˆQψ[ώ—iFˆz ¬ψf –Μm|?dΖΘ~)\ _ΨcώKiΔKaΈ`!–0P8,Ÿx`)Φ°Mμβ»+ƌι-‰΅[c³ Ηπz{μcuΩ03/‘‹Œ#SDΏ FΟ’™μd‹$™=S.r•72aξdΩΗ[ΖK”©σe‡™#+&sZ™Œ³3s9ΝΔΙΖ-.ζ=„"›mf‹PΨβpΒ-R– tDΞ΄ρWόu€‡ n{˜1½θFC,BΉr’ηp†ά`ƒ lQBa”ϊ§N5ͺW­κV³Υ¦Ž΅©_νκZΣϊΦΆΆ΅¬ΖƒάΰBJlwl™ υκWZ0A- Εμg•°ΩЎv²dE-kќ±Τ₯`ΰ:¨rΔ·Γ=nqƒΫάδ>wΉΧ­ξsΛA ]0ψ@ozˁrH„ΒΝοv§ϋίθ8»>π€ΑW€”˜p•a»0Ϊ0π€Š[όβΟΈΖ7Žρ8ΰγp€:Ё‰[ ΠS$ΐρ–»άε πR½emΫf·ΨΪΪ Npΰ!ί@ΊΎ…Ύο‘½θH'zΎω°†`0δyF^ςθΐ fΨ7Ύt{=ι_78Ο»UsΨ†χαvΙQ˜t!pρPPά wΈ«CsΟ»:μŽwΉϋέξΰH:!pπBŠΘ @Ή  €†ETBΘˆ>’wΎλξ{{ίAοv΅―}Lvs_4Θ> "Θέ pχΪמφ ²½νqϋέdπι |πΣaxU`BρGPAδ—/yΚη˜ο}νΡqwκλ~φ³αϊΦΟA©r_@°‚ς›φΑ\boC“#Θ0>ς•Ο|Θ;`ςdx>ζΙΑvLDζ€θ‡iΝeθP1 ¨€Bch‘αvύgπ'dτyŽyψ§Θν‡ ‚μΰ2 X1ξΰvΉ‘1ρθΠύχ‚HwοΗWX}Θ.ƒ§‘i,φι@hƒŠgυy*phΐ‚R‚α7bh7„>α€oWƒ¨„KMψ„<1˜zΰ%_Xˆ†¦87θ…K†PψSH…O‘zihRθvn˜„9Θ|*€ω7†θΰ wsyΐ—κ x@Hˆp¨ƒG0ˆͺΐ αΐ†u(…']–ˆ„q{ν7|3ˆ(’ψ‡ΛΧ„ƒH ˜¨/Ψx h’Έˆ₯xŠ•©ψ…`(ˆΟηŠQΈ‰!ˆd1α+X‹’}ƒΗρπΉ§‹yΰ“Θ|­ψбheΨ¦ŒΠ1x…ψFhŠρW ‹@*υwω§ΒH‡ΔhŸθΰ1xνβ@ΰ`ŠΠ  戎κh•Œ˜hΫ(`BHγΕ„η  ύψrλ8ξΘ ήΐŏ H‹ Ή^vH{ )|†† Ή°‹‘§•xζπ‚ω‘΅ψ -fΏŠ` – bpp7q$7”Eπp —Ϋ° 4Ω”‘O)π0p@‰$7r•NI“pr'g?™•Z9”–—l)–aω–n—p–π_IL‰Ϋΰ P ήP Υ° Υ ίΰwIω€“d‹™˜‹iυP'!ω ,OVΌ H° @s*4g°‘Γ‡#JœH1βΒ…3jάΘ±£ΗŠ/~I²dÐ Mͺ\Ι²₯”0cʜI³¦Ν›6]κάΙΣ"Ο@ƒ б§Ρ£:‰*]Κt)§PI6J΅*Μ¨X³‚΄Κ΅+S­`ΓτJΆμO±hÚ]ΛeΪ·XΫʝ ·ξΣΉxΝΪέ{4―_ͺ|χόK˜¨ΰΓ; +ŠΈ1ΛŐs:ž,5²ε˜”3—³ηlΐ9ΌάάηΣ35k^±βλΦ­³΅;Iz-8Χ°Y»F'S5et"Ν™#ˆψœΩΠΡ]6ۊβΠηD:―·oΗκ Μ‘Β½;rΡc™7Ρ½ϋœκ¬_Gœ};-0β‹h©ΎύϋψσλίΟΏΏϊ׈ρΑ`^ΌaΆ^cΪq—@ $πA@A…Zˆα†v˜α‡‚θaˆ$Žh’ˆ(–˜’…|a„ܝ—ΰU "Φ  pΒ |!†Y¨‘ƏAώψ#B9δ’H.Y$“A:Ήδ‘Q*i€U"ye“VB™€–^ώψ…;ζ¨η₯Vγa j‘cQx` .ΏΤIgxώr§žyβΉηžyώΩ§~Κ'‘ƒ šh‘‹ϊY‹pζcjΨsŒ‘E 7D†Άΰ)Μ/£ŽZg©€¦jͺͺ¬Šκ«’Άšκ©²ΊZk¬°ΪΊκ/Άˆ 7  Εu ¨ž₯v©sΐ²,{@"„"L1ΤVkm1ΘRdΜ0½Π,³ΛVšm]ΩάςΜ)°J(ΆψrΜ΅πͺF­GΖΤRK(«°€Α)ζήRΟ±γΒ…Ξ7Ό0Β0Γc ΌρfΖ0GΖσΛθ"Ž:νΜθVΐ{•£K/ΜpΓ“œΡΆ#€Μ7ι‰Λρ[επ2ΐΑ#?\²Ν C±.ηΤτ²]/0Β1οΦlνΝ#o€sΌ”Σ2ΐ?‹ε1ΘΓ}-IgtΜΞ=Σ5\1\΅ΥΥb5E[3ν΄Χ_§55ΝdΟKYάΨ’Ν΅Οm£σΜcΗmvΝv«ύ΄‚y‡υvίdkFwέm]qΧ.ŽΥήpϋ=χβŒ?”vΣƒΣ(ΉVA]tβ—cήψέlžΥα‹+n:D›―ΉκH…]9ι“a.·ζ¨ΟN»Q¬Σύ7ΰ™7{ηεˆ[νΊπ§?Ž·ςOoyξΠKt|κΤΕ|λ₯_{οPwΏSθDg=ξ§ Ξ½ω€Ρ*H€ΚAŒ#j±'mğ {(Η0)vLd"Ι G]π‘;αβ'ωEZςlc€"T°J i΄ayI&’R#>„ΰQμθƒ^ϊ ; Γ7φ(KHώQv]ΌeEžˆΚ£ƒŒωψΑ”`Lσ•,!-Ι7Jer§ΔY©¨j–ΣJ@ΎAΓ ‚r%’τœ79ΒLq:šG@B>|ψӟ {'<Ή)Οyβ”ΰƒŠσΉˆ@ΌP„"2 ]@ *‰gς ŠΛJ&tœω€‚ڍ#X!±x……ΡŒt£]&Bu IbΔ"gά„7ξU4ς“FΡhHb:H]-}…ά%‘ΡŠMπB"½β1œω‘5#υ4R~±TNθBε ƒΆΑ RUƒΙΌͺAΐψΡ£HPΫPE +Š ^T#Ϊ4ζ©V‚dυj”b…ΡΘVpb^EbP‰<«φU"„œίQX*BaŒjŠ*½¨fυΊDΎ>Φ=V; †΄ΫDk7?»Φ™&U,-mI-=ϋΨ\ΎVrB k!Ϊ²QoΆie-[iŠ[ΖΪr· υ(q άΥ"W ‘"νr[”ηUΉ·enUukέ‚DWŒΣ5.mϋj[Ι~Ήνnr©ΦVΥQ7%κυ+8Ϋ{ήνV7Ύλc3έ+ήΰ~φ»—δο^ύ[[욷ΈͺMowΌίϊΨΉΟ-―tω›`˜ͺ·· οƒlέαf7oοM~‚awΓ^°k¬έ ;Ώ%ξzSάαOΈΎ.ζ.Œ*Ίε‚ΨΎπqŒΫ_#ΧΓ,ώ1Š_ί!+/Δ1tm ^w–ΐδ5π H,«•ΑIζ،ΗkP Σ7jPΎo„΅¬»6»ωΝp٘½KΜΌΆœŒXƒZΧΒNΆ΅ψόι&[ΩΚΆu§rλ‘T»Ο 5΄·νκεDΉ)pόσΆYmkŠ U/…³σΈΉΝXˆψΪ\Ι[ΉΞ•.|ΥΒα\χ¨ο½ŠP°ΐ‘θ—=FςξΐێqΦ·Όͺκ;ΨέϊΦ³–Ε—ΌΨ€ρ ¦4UŒαS΅0”ΘGNr‘ΏΛ΄Ζ°¬ΚWΞς–·όVΉ*9―Dπρ`X¨xVDς•fο€MoŠ“,θDt>ύθFO:—Ξ'Λ’άε/‡•ΜG~'¦ΣIŠ‚™Π„ ΊόέoΉQŽΠ˜ hO»ΪΧΞφΆ»νp@ά灹w ξΘ;ήσΞχΌ“ 'ΰOψΑ—€E A ŠP‚",ώρŽ/ DΠ%ΰL2B‡ζ7ΟωΞ{ώσ ½θ9jΞOΫ+FΉ‘εΰTΰυ°½μgOϋΪΛήΠ€vΟϋήοθ=π}ο€ΰψΔOώπΟόΰ•~np(XΑ d ƒάΐ}7ά!ίohC)‘L˜?£¨Δ(TΑ~UδβύΉΰ2ζhx#αP;φΟώϋŸ ύwžvzBqk©ηZ€T-₯uψ€X'±ΠT›  › X %Q • ψ}έηd€Ωw}ΧwPH€6€8 Ix€4x|ΝΗ{ΠΗΗ`ƒΝχƒ@„B8„7Hƒ4(ƒι”NP°„Χ—}Ϋ7‚ΰ‚ SΨŠΠ Xœΐ~± Όΰ ςΧ ΌPχζ°y:q#εΟκ€q(ι ρρΐρσηΐκπsXΰpΰaιδ qˆŽhδ@ι@vhα š «@TpŸˆ&ΐ~›π •° ˜P~%~!~έg‚ΪGLω”N2h„ΊG„Ί¨‹»§ww7wr—{FΨ{Ί§|Μ·.ΖaΘΑš'vx‰ρŒ‚ˆΩΓ±‚ `˜ƒθˆƒh谈„HŽq‰Šxˆ’q‰δhκ‰ŽΈy™xΠ0σχ~ ν§ £€~•`~ͺΨPΐuŒFw ‰‹Ιχ{Μ'y‘™‘Ή‘Y!Α·‘ΊqΩP‰,’P ρ@€§›Η—Q‰ΰ°ˆ‹8θπρ° a P AΉ ΫP Ϋΰ E‰”EI”ίΠ”NΫί •HΩκ`žΑ8@ΰΰΩ–ς a ‡b–ρOhYj©–i9υ—l‰–.QŽ˜1€ΔŽ])e|9.Π—#V€‰_9˜κ%˜†Ω]…™˜Ο…˜Œ‰\‹ω˜¬ε˜’ωY‘Y™}E™˜©V—Ή™D₯™žSšš€9O£yšΚdšͺyK©Ωš“Δš°)H―9›^$›ΆΩD΅™›,„›ΌΙA»ω›δ›Β™?ΑYœζCœΘΩ=ΗΉœΚ£œΞω;͝ͺΤω9Σy…cΪ™7Ωٝ_ÝΰΥ5ί9ž/#žζΙ1ε™žγ‚žμ™-λωž–βžςΉ&ρYŸ BŸψΉχΉŸΎ‘Ÿώ©ύ ™ Jz Ža  Ϊ Ϊ ‡Α *:‘|!‘Ίš‘u‘ϊ‘κU ’–R™@I‘ ’,j)κ’+ £-ϊ’4£5ͺ’/J’ΑˆQ χw>jB€@ϊ£Cj€Dz€JŠ€L*€η £qŽyˆπ Ujη°Y Tϊ€\ ˆZΊ_κ₯]¦c:₯`Ί₯]ЦOjŽΌ!ω ,?f• H° @s"4`Ξ Γ‡#JœH±βD…ZάΘ±£Η C̈Q€Ι“(’T˜²₯Λ—0d³¦M†35ήάΙ³gΑœ }  t¨Ρ£)*]Κ΄©Σ§PW"JΥcΤ«X³j…Z΅«Χˆ[Ê{υ«Ω³Ιͺ]Λ6!Ϊ·]Ϋʝ»]£tσκmz·―Π½€gτKx§ΰΓ€ +‰ΈqΫŐa:ž<6²ε–”3Χ½Μ9€ζΟQ;‹ώΊ΄ΣΡ¨-š^]4΅k‰¬cK}M{€μΫAkλN‹ϋφξέ½}Φ\ψπΧΕc―\ωrΧΝW?GέττΤΥK_ǞτφΡέ?^σψΞε3ŸGŸžςϊΛν'Ώ‡ίρόΘυίǟρώΕύφίTΩ¬@ŽL:•ΝFΈΒ Ω€ΓΤ€GQΙvH!ƒ .…Nv(ρ £†F©sΐcΔ(#… ΪβRΩ€ £Œ‚ΐΞ…,ϊ€NsPaδ‘ TθЍLεxδ‘s ΞRAE€‘'4 % \`A_‚™˜d†iζ˜g–‰ζšjΆ™ζ›lΒιfœtfЁ hy‚‘QώHe•=]I„"πΑ  (‹6:£: ι€’Vι₯”bji¦œnκi€|P(0PΡηŸ€ς$(‘QDρ,Έΰς‹¬±ΞJλ­ΆζZλΈςͺk―ΐώ*¬―Δ[쬲|Π*‘Z˜Z€Š¨¦jΣ•Z0 ƒ‘3Œ1ΖΓ­·έrk€Έδ3Ήεž«nΊμ’λξΊο~+oΈτ‚[ΜΈπΒkΜ0‘ˆ  0κ,΄­I{p€"p Άt[ΜΔW|―]g\±Sd‹ 3μ0ΒκLΉ’Α5©“M6Ο„‚ ‘ΨR‹/kLρ]6ΫΌΡΜΆ„β„›<³²…'£\ΣΠΆH‚/΅γ‹05λ WΞsδΛΥΆd1A*Σ¬œFΓ„:λ43Β“6ΥOΝφΔ₯}Μ/KΐI9ι\pΨ1•ΣŒ#@ύφΝώΡΎK,ΠΚ7&ƒΝχK~.ψΰ£E9άSχβύ8δ`ΜδonψGšΐωiŸƒψ/Q³3Υמyβ«;ήzJ‘‹NΊμ³”1H©ηϋξ&υϋεœU~»κŒσ…|K½;νηixτO’ςΧηό^ράGλ½HՎ}φ›—oώωΟόzΪο9ό ₯~Υτ·ίωύψλˆό(7>u/€ρ υΨΏνύooδΘ8ς=p&̟Υ'ΎώAο‚Μ C·< Vwξƒ +’?~Η‚¬[‘E&X:ΪO…2”H OΗ>Ζ0‡‘!πΨχΑQ‡άNXD#ρ!B\ί }xΌ':d‡5$β qhE‚D±ƒZLaNΊˆDΐ-‡SάβΙE*qx6cΩxΕ$Ίp;0t" πE0ΦΔΔΐΧWκ'ΗΩμ± Xβu1 bθBƒ4 ιΨΗ%.ΙΠE 9•<Ύο‰”bLˆ‹|ΐΊ€Ή¨BHς©$k"Œ_” αΠ…&ΡΥII~r‘τ#LŒ‘‹Rj€ α@₯*{ΩΔ*Rσ«Ι1ˆΡŠ|¨ΰ˜ΫΠ/–y”VNς™fδ 0]RΛjͺΰœ^H‡2‰I£xς—l”₯ΕnΘRžσœdψF34ΙMŸΌ“‹ΰτέΫf“bζƒ*ΰBΙ@ŽuΆΣŸ(t%I`ιEhήΡ%s‹…=~ΰƒψΰ;@9tI ^φδŸk€h,νˆΖa’2?ψlΣˆT™&έ JSJQy΄&U‚p „#( JpΓ7ΙIFτ›ρdic2·j"αWE4ς‘zt•[«δΙNηΨS‹^4%€¬&VA $(ŠhD&b‘ „υ&c¨JW΁ ₯„‚ΰΡ (@‘­x….!yWΌ>ͺ]τι_©ϊ‹j’a›Ψ†  Š}ΒΝΎ (₯ͺH—–²­ΨΔ+T!Xvπ³±Nm&<Ι(YΜΩΔ–ωΠE+t{2Xα‹-gK[Šς%άΕ6v« Ε6#ΡxE?OZΡ΄„-E.1S ;έrbœ¨kSΕZ]ž–΅―Ρ¦*ΩiŒ_4W±­c‡K\+ΦΦyڍ/Xο*_ΗΚ QEov―“W½ͺτΎ?}Ž7Ÿr`γžu7~%0ΝzΉ [˜vΞ°Ν"lΰΡ XΓ ±ˆ/ΌΰNψu~±ŠW¬aG‡ 4M0YLγWΨΈ±[Pƒ`ϋΨΖ%fLΚQŽmωΘHN²’·ρ&£O.Η:Κ“ψΚXΆ o„œ‘o@‚`³˜ΗLζ l`-hΑ˜HΠ h@v±Lg:kyΛeΑ`PX’“Γ|#x€˜ΎDθA“iLΈ0ЁF»Ήp€ `θB[Ίƒ†ΐbε:{ZΕ­\’y­²γ”δ ¨V NJoG¬ΓAλZΧΊͺP„ ψϊΧ*HB2Α oΔyΟNφŠοό“QwΖΥF=RjΧγΌΨD¬ ‚_ZPΈC%rAŽiηΓՎσ•Νn3[Τ©¦«/p @C” ΰm8 nP„*Œ=”·ϋΰ υsΖΖp†WƒΝfΰuΏ 2δΘ¨‡=τatΌΰFΈΘΩφξα°ƒαΰΕ'ΆένHχ°‚ΈyA΄|δ/ΉhΞpdlbd°Ώ½έh ΘaΰωΈΝCŽσ¦WLα©a‡7rν†#ΌάΫ<°ψ(xQ LΊ07wz²u~ž-Ή¨ΔΈ=ρ˜ίΉ΅@ς™N‹ηd· ; ΰs  έίί8%T u βΰ1…οΞx¨wΕμc‹Υ­ήod=£@8ށŽΔΧΖξŒGxޏrr΄c"PθvΏUξq‡£ζθH‡Π1œ°‡>Λώσ δΡΡП½νGΈ* ‘Žt€ƒ²ίθoΟnΗίδδμΈ·•pu_[ž Θ|ΝΙρ~φ΄Žν™ογΡς¦_»†l(δξΫ~ψ³|ςΪόΩ;2F‘2¨€ίμ§Α'p…§έ—|©2~φGcΞ7»'}hpμg}>€}™—7%Γσg4υ·€v–{qrސ ˜ ~§2W Ό w±·­£€j XfΧP™°Vΐη˜@xκ€ν°wԁ1ψc hΡ§ θo?€}—BHw2ƒE˜aϋ•ΐ λΐp#ˆ n`/Η~(˜Ÿ°‚†Gπ`u…μΖ-Δ@ W™ ύ§zήn<ˆtοP#η%g)憇€‡Ιpˆ±`‡O h€g}J…Θ€€ΈW|Δt‚b%uˆΊ° KΘkθŒΦV*(k蠁.H‰œΆx—ψ6`‡°xˆΎΠ ŠVi.ηΠDЁΠ[Έκ „ͺD–ΨŠSˆΔ ‰˜^°o€ηr$π|Π%1›CeΕΘB¬(ˆϋ•‰ΛxˆΩ¦hPλ§‹‘ζπnΠœ JνU3Β0ƒΫDx{pΈŒΎ@uά–Ž.ΧEΰ|ΐ ΈΠ-Β lCυhΰP!Ά- Ύ‡Γ`„‹ˆ¨ˆA ‹λΧ‘ΣΘ™ ]%΅_T‡W£5œ J²±2ΩΠ 1s5I~™˜ ΩΦ‰cθrπfН@/Pˆƒ5Άΰ Ο 4,ιγ0"s&1DYc―‹αΈ΅˜ΈxŽκX]   ΙPRΔ01$iaΆ€P) ƒ0ρΠ”1$E2(Π,"` g‰pΚȌΰŒ;ΰ‘Φ’‰–Uω6Ά°ΝB(|"%rI«‚QSω ˜™™šΉ™œΩ™žΙ™™I›ΐ]P‘ΨŒ†ΰb š +³ς™²9›œY P™S*Q™’Y$ΥB*0πtP€@œΖYœΘyœΚ™œΜΉœΛω$ΠkΊ˜š-°Y@œΝ ΫιœέωΛI0Μβ,Ό9“™ ΰ`ξωžπŸς9Ÿτ)ŸmφhE§šphRŸώωŸϊžΰκ‰ Π,»yž (Zp*aΐtΐ:‘J‘Š‘š‘Ϊ‘ϊ‘|`NZ’&z’(š’*Ί’%Ja zΝbž ϊ"c ;"Οpλ β e> €?Ϊ£C€D*€Hz€G*δ0eNeDφ£β0eSZ₯RZ>š₯ZΊ₯\Ϊ₯\*eΟ 2‚£Z0@Œrι"‚P"0B#B16~‘#l:=‚¦ri “§’ $’§3!ΰπ}‘©ρΐρ¨‰ v: §X2%}Ψ}η!ω ,=Œt 4G° A*\Θ°‘Γ‡#JŒh°"Α‰3jάΘ±£ΗŽ~I²δMͺ\Ι²εF”"]ʜ‰ζEš8sκΜhσζΟ{J'8pV$MΊb8u=£JJ΅ͺUƒM—*]‘ Ί’`Úwdށ9hΡ€w΅­Ϋ·p ”6ν‘lνΔκέ«1Ϋ‘1€Ο9ΐ.αÈ+˜8π]u|#Kn˜m*.S™SjβΟ ―˜£ω²'«ž\Yσ‰ jΘ`!mΫ΅oλΞΝ·οέΏ{.ΌxπγΔ‘σ>p#AƒšΉ’3·ΊϊήΦT΄4@€ Ζ€~ΌωςθΙ«?Ώ>=ϋχξ㷟Ÿ>ϊ5Έ'€qy…―ΦvQ$€@`€Λ/Έ,Ψ ƒFα„V(‘…^¨a†bθα†NxQp§E ¨βPΨia ‚SŒ1Ζ@£5ή¨cŽ<βθγŽ?φδBδ‘D"Yc$ž°ίew­(εN~pXf9Μ”Ce‰₯ΐU:\–ιRWΩ<#KΘŠ-7š‰“1Ά„"Λxr šπΘι'Iθ|Ξ;ΏXΠΒ/ΓS̟4ΡhΜ/WD I:Θθ₯ύRA Έ(Š)NΈDͺ‰:P}j*G…rj€Œ§Άτ¨¨ž΅*«DΈΪι’³ͺ€±ζκ«Bκhͺ*«ΏŽτ*―>ϋ«°·*K£&λ쬩β²*Σntl΄Τe›+³žzΛ΄½ŠΫj΅Χš›ΡΆεͺϋ)ΈΨΊK+¬Κϋ'ΊΔΪϋ»υκk&ΌώFDnΏO‰oΌ'Δo· »i³ 340ΓlkΊ#΄pΖ\Μ1B,εΑ"o,²Š‹ςΙ’ό±Ι,[—ςΗ+Η\ΛΓl³j3s\σΞ“αœ±Ξ@GΦsΖ?Ν—Π­΄^GλU#Βa%ύ΄XL‡5£’ω†ετΥ`E-Φ0ΔΨ(Υ@Y vQYƒeŒ.φ£KΩ«z )²―φΓαξU έε c1Ώœ –ΪzΥ6QΒn€αθ2·αD}ψObWK,h@F8Ν  ΧE!~ΉN‹u ݝ“αάeχ½“ε§η”ωP·’η 3χ/€dzν4₯”1t«`€ *AŽδ±£-νΔΟt;PΕθb@><¨Π}d>Έγ·4|υ.Σ1…Ϋc€πΓο<τ•―υθ·tύOΘ τΓJ°•€†ΐύNxτΚ[ώŠw±imsP‚p A€ζ›@j4§»qk;ΩίNΨ'$α&„F>V˜z$Šƒ99M’ΎΩCw(\D Ž€ ](’™x…φfηΑvΝP&"ΤIφ87¬£P0ΐ9Z!D]Γl:‘αGRC°OwŸ3@5ξ`Uxφc ώΆΘEΎ₯‘tK†8 UXΑ η0π`˜Ε²Ρz |£‹|θ‚hE9Θ9ΙՍˆ~όcϊά¨šm΄BrBlF,’ρŠG E‹’άHuςΆ_θBFΊh'V© ΰ―ˆ e¦(i4G.{―ˆ…φΕΗFR–*εœ…Εb3'kfF’h/P*S"ΒTW2Ÿ MZͺμ—ΤΜT KKfS”Φ€6Ώ‰ͺmΎ¬›δœ%§dη³q>mωF9†MsM“c0ΐ π€θ€ς‰fΚΛ™ ³B2p 4 ΠζΜ™3tξ,αΰE&ς 8 !uC#8g»pΆoϊ‚gR–"cυ¨@ @!£\=Ά—ΤQth•<-pEžΖŸΈC$*ΤΤ y 4άgβΔ–ˆAέ…PF₯Δί(ŠΑ LάαL₯)T`…@Hu…ϊΘ‡ϋ°φΣ¦UY G.Ρ8ΰ£N]+‘ oΨγ°«ΩͺΊΊ* ˜T ήP…"ΘπƒJ΄P‘ŠpΘuEυΧ=Wdv°#² šκTΰΰ Έ.ꑏΉΜ€Hsg€RςΨ@Aƒπ‚ς (Α ŠΘE8ΜρK…Φ[£Υ uJΛhŒ"Β%nq›ˆ ^„Γ+©AˆBύ€Xs1v&(ιm ±ΡŽͺΥ©6½C%xAށƒR²znΆ’K”†Ÿˆikα{ΣO ΐ―³Κ+σ‚&κ%GYΟͺνjͺ9Mdξk.ύN‹Ώ± ;τŠ 7 α½NU’ uΌCώJ ΤΕ`o9Ψ!ιU/dχŠ% X°nm1©Β[0; Δ™nEL{ZΙRΕa½v cΘ«qΆΊυFCX”€άΞ€Ι;3²²’•κ’"dPv€7`Βαx‡ž‰ 4-OKm]ξνKaWGΈCwΓ‘šw\NΝΕϊšTq]χ ς₯o‚Ε‘??KF ‰Ž%\‰;tΤΒP5°ΐqެ.ΎZT7Cbڌΐ Pψ+qيSd€γ^™ΨθιKΙθΨΘ>v¨&0*υκUnπ±vUdr8:ΓV&¬”μnΏΚšΈ²7x,mβς`°ͺhρ;ΘQίtκ·²κΆΌM#b ΙHΖ/œ€3ΑΪΐΘΐY*ΰΕ|vχΆ«3οyΫ;ί±Ψ¨δόWšw³Ήπ™Hεnˆ[k Ÿw½‘ |C|£IhΕ1‹'$7WVG°;ΝΊ–)δ'y2ZQβB·φ―(Bψ ‰+0Σ‘9OΜ―cηςyΙσ½sh/5’u@ΠEzIGAk:±TΊBR-9p2Pο61πν ɚΈΒΧ@ΠΝЈWξŽ[ΥΆΐξM±Ÿ„ιnD6XžlG!δ&o»"ΠPf]λO€Cέu‘¨=.Τ »ί RvΑžπτΎw2t±‰@ «άŸ°† ^ρξμeύŠ1λΎϋ}ΥΰθŠ,0YψΒf½πC~-‘Χ{νkΟ7ισ€T\υxB ΡI{γΓύΎ3 ‰εφΙ}6²±&ΘΒp ώπΧϊγ~£Ω}ΎHπ>pβΕΖΦΤ/|τί)OΟ0~~ αp%^BΒ€}μΧ€Θζ(Θ—|Ιqyπ*wEC· Έ`o2’[γ€3’€`RQB€ A ά# (‚θ~wχsU]0GΈπ7ωΗ.xl0%‚0 \‚)hTP ’ xΧ„Nψ„P…R8…Χfπ€Y…ΌΗ‰  ‚w2…dX†O8"QpTΐΆηwb 0e`‡xx‡z˜‡|Έ‡~Ψ‡€xt[xΠK wˆ‹ψ‡ŽΘˆψ‡#άΑm˜ o(v- ήa Š’8Š€XЦ8Š€ ur·…ͺΨP΄qв8‹΄HŠψΡ‰ p"˜‰™HsΨ‘'p7P|PŒΖxŒΘ˜ŒΚΈŒΚhNrΐŒ8ΤXΕΘΑ¨‹—h„ Q€‘‚qυPβpεxŽζ˜ŽθΈŽκ؎μxŽεPη°λPς$OρHŽϊ(δ(ώθϋψ9YY£Αΰ¨ΑQu‘:V‘y‘½Ε%θ0gc0 鐫v ˜ πbƒ P’pV&’αbz{–p£ρ“4©“ρΐ0y:3φ“!ω ,=‚ ˜H°ΰ@*\Θ°‘Γ‡#JœΡ EŠ3jάΘ±£Η ~I²δÐMͺ\Ι²%H”]ʜΙfLš8sκ€hΣάΟ&{J'8pΩ’*MΪ§Σ§P£Jjpι£κŠjέjά+ΐ† ΛNΥ³hΣͺ8Ά-ˆ#ΪqK—γœ9‚ξ t€έΪΏ€‹Μ›οΈYλ*^μ*©Μ1`V°εΛT Μ‰Lα ʌC‹^YΛ‰7¬α²FLΦ¬]Γnύz5νΩ²mηŽ]›7ξή·uίά·πίΘWΈqFd„‰EK§KšŠ–Τ8° ϋƒξΰΏƒ_ >όxςηΛ{OΟ~ΌzτξΫ›O~χ5²7Πω3ΊιjeN6ΥE‘@0€q$‰0θ`ƒ>(a„Nha…^¨a†nψ``ΐp sT¬Ν¦T6GŒαb~`Μqΐ/ΒΤhγ8ζ¨γŽ<φθγ@ώx@cάp.šŠLΔβ]uΤpCuP`Œ1Mu€ `άPCŒs˜ˆb–d„8ξP°‚ ˆΠ¦Γ`YfN"ˆΐ¦¨yΔ‰sφiR:κ€#‹Ιr₯0rϊΩ•ΓΘbΐ`΅€’”v„KBqV:S ©3¦¦ b4i¨.%šΠ§€¦ͺκͺ¬Άκκ«°Ζ*무Φjλ­ΈζͺλΌφκλ―ΐ+μ°Δkμ±Θ&«μ²Μ6λμ³ΠF+ν΄ΤVkν΅Ψf«νΆ΄S ·ΰšδmΈδzδνΉί–«ξDθ’»ξ»΅λ.Ότ o»υΒ{οΌωͺ»/Ύύ’λ­1ΔcΜΎ‡k°.Γ£‹0'Μ­1ΊΨ“Œ.,―ΔΪCŒωΐƒŒ.Ώ\y/ΗΨ σ BV„£ Ζ 0ΚΤ&ͺαŒ\²Μ3Σ,νΗ¨pσ6Ίπ²σΖ>K«2B*4νE:Θπ 1›nΡΜtΣ*ρM3οl/Φ£K,π j“ANBT“=ν1+Ϋσƒ=ψπΓhΌ1B¦ΚΝ¬Φόπƒ6ώCί:cΈΰɚK>J(ƒG(„n|㰏CŽ,έ­δƒΔ§#M>ωΤΣ:θ‘‹~,1₯£%H(‚Œ"d‹.€ΛΎ¬δω@α<Ν@E9­Ός²0  Ώ,ιω±Ν&ΫΈ…*`—,}³OήL+›Ό’Šρμ„ϋχΔώ2Ή.­ΐV|σ<ϋΛ^©Λ6ρλβ|3±ˆΖ+Δ†?dιd%ƒ'6Α ΰE―€Η2ΖΞ¨&A9/!λƒ ―„Α+qƒLΘ6ς>‹X@ ZP`@P€ E(dΐΐB4Ё+ΡPEΌ …@hP„+|θ«zΤ™pΰ„@V„*ΒΑΔ]±.ή’48 w¨DΤ  œ Γ']δΚAb`€c°.Όΐl+‘ ŠΘ9μ²8Φj ε(q(TΡΈ"ς0Šhΐ˜4$«.‚ŽN’#Œp!I ΌP!5«δΡ Jp€yΨ,b‹¬l'=‰Žh"PΠ@$#ιΞA8F._ev„#Š †IxA[D‘– *”πΠψDŽ@Εa: wΨ2Τ‘ŽwLͺά¬”O,FE‘šΰAsŽt “©a<δM^šγ•±€&σ@Šh΄sTη@ vψ2c€f1έ€ dƒžΪˆ@'Z›|䀦4ρ©+`“‹ιπηH$J’Β„μη8ΛI !Q{‡;W2šΚΔ€Ό¬η=©©Ο@’P!u MzT›δΡ ζBϊН•ͺA*//šQsr£δp'@2U°vδ¦)ζ4©iMlz1ΛWέͺ§œœ£ΈCxjFtͺ³CUL[ωΪמΰT©*ΐ')HF54{εfς”oR”₯V­ΐΠhπRE‹ηf+γX² Σ¬εeήρO2eΦ„ϋΒΕ"  ֞4dπK³ˆKΌ’’LJν ο%Αέφ– 8…F`+ΪΒ•2ρ@ξœn+Ί΅ΛƒΔψ….` s@V²”}ͺv+₯\Ωy]W"՞Ё'‘ΊW$-) ‘ŽγƊ»{οw fŒd#ΙΰE#ς„8Έf΄bjΈŸαρŽ‹ •aν§(d' `¨£Θ­αO«"^x1Η]_8@βa*3YΓ‡^ŒŒΑ瀁BPU+Œ+2BΠ π‹²›ύμhO»ΪΧvaΈ8ΖfPδƒ;0ν4$ΒΈ`»ήχΞχ€! '@:#ž— μ ΘzΠ5ΑψΖ;ώρΌδ#Ÿˆ.€œιθΐZ@Lώσ =δ ’μ!\§•ΧηB Θhα@Ϊ9€fOϋΪΫώφΈΟύνsΘt d™Θ€ξ‡Oόβη?Hΐ~ϊ#8ήjފi=dNΣ€Τ8AΧΏφ―Ÿύνc_ΪwχΑούξ‹ϋαwBH@|όιGωΙ~σΓώρ·?ϊ—s‚œ 2&2idB .R€g #λP Xεπ Θ€ θ€  X˜€ί€λπ ؁¨8%ˆ8‚&˜‚Έ€ίps0gP€c $†Χ$r:xδ€"θΐδ§"„DˆzFX„C¨„GψO(Ε@Θπ@„QΈ„Hh…”„WΨ„Aˆ…]Θ…Zh[²ƒc&Ω°^°²z\α5Χq ‰, Π†·'Mψ|s"Tz(T %,μΔΩυρeQeΝV)}ΘX}ŠΨ*j«Ψˆ€Βˆ¨*8‰š"‰–*•˜‰Š‚‰œX)›ψ‰sβ‰’θ'‘XЍˆ51©ψ*ηΠ !|!‹6TC΄x‹Ά˜‹³¨‹΅Έ‹ΎX‹΄ΨбVήP ή ΗhŒΘΈŒΚ˜ŒΗψŒΡЌΡΞȌΤ8ΦˆŒ2%Œ ρηΠ_Qη°εθ@„η€ŽδhŽλΐްŽιXŽη˜ŽρȎτψŽφ(G8!ω ,=” ˜H° 9*\Θ°‘Γ‡#Jœ(Ρ EŠ3jάΘ±£Η/~I²dÐMͺ\Ι²%H”]ʜyζAš8sκΔhσζΟ${JgΟ£H“*]Κ΄)Μ’P£štJ΅ͺΥ«T₯jέͺ«Χ―`―rKΦaΨ³hΣ†,Λ–­Ϊ·pΏΆ»5έ»Mικ•Š·―_‘{CύKΨΰΓD +V‹Έ1ΠŐε:žœ3²e«”3³—ν–ηϝλ]]°σηΟΰΐ½ΣΜΪcΆbΛ>p iΰhΛ–½"›ΊΦΐ5ΎCœψ™9Κ)_ΞΌΉσηΠ£KŸN½zυsΞ'ήϋwπο_SOeL”9Ύ©_ΟΎ½ϋχπγ˟OΏ~ύs’D!OεH6πB$^yT pΒ p‘`W(ΘƒBΈ`ƒFHαƒJˆ‘…Vθα†j(b†$Fxΐ 'œΓγuΰ‹ E PΓ<9κΘcŽ;φ$?ϊ(d‘CIδ‘L.ι€’P&)%’TPC hΡβ0vi€Œ4ΒΖ–tbI™gš‰ζšjΆ™ζ›lΒιfœtΞi§œxΦ™g›€ ΐ°%:^ΒfQ€Q€1Œσ 1Ž#Œ1ΔόB©₯•^ͺi¦œbκ馟v κ¨’–κ©€ZΪ§' h\ 8GΜ!ˆ 5„Q‡ όb@£“"dΜ€Γ2J¬°Δ&k,£Θ.[μ³Ν>«¬1ΡN{μ―Φ:[-³άF ·Ξ៬0²³‚)xΰΑ&ˆ@G"˜`ΒΊˆ ‚νΌ ;©ΙrA²ψβ ΅ϊj$°,NXπejΰxWπwδΰ‚Π/Ε<Ό‘1ΕHœ:„Z žΓΏλ1FŽ*δπΘίU€ςF›Ό2x ‡LπΛ•Ό1ΝΑ©ŒσD-ο ³2ϋμΝB§sΡυŒ4k1‹Ό΄°Ύ>­ΩΡR'€tՎ5=σΣDcέΥX_νυaZcέυΨ‚]΅ΨhοUvΥg·­—ΪR³-χ\oKχέmΡύ΄έ|—•7ΧQN—ίKn8Wƒ/½χβ\!Ž΄βKΥ8W.•δESyQ—ωηEq.΄η€ΊΠ£§”ι>£ξΊN«ϋάϊμ:ΑΎ³μΈΣTϋΞ·χN“ξ8σ.ΌKΏγόρ.O³ρΜ―”<ΝΛGΏ’σ/Co}IΣΏ\½άΫl“Π7―·­ύΨp°Α-ΔpA?uΏςχ^+œΑύ`ΰ€BXόŸH@κ"Ψ[Ωω–ކΓy8BB ‚GιU„ι¨Gz:¨’+¨qJC*Bˆ^1NυˆY‰"ΥwQU VEˆB‘‘+Μ²„@Γ(’ΟΈ~„¬Ο¬§P‡†°ƒQΜ&mš p$„’*™λPκJ.ϊ―KaΘ0£aF ¬3©”4lKϋ5ΕRD)xDπΉˆ$¬“‚wπ*80‹ΝͺN₯fk)BͺZŸ,δœ d Eπ"ΌΕ k|Ϋ%»…– ©‘_Σθ†Α’C§[Τ g«[ŒbPλ Π„:†‘aB6₯βι±ΒqΊ^+oyq^υ"%#μ€FiΣθ…J@Γc u₯΄μιχΑϊuTΧ ˜‰ 3θ#y[SΊ Ώ±ƒ°ˆω›ήυΧΈρF•ΛNηͺ#¬icpΟ*βΧXΒ@0FŠ }ώ•‚hΨ„7ά^Δ°1 ¦‹—\^„Tμfy,,m ΝωVΆ€•qƒΑΓδ.W¬Ι ٚj‡YΜ3¦‘ ˜ˆ<βœ#&ΙZρr  _«mδšGΈmr VϋMΛΏDŒœ»Lg0?d₯W¦Š!)IΎ3Ρm›c̚A?˜Ξ˜~2EΊˆVφx«9tƒMκ%8Λ$&hΜ4]KZ!¬–³ pSΌς=€saRΛjtΘ/*Π\`ΜΠdqυ₯cmηŒΛ (RΙ``xψϊ]¦fIA~‘κU3(Κf2DΎ½FƒΙHΖ&ς@‚(6ΈιDαι_;fΫΔ66²‹ncš$ηΦ…"Τι€hΰb@FIMΌ²l―dΫݞTΏ'NρŠΫΨάΖHΊ[‘‡"Π’–x$œ06veΐv A†]μc[όε0W6Ζ’α‹L0z–(ΑZ!ŒŒM8% ΏχΚ#ξς˜ύθζFw2b‘ˆ$˜v–!oΔ+’Α¨ςώβη'GYΚ§Ής|ύθ`ωΉΥ}˜p–$€',e)“Ψδ(φ˜ΓUqUK<μxt£Ξn^4β OΧ€žΐ‡X˜χQ"ΖΨΥK t­ ]Ψ^Ο»δ½Μ¨tG±8 Ka¬κ>φβαχ‡Ν}*C·ϋΧ'χ€§[6οΐ,iY8΄"S’σθ)œum]ε,Χ7λY©₯Β―³y"tA±žGxΠ»ΗξΛNΟn«~ψHη{ΊCH„Ω; ν›xΤη)Ύ{ŸύΎ-Α_=φ)N)bδσ˜ΙOtQ ηΓΌό;£ώJ¬ονυ»γ— Qδq¦UK] τWtκnψ‡3ηΗιηαVyΊ€ 4{9Η­Π|’Χ€4£#‘· ΆΠ& Ά Ηp xqν—n­p|‚rO uΔπ|x‡‚Ά"ΰ ž‘–υ2Έœ1P΄a-ac— n°ότ}p ’²~Η @œ‘/AΧΩpŁ7up†jΈ†lΨ†nψ†oXyθΖtO {‚Χς§ Ξ‡|Ψ‡}xu07€`ΐͺ!„Ž&(ΰ‡Žψˆlxn‘…`‰€ υ‰šθˆΏΠ'QΠ*―β"_ˆ’a2&šŠͺΈŠ¬ΨŠψŠ­h rP‡‘”?1 ˆŠ¦‹ΌΨ‹ΎΨŠΰ'€’%TΠυφ.C¨₯H#6r°ΟΠ8XΤxΦh0‘t#PΩˆδ8ŽζXŽΣh%XŠΩpŒδ‚1 T'Πβ-p: όΈώ؏ωύθ DΰO ψHω‘ ‘'R'@γ²=*!δλWžd5’"Y’$y’&™’(™ρΐfδεpkO˜E(+©’8βy“:™’δ€ό±%ͺE.% ‰X+Ά2Ά"ΐξ(€ Gy”ώ”…R™PD€ώΓ•[i] –_–d9–fι•h)–^– †++—q VΉ2p)—sιμ€2ιΰaΥΰ ј˜„9˜‚ ˜ˆ †©˜‰y˜…Ω˜Œω˜„y—•Ωp™˜y™{Ή4萙™ω ƒ2θPτašp렚₯I™­ΉšλКπš¬‰πΰšΆ©š΅y›³™›z…>­ΤJρΔ”Rƒν0œΓO©!ω ,=£w ˜H° 9*\Θ°‘Γ‡#Jœ(Ρ EŠ3jάΘ±£Η ~I²€Γ"Mͺ\Ι²₯F”0cʜI³¦Ν›8]κάΙs%Ο@ƒ ²§Ρ£H']Κ΄©Σ€P£"uJ΅ͺ՘R³jm ά­l·ΎŠ­w΅¬Ω`ΑнΥUέΦ·p;‚ΛV έέ{Φΐ»vWp·°aˆΩ ŒYΜx΁uηΚEž,Ή2εΛ–3cή¬Ή3ηϞCƒž|`cΖ‚ ^Ν:Ϋ *°cΟ)PΆνΫΈsλήΝ»·οίΐ˜;vjΦΘ».E ˜ΈLEŸ.½:υλΦ³cί½;χοήΓƒ§^Œ–ζQ`―ΘΖ.Ή{ΈΛ©D9AςλίΟΏΏ(ΰ€x@ υ!λ΅χήƒRΕ§Eυέp@ W΄†rΈa†v’‡$Žh’ˆ(†¨b‰)²Έβ‰/¦xΐ 7  °‘Ν;φ˜T|QPπ‹Υό"LBK&Ή$BM*Ι$’RBIε“D‰₯–S:Ωe•Y^ωε–bZι₯_sh@ Η£pς”ΝsΤ!H aΨI–qE u€QCsΜ‘£j}&jœ+¬πŠ ‚0ΖXY©’-I ι€°‚Žθ`*κGθt•M6²`π,΅Τ2jO­ΚβΔœΪΥ«ΈŽ4BΕδΚŸΰ κλ°νŠ‹1½ΛR² «μ³Yν΄ΤnUΗ2[νΆά²$m·ΰ†k΅ΩŠkξΉ}‹ξΊμ6D.²«Σ«ΆνΦλ’ΊρΚ«―½όΆτ.½oι»―χk°Fψ&πΒ7ΜΡΏ†-ΜpΑWΜPΒ…I,±Ε?qΖ3άρΘ aWΘ“<ςΗ'£œ²Κ›ά²ΛΓμ0ΛpΡ<±Ν Λ°ΞΜ³Α8η τΌCμσVG4ΏE3έ4―OΫ»΄Τ@ ]u½Qk5υΦό^UΣƒ-nΧ^ƒ¬Λf[œΌjλάv»hK•μ0ΔθB°ΘeΟΝ­Ψv£‹=θBŒk3Ϋ·ίΥΦU1ΔΔ’O9Θ~€B‹3ŽΤ7΅%xTΒό"Ήαθbω₯šΓِB«ε8T‚Kα4c:κ©g…―ΤηPCL+ω¨p»7yσ ο½#N+w¨hΫ$Τ=Bίsούψ͞TθΘ« ΎηTξ<τΡ»TO=T*Έ‘J>ω ΔBύσ(ΐt!Η‘KžϊT@r˜ξ}ρsI>μ‘ 7XΟψ»ƒ+βρΏ•”#!θ8ΘBΜ—]HŽ*@aΘ@ΉΣE°$ό‹‡*ξ `PyΘ…§β%ε’³Η|@D"6πΟ{aGψΗUΈ‘†r@Έπ(”ά~ xQ hh!•ؐξUΰIόΛ‡9HΰEρy@ γΓJN Jΐqp0š#ojƒ»gaπ€ ƒ’%ύ›£ah " G8&‘‘Ζ|Τc$£EΎQ όb^Xd‘ dμπ=uΔβρς‘ΙEβ˜Π…"‘‰WθM½³H5:`8 ŠPP4τaΊ‡’F1a> ΰ†u4 P8G+|©‹%Σl1:Ζ‰h`Β Π@:€LDΓπ„S,+ω δαnΥΈTQΉ$Fπ a;Μ …c Έ€)DMžd1Ιh'b‘ +ΈαΊxή7“VrŽŠ€#`L,ιΗΥ<"Ί|θ‚ΊhE9Θ@Ίέi E†"”0R/TΒδ(Ω¨Ί΅ιb­0/›‹hΌΒώJΘ‰Œ@π4Š ΓOΩͺa­Τ‘‚ϋ…ή 'QNΐT£OC /ςpUάnή@‡ƒ.6TlΑ«0P duρŠXόq*³ˆGΡ±V0{€πΖD₯†uΌΫθΑ,"Π\δA‡u)Βr€c"_ QΙΘΑ’“Ή¨^fUρ&0S‘%-H ΒrΜ³Q̟*β‘t8 ΄u-—lM“qΪφ‰UέΑŽήώΆ|£Šνp“p°Q•ψΛa:ΤΡΪ‘HΧZvΝάt©†cŠd€ςΐ w<χ#―UΤwe‹vx½ΖŒ’βh€ξz+Έw/D¦JNoT‚ ωŽxΘ.ΊΖH}½qΞ‘•οπ/Oζ›•Ρϊ­Έδ4§ κ€dBΓ†p„“φ`’ X51w·Βa©x8­0ρ(HEŠΥ’F£ΉοEJ|Uc›΅X§m%ιOƒz˜"CεΖ›‰G«šd­zC ΘrŸœά°™°ƒ‹ ΑaΙWΉΒΐβ%ˆ=ZΨΓ’!±prœΈ\/˜”–Ε­[5&ΛΝR₯Ι8’Z=k@~N”œ\΅šΨV΅ΉΥ_<|«bLAy[ΙΊB4‘ŽΧ‰PΜ +ά1Ξ ϋhΡ>’³²δ… MsΊΊΧe$s±] WZQ—&–Ζ κκN“SœηMo{ΐ^O Υ=Rυ¨BΦκMwZ χ6~^dx[ΚξIΥ4^Σ*ήψ‚Ή`dΜΓΦΠB6„² ‘yΙνNΐΐΌ_\Χ»w²νvwΫΙ F2bΑ‡uv™­Œ9L}μ[w‹lĈ\ ZC dΠVWΧ΅oτ;bd+7π<Α˜Π€b PpτKέκΈέΘf€ˆ·"H€15π>Œ΅g€^vΘG.π›Λε<χyΗ`~f_MMδWEv stΰ ‰Π[J‚ ‡Ιά_ανΩΤVσˆ'CpθΚ―ήΓ]J²φbΊ{Ύ’£ MmΙHΖ&,Xυ«'βp »Ϋφδ„\δˆ‹Έΐχφ”_=ˆKΖDΊή0Ή'‡ξy:βNŒL טθ$ΑŸ σ)Θ/*Π‚lΙkf&Ί/2†Ζ[½ œˆ8d'Βκ^„k}R½ZΏ6e !xΧE&Ήv8p"πΘη½Θαϋί³ υQ=λ]ψξ{_j#ΐ“‘ό'Τ°†$p>1Ύ/±fΏΪϊλ²|a„O|φΫ?kCωΟΉHc¦Ώ°~χ§/Όζlαt}ΑG«WΨ€ ~γ§KVp~@pπ λχ<¨/ξΧiπ‡.ςτΗ}Ψ€ϊ§K…r%°O%rpS‚ΣW}Ρ.Ψ's*ͺ‚ ΅ΰ Ã݁y А;ηEΐ±p>Έ0;(+  Ά,+Ζ7ˆ*ΰ² Ά7Kψo7qΗdL)ΐO•8]¨/ΆΠ ²πΰ Ο`+"„.1Š‚p‡xΨƒg2α'p%wr;w„ng†{(rwxxˆ‡ζr π-‘ˆ“θ:’x‰”ˆ‰–˜‰œΈ‰ž‰•¨―!B2@ˆ…7wsH€t=‡  H©Έ0ε1€# 2λ2hΰ Υΰ ьΏŒΔ8ŒΒŒΘ Ζ¨ŒΙxŒΕ،ΜψŒΑψY‹$BB$Ώ€ Ωψ Ϋ؍ΪθάψβŽδŽάXOyPΥˆπ γXŽΪτ(φhŽγ8QPm’ Œ(.ζ*η]υAηλθp ‰ ‘‘ ™ ‘ y‘ ِ鑐!!‚7@K’*Ή’,Ω’.ω’-ɐr€°0θ™“:Ή“;9# ‚‹λ±qSˆ@r”JΉ”LΩ”Nω”My`uU“‰P©”X™•\Ω•Jy 6Z Ω ”C9ρZp¦Ψ nω–p—r9—t9—fU—x™—zΉ—pYT€‹di–gsΒZ°‚PλŒ 반™’©₯q‹± 7˜ 1'…™s 0W s‚ΰ™… š9₯°­Ωš"…Σ(―隟Β©IΝΥ` ο ›ρa ξ•™Ή©개Μ92ΜωœΙ)!ω ,―4 !ω ,―4 !ω ,―4 !ω ,=₯u Μ.›Αƒΰΐ \Θ°‘Γ‡#JœH±"Ε„fCg±£Η CŠ ]Ζ“Iͺ\Ις!ʌ [ʜI³&H rκ<°"›ΝŸ@f[±3'NxA“*]κQ]9T’JA#Σ«$³*uN¬`Γ&5gξiΤ(Z’D1νΫΆopγʝK·έ»xσκέkwΫ4j©D‰κ՜ΨÈY’5U0ŒΗθ”hreΚ–3cή|Ή³fϜ?‹M΄ιΡ§)Σωπψ1α†Λžέ‘¬Y*$Hΰ‘C…ίΐƒ NΌΈργΘ“+?>‘ƒ‡έΉ΅P)L»Ίυ‡ΆηΠ’ϋ aδΘI$žxςȑ/žύϊτναΏWžΎϋϊρνΛΗ??Ώωa˜pΒ Ρ1Ϋu^GΦsŒ‘E 70†΅ #Μ/ΒXh!†^˜α‡‚ψα†#zΨaˆ$žX"Š&Ѝβ‹.Ζh‹cŒq`Œ1ΗV%θcbζ¨s€ sΜQC s€!‚-ΒcΜ1ΕDYΜ“RN ₯”Tbye”YrΉ₯•Uv ¦–a~)ζ™f¦εŒ`Τq$sr@;?Φy˜9θ¬ 'Δ@&ΤRε „j葈&ͺ蒌rYK+ˆΐΒ ˆ '8κΨ©ιUAͺŽ8Δ 0Β/c€” sj”©ͺͺ@ͺ’ ««­Κz*­³Ϊ+«Ήςz«ΈώΚ«1ΓΘςΛΈ"¦±mκlPd‘UN3ŒjΜ«Ο^Υ$±K‹8θ,–νΈ4EkΞ΄Υ6Ιk¬δώTe·±”m»τͺdξΉΤŽΠd½JI) Ός6Λοΐ"‘«―©εΏή–“πΓ!Ό/Δ6σορR¬qE#Ό±LNόρΘuL2KQώ"ςΙ,›Μ²J―όςΘ.ΟΒK`μ°ΝΧΜσG!7όσΖ>]QΚ2pΡJO³ΠM/οΔQ;³ΞUΜt֝1Χυn 6¬Ε¨ υΨ䊍φΣ_£=Ϊ`㌡ΫoOν1έ y½3ήΞΒΝ5gσ­©ί3άΆΰv^΅ά‡#ώ£βUλνψΰv;xγ“#yΤlοy‚›+ΝΈηŸ_Ί’—zεˆ_NΊκ΄ntη°kΞΊΰ£Χnϊν‚§{μΌγνϊοΥΙ>4νΔΟf<ΟR&όaΛ3_ŒσΟΠVΡΟά|ΰΥ Τ,•=MΏ$%υ΅C“ α €Bx“Τψ ƒΰφ˜— &V8°Π‹ΰΕ9R Π―%ΒπΡωΈ—9d(B ώ3€  dδΓΔ =ζ<Δ\θ~ Μήμ‘‹<π 0α|\0,d‰1ta€|τ Υ αλάfUΈAH‘ά@ rΤγ…ΠλΰaŽQΎ ζP‡`³@CΌ1 28 ‚*ΈC.DΩΔp%w³ΞΥD8΄ ˜€B‚„E #ƒ]τ’Χζ;£‘ƒ#E0ΐŽ€B ZAΠΈ`‹7G±θ"χ3_FUδαŠ€Ȑ‰Φ0q…Λ1ˆΡŠλΰŒ»γBΌ± φI²p‚*Ψaruι £™Α'’ocμ`­ >Ϊ@ °Ά²υE•|Π“cά!ΑD)d }4ΐΑ‹x”CH`Ϊ2‰cΨAu„; PB τΡVΐ4ΤρŽq €τ*&IŽ)Fδ μŽw ‡UΠΗInΒζGΈ&OζΠpΚ;Όρ S¦PnP9ΜρqA¬ #1UωUΎΌ… ­3Ρ¨Ζ5ώ Ή0;F4n^Εb©r’,Α’Μv±ƒP 0Α@ Cκ0ΧΙ0JmΞ4(S2Ζ-«ƒOސ#w°ΑN°Bhά‘₯-siΦμι£\†ƒh" ‡8 oˆγ^?#κΓ>ΉΘ°4Ρhhƒ˜EU\BšZΧz±Ά‚%—TγN•ˆ-¦#AΕͺ^΅ΚΉp‚₯©ΰEtŠΒ r’A2@¦ΐΆΧ„•m©KaG#οΐΟ±’‘­¨›΅ΞŒ­!­ISIιPI1δ€ΗΌηΪΧφ5Ά4Ρ%ˆB h\oλ•TΠ€©Ξ„ζN§Ι‹ŠbvΛe"«’ž°²ι„Ζ;β±R‹ͺ.»ν‚νLπ©O7”V’dψg@Γ΅[έ‘7½Ώ Ck Q‰R΄ΎΟ»οΈš ʊΌ•€ΔΐISz/ΦώNΐήHr‰SΚς >Gbά=@ψYκ50>™‡χRΡΘey;,‘ƒ8ΏaΗWΓDێ"ΰHG^YoŠΐ"lj\­ΘSd1ΊΥ±ŽylXΒaG`k ΒςB‡M.“)βd;…Έ©%΄°e‘ᎊ6xΛι²—a<ΪχN΅θ0σŽΡœfΖ6mJΔΰBb±*φ…%nuΛa:DΝ?ς&1t€#$ΈyH90K_ΊΙv~™L‰Αιd΄"EΐxŠŸ’£ZΎ4I='%ƒ›pxκ€ \ ȇœ ­κ‘°,N"†1’‘ _d Έ’:π„Fl@±XΗ™{-“_wΣΙΠ…"ΌΠΛ+v  ™ψΕ”r/^S[%ΦJ°‰AμX’ΚΦ ΰΐ bXŒKΞ=·―3=0a{ϊH ΅Rΐ‡V#L!Φ7Mέ’u;ΦΙvψžΐ]pϊΰΊB¨ΒkΒp–pZλ’·Ÿ]p©J·JΥτ Όρ}ΗbŠf7/ΑΛ+jΰΫ›Hj‘f₯ς|·ά#§[$(Ϋ$XƒΑος† sU>9¦_NMwZpBΌ‹ΐ‡W$cΧB•―$E©³$θq51ŽΝΟ‘'βǐiΣ;R³Ÿίb φ°³­KœΩ°Έ“vΞσ£­ά―vη2ήΓβκX(’€'8!na`|μ):Ω˞ψ$Ά€@ dα NΓ:χ4¨·‡VόΒήa·I8ν _„ΰΚJHηARlτ"1°…-jα‹£ŠEΨ͈υ*«‚ΏΒbκ”Lj/ό` Ο(vί‘[P ΐ[_)j/φ±#Ύμf›<;ΗΌJlπ‹όΈE-Ή?tά&7Q±$Δ MaΑi3ΗmΚΦfn±'}―’yσ·€ΣQΫΗ‘Q‘Q&` Ώ‚"8‚$X‚&x‚%θMΙ |Π0xk` (Xƒ6xƒ$h Ήx|σ βPΘ ΰ Έ` KΨ„Lψ„N…P8…R(…›Λχ=Πj  UH…`ψ…b†SX QΨ#ˆΊΑ`thP‡x˜‡zΈ‡|X‡>ί#j‡wH‡…h‡~Ψ‡ŠΈˆ‰θ π“cΑd”(E—h‰•˜‰œΈ‰žˆ‰Ÿ¨‰”Θox»Α"P1ΐ|°Š―ψŠ1‹°8‹΅(‹΄h‹²|/xΰŠ¬h‹ΐ8ŒΒh‹Ίx‹ΘxŒΚH‹ΐη"€ Π' Τ!8Ρ`Χ وΫ˜έ؍܈αψβxP ο° 52g0!ΣΠpQτXoQχHωhί€ύ¨Θό8εЏY™Ή  ι ) Ο@#νX#;βNnƒ΄3η°iΉ Ρ‘’#i’&Ή$)’Yι€O†$CR$49T\ Š–“:Ή“<Ω“>ω“@Ή“θπ P“:"'›Υ†nh+@Nω”Πε”TY•Vy•@9Pι”°˜’”K©δ₯k@%ZS‰•h™–jω“θκKρ kξ`^`IŠ:yUk™—zΉ—=Y—ΨΑ“‚Σ—~i—‚I7…9˜κΈ“©˜ˆΉ”sΖ79٘ !ω ,?j¬ H° ΑƒΑΛΆ°‘B„#JœH±’ň jlx±£Η CŠ ξȊ&OΙΖn€Λ—0–Tyε t1sκάΙ3bΆ‚ζ ‰B<œ=“*ύ9TθœHΰ)J΅*Εl ¨hέ:§€:«`]bέΚΥkΨ³h{ŽΥ £-˜βʝK·έ»xσκέΛWo#ma”EšΆ°αkO4h @–y²εʘ)kΎΌ93ηϞCw š4δ¨N ΈkΛΓ°c_ΝJ‚'ΐP£†·š,jzΞ8oίΐ…>\ΉpδΔ‡žΌψsκΡ—Cw>½Ήu5_<œ€aϋΧ²Σ«/ΈΦvuόškώ―ϊφρΫ§ŸώώέχŸϊι·_  ήW‹ο‘wΒ]}΅ή…²a5Ζ7 Ζρ 3ŸˆΏˆH’‰%Ϊ‡βŠ*¦Θβˆ.Ζ#‹$Ζψ’2βxβ/Άˆ ‡7ΐ@αGah€aXPΐL.y€0ΕSΜ”TViε•Xf©ε–\vιε•Ζ Š8Y&“―©fXΩdsΛ-`ʜΆ#ε—xζ©ηž{ γK-‘¬B‡a<γ¦=k& V;휣Ίcη|Vjι₯ysΜ0ΗόRƍl£NšŠ–::   ”˜Άκκ«X†YΖ‰|cκ­U₯Š ₯°φκk₯Γ|*aΈ«¬ϊλ²Μ~yΜ¬΅+ν±μΪμ΅ΨZiΜ¬ΓNλ­KΘ*›νΈΝ>»λXψνΊιΚ+ΉπΎjn#Ά²kοEα²οΎ­nKλ7οά+πDξςkπ₯Ϋ‚Ί ±7LPΎGΌη³:lqAK¬±—ώv{ρΕo,²–ζ&N:ƒ\ν»#·\ Ε§άpΘ.ל0ΊκΚ,pΖ5»<ο7 λΜ.Ν=μo­ ½σΚE»œpΜJ¬ΎMoLq΄QίΛsΥwΌpΦφΝuΔ%Ÿ φΠL­1Μ_Ÿύ­Ψjσ{sΊnΏvάtݷ7ΌGΜχ΄[οΣm^¬ί†g{u½Š/~wγ€s›xδ¦2NyΉŸšŒ2ζ}OΎΉγ–ο ϊ‘šώλά9ŸΎfαͺs*Π—šzμ°žtν―‹Žϋ²ˆ›Ξ»z·ήκγΓ' »ρ½z-|ς±ΟΌ₯e=†ΛOο*ΫΟ_o˜τΪοΙΊχΨϋώρΒNώzΰŸ§ξλ³oΎϋ–?ρSΣ+ςχ§—½ώβ+]dΣ>n©zŒήό˜e§Ζq/°)`ΏX6ΆρAπ{ τ•1~‘ _γ,šή.ψ½όΛΊ¨G3tρΑΪ Z‚#αAΜAΓΪ&kή/tarθ‚…Rr‘Ρ„u9 Δ†H¬αK$X)Ύ"V 2tρ bPM„04β “¨Δ%fpΔx’ΌΰC F©jΞΣ"AΈ˜Dp™0[Ίx’ TΕ)VρŠ>λœΩΤ86ϊρ~Μa―Βh9ͺΐ ιψ!1‚ˆΕ@M€Œ€$™X©8ζÐ* ƒ©ΨΐžY€(ωEy…1ΫΉOtrbΘόζ2WV•cœςH@θ ‘†Φ£Ηˆ1*’­4‚R Έ gU,‰ΠEβ˜ΰE#‘‰Wp²#ΨB 2ˆΡHΊΛ*–„‚Φ $D±±x':Q‹€T€+MfK¨Ρ©4ω Γ66α;@AΔ`! ΠӏοS8 ͺP‡ΚΖ—VεOlF+8‹VΘԚ- ³FTujU1Ζ)yъW΄’d€Β7b1)΅^υ_» ¨[»JPͺ…Ϋh….p ]4ƒՈΕNύΊ:"vΣ–ƒεbQ§²ΓΞ’p¬œΰ„.RUόkmΝl½:•ͺξt‡―hμTGΒ@ T΅«…+Xπ)QaPυ%kΥ£υ‹Ϋ²–]ΑudωX\nφ[Νϊ$q›{άuwv—`s«[{Υ°Zέ. « έ«r3Όβ}·N ΉΫ¦·°ήύλ#™›ήξ"wY*uοvΙ»^όΪvΊΕUο΄’‹UΊ₯vΏπ½ο―Ψͺ_κΪΧΊEzΌ+ΥφΌvπͺξΕ^­n5ΐ †pe•›]oΦwΓφο<7aκ†ΈΌ ώοEOμΫψš7«q…ScμΆ8ΐ†±aΨSΈ΄Ρ§l.<_H$J†M‡μΦ6½ι˜S(l1 ήNδJιρU-|±ŠP„…ΊCJLΎβώDIMro)Š₯ΨψͺGpV’œκ‡˜3•φ@¦e:¦pΙFΌS™h:‚mϊ¦!ω ,_PψΒ H° A‚ΩŽPX±pαŠΰJœH±’Ε‹3 §‘Η‡ΰΤiI²€Ι“Ρe[1§₯KAD’œI³¦Α•.s€g³§ΟŸ³C΄θœλΚ)]Κ΄©Σ§P£JJ΅ͺΤl"Š=Π¨Χ―_…R;Ɯ­ͺ]ΛΆ­Ϋ·pγʝKWn*Z`₯rΨΏ€gŠ₯£Aƒ5(d°ΐΈ±γǐ#KžLΉ²εΛ”;x0œ Α ΎdMΪβΰRί °€΅λΧ°c˞M»ΆνΫΈm‡ψ€ΰFκΟGE—N\ΰi0’Τ9π Χ―ζϝCŸ.½zτλΤ±[ΟΞ}»wν໇w.λC”(0œˆr΄Έ{βƒ}ΓΠ¦ΐ1cŌαןΏώς'ΰHΰ&Xΰ‚2hŒ-xΑpΌgαh+p€Pp@‡ΒS̈$–hβ‰(¦¨βŠ,ΆθbŠΖΤ‚BŠ ‘‡δψuαŽ@eγγ3N| ‡-Dβχβ‘H&©δ’Εψβ ‘zxΠΕ4>FΔγ•=ŽYT°‰,NΙδ˜d–Ω’1ΔψRK-ˆ\π•Ω`)§OΰH±$˜©ηž|ζwΜ}Ζς@ίΜihOvβΩ璌2θ ίwθ€$%šg£˜fΚ’ „JJι§Yͺ騀’Θi€ ¦Š‘¨₯ΆŠι©žͺ*+A¬Ίj+Ÿ°Ξͺ«A΅ήκ+™Ήξ*¬½ώjl’Α«k±Η6Ϋb²ΚΚΚ¬³Τ’m΄©N[νΆ#^‹ν§Ϊr[­·ίNΈΞ’[‘η’{¬ΊλΚΩ»ΏΒοIζδ«οΎ•ήy)½άΪ{oIϋœοHσl«ΐd°Α%¬p« 7œΡΓόFμοΔΫVlρE‡,²9vπ/ΗΝzόqE#·\°Δ(kͺςΚΉl3Ιǜ2€±¬ΡΝ.Γ¬s£3ϋlΠ-'jΐΠοςl4ΎH‹lιnjύτ@QKνοΚ‹Z}΅@Yc<5Υ}zύ5Ψaο;6–ϊω΄§ΩgΆΎkσhŒ.ΓόBΜ/ΖΤ€'άgϝoέ<κR1Ίθ- M;7Α‚~α/ΌΤσ β|χRγ>ωά’ΏgΜ/±δcΕ7Ίθ²·ζ&qŽͺηGΎυ•w——'ήvλfώ΅ΰ8γ‰ε1Δ΄’ ·oƒψκΌ—ιϋΥΐ‡ξž0Ώ―Βυ^|γKβΔ,N’λ=Γ^³μΒΣNLιΧ_;ζέί»γβcύμWκR:*ΰoξΫg>ψρ»ωΌΗ£cΞ?π{Π4δŽy`A6@Ά/?ψl`ƒΨΐ˜ΫέE$8A–UKφΛ‡”€ƒa… Τ…-BΒŽtτΫ‘‡„#‘‡ΠΘ‡σQdΜ°"5΄αAζW>»/?\D € ^(B™ˆ…. ΐ:Ύ―sJΌaΪ€ηžBΑ ν€Ζ¬PŽXhQΒ蒝Ώ0턬^>ΘŽMxγPPE3tη>:‚ΡŽwΔaw„¦5C›ˆ…*¬ΰ†sθNŽsV‰5<ςθ€ΎP….ZA2X!©;F!5yHNvR‘dδωΎΡŠΤ½‚Νΰ4^Ρ=L"ρ‹―sε+ǘC!N†Ώε&6!Κ_”$‰db,?Ω7ύΤξ—\嘞χ4iΚιˆϊ!FΫ|ωKCS˜rσδ§Θ9B`†/Œή449OŸΝ‘υ€Ω=ν˜OΉΓ ο΅Oxͺ“lζ|§ϋ‰PVžS˜ ΅XAzP‰ώ ι„εΣ&jÈ6Œ£%τθΐ@:A‘τ’5iΌH@•‹₯ρsiΉ`*>™~‹¦°³)Άpκ9F‹§σιˆ„ΤΈ ΅DE):mŠ’Y5p=HŠdυΤίE΅ *ZZͺͺ ½«„E[U*D½:°"•R\ν&YΛ V΄Š5škH‹΄z¨΄©.š”]}&Σ#ιυ­τŒλό:§½¬―H’λ• »2ΌKŒύb_TVΘŸ‚MRa/ΛΟΜϊυ¬‹ε¬A5šΙΉ‚6΄ ΕhF‘¦%.U `ςΕ0Κ9WC‰Δ¨…/Ϊτ&ue©Yσ‘œΰ!‰‰΅-“œd‹PDiJUJipWp€pθFˆγD’»Ω%ΥΒF5Π‡¬4Φ¨ &=σ©Oi›ͺX99 BZΘ‹zΨS!ιšcIMrκPλ|§9°x\κ γΐΟI°sώΛΰρ8xΐ²(Αy&Œ†νΌ©AX“›ίF(‚œp…+pΑΓ(Nρœδό†Ύ.~ Σ$Ζ1‹ΑŒŽ#Ӂ8@>Ζ@0€ dΰΘΘρŽ—<ΝΤΨ3 QhIeL–ΌP h©‹–η’ 8XΑΗs˜€ƒ'δ‘œΨ²šν"½œ@ c Ž}‘&­ha όMŠUφ q¬CJ9:ΘΑ‹Jδ *3ΰ !›hΖ:&]Ž€θ™ΟT‡8ž±­ε,μ˜3Π„’“–ΐ„θ^ΨΤΑŽwΌ#_ΠPE Θ°ˆΩΦ°Β*Α r°iAaI©O-κ›%€!YΑ«UΝlu˜θG.0α(h@ΜcV‚‘ o<ΪΰNuΖ.Βd;"RŽiΤ uΔγέρΗ;ΤαlfΫ;_©‡Ύ±‰EX!Ψ³ ¬‡Q Γμψ΅ΎFΒxΏξI±oFοŠ[όή/΄ΝŽt˜Γͺ 6lm Α ˜Θ…7<nUΔβqΖg>σ›ω"΄‘pπ€  2ΰjΥ’„ζHOϊΎXzΗzΦJ Ή˜5…]σ"-wΉΡ ’τ{=_ξΞ—΄1ΘkKέJ@·£­/ρλpχΊ8‘π{dHtΐ^p^ λZΗlάŸt Cθ°Θ©}©‡Ωδ(ΟE4\Β[>ぢ@θt°ƒΘψD¬ Ηϋœ yz;²>εΛ»^Υ©»θ Y£!κ§ΊΥΓ‘nΎΎώχ‚3‰»^έΪ‹ΎυένΏ³ήχΐ~Τl’q Θ EΘΐƒ[ œΰŸ@†―‹~Xι›f?AG:/oδBn8Β΅KŽ”w{ύ€Φωχί²ΡΠΫ — £§wΨ¦¨§z G~ΚΒ ˆ1Δ‘φP{Š@ΈWrU—rαPwα6+ ψγVš'ιP|dGzη;@Š@ Π€j²‚2h(Υ7{Π@ ³¦¦§PŸΰwΞׁW"ƒ*δp„λη~π¦η'§» ν €ΕA„VΈpŸ’#μgȐ ώF€bf€©‡ ωWH„Κ"VB·gzTyXg8‡ ¨Ϋp‡xˆ‡ίp‡ί°‡Ϋ€ ˆ !D&d=F] › Q(=A‡h~ί P‰–x‰˜ˆ‰0π`Dd‘‘xŠΏχ 1Π‰‹ΡŠIφŠ‹p@d=Φ `±‹ΎΨ‹@¨XŒ–§Š€ ᰌΜ،̸ ͍Μθ Υ@ΫΠ‡Δ7᠍ܘήψvΖx~&τ0h4ι”Q«eQΒPξψŽπψŽσ8ξXQ‘Αψψώ˜HX 72`sr“Ž“ Ήθ{nGA"γδ8„™* +ύΧY™*»ƒκ2‚Χ‘ ’‘Y‘Ρ„5)+‘.‰&ω’2I-9“6y1y“:95Ή“>I9ω“BΩ“Bι“AY”;I”Hy“GΉ”6©”N)“M•/ •T‘Sy•ng•ZitYΩ•ͺΕ•` P_9–θ$–fιJe™–œ„–liGkω–aδ–riCqY—%D—x@wΉ—ρ£—~ ;}˜ž˜„7ƒy˜gc˜Šy5‰Ω˜Oؐι39™4#™–ω1•™™ƒ™œ90›ω™χβ™’Ή.‘YšεBš¨‰-§ΉšΡ’š9,­›Β›΄©+³y›³b›Ί©*ΉΩ› œOσ›ΒI)ΌYœΘ™–1Ιi1ηΠ±!Όψ‘ΤyΦ™Σ©ΥΉήYΤٜ]‘y@ή ηYθΉžκ™žηωžΡОρ Ÿξɞτ9Ÿφ‰ž²'ž γη°~Qη° θΐη€ j λΐ °  Z š Κ ϊ *‘<‘Nθ!ω ,w@Ε– H° @pΰ²)\¨°Α‡#JœH±’Ŋ "Tw±£ΗΑ±‚dΙ’μ8‚\Ι²%Θ“0AΙζΠ₯M›ΩVΜ™#h§ AΨέJτ恞=yΞ™©²¨SŒG¨H:§@Σ§X³>,0gκΤΩjk ηT'Nά( GΚΆoݝ+·nά»tρΪΝΛw―_½€ϋ{ΰZ-_³‘#ΛΈμ ©Z @Pγΐƒ .gΖ¬Ή3ηΟ›C{ z΄ι¨I«>½ϊσ 4@LμβΖcΝRΡ˜€ 4ΌΈpγď+OΞΉσεΟ›CŸ.½zταΐΐH€6XάduΓ@pBΛoaΔ~₯'ΆΎ½zχμίˏOΎύωχλγί―ΏώτΩE@QHυxZε4Ζ‚5 F#Μ/Rhα„Z¨a†ώ²‘‡~(bˆ$‚hβˆ'–8’0ΤΖ .–X•S@Α9FhL1@)δDiδ‘H&©δ’Iΐ#ΰX€m5b…Π-ΩxA Ά„bΛ0?2)ζ˜d–i&^Ϊ⁲άrK<4U‰UJΰ˜RAΓδζ™|φι§˜Ζ ƒK ΰ’N<ιά&gVv^Λ0Βμωη€”R*(‘Ώ€“Ξ’c©cΚŽV*κ¨~3h‘κ(ΚιSžNΒ/€Ζ*+“¦bj€ͺ«Υj¨³φ꫐Ζόb+Ή>dΞ±Θ&kNDŸ:ι―ΠΞ*¬ΏάZ¬DΚf»,DŸΎν·±žZ-±Χ€νΉΚ6‹ ΈμV:νΈεF„ξΌζ¨ϋl»ψž)΅ρKοΉέšοΐeΎΛoΏύ 0¨λμ0“ϋ’Ϋ―ΒΪ6kΐ½g\€ΑΗKqΆ€ΘŐlςΘ(—œςΙ*·ΜςΛ+Ημ²Μ0χ1Β}œ.Γ8kΕ'Η=›«3²φτSϊ{΄@Cνj΅Kυ³Q3­³ΊUΕηΝYp5Γ‘v­υ˜@wύυ«b;5&ΧYνhΪR‹YvΫ χMkSM7Ε!ߍ·άzWν6.~ qΰQvα,‘ψgCΝxγb²-xέϋωΟ€¦s€΄ζQΈΛΩMœcŠF;ϊѐŽ΄€'MιJ[ϊ˜Ζτ  d lθψΝ‰ζ w*cR›ϊΤ¨N΅ͺWj `@p΅2ΐκZΫϊΦ·~ wΊΣιOK7T8ApƒθΰΨΘNΆ²—Νμf/»  ΔΐΩΨΞΆΆ΅]€$ 'HŒ―Ν‘ ™{(G9Ύ!u³Ϋέν^wΌί-oxΫ»ήυώΖ7’ (8€ΪpB&ͺοvΌO8Βπ†3όα ΖζpsΛ(,nώ΅Nζ0†π€ΗR²Dς‘›Όδ(7ΙUnrA’ι4‘iOΫ ŸπFΣv~¬‡,ζ(χψŒ2n‘\J  φdΘD8X±γ'ϊ;G‡ήoσχΒ‰*>ήi‹ύςg_δΝW„ΊO†[ςύ\·7Ώό‡Άx•»~ύΠίΔ8‘ͺdΕώψ1υ§Θψο£όΧsΦ€H1θ°w­g€μ· α*6vΈΚ©R€ψ>€δǁ&H1"7!H#x+˜aθ²(ώη5C“dG| Θ~-x7τ214Xƒγχσ|y°‚#˜uDηJ^3:Cƒ,1/{gΘP„έ‡;Ψ_½γ„Mσƒ 8Ah„Η 0Ux„/·aΒ€Θb55xκ°zΐ T{np…hΘ)3Έv Axκ ‡@Π}uHx‡Ή’†mΈ‚„v~ˆ€@„8`l¨0\Έ†Α‡rΘ€¨ 䀁ψ`”h{Pr˜™θˆθ‰‘ˆyy—*—XŠƒxŠ“ŠΥW‰ъt¨ ο‹'$‹=ψ…‹Άˆ€n  .ψ‚Ί˜†ΛΒs‡r¨έwΔxŒ7Δ‹Cy}˜Ξ{ΠΈg(θ3‰MΈzκ ΨψŒͺޘIΰψ/HŽΞw*0Œ)э鸋ɨ3νXŽΉ`Šυ7=ΛgΉpΩ*ν€τψ‡¦-θ ΗR™ΰPηi5Τhiis ُaŒω`KΈŽI!ΉwЏ›r’…³ ± 4i6W™“° ¦ ΰj€y q“2):”I©—q`0GΙ\³6kp`O©S©9$8_‰“α0–$h“]99υ@i)ω`iΉ–!ω ,ˆ<±š 4\6ƒ\Θ°‘Γ‡#JœH±’ΐ„ ΫYάΘ±!Έ#+V€ ]Η“(SͺH2€Θ&WΚl˜m… 97oF:o¦ΟŸ+?β*Huκ€ΞΜ‚ŠΣ§s $UJ΅jĚO‘JjΥ’Ή―ζ 4uͺE 0L½RkŠνZ·mΧΎ•—-ά»tρΪΝΛw―ίΉλžΛΙ„Y*ZœFεΪ΅"XsLΒhΠ A&DΘΜ™³fΟ›5Ί3iΠ¨O«6ΝztλcΓξΰ!ν'¨,nΌρqd*' 8QƒΒ.Ǐ‡Θr%9—εΝ•3oώ|ΊtκΧ©CΧn½:vοά£ƒΟŽ|Όωε,<œ@ΐ>χnގΑ2Œ(u ΰΪΟΏΏώΏψ €ύ7 ξ—`Έ,θ ƒ(K ZDQί QDŸWς0ΖάpVόbβ‰Βs’‰*θβ‹0ώbŒ4Ί8c8ή£Š΅˜`` pΓsΐΨ†ωBLp@PΜ”TViε•Xf©ε–\vι%—Άˆπ$”OF‰$EΎesΛ-_x†-‘ΨBŒ0Ζ|iηxζ™§1Ύψ²J(zx`Β4·<γΞ™=fN;νˆ3Ő 3Œ1tκiι₯˜ξ)Μ1Γh"°ƒθDŠ~•N $ςΛ0Τ™ι«°ΖZ%§–@pΕ6h©ζ”ρ@"Βθ*,GVcɧۈ:¬CΌφšj°ΛFQ±΅:ρ².Δ+ͺΐfλ-CWΦzkί2τ˜―έ–[•Η:‘¬Ί)Κ-΄πfΛ.ΊςώJo½Ρή;.ΐς> °½UΆϋ.Α`Ν{0ΒSV›μΎό6μοΓ&l+Ÿk0ΖΛ&Œ,Άπž{1ΘΓjœ/Εεzœ.ΚΊj<0Γ_9 sΜT*LrΕ5Ÿ|3’*OL³³/Œ€ΜξΏFΓ'rΎ7όqΣ­―SSΝδΦkrΡZwυτΒ^K vΨUYΝς·_36U\G]sΦoÝσΘrνvέ?©­΄Ο|+7Φg>ΣΨ;·lqαΛcΜ·~—=7γΒ£Λ0ΏσΛγ!ηΌqΧ%›½χ²ΊΤCŒ.™^υέPMΉΏπRΟ7§oΞ9Ξγ+΄δz#lΜ/±δcΕ7Ίθ’ων@{>3οKg<₯εΑk@ν¨;Ž{1:ηmsΐΕCL+ω¨ ύ6§?jδ‘OϊΡSͺΎ π{ρ/¨Ο™|ξΛ§ί+ΰΧCLππƒίτjg?φE o„[ŸΣͺ€‹ΰρ@΄Ατθg;bOwWcΞG₯cΟ?π{Π4PΟ| Δ_˜G7>οωψΑ”`όΐ&¬υΆΖ:²ιo{Β²Rσ‘%ࠈG(bu±ΓΖ gϋ{έκΊχ π!αGΈ"4ςΑΕ|Τ#M›ςVψΓή―ώ_$`‚ŠPD&b‘‹V₯{Τ yH₯!BΑ ν€Ζ¬PŽXΠQtšβW–@ηQ|dΗ&Όq(¨’Υ;ΣΰXΈG'RΙΑk†*6 UXΑ η¨ςΔΨΓΔ±mq δγ”>θ Uθ’δ ƒΒQΌchsŒδd,ωΚo΄’x―ΰE3xWΜi•V‘ΨΌΞUιtLόΕ-7± [ώβŒΩk€5©΄94Z/―P₯Ή»2v“ΟsΥ'ύg=h²ς‚ω£ζΟΘ₯λα±uΒ„˜–RΜvκσž4ΐ–ό)i*N}ΞW•ΔVjό';3ψΓ}n%›tη0?ΊΔiΟ£$EΙΪ»”ϊ$€ΤΔ¨K;bR׍t¦Yι+!ŠSŽt½iORΣ€5%:υ–Λ„zT‰ͺ¨,­fSijQqN•XεhP―JΥ§^‘\HQEΦ’fumJ…eY-Σ¨Κt­Nύ§· Χ‰$5[K­«]ϊU¦ru¬tΥ+Dξ*­Ό v°|΅ιa{@€’u±!l΄ ΩΈ6ͺ;’_― X·‚5¬’]VΫ*ېΆfˆ€UhUšZ±žU±­u­W­ΪΪΞ₯‡ ν°([ΫΔ²Ά·kΉ²‘&6ΉιqšTjϋŠUjP…:ΌjΒ€(Uχ± “ΆK¦Π1εC0¨ Ζ@"ΙθΌ*J/zΧ«ήφ²χ½ζu―|ί;ίϊχΎ=ϊP†T$΄Š2cYΟ}Κ 5¨ΐ>°‚ Μΰ7XΑ7Z°ƒ',α ?ψΒ>‘(t4 CRΙμoΦ#œP <\HρvT<S<.>ŒΉ ƒθΰ ΡyρŒWΌγχψΕ<^qœ φ G7`ιo&ƒΛP`3€@”3#eHyUΎr–©e-w™ΛRξ@ΰ \`š©2˜½lε5»Λ_†s›εΜζtΈ{BœΦ―ό10Πΐ–NψεΠ€At]έ‰L<Μθ€ψ θJ'ϊ‹Ζτ‘]!P!ЊI²ˆΗ’•¨ƒκˆ‡9Θ±jrΌƒΥ°†υ«O½κYΛϊΤ·>υ;ΨAx„#I€ <δ‚Χ­~υͺ[½l]ÚٱVv¬›νκg»ΟXSκ#ύΧΟ+ NŒbf™ϋάθ.Υ;ԁŒ<ππ>&’‘/t #έψΞ·|Ž ξ9μDΙ#ΙKΪ‘}ίθ`GΑUα ΐΫdP9ΨqπŠσ*?‚\“>£ζ@ˆ;2bρ’›ΫήζG% 0l¨ΰΌH‡:ξmr}Ό 9ΘΘΑYa• )κ‡Β “°Δθ@ΊγΕτ£3έΰθI»UΠryΣ»+aQRώ(6ΛηιNx<ΤΑp‡ ;β¨Ά7UΠΝ»Η€5ιΝBGΑ½±ς–Ώk?wlΡtξ„ΓƒS‡7¬^oξ}TF;ΧU³C\pεαw{t^Ι]tg9ΌοNtΓOQ}g‡ΎΪ-Αώσo‡»’ΔnΖ;ν3χ<κ7Τw€dήξyΰEͺ·€ Έyς'‚ gnxι*ΘΌ‚­G€Χ|1˜€ θ~x}!˜ƒ2Ρu`‘ή§‚gήπ‚@¨ƒ`ρ5hv“~Ψ·„X—u@ǀΘ0TXΨ‚Iƒ]θ…VψjŒgπ…88†XwA‡…=hSΘ†yGy`„π†„JH‡^XyfHPΘ|bΘ‡?‘xφ†…hX}[HˆVA‚_i1u‰¨‡HLj…κπ‡€†QHp”Ψ‡I Σ'Š(‡X4‰hˆ„₯hΫ`Ϋ  \p fOΠ ί°ŠVΑ°p‘Ζ‹ΈX`xfŒί·ˆŒU‘P!ω ,‹8ɞ h…ƒ)Ι֎ Γ‡#JœH±’Ε‹ &<Έ°!Ə CNTw@М“(WdS'²₯Λ—!IšDyR%K˜8s:,0gŒOŸgDL+Wξ[Ρ£F“"]ͺ΄)Σ§N£B*΅*Υr<ǜρIeŒM`sς€rβDƒ³(LθXΛΆ­Ϋ·pγʝK·]Ίnœ=A₯―Jvac4GΈπΨ 'πΠΑ‚γǐ#KžLΉ²ε˘3_>Pq~³LzbaΓs’$@F”žLɞM»ΆνΫΈsλήΝ»χξ`’ @šΚΒw₯“Cσl4Ξ1ltΝE/ύ:·΅Τ=σΒPγjΜΥcR}³²£Λ0Ώσ ΨιiύτΠ'—ͺK=Δθ’Ά0α†<ξΦ“έκ/ΌΤσMέk³]šΫI—·₯ΖόK>V|£‹.j.˜Ψ/[]Ά.k@ΖΰvvΣάu³Εt 1­δ£‚ηΫΤ]ωΊzΫϋvΓθzΪ‘0Ώ΄Βο^|γ‹έΔΰν/ιAΣ ·Ν‰rΈκγΏώ9αΕ―αΙs]²ΛΝwΘy><¨Ύ Ÿ_ΈzˆW­8σ΄sxŒγφόΰΓό=τ€θ³C\{ι$gΊ―ελΠσςρƒ(Α6ψ ξG8Ρπz2»9”@|θ{JP2x„ 2P<άώ²Χ·νUΠ‚z_λp„#°ωˆa>κ‘Œ’‚NKœˆv-²..\D € ^(B™ˆ…. pΒ£oσ[ή8τ=(Έ‘Π8‚Κ %κ‚} Γ!„†»ΕΡ+…½ΛΒ± oά ͺhFθ¬W μA±_šλ‘σˆρΈf¨b±P…άpŽΠ5±%ιΫϊ]ΕΒΎP….ZA2X!“;ν(ATqot{ŒΕ7Z1ΉWπ’Ό€Ζ+ŠΗȐ$2sΛkeN@T7ώb’›Ψ„$qΖλν­“C±2τ΅η½Β›Œ 'X001NU‰!:Y‚s(ΛγKΔDPΦQ™κ+£3Ÿ’mrr™ž΄&ΣLΤ=1’0бΤ݈τXΗ_’3˜¨3€ˆΜ NEŠS0‘&A:€OsΪ3œό³R'Μoζ‘Δ"ŸΜάIΤ‰ξΌ#Ύ*fΖ‹R›¦3‘G]‰<Ξλt#EΡ©Π”f­€ν¨KA΅Rˆβs¦…)KyˆΣœϊvχ΄hO'ςΚl.r¨D­©?ZO"u :΅©ΙΖ‰Tφ™B}*M3ΪIoQu¨V%#VͺU}Fu©-«CΒͺΌ’U«E ι?ΥΊV₯Βwo}j\―ͺ)™VΥFΕ+@—ΆW±¦•¬\™šΧΏr5¨~«bωzSΔΆ­LlOΩͺ=Α"ͺ•ͺfqΚΩΊu°F»lg±:Ϊ™–žžύlbC‹V―’Vg―Ε£9²q‹‰@‘Ε0|ρY …βF]π€nq‹0™\„9ΐ*‘€J–=†t­»έ4Θ¨˜Γj0ψΎ†zΧΛήφΊχ½π―|ηKίϊΞχuΓ nƒž|7€ξYM΄ Τ‚SαI°‚Μΰb²‘“Μd$;YΘ°€c%?YΙXn²•·œε+kωȜŽ©  ‹΅9;VPYN`‚0¬Arxsœα,η:ΣωΞsΞ³υΌ8`Κ0ƒžρΌηBϊΠƒNτžσR–β'‹%Œvά—J«δδ0G:2½is ƒΣ Φt¦?-κRwšΤNΗ9ΔΑ 28PB&Ζ‘iœ:Τ©5Cκ]{ΪΧ“΄₯WrΥθΞ€'„Jځ©f;ϋΩ§1ačΐ„7˜­ς£Γδρ`GΞοZσžwΫLκˆF Tk δοΈΈΟε-Αg―g=…yΊ€™υ¨SύαUWΗ;Βρ‰#θ› ΉHΗΤ‘.u«“έUG»Ϊ½½LLAŠιιH:ra…W ›p‡.nfœ8½νn”՝νt #vW"Όρƒ#λο°L;Υ?5uhοέοπ†"ˆ άΎΈKΊ½΄fχjν¦'9H‰{!πpόθ£.Ϋ·3θΰμ„J„γδ}―½φ$‡€£Ϊx΅x?Ο6S<ξmƒWο»ί’~[‰?φ‹«Cv§8ξ΅nφ@έLΘp9¬y ˆp$ό'Ό@„Ξy£##Α‡ΏnQΟtΔcλ]χua·wω§οβmq—Ήΰj°v£@ι`€,Γ}…‘i‡χr*γΐw[(v y”?id1™ ™’αP Ϋΰ E‰+υ`ω φ•a!ω ,―4 !ω ,‘8¨ž ˜3— \Άƒ €g ‘Γ‡#JœH±’Ε‹)\ˆ0‘AtCbˆnΕ 'Wq$›Θ—0cΚΤ80[Ž”)QΒ›ΙΣ: ‘ζΜ©#tΊl“*]Κ΄©Σ§P£J*5Ϋ ‘‚° ’`ηLsκ Μ‘BΆμQpTΣͺ]ΛΆmMT’S@H―0Š%{Β@‚(:dΘ``paΒ†#^|Έ±bnjKŽL²εΙ—wπΰ·Α‰ΉuρΖΤ;V ‚Σ>\ 0`kΧ­_ˎMΆνΩ·kγή­»wξίΌ³ΖπΑj-Tθή-’4§£Dω —λΈ°kΏΎ=;χοήΓwžΌψςθΟ«7KΦι§‘ΣežΧά^*nh!"Τ±cc€1Εΰ€H .¨`‚ Bˆ ƒ>H‘ƒ^(!†fha€ΕŠ0ΰ‡€|Πχ@2†5 0Ζ"ΨbŒ*ζ¨cEΕc‹3Ζ8£ ¨³£EIέBAP°d5ήxδ”Gφh̏ΰd–άŽ‘TJΦA·„‚ ‘„βK-8†ι&sϊβK(«¨ΆΚ31τ&DJ•γJK #h›{*SƒΓσΛ4³9†ς9P9±ϊΛ0„Fͺ©HV Á͈cΐrš&E©₯RnͺjH=sΜ –ζͺ“VΊΔ/©ͺ+­Βڌ¬»ΦŠj¦»λP«ΕpΠ(°Ί {kΖF ’«Ύ2K«9§>K¬΄Ί"[ν¬ͺ:‹λΆάͺЬ²Ώ‚»©ΈΠ–Ϋm―Ζͺn©ΨΪ:»Ζz+o°υ‹o±η.;o€μ’ϋo‘­Ζ›.ΏΩή{πͺϊ.άlΏΪ> q«θZ.Ε[¬iΒί2lo»ο±ΖλrLrΙn,ρ΅ ―Μ2• ο;qΜΟΌγΙZ°Ξc,°ΘώύfΝ/oŒ³ΡGχj3Μ#ηΜ4œB'ςSΣ oΘ7G΅Φ=r uΡ»φؐ̆ΊŒ2½XΏk₯.ΓόB ζnύ΄^άͺ.υ£‹άΒlΚ3Ρ—έκ/ΌΤσίβ§V³χΕVώK>V|£‹.sK­#k¬²ηa"kŒ.—k@Ζβ£½³Σ‘‹ήvέπΣJ>*¨Ύί;žμΠ]“M{ˆΏάΒρ^|γΛίΔή4΅w_=ωπΖsωρΗ―ΞxσΟ#6ޏz><¨PΎ «/ίx•=z½δαœ°εφόΰΓύ=τ€뽃­pθ>α¬d½|όΐJ° ~`ƒύ1Ξux\π ηΆbŒ8@ΰ” κ‚^i•§€76 OQ·CΒŽ Bhδγ…ω¨G2@ΘΠυ¬P?«`υnΗΒE ˜ΰ…"‘‰Xθb@`σήϋd7=ρ] nh4Ž`JQΒ ] Ϋ9βP€Da>ΘŽMxγPPE3ZχΌέpO9€\ Ψ Ul"ͺ°‚ΞΡ:-n1lK ΰμ†G?_¨B­ ¬ŽΝ¨eUσ"Α(ΗκΕβ­Ψά+xΡ ^@γΝσγLlHΈυ ψΰ/Ή‰Mς&ƒ$ίΗw–Ίκ^ΡΗξe썴€δΕΞΖ V ˆRε(ν;A6±\:[Ϊd L7Υςk9R[5ΓtMl‡”4₯7E#ΑŠsœ!Œδ6©ΤMt¦zΝόβ έωN%Ζs’σ€η2{τΛRPŸ§9 P‹”|&,θ‘ΤιOe*4"Eθ9š‘ƒJ/~eCΓIЌB$’M¨G+JΝ†Ž&Ϊ4ιI9ΕΜYZS˜+½ˆEα'˜R$₯uθHAJΣ‰Ϊτ£%ΝιOΊΡκΤ£{D bΘ)@Ζ4ά‘t€μ ΟHEB` [ΘI³τl•œZƒ τO.I™“˜$ ΰ&°EάβχΈΘMr—ΛάζΪΌ“œ€Žuͺ,χ‰@ άζzχ»ΰ ―x}$²œ4Υ₯Χ^ŒcDΑ΅ψ…|ηKίϊΪχΎψ½―0ςΛίώϊχΏσ­…΄`œ%'E)»OC`ƒΠ‘ €€°„#Lα [ΈΒΎπ…Χΐ@dψΓ±ˆCLb Σα0(0Š6Ά-$ρ@,@γΫψΖ8Ξ±Žq¬tΘΐއLδ"y3/>οY<‡ŸΰΙ"θΐ‡*SΩΚUžr–―¬e,{ΉΛ`ζƒ`YN³šΧΜζ6»ωΝSƒžάΠlμ˜‘žΗ°‚g”cβǟ=hAΪΠ„>t‘­hE—γͺ ƒ&N¬ΠηG¦7­ιNsϊӞ5¨GέiC?HzΦΒζP€u©£EE)  B*7₯#ζ@F4Pf(Β£B‡°‡MμbϋΨΘ>vCή"”Uc₯μ —9Vΰ€j;ι(ΡΦ”iΙ E¨ !ΈC3ή±1PΫΪ0 8¬Λœ€ ρxGΌα͎ZG $ο Η(’А!>έ]βρξx»£1Ν‘ I—ω£ …πƒ‘Χ͸Ø ‚@ŒΩψΏΐ’o(‚ΰΎ2μ-rn [δ 2¨’μnΉΟ @tπΒα@Β'ŽœλάPθ€ΖqoϋθψRΗ;‰τϋΌH‡Ρ‘N˘[eΆ‚*Έξ.Ÿ „n Ή0As[IQϊ·  @@γ,ϋͺ¦Ž ΩnΰΕΦυ>₯t #4·)Bψb €Ίhη5~€‰p4ήXΥ5G41w δΏόnŽJ Α“vC.΄.zZ-;4‡)vϊU ;Χnΰ΅xπλΧ^UήDη?τίkͺΊϊ>=κ=ρΌHIΙ…Θ (lΒΎ>Ӂ 3ύΧƒΧΎL.^ro§n?σ½‰#όύߐR?- πv4œϊ—Έόίsd|ΜΠqγΠ·Sb$&‡rt§r g€Xt0's`^ πPoΞη€=l?7iT αPo8%n§t¨‹ ¦5‚GR]TgαȐ~,¨#ζ1(vvQƒ:ι€vd†@˜ΰƒ;ΒxrnvGnŒg„’!uT§ύxκ@ƒN( ‡xa·xx…^αvκy`Gyα`…^8Υ₯Ρ |ΰφy=x†^sαπ GƒΉΠpΘEG€@!{=—‡zέ§{Ό'ˆ_ΘxŠΘ@p]6ˆˆ12 Hv}ΨΩ‰1qšΘ@ŠΫΰ ΫP Ϋ`y’ψυΰŠ!ω ,˜>Œm ά0@pšΈr*\Θ°‘Γ‡#JœqΑ‹3jܘ*+²εI²€Ι“(Sͺ\Ι²₯K–Ω@PΉ8“£MŽ7Ξω²§ΟŸ@ƒ’ΜΆΒΐ™5.0w³©y J΅jO’BuΚ•ΰ³[φΐYKΆ,8}Ωn±ΐΠΥιeγΚ­j/_= ˆkΫtίΏ?G\$Ηwγ[ΐˆ§ΔΘ΄pΖÊ#+vμT²eΐ#ςRΦω²η²›9vώLšjh›₯SOΝ|γhΥ°]Ά~ 7Άν–³5ήή­’uξΧΌƒηΎ<ψξα+Οη{vρε°‘x=΅t‚Υy7oM=ϋgιέ½_Ύ^[<μν§Γ› Ύόϊδί«FZ½|ΐνοΓΏŸ4ύΝφυ'W~ŽΗ_– 6\€€ΉΚ9݁j§™sΗ„Ζeh…j‡ƒZΕ‘p‚ˆβnQF’g&γˆΪVcƒ*n(β‚7F—"Πυ8£t%JΦ’c/)Τ‰Jϊ_“ˆYX’PϊΔd• εˆ%YRςEε–ΈΡζ\OŽYV—m}iζbbIV™nV…fWjΖY•vώgžAΝΙU|βΙηK{κ“Ÿn i(›@. T‘ŽΆ„hS€ζ)h€Œ"‡ι‘r§θ¦#] κZŽz€7Uj§¨¦ζi«%‘j“ͺq²jκ«°Ž$«hŸ‚jλ¨ΈζΊ«a½nϊ«―₯ζΚ\§‘Ž³Ο¦Z,¦N‘γM>ήxŽ΄ΚfΚQ8ΡΈΆδ¨ƒZ·§2›Q8Θδc9γ>k.mθžδ»ω¨πnΌε[/©7α«‚d„“m΄IE6κΨ£²ϊ¨8Ω2±μ¬ΫŒ=*tμ8όΞk[ΩLό޲g•<²-Ω|ΫnΗ“a-Ή‰P@+ˆ•k6GUFρ4FΎ<π ‚Ρ2‡LΣN"ν ‚MBN3ωπΰΓΥ?ψ ³7ΡΘKPˆ0Ν:λ”SφΩf§φΪj·ΝφΪυΤCφΫnΧMχέvη]φ4&DvF"έξJΨ@ΈαhΜΌmFzβψγG.ωδ”KΞG"ˆ RωζœwξΉ!z΄…―€Ϋ@ϊJ Ν `”Ό;μ²ΧNϋν³ηn»ξ±; pξ»OόρΊ#oόμ4Πzλ6MΟHP4&‘C˜F|\Τ=Aίώψή—ΎωuyΘ…O·Kύ" 2•Œ’ 2ή\€A1@98ΐr€4`¨ΐ  ζΘ…2’ƒX°€Μ 7¨ΑrΠ€zΩIWπ7ΤH°Β;Ρ h L#Qc_FΆ5sΨπ†8Μ‘wΘΓrdMΑWΑŠHŽ;@AγžΠ!ΓΠτ―‰ΉΩΚ·¨† ^δ‚ͺ(a<΄₯‘w` ŠN±αEŽΰ0ΆκœΐΑDŒ„{U„/ΤA+Όqqf M:‘Ηλΐ‹Όθ4QΕhΈ°ˆLδMœ•-p ‹ͺΘE4IΙJb„0δ@‡³ι Β΄Ρ’ €€φΐΑGŒ!ω ,•@AΝ h  Αƒ*\Θ°‘ΑJœHQ!Aˆζ*jάh#DŽ 7zΔ²€Δ‘Mͺμˆ2βΚ—-SΎ\“δL“5mή™ΣεNŽ=}ώ¬TΰP A"ν©T$ӌM)2ͺq*U©9―­©U€”_»ς*Ά¬Ω³hΣͺ]ΛΆ­Ϋ·pγʝK·έ»xσκέΛ·―Ctθτ’ 7˜π]rήςyσξnΈhω ,6L7΄|VΘEcLNέάpΘς©Θ<™άηΠ*4yΜΩ3\Π’U¨πt\Ψ²e―ήLΨu[Λωx¨Θ‘‚ĜίΒώα£yσγΌ;ύC‰Χ• AήΨm|J¬» oC‰›pΙέζ;‚ ϋΛωβη#gš­λ‘, t²L£‚ ej©N*ω@αF:Π aΕ;Θ4 kΑΆΘά…*’‘cΤo—!“‹+€¨’ 4‘X[ΥSΟ/ΈΐψMOlƒ\ಁ( .Έ˜bΑh @[\ÐAf ΡAAtΐd`©e–\nι%—<6’T 4Νπ‚’ΫxCζZρ$_AυΤY‘Ν!ω ,ΏIW H° AζΜ\Θ°‘Γ‡JT±’Ε‹ '&ΔΘ±cč=ЉPcH’(-š<™²eΓ•]Κ4“εΜ™5cή”™ΣζN”θzϊόιQ¨D’-‘©C4'”nr΅λωΤ@6pW³‚χ €―PH‘cΊ’€V­\’ΛΖΆ-Ϋ­ ƒ"»£α+EαL’\λΆ-\= LxTZ†£)RρUCρ˜’CI˜°`Γ­:Εω«S€g”H.ά($_LΗ₯ζΞA§%§9T(YΈeušζp›οίΎM]ΉΠΑ₯[Έm―ZE*[:䝲υ(„uλrΨΞ}ϋ,hθ}$‹λadq-φτ,β§0‘Β„ϋψσλΧ_αqX°ί€Nπ ς…²{Πi&K ,θJ$zΤ‚‹.fˆα†rΘα+―h(’‡#jΖ)ž°‚m²ƒNt§ΘŸ'Άι1Μ1Βδ¨γŽ:ώςK2ΊσK1Βό²#‘<&©dŽΓBc|ž,Η`t«Θ%άXΜ–\vΙε/ΊЌ.ΔόbŒ—h¦©¦x„’" ²„rKh“‘CJ$|`|V#Μ™jri 1―€Ž.dž h Œv9L#z@Dš‹₯#˜2Μ0Ζ,Κ¨0„`Ε;Θθς 1Β4κκ–Ÿ#K ΘRŽ9Ο$§―r)Œ.…ͺ`E8ˆ£h―3L1Έ΄`.κ4―Θ¬*h@F8©Ϊj΅6 Ρ΄Λ"{ ‘φ¨ ι{,Έ^ ι,΄Ρ.D.ΈΧͺ«.δt*ΌhŠϋΠ½ζ–Κƒ 9¨ΐߌ$ΐ]ΚkZ Œμ΅>dμƒ =πλ―¨π μΕ―ž[θ?(aCΚ6 QŽ.ȘY Θ½JLoΕΤ^\¨*σlΟn3ζΏ‹,mΞ%—zKΝ@υΤsŒ πΪ¬N½‘όκ΅K/Θ˜πH#™Ό’*ΝȍsΉ:…λ@ƒ„δ΄Λ+fΎ ΥX€u£ηΖbΫlβΝP¨B ™2£έ«Ϊφ"ύκ/…6Σ '±΄ςφΛe:^σ/ΞR9Ϋ―Z(/­ΌJ9d@ρM,‘zώx γJή蟺lΣ †±θ /ΥΔ’7Δ[ς½6Έ`&oŒ.—sΒ‰.ΕΏ%δYΫΞθ’yƒωJο2K?3θz|Υ’ΣͺμΥ‚^;ιή·ίe³αO6Ίϋτw©ώΐΦΧO<ό’WΟΎώ»ίΘςΐ…N|σ+`ϋx΄)Π€ρί‰Η@ N`όC .HAΪαρ|Uε·ΑΒ«‚ 4a΅FhANΞƒ‘ ΥΔΒΞΠU(,α ]UCξQ9τΘ₯ Q†DάR ς·$Ύο€$<’΅D‚4qŠΜ‚b ±¨D6‹Σ’ ΑXŒ*δŠS4"‡˜D3 NT£ΩHΔ%^E)°€)jα PΡΎΐE . ‹«†/ΣψLa [€ }*l€,YHCd0zHΑτ†GdιOXΔΓ#τΐ‚MfξΘΜtTD£Pθ!HTa“"‘’xβΜ™flQƒxβ—–.pρ‹a“˜ΖL&2—yΜf*Σ™ΜT¦~΅θE΅IΑu¬#(@ ίτ¦8ΓωMrŽœβ<§9Χ9ΞσX§·dŽs€ A| ψόΐbہ L¬Ÿαγη@ @θA P ˜ š C(Φ³l.g3©„’aoDΓ£ έ(H9JjŒΤ£&ύh4R:R–t€¨C*`³ g΄:Έ¨N7q¬£η*Pse€uœΓ¨HM:ΞT”γ9π8‡ΰŽ¨υT΅jV₯j€oHGA:₯N{q ²Κ©‘IGίͺbετg-kZr'R’vΔ9ΦΚΦƒΨ ―y½S9Β•sl%ΰH‡RωΪΧ‚$Vp9‡8౐«5φ"–eH@!ω ,+Τ-) Δ₯‹ ΑWp½2X°!Γ‡u œHΡ€°‹…YX¬˜ΖŠ CŠ€Ψ±dΙ‘(Ci²₯b)c¦lIS¦Ν4]ΒΌΙσeN“=oώΤtδ/sθ|=Y”β―ŠK]6εˆ dT©MŸ’Ό tgΟbU MΚhV¨e½zv¬²S΅n…»–­ΐ±iaΦε)wβOcΖ°‹6'`ΑEϋΎ5iLΧ0bΊοεIX,ΕΫ#f€˜βΔPύ–$+_9dΊ<›ZΩκNaΏJ[ §+υ―ΥSc6.­LΈf΅qηFyŒX«|*z{ƒ¬zψHΨΗUHχrusη ‘F.]r΅―c槨«4ηs9m[ψψc±νύπAŸώχπ·Η Τ^ϊΗ%6¨쉇]yω(‘ βpΔ€ζ@˜{ΉΑwG!4ωt˜O=ΓL8žvΗiΈH G`’‹"dςŠDŽVJBαΖ:Ν@Ε9­Ό¨‹F1†dŒVΈ¨£ŽJΏηΫ&Υά…*¨εΗӌ#ρ—O2­p‹*VΈqŽ.·))RlωθΒ‰.­”CΖlΑυD嘍mΣJm/6K4― )¦ŸeΧΨ/ΐ&'ˆ‚ ˜~ϋ…ι§‘―Δ£65αjΒΉW©L!ω ,2ε&! (VL Αƒ*\8° Γ‡œθ0’E„)^άΨ0#AŽ=fωP€F’ MŽD‰QεI–]„Ω‘’1bŌ½D)˜aΔt Ϋ ²§.{ΙtαΜω‘₯Gb±ςΑC¦λ—1M!βjIQΨ―¨VΒιRͺs`DcΏβR§Ξ£Ο¨Θ„£j•fΖcΔZεSw›^iqόeG―zU(φ’Ž.1aΣJΜx3ͺbΕdΎ5SjUpΚ­£«IPWT*x &CΞ1d†’ z<φΥή=|ό؁†άXb‚=c-[cε|?~(±‘όGoΊΑ-Š4O‰JŽ(A’ΔΝ· „C’ΤXŒΆ^$GΠ#–/_=χWΕ$Ύπ¦ήτ(!Q„LQ£L±θ"|αIΆ–: Q…π4ε΄ςΚX¨DζεCΖ6›lγͺlVCh©ΕVBΗ5ΣΚ&―¨² ;œYh} }•.­ΰxV|CαC%ιΣ69κ2a3±DσJg4]5Φ/VαΘΙ&œ^“=†–‘$γEWyŸx_.!ω ,“8Ια ˜H° ƒ*\Θ°‘Γ‡#J„X°βΐ‰3jΔh±βƏ CŠ<ΨΡΰΘ“(–$˜²₯ː+/Ύœ©1¦Lš8s"΄iN§Ο†Ο…γ’!ƒ…’ Ušt©Σ¦P™J}:5*Υ«V³V݊•kRG^Cξ˟hUš[+@€ΐ%` n]Ίvσβέ{·―^Ώ| L°αΑ‡Ζ…λΆYΊ³iΣ,ΧvIΉΛ—#k‰ΉάˆΝΜφ܌vr¬Kς©ΞGΊ΅ΖΥω>7+§n΄λœ¦€^}»7DΨ#Μν§iΤ°‹+W\8mΘΛG€ŒœwτεΝ‡ίΌž²-χοX³>ψΌΛζΣ(―Ύ½ϋκޏ ΏΎ}ˆθολίΟΏ}ϊώ¨^~hΰΎ`‚ ΆF`ƒF(!‚ NhαL^¨α†FWa‡ j”aˆ$–hbJž¨bB#θβ‹0bŒ%ΆHγ8^8cŽΪΘγ@ ΈcϊHδ‘HΆ7d’ Ιδ“PφΆd”:Iε•Xζ4e–όYΙε—`‚΄e˜υyIζ™h24fš²ιζ› ­ 'wfΞi'•rή©\zφydž~ήΖg „βh‘› Šθ’+Κ(ZŠ>*)ˆŽNšS€–f:a₯šΎ„i§ RjoŸŽjjœž*R©ͺΆ*_ͺnΔj¬΄‚k­͊λΕέΚλCΊώ*μfΎ»P°Ζ&«S±Κ„l³ΠΆΔμ°Ην¦Ω=gہΥ&cΆΔ1˜›΅γΑξvNwΉΨœvΫhš–­S޽‘­sΎε˜g―½# ―ΈζPF†$li‰°y rp3λ +oΑΘL0ΑQG‘ΦX„₯UW$l²WEih ”N:žπ!³Μ›™€ΰA3w3Λ¬ 9Πq;:λΨ+N9G'τJ7ΝτΣNG}P.h 1—‰c€ΦΚ1}N9!Θ“f考 hΐ 9΅YܚM―΄ΩΛή@‘6)δ Σ‘kc‹-·kα ŠΌ£·AρJӜκδαwtΈGnGk€:κ`β€dxΣΞβ–3TΆ*p4μLώwθ ρ’* #ά¬'„4J€­J<ιΜN;λθxcΕΝ£τΎΣκ‘£ƒ9n<Θ<θ{΄˜+2ΈαΔ§ς–Ώ³ΙγVx³Πh% ϊ;T 4-2<ΐžK:я?½²ΡΨ­*•oy8dΈ&κηΕUnWy\άA@†\„{ΒΚάΰΘ‰π$q»RΕ栍šμΝXθΰ…ΐΩ5°€=qίΤ €m~Ή„w³MΌƒ14 U7 N  cˆΑ݁0‘‘©ΤρŽL€ΟθΠ^‡xͺwΌƒt8t”ͺ("γu*ΰ…?·SiGΠέɘB.Z απΒΝ*””qTρΉΓγς“\0h™z™"‡†μ΅δŽšb")6Ε— ςTsΐΡŽnΡ]l4β§‚\δm&”TώξφIGͺ0Sϋa<ΦhJLZΚq3žqNΙ(ΜiŽsސ%nφΘ@t§ΓαO¨X(ΧΑNvΓΌΰ£p§»v°’&nΤSπ†η€Q€C—ό ZHBK?ΊςEΚ#Ηχ  ΓƍwLε*oψ ΖΖ0p!BoΚCςŠ•Όduΐu€ψΕ0„a+»yΗ‘ο0~!‡sbΖ(‹%€ŽrπΑΞΏhσ›c,g™Ξ^ξjž•If9ΚΗ ΄€?¬:ΫYΡ‹†[£ tζ4 z .F₯»|ηL'ωBNφt¨W=κK›šΡ¨ώ3”?½jB:Ρ―Ϋ¦”κ@ΧΤ­.u λ'#Ώ–τ­…=μςν:@©fs²•K3»Ω}ΆzMλiWy٘Ζ6K΄έŸGΫΫƒvΈΕΒb«έn7»³]lHΓ;ήΥσ΅ηέn E»Ϋχ.tΎqΝοq»ΫΧ§²Ί npΛϊά ‡σΐχ=ο=KˆΫ—8B¬½nq[ΌαpŒθ ΊΥ3μς‹†#ω0Χ₯ώU°#(ιc'{Ν3dδΓ δˆFΧΩζU·Hμc/ϋλžΰ}ν@#νΡχχΈc}πvW(¨w¨ΫœΨ·sΥγ.j¦Sά&αh†=T@z+¨}οDυ»£όnΞ?ώ‚„'=ι)ΏχΛσ²ήw½ηm_Βσ€*>ȁψ/^?€·ϊλyϊ|πΐЁ†_yΎχ"wόξιnχ(Αή?ήQωβf›Χ~Ι nv»+αύ6xl€=Τ_όΧ}Ο?“ζ w:°‘δxz–yφΖy·~ό·„χ‹G€ ΘP £  Θΐv§†7t‚{vnPΠ€VπΘΠ Πΰ ΰ7χs—}7wExD αpP  zg€zv|χ±r ψΜΧ ω€ Ό Ό  "]w^ׁ;·|  GΘ Π Fd`α ^g|Ψ§€ x—QyGΌ ]ˆ H ^…(†TOΗuΰή°„ͺ ѐz@h7ƒϋΗ{4yσtΠ€ ή4Γ₯kT'…37‡U€Χ€xQ(†ƒz³₯Qδ €ΜӣP£^4M€;霚“Κ΅kΓ\&?ΛΊΥ«Ω³0pΐK«²hγBu@E4unεκm +απζέK€:dδy‡npαΗΡ₯Ser”8­O!k–¨N] ΪbήL’Ίxdππ†9sιΧ ½ΩΰεmkΨΈ ’C‡@ y·s H Uδ»]ΠΘ·†Λ|³ΊwV(ρFΦquλή¬’Qg{τχΌ8Pδ]yοη «΅VU<ιζγkΎωχΤι·W:Ip9Mχ–€…Ec•ξΈƒr&ι4]€ž₯–Ήd˜ ‚’΅]*ψgPp%’ΞK­Έ!‡-F…˜X‘Cή†5š•N;”90ŠˆNΨγQι€£‘i8b~GΥ™©©ΰΝA-m$γHHGn°Žˆ”dYΘKŠ€d§˜>Lή1”gl$)…‡IPR”€β!OωΚTΖ²”Ÿt#*9J5š2‘»lΙUιΛ\j2‹°΄€,!iG`Φ2Ž{\εθZ©Λg ³’$ά/ΙDN*—ΜΌa5ρ˜Μl.œ΄$§-ΏΙJc*R‚ΌΌe;#ΒΑˆˆΡ™κ„&1ϋHOk9$’οdˆ1ˆac`DŽμœ¦Dά2ΐ6“›;\ˆ1t1 bθβ{¦<ΪO†A Α<ΘDν‘ ]΄ A¨9I‘s~τ‘U1b‘x C94hD4šPm.Τ§©5 r=šF&5¨N’bvt4 MΘ=!ΚΓ„L”¦ C8nšSˆπt₯}8"Τ|δΔhE>TΥmθ‚]e*6Ϊy’¦!-ΘυΤͺ‚Ύz!\S£IW±.S!e€UgΊΦΎͺ€ ίh†Iγͺ¦ς³vE,^‡j]Π”*ΰhΙ@Žΐb΄²„½¬aΗ*Υ?ŽS±9Ζ/baψ >ψΑΠ@€C©•«j9vΨΦf2¦(Mπ%Ψ€Ή?ΰ-W‹―–Έ¬EHb7©ΟζC JΐŽ $(Α ί°(JbΩGb6»™*rΟϊ ΅"αχE4ς‘zτW‰K=ˆu‡[-Ž6d»Θ\¬ZρJ AΘPD#2 ]$ΐz{Wλ»7―ρ.܏f@ εhΕ+ϊ= λ5΅Ζn‡]βZͺ’P!²U+Ά±‰mΈ ͺl^O>•₯N'lEΚΨf΄b―PňΩ1YΖF~oX=μJ³dΆωΠE+Δ|2Xα,&²†³LO5-Θ‘ζμ…'Ί1λbΕ͈E4^AYφbΉΈS—_ΛέδN§93'6Α ―7Έ½$p7λε‚#§σ»τWliούΎ“§#¨%ZΐΆ2QΧ θΘΔ#pŒ₯R―h@ΰΎπΕ0|ρΞEŽ„ΔπE-nm.ε”r*ΩΧ30[Ψ"Χ£†ΰJrm W\ΰΟH˜‘=@"(@P`‹hη%« @Δΐ=±Š]Χ(8SΩο¨ ?ϊΙ9#Β`0ο–½›L¦‹ ψ‹‚όΰG8K †¬Ν;€l†ŠιΚ¦@XόβΟxΖY7²!nho΅QL§8ΖYΰδ(΄OΉΚUΞΞ%ΐsΐάΏž3-œΰζ"θΦ°†χœη>:ΠΧ`€θFO:—~τ¦ο|w7]θ‚'iŽO Η;ή ž!Ž›μδλ^{9vb“r”ύμEI»ΩΥ~v°ο YΗzΧά±m¨ƒ}ϋίψ―UΝX#wo_ή'Έžm™€L|³ΑŽ…ώRTόβcψzΆδ4μˆΗ;βx4ήρΓϋHg8―ωSΎςώΜH@!ω ,şQz \'° Αƒ*\Θ°‘Γ‚ˆ=œH±’Ε‚ZΈΘ±cΗ'πρH²$Γrε @σ­œΙ—0 Σ`€Ί˜8I* "»œ@-†;ΐ:tζ‚*mˆŽ—ͺ’.ͺP] žήRέZπ]8%ξ€3'•λΦ\¨j‡NYͺιεΰ#œΊ²o—†γ Ο»›y©ζ ™kl`ͺw( gπa θΌ©θοξcΘιT₯εu—μεœκά8BŽηΟ8%PδŽ,^Τ&I…D†τ5l’δΘ8€BΆνΫΡEΣΰ“λΣΐ=’@²±Θ“sŒkŁs₯“TM€OΠk§ˆΙhΗΗOOg™ήΥsœ `”Έτς)’C‡©Ή·ψω]…{ιt`€!“–Mψ!θ:;©ΰ |β9ˆ9DΉa@ƒ.€ŽS¨bځ.΄ˆϊ]‰₯Ž a₯£"‹ ‘₯[ΩшΠMsύΞ†$κXP89τυΞq²¨™…Έ"qέα€δΙ‘Ž‘MΘ<3 Y:™…ΔKk€Ή#pΒ t!Ζ7ηŒσΞ:χŒσΝ\ψ,4ΟDί|ΐ 0L ― ―kΐsŒq`Œ1† Άό"ŒΦΒtνυΧ`ύ‹ΦcsφΩ`r@RSmuΊΑz¦Ξ‚œqC `Tν‚-ΓSΜί€.ψΰ„n8ΰkƒq7sΜ·Σ P ‚|@&ψ2Μαœwn@瀋€9ε&@©ν¬«Ž:ιHγΔ– #Lί‡ΏeΜμΈ„P)ΰεπθ|σzμ~~ΨμΏ\1)q_ΉΝπΕώ™0Ήοf™Ά {νŸ%Ώόο|>Ώ½ρŸα’Ό)·>όλšpYυ¦\―θAβ[βώcή›Ύmλ?Π>ωο;_ϊ~SΏϋ~ς[SώW8Τδo ) cΎε pGΪc τΚ§»ψ₯/‚Γ3``ψΑƒ,P„y© ϊJHΏNπ€L`ͺNψΒž‚‘`Λ'@~)ƒ(| }Xnπ2$tšAhΈΓZˆ1βΰP3D%ώ}A4K]ΦΒρ5‘‚=΄’@˜xD ΖŠ’ΰxC(’qŠ%1†1:’Β ζΠ…_μˆιxF1ΰkτˆ1~‘ _γsόΫη²ETΠ‹eΌˆ1tQfθ␟ \CκθF ֐"ƒΤ…=Θ‘‹K~.z)†BͺΘEƒ¨Q“zΤΕ+ςar CΏ †0ΰˆFΞοŠώΛ’CŽAŒYjΐ €Ό€ί’§JU„“~L##iYζC*¨ε-sΉΛ@„•Ž4‘'σh‘bΪ›*πB:JIŒezS ΎLΦ+Gk’SοΩ¦yihΆrŒγ€&Eˆ9K¨ *ΰΎaI]0–Ή[ž Γ7M~^Ě9θ|`ƒδ—ϋ dIk*₯?΅ΑOέ@K†T“υ  KŽ τH€κ a€|δ£υ8ΰPYŒ‘R’&­ˆ5‘Ίˆ@ΌhD#2ρ §Ώ(y:kBΑ λ€jيXΌ‘ξ€g?ϋψΟ(Vτ!f,ςA†mlΒw€‚*ˆqIš>τs^ε_Ik‘_Μ²­ΰD,Zqטς‘Ξμg +M°r”ΕΜ/ZρŠV”ƒ PψF,δˆZg‚3άlS/"ŒIn£ΊΐE,tΡ ^T#€εefΉSrVδΈ©.BΛ Nd²·«…+XŽΜžrΔξ+–›Κ@ϊ6Eγ<Ησ*r—¨-ˆ3§k? /–π…!ϋfӘΠ7“ε]€€α„ ˜βOΰGN©i<‘ž°…-jα‹Λ>FΓ²H†Ÿρ§lΘο  ’€ŠE0*ΨΒΊS1†ŠgΜβ˜ͺyΐ‚–FΌΌy)’ 1–)Ρ\ Ψq΄πY”νΙP޲”§Le)γΒ\JcZΛΒ ±»λr0 ΖLζ2›ωΜhN³šΛŒ°€!@» Z.!ΔTV±XΰΞxΞ³žχΜη>ϋYΟ(K€ αL…tΙyWT˜ΩΜPΠ>¬a ކτ£#MιI[Z˜t¦/]ι£ΝŒΗ…ή²’ f΅RAΟ(‡8P²jU³ϊՎu«g kZΛΦεΠ•©ί– Ο­ Άγz=ΐbϋΨdAέ‚=†Ζ=Ξe‘›ρŒQ‡μj[ϋ8Ρ–φιL¬Ίx°ƒκxΗκώˆC³¨#θNχ<*Sξ„ϋ6Η^σn!ω ,Ύ Ow HΠ$@*\Θ°‘Γ‡-d0 ‘βĊ/j΄Θ1cǍC^¬Q †’(Sͺ,ΉM…ƒLεΔ­œI3₯9LTxKW³§O…©e>ˆ©‚κθςuYˆ/ε'Λ£²’Θ°MxγPP1φΘPuP¦I)M~QΙf΄‚±hERΚΗκ£ͺ#,ͺ$ YΚ|π’―hE9Θ…oΔΒuf]§πΡ£ΠMΫh….p ]4ƒՈ…TˆVκU’3ω…&5i]Ό•œΠ…έ;Ζvσ'ΖˆTa€WΔΒ ­ž6 Ι«j1ΆoόΫς‚C?’•PΰΘBτ0 _ψbF=Š™G b87 ΨΔ4ςΤRκ θƒ-Ζ‹ΝΆΤq™šσΕx―€JLCQρKΥDπ)OQ@.Υ-blV‰€Uˆ‡ρŠ5ƒΑ u(@ίDc‹ Μΐ)kGΈZ²kΞ°†7ΜαsΈ„muΏΉ΄ η’"VΜβ»ψΕ0ޱŒ]¬ Ε)+1gu‚„)μ ²‡Lδ"ωΘDξ€|œ”mmγΠ^F4˜! VΖς•³Με-{YΛ`ξr˜Ώάε.ˆ`Κ'˜Κ’w4€ΉY}(G9Ύ1g:3«ΞxΎ³žνΜη<χyΟuώ†8ž!7#M s8€ŽΩ6†98ΪΡh‡ρŠFιJ[Ϊ yύh8/ΊqŸ υ V ¦K›ϊΤ”ΖT¨C R‡«tρˆu¬ίQκ’‰&Kμ ΅ί‘–p-Δ·ž AzMi…;ΐ!ω ,· Qv H°ΰ@D† *\Θ°‘Γ‡/ Μ±’Ε‹&q0#£Η ‡90@Μ@9q'S’\©²%Λ—.cœ©’:thάI‡€ΟŸ Νεr Α›9 H“φ„b@Ρ»£I£‚4· € sP₯jΕHN…MO³nΫP"P°Š%ΛΦ 7 r₯kKwαhΐυ¬ΛΧ@:d@ΓΪ·nΊtdδ [Έn.ΒnάΦά˜ΤRn‹ΙA΅k7'MNƒRι&‹Φš.+aC―ώωšΘTώͺ΍NsθdοφΙ r4uΒ‡ƒ„ P<δΙ•_DGΚjΈΰ‘φδΰ“8ΝΩbp^pέα3ΎK{ϊθε@τϋκlγnώ>Fud8pΗ9ΠEηŸBθ U”}Z΄NυΧ`E™XU €NW€%a†Ή–hf¨ΞzΌ@’EΎΉqαŠ©ƒ χ!Œ Yαΐ"ί݈£†ͺ@FΞ‹?€Ž:J8€ O φN6OF™ΰ€„NgJ€ζ#DRJI₯CΩ„)¦˜U~Dšiͺ S GcΆY&Cp@sΚyΔ” ΅γšG6iQœuyΐe0ˆ&ΊB6κ€T[`Θ°e‘‡&Šθ’2dh’QP… Σ|#ꨀ–jκ¨fh`†8§Άzͺ‘ZΊ(‰kmκ) 0Dρ$šXbI―Ώϊ μ°Β«I"`I±Α6K¬³–FΉ^jΐyn $€LP”KΉεŽ›ξΉγNpA²¨‹ξΌςΦkΑ5x›€—fƒm“›žΐ­ΐtq'¬πΒ '|pΓC\ΐ #CΏφwΐcΐP cŒ‚-ΏcςΙ(§¬²0Ώ΄\ςΛ,Η σΜ2r@cά€ZŒ)­ Θ`ΤpΡ"ΨbL1L7ντΣPG-υΤNί FΡ0Μ1Η¬@_π"˜ΰΛT§­φΪL‹‚"x06wςηη‘ι|ΓΗe 3Œ1h³-ψΰLΓ²,r@ˆ97e¬Ϋ‘z/Θ/n9ΫΓƒ‹raΧ–³wίΗTώτjΏ$ξ9­~ €wη”§-ZκN’A―Onϊ鳫n»―“΅r΄―ΞϊBΉΗΞϋn©+ώ»pΑsΜπΓ<ς{"ΜξΔϋΞ:τΩ+οtχ΅=ίSΟΌχΗ+”<χΥsn<θE?ύς³5?νξgΏ½ϊω“ίυϊ;ψ­Οyζ# ππ‡:&wα3`Ψ>’ο~γ‹_ω*X?I°€AήΐnP„±_ {BώYPw+܌υΨΑ Ɛ2ϊΰ ΗΐޝЅ5„aeΘ>Ίntι"FŒQΜƒ#Œΰ +bŒ_$CΔ œGrHΓ(ΪP‰TΤE=šE-bδ‰F4@ξx˜ATQω ‡.ΚhŒ3ˆ^b3b ]Ό"V 2θ(¦=xL!1Ψ4ÏωPΒA B!\„’" 8Ε‡ƒ―°‡ 4@†m 2‹€ΫcAΩΊM.P•ρ£(U Isψ‚ŽJΜdΧψΑ‹|ς΄€%ΎqJΚΞΕ0+·DB0>Dδ r ·Deu™Θ#~–ωe>|`ƒψΰœΓ,fεIe’g“zl$H ω%ΨΰχTδˆE6^R άl₯7_)OˆS φ<Bq€7|γŠΕ0; ΰNπuΟΜ4x$ ‘£ΠΘ‡HλQν.™½£@Υ(Eg:Dœ % d(’™ˆ….0zɊž Ν$‘ΰx4 PHG, π cR- Μl)8-ΙRnΒn€‚* €Ε¦”i>U`§ ‘cό"ωhF+8‹V΅ΌψEαžͺ¨^΄—©b(‘Α ]¨’d°Β6ζ¨Ά”ώp₯Ν$λC§‹j΄BΈΠi3bQX8•-Dμ";ι7V’rΊXλ&ϊΊ΄―6-¬/_AωXGcšΜ―ΠΕ\©–ΜΪ¨( ΰ RLjͰϋΣμ]9ϋ‘ΑΥ6Έ7z’8θ`5Θ’ΎψΫj£"8_ψBk°€!Βdp$2LΣΐθ` [Xχ˜c)¬Κ[‹0`@dJ$  @™ΐŠIn©f ψΧΏ" Σπ¨X όA-R™Ϋτ6ؐ(-’pΰ~%2`‹ J —yψΓ ±ˆG,βQΨb¦†-ƒ$0ޱŒgLγΫψΖ3–ΦΆPL΅nΕέ—†Lδ"ωΘHN²’Œ―tλb=φWmu‚*Ÿ]0C e.oΉΛ`ώ²˜½Lζ0—yΜa>Εͺ¬()ƒn‘c!‹σDπ V}£’Β3žοœη>σωΟ{΄Ÿ θ;ΓYΞ>cθΤ±1­9z VKŸΎGιJ[šDBs΄£D|νΏώ½;.MκRWϊΣ ¦[6FνΒ#©γ9―ŽΗ;nbκZۚqκ`‡¬w=kΗΔΥ™’Τ­‡MlR7䳁Š₯]iι {!”Ο³‹$τH( !ω ,Ά‘Sq H°`A ,HΈP!Γ‡#6œ‘’ĊN0ΘΡ ŒŽ CŠI²δ@b«WŽ₯Λ–0_ʌIs¦Νš8_šhΞ€ζνJ΄hGuͺ¨§Ξ¨Σ§%{ͺ00JΤ«X ͺSdΐJΦ―_£9p€¬'Ψ³E›Ί1p'Ϊ·DsΠΞ,ά»!Ρ‘;S:»xDχ €·‚4Nƒ\δΠ)žŒ.2ˆ'+F6ZSΝ‚υZθdЁՑRJ0κ·θΜMέdΰτkΈζ°ςξv`±d ΈφUΊ΅mm?+—ΉαΛ‘Ζ>bΐ/τθP19@ςξ:v£ι?φώέh˜Υ‘/o2’}fΥάθ ΚιU­΄ϋzύ#‘£€δ Qμβ€Οθ”:ΐ•εΰ~ @rσMh’:Ν…£‘S|ωυaQ˜pDl#ξ„ŽxΉό•βNw8€†q/–”Ξ{xΣ`#ΩGZ<;’8Ωid‘Βν·š A5d‘P™dHDvΤδPΫUΙΡ•e³Βp€™P@£Sμ¦—‰I¦™hͺ™aœ PAAs`œ½ “QΩδΉη@}ώR’z …}~σ Tf8‡₯FM#BQP1)₯~©¨Zΐ`X’‰%Ό+¬²ΦJλ­’Aˆh2λ―ΆK+$ΐCZθΩηsδ CΥp@(TΦbkΐ΅Ωv;PL`­BΫ’[­@η–k@4$»,˜9‹@'ά@όBuOuαΑ ' `ΐ TτΉε£ Œ1 5ΐFό"Œ@ΏρΖwΜρΗP σ‹-Ÿ‚qƒ0Œ!H©Ν‚0Η7ΤΖΔc³oΖ Š`Œ3s¬Lo½+P`ΐˆ  s1qΒψ‚" M΅+Ό™—μ¨SΖ‰Θb±Ε,—σ1Η Sƍ|γ–z$υ΄v"Έ#Œ1ε‰<χ9ά):_'b±1egŒ1kgς  y½€ΰ7³'ΜΪm(’Χ`Mίδl—Γxίsyή”{>ζ‚?-yιŸ;yα€wήzΰλΗy#¦οδΊθ°w{ξ~χ欟ϊθΎ―»πx―.»ρσNόσΛgzμΈΟ=ςΨύ>»υΆ+όφ½w/~I¨Χ>}φΠΏΎ>πθ3Ύφξ;Ο~υ©7=ό$νΞ}tή3ψζΧ>ι}ΕΔ(†ώˆ@όi.+ΖΠΕ0P"Œ€γ«V"hdθ"ε# γ—Ή³#ω€24vΈ†d„ύ;ž ‹"2Z!Ίψ αvΓ‘€oxΤ 5@†p CΏhaIzx9fεΔhE>T@Δmθ‚I$ά ΒĐόpO™§β“!ΡΌΰωbH>žpŠ!Γ7šρΑ$’ν…kτ‘πΐ"Δ|π@<ΰΑeΘqČ₯$]‰Ά8”cό"φψzΰƒμ δΘ!1vˆΘ<6q€|£$"IL0‰[LδQœˆaτQ ΐ, €%ΈαΔΠ…g¨JŽ€,Ž”"r$@#¨‡@wGŽτR+¬ΌJQXΜ@P Š@†"‘‰Xθ2•žτ’ό°E)BΑ λhΖ¬PŽVΌ"‡‡μΘ3 ²Θ¬Έ2υ Γ66±;@A…„/Γ©Θqbε‘φhF+8 UœσHd&8©—AJσ„υΠ…*^ъu Α V4IΠU‚ς ΊΨF+pa€Wπ‚Ό £9O‚Τsƒψ .ξφ‹…€Ί 'εYR_ξ‚+ά/tρ oΞT$5ΘMΏr³ΓCt¨©A’Ϊ8Ϊ †™Z%*EEς$p¨‘}ψ…/|1 j†(1€&Јi€ΓνX—老>Τb™C½ΝZ’ Tb<1՘ ‚4 MΒ8Ftl3‰@ HS;όV{Α@ s8ΐ1lΖHΑΨbΙ‚`°€ƒ³υR”j†ΩόB}Ύ©…’`¬ΥΆΦE Σ“jQ ΡΡC±†ΛΪ>$§:΄P X€\ΔaΧ»ξΥά°ch9•N }₯Α i0zΥ›ήυΊ·½πe―|ί;ίψΊ· " ˜@φΤ§οΆΜaYY9Κρr ΐ&°ΜΰK5xΑŽ0„'όΰ•:ζ¬pΊθ§Ωή»λ»ΓNΉμœ―ϊδš#<ήΖ7Ÿ{ςŸ ϋτΟ+=θΞΣ>˜υΗc:σάcο=_ΰKοχωίσ~ύϊ€wNΎιΞΏd 1:gιΓw―?EΖΠΕ0|ρ bƒ}I_ωΰg’_θ’Ν01Ψ&%Π}αƒb ζƒΊΠΕgO| ΰ+ςar C„lKœ ΒΏχ=n†9†.V¨+„ƒ0$aCLˆ;zD‡<ΤΆρΒκn!5Μΰ ;rŒ_Δ"*Θbg|Δψ)„ˆ†CaGTˆΕ,δM$™ EυM#Η Ζ y ‚¨€d GθΕ‚€±uυσˆ0v˜πΠΨE²ƒnœΗώΰJ° 0‰ŠqΘή}Ȏ r…JΘ$A€†r$C_3™ώΪΈΐ7^€’ω8Ž hδγ—¨Η1p†ΊQΟ”„Τe (aE CΘD,ta· ϊ’΅”€G 7ΐ£PxJ,^ρ 5ζο‘«³ααHΘ%nΒn€‚*€HŒ§Γd_Δζ 58I‡TρŠΝh'DΝuπ"†ή3f)1ΑWΨœΠ…*ΚA+l#„Τ»ζφφiK‹”LΥh…p1Νfπb±θ( —w»0qŒ"Ι ΠMD΄m€%G΅ΙΠ§μm;|EΏξΙ>…Š1…ψX(οΉΤPBQŸET)LΞ9D–ŽE°Z _ƒΓΨΰRΎ: OH ,b‘‚zΤ‹ ΔΐΆ¨…/Φ8_ΤΒΈ@ ž‘ x dKš„[Π•/«Α;Ψ|Ι9x’―Θ$2φS)ΒΣ₯&KnνΕ[•2A-~a°Μ̊QœmPς€…^aJˆ@Δif…pΦ³ρ|¬e}¦ZΨΘ»Π”[9Αΰ'0€Ί`†4Μv]ΙΥΒΆόjyUŒ "x†4Κ!¨o”c0»@΄p±½hŒcs 6d#Ύ cc+3@z  Z/ŌfΚFb¨•ά7Ώ Š:βΑŽx „πHVͺ οHο"„Ά€!ω ,―4 !ω ,Φν 0F¬˜1*¨k1]Š[ΈΠ˜.{ΙtœH1!±Xωΰ!3π˘1Ž…ύi%œ.';2©L8dΊJΖ\xμW«|*jΊ„9₯@‚?Uτb§N£„}ŠΜ·fΊJD©$_yΨtj₯E=zT‹¦œ/^%QφŒeο‡%6 ΨECΙ²3σ)1€cπHΠ|{xΠ@±ž?‘8‚δ΄|λ•5x6ε@”(B¦¨Q¦Xc#φŠ›uΝ (ΧκΥˈ£κŠUΜΆMΥξ@Q…5nΡ¨+ν5kΕ)–*Χμ4VόXO—*]­Κ‘±²-«0…ίum/k…Λΐ+^Δx5{Uό/9ωδd€“ƒ όΕρύ+ΤνA%D˜tΠ/Z-!ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 !ω ,―4 ;python-gaphas-5.1.2/docs/images/guides.png000066400000000000000000000402151512665300000204640ustar00rootroot00000000000000‰PNG  IHDRΛ«―φΌzTXtRaw profile type exifxΪν™kr$7„σ{Ύ@Ηα3bo°Ηί¬nYΜΨή°l„₯˜RU5@"3Qγφώ}άΏψΙ)z—Eki₯x~rΛ-vNͺ~ϊύ >ίΟϋ3Ηλ,|½ξϊϋFδ˜8¦ηF-Ο1Ό―ΏΎπ>†Ξ™|¨Ξ׍ρυFΛΟ1ΦoΕηlEvΎ^΅Χ@)>7Βk€ώlΛ—VυσΖ~Ž―ο?aΰŸ³\Ώ.ϋ‡Ώ•θ-ažγN!y>cŠΟύηRηFδΣ'΅οyNΚ§€φŒ€ό,NώΣͺάχ¬|œ}ΛΚή1ϊ’”Tž'Ύ³|z=Θ·λ―έ ρ§™Σό€Γ—λmωσ};οη¬κΞΩΟξz.„΄Ό6υήβ=γΑAΘΣύZαWω'œλύmόVz')_~ϊΑο -DrB+τpΒΎΗ&KΜqGRcœ1έk•΅8-kρNΤΤJ•ΌM›Έ?ΦξΌνN7Ceβx2³¬Gwώ7όώr s ς!X0I}Έω Ρ@Θ2,sφΙS$$œ7ŽδψύϋύΗςšΘ ά0W6Ψύx†^Ψ2₯›θΔƒΒρ©΅ λ5!bna1!‘_B’P‚Χ5βXΙOg SŽƒ‘ΈXeΜ)’S£ΝΝw4άg£Δη2œE"$ ©’ N2Δ~4W0Τ%I‘"*Ušτ’J.RJΡbδΧ5iVΡ’ͺU›φšjRKΥZ]m΅·Ψδ(­4m΅΅Φ;“vFξ|»σ@ο#Ž4ςQ†Ž:ΪθψΜ–rΞ8pŸ] ’uΒ…]CJκΞβμήͺ½/ίγΘ[«ύϋ™zζ”’Ωk貫ٷƗΟΙ ˆ„SΦΰOgώ.OžΡΣ²ϋΘ¬&΅Ξμ:Ι[UWNΛH •šKεt95•½œβΫt‹β‰]Φ,Ύβb(π‘a#ζΝ*t’·0ΘΉ"ΤΊ²­k%;IO©‡’νδ…,Τ±ΩξΡ©ΆΌοΓ]°γžCΦνAΨ΄vΆ³Α(°†΅ε€έQ7DGΫZŽyMφO cJ}fιΌRΡ: ;νΟ;œέχ’š©ϋζ°©Ÿ cpϊ,|H£sœΉXΝΈLΒ 5΅Fϊˆί±²Ά9(A‡{Υ…UƎž%Δ΅ύ σy΄Δg¦ŒcL˜@Wιw-σ΄›ΣIΠl^ځ%'Ycί€/1Ο>"ƒτnΈˆ΅mΏ†ΜL8ρŒΠpΡ02s—ο€pΏ!B“l_e΅Σa«μ"ΛΊ .FΛΘ%ŽΥ&ψPγ(mήσu'ˆΨΛ/ΠΙΌάwπΎ°Λ7vΫψ€›³)¬ϊ»B·©CΑlΖ–LΙD‰­K1\NκͺdΏo_΄υ#03ATz–6₯ΧM΅Φ^–)HmeK‹»džΨΰ4|OR½s4ΏQ‘™A~r€`}YA[Jh ? 4)ϊpϊͺy,m‡αXΕu`.;jBώιB§6ΠΏΧԈU"KΚc¦k©L Aώn^φpEσ^±Οƒ^΅P–‰ς.ƒ¦˜η‰όν§"Ύ&U WύΙ»JΆ5οΖ~‘K,–›ΩΆξυ€TΘ†9’at΄dO?w αT*ΏΖLJˆΒίF€Š Ξ£GVMΉΥϊTuf—λPt‚d'Ω§Dn_0ƒmΐkξ"ΙπXρ:ξxΐ±AΘ^XjΒ|jΣ©˜3k?u^IΕ¦Ό±‚ο· Ι„A9›’:ΰΌqκάiV%ψͺ?Z ηαH'I©oΰ‘‘$ΟΫοZb]d(bk8*TœO£P}’z@œΛδ !#7ZΖΠ7Μω΅M)7_jž`IΊcχΉ΄,I·Ζ»Hβπ±9TpŸτ„b@Δe•FM–Fƒ)λC »n%&qΡHγ0€|"eω;D―”εC!›i{δJT„άίΠ5‹τ‘²Βϊ%βΈ*ŸΪ0Ϋ §S8›ΞgΣĐͺ`ƒGΆ°€΅q<τ΄!VŽ™²βΣ/Χ ΐ«BόAA*Nƒ”Ž}—1χ »΄ϊσ―Δ^Ϗκλω6(ασΚΠͺGΈ'‚ΐ½,ήk Ψ•*švͺœMfΈKœ)–%SJ­$sžP λFμ€³ τϋΔI{7+y¬u<,τZΔaώšˆX}B =IKŒieQ‘> ŠοΔ›(Uo΅YΟNΈΪuXδZ“œ,Ÿ0Nη–f‹\Ώ6Ά ‚jλ‰4±φ5α‚ d#₯>hτμ7¨Ε;*xΓ©ΟB?ΎLœΐό­ΊJyAŠZ ₯‰/€.’φŒ—σZΟΦ†Ζό+‹΄uμ€ΑiͺpϋI2(o«~σ!²φ’σ?ήΪ-Μf„†‡†SΚ™;QސξΤt©TY0₯i6RyE1xΞΠΝώ86εό&Ύ>Wev…nμN‚œoΘ;Qc4h=Αδ,·G:`CΈΛ8ͺζ0ΊimΛ“u[Q#¦ΠνBκ S2™ηB+£bΕ¦nω›Ρ!›FΚ@š‘:ι–υλ˜E*t"°εŽ«%_ρ-‹Ρ0?J…OυΫ(‡”βΏΪ΅ΰCixΔ½―rQζp dR¦)ς‚K’zςLŽν“>Ÿz3±?F9hα’δ“AΖw3R F­°J¦3α˜ψΦ27R„’O NZΗ,'홃­`έ6œ„2vŒΤc*…Fπ”ΫVκΔ?' ŠŒ9£4|μTμΦ™‰=SΫ!nΊ||ΞZ›ΦΞΣnB™A°„\d*ΐg©Άe ›­ί£-MΈ9ρR ­oΣKi!†ΞΎ)t7›εΙ¦½ƒόΕ1Layύ,,ΰΨ)aŽαT²‚Χ4€,wW|βJ³‰:]ŽYE³€XP{X:`g1„o*'φEΜ&5ξ>9,ψ T―­Lγ>»ΡΩcB#Υ"JTκ&< ‰ΆkγM²Ρ9RLΪϋ]d‘6‘…χ΅Iς±‚ΓΚ³6΄‹†ό§ΥΙ‚±£#Α: Ž<7Œ™Q@ :Ιd…E ΨM˜η՞x$¬Ψ:΅έ­Δ(αVŠEF iBŽ(ι₯61;Δ¦π[fh [4B s 6Φ JŒ ρ•7‰ώMυδ§ΨY“½Eΐ_%’Η°\m§bOQuΰ…Ή29ΚEo(Œ#3}ύA\Ο4G>]+ΓZh/ΆΙ4›Ύ^8~Ž–»αϊΚG?ςSgΰs†Yέ°ά:Y+uWρ2c@΅τφ‚ƒi˜*ΜtΓΣπ¦Œρ>dΨΉϊ *λ:j°g>±“{wζΪ­ «‡GΣ¦±¦DπΜB‘uΪaΣΧ]H6Κi,‡8‘R¬d>δ9¦)Υ2ƒΣίΊ”L—¬5‰%!όΣμέΔ7b3{vˆ"Oχ‚ .2qWΚ8xL9ύM£ΐeδmΌΤV)Ίr7;֍Ξn#…‰LAuv*iYζM° §©šWXΤ^cΧ–HT4iζ"F–ΎߌηΗύbώ\άΖyβ{` §)mΑwL#δEΗAz΄cœˆΫ…£²aι Σ\K¨FE€˜„ =ΗφbΤmνx 8›½"CΌύY»,Α—γ(ΡΘ³ϊ‘Φ§ήφΉ4œ…φ \μfƒbυM;‚Ρ‰τΚ΄’τΆ’§£ϊ,:Έn΄OΖlιh'.>Τ₯Πwΐ읐ΰ)r;oy.š•EIk_(šcZϋ•ιΧ)Γ©dnΣUΦ΄\Ψ^}q‘“ΓSHΤl›·&xΛή\Ο a`Ώš­0Ππ“‚L%Oόzwσ΄?'V JKπ†ΐΦ‰έ}v3<{x²AΚ°k”e6οF§lž@šΖcΈ₯dσ'pZSŒŽ0žQ9-1pY΄U'Zξ+˜ ݍ©$φ ς?Ba›(RντžƒVm‘ΦΥ€R—μ7€GkχEh;ξ.ήτ›ΙgΗΨ^{[ƒχΒΔΫ,~ŽLγ‘ψ+ΦBœ1 %Πw'ςG ϊ·ιΠUάΉc¨`‚a»οŸ2Μb›πΒduΣ‹ύί9ΊΏετ?ύ3Π_ΘΌέΡ½ ₯½K„iCCPICC profilexœ}‘=HΓ@Ε_S₯"+qΘP¬ˆŠ8jŠP!Τ ­:˜\ϊ!4iHR\Χ‚ƒ‹Ug]\AπΔΙΡIΡEJό_RhγΑq?ήέ{ά½„z™iVΗ ιΆ™N&ΔlnE ½"Œϊ1ЍΜ,cV’Rπ_χπυ.Ξ³όΟύ9zΤΌΕ€€H<Γ Σ&^'žΪ΄ ΞϋΔV’Uβsβ“.HόΘuΕγ7ΞE—ž13ι9β±Xlc₯YΙԈ'‰cͺ¦SΎυXεΌΕY+WYσžό…αΌΎΌΔušƒHb‹ BA(ΓFœV iΪOψψ\ΏD.…\`δ˜GdΧώΏ»΅ γ^R8tΎ8ΞΗΪ5Ηω>vœΖ |τ–ΏR¦?I―΅΄ΨΠ» \\·4eΈά’O†lΚ€) ΐϋ}Sθ»ΊW½ήšϋ8}2ΤUκ88†‹”½ζσξφήώ=Σμο}r«Έ»‹iTXtXML:com.adobe.xmp ‹KΙ£bKGDb`ahΣΌ pHYs  šœtIMEδ /; ά–^ IDATxΪνέ_ˆdΩ}πί½U]Uέυ―g§ηΟξΚ’Wkα?882" Άμ@ŒρK°dƒ –ΑN  €CŒ±ςΌ Nˆπƒ!€ΜΖ$±bό [62–WwvgvfΊλOwWUΧ½•‡κ™ιΊ5«ν©ž©ͺώ|`™ώ3;}λήσ=ΏsΞ=79:μOxO©CΒ„%K– ,@X€°a K– ,@X€°a Β„% ,@X€°a Β„%K–€°a Β„%K– ,@X€°„%K– ,@X€°a Β– ,@X€°a Β„%K@X€°a Β„%K– ,@XΒ„%K– ,@X€°a K– ,@X€°a Β„% ,@X€°a Β„%K– ,a Β„%K– ,@X€°„%K– ,@X€°a Β– ,@X€°a Β„%K–€°a Β„%KXCe‡.ί‡ώ#Kω{Ύώω7Lο/Β6W'ι\θηΫ“ΆƒθύEXΒζϋδ|r‘Ÿ{γSo8xή_^ s– ,ΰb ΓKux˜ΗΓ‡Yž†W0γ£Iτ³θvς8:ΞγψxΩτϋŽςθφ¦?ΧιdΡνζ1O.tŒΎυ­“χύžJ%‰½½RάΊUŽ[·ΚqσF)>σ™έψΔ'Ά]Y ψΣ{ΓQΔΦVDΉœΔΦΦ“ΖγIσψ―Ώ{ΧvKΡή-Ε΅έ4Ϊνi§₯ΥZόάΛ²IΌωζI|ωΛΓψλΏΖ_Ν ΎόεaΌύvGGωΪΏΑ Α "βό›?‘EμFόαφ£TŠHΣ$’dϊ>FD”Λ[[I|θC[qλ–e%Ώπ '“«ςΛζyDšFόήοuβδ’~νJ%‰R)b«œΔΦιΗεr•J£Ρ$²,b<žΔΙh'γIŒΗqi–ϋ*'ρ³ŸnF΅f:ό¬ίγχc”Œβ•Ÿxε=Ώη­·Ζ‘ηοq.όΝ½ˆαVΔݟzϊ…œLΟ½j%b«’D΅šF΅šDe+’ςθγJD΅’Fy+‰n7ύ‡γxxZ-ŽΗή£ Ήυ?"ͺ'ί{σ}Ώυε—ˏCτ‘;|'*“Jόά'Ξ±TYΎxίόΖ(ώχ9ΊΤ†a4š6vΗ1Ή’'Τx<‰o}λ$^ϋhΥΥuNχοgQ*Ε{ε9L&Γα$†ΓˆˆΙ‹©Ξt˜*;}όρτΟ$&“ˆ,›ώ›uONς˜L¦Ϊ,›Μ\KΕ―εωδρύΗΣ‘Οu2L’Ρ0V»v•εΡaΚ΄κΏυ[ϋρ―ώυέ+ρ»noO‡θvwKΣ?Ϋi΄N_οξ–~ϊ=i΄[§―wK‘$wίΗ½wOβέw³Έ{χ$ξήΗ»οŽγέ{'ρφ;ӏοί?΅*ώOρv|φ³»3>όσ‰N™»/Ο#ώθϊη8yΏqЈψΒ|ξj5V«­Σσcoo+nάΨ:}]~όωV³{7ΆβφνJlm½˜  ςΗ;δ1ζ1槝ˆ<†£ibϊzςψϋ}οΩΏγΡηύμτης '1εs?υ‹I»Ι/Θϋ†χχ~o5>τ‘­™Ο½ρ©7’=iΫΑGeΉξޝ-)εWnΖ/ώβυθχςθfq|<‰^/~?γγπΚ9«’q|ξswβw~ηΑL£Εω ΗͺRIβό`=ΖΩ“!ϊρxo–’¨l§ρ“βzt:γθχ²θφ¦η^§3Ž^/»ΠΏγζΝ­ψθk΅xύ{Άγ΅ΧΆγυΦβ#ί]‹ju}†Σ-π‰ˆΗ«eŸ—ύάVt$>ρO[‘ηyφ€ςύΦ·GqηΞθI)›8ρ…εj{ηΩ°όΨΗjρϊλ΅₯ώ?Ίέ,ƒIτϋYτ}|8]tΣl¦±]›†έ£άΩI£Ω\ίU₯{{εΈukΆ—|,,Ο_ 's ώφΞ|@}½Q―—βΧ~νƒίρά{€½ώtt―—E·›Ν„j―—ΕνΫ•xύυνxν΅jΌφΪvμξZt²,i:]ΰQήJ’R™}?³\X ΛwηνΩ°|ε•εϊΣ!«ˆ›7―Ξ‘­Υf«ΨΡΠ…u^ΗΗσay±sΟν<«ž3a™9&kω>^εΚςεΫ[Ξ€₯„eZ•εΉ+ΛΒ±Z§aOΞ§Έi‚°–k–·_–—QY‡ωaY8VΒrσ+Λ\_r-]™±Βρxf3½½7ΜΣ,Γ£έRΐ@XΎ—βΣ%NN&3wy|½œΔ7δεΪϊΒgώxξs“<"ΞlςVqoΛ­#ΒrEέ»—Ντθnά(ΫSri•e!, Γ>ΥӞWψ°›E~¦!mμΞ߰ΚΌΏωΣo—σ™ΥΚ[Υ4Ϊm="aΉ’ζζ+ Α.1, ΓΎŸχΊξƒϊ»ΈICϊίήψώΈyΣΉΉnώδ7ξΌw΅ω…n|φ³ψυ?ωρzόχΟ—ƒΆfLχfnΎςΆ!Ψey΄1υγ°4 {.ƒA< Κr9‰λם—Χ™,ΜC»΅JXͺ,―leivo½•ΝμφrγΖ–©+p}ιL ΛφΆ°ΌΔž³aΨ…ΒςΞ‰sς ¨κL ΛurχξμΝM·έcΉ4VΓ.xN:p{{ΞΙ«p}»>„ε ›†57€ηόb+π+$7QqŸζca),Χ*,U–—WYΪξξ\²ΒΊέ2r5γ#IaΉFaiχžε™»uΔjΏsΒβžΝT[ «²–+j2‰Έwo6,oέ2 »Ό°΄7μba*Λ+ \Nfžρ9OžϊX„ε ·ΏŸ=~(lDœ>/όΠ²εΠ0μΉL•εUκP KaΉ‚άcyΉͺΥdf³θα0ί§Ε1ΞT–W5,Μ[ ΛUΤι̞˜/½δ™—ΩL&ζ-Ο–ss–ŽΙΥ©,]Βr₯Š/₯Ί<ΛP쳇₯Κς*…₯‘a©QΊ’ζ7&Πs~?Ya9K•%ΒςΕ†eq!…°ΤθΔρ<―ΒΘ‹ύa…εŠ6J³―· Γ^BXχ‡uLžυΌTYnπυ±­3),Χ²ο_ΆΉΫG Γ>sγθ(sP6Τό–wމ°\A''*Ληέπ[ΐπώŠ«²;ayU:“ži),W³²ΜΜ ]zcPάLέcΊήΧυ½Ω°άί;(Ϋ™΄?¬°\‡°΄βU •₯aΨs„ευΩ°<–W',ΌΛUTάVΜ0¬Ζ`μΒς‘°Ό2ΧΗ‘>Βryε›L—°|ΦΚ0μζ*>yd 3),W³² ayι=gΓ°Ο\Yš³Ό²I·ŽΛ•δ>Λη–†ai@wv3ΊIZ{Γ°Βr5Γ2sŸεσξ9†=C±W΄3iaΉŠŠ | Γ^FcPΨΑΗ0μBaiEμ ˁ°–«XYŽ­†}ލΑPcp.Ε±ϋΒrU«³―ν +,W’§;Ό€Κ0μb•ε9ΛM47MaΞRXͺ,5Vϋ;,­ˆ½•eΕaΉΜY>Κ0μ"μ{U;“aΉŠ•e‘ύ±φ2Β²°‘Ί°<—½λ³'γƒ'ΚͺTν +,Χ!,νΰσzΞ:²·Ž\ΡΚRgRX’Rι;‡'Λ¨, Γ°C=ηs…ε^qVX^…λγHe),WQ£>Ϋ υϋNΤε7Εϋ,uHΞcξΦ‘}s–W!,έ‡,,WN}Ά!?9?³lbήrS―‘ͺEpΒrΝ*Ks–Λ7·C‰°<·βPμ-ο6R₯bœ°\υ°l˜³Όl†awνΪμ½–½‘MΤλΝΎ―­Vκ ΛΥR/¬†υΜΐηPYb:·v‘Ρμ™&Ψ8ΗΗωL%Ή³“Ξ]3ΛΛΩΚ²ίא/Ώ²΄‘ϊΒaΉ[˞ͺ|Σ‡Φ―]+9(ΒrΓŸΛV.'3;#œL"Λζω*ΛR!,Ÿ›¦3–ͺJaΉ‚ ·ŽΌκ"Ÿσ…e;–O―Ώ€²–kQY ΛΛ`EμbZm#›ψœkΒRXfX&s‘Ώ/£²΄"v‘Κ0μζW–…Ξζ,…εJ*•’™†<Ο5δ—–ΕaXΗδ\aYXΰΣνΊΟrσ*ΛΩχτ%a),Χ§Ί–Λ6? λŸ―²4gΉιΎύναlX^–ΒrEω˜ΊŒΚRX.–ν’ssΓύε_ΝΌώΑ¬:(ΒrU+ΛΒσ䬈½„°ŒBX:&η KχYn²γγ<ή|σΙŐ$π‡ΆaΉaivωŠι:VY.TY†έ,υW‡3œΨΗͺs$„εΚhη,my·tΥBX…εBaivΣΒrvφ‡?^sP„ε W–’Κς’U*³’αΠ19f3™y¦₯[›6Λ—Ύt8–?,,…ε*‡εNρΙ#Z£e{pvyόυ=+ώΞ£TJ’yfΪd’Ίά$ΕΕ=?ς#;а\εΚjΨΛvηνΩ°όΐ«[Κ9΅Μ[nζ5qgχοŸ‹β–w*ΛΝP|ŽεuΫά ΛUΧhΞV–vIY/~qvΈιΥWΛΚ³„εύa72, ¨ Λ5¨,‹s–£eω³wΏϊ«oΟ|ξ»?bΕί³U–VΓn’ωGs™Η–«–φ†½οΌsŸώΩ―ΕhτδΎΥŸω™fό/ν:8Ο ΥVYn’ΉGs½dΔEXΈΉ[G„εR|ϊΣ_‹·ήz2_ω/ε?Ώbyό3Ϊ΅εέΖΙ²ΙΜϋX*%Ρlͺ,ΧΥ•ιζxžεςu:YόιŸ>ΉμφνrόφoΏ©φΰΩ+ΛΒ0¬>λ―۝ݢ°έN]*ΛΥ·SX λΦ‘‹»{wvμ%Α’•εM 6―3Y‚uqΛ5Πh¨,—νήέΩΖΰƞω˜Ε+Λœ₯σsνυ £νΆλCX{Γ^BXΎ;–{7,‹_T{ΧjΨMWryΛ΅˝tζ1HGGΉΗ ]Πέbe),Λ–Ξά¦©žοztd΄@XΓ/šΖΜ^₯yξδ½peYΨΚkΟ#Ή.t~ž₯#·ώŠCxΊ°\›κrnE¬ήϋR+Ks– ΛσοžlBe©$,Χ&,­ˆUY¦,›Β}ͺ›–ΪaΉ¦•呇 ΛΒ•ε*ΛDV½β#κΗDX‰†±K΅ΏoίKaΙ{ΩΪJ’TJΞ„e>χ>#,W³²,n¦nXδBŠ[Ϊi—ϊmgYΦW₯2ϋ>»H„ε:„e£ΈY΅χ"jVϋ]ZeiΟ¦^#ωΛ5М†ΥΈ_D΅πΠχαΠ1Y8,'ψl’βΌ₯E>Βr-xτ’Γ²Rθ5ΟeU–ζ,7³²<:VY Λ΅¨,m)ΆΤ°¬ΝΆθ£‘†`α°,ά:bΞr3Γr`ΞRXge),/–ΥΩΣΗ0¬Κ’bXΞΎ‘6&–kZYκε-³!0 {‘°TYnδ5RθP[',Χ£²LU–—ZYκ5/ͺxλˆΚrC‘Β0μ±>Βr=*ΛΩ_ΧΣθ/–³-ϊΠ²x•%³•e1,aΉaY¨,ϋ†a—Ϊ¨,/–*Λ«Π‘<²ΐGXcXzύrs–Β’χ©,-π–k–*Λ₯†₯ΚrqσΫέ9&› Έ)>Βr-4ψ\f―Ω}–Λ«,mw·™Χˆ|„εšV–Βr©•εHX.–ΕνξŒΓnΘ5Rά”ΐ5",Χ²²ΤΛ[f―ΩFꋏ'*Λ 4·7¬>Βrlm%3ΥΠx<ρȜ%V–#;ψ,¬Χ ˝ΊIΛM¬,U–ΒRu©!PY.SΈη·Ω–›XYΪ”@XVΛfκΛRάξΜε⺝ΌΠ©–›xX +,Χ¨²œ=yϋΒς•₯[G––=•εf†eq5¬kDX χZ^bei»»ΕΓ²«²Ό ʁkDXOeY†ν«,n Žt<„%3ΚͺΚRXmeY|¦₯“wy½fΗdρ°4 »‰ζψX}/,Χ&,ψ,­Χ<·‘Ί†`ᰜ[ΰγFΛMPq눰\WBeι1]iΜY.K§0 Ϋ4 »‘•₯νξ„εΪh5‹•₯“wi•₯[GΦ+tΪκΒr#ΜoJ ½–kSYΪvy [G.­²4gΉ‘•₯aXaΉ6šDX^ReiŸΕWΓΦλζ,7AΉœDΉό€Ν99™ΜνŒ°\ΡΚ0μeU–£‘c²ˆ,›ΜΜe%IΔΎΚrs“β3-…₯°\‹Κ0μe5*ΛΕτz“8ϋ„F£žΠ΅9μ+,Χ΄²œύ•ϋ*ΛΕOžtϊ$—Gς|:ΜΔ³ιtάcΉΙ*•Ωž±λ©|ε+ΛΎχ"j΅4NNž4φΓaΔΦ–γRταŸΘ{~m<žD|βΙ1ΌWNβG?χτKσO~γŽƒΉ‚~τs―ΌηΧφΏ{ρα'ΘόoJ3σ˜g}ύσo:˜ΒrE*KΓ°KU­&Ρλ=y=ε‘2zj™tžϊωΌ4‰Ψ}ς:K":ι|cΪΞwΔU~Σƒ§ΏΏ­IΔ™—~9yκ0{{v…εκh΅fΓ²Έ ‘gΛ³lύ}ς>9χΉ{χΖρρd―ΐk/•γ~`gζ{Ύπ™?vπΦΐ'~χ'ζ>χ₯/ΕΑΑψρλϊGΫqνΪl‡ςO½αΰ­8VY^ˆ-ο.n<.τ`ΛVχl’b™ir„ε:ΨΩI£Tzrφη‘eͺ‘₯U–CΗδΩΓr",7ΨΩφf–Ϊ›utε†a“$’Ύ“Dχτi#“IDΏŸG»mžm•εHeωμayr±°άίGΏŸΕa?‹όΜαςޏβ΄ΓΙΙ$*•$šΝ4ZΝr4š₯hžώ'΄—T‘€!,…εzj4Σ螹e€ΧΛ„ε²*Ks–Ο–ΩΣΓr|2‰““I G“˜δGGYόζo~;Ίέ,ξΏ{χή=‰·ί]Ϊ­ΥjΥjΥj­V)ΪνiˆΆZεh΅J§Ÿ›~\«MΏ·Υœ~ΎΩ*ΗK/•ξS+KηΌ°\σ¨†,‹ϋΓΪLύΩΓ²0gωo γk_ΜlTγIŒςψόηί}nα0α0""‹wί=Yθο˜†j9šΝR4κi4š₯h4JQ―§ΡhLΓ·έ.ŸΎN£Q?ύzcϊg«΅FΨIΔpΗΙx''Σͺ}4Κ£_xΐΌΚRXOX.ΐΎE>K«,G6Sfō6©1νv³ ?οQ¨Φλ§!{Ί†‹³†p£τψ{γΝ3ƒM’VK£²5­+•δq‡§rΊPκϊυtnu,Βr}*ˊ°\T­fΞr’$β₯—Jχ;ν»[ΉΠίΣ=­Z§: GξA'‹^wέή΄Βνφςθu§<Nžώά£r½žΞν]άj•ζV¬ΆΫιΜfΝF·n—co―Χ―—βΖ^9nέ*Εή^9ο•βŸύ»RτJiό؏ν8™…ε…e‘²,«,—VY…%KΦj₯sΫTš4Υ†lΊ+9 p2VY^Ve9–€°ά £Ρμks–Λ¬,ΝY›Ηœ₯°Ό`Xη,“οΔΣ%ΌΏΛ5ͺ, Γ^Veι>Λχζy…ή_„εZ«,—¦8gi»»§ϋϊηίtΌΏ¬±+Ίΐ'T–—VY K@Xn›\^eι>K@Xn€<Ÿέ¨:Mη‘Γβ•₯aX@Xn€ωέ{μ=u±°œ}m–`dqΟRΥjvπ„εζ…εPX.7, «aέ:ΛυχΝoΞ>ρύφν²³ΰͺs–€°ά8χw³{έ}τ£UgΑEΒ²°ƒ9K@XnBX~u6,Ώη{jΞ‚‹„₯9K@Xnž―*ΛΧ_WY.³²ΜYΒrσ*KaΉΤ° @XeYˏΎnφ"ζoQYΒr­½σΞ8Ίέ'ω΅k₯ΈqΓjΨeV–C |aΉήŠ+a-ξΉ„Κ­#€°\oΕ!X‹{.nk+™Ω[w4šDn$Ψ0Wj ²XYώωŸΕOώσ―FžGς &‘eέn;;i΄Zi΄ši4[₯Ψέ-E»]ŠVλμΣοΉΆ[ŽζγΧ₯ΨήΎZSΑΥjGGO*Κα0ΏrΗ–›–_έ½η+_ΔWΎ²όε›[[I΄ZΣpέέ-E³‘F³•F­–Ζξn)ͺΥ4κυ44ͺΥ4ΪνRlo'§_O£RI’Q/EύΜΧk΅δR¨ΧΛβψxύ~ύ^ƒA½~ύώ΄σΠνζqx˜Ε`0‰N'‹££<ŽσΗωά½•ΓaΔφΆ‹ –kιοΏ:|.Ÿ““IO?]]΅«jwuΧί^{­΅ΑqΗqΗqΗqΗqΗqΗqΗqΗqΗqzƒ)€γ8Nπ!`οy― «]kYL†€Ήaέ`0˜ΦΝf„υ ΒΊ9ΐLτμXΦΝf…εEΔηΚ`5Ί¦kΒς°2,―FΓΛ>―lΩ·tœ>ΖΕ›γ8lF‚¦k(vΩΧpς>φ7a“Š&H©š‰DHHM§R@₯bΙ„X*Ίζ†s,ο³Β~½ΐQ̍ŸΎΪΡ9N—αβΝqŽ–tΊmb‰Υΐͺ°n Ψ֏†u«‘υl Ρ"ΆX–‡Γϋ:`mX!ŠU” ƒΔ€-/Ϋη ΑΉ(,›05–ΫNπ»:N_2½ΣpΗιώή<YΔf"Λ–YΊ­b Βς|$³ξΕθΑ1lV’‡*ΰηθα–²πtτpC“n― ―{ΏgΚΟ ΗΫRP'§9[…χ)H°Ν Ϋή{i˜mEίcϋπ:x°΄Αc< uβ7—QΑ 0Dεo°8Ό88,o...‘{κήN¦ ρ|τž,&Ÿη‘λ—~^ΚΝΦΫ«΅ασjŸ†‰νΤΊ°}U(?ή‹Ά—ψ½€‹7§ŸCΒm𠱁υΨ³άό=@ ϋcQx_‘S~ΤγΟγαœuQ-θŒσ€3λ^ƒ’ζ 6€ Ÿ ©Ž¦;x+±5qRϊN¦όήΐ!H λΦ„ύξώ’)Ώ …-DQ93lηMΩxL²ο΄πZάό.SώΰωDkΛL’ΟΣΐ—2εώ_XžG΄ž->œ–Sώγδs[xo$Ϊτz`°Ό'ρaυ:4ό8xK8ίθχKΰΐΝ‘μ-aί §„sψ2+/BΫΣ‘W–DΡω―ΐΒΉ_…ΔΫ{Ρ0βNθϊ WoGu€kΗ#KΦkΓΊ›ΒΊ―£Εqh¨ςGΐΡ°ΧΐΞσ5τ;ύν?³5±γeΒmύGžDwζ#gββ*Ϋ,„σ[gi8Ό§χΗf$˜³ηLο5Βχ_ˆΪ’Ήθ<“κve>ΊΆ³‰aΫΆ€x€ϋΟ¦»GμΩ59ψEGkΤ‡Έxsϊ™_EͺF¬WΏ ΉFζHT,&Šk¬oΟ)3ifρ™ξyDρeυ²§­‹ΓΉ²μ††|σΨH΅x{& y|89³ξUΐη Κ Η”Ÿ.(6Υβν‰ΐ”Ώ?gέ\ŠΕs^tβCΐDq› βmΒ{#VœGΫ"qpCXΏ<ΌŸΌ]σ₯hˆώHδ·υ€Pγ(τ؈~ΧO’‡έcΠv7$ζ~Cώʘ’³ξt~‹ΎλAΐΡθ:οE}‘ϊ2Τ ωπdΙώκ4΄ςκy'Q\φΝ~/³8`0±Ξ«`Z‰„λͺ°m$ΩΎ*³Ο,ˆΛΉθ7\ˆΪBk«@Po-ΖΕ›ΣOΌΨY@ΤXΝ=&ΗJbΌ~^r^xAεί<*{ωƐEΗNkt!_ήŽoΒb#|SNω΅ΘΪ3YRAœ ΈŒ8|gΦ ³bό>§ό―€w-©%Ο―κ«hψΜΞoΓmEC7_ ―<.F–€Fς‰‹ΔΙ‰HΜ<-ΩΆ_ Τ£λϋ'dι< xSR~ ΅υΘ< ’ΡƒπΤN3ΥβmkτžN₯τ’°όr$X·Aθ'"Ώ;πTΰΧuΎηκ_\‰Δώ³xkε5˜Žά ~Ÿ|Β>„οψ$tmέ_Γq/EΏ·uš bk$ˆm¨΄ΤšUβ:ΔϋΘ¬hV'»W{2='ΔΉύ‡Νκ7ŠξzlvΘreXW}Ϋ d­ŽW£ίam­Η\ώ†^ξtEœžγ«θΏslΞΆf^Ne0AφυΫPξ–πωϋΙΎ‡u_IΦmλώ_²./`α~dNN@ yυ8&”Ι‹6΅u—$λΞλ–΅πΨy~J>»†νŸwBCΎw&ΗZ ό7Εg§³LAΏΣK;]‘~Γ-oN?αYς‰bΓu3k–ͺO:Μw>ΥΎ’χf>'ΛφΏMύ%§fήS¦xΨp$¦ Μο!KέgΓφiϋ₯Œ&Λ6œœ7<›₯Ωkp_ΑqΜΪeΦm‹,ύ8π/Hœ…„θ1HD^€Ύδωœ:νΗ4Ζ+‘₯Τi.ޜ~Β³δ;e]xŸU³TΔ†­³ŽγL–oEΖΔaμ²Ω‡(’ή†„ΟKZ|ŽV]ƒ’θDžΜΊ&lFΓρK‘/曐ί‡3€"—€F£nr°ϋι­Eβyޜ~ΒΕ›3QΜςΦ¨x³‘ΒςοPtνm(ΐd!ϊ5ςΛ»ωώ<φpΡZΆψ Bi%e_³ΌΦ(s²Ζ큂1@ΎVΗ KO^`Σ>,ΈdUΝRNΣΈεΝι'lΨΤΕ›Σ,ΝZήΎ††ξžƒRe@΄(€όΉ^‡,M‘ΘX‚ΔE;Έ₯ώ83Τsk”Ίγ’ϋ4KΩΧΐ„W-ρflD>z— _Ήγ»άΧ)ΰΩ4BŽγ8Η(‚™ίιŠ8=Η»Ρη¬NWΔω?NBΏIQnD§ϋ9ύ†υ"›&qΛ›ΣOΌύ§=$έi³ΌM6`ΑiE>oNο :qZ„‹7§Ÿψrύ"Ž“K³>oNω˜x+3W£S..ήJΒΗqšχysΚΗ-o½,ψoΨb\Ό9ŽγΈxλFάςΦϋΈε­$\Ό9Žγ΄.I―ΣzŠςΐ9ݏ‹·’pρζτ 3sΡ„ηΝr)Ε΄·švžΛi·Όu6γȚ₯œnΖS…”„‹7§_˜rK½zϋώ%uςΉ ψt§+Q2mΪ}lοC5K9݌[ήJΒ£M~a2³+LΔZητύm:ΨΨ=σz4Κ‹˜>\ΣωVGˆΓ–£ΔYV-c«‰Bk-Q―#¦νΩʁξQσcΫLL€;N₯…Ζ-o½‹·’pρζτ υΔΫTω΄MΚ½€ψΊΝύxJψΌΈ=4Ž Η<M²ύI4Ιςπ46Ι~ Η~&²β,ή l)¨Χΰ?PB;Π\iΪ“‰Φ§Ρcί„DΛQ‘ž_ή…¦G„²o ο{£,φΛ끛WΆ–‡²ιr7c"γa9ΝΈ’ψϋ₯"tέν?—Ѝ5[¨|€₯"*ΣzβΌ‘Ωσo€rͺ‘1d™ΪxdxίΨΨ6YΏ#½Ϋή»xλ]<Ϊ΄$zυfvœ,΅ΔΫšθKΐ/ќ‡Ÿ ΛE‡|Ӟ†¬sΟ~‰&Ύώ9pg²ί€Χ£αΫ=€+Βως8‰―· τ$$ψFοL²>ϋD4ΠΙhrοίΧίES,=ψJ‚ 0Έ6›hΘϊ@’ΐ8ψ6šͺθΰ+hθ΅›IΩ,*-p‹Ϋ\—V³Mu7Χw‡Χaύρ! •ίw!Ρ½fκψ€ώ&ͺζ‡6g―έ,βtYCΔ μg„ύAχ­Νˆ2•h©™’ΤΙΕ[οβ–·’pρζτ EσšΞG–΅Ρdέ?–QΊ–λ‘% ΰOΐ©Hœ| ¬» x3Sι|‘ΏEs>‚&θώ(πςΕΫlΰ4ΰE‘^„ΊνƒD`*°š­O3Η^ |=,Έ ΔοζΤdΡ™ ό=όAGγCΐΥηƒΐ%ο‚‚γufΝΊ ΨTΌ-BbdM“lKM*D Rΰ€Β„pŒΤΏ.LΩs€*>vŽθwΈ‰²{€{“u›œœŽϋΌυ2.ήJΒΕ›Σ/ΨycfύO€Ώ `†?’ΐ„S©Ÿ~ΰΪΜηϋψ3Ɓϋ‘IΉ!σωz4d΅€κI²χBιΌ‰ΊoŸd}š9φ-™Οˁrφ3–ίFΒπJ$οΫoDΦΐ«€χ‡†ευΘR׍Ψpη<ͺ‡M‡«‹;mΐ}ήzλΜdΫ>g’x΄©Σ/,GΓοΞ¬Ώ‰‡]Βς38^VެΛήCΩM-«ν»/²μ€―=&YŸf޽™jj΅ γΘ?ξ_8=YLΚŽqπd½±Ζ1;YήζΧ,ε΄o½YΧΤ,ε4[ޜ~aω|e9 »«5θδ'v^j5OΟ|> aευ<‚,x f˜<x*πFδhO(³$”?+ΩχΜ‰U½#€βναΟcΑ ₯™:XD΄0Ως0Ή4&i·l“4χ[6Iš .{Ž5T δ<ΏBΫΧz ΘρŽP L©_ΔqœYŠœψίΡιŠ8β`Oτή‚Dι=(jσ$jζ#q·(Yž‡DΤΒ°\«ŒSˆ–^δ+(ύŽΣ[l«ΛN qΛ›Σ/< Qή†¬LŽΣ,–‡μΙαUfΙ2 Wj•²€Ώi2`+oΦͺtV+ŸZΔ̊•Z·²iLR«\6Iš« &žΖd>ρc‰±σΟζt³s€iT|Ψ΄7±ίp]ΝRΞ„pρζτ Bι@~Ž‹7gb܎"‘_ <„"”ν΅3#«Βk8Y^…ΔΧhςy ‰΄ŒOΞέ&_ˆfϋπaΣή$υysZŒ‹7§_˜Μά¦­β°žΫ™‹ΟW„=pgΥ,ε8ωΨύ[Οκ–ήσy“ΔMDŸΰL“Ά“9Ξ**Ζ’Ο£δP€£ έ† ›zΐBoβ–·Ιo—£αlΰΡT6fEβ¦SΛS‘Š ±{ΠTHχ#QΆ<¬οΕμΞi#}Ц\Œ‹·"–‘ΉM—wΊ"NObC¦€²Νˊ₯~d-s£ϋΗΪΠ‡ˆmθaω!dK;¦&|­ckm΄];§ΆOš€Φ>[‡2nyλMάςV"EΡ¦v³d'Ύ^MτΟΚˈν΄‹Έ5ͺ&ήώΡ±u7+ȟΫΤqαv$XΆ§φhBκσΪ̌΅f-Hύ^'sœ9Δ„ΐ‹i<‰πμπΪΨ«ΰ{w’/Υ/βt!ny+‘"ρΦ iœˆYΆͺYΚqœ‰²Ν°5•ωΨRίΣ~eq@n$bνσv(ΈΛ>O'ϊ$§~Κ&lM|šΠ4qšmYηί†mmΊ.»ή&Œ7wΆό;νΐ-o%ββ­7°†Ϋύ §—e0έΦ…Χrΰ/‹Σ?Έε­DŠςΌΉxλ.άςζ8Žγτny+‘<ρ6 9”n¦7ύϋ·Ό5Ɓ%xςiΗqœNγ–·Ι{ΘΉΥ­ϋpρΦΗΗΡсŽγ8ݎ‰7·Ό•€‹·ήΐ†M]ΌΥΖzxž¨Χq§³ψ°i‰Έxλ Μςζ>o΅ρYΗqΊ6-o½[ήΓ¦P›ΣΡZ8Žγ8ny+‘’€θή)S³(Ή(©₯yXP³”γ8ŽS6ny+‘<ρV4»‚Σ9lš˜zσ.:…χm:Z ΗqΗ,o.ήJ /I―›v&ήξh-ΊŸ³o7uΊ"Žγ8ŽG›–ˆ‹·ήΐΕ[cόΈΣpœgΚ Υσ°:ƒ…[ήJΔΕ[oΰβΝqΚεςηλ΄Ή7ϋ ›ˆ~ς£–Συ³ΓϊΕ5–g…Οιr1ŸΞ;‚υzb°‘͏jσ‘Bό lΎSΠﴉψ›AœS5CΥζLέŽmηtΚΗ-o%ββ­7xDx¨f©Jζ’€΅OF‰kΗ)ζ7ΐz°OΙΩΎ=„Lh€Α ³8™Ψ0αQœ˜¨°γ₯"Δ„ΞX(»έΟ³Q0Ξ<$Ίζ‘ εη„ν Βςœ°ΟͺEZΩλ©82‘GΞΫ(ί^άιJ ny+o½A3–·]€“γ‰ ζωΐοJ¨—γτ Η_#Zs²V$Eύΐ$0Wζ,―ClmxΩς:$*Σεu™2k)ΖΪ’ΤBgC¬3‰Χ6oέB\7„D*H¨NCvσΒΊωθω5=,ΆΝλvŽ Η5KŸSny+o½A#–·€·/GΏα:ΰΫθtu©΅λ^ό+πMΰ'‹Σ[XΗθJΰyay  Ρ0D₯00a‚€ŒςS°ZΔΡ(²ζ­E–Ή1$DV‡rkΓηTP S)Ζ:Αpύ"₯s°°πηΧepΛ[‰Έxλ Š,oCΐΏόbω-p!0c ―ώΠιŠ8=‡=hRλΡ8Qttƒψp&ΗHΌνŽ‹·vΰ–·qρΦ:.ξN)αΨYΛΫ6ΐλΓΉvnΞΎ ,+αό½‚ηΓs&Š?hϊŸΒϋ­ΕΰΰχT‰δ‰·^žaα2ΰoΐ[;]‘³0ΌοŒDΪ«©ύί6Χg*°+ς™It–ž…όKΎš)? 8Κ2sί‚œˆS¦O :y§Qfi΄Zσ«qρζ4‹ωaωObCΤ+k–rZ…ώxto δ‰·nœaa=ψ‘©Δ!ί#Α3ŒΚΐγC©۟F"L&€6_‘ς†š|ωΪ,DBl~xϋgŽ=Έ½ Ύ«©o3”_C΅x›\[P~-ΥŽγ³€[mΓgoN³ψT>ύΟD’φ‰c£wy:Γ™$e ›NE½œΘκ²€θ3²ψkXχLΤh.ή‰¬0Vζ)τ|ΰOΐs€―Άnήό<μspDX~Kxίω9ΤΪΤCx+πF­ωπuΰΏΒφ‘Ž‘e`yΞr³d£ήfΫ‡H΄e…Ϋ4β5Θ²ψrfέ&δ7WT~ •bo Ί£θa· ωΧ­'ΏW»ψ•d栝υ5 Έž8Gie–g‚BVI€ϋ› Ύ‹γαΞΥύ‰7Ο—ΩμΉ4­f)§eΤ—Mp!ΰΏ‘Ψš|Y†Œ₯Θ τj$ ά Ό-Sf ίB"ξ£ΐƒΘA/4:9d\†,N)μχ~$:Žφ@Ξ§4yŒKΟ%ŸΏ‰ΒA–₯η31ΆFΏΗΚpŽασ8P_ ϊzΣ€7#ω^dυϊ$p.pNΑyή œ<8YάvŸ`½ΫΙ$ΊE~Ž.Η©Η;Π=Ud!vzŸ»Πoό¨NWd@ψ Ίή{uΊ"ƒΒΏ‘ ~ιφBνΏ‰†°BCh©…oiXŸr rφOΛ,M>ΟBbιψdέd‘KΕZVΌ5²Ÿεό) 4hτάYρΆj,NDΓ›χ―-8G-vBΏΗασH”ύ(βΦ"Α|ΨŽο8œŽξ₯3:\§<Φ ίΈΦLNλψΊήϋtΊ"ύΘԜu“6ύ ²½Ν3y#,Ωcݐω|=°#q˜ *'ί Ήύ*Y7όx\ϊ4²ί^θfΎrΗΘγFΰΰ]ΐΎΘϊψA”‡­¬‘1'ύ{Ρδξΐα(ha:²˜ύ υvήN΅5Ξqœb<2Ώ±Ω&κ%vZ‡ϋΌ•H«ΕΫεH€μ–Ÿ‰,GYfd>ε”Ισ=Ι‹Zi$’₯Φ~³Mδά‡‘k|Fή„D]3EΑmAΦΙ— ΘΟw λά^hθη’5Ξ‡§6ξσΦߘa SIŠo%jρvπ 4,z>πEd±Ϊ1Sξι™Ο!‹(ω܁zΔ'름ύRητ T:G6²ί_POμY“6l:¨3Ήτ;ξσΦ~|Ψ΄D\Όu?ήθ8Nω؜»σ:Z §,Όm?.ήJ€¬ι±jα‰d›ΓςΉω9%jξΥs9c)$Υ,ετ*ގΆ6-‘Nˆ7§9ΌΡ)ŸŸγ“ΩΧβ2ΰoh ΅~Εζ^^άΡZ8eαξ'νΗ-o%ββ­ϋ±όS.ήΚγμNWΐι8nyλoΌά~\Ό•H?ψΌ‡"ZώΪιŠ”„χ[ΓT”ΏdΖO-,Ω4/KQj˜Ο ‹Μr4Μ9ψηΈ©O£Ηώ4Š.₯Γω qVŽ €#€·ηέ ₯°ΉεIFΣΕνφΩ&9~Ίά͘ε­ΔΫτ;ά’¬»)¬» κ’:αβ­ύΈx+‘Ό‡ŠOoΞΩΦJn$> ΖΡtOχ’ΙΧε€π~έκπαpξ‡'°o»πFgς ίB‰—g—ϋΥΩη84γΗ3˜9ψ>ϊ‚ΔΞy(uΚ€+Π¬"OCsΩΦn<8 ‰£ΗοE³”ΌΈυiτΨ'’ Daύ'SfΌψŽSΒλnt /φ ηίφ9;Ωΰω5Ύ·`–·ΌaΣΛQ;ρPfύ“‰νW―)ΫwKΫαϋˆΣΆ‹s¨€­ΔΫΡφγβ­Ν|έDο,ρ³€α<λPΓΉΨ€ό¦‰cΝ Η›ΘδΚpΎ+&°oΩy['‹5j'ΆψΈƒΒ|τ;Ψ%qώ*•—<ΛΫ/2ΗΉƒΚDΙS€€Weφ»*³ί)Hμδk6Šr|vfŸΣ©όON€>Νϋ‡™2£©νŒΛuΞΨύ'χ&Ÿύ%πDΤΉΊ‡j«`·q8ϊN?ΛΩΦmβ­•–7ϋn[P;l ΞΗQΎ™³!ΤO€ ,CΌ₯sfΏ/=-<ΎS›/£kώΊNW€ιΤ°ιώΙyތ†*Ώ λž<=4–c¨Ηt+πφδ8ϋ ρ—ΞMΊ±ρyšœ}=ΨήΚμΆ[ΟςΩασ&4•ΐφΘ‚°,œγΰLbƒžηΐχB=ίέμΕ¨ƒχ'ΗOΠoχ $vnDB’ήϋΪΜηϋ¨΄ξŽ£!Ζm3εnΘ|ΎYαPΝ^θv•֏3Π<΅“©O3ΗΞ>0—ΫASβ— IDATεΤΧX†ώοW‡χSΠύb܈¬οφEΦ?ˆ¬έΚΚπžχ;5Λ{?‘‘؍h8ϊ;T^w[‘9‘ο ε/Bc!šύaϊ}ίCΗTΰίΓΉ¬“ό}d…Ν²΅ΓsΡ0ΉνoFΎΣ΅¨:ΏΙοy=±sΊ'ρΏϊΪ&Ύ‡ηBΰC‘~ι<ގΆ·Ό•H§ΔΫΙςΟΓϋŽΔα»Pού ΰNΰ§hκͺΗ’‘NφyBrœrΦ}=Δf’‡ΪgPƒ±=ΊΩ›ί£Ρ$Μn@“Λ―F½ρQφœσ|,ΤujˆZ‰,ΈΟΫΔΈ‰‡]ˆCA;5°ίΖΜηρ‚uΩ{(ku’Ϋw_␀½φ˜d}š9vž‹D-?=›‰ΰ_ΠύX4ηοI™ΓΒ1žƒΪ“k³Σ¬ ουςΌΝJ^EΏν!aΫoQηap4jΗ²—‘‘φ»xz%πŽdϋω¨γ1NΌxIέo#ΞAmΰcQ;{7p$ΩΨ½Ζ~yβ°™ο”G­οy#[ vξχα΅|ίγΰΏP»½>Y?Qρ6ψΧpn§9\Ό•H7ˆ·λΡ υ7δ―3ެkΧ"gηΓQ―λ(’_Š §ύΓ»9Z§λ^ƒDΰϋΒηιΐΦhΞ΅3’r/@ΦΎcΠ5Ή‰½o ‡ί ˆΓFΦp¦η9+”$ΥCP“Ε{Œ“γ,δηuz~ωwνXωžžω|ςKΝ)ϋτ»YB=Zyμ δηjϊ²F?Y9^֟Š Ο@V퓁ƒ©΄„tcα}~2[£kj―_”{9² ½ §žΦοŽUφΌϋ„υΦ‘}VRώ˜°|.jKcώΘ{Η‡εW#²?ϊ_,D,ΩοΆ ‰§ΛΒ:³˜5ϋς¨υ=Eg€ ΆψiΘΧ²Ωο1έƒ»QωœiΆόHτϊ[¨ΗετNπM·ΰβ­D:•*$½©ζ"‹hζγΘum£Ί'hBΝD\jν²uW#±gΈυόrchΘ8œhŽΥU[#`ϋ‰ΚΉZ[}έlڞυ5KU³vx:²<·°N½Δ\$$†ˆΓŒC¨ρί€†ηS†ιρHp¬ εφDV™32姆㏠AΈ ω°+ϊΏ?³ΟΜpž5ΐGΡπβ✍~³L.…I+½ Y^vEψ’‡Ϊ½ΘχmΰK‘όBtνDC·Σύyτ΅Ό5ΒQHΤnŸ³-Œυ ’…ιdΆ!λ}’r&’ξA>œυζ`} ±έόVx₯<1gŸΉ¨x<|„(΄šωNyΤϊž΅hφ{όYν ²Ν4CΕŠ™κuϊΫsγ ΄Ί`?'o% ρ6“(Ž>ˆ.YŽ#:ε~ ±}ΆΫ©YΏRρfλώ'Y— ­Ν9λΖsΚ‚―,wfΞΣΚ`‡<šΙR=υΤOBΠw;θOΨρDΩΙΊ-εY3g£ψ<ͺTyV™ΘΊ—rdx#«ί§’mΣ‘%Α¬ k‰σi(ςω4oυy"π¨δ{ #_£iT‹ΙiȏtV#qωIτπΉ:96θΑΈ({5ͺ3©μ0’FbμyΘ‚ςFyO(³$”O―Η™4Ηtΰ1DίΣE‘.ΦiΊ,S~>ςΉ[>ΟEΒx:V>)S~[δϋ8?” ϋ΅ΔΫΓTŠύ'Μ”Ω σMΎDόΦΐgΓφμ}œZdν^ΟΆάP°\DzŒσ©Οχf>gΏ[J³ί)FΏg–fΏΗ}Η©ΥŽξ€¬z'‘ ¨Ύ_A©²~¬NcΨ5wρVoϋ{47”1ŸΆλˆfq3±£›i’Ϋnt]ž KΌ-Rξ™s/O–/Dώp FώE¨Χ›žg")Jš‘‘ήΛ£‘?Ιλ‰υΊkœOρuξ7ΞAί'bdΰ:’Sυ*{γkΒϋ “u«Πt §YHΜΜ‘ΊΧώ„°~ax¬\ ŸW™ΩηX43έ³“mS=43 ε§ΫŠjΏ›™™ΟO@bͺΘΚ΅…κθΑ£‘Μ‹fΗϋ‰žλΡu½;ΌV!Λάχ¨Ό– ‡ό’λ90ύFΜ)3ω<@΅ ž:y&(mΏΌγΟ’Ψ’™M₯1©oYρ Ί/o!>8W’υz*;VΖr[0X³n.¨Ο d1[…Δ!ΣΫΠ½>‰‹·λΒΉ§!Kδ5L<ΝΟνΐwQυAδφX ΈΉ ₯jx=rE9 ‰ρΗ„cό'jί‘•ί©‹xή), 6ΏUίΓΔΫV¨#1©τ:”JθΣTGuw3sΠΠσφHτŽ φh Ίoμ?ή)|Ψ΄D:)ή6‘žTοFΞΉOA½’/’ΐT ΅uΙqu·dΦA₯5ξΏΠCn·pžŸ†υχ#+ίϋΠpγsΡCΰ7hΘ`SΑyΚ"{lœ†S=Θ'ζΰο%ΧΗi-ΦΨ±‰ΒFY†MεaͺS‡ΤbE(oVIˆCybo%r“XD˜₯δ(z°¬€8\ki.'εf$>ςX…ΔΫ|&žΈϋVδkz&ŠΖέ%IΎ¨Ζ>΅8]Χώ‰Œλ©Μ/XΔ ¨ƒό:ΤvnDmΕšsχhυwΚγkαΨΟAώ₯­j­ψf5O­΄#¨γr'κ΄€‚t1ˆ*E>θœή·–²ΚXKep„u*RΜmχԁKΧ- λζ‡u[Q)Ψκaυ^IlkFΠυ<r“ρϋ°i‰δυΖωM½‰§³|M|‰΅£PC³ Ξ QΆϋΙά„S‘ΏΛΟDV›tŸ•‘ό2ςΉ iοH΅/ŒγΤγOΘΒΎ/ƒγj0(,AΎΤύΔZδph Q{=‡˜³―Vͺ’W‘ηKYΌ΅ϋgαΙ‘[ŽOLίύΨο&'ήLΜGχ>b˜}Κ§QΟo%Ί©…Χtͺ§Gšό‰ςXE΅£ώΤL}RΖ¨o³(J\M΅x›M~¦{+Ÿu*ŸKe―ΈΡ$¦Ž“ΚˆS§»°NΰνhTΗάF.3Ώ€26ƒΚA6°Εό`YTϊί₯–iΘR›Q'Φ¬v£‘£DΛέΚ°ΞΥΫάΖχRΩζ1΅ί Bζ gΖσΘw[h%>lZ"yΥΜΛ΅’t:ν#ODO#б9e¦£a<6#q“:φΪ «‰ ‰™ω‡³Ϋί‘”1+δ'μ܈"…&λΜZW”Ώni؞έ'―Α²sGΉ·ξΟ)γ8υ°a°95K9½ˆ΅‘η£œy/AQΚϋ’ΞμQ(-JΏω oBmxڎ·kTΒΕ[‰δ]TsΤ-[•;a7ΐ{POπuΔ)V£\[O’Ρv oiOp$yeΕΫ8ωω›ŠΨB~•"Φ£)kŜτΕΎ“γLuθ_R£Δiη!ΊΠβaαurG9—b §>Ν€ΉrZ€O&Ϋ]|ž8O+Θτ~ VάBœπjΤωγLŒί {ιŸ:]§εΌύΆEsO/BνηΔ6u3jg‘±)ΐzΛ‘ϊϊ’Οsj8Οd’;δ Ίε­»0σ½5P Ια(*λ#ΘβΤSΌ7Ό?©½ΥtœžΗξ±~2s"υ¬@fΫεΤ»΅΅‡‘ ΎΫπατfρaΣqρΦύΤΊnCΎgB©ΏD–·P:„?’δ½nsœϊΈxλ_šΒ» ΝΈ°=Jr#ς‡«•Η©ΖΕ[‰Έxλ~ΉΦ£όOŒςα™5ξΙ¨7Ή[‰υsœ~ΑΕ[2«•¨ύά8Ήε5κνςvρV"΅lNΑvNh>Ÿ˜kΜ2Ο[.1ΛΏ˜…haΠΖmαΩ–mΙC#4‘zš$ΛβΥΙ³eGˆΧ€™²Ω$–5«Y­|=)EΦΈΣQΥ“inΖΗTzYΌY˜Fh[nν ΅©–ζ"lqx·v6[ΦΪΪt†4Ώ#ΔΤPΩΎYΫΆ8s†%iN7§‰n­MNΫΨ4Ρ­EO¦ΙrΗBω΄iέ`βΞσEQρN1ž€·Dj‰·ΣPζςΥθF[…nΒ±°<^#Ιφ΄Μ&$<,ΗXΡϋβδs»’RΧ/ulέdωυ(c™I§Ÿ°Ž_ΡΓ51#ύjb[hΩκW§!ZCl)Ь-4Qebh>‹‹’uΦQ]LcΦ]ήη…Uš}Ώ[(šάΎSXΎ4ΛΉΦOݎΟmZ"΅Δ›Ml Θvm¨Ο*bBλeYγg=±abΟΚ,TΦϋZΫΐΎP@1νAZΣ°†°ή,T'rΜ&bl¦l*(Σ„‹Γ+;)Ίγ8­%½Ο­R½€Y¨YI¬έ3+—΅Φn¦V/³ŽY›i–3k[Sk–΅£i~G¨΄δ₯ν¦΅ƒi»fΦΐΤR˜ΆΛΦ&§ν¦‰ΫΤϊ—&Η΅}6|6•)“<₯PϋπaΣ©%ή– PίyΙk!Ί9η‘›pAX—–YLΌΙ¬gjωΕς–‡“ε2ηYKΙK<Ϋ­ΌεH›θDَγ4†=lΆCBgjη'Λ–­ή>Ϋ4Ds‰m€e²·ΆqQ(™2A5LN΄NηHx7‹ήϊ°οF*³ο[ΦX7πP§+Α:Ι'’vΤ­@νΓΕ[‰4’€Χ†CΞΰ7€γ΄‡ΤηΝάBœήΖD±ύ–.ήΪ‡?»JΔ£M»»άWΓqΚ₯—œΪxΆφγ %ββ­ϋ±‰ίŽS..ήϊoνΗJΔΕ[χγ¦gΗi.ήϊoνǟ]%’wQΧ…w @θ%·(ϊΘκ>‹θ\< 9[tBbNΈωay>•Q ؐζ]ΛΛ5T΄έ"Ένyω\FΩόo~8NωL ―-¨θ¦ €2˜M 8[€ΪΖE™uι»₯sJΧYgšΏΝ‚) FBl+ΣΆ.Νλf£dΣhΨτii―i”mή9\Ό΅v•H­€…go OovσΨΝgβΕnb‹2“w,»±£Ά,Tί„Ψ|bτ– EIω~œj„h θ¦\NŽΣoΨ}6•Ψ.A₯ΐ°Ά(±l«Ά§i9ŠφŸJ₯ *Z^He.MΫήhοFJŽΧν94]Ό΅o%RKΌmA ‡eβΆ›r«6Τk’X(Ύ%^Ό5軌Γ•ΔœpcayŒJΛ™}η4ΧPj™³νiώ’Vn·\F?Δν8Nk0ρ6ŽΪλ,Ν"ζλva –~d4Όg>gί‡“e[o3€νcš«ΝrΉAΌviΆ4G›₯T˜.Νg‰Œ‘²΄άniΎΈ΄=ΝζιtρΦ>\Ό•H-ρv=π”°l7§έLyS€Ψj7–έΔvΣΥ:†έ¬–Υά’υކεΥΔ†Γ>Ϋμι ύΖbΰ…ΐ—ρ$½ŽS&&F¨μ ζ%ŽMEE3Ϋmκ©t{*`έnΓ»–seζ5’YΙYoC›­ΐςΥAχζΠ| p1.ήΪ‰G›–H#yή ςζμΆ$ŒύŒυ†ab7ΐӀ݁o΄¬FŽΣŸ+¬%[v«0qκγ>oνΗ£MK€QρζtŽfMΟ³P/σ­ΐΓώ·Ώo}Υ§o0ρΆ©f)§WqρoΣy|Ψ΄D\Όu?ή{'―!Gί| XVNΥ§oπ4!ύ‹·φγβ­D\Όu?φ0Ι›aa*Š ~ pς\|8Έ’φυ²§—qρΦίΈxk?.ήJΔΕ[χ“wl,lovλn.ΞV΄­vŽΣ€βm1 °Iθν΅(σy~²~afέ06‘(ZΗi%EχΣξθ~E‹ΡπΩ^–rc,σNφ³|‘–ς£θέržΥ{·4KΎCύ”›n²<| Σ•θή·+ω<ο ονξΈ S ΦoB Μ Ί3ϊκΝ¨w|Qϋ\†Ο[3λ?ήOοφœD[ΕS€?ΤΨΎ…κžΝT’Ι:Λx(ŸŠ·ΔΔΔY6Qνo7όΕfτ`Λή¬S€Ÿ†εlx5°_¦ό|b/>Kš@`ΰyHΜ_Q°γ ©Λςn¦ΙqM@Ϊ½Ψhω< Y½ς[ΠPtžΕέ:•–8=yΒ¬wιτVY˞Νβ“ΫΤZfτ‘δJΆnCΏΡε¨ν,ƒP‡Θr,-ι\IΡXτz’ε₯–xϋ6π ΰ -W=ΞnΡq―NΦݎ,SΗjΡy&ƒ9P―@ ίΦασΰΰW9ϋLCΓ©f ³ΖΤzεΩ †ΐ·Pƒ·5€Φ0Ž“‚›‘ΰZMl$WRœHxέΌ2†~›ΌLV”>XόoŽΊίΊ=iΣ>BLύ\ΰί€ο—pžΣ‰Β €φ₯rήn§¦R(qΥ–¬Z,E?βEΐ½α<‘α(ΰ·H <όΨ-sœKΟeŽϋiΰd-»ψ Ρ²xAψ>ιk/δτgN=ί††R»}P}„Σaΐ#Αeίεΰν ¦yϊ9θ\ήιŠ8Žγt1„:ΨιspqΪ±V±'•Ο'{½½ΕηqrX†.φξuΚMDΌm^„Υcxz[R敨7°°?*ΧS)πςΔΫΪ°ο4ΰρHό©λ§3υωpIN=FίΏΔΠ^¨.Ι¬ίέ 'ήλΠυ:Œβ!ρ~γYθ»»Iήq'Ÿ©ΘO9+¨Ζχ·ψ\ίΗΝ ΕΥΐ.->—“ΑڟT§άDΔΫU™u§ ₯"ζ ‘Ϋ}’uyβ퇙ύ.Ύ˜©kVΌ-%ϊΌ₯쎾5κΥ.φ@uΉ­`{‘5ξ―HάmΫ†:v’CΡχύŸΧΓq§[y#ωΒm eξΩ’σ<™jΡ–Ύώ»EηxŠΒ¦Ν‘4©t&RφϊWΰ™u‡Φ9η ™ΟΧ;ΗᏆJD‹ΪΪ™Ϊά’ωΌœϊΡ4³ΙŸ ym²½Σ˜Οa^’^Π5ZЦΔΪύFw#«ζ‡‘eσΐ’λΨIκ]ΗqœAf+jgO>Ϋ’s}ˆΪ£>ΗP^Δ@Q$ήΜΙ5+ή>/Œ’πβΡŸνοaϋ~΄Ζͺ²κ”Χ!λa–}B}ώΦ‚σN–‰L1bΦΈ₯ԏξu–_AQŽγ8Nδΰυ –ύŠΨ_5σLA#=πδηή Ωz–z–·EΫ'ΓΐGQ>΅£ΣПdqFσt‚,`Ÿ¦8E3,CΓ‡»’^Θ4τG}qΘΦ8%•-Κ•ΦN&;?\Ώ‡f/C“'ίtΗ‰LE£eΞ*ρ(ΰ]<ΧΡ4—<ύέθYμLf}ήZΑ$ ―EσpžGo‘οΦ ΐ=ΐ†νk«Σ4g#Ά?#kΝcPJ’[Π8Ό1=|>―ηl>Ή―γ8ŽΣ,― yη·11QuF“εηΰξRxŠ ωb½‚M²”ΖM«νβ(”C͜,_ό¦sΥ©b.1ΜΪqΗqα4Š£>k½ž:s-Ÿΐy~1±―ε@σ ύΘ%Θgj‡πy pbηͺS…;δ;Žγ8Νς%šΊ» ψγΞυΡ μσ± μγΤαΉ”“΅Ύ-oέΞTτ[tƒ]72MqφΚΧΓq§Ϋ8žΖ-aΡVa:pcηϊξΟγΤα@tίιŠ8€„Ϋ8;žDΧζήNWΔq§Λ˜Š|»T™δΉ‘v‚^{­Αƒ&MΡPάhxŸή§’‰ΒAQš9˜–‡(=…Ν—f‹ήν˜6ρ=hΒtK2?©—M¨N8*^V£τ61Ί½Ϋ„κλ’ετέΚnHޱυ:V%οέΔFt­fΠΡ£ΝbΓʞ€Χi; vjœΌ±qj³΅W ΒkQ²l―ωΘ-'»ΞΚΟ@S+Β{Ίœ}·ε‡Ϋπύz‰-ΐΙΐ¨N••r7“Ÿ&λWΐ·€—Χ)χb*0g‚eB>8΅ιBΦ†Χwk‘¨]–ΗΒkMΨΎ2¬_φ±ύA’v±qš^‹“ekΌζ„ς‹’m&œηၠY‘†{„ΑπΡtΚη½h¦’ZlAχΌaA₯|4ΩfΒzΫ6‘6Ε#F›g;•£DWŠZΫ6 ŽλΤή[ϊ'»W¬SlfλH[ηΪ:άΦ!ŸΚXΗέ:φι±;ΙιԞM`P9‡ΪΎά/₯5SWm28,,Ψ~;Κ£š7³‘ΣEβν\δG”Ξj`A i£•6DibΦ,ˆ–.ˆ0¨μΕ¦ _Ϊ`₯Πκ s‰ΦΎ!bc“mt²οΩu3sφCχq6π–NW’ ™‡ώ3«ˆV`Η™ ‹g#j›Q§>£¨mEνφΚ°<ήGΓΊ‘δsΊm]ϋHdnUη}1šΓy7dΡΩ­τoΨ{lάJώL KΡ ­β?€l{>π£žk`©5ΩBt#Χ(ΣΟΜEβn³‘8˜–η‘k4‰½Eay6jL!βUH¬BΦ’…nuXΆΖΛΆ ­zioά©dq8|V²ŽΣ Π}zπΊœν©kGκR•χ=TΊ{˜ΥΚ°Ž'T[Rw«“ {₯ξ*Pι‚•θ‘pœ•T[gΨ:Θf΄Ž΄u΄³n&fL;ρΓ™cv‚ΠT€w£d³N5' ΓLΚ`ͺηŸ ΣΡ”ŒϋeΦ_ Ό¨…ηhj₯ŸXYcΫ °:ΌκtEœšx*§Υlή‹†v²)χ³κ<žΜΌ>KPτιS’uŸ€΅Β τ[Όεq3ΡZΰί[|ž"ΫΫ Kγ6™ΟΦaJG ­Σ’vpΜOb''umHG­“Ž4¦£ˆ-ΗθN―³Έχ‘pZ‡‰7Nθμ!9K§’ΤHΣ©ιrκ’”Š€'#Q5‚’τO RΘ€%uJ­­©ΘΙφόψ1…Σ‡h>HΑόΒΣαρΕ9λΆFΎv&Τ†ςΦAk˜ώ.f©N―½YΐΣk} 93>ΉxsϊΧtΊN_±UxχAο0HψΠό΄Wy,BΎΤ­Ζ¬PS‘܌ά^Dœ§<υgC’;+ΚRW€fX‰ζI%)^žωlώυ©ƒΉ0€ξ ©λ‚Ή-€. ©ΫƒΉ*€>σΆΟ΄dϋDƒκξ~’„?Ίγ8N3Έε­χ$ΛΫνΐ2dIΣl₯b"υƒLύ0MΜ@βΚ„F”“ŠšT¬€iΒR_Ο¬ΏfV LgbA$«©N“·Ό‚|qΦ-€Χ-ύ]ςŸωΣΪ>―FΓΎΈxsΗ©Δ,o.ήz‡A²ΌνςΆ]ΣιŠŠ·EDΏ·4x' ΐ™~Ώ¬0λ—ϋo3Ρ9\«`ϋ"ρVν>tΗ)βRvJŸΛ™υœξc,oοt%j0\°μ4?T₯/σι–œ~ΰεΘιvv½‚~όυΥι.>έιJt³τKΟΨ‚,S¨=“@―3Ψ™ξsΚwΚ‘PΌΉεΝι>ަ4ΊŒUΥe8λ:½=ό½sΫ[l":•oSΆWΩ}Η‰:σ;½…‰·ͺaSoœœ~ Vާ©D¦4κ4”ωΉδσR$?ƒΜύΛΡ0ηLΰσ(΄ϋ.4ϋ™ύΎ\„BοF“<ΧΊΏ¦§C‚σΟΐλsŽ;‘ϊ4zμO£isξ>HτOΉ8ΝκaJο<ωΪX"ι_»„}ΆIŽŸ.χfqσ€Ο½Ε δz{txwΛΫ``3Uω°©Σ—MN?„&J~ z_BuΦο,Η‘0φg 1s6π}$ΚAbη<4t‘ςΰ `Gΰih(χ­5ΞspGCσi~xq κΣθ±OD“I?xšΐϊ¨°ν΅h›Ο A7ωμ]\ μ‰œC ?;Ω4N/bΎnnέθ-ŠΪ~Β:Ÿή± LΌωτ|N_r ² 홬›\ |Ν{xπU*{εy–·_dŽ}πγδσ–ώͺΜ~Weφ;‰ΌsΝF7ε³3ϋœŽΰdκΣΜ±˜)s1πΕδsΦηmwtχ&Ÿύ%πDΰΰͺ­‚½ΐ»Ρχ|§+β4Εrτ»εΝίΩ/Ό}ΗK:]§-Ή|IDATƒ~ο‹³ϊΩΌμ yΓ%?ώ‚ώˆN₯ώά‹Χf>ί\—|GCŒΫfΚݐω|=²Β- fΧ6φBfπ+¨ζφIΦ§™cg§ΕYŽ|‹X|Έψ)Ηί ηΈY―BΦΎCΓςz$’{³ΌΉu£·Λ›ωτ6œετ&ξσζτ5yi.Gβa—°όL4yu=6f>¬Λή;yCΆEΨΎϋ‡$ν΅Η$λΣΜ±σœΊk΅ γhXτ_8=ΈΚlο‡…c\<ύ67Φ8f7b>o>lΪ[ ‚Ο›u,\Ό …>oύό'w‡K€ίS™Sθ,dIΊ Yƒ@ώ]‘αΌVστΜ烐_ZΦκ²Žnjq=Zyμ δ§]ψCx‰,š/EΧΤπzp4šη`ΰΞIΦ£έΈε­7qΛ›ΣoX»κ?νβΝιήW°ώ\IΉπΩ°Ό3刷]†s>E{ωL­ eί…ζυ»5ΖOG7ιdR˜΄ςΨːπέM˜Ό#πBΘp/ς}ΫψR(Ώ‰΅QOρ`”1½ΧpΛ[o2–7oή± ΜβΆ:»‘ŸδŽςΡ2ͺœ>[Θ4Μ΅¨·tπ©εΟ@"ηd”dωΝ}¬uiΥ±ΟF‘ΊFΘσ€§oDQoχ„2KBω³’}ϜXΥ»·Όυ&ƒ`yσaΣΑΒ|έͺΔ›γ8“g)παNWΒi†όϋ.νtEœ¦ΈύnϋwΊ"%ς(τ{ΝΑ™―FΏχΧ²<`Αq§·Όυ&ƒ`ysŸ·Α’pΨΤΕ›ΣŽR‚dη:ΞDh—ΟΫM¨W}AΙη)‹VΦΏΗŸ76, ‡M]Ό9ύΐ©(P SΓ%‡οθΠΉΦSΛςv9qΊ°q4»Δ}Δt4νβœpώlΎV1x;Š*E›O’‘»nd,on LΌ­ΙnθηŠ38L©_Δq¦‘ΉMΗ‘¨™l^‡£άvK<Ο“PΊ[&QBιaΆE3{<.ΩΆEοςφ]Πβs·βZ ‚εm3©3Β+›σΡι/|ΨΤιkμ!»f)ΗiŒFζ6]’‹ηG„uS‰Σ”½ψΚ=ΈE~‡8±8(2y-p~²Ξ†/BΡ»χ…c\„¦|9ζŸ–χ$Z_›ΤγίΓ±Φ#h>άTŒΩy.>κχη°νό€μ9h֍™hάSΘO΅sZXŸ­kΩΧ"eΔψΠι Qhysœ~ΰ*ΤΘιŠ8}ΝαzGΞ66}(YwQ@]Φύ ΈΝCϋΰα°ύvβ°^žŸ—­Ϋ„K!9φB™ ΓΆq$x~^&"Ο Ϋ6„σΫ1GΒwKΟ³Ys–…uΫ£‘ΰqΰΧΧ'[Χ•aŸU9u-ϋZ€ό(lϋΧ:υξuμ·ί ηš‚R έCό_<­Εηθ€οg·ϋ~ ΥοΈNWΔqΚΰχθώΤNWΔι v@§< SκσΆ YAR·ΓB9›}$˜ŽNΚΆΥ,Γa_Π²γH E>o{²/ λ¦!΅qΰ ™σl$No6M}fυ<=ηϋ§Ψ1Φϋ!!vMN]ΛΎΖχΓΆ#λΤ»Χω;ϊž»dΦ§ΝΝθω7ΰhΦ“‰πβδ˜W «η£kξΡ8~ΆνƒzεΫί^"’Όωb³€sβš#Β*-s>π‘Μλ›™ςχe>›…ΰΩ œ’°‚θ@oυhη΅°ί†ŽΩΛΤϋ>ŒΙ.θzί֟I₯°©ηΉΝΦ0hιšNc~Œχ‡ςιL3Φ‘ΈΊΖχ«ηΣiτ³ί©aέ£MΎδŒNWΐι+&›ηm’Έxp7π’ΙV*ƒ5ζs3λ˜,ί |"ω|ΥNξγ™Οχ?DCOGΒλύh.Ϋνѐηmh­Ϊq- ϋ½ϊέίΘsš…αNτ{Ωβ$’uψdqΪΦνŒ~χC‘Eκf`/4§ρf’ΰ2β!ΰ·Θβyϊo<1μ“FΑfcυΈΗlΎΗ aύςΒ=ςΕ|3uΜγeHY΄_–ίΥ@λ]Ϋԟφ˜PΟ;©ώοŠ7Ηq§šMθ‘“΅ ε,dΩ3Ωrδ\±wώ²P–ŸWΊΞ|kώž¬;!9ή-ΘΜ| Ύ”lϋ5prγ(*΄θ<ΖvȐϊm’ΪΊΠH]Ϋq-Œ‰.MEVΣƒκμ"~‰Ύg֏­ΦΣ¬`·†ΟϊFžE vIiďΡΞωρdΏ<ΛΫd|ήϊΡο4εΊP&λξΰΓ¦Žγ89ΨΠΫD¬o·"s x6π–ΦTλψz#t Ρͺv²rύ YΫE€%4f1{Yή‰V‘Μmΐgh<΄ηZΝψΎn’ί†Δΐ€έJͺW«iΤ'3ŞυfkΦ72Λdύ[E?ϊ¦Ψ=½6³ή‡MΗqrX‡Ξ™TY<·Αύ/ ―”―g>ο“³_ήΊ“Β+e-9hΝΘΟθSΫ‹Ξ“²ψpx5sŒΌΊ–}- ΪEω§’hΔ€Σ”\ƒ«Τ–λ&ρΙL9hA2Ÿͺ¬oδŠΜ>χΦ8žω1NA~ŒίΆ>Ά›΅z<σ`aƒun„‡‰Φ΅‰Φ±­ς;­wm³~§).ޜΎζΤcωj§+βτ νšίΤiEΙΊ·^ƒΪ‰έ“2—"Ρ֌%±hδΏ9 ΆCP ŠqNxoΦ72₯Q?ΖΡ΅·mi|xΊΘ§³QzΩο4ΕΕ›Σ·Μ@σšnΒΕ›Σ:\Όυι°i‘•νδί”gικ ›nMΞΓενϋYXΎ EθΏω€…†ΰ<ψOΰ Ž²DMCCρΧ#/SDω^Ž΅‹1σ#Ϋ), ±4Έ£uœ EuœΜ΅ΝββΝι[κ •8ΞDpρΦ{˜˜9₯Θ0+Ϋz4lφ*­l ‘Z$δV ‘ΈMt7 ›Ž£ου ψ< tH99ΝΏY„6’ΔΤυ|#͏ρLδΗΈ5ςc̍Ώω–= ·%(ΚσθΗ6ΎŽύδΣ ΝMΦh'C­:NτΪf±t•xσ ½^gk]UΛΑqšεF`_`°μt?ˆ6εeKXwJѐςD”η+Λ(ϊΚ&{έε η²±––γςœς―J>/ ϊZέCτΏ2‹’;η…Ω΄°ίΘ’boN&F.:ύΗ τ?ΫDεpΛ›Σϋψμ NΈε­·˜CυnΥΞσ)#KάlΤ ά*Ό?{ΑΘ’’ΗΥδ‹·’€?R-ή’œ_ylI–'mκτ…C¦ΰβΝι}|ΨΤ)ƒf#ϊœΞ² ΄)Θ2f™πW’α­σrφΉ8ΡJvNω{¨ #ΙζEsή†œκ͚m+©Œxφζ`PSΌ9N―³7j΄oξtEœΎb)ϊ_=«Σqbϊ½Φ…εcs~šhψjd9›hc·p:ϊ>gtΈNΉμJqBj·Ό9=ΟκU?ΠιŠ8}E7 ›.B Hη}Ÿ‡χ…(ͺr>jΛΝ 4 υΪ‡P±}§„cΪ±§$ϋZ²SΛm—fΤO-Fλ‰V ³ £Δ|XλˆƒΝTζΜZIL­L›ΒΉŒβpηjbβδ(q°1LΜΆ.ΌΎ^{!Ηυγ‘γψΉΐΗPςΤ/’9*{nψo:εγΓ¦N_s7­wΛH…8’y #’]?‚ΫiH ΝGΒhnψf±kfθs=ΡΧLΨNcΎny›sPj˜ΕοΆuˆ·!$ΞΎ„¦ŒΊ΅Ω飊˜\‚‚ Ύ‰ΔΑDtπJ4ΣΝhf‡%θaύPζldρ»Mΰ²Οo’j1ppƒϋ΄›t¨=ˆ&L ϊYBet² .]sΒΛz«°iΡ†‰Σ£ 笳hoσΥ΄Hm{_œωœϊ`Ϊ»E|O#бFgΚ ^rρζτ:ζ0ݎ^Ÿ38X―άgξθ μΑ^―˜\ <ˆ¦Μϊ)° ψuηΪ ‹}#ήg§/ Η&ΰ Dρφ!ΰGΘκφAδWω.ΰ‚ΞoŠŸ£Ή;ν³₯ˆ±2Τ‘Œ€ιb ¨ 8IDΰ“4`% 0Ι―”­Ό‰Ύ±πZ‹αhX^MœΆl akΓφ¬@λDbwϋ-μέ‘ύ^φ>ωqΎ‡(v«δ8½Œ5D#5K9NsΨƒ/oZ₯Aez¨ΜEžYΔT(3Γv ΓΊyα5“8sΑ,β0Ρ*τEήuTΞ:L΄ΚŒ„ε5‘ΜΊ°DρV/Πγ'ΐ_PΒί§άοΌ Mt5hW"Qv?Κ+7‡όΙΗoO–oBσ₯–Χ#k^-¬cqΨ§I[]œŠΒ48ž&Έμ7_–ϋ‘ƒΎ‰h•¬7TΎ7oΉΈxszoNlή?Kœƒ2υχ1?•ΤΧ'ϊ1Ώ–Τί(υ²‘€Τo(F2§ηΤw)υC&> Νz’ΣL%ZR¬§oΞ΄‡?D|ˆš°²©YYRΛK72Jυ†M/Žv ΛG;-hP9¨1-Yϋ=ω‹,i‡}ΖφEQ­΅8,Τϋ:ΰ9aίλμ½aξ΅hεnΔξυ\Χ oN―γβΝ)³Ό­!Ν$>8{)qm«X‰ΓͺπZO΅•ΜξhX+(kΓFσ0΄ΙΰgΞg‘λlb,{s@…~§Τͺžx; YRλ’ε΅DΆ!μ“Z»‘(2τ 4–ο\$ΠvCVՁ‰βm)πFΔπp π8’xΫ ‘ ζχφ@kPΒίw‘λϊݟŽ~Λ³Γ1"±φ ϊέF~Xΰβm0°6ΘΕ›Σ—\Š’sήU― γ4‰΄ΥΙ::ΰCAέΔ(ρYΦhrγο%ΛgΆ}ωύ‰Ωo‘vΖX…†L߈Dτ=H”- ΫΟ@’μd$*GPTΌqV²|fƒu6\ΌΥΖά£D­“dΦQͺU’[D6TwžŠ:QΩΞT£ΈεΝιk>Ρι 8}‰ •YΚιZ™ΪeΚηv|ΑφΏGΤ9ΖΒ« LΌ½₯!1ΏH L‡–RΝ¬fmM}1'‹YœΝrlVkK©±ˆ(˜Μ3»O3‚¬Ϋ1Kx‘EάήΝς–ϋ\Ό9ŽγTc–·n.t"χ…χν;Z‹φ`σΒ«Lj A³(AΎ¨JΣ•΄E+‰ΣΤ™°5qj’5―l*\-(M±’ Κ e…²C5“οζ0#o₯‹7gΠY@eΦν?£ό”yθ†χ΄ƒƒ[ήz‹{Γϋv­E{0ρφ9ΰϋDζZ3a& ΜJ•,6qaΎœS“cM4HΗ¬zfQ2λŸ‰ΐa’Έ2‹”Y ²"ΛcΊOVu;Ω(ο’hοΩ(οί $+ž?.ޜ~ΐ˜­¨œ“n+”ΑόήLωo£(―­¨Ύώ…jρφƒ°ή •Δ Ηί„¦ΣIyπHΤH†}V£^έ_iέp„Σv"ζ)3¬wΌ–ψΠJŽ©_LΪ›N­ i€C¬ο€y―¬‡• SΣDͺVλρΫƒΡ\6c»μƒ2Ρ¬*Ω©z² i ”ne,o64όW\Q&y'„ιΥζρΜ³r9•¬―FόfΟGΏχ ’ΰβΝι}v@Ρ]―,Ψ~ Υβm1Χ1σφ bΔYŠυx¬7΄u²-ΟαΰŸ κs0ΥΩάƒ"Ψ6”ΦΎžκάOοA‚#už΅‡τE9ία)¨Α΅Ί=”·wӜm;1ΦsΥ“…Ώ g¨NΪω”Ύ!εύΐža9›Ιύ$*“Ÿ‚±>‘ψK…S^ώ­‡υ)Φƒχ(ζH6‹½YF,©ͺulΜ 2Š~ϋ5TgΑ_‡~“4™―ω/- 2ρ―ύ~iͺD‡s›οZ?…R7Ξ€…μΔλN{Ω€Ϊ±!\Ό9}ΖZδ΄ϋj\9ιVPmEx-j”VИpyVxŸ‹σ‰y©nΞ)M$Zl’ds¦]H~Vm{ε‘ηοp$πδ‚ςWR-ή>\’\U)KύP²δ§ΦΛ~ŠœKΉ ΨΏΰψyείΦηρ=ͺΕΫσk”Ο{XoGρπYήυό;ϊ­‡ΣFΰiaΩ¬U©XN}R™4©nšb#΅^₯ΙxΣΔ»i4ZκO”Ξ iu΄Ί˜uΟ¬yYοΤ9<;£ 쬏R69―{έ-ŽΖQ²ά~Η£M‡Βt!.ޜ^gε`j†¬8h3wΧ›Φδ³uΆg9€ψ΅¦=PσΔαϋΠ°lj…²ύσ,‡Χ"`t{ΰO#ί!hΞΕ<ŠΔΟ|*…‹‰›ΌαΆoc*^Φ’/ΆO'>°Rp[Nω α“7ιuGΦΨζDΜ 6›κΙΓ-BpΡ6?Όf‡u6=–%γ΅©°lΈw,,‡mGˆCΒιτXEI€oƒCaΊ)ΩŽγ υε„Κ‰θ‘:Gκχ•ώ™Y‡Τ­b2Η6_Ί¬ofΦG3ϋž]—MΝ‘v$»… »™}Γ-oŽγdi4Ρ©γ8νΗ¬0οE‰‚³)9²sΡ¦~₯P9QΌSM6θ't5wœ‡“嬫Πj§šF ͺ³WΡgρaSΗqΗιaΜU ΘΟ΄YR_O ”2²£ΩtY‹|κŸ™uqΘ&ώΝN»–ϊ‚B₯ίgZO«YΝμ»Ή‡dίσΦ₯ΎsΓk2σ―# Ή•ΙρΣΌίθυδΈΓψ°©γ8ŽγτσΡτ\φόN}M‘ΪΗ3;˜EN%Y!hBq!•ι¨j½fW5²‰\gV»αœ—­Ώ‰œyo]Ό9Žγ8Žγ΄ŽΩD!· hcžηΣqΗqΗqΗqΗqΗqΗqgςόA€t›P™*IENDB`‚python-gaphas-5.1.2/docs/images/segment.png000066400000000000000000000101071512665300000206430ustar00rootroot00000000000000‰PNG  IHDRϊ²kη<sBIT|dˆtEXtSoftwaregnome-screenshotοΏ>)tEXtCreation Timeza 12 dec 2020 17:23:24 CET%°T€IDATxœνέ[lׁΰnΌ i’ͺ(ΩIoκ€JΠΝ:‹5Π"Ζ6)δν[ЍνΔιΒmΫiκ.ΪΎολ>.f‘dΫ’qμ¦i·ρEΆΨΆ€γΊMϋ’›Ψ Χ±lΕ¬dK€ΘŠœΛ>iHJ"₯‘8δω?ΐ0ηp|$ϊη™ž9G2JED4Πδ^7€ˆΦƒN$H :‘t"0θD`Π‰ΐ  €A'ƒN$H :‘t"0θD`Π‰ΐ  €A'ƒN$H :‘t"0θD`Π‰ΐ  €A'ƒN$΅Χ ΨHwνίΘ~ύμj ϋ!Ϊ(BςR~M―O»ι€ZB΄q„ :ŒŸ_ΥλΞ?~>ΰ–m ž£ €A'€‡ξ ‹Ε›η—ΫFΤo„ξΡ; 0CNƒ@θ  AώΝcΏρžkτζ 9 ‘έ>χΒηpα™ 8»ϋ,Eμ:½«Η­" ŽπAΟεrΈxρ"ΐΆmΨΆν=n„ž¨ί }θ>99‰‹/Βuέ–mΥJ₯-"ZΒ=—Λα₯KmCU«ΊΑ-"Z?B½qΈξ…όυ ίͺπΗ§ώΤ‹¦­ α‚ξ8Nېgώ%³P©vy₯A!TΠΛε2ͺΥjKΘUUE:νΏY₯Q‡a§A ΜUχ‰‰3( ΐ’Ž[ϊg Ϋ·oΗν·ίŽ+W>τΥίφoŸΑέχά³Α­$Z’Q*ΆΏ5@&&Ξΰΰ‘C°>oω‚ͺͺχšmΫ°,ΛΫ¦( T΅υs0ν¦y?:υοΡ½7B<[ϋ+•J!&Η€ϊΗά\i–Ήt=G\Ρ7Έ΅Dλc {τ–£ΦS=ϊžΨ·ΟWχΡέ{pφμY―|ςΔkxδ‘G6¬­Dλi`/ΖurψψΖ _yλΦ­λήF’2Aο6δpγγ}eΙΐ}5!/—Λ(•J^9‹!“Ι΄­Kԏκb\§!ώ…}―3 ccc^YΧυ–:πέο|{ZM΄ώ&θέφδοί|Ο{l&]΄Qχo€{‡ο ΌΝDe ‚ΎšΓuΨ±ϋοW―~„oπžίvΗgΌmπφλο¬C«‰6Nߟ£Ÿ>=Ρ6δ/=ΊlΘ3LΓWŽΗωύ9 –ΎϊιΣ8tψpېοΫχxΗϋ1 ΣWΦuKίΊΏυΦqπΠ!oFΠ4 ?>~»w?ΪΥΎš{t=€DaΡ·=ϊΎπy:tΠ++Š‚—~τ£C¦Yφ•c : ˜ΎνΡ%IΒΏ?χΰΨ±γ]/V.7=]sϋˆΒ€oƒΤΒώάχΎ‡'ΏώuμΨ±cΥϋižΆ΅6(TϊφΠ½A–ε5…@Λν¨‹/ξ ‚Ύz4A§ΑΖ £M^ε °4Xϊϊ}­#ތO ŒEΖΊ;Χ\ކ£"lЏ]Wn)Έ2ύg―Όi(Ι±ν4Pz†™N>='πʏ=Ά?yε•Άˆ(XŒr ǎƒ¬(HmJ!Ρ 'ˆΗβˆΕ’Π D4 ©T Š’τ|Ε—ωω Μ² Γ01εLαάΉsΘη Θηg‘/PȐ/δQΘ05=O>ωΣΣӘžžF₯έAΛ²ΛεΛε–―Έ@8ΫίB’$hš†HDƒͺjυΗD"άωιO#‘Lώ‡'ƒŽΪL5’$ΑukC \ΧmŸΥŠE ίώΞw»ΪΏ,ΛH₯RΠ4 ΙdΡHq]‡ΗD‘ά΄ ͺͺ •JΧ>i¨ͺŠδ¦$"Z‰„ŽX<ŽX΄6°'ŸŸΕεΛ—1YΔG§?‚Y.Γ4M”MfΉ Γ0P?Χ8 ‹ŽαΒτ<ϋμ³kϋeΜu]T*•Ά*Χ―_ΗΓ=Δ9όΐ Χ%:ŠΕΚWΑqΜΞΦfŸšš dŸccc@ψΰʁμ/ŒΗΑMMqΑΛ0θuۢݍwί}—ηη‹$“ lήΌ###Ξbdd›GG‘Νf‘Ιbtt£##Θf³H§Σ˜››Γ­™ΜܚΑΜΜ­EgpσΦMΜΤΛoZΏ‡%YPTeΕΩ|8 H0τΊ;ξΈ£££( °mŽγΐ²,ΈλύgϋPΉ‚X"†'=Ϋ²0Wœ«Μ²‰ry₯bUΛςφΣθΙ{%"‹A—u$FΨzηH₯SΘd†N₯J§N₯‘J§0ό©O!›ΝbσζΝΘf³ˆ5έ°’X,†‘‘‘λέ΅ςRγ_χ~Ώ•JU«ŠΏόeΧ―_χκV-= ϊ"š¦axxxΙν©ΧH$πβ Οw΅_ΗqP(P­VQ,1_©}8†‰ωJύΓ‘j‘PΘΓqΜΜΞΒΆmΜζP΅ͺ(K˜/—a–k+Κ€Ri "όΝφϋkγqΔγ1Δcqθ ρX­άΈΠψφλοΰήαϋB52¨]Ρ"h‘΄œ>U«œΏ/ ϊeΩ»ϊήIΧ‰η_xοί|;ΎΤΩ€™~‘iš―\ε‘{ τ>7h#ήτυΑ χ±A»ͺώΑK z0„»=ˆΫ#yτΪ,χ>4ΎWo$ ‘ϊωϋb|Ί#\Ξϋ˜Γa©χΑu]LΝ.Œ5d ι,ί³΅ͺG§πs©tΖΡ§( ωYއ_#ή½F‘"Λ2’‰„WΆmΕϊŒX ƒN‘βΊ. Στ=‹rλ΅bΠ)TζŠEί°Ψd2Ρς•uA§P™]4/d2KΟΖKcΠ)TςyΧn½ΎŸP0θ*3M7 1θA`Π)TšέΣi= :…JKΞCχ@72ŽΒ£έ"—/_͞SW,•Zκ…νVΫ~ΐ SO5/B1Y² εΉθœ―Ξ ήΘ³tκΉΕ‹P\=uΥ7ή»;ͺm΄[r7ΟΡ)TšGΕΕcœ6 :…ŠΩ<ό5ήέΌuΤƒN‘R.ϋƒΗυ΅d°0θ*¦Yφ•γ\Ό! :…Jσ‘{4Ζ;Χ‚ΐ S¨”ΛM=:/Ζ‚A§Πp]·5輝B£R©ϊΦ¦F£-+έκπ·H‘a6]qοvI(ZGΖQΟ5FΌ†‰±θΒ8w]Φ9. :υΤβ±λSΞ.L_πΚ‰‘ΗΆ„Σ=Shœ;w_ωΗG½ς?μΪ…_όβΏzΨ’ΑΑst |Ύΰ+§©΅dπ0θ…‚ΎΈTŠ+΄…A§ΠβWkΑαo’BC_΄B \‘%0 :…FBχί©V2Œ΅dπ0θμΡΧƒN‘ΡΪ£3θAaΠ)4τ¦ †ΉDMκΜ ωH0ίG»°r₯ά΅[ΫηmΫΖΝ›7½²’(^r?Χ~v5φˆ€C`α$œ•+-C.{π——ς-ΟΉŠ ,Z―Α‘œΆυ νς;φn0θyΰK¬κu—~wΙWn·πB'š^?5ξ+[–…7ήxΓ++ͺ‚ρ/ϋλΐωΗΟ―κίƒ.{ΪξͺΎ’UΪ>ίΌπΒJ:Ή9EQό–mwΧVZƒ. {―wToλΔ_-»}ρΒ ΛιτVSI’ Λ²7ω„λΊp‡#δΐ  hξ‡Eορ¦#Ι%·ad£Z΄@Qί,3Άm3θ`Π΄ιHθ6ίΤαœv 9€Zοϊ“W_…$IΈqγ φ&s9$ $τ%˜0ͺͺŠj΅κ•Ϋ4-}‹ŒAT#μs?,B~²vΈμΎZ¦υk@±X‚eY°ζ-΅ 9ς-¨­vš&ώgΒΫ_,ƒλυΰλΠ θzΊžώoΙ8sζu y˜†;fγΓ?€γ8¨V-8ŽΫΆQ©T|ν΄, œπyνtm:’Dαs°_YtΡλk«ΫWΉ\FΉ\Ζ­[·ZΆEΗpmϊ^~ωX퉝TΰΚ•?―Έ_ΫαΉ πδ‡BK–eΔΉ$S Ψ£ N’$ΈnλΰHI’jdΙ+8π$,ΛΒd.‡Ό:‹Ρτ(LΓ@±Tj»΅ΪΊu+4žŸ‚A§Άaw]Š’@‹j^ο?ΤΜΌσ=<΅ϋ€Wί0LKE˜†‰’Q‚a˜0κί-"9”ΐύχ5ι N||σΚ<ξώμ6Θ² UΣ Λ2Eͺͺ΅ž<C\go]`+ο›Ž$Q΅,˜/™ΐOᝧ[–Ωξμμvα­ύςIoοΰήαϋΌ‘qΏάKΨ’»οΉgΝ?u†ηθ‚ZrΠTρoΤƒϊΣ…zΝWΑ©?±GΠ–½ [κ#ίΆΚT=ΨΟψμΒσνΞΑΉΈB`Π£dΔ^z…ψΓρΆίg»‹'Oβ‰}ϋt6vΒƒAHσ]hέzϊιoh½ m΅xΪΖaΠ±šϋΙ]Χυ²ΫΆν…½Ρ³―ο'ίXœa†–uζΜλxκΰAX–ε=§( Ž}iΝa§Γ«ξ΄¬={vγψ±cPΥ…ƒΏFΟ~βδΙΆŒΊΑ ΣŠφξέΓ°χ9:Β°χ7:Ά\ΨOž<ΥΓ–ΡJtκΚRa?ότΣ {ˆ1θΤ5†½0θ΄* {aΠiΥφώΑ3΄f?ν5<σΜ7}σ°kš†_κWΨΉσΑΆŒأӚύΣWΏŠ?ξλΩΗΗΗ±cGgσΎΣϊγXw Δή½{ΰΊ.>Œ]»vᡟ'’QΞί˜ Ίε ΐ,·ošΫ>ŝc‚;n0՝o²»ΞR`Ilz*a[|BˆΚ‘₯pž lΦΊm+€nΩX7ΊνΈtkάςJw,Ψ‡{΄Ν΄›€εnΫ:`΅[^¬wΛΛ€‘~Ϋ L΄Ό` `’&:“0!šKοE,τ3qδ½—x=81ί¬!D:d)œ[exώ4ΑDjE’…­(Œb…υX`5–eXAb9Ρορ…‹₯nΎ‚¨πα 4KάΎ•ΑΉΐDz&ή³–λν›δuˆ¨ #„₯%Kα\‚}@·!²8½•4Ξ-Cδ„Zχ ·ΊBkΛ»!r3Bδ’Δ₯ rcBdB$„a~Ϊe9fΡ†"λ-h/8‘Ελ…©έτ^!²€}zŸ‡"3ΈΨ Ψ³>…’ΤLΘπά^Ԟ$r΅ή«žC$T‘›X΄Ζ*"+s0ό!DZd%œ˜•7B$šEf„βŠzΩρή†) S !DIΘ*Έd &žk›%•G§’Rd)œ α‘pΚβBT §Θ ΘβBT §ΘΉj…•BΒ)²FZ!D₯pЬ‘«VQ)²Ξu S‰~@Z!D₯Ε)²Fν8…•BΒ)²F§’RH8EΦ(8HQ)$œ"k$„¨Y §}€ ύԊlQ§’Rd%œ~°κ‰ S‰~ΐ’64L%„%!+ατΝP&7L%ϊ Θm/„¨N‘5ΎnSΒ)„¨N‘5ΎnsMΓTBQ$œέ±ΞΙ9EFΦBˆJQdαΌ ₯Q`°Έ ψπrWNήNt?F=σΝNΛΘU+„-πμγ~Cη…3i:‘…sLjž€+&aU/’‡Cνοj‹Ηe}šρ,ΏoΞ9BQhφΐ>–θβ^8ŸΐΔi{Μ꺟H< {·ιΉΐ—€Εΐnί ΐ߁%X³ˆΕΨ}g·ž;v ‘ΠόΨm;Λ­c–o(IZΏν|ΰσΐ#ξΊηΣƒtӁσ0KϊQ—Η³ά±·ΕξΕvΑ΅κζbιέƒqΐΗ\š΅ΐRΰηΐ³‚γ›έ§NΈΔειΠ.Ξ!„•g'μcywη…3δyDΒω“`»5˜ΘάγΆόΈψπ ΰΙ ‚sΎΐσ°[ΏΓ­κΦG€-bΧ<'!Η€kƒs!HwA°}°ΒMIΒωnϋSΐn.£ΐλcιέƒΣέΎυξ>ψ΄K±«•ϋΤ —»sΌ’Γγ…’/ΨϋX>ΨΕ9κ '˜΅5Š}δ=^6ΈmΎŽΥ έ–˜HΌ™H΄^μφέγΦ?‰YX£ΐ27ŸYp£ΐΝ Χ<'aΫw=ˆΔγ·Ύ‘ψζΆmγŽIΞ;έφo»υ?ΊυŸΕΥ»»Χ;ΒmyFoΉm­ά§vωS—Η !D‘(rpP#|ΎGφ]ό%–Γ0—ιbΜz -Υmά|›Ώ8Π-{‘:0ΨvE‹yΌxά-/rσ­ά|O`ΐ-ίΝζ'œη%˜πόŸ›Ÿη應sόΪα=Ψ?Έή…DρnΫΎnήΚ}j5GBTŠxYZd)œ‰Ε- ϋ‰­ο |ŽcVΪζΐ7έώρn~VΧωbΜΚ]|88sC$°ΝX,ors/^‘ΰ'‰ΘΌ`ω27χyžΌψzμ˜ψ=–Οΐ\Ύ!Σϊ}jEΥ !*EY„s &–/ΎlNBΪΈ…ΦέΗ1χρ[Žσ–δ–ΐ[€λ0Ίψ—‡Qΰνg ή₯:€ΉN―Ζ,ΊCbι¦ΊΌxf&œλ=ŒΞψ=ψk°|;π?Αϊ~˜Έ΅zŸΪEν8…•"+Wνμγ=‰Zk§6Ηά|χcnΝνάφΟ`Α,ΝΈΘβ; ΠωVBΊˆ\ͺ3±Ί9€«€inωfΖZkpπC·|,p/„/ΘN‰»v/ύτn·}oΰΉMw'pΆ[ώ*φΫ.ΑDτ:, ͺΥϋΤ.rΥ !*EVΒι£7!v„£ΐjLp~ Ό ψ\‹ΗގΉ;/^‰‰UaύεUn~e°mA‹Χl…`MTVC˜ ύΚνσ"σ7ΏΈ>vό/‰ξρ{hΞј%ωwL„Βξλ™XΡvξS;ΘU+„-²ϋ0'Ή<ƒΪ1*· Š>;ρˆr²ϋMΘZ!š°ϋ`&E} ψ(ζφύp)QS”eX[Ν*0€5ƒ!;ο†BT†0!ΨYΒ>εX“‘₯XπC˜λvΧ<3•2ƒD2!„hΒ]ΨG³›ξΪDΉ™EΤ„BT‚,έgύ2΄˜¨"j…•#KατQ” ι_Q+„¨½Ξ’[œS±N ό½8λΓυ΄ΊGdΛpL°>Έ1!έT¬yL‘ƒndq !*G/„sJΓTωσ~¬mθˆ[?λΦοC±tτF€βΒYUX§ρoΜ6;]!‹SQ9zQΗYtα|'p±[ώ&Φυέ/w`Φή­˜υωkl””£°Nb½α-ΔΪ_ώλθ LΨ|‡I|·XΗνΕΖΔά³&?KΏ3Φ‚ο)θgΐ»ΪύΑ=D§B΄ΑEXDεayg€S°ΞC –η`£ˆψv•»a]γΝΔ\ΠWcύΛϊtϋ`–ιο±QHΖaΦλ‚„kο πf™έ„ ηDchϊ<άμŽ‰ζ^ΑΎI±όC°g iΤ!„(%YuςεpΥΞ¦yί³wϋy ΦΗλ2·~!πRLθξΔΔLθnΑάΏ7sΞϋb¬‹½Υnύη ς°fΏ‘Ϊ±:Χc#€LΔΪ‚ YœBˆΚΡοuœkhžΏV?ϊλ‚ε‘`}„δJ;ί/ΕF+90aίxŠ)š :N!Dιwα|Λ_«Ρ_… ν]΅o£σaΖώΌ†ΘUϋ·}%ш(žu˜΅ωwMΟΆΨΘ*EE§’rτ»p\Ό¨Ε΄~,Λ«1wμeξψNψtŒt6ψυZ,Xh!pJ~%πZΰΐλέΆ—cύάYœBΡ_ΔC>wFš°?π½œ=δζ“±αΛφiσψKI?- †=ίΘ;#B‘ύπWΜ;ލ-g―ψ°/v~@\Τ CΨΐήχ¦Ÿ­Τπ.πυ S !D‰ΘR8ΛΤWνY9]χ¨.Ž]‰m‘ρAKsΝ…B€ˆκ8E–ψ¦6κ―XQ$œ"K|4νPΓTBQ"$œ"KΌpΚβBT §Θ §’rH8E–¨ŽSQ9$œ"KTΗ)„¨Y η“n~†ΧΕFZ!DεΘR8qσ3Ό†(6N!DεΘR8Γzβ‘pφ/ͺγBˆ6y˜–w&Dnl†υUϋd³„BQ²΄8Α:._™ρ5Dq‘«VQ9²μ«lΨ­n˜JΤQψ06ψσx`†Ϋ6…θ£<¨OTŸvΡΨ–aΪιDΏ}–›O€Φ:^ŠYΜ‹έό1·όˆ›kŒΙζ¬Ε,Ξ)Ψ1šov„’{²Ξ€·―ΒΔoͺΫ>DΤρϋLΜκη–qϋΚΠ|aπ06φb7 Xβζα΄ψπlλ^<Β’C<]ΌΡmΊQ읂 Bˆ 0αΉOή‹Yˆ²ŠhHͺeX°Ρ&lΐg°X|ΚJ’Ρ8–b썘ΐY?ώΓ½Βν:ά±‘[y0ΨΝ·f˝Έ7a–k\`}Ύ;ΊFιŠΒUΨ Ϋ›%Bˆ’“₯pΞΖ‰’V”Φuް“QLμΐ„rU†ωJ‹iΐ6˜°ΞΖaό΄y°Ό°CNy ρ‚/\΄“n5Ρpq­¦Ϋ\Aτ !D©ΙR8l‹ N½9π―˜eψZΰ#Τ ­―› ,^€X,7Ί0BQ€_aVΨ―έϊ8,ψ 9ζK!„($ΗDs1V/κΩ Έ΅oB!žζΩX]ξ暍σ_ΐ—zš#!„’ LΖκ5GΣκ€™\ μΥ«L !„Eεk˜hήIcwμΎΐε(@K!DsΦΌfπόxw¦9B! Κ06φθ(πιΒz*b§B!D¦\ˆ‰ζU΄Χ[Λ€Ν"CB!DQ™GΤϋΡάŽ.Φ·―BQyvΔϊΡήΥα9fΣ]ΏΎB!Dα,ΐDσ']žλ΅ΐ1έfH!DΆ¨)Dw…6NηjGoIκΠΎήώeX„ν끻2Ν΅B‘G`¬¦8ΧΣ_ „’-dqvΟ 6HσΦ$·ξΗλώ‹žύ:πg`VŸ=Ν­?œ‚uΧ'„Bτ%aΦδ›ςΈBˆξ—wϊ„InΎa*!„…GΒΩΌpo˜J!Dα‘pφ §BT gop !DEpφ §BT goPpBT go˜μζ²8…’δH8{ƒ\΅BQ$œ½AΒ)„AΒΩ$œBQ$œ½AΑABQ$œ½A§BΡ›°ΡN4BΡ„ ΨΘ(rΣ !D«6{δ¦Bˆ !αΜ §BT gφ(’V!*„„3{ΌpnΘ5B!RAΒ™=ΎŸZYœBQ$œΩ£:N!„¨Ξμ‘p !D…pf„S!*„„3{$œBQ!&䝁>@Β)D9™LΕΊΚvΫ¦cίΝ%AΊ5ΐZ·< ,νUE>H8³ΗGΥJ8E?±=p>π(ππ π0π€[˜φ#Ν‡1αšΜgΊi0Λ₯›LΔή½!·o¦Ϋ7 S°oΰτΰό˜Xϊo·¬"zχ7Λƒ}+‰š©mVϋ–»τΈγWϋ–a}_ƒέΓΥΑΎf‚Ύψs»?BΤ"αΜYœ’ΉΈxoƒ4‹1}X0«'½Ζ VhEΐDnVΞ‹0ΤZ§`"<5Xί"“œΆΗρΐΙyg’ΜH8³GΒ)ϊ•ΫάόVL·Β„cKΜ"œν¦η΄xΎεnZΜ—‰™·ΔVc–X#α[‹Yd‘菭Δn ­ΧρX!ΐγ-cά|Z°Ο[ΖYΞoƒ φ [Ž‹φ‘Ηk°°/pΐpf„Sτ+ή*;8)Άo3L4½zKl)&`‘8.§Όυ†«¨u³>‘WF€—WP+Β’$œΩ£ΎjEΏ²™›?•°ο©:ΫEv¬qσΑ†©DSΤ%{dqŠ~Ε[œK¦½ΒΙβμ gφ(ͺVτ+ήβ”p gJH8³G§θWdq _Χ*αμ gφH8EΏ"α,²8SBΑAΩΣιxœ>”‘ε-²Π-κc«Χξy³ ‘Ν+m#~Φ$(;‹ά΄sΞyΫΈι‘œσRZ’¬­°D:`7ΜΥψl7Ÿ ˜qΎΌΥα-/ΞΎSd_Š]F$DήEθέƒKˆ„Λο-‹΅Κΐ:"7jQ띒DφΐkI―γm‘=ώΫ"k³X¨ž3κΉ)}‰——Δφm‡• }šx‹PίzπVΧR7_NdmΕ…Oτ'#Œuﺝˆ( ήΣ2½a*ΡkY›IΒ9sαnΔ,Ώ8ΊIˆ^჆$œεΑwœ/T‹|‘p¦@’Uθ?NŠpEΑWH8ΛΓjμ2„ώ·"!αL$ατV¨’EQπΟ’Ϊ— Ήk‹‡„3dqŠ2 ‹³œΘ][<$œ) ‹S” g9‘p g 4²8%œ’(H8Λ‰Ξ™ S‰^"αLΉjEp–ί!ˆ,Ξβΰ›ϊΟ5%GZQ$œεΔI8Ϋγbΰ3:·ο“{UΓT’!rՊ2 α,'eγΌψzή™Θο’•pv\΅’ ¨„rRDαμχn}W{Ξ.«V”Yœε$vœγ€ΝάςxjGυ™| 8xxψ2΅ί΅ω˜Ϋσΰ ΰ7˜x~λδ|πWΰΰΰ˜s€Cc±ήΣFέ[8¬Χ΅wΈ4'ϋ[9Gœ-λ,w‚Ξ~.²§€=(Χδ!ĞΙoεΡΓώ·N]ž“€―Β†ό9pP°>V¨z7&XΟξ>K³xŸ;ί4LΘoΐρTl ˆƒγ’\΅­χίXPΤϋ]°ρx?άζ9βuœ`#όπ Sώ‚ύ'tq‘ΐ‹±{UήΒρ~μ™<#ΆxφΏΥΑ±ΣΛ1ј όψ?j{šοΆ‡|˜ΪΎ΄η»Ι3ͺχΫ€ΏS+”qαlεΈ!Μ’ …2€ΥkΗ…soΰΰΐ~˜;―Ξ5šρwμ?Ω«ΓγΙ]˜)8H ΉjΛ‰³wJΗώΈ8sg^|„±Oά[ΏΨ«Wυu¬ ƒύ;aΓΥ]lώ<«A~Z9nw`όNΟ‘ΔΝΐK°BΒ ˜ΥύGΜΥ{Aƒγ’πΪ• S‰†(8H” g9ιF8/Γb·|06€aœψ3‘ό³6a[ΘOIΫΪ9n …γ;½φ!ΨχϊΜu½ΤvQg (8H” g9ιF8?όfY|³ΤΆ₯{QlύΕX Πr’Y„YjΫάqΆ­§Ά“€VŽ»XΌ’ΛkΗωpπRΰ•ΐ‡ά9nipL=U›rՊ2 α,'kά|°ΓγΏ‹μ|Σ-oΥρyζb7ίž| Π©ΗZΰΐΗ;c°ΐ’ΧιξΑά£s1·ζ’Ž[ œ|ϋν °ˆΰύ±ΐΆV―g&&”‹±zԁ§€―Ηφ_Œύ7"%ΓnμOσΞHYˆέ›s zΎͺr(vŸ.Ι;#aΈ­Iš!μ£ή /Βώ·?wyžzΜΎœŽE²>…5υKsRμΈIΐWG©ί$dΜΪ]Ems”fΗ ܍Y­ΖίΚ9²κ9hϋ-rΣfΐΨΝ½0Μ,<ώΟΐRμ‘½kΧu ‘υύμχ'}Xš έ·ΖΊΑ·ΐ^€Q¬τάΚω„ρJμ>ύ&οŒδΔ.-ΖΟm’f jƒjZa€ΪηώΉΨv}›ηi•$QυΩϋ?Ο;#e§_ΊάΫ+Ω} kW5{€ž}”OΓJαές=7ߎ±₯Θ·έ[ŸξΉ˜λδ¨]eϊέU; <»Αώ9XƒϋocνJΤ'ιo1αZHΤ„a:πƒΰΨΫ0γΟ€K±Bζ ˜‹tVίp8p­;ίyX„θ¬nο4,vv/ο쀎S€οnOgΜΓDε{M•‰‹‰z9ϋ `n“=°ŠχiX(ϋhΒ4ϝ'n!ξ‚"ŒΏΓJι+άϊΉ±<όΥmΓη“,Ξq˜eΌ«YŠ5όφακσˆκ(|Ꮹm/7Œ‚0 ΌΉώm) bΏεΚf +Κ 0OH=ζ`χnύxLψ κugΌΤΊjη`ή—ΉnύTΰmŒ΅8ηb":Ω­k―8‹πά-!_;bΫ= ςή ²8ΫγYΨΡ(I΄@?mΌή-_Ό‡(τ{=VZΎΥ­ί l•šΧ‰\’kc{¬½Φ֘ ρξ˜οΕκŠ?ˆΥ‘μ<ΟΧ¬@ςΜέ€}Άwω?³P―pι¦Έυk°¨<°`άϊ8χ;Πδze _-Ξ›1‘›Œμ^νΆY’!‹0«Μj<Ε-Θ·σ°μά;φ`ΫmD"ς2·έ»Λί»ε»ΫŽι&ͺΆΙθΌUE΅)ΡΪg΅―ϊ ‘hžO­UωIΰHΜ]Vω7];ηL4·~…uŸε?ηΈωT"kο_ά|πύyέ…¨W‘w―φΑ„}¦Λγ}DΉ1ρ^ŽEηΝ& w_ˆυΟYv|›β€‚^•Ω«7aΟΝ\7ΕEj ~ω•X€ΞΛ±‚ΧίH±π]!ω>`ν)_榀O»}υ"4εͺ-Ξ”hԎ³* „’ΓFΖ‹θΩΑ±½βH’E›τƒΕ Lα#Ιή‡ΥΓΔ,Ž6άΞ-_ƒ mœχau>“€‹°f.ž‰FdπξσhξώΎ8Ϋ-λόω,πβ:¬ΎLΤΉε™.˜€ϊf7ΣYο"EDgΎ<σrAϋAgνBT•±λa#Vοnΰ'mœλE˜ΐΏ³YΒφwσλ:8Άi?ο²83δD¬Tς™œσ‘6Cΐ§°{φπ܍χIδΔ\’OQ;ˆ-Œ΅§53yŠΪ‘zήFm)xΟ„<%5G5GΉϋθ¬ΐόŒΨωΟ ΞνέΕοΆu:bΩϋM5K(2αl’ηκ1ΜΊΪ©αΎΉΦΦΩdνιρƒG±2˜˜^Md}n@ο!zχoΗΌkž=ƒσΌ*aΫ1˜Λ{9v|―J»Sϋžϋi#Q»Ι9X3Ÿ{°wz֜ΗBΒλxwψ —&MόΐάUϊ6†/`7χε!ΎΗ“Εyg€O™Ž‰υDψMXΫε·ΠΨ2Zδ·*΄νrL§]άΆ±θσQ7?λkφXη ƒcwΗΌ+Ψ6'aΫZ¬0λλm7`χεeDc\Žb―_ƒ΅­ΕΗάΎ…X½³?ΗW³{ΞΑΣδST―0|»ΉΗε![Y;"_φΓ:T_Iτ±ϋΟMHοƒσ7Ω gQ+:k‚υΜσ3ŒΕLšνŠ ι(Q―H_aμ3φ•ΰ\GΈml›λΆ½9ΨΖaB:Š5'ςΑώ{_Βu>Ÿvσ«ΟRMob!πΑ1Λ;#B8vƞɻσΞH¦bM?ό΄φ §ύ‚i7Μu95ιd%a&f…ήD²κ?ϊ>ΰ¦YίΈονk σΰŸ\šχaΦήH,ν(Φϋ.ί£Τφ‡μ·ύ5Ψv’ΫΆ†¨3ω&  #γ_•p½pς"ν―ΣΙψšνp22ŠR‘zε'¬φυRγ±^uBfRπ6HmPΚjΫ&‚Y#αΗnˆ¨[9°χa΅Δι†MΨw‰›/Η\–Σ’ΨϊrLwΣHJyi‡eXσΣ±ΒΐΡX0Ξ!nz«τd4™Θ’ύ"f ΖyQ<ΐΧ°‡½ˆͺ’|ο`ϋΈyμ·-Ά=Η͎ύwρm£ iΑ¬Μ8χΗ“υ  J‰$αΤ@Φ’hxαښbΦΟ¬Β:𬧢‘Ήo6䙆‰ώ j­ΥNΨD$ ΉΙ/?κ–ΧQ[ИŠΉ-Ηa…n·ωΒΖ’σΦDΑ(Ms”½‰ ϊυFrρu˜759σMbΒΉ V‘†Ϋ’Δτ†`›κ½ZΒΞNΞ%ŠμŸ„Υ_^»NxΞ,p¦D#‹³*=‰ςγ…σ^’6v#˜Υ²œΘ ϋ@¬ Φ½u²ŒZ‹m5΅=Am κπΒ³”ZΛ’Ό Νrσ™D’:#Ά/œΆ ¦9nΪ‹βα-σ,,Ξύ‚εzΒιΫUξ…uδ°%Q}ε"μy;Bρ"ΉOΒΆDυš‘ΘωgμΝΨθ1W`ž‘_ΉλoŽ5»-ο‰έiDξd¨" ό αμ’$ατ„΄\QBt‹wΥήHmπDΨ„Ήb—txόjtv°Ό•[žDm‘Α[ΘIΫΒ‰/D$m ­θgbΓζ½…¨ Ζ£X'!ϋ`Μg)œIξdΰ?±€ ύ1+οΫX’ύ+’kƒσ„Ϋn‹mƒZ+τ8lŒέέu|_bΦνη°f3―ΖϊŽώ3u»±Ξu²Bg†|“ΪJs!£>ϋ IDAT`sKuσnΤγIΡπΑAapNR?˜B' ˆtωφ_όsή);I§:fυ€6z΄)|žΦb γΑ,-ΏŸ?‚½θꜺ8ψ@ wY—c=c}‡±C–y·χdDήψwpmΓT’)„σD’Θ³•Τ …u<ρΊ¦x`DΌΞh΅υ§‘‹*^΅ŽΪΡΚγAaV<c£»–g-ΥrQ `ѝ`u/㉂4&abpψˆSά1Ω₯#M}€Κt·=.”έ¦Φb½+Νΐκv|3F¬Αz ςaρΊFΡ†·bc{ξνΆmΒΊ•<λι¦^L„ο3‘?Ύ S₯ο`.4Ξ©D%ύN#ώŠLΌ0‰Δ ρ‘xΠIΌ0,’R|s†i˜Kk &RΝDl ΙΝ#zΕ:’ϊΈ%˜.iq _Φ©ΐΆXάΆX}ά6Α|k7Ζzƒρ‹,Ξ|ψ1Ρ Ρwc|«Γk†‚ ‹ƒκ8S’‘pžό—[žK iΌmœ·d<ήΒρxλj­¦€syA©w°έ^ό\q‰Ÿ+.>e,xkέ ·t/τ‘ξ­sο𞁰ΰ ή² ehύwΓ*lθ¦fΓ7 b"z"VΟ)‹3ŽΑώƒ³ίΣ^D±Ϊ… gJ4Nˆ>̝FόoνyB]œ0V„γ λγη Θ'5ΤO¨ΥΤZ§ήjυ–±w5Η]ΠUf Φdΐ ¦,Ξ|Έ ξ9`ύ1’-HΒcdq揚£€D#αΜrόΌ"·^ͺX8¨ ΎΠ"‹3_ΞΐL^ΗΘβ,²8SBQ΅’ H8‹ΑˆF i•~ΞI˜ηΚO_HƒγqY αL‰$ατ7UΒ)Š‚š£”/―Ββ|Ό°Ž= Β E%™ί ¦bρ3ά|V°μ{wς‚8즙±©―]X]ώξ$±υq aυM£c|~Τ₯KdqŠ2 ‹³ΌlαζiΆFΓ‡ΝΡΪβ΅Ψχm&΅β8ΐ0€±6ΈΌ,£Ά©œπΝΖ ΐO¨˜Eΐβ΅έRŠhdqV½ŽS” gyρνŽ‰Χ΅πaπ\($a|8bM€—e$όj̊σ£Ρ,usΏmY0-‰­ϋ©“(τπ~„ΏΫΦ°Υ‚ψ°5‚oyήc_H˜Gm;xΡ!IΒιΝό,,ΞωΨ°>Eξoτ|¬Dϊ~·~1π ½ν‚° χ©—xw_Ό=¬(>Ύ°σE¬τn ›Ζ…‘π^Xˆψ0>œ)Ψ;ξEqE0_Boκλαϋ.†t·ΐ„S…ϐ«Ά9ΏΗϊ‹όπ%πψh(’·\Όϋ?|λ ‘ΎέuZΑAaS,EΒ·ŽΏ¦-ΡmpЏ±!tΎ•ZŽŠΗ©yg Οΐ¬ŒQϊ§ύjQ9¬ƒc4Ύo1π.ΪI S‰–—°­‹sφˆI˜Π.ΓΖͺϋr,“€―`|―ώ ;ǍDƒz.ΔFzχΜΎŽu<½λμ‹Τ—6k›Άtφ ŒNνbΰΫ<οΦΛʊΰΌίε―έά§-έφ‚τ{cνα”‹©ΨΗw5jD_FϊΉ9J‘Pgϋ)H8³ z?&TΟŽ>|4Ψyΰ_€ΕΖͺ»gΗυlπΨ­±qρ>Dm©ωKΐ‘˜˜μΌ.…σžŒυνωFlά-[γ?1ΧΪ p›~f>ςFnΪr£žƒzΓ ΦΏσ³±^†cϋG°`ɞFΡyΤqήMτr7°πqΰkξš†βόά₯9xΉ›”φ˜Yz·—a‚φSμAϋW7ωgίάίεy‡0‘›\ξΌ¦ΝΌw{Ÿ~ƒY¬ίΗO>fŠ€τp–σ,V lBBλe ήΐ υF3šA4BΡf4ΆΟ³ϋžέΥIϋ>†'‘‚LW΄+œŸώ#X‡ ŠϊΥ`Ϋ+°u=Ž­suΞΆΓ>πWϋG?ΟjpΞzΔGT+• i5Ε]ί³‹fνζΌ;bζ_‚ύZ8oHχιxlΤω#QΈ:EΤ–/œ_κΡυ²ζεXfΓφ5ρ( Φ Ζ°uhsμ{vN"½ϊ’zΒ9Š}˜¨ α4, (\ΏkΒαΉ§Ν<Δλ!yτ…pΫHΒώ€ΛI%ΡΈ{:ή©•vNΞ›τ{ “ϋ4x†ΫΆ΅b^δͺ­ηbί–° ¬ΗT(β¨GnHρh9Ν‡πKΒ!¬ϊi;μ;p*cG˜$œ£˜xLvSΨ=Σb7yV`Α1 ΫΈζ bλ/ΔF_Ž„±«oτCN `υ„σcωΨ‚ZvΕdZΕ_k/ΰΎΰZ{ Ϊ8OyΧΈe°ϋΌ/ζm•nοΣDΜMϋ L0ΏY€­Έ’‹„,Ξrγ rΗRΫ{NV΄"¬γ»\ίDkCςΥρ¨W¬nuΨΠpSQ€PΧΤ«$^ƒέ\ίP8MvNΒ’YχΑά‰ŸwϋΦb£/|sή‰Υ>“Ϊΰšωΐ±ϊΎ'°ΊΎgўpΑ"c? \ƒE~³Ίa5φΫNΒ†_zψwμ…kη₯ιφ>ύ70«{]†ΉlΟΓκA“,φ’’:ΞrΣλΰ ψs’Άžj’’υ„Σ‹ει—ΟΔ*Έ―ΗJcg§ϋ +ᝁΉYnΖkξ ό/°;˜³kŠrqyω΄;Χ]Ψ wΦΘ»[ŽΓJvΎ›±οbbίN!€›ϋtVψ'’ožKs<½«oJοz“ΕYNΤ₯8H83ζ.Μ:zfή©γ°{zlή)!'bΟβgrΞ‡θŒMΨ—F§ι’;nΐώ‹η䝑²SΟβτ₯ϋxE»h½±:Χk0ΛσγΐVΤV‰ΦАbεe+4ŽRΎ&#UDgJ$u€Q„Χτ:ϋEcΖa܎‰η3—bΑ=»`’zS»W²«Νς!7m±p¦D3‹SΒΩ7RίrΩ5Y©"κ*¬ΌH8‹…N½K]"‹S,‡ΉΩR†ξφβ}QwΓl¬©ά3άϊ9Τφ7ώ]’ΕΩ%υ„Suœ’(h˜»ςR‹σχXuJ;\‚ τη3XΓnύΏ±Α(fwœ»t‘«6%Κfq¦Y:,ΒuDsδͺ-/^8[±8Œ΅Eξ5§RΫσY§ΜĚ|…# ݍ5'{_ ηO gJ”M8³ ©τΨI)Tdƒ,ΞςΞXœνQ8Δΰ|,θ.iθ½Γ°.A—a₯ό‚±£,΅;lΰ9؈JΗτ펍„τ$cϋ€ώπΞ6~W–¨Ž3%šΉj› g^₯Δ¬I«*ΊGΒY^²vΥ…΄-ΦEεΫ©Aiλ}k?lπ‰΅ΐΟ¨έσ46pp)ΦsΧ€›nΓ’ζ“ˆΈκ+ήEh¨Ž3%šYœΝκ8Ϋ-%ΎψΦ-έ¬οΤάΎ¬>ΰ.¬7 [€χ69_+Η Γϊt]<„— υKρRh+ƒk·2ΐ΅hΉjΛKΦΑAWcέHŽbέNžŒ΅™φ|λ½λ.ΰ&Lτφ€ωHK~ΨΐMΤ؈°οCœ‡ƒύy#WmJτU; λΞξ‡ΨΨ’`"γϋM=σXμΑ>ψlιz΄rΜη\Ί“±’ίαDΟ#Ήτ§ΥΑ΅› p-ΪGgyidq~T?½{wΓm59M±υ1λΣψŸΉJuΐ>ΨΎΙy“† άͺΙ1ƒ$w©Ή&؟7rΥ¦D/{š=<Ώ$Š:σ#{ b–γ›ˆ•Ύ+ό$α|­3„υΩzQ₯ύ]Œλ²ν έh€kΡΞς(8(! γb„–ΤVΈύ-π|ΜΣ΄ {žšY\­ Gη ¬oι8~ΫγMŽο²8S’žpΦ³8»Θϊ¬~α:μaΎ·G1χθV_ηξ:ylε˜έ1½ΌΞ9Za'Z\»ΡΧ’3Ԏ³Ό4 JcˆΒΕΦ_L4τήv˜eωe’"φ&¨Φ3Άοέ0«9Ξ.?w₯pέnQgJΤ+EyχBόcuΦ#ŽŸΔκώΒmIδ`bsf©έ‰ΥKδc/"—©ŸκuAΧΚ1iΦ/64:+©ŠΖΘβ,/YΝΕͺ`vތy όBaq‡ΊυΝ°„4†Τ»ϋnΝΕ‚~Ζcψη0ΦKχΰw£―^?H8»€ήG}ΨΝγcΩ-ΖJ„~ K‰~jΦχ΅˜εϊ|̝y6Πκΰυm何c|šW4H“Tz φψA£ΡRNE7xαT½LωΘ:8θLμ[u=6ΌήιDΒΉx+p4榽Κν_3φ4ms*φ\ή‚y•ž‰Ή™oή€›ΰΦOOαši ‹3%κΉj½_ώ©―΅'V*Όs§μY†gaQΆ'cnΰXιmsΕLΔΤ8­³{‘Ύ€½0 άoΫkVz| Vz\ΙΨΒB«ƒk‹l«ΆΌ΄cqΎΆƒσ―Η„ρθ:ϋηcB!ΖΦί[OŠžύplύ>¬ωIœ1£ΰlΜυN¬Ϊθ· iσ@uœ)QO8gΉyšΒΉ³2?θΞ&n>hηDΜ’ύVgΊ‹šϋJƒsΆrΜbƒ9?ΰΫ.}€p*&€·`u¦{$\§•Α΅E6Θβ,/ντT.Β ΰΫ`ί·,Ύ((ͺ6cŽΗJL_Μ;#’οΩ{ŸΘ;#’mΕώ»K28χ|¬sΡ:GcGQ\Η₯₯™Εw[ ΡkT^¨γœ†Yk©­ŸlΦ!‹:I‰^Φq Ρ Ξςβ]΅›oΐš·MΓ:DŸ¬OΗ‚|ΒuΏ-Ώβ%XέιJLPΧbU5±ͺ™υX βjL0–Ή}Λάϊj"1ήHΤo)f•­€Ψ£Ί„ψΒΕQ`ηd¬κ μ^vuλͺγμ’^ΦqV™D‘Θαƒ vΟ–½ŒΛH'τ½ίρ½ΘLpSΏΤ—U‰—Έ©Ό€ b…'ίΆ|Vέ#%I\½'Ξη­Q/τžιΨs<ϋž€ύ.ί³Ή DΏuˆΘJτ…‰IΐΤΣκŽ^Yœώ‘/7ΪΧjΊ,φΕΣω‡ΉόK΅{™ΪYn΄ΏŸ„yφ¬NFΒY&~…uy7„ Θ LlV`–έΚ`Ϋ2Μb ·%UMΗ¬«a"ρπΒ2{Nfl§ΊtΓξΈιDBείσ‰˜ΥZl^ΰ¦} ΆμζfdΘ*’ΐΟΌΕ ‘ΐbύι~²§Ή« υ:ΈΨksΉœ±ΦUθB E&|πͺH(Vρ:—%X)ΨΏ”‘ušK]>VcΣSXΝ“ΑτTε,­‚ Ψύπ%g_νσ.§ψΎ=°{Ή% ½₯q§Θ"φi<ήΑΎ'Pϋ-YŽu–°‰¨λS_h†θδέΤ"κYœwcΒωό.Οολ φAΪ:„ΠšδΝΕΛ>lρk―ΒΪo}kGzJ°―Ρ΅ΫΕ—ˆ½LwλS0aυ/ά,’Β‰/-ϋΊžΙ˜Ε;Υ-ΗuZH₯±°Nd¬ϊB#qΜ’Ÿ‘ͺΡ{Φ}c7J(ϊ‡zΒω!,dΩw)Χ©x™ƒ0X†υ”λέ”Υ=ΖDΜ ξΐζnΪΜ͟‡υrτ„ΛΗ˜ΨmAϊc&i4 ΰhgίƒτkZQ`κ ηb¬Ε*γ+Θ;­`/K[Hs&œ—osΫΖ1V`7 Ά­sS»"'„•§žpφ^8‡¦*?ήŽ 1‚uX„‘Ž„’TτσΘύ"œΎΎ6α”„’οιgατuΆUNoqφ³wA!R£Ÿ…³ uœ­δͺBΡ!Ξ±§Ώ'_­—Ήj…"EϊΩ}WO8ίl‹Y’ŸΖ†:·‡ωJΉj…"EΚnMuC=WνΉXsœχQnΡΉj…"UϊY8λΝsσΣ°ξ΅ζQnΌ«V§BˆΨ λ©^[Ζ{—•LΩ ϋ7η!„εf &(UbgwμwޚwF„’ τ³«v-6Αͺ}δͺBˆ©²`΄Β¬s°YΒ£ΰ !„H‘~Ξ~θvOΒ)„)οΒι#k«ά{\΅B‘"ύ.œ²8…B΄…„Ӑp !„h §Qeα”«V!RDΒiTΉŽS§B€HΏ g?ŒΙΉ λa<ΦτF!Dτ»ϋ\΅`ξΪ‰Ψ½‘IZ!…˜7`)πsΰYΑ1ήυx>v?–Έυι.͍ΐάςnDπ<·νŒΰœίΆqχ`kΰΓΐCnίxΰ8쾬ޗί/ύŽ4ςδΟq.π%`1pK›ωh•vξsR~<²8…φΑ^–σΞHΖ|ϋΗwyž`ήzμ,ΒD `3μ£yfυNqiΦs]ΪS·[`1Ο¬€Ώ›[―wΎzΪΉ˜ϋBg1±ˆŸ7δμ~='aŸwΥ> }8ωΞΏ_H${χb½Ϋφ·νt·ΎψΡΗ{)v/ ΆmΓ ώά_piΞuϋF±Žό―qΣ‘ξwŽΈ}Jψ=!ηηΎx*Έvh•v›§πk°Q{ξ!ϊίΫΝΗ9MΆ΅sŸ“ςγYΰ„}Μσ±α/yg$c|]ΣΏvxόΝΐ½˜e±Β-ί Ό2–ξ=ΐ7bΫή‡Υ£yŽ>‡}ΠΓύ1ΐ§HΞΫ[8_=αœηςΊΐMΑ,ŠψyCόG4ΙΊnTΗ97Hw›Ϋφy·~”[_†Y§» Ϊ.Νx¬ήqψV,/K€-έΆΛέΆk‚λΥ«O|yΏFΦωAΊSάΆ™Ψ½‹‹n·y Ο±8ΐm›άa>Ξi°­έϋΟOΘο\šC~θ3δͺ­Ύ«ΦΧqvκͺέ…7ίwΛsίΖ `–V λG¨_wΤΝph˜Ψ½ΜMŸnr^Ί>κάά¬ίζζΊλξœB"‹j·mίΨωwΛ‹ά|«ςΡκox^°|›/Γ,΄ψώnσ?‡/Έλ0θδ>‡ω ‘«V5ΆύQΰ—ΐλaξΣΖcπfΰNΰΊΰ˜wΈόΝ^γΆ…ϋ»ΝSH\ΣΞG»χΉ‘XΛβ8 {Q~šwF2ΖΧίμΩ,‘ΰ"μ~–°―QηI±΄oνTlYΑΎ?—`χQΰ“.MR=ž―;Ό7ΨvtpΫ°ΊΖάΎ­°ϊδ0/ƒεy.έ9ΑΆ;0«ΊΥ œvσΤ¨£‚nς‘΄­ΣϋΗ»zhFτ ͺγ¬ΎΕΩ―γKnuJΠΘεšD«g3~†En‚ΥαžΫ4πq¬ΩΚ~˜;w8ψM›Χ:ϋ°/Α"… ²¦Γκϊ> ό sEoΐ,Νo`–1XΰΥρ˜ΘΝŞ›Λ1±ΊΌΝό4ΛS#ΞGZχΉjν{…θˆyΨ τ½œσ‘5WcΏσ€f +ΖIΨο^Ž΅­|n‹Ηύ―;ξCεK”“?aΟΕ ςΈΘYœΥ·8ŸtσΝsΝEοΉΈ³Ζ¬­kin…Ά$ϊ1όhΉ…@Β)α¬*a½Νμ†=Ή,Οΐ‚cκY‘iΉjE΅πΒωXΉ…@ΒYύΊΏ~NΟX`Ξvΐ[±:½iDVθunΩ[˜²8EœAμyXBwνŠEEPs”rŒ Ν„sλΟvΊ›»εΨ½Y†D,Η>~[Ω^όΨM»οuΣ~˜υωU¬Ρ½wΕΙβί|ͺQ;OΡGH8ϋΗU{$Φ{ŽΙa·<ΎΓσnΔܚ‘˜mΫ€Yp#DνH½θrιΧamώ65ͺ_ŠbψΠ΅nέGeN#Šrœε扬ΔA’v–ώ7Ž#jΣ:+0όυeW¬Γ†£ƒίW―­©θ?TΏ)jpV_8orσνέg%&v~Zβζ1ρ™‰2›Ι˜θNΐDkΦΨSV‚¬Ζ©L›©X—t/Η $ΗaγWOd𐻾οvΦώ5ήiώTlʃ)Ύχb;7—Ε) 'T_8―ΖϊδœM­H.£;—«·π¦bΒ:ΛΝ§ΫΌe7žhx³a¬Χo5NΑ,Δ DξQ/Ζ~μHoiϊϊ%o‰‚ =D°Oη]π+ˆόϋv•0‹wΰΕΨύο,vΞUtޏΉŸύx °cσ?বEʏ©ϊ­&ιVa"Ό δ*2[»Ή,NΡχψq?Π,‘¨ØK6μMη)μyΨ λΤ~”ΘR/:ΧYDίΔάί °.λΒqG/sλυΖG]œυoϋC¬£€k°‚ΔΛλ\ϋ“ξόΏΕ:<ψ(6Dά*jΗTυCχ팍‹κ£™ ψ’ ΡΠ|Ο;#BδΝ9Τv9&ͺZύο›°ώp€ΆG›Ήn==Ξ_'LalGε‘UΤκx¦>έ>˜Uϊ{¬ΧŸq˜Έ-HΈφ˜aχο&L8“††»«KΎ+œx&Q+ξ<μ™x{ήΕ@Ϊκ»jϋ™ιΨΗξLΐκ©NΕ8^”pŒPš™°―hΜfμˆqξ&{τ@¬―V¨u!ΦΦu!ΦŸ·²oΔ,ςl`οΉ η}1V·κ;syƒH8EŒ~NEՊFΘβ!jŽ"jθwα”E!’Ε)BdqŠ$œBŒEΟ‡‘pŠ$œBΤ2€} G‰>˜’Ώ‘pŠ$œBΤ2 Ο ˜x !α5H8…¨Eυ›"ŽN @Β©£ˆ£ˆZG§¨aBσ$•dΔΝrΝ…("έXœ€ι˜ψƒX›α©ξΌ3°Qy†±Bλ°[ŸαφOuιΗ‹Gάό±`ωq4’O―ρ…( §ϊW8WΉωΤ\s!Šˆ·8gίΕ„lΒΙΐ4μ:ΈYn>³GωΑΔΣ λcnύ)`5φl/uΛ«eΐJ·Ό­Œ9k2γ€+°ίΆ?Ε –š,`…/Œx&b›ΗR<ώ?φψΪ³wp!$œΉζB‘•˜…1 8ΊΝc7+άρ«€5X'«άΆ.ΝRLΌ–Φ9`6° °%°°΅ΫζΧ·φκΰχδ)IT½ΰ.Εγ₯ξ˜ kƒs€-Nή*χL§φϋδ *yroΞΧAΒ)D-ov£}μγ1ρτΒκΕt&&FΣƒε!Μ›Ϋ7ΕM›·qέΓάT–E=R{G°B€ΗN<ώ?υ¬Γ _{Vˁou—eQϊ΅ŽοΉΐίάτΌœσ"D―™B}Qrێζ·aΦν,ΰ~ΰwŽM˜˜x6`V«'.Nk‰¬i01 λ‘}Δγ &žε¨nWˆ\Ω +₯ޚwF„( Ηޏ‡Ν€ηc"6 •cΎ„9²φΈ?οŒQ0vΕ¬ΑQΰΑφ/»mΛ°χGΡgΜΒ>Oζ! Δ8ΰΨ»ρ½ΨΎΙΐB·ο’ηKQ&a +&DΔ'°χβ!j›{x rΩΎ₯‡ωB„υΨ _#‹…ٍΘEϋšιΎκ<lΡƒ| ! Δμ0£YB!*Ξ8ΰJμ}8»IΪΙΐ?Hvη !*ΞƒΨΛΏuή"g>IcmœΉl_™aΎ„γvμΕί%οŒ‘#‘‹φŸΫ8ξwΜ½Τφ$„¨0Χc/ώ>ygDˆœ]΄gΆyμp‡;φk)ηKQPόγEygDˆœ8{€5mœa½ωlBο‘}ΑeΨGγŸςΈ9°;ΉhγœJΤ Χδ&i…¨ύάΓχ«9”k.„Θ‡³±ΡJ–οqS'ψvώψ|χY’Ψτ³pj„ΡΟ<ΧΝg^g/LιšwF„((~0„ϋςΈE"οΥσD§mžDˆώCΒ)αBΡU­γΌ¨+°%nΎ Ώ]ήw΅'α’1yg@ˆ"QUα&jΠέ¬aχ#ηEˆ²"W­ TU8? <ŸΪΐ†qΐΜXΪ{{”'!„ ͺΒ9˜ˆ Ό{clί“=ύBˆΚPΥΰ a7_žk.„(7rΥ ‘@U…ΣN-α’{$D@U…ΣΧc.Λ5B”YœB$Puα”Ε)„"Uͺ*œήU+‹S!DͺTU8eq Ρ=rΥ ‘@…s˜Ž½τ+rΞ‹U@ΑABTQ8§bΏk5°1ηΌ!„¨UΞΙnΎ6Χ\Q~δͺ"* ηΊ\s!„’’H8…Bˆ6p !κα]΅ " ŠΒ9ΕΝ%œB!R§ŠΒ)‹S!DfH8…υPT­ TqΗΝoLωΌ0ΝΝWζš QΪΞaΰΩ φΟΑ¬Έ³?/όέ₯L°ύcΐ­ΐ|`Ÿ`ϋαΐ΅ΐυΐyDcnu󣃴^8γuœ>Νΐ’ΏCˆn(Ϊ°vϋΠΪ{~CŠΧμι–‹ œ~T”U S ‘/ΎΣ`L΄φΑϊκό=p!φ,pιvξfbx5pfΡή†•§bϊQ`;Φ‹εgcB~φZ lιφΏ +A_δm7¬Ϋ­X}Η.ΘU+²a?μω».οŒ8ΖaΥS€Ν‰¬ΟΣƒνS€€35Ψ»ψΐ€ΨωZI·‘%{hΏ©]cyΩ"jΠJΝ͘ΨLΖDνΥnϋΡΐociοnrΛ7·`‚u&€—Λάϊ…ΐKϋέvοNΉΘΝ_ζŽύ[ΔDL¨Όxp ΙΪ£11 0»Ω’CŠVΗ9Bδ™ΩΘϊΌ6ΨΎ/p90 +\ή‡6?ˆ?f:ο¦…bXœƒnΎ&Χ\ˆΚЊ goLΈή|ί-Οe¬h¬ –G‚υZι Λΐe˜€Ύ ³^?€;έΝ?ΰΖ…sπn·|F y’Š&œ!Ο –ζζび01Όxζύ9ίνŸKΣj:ˆ„σ ΰ‘΄DLqσ΅ S Ρ"yDΥ^…ΉoΌ«φmΐάφƒ±—o ζ¦}=°“[vΞχk’’οK[Ηy8ζΖ½‰βΈΟDu)²pξηζλˆͺ*^Y’Eδ ΊΛΝ±wΥtP¬ΐ IΨ²žήl©y…Ι£­γνΐ`u›˜«φr·οBΜ%ϋζΊΈψ π3μaά <ιφ`%αΟaVη—έvΫ|PΠ·έό"ΰ…X}ΗƒXpYiύ8Ρχ”A8o&ςθμμΏ9XφΑyO΅‘.άVα¬η¦}&Φ”mΑΨzΊV}Κ]c Q°Pž<‹ΘΥ BΆΓβFή‚Y˜GcU^Gcnθ8›aΒΉ=ζN:gœΨ½žΦ,‘(γ0±τ‡'άΌ₯^Ρ?‚=wΏΛ;#°Bσ(fΡ‰lια,r_΅ν⃄<ώΟkΤiƒiγ›ΔΧ_Mn˜Jτ g1‡ΉΑ\ψ³‚}7bƒz„\HmΣ«±ΊήΥX½ςŸ°¨b0χτ'±¦Qk°(δχΖΞ·eεŽH ςΝ`•½e ͺykΞβ„.€qώ'bχ3±°ς™Α4#Ά<€Δ |ˆ9XΘω(QHψΜϊπIiW`Α ­€ε@g±Pη½γυ˜(Ζ )“°Θΰ³°6ϋ?Ύζ–[aΦ„ηD,ΰj ΤqϋOΔκmΕϊI.&ΊΛŸΈ4§bΝƒ.ΒΌίΓzͺλˆ$αœλ.g#Ρ°<ˆ’¦Βˆ΄0ΪΜ·-‚Hpϋ}©|•;jΫ yAϋρΎαr("ΎνΥ°›a’vδΌ=6zΚT—n08f*cϋα,2b= -ZSΤ"‹³XψoG•ͺΞ Ϋ¦cίΰΕXΧ«ΏΕ’–ΤΖygcίξ_ΈmwΈω fmΎ‰¨7»{°vΗG η—°€½-/ΏΐϊX>§|ΤLŒ°ΡD"Λ}&>’ϋθΓΗ‡°­/ Lpϋ|k°–NΔ:ΕEΒY,|a\=ωδΓ―±NŽΖ΄Αϊ4nΗ‹vΝ}&Ž—c‚ψ(ΦνγQ_ζ!wΛ7cmόœ€΅Eώ#φΎ^ΠF^€dατ=h¬" °ρr¨€zΛ‘ „Λ‘Τ[†Z—½8Adι.Ε„l[^εΦWΈiun[χΗ$΅§*"ΧcM›%ΉγŸ)Ήj‹χh•Ι»T%.ΓΖzέΑ-†5y H3’p\θ!uΗ=ψgwΎ/aμή·Ν›‚ιΡ XG%©ν«+f»Œ>šΦ EΧόϋO^˜wFDS†±JcΎƒaG;A‘.ΐz Ϊ³6οΆ φ_œ;ζ&’{@ς\ƒΥ“aFΠk’‡`ξݝ€Ηͺ#·o)χ $YœήΚΤ ―ΕΑΧΛβ,>²8‹…\΅½γ—Ψs:jƒ±Ύ‹Υqξˆuσ·-?rΞ|¬?ς―aνο?Œu\αΫήξ Ό«£|λˆc,Ψh5p2V_ΉsΩb¦‰XP˜Χσ@wν!·μϋVN…½°ΪMΝŠžρKŠ3(°hΜ8μΏJr?‰ή³κ₯W¬ΔξυΤ6›‚Y—c–ιΙX¬·8ηuωΈλθζjγpŽΑš‘¬s癏Ήc{Ζ ±η^^T4δGΨrxή-±ϋΏT―–?ΎΛ½[ςΞHΠ©p–Ž€όV'½ΕΑ»j[ι/Rδ"k‹ƒ‚ƒ²aΟζIžffσ$ε"I8UΗYϋaΙg΄v'¬^ςδLsΤcdq–ί©„„³(@¨8ΘβLŸηb͏j!νQ˜§l‹LsΤcdq–YœεBΪβΰ-N gz\€E°EcK~6:ΐιYgͺ—Θβ,Ξr‘ώj‹ƒ·8εͺM•X³s°ώi=―ΓΛφρ­±Nιe³Fg9PpPΉpΉj³Α7ω`°ν ¬ˆοψh7―”΅ -N gqΕY.ό»Sω°ό Wm6όk{0°[Βώ€W`ίΚ ν˜$œήͺY°Oδƒ/dq–?”έŒ†©D/Ψ„uF1Žκ?œ7gc| aίQΨύΎ€ v?™τ ω‘ΓτoqΚυWόXͺ•kΏVRδΝ†σ°Bύ{¨-ΤO$ :£Χ™κIΒωΈ›w=JΆH ΉjΛ…„³XΘ]› K±‘‡·`]ƒώΞ-W2(Θ“ΤΙ»„³xψ³,Ξr α,Š¬ΝŽ3waAB{=  ς4²8Λ0PuΏ €­r!α,²8³γΨ@ΥιΙAT4(Θ#Wm9πƒˆ/o˜J g±Ε™-ίss+δ‘p–¨΅’a*Q$œΕBgΆόV8l«dP'©Žs±›o‰…φ.;₯ζbΰAlΦ΄‘ΕY.žpσέ±FΰKέ΄ΜM~yMβΡ"mU›-‹_ {ΈbM6ΗϊΟυΣl¬Jμ.,¨ιh_’pΓΊTšζNT¦χ.Α~ψGσΞHΚxα”ΕYΆΕΪξ |·AΊυŒΤ%ny5‘°.Ε^βuDmz—»kl zGWέδŸ••.Ν&zSπšA­ε_ŸI­§+Ύ>LνΕ³bηΧ\zΟ8j­|ΏΎ[/²«vgPϋŒΑΨgi ςΒy61„υο<θ›ηŸΏo"Qοv~ίT¬P4‰(Δ?'ΣάŠδf-δeVXό1MN° ”" η$’Rc?"WmΉΨ Σ_BτqΖ>βα|2Vνu žpŽb’ φα\›v΅‚_ŸNύοH‘xx(οL4`φ\μ‘wFRΰkΐΕΆΕΕ=Ηxα)k6Obž‘'άςγΨ»°°°3πB7]i$œΠyO5γ°ΓSXIjQ)i>p‡Ϋv0φρ8ψ4эά†½€―ώΌ ψϊΌfNόήsp¨[>ΦΝχ59μγφQ,€zμf~8ΞνŸΤΒ9βlIm}ργ 6CΪrρcμγΡ¬°7…Z1υΛ³ˆJΨ•ž§΅ευ₯ν°”ν­»°Tξ…ΝΏ‡Έsϋw»•w;x«Χ·~βλρj|έ[ΫυΦγΦWΈ #r‘_Žξ₯V\`¬… cEΗ[_žπ™ΪgΖZιIηŒ–©m>ƒžFž‚ίήΉ‡ΫQ•χs„$$$AT.‘HΈˆ‚ * *xC‘ b©kK½@‘oδ'ΠREΉX V­ZΉ©ΘΉ ‚’Ρ’C.‡$p~|ΧΫY{efο™}φύΌŸηΩΟ̞Y3³ζΆΎ³ΦzΧϋatq Χξη τ>­σρ½΅gΞjΞq-}$μ7ΚFl\œΦ—ΆUΈ;d¬J”oc2pΊ)ΐ·‘y²1Œ.ΜQθAΨxψP’f5pLΨίtu p0κ;:]¨GΫ}ψΧ$?eΆϋΊΠ €Ήθ+γψŠϋΈΈ ϊ9pH˜ϊh–kΠύ8xϋpc#T=}ao μ„§Ώ’4Ϋ’ΪρμθΧ΅Ν~α>τžΟλvFΖΙ$jŸ‘Ω¨¬ŒŸ£­£u½κ ρ t?/»ΑΟΓ―¨x ¨J{9zΑCWρΛ5–Ǐ kβ4ΓΡ)H¨DΛ†ΐΗB™ g™ν¦‘/’"£ž²ΗN…σ%¨yθοP΄8Ίΰψ1Ίϋ5Ή½γ8½Οƒθ=ŸΫνŒ8|ݏ£E_‹Ν:>ϊjz/πK$ΐ`]λ€;“w ƒŠΙš#­ί5[]-nv¬“Ÿ2ΫΝCMΧ’O³ΗΎ x5ϊHψͺu_‡š".―³]nδ8ƒ•Ηkλ¦r:E‘5vQΉΩ°H?@±M˜ίΨ2']jέ–g&žg¨g\fΈL½ν†rΦUέG k|;jΊ^‹΅*Φ7ε}œŽ3Έ˜p>[7•Σ):&œgŸC5«‹ QMνEIΊW%χώH±0<ŒjjϋDΛ†ΒvχFΛAΈeΆ»u(ΏnœΗNω2.z πΰύaχΤΩ¦λΜο gΗqΪƒ•]^γμ …³ΥM΅ qkKPgπΒόΦԚ‚ΟA7_^ |θ1 œ|Y§>‡ ‹ή₯{5ΞA"σT‰νVη"«ΩUhάΞ&ΐΐ+;e&Κ%θ:Œ›Α…Σqoͺν-*;Ξψj†l‡œadͺ²d}ψ ΅5Εaΰμd»ΙΐgΕ¨ψKΤ³ ͺ횹ςΌ’Ϋ 'ΏAλΙρΛμ#5j%kΠωΈ£γ .O’χΌΥC„œζ8 ݏ–έΰœ°Α?΅!3y’θ3™ΜkŒγ8ƒΛ2τoά(‘ΣNGχγτtE£>Ξf 8­ΓsœΑΖ›j{‹ΚΖAγιγtZ‹έƒ•uS9ŽΣοΈpφ•ƒš΅ͺ-ΓmΨη γΒι8³σπα(½AaΧVGqZέNΗ\†pŽαΒΩ+tl§ΣzΜA³ΗntœΑΕk›½Geα¬κU§_9λsΤF!hΔ—ΒvΆ#S φρβΖAŽ3ΈxfοQY8»qοBb4|-YχB²pBcΘyB+Ψ5LC5?°/ Σ;Z”zx§γ >.œ½GΟ ηjΈΎ6Y!΅1ΡnmΡqM8o―°Ν$²pkN―q:Ξΰβ~j{ΚΒΩiŸ‰»’=8£ΐVd±.ήF­ΣχX8·A°€ϊοGž“}-pSHsς5›'€[ x›„c> œνo21λ„pΊqγ >ξ§Άχ¨μrοoQ“θWΪ’u9ެφβ0=Ψωz]Š‚c[Τoλ{}™›ͺ$šΆŸ/Dϋ?€Μmέ $²OGiίν <–ύ ψςΨ3†άόu΄]κΌΎX?μ%t§oΩ½η‹»η8έ“₯+z₯©vχ0} $ΐΎΘΉϊfΐ‡„ε·‘“Yψ2Š ~ ͺ₯Ξ. ιŽ i&!²λ‡t/DNηγΪβν!έ•(χ7€]w VύWajύ›OPλΈΎ]x§γ >ήΗΩ{τ|§ η­ΐ (Γ‡G ΣN&X·…ι¨Ζ p*ςσπP˜Nf‘8˜;„e=Gf»ψπz²ΐΤG„4c(4¨:k™pϊpΗ\|8J}ΎKV‰ι•=uR87$¬Ϋ@όΕ±\  lOZΛϊ7wŽφ‡6ƒŸΕ¨w—hέmΡΌ‰© ΰK£uηδδσΡdN―q:Ξΰβ5Ξή£²η N~ύΌ„,c&Š?ӏ"#έ’τ–&ξ Ψ.Lσ†jŒ±ΰ˜eξ>dΑ΄Ν’φρ(έW“Γοc!ΝUΘphσ¦SΒiΧfuέTŽγτ3νΞId‘ΚΦCέ[Ζ!ΐΟPKάΐ“f’rw%Šq|#2ΚE»ϊ"κ"ϋ#πgTρˆ΅eΕ\~ˆΜ8σ=Ι1†€ΏFv%‹Θ†^ Ό8ΜΎdκΖ3βωVQΩ8θDZ;^²ο#»&J"Γ 3ϊ™-Ϋ5±š8ή‡„ή:sνdη‘=|+μǎyxH·zpΖPMυΫ¨Ωx)²]8(Ϊn§–œ}c>Žwb‡Žη8N癏ήσ{[ΌίΙ裍¨»ιΫΤχ;U6ζ’Φ΄«P₯ΐ„o:*_OBv$ΫG…yp Λ†P%ζQΰCΡ1Ξ@eο›‘(Ώ π‘QšO ρ^ς²΅ρ σšj/GΒ*ΧίRχJTgtOξ/»Α)aƒOΆ8#y˜m=C›Ÿ„4?M–ΟF–°«€;‘!QZ΅> }Ɍ†}Jν—‹±+z°,`υ"ΰ•1¨:Žήn'LυŸ;t<Ηq:ΟΞθ=Ώ»…ϋœlD.GFΧAq¨kh-YWΨΆ!_σ ‡ύƏF.€lMVoHœό0:ζJj…2%O8_όψ;d'³ΖhΫ£s μ&,oa&œζ8έ‹ΣΊœΗqΪΗΛΠ{~[£„ΈUL†Πˆ‚ X׍κN¨yv ™Adσεθ[Žϊo–GΛFBΊx»§pœŒv”Ήg"£Ηλ€W#ΌyM[„ΈlŒy~Ά‰5cnΏ3Π¨‡Γ€_„u―Jξj~#Θφdςώφ«‚|ZšΧ…ωDlۏ#W˜½u«]eξ—Π3σbΤ€Ί‰ε"τ|=…ŒvΞC–·Ššl‘(}‰α|TSόr”f2bόΦχdμκ»ό4!ρ4κלŠΔvδήt%p.²ηX, yΩYμ‚FWΌ:Λή‘™H(— ηodΨΩ*¬ΌIWΈpφ>•M’[ΐΙΘΪΉŒ–£dž#sfQ%έΣdΟλ3dÐʦ3wŽΖr²–8H8μ7‰Βtτ’MGBS&Ν šϋ˜x†LLSq}‚LάβΪ»‰Ÿ}ؘψΩG‰ίa]ZSoϋ fB†0Qig™{u4e4ΏyD;YΝ.C2{Fi–‡ž‘EHμ.‰\‚>nCοκEHΣ‘Έ½ψ,z§ο$sc rN³A^_­? ι=θ9jΤΖE'?ΌΖΩΗt£Ζi͜jy\‰—9έ–Ϊ/²Xθκ₯λgZΥΜZ$ΟCΓ­6Sϋ=?ό¦£fΆNψJ†,€ŸέΫθƒΞ>dV‡eρ=Άkdύ}ˆΨ3ρ ͺMΌ(όί$€¨Ž>ΊeW2ΜΊCλˆζ‹j€υX Ό7όŠψ"Yν1σώ™‚υΏCM²Δ…³ι†pZ-χFd•η΄k¦­Κ21MΕuSτήΖBΧ¦S![‰DΜjΥkQA‘ΦΤΫΑgΓt4&{>^ΠΜ5ιwΌΜν=šΞ‰ήοΠ tS8;Ω<μ”g“ϋC£„}ΒκϋΌx9jΆ”Φ‰²ΈpφWγ4CλŸ1«ΗΨ2rŠΆ‰‡rρ.œNwAοΓζΐ7ѐ¨K™βιΒΩ{TŽb΅œ£g‰Y[š‰ύ,²£™ΫCftπ4¦₯dM&€O‘‰–5c. ˞&ΆΨ²s1±έΉΎϊχP.8½ΙX4Ώ •K[£―BΓ%:=v΅ΣτkSm'Έ…—|ωνΚrc΅F}œ£h@i+•:‰Ηš ογt±‚εFŽ[‘ΘH§‘Αρƒ,žͺqΎψ*lzΗ‘°aW!Ώ΄½Ζξaz{έT­ΗZώάBβΖAΞDδ $ž[Ÿ ΏS\ρμD™ϋ—hlΆΣ6£ΕΉα· ½%œ ό½ = Φ£Bα,rςξΒΩ;Έp:νδ2j½ΐτ#‘άy΄9Αqۘξ¦Ϊ‘cƒ©(LΦ›Ιμ*ž‡άκΕ Ά@ήzA-#οο"»Q‘Δ¬!»GUχ΅ΉΫϋπŽd…3ΫyCeΠ(†ςŸΛ]ŽX>Χ©@ rSνΖ¨ιαyΡo“hYv/ΟΗώPγωΨiŽX4Η~Œηm<-ί«vΠθ%>Šw_Cύ§}MGF§£¦΅©(πm<”θXΰ=hΘΣ\ΰZΤ€σω°ώtT«8Δ»!qώ3€ω8²ό0 E΄™ήΡθκ!$–―Ϋδ+f*z‘οAC­>Šϊ_vKΆy/οχ’2y―J£kZ星BvNE^zͺsάFΧ Μ½.ΒZtώƒ|―YyljΫ‡γ½₯δv½Ž½sSκ¦jŽx ψ6Ρό;ΠGζ9H€ξ!{WΛSΜΚίj‰ £u±>ύ/»―ζ€±u&œ»Gλξ }z ‚ΖžƒφBAKγΑωqΑnβδϊΗΫΕBaΫΕaβνβxρv“Q­b ωq γΠJύάΜll„Ύ°ο’ؐ«4ͺq.@‚ rΆ5ω|+,{>ΊχίA_ž fΜΟ’}<ˆbφŒ„s*ͺΑΎψߐζΤ_r,‚iH0O"λ£{(췈2ωŠωzςh$D;Rϋε~Y|ΒυJδ½κε½ΜυšŠj£ο‹, qΠίFΧ κ5ΉΨ>n†-ΡGΧCMnίKXΛ\;jœΏˆζOA‚szVχ ΛοEβύx”φ«a9¨,xϊΐ}!Y?i,^&r6l€κΎα&ρΊ;Γ4ξN{}΄ΟΡsΠͺn’¦jœiη*²/B\ί9V θ«ΪΉ¨ ϋλπ  Θ„σT+ΉΧ’Β{q΄Ÿ;©εΤΔΈ12™FώθoΒt*°―-sBς³ͺ₯½Υ^­bkj…3žŸW"οΝP/οeŽΉ-ϊˆ½)Z7Jc£³FΧ κ59Υ 5ηq) «Φ ΪΩTϋStOE†VΧ‘²}ΩΉ‰Φ VΉη7Χ‡ωΡσ3 –aΒΉ1κΟΎ2!ξϋ΄γό0ΪηΏ’–žΙαψ›_‚Κ4Uγτθ(½C7†£Τ;ζτ₯ΧT¬ΰΫ Υ:ΖPί؞ΐAΘ€θSΘ!΄}ύ¦ϋŽEΪ^ζ]¨₯˜f Ϋ2ωŠχ?H φD}lΟ"±I?(F£ω2yΟ#―i3nb«—wϋΐ-sΜτ‹Όήz™kP嚦,₯Ϊ‡OŒ]―ΡΊ©ϊ‡v6Υކ‰ΌΥΞ&! Ϋ‡Pρ7CΊΕhΨΗΗQ“ϋθγύ¦f-™ ’VΘΉfχeΔλσBΟΦaŸ/FΟε…ε.CiκΦ8‹Έ½»΄83Nuf’{Ρξ؈1{‡cސ,_=Έ'£―Ζψw;π±:ϋό9Yε0j~Ž9½ ΪΣJ ΎKs|4…Œaκη+fKt ζFΛ^–½=Z6L­AC™Όηρƒd? /πzCE,οeŽ9@qŸΰ*8‹ŽQφ嫝Ψ‡FC+ϊ…έΠωάΪνŒ8€ZΤΖP?ϊ:Έ„ή§— Ό5‡\Œj6ρο dμ3 ιiΘ<ό…θ«s.΅CVζ ~ΝΏ@ƒ―?œΦ­ λ> |‚μŠšeώ!Js.²ζ<&μgj_?‚ΎJη„|οZ"_Ζc¨[Β,s7AMCŒ^Κδ=ad%ϊ|t Μ"κ_Σ2Η\όϊR·&Χ“5―εQζ”ΉΧνΐš4Ÿ©›ͺhgS­S¦ϊ8­‰Θ„ΣΒzΩԌwΜψΗ¦6oaΓ&'Ϋn€Ϊ΅Χ'3ϊ‰‡₯²V»?Μ·šadLrrφνL ¬Φ»y'ΪΙσΡ8τ»€? [§»,@-k— ΛτŠjœ?AΒi’iΒbS $›ΪΌ Φκh›ΡΎΦ’ K±1‘6Tev˜Ξ"ξbSΖ’ • M\γ«_‘s„ϋͺuz™ QΩ0J‹ζξhμοQ¨ΌΖΩ+Τ-‹„σΤaβΦ―XΣ±5%[³Υζ¬φg΅Ε2❊Ά‰sϊqOΣ‡’©}hδM˘χ· N§—ιηώΝ©Θπδ8²ΑόΟ’ώcπ>Ξ^ΑΛ@§2›£/ωΗΊΗΙa3ϊσωά Η0§εKΠНmP=F~ "‡ ϋρ­Ό•tγζτνt8ν8γ₯_ ƒ~’”όΓ}ZWƒΟ‘wnε\:ν£©¦ZgbγΝN/ΣλM΅s‘#ύkȜΔHYM•£ί> Zu­AΦm»b5ΰfΣYw[μΎu#ΤΕ΅u CΞaΩSΡ|Q€ΊΓƒ\8οFοάtτZ?Υθβω!ΝO%ƒ",PG,Tζ€&%³ψγ-Η±™MάβΜ&dζ€²‘Eϋ±ρςέΒjΩ£λ·j5ΈߝŠ,CσΖΙςaδ™ζ<τ>ŽšM7ώz ~"_Δ !·z‘ζδ’/f t<φ{ŠΌ{‘ΉyΏ1A‘Δ–!‹Ε& Μ Š’1–όζ!ό ς½ϋ ‚»ΞΉ^φρί rV}+YɍΤΖ9Lχρyΰ‹d1bΟ‘φKΆΡ΅Ι;‡’Ξ>~· ΛcgΧg‘£/sύΛ€Fnχώ Y….>IsNχ›etΝ:ˆ―ΚFhΙeδW6ήDΦΌ9~ΞkϋμkŠ 2;ό|˜K5vAχ"υ©ν8uy=8i¨ža$Ÿ@ΧΡΧ启Τ]Βt5 =eœ δ7#a{gΨΟ‘QšsQΔ†7 8—!­'œG#ƒŒ]QPζ;¨¦ο’Β>ζΣ¨ΰ? ιωθ+8έαpǐϋŽσ$4Ό`{4€½ΘΫΛp8‡³‘?έCΠΗΕ‡’4eMzΣΡ—ύ+ΓcΡ=‹#L܈ξEΩc”I3ŒDυHԏ΅ϊ xgΑω·ƒƒΠ³ω½6cCδΘώrTσ²–ΧΧΫhœά…Χθv@χβF 'fzp^˜,&«y£πSΖcχπ**|ސlwY Ι©¨@ώ›hύ$nυ„3ejnΪ9Z–ŠΞj Ž,Οw'ι†Γ/f[t]ΚΊ"fέ½§ '(wm _όφͺ™Ÿ†α ΠuXϊήΚ^2ωFA«c€υaκρvtκωΩLΦ|8†> o@-+­Œω˜ςΛpΌ=%tΪΞt/Ι[ι}œNυ,koKώ‰ZqCMxΟ»h9mQβϊ$Ο7R‘„œ}4ΈωgΙ›PσfΩ έE,φEηZΤ|ΎXφͺ‘ήŒ>"Κ/›4nβγ¬ϋΥNΪmUkF:·"gϋWQΆ]Έ£χή‘(ΠΰΒιSO8Χ$Η –Ysi•ΰΞ­΄\<ƒ„tYj5žΐΝqΎf_ƒ„σύHμg ‚~!°³›Π})sŒ*ωΘ p_’°ŒΧͺv…›;œό8¦—’ZυƒMξΏYΜ('΅+θρp3iCVβα%UΦ™±Ε–°Pk¬™q’aLPkh΅J Ρi–ΊQ©\8"Z9–σ>τ ΏβBωaτβμό.,B΅₯…ΫΌΥ,ΟAήX@–Σ‡}5΅Q~μXϋ ƒ ;Φή¬Ϋ4[ΔΝαw ά|ΕΒωΚδ^¨/w„rΧ&ο@5ζ Qλ ¨PYˆΌ,!k>/sŒ²ωθš΅ͺέ Ε<=’,8χRtγ}=Iυ!O­ΐŽi1U~’ œH μ7₯Λ6Fc-g’ Ν¨'ŽƒŒ e1 Έ•ΣςvζΒιΡJαŒ-?š§―B"w>΅–ެO«Z>β`ӏ―ϋZΆ95—>ŽjΗ!ΛΤ·68—‘!ΜχψΝG…π—λl3]Œ ˜ώ 83¬+smŠΞa9j6™ƒ…Ÿ!C₯#A-{Œ²ωθͺ6ΥΞDΟΤΌhΩοQμ•φΣn¬ΖωΖπ‹±ρŒνtΧβLh¬/±u6€$^g΅B[gN sš΅5UΘ’ZιΨSs΅Pλ„²€Ζ j){½ΖιT’ΥήƒN§;–aέ€ΦσSΡ‹{1z‰ξBΓ ~Ϋΰ<š ά| u Ϊ}1ΥƒvηΓύΘPkO²Zω(‰=PΈΚ1Κ€ιͺ6Υ.Cύπ³Qτ¨»—{@&ZΧ λ>'ϊmIVΨ/GχΖ\Ι- ΫΪ‘θgΛΝ3N,ŽΦŒš6‘"ζΡȈ…Σ"]ζ<αqt*ςSτ’½¦Ϋqœ„AΟζΗ“ε룑3»εlσ|Φmκξ5>ˆΞ+΅žΥ|,Μ‘ΣΜωΓ:΅ΞNvθ;ύE/ω«uœ˜΄spj©ψ&ٝ˜%δ5υΦΗΉIΞΊ5¨yΎŸwχ…e WC"\8^Εϊ87C°‡“‰ιύ”7πκ5Μ^·ž;b5Y?k EN§N§W1‘όY‚ο_@’Ω―΅2«qΊpφ…c9]8"\8^ΕjœΧ#o;’!FύN³5Ξ8T˜m;+Z>Df‘jSŠbγΝ ΦΖNšεμRΤΔmΡVŠβW"ΦΰM΅Ni\8^Εj_ΎΪ͌΄s;Ή9*c֞6l#Ύ™Τ f'1+\‹zbֹːȚ؎ £1aΆmL˜ΛlΣ»>ρυ°ϋ@0«Zkz΅x 6Ζ†³Ψ5Ÿ„Ίΐ…Σ©@7„³›AͺΣ€Ω)ύ@»ΥτωχR<ΞVς$&ΟCŽΚbγ(γ‘&O%SπΏ,J™`˜˜°˜ΰΜ&& Ώ΅aψuͺI9­[žγ Ϋνβ^rάiΊp:E ηD ¨œΠξ•λ0ΖΝg_ήׁΌtŠvϋͺν'"?Θ/BbaΝ¨ΦDjS«™ΕŽ:‰yJEvV˜Ξ€VdΝkΡ2‡±0[ Ϊj{ι6…_‘Pη]ϋ`°sΜ`΅c«ωšk>«E§Χόnj]ω.œN1ήT[K/yΞ‰Y Ό,ϊ YφŠhΩΝQϋ±grΠ‚ ― ‹ŸΪˌ†ίSΆˆT S‘λ8>ŽΣ)ΒΌͺΔƒΖ/EξνN zPθ2iΡ(h5” ΄œ0»Ρΐς8œΩ₯δ_‡² › ^Δs(ώ¨ύ,œύΏ7δ³Υχ¦J0οVγu‹θϋ2[DζrqzŠ+Qœφ΅4ΊLšF±6Λ­.hΉLΐμ”4oyΧ‘l θf—εxjϋώΪqoͺσn5ί@Οζ:žγ8N)~ §—'Λ› ]6pt#αLΙ Zέ(ΠrΩ€Ω)„³J θͺΐ« g»ξMΥ`ή­ζ’pόc»t|g‚γM΅NsΒ΄ΡψΈ2A‘«ŽΗN¨yv ͺ₯­@΅Κ΄f–hyσ(/ΝΜnDz,ϊŽ‚UΗT ή,νΊ7q0ο«‘Xo1ΞΌVΑΌΈlT7•γ΄ N'©h ΣΣ”KX&(t™4EXΠκΗP4 Ιp§}]e-W ˜]†8τPς››€­|Ό΄ϊήX0ούPSω»QhΆW€o5.œNWqαtς˜ƒ όί䬫Ϊ° ΠχVHӈ4hυΤD›/―qΐμ8/;η'/$½q θ^‘έχΖyο‰ ‘–KαΒιtŽβδaΦ‘δ¬k&(τh‰4(΄ΊΝΜΞ#ο:΄3τ{‘ΦAΆ)sέ›Ή7Νσn%&œνόξ8ΉΈp:yΜ ΣΌώΝfƒB78Ϊ(΄Ί Ufη‘wN§} ·φjb»vά›f‚y·―q:ŽΣs|υcυ‚{5ΗI9=ŸWt;#ΞΔΔϋ8<^¦Ώλj.'ψξ5N§+Έp:yΨЍǺš ΗΙge˜Ίp:]Α…ΣΙΓΖšSg0π>N§«Έp:y˜p>ήΥ\8N>ήTλtN'ΝΘ‚Ν:N―αΓQœβΒι€ΜD.ιZέL; œέβ}φ“А'Ιχ\„_»ZΌ©Φι*.œNŠ5ΣζEqΚρ6δ8`4ώρφœ4~}γΒιtw€ΰ€LτώΝΙ΄/@ς\δT’¬›A'ŸUΘcΤδΈ!Ο7±γ8NΗ85#~#gέ₯ΤFώ°ΞeLΗ͍o ι ΛNBρ,ϊd!·wρΉ”ΙΧαܞ@!ΏšΙK£`ΠIνu{(g—’}‡ΓΎΟA.σ‚s7“η~f9Ί>ήΟι8NΧy*Ξ+XŸΧ”X6ΐτΩQϊΰ-Ρϊ2A S>DqA8φ^Τz;*›―Υΐ1Hό¦7™—2Α O¦qψ²ΌλkΑ―Ο^ό5η88w3yξgCΟi'Γ™9Žγδr*N-X_¦(ΐτΩΐ ¨@M΄lθτ+©ζ°(_ΓγΜKΩ`ΠγΟ&ΛΎMmpξͺyξw~ƒžΣ4Φ©γ΄ογtR6 Σ*V΅;Ÿ^ lJΦ„Έ5π«(έ‘a{QkNΙ mfΫLmAΎβωfςͺ@έυΈ5ω2׈ΝδΉίq!§kΈU­“RΥkP•Σ· ΪζΡΙς*A γγΆ*_£γΜ‹1ž@ݍH –β@ΧγΙsΏβc9αΒι€l¦Ο¬O8W 0ύ2˜9ŒΪζΘf‚@Ϋ6―+XίlΰλfςŠ@έFz}ΛΠ‹A΄Ϋ{rΊ†7Υ:)kΒ΄H`ΞOP-ΐτ}ΐ~ΘzΰQ_eΥ Π+s³h, Ηήψ"ΝΎn&/­ΤmδΘnD3yξwάΡ»γ8=Γ¨π°‚υΫΧ‘¦2.qώ°Υ°G…ώΫ£να(;"q;7Zv\ΨΟ3H€†7ΦΙλp"κΗ[ϊύβc4“―fσ2―^Lώp(g”w}σςxpΝ8σάΟ\ŽΟέΈγ8ΞΧPτngΔqκp zN4Jθ8­Ζϋ8”FM΅ŽΣ ΈU­Σ5\8N§°>Ξi]Ν…3!qαtRΦ†©Ž9½ŒΧ8αΒι€xΣιΌΖιt N'Ε…ΣιΌΖιt N'₯Β遙ρβ5N§kΈp:)„σ ΰL`ݏN‘η½—ςη΄―q:]Γ…ΣIqγ §0ατ§Σq\8”fšjBήLl·C΅½ £4g?Šώ―Gύΐ̍‚P_Šάι@mΠggbΰ.χœαΒι€4ΞΕHμžEξΦ’pZS€—‡4ϋ"±Ϋ/Ϊn_δOΦX€Δn?ΰƒΐ‡‘XSQ?θξΘ‘ϋ(p5Ω3{4π=δ#Φ"ά_?gππ§γ8=ƒΥΰ«NωpJ˜: ’Ό Ԝ†|ΙξΦ7 ̜G^κ2A΅ΑdzNοοvFœ‰‡Χ8”f­j’Z%ΐkο7‡e{‡ύή₯Ο ΜΌyτ'Τ<»E4Yšw·˜/g0qγ §kΈp:)γΞ½QΤ“H’¦Ψ}›’}CύΐΜU‚P;oͺuΊ† §“¬p^ξ$ΰΤΗΈL8VΨWΩ ΤΝ}v7rΊ† §“¬p.nCαΘ,HυΟ€­€WPM8γ ΤP„ϊ‘°ο9ΐ¦ΤΡνγ‘“ΣŒ’3kpœŽαΒ逌gηOP!Ά0ό~Ž+ί\°Mk€Ώή‹‚Pί\„ŒbΞΗΈnήΞ>_|Yλ:ƒ{r§'8υ7~«Ϋi1ŸAKΞΰ°χεtχγ€ ͺ“χ}t;NKq!§+Έp:)ƒ*œ{t;NΛρ!)NWπ>N'Ε}Υ:ύ‚[Φ:]Α…ΣIΤ§3xxS­Σ\8N§_0+k·”v:Š §“:+i@οIDATβΒ9>ΌΰΪ&œ' zM΄ΜΉε£ΡΉ–ΝΧπ8σ2‰δ‚hΩ°ψZuJ8ξi=ŎΣrΌΛI±>Ξ"㠝€O―DI†Βς­_‘ˆ%W£‚σkQσέβhw&ϋΌ…Ϋψ TπηήV ž‡ ώk˜P LΎΡθ܍#ΝPΝ06Œ™GγsK)seσΟ7“—m‘AΞυΡ²1Τδ½cό΅ ογtΊ‚[Υ:)fU›χQU&ΐτκsΫ ⻁Qt#ε88΅=“»„γΕΏΉQ>ͺR&_υ¨\ϋTΫ<:Y^ζάςŽΫͺ|Ž3/ΖXΙeνΖ­jΰΒι€ΤŽR6ΐ4(ŒΨ¨0Ώ8,Zχͺ$νήΘPhΈͺΌ­N-Νλκ€) r]/_υΆ―rξ ƒ™Γ¨mΒ,sn)Ξ΅JΎςφ[%/#‘Ϊ'Z6„ξ_»-hσπ§ΣΌ©ΦI©'œq€ισΘ0½322ωΓω¨σε(Νddς%ΰ₯Θ²σaέΚ°ξ£ΐΣ¨)q*Ϋ 1ΚJΰ\ΰ,Tψ/ yΩYμ‚šf_Ž΅ ΜΫδ+&έώ‰ηsͺέZPο,yn)Ξ΅Μ=Ι£™ΌŒ†c|Ε?}8υ1Ύ΅ΑρځΧ8Ηι 6@ΝnE_ρ šΪ"TΛ8 ΛΫΓϊ9Hœ£νaΰcdMŽΓΐηQ`κeΘ»ΜgX·vx\8Ξ3¨ή­NDύq«‘qQ< dd„΄"œΟ ς•’n?―ΔΉΫωΕωΨ‰ΫΉΞ-₯ΡΉ6“―fσ2ψ,ΩuL‡£@ηŒƒV£{ΣοΞ:Ηιs†PaΤ¨Ζ,ξ’Ξiν~N§ογtRΖ€gQΑ”ΧGθ8½€5Σz¦Σq\8<Ε_­3Έ˜aχo:ŽΣŒ šηŒngΔq Ψ =£w;#ΞΔΓkœN^γtz―q:]Γ…ΣΙ£‘χ Ηι6>†Σι.œNυΌεΡiKY·Μu| §Σ5\8<κ5Υv2ΐσΐ™ΐ,ԟ΅E‡ŽΫˆ^ΝΧDΒkœNΧpαtςπ>N§Χρ§Σ5\8<Šϊ8/EέN 6ΐ3hΜη9(0υbδ–-φΚΣLΠδz4:^£€Λ!WsΦ½]8Ÿ £4g?Gφα5N§kΈp:yυqά֝GIγώ°nžύ€FΡHŒΣχ!ΡέΉ»ϋυƒ&/FΒψ,r7·6ZΧθxgŽΉ+π3EΔ._βKΎ<όίω£έ/ΪΗΎΘ7l•|9Α 8ŽΣSά‚Diχœuy}œΓΐO“eί&«½54ΉŽW6ΰς/€SΒόΧC~V/@±*W£ΘNοq zFΏίνŒ8―q:y4ΣΗykςΐζa>š<ύNG«›‘ήρΚ\^ˆj•―E…πΝaΩήθ:άάdώœφβ5N§kΈp:y4#œi6Fφ|'hr3Η‹—₯ΔΛ"άyIΊ5,Ϋ‰ηMdΧΒι-ά‚Σ5\8<κ9@( ]f‚&‡²—―G5—“€PŸεB2α\Ψφœ:Νβ5N§kx k'zΟO•Ψ_3A“ΗCΩ€Λˁۀw‘’ #’­ΡIaΩ{€ΏD–ΈNoΰ5N§kΈp:yΤkͺ=Ψ '™Μ/ΉΟӁ%ΐϋQ δΰN4d€œŠjΖ³»€7ΏMύΨ“¬v9 ό£υon μΥ¦|:Να5NΗqzŠ«Q_ΰΫ»Η)ΐΖwΚ‹•γόήΗιδαNޝ^ΗkœNΧpαtςp—{N―γ}œNΧpαtς¨Εq: §r:ŽŒNVM›Κι&Ӑ‡€YΘBy 2‚Ϊ0¬›–m„Ζ¨N Σιa~γd α8#Ρτ9`κK\˜υhωXHχ\΄ύΣ¨Ι9zžlΊ‚Φ4―zΣι.œN&œ‡"+Q «*d…ιhX^΄Μ Ω‰ΐlτ~Ν ΆQσχL2Ϋ‰@UΡλwμ™²ηΘ¦6LH³šLlW‰π«Β~ΌΣι8.œNΏΣ7†_«±B²šŠŒEΛ¬&c'd΅š΅aΎh™Υv¬&el€Δh­™θˆ…mzH7;J_O-}»1‘yŠLl–…ωθ ljΧzZψΩ~›εΟγάήq*3Τ8‰3™AV¨Y‘gjΡ2+γΧDΖ_HφːX›€­"π§Θ>L—!q3‘ Σεa~„u…Ÿ±ηbJ˜71Ev#²«½ΗβΎ  φζZ§£Έp:έΐ KΘj.VpBV‹±Β²€Υnς–YA YνΗ ]#―‘°lYmך —†u&j«Βόš°Ξ[€γ8Žγ8Žγ8Žγ8Žγ8Žγ8ŽΣώ?f­€π΅ϋ£μIENDB`‚python-gaphas-5.1.2/docs/index.rst000066400000000000000000000030561512665300000170740ustar00rootroot00000000000000Gaphas 3 Documentation ====================== Gaphas is the diagramming widget library for Python. Gaphas has been built with extensibility in mind. It can be used for many drawing purposes, including vector drawing applications, and diagram drawing tools. The basic idea is: - Gaphas has a Model-View-Controller_ design. - A model is presented as a protocol in Gaphas. This means that it's very easy to define a class that acts as a model. - A model can be visualized by one or more Views. - A constraint solver is used to maintain item constraints and inter-item constraints. - The item (and user) should not be bothered with things like bounding-box calculations. - Very modular: The view contains the basic features. Painters and tools can be swapped out as needed. - Rendering using Cairo_. This implies the diagrams can be exported in a number of formats, including PNG and SVG. Gaphas is released under the terms of the Apache Software License, version 2.0. * Git repository: https://github.com/gaphor/gaphas * Python Package index (PyPI): https://pypi.org/project/gaphas .. toctree:: :caption: The basics :maxdepth: 1 :hidden: diagram tools connectors solver .. toctree:: :caption: Advanced :maxdepth: 1 :hidden: guide segment .. toctree:: :caption: API :maxdepth: 2 :hidden: api .. toctree:: :caption: Internals :maxdepth: 1 :hidden: quadtree table tree .. _Cairo: https://cairographics.org .. _Model-View-Controller: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller python-gaphas-5.1.2/docs/make.bat000066400000000000000000000013601512665300000166340ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% :end popd python-gaphas-5.1.2/docs/quadtree.png000066400000000000000000000342071512665300000175550ustar00rootroot00000000000000‰PNG  IHDRΐΊώƒ pHYs  šœtIMEΧ $ΐ_ IDATxΪν{xUΆφWυ- ¨r 3H„θaϊq ˆ&rDPΤG§!ΰB>G“DθhΒH;£(3ŠΗ+‚HœΘ-œƒ„αS $‚C! Ήuw}TR©Τ­«οΥέοοαα©ή½χͺͺέέoΦΪ{Χ^Μ?χ}GloόΘ±vm‘π%Ssμ0w΄’θ}":)±?Ρθ+υ?c΅>7iβΔρ.^¬?ώRcCcSS: DΔĘcγboΈαΊ^½ΊοΪypΫφν&"κΫΏηΕ‹WώυύωK—ΰx|Oν§Οώπ£»­ϊυΉ>‘ϟόΡ;ξ91γα„>κλ[λλ[[š[‰ΨΎύ{‘‰{»±±±©©-:Ϊ‚Oΰ[Žž:qφ‡η>pwϊMM&MΤv»γΐ·§ήϊοψhΨΐΑΎ2Rχγ™Α½3Λz'›ΠΗώ³λι"'ΛC$>00t™Lϊ‘©ύα=Ϋ;±Ζ_ߟˆššΪΫ}MY’,—/5σ3οχά{«[½σΙΗ{π(qφ‡θΎ„„^MWۈ΄ŽΪρ‡ξ[ϋ·‡Nς•‘ήoΫξΎηΦ«—›ιΐ)GK« Ζ£g‰θξ{nύμm›qρσ\αεŸΪz\έ遢Ψ[ f†oσΚ+―|ςΙ“D”™I;vPf&„ ΄sg{…ιΣΏύ駟¦O?πΤSO €”ψώΧ65΅zЊˆx…ρ‰ΗΥfΆ•5GG›λ~jλΝF™νbΖμ`E–«­ζ+ΝN;ΫΦάΜΨ[„FZμ-D5Yα)ŸzκQQ»b ηψτS"’;dΪ€ˆs?όεn«ΖΖ‘ΒψΔHK‹“΅ΫYΗU£Γq_aύ}ιΣ¬‘±ΫN†α~΅μe"ϊ0ηqGsKk›“q8e΅Ξ${Κ“'η̝;77οE"ΊkΚ­™™T[ΫiΨχνέ:hΠ 9sπέΈ‚!»έA‚F­”ŒdO™¦ήτ‹-e8Zνd`ΫZ™Ά&{ι©:"ΚΏ~ΞΓφŽ v’ΩλήαήΊπϋKN‡“eΙι=‹‰ˆ†ˆΘ``ˆαΙ ΓP~>νΨ1α­·¨ €vŒ†νν% 1D p?χςΡώ€SO"j΅·δ0΅99­#–ˆ!§ΓΙΙ¦‰ˆ c00F“‘ιzW&“AzeS²FYφOαΤh42,± Λ₯₯,+ϋό|]ν5Ιi΅§ŽΡ/nΥ=ΪhwΓˆβ’-Wν½}ΊϋΫ_οΞβ5ΣXPε7DΤ#&ͺ‘Νξ²ςΪΧ_>TωΝΛE―§ MΆ;Άu―»u.όzCόλ‚Αΐ΄iψ±ˆ0›MDdμ"·Œ΄΅΅IŒ0DdokcX™rκž~2ώε?ujθ½χ=ϊρ‡ΌzΦ=ύ$9ΦΡΒ²v;™ŒFb‰eXbYΓtx ŠŽŽb‰˜Ÿϊ“G%$PB ΄³° ’„ͺ­₯e/όbΗΚΟΟoΏΎφ+c‰˜±γ2ΛΚ>―ω.%νζΪ“ΥD4nL¦“X³Ι°zυZ 1υυΕΖOί'’X³±•uγ{o`-χRVφ9₯ Mnv:XOΟ…ί.<АΖιd=ψb:,ρ‹–„FΎΨϊή±c{=Π‘ορ5;Œ˜ΪKb ,k rΡι Όφ―‘Όzž^°@xδpQ‡—If“‘1π¨Α`2YΞ70g%$΄'$Pν@ͺ%ͺ}‹2ί¦‚βώF“©γKÎ9šˆΎ9°Ζύ<ψˆθ?nϊEΓNŸšΙΥΩ΄y§‘¨ψ΅’MD”•5uώ‚ά§ŸόMΝρcΆΏΌΧ―o³ηΞX›%b]φRΑ‰cߍΌ9ƒ:FI~‘>rόΨL““ύӟW‹ΞςΔSKˆθΝu2mmη͝k΅βΕόW_}“ΏΆΟv’άεq _}υ₯φ/˜·θμ»³ξžΠ1|ΡeΞ₯qηέ k6»ωσ…Š^gκtΪΫάξ†ιy”3’n—3b4ψΪN;Λtύ}Ο¬ρΆ»ξξβΫYΓΔΓ2F~ ”12³‰%†aXaXΉξ-J¨νΡu”π6%l§Ϊͺ}‹θνΞj³‰ϋΙrΝ33o«©ωnχξνD4~L&1eι’2SΎˆξΚΊΫ`1Ρξέ۟~"ο΅ΨΈ-[?{μ±y₯_l$"ώ8.6nόΨ‰†(³‘ΓΧΫϊΕF"zμ‘Η³±ΰΏ^r4΅Α`μ8WYι,¦hΛκΥ/ξΪYVίΠ@D5ǏSttηƒΨh₯†νεΩνε’[si\X[ε\’{1˜άά]ώOπ *‘t:X‡ΪίF€Ν ό•‰Œˆ v5β`B#–(χ™ΨΫΪΘl6;Δ’“1ΡoΏΨΔ«'ΛΏ~ηT"2°NbΘΞ’½­ˆ,#Q»φr ΪΒ›™Ž$ΑŸI”@ωD…;)ˆΆSνœ.Ύ§pŒ–ΏώŒΡ·ώε/kΆ”n"’›oϊ…)Κl6wωύsϊΒ;q  δpώκ‘9kΧΏςΚKυ S²¦n)έΔ?ϊ°•ˆ’b:Ÿ1={ξ wMDfs7Ρυp•eΟ’—·`ώŠ?,ύ―q·Lh‹%αε™ΝFΩ†|9Eu‹Φ珟~zžKγ]ϋMρ\’{qίϋ‚=„‡€ŠBxG[›ϋ!ΌΩ T‘‘ΆV5ƒοš»Œ‘Σα΄3F""Φ9―τs^=[­Cl6^CΧdύ§“ˆXr:œνΞ’ΙΜ)$ΫΎl‰ α d4™-O"ΪIoν€uεSmΡ’Ds(sGΧ{΄˜Ή?Ή CDLZj7 JDCoŒŠΆ˜Μ]ά΄ξqέλκK?Ϋ),œ1ちk‹·”nκχdNnωξνœOΙΎ;*6Κ"°ΐ5οπ|eΰΚeΟ²»eB·ξ1’ϊό±lCΎ\Zί-γ²6₯ηRj4t"x|]εΜξlii#’Ϋ&₯ :ZZαΟ―Ώ!χM6v*Œΐ‡πXJ绌‘ˆ’Μ&ξCq:§ΣΙ²,Γ0 ΎΪΚ«η±GΝύ?τΝΏςϊΪmΩ,Λ:νΞ­Εbd‰!–%†!§χ@³EΖΣΩNT0v&­#ΪI42·SB-%œ’ΪZ8cΝ]Γg&OΎ£¬μΛqc2‰¨[\ŒΘ윹½φΪΛοψχ~?λχΪ««ορΐO,$’{ξΉο“O>Ό3ϋn†‘χrέΊΏNɚΪ={\X~DΨ|ώSOζε==`ΐϸ杒eV:Λ½χήρΗœ9w¦fοQς™sgzθΥ£{χ+υυ\[₯Λ»ύŽμ?ώΰσ­ŸΝyμQΡΉ8”Œ‹*k9—¬}B»έaοXΏ(]ΒωΕΦχμr«v‡0„α^ͺŸQhΔeαdͺΩξ41Δ’1λmΌz™σοw™σXςΊΏpzίΠA…·Lt8ΪGA-νRΞ±œ‡ΫΎ4*ΚDlΗ’z""š6mڎ 2‰2ΉX>“ˆˆv΄‡κM7έtωςεŽΫϊ―̘1γΚΚΎΌ9}dL·¨¨(±4φ·σmφwΦΏΥΠΨί?>sΜνM ΝΧ^ίcΦ¬_}ςΙ‡wfM½&nζΜ_­[χΧ;³¦vλΣ-ZΪό“O>|σΫ€~ύΘγ\σΞ°7Κ’t–ηŸ_fom›k5wΞcΣ§ΝψtγGηΝωζ¦όΒ?.ZψDΦέVΊΌηŸ_φ}mν«kV}τιΡΉ8”Œ‹*k9—¬} ΐ…V Ί†πΞΦ΅%œ²οšΜN"Šκp#DFΜ­ƒνF,Ύˆ%ΦΙŽn:;<{ލναΩs†―_GD…£'؝¬ƒ8‹ν^"γhk%nCεΌΕφΈφΪφ‘–νΣϋΊ—_~ωΊλsΩ)ί~ϋν+―ΌrώΒO]‡pY"ζς₯ϊ‹ηώέ«oΟkλΞΧ?~δ IHD—.^ώιΗΛN'k4γφαΌτζ¦–ΊΪs?ίl1·΅Ά}όL|Bίθ™§_/]Ό|ωR½Γξ6Ϊη«IΟrώΜΕϊˍΧ\ίΓiwΤ_nμχ³ΊΕΕ4\iό‘ξ’ϊεQέ©sΝW[Œ&£ΓCΦΈθΒ΄œKz/ψυ†T ΏaXχŸ“'556Ρ½χΘoφφρ'{D3I,Q·ΨΨΟΛΆεηΝΡhDd°«‘ΉDTvχ}7&τwΆ΅ Ζh2Έϊ₯8Ybv§Σi0›Ώ«=3ω³ψ‰’+?]^±ςΝφžs’Y"bθς•†kzΔiμšΛWˆ%–a–εFΞ–XbzχιΩ»OOQεδτDώΈO^}ϊ‹sZ,ζu,³°ΎΩζϊ²Υ$τ“μΩλڞ½UoHDƒ’~¦ή!²ΖE¦ε\*χBct ¨ΩΦV;mxΏάVQ¬ pφΦ7}ήΨβ 2ĐΣ`μt-Υ4Τιlr¨ΕΑ_ CΔ2‚I$ƒ‘Μ³`žmjjιψΚpͺHά «p©Λ² WAψeaψ?ψν"‚GtεPemŸή=άmuβT­0ϊφƈΕώΡΉσ­}o°΄Cv§φσάωΦΞαJb‰ƒ‘:Η@Νf#Ψ·d2ΌrΫ„΄?¦ΔΆ·ζόM†e‰–ι< ―²ψ U@ρσ…„ꉛΣSΎ9PE4Θέ†g.žΌ9=…[Ζγ₯³ΩD,]ΝYά­dεΉσΧΉkΔξΈt5g±Ιl‑e¨σYψΧφ4!<ΐ?dOH!’oTuώya˜o‹Xeλζτ”μ )&£ΑFŒD4ύŽ›?₯ΕέJV Œ΄―J"UΗοjΞβιwά,ΤΙΧφ$nιOzζΗ‹ηρ1€FοuΓ“Oώ±}ΥΡcPΠʘ^7Ώ#}Mυ±“'/ Sΐ%ƒυσRΫΤd6]{]―KοH^ξ/Ρ5>'qhSώα@Ρ™3mr›DtΛ-±ψb‡_έXτνυŸ\Έ$'η…›#™›Ϊ?j½kGϊΤWΜύΝΗ««ϊχ7ΧΥ₯…ύΝ2ΜώHΈΝo¬lhpξΩ3 _οπ ;»šˆε=«νKΞ<Ήp‰°Δ$ϋ³G·zΟ[oΌŠN T8^]₯^AΦΉ4yf €]PπΝΝΝ[Άώ£ΉΉ n`·;Ύ(ύκ_ͺϋj{ΉΛ‡! ΠŽΣι,ΫΆγόω Dtϊtέέ{Τ5Τ„.:‘°πlAΑŸ₯  ~~?τ6εχTœ:υ/ώεΡ£ίΕΕuysͺo4qθπšc‡s'<ΠPOξ,P ΔΨ1·άsΟ==ι²]Σ•Λ—.œ?λK42Υ šXv€Œ3Μ~τ0PηΒω³Jr)c ΰ!žhβΠαό| χOZ‡/U5¨RAϊΖB-W’±•π•.9xΒΧ;, f]sZΓΛFΑΒΚ’ J65ΊΌ-­jŽέ5byΒ ΟΆργ,ΌPb\ʍJoΪzp%Τ„4 γa ί¨ΏγYνφ=»ΔγD2¬Ά4nRυ€ϊΥY…ΥώΈ8›D8žνΖδγYx]9- Υη ΰŠŒη(οr³+^ΊrΌ©α[ΒIOκΩ•ΈΥJe² ΥꊴCVυ\«ΗΡ²­\šςμJ4Άςl2Κ3.\°O˜πέ‘#ΝAωZΰyG΄€…τzδΒϋΔ‰Η‚₯ž¨§*ˆάψU=nκΩΣHDώ·cψπ˜νΫ‡φξ  Ο;J(₯κ9|xΜϋοyύ!Γ‡Η>ά4qβ± μθ  ΐ΅znί>τΊλŒΧ]gάΎ}(4€ α‡$₯ ά ~½i‘zφξmϊώϋV"κέΫ΄}ϋPξ­‰2–Rb„‹€2tjΖ³gi•ΤSψn„hh~~ΏΒΒ³8 Ύ« p ΐάΉ΅‡7 ₯$Žœ†Ž}τπα¦Ήsk7oN ΏN((θ_PΠ_B` T46:‰¨GCl¬β'kθΡΓΐW@@Ρλ―Ό_?σMΣ¦ΏzUF―^uN›vόΐ¦~ύΜ―ΏώsτPΠ΍7Foί>΄_?sYΩ©†rκYVv₯_?σφνCoΌ1šˆ Ο2Μ~•O t­‘²κI έ§‰\ώmΐŸ .4΄ΉΩΩά,―ž<,;Rφ_Hχƒ7‡PA ζ,Όϊ†F²οj/ i 8ρXYΩ•σηνDtπΰU%υ o<ψ3€5€ Rf`€ξ' „Cx‘~r82ΜBx,ά ‚BxYεΒz&pΉ-φm <=PυψΪy՘βXiς*ΑζoDœ€*i–RΒdυVmΚ–`b!<@@  P\ΟΒ{“­"W@†A€'ŠΕ’ Xΰ)U 0 t‡7‘βV #tHR ϊΘ§‰Οξ=xJ„‰€Ρρκ*t“0ΫBxP€€  ρ˜Π:λΙ€*ƒz’ΩwΥ Γ,±RΧ„c9:Ίφ@ύ‘3Μ±c=9PJaαΩ‚‚3ήυ‚tΒ+y¦H\ΆΠe,/mΕ• …rxγ½zϊΚ€κΗψ$ι…ωc‘ΖΙj?…τ€Σƒp‚eGzάw T=P’{SBΓεγk©·˜S@‡π"Ή ˜Α-„p/λlr#‘χ‚ τ’ΆΦW:€°ς@—455UUUQJJJLL :(§΅΅υθΡ£UUU‡ͺͺͺͺ¬¬ψΰŸόη5kΦ€¦¦’σΠ’Κι‘ŠŠŠ±cΗξή½{Φ¬YG}ζ™g|žQQQΟ<σΜΡ£Gg͚΅{χξ±cΗVTT €€†*‡š2eJίΎ}wξάωξ»οΖΗΗϋϋŒρρροΎϋξΝ;ϋφν;eΚ”C‡αSzœ>}zΚ”)111eeeγƍ δ©ΗWVV3eΚ”Σ§Oγ³J\Έp!++«₯₯₯΄΄tΐ€Ώ€”––Ά΄΄dee]ΈpŸκn¨μ6KΎ΅S^ΝΝΝS§N=qβĎ;Έ§‰‚BJJΚ¦M›233§NΊcǎθθhόHΎ€ ΥΝbκ V\ΉwοήgŸ}vτθΡΑ½’Ρ£G/^ΌψωηŸ_Ήrε³Ο>’ύ‰ΌF 333ΈΫΡ3 Γ²¬z‰τ-ιΛ„Lο1ΪS+΅ :O:€Ÿ”MΒ';έ}Κ ΒM@‘βκ[a©*χRψ? ½W2e³Ωπα \Fx.;ΌήΛΟe‡ϊΕ°,Λ«‘’«#­Ι²,oJΛ[­Vh(Π»€Βύ²jΥ*†a-Z€«H“eΩE‹1 ³jΥͺω ΰw Β$RΠS덌ŒŒΩ³gΏσΞ;λΧ―ψα‡urUλΧ――¨¨xψα‡322"δΗΐ²,fαή4)Že+{6ο–-[φρΗ/]Ίτή{‹ ϊυ444,]Ί4..nΩ²eΊ8iό.‹sQ‰RhΟ0LZΪZ"ΚΙ±B€~Cx ">>>//―nŊzΈž+VΤΥΥεεεΕΗΗλD:•¨cXSΆŽt$TXSϊ–Υj΅Z‘žj,^ΌxτθΡ+Wά»wop―dοή½+W=zτβΕ‹ρΉ ’££7mΪ4xπΰ©S§VU-UUUΥΤ©SΌiΣ¦θθhtŽZ%=Y  αFοή½KKK£’’²²²‚²ΓΘιΣ§³²²’’’JKK{χξ­Γ.‚(Pdΐ€[Άlijjšyς䦦¦-[Άkο%·\Qι’xQ ’Σγz^)[/π#FŒΨ²eΛwά1aΒ„™3g\Ήί39uuu‹/ή°aC=ΎόςΛ#F„DG)=πΞΰ!w|Ε_‘‘±{χξyσζ½χή{›6mZ²dInnnTT”ΟOΤRTT΄|ως†††ΏΜ*IDATqγΖ­Y³&555tϋMψuε—7AFAΠΟ ‹ΤΤԝ;wnΨ°aρβΕψΓΦ­[WTTδΫg7nܘ››[SSo³ΩfΜκ/₯KD ϋ-ΰ†π ˆώΤ¬Y³¦NΊ|ως’’’ιΣ§ggg―^½:99ΩKΛGŽYΈpαΦ­[£’’žyζ™%K–θaυΎ iikΉg„TŠ‹Ωττφ1…΄γω"$’”‚>rKς|ξ³ΗΕΕ½πΒ sζΜΙΝΝέΈqγΆmΫ¬VλψργSSS“’’L&­νv{uuueeε]»l6[kkλ΄iӊŠŠυά₯£FΡΎ}Δ/nW9P9vχŒψΜ=^]…n‚_gΫ?ύτΣ­[·.\Έ°ΈΈΈΈΈ˜ˆ,Λ°aΓRRRFŒ‘’’’šš:xπ`ƒΑ@DN§σΔ‰•••UUU‡ͺͺͺ:zτhkk+g-99yυκΥΩΩΩϊοՌ Š˜gρBxΰO²³³'Mšd³ΩvνΪUYYY]]}πΰΑƒnΨ°«“’’BDUUUMMM]>i“)99955uόψρV«Υb± ?€€F‹eώόωσηΟ'’ΦΦΦ£Gς>feeε‰'φοίODƒ!11155•χO‡ Ρ :Ε4-----mζΜ™\ISSχhJJJLL Ί(ΠJLLΜΘ‘#Ρ<Κ PΧ^”Γƒπ˜ͺ‘\κ'©ΫB)„‡f  >ΣSξŸz!ŸΛ“/”ΆbAdMvlτΒΛΊŸΒ—ό±l‘¨?& λΟ*YŽ*ΐ„°ͺ=η%@@κ~  p?@3šD’ο9v˜›Ζα_ςB·piΚUQ(Ω·€…J3H*3μξš†πh„pαΒ…Χ_ύΈ­ž'Nόέο~Η0 z=ΰzή―Ωz[κyψpΈ­`Y.[…³£+υ>|xψi(a+ X&©+υάΎ}ϋ 7ά6·ΖyζύP†a΄ϋ€Z*σuά² €ΟBx υμέ»w8©§T7ύ§qPO…z†'R%•:§J…Β·TTR‹eˆ,€€B=CF4U‘/”ΖΰqywγtΛΠP…z†ͺγιΝ€@›ƒˆEGλ@•r “ A=ΓίjΫAPš¨N5TX!Kήύχd:Πws•ΥMyy%P€>΄™?ΎΡhΌοΎϋΒX=E!Ό΄Dz > €$Α*΅4 ”T”&“;†πΒ·€n©΄0D7Kώέο~ΖίΉ}ϋ¨’ΒνVΕΕlzΊ;()ρΛ…edΠ¨QΠξ¨φdΘx@‡x žV«Υί‘- ΌͺΡyΤΈσ<Π99ϊΊ?y΅ͺ;ΌOš* ϊ£œ€0@ϋΊŒί].£x Ύ αe αŸ"B@]&.v™ΝY‹‘Β—0ώ‘°°PφtΘΕ@ψ„π‘L~~Ύ’ΜyOAAA~~ΎT=ΉgσGŽοaΩ€ MAAλ”|O~g“xΐ'· ΫΕκXEΰŸα§}‘22(#½ "@@‡$₯ ΄Γ0LΨL[EΞ~ψψΡ=^]…nB8ε†z Œ¨'Pυ ‚Τ(π¨'Pΰ!PO  ΐmςσσnjυ@Χš8tΈπŸΛΚ’οkY vοή υ@;~IΊΏœ»©;\ΦΗL„πΥμZςΎR„.ό_c,/5¨qττ«烓ΝQ,m=H—”Ν~ !  R—Σε>σ>9„ƒ€ŠΤ-πn ‚w@H ¨’fΈ₯Ÿ ―Yψϋ†pE‘δ '‘€ώ Ί“荫>‹ϊP—²%zWšΣX©ΉzMΏNUΒ€€@D ("k"δ…χ;gΞ΄ V w ·Y]έΒ²4eJ5ΎΨαΑW_]Ή}’?4œ²υ‹ϊzgΨίcοή¦HΈM–%"ΊtɁoux`·ϋΣe]μ%·ά»gΟ0τCx]}ω²h8} ~PLμ€˜Dx C’RΠGΪa>;ΠNŽWW‘›΄€Ω6Β€€@pCx{<‚ƒ€"ΌC@‘Ξξ]_yΦc ΰ!ž{ *™9”κϋp€–Μ~Ωδ>α…:β₯¬ΈΥΠ> α₯Ωβ¨WΎ¬«(z—{)τ+Uš‹*ΛΦ”ŠŒ«ŸH₯ž/ΐΏͺ€VJοrή«K±ΊΊΌzJkͺ7wyκ…π²Ύαυ‰v‡QcMx €ΐ…πΌ0GO8n+Β@TέSsιΗΜΡ“ φ#ΝΝά·**Βφξ22hΤ(όΎCx₯ΡΖΰΊ’!α‘zΪl6α[όKQΉΗHνh·¬TS隹γ0ώΫBΫκ‹P=•Bc—3χR½ΉKS. }Υ<ΜΘΙ!†aX–εώη ηΟ<'ΗJDάήΓT)Ρή–:žb–σΥ†IK[‹9Π£€Ί€‹V½Ύvγ²5V9U•ίy+½Φ‘–ΘΚo\ΨJφŒΒBώ₯Π²ΠΛ²ιι6όΘA„π l$R$I²Υ„*Ζ5ΆβλHKDΦψ3J[ρΒΆσ*]§Κ[θ"„α§‘Α5%j%O τ‹4dφή”7­€c²ΪΗ@½3atμ½qΡD6'[²–eί’υ…ΥT ’`θSΨJvHΑ‡>2ΠRO₯‘IŸψ\V«UΦ,o\蜊F3Uκ―YvS4ΧΔ·ΥδKdoVz*χ@@Cxdλ m9hn͏sξgZΪΪ’’.>iZΪΪτt§A\«ΥZ\ά>΅]\Μ–”tΆεkŠLρΗ6›k"qo΅ZmΆNυpoIΛ½w{ύC~όmZ­Ο•¬Ιθ£mΫΎ*ΟΛύεesσΔρκ*t—π=ωΠΓ†={†y) ˆU]U\ΪΡ’ΘRΟWΊiΓ-·ŽΡXτ­γrr^˜tΫΈ3&εΜ+Δ,|h6σγ˜%ΒύΔ0)Ι–ϊxi·–Ν‹ζΣ₯C Β«’ž(¦ο)*Qšϋ&ΉΉ#ΩIs—>©R+Ωωqu›xd@@ή₯V:Βθα½―6Έα& ξ&Iώπζ"d緊 (#UΙ›δ2ƒ1RϋœœœpΎ;¬9>O"@x ¨(έ±Πίδώ • „G€πα•Ά w™ξXK>dψ€pPκšά°'<κMπξAŠ:μ€ˆP3ι’]έ“€ˆσ@5 ―DHΑBBI@₯IƒΥΣ‹κ«ηC†’jgΤ(Ϊ·/"n€°ς@•4N)έ±τ@ΙΤS;”‘n@+XHP€€Β“HC’RΠGΪasV@@;A‚9 3α@@ „ˆ’hς/½Οx¬dG»eΩΆj²oB ©\θ©§Rfc¦·^§θšUή(¦g*rξ”ά@—%BoQZGzF-ξ*δΐΑtθ”œPQ5‘–ρ%.ϊφ*ܐ©Έ˜΅ΩlV«΅€„l6[q1KDιι6«ΥZ\Μr|9_“#-m­τ˜;}+0 ­1•ξJηοE”a°3“G •Lυι3U₯•ΝfΎδΤΣj΅†P"­1T)›1PB8nθ+S²“ϟxNŽ•;΅Ις5E ωcٚ’V~»‚1ΠΠ‹ίyωSPξ-u…ελπΥΤ[qε’V’!©² λ‹”Wε-ΰϊ,ΐm¬₯σdyV%Q](ϊž’Ύ\:©-G©%ƒRM©•τΨεΪυ κυ”n)―½PΆBδδ›γύA(α, *™<ΤqYSvkϊˆP|ΉsUΙ\„Ε¨V%i(¦γP„ωR1Ε‚'ƒε>„’€ PΩΕΪ ₯fρIk'μ“c=UOA¬€†ξΪΑh€» Ή1ΑBz€€   Αυ,<²υ€'Š„_ΰ‘€b%(1Pπ:$)}€†aΰ³νδxuΊI ˜m!<(7„ΕΎ}TQΆw—‘½μ<ΠF΄2W6™°7<φ˜MTb³Ω4Ά•Φ΄u TM»qŸΖ¨w+ΐη+K\†Π‚ϊθ€Θ9ε‡,Eo‰$XΦ tͺZ©•τΨεΪ/ <TδίΉLDΜr¦"pM©T³Yα$ΗF°β ¨…ςa­έThMΔ{μjgΤ(Ϊ·/lΏξx DD0S?ΒΙΘ Œ tšΠέBzi°ο±Ί…θ|¨Ϋ1>§kό»*Ι‹¬¬)Ρ±μΩα„t' *Β$|K¨€^Z–5₯>έυ„|π@}‰γs@@}ϋBx€€BxΘΦ™ˆvρωFΘR;ήοκ€t͞oΤ‡P‚SΟδρν5ϋ€>PLγN΄α“t'l…§b’-ς„­dΟ(λlвŒ(ν^Šψ ŒE‰ ‘ά!ZόbDξ Π(ˆX )_ερ~g?  ΐ=Β&w€ „Aˆί…Ÿ’Ζι$w‘θΚξΊ„i+ψž’ŸηQ?΅»ΉCT.ΐ'1z α —Ψ§N;ϋφQE…ΦΚΕΕlzΊ;­ ؚ„…€]‘]=9¬Vkˆή&„³€ͺdΦ”nΡ$έ)YX“rs%rrΒωξ/„€J‡A9SΚΗ©1‰±R¨' |Τ]Eσ~³zπϊ]Ζ„„gόJ„,/Η*z&!<Π”‘n =Pΰ(D@?$)}€†aΰ&νδxuΊI Θ BxP€€  E@ TΊy’g%ξ‚]μαζjάσX˜§=ˆPu)—ΨpυNg•ώηλpTŒΘˆΚyΛΒ<Ζ’†κη’ZP*–ΐ‘ Βργvv"oT΄·Ό±΄ΉHΤ\&1&ΙΆφ.Οε²²μΎ=ΐu>ŠeݐULŸ\’;ޟWΆ•Ζ=σπ@gN\?Τ—"P‚a–e₯/EεΎ²ο–e₯š²ΧΜ0 χ'— @pBx’ŒfΚ–„œ+ꡐp„E#D·2${΅άpΘV "Ις=ωΠΓ†={†ςv8gmώό.!³(Žφμ@:ΰΑ[.'²Τ/€scsr‚σUΙΞΎ|Ωΰψυ½}†[n£±ώθ[ΗεδΌ0ιΆq3fLΚ™WΤν¨<$–Ψl6‘6 eK„–Fι$Έz+~ΞG؊Ώ-ͺr\ψ€ΐvvα‰4LζΕKψR(v’šΤuʈŸW)–KλHO!Ϋ\ϋtΰF:ΌsmΐχŠl½‘ ‘θ|/ X (ž›ΟCx’¨‚  C’RΠGΪaF>ϋ¨Q΄o_8χ3VΡƒρ@#a!½OΠΟl[Fedΰΐο`(@@ P€€€€@ΠTšΗΒ³οΟ ‘νr[»T7a&"t: BΤ₯\†D Ύκ2θVϊŸ―ΓύS1"; *η-σ…†Ο%΄ @ΰ+ΐ•ψw3υτρJΗζ"-S· ΜN,,Τx.'Zφzπ@=‰β₯Iή₯Šι“«ΤbΗ‡ηUΏ)Β.€x Γόΐ΄ψWϊ υLͺό$p.Cxπ6„'Ιh¦lIhΉ’²¦”n c €ΰx ‘S%§RvΙ”g±Άl+‘8j1ΛΧΡ²τu#ŽV™iκ”[ΑΈ’°ͺ”h9Φ~1˜>ψ8„Lΰu‚Β‡.˜©@@½Pt!<@@@Ÿ!Ό~²υ@( (Γ0θ#πD@1gJ` όγIJAi‡aψμ@@;9^]…nfΫQƌ›€ΡCjkkuO@ μqι)ΚzH€ Ζ@ ό‚ηώξaΙ―œYXπ,©lCŸάBΡK[π5 nΛD„Ÿ}ΆδΤIΟϊX@eΧ΄“«‹ψ†JB&²,”TνΖ…φe ½dQή³γ–eρD »w}…~ΰΡΎΏ§ΗΎ§οT]n€ο*Ν I—vΊu^o^ϊ#„ηΠΎΫ v°nΌ½όΕyž…hHΑ²μξ©@?^ψγr§Σq 6νvϋ?ΚΆͺ¬κΥ»/Ύάψ›uo―_πΔΣΝΝΝπ@CžζζζMŸ—ž¬ύžˆΉΆ':€PϊeΩC?zι%hh³mGωωσΠ˜oΏ=°hρίΪt= 9>ί2)sάWΫΛOŸCWHnΊ)}ΥΚεPŸpJDGGOɞ\ώ?GŽAo²ξ˜Όͺθ₯θθθ€ (φέπ Ì;ΊGξθ ΐœGf/ύ}žΑΰϋK$• ^@‘–rω§£π7xf‰Ÿ,c)˜\Όp@θ"まυΖ«θŸ£}.³vςηKϋ›'Πυ>Gϋ\fνδ/ΞΗŠ,|Ξ“ —xΉγ ΐ-ΪΪZƒ  +ŠήGΧ€Ϋ:ιΆqθp[@g̘„Ύ·`¬ΦηΠ ΰ=R‘=ͺς€IENDB`‚python-gaphas-5.1.2/docs/quadtree.rst000066400000000000000000000041451512665300000175770ustar00rootroot00000000000000Quadtree ######## In order to find items and handles fast on a 2D surface, a geometric structure is required. There are two popular variants: Quadtrees_ and R-trees_. R-trees are tough and well suited for non-moving data. Quadtrees are easier to understand and easier to maintain. Idea: * Divide the view in 4 quadrants and place each item in a quadrant. * When a quadrant has more than ''x'' elements, divide it again. * When an item overlaps more than one quadrant, it's added to the owner. Gaphas uses item bounding boxed to determine where items should be put. It is also possible to relocate or remove items to the tree. The Quadtree itself is added as part of Gaphas' View. The view is aware of item's bounding boxes as it is responsible for user interaction. The Quadtree size is defined by its contents. Interface --------- The Quadtree interface is simple and tailored towards the use cases of gaphas. Important properties: * bounds: boundaries of the canvas Methods for working with items in the quadtree: * `add(item, bounds)`: add an item to the quadtree * `remove(item)`: remove item from the tree * `update(item, new_bounds)`: replace an item in the quadtree, using it's new boundaries. * Multiple ways of finding items have been implemented: 1. Find item closest to point 2. Find all items within distance `d` of a point 3. Find all items inside a rectangle 4. Find all items inside or intersecting with a rectangle Implementation -------------- The implementation of gaphas' Quadtree can be found at https://github.com/gaphor/gaphas/blob/main/gaphas/quadtree.py. Here's an example of the Quadtree in action (Gaphas' demo app with `gaphas.view.DEBUG_DRAW_QUADTREE` enabled): .. image:: quadtree.png The screen is divided into four equal quadrants. The first quadrant has many items, therefore it has been divided again. References ~~~~~~~~~~ (!PyGame) http://www.pygame.org/wiki/QuadTree?parent=CookBook (PythonCAD) https://sourceforge.net/p/pythoncad/code/ci/master/tree/PythonCAD/Generic/quadtree.py .. _Quadtrees: http://en.wikipedia.org/wiki/Quadtree .. _R-trees: http://en.wikipedia.org/wiki/R-tree python-gaphas-5.1.2/docs/segment.rst000066400000000000000000000017471512665300000174340ustar00rootroot00000000000000Line Segments ############# The line segment functionality is an add-on, that will allow the user to add line segments to a line, and merge them. .. image:: images/segment.png :align: center To use this behavior, import the ``gaphas.segment`` module and add ``LineSegmentPainter`` to the list of painters for the view. Splitting and merging of lines is supported by ``item_tool``, however to actually use it, the ``segment`` module needs to be imported. >>> from gaphas.view import GtkView >>> from gaphas.painter import PainterChain, ItemPainter, HandlePainter >>> from gaphas.tool import item_tool, zoom_tool >>> from gaphas.segment import LineSegmentPainter >>> view = GtkView() >>> view.painter = ( ... PainterChain() ... .append(ItemPainter(view.selection)) ... .append(HandlePainter(view)) ... .append(LineSegmentPainter(view.selection)) ... ) >>> view.add_controller(item_tool()) >>> view.add_controller(zoom_tool()) python-gaphas-5.1.2/docs/solver.rst000066400000000000000000000041771512665300000173040ustar00rootroot00000000000000Constraint Solver ================= Gaphas' constraint solver can be consider the heart of the library. The constraint solver ('solver' for short) is used to manage constraints. Both constraint internal to an item, such as handle alignment for a box, as well as inter-item connections, for example when a line is connected to a box. The solver is called during the update of the canvas. A solver contains a set of constraints. Each constraint in itself is pretty straightforward (e.g. variable ''a'' equals variable ''b''). Did I say variable? Yes I did. Let's start at the bottom and work our way to the solver. A ``Variable`` is a simple class, contains a value. It behaves like a ``float`` in many ways. There is one typical thing about Variables: they can be added to Constraints. Constraint are basically equations. The trick is to make all constraints true. That can be pretty tricky, since a Variable can play a role in more than one Constraint. Constraint solving is overseen by the Solver (ah, there it is). Constraints are instances of Constraint class. More specific: subclasses of the Constraint class. A Constraint can perform a specific trick, e.g. centre one Variable between two other Variables or make one Variable equal to another Variable. It's the Solver's job to make sure all constraint are true in the end. In some cases this means a constraint needs to be resolved twice, but the Solver sees to it that no deadlocks occur. Variables --------- When a variable is assigned a value it marks itself __dirty__. As a result it will be resolved the next time the solver is asked to. Each variable has a specific ''strength''. Strong variables can not be changed by weak variables, but weak variables can change when a new value is assigned to a stronger variable. The Solver always tries to solve a constraint for the weakest variable. If two variables have equal strength, however, the variable that is most recently changed is considered slightly stronger than the not (or earlier) changed variable. ------ The Solver can be found at: https://github.com/gaphor/gaphas/blob/main/gaphas/solver/, along with Variable and the Constraint base class. python-gaphas-5.1.2/docs/table.rst000066400000000000000000000004271512665300000170530ustar00rootroot00000000000000Table ##### Table is an internal structure. It can be best compared to a table in a database. On the table, indexes can be defined. Tables are used when data should be made available in different forms. Source code: https://github.com/gaphor/gaphas/blob/main/gaphas/table.py. python-gaphas-5.1.2/docs/tools.rst000066400000000000000000000114021512665300000171170ustar00rootroot00000000000000Interacting with diagrams ========================= Tools are used to handle user actions, like moving a mouse pointer over the screen and clicking on items in the canvas. Tools are registered on the ``View``. They have some internal state (e.g. when and where a mouse button was pressed). Therefore tools can not be reused by different views [#]_. Tools are simply `Gtk.EventController`_ instances. For a certain action to happen multiple user events are used. For example a click is a combination of a button press and button release event (only talking mouse clicks now). In most cases also some movement is done. A sequence of a button press, some movement and a button release is treated as one transaction. Once a button is pressed the tool registers itself as the tool that will deal with all subsequent events (a ``grab``). Several events can happen based on user events. E.g.: - item is hovered over (motion) - item is hovered over while another item is being moved (``press``, ``motion``) - item is hovered over while dragging something else (DnD; ``press``, ``move``) - grabbed (button press on item) - handle is grabbed (button press on handle) - center of line segment is grabbed (will cause segment to split; button press on line) - ungrabbed (button release) - move (item is moved -> hover + grabbed) - key is pressed - key is released - modifier is pressed (e.g. may cause mouse pointer to change, giving a hit about what a grab event will do. There is a lot of behaviour possible and it can depend on the kind of diagrams that are created what has to be done. To organize the event sequences and keep some order in what the user is doing Tools are used. Tools define what has to happen (find a handle nearly the mouse cursor, move an item). Gaphas contains a set of default tools. Each tool is meant to deal with a special part of the view. A list of responsibilities is also defined here: :hover tool: First thing a user wants to know is if the mouse cursor is over an item. The ``HoverTool`` makes that explicit. - Find a handle or item, if found, mark it as the ``hovered_item`` :item tool: Items are the elements that are actually providing any (visual) meaning to the diagram. ItemTool deals with moving them around. The tool makes sure the right subset of selected elements are moved (e.g. you don't want to move a nested item if its parent item is already moved, this gives funny visual effects) - On click: find an item, if found become the grabbed tool and set the item as focused. If a used clicked on a handle position that is taken into account - On motion: move the selected items (only the ones that have no selected parent items) - On release: release grab and release item The item tool invokes the `Move` aspect, or the `HandleMove` aspect in case a handle is being grabbed. :rubberband tool: If no handle or item is selected a rubberband selection is started. :scroll and zoom tool: Handy tools for moving the canvas around and zooming in and out. Convenience functionality, basically. There is one more tool, that has not been mentioned yet: :placement tool: A special tool to use for placing new items on the screen. As said, tools define *what* has to happen, they don't say how. Take for example finding a handle: on a normal element (a box or something) that would mean find the handle in one of the corners. On a line, however, that may also mean a not-yet existing handle in the middle of a line segment (there is a functionality that splits the line segment). The *how* is defined by so called aspects [#]_. Separating the *What* from the *How* ------------------------------------ The *what* is decided in a tool. Based on this the *how* logic can be applied to the item at hand. For example: if an item is clicked, it should be marked as the focused item. Same for dragging: if an item is dragged it should be updated based on the event information. It may even apply this to all other selected items. The how logic depends actually on the item it is applied to. Lines have different behaviours than boxes for example. In Gaphas this has been resolved by defining a generic methods. To put it simple: a generic method is a factory that returns a specific method (or instance of a class, as we do in gaphas) based on its parameters. The advantage is that more complex behaviour can be composed. Since the decision on what should happen is done in the tool, the aspect which is then used to work on the item ensures a certain behaviour is performed. .. [#] as opposed to versions < 0.5, where tools could be shared among multiple views. .. [#] not the AOP term. The term aspect is coming from a paper by Dirk Riehe: The Tools and Materials metaphor https://wiki.c2.com/?ToolsAndMaterialsMetaphor..>. .. _Gtk.EventController: https://docs.gtk.org/gtk4/class.EventController.html python-gaphas-5.1.2/docs/tree.rst000066400000000000000000000003761512665300000167260ustar00rootroot00000000000000Tree #### Tree is an internal structure used by the default view model implementation (``gaphas.Canvas``). A tree consists of nodes. The tree is optimized for depth-first search. Source code: https://github.com/gaphor/gaphas/blob/main/gaphas/tree.py. python-gaphas-5.1.2/examples/000077500000000000000000000000001512665300000161155ustar00rootroot00000000000000python-gaphas-5.1.2/examples/__init__.py000066400000000000000000000000001512665300000202140ustar00rootroot00000000000000python-gaphas-5.1.2/examples/demo.py000077500000000000000000000251721512665300000174250ustar00rootroot00000000000000#!/usr/bin/env python # ruff: noqa: E402 """A simple demo app. It sports a small canvas and some trivial operations: - Add a line/box - Zoom in/out - Split a line segment - Delete focused item - Exports to SVG and PNG """ import asyncio import math import sys import cairo import gi from gi.events import GLibEventLoopPolicy # fmt: off gi.require_version("Gtk", "4.0") from gi.repository import Gtk # fmt: on from examples.exampleitems import Box, Circle, Text from gaphas import Canvas from gaphas.geometry import Rectangle from gaphas.guide import GuidePainter from gaphas.item import Line from gaphas.painter import ( FreeHandPainter, HandlePainter, ItemPainter, PainterChain, ) from gaphas.segment import LineSegmentPainter from gaphas.tool import ( hover_tool, item_tool, placement_tool, view_focus_tool, zoom_tools, ) from gaphas.tool.itemtool import Segment from gaphas.tool.rubberband import RubberbandPainter, RubberbandState, rubberband_tool from gaphas.tool.scroll import pan_tool from gaphas.view import GtkView # Global undo list undo_list = [] def undo_handler(event): global undo_list undo_list.append(event) def factory(view, cls): """Simple canvas item factory.""" def wrapper(): item = cls(view.model.connections) view.model.add(item) return item return wrapper class MyBox(Box): """Box with an example connection protocol.""" class MyLine(Line): """Line with experimental connection protocol.""" def __init__(self, connections): super().__init__(connections) self.fuzziness = 2 def draw_head(self, context): cr = context.cairo cr.move_to(0, 0) cr.line_to(10, 10) cr.stroke() # Start point for the line to the next handle cr.move_to(0, 0) def draw_tail(self, context): cr = context.cairo cr.line_to(0, 0) cr.line_to(10, 10) cr.stroke() class MyText(Text): """Text with experimental connection protocol.""" def draw(self, context): Text.draw(self, context) cr = context.cairo w, h = text_extents(cr, self.text, multiline=self.multiline) cr.rectangle(0, 0, w, h) cr.set_source_rgba(0.3, 0.3, 1.0, 0.6) cr.stroke() class UnderlineText(Text): def draw(self, context): cr = context.cairo text_underline(cr, 0, 0, "Some text(y)") def text_extents(cr, text, multiline=False): """Simple way to determine the size of a piece of text.""" if not text: return 0, 0 if multiline: width, height = 0, 0 for line in text.split("\n"): _x_bear, _y_bear, w, h, _x_adv, _y_adv = cr.text_extents(line) width = max(width, w) height += h else: _x_bear, _y_bear, width, height, _x_adv, _y_adv = cr.text_extents(text) # width, height = width + x_bearing, height + y_bearing return width, height def text_underline(cr, x, y, text, offset=1.5): """Draw text with underline.""" x_bear, y_bear, w, h, x_adv, y_adv = cr.text_extents(text) cr.move_to(x, y - y_bear) cr.show_text(text) cr.move_to(x, y - y_bear + offset) cr.set_line_width(1.0) cr.rel_line_to(x_adv, 0) cr.stroke() def rubberband_state(view): try: return view.rubberband_state except AttributeError: view.rubberband_state = RubberbandState() return view.rubberband_state def apply_default_tool_set(view): view.remove_all_controllers() view.add_controller(item_tool()) for tool in zoom_tools(): view.add_controller(tool) view.add_controller(pan_tool()) view.add_controller(view_focus_tool()) view.add_controller(rubberband_tool(rubberband_state(view))) view.add_controller(hover_tool()) return rubberband_state def apply_placement_tool_set(view, item_type, handle_index): def unset_placement_tool(gesture, offset_x, offset_y): apply_default_tool_set(view) view.remove_all_controllers() tool = placement_tool(factory(view, item_type), handle_index) tool.connect("drag-end", unset_placement_tool) view.add_controller(tool) for tool in zoom_tools(): view.add_controller(tool) view.add_controller(view_focus_tool()) def apply_painters(view): painter = FreeHandPainter(ItemPainter(view.selection)) view.painter = ( PainterChain() .append(painter) .append(HandlePainter(view)) .append(LineSegmentPainter(view.selection)) .append(GuidePainter(view)) .append(RubberbandPainter(rubberband_state(view))) ) view.bounding_box_painter = painter def calculate_bounding_box(painter, items): surface = cairo.RecordingSurface(cairo.Content.COLOR_ALPHA, None) cr = cairo.Context(surface) painter.paint(items, cr) return Rectangle(*surface.ink_extents()) def create_window(canvas, title, zoom=1.0): # noqa too complex view = GtkView() apply_default_tool_set(view) apply_painters(view) w = Gtk.Window() w.set_title(title) w.set_default_size(400, 120) h = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 6) def h_append(b): h.append(b) w.set_child(h) # VBox contains buttons that can be used to manipulate the canvas: v = Gtk.Box.new(Gtk.Orientation.VERTICAL, 6) def v_append(b): v.append(b) f = Gtk.Frame() f.set_child(v) h_append(f) v_append(Gtk.Label.new("Item placement:")) b = Gtk.Button.new_with_label("Add box") def on_add_box_clicked(_button): apply_placement_tool_set(view, MyBox, 2) b.connect("clicked", on_add_box_clicked) v_append(b) b = Gtk.Button.new_with_label("Add line") def on_add_line_clicked(_button): apply_placement_tool_set(view, MyLine, -1) b.connect("clicked", on_add_line_clicked) v_append(b) v_append(Gtk.Label.new("Zooming:")) b = Gtk.Button.new_with_label("Zoom in") def on_zoom_in_clicked(_button): view.zoom(1.2) b.connect("clicked", on_zoom_in_clicked) v_append(b) b = Gtk.Button.new_with_label("Zoom out") def on_zoom_out_clicked(_button): view.zoom(1 / 1.2) b.connect("clicked", on_zoom_out_clicked) v_append(b) v_append(Gtk.Label.new("Misc:")) b = Gtk.Button.new_with_label("Split line") def on_split_line_clicked(_button): selection = view.selection if isinstance(selection.focused_item, Line): segment = Segment(selection.focused_item, canvas) segment.split_segment(0) b.connect("clicked", on_split_line_clicked) v_append(b) b = Gtk.Button.new_with_label("Delete focused") def on_delete_focused_clicked(_button): if view.selection.focused_item: canvas.remove(view.selection.focused_item) b.connect("clicked", on_delete_focused_clicked) v_append(b) v_append(Gtk.Label.new("Export:")) b = Gtk.Button.new_with_label("Write demo.png") def on_write_demo_png_clicked(_button): assert view.model painter = ItemPainter() bounding_box = calculate_bounding_box(painter, canvas.get_all_items()) surface = cairo.ImageSurface( cairo.FORMAT_ARGB32, int(bounding_box.width), int(bounding_box.height) ) cr = cairo.Context(surface) cr.translate(-bounding_box.x, -bounding_box.y) painter.paint(items=list(view.model.get_all_items()), cairo=cr) cr.show_page() surface.write_to_png("demo.png") b.connect("clicked", on_write_demo_png_clicked) v_append(b) b = Gtk.Button.new_with_label("Write demo.svg") def on_write_demo_svg_clicked(button): assert view.model painter = ItemPainter() bounding_box = calculate_bounding_box(painter, canvas.get_all_items()) surface = cairo.SVGSurface( "demo.svg", int(bounding_box.width), int(bounding_box.height) ) cr = cairo.Context(surface) cr.translate(-bounding_box.x, -bounding_box.y) painter.paint(items=list(view.model.get_all_items()), cairo=cr) cr.show_page() surface.flush() surface.finish() b.connect("clicked", on_write_demo_svg_clicked) v_append(b) b = Gtk.Button.new_with_label("Dump QTree") def on_dump_qtree_clicked(_button, li): view._qtree.dump() b.connect("clicked", on_dump_qtree_clicked, [0]) v_append(b) b = Gtk.Button.new_with_label("Reattach (in place)") def on_reattach_clicked(_button, li): view.model = None view.model = canvas b.connect("clicked", on_reattach_clicked, [0]) v_append(b) # Add the actual View: view.model = canvas view.zoom(zoom) view.set_size_request(150, 120) s = Gtk.ScrolledWindow.new() s.set_hexpand(True) s.set_child(view) h_append(s) w.present() w.connect("destroy", lambda w: app.quit()) return w def create_canvas(c=None): if not c: c = Canvas() b = MyBox(c.connections) b.min_width = 20 b.min_height = 30 b.matrix.translate(20, 20) b.width = b.height = 40 c.add(b) bb = Box(c.connections) bb.matrix.translate(10, 10) c.add(bb, parent=b) bb = Box(c.connections) bb.matrix.rotate(math.pi / 1.567) c.add(bb, parent=b) circle = Circle() h1, h2 = circle.handles() circle.radius = 20 circle.matrix.translate(50, 160) c.add(circle) pb = Box(c.connections, 60, 60) pb.min_width = 40 pb.min_height = 50 pb.matrix.translate(100, 20) c.add(pb) ut = UnderlineText() ut.matrix.translate(100, 130) c.add(ut) t = MyText("Single line") t.matrix.translate(100, 170) c.add(t) line = MyLine(c.connections) c.add(line) line.handles()[1].pos = (30, 30) segment = Segment(line, c) segment.split_segment(0, 3) line.matrix.translate(30, 80) line.orthogonal = True return c app = Gtk.Application.new("org.gaphor.gaphas.Demo", 0) def main(): def activate(app): c = Canvas() win1 = create_window(c, "View created before") app.add_window(win1) create_canvas(c) win2 = create_window(c, "View created after") app.add_window(win2) app.connect("activate", activate) asyncio.set_event_loop_policy(GLibEventLoopPolicy()) app.run() if __name__ == "__main__": if "-p" in sys.argv: print("Profiling...") import hotshot import hotshot.stats prof = hotshot.Profile("demo-gaphas.prof") prof.runcall(main) prof.close() stats = hotshot.stats.load("demo-gaphas.prof") stats.strip_dirs() stats.sort_stats("time", "calls") stats.print_stats(20) else: main() python-gaphas-5.1.2/examples/demo_profile.py000066400000000000000000000011561512665300000211360ustar00rootroot00000000000000#!/usr/bin/env python from examples.demo import main if __name__ == "__main__": try: import cProfile import pstats cProfile.run("main()", "demo-gaphas.prof") p = pstats.Stats("demo-gaphas.prof") p.strip_dirs().sort_stats("time").print_stats(40) except ImportError: import hotshot import hotshot.stats prof = hotshot.Profile("demo-gaphas.prof") prof.runcall(main) prof.close() stats = hotshot.stats.load("demo-gaphas.prof") stats.strip_dirs() stats.sort_stats("time", "calls") stats.print_stats(20) python-gaphas-5.1.2/examples/exampleitems.py000066400000000000000000000100301512665300000211560ustar00rootroot00000000000000"""Simple example items. These items are used in various tests. """ from math import pi from gaphas.connector import Handle from gaphas.item import NW, Element, Matrices class Box(Element): """A Box has 4 handles (for a start): NW +---+ NE SW +---+ SE """ def __init__(self, connections, width=10, height=10): super().__init__(connections, width, height) def draw(self, context): c = context.cairo nw = self._handles[NW].pos c.rectangle(nw.x, nw.y, self.width, self.height) if context.hovered: c.set_source_rgba(0.8, 0.8, 1, 0.8) else: c.set_source_rgba(1, 1, 1, 0.8) c.fill_preserve() c.set_source_rgb(0, 0, 0.8) c.stroke() class Text(Matrices): """Simple item showing some text on the canvas.""" def __init__(self, text=None, plain=False, multiline=False, align_x=1, align_y=-1): super().__init__() self.text = "Hello" if text is None else text self.plain = plain self.multiline = multiline self.align_x = align_x self.align_y = align_y def handles(self): return [] def ports(self): return [] def point(self, x, y): return 0 def draw(self, context): cr = context.cairo if self.multiline: text_multiline(cr, 0, 0, self.text) elif self.plain: cr.show_text(self.text) else: text_align(cr, 0, 0, self.text, self.align_x, self.align_y) class Circle(Matrices): def __init__(self): super().__init__() self._handles = [Handle(), Handle()] h1, h2 = self._handles h1.movable = False @property def radius(self): h1, h2 = self._handles p1, p2 = h1.pos, h2.pos return ((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2) ** 0.5 @radius.setter def radius(self, r): h1, h2 = self._handles h2.pos.x = r h2.pos.y = r def handles(self): return self._handles def ports(self): return [] def point(self, x, y): h1, _ = self._handles p1 = h1.pos dist = ((x - p1.x) ** 2 + (y - p1.y) ** 2) ** 0.5 return dist - self.radius def draw(self, context): cr = context.cairo path_ellipse(cr, 0, 0, 2 * self.radius, 2 * self.radius) cr.stroke() def text_align(cr, x, y, text, align_x=0, align_y=0, padding_x=0, padding_y=0): """Draw text relative to (x, y). x, y - coordinates text - text to print (utf8) align_x - -1 (top), 0 (middle), 1 (bottom) align_y - -1 (left), 0 (center), 1 (right) padding_x - padding (extra offset), always > 0 padding_y - padding (extra offset), always > 0 """ if not text: return x_bear, y_bear, w, h, _x_adv, _y_adv = cr.text_extents(text) if align_x == 0: x = 0.5 - (w / 2 + x_bear) + x elif align_x < 0: x = -(w + x_bear) + x - padding_x else: x = x + padding_x if align_y == 0: y = 0.5 - (h / 2 + y_bear) + y elif align_y < 0: y = -(h + y_bear) + y - padding_y else: y = -y_bear + y + padding_y cr.move_to(x, y) cr.show_text(text) def text_multiline(cr, x, y, text): """Draw a string of text with embedded newlines. cr - cairo context x - leftmost x y - topmost y text - text to draw """ if not text: return for line in text.split("\n"): _x_bear, _y_bear, _w, h, _x_adv, _y_adv = cr.text_extents(text) y += h cr.move_to(x, y) cr.show_text(line) def path_ellipse(cr, x, y, width, height, angle=0): """Draw an ellipse. x - center x y - center y width - width of ellipse (in x direction when angle=0) height - height of ellipse (in y direction when angle=0) angle - angle in radians to rotate, clockwise """ cr.save() cr.translate(x, y) cr.rotate(angle) cr.scale(width / 2.0, height / 2.0) cr.move_to(1.0, 0.0) cr.arc(0.0, 0.0, 1.0, 0.0, 2.0 * pi) cr.restore() python-gaphas-5.1.2/examples/simple-box.py000077500000000000000000000030451512665300000205530ustar00rootroot00000000000000#!/usr/bin/env python # ruff: noqa: E402 """A simple example containing two boxes and a line.""" import gi # fmt: off gi.require_version("Gtk", "4.0") from gi.repository import Gtk from gaphas import Canvas, Line from gaphas.tool import hover_tool, item_tool, view_focus_tool, zoom_tool from gaphas.view import GtkView from examples.exampleitems import Box # fmt: on def apply_default_tool_set(view): view.remove_all_controllers() view.add_controller(item_tool()) view.add_controller(zoom_tool()) view.add_controller(view_focus_tool()) view.add_controller(hover_tool()) def create_canvas(canvas, title): # Setup drawing window view = GtkView() view.model = canvas apply_default_tool_set(view) window = Gtk.Window() window.set_title(title) window.set_default_size(400, 400) win_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) window.add(win_box) win_box.pack_start(view, True, True, 0) # Draw first gaphas box b1 = Box(canvas.connections, 60, 60) b1.matrix.translate(10, 10) canvas.add(b1) # Draw second gaphas box b2 = Box(canvas.connections, 60, 60) b2.min_width = 40 b2.min_height = 50 b2.matrix.translate(170, 170) canvas.add(b2) # Draw gaphas line line = Line(canvas.connections) line.matrix.translate(100, 60) canvas.add(line) line.handles()[1].pos = (30, 30) window.show_all() window.connect("destroy", Gtk.main_quit) if __name__ == "__main__": c = Canvas() create_canvas(c, "Simple Gaphas App") Gtk.main() python-gaphas-5.1.2/gaphas/000077500000000000000000000000001512665300000155425ustar00rootroot00000000000000python-gaphas-5.1.2/gaphas/__init__.py000066400000000000000000000024011512665300000176500ustar00rootroot00000000000000""" Gaphas ====== Gaphor's Canvas. This module contains the application independent parts of Gaphor's Canvas. Notes ===== In py-cairo 1.8.0 (or 1.8.1, or 1.8.2) the multiplication order has been reverted. This causes bugs in Gaphas. Also a new method ``multiply()`` has been introduced. This method is used in Gaphas instead of the multiplier (``*``). In both the ``Canvas`` and ``View`` class a workaround is provided in case an older version of py-cairo is used. Copyright notice ================ Copyright 2006, Arjan Molenaar & Dan Yeaw Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. SPDX-FileCopyrightText: 2006 Arjan Molenaar & Dan Yeaw SPDX-License-Identifer: Apache-2.0 """ from gaphas.canvas import Canvas from gaphas.connector import Handle from gaphas.item import Element, Item, Line python-gaphas-5.1.2/gaphas/canvas.py000066400000000000000000000211171512665300000173710ustar00rootroot00000000000000"""A Canvas owns a set of Items and acts as a container for both the items and a constraint solver. Connections =========== Getting Connection Information ============================== To get connected item to a handle:: c = canvas.connections.get_connection(handle) if c is not None: print c.connected print c.port print c.constraint To get all connected items (i.e. items on both sides of a line):: classes = (i.connected for i in canvas.get_connections(item=line)) To get connecting items (i.e. all lines connected to a class):: lines = (c.item for c in canvas.get_connections(connected=item)) """ from __future__ import annotations import logging from typing import Iterable, Protocol import cairo from gaphas import matrix, tree from gaphas.connections import Connection, Connections from gaphas.item import Item from gaphas.model import View def instant_cairo_context(): """A simple Cairo context, not attached to any window.""" surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 0, 0) return cairo.Context(surface) class Canvas: """Container class for items.""" def __init__(self): self._tree: tree.Tree[Item] = tree.Tree() self._connections = Connections() self._registered_views = set() self._connections.add_handler(self._on_constraint_solved) @property def solver(self): return self._connections.solver @property def connections(self) -> Connections: return self._connections def add(self, item, parent=None, index=None): """Add an item to the canvas. >>> c = Canvas() >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> len(c._tree.nodes) 1 >>> i._canvas is c True """ assert item not in self._tree.nodes, f"Adding already added node {item}" self._tree.add(item, parent, index) self.request_update(item) def _remove(self, item): """Remove is done in a separate, @observed, method so the undo system can restore removed items in the right order.""" self._tree.remove(item) self._connections.disconnect_item(item) self._update_views(removed_items=(item,)) def remove(self, item): """Remove item from the canvas. >>> c = Canvas() >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> c.remove(i) >>> c._tree.nodes [] >>> i._canvas """ for child in reversed(list(self.get_children(item))): self.remove(child) self._connections.remove_connections_to_item(item) self._remove(item) def reparent(self, item, parent, index=None): """Set new parent for an item.""" self._tree.move(item, parent, index) def get_all_items(self) -> Iterable[Item]: """Get a list of all items. >>> c = Canvas() >>> c.get_all_items() [] >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> c.get_all_items() # doctest: +ELLIPSIS [] """ return iter(self._tree.nodes) def get_root_items(self): """Return the root items of the canvas. >>> c = Canvas() >>> c.get_all_items() [] >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> ii = item.Item() >>> c.add(ii, i) >>> c.get_root_items() # doctest: +ELLIPSIS [] """ return self._tree.get_children(None) def get_parent(self, item: Item) -> Item | None: """See `tree.Tree.get_parent()`. >>> c = Canvas() >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> ii = item.Item() >>> c.add(ii, i) >>> c.get_parent(i) >>> c.get_parent(ii) # doctest: +ELLIPSIS """ return self._tree.get_parent(item) def get_children(self, item: Item | None) -> Iterable[Item]: """See `tree.Tree.get_children()`. >>> c = Canvas() >>> from gaphas import item >>> i = item.Item() >>> c.add(i) >>> ii = item.Item() >>> c.add(ii, i) >>> iii = item.Item() >>> c.add(iii, ii) >>> list(c.get_children(iii)) [] >>> list(c.get_children(ii)) # doctest: +ELLIPSIS [] >>> list(c.get_children(i)) # doctest: +ELLIPSIS [] """ return self._tree.get_children(item) def sort(self, items: Iterable[Item]) -> Iterable[Item]: """Sort a list of items in the order in which they are traversed in the canvas (Depth first). >>> c = Canvas() >>> from gaphas import item >>> i1 = item.Line() >>> c.add(i1) >>> i2 = item.Line() >>> c.add(i2) >>> i3 = item.Line() >>> c.add (i3) >>> c.update_now((i1, i2, i3)) # ensure items are indexed >>> s = c.sort([i2, i3, i1]) >>> s[0] is i1 and s[1] is i2 and s[2] is i3 True """ return self._tree.order(items) def get_matrix_i2c(self, item: Item) -> matrix.Matrix: """Get the Item to Canvas matrix for ``item``. item: The item who's item-to-canvas transformation matrix should be found calculate: True will allow this function to actually calculate it, instead of raising an `AttributeError` when no matrix is present yet. Note that out-of-date matrices are not recalculated. """ m = item.matrix parent = self._tree.get_parent(item) if parent is not None: m = m.multiply(self.get_matrix_i2c(parent)) return m def request_update(self, item: Item) -> None: """Set an update request for the item. >>> c = Canvas() >>> from gaphas import item >>> i = item.Item() >>> ii = item.Item() >>> c.add(i) >>> c.add(ii, i) >>> len(c._dirty_items) 0 >>> c.update_now((i, ii)) >>> len(c._dirty_items) 0 """ self._update_views(dirty_items=(item,)) def request_matrix_update(self, item): """Schedule only the matrix to be updated.""" self.request_update(item) def update_now(self, dirty_items): """Perform an update of the items that requested an update.""" try: # keep it here, since we need up to date matrices for the solver for d in dirty_items: d.matrix_i2c.set(*self.get_matrix_i2c(d)) # solve all constraints self._connections.solve() except Exception as e: logging.error("Error while updating canvas", exc_info=e) def register_view(self, view: View) -> None: """Register a view on this canvas. This method is called when setting a canvas on a view and should not be called directly from user code. """ self._registered_views.add(view) def unregister_view(self, view: View) -> None: """Unregister a view on this canvas. This method is called when setting a canvas on a view and should not be called directly from user code. """ self._registered_views.discard(view) def _on_constraint_solved(self, cinfo: Connection) -> None: dirty_items = set() known_items = set(self._tree.nodes) item = cinfo.item if item and item in known_items: dirty_items.add(item) connected = cinfo.connected if connected and connected in known_items: dirty_items.add(connected) if dirty_items: self._update_views(dirty_items) def _update_views(self, dirty_items=(), removed_items=()): """Send an update notification to all registered views.""" for v in self._registered_views: v.request_update(dirty_items, removed_items) class Traversable(Protocol): def get_parent(self, item: Item) -> Item | None: ... def get_children(self, item: Item | None) -> Iterable[Item]: ... def ancestors(canvas: Traversable, item: Item) -> Iterable[Item | None]: parent = canvas.get_parent(item) while parent: yield parent parent = canvas.get_parent(parent) def all_children(canvas: Traversable, item: Item | None) -> Iterable[Item]: children = canvas.get_children(item) for child in children: yield child yield from all_children(canvas, child) python-gaphas-5.1.2/gaphas/connections.py000066400000000000000000000214141512665300000204400ustar00rootroot00000000000000"""This module contains a connections manager.""" from __future__ import annotations from typing import Callable, Iterator, NamedTuple from gaphas import table from gaphas.constraint import Constraint from gaphas.handle import Handle from gaphas.item import Item from gaphas.port import Port from gaphas.solver import Solver class Connection(NamedTuple): """Information about two connected items. - item: connecting item - handle: handle of connecting item (points connected item) - connected: connected item - port: port of connected item - constraint: optional connection constraint - callback: optional disconnection callback """ item: Item handle: Handle connected: Item port: Port constraint: Constraint callback: Callable[[Item, Handle, Item, Port], None] class ConnectionError(Exception): """Exception raised when there is an error when connecting an items with each other.""" class Connections: """Manage connections and constraints.""" def __init__(self, solver: Solver | None = None) -> None: self._solver = solver or Solver() self._connections: table.Table[Connection] = table.Table( Connection, tuple(range(5)) ) self._handlers: set[Callable[[Connection], None]] = set() self._solver.add_handler(self._on_constraint_solved) def add_handler(self, handler): """Add a callback handler. Handlers are triggered when a constraint has been solved. """ self._handlers.add(handler) def remove_handler(self, handler): """Remove a previously assigned handler.""" self._handlers.discard(handler) def _on_constraint_solved(self, constraint): for cinfo in self._connections.query(constraint=constraint): for handler in self._handlers: handler(cinfo) @property def solver(self) -> Solver: """The solver used by this connections instance.""" return self._solver def solve(self) -> None: """Solve all constraints.""" self._solver.solve() def add_constraint(self, item: Item, constraint: Constraint) -> Constraint: """Add a "simple" constraint for an item.""" self._solver.add_constraint(constraint) self._connections.insert(item, None, None, None, constraint, None) return constraint def remove_constraint(self, item: Item, constraint: Constraint) -> None: """Remove an item specific constraint.""" self._solver.remove_constraint(constraint) self._connections.delete(item, None, None, None, constraint, None) def connect_item( self, item: Item, handle: Handle, connected: Item, port: Port | None, constraint: Constraint | None = None, callback: Callable[[Item, Handle, Item, Port], None] | None = None, ) -> None: """Create a connection between two items. The connection is registered and the constraint is added to the constraint solver. The pair ``(item, handle)`` should be unique and not yet connected. The callback is invoked when the connection is broken. Args: item (Item): Connecting item (i.e. a line). handle (Handle): Handle of connecting item. connected (Item): Connected item (i.e. a box). port (Port): Port of connected item. constraint (Constraint): Constraint to keep the connection in place. callback (() -> None): Function to be called on disconnection. ``ConnectionError`` is raised in case handle is already registered on a connection. """ if self.get_connection(handle): raise ConnectionError( f"Handle {handle} of item {item} is already connected" ) self._connections.insert(item, handle, connected, port, constraint, callback) if constraint: self._solver.add_constraint(constraint) def disconnect_item(self, item: Item, handle: Handle | None = None) -> None: """Disconnect the connections of an item. If handle is not None, only the connection for that handle is disconnected. """ for cinfo in list(self._connections.query(item=item, handle=handle)): self._disconnect_item(*cinfo) def _disconnect_item( self, item: Item, handle: Handle, connected: Item, port: Port, constraint: Constraint, callback: Callable[[Item, Handle, Item, Port], None], ) -> None: """Perform the real disconnect.""" # Same arguments as connect_item, makes reverser easy if constraint: self._solver.remove_constraint(constraint) if callback is not None: callback(item, handle, connected, port) self._connections.delete(item, handle, connected, port, constraint, callback) def remove_connections_to_item(self, item: Item) -> None: """Remove all connections (handles connected to and constraints) for a specific item (to and from the item). This is some brute force cleanup (e.g. if constraints are referenced by items, those references are not cleaned up). """ disconnect_item = self._disconnect_item # remove connections from this item for cinfo in list(self._connections.query(item=item)): disconnect_item(*cinfo) # remove constraints to this item for cinfo in list(self._connections.query(connected=item)): disconnect_item(*cinfo) def reconnect_item( self, item: Item, handle: Handle, port: Port | None = None, constraint: Constraint | None = None, ) -> None: """Update an existing connection. This is used to provide a new constraint to the connection. ``item`` and ``handle`` are the keys to the to-be-updated connection. """ cinfo = self.get_connection(handle) if not cinfo: raise ValueError( f'No data available for item "{item}" and handle "{handle}"' ) if cinfo.constraint: self._solver.remove_constraint(cinfo.constraint) self._connections.delete(item=cinfo.item, handle=cinfo.handle) self._connections.insert( item, handle, cinfo.connected, port or cinfo.port, constraint, cinfo.callback, ) if constraint: self._solver.add_constraint(constraint) def get_connection(self, handle: Handle) -> Connection | None: """Get connection information for specified handle. >>> c = Connections() >>> from gaphas.item import Line >>> line = Line() >>> from gaphas import item >>> i = item.Line() >>> ii = item.Line() >>> c.connect_item(i, i.handles()[0], ii, ii.ports()[0]) >>> c.get_connection(i.handles()[0]) # doctest: +ELLIPSIS Connection(item=>> c.get_connection(i.handles()[1]) # doctest: +ELLIPSIS >>> c.get_connection(ii.handles()[0]) # doctest: +ELLIPSIS """ try: return next(self._connections.query(handle=handle)) except StopIteration: return None def get_connections( self, item: Item | None = None, handle: Handle | None = None, connected: Item | None = None, port: Port | None = None, ) -> Iterator[Connection]: """Return an iterator of connection information. The list contains (item, handle). As a result an item may be in the list more than once (depending on the number of handles that are connected). If ``item`` is connected to itself it will also appear in the list. >>> c = Connections() >>> from gaphas import item >>> i = item.Line() >>> ii = item.Line() >>> iii = item.Line() >>> c.connect_item(i, i.handles()[0], ii, ii.ports()[0], None) >>> list(c.get_connections(item=i)) # doctest: +ELLIPSIS [Connection(item=>> list(c.get_connections(connected=i)) [] >>> list(c.get_connections(connected=ii)) # doctest: +ELLIPSIS [Connection(item=>> c.connect_item(ii, ii.handles()[0], iii, iii.ports()[0], None) >>> list(c.get_connections(item=ii)) # doctest: +ELLIPSIS [Connection(item=>> list(c.get_connections(connected=iii)) # doctest: +ELLIPSIS [Connection(item= Pos | None: ... def constraint(self, item: Item, handle: Handle) -> Constraint: ... class ItemConnector: """Connect or disconnect an item's handle to another item or port.""" GLUE_DISTANCE = 10 # Glue distance in view points def __init__(self, item: Item, handle: Handle, connections: Connections): self.item = item self.handle = handle self.connections = connections def allow(self, sink): return True def secondary_handle(self) -> Handle | None: return None def glue(self, sink: ConnectionSinkType) -> Pos | None: """Glue the Connector handle on the sink's port.""" handle = self.handle item = self.item matrix = matrix_i2i(item, sink.item) pos = matrix.transform_point(*handle.pos) secondary_handle = self.secondary_handle() secondary_pos = ( matrix.transform_point(*secondary_handle.pos) if secondary_handle else None ) glue_pos = sink.glue(pos, secondary_pos) if glue_pos and self.allow(sink): matrix.invert() new_pos = matrix.transform_point(*glue_pos) handle.pos = new_pos return new_pos return None def connect(self, sink: ConnectionSinkType) -> None: """Connect the handle to a sink (item, port). Note that connect() also takes care of disconnecting in case a handle is reattached to another element. """ # Already connected? disconnect first. if self.connections.get_connection(self.handle): self.disconnect() if not self.glue(sink): return self.connect_handle(sink) def connect_handle( self, sink: ConnectionSinkType, callback: Callable[[Item, Handle, Item, Port], None] | None = None, ) -> None: """Create constraint between handle of a line and port of connectable item. :Parameters: sink Connectable item and port. callback Function to be called on disconnection. """ handle = self.handle item = self.item constraint = sink.constraint(item, handle) self.connections.connect_item( item, handle, sink.item, sink.port, constraint, callback=callback ) def disconnect(self) -> None: """Disconnect the handle from the attached element.""" self.connections.disconnect_item(self.item, self.handle) Connector = singledispatch(ItemConnector) @Connector.register(Line) class LineConnector(ItemConnector): def secondary_handle(self) -> Handle | None: item = self.item handle = self.handle handles = item.handles() if len(handles) < 2: return None if handle is handles[0]: return handles[1] return handles[-2] if handle is handles[-1] else None class ItemConnectionSink: """Makes an item a sink. A sink is another item that an item's handle is connected to like a connectable item or port. """ def __init__(self, item: Item, distance: float = 10) -> None: self.item = item self.distance = distance self.port: Port | None = None def glue( self, pos: SupportsFloatPos, secondary_pos: SupportsFloatPos | None = None ) -> Pos | None: max_dist = self.distance glue_pos = None for p in self.item.ports(): if not p.connectable: continue g, d = p.glue(pos) if d < max_dist: max_dist = d self.port = p glue_pos = g return glue_pos def constraint(self, item: Item, handle: Handle) -> Constraint: assert self.port, "constraint() can only be called after glue()" return self.port.constraint(item, handle, self.item) ConnectionSink = singledispatch(ItemConnectionSink) @ConnectionSink.register(Element) class ElementConnectionSink(ItemConnectionSink): def glue( self, pos: SupportsFloatPos, secondary_pos: SupportsFloatPos | None = None ) -> Pos | None: if glue_pos := super().glue(pos, secondary_pos): return glue_pos if secondary_pos: for p in self.item.ports()[:4]: assert isinstance(p, LinePort) if point_on_line := intersect_line_line( pos, # type: ignore[arg-type] secondary_pos, # type: ignore[arg-type] p.start, # type: ignore[arg-type] p.end, # type: ignore[arg-type] ): return point_on_line return None python-gaphas-5.1.2/gaphas/constraint.py000066400000000000000000000277451512665300000203170ustar00rootroot00000000000000"""This module contains several flavors of constraint classes. Each has a method `Constraint.solve_for(name)` and a method `Constraint.mark_dirty(v)`. These methods are used by the constraint solver (`solver.Solver`) to set the variables. Variables should be of type `solver.Variable`. See classes' documentation below for constraints description and for examples of their usage. EqualsConstraint Make 'a' and 'b' equal. LessThanConstraint Ensure one variable stays smaller than another. CenterConstraint Ensures a Variable is kept between two other variables. BalanceConstraint Keeps three variables in line, maintaining a specific ratio. LineConstraint Solves the equation where a line is connected to a line or side at a specific point. New constraint class should derive from Constraint class abstract class and implement `Constraint.solve_for(Variable)` method to update a variable with appropriate value. """ from __future__ import annotations import logging import math from gaphas.position import Position from gaphas.solver import BaseConstraint, Constraint log = logging.getLogger(__name__) def constraint( *, horizontal: tuple[Position, Position] | None = None, vertical: tuple[Position, Position] | None = None, left_of: tuple[Position, Position] | None = None, above: tuple[Position, Position] | None = None, line: tuple[Position, tuple[Position, Position]] | None = None, delta: float = 0.0, align: float | None = None, ) -> Constraint: """Utility (factory) method to create item's internal constraint between two positions or between a position and a line. Position is a tuple of coordinates, i.e. ``(2, 4)``. Line is a tuple of positions, i.e. ``((2, 3), (4, 2))``. This method shall not be used to create constraints between two different items. Created constraint is returned. :Parameters: horizontal=(p1, p2) Keep positions ``p1`` and ``p2`` aligned horizontally. vertical=(p1, p2) Keep positions ``p1`` and ``p2`` aligned vertically. left_of=(p1, p2) Keep position ``p1`` on the left side of position ``p2``. above=(p1, p2) Keep position ``p1`` above position ``p2``. line=(p, l) Keep position ``p`` on line ``l``. """ cc: Constraint | None if horizontal: p1, p2 = horizontal cc = EqualsConstraint(p1[1], p2[1], delta) elif vertical: p1, p2 = vertical cc = EqualsConstraint(p1[0], p2[0], delta) elif left_of: p1, p2 = left_of cc = LessThanConstraint(p1[0], p2[0], delta) elif above: p1, p2 = above cc = LessThanConstraint(p1[1], p2[1], delta) elif line: pos, line_l = line if align is None: cc = LineConstraint(line=line_l, point=pos) else: cc = LineAlignConstraint(line=line_l, point=pos, align=align, delta=delta) else: raise ValueError("Constraint incorrectly specified") return cc # is simple abs(x - y) > EPSILON enough for canvas needs? EPSILON = 1e-6 def _update(variable, value): if abs(variable.value - value) > EPSILON: variable.value = value class EqualsConstraint(BaseConstraint): """Constraint, which ensures that two arguments ``a`` and ``b`` are equal: a + delta = b for example >>> from gaphas.solver import Variable >>> a, b = Variable(1.0), Variable(2.0) >>> eq = EqualsConstraint(a, b) >>> eq.solve_for(a) >>> a Variable(2, 20) >>> a.value = 10.8 >>> eq.solve_for(b) >>> b Variable(10.8, 20) """ def __init__(self, a=None, b=None, delta=0.0): super().__init__(a, b, delta) self.a = a self.b = b self.delta = delta def solve_for(self, var): assert var in (self.a, self.b, self.delta) _update( *( (var is self.a) and (self.a, self.b.value - self.delta) or (var is self.b) and (self.b, self.a.value + self.delta) or (self.delta, self.b.value - self.a.value) ) ) class CenterConstraint(BaseConstraint): """Simple Constraint, takes three arguments: 'a', 'b' and center. When solved, the constraint ensures 'center' is located in the middle of 'a' and 'b'. >>> from gaphas.solver import Variable >>> a, b, center = Variable(1.0), Variable(3.0), Variable() >>> eq = CenterConstraint(a, b, center) >>> eq.solve_for(a) >>> a Variable(1, 20) >>> center Variable(2, 20) >>> a.value = 10 >>> eq.solve_for(b) >>> b Variable(3, 20) >>> center Variable(6.5, 20) """ def __init__(self, a=None, b=None, center=None): super().__init__(a, b, center) self.a = a self.b = b self.center = center def solve_for(self, var): assert var in (self.a, self.b, self.center) v = (self.a.value + self.b.value) / 2.0 _update(self.center, v) class LessThanConstraint(BaseConstraint): """Ensure ``smaller`` is less than ``bigger``. The variable that is passed as to-be-solved is left alone (cause it is the variable that has not been moved lately). Instead the other variable is solved. >>> from gaphas.solver import Variable >>> a, b = Variable(3.0), Variable(2.0) >>> lt = LessThanConstraint(smaller=a, bigger=b) >>> lt.solve_for(a) >>> a, b (Variable(3, 20), Variable(3, 20)) >>> b.value = 0.8 >>> lt.solve_for(b) >>> a, b (Variable(0.8, 20), Variable(0.8, 20)) Also minimal delta between two values can be set >>> a, b = Variable(10.0), Variable(8.0) >>> lt = LessThanConstraint(smaller=a, bigger=b, delta=5) >>> lt.solve_for(a) >>> a, b (Variable(10, 20), Variable(15, 20)) """ def __init__(self, smaller=None, bigger=None, delta=0.0): super().__init__(smaller, bigger, delta) self.smaller = smaller self.bigger = bigger self.delta = delta def solve_for(self, var): if self.smaller.value > self.bigger.value - self.delta: if var is self.smaller: self.bigger.value = self.smaller.value + self.delta elif var is self.bigger: self.smaller.value = self.bigger.value - self.delta elif var is self.delta: self.delta.value = self.bigger.value - self.smaller.value class BalanceConstraint(BaseConstraint): """Ensure that a variable ``v`` is between values specified by ``band`` and in distance proportional from ``band[0]``. Consider >>> from gaphas.solver import Variable, WEAK >>> a, b, c = Variable(2.0), Variable(3.0), Variable(2.3, WEAK) >>> bc = BalanceConstraint(band=(a,b), v=c) >>> c.value = 2.4 >>> c Variable(2.4, 10) >>> bc.solve_for(c) >>> a, b, c (Variable(2, 20), Variable(3, 20), Variable(2.3, 10)) Band does not have to be ``band[0] < band[1]`` >>> a, b, c = Variable(3.0), Variable(2.0), Variable(2.45, WEAK) >>> bc = BalanceConstraint(band=(a,b), v=c) >>> c.value = 2.50 >>> c Variable(2.5, 10) >>> bc.solve_for(c) >>> a, b, c (Variable(3, 20), Variable(2, 20), Variable(2.45, 10)) """ def __init__(self, band=None, v=None, balance=None): super().__init__(band[0], band[1], v) self.band = band self.balance = balance self.v = v if self.balance is None: self.update_balance() def update_balance(self): b1, b2 = self.band w = b2 - b1 self.balance = (self.v - b1) / w if w != 0 else 0 def solve_for(self, var): b1, b2 = self.band w = b2.value - b1.value value = b1.value + w * self.balance _update(var, value) class LineConstraint(BaseConstraint): """Ensure a point is kept on a line. Attributes: - _line: line defined by tuple ((x1, y1), (x2, y2)) - _point: point defined by tuple (x, y) """ def __init__(self, line, point): super().__init__( line[0][0], line[0][1], line[1][0], line[1][1], point[0], point[1] ) self._line = line self._point = point self.update_ratio() def update_ratio(self): """ >>> from gaphas.solver import Variable >>> line = (Variable(0), Variable(0)), (Variable(30), Variable(20)) >>> point = (Variable(15), Variable(4)) >>> lc = LineConstraint(line=line, point=point) >>> lc.update_ratio() >>> lc.ratio_x, lc.ratio_y (0.5, 0.2) >>> line[1][0].value = 40 >>> line[1][1].value = 30 >>> lc.solve_for(point[0]) >>> lc.ratio_x, lc.ratio_y (0.5, 0.2) >>> point (Variable(20, 20), Variable(6, 20)) """ sx, sy = self._line[0] ex, ey = self._line[1] px, py = self._point try: self.ratio = float(px.value - sx.value) / float(ex.value - sx.value) except ZeroDivisionError: try: self.ratio = float(py.value - sy.value) / float(ey.value - sy.value) except ZeroDivisionError: self.ratio = 0.0 def solve_for(self, var=None): self._solve() def _solve(self): """Solve the equation for the connected_handle. >>> from gaphas.solver import Variable >>> line = (Variable(0), Variable(0)), (Variable(30), Variable(20)) >>> point = (Variable(15), Variable(4)) >>> lc = LineConstraint(line=line, point=point) >>> lc.update_ratio() >>> lc.solve_for(point[0]) >>> point (Variable(15, 20), Variable(4, 20)) >>> line[1][0].value = 40 >>> line[1][1].value = 30 >>> lc.solve_for(point[0]) >>> point (Variable(20, 20), Variable(6, 20)) """ sx, sy = self._line[0] ex, ey = self._line[1] px, py = self._point x = sx.value + (ex.value - sx.value) * self.ratio y = sy.value + (ey.value - sy.value) * self.ratio _update(px, x) _update(py, y) class PositionConstraint(BaseConstraint): """Ensure that point is always in origin position. Attributes: - _origin: origin position - _point: point to be in origin position """ def __init__(self, origin, point): super().__init__(origin[0], origin[1], point[0], point[1]) self._origin = origin self._point = point def solve_for(self, var=None): """Ensure that point's coordinates are the same as coordinates of the origin position.""" x, y = self._origin[0].value, self._origin[1].value _update(self._point[0], x) _update(self._point[1], y) class LineAlignConstraint(BaseConstraint): """Ensure a point is kept on a line in position specified by align and padding information. Align is specified as a number between 0 and 1, for example 0 keep point at one end of the line 1 keep point at other end of the line 0.5 keep point in the middle of the line Align can be adjusted with `delta` parameter, which specifies the padding of the point. :Attributes: _line Line defined by tuple ((x1, y1), (x2, y2)). _point Point defined by tuple (x, y). _align Align of point. _delta Padding of the align. """ def __init__(self, line, point, align=0.5, delta=0.0): super().__init__( line[0][0], line[0][1], line[1][0], line[1][1], point[0], point[1] ) self._line = line self._point = point self._align = align self._delta = delta def solve_for(self, var=None): sx, sy = self._line[0] ex, ey = self._line[1] px, py = self._point a = math.atan2(ey.value - sy.value, ex.value - sx.value) x = sx.value + (ex.value - sx.value) * self._align + self._delta * math.cos(a) y = sy.value + (ey.value - sy.value) * self._align + self._delta * math.sin(a) _update(px, x) _update(py, y) python-gaphas-5.1.2/gaphas/cursor.py000066400000000000000000000015351512665300000174350ustar00rootroot00000000000000from __future__ import annotations from functools import singledispatch from typing import Union from gaphas.connector import Handle from gaphas.item import Element, Item, Line from gaphas.types import Pos DEFAULT_CURSOR = "default" @singledispatch def cursor(item: Union[Item, None], handle: Union[Handle, None], pos: Pos) -> str: return DEFAULT_CURSOR ELEMENT_CURSORS = ("nw-resize", "ne-resize", "se-resize", "sw-resize") @cursor.register def element_hover(item: Element, handle: Union[Handle, None], pos: Pos) -> str: if handle: index = item.handles().index(handle) return ELEMENT_CURSORS[index] if index < 4 else DEFAULT_CURSOR return DEFAULT_CURSOR LINE_CURSOR = "move" @cursor.register def line_hover(item: Line, handle: Union[Handle, None], pos: Pos) -> str: return LINE_CURSOR if handle else DEFAULT_CURSOR python-gaphas-5.1.2/gaphas/geometry.py000066400000000000000000000427551512665300000177640ustar00rootroot00000000000000"""Geometry functions. Rectangle is a utility class for working with rectangles (unions and intersections). A point is represented as a tuple `(x, y)`. """ from __future__ import annotations from math import sqrt from collections.abc import Iterator Point = tuple[float, float] # x, y Rect = tuple[float, float, float, float] # x, y, width, height class Rectangle: """Python Rectangle implementation. Rectangles can be added (union), substituted (intersection) and points and rectangles can be tested to be in the rectangle. >>> r1= Rectangle(1,1,5,5) >>> r2 = Rectangle(3,3,6,7) Test if two rectangles intersect: >>> if r1 - r2: 'yes' 'yes' >>> r1, r2 = Rectangle(1,2,3,4), Rectangle(1,2,3,4) >>> r1 == r2 True >>> r = Rectangle(-5, 3, 10, 8) >>> r.width = 2 >>> r Rectangle(-5, 3, 2, 8) >>> r = Rectangle(-5, 3, 10, 8) >>> r.height = 2 >>> r Rectangle(-5, 3, 10, 2) """ def __init__( self, x: float = 0, y: float = 0, width: float | None = None, height: float | None = None, x1: float = 0, y1: float = 0, ): if width is None: self.x = min(x, x1) self.width = abs(x1 - x) else: self.x = x self.width = width if height is None: self.y = min(y, y1) self.height = abs(y1 - y) else: self.y = y self.height = height @property def x1(self) -> float: return self.x + self.width @x1.setter def x1(self, x1: float) -> None: width = x1 - self.x width = max(width, 0) self.width = width @property def y1(self) -> float: return self.y + self.height @y1.setter def y1(self, y1: float) -> None: height = y1 - self.y height = max(height, 0) self.height = height def expand(self, delta: float) -> None: """ >>> r = Rectangle(-5, 3, 10, 8) >>> r.expand(5) >>> r Rectangle(-10, -2, 20, 18) """ self.x -= delta self.y -= delta self.width += delta * 2 self.height += delta * 2 def tuple(self) -> tuple[float, float, float, float]: """A type safe version of `tuple(rectangle)`.""" return (self.x, self.y, self.width, self.height) def __repr__(self) -> str: """ >>> Rectangle(5,7,20,25) Rectangle(5, 7, 20, 25) """ if self: return f"{self.__class__.__name__}({self.x}, {self.y}, {self.width}, {self.height})" return f"{self.__class__.__name__}()" def __iter__(self) -> Iterator[float]: """ >>> tuple(Rectangle(1,2,3,4)) (1, 2, 3, 4) """ return iter((self.x, self.y, self.width, self.height)) def __getitem__(self, index: int) -> float: """ >>> Rectangle(1,2,3,4)[1] 2 """ return (self.x, self.y, self.width, self.height)[index] def __bool__(self) -> bool: """ >>> r=Rectangle(1,2,3,4) >>> if r: 'yes' 'yes' >>> r = Rectangle(1,1,0,0) >>> if r: 'no' """ return self.width > 0 and self.height > 0 def __eq__(self, other: object) -> bool: return ( isinstance(other, Rectangle) and self.x == other.x and self.y == other.y and self.width == other.width and self.height == other.height ) def __add__(self, obj: Rectangle | Rect) -> Rectangle: """Create a new Rectangle is the union of the current rectangle with another Rectangle, tuple `(x,y)` or tuple `(x, y, width, height)`. >>> r=Rectangle(5, 7, 20, 25) >>> r + (0, 0) Traceback (most recent call last): ... TypeError: Can only add Rectangle or tuple (x, y, width, height), not (0, 0). >>> r + (20, 30, 40, 50) Rectangle(5, 7, 55, 73) """ return Rectangle(self.x, self.y, self.width, self.height).__iadd__(obj) def __iadd__(self, obj: Rectangle | Rect) -> Rectangle: """ >>> r = Rectangle() >>> r += Rectangle(5, 7, 20, 25) >>> r += (0, 0, 30, 10) >>> r Rectangle(0, 0, 30, 32) >>> r += 'aap' Traceback (most recent call last): ... TypeError: Can only add Rectangle or tuple (x, y, width, height), not 'aap'. """ try: x, y, width, height = obj except ValueError as e: raise TypeError( f"Can only add Rectangle or tuple (x, y, width, height), not {obj!r}." ) from e x1, y1 = x + width, y + height if self: ox1, oy1 = self.x + self.width, self.y + self.height self.x = min(self.x, x) self.y = min(self.y, y) self.x1 = max(ox1, x1) self.y1 = max(oy1, y1) else: self.x, self.y, self.width, self.height = x, y, width, height return self def __sub__(self, obj: Rectangle | Rect) -> Rectangle: """Create a new Rectangle is the union of the current rectangle with another Rectangle or tuple (x, y, width, height). >>> r = Rectangle(5, 7, 20, 25) >>> r - (20, 30, 40, 50) Rectangle(20, 30, 5, 2) >>> r - (30, 40, 40, 50) Rectangle() """ return Rectangle(self.x, self.y, self.width, self.height).__isub__(obj) def __isub__(self, obj: Rectangle | Rect) -> Rectangle: """ >>> r = Rectangle() >>> r -= Rectangle(5, 7, 20, 25) >>> r -= (0, 0, 30, 10) >>> r Rectangle(5, 7, 20, 3) >>> r -= 'aap' Traceback (most recent call last): ... TypeError: Can only subtract Rectangle or tuple (x, y, width, height), not 'aap'. """ try: x, y, width, height = obj except ValueError as e: raise TypeError( f"Can only subtract Rectangle or tuple (x, y, width, height), not {obj!r}." ) from e x1, y1 = x + width, y + height if self: ox1, oy1 = self.x + self.width, self.y + self.height self.x = max(self.x, x) self.y = max(self.y, y) self.x1 = min(ox1, x1) self.y1 = min(oy1, y1) else: self.x, self.y, self.width, self.height = x, y, width, height return self def __contains__(self, obj: Rectangle | Rect | Point) -> bool: """Check if a point `(x, y)` in inside rectangle `(x, y, width, height)` or if a rectangle instance is inside with the rectangle. >>> r=Rectangle(10, 5, 12, 12) >>> (0, 0) in r False >>> (10, 6) in r True >>> (12, 12) in r True >>> (100, 4) in r False >>> (11, 6, 5, 5) in r True >>> (11, 6, 15, 15) in r False >>> Rectangle(11, 6, 5, 5) in r True >>> Rectangle(11, 6, 15, 15) in r False >>> 'aap' in r Traceback (most recent call last): ... TypeError: Should compare to Rectangle, tuple (x, y, width, height) or point (x, y), not 'aap'. """ try: x, y, width, height = obj # type: ignore[misc] x1, y1 = x + width, y + width except ValueError: # point try: (x, y) = (x1, y1) = obj # type: ignore[misc] except ValueError as e: raise TypeError( f"Should compare to Rectangle, tuple (x, y, width, height) or point (x, y), not {obj!r}." ) from e return x >= self.x and x1 <= self.x1 and y >= self.y and y1 <= self.y1 def distance_point_point(point1: Point, point2: Point = (0.0, 0.0)) -> float: """Return the distance from point ``point1`` to ``point2``. >>> f"{distance_point_point((0,0), (1,1)):.3f}" '1.414' """ dx = point1[0] - point2[0] dy = point1[1] - point2[1] return sqrt(dx * dx + dy * dy) def distance_point_point_fast(point1: Point, point2: Point = (0.0, 0.0)) -> float: """Return the distance from point ``point1`` to ``point2``. This version is faster than ``distance_point_point()``, but less precise. >>> distance_point_point_fast((0,0), (1,1)) 2 """ dx = point1[0] - point2[0] dy = point1[1] - point2[1] return abs(dx) + abs(dy) def distance_rectangle_border_point(rect: Rect | Rectangle, point: Point) -> float: """Return the distance (fast) from a rectangle ``(x, y, width,height)`` to a ``point``.""" dx = dy = 0.0 px, py = point rx, ry, rw, rh = rect # typing: ignore[misc] rx1 = rx + rw ry1 = ry + rh if rx < px < rx1 and ry < py < ry1: return -min(px - rx, rx1 - px, py - ry, ry1 - py) if px < rx: dx = rx - px elif px > rx1: dx = px - rx1 if py < ry: dy = ry - py elif py > ry1: dy = py - ry1 return abs(dx) + abs(dy) def distance_rectangle_point(rect: Rect | Rectangle, point: Point) -> float: """Return the distance (fast) from a rectangle ``(x, y, width,height)`` to a ``point``.""" return max(0, distance_rectangle_border_point(rect, point)) def point_on_rectangle( rect: Rect | Rectangle, point: Point, border: bool = False ) -> Point: """Return the point on which ``point`` can be projecten on the rectangle. ``border = True`` will make sure the point is bound to the border of the reactangle. Otherwise, if the point is in the rectangle, it's okay. """ px, py = point rx, ry, rw, rh = rect x_inside = y_inside = False if px < rx: px = rx elif px > rx + rw: px = rx + rw elif border: x_inside = True if py < ry: py = ry elif py > ry + rh: py = ry + rh elif border: y_inside = True if x_inside and y_inside: if min(abs(rx - px), abs(rx + rw - px)) > min(abs(ry - py), abs(ry + rh - py)): py = ry if py < ry + rh / 2.0 else ry + rh else: px = rx if px < rx + rw / 2.0 else rx + rw return px, py def distance_line_point( line_start: Point, line_end: Point, point: Point ) -> tuple[float, Point]: """Calculate the distance of a ``point`` from a line. The line is marked by begin and end point ``line_start`` and ``line_end``. A tuple is returned containing the distance and point on the line. """ # The original end point: true_line_end = line_end # "Move" the line, so it "starts" on (0, 0) line_end = line_end[0] - line_start[0], line_end[1] - line_start[1] point = point[0] - line_start[0], point[1] - line_start[1] line_len_sqr = line_end[0] * line_end[0] + line_end[1] * line_end[1] # Both points are very near each other. if line_len_sqr < 0.0001: return distance_point_point(point), (line_start[0], line_start[1]) projlen = (line_end[0] * point[0] + line_end[1] * point[1]) / line_len_sqr if projlen < 0.0: # Closest point is the start of the line. return distance_point_point(point), (line_start[0], line_start[1]) elif projlen > 1.0: # Point has a projection after the line_end. return distance_point_point(point, line_end), ( true_line_end[0], true_line_end[1], ) else: # Projection is on the line. multiply the line_end with the projlen # factor to obtain the point on the line. proj = line_end[0] * projlen, line_end[1] * projlen return ( distance_point_point((proj[0] - point[0], proj[1] - point[1])), (line_start[0] + proj[0], line_start[1] + proj[1]), ) def intersect_line_line( line1_start: Point, line1_end: Point, line2_start: Point, line2_end: Point ) -> Point | None: """Find the point where the lines (segments) defined by ``(line1_start, line1_end)`` and ``(line2_start, line2_end)`` intersect. If no intersection occurs, ``None`` is returned. >>> intersect_line_line((3, 0), (8, 10), (0, 0), (10, 10)) (6, 6) >>> intersect_line_line((0, 0), (10, 10), (3, 0), (8, 10)) (6, 6) >>> intersect_line_line((0, 0), (10, 10), (8, 10), (3, 0)) (6, 6) >>> intersect_line_line((8, 10), (3, 0), (0, 0), (10, 10)) (6, 6) >>> intersect_line_line((0, 0), (0, 10), (3, 0), (8, 10)) >>> intersect_line_line((0, 0), (0, 10), (3, 0), (3, 10)) Ticket #168: >>> intersect_line_line((478.0, 117.0), (478.0, 166.0), (527.5, 141.5), (336.5, 139.5)) (478.5, 141.48167539267016) >>> intersect_line_line((527.5, 141.5), (336.5, 139.5), (478.0, 117.0), (478.0, 166.0)) (478.5, 141.48167539267016) This is a Python translation of the ``lines_intersect``, C Code from Graphics Gems II, Academic Press, Inc. The original routine was written by Mukesh Prasad. EULA: The Graphics Gems code is copyright-protected. In other words, you cannot claim the text of the code as your own and resell it. Using the code is permitted in any program, product, or library, non-commercial or commercial. Giving credit is not required, though is a nice gesture. The code comes as-is, and if there are any flaws or problems with any Gems code, nobody involved with Gems - authors, editors, publishers, or webmasters - are to be held responsible. Basically, don't be a jerk, and remember that anything free comes with no guarantee. """ # # This function computes whether two line segments, # respectively joining the input points (x1,y1) -- (x2,y2) # and the input points (x3,y3) -- (x4,y4) intersect. # If the lines intersect, the output variables x, y are # set to coordinates of the point of intersection. # # All values are in integers. The returned value is rounded # to the nearest integer point. # # If non-integral grid points are relevant, the function # can easily be transformed by substituting floating point # calculations instead of integer calculations. # # Entry # x1, y1, x2, y2 Coordinates of endpoints of one segment. # x3, y3, x4, y4 Coordinates of endpoints of other segment. # # Exit # x, y Coordinates of intersection point. # # The value returned by the function is one of: # # DONT_INTERSECT 0 # DO_INTERSECT 1 # COLLINEAR 2 # # Error conditions: # # Depending upon the possible ranges, and particularly on 16-bit # computers, care should be taken to protect from overflow. # # In the following code, 'long' values have been used for this # purpose, instead of 'int'. # x1, y1 = line1_start x2, y2 = line1_end x3, y3 = line2_start x4, y4 = line2_end # long a1, a2, b1, b2, c1, c2; /* Coefficients of line eqns. */ # long r1, r2, r3, r4; /* 'Sign' values */ # long denom, offset, num; /* Intermediate values */ # Compute a1, b1, c1, where line joining points 1 and 2 # is "a1 x + b1 y + c1 = 0". a1 = y2 - y1 b1 = x1 - x2 c1 = x2 * y1 - x1 * y2 # Compute r3 and r4. r3 = a1 * x3 + b1 * y3 + c1 r4 = a1 * x4 + b1 * y4 + c1 # Check signs of r3 and r4. If both point 3 and point 4 lie on # same side of line 1, the line segments do not intersect. if r3 and r4 and (r3 * r4) >= 0: return None # ( DONT_INTERSECT ) # Compute a2, b2, c2 a2 = y4 - y3 b2 = x3 - x4 c2 = x4 * y3 - x3 * y4 # Compute r1 and r2 r1 = a2 * x1 + b2 * y1 + c2 r2 = a2 * x2 + b2 * y2 + c2 # Check signs of r1 and r2. If both point 1 and point 2 lie # on same side of second line segment, the line segments do # not intersect. if r1 and r2 and (r1 * r2) >= 0: # SAME_SIGNS( r1, r2 )) return None # ( DONT_INTERSECT ) # Line segments intersect: compute intersection point. # The denom / 2 is to get rounding instead of truncating. It # is added or subtracted to the numerator, depending upon the # sign of the numerator. denom = a1 * b2 - a2 * b1 x_num = b1 * c2 - b2 * c1 y_num = a2 * c1 - a1 * c2 if not denom: return None # ( COLLINEAR ) offset = abs(denom) / 2 x = ((x_num - offset) if (x_num < 0) else (x_num + offset)) / denom y = ((y_num - offset) if (y_num < 0) else (y_num + offset)) / denom return x, y def rectangle_contains(inner: Rect, outer: Rect) -> bool: """Returns True if ``inner`` rect is contained in ``outer`` rect.""" ix, iy, iw, ih = inner ox, oy, ow, oh = outer return ox <= ix and oy <= iy and ox + ow >= ix + iw and oy + oh >= iy + ih def rectangle_intersects(recta: Rect, rectb: Rect) -> bool: """Return True if ``recta`` and ``rectb`` intersect. >>> rectangle_intersects((5,5,20, 20), (10, 10, 1, 1)) True >>> rectangle_intersects((40, 30, 10, 1), (1, 1, 1, 1)) False """ ax, ay, aw, ah = recta bx, by, bw, bh = rectb return ax <= bx + bw and ax + aw >= bx and ay <= by + bh and ay + ah >= by def rectangle_clip(recta: Rect, rectb: Rect) -> Rect | None: """Return the clipped rectangle of ``recta`` and ``rectb``. If they do not intersect, ``None`` is returned. >>> rectangle_clip((0, 0, 20, 20), (10, 10, 20, 20)) (10, 10, 10, 10) """ ax, ay, aw, ah = recta bx, by, bw, bh = rectb x = max(ax, bx) y = max(ay, by) w = min(ax + aw, bx + bw) - x h = min(ay + ah, by + bh) - y return None if w < 0 or h < 0 else (x, y, w, h) python-gaphas-5.1.2/gaphas/guide.py000066400000000000000000000171531512665300000172200ustar00rootroot00000000000000"""Module implements guides when moving items and handles around.""" from __future__ import annotations from dataclasses import dataclass from functools import singledispatch from itertools import chain from typing import TYPE_CHECKING, Iterable, SupportsFloat from gaphas.canvas import all_children from gaphas.connector import Handle from gaphas.handlemove import HandleMove, ItemHandleMove from gaphas.item import Element, Item, Line from gaphas.move import ItemMove, Move from gaphas.types import Pos if TYPE_CHECKING: from gaphas.view import GtkView class ItemGuide: """Get edges on an item, on which we can align the items.""" def __init__(self, item: Item, handle: Handle | None = None): self.item = item self.handle = handle def horizontal(self) -> Iterable[SupportsFloat]: """Return horizontal edges (on y axis) in item coordinates.""" return () def vertical(self) -> Iterable[SupportsFloat]: """Return vertical edges (on x axis) in item coordinates.""" return () Guide = singledispatch(ItemGuide) @Guide.register(Element) class ElementGuide(ItemGuide): """Guide to align Element items.""" def horizontal(self) -> Iterable[SupportsFloat]: element = self.item assert isinstance(element, Element) if self.handle in element.handles(): return () y = element.handles()[0].pos.y h = element.height return [y, y + h / 2, y + h] def vertical(self) -> Iterable[SupportsFloat]: element = self.item assert isinstance(element, Element) if self.handle in element.handles(): return () x = element.handles()[0].pos.x w = element.width return [x, x + w / 2, x + w] @Guide.register(Line) class LineGuide(ItemGuide): """Guide for orthogonal lines.""" def horizontal(self) -> Iterable[SupportsFloat]: line = self.item assert isinstance(line, Line) if not line.orthogonal or self.handle not in line.handles(): yield from (h.pos.y for h in line.handles() if h is not self.handle) def vertical(self) -> Iterable[SupportsFloat]: line = self.item assert isinstance(line, Line) if not line.orthogonal or self.handle not in line.handles(): yield from (h.pos.x for h in line.handles() if h is not self.handle) @dataclass(frozen=True) class Guides: vertical: list[float] horizontal: list[float] MARGIN = 4 def find_vertical_guides(view, handle, item_vedges, height, excluded_items, margin): items = ( set( chain.from_iterable( view.get_items_in_rectangle((x - margin, 0, margin * 2, height)) for x in item_vedges ) ) - excluded_items ) guides = (Guide(item, handle) for item in items) i2v = view.get_matrix_i2v vedges = { i2v(g.item).transform_point(x, 0)[0] for g in guides for x in g.vertical() } dx, edges_x = find_closest(item_vedges, vedges) return dx, edges_x def find_horizontal_guides(view, handle, item_hedges, width, excluded_items, margin): items = ( set( chain.from_iterable( view.get_items_in_rectangle((0, y - margin, width, margin * 2)) for y in item_hedges ) ) - excluded_items ) guides = (Guide(item, handle) for item in items) i2v = view.get_matrix_i2v hedges = { i2v(g.item).transform_point(0, y)[1] for g in guides for y in g.horizontal() } dy, edges_y = find_closest(item_hedges, hedges) return dy, edges_y def get_excluded_items(view, item): """Get a set of items excluded from guide calculation.""" assert view.model excluded_items = set(all_children(view.model, item)) excluded_items.add(item) excluded_items.update(view.selection.selected_items) return excluded_items def find_closest(item_edges, edges, margin=MARGIN): delta = 0 min_d = 1000 closest = [] for e in edges: for ie in item_edges: d = abs(e - ie) if d < min_d: min_d = d delta = e - ie closest = [e] elif d == min_d: closest.append(e) return (delta, closest) if min_d <= margin else (0, ()) def update_guides(view, handle, vedges, hedges, excluded_items=frozenset()): dx, edges_x = find_vertical_guides( view, handle, vedges, view.get_height(), excluded_items, MARGIN ) dy, edges_y = find_horizontal_guides( view, handle, hedges, view.get_width(), excluded_items, MARGIN ) view.guides = Guides(edges_x, edges_y) view.update_back_buffer() return dx, dy def reset_guides(view): try: del view.guides except AttributeError: # No problem if guides do not exist. pass else: view.update_back_buffer() class GuidedItemMoveMixin: """Move the item, lock position on any element that's located at the same location.""" view: GtkView item: Item last_x: float last_y: float def move(self, pos: Pos) -> None: item = self.item view = self.view px, py = pos pdx, pdy = px - self.last_x, py - self.last_y transform = view.get_matrix_i2v(item).transform_point item_guide = Guide(item) item_vedges = [transform(x, 0)[0] + pdx for x in item_guide.vertical()] item_hedges = [transform(0, y)[1] + pdy for y in item_guide.horizontal()] excluded_items = get_excluded_items(view, item) dx, dy = update_guides(view, None, item_vedges, item_hedges, excluded_items) # Call super class, with new position super().move((pos[0] + dx, pos[1] + dy)) # type: ignore[misc] def stop_move(self, pos: Pos) -> None: super().stop_move(pos) # type: ignore[misc] reset_guides(self.view) @Move.register(Element) class GuidedItemMove(GuidedItemMoveMixin, ItemMove): pass class GuidedItemHandleMoveMixin: """Move a handle and lock the position of other elements. Locks the position of another element that's located at the same position. """ view: GtkView item: Item handle: Handle def move(self, pos: Pos) -> None: super().move(pos) # type: ignore[misc] item = self.item view = self.view model = view.model assert model x, y = pos dx, dy = update_guides(view, self.handle, (x,), (y,)) self.handle.pos = view.get_matrix_v2i(item).transform_point(x + dx, y + dy) model.request_update(item) def stop_move(self, pos: Pos) -> None: super().stop_move(pos) # type: ignore[misc] reset_guides(self.view) @HandleMove.register(Element) class GuidedElementHandleMove(GuidedItemHandleMoveMixin, ItemHandleMove): pass @HandleMove.register(Line) class GuidedLineHandleMove(GuidedItemHandleMoveMixin, ItemHandleMove): pass class GuidePainter: def __init__(self, view: GtkView): self.view = view def paint(self, _items, cr): try: guides = self.view.guides except AttributeError: return view = self.view cr.save() try: cr.identity_matrix() cr.set_line_width(1) cr.set_source_rgba(0.0, 0.0, 1.0, 0.6) for g in guides.vertical: cr.move_to(g, 0) cr.line_to(g, view.get_height()) cr.stroke() for g in guides.horizontal: cr.move_to(0, g) cr.line_to(view.get_width(), g) cr.stroke() finally: cr.restore() python-gaphas-5.1.2/gaphas/handle.py000066400000000000000000000053611512665300000173540ustar00rootroot00000000000000"""Basic connectors such as Ports and Handles.""" from __future__ import annotations from gaphas.position import Position from gaphas.solver import NORMAL from gaphas.types import Pos, SupportsFloatPos, TypedProperty class Handle: """Handles are used to support modifications of Items. If the handle is connected to an item, the ``connected_to`` property should refer to the item. A ``disconnect`` handler should be provided that handles all disconnect behaviour (e.g. clean up constraints and ``connected_to``). Note for those of you that use the Pickle module to persist a canvas: The property ``disconnect`` should contain a callable object (with __call__() method), so the pickle handler can also pickle that. Pickle is not capable of pickling ``instancemethod`` or ``function`` objects. """ def __init__( self, pos: Pos = (0, 0), strength: int = NORMAL, connectable: bool = False, movable: bool = True, ) -> None: """Create a new handle. Position is in item coordinates. """ self._pos = Position(pos[0], pos[1], strength) self._connectable = connectable self._movable = movable self._visible = True self._glued = False def _set_pos(self, pos: Position | SupportsFloatPos) -> None: """ Shortcut for ``handle.pos.pos = pos`` >>> h = Handle((10, 10)) >>> h.pos = (20, 15) >>> h.pos """ self._pos.pos = pos pos: TypedProperty[Position, Position | SupportsFloatPos] pos = property(lambda s: s._pos, _set_pos, doc="The Handle's position") @property def connectable(self) -> bool: """Can this handle actually connectect to a port?""" return self._connectable @connectable.setter def connectable(self, connectable: bool) -> None: self._connectable = connectable @property def movable(self) -> bool: """Can this handle be moved by a mouse pointer?""" return self._movable @movable.setter def movable(self, movable: bool) -> None: self._movable = movable @property def visible(self) -> bool: """Is this handle visible to the user?""" return self._visible @visible.setter def visible(self, visible: bool) -> None: self._visible = visible @property def glued(self) -> bool: """Is the handle being moved and about to be connected?""" return self._glued @glued.setter def glued(self, glued: bool) -> None: self._glued = glued def __str__(self) -> str: return f"<{self.__class__.__name__} object on ({self._pos.x}, {self._pos.y})>" __repr__ = __str__ python-gaphas-5.1.2/gaphas/handlemove.py000066400000000000000000000112521512665300000202370ustar00rootroot00000000000000from __future__ import annotations import logging from functools import singledispatch from operator import itemgetter from typing import TYPE_CHECKING, Iterable, Sequence, Iterator from gaphas.connector import ConnectionSink, ConnectionSinkType, Connector from gaphas.handle import Handle from gaphas.item import Item from gaphas.types import Pos if TYPE_CHECKING: from gaphas.view import GtkView log = logging.getLogger(__name__) class ItemHandleMove: """Move a handle (role is applied to the handle)""" GLUE_DISTANCE = 10 last_x: float last_y: float def __init__(self, item: Item, handle: Handle, view: GtkView): self.item = item self.handle = handle self.view = view def start_move(self, pos: Pos) -> None: self.last_x, self.last_y = pos model = self.view.model assert model if cinfo := model.connections.get_connection(self.handle): self.handle.glued = True model.connections.solver.remove_constraint(cinfo.constraint) def move(self, pos: Pos) -> None: item = self.item view = self.view assert view.model v2i = view.get_matrix_v2i(item) x, y = v2i.transform_point(*pos) self.handle.pos = (x, y) self.handle.glued = bool(self.glue(pos)) # do not request matrix update as matrix recalculation will be # performed due to item normalization if required view.model.request_update(item) def stop_move(self, pos: Pos) -> None: self.handle.glued = False self.connect(pos) def glue( self, pos: Pos, distance: int = GLUE_DISTANCE ) -> ConnectionSinkType | None: """Glue to an item near a specific point. Returns a ConnectionSink or None. """ item = self.item handle = self.handle view = self.view model = view.model assert model connections = model.connections if not handle.connectable: return None for connectable in item_at_point(view, pos, distance=distance, exclude=(item,)): connector = Connector(self.item, self.handle, connections) sink = ConnectionSink(connectable) if connector.glue(sink): return sink return None def connect(self, pos: Pos) -> None: """Connect a handle of a item to connectable item. Connectable item is found by `ConnectHandleTool.glue` method. :Parameters: item Connecting item. handle Handle of connecting item. pos Position to connect to (or near at least) """ handle = self.handle model = self.view.model assert model connections = model.connections connector = Connector(self.item, handle, connections) if sink := self.glue(pos): connector.connect(sink) elif connections.get_connection(handle): connector.disconnect() model.request_update(self.item) HandleMove = singledispatch(ItemHandleMove) def item_distance( view: GtkView, pos: Pos, distance: float = 0.5, exclude: Sequence[Item] = (), ) -> Iterable[tuple[float, Item]]: """Return the topmost item located at ``pos`` (x, y). Parameters: - view: a view - pos: Position, a tuple ``(x, y)`` in view coordinates - selected: if False returns first non-selected item """ item: Item vx, vy = pos rect = (vx - distance, vy - distance, distance * 2, distance * 2) for item in reversed(list(view.get_items_in_rectangle(rect))): if item in exclude: continue v2i = view.get_matrix_v2i(item) ix, iy = v2i.transform_point(vx, vy) d = item.point(ix, iy) if d is None: log.warning("Item distance is None for %s", item) continue if d < distance: yield d, item def order_items(distance_items, key=itemgetter(0)): inside = [] outside = [] for e in distance_items: if key(e) > 0: outside.append(e) else: inside.append(e) inside.sort(key=key, reverse=True) outside.sort(key=key) return inside + outside def item_at_point( view: GtkView, pos: Pos, distance: float = 0.5, exclude: Sequence[Item] = (), ) -> Iterator[Item]: """Return the topmost item located at ``pos`` (x, y). Parameters: - view: a view - pos: Position, a tuple ``(x, y)`` in view coordinates - selected: if False returns first non-selected item """ return ( item for _d, item in order_items(item_distance(view, pos, distance, exclude)) ) python-gaphas-5.1.2/gaphas/item.py000066400000000000000000000314371512665300000170620ustar00rootroot00000000000000"""Basic items.""" from __future__ import annotations from dataclasses import dataclass from math import atan2 from typing import TYPE_CHECKING, Iterable, Protocol, Sequence, runtime_checkable from cairo import Context as CairoContext from gaphas.constraint import Constraint, EqualsConstraint, constraint from gaphas.geometry import distance_line_point, distance_rectangle_border_point from gaphas.handle import Handle from gaphas.matrix import Matrix from gaphas.port import LinePort, Port from gaphas.solver import REQUIRED, VERY_STRONG, variable if TYPE_CHECKING: from gaphas.connections import Connections @dataclass(frozen=True) class DrawContext: cairo: CairoContext selected: bool focused: bool hovered: bool @runtime_checkable class Item(Protocol): """This protocol should be implemented by model items. All items that are rendered on a view. """ @property def matrix(self) -> Matrix: """The "local", item-to-parent matrix.""" @property def matrix_i2c(self) -> Matrix: """Matrix from item to toplevel.""" def handles(self) -> Sequence[Handle]: """Return a list of handles owned by the item.""" def ports(self) -> Sequence[Port]: """Return list of ports owned by the item.""" def point(self, x: float, y: float) -> float: """Get the distance from a point (``x``, ``y``) to the item. ``x`` and ``y`` are in item coordinates. A distance of 0 means the point is on the item. """ def draw(self, context: DrawContext) -> None: """Render the item to a canvas view. Context contains the following attributes: * `cairo`: the CairoContext use this one to draw * `selected`, `focused`, `hovered`: view state of items (True/False) """ def matrix_i2i(from_item: Item, to_item: Item) -> Matrix: i2c = from_item.matrix_i2c c2i = to_item.matrix_i2c.inverse() return i2c.multiply(c2i) class Matrices: def __init__(self, **kwargs: object) -> None: super().__init__(**kwargs) self._matrix = Matrix() self._matrix_i2c = Matrix() @property def matrix(self) -> Matrix: return self._matrix @property def matrix_i2c(self) -> Matrix: return self._matrix_i2c [NW, NE, SE, SW] = list(range(4)) class Element(Matrices): """An Element has 4 handles (for a start): .. code-block:: text NW +---+ NE | | SW +---+ SE """ min_width = variable(strength=REQUIRED, varname="_min_width") min_height = variable(strength=REQUIRED, varname="_min_height") def __init__( self, connections: Connections, width: float = 10, height: float = 10, **kwargs: object, ) -> None: super().__init__(**kwargs) self._handles = [h(strength=VERY_STRONG) for h in [Handle] * 4] handles = self._handles h_nw = handles[NW] h_ne = handles[NE] h_sw = handles[SW] h_se = handles[SE] # edge of element define default element ports self._ports = [ LinePort(h_nw.pos, h_ne.pos), LinePort(h_ne.pos, h_se.pos), LinePort(h_se.pos, h_sw.pos), LinePort(h_sw.pos, h_nw.pos), ] # initialize min_x variables self.min_width, self.min_height = 10, 10 add = connections.add_constraint add(self, constraint(horizontal=(h_nw.pos, h_ne.pos))) add(self, constraint(horizontal=(h_sw.pos, h_se.pos))) add(self, constraint(vertical=(h_nw.pos, h_sw.pos))) add(self, constraint(vertical=(h_ne.pos, h_se.pos))) # create minimal size constraints add(self, constraint(left_of=(h_nw.pos, h_se.pos), delta=self.min_width)) add(self, constraint(above=(h_nw.pos, h_se.pos), delta=self.min_height)) self.width = width self.height = height # Trigger solver to honour width/height by SE handle pos self._handles[SE].pos.x.dirty() self._handles[SE].pos.y.dirty() @property def width(self) -> float: """Width of the box, calculated as the distance from the left and right handle.""" h = self._handles return float(h[SE].pos.x) - float(h[NW].pos.x) @width.setter def width(self, width: float) -> None: """ >>> b=Element() >>> b.width = 20 >>> b.width 20.0 >>> b._handles[NW].pos.x Variable(0, 40) >>> b._handles[SE].pos.x Variable(20, 40) """ h = self._handles h[SE].pos.x = h[NE].pos.x = h[NW].pos.x + width @property def height(self) -> float: """Height.""" h = self._handles return float(h[SE].pos.y) - float(h[NW].pos.y) @height.setter def height(self, height: float) -> None: """ >>> b=Element() >>> b.height = 20 >>> b.height 20.0 >>> b.height = 2 >>> b.height 2.0 >>> b._handles[NW].pos.y Variable(0, 40) >>> b._handles[SE].pos.y Variable(2, 40) """ h = self._handles h[SE].pos.y = h[SW].pos.y = h[NW].pos.y + height def handles(self) -> Sequence[Handle]: """Return a list of handles owned by the item.""" return self._handles def ports(self) -> Sequence[Port]: """Return list of ports.""" return self._ports def point(self, x: float, y: float) -> float: """Distance from the point (x, y) to the item. >>> e = Element() >>> e.point(20, 10) 10.0 """ h = self._handles x0, y0 = h[NW].pos x1, y1 = h[SE].pos return distance_rectangle_border_point((x0, y0, x1 - x0, y1 - y0), (x, y)) def draw(self, context: DrawContext) -> None: pass def create_orthogonal_constraints( handles: Sequence[Handle], horizontal: bool ) -> Iterable[Constraint]: rest = 1 if horizontal else 0 for pos, (h0, h1) in enumerate(zip(handles, handles[1:])): p0 = h0.pos p1 = h1.pos if pos % 2 == rest: yield EqualsConstraint(a=p0.x, b=p1.x) else: yield EqualsConstraint(a=p0.y, b=p1.y) class Line(Matrices): """A Line item. Properties: - fuzziness (0.0..n): an extra margin that should be taken into account when calculating the distance from the line (using point()). - orthogonal (bool): whether or not the line should be orthogonal (only straight angles) - horizontal: first line segment is horizontal - line_width: width of the line to be drawn This line also supports arrow heads on both the begin and end of the line. These are drawn with the methods draw_head(context) and draw_tail(context). The coordinate system is altered so the methods do not have to know about the angle of the line segment (e.g. drawing a line from (10, 10) via (0, 0) to (10, -10) will draw an arrow point). """ def __init__(self, connections: Connections, **kwargs: object) -> None: super().__init__(**kwargs) self._connections = connections self._handles = [Handle(connectable=True), Handle((10, 10), connectable=True)] self._ports: list[Port] = [] self._update_ports() self._line_width = 2.0 self._fuzziness = 0.0 self._horizontal = False self._orthogonal = False self._orthogonal_constraints: list[Constraint] = [] @property def head(self) -> Handle: return self._handles[0] @property def tail(self) -> Handle: return self._handles[-1] @property def line_width(self) -> float: return self._line_width @line_width.setter def line_width(self, line_width: float) -> None: self._line_width = line_width @property def fuzziness(self) -> float: return self._fuzziness @fuzziness.setter def fuzziness(self, fuzziness: float) -> None: self._fuzziness = fuzziness def update_orthogonal_constraints(self) -> None: """Update the constraints required to maintain the orthogonal line.""" # Use public `horizontal` and `orthogonal` field, so properties can be overwritten for c in self._orthogonal_constraints: self._connections.remove_constraint(self, c) del self._orthogonal_constraints[:] if not self.orthogonal or len(self._handles) < 3: return add = self._connections.add_constraint cons = [ add(self, c) for c in create_orthogonal_constraints(self._handles, self.horizontal) ] self._set_orthogonal_constraints(cons) def _set_orthogonal_constraints( self, orthogonal_constraints: list[Constraint] ) -> None: """Setter for the constraints maintained. Required for the undo system. """ self._orthogonal_constraints = orthogonal_constraints @property def orthogonal(self) -> bool: return self._orthogonal @orthogonal.setter def orthogonal(self, orthogonal: bool) -> None: """ >>> a = Line() >>> a.orthogonal False """ self._orthogonal = True self.update_orthogonal_constraints() @property def horizontal(self) -> bool: return self._horizontal @horizontal.setter def horizontal(self, horizontal: bool) -> None: """ >>> line = Line() >>> line.horizontal False >>> line.horizontal = False >>> line.horizontal False """ self._horizontal = horizontal self.update_orthogonal_constraints() def insert_handle(self, index: int, handle: Handle) -> None: self._handles.insert(index, handle) def remove_handle(self, handle: Handle) -> None: self._handles.remove(handle) def insert_port(self, index: int, port: Port) -> None: self._ports.insert(index, port) def remove_port(self, port: Port) -> None: self._ports.remove(port) def _update_ports(self) -> None: """Update line ports. This destroys all previously created ports and should only be used when initializing the line. """ assert len(self._handles) >= 2, "Not enough segments" handles = self._handles self._ports = [ LinePort(h1.pos, h2.pos) for h1, h2 in zip(handles[:-1], handles[1:]) ] def opposite(self, handle: Handle) -> Handle: """Given the handle of one end of the line, return the other end.""" handles = self._handles if handle is handles[0]: return handles[-1] elif handle is handles[-1]: return handles[0] else: raise KeyError("Handle is not an end handle") def handles(self) -> Sequence[Handle]: """Return a list of handles owned by the item.""" return self._handles def ports(self) -> Sequence[Port]: """Return list of ports.""" return self._ports def point(self, x: float, y: float) -> float: """ >>> a = Line() >>> a.handles()[1].pos = 25, 5 >>> a._handles.append(a._create_handle((30, 30))) >>> a.point(-1, 0) 1.0 >>> f"{a.point(5, 4):.3f}" '2.942' >>> f"{a.point(29, 29):.3f}" '0.784' """ hpos = [h.pos for h in self._handles] p = (x, y) distance, _point = min( distance_line_point(start, end, p) # type: ignore[arg-type] for start, end in zip(hpos[:-1], hpos[1:]) ) return max(0.0, distance - self.fuzziness) def draw_head(self, context: DrawContext) -> None: """Default head drawer: move cursor to the first handle.""" context.cairo.move_to(0, 0) def draw_tail(self, context: DrawContext) -> None: """Default tail drawer: draw line to the last handle.""" context.cairo.line_to(0, 0) def draw(self, context: DrawContext) -> None: """Draw the line itself. See Item.draw(context). """ def draw_line_end(pos, angle, draw): cr = context.cairo cr.save() try: cr.translate(*pos) cr.rotate(angle) draw(context) finally: cr.restore() cr = context.cairo cr.set_line_width(self.line_width) h0, h1 = self._handles[:2] p0, p1 = h0.pos, h1.pos head_angle = atan2(p1.y - p0.y, p1.x - p0.x) draw_line_end(self._handles[0].pos, head_angle, self.draw_head) for h in self._handles[1:-1]: cr.line_to(*h.pos) h1, h0 = self._handles[-2:] p1, p0 = h1.pos, h0.pos tail_angle = atan2(p1.y - p0.y, p1.x - p0.x) draw_line_end(self._handles[-1].pos, tail_angle, self.draw_tail) cr.stroke() python-gaphas-5.1.2/gaphas/matrix.py000066400000000000000000000076571512665300000174370ustar00rootroot00000000000000"""Some Gaphor specific updates to the canvas. This is done by setting the correct properties on gaphas' modules. Matrix ------ Small utility class wrapping cairo.Matrix. The `Matrix` class adds state notification capabilities. """ from __future__ import annotations from typing import Callable, SupportsFloat import cairo Matrixtuple = tuple[float, float, float, float, float, float] class Matrix: """Matrix wrapper. >>> Matrix() Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0) """ def __init__( self, xx: float = 1.0, yx: float = 0.0, xy: float = 0.0, yy: float = 1.0, x0: float = 0.0, y0: float = 0.0, matrix: cairo.Matrix | None = None, ) -> None: self._matrix = matrix or cairo.Matrix(xx, yx, xy, yy, x0, y0) self._handlers: set[Callable[[Matrix, Matrixtuple], None]] = set() def add_handler( self, handler: Callable[[Matrix, Matrixtuple], None], ) -> None: self._handlers.add(handler) def remove_handler( self, handler: Callable[[Matrix, Matrixtuple], None], ) -> None: self._handlers.discard(handler) def notify(self, old: Matrixtuple) -> None: for handler in self._handlers: handler(self, old) def invert(self) -> None: old: Matrixtuple = self.tuple() self._matrix.invert() self.notify(old) def rotate(self, radians: float) -> None: old: Matrixtuple = self.tuple() self._matrix.rotate(radians) self.notify(old) def scale(self, sx: float, sy: float) -> None: old = self.tuple() self._matrix.scale(sx, sy) self.notify(old) def translate(self, tx: float, ty: float) -> None: old: Matrixtuple = self.tuple() self._matrix.translate(tx, ty) self.notify(old) def set( self, xx: float | None = None, yx: float | None = None, xy: float | None = None, yy: float | None = None, x0: float | None = None, y0: float | None = None, ) -> None: updated = False m = self._matrix old = self.tuple() for name, val in ( ("xx", xx), ("yx", yx), ("xy", xy), ("yy", yy), ("x0", x0), ("y0", y0), ): if val is not None and val != getattr(m, name): setattr(m, name, val) updated = True if updated: self.notify(old) def multiply(self, m: Matrix) -> Matrix: return Matrix(matrix=self._matrix.multiply(m._matrix)) def transform_distance( self, dx: SupportsFloat, dy: SupportsFloat ) -> tuple[float, float]: return self._matrix.transform_distance(dx, dy) # type: ignore[no-any-return] def transform_point( self, x: SupportsFloat, y: SupportsFloat ) -> tuple[float, float]: return self._matrix.transform_point(x, y) # type: ignore[no-any-return] def inverse(self) -> Matrix: m = Matrix(matrix=cairo.Matrix(*self._matrix)) m.invert() return m def tuple(self) -> Matrixtuple: return tuple(self) # type: ignore[arg-type, return-value] def to_cairo(self) -> cairo.Matrix: return self._matrix def __eq__(self, other: object) -> bool: # sourcery skip: remove-unnecessary-cast return ( bool(self._matrix == other._matrix) if isinstance(other, Matrix) else False ) def __getitem__(self, val: int) -> float: return self._matrix[val] # type: ignore[no-any-return] def __mul__(self, other: Matrix) -> Matrix: return Matrix(matrix=self._matrix * other._matrix) def __imul__(self, other: Matrix) -> Matrix: old: Matrixtuple = self.tuple() self._matrix *= other._matrix self.notify(old) return self def __repr__(self) -> str: return f"Matrix{tuple(self._matrix)}" python-gaphas-5.1.2/gaphas/model.py000066400000000000000000000044101512665300000172130ustar00rootroot00000000000000from __future__ import annotations from typing import Collection, Iterable, Protocol, runtime_checkable from gaphas.connections import Connections from gaphas.item import Item @runtime_checkable class View(Protocol): def request_update( self, items: Collection[Item], matrix_only_items: Collection[Item], removed_items: Collection[Item], ) -> None: """Propagate update requests to the view. By invoking this method, the View will be made aware of state changes, that will either: 1. Cause the item to be fully updated 2. Just cause the item to move, without any further updates. """ @runtime_checkable class Model(Protocol): """Any class that adhere's to the Model protocol can be used as a model for GtkView.""" @property def connections(self) -> Connections: """The connections instance used for this model.""" def get_all_items(self) -> Iterable[Item]: """Iterate over all items in the order they need to be rendered in. Normally that will be depth-first. """ def get_parent(self, item: Item) -> Item | None: """Get the parent item of an item. Returns ``None`` if there is no parent item. """ def get_children(self, item: Item | None) -> Iterable[Item]: """Iterate all direct child items of an item.""" def sort(self, items: Collection[Item]) -> Iterable[Item]: """Sort a collection of items in the order they need to be rendered in.""" def request_update(self, item: Item) -> None: """Request update for an item. Arguments: item (Item): The item to be updated """ def update_now(self, dirty_items: Collection[Item]) -> None: """This method is called during the update process. It will allow the model to do some additional updating of it's own. """ def register_view(self, view: View) -> None: """Allow a view to be registered. Registered views should receive update requests for modified items. """ def unregister_view(self, view: View) -> None: """Unregister a previously registered view. If a view is not registered, nothing should happen. """ python-gaphas-5.1.2/gaphas/move.py000066400000000000000000000025241512665300000170650ustar00rootroot00000000000000from __future__ import annotations from functools import singledispatch from typing import TYPE_CHECKING, Protocol from gaphas.item import Item from gaphas.types import Pos if TYPE_CHECKING: from gaphas.view import GtkView class MoveType(Protocol): item: Item def __init__(self, item: Item, view: GtkView): ... def start_move(self, pos: Pos) -> None: ... def move(self, pos: Pos) -> None: ... def stop_move(self, pos: Pos) -> None: ... class ItemMove: """Aspect for dealing with motion on an item. In this case the item is moved. """ last_x: float last_y: float def __init__(self, item: Item, view: GtkView): self.item = item self.view = view def start_move(self, pos: Pos) -> None: self.last_x, self.last_y = pos def move(self, pos: Pos) -> None: """Move the item. x and y are in view coordinates. """ item = self.item view = self.view assert view.model v2i = view.get_matrix_v2i(item) x, y = pos dx, dy = x - self.last_x, y - self.last_y dx, dy = v2i.transform_distance(dx, dy) self.last_x, self.last_y = x, y item.matrix.translate(dx, dy) view.request_update([item]) def stop_move(self, pos: Pos) -> None: pass Move = singledispatch(ItemMove) python-gaphas-5.1.2/gaphas/painter/000077500000000000000000000000001512665300000172045ustar00rootroot00000000000000python-gaphas-5.1.2/gaphas/painter/__init__.py000066400000000000000000000011241512665300000213130ustar00rootroot00000000000000from __future__ import annotations from typing import TYPE_CHECKING from gaphas.painter.chain import PainterChain from gaphas.painter.freehand import FreeHandPainter from gaphas.painter.handlepainter import HandlePainter from gaphas.painter.itempainter import ItemPainter from gaphas.painter.painter import Painter if TYPE_CHECKING: from gaphas.view import GtkView def DefaultPainter(view: GtkView) -> Painter: """Default painter, containing item, handle and tool painters.""" return ( PainterChain().append(ItemPainter(view.selection)).append(HandlePainter(view)) ) python-gaphas-5.1.2/gaphas/painter/chain.py000066400000000000000000000015541512665300000206450ustar00rootroot00000000000000from __future__ import annotations from collections.abc import Collection from cairo import Context as CairoContext from gaphas.item import Item from gaphas.painter.painter import Painter class PainterChain: """Chain up a set of painters.""" def __init__(self) -> None: self._painters: list[Painter] = [] def append(self, painter: Painter) -> PainterChain: """Add a painter to the list of painters.""" self._painters.append(painter) return self def prepend(self, painter: Painter) -> PainterChain: """Add a painter to the beginning of the list of painters.""" self._painters.insert(0, painter) return self def paint(self, items: Collection[Item], cairo: CairoContext) -> None: """See Painter.paint().""" for painter in self._painters: painter.paint(items, cairo) python-gaphas-5.1.2/gaphas/painter/freehand.py000066400000000000000000000112241512665300000213320ustar00rootroot00000000000000"""Cairo context using Steve Hanov's freehand drawing code. # Crazyline. By Steve Hanov, 2008 Released to the public domain. # The idea is to draw a curve, setting two control points at # random close to each side of the line. The longer the line, the # sloppier it's drawn. See: http://stevehanov.ca/blog/index.php?id=33 and http://stevehanov.ca/blog/index.php?id=93 """ from math import sqrt from random import Random from collections.abc import Collection from cairo import Context as CairoContext from gaphas.item import Item from gaphas.painter.painter import ItemPainterType class FreeHandCairoContext: KAPPA = 0.5522847498 def __init__(self, cr, sloppiness=0.5): self.cr = cr self.sloppiness = sloppiness # In range 0.0 .. 2.0 def __getattr__(self, key): return getattr(self.cr, key) def line_to(self, x, y): cr = self.cr sloppiness = self.sloppiness from_x, from_y = cr.get_current_point() # calculate the length of the line. length = sqrt((x - from_x) * (x - from_x) + (y - from_y) * (y - from_y)) # This offset determines how sloppy the line is drawn. It depends on # the length, but maxes out at 20. offset = length / 10 * sloppiness offset = min(offset, 20) dev_x, dev_y = cr.user_to_device(x, y) rand = Random(from_x + from_y + dev_x + dev_y + length + offset).random # Overshoot the destination a little, as one might if drawing with a pen. to_x = x + sloppiness * rand() * offset / 4 to_y = y + sloppiness * rand() * offset / 4 # t1 and t2 are coordinates of a line shifted under or to the right of # our original. t1_x = from_x + offset t1_y = from_y + offset t2_x = to_x + offset t2_y = to_y + offset # create a control point at random along our shifted line. r = rand() control1_x = t1_x + r * (t2_x - t1_x) control1_y = t1_y + r * (t2_y - t1_y) # now make t1 and t2 the coordinates of our line shifted above # and to the left of the original. t1_x = from_x - offset t2_x = to_x - offset t1_y = from_y - offset t2_y = to_y - offset # create a second control point at random along the shifted line. r = rand() control2_x = t1_x + r * (t2_x - t1_x) control2_y = t1_y + r * (t2_y - t1_y) # draw the line! cr.curve_to(control1_x, control1_y, control2_x, control2_y, to_x, to_y) def rel_line_to(self, dx, dy): cr = self.cr from_x, from_y = cr.get_current_point() self.line_to(from_x + dx, from_y + dy) def curve_to(self, x1, y1, x2, y2, x3, y3): cr = self.cr from_x, from_y = cr.get_current_point() dev_x, dev_y = cr.user_to_device(x3, y3) rand = Random( from_x + from_y + dev_x + dev_y + x1 + y1 + x2 + y2 + x3 + y3 ).random r = rand() c1_x = from_x + r * (x1 - from_x) c1_y = from_y + r * (y1 - from_y) r = rand() c2_x = x3 + r * (x2 - x3) c2_y = y3 + r * (y2 - y3) cr.curve_to(c1_x, c1_y, c2_x, c2_y, x3, y3) def rel_curve_to(self, dx1, dy1, dx2, dy2, dx3, dy3): cr = self.cr from_x, from_y = cr.get_current_point() self.curve_to( from_x + dx1, from_y + dy1, from_x + dx2, from_y + dy2, from_x + dx3, from_y + dy3, ) def rectangle(self, x, y, width, height): x1 = x + width y1 = y + height self.move_to(x, y) self.line_to(x1, y) self.line_to(x1, y1) self.line_to(x, y1) if self.sloppiness > 0.1: self.line_to(x, y) else: self.close_path() class FreeHandPainter: """This painter is a wrapper for an Item painter. The Cairo context is modified to allow for a sloppy, hand written drawing style. Range [0..2.0] gives acceptable results. * Draftsman: 0.0 * Artist: 0.25 * Cartoonist: 0.5 * Child: 1.0 * Drunk: 2.0 """ def __init__(self, item_painter: ItemPainterType, sloppiness: float = 0.5): self.item_painter = item_painter self.sloppiness = sloppiness def paint_item(self, item: Item, cairo: CairoContext) -> None: # Bounding painter requires painting per item self.item_painter.paint_item(item, FreeHandCairoContext(cairo, self.sloppiness)) def paint(self, items: Collection[Item], cairo: CairoContext) -> None: self.item_painter.paint( items, FreeHandCairoContext(cairo, self.sloppiness), ) python-gaphas-5.1.2/gaphas/painter/handlepainter.py000066400000000000000000000056521512665300000224040ustar00rootroot00000000000000from __future__ import annotations from typing import TYPE_CHECKING, Collection from cairo import Context as CairoContext from gaphas.item import Item if TYPE_CHECKING: from gaphas.view import GtkView # Colors from the GNOME Palette RED_4 = (0.753, 0.110, 0.157) ORANGE_4 = (0.902, 0.380, 0) GREEN_4 = (0.180, 0.7608, 0.494) BLUE_4 = (0.110, 0.443, 0.847) class HandlePainter: """Draw handles of items that are marked as selected in the view.""" def __init__(self, view: GtkView) -> None: assert view self.view = view def _draw_handles( self, item: Item, cairo: CairoContext, opacity: float | None = None, ) -> None: """Draw handles for an item. The handles are drawn in non-antialiased mode for clarity. """ view = self.view model = view.model assert model cairo.save() if not opacity: opacity = 0.9 if item is view.selection.focused_item else 0.6 get_connection = model.connections.get_connection for h in item.handles(): if not h.visible: continue # connected and not being moved, see HandleTool.on_button_press if get_connection(h): color = RED_4 elif h.glued: color = ORANGE_4 elif h.movable: color = GREEN_4 else: color = BLUE_4 vx, vy = cairo.user_to_device(*item.matrix_i2c.transform_point(*h.pos)) cairo.set_source_rgba(*color, opacity) draw_handle(cairo, vx, vy) cairo.restore() def paint(self, items: Collection[Item], cairo: CairoContext) -> None: view = self.view model = view.model assert model selection = view.selection # Order matters here: for item in model.sort(selection.selected_items): self._draw_handles(item, cairo) # Draw nice opaque handles when hovering an item: hovered = selection.hovered_item if hovered and hovered not in selection.selected_items: self._draw_handles(hovered, cairo, opacity=0.25) def draw_handle( cairo: CairoContext, vx: float, vy: float, size: float = 12.0, corner: float = 2.0 ) -> None: """Draw a handle with rounded corners.""" radius = size / 2.0 lower_right = size - corner pi_05 = 0.5 * 3.142 pi = 3.142 pi_15 = 1.5 * 3.142 cairo.save() cairo.identity_matrix() cairo.translate(vx - radius, vy - radius) cairo.move_to(0.0, corner) cairo.arc(corner, corner, corner, pi, pi_15) cairo.line_to(lower_right, 0.0) cairo.arc(lower_right, corner, corner, pi_15, 0) cairo.line_to(size, lower_right) cairo.arc(lower_right, lower_right, corner, 0, pi_05) cairo.line_to(corner, size) cairo.arc(corner, lower_right, corner, pi_05, pi) cairo.close_path() cairo.fill() cairo.restore() python-gaphas-5.1.2/gaphas/painter/itempainter.py000066400000000000000000000021731512665300000221020ustar00rootroot00000000000000from __future__ import annotations from collections.abc import Collection from cairo import LINE_JOIN_ROUND from cairo import Context as CairoContext from gaphas.item import DrawContext, Item from gaphas.selection import Selection class ItemPainter: def __init__(self, selection: Selection | None = None) -> None: self.selection = selection or Selection() def paint_item(self, item: Item, cairo: CairoContext) -> None: cairo.save() try: cairo.set_line_join(LINE_JOIN_ROUND) cairo.transform(item.matrix_i2c.to_cairo()) selection = self.selection item.draw( DrawContext( cairo=cairo, selected=(item in selection.selected_items), focused=(item is selection.focused_item), hovered=(item is selection.hovered_item), ) ) finally: cairo.restore() def paint(self, items: Collection[Item], cairo: CairoContext) -> None: """Draw the items.""" for item in items: self.paint_item(item, cairo) python-gaphas-5.1.2/gaphas/painter/painter.py000066400000000000000000000014411512665300000212200ustar00rootroot00000000000000"""The painter module provides different painters for parts of the canvas. Painters can be swapped in and out. Each painter takes care of a layer in the canvas (such as grid, items and handles). """ from typing import Collection, Protocol from cairo import Context as CairoContext from gaphas.item import Item class Painter(Protocol): """Painter interface.""" def paint(self, items: Collection[Item], cairo: CairoContext) -> None: """Do the paint action (called from the View).""" pass class ItemPainterType(Protocol): def paint_item(self, item: Item, cairo: CairoContext) -> None: """Draw a single item.""" def paint(self, items: Collection[Item], cairo: CairoContext) -> None: """Do the paint action (called from the View).""" pass python-gaphas-5.1.2/gaphas/port.py000066400000000000000000000067761512665300000171200ustar00rootroot00000000000000"""Basic connectors such as Ports and Handles.""" from __future__ import annotations from typing import TYPE_CHECKING from gaphas.constraint import Constraint, LineConstraint, PositionConstraint from gaphas.geometry import distance_line_point, distance_point_point from gaphas.handle import Handle from gaphas.position import MatrixProjection, Position from gaphas.solver import MultiConstraint from gaphas.types import Pos, SupportsFloatPos if TYPE_CHECKING: from gaphas.item import Item class Port: """Port connectable part of an item. The Item's handle connects to a port. """ def __init__(self) -> None: super().__init__() self._connectable = True def _set_connectable(self, connectable: bool) -> None: self._connectable = connectable connectable = property(lambda s: s._connectable, _set_connectable) def glue(self, pos: SupportsFloatPos) -> tuple[Pos, float]: """Get glue point on the port and distance to the port.""" raise NotImplementedError("Glue method not implemented") def constraint(self, item: Item, handle: Handle, glue_item: Item) -> Constraint: """Create connection constraint between item's handle and glue item.""" raise NotImplementedError("Constraint method not implemented") class LinePort(Port): """Port defined as a line between two handles.""" def __init__(self, start: Position, end: Position) -> None: super().__init__() self.start = start self.end = end def glue(self, pos: SupportsFloatPos) -> tuple[Pos, float]: """Get glue point on the port and distance to the port. >>> p1, p2 = (0.0, 0.0), (100.0, 100.0) >>> port = LinePort(p1, p2) >>> port.glue((50, 50)) ((50.0, 50.0), 0.0) >>> port.glue((0, 10)) ((5.0, 5.0), 7.0710678118654755) """ d, pl = distance_line_point( self.start.tuple(), self.end.tuple(), (float(pos[0]), float(pos[1])) ) return pl, d def constraint(self, item: Item, handle: Handle, glue_item: Item) -> Constraint: """Create connection line constraint between item's handle and the port.""" start = MatrixProjection(self.start, glue_item.matrix_i2c) end = MatrixProjection(self.end, glue_item.matrix_i2c) point = MatrixProjection(handle.pos, item.matrix_i2c) line = LineConstraint((start.pos, end.pos), point.pos) return MultiConstraint(start, end, point, line) class PointPort(Port): """Port defined as a point.""" def __init__(self, point: Position) -> None: super().__init__() self.point = point def glue(self, pos: SupportsFloatPos) -> tuple[Pos, float]: """Get glue point on the port and distance to the port. >>> h = Handle((10, 10)) >>> port = PointPort(h.pos) >>> port.glue((10, 0)) (, 10.0) """ point: tuple[float, float] = self.point.pos # type: ignore[assignment] d = distance_point_point(point, (float(pos[0]), float(pos[1]))) return point, d def constraint( self, item: Item, handle: Handle, glue_item: Item ) -> MultiConstraint: """Return connection position constraint between item's handle and the port.""" origin = MatrixProjection(self.point, glue_item.matrix_i2c) point = MatrixProjection(handle.pos, item.matrix_i2c) c = PositionConstraint(origin.pos, point.pos) return MultiConstraint(origin, point, c) python-gaphas-5.1.2/gaphas/position.py000066400000000000000000000124541512665300000177660ustar00rootroot00000000000000from __future__ import annotations from typing import Callable, SupportsFloat from gaphas.matrix import Matrix from gaphas.solver import NORMAL, BaseConstraint, Variable from gaphas.types import Pos, SupportsFloatPos, TypedProperty class Position: """A point constructed of two `Variable`'s. >>> vp = Position(3, 5) >>> vp.x, vp.y (Variable(3, 20), Variable(5, 20)) >>> vp.pos (Variable(3, 20), Variable(5, 20)) >>> vp[0], vp[1] (Variable(3, 20), Variable(5, 20)) """ def __init__(self, x, y, strength=NORMAL): self._x = Variable(x, strength) self._y = Variable(y, strength) self._handlers: set[Callable[[Position, Pos], None]] = set() self._setting_pos = 0 def add_handler(self, handler: Callable[[Position, Pos], None]) -> None: if not self._handlers: self._x.add_handler(self._propagate_x) self._y.add_handler(self._propagate_y) self._handlers.add(handler) def remove_handler(self, handler: Callable[[Position, Pos], None]) -> None: self._handlers.discard(handler) if not self._handlers: self._x.remove_handler(self._propagate_x) self._y.remove_handler(self._propagate_y) def notify(self, oldpos: Pos) -> None: for handler in self._handlers: handler(self, oldpos) def _propagate_x(self, variable, oldval): if not self._setting_pos: self.notify((oldval, self._y.value)) def _propagate_y(self, variable, oldval): if not self._setting_pos: self.notify((self._x.value, oldval)) @property def strength(self) -> int: """Strength.""" return self._x.strength def _set_x(self, v: SupportsFloat) -> None: self._x.value = v x: TypedProperty[Variable, SupportsFloat] x = property(lambda s: s._x, _set_x, doc="Position.x") def _set_y(self, v: SupportsFloat) -> None: self._y.value = v y: TypedProperty[Variable, SupportsFloat] y = property(lambda s: s._y, _set_y, doc="Position.y") def _set_pos(self, pos: Position | SupportsFloatPos) -> None: """Set handle position (Item coordinates).""" oldpos = (self._x.value, self._y.value) self._setting_pos += 1 try: self._x.value, self._y.value = pos finally: self._setting_pos -= 1 self.notify(oldpos) pos: TypedProperty[tuple[Variable, Variable], Position | SupportsFloatPos] pos = property(lambda s: (s._x, s._y), _set_pos, doc="The position.") def tuple(self) -> tuple[float, float]: return (self._x.value, self._y.value) def __str__(self): return f"<{self.__class__.__name__} object on ({self._x}, {self._y})>" __repr__ = __str__ def __getitem__(self, index): """Shorthand for returning the x(0) or y(1) component of the point. >>> h = Position(3, 5) >>> h[0] Variable(3, 20) >>> h[1] Variable(5, 20) """ return (self._x, self._y)[index] def __iter__(self): return iter((self._x, self._y)) def __eq__(self, other): return isinstance(other, Position) and self.x == other.x and self.y == other.y class MatrixProjection(BaseConstraint): def __init__(self, pos: Position, matrix: Matrix): proj_pos = Position(0, 0, pos.strength) super().__init__(proj_pos.x, proj_pos.y, pos.x, pos.y) self._orig_pos = pos self._proj_pos = proj_pos self.matrix = matrix self.solve_for(self._proj_pos.x) def add_handler(self, handler): """Add a callback handler.""" if not self._handlers: self.matrix.add_handler(self._on_matrix_changed) super().add_handler(handler) def remove_handler(self, handler): """Remove a previously assigned handler.""" super().remove_handler(handler) if not self._handlers: self.matrix.remove_handler(self._on_matrix_changed) @property def pos(self) -> Position: """The projected position.""" return self._proj_pos def _set_x(self, x): self._proj_pos.x = x x: TypedProperty[Variable, SupportsFloat] x = property( lambda s: s._proj_pos.x, _set_x, doc="The projected position's ``x`` part." ) def _set_y(self, y): self._proj_pos.y = y y: TypedProperty[Variable, SupportsFloat] y = property( lambda s: s._proj_pos.y, _set_y, doc="The projected position's ``y`` part." ) def mark_dirty(self, var): if var is self._orig_pos.x or var is self._orig_pos.y: super().mark_dirty(self._orig_pos.x) super().mark_dirty(self._orig_pos.y) else: super().mark_dirty(self._proj_pos.x) super().mark_dirty(self._proj_pos.y) def solve_for(self, var): if var is self._orig_pos.x or var is self._orig_pos.y: self._orig_pos.x, self._orig_pos.y = self.matrix.inverse().transform_point( *self._proj_pos ) else: self._proj_pos.x, self._proj_pos.y = self.matrix.transform_point( *self._orig_pos ) def _on_matrix_changed(self, matrix, _orig): self.mark_dirty(self._orig_pos.x) self.notify() def __getitem__(self, index): return self._proj_pos[index] python-gaphas-5.1.2/gaphas/quadtree.py000066400000000000000000000261501512665300000177320ustar00rootroot00000000000000""" Quadtree ======== A quadtree is a tree data structure in which each internal node has up to four children. Quadtrees are most often used to partition a two dimensional space by recursively subdividing it into four quadrants or regions. The regions may be square or rectangular, or may have arbitrary shapes. This data structure was named a quadtree by Raphael Finkel and J.L. Bentley in 1974. A similar partitioning is also known as a Q-tree. All forms of Quadtrees share some common features: * They decompose space into adaptable cells. * Each cell (or bucket) has a maximum capacity. When maximum capacity is reached, the bucket splits. * The tree directory follows the spatial decomposition of the Quadtree. (From Wikipedia, the free encyclopedia) """ from __future__ import annotations import operator from typing import Callable, Generic, Iterable, TypeVar from gaphas.geometry import rectangle_contains, rectangle_intersects, Rect Bounds = Rect T = TypeVar("T") D = TypeVar("D") class Quadtree(Generic[T, D]): """The Quad-tree. Rectangles use the same scheme throughout Gaphas: (x, y, width, height). >>> qtree = Quadtree() >>> for i in range(20): ... qtree.add(f"{i}", ((i * 4) % 90, (i * 10) % 90, 10, 10)) >>> len(qtree) 20 >>> qtree.dump() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE <....QuadtreeBucket object at 0x...> (0, 0, 100, 100) 11 (44, 20, 10, 10) 12 (48, 30, 10, 10) <....QuadtreeBucket object at 0x...> (0, 0, 50.0, 50.0) 0 (0, 0, 10, 10) 1 (4, 10, 10, 10) 2 (8, 20, 10, 10) 3 (12, 30, 10, 10) 4 (16, 40, 10, 10) 9 (36, 0, 10, 10) 10 (40, 10, 10, 10) <....QuadtreeBucket object at 0x...> (50.0, 0, 50.0, 50.0) 13 (52, 40, 10, 10) 18 (72, 0, 10, 10) 19 (76, 10, 10, 10) <....QuadtreeBucket object at 0x...> (0, 50.0, 50.0, 50.0) 5 (20, 50, 10, 10) 6 (24, 60, 10, 10) 7 (28, 70, 10, 10) 8 (32, 80, 10, 10) <....QuadtreeBucket object at 0x...> (50.0, 50.0, 50.0, 50.0) 14 (56, 50, 10, 10) 15 (60, 60, 10, 10) 16 (64, 70, 10, 10) 17 (68, 80, 10, 10) Find all items in the tree: >>> sorted(qtree.find_inside((0, 0, 100, 100))) ['0', '1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '3', '4', '5', '6', '7', '8', '9'] Or just the items in a section of the tree: >>> sorted(qtree.find_inside((40, 40, 40, 40))) ['13', '14', '15', '16'] """ def __init__(self, capacity: int = 10, resize_step: int = 100) -> None: """Create a new Quadtree instance. Capacity defines the number of elements in one tree bucket (default: 10). The resize_step defines the increments in which the quadtree will grow when items are moved out of the current quadtree boundaries. """ self._capacity = capacity self._resize_step = resize_step self._bucket: QuadtreeBucket[T] = QuadtreeBucket( (0, 0, resize_step, resize_step), capacity ) # Easy lookup item->(bounds, data) self._ids: dict[T, tuple[Bounds, D | None]] = {} @property def bounds(self) -> Bounds: return self._bucket.bounds @property def soft_bounds(self) -> Bounds: """Calculate the size of all items in the tree. This size may be beyond the limits of the tree itself. Returns a tuple (x, y, width, height). >>> qtree = Quadtree() >>> qtree.add('1', (10, 20, 30, 40)) >>> qtree.add('2', (20, 30, 40, 10)) >>> qtree.soft_bounds (10, 20, 50, 40) Quadtree's bounding box is not adjusted: >>> qtree.bounds (0, 0, 0, 0) """ x_y_w_h = list(zip(*[d[0] for d in self._ids.values()])) if not x_y_w_h: return 0, 0, 0, 0 x0 = min(x_y_w_h[0]) y0 = min(x_y_w_h[1]) add = operator.add x1 = max(map(add, x_y_w_h[0], x_y_w_h[2])) y1 = max(map(add, x_y_w_h[1], x_y_w_h[3])) return x0, y0, x1 - x0, y1 - y0 def add(self, item: T, bounds: Bounds, data: D | None = None) -> None: """Add an item to the tree. If an item already exists, its bounds are updated and the item is moved to the right bucket. Data can be used to add some extra info to the item """ if not rectangle_contains(bounds, self._bucket.bounds): self.resize(bounds) if item in self._ids: if old_bounds := self._ids[item][0]: if bucket := self._bucket.find_bucket(old_bounds): # Fast lane, if item moved just a little it may still reside in the same bucket. We do not need to # search from top-level. if rectangle_contains(bounds, bucket.bounds): bucket.update(item, bounds) self._ids[item] = (bounds, data) return else: bucket.remove(item) self._bucket.find_bucket(bounds).add(item, bounds) self._ids[item] = (bounds, data) def remove(self, item: T) -> None: """Remove an item from the tree.""" try: bounds, _data = self._ids[item] del self._ids[item] except KeyError: pass # Element does not exist else: self._bucket.find_bucket(bounds).remove(item) def clear(self): """Remove all items from the tree.""" self._bucket.clear() self._ids.clear() def resize(self, bounds: Bounds) -> None: """Resize the tree so `bounds` fits inside. The QTree can only grow. The tree structure is rebuild. """ resize_step = self._resize_step x, y, w, h = self._bucket.bounds while bounds[0] < x: x -= resize_step w += resize_step while bounds[1] < y: y -= resize_step h += resize_step while bounds[0] + bounds[2] > x + w: w += resize_step while bounds[1] + bounds[3] > y + h: h += resize_step self._bucket = QuadtreeBucket((x, y, w, h), self._capacity) self.rebuild() def rebuild(self): """Rebuild the tree structure.""" # Clean bucket and items: self._bucket.clear() for item, (bounds, data) in dict(self._ids).items(): self._bucket.find_bucket(bounds).add(item, bounds) self._ids[item] = (bounds, data) def get_bounds(self, item: T) -> Bounds: """Return the bounding box for the given item.""" return self._ids[item][0] def get_data(self, item: T) -> D | None: """Return the data for the given item, None if no data was provided.""" return self._ids[item][1] def find_inside(self, rect: Bounds) -> set[T]: """Find all items in the given rectangle (x, y, with, height). Returns a set. """ return set(self._bucket.find(rect, method=rectangle_contains)) def find_intersect(self, rect: Bounds) -> set[T]: """Find all items that intersect with the given rectangle (x, y, width, height). Returns a set. """ return set(self._bucket.find(rect, method=rectangle_intersects)) def __len__(self): """Return number of items in tree.""" return len(self._ids) def __contains__(self, item: T) -> bool: """Check if an item is in tree.""" return item in self._ids def dump(self) -> None: """Print structure to stdout.""" self._bucket.dump() class QuadtreeBucket(Generic[T]): """A node in a Quadtree structure.""" def __init__(self, bounds: Bounds, capacity: int): """Set bounding box for the node as (x, y, width, height).""" self.bounds = bounds self.capacity = capacity self.items: dict[T, Bounds] = {} self._buckets: list[QuadtreeBucket[T]] = [] def add(self, item: T, bounds: Bounds) -> None: """Add an item to the quadtree. The bucket is split when necessary. Items are otherwise added to this bucket, not some sub-bucket. """ assert rectangle_contains(bounds, self.bounds), ( f"{bounds} do not fit in {self.bounds}" ) if self._buckets or len(self.items) < self.capacity: self.items[item] = bounds return x, y, w, h = self.bounds rw, rh = w / 2.0, h / 2.0 cx, cy = x + rw, y + rh self._buckets = [ QuadtreeBucket((x, y, rw, rh), self.capacity), QuadtreeBucket((cx, y, rw, rh), self.capacity), QuadtreeBucket((x, cy, rw, rh), self.capacity), QuadtreeBucket((cx, cy, rw, rh), self.capacity), ] items = list(self.items.items()) self.items.clear() for i, b in items: self.find_bucket(b).add(i, b) self.find_bucket(bounds).add(item, bounds) def remove(self, item: T) -> None: """Remove an item from the quadtree bucket. The item should be contained by *this* bucket (not a sub- bucket). """ del self.items[item] def update(self, item: T, new_bounds: Bounds) -> None: """Update the position of an item within the current bucket. The item should live in the current bucket, but may be placed in a sub-bucket. """ assert item in self.items self.remove(item) self.find_bucket(new_bounds).add(item, new_bounds) def find_bucket(self, bounds: Bounds) -> QuadtreeBucket: """Find the bucket that holds a bounding box. This method should be used to find a bucket that fits, before add() or remove() is called. """ if not self._buckets: return self sx, sy, sw, sh = self.bounds cx, cy = sx + sw / 2.0, sy + sh / 2.0 x, y, w, h = bounds index = 0 if x >= cx: index += 1 elif x + w > cx: return self if y >= cy: index += 2 elif y + h > cy: return self return self._buckets[index].find_bucket(bounds) def find( self, rect: Bounds, method: Callable[[Bounds, Bounds], bool] ) -> Iterable[T]: """Find all items in the given rectangle (x, y, with, height). Method can be either the contains or intersects function. Returns an iterator. """ if rectangle_intersects(rect, self.bounds): for item, bounds in list(self.items.items()): if method(bounds, rect): yield item for bucket in self._buckets: yield from bucket.find(rect, method=method) def clear(self): """Clear the bucket, including sub-buckets.""" del self._buckets[:] self.items.clear() def dump(self, indent=""): print(indent, self, self.bounds) indent += " " for item, bounds in sorted(self.items.items(), key=lambda items: items[1]): print(indent, item, bounds) for bucket in self._buckets: bucket.dump(indent) python-gaphas-5.1.2/gaphas/segment.py000066400000000000000000000165741512665300000175730ustar00rootroot00000000000000"""Allow for easily adding segments to lines.""" from __future__ import annotations from functools import singledispatch from typing import Union from gaphas.connector import Handle, LinePort from gaphas.cursor import DEFAULT_CURSOR, LINE_CURSOR, cursor, line_hover from gaphas.geometry import distance_point_point_fast from gaphas.item import Line, matrix_i2i from gaphas.model import Model from gaphas.painter.handlepainter import GREEN_4, draw_handle from gaphas.selection import Selection from gaphas.solver import WEAK from gaphas.types import Pos @singledispatch class Segment: def __init__(self, item, model): raise TypeError def split_segment(self, segment, count=2): ... def split(self, pos): ... def merge_segment(self, segment, count=2): ... @Segment.register(Line) # type: ignore class LineSegment: def __init__(self, item: Line, model: Model): self.item = item self.model = model def split(self, pos): item = self.item handles = item.handles() x, y = item.matrix_i2c.inverse().transform_point(*pos) for h1, h2 in zip(handles, handles[1:]): xp = (h1.pos.x + h2.pos.x) / 2 yp = (h1.pos.y + h2.pos.y) / 2 if distance_point_point_fast((x, y), (xp, yp)) <= 4: segment = handles.index(h1) handles, ports = self.split_segment(segment) return handles and handles[0] def split_segment(self, segment, count=2): """Split one item segment into ``count`` equal pieces. def split_segment(self, segment, count=2): Two lists are returned - list of created handles - list of created ports :Parameters: segment Segment number to split (starting from zero). count Amount of new segments to be created (minimum 2). """ item = self.item if segment < 0 or segment >= len(item.ports()): raise ValueError("Incorrect segment") if count < 2: raise ValueError("Incorrect count of segments") def do_split(segment, count): handles = item.handles() p0 = handles[segment].pos p1 = handles[segment + 1].pos dx, dy = p1.x - p0.x, p1.y - p0.y new_h = Handle((p0.x + dx / count, p0.y + dy / count), strength=WEAK) item.insert_handle(segment + 1, new_h) p0 = LinePort(p0, new_h.pos) p1 = LinePort(new_h.pos, p1) item.remove_port(item.ports()[segment]) item.insert_port(segment, p0) item.insert_port(segment + 1, p1) if count > 2: do_split(segment + 1, count - 1) do_split(segment, count) # force orthogonal constraints to be recreated item.update_orthogonal_constraints() self.recreate_constraints() self.model.request_update(item) handles = item.handles()[segment + 1 : segment + count] ports = item.ports()[segment : segment + count - 1] return handles, ports def merge_segment(self, segment, count=2): """Merge two (or more) item segments. Tuple of two lists is returned, list of deleted handles and list of deleted ports. :Parameters: segment Segment number to start merging from (starting from zero). count Amount of segments to be merged (minimum 2). """ item = self.item if len(item.ports()) < 2: raise ValueError("Cannot merge line with one segment") if item.orthogonal and len(item.ports()) < 1 + count: raise ValueError("Cannot merge orthogonal line to one segment") if segment < 0 or segment >= len(item.ports()): raise ValueError("Incorrect segment") if count < 2 or segment + count > len(item.ports()): raise ValueError("Incorrect count of segments") # remove handle and ports which share position with handle deleted_handles = item.handles()[segment + 1 : segment + count] deleted_ports = item.ports()[segment : segment + count] for h in deleted_handles: item.remove_handle(h) for p in deleted_ports: item.remove_port(p) # create new port, which replaces old ports destroyed due to # deleted handle p1 = item.handles()[segment].pos p2 = item.handles()[segment + 1].pos port = LinePort(p1, p2) item.insert_port(segment, port) # force orthogonal constraints to be recreated item.update_orthogonal_constraints() self.recreate_constraints() self.model.request_update(item) return deleted_handles, deleted_ports def recreate_constraints(self): """Create connection constraints between connecting lines and an item. :Parameters: connected Connected item. """ connected = self.item model = self.model def find_port(line, handle, item): """Glue to the closest item on the canvas. If the item can connect, it returns a port. """ pos = matrix_i2i(line, item).transform_point(*handle.pos) port = None max_dist = 10e6 for p in item.ports(): pg, d = p.glue(pos) if d >= max_dist: continue port = p max_dist = d return port for cinfo in list(model.connections.get_connections(connected=connected)): item, handle = cinfo.item, cinfo.handle port = find_port(item, handle, connected) constraint = port.constraint(item, handle, connected) model.connections.reconnect_item(item, handle, port, constraint=constraint) def segment_tool(view): print( "WARNING: You're using segment_tool(). Remove all uses of segment_tool() from your code. It's handled by item_tool now." ) return None class LineSegmentPainter: """This painter draws pseudo-handles on gaphas.item.Line objects. Each line can be split by dragging those points, which will result in a new handle. ConnectHandleTool take care of performing the user interaction required for this feature. """ def __init__(self, selection: Selection): self.selection = selection def paint(self, _items, cairo): selection = self.selection item = selection.hovered_item if isinstance(item, Line) and item is selection.focused_item: h = item.handles() for h1, h2 in zip(h[:-1], h[1:]): p1, p2 = h1.pos, h2.pos cx = (p1.x + p2.x) / 2 cy = (p1.y + p2.y) / 2 vx, vy = cairo.user_to_device(*item.matrix_i2c.transform_point(cx, cy)) cairo.set_source_rgba(*GREEN_4, 0.4) draw_handle(cairo, vx, vy, size=9.0, corner=1.5) @cursor.register def line_segment_hover(item: Line, handle: Union[Handle, None], pos: Pos) -> str: if not handle: handles = item.handles() if any( distance_point_point_fast( pos, ((h1.pos.x + h2.pos.x) / 2, (h1.pos.y + h2.pos.y) / 2) ) <= 4.5 for h1, h2 in zip(handles, handles[1:]) ): return LINE_CURSOR return DEFAULT_CURSOR return line_hover(item, handle, pos) python-gaphas-5.1.2/gaphas/selection.py000066400000000000000000000047331512665300000201100ustar00rootroot00000000000000from __future__ import annotations from collections.abc import Callable, Collection from gaphas.item import Item class Selection: def __init__(self): super().__init__() self._selected_items: set[Item] = set() self._focused_item: Item | None = None self._hovered_item: Item | None = None self._handlers: set[Callable[[Item | None], None]] = set() def add_handler(self, handler: Callable[[Item | None], None]) -> None: """Add a callback handler, triggered when a constraint is resolved.""" self._handlers.add(handler) def remove_handler(self, handler: Callable[[Item | None], None]) -> None: """Remove a previously assigned handler.""" self._handlers.discard(handler) def notify(self, item: Item | None) -> None: for handler in self._handlers: handler(item) def clear(self): self._selected_items.clear() self._focused_item = None self._hovered_item = None self.notify(None) @property def selected_items(self) -> Collection[Item]: return self._selected_items def select_items(self, *items: Item) -> None: for item in items: if item not in self._selected_items: self._selected_items.add(item) self.notify(item) def unselect_item(self, item: Item) -> None: """Unselect an item. If it's focused, it will be unfocused as well. """ if item is self._focused_item: self._focused_item = None if item in self._selected_items: self._selected_items.discard(item) self.notify(item) def unselect_all(self) -> None: """Clearing the selected_item also clears the focused_item.""" for item in list(self._selected_items): self.unselect_item(item) self.focused_item = None @property def focused_item(self) -> Item | None: return self._focused_item @focused_item.setter def focused_item(self, item: Item | None) -> None: if item: self.select_items(item) if item is not self._focused_item: self._focused_item = item self.notify(item) @property def hovered_item(self) -> Item | None: return self._hovered_item @hovered_item.setter def hovered_item(self, item: Item | None) -> None: if item is not self._hovered_item: self._hovered_item = item self.notify(item) python-gaphas-5.1.2/gaphas/solver/000077500000000000000000000000001512665300000170545ustar00rootroot00000000000000python-gaphas-5.1.2/gaphas/solver/__init__.py000066400000000000000000000004141512665300000211640ustar00rootroot00000000000000from gaphas.solver.constraint import BaseConstraint, Constraint, MultiConstraint from gaphas.solver.solver import Solver from gaphas.solver.variable import ( NORMAL, REQUIRED, STRONG, VERY_STRONG, VERY_WEAK, WEAK, Variable, variable, ) python-gaphas-5.1.2/gaphas/solver/constraint.py000066400000000000000000000077301512665300000216210ustar00rootroot00000000000000from __future__ import annotations from typing import Callable, Collection, Hashable, Protocol, runtime_checkable from gaphas.solver.variable import Variable @runtime_checkable class Constraint(Protocol, Hashable): def add_handler(self, handler: Callable[[Constraint], None]) -> None: ... def remove_handler(self, handler: Callable[[Constraint], None]) -> None: ... def solve(self) -> None: ... @runtime_checkable class ContainsConstraints(Protocol): @property def constraints(self) -> Collection[Constraint]: ... class BaseConstraint: """Constraint base class. - variables - list of all variables - weakest - list of weakest variables """ def __init__(self, *variables): """Create new constraint, register all variables, and find weakest variables. Any value can be added. It is assumed to be a variable if it has a 'strength' attribute. """ self._variables = [v for v in variables if hasattr(v, "strength")] strength = min(v.strength for v in self._variables) # manage weakest based on id, so variables are uniquely identifiable self._weakest = [(id(v), v) for v in self._variables if v.strength == strength] self._handlers: set[Callable[[Constraint], None]] = set() def variables(self): """Return an iterator which iterates over the variables that are held by this constraint.""" return self._variables def add_handler(self, handler: Callable[[Constraint], None]) -> None: if not self._handlers: for v in self._variables: v.add_handler(self._propagate) self._handlers.add(handler) def remove_handler(self, handler: Callable[[Constraint], None]) -> None: self._handlers.discard(handler) if not self._handlers: for v in self._variables: v.remove_handler(self._propagate) def notify(self): for handler in self._handlers: handler(self) def _propagate(self, variable, _old): self.mark_dirty(variable) self.notify() def weakest(self): """Return the weakest variable. The weakest variable should be always as first element of Constraint._weakest list. """ return self._weakest[0][1] def mark_dirty(self, var: Variable) -> None: """Mark variable dirty and if possible move it to the end of Constraint.weakest list to maintain weakest variable invariants (see gaphas.solver module documentation).""" if isinstance(var, Variable): key = (id(var), var) try: self._weakest.remove(key) except ValueError: return else: self._weakest.append(key) return def solve(self): """Solve the constraint. This is done by determining the weakest variable and calling solve_for() for that variable. The weakest variable is always in the set of variables with the weakest strength. The least recently changed variable is considered the weakest. """ wvar = self.weakest() self.solve_for(wvar) def solve_for(self, var): """Solve the constraint for a given variable. The variable itself is updated. """ raise NotImplementedError class MultiConstraint: """A constraint containing constraints.""" def __init__(self, *constraints: Constraint): self._constraints = constraints @property def constraints(self) -> Collection[Constraint]: return self._constraints def add_handler(self, handler: Callable[[Constraint], None]) -> None: for c in self._constraints: c.add_handler(handler) def remove_handler(self, handler: Callable[[Constraint], None]) -> None: for c in self._constraints: c.remove_handler(handler) def solve(self): for c in self._constraints: c.solve() python-gaphas-5.1.2/gaphas/solver/solver.py000066400000000000000000000133251512665300000207440ustar00rootroot00000000000000"""Constraint solver allows to define constraint between two or more different variables and keep this constraint always true when one or more of the constrained variables change. For example, one may want to keep two variables always equal. Variables change and at some point of time we want to make all constraints valid again. This process is called solving constraints. Gaphas' solver allows to define constraints between Variable instances. Constraint classes are defined in `gaphas.constraint` module. How It Works ------------ Every constraint contains list of variables and has to be registered in solver object. Variables change (`Variable.dirty()`, `Solver.request_resolve()` methods) and their constraints are marked by solver as dirty. To solve constraints, solver loops through dirty constraints and asks constraint for a variable (called weakest variable), which - has the lowest strength - or if there are many variables with the same, lowest strength value return first unchanged variable with lowest strength - or if there is no unchanged, then return the first changed with the lowest strength (weakest variable invariants defined above) Having weakest variable (`constraint.Constraint.weakest()` method) every constraint is being asked to solve itself (`constraint.Constraint.solve_for()` method) changing appropriate variables to make the constraint valid again. """ from __future__ import annotations import functools from collections.abc import Callable, Collection from gaphas.solver.constraint import Constraint, ContainsConstraints class Solver: """Solve constraints. A constraint should have accompanying variables. """ def __init__(self, resolve_limit: int = 16) -> None: # a dict of constraint -> name/variable mappings self._constraints: set[Constraint] = set() self._marked_cons: list[Constraint] = [] self._solving = False self._resolve_limit = resolve_limit self._handlers: set[Callable[[Constraint], None]] = set() def add_handler(self, handler: Callable[[Constraint], None]) -> None: """Add a callback handler, triggered when a constraint is resolved.""" self._handlers.add(handler) def remove_handler(self, handler: Callable[[Constraint], None]) -> None: """Remove a previously assigned handler.""" self._handlers.discard(handler) def _notify(self, constraint: Constraint) -> None: my_constraint = self._find_containing_constraint(constraint) for handler in self._handlers: handler(my_constraint) @functools.lru_cache() def _find_containing_constraint(self, constraint: Constraint) -> Constraint: return find_containing_constraint(constraint, self._constraints) or constraint @property def constraints(self) -> Collection[Constraint]: return self._constraints def add_constraint(self, constraint: Constraint) -> Constraint: """Add a constraint. The actual constraint is returned, so the constraint can be removed later on. Example: >>> from gaphas.constraint import EqualsConstraint >>> s = Solver() >>> a, b = Variable(), Variable(2.0) >>> s.add_constraint(EqualsConstraint(a, b)) EqualsConstraint(a=Variable(0, 20), b=Variable(2, 20)) >>> len(s._constraints) 1 >>> a.value 0.0 >>> b.value 2.0 >>> len(s._constraints) 1 """ assert constraint, f"No constraint ({constraint})" self._constraints.add(constraint) self._marked_cons.append(constraint) constraint.add_handler(self.request_resolve_constraint) return constraint def remove_constraint(self, constraint: Constraint) -> None: """Remove a constraint from the solver.""" assert constraint, f"No constraint ({constraint})" constraint.remove_handler(self.request_resolve_constraint) self._constraints.discard(constraint) while constraint in self._marked_cons: self._marked_cons.remove(constraint) def request_resolve_constraint(self, c: Constraint) -> None: """Request resolving a constraint.""" if not self._solving: if c in self._marked_cons: self._marked_cons.remove(c) self._marked_cons.append(c) elif self._marked_cons.count(c) < self._resolve_limit: self._marked_cons.append(c) @property def needs_solving(self) -> bool: """Return if there are constraints that need solving.""" return bool(self._marked_cons) def solve(self) -> None: # sourcery skip: while-to-for """Solve (dirty) constraints.""" # NB. marked_cons is updated during the solving process marked_cons = self._marked_cons notify = self._notify try: self._solving = True # Solve each constraint. Using a counter makes it # possible to also solve constraints that are marked as # a result of other variables being solved. # sourcery: skip n = 0 while n < len(marked_cons): c = marked_cons[n] c.solve() notify(c) n += 1 self._marked_cons = [] finally: self._solving = False def find_containing_constraint( constraint: Constraint, constraints: Collection[Constraint] ) -> Constraint | None: if constraint in constraints: return constraint return next( ( find_containing_constraint(cs, constraints) for cs in constraints if isinstance(cs, ContainsConstraints) and find_containing_constraint(constraint, cs.constraints) ), None, ) python-gaphas-5.1.2/gaphas/solver/variable.py000066400000000000000000000164231512665300000212210ustar00rootroot00000000000000from __future__ import annotations from typing import Callable, SupportsFloat from gaphas.types import TypedProperty # epsilon for float comparison # is simple abs(x - y) > EPSILON enough for canvas needs? EPSILON = 1e-6 # Variable Strengths: VERY_WEAK = 0 WEAK = 10 NORMAL = 20 STRONG = 30 VERY_STRONG = 40 REQUIRED = 100 class variable: """Easy-to-use drop Variable descriptor. >>> class A(object): ... x = variable(varname='_v_x') ... y = variable(STRONG) ... def __init__(self): ... self.x = 12 >>> a = A() >>> a.x Variable(12, 20) >>> a._v_x Variable(12, 20) >>> a.x = 3 >>> a.x Variable(3, 20) >>> a.y Variable(0, 30) """ def __init__(self, strength=NORMAL, varname=None): self._strength = strength self._varname = varname or f"_variable_{id(self)}" def __get__(self, obj, class_=None): if not obj: return self try: return getattr(obj, self._varname) except AttributeError: setattr(obj, self._varname, Variable(strength=self._strength)) return getattr(obj, self._varname) def __set__(self, obj, value): try: getattr(obj, self._varname).value = float(value) except AttributeError: v = Variable(strength=self._strength) setattr(obj, self._varname, v) v.value = value class Variable: """Representation of a variable in the constraint solver. Each Variable has a ``value`` and a ``strength``. In a constraint the weakest variables are changed. You can even do some calculating with it. The Variable always represents a float variable. The ``variable`` decorator can be used to easily define variables in classes. """ def __init__(self, value: SupportsFloat = 0.0, strength: int = NORMAL): self._value = float(value) self._strength = strength self._handlers: set[Callable[[Variable, float], None]] = set() def add_handler(self, handler: Callable[[Variable, float], None]) -> None: """Add a handler, to be invoked when the value changes.""" self._handlers.add(handler) def remove_handler(self, handler: Callable[[Variable, float], None]) -> None: """Remove a handler.""" self._handlers.discard(handler) def notify(self, old: float) -> None: """Notify all handlers.""" for handler in self._handlers: handler(self, old) @property def strength(self) -> int: """Strength.""" return self._strength def dirty(self) -> None: """Mark the variable dirty in all attached constraints. Variables are marked dirty also during constraints solving to solve all dependent constraints, i.e. two equals constraints between 3 variables. """ self.notify(self._value) def set_value(self, value: SupportsFloat) -> None: oldval = self._value v = float(value) if abs(oldval - v) > EPSILON: self._value = v self.notify(oldval) value: TypedProperty[float, SupportsFloat] value = property(lambda s: s._value, set_value) def __str__(self): return f"Variable({self._value:g}, {self._strength:d})" __repr__ = __str__ def __float__(self): return float(self._value) def __eq__(self, other): """ >>> Variable(5) == 5 True >>> Variable(5) == 4 False >>> Variable(5) != 5 False """ return abs(self._value - other) < EPSILON def __ne__(self, other): """ >>> Variable(5) != 4 True >>> Variable(5) != 5 False """ return abs(self._value - other) > EPSILON def __gt__(self, other): """ >>> Variable(5) > 4 True >>> Variable(5) > 5 False """ return self._value.__gt__(float(other)) def __lt__(self, other): """ >>> Variable(5) < 4 False >>> Variable(5) < 6 True """ return self._value.__lt__(float(other)) def __ge__(self, other): """ >>> Variable(5) >= 5 True """ return self._value.__ge__(float(other)) def __le__(self, other): """ >>> Variable(5) <= 5 True """ return self._value.__le__(float(other)) def __add__(self, other): """ >>> Variable(5) + 4 9.0 """ return self._value.__add__(float(other)) def __sub__(self, other): """ >>> Variable(5) - 4 1.0 >>> Variable(5) - Variable(4) 1.0 """ return self._value.__sub__(float(other)) def __mul__(self, other): """ >>> Variable(5) * 4 20.0 >>> Variable(5) * Variable(4) 20.0 """ return self._value.__mul__(float(other)) def __floordiv__(self, other): """ >>> Variable(21) // 4 5.0 >>> Variable(21) // Variable(4) 5.0 """ return self._value.__floordiv__(float(other)) def __mod__(self, other): """ >>> Variable(5) % 4 1.0 >>> Variable(5) % Variable(4) 1.0 """ return self._value.__mod__(float(other)) def __divmod__(self, other): """ >>> divmod(Variable(21), 4) (5.0, 1.0) >>> divmod(Variable(21), Variable(4)) (5.0, 1.0) """ return self._value.__divmod__(float(other)) def __pow__(self, other): """ >>> pow(Variable(5), 4) 625.0 >>> pow(Variable(5), Variable(4)) 625.0 """ return self._value.__pow__(float(other)) def __truediv__(self, other): """ >>> Variable(5) / 4. 1.25 >>> Variable(5) / Variable(4) 1.25 >>> Variable(5.) / 4 1.25 >>> 10 / Variable(5.) 2.0 """ return self._value.__truediv__(float(other)) # .. And the other way around: def __radd__(self, other): """ >>> 4 + Variable(5) 9.0 >>> Variable(4) + Variable(5) 9.0 """ return self._value.__radd__(float(other)) def __rsub__(self, other): """ >>> 6 - Variable(5) 1.0 """ return self._value.__rsub__(other) def __rmul__(self, other): """ >>> 4 * Variable(5) 20.0 """ return self._value.__rmul__(other) def __rfloordiv__(self, other): """ >>> 21 // Variable(4) 5.0 """ return self._value.__rfloordiv__(other) def __rmod__(self, other): """ >>> 5 % Variable(4) 1.0 """ return self._value.__rmod__(other) def __rdivmod__(self, other): """ >>> divmod(21, Variable(4)) (5.0, 1.0) """ return self._value.__rdivmod__(other) def __rpow__(self, other): """ >>> pow(4, Variable(5)) 1024.0 """ return self._value.__rpow__(other) def __rtruediv__(self, other): """ >>> 5 / Variable(4.) 1.25 >>> 5. / Variable(4) 1.25 """ return self._value.__rtruediv__(other) python-gaphas-5.1.2/gaphas/table.py000066400000000000000000000144411512665300000172070ustar00rootroot00000000000000"""Table is a storage class that can be used to store information, like one would in a database table, with indexes on the desired "columns.".""" from __future__ import annotations from contextlib import suppress from functools import reduce from typing import ( Generic, Iterator, Protocol, Sequence, Type, TypeVar, runtime_checkable, ) T = TypeVar("T", bound=tuple, covariant=True) @runtime_checkable class NamedTupleish(Protocol): _fields: tuple[str, ...] def _make(self, *args: object) -> tuple[object, ...]: ... class Table(Generic[T]): """A Table structure with indexing. Optimized for lookups. """ def __init__(self, columns: Type[T], indexes: Sequence[int]) -> None: """Create a new Store instance with columns and indexes: >>> from collections import namedtuple >>> C = namedtuple('C', "foo bar baz") >>> s = Table(C, (2,)) """ assert isinstance(columns, NamedTupleish) fields: Sequence[str] = columns._fields self._type: Type[T] = columns self._indexes: Sequence[str] = [fields[i] for i in indexes] self._fields: Sequence[str] = fields # create data structure, which acts as cache self._index: dict[str, dict[object, set[object]]] = {n: {} for n in fields} @property def columns(self) -> Type[T]: return self._type def insert(self, *values: object) -> None: """Add a set of values to the store. >>> from collections import namedtuple >>> C = namedtuple('C', "foo bar baz") >>> s = Table(C, (1, 2,)) >>> s.insert('a', 'b', 'c') >>> s.insert(1, 2, 3) The number of values should match the number of columns defined at construction time. >>> s.insert('x', 'z') # doctest: +ELLIPSIS Traceback (most recent call last): ... ValueError: Number of arguments doesn't match the number of columns (2 != 3) """ if len(values) != len(self._fields): raise ValueError( f"Number of arguments doesn't match the number of columns ({len(values)} != {len(self._fields)})" ) # Add value to index entries index = self._index data = self._type._make(values) # type: ignore[attr-defined] for n in self._indexes: v = getattr(data, n) if v in index[n]: index[n][v].add(data) else: index[n][v] = {data} def delete(self, *_row: object, **kv: object) -> None: """Remove value from the table. Either a complete set may be given or just one entry in "column=value" style. >>> from collections import namedtuple >>> C = namedtuple('C', "foo bar baz") >>> s = Table(C, (0, 1,)) >>> s.insert('a', 'b', 'c') >>> s.insert(1, 2, 3) >>> s.insert('a', 'v', 'd') >>> list(sorted(s.query(foo='a'))) [C(foo='a', bar='b', baz='c'), C(foo='a', bar='v', baz='d')] >>> s.delete('a', 'b', 'c') >>> list(s.query(foo='a')) [C(foo='a', bar='v', baz='d')] Query style: >>> s.insert('a', 'b', 'c') >>> list(sorted(s.query(foo='a'))) [C(foo='a', bar='b', baz='c'), C(foo='a', bar='v', baz='d')] >>> s.delete(foo='a') >>> list(s.query(foo='a')) [] >>> list(s.query(foo=1)) [C(foo=1, bar=2, baz=3)] Delete a non existent value: >>> s.delete(foo='notPresent') Cannot provide both a row and a query value: >>> s.delete(('x', 'z'), foo=1) # doctest: +ELLIPSIS Traceback (most recent call last): ... ValueError: Should either provide a row or a query statement, not both """ fields = self._fields if _row and kv: raise ValueError( "Should either provide a row or a query statement, not both" ) if _row: assert len(_row) == len(fields) kv = dict(list(zip(self._indexes, _row))) rows = list(self.query(**kv)) index = self._index for row in rows: for i, n in enumerate(self._indexes): v = row[i] if v in index[n]: index[n][v].remove(row) if len(index[n][v]) == 0: del index[n][v] def query(self, **kv: object) -> Iterator[T]: """Get rows (tuples) for each key defined. An iterator is returned. >>> from collections import namedtuple >>> C = namedtuple('C', "foo bar baz") >>> s = Table(C, (0, 1,)) >>> s.insert('a', 'b', 'c') >>> s.insert(1, 2, 3) >>> s.insert('a', 'v', 'd') >>> list(sorted(s.query(foo='a'))) [C(foo='a', bar='b', baz='c'), C(foo='a', bar='v', baz='d')] >>> list(s.query(foo='a', bar='v')) [C(foo='a', bar='v', baz='d')] >>> list(s.query(foo='a', bar='q')) [] >>> list(s.query(bar=2)) [C(foo=1, bar=2, baz=3)] >>> list(s.query(foo=42)) [] >>> list(s.query(invalid_column_name=42)) # doctest: +ELLIPSIS Traceback (most recent call last): ... KeyError: 'Invalid column invalid_column_name' >>> list(s.query(baz=42)) # doctest: +ELLIPSIS Traceback (most recent call last): ... AttributeError: Column baz is not indexed """ index = self._index bad = set(kv.keys()) - set(self._fields) if len(bad) == 1: raise KeyError(f"Invalid column {bad.pop()}") elif len(bad) > 1: raise KeyError(f"Invalid columns {tuple(bad)}") bad = set(kv.keys()) - set(self._indexes) if len(bad) == 1: raise AttributeError(f"Column {bad.pop()} is not indexed") elif len(bad) > 1: raise AttributeError(f"Columns {tuple(bad)} are not indexed") r: Iterator[T] = iter([]) items = tuple((n, v) for n, v in list(kv.items()) if v is not None) if all(v in index[n] for n, v in items): rows = (index[n][v] for n, v in items) with suppress(TypeError): r = iter(reduce(set.intersection, rows)) # type: ignore[arg-type] return r python-gaphas-5.1.2/gaphas/tool/000077500000000000000000000000001512665300000165175ustar00rootroot00000000000000python-gaphas-5.1.2/gaphas/tool/__init__.py000066400000000000000000000020561512665300000206330ustar00rootroot00000000000000"""Tools provide interactive behavior to a `View` by handling specific events sent by view. Some of implemented tools are `HoverTool` make the item under the mouse cursor the "hovered item" `ItemTool` handle selection and movement of items `HandleTool` handle selection and movement of handles `RubberbandTool` for rubber band selection of multiple items `PanTool` for easily moving the canvas around `PlacementTool` for placing items on the canvas The tools are chained with `ToolChain` class (it is a tool as well), which allows to combine functionality provided by different tools. Tools can handle events in different ways - event can be ignored - tool can handle the event (obviously) """ from gaphas.tool.hover import hover_tool from gaphas.tool.itemtool import item_tool from gaphas.tool.placement import placement_tool from gaphas.tool.rubberband import rubberband_tool from gaphas.tool.scroll import scroll_tool, scroll_tools from gaphas.tool.viewfocus import view_focus_tool from gaphas.tool.zoom import zoom_tool, zoom_tools python-gaphas-5.1.2/gaphas/tool/hover.py000066400000000000000000000024241512665300000202160ustar00rootroot00000000000000from gi.repository import Gdk, Gtk from typing import Callable, Union from gaphas.cursor import cursor from gaphas.tool.itemtool import default_find_item_and_handle_at_point from gaphas.connector import Handle from gaphas.item import Item from gaphas.types import Pos from gaphas.view import GtkView def hover_tool( find_item_and_handle_at_point: Callable[ [GtkView, Pos], Union[tuple[Item, Union[Handle, None]], tuple[None, None]] ] = default_find_item_and_handle_at_point, ) -> Gtk.EventController: """Highlight the currently hovered item.""" ctrl = Gtk.EventControllerMotion.new() ctrl.connect("motion", on_motion, find_item_and_handle_at_point) ctrl.cursor_name = "" return ctrl def on_motion(ctrl, x, y, find_item_and_handle_at_point): view = ctrl.get_widget() pos = (x, y) item, handle = find_item_and_handle_at_point(view, pos) view.selection.hovered_item = item if item: v2i = view.get_matrix_v2i(item) pos = v2i.transform_point(x, y) cursor_name = cursor(item, handle, pos) if cursor_name != ctrl.cursor_name: set_cursor(view, cursor_name) ctrl.cursor_name = cursor_name def set_cursor(view, cursor_name): cursor = Gdk.Cursor.new_from_name(cursor_name) view.set_cursor(cursor) python-gaphas-5.1.2/gaphas/tool/itemtool.py000066400000000000000000000153531512665300000207340ustar00rootroot00000000000000from __future__ import annotations import logging from typing import Callable, Union from gi.repository import Gdk, Gtk from gaphas.canvas import ancestors from gaphas.connector import Handle from gaphas.geometry import distance_line_point, distance_point_point_fast from gaphas.handlemove import HandleMove, item_at_point from gaphas.item import Item from gaphas.move import Move from gaphas.segment import Segment from gaphas.types import Pos from gaphas.view import GtkView log = logging.getLogger(__name__) def default_find_item_and_handle_at_point( view: GtkView, pos: Pos ) -> Union[tuple[Item, Union[Handle, None]], tuple[None, None]]: item, handle = handle_at_point(view, pos) return item or next(item_at_point(view, pos), None), handle # type: ignore[return-value] # Backwards compatibility: find_item_and_handle_at_point = default_find_item_and_handle_at_point def item_tool( find_item_and_handle_at_point: Callable[ [GtkView, Pos], tuple[Item, Handle | None] | tuple[None, None] ] = default_find_item_and_handle_at_point, ) -> Gtk.GestureDrag: """Handle item movement and movement of handles.""" gesture = Gtk.GestureDrag.new() drag_state = DragState() gesture.connect( "drag-begin", on_drag_begin, drag_state, find_item_and_handle_at_point ) gesture.connect("drag-update", on_drag_update, drag_state) gesture.connect("drag-end", on_drag_end, drag_state) return gesture class DragState: def __init__(self): self.reset() def reset(self): self.moving_items = set() self.moving_handle = None self.start_x = 0 self.start_y = 0 @property def moving(self): yield from self.moving_items if self.moving_handle: yield self.moving_handle def on_drag_begin(gesture, start_x, start_y, drag_state, find_item_and_handle_at_point): view = gesture.get_widget() pos = (start_x, start_y) selection = view.selection modifiers = gesture.get_current_event_state() item, handle = find_item_and_handle_at_point(view, pos) # Deselect all items unless CTRL or SHIFT is pressed # or the item is already selected. if not ( modifiers & (Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK) or item in selection.selected_items ): selection.unselect_all() if not item: gesture.set_state(Gtk.EventSequenceState.DENIED) return if ( not handle and item in selection.selected_items and modifiers & Gdk.ModifierType.CONTROL_MASK ): selection.unselect_item(item) gesture.set_state(Gtk.EventSequenceState.DENIED) return if not handle and item is view.selection.focused_item: handle = maybe_split_segment(view, item, pos) selection.focused_item = item gesture.set_state(Gtk.EventSequenceState.CLAIMED) drag_state.start_x = start_x drag_state.start_y = start_y if handle: drag_state.moving_handle = HandleMove(item, handle, view) else: drag_state.moving_items = set(moving_items(view)) for moving in drag_state.moving: moving.start_move((start_x, start_y)) def moving_items(view): """Filter the items that should eventually be moved. Returns Move aspects for the items. """ selected_items = set(view.selection.selected_items) for item in selected_items: # Do not move subitems of selected items if not set(ancestors(view.model, item)).intersection(selected_items): yield Move(item, view) def on_drag_update(gesture, offset_x, offset_y, drag_state): view = gesture.get_widget() x = drag_state.start_x + offset_x y = drag_state.start_y + offset_y for moving in drag_state.moving: moving.move((x, y)) if not (0 <= x <= view.get_width() and 0 <= y <= view.get_height()): view.clamp_item(view.selection.focused_item) def on_drag_end(gesture, offset_x, offset_y, drag_state): for moving in drag_state.moving: moving.stop_move((drag_state.start_x + offset_x, drag_state.start_y + offset_y)) if drag_state.moving_handle: moving = drag_state.moving_handle maybe_merge_segments(gesture.get_widget(), moving.item, moving.handle) drag_state.reset() def order_handles(handles): if handles: yield handles[0] yield handles[-1] yield from handles[1:-1] def handle_at_point( view: GtkView, pos: Pos, distance: int = 6 ) -> tuple[Item, Handle] | tuple[None, None]: """Look for a handle at ``pos`` and return the tuple (item, handle).""" def find(item): """Find item's handle at pos.""" v2i = view.get_matrix_v2i(item) d = distance_point_point_fast(v2i.transform_distance(0, distance)) x, y = v2i.transform_point(*pos) for h in order_handles(item.handles()): if not h.movable: continue hx, hy = h.pos if -d < (hx - x) < d and -d < (hy - y) < d: return h selection = view.selection # The focused item is the preferred item for handle grabbing if selection.focused_item: h = find(selection.focused_item) if h: return selection.focused_item, h # then try hovered item if selection.hovered_item: h = find(selection.hovered_item) if h: return selection.hovered_item, h # Last try all items, checking the bounding box first x, y = pos items = reversed( list( view.get_items_in_rectangle( (x - distance, y - distance, distance * 2, distance * 2) ) ) ) for item in items: h = find(item) if h: return item, h return None, None def maybe_split_segment(view, item, pos): try: segment = Segment(item, view.model) except TypeError: return None else: cpos = view.matrix.inverse().transform_point(*pos) return segment.split(cpos) def maybe_merge_segments(view, item, handle): handles = item.handles() # don't merge using first or last handle if handles[0] is handle or handles[-1] is handle: return # ensure at least three handles handle_index = handles.index(handle) segment = handle_index - 1 # cannot merge starting from last segment if segment == len(item.ports()) - 1: segment = -1 assert segment >= 0 and segment < len(item.ports()) - 1 before = handles[handle_index - 1] after = handles[handle_index + 1] d, p = distance_line_point(before.pos, after.pos, handle.pos) if d > 4: return try: Segment(item, view.model).merge_segment(segment) except ValueError: pass else: if handle: view.model.request_update(item) python-gaphas-5.1.2/gaphas/tool/placement.py000066400000000000000000000040041512665300000210370ustar00rootroot00000000000000from __future__ import annotations from collections.abc import Callable from gi.repository import Gtk from gaphas.handlemove import HandleMove from gaphas.item import Item from gaphas.move import MoveType FactoryType = Callable[[], Item] def placement_tool(factory: FactoryType, handle_index: int) -> Gtk.GestureDrag: """Place a new item on the model.""" gesture = Gtk.GestureDrag.new() placement_state = PlacementState(factory, handle_index) gesture.connect("drag-begin", on_drag_begin, placement_state) gesture.connect("drag-update", on_drag_update, placement_state) gesture.connect("drag-end", on_drag_end, placement_state) return gesture class PlacementState: def __init__(self, factory: FactoryType, handle_index: int): self.factory = factory self.handle_index = handle_index self.moving: MoveType | None = None self.start_x = 0 self.start_y = 0 def on_drag_begin(gesture, start_x, start_y, placement_state): view = gesture.get_widget() item = placement_state.factory() x, y = view.get_matrix_v2i(item).transform_point(start_x, start_y) item.matrix.translate(x, y) view.selection.unselect_all() view.selection.focused_item = item gesture.set_state(Gtk.EventSequenceState.CLAIMED) handle = item.handles()[placement_state.handle_index] if handle.movable: placement_state.start_x = start_x placement_state.start_y = start_y placement_state.moving = HandleMove(item, handle, view) placement_state.moving.start_move((start_x, start_y)) def on_drag_update(gesture, offset_x, offset_y, placement_state): if placement_state.moving: placement_state.moving.move( (placement_state.start_x + offset_x, placement_state.start_y + offset_y) ) def on_drag_end(gesture, offset_x, offset_y, placement_state): if placement_state.moving: placement_state.moving.stop_move( (placement_state.start_x + offset_x, placement_state.start_y + offset_y) ) python-gaphas-5.1.2/gaphas/tool/rubberband.py000066400000000000000000000046651512665300000212120ustar00rootroot00000000000000from collections.abc import Collection from cairo import Context as CairoContext from gi.repository import Gtk from gaphas.item import Item class RubberbandState: def __init__(self) -> None: self.reset() def reset(self) -> None: self.x0 = self.y0 = self.x1 = self.y1 = 0 class RubberbandPainter: """The rubberband painter should be used in conjunction with the rubberband tool. ``RubberbandState`` should be shared between the two. """ def __init__(self, rubberband_state: RubberbandState) -> None: self.rubberband_state = rubberband_state def paint(self, items: Collection[Item], cairo: CairoContext) -> None: data = self.rubberband_state x0, y0, x1, y1 = data.x0, data.y0, data.x1, data.y1 if x0 != x1 or y0 != y1: cairo.identity_matrix() cairo.rectangle(min(x0, x1), min(y0, y1), abs(x1 - x0), abs(y1 - y0)) cairo.set_source_rgba(0.9, 0.9, 0.9, 0.3) cairo.fill_preserve() cairo.set_line_width(2.0) cairo.set_dash((7.0, 5.0)) cairo.set_source_rgba(0.5, 0.5, 0.7, 0.7) cairo.stroke() def rubberband_tool(rubberband_state): """Rubberband selection tool. Should be used in conjunction with ``RubberbandPainter``. """ gesture = Gtk.GestureDrag.new() gesture.connect("drag-begin", on_drag_begin, rubberband_state) gesture.connect("drag-update", on_drag_update, rubberband_state) gesture.connect("drag-end", on_drag_end, rubberband_state) return gesture def on_drag_begin(gesture, start_x, start_y, rubberband_state): if gesture.set_state(Gtk.EventSequenceState.CLAIMED): rubberband_state.x0 = rubberband_state.x1 = start_x rubberband_state.y0 = rubberband_state.y1 = start_y def on_drag_update(gesture, offset_x, offset_y, rubberband_state): rubberband_state.x1 = rubberband_state.x0 + offset_x rubberband_state.y1 = rubberband_state.y0 + offset_y view = gesture.get_widget() view.update_back_buffer() def on_drag_end(gesture, offset_x, offset_y, rubberband_state): view = gesture.get_widget() x0 = rubberband_state.x0 y0 = rubberband_state.y0 x1 = x0 + offset_x y1 = y0 + offset_y items = view.get_items_in_rectangle( (min(x0, x1), min(y0, y1), abs(x1 - x0), abs(y1 - y0)), contain=True ) view.selection.select_items(*items) rubberband_state.reset() view.update_back_buffer() python-gaphas-5.1.2/gaphas/tool/scroll.py000066400000000000000000000045041512665300000203720ustar00rootroot00000000000000from gi.repository import Gdk, Gtk from gaphas.tool.zoom import Zoom from gaphas.tool.hover import set_cursor def scroll_tools(speed: int = 10) -> Gtk.EventControllerScroll: return scroll_tool(speed), pan_tool() def scroll_tool(speed: int = 10) -> Gtk.EventControllerScroll: """Scroll tool recognized 2 finger scroll gestures.""" ctrl = Gtk.EventControllerScroll.new(Gtk.EventControllerScrollFlags.BOTH_AXES) ctrl.connect("scroll", on_scroll, speed) return ctrl def on_scroll(controller, dx, dy, speed): view = controller.get_widget() modifiers = controller.get_current_event_state() if modifiers & Gdk.ModifierType.CONTROL_MASK: # Workaround: Gtk.EventController.get_current_event() causes SEGFAULT view = controller.get_widget() x = view.get_width() / 2 y = view.get_height() / 2 zoom = Zoom() zoom.begin(view.matrix, x, y) zoom_factor = 0.1 d = 1 - dy * zoom_factor zoom.update(d) elif modifiers & Gdk.ModifierType.SHIFT_MASK: view.hadjustment.set_value(dy * speed - view.hadjustment.get_value()) view.vadjustment.set_value(dx * speed - view.vadjustment.get_value()) else: view.hadjustment.set_value(dx * speed - view.hadjustment.get_value()) view.vadjustment.set_value(dy * speed - view.vadjustment.get_value()) class PanState: def __init__(self): self.reset() def reset(self): self.h = 0 self.v = 0 def pan_tool() -> Gtk.GestureDrag: gesture = Gtk.GestureDrag.new() gesture.set_button(Gdk.BUTTON_MIDDLE) pan_state = PanState() gesture.connect("drag-begin", on_drag_begin, pan_state) gesture.connect("drag-update", on_drag_update, pan_state) gesture.connect("drag-end", on_drag_end) return gesture def on_drag_begin(gesture, start_x, start_y, pan_state): view = gesture.get_widget() pan_state.h = view.matrix[4] pan_state.v = view.matrix[5] set_cursor(view, "move") gesture.set_state(Gtk.EventSequenceState.CLAIMED) def on_drag_update(gesture, offset_x, offset_y, pan_state): view = gesture.get_widget() view.matrix.set(x0=pan_state.h + offset_x, y0=pan_state.v + offset_y) set_cursor(view, "move") def on_drag_end(gesture, _offset_x, _offset_y): view = gesture.get_widget() set_cursor(view, "default") python-gaphas-5.1.2/gaphas/tool/viewfocus.py000066400000000000000000000005631512665300000211070ustar00rootroot00000000000000from gi.repository import Gtk def view_focus_tool(): """This little tool ensures the view grabs focus when a mouse press or touch event happens.""" gesture = Gtk.GestureSingle() gesture.connect("begin", on_begin) return gesture def on_begin(gesture, sequence): view = gesture.get_widget() if not view.is_focus(): view.grab_focus() python-gaphas-5.1.2/gaphas/tool/zoom.py000066400000000000000000000046671512665300000200720ustar00rootroot00000000000000from __future__ import annotations from gi.repository import Gdk, Gtk class Zoom: def __init__(self): self.matrix = None self.x0 = 0 self.y0 = 0 self.sx = 1.0 self.sy = 1.0 def begin(self, matrix, x0, y0): self.matrix = matrix self.x0 = x0 self.y0 = y0 self.sx = matrix[0] self.sy = matrix[3] def update(self, scale): assert self.matrix if self.sx * scale < 0.2: scale = 0.2 / self.sx elif self.sx * scale > 20.0: scale = 20.0 / self.sx m = self.matrix sx = m[0] sy = m[3] ox = (m[4] - self.x0) / sx oy = (m[5] - self.y0) / sy dsx = self.sx * scale / sx dsy = self.sy * scale / sy m.translate(-ox, -oy) m.scale(dsx, dsy) m.translate(+ox, +oy) def zoom_tools() -> ( tuple[Gtk.GestureZoom] | tuple[Gtk.GestureZoom, Gtk.EventControllerScroll] ): return zoom_tool(), scroll_zoom_tool() def zoom_tool() -> Gtk.GestureZoom: """Create a zoom tool as a Gtk.Gesture. Note: we need to keep a reference to this gesture, or else it will be destroyed. """ zoom = Zoom() gesture = Gtk.GestureZoom.new() gesture.set_propagation_phase(Gtk.PropagationPhase.CAPTURE) gesture.connect("begin", on_begin, zoom) gesture.connect("scale-changed", on_scale_changed, zoom) return gesture def on_begin( gesture: Gtk.GestureZoom, sequence: None, zoom: Zoom, ) -> None: view = gesture.get_widget() _, x0, y0 = gesture.get_point(sequence) zoom.begin(view.matrix, x0, y0) def on_scale_changed(_gesture: Gtk.GestureZoom, scale: float, zoom: Zoom) -> None: zoom.update(scale) def scroll_zoom_tool() -> Gtk.EventControllerScroll: """Ctrl-scroll wheel zoom.""" ctrl = Gtk.EventControllerScroll.new(Gtk.EventControllerScrollFlags.BOTH_AXES) ctrl.connect("scroll", on_scroll) return ctrl def on_scroll(controller, _dx, dy): view = controller.get_widget() modifiers = controller.get_current_event_state() if not modifiers & Gdk.ModifierType.CONTROL_MASK: return False # Workaround: Gtk.EventController.get_current_event() causes SEGFAULT view = controller.get_widget() x = view.get_width() / 2 y = view.get_height() / 2 zoom = Zoom() zoom.begin(view.matrix, x, y) zoom_factor = 0.1 d = 1 - dy * zoom_factor zoom.update(d) return True python-gaphas-5.1.2/gaphas/tree.py000066400000000000000000000215741512665300000170640ustar00rootroot00000000000000"""Simple class containing the tree structure for the canvas items.""" from __future__ import annotations from contextlib import suppress from typing import Generic, Iterable, Sequence, TypeVar T = TypeVar("T") class Tree(Generic[T]): """A Tree structure. Nodes are stores in a depth-first order. ``None`` is the root node. @invariant: len(self._children) == len(self._nodes) + 1 """ def __init__(self) -> None: # List of nodes in the tree, sorted in the order they ought to be # rendered self._nodes: list[T] = [] # Per entry a list of children is maintained. self._children: dict[T | None, list[T]] = {None: []} # For easy and fast lookups, also maintain a child -> parent mapping self._parents: dict[T, T] = {} @property def nodes(self) -> Sequence[T]: return list(self._nodes) def get_parent(self, node: T) -> T | None: """Return the parent item of ``node``. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.get_parent('n2') 'n1' """ return self._parents.get(node) def get_children(self, node: T | None) -> Iterable[T]: """Return all child objects of ``node``. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n1') >>> tree.get_children('n1') ['n2', 'n3'] >>> tree.get_children('n2') [] """ return self._children[node] def get_siblings(self, node: T) -> list[T]: """Get all siblings of ``node``, including ``node``. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n1') >>> tree.get_siblings('n2') ['n2', 'n3'] """ parent = self.get_parent(node) return self._children[parent] def get_next_sibling(self, node: T) -> T: """Return the node on the same level after ``node``. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n1') >>> tree.get_next_sibling('n2') 'n3' >>> tree.get_next_sibling('n3') # doctest: +ELLIPSIS Traceback (most recent call last): ... IndexError: list index out of range """ parent = self.get_parent(node) siblings = self._children[parent] return siblings[siblings.index(node) + 1] def get_previous_sibling(self, node: T) -> T: """Return the node on the same level before ``node``. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n1') >>> tree.get_previous_sibling('n3') 'n2' >>> tree.get_previous_sibling('n2') # doctest: +ELLIPSIS Traceback (most recent call last): ... IndexError: list index out of range """ parent = self.get_parent(node) siblings = self._children[parent] index = siblings.index(node) - 1 if index < 0: raise IndexError("list index out of range") return siblings[index] def get_all_children(self, node: T) -> Iterable[T]: """Iterate all children (and children of children and so forth) >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n2') >>> tree.get_children('n1') ['n2'] >>> tree.get_all_children('n1') # doctest: +ELLIPSIS >>> list(tree.get_all_children('n1')) ['n2', 'n3'] """ children = self.get_children(node) for c in children: yield c yield from self.get_all_children(c) def get_ancestors(self, node: T) -> Iterable[T]: """Iterate all parents and parents of parents, etc. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n2') >>> tree.get_parent('n3') 'n2' >>> tree.get_ancestors('n3') # doctest: +ELLIPSIS >>> list(tree.get_ancestors('n3')) ['n2', 'n1'] >>> list(tree.get_ancestors('n1')) [] """ parent = self.get_parent(node) while parent: yield parent parent = self.get_parent(parent) def order(self, items: Iterable[T]) -> Iterable[T]: items_set = set(items) return (n for n in self._nodes if n in items_set) def _add_to_nodes( self, node: T, parent: T | None, index: int | None = None ) -> None: """Helper method to place nodes on the right location in the nodes list Called only from add() and move()""" nodes = self._nodes siblings = self._children[parent] try: atnode = siblings[index] # type: ignore[index] except (TypeError, IndexError): index = len(siblings) if parent: try: next_uncle = self.get_next_sibling(parent) except IndexError: # parent has no younger brothers.. # place it before the next uncle of grant_parent: return self._add_to_nodes(node, self.get_parent(parent)) else: nodes.insert(nodes.index(next_uncle), node) else: # append to root node: nodes.append(node) else: nodes.insert(nodes.index(atnode), node) def _add(self, node: T, parent: T | None = None, index: int | None = None) -> None: """Helper method for both add() and move().""" assert node not in self._nodes siblings = self._children[parent] self._add_to_nodes(node, parent, index) # Fix parent-child and child-parent relationship try: siblings.insert(index, node) # type: ignore[arg-type] except TypeError: siblings.append(node) # Create new entry for it's own children: if parent: self._parents[node] = parent def add(self, node: T, parent: T | None = None, index: int | None = None) -> None: """Add node to the tree. parent is the parent node, which may be None if the item should be added to the root item. For usage, see the unit tests. """ self._add(node, parent, index) self._children[node] = [] def _remove(self, node: T) -> None: # Remove from parent item self.get_siblings(node).remove(node) # Remove data entries: del self._children[node] self._nodes.remove(node) with suppress(KeyError): del self._parents[node] def remove(self, node: T) -> None: """Remove ``node`` from the tree. For usage, see the unit tests. """ # First remove children: for c in reversed(list(self._children[node])): self.remove(c) self._remove(node) def _reparent_nodes(self, node: T, parent: T | None) -> None: """Helper for move(). The _children and _parent trees can be left intact as far as children of the reparented node are concerned. Only the position in the _nodes list changes. """ self._nodes.remove(node) self._add_to_nodes(node, parent) for c in self._children[node]: self._reparent_nodes(c, node) def move(self, node: T, parent: T | None, index: int | None = None) -> None: """Set new parent for a ``node``. ``Parent`` can be ``None``, indicating it's added to the top. >>> tree = Tree() >>> tree.add('n1') >>> tree.add('n2', parent='n1') >>> tree.add('n3', parent='n1') >>> tree.nodes ['n1', 'n2', 'n3'] >>> tree.move('n2', 'n3') >>> tree.get_parent('n2') 'n3' >>> tree.get_children('n3') ['n2'] >>> tree.nodes ['n1', 'n3', 'n2'] If a node contains children, those are also moved: >>> tree.add('n4') >>> tree.nodes ['n1', 'n3', 'n2', 'n4'] >>> tree.move('n1', 'n4') >>> tree.get_parent('n1') 'n4' >>> list(tree.get_all_children('n4')) ['n1', 'n3', 'n2'] >>> tree.nodes ['n4', 'n1', 'n3', 'n2'] """ if parent is self.get_parent(node): return # Remove all node references: old_parent = self.get_parent(node) self._children[old_parent].remove(node) self._nodes.remove(node) if old_parent: del self._parents[node] self._add(node, parent, index) # reorganize children in nodes list for c in self._children[node]: self._reparent_nodes(c, node) python-gaphas-5.1.2/gaphas/types.py000066400000000000000000000011261512665300000172600ustar00rootroot00000000000000from __future__ import annotations from typing import Protocol, SupportsFloat, TypeVar # A primitive position, tuple ``(x, y)`` # Pos = Tuple[Union[float, SupportsFloat], Union[float, SupportsFloat]] Pos = tuple[float, float] SupportsFloatPos = tuple[SupportsFloat, SupportsFloat] GetT = TypeVar("GetT", covariant=True) SetT = TypeVar("SetT", contravariant=True) class TypedProperty(Protocol[GetT, SetT]): def __get__(self, obj: object, type: type | None = ...) -> GetT: ... def __set__(self, obj: object, value: SetT) -> None: ... def __delete__(self, obj: object) -> None: ... python-gaphas-5.1.2/gaphas/view/000077500000000000000000000000001512665300000165145ustar00rootroot00000000000000python-gaphas-5.1.2/gaphas/view/__init__.py000066400000000000000000000002611512665300000206240ustar00rootroot00000000000000"""This package contains everything to display a Canvas on a screen.""" from gaphas import model from gaphas.selection import Selection from gaphas.view.gtkview import GtkView python-gaphas-5.1.2/gaphas/view/gtkview.py000066400000000000000000000350251512665300000205530ustar00rootroot00000000000000"""This module contains everything to display a model on a screen.""" from __future__ import annotations import asyncio from math import isclose from collections.abc import Collection, Iterable import cairo from gi.repository import Graphene, GObject, Gtk from gaphas.geometry import Rect, Rectangle from gaphas.item import Item from gaphas.matrix import Matrix from gaphas.model import Model from gaphas.painter import DefaultPainter, ItemPainter from gaphas.painter.painter import ItemPainterType, Painter from gaphas.quadtree import Quadtree, QuadtreeBucket from gaphas.selection import Selection from gaphas.view.scrolling import Scrolling # Handy debug flag for drawing bounding boxes around the items. DEBUG_DRAW_BOUNDING_BOX = False DEBUG_DRAW_QUADTREE = False # The tolerance for Cairo. Bigger values increase speed and reduce accuracy # (default: 0.1) PAINT_TOLERANCE = 0.8 BOUNDING_BOX_TOLERANCE = 1.0 class GtkView(Gtk.DrawingArea, Gtk.Scrollable): """GTK widget for rendering a gaphas.model.Model to a screen. The view uses Tools to handle events and Painters to draw. Both are configurable. The widget already contains adjustment objects (`hadjustment`, `vadjustment`) to be used for scrollbars. This view registers itself on the model, so it will receive update events. """ # Just defined a name to make GTK register this class. __gtype_name__ = "GaphasView" # properties required by Gtk.Scrollable __gproperties__ = { "hscroll-policy": ( Gtk.ScrollablePolicy, "hscroll-policy", "hscroll-policy", Gtk.ScrollablePolicy.MINIMUM, GObject.ParamFlags.READWRITE, ), "hadjustment": ( Gtk.Adjustment, "hadjustment", "hadjustment", GObject.ParamFlags.READWRITE, ), "vscroll-policy": ( Gtk.ScrollablePolicy, "vscroll-policy", "vscroll-policy", Gtk.ScrollablePolicy.MINIMUM, GObject.ParamFlags.READWRITE, ), "vadjustment": ( Gtk.Adjustment, "vadjustment", "vadjustment", GObject.ParamFlags.READWRITE, ), } def __init__(self, model: Model | None = None, selection: Selection | None = None): """Create a new view. Args: model (Model): optional model to be set on construction time. selection (Selection): optional selection object, in case the default selection object (hover/select/focus) is not enough. """ super().__init__() self._dirty_items: set[Item] = set() self._back_buffer: cairo.Surface | None = None self._back_buffer_needs_resizing = True self._update_task: asyncio.Task | None = None self._controllers: set[Gtk.EventController] = set() self.set_can_focus(True) self.set_focusable(True) self.connect_after("resize", GtkView.on_resize) def alignment_updated(x: float | None, y: float | None) -> None: if self._model: if x is not None: self.matrix.set(x0=x) if y is not None: self.matrix.set(y0=y) self._scrolling = Scrolling(alignment_updated) self._selection = selection or Selection() self._matrix = Matrix() self._painter: Painter = DefaultPainter(self) self._bounding_box_painter: ItemPainterType = ItemPainter(self._selection) # quadtree bounds are in canvas coordinates (not view!) self._qtree: Quadtree[Item, None] = Quadtree() self._model: Model | None = None if model: self.model = model self._selection.add_handler(self.on_selection_update) self._matrix.add_handler(self.on_matrix_update) def do_get_property(self, prop: str) -> object: return self._scrolling.get_property(prop) def do_set_property(self, prop: str, value: object) -> None: self._scrolling.set_property(prop, value) @property def matrix(self) -> Matrix: """Model root to view transformation matrix.""" return self._matrix def get_matrix_i2v(self, item: Item) -> Matrix: """Get Item to View matrix for ``item``.""" return item.matrix_i2c.multiply(self._matrix) def get_matrix_v2i(self, item: Item) -> Matrix: """Get View to Item matrix for ``item``.""" m = self.get_matrix_i2v(item) m.invert() return m @property def model(self) -> Model | None: """The model.""" return self._model @model.setter def model(self, model: Model | None) -> None: if self._model: self._model.unregister_view(self) self._selection.clear() self._dirty_items.clear() self._qtree.clear() if self._update_task: self._update_task.cancel() self._model = model if self._model: self._model.register_view(self) self.request_update(self._model.get_all_items()) @property def painter(self) -> Painter: """Painter for drawing the view.""" return self._painter @painter.setter def painter(self, painter: Painter) -> None: self._painter = painter @property def bounding_box_painter(self) -> ItemPainterType: """Special painter for calculating item bounding boxes.""" return self._bounding_box_painter @bounding_box_painter.setter def bounding_box_painter(self, painter: ItemPainterType) -> None: self._bounding_box_painter = painter @property def selection(self) -> Selection: """Selected, focused and hovered items.""" return self._selection @selection.setter def selection(self, selection: Selection) -> None: """Selected, focused and hovered items.""" self._selection = selection if self._model: self.request_update(self._model.get_all_items()) @property def bounding_box(self) -> Rectangle: """The bounding box of the complete view, relative to the view port.""" return Rectangle(*transform_rectangle(self._matrix, self._qtree.soft_bounds)) @property def hadjustment(self) -> Gtk.Adjustment: """Gtk adjustment object for use with a scrollbar.""" return self._scrolling.hadjustment @property def vadjustment(self) -> Gtk.Adjustment: """Gtk adjustment object for use with a scrollbar.""" return self._scrolling.vadjustment def clamp_item(self, item): """Update adjustments so the item is located inside the view port.""" x, y, w, h = self.get_item_bounding_box(item).tuple() self.hadjustment.clamp_page(x, x + w) self.vadjustment.clamp_page(y, y + h) def add_controller(self, *controllers: Gtk.EventController) -> None: """Add a controller.""" for controller in controllers: super().add_controller(controller) self._controllers.update(controllers) def remove_controller(self, controller: Gtk.EventController) -> bool: """Remove a controller.""" super().remove_controller(controller) if controller in self._controllers: self._controllers.discard(controller) return True return False def remove_all_controllers(self) -> None: """Remove all registered controllers.""" for controller in set(self._controllers): self.remove_controller(controller) def zoom(self, factor: float) -> None: """Zoom in/out by factor ``factor``.""" assert self._model self.matrix.scale(factor, factor) self.request_update(self._model.get_all_items()) def get_items_in_rectangle( self, rect: Rect, contain: bool = False ) -> Iterable[Item]: """Return the items in the rectangle 'rect' (in view coordinates). Items are automatically sorted in model's processing order. """ assert self._model crect = transform_rectangle(self._matrix.inverse(), rect) items = ( self._qtree.find_inside(crect) if contain else self._qtree.find_intersect(crect) ) return self._model.sort(items) def get_item_bounding_box(self, item: Item) -> Rectangle: """Get the bounding box for the item, in view coordinates.""" return Rectangle( *transform_rectangle(self._matrix, self._qtree.get_bounds(item)) ) def request_update( self, items: Iterable[Item], removed_items: Iterable[Item] = (), ) -> None: """Request update for items.""" if items: self._dirty_items.update(items) if removed_items: selection = self._selection self._dirty_items.difference_update(removed_items) for item in removed_items: self._qtree.remove(item) selection.unselect_item(item) if items or removed_items: self.update() def update(self) -> asyncio.Task: """Update view status according to the items updated in the model.""" async def _update(): model = self._model if not model: return dirty_items = self.all_dirty_items() model.update_now(dirty_items) dirty_items |= self.all_dirty_items() old_bb = self._qtree.soft_bounds self.update_bounding_box(dirty_items) if self._qtree.soft_bounds != old_bb: self.update_scrolling() self.update_back_buffer() def clear_task(task): self._update_task = None if not self._update_task: self._update_task = asyncio.create_task(_update()) self._update_task.add_done_callback(clear_task) return self._update_task def all_dirty_items(self) -> set[Item]: """Return all dirty items, clearing the marked items.""" model = self._model if not model: return set() def iterate_items(items: Iterable[Item]) -> Iterable[Item]: assert model for item in items: parent = model.get_parent(item) if parent is not None and parent in items: # item's matrix will be updated thanks to parent's matrix update continue yield item yield from iterate_items(set(model.get_children(item))) dirty_items = set(iterate_items(self._dirty_items)) self._dirty_items.clear() return dirty_items def update_bounding_box(self, items: Collection[Item]) -> None: """Update the bounding boxes of the model items for this view, in model coordinates.""" painter = self._bounding_box_painter qtree = self._qtree for item in items: surface = cairo.RecordingSurface(cairo.Content.COLOR_ALPHA, None) cr = cairo.Context(surface) cr.set_tolerance(BOUNDING_BOX_TOLERANCE) painter.paint_item(item, cr) x, y, w, h = surface.ink_extents() qtree.add(item=item, bounds=(x, y, w, h)) def update_scrolling(self) -> None: matrix = Matrix(*self._matrix) # type: ignore[misc] # When zooming the bounding box to view size, disregard current scroll offsets matrix.set(x0=0, y0=0) bounds = Rectangle(*transform_rectangle(matrix, self._qtree.soft_bounds)) self._scrolling.update_adjustments(self.get_width(), self.get_height(), bounds) def _debug_draw_bounding_box(self, cr, width, height): for item in self.get_items_in_rectangle((0, 0, width, height)): try: b = self.get_item_bounding_box(item) except KeyError: pass # No bounding box right now.. else: cr.save() cr.identity_matrix() cr.set_source_rgb(0.8, 0, 0) cr.set_line_width(1.0) cr.rectangle(*b) cr.stroke() cr.restore() def _debug_draw_quadtree(self, cr): def draw_qtree_bucket(bucket: QuadtreeBucket) -> None: cr.rectangle(*bucket.bounds) cr.stroke() for b in bucket._buckets: draw_qtree_bucket(b) cr.set_source_rgb(0, 0, 0.8) cr.set_line_width(1.0) draw_qtree_bucket(self._qtree._bucket) def do_realize(self) -> None: Gtk.DrawingArea.do_realize(self) if self._model: # Ensure updates are propagated self._model.register_view(self) self.request_update(self._model.get_all_items()) def do_unrealize(self) -> None: if self._model: self._model.unregister_view(self) Gtk.DrawingArea.do_unrealize(self) def on_selection_update(self, item: Item | None) -> None: if self._model: if item is None: self.request_update(self._model.get_all_items()) elif item in self._model.get_all_items(): self.request_update((item,)) def on_matrix_update(self, matrix, old_matrix_values): # Test if scale or rotation changed if not all(map(isclose, matrix, old_matrix_values[:4])): self.update_scrolling() self._scrolling.update_position(matrix[4], matrix[5]) self.update_back_buffer() def on_resize(self, _width: int, _height: int) -> None: self.update_scrolling() if self.get_realized(): self._back_buffer_needs_resizing = True self.update_back_buffer() else: self._back_buffer = None def update_back_buffer(self) -> None: self.queue_draw() def do_snapshot(self, snapshot): if self.model: width = self.get_width() height = self.get_height() r = Graphene.Rect() r.init(0, 0, width, height) cr = snapshot.append_cairo(r) cr.set_matrix(self.matrix.to_cairo()) cr.save() cr.set_tolerance(PAINT_TOLERANCE) items = self.get_items_in_rectangle((0, 0, width, height)) self.painter.paint(list(items), cr) cr.restore() if DEBUG_DRAW_BOUNDING_BOX: self._debug_draw_bounding_box(cr, width, height) if DEBUG_DRAW_QUADTREE: self._debug_draw_quadtree(cr) def transform_rectangle(matrix: Matrix, rect: Rect) -> Rect: x, y, w, h = rect return matrix.transform_point(x, y) + matrix.transform_distance(w, h) python-gaphas-5.1.2/gaphas/view/scrolling.py000066400000000000000000000077031512665300000210710ustar00rootroot00000000000000from __future__ import annotations from math import isclose from typing import Callable from gi.repository import Gtk from gaphas.geometry import Rectangle class Scrolling: """Contains Gtk.Adjustment and related code.""" def __init__( self, scrolling_updated: Callable[[float | None, float | None], None] ) -> None: self._scrolling_updated = scrolling_updated self.hadjustment: Gtk.Adjustment | None = None self.vadjustment: Gtk.Adjustment | None = None self.hscroll_policy: Gtk.ScrollablePolicy | None = None self.vscroll_policy: Gtk.ScrollablePolicy | None = None self._hadjustment_handler_id = 0 self._vadjustment_handler_id = 0 def get_property(self, prop): if prop.name == "hadjustment": return self.hadjustment elif prop.name == "vadjustment": return self.vadjustment elif prop.name == "hscroll-policy": return self.hscroll_policy elif prop.name == "vscroll-policy": return self.vscroll_policy else: raise AttributeError(f"Unknown property {prop.name}") def set_property(self, prop, value): if prop.name == "hadjustment": if value is not None: if self.hadjustment and self._hadjustment_handler_id: self.hadjustment.disconnect(self._hadjustment_handler_id) self.hadjustment = value self._hadjustment_handler_id = self.hadjustment.connect( "value-changed", self.on_hadjustment_changed ) elif prop.name == "vadjustment": if value is not None: if self.vadjustment and self._vadjustment_handler_id: self.vadjustment.disconnect(self._vadjustment_handler_id) self.vadjustment = value self._vadjustment_handler_id = self.vadjustment.connect( "value-changed", self.on_vadjustment_changed ) elif prop.name == "hscroll-policy": self.hscroll_policy = value elif prop.name == "vscroll-policy": self.vscroll_policy = value else: raise AttributeError(f"Unknown property {prop.name}") def update_position(self, x: float, y: float) -> None: if self.hadjustment and not isclose(self.hadjustment.get_value(), x): self.hadjustment.handler_block(self._hadjustment_handler_id) self.hadjustment.set_value(-x) self.hadjustment.handler_unblock(self._hadjustment_handler_id) if self.vadjustment and not isclose(self.vadjustment.get_value(), y): self.vadjustment.handler_block(self._vadjustment_handler_id) self.vadjustment.set_value(-y) self.vadjustment.handler_unblock(self._vadjustment_handler_id) def update_adjustments(self, width: int, height: int, bounds: Rectangle) -> None: """Update scroll bar values (adjustments in GTK). The value will change when a scroll bar is moved. """ # canvas limits (in view coordinates) c = Rectangle(*bounds) c.expand(min(width, height) / 2) u = c + Rectangle(width=width, height=height) if self.hadjustment: self.hadjustment.set_lower(u.x) self.hadjustment.set_upper(u.x1) self.hadjustment.set_step_increment(width // 10) self.hadjustment.set_page_increment(width) self.hadjustment.set_page_size(width) if self.vadjustment: self.vadjustment.set_lower(u.y) self.vadjustment.set_upper(u.y1) self.vadjustment.set_step_increment(height // 10) self.vadjustment.set_page_increment(height) self.vadjustment.set_page_size(height) def on_hadjustment_changed(self, adj): self._scrolling_updated(-adj.get_value(), None) def on_vadjustment_changed(self, adj): self._scrolling_updated(None, -adj.get_value()) python-gaphas-5.1.2/poetry.lock000066400000000000000000002116621512665300000165030ustar00rootroot00000000000000# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. [[package]] name = "accessible-pygments" version = "0.0.5" description = "A collection of accessible pygments styles" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7"}, {file = "accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872"}, ] [package.dependencies] pygments = ">=1.5" [package.extras] dev = ["pillow", "pkginfo (>=1.10)", "playwright", "pre-commit", "setuptools", "twine (>=5.0)"] tests = ["hypothesis", "pytest"] [[package]] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] [[package]] name = "babel" version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, ] [package.extras] dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] [[package]] name = "backports-asyncio-runner" version = "1.2.0" description = "Backport of asyncio.Runner, a context manager that controls event loop life cycle." optional = false python-versions = "<3.11,>=3.8" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5"}, {file = "backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162"}, ] [[package]] name = "beautifulsoup4" version = "4.13.4" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" groups = ["docs"] files = [ {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, ] [package.dependencies] soupsieve = ">1.2" typing-extensions = ">=4.0.0" [package.extras] cchardet = ["cchardet"] chardet = ["chardet"] charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] [[package]] name = "certifi" version = "2025.7.9" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "certifi-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39"}, {file = "certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079"}, ] [[package]] name = "charset-normalizer" version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["dev", "docs"] markers = "sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] [[package]] name = "coverage" version = "7.10.6" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "coverage-7.10.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70e7bfbd57126b5554aa482691145f798d7df77489a177a6bef80de78860a356"}, {file = "coverage-7.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e41be6f0f19da64af13403e52f2dec38bbc2937af54df8ecef10850ff8d35301"}, {file = "coverage-7.10.6-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c61fc91ab80b23f5fddbee342d19662f3d3328173229caded831aa0bd7595460"}, {file = "coverage-7.10.6-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10356fdd33a7cc06e8051413140bbdc6f972137508a3572e3f59f805cd2832fd"}, {file = "coverage-7.10.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80b1695cf7c5ebe7b44bf2521221b9bb8cdf69b1f24231149a7e3eb1ae5fa2fb"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2e4c33e6378b9d52d3454bd08847a8651f4ed23ddbb4a0520227bd346382bbc6"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c8a3ec16e34ef980a46f60dc6ad86ec60f763c3f2fa0db6d261e6e754f72e945"}, {file = "coverage-7.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7d79dabc0a56f5af990cc6da9ad1e40766e82773c075f09cc571e2076fef882e"}, {file = "coverage-7.10.6-cp310-cp310-win32.whl", hash = "sha256:86b9b59f2b16e981906e9d6383eb6446d5b46c278460ae2c36487667717eccf1"}, {file = "coverage-7.10.6-cp310-cp310-win_amd64.whl", hash = "sha256:e132b9152749bd33534e5bd8565c7576f135f157b4029b975e15ee184325f528"}, {file = "coverage-7.10.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c706db3cabb7ceef779de68270150665e710b46d56372455cd741184f3868d8f"}, {file = "coverage-7.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e0c38dc289e0508ef68ec95834cb5d2e96fdbe792eaccaa1bccac3966bbadcc"}, {file = "coverage-7.10.6-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:752a3005a1ded28f2f3a6e8787e24f28d6abe176ca64677bcd8d53d6fe2ec08a"}, {file = "coverage-7.10.6-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:689920ecfd60f992cafca4f5477d55720466ad2c7fa29bb56ac8d44a1ac2b47a"}, {file = "coverage-7.10.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec98435796d2624d6905820a42f82149ee9fc4f2d45c2c5bc5a44481cc50db62"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b37201ce4a458c7a758ecc4efa92fa8ed783c66e0fa3c42ae19fc454a0792153"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2904271c80898663c810a6b067920a61dd8d38341244a3605bd31ab55250dad5"}, {file = "coverage-7.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5aea98383463d6e1fa4e95416d8de66f2d0cb588774ee20ae1b28df826bcb619"}, {file = "coverage-7.10.6-cp311-cp311-win32.whl", hash = "sha256:e3fb1fa01d3598002777dd259c0c2e6d9d5e10e7222976fc8e03992f972a2cba"}, {file = "coverage-7.10.6-cp311-cp311-win_amd64.whl", hash = "sha256:f35ed9d945bece26553d5b4c8630453169672bea0050a564456eb88bdffd927e"}, {file = "coverage-7.10.6-cp311-cp311-win_arm64.whl", hash = "sha256:99e1a305c7765631d74b98bf7dbf54eeea931f975e80f115437d23848ee8c27c"}, {file = "coverage-7.10.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5b2dd6059938063a2c9fee1af729d4f2af28fd1a545e9b7652861f0d752ebcea"}, {file = "coverage-7.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:388d80e56191bf846c485c14ae2bc8898aa3124d9d35903fef7d907780477634"}, {file = "coverage-7.10.6-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:90cb5b1a4670662719591aa92d0095bb41714970c0b065b02a2610172dbf0af6"}, {file = "coverage-7.10.6-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:961834e2f2b863a0e14260a9a273aff07ff7818ab6e66d2addf5628590c628f9"}, {file = "coverage-7.10.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf9a19f5012dab774628491659646335b1928cfc931bf8d97b0d5918dd58033c"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99c4283e2a0e147b9c9cc6bc9c96124de9419d6044837e9799763a0e29a7321a"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:282b1b20f45df57cc508c1e033403f02283adfb67d4c9c35a90281d81e5c52c5"}, {file = "coverage-7.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8cdbe264f11afd69841bd8c0d83ca10b5b32853263ee62e6ac6a0ab63895f972"}, {file = "coverage-7.10.6-cp312-cp312-win32.whl", hash = "sha256:a517feaf3a0a3eca1ee985d8373135cfdedfbba3882a5eab4362bda7c7cf518d"}, {file = "coverage-7.10.6-cp312-cp312-win_amd64.whl", hash = "sha256:856986eadf41f52b214176d894a7de05331117f6035a28ac0016c0f63d887629"}, {file = "coverage-7.10.6-cp312-cp312-win_arm64.whl", hash = "sha256:acf36b8268785aad739443fa2780c16260ee3fa09d12b3a70f772ef100939d80"}, {file = "coverage-7.10.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ffea0575345e9ee0144dfe5701aa17f3ba546f8c3bb48db62ae101afb740e7d6"}, {file = "coverage-7.10.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:95d91d7317cde40a1c249d6b7382750b7e6d86fad9d8eaf4fa3f8f44cf171e80"}, {file = "coverage-7.10.6-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3e23dd5408fe71a356b41baa82892772a4cefcf758f2ca3383d2aa39e1b7a003"}, {file = "coverage-7.10.6-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f3f56e4cb573755e96a16501a98bf211f100463d70275759e73f3cbc00d4f27"}, {file = "coverage-7.10.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db4a1d897bbbe7339946ffa2fe60c10cc81c43fab8b062d3fcb84188688174a4"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8fd7879082953c156d5b13c74aa6cca37f6a6f4747b39538504c3f9c63d043d"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:28395ca3f71cd103b8c116333fa9db867f3a3e1ad6a084aa3725ae002b6583bc"}, {file = "coverage-7.10.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:61c950fc33d29c91b9e18540e1aed7d9f6787cc870a3e4032493bbbe641d12fc"}, {file = "coverage-7.10.6-cp313-cp313-win32.whl", hash = "sha256:160c00a5e6b6bdf4e5984b0ef21fc860bc94416c41b7df4d63f536d17c38902e"}, {file = "coverage-7.10.6-cp313-cp313-win_amd64.whl", hash = "sha256:628055297f3e2aa181464c3808402887643405573eb3d9de060d81531fa79d32"}, {file = "coverage-7.10.6-cp313-cp313-win_arm64.whl", hash = "sha256:df4ec1f8540b0bcbe26ca7dd0f541847cc8a108b35596f9f91f59f0c060bfdd2"}, {file = "coverage-7.10.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c9a8b7a34a4de3ed987f636f71881cd3b8339f61118b1aa311fbda12741bff0b"}, {file = "coverage-7.10.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dd5af36092430c2b075cee966719898f2ae87b636cefb85a653f1d0ba5d5393"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0353b0f0850d49ada66fdd7d0c7cdb0f86b900bb9e367024fd14a60cecc1e27"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d6b9ae13d5d3e8aeca9ca94198aa7b3ebbc5acfada557d724f2a1f03d2c0b0df"}, {file = "coverage-7.10.6-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:675824a363cc05781b1527b39dc2587b8984965834a748177ee3c37b64ffeafb"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:692d70ea725f471a547c305f0d0fc6a73480c62fb0da726370c088ab21aed282"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:851430a9a361c7a8484a36126d1d0ff8d529d97385eacc8dfdc9bfc8c2d2cbe4"}, {file = "coverage-7.10.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d9369a23186d189b2fc95cc08b8160ba242057e887d766864f7adf3c46b2df21"}, {file = "coverage-7.10.6-cp313-cp313t-win32.whl", hash = "sha256:92be86fcb125e9bda0da7806afd29a3fd33fdf58fba5d60318399adf40bf37d0"}, {file = "coverage-7.10.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6b3039e2ca459a70c79523d39347d83b73f2f06af5624905eba7ec34d64d80b5"}, {file = "coverage-7.10.6-cp313-cp313t-win_arm64.whl", hash = "sha256:3fb99d0786fe17b228eab663d16bee2288e8724d26a199c29325aac4b0319b9b"}, {file = "coverage-7.10.6-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6008a021907be8c4c02f37cdc3ffb258493bdebfeaf9a839f9e71dfdc47b018e"}, {file = "coverage-7.10.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5e75e37f23eb144e78940b40395b42f2321951206a4f50e23cfd6e8a198d3ceb"}, {file = "coverage-7.10.6-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0f7cb359a448e043c576f0da00aa8bfd796a01b06aa610ca453d4dde09cc1034"}, {file = "coverage-7.10.6-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c68018e4fc4e14b5668f1353b41ccf4bc83ba355f0e1b3836861c6f042d89ac1"}, {file = "coverage-7.10.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cd4b2b0707fc55afa160cd5fc33b27ccbf75ca11d81f4ec9863d5793fc6df56a"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cec13817a651f8804a86e4f79d815b3b28472c910e099e4d5a0e8a3b6a1d4cb"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f2a6a8e06bbda06f78739f40bfb56c45d14eb8249d0f0ea6d4b3d48e1f7c695d"}, {file = "coverage-7.10.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:081b98395ced0d9bcf60ada7661a0b75f36b78b9d7e39ea0790bb4ed8da14747"}, {file = "coverage-7.10.6-cp314-cp314-win32.whl", hash = "sha256:6937347c5d7d069ee776b2bf4e1212f912a9f1f141a429c475e6089462fcecc5"}, {file = "coverage-7.10.6-cp314-cp314-win_amd64.whl", hash = "sha256:adec1d980fa07e60b6ef865f9e5410ba760e4e1d26f60f7e5772c73b9a5b0713"}, {file = "coverage-7.10.6-cp314-cp314-win_arm64.whl", hash = "sha256:a80f7aef9535442bdcf562e5a0d5a5538ce8abe6bb209cfbf170c462ac2c2a32"}, {file = "coverage-7.10.6-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0de434f4fbbe5af4fa7989521c655c8c779afb61c53ab561b64dcee6149e4c65"}, {file = "coverage-7.10.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6e31b8155150c57e5ac43ccd289d079eb3f825187d7c66e755a055d2c85794c6"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:98cede73eb83c31e2118ae8d379c12e3e42736903a8afcca92a7218e1f2903b0"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f863c08f4ff6b64fa8045b1e3da480f5374779ef187f07b82e0538c68cb4ff8e"}, {file = "coverage-7.10.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b38261034fda87be356f2c3f42221fdb4171c3ce7658066ae449241485390d5"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e93b1476b79eae849dc3872faeb0bf7948fd9ea34869590bc16a2a00b9c82a7"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ff8a991f70f4c0cf53088abf1e3886edcc87d53004c7bb94e78650b4d3dac3b5"}, {file = "coverage-7.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ac765b026c9f33044419cbba1da913cfb82cca1b60598ac1c7a5ed6aac4621a0"}, {file = "coverage-7.10.6-cp314-cp314t-win32.whl", hash = "sha256:441c357d55f4936875636ef2cfb3bee36e466dcf50df9afbd398ce79dba1ebb7"}, {file = "coverage-7.10.6-cp314-cp314t-win_amd64.whl", hash = "sha256:073711de3181b2e204e4870ac83a7c4853115b42e9cd4d145f2231e12d670930"}, {file = "coverage-7.10.6-cp314-cp314t-win_arm64.whl", hash = "sha256:137921f2bac5559334ba66122b753db6dc5d1cf01eb7b64eb412bb0d064ef35b"}, {file = "coverage-7.10.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90558c35af64971d65fbd935c32010f9a2f52776103a259f1dee865fe8259352"}, {file = "coverage-7.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8953746d371e5695405806c46d705a3cd170b9cc2b9f93953ad838f6c1e58612"}, {file = "coverage-7.10.6-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c83f6afb480eae0313114297d29d7c295670a41c11b274e6bca0c64540c1ce7b"}, {file = "coverage-7.10.6-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7eb68d356ba0cc158ca535ce1381dbf2037fa8cb5b1ae5ddfc302e7317d04144"}, {file = "coverage-7.10.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b15a87265e96307482746d86995f4bff282f14b027db75469c446da6127433b"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fc53ba868875bfbb66ee447d64d6413c2db91fddcfca57025a0e7ab5b07d5862"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efeda443000aa23f276f4df973cb82beca682fd800bb119d19e80504ffe53ec2"}, {file = "coverage-7.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9702b59d582ff1e184945d8b501ffdd08d2cee38d93a2206aa5f1365ce0b8d78"}, {file = "coverage-7.10.6-cp39-cp39-win32.whl", hash = "sha256:2195f8e16ba1a44651ca684db2ea2b2d4b5345da12f07d9c22a395202a05b23c"}, {file = "coverage-7.10.6-cp39-cp39-win_amd64.whl", hash = "sha256:f32ff80e7ef6a5b5b606ea69a36e97b219cd9dc799bcf2963018a4d8f788cfbf"}, {file = "coverage-7.10.6-py3-none-any.whl", hash = "sha256:92c4ecf6bf11b2e85fd4d8204814dc26e6a19f0c9d938c207c5cb0eadfcabbe3"}, {file = "coverage-7.10.6.tar.gz", hash = "sha256:f644a3ae5933a552a29dbb9aa2f90c677a875f80ebea028e5a52a4f429044b90"}, ] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "docutils" version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] [[package]] name = "exceptiongroup" version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] [package.dependencies] typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} [package.extras] test = ["pytest (>=6)"] [[package]] name = "furo" version = "2025.12.19" description = "A clean customisable Sphinx documentation theme." optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f"}, {file = "furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7"}, ] [package.dependencies] accessible-pygments = ">=0.0.5" beautifulsoup4 = "*" pygments = ">=2.7" sphinx = ">=7.0,<10.0" sphinx-basic-ng = ">=1.0.0.beta2" [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["docs"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["docs"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] [[package]] name = "importlib-metadata" version = "8.7.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" groups = ["docs"] markers = "python_version == \"3.9\"" files = [ {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, ] [package.dependencies] zipp = ">=3.20" [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] type = ["pytest-mypy"] [[package]] name = "iniconfig" version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] [[package]] name = "jinja2" version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] [[package]] name = "markupsafe" version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] name = "packaging" version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] name = "pluggy" version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pycairo" version = "1.28.0" description = "Python interface for cairo" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "pycairo-1.28.0-cp310-cp310-win32.whl", hash = "sha256:53e6dbc98456f789965dad49ef89ce2c62f9a10fc96c8d084e14da0ffb73d8a6"}, {file = "pycairo-1.28.0-cp310-cp310-win_amd64.whl", hash = "sha256:c8ab91a75025f984bc327ada335c787efb61c929ea0512063793cb36cee503d4"}, {file = "pycairo-1.28.0-cp310-cp310-win_arm64.whl", hash = "sha256:e955328c1a5147bf71ee94e206413ce15e12630296a79788fcd246c80e5337b8"}, {file = "pycairo-1.28.0-cp311-cp311-win32.whl", hash = "sha256:0fee15f5d72b13ba5fd065860312493dc1bca6ff2dce200ee9d704e11c94e60a"}, {file = "pycairo-1.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:6339979bfec8b58a06476094a9a5c104bd5a99932ddaff16ca0d9203d2f4482c"}, {file = "pycairo-1.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6ae15392e28ebfc0b35d8dc05d395d3b6be4bad9ad4caecf0fa12c8e7150225"}, {file = "pycairo-1.28.0-cp312-cp312-win32.whl", hash = "sha256:c00cfbb7f30eb7ca1d48886712932e2d91e8835a8496f4e423878296ceba573e"}, {file = "pycairo-1.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:d50d190f5033992b55050b9f337ee42a45c3568445d5e5d7987bab96c278d8a6"}, {file = "pycairo-1.28.0-cp312-cp312-win_arm64.whl", hash = "sha256:957e0340ee1c279d197d4f7cfa96f6d8b48e453eec711fca999748d752468ff4"}, {file = "pycairo-1.28.0-cp313-cp313-win32.whl", hash = "sha256:d13352429d8a08a1cb3607767d23d2fb32e4c4f9faa642155383980ec1478c24"}, {file = "pycairo-1.28.0-cp313-cp313-win_amd64.whl", hash = "sha256:082aef6b3a9dcc328fa648d38ed6b0a31c863e903ead57dd184b2e5f86790140"}, {file = "pycairo-1.28.0-cp313-cp313-win_arm64.whl", hash = "sha256:026afd53b75291917a7412d9fe46dcfbaa0c028febd46ff1132d44a53ac2c8b6"}, {file = "pycairo-1.28.0-cp314-cp314-win32.whl", hash = "sha256:d0ab30585f536101ad6f09052fc3895e2a437ba57531ea07223d0e076248025d"}, {file = "pycairo-1.28.0-cp314-cp314-win_amd64.whl", hash = "sha256:94f2ed204999ab95a0671a0fa948ffbb9f3d6fb8731fe787917f6d022d9c1c0f"}, {file = "pycairo-1.28.0-cp39-cp39-win32.whl", hash = "sha256:3ed16d48b8a79cc584cb1cb0ad62dfb265f2dda6d6a19ef5aab181693e19c83c"}, {file = "pycairo-1.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:da0d1e6d4842eed4d52779222c6e43d254244a486ca9fdab14e30042fd5bdf28"}, {file = "pycairo-1.28.0-cp39-cp39-win_arm64.whl", hash = "sha256:458877513eb2125513122e8aa9c938630e94bb0574f94f4fb5ab55eb23d6e9ac"}, {file = "pycairo-1.28.0.tar.gz", hash = "sha256:26ec5c6126781eb167089a123919f87baa2740da2cca9098be8b3a6b91cc5fbc"}, ] [[package]] name = "pygments" version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, ] [package.extras] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pygobject" version = "3.54.5" description = "Python bindings for GObject Introspection" optional = false python-versions = ">=3.9" groups = ["main"] files = [ {file = "pygobject-3.54.5.tar.gz", hash = "sha256:b6656f6348f5245606cf15ea48c384c7f05156c75ead206c1b246c80a22fb585"}, ] [package.dependencies] pycairo = ">=1.16" [[package]] name = "pytest" version = "8.4.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, ] [package.dependencies] colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} iniconfig = ">=1" packaging = ">=20" pluggy = ">=1.5,<2" pygments = ">=2.7.2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-archon" version = "0.0.7" description = "Rule your architecture like a real developer" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ {file = "pytest_archon-0.0.7-py3-none-any.whl", hash = "sha256:5aaad17cff853d058ca686dd1da425ce884daf33ae9668011323173631dc4e94"}, {file = "pytest_archon-0.0.7.tar.gz", hash = "sha256:6a1e814c84adbea4afc188369733ec898f2525cc401f3ca965498f8b3ee454d5"}, ] [package.dependencies] pytest = ">=7.2" [package.extras] dev = ["check-manifest", "check-wheel-contents", "coverage", "mypy", "pyroma", "ruff"] [[package]] name = "pytest-asyncio" version = "1.2.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_asyncio-1.2.0-py3-none-any.whl", hash = "sha256:8e17ae5e46d8e7efe51ab6494dd2010f4ca8dae51652aa3c8d55acf50bfb2e99"}, {file = "pytest_asyncio-1.2.0.tar.gz", hash = "sha256:c609a64a2a8768462d0c99811ddb8bd2583c33fd33cf7f21af1c142e824ffb57"}, ] [package.dependencies] backports-asyncio-runner = {version = ">=1.1,<2", markers = "python_version < \"3.11\""} pytest = ">=8.2,<9" typing-extensions = {version = ">=4.12", markers = "python_version < \"3.13\""} [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] [[package]] name = "pytest-cov" version = "7.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" groups = ["dev"] files = [ {file = "pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861"}, {file = "pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1"}, ] [package.dependencies] coverage = {version = ">=7.10.6", extras = ["toml"]} pluggy = ">=1.2" pytest = ">=7" [package.extras] testing = ["process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "requests" version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "snowballstemmer" version = "3.0.1" description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" groups = ["docs"] files = [ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, ] [[package]] name = "soupsieve" version = "2.7" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" groups = ["docs"] files = [ {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"}, {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"}, ] [[package]] name = "sphinx" version = "7.4.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, ] [package.dependencies] alabaster = ">=0.7.14,<0.8.0" babel = ">=2.13" colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} docutils = ">=0.20,<0.22" imagesize = ">=1.3" importlib-metadata = {version = ">=6.0", markers = "python_version < \"3.10\""} Jinja2 = ">=3.1" packaging = ">=23.0" Pygments = ">=2.17" requests = ">=2.30.0" snowballstemmer = ">=2.2" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.9" tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] [[package]] name = "sphinx-basic-ng" version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." optional = false python-versions = ">=3.7" groups = ["docs"] files = [ {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, ] [package.dependencies] sphinx = ">=4.0" [package.extras] docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" groups = ["docs"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, ] [package.extras] test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["defusedxml (>=0.7.1)", "pytest"] [[package]] name = "sphinxcontrib-serializinghtml" version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, ] [package.extras] lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "tomli" version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] markers = {dev = "python_full_version <= \"3.11.0a6\"", docs = "python_version < \"3.11\""} [[package]] name = "typing-extensions" version = "4.14.1" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["dev", "docs"] files = [ {file = "typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, ] markers = {dev = "python_version < \"3.13\""} [[package]] name = "urllib3" version = "2.6.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["docs"] files = [ {file = "urllib3-2.6.0-py3-none-any.whl", hash = "sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f"}, {file = "urllib3-2.6.0.tar.gz", hash = "sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1"}, ] [package.extras] brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "zipp" version = "3.23.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["docs"] markers = "python_version == \"3.9\"" files = [ {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9,<4.0" content-hash = "60c41bbd19d5a7d28be27241febf10f4c2ef41d0edb75f290d5a2dcae4511fbd" python-gaphas-5.1.2/pyproject.toml000066400000000000000000000042521512665300000172160ustar00rootroot00000000000000[project] name = "gaphas" version = "5.1.2" description="Gaphas is a GTK diagramming widget" authors = [ { name = "Arjan Molenaar", email = "gaphor@gmail.com" }, { name = "Dan Yeaw", email = "dan@yeaw.me" }, ] readme = "README.md" keywords = ["gtk", "diagram", "gaphas"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: X11 Applications :: GTK", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ] requires-python = ">=3.9,<4.0" dependencies = [ "PyGObject>=3.50", "pycairo>=1.20.0", ] [project.urls] homepage = "https://gaphas.readthedocs.io/" repository = "https://github.com/gaphor/gaphas" documentation = "https://gaphas.readthedocs.io/" [tool.poetry] requires-poetry = ">=2.0" [tool.poetry.group.dev.dependencies] pytest = ">=8.3" pytest-cov = ">=5" pytest-archon = ">=0.0.6" pytest-asyncio = ">=0.23.8" [tool.poetry.group.docs] optional=true [tool.poetry.group.docs.dependencies] sphinx = ">=4.3,<8.0" furo = ">=2022,<2026" [tool.pytest.ini_options] testpaths = ["tests"] addopts = ["--import-mode=importlib"] [tool.coverage.run] source = ["gaphas"] [tool.mypy] python_version = 3.9 warn_return_any = true warn_unused_configs = true warn_redundant_casts = true check_untyped_defs = true strict_optional = true disallow_any_explicit = true show_error_codes = true ignore_missing_imports=true namespace_packages = true explicit_package_bases = true warn_unused_ignores = true [[tool.mypy.overrides]] module = [ "cairo", "gi.*", "hotshot.*", ] ignore_missing_imports = true warn_unreachable = true [[tool.mypy.overrides]] module = "gaphas.*" disallow_incomplete_defs = true [tool.ruff] exclude = [ ".venv", "dist", "__init__.py", ] line-length = 88 [tool.ruff.lint] ignore = ["E501", "B905", "B019"] select = [ "B", "B9", "C", "E", "F", "W", ] [tool.ruff.lint.mccabe] max-complexity = 18 [tool.codespell] skip = 'README.md, CODE_OF_CONDUCT.md' [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" python-gaphas-5.1.2/tests/000077500000000000000000000000001512665300000154415ustar00rootroot00000000000000python-gaphas-5.1.2/tests/conftest.py000066400000000000000000000027661512665300000176530ustar00rootroot00000000000000# ruff: noqa: F402, E402 import gi gi.require_version("Gdk", "4.0") gi.require_version("Gtk", "4.0") import pytest import pytest_asyncio from gi.repository import Gtk from gaphas.canvas import Canvas from gaphas.item import Element, Line from gaphas.view import GtkView class Box(Element): def draw(self, context): cr = context.cairo top_left = self.handles()[0].pos cr.rectangle(top_left.x, top_left.y, self.width, self.height) cr.stroke() @pytest.fixture def canvas(): return Canvas() @pytest.fixture def connections(canvas): return canvas.connections @pytest_asyncio.fixture async def view(canvas): view = GtkView(canvas) await view.update() return view @pytest_asyncio.fixture async def scrolled_window(view): scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_child(view) await view.update() return scrolled_window @pytest.fixture def window(view): window = Gtk.Window.new() window.set_child(view) yield window window.destroy() @pytest_asyncio.fixture async def box(canvas, connections, view): box = Box(connections) canvas.add(box) await view.update() return box @pytest.fixture def line(canvas, connections): line = Line(connections) line.tail.pos = (100, 100) canvas.add(line) return line @pytest.fixture def handler(): events = [] def handler(*args): events.append(args) handler.events = events # type: ignore[attr-defined] return handler python-gaphas-5.1.2/tests/test_architecture.py000066400000000000000000000004121512665300000215310ustar00rootroot00000000000000import gaphas def test_gtk_dependency(archrule): archrule("GTK dependency").match("gaphas*").exclude( "gaphas.tool*", "gaphas.view*" ).should_not_import("gi.repository.Gdk", "gi.repository.Gtk").check( gaphas, skip_type_checking=True ) python-gaphas-5.1.2/tests/test_canvas.py000066400000000000000000000115231512665300000203270ustar00rootroot00000000000000import pytest from gaphas.canvas import Canvas from gaphas.connections import ConnectionError from gaphas.connector import ConnectionSink, Connector from gaphas.item import Element as Box from gaphas.item import Line from gaphas.matrix import Matrix from gaphas.model import Model def test_canvas_is_a_view_model(canvas): assert isinstance(canvas, Model) def test_update_matrices(): """Test updating of matrices.""" c = Canvas() i = Box(c.connections) ii = Box(c.connections) c.add(i) c.add(ii, i) i.matrix.translate(5.0, 0.0) ii.matrix.translate(0.0, 8.0) assert c.get_matrix_i2c(i) == Matrix(1, 0, 0, 1, 5, 0) assert c.get_matrix_i2c(ii) == Matrix(1, 0, 0, 1, 5, 8) def test_reparent(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) c.add(b1) c.add(b2, b1) c.reparent(b2, None) def count(i): return len(list(i)) def test_connect_item(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) line = Line(c.connections) c.add(b1) c.add(b2) c.add(line) c.connections.connect_item(line, line.handles()[0], b1, b1.ports()[0]) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 # Add the same with pytest.raises(ConnectionError): c.connections.connect_item(line, line.handles()[0], b1, b1.ports()[0]) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 def test_disconnect_item_with_callback(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) line = Line(c.connections) c.add(b1) c.add(b2) c.add(line) events = [] def callback(*args): events.append("called") c.connections.connect_item( line, line.handles()[0], b1, b1.ports()[0], callback=callback ) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 c.connections.disconnect_item(line, line.handles()[0]) assert count(c.connections.get_connections(handle=line.handles()[0])) == 0 assert events == ["called"] def test_disconnect_item_with_constraint(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) line = Line(c.connections) c.add(b1) c.add(b2) c.add(line) cons = b1.ports()[0].constraint(line, line.handles()[0], b1) c.connections.connect_item( line, line.handles()[0], b1, b1.ports()[0], constraint=cons ) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 assert len(c.solver.constraints) == 13 c.connections.disconnect_item(line, line.handles()[0]) assert count(c.connections.get_connections(handle=line.handles()[0])) == 0 assert len(c.solver.constraints) == 12 def test_disconnect_item_by_deleting_element(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) line = Line(c.connections) c.add(b1) c.add(b2) c.add(line) events = [] def callback(*args): events.append("called") c.connections.connect_item( line, line.handles()[0], b1, b1.ports()[0], callback=callback ) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 c.remove(b1) assert count(c.connections.get_connections(handle=line.handles()[0])) == 0 assert events == ["called"] def test_disconnect_item_with_constraint_by_deleting_element(): c = Canvas() b1 = Box(c.connections) b2 = Box(c.connections) line = Line(c.connections) c.add(b1) c.add(b2) c.add(line) cons = b1.ports()[0].constraint(line, line.handles()[0], b1) c.connections.connect_item( line, line.handles()[0], b1, b1.ports()[0], constraint=cons ) assert count(c.connections.get_connections(handle=line.handles()[0])) == 1 ncons = len(c.solver.constraints) assert ncons == 13 c.remove(b1) assert count(c.connections.get_connections(handle=line.handles()[0])) == 0 assert 6 == len(c.solver.constraints) def test_remove_connected_item(): """Test adding canvas constraint.""" canvas = Canvas() l1 = Line(canvas.connections) canvas.add(l1) b1 = Box(canvas.connections) canvas.add(b1) number_cons1 = len(canvas.solver.constraints) b2 = Box(canvas.connections) canvas.add(b2) number_cons2 = len(canvas.solver.constraints) conn = Connector(l1, l1.handles()[0], canvas.connections) sink = ConnectionSink(b1) conn.connect(sink) assert canvas.connections.get_connection(l1.handles()[0]) conn = Connector(l1, l1.handles()[1], canvas.connections) sink = ConnectionSink(b2) conn.connect(sink) assert canvas.connections.get_connection(l1.handles()[1]) assert number_cons2 + 2 == len(canvas.solver.constraints) canvas.remove(b1) # Expecting a class + line connected at one end only assert number_cons1 + 1 == len(canvas.solver.constraints) python-gaphas-5.1.2/tests/test_connections.py000066400000000000000000000053411512665300000213770ustar00rootroot00000000000000import pytest from gaphas import item from gaphas.connections import Connections from gaphas.constraint import EqualsConstraint from gaphas.solver import Solver @pytest.fixture def connections(): return Connections() def test_connections_with_custom_solver(): solver = Solver() connections = Connections(solver) assert connections.solver is solver def test_reconnect_item(connections): i = item.Line(connections) ii = item.Line(connections) cons1 = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) cons2 = EqualsConstraint(i.handles()[0].pos.y, i.handles()[0].pos.y) connections.connect_item(i, i.handles()[0], ii, ii.ports()[0], cons1) assert connections.get_connection(i.handles()[0]).constraint is cons1 assert cons1 in connections.solver.constraints connections.reconnect_item(i, i.handles()[0], constraint=cons2) assert connections.get_connection(i.handles()[0]).constraint is cons2 assert cons1 not in connections.solver.constraints assert cons2 in connections.solver.constraints def test_add_item_constraint(connections): i = item.Line(connections) c1 = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) connections.add_constraint(i, c1) cinfo = next(connections.get_connections(item=i)) assert cinfo.item is i assert cinfo.constraint is c1 def test_remove_item_constraint(connections): i = item.Line(connections) c1 = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) connections.add_constraint(i, c1) connections.remove_constraint(i, c1) assert list(connections.get_connections(item=i)) == [] def test_remove_item_constraint_when_item_is_disconnected(connections): i = item.Line(connections) c1 = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) connections.add_constraint(i, c1) connections.disconnect_item(i) assert list(connections.get_connections(item=i)) == [] def test_notify_on_constraint_solved(connections): events = [] def on_notify(cinfo): events.append(cinfo) i = item.Line(connections) c = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) connections.add_constraint(i, c) connections.add_handler(on_notify) connections.solve() assert events assert events[0].constraint is c def test_connection_remove_handler(connections): events = [] def on_notify(cinfo): events.append(cinfo) i = item.Line(connections) c = EqualsConstraint(i.handles()[0].pos.x, i.handles()[0].pos.x) connections.add_constraint(i, c) connections.add_handler(on_notify) connections.remove_handler(on_notify) connections.remove_handler(on_notify) connections.solve() assert not events python-gaphas-5.1.2/tests/test_connector.py000066400000000000000000000021701512665300000210440ustar00rootroot00000000000000import pytest from gaphas.connector import ConnectionSink from gaphas.item import Element @pytest.fixture def element(connections): """Element at (0, 0), size 100x100.""" return Element(connections, 100, 100) @pytest.mark.parametrize( "pos,expected_glue_pos", [ [(0, 0), (0, 0)], [(50, 0), (50, 0)], [(0, 50), (0, 50)], [(50, 100), (50, 100)], [(100, 50), (100, 50)], [(-50, 0), None], [(50, 50), None], ], ) def test_element_glue_on_border(element, pos, expected_glue_pos): sink = ConnectionSink(element) glue_pos = sink.glue(pos) assert glue_pos == expected_glue_pos @pytest.mark.parametrize( "secondary_pos,expected_glue_pos", [ [(-50, 0), (0.5, 25.5)], [(0, -50), (25.5, 0.5)], [(50, 150), (50.5, 100.5)], [(150, 50), (100.5, 50.5)], ], ) def test_element_glue_on_border_with_secondary_position( element, secondary_pos, expected_glue_pos ): pos = (50, 50) sink = ConnectionSink(element) glue_pos = sink.glue(pos, secondary_pos=secondary_pos) assert glue_pos == expected_glue_pos python-gaphas-5.1.2/tests/test_constraints.py000066400000000000000000000074611512665300000214310ustar00rootroot00000000000000import pytest from gaphas.constraint import ( EqualsConstraint, LessThanConstraint, LineAlignConstraint, LineConstraint, PositionConstraint, constraint, ) from gaphas.position import Position from gaphas.solver import Variable def test_pos_constraint(): """Test position constraint.""" x1, y1 = Variable(10), Variable(11) x2, y2 = Variable(12), Variable(13) pc = PositionConstraint(origin=(x1, y1), point=(x2, y2)) pc.solve_for() # origin shall remain the same assert 10 == x1 assert 11 == y1 # point shall be moved to origin assert 10 == x2 assert 11 == y2 # change just x of origin x1.value = 15 pc.solve_for() assert 15 == x2 # change just y of origin y1.value = 14 pc.solve_for() assert 14 == y2 def test_delta(): """Test line align constraint delta.""" line = (Variable(0), Variable(0)), (Variable(30), Variable(20)) point = (Variable(15), Variable(10)) lc = LineAlignConstraint(line=line, point=point, align=0.5, delta=5) lc.solve_for() assert round(abs(19.16 - point[0].value), 2) == 0 assert round(abs(12.77 - point[1].value), 2) == 0 line[1][0].value = 40 line[1][1].value = 30 lc.solve_for() assert round(abs(24.00 - point[0].value), 2) == 0 assert round(abs(18.00 - point[1].value), 2) == 0 def test_delta_below_zero(): """Test line align constraint with delta below zero.""" line = (Variable(0), Variable(0)), (Variable(30), Variable(20)) point = (Variable(15), Variable(10)) lc = LineAlignConstraint(line=line, point=point, align=0.5, delta=-5) lc.solve_for() assert round(abs(10.84 - point[0].value), 2) == 0 assert round(abs(7.23 - point[1].value), 2) == 0 line[1][0].value = 40 line[1][1].value = 30 lc.solve_for() assert round(abs(16.0 - point[0].value), 2) == 0 assert round(abs(12.00 - point[1].value), 2) == 0 @pytest.fixture() def pos1(): return Position(1, 2) @pytest.fixture def pos2(): return Position(3, 4) def test_line_constraint(pos1): """Test line creation constraint.""" line = (Position(3, 4), Position(5, 6)) c = constraint(line=(pos1, line)) assert isinstance(c, LineConstraint) assert Position(1, 2) == c._point assert (Position(3, 4), Position(5, 6)) == c._line def test_line_constraint_with_horizontal_line(): """Test line creation constraint.""" line = (Position(0, 0), Position(4, 0)) point = Position(1, 0) c = constraint(line=(point, line)) line[1].pos = (0, 4) c.solve() assert point.tuple() == (0.0, 1.0) def test_line_constraint_with_vertical_line(): """Test line creation constraint.""" line = (Position(0, 0), Position(0, 4)) point = Position(0, 1) c = constraint(line=(point, line)) line[1].pos = (4, 0) c.solve() assert point.tuple() == (1.0, 0.0) def test_horizontal_constraint(pos1, pos2): """Test horizontal constraint creation.""" c = constraint(horizontal=(pos1, pos2)) assert isinstance(c, EqualsConstraint) # Expect constraint on y-axis assert 2 == c.a assert 4 == c.b def test_vertical_constraint(pos1, pos2): """Test vertical constraint creation.""" c = constraint(vertical=(pos1, pos2)) assert isinstance(c, EqualsConstraint) # Expect constraint on x-axis assert 1 == c.a assert 3 == c.b def test_left_of_constraint(pos1, pos2): """Test "less than" constraint (horizontal) creation.""" c = constraint(left_of=(pos1, pos2)) assert isinstance(c, LessThanConstraint) assert 1 == c.smaller assert 3 == c.bigger def test_above_constraint(pos1, pos2): """Test "less than" constraint (vertical) creation.""" c = constraint(above=(pos1, pos2)) assert isinstance(c, LessThanConstraint) assert 2 == c.smaller assert 4 == c.bigger python-gaphas-5.1.2/tests/test_element.py000066400000000000000000000027111512665300000205040ustar00rootroot00000000000000import pytest from gaphas.item import NE, NW, SE, SW def test_creation_with_size(canvas, box): """Test if initial size holds when added to a canvas.""" box.width = 150 box.height = 153 assert box.width == 150, box.width assert box.height == 153, box.height assert box.handles()[SE].pos.x == 150, box.handles()[SE].pos.x assert box.handles()[SE].pos.y == 153, box.handles()[SE].pos.y def test_box_handle_order(box): h_nw, h_ne, h_se, h_sw = box.handles() assert h_nw is box.handles()[NW] assert h_ne is box.handles()[NE] assert h_sw is box.handles()[SW] assert h_se is box.handles()[SE] @pytest.mark.parametrize("count", [1, 2, 10, 99]) @pytest.mark.asyncio async def test_resize_by_dragging_se_handle(canvas, box, count): h_nw, h_ne, h_se, h_sw = box.handles() for _ in range(count): h_se.pos.x += 100 # h.se.{x,y} = 10, now h_se.pos.y += 100 canvas.update_now((box,)) assert 100 * count + 10 == h_se.pos.x assert 100 * count + 10 == float(h_se.pos.y) assert 100 * count + 10 == float(h_ne.pos.x) assert 100 * count + 10 == float(h_sw.pos.y) def test_point(box): box.handles()[SE].pos = (100, 100) assert box.point(50, 50) == -50 def test_point_with_moved_nw_handle(box): box.handles()[NW].pos = (-100, -100) assert box.point(-50, -50) == -50 def test_point_outside_box(box): box.handles()[SE].pos = (10, 10) assert box.point(10, 50) == 40 python-gaphas-5.1.2/tests/test_freehand.py000066400000000000000000000023001512665300000206210ustar00rootroot00000000000000import cairo from gaphas.painter.freehand import FreeHandCairoContext def test_drawing_lines(): surface = cairo.SVGSurface("freehand-drawing-lines.svg", 100, 100) cr = FreeHandCairoContext(cairo.Context(surface)) cr.set_line_width(2) cr.move_to(20, 20) cr.line_to(20, 80) cr.line_to(80, 80) cr.line_to(80, 20) cr.stroke() cr.show_page() def test_drawing_rectangle(): surface = cairo.SVGSurface("freehand-drawing-rectangle.svg", 100, 100) cr = FreeHandCairoContext(cairo.Context(surface)) cr.set_line_width(2) cr.rectangle(20, 20, 60, 60) cr.stroke() cr.show_page() DRAWING_LINES_OUTPUT = """ """ python-gaphas-5.1.2/tests/test_geometry.py000066400000000000000000000101341512665300000207040ustar00rootroot00000000000000from collections.abc import Iterable import pytest from gaphas.geometry import ( Rectangle, distance_line_point, distance_rectangle_border_point, distance_rectangle_point, intersect_line_line, point_on_rectangle, ) def test_rectangle_is_iterable(): assert isinstance(Rectangle(), Iterable) def test_distance_line_point(): assert distance_line_point((0.0, 0.0), (2.0, 4.0), point=(3.0, 4.0)) == ( 1.0, (2.0, 4.0), ) assert distance_line_point((0.0, 0.0), (2.0, 4.0), point=(-1.0, 0.0)) == ( 1.0, (0.0, 0.0), ) assert distance_line_point((0.0, 0.0), (2.0, 4.0), point=(1.0, 2.0)) == ( 0.0, (1.0, 2.0), ) def test_distance_line_point_complex(): d, p = distance_line_point((0.0, 0.0), (2.0, 4.0), point=(2.0, 2.0)) assert f"{d:.3f}" == "0.894" assert f"({p[0]:.3f}, {p[1]:.3f})" == "(1.200, 2.400)" @pytest.mark.parametrize( ["line_start", "line_end", "point"], [ [(0, 0), (2, 2), (-1, 0)], [(0, 0), (0, 0), (-1, 0)], [(0, 0), (2, 2), (3, 2)], [(0, 0), (2, 3), (1, 1)], ], ) def test_distance_line_point_does_not_return_inputs(line_start, line_end, point): # Rationale: inputs can be of a different type (e.g. Position) # but the function should always return a tuple. _distance, point_on_line = distance_line_point(line_start, line_end, point) assert point_on_line is not line_start assert point_on_line is not line_end assert point_on_line is not point def test_distance_rectangle_point(): assert distance_rectangle_point((2, 0, 2, 2), (0, 0)) == 2 assert distance_rectangle_point(Rectangle(0, 0, 10, 10), (11, -1)) == 2 assert distance_rectangle_point((0, 0, 10, 10), (11, -1)) == 2 assert distance_rectangle_point((0, 0, 10, 10), (-1, 11)) == 2 def test_distance_point_in_rectangle(): assert distance_rectangle_point((0, 0, 2, 2), (1, 1)) == 0 def test_distance_with_negative_numbers_in_rectangle(): assert distance_rectangle_point((-50, -100, 100, 100), (-17, -65)) == 0 def test_distance_rectangle_border_point(): assert distance_rectangle_border_point((2, 0, 2, 2), (0, 0)) == 2 assert distance_rectangle_border_point(Rectangle(0, 0, 10, 10), (11, -1)) == 2 assert distance_rectangle_border_point((0, 0, 10, 10), (11, -1)) == 2 assert distance_rectangle_border_point((0, 0, 10, 10), (3, 4)) == -3 assert distance_rectangle_border_point((0, 0, 2, 2), (1, 1)) == -1 def test_point_on_rectangle(): assert point_on_rectangle((2, 2, 2, 2), (0, 0)) == (2, 2) assert point_on_rectangle((2, 2, 2, 2), (3, 0)) == (3, 2) assert point_on_rectangle(Rectangle(0, 0, 10, 10), (11, -1)) == (10, 0) assert point_on_rectangle((0, 0, 10, 10), (5, 12)) == (5, 10) assert point_on_rectangle(Rectangle(0, 0, 10, 10), (12, 5)) == (10, 5) assert point_on_rectangle(Rectangle(1, 1, 10, 10), (3, 4)) == (3, 4) assert point_on_rectangle(Rectangle(1, 1, 10, 10), (0, 3)) == (1, 3) assert point_on_rectangle(Rectangle(1, 1, 10, 10), (4, 3)) == (4, 3) def test_point_on_rectangle_border(): assert point_on_rectangle(Rectangle(1, 1, 10, 10), (4, 9), border=True) == (4, 11) assert point_on_rectangle((1, 1, 10, 10), (4, 6), border=True) == (1, 6) assert point_on_rectangle(Rectangle(1, 1, 10, 10), (5, 3), border=True) == (5, 1) assert point_on_rectangle(Rectangle(1, 1, 10, 10), (8, 4), border=True) == (11, 4) assert point_on_rectangle((1, 1, 10, 100), (5, 8), border=True) == (1, 8) assert point_on_rectangle((1, 1, 10, 100), (5, 98), border=True) == (5, 101) def test_intersect_line_line(): assert intersect_line_line((3, 0), (8, 10), (0, 0), (10, 10)) == (6.5, 6.5) assert intersect_line_line((0, 0), (10, 10), (3, 0), (8, 10)) == (6.5, 6.5) assert intersect_line_line((0, 0), (10, 10), (8, 10), (3, 0)) == (6.5, 6.5) assert intersect_line_line((8, 10), (3, 0), (0, 0), (10, 10)) == (6.5, 6.5) def test_intersect_line_line_not_crossing(): assert intersect_line_line((0, 0), (0, 10), (3, 0), (8, 10)) is None assert intersect_line_line((0, 0), (0, 10), (3, 0), (3, 10)) is None python-gaphas-5.1.2/tests/test_guide.py000066400000000000000000000072241512665300000201540ustar00rootroot00000000000000import pytest from gaphas.connections import Connections from gaphas.connector import Handle from gaphas.guide import Guide, GuidedItemMove, find_closest from gaphas.item import Element, Line from gaphas.solver import WEAK @pytest.fixture def line(canvas, connections): line = Line(connections) canvas.add(line) return line def test_find_closest(view, connections): """Test find closest method.""" set1 = [0, 10, 20] set2 = [2, 15, 30] d, closest = find_closest(set1, set2) assert 2.0 == d assert [2.0] == closest def test_element_guide(): e1 = Element(Connections()) assert 10 == e1.width assert 10 == e1.height guides = list(Guide(e1).horizontal()) assert 0.0 == guides[0] assert 5.0 == guides[1] assert 10.0 == guides[2] guides = list(Guide(e1).vertical()) assert 0.0 == guides[0] assert 5.0 == guides[1] assert 10.0 == guides[2] def test_line_guide(line, canvas): line.handles().append(Handle((20, 20), strength=WEAK)) line.handles().append(Handle((30, 30), strength=WEAK)) line.handles().append(Handle((40, 40), strength=WEAK)) line.orthogonal = True canvas.update_now((line,)) guides = list(Guide(line).horizontal()) assert len(line.handles()) == len(guides) assert 0.0 == guides[0] assert 10.0 == guides[1] assert 10.0 == guides[2] assert 40.0 == guides[3] guides = list(Guide(line).vertical()) assert len(line.handles()) == len(guides) assert 10.0 == guides[0] assert 10.0 == guides[1] assert 30.0 == guides[2] assert 30.0 == guides[3] def test_line_guide_horizontal(line, canvas): line.handles().append(Handle((20, 20))) line.handles().append(Handle((30, 30))) line.handles().append(Handle((40, 40))) line.horizontal = True line.orthogonal = True canvas.update_now((line,)) guides = list(Guide(line).horizontal()) assert len(line.handles()) == len(guides) assert 10.0 == guides[0] assert 10.0 == guides[1] assert 30.0 == guides[2] @pytest.mark.asyncio async def test_guide_item_in_motion(connections, canvas, view, window): e1 = Element(connections) e2 = Element(connections) e3 = Element(connections) canvas.add(e1) canvas.add(e2) canvas.add(e3) assert 0 == e1.matrix[4] assert 0 == e1.matrix[5] e2.matrix.translate(40, 40) canvas.request_update(e2) await view.update() assert 40 == e2.matrix[4] assert 40 == e2.matrix[5] guider = GuidedItemMove(e3, view) guider.start_move((0, 0)) assert 0 == e3.matrix[4] assert 0 == e3.matrix[5] # Moved back to guided lines: for d in range(3): guider.move((d, d)) assert 0 == e3.matrix[4] assert 0 == e3.matrix[5] guider.move((20, 20)) assert 20 == e3.matrix[4] assert 20 == e3.matrix[5] @pytest.mark.asyncio async def test_guide_item_in_motion_2(connections, canvas, view): e1 = Element(connections) e2 = Element(connections) e3 = Element(connections) canvas.add(e1) canvas.add(e2) canvas.add(e3) assert 0 == e1.matrix[4] assert 0 == e1.matrix[5] e2.matrix.translate(40, 40) canvas.request_update(e2) await view.update() assert 40 == e2.matrix[4] assert 40 == e2.matrix[5] guider = GuidedItemMove(e3, view) guider.start_move((3, 3)) assert 0 == e3.matrix[4] assert 0 == e3.matrix[5] # Moved back to guided lines: for y in range(4, 6): guider.move((3, y)) assert 0 == e3.matrix[4] assert 0 == e3.matrix[5] # Take into account initial cursor offset of (3, 3) guider.move((20, 23)) assert 17 == e3.matrix[4] assert 20 == e3.matrix[5] python-gaphas-5.1.2/tests/test_handle.py000066400000000000000000000002021512665300000202770ustar00rootroot00000000000000from gaphas.connector import Handle def test_handle_x_y(): h = Handle() assert 0.0 == h.pos.x assert 0.0 == h.pos.y python-gaphas-5.1.2/tests/test_handle_move.py000066400000000000000000000031401512665300000213310ustar00rootroot00000000000000import pytest from gaphas.handlemove import ItemHandleMove @pytest.mark.asyncio async def test_can_connect(line, box, connections, view): handle_move = ItemHandleMove(line, line.head, view) handle_move.connect((0, 0)) assert connections.get_connection(line.head) @pytest.mark.asyncio async def test_handle_is_connected_and_constraint_removed_when_moved( line, box, connections, view ): handle_move = ItemHandleMove(line, line.head, view) handle_move.connect((0, 0)) handle_move.start_move((0, 0)) cinfo = connections.get_connection(line.head) constraint = cinfo.constraint assert constraint not in connections.solver.constraints @pytest.mark.asyncio async def test_connected_item_can_disconnect(line, box, connections, view): handle_move = ItemHandleMove(line, line.head, view) handle_move.connect((0, 0)) cinfo = connections.get_connection(line.head) orig_constraint = cinfo.constraint handle_move.start_move((0, 0)) handle_move.stop_move((100, 100)) assert not connections.get_connection(line.head) assert orig_constraint not in connections.solver.constraints @pytest.mark.asyncio async def test_connected_item_can_reconnect(line, box, connections, view): handle_move = ItemHandleMove(line, line.head, view) handle_move.connect((0, 0)) cinfo = connections.get_connection(line.head) orig_constraint = cinfo.constraint handle_move.start_move((0, 0)) handle_move.stop_move((0, 0)) cinfo = connections.get_connection(line.head) new_constraint = cinfo.constraint assert orig_constraint is not new_constraint python-gaphas-5.1.2/tests/test_item.py000066400000000000000000000016221512665300000200110ustar00rootroot00000000000000"""Item constraint creation tests. The test check functionality of `Item.constraint` method, not constraints themselves. """ from gaphas.item import Element, Item, Line class Custom: def __init__(self, custom): self.custom = custom def test_can_pass_arbitrary_arguments_to_an_element(connections): class Test(Element, Custom): pass t = Test(connections, custom="custom") assert t.custom == "custom" def test_can_pass_arbitrary_arguments_to_a_line(connections): class Test(Line, Custom): pass t = Test(connections, custom="custom") assert t.custom == "custom" assert t._connections is connections def test_element_implements_item_protocol(connections): element = Element(connections) assert isinstance(element, Item) def test_line_implements_item_protocol(connections): line = Line(connections) assert isinstance(line, Item) python-gaphas-5.1.2/tests/test_line.py000066400000000000000000000003761512665300000200070ustar00rootroot00000000000000"""Basic item tests for lines.""" from gaphas.canvas import Canvas from gaphas.item import Line def test_initial_ports(): """Test initial ports amount.""" canvas = Canvas() line = Line(canvas.connections) assert 1 == len(line.ports()) python-gaphas-5.1.2/tests/test_matrix.py000066400000000000000000000002501512665300000203530ustar00rootroot00000000000000from gaphas.matrix import Matrix def test_multiply_equals_should_result_in_same_matrix(): m1 = Matrix() m2 = m1 m2 *= Matrix(20, 20) assert m1 is m2 python-gaphas-5.1.2/tests/test_move.py000066400000000000000000000007751512665300000200310ustar00rootroot00000000000000"""Test aspects for items.""" import pytest from gaphas.item import Element from gaphas.move import Move @pytest.fixture() def item(connections): return Element(connections) @pytest.mark.asyncio async def test_selection_move(canvas, view, item): """Test the Selection role methods.""" canvas.add(item) mover = Move(item, view) assert (1, 0, 0, 1, 0, 0) == tuple(item.matrix) mover.start_move((0, 0)) mover.move((12, 26)) assert (1, 0, 0, 1, 12, 26) == tuple(item.matrix) python-gaphas-5.1.2/tests/test_position.py000066400000000000000000000062471512665300000207270ustar00rootroot00000000000000import pytest from gaphas.matrix import Matrix from gaphas.position import MatrixProjection, Position from gaphas.solver import Solver, Variable @pytest.fixture def solver(): return Solver() @pytest.mark.parametrize("position", [(0, 0), (1, 2)]) def test_position(position): pos = Position(*position) assert position[0] == pos.x assert position[1] == pos.y def test_position_notifies_on_x_change(handler): pos = Position(3, 3) pos.add_handler(handler) pos.x = 4 assert handler.events assert handler.events[0][0] is pos assert handler.events[0][1] == (3.0, 3.0) def test_position_notifies_on_y_change(handler): pos = Position(3, 3) pos.add_handler(handler) pos.y = 4 assert handler.events assert handler.events[0][0] is pos assert handler.events[0][1] == (3.0, 3.0) def test_position_notifies_on_pos_change(handler): pos = Position(3, 3) pos.add_handler(handler) pos.pos = (4, 4) assert len(handler.events) == 1 assert handler.events[0][0] is pos assert handler.events[0][1] == (3.0, 3.0) def test_matrix_projection_exposes_variables(): proj = MatrixProjection(Position(0, 0), Matrix()) assert isinstance(proj.x, Variable) assert isinstance(proj.y, Variable) @pytest.mark.parametrize( "position,matrix,result", [ [(0, 0), Matrix(1, 0, 0, 1, 0, 0), (0, 0)], [(2, 4), Matrix(2, 0, 0, 1, 2, 3), (6, 7)], [(2, 4), Matrix(2, 0, 0, 1, 2, 3), (6, 7)], ], ) def test_projection_updates_when_original_is_changed(solver, position, matrix, result): pos = Position(0, 0) proj = MatrixProjection(pos, matrix) solver.add_constraint(proj) solver.solve() pos.x, pos.y = position solver.solve() assert proj.x == result[0] assert proj.y == result[1] @pytest.mark.parametrize( "position,matrix,result", [ [(0, 0), Matrix(1, 0, 0, 1, 0, 0), (0, 0)], [(2, 0), Matrix(1, 0, 0, 1, 0, 0), (2, 0)], [(2, 0), Matrix(1, 0, 0, 1, 4, 3), (-2, -3)], [(1, 2), Matrix(1, 0, 0, 1, 4, 3), (-3, -1)], ], ) def test_original_updates_when_projection_is_changed(solver, position, matrix, result): pos = Position(0, 0) proj = MatrixProjection(pos, matrix) solver.add_constraint(proj) solver.solve() proj.x, proj.y = position solver.solve() assert pos.x == result[0] assert pos.y == result[1] def test_projection_updates_when_matrix_is_changed(solver): pos = Position(0, 0) matrix = Matrix() proj = MatrixProjection(pos, matrix) solver.add_constraint(proj) solver.solve() matrix.translate(2, 3) solver.solve() assert proj.x == 2 assert proj.y == 3 def test_matrix_projection_sets_handlers_just_in_time(): pos = Position(0, 0) matrix = Matrix() proj = MatrixProjection(pos, matrix) def handler(c): pass assert not matrix._handlers assert not pos.x._handlers assert not pos.y._handlers proj.add_handler(handler) assert matrix._handlers assert pos.x._handlers assert pos.y._handlers proj.remove_handler(handler) assert not matrix._handlers assert not pos.x._handlers assert not pos.y._handlers python-gaphas-5.1.2/tests/test_quadtree.py000066400000000000000000000066271512665300000206770ustar00rootroot00000000000000import itertools import pytest from gaphas.quadtree import Quadtree @pytest.fixture() def qtree(): qtree: Quadtree[str, None] = Quadtree() for i, j in itertools.product(range(0, 100, 10), range(0, 100, 10)): qtree.add(item=f"{i:d}x{j:d}", bounds=(i, j, 10, 10), data=None) return qtree def test_initial_size(qtree): assert qtree.bounds == (0, 0, 100, 100) def test_lookups(qtree): for i, j in itertools.product(range(100, 10), range(100, 10)): assert qtree.find_intersect(rect=(i + 1, j + 1, 1, 1)) == [f"{i:d}x{j:d}"], ( qtree.find_intersect(rect=(i + 1, j + 1, 1, 1)) ) def test_with_rectangles(qtree): assert len(qtree._ids) == 100, len(qtree._ids) for i, j in itertools.product(range(100, 10), range(100, 10)): assert qtree.find_intersect(rect=(i + 1, j + 1, 1, 1)) == [f"{i:d}x{j:d}"], ( qtree.find_intersect(rect=(i + 1, j + 1, 1, 1)) ) def test_moving_items(qtree): qtree.capacity = 10 assert len(qtree._ids) == 100, len(qtree._ids) assert qtree._bucket._buckets, qtree._bucket._buckets for i in range(4): assert qtree._bucket._buckets[i]._buckets for j in range(4): assert not qtree._bucket._buckets[i]._buckets[j]._buckets # Check contents: # First sub-level contains 9 items. second level contains 4 items # ==> 4 * (9 + (4 * 4)) = 100 assert len(qtree._bucket.items) == 0, qtree._bucket.items for i in range(4): assert len(qtree._bucket._buckets[i].items) == 9 for _item, bounds in qtree._bucket._buckets[i].items.items(): assert qtree._bucket.find_bucket(bounds) is qtree._bucket._buckets[i] for j in range(4): assert len(qtree._bucket._buckets[i]._buckets[j].items) == 4 assert qtree.get_bounds("0x0") # Now move item '0x0' to the center of the first quadrant (20, 20) qtree.add("0x0", (20, 20, 10, 10), None) assert len(qtree._bucket.items) == 0 assert len(qtree._bucket._buckets[0]._buckets[0].items) == 3, ( qtree._bucket._buckets[0]._buckets[0].items ) assert len(qtree._bucket._buckets[0].items) == 10, qtree._bucket._buckets[0].items # Now move item '0x0' to the second quadrant (70, 20) qtree.add("0x0", (70, 20, 10, 10), None) assert len(qtree._bucket.items) == 0 assert len(qtree._bucket._buckets[0]._buckets[0].items) == 3, ( qtree._bucket._buckets[0]._buckets[0].items ) assert len(qtree._bucket._buckets[0].items) == 9, qtree._bucket._buckets[0].items assert len(qtree._bucket._buckets[1].items) == 10, qtree._bucket._buckets[1].items def test_get_data(qtree): """Test extra data added to a node.""" for i, j in itertools.product(range(0, 100, 10), range(0, 100, 10)): qtree.add(item=f"{i:d}x{j:d}", bounds=(i, j, 10, 10), data=i + j) for i, j in itertools.product(range(0, 100, 10), range(0, 100, 10)): assert i + j == qtree.get_data(item=f"{i:d}x{j:d}") def test_resize(qtree: Quadtree): qtree.add("0x0", (20, 130, 60, 60), None) assert "0x0" in qtree.find_inside((0, 100, 100, 200)) def test_remove_unknown_item(qtree: Quadtree): qtree = Quadtree() qtree.remove("unknown_item") with pytest.raises(KeyError): qtree.get_bounds("unknown_item") def test_dump_quadtree(qtree, capsys): qtree.dump() captured = capsys.readouterr() assert "gaphas.quadtree.QuadtreeBucket" in captured.out python-gaphas-5.1.2/tests/test_segment.py000066400000000000000000000237021512665300000205200ustar00rootroot00000000000000"""Test segment aspects for items.""" import pytest from gaphas.connector import ItemConnectionSink, ItemConnector from gaphas.handlemove import HandleMove from gaphas.item import Element, Line from gaphas.segment import Segment def test_segment_fails_for_element(canvas, connections): item = Element(connections) with pytest.raises(TypeError): Segment(canvas, item) def test_add_segment_to_line(canvas, connections): line = Line(connections) canvas.add(line) segment = Segment(line, canvas) assert 2 == len(line.handles()) segment.split((5, 5)) assert 3 == len(line.handles()) # Test Line Splitting def test_split_single(canvas, line): # Start with 2 handles & 1 port, after split: expect 3 handles & 2 ports assert len(line.handles()) == 2 assert len(line.ports()) == 1 old_port = line.ports()[0] h1, h2 = line.handles() assert h1.pos == old_port.start assert h2.pos == old_port.end segment = Segment(line, canvas) handles, ports = segment.split_segment(0) handle = handles[0] assert 1 == len(handles) assert (50, 50) == handle.pos.pos assert 3 == len(line.handles()) assert 2 == len(line.ports()) # New handle is between old handles assert handle == line.handles()[1] # The old port is deleted assert old_port not in line.ports() # check ports order p1, p2 = line.ports() h1, h2, h3 = line.handles() assert h1.pos == p1.start assert h2.pos == p1.end assert h2.pos == p2.start assert h3.pos == p2.end def test_split_multiple(canvas, line): """Test multiple line splitting.""" line.handles()[1].pos = (20, 16) handles = line.handles() old_ports = line.ports()[:] # Start with two handles, split into 4 segments: expect 3 new handles assert len(handles) == 2 assert len(old_ports) == 1 segment = Segment(line, canvas) handles, ports = segment.split_segment(0, count=4) assert 3 == len(handles) h1, h2, h3 = handles assert (5, 4) == h1.pos.pos assert (10, 8) == h2.pos.pos assert (15, 12) == h3.pos.pos # New handles between old handles assert 5 == len(line.handles()) assert h1 == line.handles()[1] assert h2 == line.handles()[2] assert h3 == line.handles()[3] assert 4 == len(line.ports()) # The old port is deleted assert old_ports[0] not in line.ports() # Check ports order p1, p2, p3, p4 = line.ports() h1, h2, h3, h4, h5 = line.handles() assert h1.pos == p1.start assert h2.pos == p1.end assert h2.pos == p2.start assert h3.pos == p2.end assert h3.pos == p3.start assert h4.pos == p3.end assert h4.pos == p4.start assert h5.pos == p4.end def test_ports_after_split(canvas, line): """Test ports removal after split.""" line.handles()[1].pos = (20, 16) segment = Segment(line, canvas) segment.split_segment(0) handles = line.handles() old_ports = line.ports()[:] # Start with 3 handles and 2 ports assert len(handles) == 3 assert len(old_ports) == 2 # Split 1st segment again: 1st port should be deleted, but 2nd one should # remain untouched segment.split_segment(0) assert old_ports[0] not in line.ports() assert old_ports[1] == line.ports()[2] @pytest.mark.asyncio async def test_constraints_after_split(canvas, connections, line, view): """Test if constraints are recreated after line split.""" # Connect line2 to self.line line2 = Line(connections) canvas.add(line2) head = line2.handles()[0] HandleMove(line2, head, view).connect((25, 25)) cinfo = canvas.connections.get_connection(head) assert line == cinfo.connected orig_constraint = cinfo.constraint Segment(line, canvas).split_segment(0) assert len(line.handles()) == 3 h1, h2, h3 = line.handles() cinfo = canvas.connections.get_connection(head) assert cinfo.constraint != orig_constraint def test_orthogonal_line_split(canvas, line): """Test orthogonal line splitting.""" # Start with no orthogonal constraints assert len(line._orthogonal_constraints) == 0 segment = Segment(line, canvas) segment.split_segment(0) line.orthogonal = True # Check orthogonal constraints assert 2 == len(line._orthogonal_constraints) assert 3 == len(line.handles()) Segment(line, canvas).split_segment(0) # 3 handles and 2 ports are expected # 2 constraints keep the self.line orthogonal assert 3 == len(line._orthogonal_constraints) assert 4 == len(line.handles()) assert 3 == len(line.ports()) def test_params_error_exc(canvas, connections): """Test parameter error exceptions.""" line = Line(connections) segment = Segment(line, canvas) # There is only 1 segment with pytest.raises(ValueError): segment.split_segment(-1) line = Line(connections) segment = Segment(line, canvas) with pytest.raises(ValueError): segment.split_segment(1) line = Line(connections) # Can't split into one or less segment :) segment = Segment(line, canvas) with pytest.raises(ValueError): segment.split_segment(0, 1) # Test Line Merging @pytest.mark.asyncio async def test_merge_first_single(line, canvas, view): """Test single line merging starting from 1st segment.""" line.handles()[1].pos = (20, 0) segment = Segment(line, canvas) segment.split_segment(0) # We start with 3 handles and 2 ports, after merging 2 handles and 1 port # are expected assert len(line.handles()) == 3 assert len(line.ports()) == 2 old_ports = line.ports()[:] segment = Segment(line, canvas) handles, ports = segment.merge_segment(0) # Deleted handles and ports assert 1 == len(handles) assert 2 == len(ports) # Handles and ports left after segment merging assert 2 == len(line.handles()) assert 1 == len(line.ports()) assert handles[0] not in line.handles() assert ports[0] not in line.ports() assert ports[1] not in line.ports() # Old ports are completely removed as they are replaced by new one port assert old_ports == ports # Finally, created port shall span between first and last handle port = line.ports()[0] assert (0, 0) == port.start.pos assert (20, 0) == port.end.pos @pytest.mark.asyncio async def test_constraints_after_merge(canvas, connections, line, view): """Test if constraints are recreated after line merge.""" line2 = Line(connections) canvas.add(line2) head = line2.handles()[0] canvas.request_update(line) canvas.request_update(line2) await view.update() HandleMove(line2, head, view).connect((25, 25)) cinfo = connections.get_connection(head) assert line == cinfo.connected segment = Segment(line, canvas) segment.split_segment(0) assert len(line.handles()) == 3 orig_constraint = cinfo.constraint segment.merge_segment(0) assert len(line.handles()) == 2 h1, h2 = line.handles() # Connection shall be reconstrained between 1st and 2nd handle cinfo = canvas.connections.get_connection(head) assert orig_constraint != cinfo.constraint def test_merge_multiple(canvas, line): """Test multiple line merge.""" line.handles()[1].pos = (20, 16) segment = Segment(line, canvas) segment.split_segment(0, count=3) # Start with 4 handles and 3 ports, merge 3 segments assert len(line.handles()) == 4 assert len(line.ports()) == 3 handles, ports = segment.merge_segment(0, count=3) assert 2 == len(handles) assert 3 == len(ports) assert 2 == len(line.handles()) assert 1 == len(line.ports()) assert not set(handles).intersection(set(line.handles())) assert not set(ports).intersection(set(line.ports())) # Finally, the created port shall span between first and last handle port = line.ports()[0] assert (0, 0) == port.start.pos assert (20, 16) == port.end.pos def test_orthogonal_line_merge(canvas, connections, line): """Test orthogonal line merging.""" assert 0 == len(connections.solver._constraints) line.handles()[-1].pos = 100, 100 segment = Segment(line, canvas) # Prepare the self.line for merging segment.split_segment(0) segment.split_segment(0) line.orthogonal = True assert 3 == len(connections.solver._constraints) assert 4 == len(line.handles()) assert 3 == len(line.ports()) # Test the merging segment.merge_segment(0) assert 2 == len(connections.solver._constraints) assert 3 == len(line.handles()) assert 2 == len(line.ports()) @pytest.mark.parametrize("num_segments", [-1, 2, (0, 1), 0, 1, (0, 3)]) def test_params_errors(canvas, connections, num_segments): """Test parameter error exceptions.""" line = Line(connections) canvas.add(line) segment = Segment(line, canvas) with pytest.raises(ValueError): if isinstance(num_segments, tuple): segment.split_segment(0) segment.merge_segment(num_segments[0], num_segments[1]) elif num_segments == 0: assert 2 == len(line.handles()) segment.merge_segment(0) else: segment.split_segment(0) segment.merge_segment(num_segments) def test_merge_orthogonal_line(canvas, connections): line = Line(connections) canvas.add(line) Segment(line, canvas).split_segment(0) line.orthogonal = True line.handles()[2].pos = (100, 0) line.handles()[1].pos = (100, 0) with pytest.raises(ValueError): Segment(line, canvas).merge_segment(1) def callback(_item, _handle, connected, port): connected.ports().index(port) def test_update_callback_on_reconnect(canvas, connections): line = Line(connections) attached = Line(connections) segment = Segment(line, canvas) sink = ItemConnectionSink(line) connector = ItemConnector(attached, attached.handles()[0], connections) segment.split_segment(0) connector.glue(sink) connector.connect_handle(sink, callback) segment.merge_segment(0) connector.disconnect() python-gaphas-5.1.2/tests/test_solver.py000066400000000000000000000064151512665300000203720ustar00rootroot00000000000000"""Test constraint solver.""" from gaphas.constraint import EqualsConstraint, LessThanConstraint from gaphas.solver import REQUIRED, MultiConstraint, Solver, Variable from gaphas.solver.constraint import Constraint, ContainsConstraints def test_solver_implements_constraint_protocol(): solver = Solver() assert isinstance(solver, Constraint) assert isinstance(solver, ContainsConstraints) def test_weakest_list_order(): solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c_eq = EqualsConstraint(a, b) solver.add_constraint(c_eq) a.value = 4 b.value = 5 assert c_eq.weakest() == b a.value = 6 assert c_eq.weakest() == b b.value = 6 assert c_eq.weakest() == a def test_minimal_size_constraint(): solver = Solver() v1 = Variable(0) v2 = Variable(10) v3 = Variable(10) c1 = EqualsConstraint(a=v2, b=v3) c2 = LessThanConstraint(smaller=v1, bigger=v3, delta=10) solver.add_constraint(c1) solver.add_constraint(c2) # Check everything is ok on start solver.solve() assert 0 == v1 assert 10 == v2 assert 10 == v3 # Change v1 to 2, after solve it should be 0 again due to LT constraint v1.value = 2 solver.solve() assert 0 == v1 assert 10 == v2 assert 10 == v3 # Change v3 to 20, after solve v2 will follow thanks to EQ constraint v3.value = 20 solver.solve() assert 0 == v1 assert 20 == v2 assert 20 == v3 # Change v3 to 0, after solve it should be 10 due to LT.delta = 10, v2 # should also be 10 due to EQ constraint v3.value = 0 solver.solve() assert 0 == v1 assert 10 == v2 assert 10 == v3 def test_constraints_can_not_be_resolved(): solver = Solver() a = Variable() b = Variable() c = Variable(40, strength=REQUIRED) d = Variable(30, strength=REQUIRED) solver.add_constraint(EqualsConstraint(a, b)) solver.add_constraint(EqualsConstraint(a, c)) solver.add_constraint(EqualsConstraint(b, d)) solver.solve() assert a.value == 40.0 assert b.value == 30.0 def test_notify_for_nested_constraint(): events = [] solver = Solver() a = Variable() b = Variable() nested = EqualsConstraint(a, b) multi = MultiConstraint(nested) solver.add_constraint(multi) solver.solve() def handler(constraint): events.append(constraint) solver.add_handler(handler) a.value = 10 solver.solve() assert multi in events assert nested not in events def test_notify_for_double_nested_constraint(): events = [] solver = Solver() a = Variable() b = Variable() nested = EqualsConstraint(a, b) multi = MultiConstraint(nested) outer = MultiConstraint(multi) solver.add_constraint(outer) solver.solve() def handler(constraint): events.append(constraint) solver.add_handler(handler) a.value = 10 solver.solve() assert outer in events def test_needs_solving(): solver = Solver() a = Variable() b = Variable() eq = EqualsConstraint(a, b) solver.add_constraint(eq) assert solver.needs_solving solver.solve() assert not solver.needs_solving a.value = 3 assert solver.needs_solving solver.solve() assert not solver.needs_solving python-gaphas-5.1.2/tests/test_solver_constraint.py000066400000000000000000000024221512665300000226300ustar00rootroot00000000000000import pytest from gaphas.solver import BaseConstraint, MultiConstraint, Variable from gaphas.solver.constraint import Constraint, ContainsConstraints def test_base_constraint_implements_constraint_protocol(): c = BaseConstraint(Variable()) assert isinstance(c, Constraint) def test_multi_constraint_implements_constraint_protocol(): c = MultiConstraint() assert isinstance(c, Constraint) assert isinstance(c, ContainsConstraints) def test_constraint_propagates_variable_changed(handler): v = Variable() c = BaseConstraint(v) c.add_handler(handler) v.value = 3 assert handler.events == [(c,)] def test_multi_constraint(handler): v = Variable() c = BaseConstraint(v) m = MultiConstraint(c) m.add_handler(handler) v.value = 3 assert handler.events == [(c,)] def test_default_constraint_can_not_solve(): v = Variable() c = BaseConstraint(v) with pytest.raises(NotImplementedError): c.solve() def test_constraint_handlers_are_set_just_in_time(): v = Variable() c = BaseConstraint(v) def handler(c): pass assert not v._handlers c.add_handler(handler) assert v._handlers assert handler in c._handlers c.remove_handler(handler) assert not v._handlers python-gaphas-5.1.2/tests/test_solver_variable.py000066400000000000000000000043661512665300000222420ustar00rootroot00000000000000from gaphas.solver import STRONG, Variable, variable def test_variable_decorator(): class A: x = variable(varname="sx", strength=STRONG) a = A() assert isinstance(A.x, variable) assert a.x == 0 assert a.x.strength == STRONG def test_variable_decorator_value(): class A: x = variable(varname="sx", strength=STRONG) a = A() a.x = 3 assert a.x == 3 def test_variable_decorator_set_variable(): class A: x = variable(varname="sx", strength=STRONG) a = A() v = Variable(4) a.x = v assert a.x == 4 assert a.x is not v def test_equality(): v = Variable(3) w = Variable(3) o = Variable(2) assert v == 3 assert 3 == v assert v == w assert not v == o assert v != 2 assert 2 != v assert not 3 != v assert v != o def test_add_to_variable(): v = Variable(3) assert v + 1 == 4 assert v - 1 == 2 assert 1 + v == 4 assert 4 - v == 1 def test_add_to_variable_with_variable(): v = Variable(3) o = Variable(1) assert v + o == 4 assert v - o == 2 def test_mutiplication(): v = Variable(3) assert v * 2 == 6 assert v / 2 == 1.5 assert v // 2 == 1 assert 2 * v == 6 assert 4.5 / v == 1.5 assert 4 // v == 1 def test_mutiplication_with_variable(): v = Variable(3) o = Variable(2) assert v * o == 6 assert v / o == 1.5 assert v // o == 1 def test_comparison(): v = Variable(3) assert v > 2 assert v < 4 assert v >= 2 assert v >= 3 assert v <= 4 assert v <= 3 assert not v > 3 assert not v < 3 assert not v <= 2 assert not v >= 4 def test_inverse_comparison(): v = Variable(3) assert 4 > v assert 2 < v assert 4 >= v assert 3 >= v assert 2 <= v assert 3 <= v assert not 3 > v assert not 3 < v assert not 4 <= v assert not 2 >= v def test_power(): v = Variable(3) o = Variable(2) assert v**2 == 9 assert 2**v == 8 assert v**o == 9 def test_modulo(): v = Variable(3) o = Variable(2) assert v % 2 == 1 assert 4 % v == 1 assert v % o == 1 assert divmod(v, 2) == (1, 1) assert divmod(4, v) == (1, 1) assert divmod(v, o) == (1, 1) python-gaphas-5.1.2/tests/test_tool_hover.py000066400000000000000000000011001512665300000212220ustar00rootroot00000000000000import pytest from gaphas.tool.hover import hover_tool, on_motion from gaphas.tool.itemtool import default_find_item_and_handle_at_point @pytest.mark.asyncio async def test_hovers_item(view, box): tool = hover_tool() view.add_controller(tool) on_motion(tool, 5, 5, default_find_item_and_handle_at_point) assert view.selection.hovered_item is box def test_handles_event(view, box): tool = hover_tool() view.add_controller(tool) on_motion(tool, 100, 100, default_find_item_and_handle_at_point) assert view.selection.hovered_item is None python-gaphas-5.1.2/tests/test_tool_item.py000066400000000000000000000073411512665300000210520ustar00rootroot00000000000000import math import pytest from gi.repository import Gtk from gaphas.handlemove import order_items from gaphas.tool.itemtool import ( DragState, handle_at_point, item_at_point, item_tool, on_drag_begin, default_find_item_and_handle_at_point, ) from tests.conftest import Box class MockEvent: def __init__(self, modifiers=0): self._modifiers = modifiers def get_state(self): return True, self._modifiers class MockGesture: def __init__(self, view, event=None): if event is None: event = MockEvent() self._view = view self._event = event def get_widget(self): return self._view def get_last_event(self, _sequence): return self._event def get_current_event_state(self): return self._event.get_state()[1] def set_state(self, _state): pass def test_should_create_a_gesture(): tool = item_tool() assert isinstance(tool, Gtk.Gesture) @pytest.mark.asyncio async def test_select_item_on_click(view, box, window): tool = MockGesture(view) drag_state = DragState() selection = view.selection on_drag_begin(tool, 0, 0, drag_state, default_find_item_and_handle_at_point) assert box is selection.focused_item assert box in selection.selected_items @pytest.mark.asyncio async def test_start_move_handle_on_click(view, box, window): tool = MockGesture(view) drag_state = DragState() on_drag_begin(tool, 0, 0, drag_state, default_find_item_and_handle_at_point) assert drag_state.moving assert next(iter(drag_state.moving)).item is box assert next(iter(drag_state.moving)).handle is box.handles()[0] @pytest.mark.asyncio async def test_get_item_at_point(view, box): """Hover tool only reacts on motion-notify events.""" box.width = 50 box.height = 50 view.request_update((box,)) assert next(item_at_point(view, (10, 10)), None) is box assert next(item_at_point(view, (60, 10)), None) is None @pytest.mark.asyncio async def test_get_unselected_item_at_point(view, box): box.width = 50 box.height = 50 view.selection.select_items(box) assert next(item_at_point(view, (10, 10)), None) is box assert next(item_at_point(view, (10, 10), exclude=(box,)), None) is None @pytest.mark.asyncio async def test_get_item_at_point_overlayed_by_bigger_item(view, canvas, connections): """Hover tool only reacts on motion-notify events.""" below = Box(connections) canvas.add(below) above = Box(connections) canvas.add(above) below.width = 20 below.height = 20 above.matrix.translate(-40, -40) above.width = 100 above.height = 100 view.request_update((below, above)) await view.update() assert next(item_at_point(view, (10, 10)), None) is below assert next(item_at_point(view, (-1, -1)), None) is above def test_order_by_distance(): m = [(0, ""), (10, ""), (-1, ""), (-3, ""), (5, ""), (4, "")] assert [e[0] for e in order_items(m)] == [0, -1, -3, 4, 5, 10] @pytest.mark.asyncio async def test_get_handle_at_point(view, canvas, connections): box = Box(connections) box.min_width = 20 box.min_height = 30 box.matrix.translate(20, 20) box.matrix.rotate(math.pi / 1.5) canvas.add(box) await view.update() i, h = handle_at_point(view, (20, 20)) assert i is box assert h is box.handles()[0] @pytest.mark.asyncio async def test_get_handle_at_point_at_pi_div_2(view, canvas, connections): box = Box(connections) box.min_width = 20 box.min_height = 30 box.matrix.translate(20, 20) box.matrix.rotate(math.pi / 2) canvas.add(box) await view.update() i, h = handle_at_point(view, (20, 20)) assert i is box assert h is box.handles()[0] python-gaphas-5.1.2/tests/test_tool_placement.py000066400000000000000000000012331512665300000220560ustar00rootroot00000000000000import pytest from gi.repository import Gtk from gaphas.item import Element from gaphas.tool.placement import PlacementState, on_drag_begin, placement_tool @pytest.fixture def tool_factory(connections): def tool_factory(): return Element(connections) return tool_factory def test_can_create_placement_tool(tool_factory): tool = placement_tool(tool_factory, 2) assert isinstance(tool, Gtk.Gesture) def test_create_new_element(view, tool_factory, window): state = PlacementState(tool_factory, 2) tool = placement_tool(tool_factory, 2) view.add_controller(tool) on_drag_begin(tool, 0, 0, state) assert state.moving python-gaphas-5.1.2/tests/test_tool_scroll.py000066400000000000000000000012111512665300000214000ustar00rootroot00000000000000from gi.repository import Gtk from gaphas.tool.scroll import on_scroll, scroll_tool def test_scroll_tool_returns_a_controller(view): tool = scroll_tool(view) assert isinstance(tool, Gtk.EventController) def test_offset_changes(view, scrolled_window): tool = scroll_tool(view) view.add_controller(tool) view._scrolling.update_adjustments(100, 100, (0, 0, 100, 100)) assert view.hadjustment assert view.vadjustment assert view._scrolling._hadjustment_handler_id assert view._scrolling._hadjustment_handler_id on_scroll(tool, 10, 10, 1) assert view.matrix[4] == -10 assert view.matrix[5] == -10 python-gaphas-5.1.2/tests/test_tool_zoom.py000066400000000000000000000051401512665300000210730ustar00rootroot00000000000000import pytest from gi.repository import Gtk from gaphas.tool.zoom import Zoom, on_begin, on_scale_changed, zoom_tool @pytest.fixture def zoom_data(view): zoom_data = Zoom() zoom_data.x0 = 0 zoom_data.y0 = 0 zoom_data.sx = 1 zoom_data.sy = 1 zoom_data.begin(view.matrix, 0, 0) return zoom_data def test_can_create_zoom_tool(view): tool = zoom_tool() view.add_controller(tool) assert isinstance(tool, Gtk.Gesture) def test_begin_state(zoom_data, view): class MockGesture: def get_widget(self): return view def get_point(self, sequence): return True, 1, 2 gesture = MockGesture() sequence = None on_begin(gesture, sequence, zoom_data) assert zoom_data.x0 == 1 assert zoom_data.y0 == 2 assert zoom_data.sx == 1 assert zoom_data.sy == 1 @pytest.mark.asyncio async def test_scaling(zoom_data, view): tool = zoom_tool() view.add_controller(tool) on_scale_changed(tool, 1.2, zoom_data) assert view.matrix[0] == pytest.approx(1.2) assert view.matrix[3] == pytest.approx(1.2) @pytest.mark.asyncio async def test_multiple_scaling_events(zoom_data, view): tool = zoom_tool() view.add_controller(tool) on_scale_changed(tool, 1.1, zoom_data) on_scale_changed(tool, 1.2, zoom_data) assert view.matrix[0] == pytest.approx(1.2) assert view.matrix[3] == pytest.approx(1.2) @pytest.mark.asyncio async def test_scaling_with_unequal_scaling_factor(zoom_data, view): tool = zoom_tool() view.add_controller(tool) zoom_data.sx = 2 on_scale_changed(tool, 1.2, zoom_data) assert view.matrix[0] == pytest.approx(2.4) assert view.matrix[3] == pytest.approx(1.2) @pytest.mark.asyncio async def test_zoom_should_center_around_mouse_cursor(zoom_data, view): tool = zoom_tool() view.add_controller(tool) zoom_data.x0 = 100 zoom_data.y0 = 50 on_scale_changed(tool, 1.2, zoom_data) assert view.matrix[4] == pytest.approx(-20.0) assert view.matrix[5] == pytest.approx(-10.0) @pytest.mark.asyncio async def test_zoom_out_should_be_limited_to_20_percent(zoom_data, view): tool = zoom_tool() view.add_controller(tool) on_scale_changed(tool, 0.0, zoom_data) assert view.matrix[0] == pytest.approx(0.2) assert view.matrix[3] == pytest.approx(0.2) @pytest.mark.asyncio async def test_zoom_in_should_be_limited_to_20_times(zoom_data, view): tool = zoom_tool() view.add_controller(tool) on_scale_changed(tool, 100.0, zoom_data) assert view.matrix[0] == pytest.approx(20) assert view.matrix[3] == pytest.approx(20) python-gaphas-5.1.2/tests/test_tree.py000066400000000000000000000101661512665300000200150ustar00rootroot00000000000000import pytest from gaphas.tree import Tree @pytest.fixture() def tree_fixture(): node = ["n0", "n1", "n2", "n3", "n4", "n5", "n6", "n7"] return Tree(), node def test_add(tree_fixture): """Test creating node trees.""" tree = tree_fixture[0] n = tree_fixture[1] tree.add(n[1]) assert len(tree._nodes) == 1 assert len(tree._children) == 2 assert len(tree._children[None]) == 1 assert len(tree._children[n[1]]) == 0 tree.add(n[2]) tree.add(n[3], parent=n[1]) assert len(tree._nodes) == 3 assert len(tree._children) == 4 assert len(tree._children[None]) == 2 assert len(tree._children[n[1]]) == 1 assert len(tree._children[n[2]]) == 0 assert len(tree._children[n[2]]) == 0 assert tree._nodes == [n[1], n[3], n[2]] tree.add(n[4], parent=n[3]) assert tree._nodes == [n[1], n[3], n[4], n[2]] tree.add(n[5], parent=n[3]) assert tree._nodes == [n[1], n[3], n[4], n[5], n[2]] tree.add(n[6], parent=n[2]) assert tree._nodes == [n[1], n[3], n[4], n[5], n[2], n[6]] tree.add(n[7], parent=n[1]) assert len(tree._children) == 8 assert tree._nodes == [n[1], n[3], n[4], n[5], n[7], n[2], n[6]] assert tree.get_parent(n[7]) is n[1] assert tree.get_parent(n[6]) is n[2] assert tree.get_parent(n[5]) is n[3] assert tree.get_parent(n[4]) is n[3] assert tree.get_parent(n[3]) is n[1] assert tree.get_parent(n[2]) is None assert tree.get_parent(n[1]) is None def test_add_on_index(tree_fixture): tree = tree_fixture[0] n = tree_fixture[1] tree.add(n[1]) tree.add(n[2]) tree.add(n[3], index=1) assert tree.get_children(None) == [n[1], n[3], n[2]], tree.get_children(None) assert tree.nodes == [n[1], n[3], n[2]], tree.nodes tree.add(n[4], parent=n[3]) tree.add(n[5], parent=n[3], index=0) assert tree.get_children(None) == [n[1], n[3], n[2]], tree.get_children(None) assert tree.nodes == [n[1], n[3], n[5], n[4], n[2]], tree.nodes assert tree.get_children(n[3]) == [n[5], n[4]], tree.get_children(n[3]) def test_remove(tree_fixture): """Test removal of nodes.""" tree = tree_fixture[0] n = tree_fixture[1] tree.add(n[1]) tree.add(n[2]) tree.add(n[3], parent=n[1]) tree.add(n[4], parent=n[3]) tree.add(n[5], parent=n[4]) assert tree._nodes == [n[1], n[3], n[4], n[5], n[2]] all_ch = list(tree.get_all_children(n[1])) assert all_ch == [n[3], n[4], n[5]], all_ch tree.remove(n[4]) assert tree._nodes == [n[1], n[3], n[2]] tree.remove(n[1]) assert len(tree._children) == 2 assert tree._children[None] == [n[2]] assert tree._children[n[2]] == [] assert tree._nodes == [n[2]] def test_siblings(tree_fixture): tree = tree_fixture[0] n = tree_fixture[1] tree.add(n[1]) tree.add(n[2]) tree.add(n[3]) assert tree.get_next_sibling(n[1]) is n[2] assert tree.get_next_sibling(n[2]) is n[3] try: tree.get_next_sibling(n[3]) except IndexError: pass # Okay else: raise AssertionError( f"Index should be out of range, not {tree.get_next_sibling(n[3])}" ) assert tree.get_previous_sibling(n[3]) is n[2] assert tree.get_previous_sibling(n[2]) is n[1] try: tree.get_previous_sibling(n[1]) except IndexError: pass # Okay else: raise AssertionError( f"Index should be out of range, not {tree.get_previous_sibling(n[1])}" ) def test_reparent(tree_fixture): tree = tree_fixture[0] n = tree_fixture[1] tree.add(n[1]) tree.add(n[2]) tree.add(n[3]) tree.add(n[4], parent=n[2]) tree.add(n[5], parent=n[4]) assert tree.nodes == [n[1], n[2], n[4], n[5], n[3]], tree.nodes tree.move(n[4], parent=n[1], index=0) assert tree.nodes == [n[1], n[4], n[5], n[2], n[3]], tree.nodes assert tree.get_children(n[2]) == [], tree.get_children(n[2]) assert tree.get_children(n[1]) == [n[4]], tree.get_children(n[1]) assert tree.get_children(n[4]) == [n[5]], tree.get_children(n[4]) tree.move(n[4], parent=None, index=0) assert tree.nodes == [n[4], n[5], n[1], n[2], n[3]], tree.nodes python-gaphas-5.1.2/tests/test_undo.py000066400000000000000000000000001512665300000200050ustar00rootroot00000000000000python-gaphas-5.1.2/tests/test_view.py000066400000000000000000000062371512665300000200340ustar00rootroot00000000000000"""Test cases for the View class.""" import pytest from gi.repository import Gtk from gaphas.canvas import Canvas from gaphas.selection import Selection from gaphas.view import GtkView class CustomSelection(Selection): pass def test_custom_selection(): custom_selection = CustomSelection() view = GtkView(selection=custom_selection) assert view.selection is custom_selection def test_custom_selection_setter(): custom_selection = CustomSelection() view = GtkView() view.selection = custom_selection assert view.selection is custom_selection @pytest.mark.asyncio async def test_item_removal(view, canvas, box): await view.update() assert len(list(canvas.get_all_items())) == len(view._qtree) view.selection.focused_item = box canvas.remove(box) await view.update() assert not list(canvas.get_all_items()) assert len(view._qtree) == 0 @pytest.mark.asyncio async def test_view_registration(): canvas = Canvas() # GTK view does register for updates though view = GtkView(canvas) assert len(canvas._registered_views) == 1 window = Gtk.Window.new() window.set_child(view) view.model = None assert len(canvas._registered_views) == 0 view.model = canvas assert len(canvas._registered_views) == 1 @pytest.mark.asyncio async def test_view_registration_2(view, canvas, window): """Test view registration and destroy when view is destroyed.""" window.present() assert len(canvas._registered_views) == 1 assert view in canvas._registered_views window.destroy() assert len(canvas._registered_views) == 0 @pytest.mark.asyncio async def test_scroll_adjustments_signal(view, scrolled_window): assert view.hadjustment assert view.vadjustment assert view.hadjustment.get_value() == 0.0 assert view.hadjustment.get_lower() == 0.0 assert view.hadjustment.get_upper() == 0.0 assert view.hadjustment.get_step_increment() == 0.0 assert view.hadjustment.get_page_increment() == 0.0 assert view.hadjustment.get_page_size() == 0.0 assert view.vadjustment.get_value() == 0.0 assert view.vadjustment.get_lower() == 0.0 assert view.vadjustment.get_upper() == 0.0 assert view.vadjustment.get_step_increment() == 0.0 assert view.vadjustment.get_page_increment() == 0.0 assert view.vadjustment.get_page_size() == 0.0 @pytest.mark.asyncio async def test_scroll_adjustments(view, scrolled_window): assert scrolled_window.get_hadjustment() is view.hadjustment assert scrolled_window.get_vadjustment() is view.vadjustment @pytest.mark.asyncio async def test_will_not_remove_lone_controller(view): ctrl = Gtk.EventControllerMotion.new() removed = view.remove_controller(ctrl) assert not removed def test_can_add_and_remove_controller(view): ctrl = Gtk.EventControllerMotion.new() view.add_controller(ctrl) removed = view.remove_controller(ctrl) assert removed assert ctrl not in view.observe_controllers() def test_can_remove_all_controllers(view): ctrl = Gtk.EventControllerMotion.new() view.add_controller(ctrl) view.remove_all_controllers() assert ctrl not in view.observe_controllers()