pax_global_header00006660000000000000000000000064151163271270014517gustar00rootroot0000000000000052 comment=c682dc1495552febb3cfbac5cc7144be4a927066 spacetelescope-synphot_refactor-c682dc1/000077500000000000000000000000001511632712700205215ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/.bandit.yaml000066400000000000000000000000401511632712700227160ustar00rootroot00000000000000exclude_dirs: - synphot/tests spacetelescope-synphot_refactor-c682dc1/.github/000077500000000000000000000000001511632712700220615ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001511632712700242445ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000037011511632712700267370ustar00rootroot00000000000000--- name: Bug report about: Create a report describing unexpected or incorrect behavior in synphot. labels: 'bug' --- ### Description ### Expected behavior ### Actual behavior ### Steps to Reproduce 1. [First Step] 2. [Second Step] 3. [and so on...] ```python # Put your Python code snippet here. ``` ### System Details spacetelescope-synphot_refactor-c682dc1/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000016411511632712700277730ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea to improve synphot label: 'Feature Request' --- ### Description ### Additional context spacetelescope-synphot_refactor-c682dc1/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000025471511632712700264450ustar00rootroot00000000000000--- name: Question about: Ask a question about synphot that is neither a bug report nor a feature request. labels: 'question' --- ### Description ### System Details (optional) spacetelescope-synphot_refactor-c682dc1/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000022551511632712700256660ustar00rootroot00000000000000 ### Description This pull request is to address ... Fixes # spacetelescope-synphot_refactor-c682dc1/.github/dependabot.yml000066400000000000000000000010241511632712700247060ustar00rootroot00000000000000version: 2 updates: # Maintain dependencies for GitHub Actions - package-ecosystem: "github-actions" directory: "/" target-branch: "master" schedule: interval: "monthly" open-pull-requests-limit: 10 groups: actions: patterns: - "*" # Maintain dependencies for pip - package-ecosystem: "pip" directory: "/" target-branch: "master" schedule: interval: "monthly" open-pull-requests-limit: 10 groups: actions: patterns: - "*" spacetelescope-synphot_refactor-c682dc1/.github/labeler.yml000066400000000000000000000027741511632712700242240ustar00rootroot00000000000000docs: - changed-files: - any-glob-to-any-file: - .github/**/*.md - .readthedocs.yaml - docs/* - docs/_static/* - docs/_templates/* - licenses/* - '*.md' - all-globs-to-any-file: - '*.rst' - '!CHANGES.rst' testing: - changed-files: - any-glob-to-any-file: - .bandit.yaml - .github/**/*.yml - conftest.py - tox.ini - synphot/tests/**/* installation: - changed-files: - any-glob-to-any-file: - MANIFEST.in - pyproject.toml - setup.* Upstream changes: - changed-files: - any-glob-to-any-file: - synphot/compat.py binning: - changed-files: - any-glob-to-any-file: - synphot/binning.py C-extension: - changed-files: - any-glob-to-any-file: - synphot/src/* - synphot/include/* config: - changed-files: - any-glob-to-any-file: - synphot/config.py - docs/synphot/config.rst models: - changed-files: - any-glob-to-any-file: - synphot/blackbody.py - synphot/models.py observation: - changed-files: - any-glob-to-any-file: - synphot/observation.py reddening: - changed-files: - any-glob-to-any-file: - synphot/reddening.py specio: - changed-files: - any-glob-to-any-file: - synphot/specio.py spectrum: - changed-files: - any-glob-to-any-file: - synphot/spectrum.py thermal: - changed-files: - any-glob-to-any-file: - synphot/thermal.py units: - changed-files: - any-glob-to-any-file: - synphot/units.py utils: - changed-files: - any-glob-to-any-file: - synphot/utils.py spacetelescope-synphot_refactor-c682dc1/.github/workflows/000077500000000000000000000000001511632712700241165ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/.github/workflows/check_milestone.yml000066400000000000000000000022401511632712700277730ustar00rootroot00000000000000name: Check PR milestone on: # So it cannot be skipped. pull_request_target: types: [opened, synchronize, milestoned, demilestoned] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: # https://stackoverflow.com/questions/69434370/how-can-i-get-the-latest-pr-data-specifically-milestones-when-running-yaml-jobs milestone_checker: runs-on: ubuntu-latest steps: - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 if: github.repository == 'spacetelescope/synphot_refactor' with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", { owner: context.repo.owner, repo: context.repo.repo, pr: context.payload.pull_request.number }); if (data.milestone) { core.info(`This pull request has a milestone set: ${data.milestone.title}`); } else { core.setFailed(`A maintainer needs to set the milestone for this pull request.`); } spacetelescope-synphot_refactor-c682dc1/.github/workflows/ci_workflows.yml000066400000000000000000000063631511632712700273610ustar00rootroot00000000000000name: CI on: push: pull_request: schedule: # Weekly Monday 6AM build # * is a special character in YAML so you have to quote this string - cron: '0 6 * * 1' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: initial_check: name: Mandatory checks before CI runs-on: ubuntu-latest steps: - name: Check base branch uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 if: github.event_name == 'pull_request' with: script: | const allowed_basebranch = 'master'; const pr = context.payload.pull_request; if (pr.base.ref !== allowed_basebranch) { core.setFailed(`PR opened against ${pr.base.ref}, not ${allowed_basebranch}`); } else { core.info(`PR opened correctly against ${allowed_basebranch}`); } # The rest only run if above are done tests: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} needs: initial_check strategy: fail-fast: true matrix: include: - name: Code style checks os: ubuntu-latest python: 3.x toxenv: codestyle - name: PEP 517 build os: ubuntu-latest python: 3.x toxenv: twine - name: Security audit os: ubuntu-latest python: 3.x toxenv: bandit - name: Link check os: ubuntu-latest python: 3.x toxenv: linkcheck - name: Test without optional deps os: ubuntu-latest python: '3.13' toxenv: py313-test - name: Coverage test with remote data os: ubuntu-latest python: '3.11' toxenv: py311-test-alldeps-cov toxposargs: --remote-data - name: Test with dev dependencies os: ubuntu-latest python: '3.14' toxenv: py314-test-devdeps - name: Test with old dependencies os: ubuntu-22.04 python: '3.10' toxenv: py310-test-oldestdeps - name: Test in OSX os: macos-latest python: '3.12' toxenv: py312-test-alldeps # NOTE: If TRDS cannot take the hit, disable --remote-data - name: Test in Windows with remote data os: windows-latest python: '3.11' toxenv: py311-test-alldeps toxposargs: --remote-data steps: - name: Checkout code uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python }} - name: Install Python dependencies run: | python -m pip install --upgrade pip tox - name: Run tests run: tox -e ${{ matrix.toxenv }} -- ${{ matrix.toxposargs }} - name: Upload coverage to codecov if: ${{ contains(matrix.toxenv,'-cov') }} uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: file: ./coverage.xml spacetelescope-synphot_refactor-c682dc1/.github/workflows/codeql-analysis.yml000066400000000000000000000061101511632712700277270ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ master ] pull_request: # The branches below must be a subset of the branches above branches: [ master ] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: actions: read contents: read security-events: write statuses: write jobs: analyze: name: Analyze runs-on: ubuntu-latest strategy: fail-fast: true matrix: language: [ 'cpp', 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - name: Checkout repository uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@5618c9fc1e675841ca52c1c6b1304f5255a905a0 # codeql-bundle-v2.19.0 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild if: matrix.language != 'cpp' uses: github/codeql-action/autobuild@5618c9fc1e675841ca52c1c6b1304f5255a905a0 # codeql-bundle-v2.19.0 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language - name: Set up Python uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 if: matrix.language == 'cpp' with: python-version: '3.12' - name: Manual build if: matrix.language == 'cpp' run: | pip install -U pip setuptools_scm wheel pip install numpy astropy python setup.py build_ext --inplace - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@5618c9fc1e675841ca52c1c6b1304f5255a905a0 # codeql-bundle-v2.19.0 spacetelescope-synphot_refactor-c682dc1/.github/workflows/open_actions.yml000066400000000000000000000035461511632712700273320ustar00rootroot00000000000000name: When Opened on: issues: types: - opened pull_request_target: types: - opened jobs: triage: runs-on: ubuntu-latest steps: - name: Label PR uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1 if: github.event_name == 'pull_request_target' with: repo-token: "${{ secrets.GITHUB_TOKEN }}" - name: 'Reviewer Checklist' uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 if: github.event_name == 'pull_request_target' with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | await github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: `Thank you for your contribution! 🌌 This checklist is meant to remind the package maintainers who will review this pull request of some common things to look for. - [ ] Do the proposed changes actually accomplish desired goals? - [ ] Do the proposed changes follow the [STScI coding guidelines](https://github.com/spacetelescope/style-guides/blob/master/guides/python.md)? - [ ] Are tests added/updated as required? If so, do they follow the [STScI testing guidelines](https://github.com/spacetelescope/style-guides/blob/master/guides/python-testing.md)? - [ ] Are docs added/updated as required? - [ ] Is rebase and/or squash necessary? If so, please provide the author with appropriate instructions. - [ ] Did the CI pass? If no, are the failures related? - [ ] Is a change log needed?` }) #- name: Special comment # uses: pllim/action-special_pr_comment@5126c189c02418a55448480b28efd1a00af48d7b # 0.2 # with: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} spacetelescope-synphot_refactor-c682dc1/.github/workflows/predeps_workflow.yml000066400000000000000000000024141511632712700302360ustar00rootroot00000000000000name: rc-testing on: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read jobs: tests: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: include: - name: RC test on Linux with remote data os: ubuntu-latest python: '3.12' toxenv: py312-test-alldeps-predeps toxposargs: --remote-data - name: RC test on OSX os: macos-latest python: '3.11' toxenv: py311-test-alldeps-predeps - name: RC test on Windows os: windows-latest python: '3.13' toxenv: py313-test-alldeps-predeps steps: - name: Checkout code uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python }} - name: Install Python dependencies run: | python -m pip install --upgrade pip tox - name: Run tests run: tox -e ${{ matrix.toxenv }} -- ${{ matrix.toxposargs }} spacetelescope-synphot_refactor-c682dc1/.github/workflows/publish-to-pypi.yml000066400000000000000000000116021511632712700277060ustar00rootroot00000000000000name: Release on: schedule: # run every day at 5am UTC - cron: '0 5 * * *' workflow_dispatch: release: types: [released] pull_request: # We also want this workflow triggered if the 'Build wheels' # label is added or present when PR is updated types: - synchronize - labeled permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build_wheels: permissions: contents: none name: Wheels on ${{ matrix.os }} runs-on: ${{ matrix.os }} if: (github.repository == 'spacetelescope/synphot_refactor' && ( github.event_name == 'release' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Build wheels'))) strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: '3.x' - name: Install dependencies run: | python -m pip install pip "twine>=3.3" -U - name: Build wheels uses: pypa/cibuildwheel@63fd63b352a9a8bdcc24791c9dbee952ee9a8abc # v3.3.0 env: CIBW_BUILD: 'cp310-* cp311-* cp312-* cp313-* cp314-*' CIBW_ARCHS_LINUX: 'x86_64' CIBW_ARCHS_WINDOWS: 'AMD64' CIBW_ARCHS_MACOS: 'x86_64 arm64' CIBW_TEST_REQUIRES: 'pytest pytest-astropy' CIBW_TEST_COMMAND: 'pytest --pyargs synphot' - name: Check wheels run: python -m twine check --strict wheelhouse/* # Upload artifacts because gh-action-pypi-publish Docker is only on Linux - name: Upload wheels if: (github.event_name == 'release' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: additional-pylons-${{ matrix.os }} path: ./wheelhouse/*.whl build_dist: permissions: contents: none name: Source dist runs-on: ubuntu-latest if: (github.repository == 'spacetelescope/synphot_refactor' && ( github.event_name == 'release' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Build wheels'))) steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: '3.x' - name: Install dependencies run: python -m pip install pip build "twine>=3.3" -U - name: Build package run: python -m build --sdist . - name: Check dist run: python -m twine check --strict dist/* - name: Test package run: | cd .. python -m venv testenv testenv/bin/pip install -U pip testenv/bin/pip install pytest pytest-astropy testenv/bin/pip install synphot_refactor/dist/*.tar.gz testenv/bin/pytest --pyargs synphot - name: Upload dist if: github.event_name == 'release' uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: additional-pylons-dist path: ./dist/*.tar.gz publish: name: Publish to PyPI needs: [build_wheels, build_dist] if: github.repository == 'spacetelescope/synphot_refactor' && github.event_name == 'release' runs-on: ubuntu-latest environment: name: release url: https://pypi.org/p/synphot permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download wheels uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: path: dist pattern: additional-pylons-* merge-multiple: true - name: Pylons inspection run: ls dist/* - name: Publish package to PyPI uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 anaconda: name: Publish nightly wheel to Anaconda needs: [build_wheels] if: github.repository == 'spacetelescope/synphot_refactor' && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') runs-on: ubuntu-latest steps: - name: Download wheels uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: path: dist pattern: additional-pylons-* merge-multiple: true - name: Pylons inspection run: ls dist/* - uses: OpenAstronomy/publish-wheels-anaconda@eae491141709933a7636af70b070e4a92d1a45be # main with: anaconda_user: STScI anaconda_package: synphot anaconda_token: ${{ secrets.anaconda_token }} keep_n_latest: 5 spacetelescope-synphot_refactor-c682dc1/.gitignore000066400000000000000000000011341511632712700225100ustar00rootroot00000000000000# Compiled files *.py[cod] *.a *.o *.so __pycache__ # Ignore .c files by default to avoid including generated code. If you want to # add a non-generated .c extension, use `git add -f filename.c`. *.c # Other generated files */version.py htmlcov .coverage MANIFEST # Sphinx docs/api docs/_build # Eclipse editor project files .project .pydevproject .settings # Pycharm editor project files .idea # Packages/installer info *.egg* *.egg-info dist build eggs parts bin var sdist develop-eggs .installed.cfg distribute-*.tar.gz pip-wheel-metadata/ # Other .cache .tox .*.sw[op] *~ # Mac OSX .DS_Store spacetelescope-synphot_refactor-c682dc1/.readthedocs.yaml000066400000000000000000000006511511632712700237520ustar00rootroot00000000000000# Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 build: os: ubuntu-22.04 apt_packages: - graphviz tools: python: "3.11" sphinx: builder: html configuration: docs/conf.py fail_on_warning: true python: install: - method: pip path: . extra_requirements: - docs # Don't build any extra formats formats: [] spacetelescope-synphot_refactor-c682dc1/CHANGES.rst000066400000000000000000000117621511632712700223320ustar00rootroot000000000000001.6.1 (2025-12-10) ================== - Added wheels for Python 3.14. [#426] 1.6.0 (2025-06-26) ================== - Compatibility with ``astropy`` 7.1. [#403] - Compatibility with ``specutils`` 2.0 (optional dependency). Bumped minversion of ``specutils`` to 1.10. [#413] - Removed ``synphot.test()`` test runner. Use ``pytest --pyargs synphot`` instead. [#408] - Added wheels for musllinux and OSX x86 architectures. [#409] 1.5.0 (2024-11-19) ================== - Default Vega is now ``alpha_lyr_stis_011.fits``. [#400] 1.4.0 (2024-04-11) ================== - ``read_fits_spec()`` now uses ``astropy.table.QTable.read`` for parsing to ensure that the correct ``TUNITn`` is read. As a result, ``wave_unit`` and ``flux_unit`` keywords are deprecated and no longer used in that function. Additionally, if any ``TUNITn`` in the table is invalid, regardless whether the column is used or not, an exception will now be raised. [#384] - ``read_spec()`` now detects whether given filename is FITS more consistently w.r.t. ``astropy``. [#384] - Compatibility with ``numpy`` 2.0 and ``astropy`` 6.1 by building C-extension against ``numpy`` 2.x ABI. [#387] - Bumped minimum supported versions for Python to 3.10, ``numpy`` to 1.23, ``astropy`` to 6.0, and ``scipy`` to 1.9. [#387] 1.3.0 (2023-11-28) ================== - Compatibility with ``numpy`` 2.0. [#363] - Bumped minimum supported versions for Python to 3.9, ``numpy`` to 1.20, ``astropy`` to 5.0, and ``scipy`` to 1.6. [#363] - Wheels for Python 3.12. 1.2.1 (2023-06-01) ================== - Compatibility with ``numpy`` 1.25. [#356] 1.2.0 (2023-03-20) ================== - New ``filter_parameterization`` subpackage to handle filter parameterization, adapted from ``tynt`` package written by Brett Morris. [#257] - OBMAG and VEGAMAG are no longer interchangeable. [#331] - ``Box1D`` model now takes optional ``step`` input to allow user control over the generated sampleset. Default behavior maintains backwards compatibility. [#342] - Dropped support for Python 3.6 and 3.7. Minimum supported Python version is now 3.8. [#330] - Bumped minimum supported versions for ``numpy`` to 1.18, ``astropy`` to 4.3, and ``scipy`` to 1.3. [#341] - Added wheel for OSX ARM64 architecture. [#352] 1.1.1 (2021-11-18) ================== - Compatibility with ``astropy`` 5.0. [#321] 1.1.0 (2021-06-23) ================== - ``synphot.synphot_utils`` C-extension is no longer optional. Your installation will fail if it cannot build. [#297] - ``~/.astropy/config/synphot.cfg`` is no longer updated on import. [#307] - Compatibility with ``numpy`` 1.20 and ``astropy`` 4.3. [#301, #309, #311] 1.0.1 (2020-08-03) ================== - Fix for ``conda`` build. Does not affect functionalities. [#279] 1.0.0 (2020-07-31) ================== - Default Vega is now ``alpha_lyr_stis_010.fits``. [#266] - CDBS is now TRDS. [#278] 0.3.0 (2020-03-17) ================== - ``SourceSpectrum`` and ``SpectralElement`` now have ``to_spectrum1d`` and ``from_spectrum1d`` to write to and read from ``specutils.Spectrum1D`` object, respectively. [#243] - ``Observation`` now accepts ``specutils.Spectrum1D`` as a valid source spectrum input. [#246] - Dropped support for Python 3.5 and ``astropy`` 2.x. This version is only compatible with Python 3.6 or later and ``astropy`` 3.x or later. [#243] - Added support for ``RickerWavelet1D`` model that is the renamed version of ``MexicanHat1D`` model to be consistent with ``astropy`` 4.0. [#250] - Added support for extinction curve from ``dust-extinction``. [#251] - Added option for ``synphot.utils.download_data()`` to download to the cache instead of a specific location. Please note that new option is not fully compatible with customization using ``synphot.cfg``. [#211] - Added option to use analytic integral for some models. However, for backward compatibility, the default is still trapezoid integration. [#252] - Trapezoid integration now provides unsigned area for ``RickerWavelet1D``. [#252] 0.2.1 (2019-12-20) ================== - ``effstim`` now raises ``SynphotError`` properly when Vega spectrum is not given for VEGAMAG calculation. [#228] - Infrastructure update in accordance to Astropy APE 17. [#229, #233] 0.2.0 (2019-11-19) ================== - Use updated Vega spectrum for VEGAMAG. [#222] - Compatibility with Numpy 1.17. [#212] - Compatibility with ``astropy`` 4.0 models. [#201] - Removed Python 2 support. This version is only compatible with Python 3.5 or later. [#185] 0.1.3 (2019-03-24) ================== - Config to use HTTP instead of FTP. [#171] - New ``synphot.utils.download_data()`` function to help download data from STScI HTTP service. [#179] - Fixed scalar unit conversion for VEGAMAG. [#174] - Bug fix for ``effstim`` calculations in some flux units. [#159, #166] 0.1.2 (2018-07-19) ================== Bug fix for GaussianFlux1D ``total_flux`` unit handling. [#154] 0.1.1 (2018-06-05) ================== Bug fix for integrated unit. [#151] 0.1.0 (2018-01-19) ================== First release. spacetelescope-synphot_refactor-c682dc1/CITATION.md000066400000000000000000000006351511632712700222610ustar00rootroot00000000000000To reference synphot in publications, please cite [![ascl:1811.001](https://img.shields.io/badge/ascl-1811.001-blue.svg?colorB=262255)](https://ascl.net/1811.001) #### Other forms of citation [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3673988.svg)](https://doi.org/10.5281/zenodo.3673988) Lim, P. L., et al. 2016, synphot User's Guide (Baltimore, MD: STScI), https://synphot.readthedocs.io/en/latest/ spacetelescope-synphot_refactor-c682dc1/CODE_OF_CONDUCT.md000066400000000000000000000062071511632712700233250ustar00rootroot00000000000000# Spacetelescope Open Source Code of Conduct We expect all "spacetelescope" organization projects to adopt a code of conduct that ensures a productive, respectful environment for all open source contributors and participants. We are committed to providing a strong and enforced code of conduct and expect everyone in our community to follow these guidelines when interacting with others in all forums. Our goal is to keep ours a positive, inclusive, successful, and growing community. The community of participants in open source Astronomy projects is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences success and continued growth. As members of the community, - We pledge to treat all people with respect and provide a harassment- and bullying-free environment, regardless of sex, sexual orientation and/or gender identity, disability, physical appearance, body size, race, nationality, ethnicity, and religion. In particular, sexual language and imagery, sexist, racist, or otherwise exclusionary jokes are not appropriate. - We pledge to respect the work of others by recognizing acknowledgment/citation requests of original authors. As authors, we pledge to be explicit about how we want our own work to be cited or acknowledged. - We pledge to welcome those interested in joining the community, and realize that including people with a variety of opinions and backgrounds will only serve to enrich our community. In particular, discussions relating to pros/cons of various technologies, programming languages, and so on are welcome, but these should be done with respect, taking proactive measure to ensure that all participants are heard and feel confident that they can freely express their opinions. - We pledge to welcome questions and answer them respectfully, paying particular attention to those new to the community. We pledge to provide respectful criticisms and feedback in forums, especially in discussion threads resulting from code contributions. - We pledge to be conscientious of the perceptions of the wider community and to respond to criticism respectfully. We will strive to model behaviors that encourage productive debate and disagreement, both within our community and where we are criticized. We will treat those outside our community with the same respect as people within our community. - We pledge to help the entire community follow the code of conduct, and to not remain silent when we see violations of the code of conduct. We will take action when members of our community violate this code such as such as contacting conduct@stsci.edu (all emails sent to this address will be treated with the strictest confidence) or talking privately with the person. This code of conduct applies to all community situations online and offline, including mailing lists, forums, social media, conferences, meetings, associated social events, and one-to-one interactions. Parts of this code of conduct have been adapted from the Astropy and Numfocus codes of conduct. http://www.astropy.org/code_of_conduct.html https://www.numfocus.org/about/code-of-conduct/ spacetelescope-synphot_refactor-c682dc1/LICENSE.rst000066400000000000000000000030101511632712700223270ustar00rootroot00000000000000BSD 3-Clause License Copyright (c) 2020-2025, Space Telescope Science Institute, AURA All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. spacetelescope-synphot_refactor-c682dc1/MANIFEST.in000066400000000000000000000004741511632712700222640ustar00rootroot00000000000000include README.rst include CHANGES.rst include LICENSE.rst include CITATION.md include setup.cfg include pyproject.toml recursive-include synphot/include *.h recursive-include synphot *.c recursive-include docs * recursive-include licenses * prune build prune docs/_build prune docs/api global-exclude *.pyc *.o spacetelescope-synphot_refactor-c682dc1/README.rst000066400000000000000000000020701511632712700222070ustar00rootroot00000000000000synphot ======= .. image:: https://img.shields.io/badge/ascl-1811.001-blue.svg?colorB=262255 :target: https://ascl.net/1811.001 :alt: ascl:1811.001 .. image:: https://zenodo.org/badge/10061216.svg :target: https://zenodo.org/badge/latestdoi/10061216 :alt: DOI: 10.5281/zenodo.5020322 .. image:: https://readthedocs.org/projects/synphot/badge/?version=latest :target: https://synphot.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status .. image:: https://github.com/spacetelescope/synphot_refactor/actions/workflows/ci_workflows.yml/badge.svg?branch=master :target: https://github.com/spacetelescope/synphot_refactor/actions/workflows/ci_workflows.yml :alt: Github Actions CI Status .. image:: https://codecov.io/gh/spacetelescope/synphot_refactor/branch/master/graph/badge.svg :target: https://codecov.io/gh/spacetelescope/synphot_refactor :alt: Coverage results This is a replacement for IRAF STSDAS SYNPHOT and ASTROLIB PYSYNPHOT, utilizing Astropy and covering the non-instrument specific portions of the old packages. spacetelescope-synphot_refactor-c682dc1/conftest.py000066400000000000000000000017031511632712700227210ustar00rootroot00000000000000try: from pytest_astropy_header.display import (PYTEST_HEADER_MODULES, TESTED_VERSIONS) except ImportError: PYTEST_HEADER_MODULES = {} TESTED_VERSIONS = {} try: from synphot import __version__ as version except ImportError: version = 'unknown' from astropy.utils import minversion NUMPY_LT_2_0 = not minversion("numpy", "2.0") if not NUMPY_LT_2_0: import numpy as np np.set_printoptions(legacy="1.25") # Uncomment and customize the following lines to add/remove entries # from the list of packages for which version numbers are displayed # when running the tests. PYTEST_HEADER_MODULES['astropy'] = 'astropy' PYTEST_HEADER_MODULES['specutils'] = 'specutils' PYTEST_HEADER_MODULES['dust-extinction'] = 'dust_extinction' PYTEST_HEADER_MODULES.pop('Matplotlib', None) PYTEST_HEADER_MODULES.pop('Pandas', None) PYTEST_HEADER_MODULES.pop('h5py', None) TESTED_VERSIONS['synphot'] = version spacetelescope-synphot_refactor-c682dc1/docs/000077500000000000000000000000001511632712700214515ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/docs/Makefile000066400000000000000000000111641511632712700231140ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest #This is needed with git because git doesn't create a dir if it's empty $(shell [ -d "_static" ] || mkdir -p _static) help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR) -rm -rf api html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Astropy.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Astropy.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/Astropy" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Astropy" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." make -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." spacetelescope-synphot_refactor-c682dc1/docs/_static/000077500000000000000000000000001511632712700230775ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/docs/_static/stsci_logo.png000066400000000000000000000451041511632712700257560ustar00rootroot00000000000000PNG  IHDRSsRGBbKGD pHYs  tIME(Ƕ( IDATx]wx~fw{#tDcHZzE H)4邔^)cBK0}'b&3wf=r=p?EQӞ# HwߘH U*|XY~#$Xi!*AvQ;Cb.]Myq|?ճ.0t(‰~VsH()@(O,B@DP]\Q3+v _Is(lU:E+ӛRf?&2KK2kG% I`_ %K0DavY%l2XB1p RC`-5O.ir&@GqǞk|V).f.uLI|,B=9Dxs*AJTWe|,\LrF : p (B)b3}LtcAtƮArTXRяs#~hRPE^T@)"dg 0erP yrDp7/@-s/~]$AT"Up]Ȳ a\"ȳGɘ*Jjr%ձ!`J)(@"%jysuOs0d,;[fLv GFBsC(9w%R t4 21P&nf8 ,CD/7ġޥB\ f}$r%žhB`ex(лZUªzm_S<OR2_ M*k-ng:/ J*v\"3iȯ}#p~Ng9Y ]6$rX!S IF~Ċ-3oKX6ڬ.Ps#ebE A)/n"]%D̞t@qg"eJ('XhM 8h+2ˍAp7ㅁR@HrѴVb¡LQޏ/CA@Ij自!*&A-~L /)z\\ 6!ӚȶH ppg)|8YHׄx*MB<K62x+\?e)B%J}z]5ԙ u1 J)~쏏*jPmV,TU2ߔQalxm‘ QCXؓ};&)DMc}|Ħ? XAY36ׇTx+Tq Rdd ɳ@ןŅC#'Rs1{ELtX/ : C Lm}T)A QalOXC(zF=9x%9%Pr l"|(SW)sO|( >(b  ۓ_"SAl4!)ǮjwE:PJYU [Z!ҋ5V,Ua9>5S~D+T1qfݕ3,jH_,9CZT}t9َSB(\r.X o$gE%mŧjOp3x49dnUgE2 _@w=j{=}b>;39*YT SQJA^tmҧQXsy:L)p֓#Ŏ,S9c@B@LnOG:ɇUd "Hi-JT VRtzAm'RJgа#;SA ޙO J_t=qs(R4,ė$6o=oHREL@2:$(X?⭨CőG(,fѮJr? V= .mFtX"sۮ-8ƙazUb'A2ڿ_o[P`ڡR0V5(uEFd]f**;}/,r=9jw\5ԏI^BbPkKA^tِTǑҰG( ElCG9j2hPQ (Bg N!r䆄og:ay7tRf(R!_ZV$JiFo(q5p3]Əs.9 ,=!H58w}U gܷ&(׌通g0#?L95t(ǣF½Y@gWZ!/WpFnb9am,͞UYD^0BuS8FU*Ȕb4zo޿cg ؙwk*_C1Hԉ~ňea,,=lj{"sF}" x-NmX2"(fķ^`Or P@Q)W"@K)%n6K~%Bt෻o@{1j[/ EmKa5~h D_O)E:'Ap=͎`L!;7 " R "=Yf[bWy <aMRҹN;4<0Og>L)jw|pF陕J9g|DXE2R_9.O֋X~Fo CU9zیq ZǓ]A^| j_dJꩀMv KF|Lhһѹ'f?#z_:Fw}uwȔnty\HJ)v R1(@nppu"cS Nܳ@h }mO}.E)s+FӴR$E0Hai3;,hSfc- gȶHD2nPFl3fa'76 @)̦bÑۖ^S_\y:djٻ. 1BhU"b`E8+m!h*)".Gg0@&(}k<!T1Ycw, gO.鹑R@%M" M O.q<IJ^n &D%+ۼt:קhWh0V /78W Z RΥ8Eqt %KNE!~}I3IyՈM\8~ςoD%RT U!Y/wx-kBW Xݕ" / {p?Pڇf&KdˍA^d+fkDĥ F 2}0֞WIB TR-o/`c Rg{Թ+S-7Mc¡, ֘ 6|*m΍ɘy D[s 4"gM4aE llb谦CjrC,hTQyasݱg h2W.)@A "_dy^6p,9Ѫp3\A1u,Y& K-3v^3͹Q?5-"^RbWa2.bjDѢ;~cCP[/'_iMPaf}z%ɰģ?y-F4CJZ|XA.5<ѽB<9l* 3{㠷7&?!9`MBly1# ؑJAޱO^bʑL(9\QD%Ρx3DUP9V~km3rD *adrPq / -nS3)dzDx+i'3 !P+\KfoE57W$`u#,e> LѴ;؝'rSr,/t>kf.᷻fL}>M`u-*dD !x%@t]Lq$zVQrJ>g ;EY_6rlSs "v"nĭJ VAFA |r',os n;m~95tV zc%T-,q9[{p_F6oy +r=NZ(Wby33c(&ѭ*e| w+7=Ί&XOdCvC]1bldgEA*z4 n BeJ%[g|_hyyI`[TDbw;0C?h3 (;:?ǕϺӰ i& !FJA<q*߮رTϏEןFGD[-/ %gU#`غNa/:9^bqnKI62Ux=;] #(XL< g!S[Z k}+Y\J$tX~qO<[$*L:Kr,A_Iyi7~4 ߽ۑcD߶T|O~aL) Fz>1>V =׍_F ?- Azriv>2xR.1;$jx&8o]BWWگ\y1_nѰb l4DUCჅq8`-Ү@Щ'n۟, !d`/[6§i!I*г:oH$;gh\yѱ2 `tw;eOK)$S,m-wAgmrVTs4&5` VcLL,oܢB(5 ı;ʰSrc'vkK##/5A>{ky髆@Y}<0(`Ax=XOCoc{ܰLŚa? K&~l /5T)(膾(@) qS0`~[_*y f`i#**WSX!ئ,S.9_+B~9]M- Ä]Er!GF`e1~ytJl3q#+p=Ί Bz2@]|,v âS98g@Hz} /|ppyCZrc3@i@RT ^95l$e5O,Dad)~O ]bE2(Xe(ڰwx@Ód,nqQ~4Y74Q/N@U[TkGe#}"Y^RJ |=b%C%Cje"U)S`Cn/<RwbJ |CT\^`j@|=Gn[SRXt`Ci2Xe(|,ZHC`ag^fp. û]6* ꁨ~ڛV u0<8YRrba;^vyp`>jϽw&ȕywn'.(9;(S|4 C(ݽBXŅ@#8]*/B~ňѿV !Spo+{.Ő`6!%.  _zDp~:iߑ)hGv$v㹭( X2"?AZXx2?!򾊶 xܿo IDATA6s_`ɔR@kZL;5sB{Nk ޕcw,P8/kG7E׈Rlޔmou\J))*C`nM"t"(':O#B |aiA{R1 tZXvU 1W{F6@g{Ç*Pt~!h62 Ĺ*0K1ұ1qk])xI&?r Fhp2ւeu8~y,|I!9һėhq0]jG) /]Q(-/57s?Q0ed%sr850 G³̥ i+څIr8W?kFgYIN@~x.k7G;!|Q,.]]~ͭ?vJZkȰ!eY B. "njlBdJizPPМA[nl,v㣤Ą_q[G^ۋ.E=0z%&)ܢu UՠLJN RybF~R^ITpcv3ZRmׯy/_$j:|;ã/Ea,K߯}233B(ۯ]xx);ԯS5b( )(!qǎ׸Qc$$5:|4I*BR0 ~}o:t;Bm8׭Z3n7&BM>txS3Iޤe C~S52}ޢ~޾?\Ȳ\%>2 cֵ}PJIȘb,(]8sI`ܩsrJ >"4 Qʜ(>j{;9-2x&XOn  @PXdY&(V?y.# _Uti 1l( \{Q1Qrr 8"Bf+'QBU(yBC9RF$HDX,+ e/p$ PV ,by( 4f֜MbB80nos*-Y4pڌiv]E˲AxRݸQ)Ӧ~qr RQkݼy~X|WJ(6{wg߰k> /%#Wl p"mrr̊ ~SJbҔI5k֚ҕ+=dY_gehys+G+()_ C aaa ;utd8"k'RJ!BU>iy3L9*J:ej_~}?v|;Μ>s1uV(!";;{&y?vWvv,J*Tl۷wmNoV eOFv} L7(ǎ^龖$Y3f}C ;.ۦO?.3nnn&ౡÇK|իGspΝv]ɲF͚۷mw &M4'33|`~!jv+_xӥv{. ^v}q1fQqS+և<N:t͝;3FcEBHAr}@)EZZg8u߹DDYsfay{y7%p{=v􉢒@Wx!8ؓ'~}"HA ~~c@$?2mJQj* ϶l曜m1Ng[-` 8h{xxjBH._wW&?,egT1N-7z V\YfcUV/ݾmkGD 0kƬBP *+_ڸjԫS;>&ft}"F6_XkrJʎ̆v= rh^TnnApcz/)1>nl,ʖ.}_BBC}ľ 鮵?vLvvUTȻFFF:h4Z}EܒOQ'j&~M[Z ( 0{xfە===ڂݳa0ATJJ.+,k(BR Ru9RN/g<޺S<˕+Z>U?YJ>jYٜJeBpDV3)l_vqu(DC5N֨7M<1DBABno*Gz_q^Ah!BNH,Bv>*v U ˒Q1O8Ym9 Db9pBbLNʕ+o2 2 __ùĥ$Us/r ϦR3;DFk[QG\'ZѨ(~'L<|ȡ o޲S;UxZ5ܹ{XMq$,M2I$aSj׮Y"INBucL:92==}(̭[N s6lVv8BBQP(6͇"fgeqo=Pol6VlUV۱CDŽѠ}Gfǘ&jqE#( 1&*z!{ް۵J _!SMUIuݯ7k$#rea欙zD |ٛ1mm;%o<ϟyJ%8rpW 11~#klɲ%Z݆R9ϼ._D} >'<~8~tȘJon:[Je$I  ^pw'2$IbFD8ԴYs-*瞖eRJcy u1GiQ8eBBi3f4TU8iԮYĄfcǨ,4/Z%"ERu۸ [lA(Vnw:|x^q@N>tAAfv2GFyNKQ?v~3z&."QIlٺ5U˖ .yix(^ZW+H\lDD LVqF1ϟ?߯so}GFȽV4`PB4H@@@| "B@RR•Q1w._ƍK4$ԼYsxᰮljw/e̸-^eۖ VU:h\kX90 (--m ǚukiMjeCp3=EQJ yiY0 #/W_-;"˲|!ohoB$Vf3 C \@ HX,lf,4LԉL$I@;LEQf9"vRy7RLI$wؐKÆ ;os R*;jVi6M7a}C†2 C)TdaÇ{'* !2!D,b)vfQ' j4^v/eӦϜ1bsw~lȦcǎJ# !PJiNNv^^l6mnݮmkyRZ ]8\e'f9fpQ,Znj s88ΘOk?a jլtwDD3٬T !v8>XOIdww̞ݺfZWh>7j EqlhQ B晝a"I7ZϺgnϜ..RGŌL^a=>i'NBzu(& EQKe Iۧ)q?,]0!!)()Tx=zzذq%>>>oP պq///]' _A/?iZ+  jH՚%X@#WL.y̞9-ì9OJJ:$"i&,yȲ 77lЈD3gCzd2(nXhX 矁֬J=s~K|5M~HHJȘ2iJEOO5,)yg-/^:0r-$$d$qyx(1o?nLI=j7N<||/KSwFF/sNL0?N\qV]Sk'O3f,0qB?iC7a#_h}O<Μ=ÝNFz&cqk+fd̃)ypb{BrZի~~$dlDHҢY3ܳÂZ._=%9̬Eԓƅ3]o 9.^_t9[fffvR(VܢvځMc֜4` fΞNk*Ioh# ,+E댙3LR`k׮}A:ZP_;nBr=PD[MVXfuwn_T]=rTBu1(/_><5" SMe2~~:]5ŲVT 8(zлg/PE`6+P(֭]7\rXje؝{&Ȳ4x3gT#+z ZW_fܾh^X,wsZj,$iii(\faߔR oO;:.L1cG=ɲ{._$ :Eܸq#IPJ˕5§1&:fiSiJJqmB-6^R ӫ7R"OhƎn޴8D֐aCv]g2L4部zr@tzwFvs8(~RmڔiA3dI>|oٺeK.^8^gX 2'^RVR{Ѱ`0D(]hb='NԻgV 49kάO/]G$PJa0ZGDmwtvk(0-t:O |&zi6_p &Rɝxm `CaFtn{g䡡@Szy =W-I ةO {ƒK0|JlOmԉ'6O*Wb ey/X|ps鵞L`y30^BQMy_@=2,̙77/DsC.!F d20h~www_T*țس冕s/f#^՚k:rU@333Θ53y߹˗q k%IJ:ƛo5twa}Ŗ{ߟsۖ9@9|r a_G{ 쥔&A ۮa_!˲G˲U^ϲy0¼f͂OZ7eN"Ƃ,*)o۾ uŘqcL6֖m?m򟴃=zF^دVj@Kxyy`4M0k5Gs,sj&aI~c<{~3k(&Ysfw vf`CAJ+=?l o<7?`+eKMMI>ud15?7%5U5TZmcw%>RFi9a˙gׯ_m̚AHFD#kns>ޜ94ȡweY.e@$A&QP &Ο4']Qv.!?| .e:mꈜ:nN떟i_P%B^K[qŊJIn.!Q1QLǠ'Ob&SYhdqj獛6}v[Ӵ?՚k,">>niS+=윔ejg$mС}>|EzwJ)$ˡ ,+Ts27k\r3~*L6(9%y!l Q1Q8>rqa% !l6:"z _1c䇕ΘVeٰƒ B ʬ_wɆn]w#GFcFŬԚ <3!zDa&~~Ѷ퓄AAIаϜ+N_>b IDATI]X V9_=U˖ػ]kTSW7 $TAviP\q9Ҋ8:HxG#B<`+(Q@PquVMGTDI"B.77{I@oί:}>o' Wy @(Fp\N]1$'%Sjs[ܘ_X.7<gO<9/֯P ,1߸۷or1;G]&K*(ȳn[ۘo .1'-#&eVybr""I7L `2RR7iֆ==OZ& 0FiXW.3*"Q6"7Hi4/8H:b)hv Èa8zggE!xaYbi-}/Ph |2áZ͖WUy2E*@zjzʔ)sppbh+!,pƌ7c 5+ wf1a7X{ED5yxxX>" Àb! fwvvđ۾I[diS%K3y<^+_D#,zx``RbBF9~B'xFY:mdy|w'0# e0aM[x(4i>b/[b/͘'+3k -}P^ĐI'_ڑCG%~볗X,xzzIL&F ìɛ?}!zݺ>pl6d2"S!}@QT@KKU}>_x<[crrr,os&+-Xwwl,Bq}cwvm8Vf)}|YEcFP(Lbx˵"î Mff )(7bfBA{E<oxM eԙQSQH&qq6@]AAs9tu=~dIeL*""ikK];w߿hᢩmmmq`]t$ִӅ3аeHXq/XHU]} h43;ifޗM$P!qne?X] !!v . B5@3'BӝVMr f;8p &L^o4~py>G\ihh0RZo\ꍹuDNNNMYS30B(S. tpU̬L/wl6s$bٛ!:ax v documentation". html_title = '{0} v{1}'.format(project, release) # Output file base name for HTML help builder. htmlhelp_basename = project + 'doc' # -- Options for LaTeX output ------------------------------------------------- # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]) latex_documents = [('index', project + '.tex', project + u' 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 = [('index', project.lower(), project + u' Documentation', [author], 1)] # -- Options for intersphinx -------------------------------------------------- intersphinx_mapping.update({ 'astropy': ('https://docs.astropy.org/en/stable/', None), 'stsynphot': ('https://stsynphot.readthedocs.io/en/latest/', None), 'specutils': ('https://specutils.readthedocs.io/en/stable/', None), 'dust-extinction': ('https://dust-extinction.readthedocs.io/en/stable/', None)}) # -- Options for linkcheck output --------------------------------------------- linkcheck_retry = 5 linkcheck_ignore = ['https://hsthelp.stsci.edu'] linkcheck_timeout = 180 linkcheck_anchors = False # Enable nitpicky mode - which ensures that all references in the docs resolve. nitpicky = True nitpick_ignore = [ ('py:class', 'synphot.models.BaseGaussian1D'), ] spacetelescope-synphot_refactor-c682dc1/docs/index.rst000066400000000000000000000305761511632712700233250ustar00rootroot00000000000000.. _astropy_synphot: ****************************** Synthetic Photometry (synphot) ****************************** Introduction ============ **synphot** simulates photometric data and spectra, observed or otherwise. You can incorporate your own filters, spectra, and data. You can also use a pre-defined standard star (Vega), bandpass, or extinction law. Furthermore, it allows you to: * Construct complicated composite spectra using different models. * Simulate observations. * Compute photometric properties such as count rate, effective wavelength, and effective stimulus. * Manipulate a spectrum; e.g., applying redshift or normalize it to a given flux value in a given bandpass. * Sample a spectrum at given wavelengths. * Plot a quick-view of a spectrum. * Perform repetitive operations such as simulating the observations of multiple type of sources through multiple bandpasses. This package covers the general functionalities not related to any particular observatory. If you use HST, you might also be interested in **stsynphot** (https://github.com/spacetelescope/stsynphot_refactor), which covers synthetic photometry for the telescope(s). If you use **synphot** in your work, please see `CITATION `_ for details on how to cite it in your publications. If you have questions or concerns regarding the software, please open an issue at https://github.com/spacetelescope/synphot_refactor/issues (if not already reported) or contact `STScI Help Desk `_. .. _synphot-installation-setup: Installation and Setup ====================== **synphot** works for Python 3.10 or later only. It requires the following packages: * numpy * astropy * scipy * matplotlib (optional for plotting) * specutils (optional) You can install **synphot** using one of the following ways: * From the ``conda-forge`` channel:: conda install synphot -c conda-forge * From standalone release:: pip install synphot * From nightly wheel uploads (pre-built ``dev`` version):: pip install -i https://pypi.anaconda.org/stsci/simple synphot -U --pre * From source (example shown is for the ``dev`` version):: git clone https://github.com/spacetelescope/synphot_refactor.git cd synphot_refactor pip install . To use the pre-defined standard star, extinction laws, and bandpasses, it is recommended for non-internal STScI users to download the necessary data files to a local directory so you can avoid connecting directly to STScI HTTP service, which is slower and might not be available all the time. To download the files via HTTP, create a local directory where you plan to store the data files (e.g., ``/my/local/dir/trds``) and run the following: >>> from synphot.utils import download_data >>> file_list = download_data('/my/local/dir/trds') # doctest: +SKIP With ``astropy``, you can generate a ``$HOME/.astropy/config/synphot.cfg`` file like this (otherwise, you can manually create one from :ref:`synphot_config_file`): >>> from astropy.config import generate_config >>> generate_config(pkgname='synphot') Then, you can modify it to your needs; Uncomment and replace every instance of file prefix with ``/my/local/dir/trds`` so that ``synphot`` knows where to look for these files. On the contrary, if you wish to rely solely on Astropy caching mechanism, you can use ``download_data(None)``, but make sure that you do *not* modify your default ``$HOME/.astropy/config/synphot.cfg`` file. Otherwise, ``synphot`` will try to use what is in ``synphot.cfg`` instead. .. note:: **synphot** data files are a minimal subset of those required by **stsynphot**. If you plan to use the latter anyway, please also read the instructions in its documentation. If you have your own version of the data files that you wish to use, you can modify ``synphot.cfg`` to point to your own copies without having to download using the function above. However, before you do so, make sure that your own file(s) can be read in successfully with :func:`~synphot.specio.read_fits_spec`. For example, if you want to use your own Johnson *V* throughput file, you can modify this line in your ``$HOME/.astropy/config/synphot.cfg`` file:: johnson_v_file = /my/other/dir/my_johnson_v.fits Alternately, you can also take advantage of :ref:`astropy:astropy_config` to manage **synphot** data files. This example below overwrites the Johnson *V* throughput file setting for the entire Python session (this supersedes what is set in ``synphot.cfg`` above):: >>> from synphot.config import conf >>> conf.johnson_v_file = '/my/local/dir/trds/comp/nonhst/johnson_v_004_syn.fits' >>> print(conf.johnson_v_file) /my/local/dir/trds/comp/nonhst/johnson_v_004_syn.fits Using the configuration system, you can also temporarily use a different Johnson *V* throughput file:: >>> with conf.set_temp('johnson_v_file', '/my/other/dir/my_johnson_v.fits'): ... print(conf.johnson_v_file) /my/other/dir/my_johnson_v.fits >>> print(conf.johnson_v_file) /my/local/dir/trds/comp/nonhst/johnson_v_004_syn.fits .. testsetup:: >>> conf.reset('johnson_v_file') .. _synphot_getting_started: Getting Started =============== This section only contains minimal examples showing how to use this package. For detailed documentation, see :ref:`synphot_using`. In the examples below, you will notice that most models are from `synphot.models`, not ``astropy.modeling.models``, because the models in ``synphot`` have extra things like ``sampleset`` that are not (yet) available in Astropy. Despite this, some models like `~astropy.modeling.functional_models.Const1D` does not need the extra things to work, so they can be used directly. When in doubt, see if a model is in `synphot.models` first before using Astropy's. :: >>> from astropy import units as u >>> from synphot import units, SourceSpectrum >>> from synphot.models import BlackBodyNorm1D, GaussianFlux1D Create a Gaussian absorption line with the given amplitude centered at 4000 Angstrom with a sigma of 20 Angstrom:: >>> g_abs = SourceSpectrum(GaussianFlux1D, amplitude=1*u.mJy, ... mean=4000, stddev=20) Create a Gaussian emission line with the given total flux centered at 3000 Angstrom with FWHM of 100 Angstrom:: >>> g_em = SourceSpectrum(GaussianFlux1D, ... total_flux=3.5e-13*u.erg/(u.cm**2 * u.s), ... mean=3000, fwhm=100) Create a blackbody source spectrum with a temperature of 6000 K:: >>> bb = SourceSpectrum(BlackBodyNorm1D, temperature=6000) Combine the above components to create a source spectrum that is twice the original blackbody flux with the Gaussian emission and absorption lines:: >>> sp = 2 * bb + g_em - g_abs Plot the spectrum, zooming in on the line features:: >>> sp.plot(left=1, right=7000) # doctest: +SKIP .. plot:: from astropy import units as u from synphot import units, SourceSpectrum from synphot.models import BlackBodyNorm1D, GaussianFlux1D g_abs = SourceSpectrum(GaussianFlux1D, amplitude=1*u.mJy, mean=4000, stddev=20) g_em = SourceSpectrum(GaussianFlux1D, total_flux=3.5e-13*u.erg/(u.cm**2 * u.s), mean=3000, fwhm=100) bb = SourceSpectrum(BlackBodyNorm1D, temperature=6000) sp = 2 * bb + g_em - g_abs sp.plot(left=1, right=7000) Sample the spectrum at 0.3 micron:: >>> sp(0.3 * u.micron) # doctest: +FLOAT_CMP Or sample the same thing but in a different flux unit:: >>> sp(0.3 * u.micron, flux_unit=units.FLAM) # doctest: +FLOAT_CMP Sample the spectrum at its native wavelength set:: >>> sp(sp.waveset) # doctest: +FLOAT_CMP +ELLIPSIS Models that built the spectrum:: >>> print(sp) # doctest: +ELLIPSIS SourceSpectrum at z=0.0 Model: CompoundModel... Inputs: ('x',) Outputs: ('y',) Model set size: 1 Expression: ([0] | [1]) + [2] - [3] Components: [0]: [1]: [2]: [3]: Parameters: ... Redshift the source spectrum by :math:`z = 0.2`:: >>> sp.z = 0.2 Create a box-shaped bandpass centered at 4000 Angstrom with a width of 2000 Angstrom:: >>> from synphot import SpectralElement >>> from synphot.models import Box1D >>> bp = SpectralElement(Box1D, amplitude=1, x_0=4000, width=2000) Normalize the source spectrum to 1 Jy in a given box bandpass and integrate it:: >>> sp_rn = sp.normalize(1 * u.Jy, band=bp) >>> sp_rn.integrate() # doctest: +FLOAT_CMP Create an observation by passing the redshifted and normalized source spectrum through the box bandpass:: >>> from synphot import Observation >>> obs = Observation(sp_rn, bp) Calculate the count rate of the observation above for an 2-meter telescope: >>> import numpy as np >>> area = np.pi * (1 * u.m) ** 2 >>> area # doctest: +FLOAT_CMP >>> obs.countrate(area=area) # doctest: +FLOAT_CMP .. _synphot_using: Using **synphot** ================= .. toctree:: :maxdepth: 1 synphot/overview synphot/config synphot/from_pysyn_iraf synphot/bandpass synphot/spectrum synphot/observation synphot/formulae synphot/units synphot/filter_par synphot/tutorials .. _synphot_history: A Brief History =============== A brief history: First, there was STSDAS SYNPHOT (IRAF). Then, there was ASTROLIB PYSYNPHOT (:ref:`Lim et al. 2015 `), which aimed at replacing STSDAS SYNPHOT using Python. In order to take advantage of :ref:`astropy:astropy-modeling` and :ref:`astropy:astropy-units` and to repurpose the functionality for a wider audience (other than HST users), it was refactored again and separated into **synphot** and **stsynphot** (see :ref:`astropy_synphot`). .. _synphot_api: API === .. automodapi:: synphot.binning :no-inheritance-diagram: Also imports this C-extension to local namespace: .. toctree:: :maxdepth: 1 synphot/c_ext .. automodapi:: synphot.blackbody :no-inheritance-diagram: .. automodapi:: synphot.config :no-inheritance-diagram: .. automodapi:: synphot.exceptions .. automodapi:: synphot.filter_parameterization .. automodapi:: synphot.models .. automodapi:: synphot.observation .. automodapi:: synphot.reddening .. automodapi:: synphot.specio :no-inheritance-diagram: .. automodapi:: synphot.spectrum :no-inheritance-diagram: .. automodapi:: synphot.thermal .. automodapi:: synphot.units :no-inheritance-diagram: .. automodapi:: synphot.utils :no-inheritance-diagram: .. _synphot_biblio: References ========== .. _synphot-ref-extinction-calzetti2000: Calzetti, D., Armus, L., Bohlin, R. C., Kinney, A. L., Koornneef, J., & Storchi-Bergmann, T. 2000, ApJ, 533, 682 .. _synphot-ref-extinction-cardelli1989: Cardelli, J. A., Clayton, G. C., & Mathis, J. S. 1989, ApJ, 345, 245 .. _synphot-ref-extinction-gordon2003: Gordon, K. D., Clayton, G. C., Misselt, K. A., Landolt, A. U., & Wolff, M. J. 2003, ApJ, 594, 279 .. _synphot-ref-horne1988: Horne, K. 1988, in New Directions in Spectophotometry: A Meeting Held in Las Vegas, NV, March 28-30, Application of Synthetic Photometry Techniques to Space Telescope Calibration, ed. A. G. Davis Philip, D. S. Hayes, & S. J. Adelman (Schenectady, NY: L. Davis Press), 145 .. _synphot-ref-koornneef1986: Koornneef, J., Bohlin, R., Buser, R., Horne, K., & Turnshek, D. 1986, Highlights Astron., 7, 833 .. _synphot-ref-laidler2008: Laidler, V., et al. 2008, Synphot Data User's Guide, Version 1.2 (Baltimore, MD: STScI) .. _synphot-ref-lim2015: Lim, P. L., Diaz, R. I., & Laidler, V. 2015, PySynphot User's Guide (Baltimore, MD: STScI), https://pysynphot.readthedocs.io/en/latest/ .. _synphot-ref-madau1995: Madau, P., et al. 1995, ApJ, 441, 18 .. _synphot-ref-oke1974: Oke, J. B., 1974, ApJS, 27, 21 .. _synphot-ref-rybicki1979: Rybicki, G. B., & Lightman, A. P. 1979, Radiative Processes in Astrophysics (New York, NY: Wiley) .. _synphot-ref-schneider1983: Schneider, D. P., Gunn, J. E., & Hoessel J. G. 1983, ApJ, 264, 337 spacetelescope-synphot_refactor-c682dc1/docs/make.bat000066400000000000000000000106411511632712700230600ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Astropy.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Astropy.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end spacetelescope-synphot_refactor-c682dc1/docs/synphot/000077500000000000000000000000001511632712700231555ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/docs/synphot/bandpass.rst000066400000000000000000000237441511632712700255140ustar00rootroot00000000000000.. _bandpass-main: Bandpass ======== A bandpass can be constructed by one of the following methods: * Load a supported :ref:`FITS file ` or :ref:`ASCII file ` with :meth:`~synphot.spectrum.SpectralElement.from_file`. * Use a pre-defined filter with :meth:`~synphot.spectrum.SpectralElement.from_filter`. * Pass a :ref:`supported model ` along with the keywords needed to define it into a :class:`~synphot.spectrum.SpectralElement` object. * Build a composite bandpass using :ref:`synphot-spec-math-op`. * Build an empirical bandpass using :ref:`synphot-bandpass-specutils`. It has various :ref:`photometric properties ` and these main components: * ``model``, the underlying Astropy model * ``waveset``, the wavelength set for optimal sampling * ``waverange``, the range (inclusive) covered by ``waveset`` * ``meta``, metadata associated with the spectrum * ``warnings``, special metadata to highlight any warning To **evaluate** its transmission at a given wavelength, use its :py:meth:`~object.__call__` method as you would with any Astropy model:: >>> from astropy import units as u >>> from synphot import SpectralElement >>> from synphot.models import Box1D >>> bp = SpectralElement(Box1D, amplitude=1, x_0=5000, width=100) >>> bp(500 * u.nm) # doctest: +FLOAT_CMP Bandpass also has access to **photometric parameter** calculations akin to IRAF SYNPHOT ``bandpar`` task. (Also see :ref:`synphot_formulae` and respective API documentations.) Some of these need the information of telescope collecting area, which will be set to HST value in the examples below:: >>> area = 45238.93416 * (u.cm * u.cm) # HST >>> bp.avgwave() # doctest: +FLOAT_CMP >>> bp.tlambda() # doctest: +FLOAT_CMP >>> bp.tpeak() # doctest: +FLOAT_CMP >>> bp.wpeak() # For box, this is the first occurence of max throughput # doctest: +FLOAT_CMP >>> bp.efficiency() # doctest: +FLOAT_CMP >>> bp.equivwidth() # doctest: +FLOAT_CMP >>> bp.rectwidth() # doctest: +FLOAT_CMP >>> bp.rmswidth() # doctest: +FLOAT_CMP >>> bp.photbw() # doctest: +FLOAT_CMP >>> bp.fwhm() # doctest: +FLOAT_CMP >>> bp.pivot() # doctest: +FLOAT_CMP >>> bp.barlam() # doctest: +FLOAT_CMP >>> bp.unit_response(area) # doctest: +FLOAT_CMP >>> bp.emflx(area) # doctest: +FLOAT_CMP To check the **overlap**, i.e., whether the wavelength range of another spectrum is defined everywhere within the a bandpass, you can use :meth:`~synphot.spectrum.SpectralElement.check_overlap`, as follows. This check is useful to test whether convolving the two spectra would result in any potential inaccurate representation of the result:: >>> from synphot import SourceSpectrum >>> from synphot.models import Empirical1D >>> bp = SpectralElement( ... Empirical1D, points=[2999.9, 3000, 6000, 6000.1], ... lookup_table=[0, 1, 1, 0]) >>> # Source spectrum is fully defined within bandpass waveset >>> sp_full = SourceSpectrum( ... Empirical1D, points=[999.9, 1000, 9000, 9000.1], ... lookup_table=[0, 1, 1, 0]) >>> bp.check_overlap(sp_full) 'full' >>> # 99% of spectrum's flux is in the overlap (not a concern) >>> sp_most = SourceSpectrum( ... Empirical1D, points=[3005, 3005.1, 6000.1, 6000.2], ... lookup_table=[0, 1, 1, 0]) >>> bp.check_overlap(sp_most) 'partial_most' >>> # Source spectrum needs significant extrapolation (guessing) >>> sp_notmost = SourceSpectrum( ... Empirical1D, points=[3999.9, 4500.1], lookup_table=[1, 1]) >>> bp.check_overlap(sp_notmost) 'partial_notmost' >>> # No overlap at all >>> sp_none = SourceSpectrum( ... Empirical1D, points=[99.9, 100, 2999.8, 2999.9], ... lookup_table=[0, 1, 1, 0]) >>> bp.check_overlap(sp_none) 'none' .. _synphot-bandpass-arrays: Arrays ------ Creating bandpass from arrays is recommended when the input file is in a format that is not supported by **synphot**. You can read the file however you like using another package and store the wavelength and throughput as arrays to be processed by **synphot** as an empirical model. The example below creates and plots a bandpass from some given arrays. It also demonstrates that you can choose to keep negative throughput values (however unrealistic), if desired: .. plot:: :include-source: from synphot import SpectralElement from synphot.models import Empirical1D wave = [999, 1000, 2000, 3000, 3001] # Angstrom thru = [0, 0.1, -0.2, 0.3, 0] bp = SpectralElement( Empirical1D, points=wave, lookup_table=thru, keep_neg=True) bp.plot() plt.axhline(0, color='k', ls=':') .. _synphot-box-bandpass: Box --- A box-shaped bandpass is a rectangular window centered on a given wavelength with a given width. It is defined as: .. math:: f(x) = \left \{ \begin{array}{ll} 1 & : x_0 - w/2 \geq x \geq x_0 + w/2 \\ 0 & : \text{else} \end{array} \right. where * :math:`f(x)` is the throughput * :math:`x_{0}` is the central wavelength * :math:`x` is the wavelength array * :math:`w` is the width of the box The example below creates and plots a box-shaped bandpass centered at 600 nm with a width of 10 nm: .. plot:: :include-source: import matplotlib.pyplot as plt from astropy import units as u from synphot import SpectralElement from synphot.models import Box1D bp = SpectralElement(Box1D, amplitude=1, x_0=600*u.nm, width=10*u.nm) # Plot at user unit instead of internal unit bp.plot(wavelengths=bp.waveset.to(u.nm), top=1.1, title='Box Bandpass') plt.axvline(600, ls='--', color='k') .. _synphot-bandpass-from-file: File ---- A bandpass can also be defined using a FITS or ASCII table containing columns of wavelength and throughput. See :ref:`synphot-fits-format-overview` and :ref:`synphot-ascii-format-overview` for details on how to create such tables. The example below loads and plots a bandpass from FITS table in the software test data directory: .. plot:: :include-source: import os from astropy.utils.data import get_pkg_data_filename from synphot import SpectralElement filename = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests') bp = SpectralElement.from_file(filename) bp.plot(left=4000, right=7000) .. _synphot-predefined-filter: Filter ------ Pre-defined bandpass for some common filters are provided for convenience. (See :ref:`synphot-installation-setup` for instructions on how to obtain the data files.) They can be accessed via :meth:`~synphot.spectrum.SpectralElement.from_filter` by passing in the appropriate filter names: * ``'bessel_j'`` (Bessel *J*) * ``'bessel_h'`` (Bessel *H*) * ``'bessel_k'`` (Bessel *K*) * ``'cousins_r'`` (Cousins *R*) * ``'cousins_i'`` (Cousins *I*) * ``'johnson_u'`` (Johnson *U*) * ``'johnson_b'`` (Johnson *B*) * ``'johnson_v'`` (Johnson *V*) * ``'johnson_r'`` (Johnson *R*) * ``'johnson_i'`` (Johnson *I*) * ``'johnson_j'`` (Johnson *J*) * ``'johnson_k'`` (Johnson *K*) The example below loads and plots bandpasses from Johnson *BI*:: >>> import matplotlib.pyplot as plt # doctest: +SKIP >>> from synphot import SpectralElement >>> b = SpectralElement.from_filter('johnson_b') # doctest: +REMOTE_DATA >>> i = SpectralElement.from_filter('johnson_i') # doctest: +REMOTE_DATA >>> plt.plot(b.waveset, b(b.waveset), 'b', i.waveset, i(i.waveset), 'r') # doctest: +SKIP >>> plt.ylim(0, 1.1) # doctest: +SKIP >>> # Label comes from DESCRIP keyword from FITS header >>> plt.legend([b.meta['header']['descrip'], i.meta['header']['descrip']]) # doctest: +SKIP .. image:: images/johnson_bi.png :width: 600px :alt: Johnson BI bandpass. For more extensive selection of filter systems, please use :ref:`stsynphot:stsynphot_index` and see its :ref:`stsynphot:stsynphot-appendixb-nonhst`. .. _synphot-bandpass-uniform: Flat ---- A flat (uniform) bandpass has a constant throughput at any wavelength value. It is defined as: .. math:: f(x) = A where * :math:`f(x)` is the throughput * :math:`x` is the wavelength array * :math:`A` is the constant The example below creates and plots a flat bandpass with its transmission set at 0.8: .. plot:: :include-source: from astropy.modeling.models import Const1D from synphot import SpectralElement bp = SpectralElement(Const1D, amplitude=0.8) bp.plot([1000, 10000], title='Flat Bandpass') .. _synphot-bandpass-specutils: specutils --------- A bandpass can be constructed from and written to `specutils.Spectrum1D` object. See :ref:`specutils documentation ` for more information on how to use `~specutils.Spectrum1D`. The example below writes a :ref:`synphot-box-bandpass` to a `~specutils.Spectrum1D` object: .. doctest-requires:: specutils<2 >>> from astropy import units as u >>> from synphot import SpectralElement >>> from synphot.models import Box1D >>> bp = SpectralElement(Box1D, amplitude=1, x_0=600*u.nm, width=10*u.nm) >>> spec = bp.to_spectrum1d() Meanwhile, this example reads in a bandpass from a `~specutils.Spectrum1D` object: .. doctest-requires:: specutils<2 >>> from astropy import units as u >>> from specutils import Spectrum1D >>> from synphot import SpectralElement >>> spec = Spectrum1D(spectral_axis=[100, 300]*u.nm, ... flux=[0.1, 0.8]*u.dimensionless_unscaled) >>> bp = SpectralElement.from_spectrum1d(spec) spacetelescope-synphot_refactor-c682dc1/docs/synphot/c_ext.rst000066400000000000000000000001411511632712700250050ustar00rootroot00000000000000.. _synphot-c-ext: calcbinflux =========== .. autofunction:: synphot.synphot_utils.calcbinflux spacetelescope-synphot_refactor-c682dc1/docs/synphot/config.rst000066400000000000000000000004351511632712700251560ustar00rootroot00000000000000.. _synphot_config_file: synphot's Default Configuration File ************************************ To customize this, copy it to your ``$HOME/.astropy/config/synphot.cfg``, uncomment the relevant configuration item(s), and insert your desired value(s). .. generate_config:: synphot spacetelescope-synphot_refactor-c682dc1/docs/synphot/filter_par.rst000066400000000000000000000101411511632712700260330ustar00rootroot00000000000000.. _synphot_par_filters: Parameterized Filters ===================== .. note:: The algorithm for parameterized filters here was originally developed by Brett Morris for the `tynt `_ package. Filter responses can be approximated using Fast Fourier Transform (FFT). If a filter is approximated this way, one only needs to store its FFT parameters instead of all the sampled data points. This reduces the storage size and increases performance, at the cost of reduced accuracy. If you decide to use the parameterization functions provided here, it is up to you to decide whether the results are good enough for your use cases or not. .. _filter_fft_generation: Generating FFT -------------- .. testsetup:: >>> import os >>> from astropy.utils.data import get_pkg_data_filename >>> filename = get_pkg_data_filename( ... os.path.join('data', 'hst_acs_hrc_f555w.fits'), ... package='synphot.tests') You could parameterize a given filter using :func:`~synphot.filter_parameterization.filter_to_fft` as follows. By default, 10 FFT parameters are returned as complex numbers:: >>> from synphot import SpectralElement >>> from synphot.filter_parameterization import filter_to_fft >>> filename = 'hst_acs_hrc_f555w.fits' # doctest: +SKIP >>> bp = SpectralElement.from_file(filename) >>> n_lambda, lambda_0, delta_lambda, tr_max, fft_pars = filter_to_fft(bp) >>> n_lambda # Number of elements in wavelengths 10000 >>> lambda_0 # Starting value of wavelengths # doctest: +FLOAT_CMP >>> delta_lambda # Median wavelength separation # doctest: +FLOAT_CMP >>> tr_max # Peak value of throughput # doctest: +FLOAT_CMP >>> fft_pars # FFT parameters # doctest: +ELLIPSIS [(407.51803...), (-78.52240...), ...] It is up to you to decide how to store this data, though storing it in a table format is recommended. In fact, if you have many filters to parameterize, :func:`~synphot.filter_parameterization.filters_to_fft_table` will store the results in a table for you:: >>> from synphot.filter_parameterization import filters_to_fft_table >>> mapping = {'HST/ACS/HRC/F555W': (bp, None)} >>> filter_pars_table = filters_to_fft_table(mapping) >>> filter_pars_table # doctest: +ELLIPSIS filter n_lambda ... ... str17 int... ... ----------------- -------- ... HST/ACS/HRC/F555W 10000 ... (38.635...-13.028...j) >>> filter_pars_table.write('my_filter_pars.fits') # doctest: +SKIP .. _filter_fft_construction: Reconstructing Filter from FFT ------------------------------ Once you have a parameterized filter (see :ref:`filter_fft_generation`), you can reconstruct it for use using :func:`~synphot.filter_parameterization.filter_from_fft`. Following from the example above:: >>> from synphot.filter_parameterization import filter_from_fft >>> reconstructed_bp = filter_from_fft( ... n_lambda, lambda_0, delta_lambda, tr_max, fft_pars) For this particular example using HST ACS/HRC F555W filter, perhaps 10 parameters are not quite sufficient. Therefore, caution needs to be exercised if you opt to parameterize your filters using this method. .. plot:: import os import matplotlib.pyplot as plt from astropy.utils.data import get_pkg_data_filename from synphot import SpectralElement from synphot.filter_parameterization import filter_to_fft, filter_from_fft filename = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests') bp = SpectralElement.from_file(filename) fit_result = filter_to_fft(bp) reconstructed_bp = filter_from_fft(*fit_result) w = bp.waveset plt.plot(w, bp(w), 'b-', label='Original') plt.plot(w, reconstructed_bp(w), 'r--', label='Reconstructed') plt.xlim(3500, 8000) plt.xlabel('Wavelength (Angstrom)') plt.ylabel('Throughput') plt.title('HST ACS/HRC F555W') plt.legend(loc='upper right', numpoints=1) spacetelescope-synphot_refactor-c682dc1/docs/synphot/formulae.rst000066400000000000000000000254371511632712700255340ustar00rootroot00000000000000.. _synphot_formulae: Photometric Properties ====================== In here, we describe bandpass and spectral photometric properties that can be calculated using **synphot**, along with their respective formulae. More information can also be found in :ref:`Koornneef et al. (1986) `, :ref:`bandpass-main`, and :ref:`synphot_observation`. These are some common variables mentioned in the formulae in this section: =================== ================================= Variable Description =================== ================================= :math:`F_{\lambda}` Source flux distribution :math:`P_{\lambda}` Dimensionless bandpass throughput *a* Telescope collecting area *h* The Planck constant *c* The speed of light =================== ================================= The examples in this section uses bandpass from ACS/HRC F555W (from package test data) with some given bins and observation from that bandpass convolved with a blackbody:: >>> import os >>> from astropy.utils.data import get_pkg_data_filename >>> from synphot import Observation, SourceSpectrum, SpectralElement, units >>> from synphot.models import BlackBodyNorm1D >>> area = 45238.93416 * units.AREA # HST >>> sp = SourceSpectrum(BlackBodyNorm1D, temperature=5000) >>> bp = SpectralElement.from_file(get_pkg_data_filename( ... os.path.join('data', 'hst_acs_hrc_f555w.fits'), ... package='synphot.tests')) >>> binset = range(1000, 11001) >>> obs = Observation(sp, bp, binset=binset) # doctest: +IGNORE_WARNINGS .. _synphot-formula-avgwv: Bandpass Average Wavelength --------------------------- For a bandpass, :meth:`~synphot.spectrum.BaseSpectrum.avgwave` implements the equation for :math:`\lambda_{0}` as defined in :ref:`Koornneef et al. 1986 ` (page 836). It is equivalent to IRAF SYNPHOT ``bandpar`` results for ``avglam``, ``avgmw``, or ``refwave``; The throughput at this wavelength is :meth:`~synphot.spectrum.SpectralElement.tlambda`. .. math:: \lambda_{0} = \frac{\int \; P_{\lambda} \; \lambda \; d\lambda }{\int \; P_{\lambda} \; d\lambda} Example:: >>> bp.avgwave() # doctest: +FLOAT_CMP >>> bp.tlambda() # doctest: +FLOAT_CMP .. _synphot-formula-tpeak: Bandpass Peak Throughput ------------------------ For a bandpass, :meth:`~synphot.spectrum.SpectralElement.tpeak` implements the bandpass peak throughput. It is equivalent to IRAF SYNPHOT ``bandpar`` result for ``tpeak``; The wavelength at this throughput is :meth:`~synphot.spectrum.SpectralElement.wpeak` (only first match is returned if peak value is not unique). Example:: >>> bp.tpeak() # doctest: +FLOAT_CMP >>> bp.wpeak() # doctest: +FLOAT_CMP .. _synphot-formula-qtlam: Bandpass Dimensionless Efficiency --------------------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.efficiency` implements the dimensionless efficiency. It is equivalent to IRAF SYNPHOT ``bandpar`` result for ``qtlam``. .. math:: \text{qtlam} = \int \frac{P_{\lambda}}{\lambda} d\lambda Example:: >>> bp.efficiency() # doctest: +FLOAT_CMP .. _synphot-formula-equvw: Bandpass Equivalent Width ------------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.equivwidth` implements the equivalent width. It gives the same value as :meth:`~synphot.spectrum.BaseSpectrum.integrate` and is equivalent to IRAF SYNPHOT ``bandpar`` result for ``equvw``. .. math:: \text{equvw} = \int P_{\lambda} d\lambda Example:: >>> bp.equivwidth() # doctest: +FLOAT_CMP >>> bp.integrate() # doctest: +FLOAT_CMP .. _synphot-formula-rectw: Bandpass Rectangular Width -------------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.rectwidth` implements the rectangular width. It is equivalent to IRAF SYNPHOT ``bandpar`` result for ``rectw``. The ``equvw`` in the formula below is :ref:`synphot-formula-equvw`. .. math:: \text{rectw} = \frac{\text{equvw}}{\text{MAX}(P_{\lambda})} Example:: >>> bp.rectwidth() # doctest: +FLOAT_CMP .. _synphot-formula-rmswidth: Bandpass RMS Band Width (Koornneef) ----------------------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.rmswidth` implements the bandpass RMS width as defined in :ref:`Koornneef et al. 1986 ` (page 836), where :math:`\lambda_{0}` is the :ref:`synphot-formula-avgwv`. .. math:: \lambda_{\text{rms}} = \sqrt{\frac{\int \; P_{\lambda} \; (\lambda - \lambda_{0})^{2} \; d\lambda}{\int \; P_{\lambda} \: d\lambda}} Example:: >>> bp.rmswidth() # doctest: +FLOAT_CMP .. _synphot-formula-bandw: Bandpass RMS Band Width (IRAF) ------------------------------ For a bandpass, :meth:`~synphot.spectrum.SpectralElement.photbw` implements the equivalent for ``bandw`` from IRAF SYNPHOT ``bandpar`` task, where :math:`\bar{\lambda}` is :ref:`synphot-formula-barlam`. This is not the same as :ref:`synphot-formula-rmswidth`. .. math:: \text{bandw} = \bar{\lambda} \; \sqrt{\frac{\int \; (P_{\lambda} / \lambda) \; \ln(\lambda \; / \; \bar{\lambda})^{2} \; d\lambda}{\int \; (P_{\lambda} / \lambda) \; d\lambda}} Example:: >>> bp.photbw() # doctest: +FLOAT_CMP .. _synphot-formula-fwhm: FWHM ---- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.fwhm` implements the equivalent for ``fwhm`` from IRAF SYNPHOT ``bandpar`` task, where ``bandw`` is :ref:`synphot-formula-bandw`. .. math:: \text{fwhm} = \text{bandw} \; \sqrt{8 \; \log 2} Example:: >>> bp.fwhm() # doctest: +FLOAT_CMP .. _synphot-formula-barlam: Bandpass Mean Log Wavelength ---------------------------- For a bandpass, :meth:`~synphot.spectrum.BaseSpectrum.barlam` implements the mean wavelength as defined in :ref:`Schneider, Gunn, and Hoessel (1983) `. This rather unusual definition is such that the corresponding mean frequency is :math:`c / \bar{\lambda}`. It is equivalent to IRAF SYNPHOT ``bandpar`` results for ``barlam``. .. math:: \bar{\lambda} = \exp\Bigg[\frac{\int \; (P_{\lambda} / \lambda) \; \ln(\lambda) \; d\lambda}{\int (P_{\lambda} / \lambda) \; d\lambda}\Bigg] Example:: >>> bp.barlam() # doctest: +FLOAT_CMP .. _synphot-formula-uresp: Bandpass Unit Response ---------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.unit_response` implements the computation of the flux of a star that produces a response of one count per second in that bandpass for a given telescope collecting area. It is equivalent to IRAF SYNPHOT ``bandpar`` result for ``uresp``. .. math:: \text{uresp} = \frac{hc}{a \int P_{\lambda}\; \lambda\; d\lambda} Example:: >>> bp.unit_response(area) # doctest: +FLOAT_CMP .. _synphot-formula-emflx: Bandpass Equivalent Monochromatic Flux -------------------------------------- For a bandpass, :meth:`~synphot.spectrum.SpectralElement.emflx` implements the equivalent monochromatic flux for a given telescope collecting area. It is equivalent to IRAF SYNPHOT ``bandpar`` result for ``emflx``. In the formula below, ``uresp``, ``equvw``, and :math:`\lambda_{0}` are :ref:`synphot-formula-uresp`, :ref:`synphot-formula-equvw`, and :ref:`synphot-formula-avgwv`, respectively. .. math:: \text{emflx} = \frac{\text{uresp} \times \text{equvw}}{P(\lambda_{0})} Example:: >>> bp.emflx(area) # doctest: +FLOAT_CMP .. _synphot-formula-effstim: Effective Stimulus ------------------ For an observation, :meth:`~synphot.observation.Observation.effstim` calculates the predicted effective stimulus in given flux unit. :meth:`~synphot.observation.Observation.countrate` is a special form of effective stimulus in the unit of count/s given a telescope collecting area. It is equivalent to IRAF SYNPHOT ``calcphot`` result for ``effstim``. The default binning behavior is to be consistent with ASTROLIB PYSYNPHOT. .. math:: \text{effstim} = \frac{\int\; F_{\lambda}\; P_{\lambda}\; \lambda\; d\lambda}{\int\; P_{\lambda}\; \lambda\; d\lambda} Example:: >>> obs.effstim() # doctest: +FLOAT_CMP >>> obs.effstim('flam') # doctest: +FLOAT_CMP >>> obs.effstim('count', area=area) # Not binned # doctest: +FLOAT_CMP >>> obs.countrate(area=area, binned=False) # doctest: +FLOAT_CMP >>> obs.countrate(area=area) # Binned # doctest: +FLOAT_CMP .. _synphot-formula-effwave: Effective Wavelength -------------------- For an observation, :meth:`~synphot.observation.Observation.effective_wavelength` implements the effective wavelength, as defined in :ref:`Koornneef et al. 1986 ` (page 836), where flux unit is converted to FLAM prior to calculations. It is equivalent to IRAF SYNPHOT ``calcphot`` result for ``efflerg``. For backward compatibility, there is also an option (``mode='efflphot'``) to calculate this using flux in PHOTLAM, which is equivalent to IRAF SYNPHOT ``calcphot`` result for ``efflphot``. The default binning behavior is to be consistent with ASTROLIB PYSYNPHOT. .. math:: \lambda_{\text{eff}} = \frac{\int \; F_{\lambda} \; P_{\lambda} \; \lambda^2 \; d\lambda}{\int \; F_{\lambda} \; P_{\lambda} \; \lambda \; d\lambda} Example:: >>> obs.effective_wavelength() # Binned # doctest: +FLOAT_CMP >>> obs.effective_wavelength(mode='efflphot') # Deprecated # doctest: +SKIP WARNING: AstropyDeprecationWarning: Usage of EFFLPHOT is deprecated. [...] .. _synphot-formula-pivwv: Pivot Wavelength ---------------- For a bandpass or a source spectrum, :meth:`~synphot.spectrum.BaseSpectrum.pivot` calculates the pivot wavelength. It is equivalent to IRAF SYNPHOT result for ``pivwv`` and ``pivot``. The formula shown applies to a bandpass. For a source, replace :math:`P_{\lambda}` with :math:`F_{\lambda}` below. .. math:: \lambda_{\text{pivot}} = \sqrt{\frac{\int \: P_{\lambda} \; \lambda \; d\lambda}{\int(P_{\lambda} \; / \; \lambda) \; d\lambda}} Example:: >>> bp.pivot() # doctest: +FLOAT_CMP >>> obs.pivot() # Not binned # doctest: +FLOAT_CMP spacetelescope-synphot_refactor-c682dc1/docs/synphot/from_pysyn_iraf.rst000066400000000000000000000434661511632712700271320ustar00rootroot00000000000000.. _synphot-switcher: Switching from Legacy Software ============================== This section provides basic switcher's guide for those who are familar with ASTROLIB PYSYNPHOT or IRAF SYNPHOT. This guide is not meant to be all-inclusive; Therefore, not all legacy commands are listed here. This is because a legacy command can be reproduced in several different ways using **synphot** or has no equivalent implementation. Naming convention used is the same as :ref:`synphot-quick-guide`. Please contact `STScI Help Desk `_ if you have any questions. .. _synphot-pysyn-switcher: ASTROLIB Switcher Guide ----------------------- Bandpass ^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |ASTROLIB PYSYNPHOT | +======================================+======================================+ |SpectralElement.from_file(filename) |FileBandpass(filename) | +--------------------------------------+--------------------------------------+ |SpectralElement.from_filter(filter) |ObsBandpass(filter) | +--------------------------------------+--------------------------------------+ |SpectralElement(Empirical1D, |ArrayBandpass(wavelength=wave, | |points=wave, lookup_table=thru) |throughput=thru) | +--------------------------------------+--------------------------------------+ |SpectralElement(Box1D, amplitude=1, |Box(mu, width) | |x_0=mu, width=width) | | +--------------------------------------+--------------------------------------+ |bp.waveset |bp.wave | +--------------------------------------+--------------------------------------+ |bp(bp.waveset) |bp.throughput | +--------------------------------------+--------------------------------------+ |bp.taper() |bp.taper() | +--------------------------------------+--------------------------------------+ |bp.avgwave() |bp.avgwave() | +--------------------------------------+--------------------------------------+ |bp.tlambda() |bp(bp.avgwave()) | +--------------------------------------+--------------------------------------+ |bp.tpeak() |bp.throughput.max() | +--------------------------------------+--------------------------------------+ |bp.wpeak() |bp.wave[bp.throughput == | | |bp.throughput.max()] | +--------------------------------------+--------------------------------------+ |bp.efficiency() |bp.efficiency() | +--------------------------------------+--------------------------------------+ |bp.equivwidth() |bp.equivwidth() | +--------------------------------------+--------------------------------------+ |bp.rectwidth() |bp.rectwidth() | +--------------------------------------+--------------------------------------+ |bp.rmswidth() |bp.rmswidth() | +--------------------------------------+--------------------------------------+ |bp.photbw() |bp.photbw() | +--------------------------------------+--------------------------------------+ |bp.pivot() |bp.pivot() | +--------------------------------------+--------------------------------------+ |bp.unit_response(area) |bp.unit_response() | +--------------------------------------+--------------------------------------+ |bp.emflx(area) |bp.unit_response() * bp.equivwidth() /| | |bp(bp.avgwave()) | +--------------------------------------+--------------------------------------+ |bp.check_overlap(sp) |bp.check_overlap(sp) | +--------------------------------------+--------------------------------------+ |bp.to_fits(filename) |bp.writefits(filename) | +--------------------------------------+--------------------------------------+ |bp.plot() |matplotlib.pyplot.plot(bp.wave, | | |bp.throughput) | +--------------------------------------+--------------------------------------+ Source Spectrum ^^^^^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |ASTROLIB PYSYNPHOT | +======================================+======================================+ |SourceSpectrum.from_file(filename) |FileSpectrum(filename) | +--------------------------------------+--------------------------------------+ |SourceSpectrum.from_vega() |Vega | +--------------------------------------+--------------------------------------+ |SourceSpectrum(Empirical1D, |ArraySpectrum(wave=wave, flux=flux) | |points=wave, lookup_table=flux) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(BlackBodyNorm1D, |BlackBody(teff) | |temperature=teff) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(ConstFlux1D, |FlatSpectrum(val, fluxunits=form) | |amplitude=val*form) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(PowerLawFlux1D, |Powerlaw(refval, expon, | |amplitude=1*form, x_0=refval, |fluxunits=form) | |alpha=expon) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(GaussianFlux1D, mean=mu|GaussianSource(flux, mu, fwhm, | |, fwhm=fwhm, total_flux=flux) |fluxunits=form) | +--------------------------------------+--------------------------------------+ |sp.waveset |sp.wave | +--------------------------------------+--------------------------------------+ |sp(sp.waveset) |sp.flux | +--------------------------------------+--------------------------------------+ |sp.taper() |sp.taper() | +--------------------------------------+--------------------------------------+ |sp.normalize(val*form, band=bp) |sp.renorm(val, form, bp) | +--------------------------------------+--------------------------------------+ |sp * extcurve |sp * extcurve | +--------------------------------------+--------------------------------------+ |SourceSpectrum(sp.model, z=z) |sp.redshift(z) | +--------------------------------------+--------------------------------------+ |sp.to_fits(filename) |sp.writefits(filename) | +--------------------------------------+--------------------------------------+ |sp.plot() |matplotlib.pyplot.plot(sp.wave, | | |sp.flux) | +--------------------------------------+--------------------------------------+ Observation ^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |ASTROLIB PYSYNPHOT | +======================================+======================================+ |Observation(sp, bp, binset=binset) |Observation(sp, bp, binset=binset) | +--------------------------------------+--------------------------------------+ |obs.waveset |obs.wave | +--------------------------------------+--------------------------------------+ |obs(obs.waveset) |obs.flux | +--------------------------------------+--------------------------------------+ |obs.binset |obs.binwave | +--------------------------------------+--------------------------------------+ |obs.binflux |obs.binflux | +--------------------------------------+--------------------------------------+ |obs(wave) |obs.sample(wave, binned=False) | +--------------------------------------+--------------------------------------+ |obs.sample_binned(wave) |obs.sample(wave) | +--------------------------------------+--------------------------------------+ |obs.effective_wavelength() |obs.efflam() | +--------------------------------------+--------------------------------------+ |obs.effstim(flux_unit=form) |obs.effstim(form) | +--------------------------------------+--------------------------------------+ |obs.countrate(area) |obs.countrate() | +--------------------------------------+--------------------------------------+ |obs.as_spectrum() |obs.as_spectrum() | +--------------------------------------+--------------------------------------+ |obs.as_spectrum().to_fits(filename) |obs.writefits(filename) | +--------------------------------------+--------------------------------------+ |obs.plot() |matplotlib.pyplot.plot(obs.binwave, | | |obs.binflux) | +--------------------------------------+--------------------------------------+ |obs.plot(binned=False) |matplotlib.pyplot.plot(obs.wave, | | |obs.flux) | +--------------------------------------+--------------------------------------+ Miscellaneous ^^^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |ASTROLIB PYSYNPHOT | +======================================+======================================+ |ReddeningLaw.from_extinction_model(law|Extinction(val, law) | |).extinction_curve(val) | | +--------------------------------------+--------------------------------------+ |generate_wavelengths(minwave=w1, |Waveset(w1, w2, dw) | |maxwave=w2, delta=dw) | | +--------------------------------------+--------------------------------------+ .. _synphot-iraf-switcher: IRAF Switcher Guide ------------------- Bandpass ^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |IRAF SYNPHOT | +======================================+======================================+ |SpectralElement.from_file(filename) |thru(filename) | +--------------------------------------+--------------------------------------+ |SpectralElement.from_filter(filter) |band(filter) | +--------------------------------------+--------------------------------------+ |SpectralElement(Box1D, amplitude=1, |box(mu, width) | |x_0=mu, width=width) | | +--------------------------------------+--------------------------------------+ |bp.avgwave() |bandpar bp photlist=avglam | +--------------------------------------+--------------------------------------+ |bp.tlambda() |bandpar bp photlist=tlambda | +--------------------------------------+--------------------------------------+ |bp.tpeak() |bandpar bp photlist=tpeak | +--------------------------------------+--------------------------------------+ |bp.wpeak() |bandpar bp photlist=wpeak | +--------------------------------------+--------------------------------------+ |bp.efficiency() |bandpar bp photlist=qtlam | +--------------------------------------+--------------------------------------+ |bp.equivwidth() |bandpar bp photlist=equvw | +--------------------------------------+--------------------------------------+ |bp.rectwidth() |bandpar bp photlist=rectw | +--------------------------------------+--------------------------------------+ |bp.photbw() |bandpar bp photlist=bandw | +--------------------------------------+--------------------------------------+ |bp.fwhm() |bandpar bp photlist=fwhm | +--------------------------------------+--------------------------------------+ |bp.pivot() |bandpar bp photlist=pivwv | +--------------------------------------+--------------------------------------+ |bp.unit_response(area) |bandpar bp photlist=uresp | +--------------------------------------+--------------------------------------+ |bp.emflx(area) |bandpar bp photlist=emflx | +--------------------------------------+--------------------------------------+ |bp.to_fits(filename) |calcband bp filename | +--------------------------------------+--------------------------------------+ |bp.plot() |plband bp | +--------------------------------------+--------------------------------------+ Source Spectrum ^^^^^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |IRAF SYNPHOT | +======================================+======================================+ |SourceSpectrum.from_file(filename) |spec(filename) | +--------------------------------------+--------------------------------------+ |SourceSpectrum(BlackBodyNorm1D, |bb(teff) | |temperature=teff) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(ConstFlux1D, |unit(val, form) | |amplitude=val*form) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(PowerLawFlux1D, |pl(refval, expon, form) | |amplitude=1*form, x_0=refval, | | |alpha=expon) | | +--------------------------------------+--------------------------------------+ |SourceSpectrum(GaussianFlux1D, mean=mu|em(mu, fwhm, flux, form) | |, fwhm=fwhm, total_flux=flux) | | +--------------------------------------+--------------------------------------+ |sp.normalize(val*form, band=bp) |rn(sp, bp, val, form) | +--------------------------------------+--------------------------------------+ |SourceSpectrum(sp.model, z=z) |z(sp, z) | +--------------------------------------+--------------------------------------+ |sp.to_fits(filename) |calcspec sp filename | +--------------------------------------+--------------------------------------+ Observation ^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |IRAF SYNPHOT | +======================================+======================================+ |obs.effective_wavelength() |calcphot bp sp flam func='efflerg' | +--------------------------------------+--------------------------------------+ |obs.effstim(flux_unit=form) |calcphot bp sp form | +--------------------------------------+--------------------------------------+ |obs.countrate(area) |calcphot bp sp counts | +--------------------------------------+--------------------------------------+ |obs.plot(flux_unit=form) |plspec bp sp form | +--------------------------------------+--------------------------------------+ Miscellaneous ^^^^^^^^^^^^^ +--------------------------------------+--------------------------------------+ |**synphot** |IRAF SYNPHOT | +======================================+======================================+ |ReddeningLaw.from_extinction_model(law|ebmvx(val, law) | |).extinction_curve(val) | | +--------------------------------------+--------------------------------------+ |generate_wavelengths(minwave=w1, |genwave filename w1 w2 dw | |maxwave=w2, delta=dw) | | +--------------------------------------+--------------------------------------+ spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/000077500000000000000000000000001511632712700244225ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/VegaPhotomSys.png000066400000000000000000004254461511632712700277170ustar00rootroot00000000000000PNG  IHDR;/iCCPICC Profile(c``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo% pHYsgR@IDATx|' ܊k[ܥh B(N xpw P܋C]w$$wo$ny3VB      fBLƁa$EYjVg@@@@@@@Q5ہ@Q3      `V`@@@@@@0+PTv`0      PT (fu;0(x@@@@@@̊Y0 sНekkKmڶ9sÇ_ ˕;k^{l;_~S<͛7Ai+1ؔW^ќ^tҙRNݡHuZ%JDz}H\*  #A@N9y~_9^sٳ:q&8qbrK;t-YXg*V"E|2lċ1ڋ"˖5kU;^(  @<&K„ iAԾCGEժWiҦΟgJ*)V0^ˇxڇz?V;EמWk   -F .MRJr>+W(QR(|2gdcU\~Uښ֫'@Su   1A՘6@@ Vv۷oηoLT+$#4JF,ufA@̓@pW-#սA2dHt]ԫGJ>=8|H[޹p:x=JWSV]WZRX"}ߟ~Wjۮ-=y-XHԧf͛+ՉԮ^|||'$IBףIem(9rƌE_ETdggG-[3$rpQ5 g4jHk^Gti  ,Y2kTB3e28ˀU{%HWj֬I.ܹs\{ѻwd1'N"~*WLTj>|/CԲ/_RQ{Ы{q<lCBڽ{7={L'˖5jPBdt׮]}%M4TtQr,rGgΜy}tjUޞv _d͚Eߙj4iRYOK$cE>s\SyA#gܙ߿O5jդuS4lPz)}YLgH4idY߿'yc2lM6r[ڽwUܱ MweKegi3fsݧ˒Q=jݚ;F'Osϖ-|*g˗/}߷ފg*xJ|y*Ql@@>3 0H(9o#Y~VqSnӆf 'I”s+SOw߀?./.\(,U?|@rPpaZbT^lϝG=<"uɰéI:uY9bNP\ e1y:8PUm۵Ή &R:uѱǨZ[tN}Z4mF֐dϑVJVǏ U S0'#QpyֹņK~+m޲WPS!CZf5MN{g Tn]5CBY>-Spj̨}VX}\W+jI.myt ԸaC ]J紩r~Y/xr9ǩMS'vLL~_R}. @b\c03'PUXqQYy9tPcEU+6mܨURy&[Xe13lOnbJ*G /W VLaڵC-n͍mX/Xid]i߱mN;4Qٙ֬[Ga!ף(rިqcp-YJ.-cն[ƍA,?8x6XՀӑÇy$c if3T + ۴*9rV3gC9dU|wmZ;h`9C(4~XbK|tklݝV[+Y5rFR|VK̙iZt {GQk)VK.۶uKxhǍQ͝URYdq_RTxҦe+ilѲPc?`gvrY hr "|'O\s PX٢[Xׇ TZO_^,7S$4ql g E8]{̜=,[[wb`t\&c@LET_ S2ac_V؍pe-H  3PvU*?.\}\{[U̲rGn;#G>-eYXATW9vquwllcٶM6:QV.Cׯ_^ q X…d[n,\@'үpV;7.YJrRMnYgen}>ղժE iU4aVb+(+iKva͙3MYf*Q$5/]zU"XvW^Mɒ%ӎktuzptM嶣#SxB7ʛ7/15UJX$YͶHѢr2n.rtyAYžċ?e}% 66U:vD]?3VrKRVh}%]t4}4ϮEįyȺ-{6s)RآH7bk/iMʒ%3W.m]N v6$p"E k.ʡWn,̕WvwggݙO7]|Y,A@ եRJr$z3O5}\,2^?wmm,Vg`P7a&* Am[k7riHeJF-5!k]G_|$Z/Η?NP"_Ҭcu|tS2jF+[r\Ji7źb}"2(|̊{~+X_lH2fʨUR ާȌCNۥ[7i5 ukR:usU9}eky7lDzj/SI%iEI lWz\G|",gW^3/u9;r?Zh)\3nZFXK GNYR/Z%U)S*ma  ?J  {7/ E]. /W9浍ŝg͖7R+/W>fwKUl<*+f́8MU}Ml+_nCe/HkvR}}7%ZJz'/ 43y=YQ+P=Vy"f@D`-Z{Q-)VXq}:/'%yr+7C9Z8P[XMWgxfs)rBƊt_)u-LF_ѵJ؂X1%sDYvCdupH_8"ͅjV-C-[jՊ'[kXAbWV 1[x] k'm*Ši![guv#s82QGT[-w$_"[+8Qy?vl 8[YXg?W9qzSN ԬEsp9s4² HX' %݅9Hȱոxocؽk|Nc֫˗./kxm,7g;j׮@`G1ݼqSFf}N?WN9e \Bu|Ob \9"l9/;xlf+z5@IJgIe^Y]*B2shF$T).Ü#<|H݅5LF)f˖MdeN"}͋/R5wbs/v5:xpY22K(Cc*}NQx"z#*z>~Hɓ'O}4kwҨ/N:XXVXVj9*++2Ɗ+jak#-k@Y I"EUԧo߾ 뢏LuWʿѭ6Ms)XYp46b<>ǮEN/[0? "IZX[./b+۶nZ q&=J9ٷg/zJZO,~eH–_~E4dcKIEe7"g)i}V-u֣&c{7B0ysժª|RZ ^inbR-t=hڌKXUYȒ5tUҪS{4\X9n4={V*l5MpekEM?3~VJI%9t뮕sʖF 8(|9J2[[CŨPVSe[Ll!SgZXe/b>E*>ߊF! om/}9jed8P'_@\'0hh#!O9-4+ QohQ6n$%%etNK]QK+.rcwAO ˆ?pgpCȍ6Xm"1d&N,oH5"h͚bmZUVfeb o79q!JL+MaS;k7hA:9pV+W*oTAM2Td!AAXc @@"Kb,;}}w/W!@N]XyUtQvb󖭤ϫ6UsJυ!PgnSHclYsa@)Zz v,wEPbL&jXz.>~H%kcOI*O L0QZoDg&7-+k:u>t  `<4zO;rR 8y%eʬ qAǭwڽG:#IqFN~"Z [\9%5$|J,)n8Euei*!G..݇!e!~@!k-]"R[nT~XI :cD*~פ1xSQR{w^f͛Lyc >8Tyd?G!  EXT-ruwR?HYBב9No5oNC W` -K&e=( D _p?tщS ɛ4l$Cu-yeQ`ٲmk %~@!Q\o Q~ ,h4.BYHwDM+95>(t%^MK XYYSB1  EQUa$~rnԩR|tl}/.Vݶ};>TQ&/#'(¹u9Z`reezŇ-[f$wO&P-+W*Vhs'.}:3aJc_aA _XpP")ZT=ѫg̮g֖%EuSœssB+yXٔ""%JTv[ۚPB\DqU\si1i      E(l\""?t(l9?w(VǏK +Wp8I_0(W.]8MBaˢly_}Y83ZXsA@@@@@ ~EoGnL6{$ן֨Z&{xȵWkԬ)PHJ:,Iy}S-pRz}*+暷!rylٕ-+)Si܃U[;      XU~n:Zp=@)&NJH^TO^0ې Y`e#R);4rR>ݽw7np@@@@@  "և+CE`٦"bՠ םHS5nzTH0SJ-{v_uh$NNTdիW2:O x0TANDsSRy zpv_aEspZCZnx[vMt*KbcӨ^-FQ8I*ޯ4j($=|Pf̘2iӥgO퐵꺼%o|2 \oI-B4q də3/>ߤ#J&e),ju$aY_Gց͛I 3@c'֯_Gf̤U!C~9\w&9z+X oP?k&>#MZ#2x0Y[sߌ-&+ndɒG\f PiY2}l1,Q>u-BQk׮FEËsN>%#mF>~"NAڛClIN}E䉓ھs(3ey* 1_X@$ama%W U" `k3`(38 x$i=Z=+iEdzW4:%u 03&MZT%W,_q)&oΞ9#M;hjբ%@'z.[SY!`E,Jf֭Lu9z@K_b}o߾ѱGy D fQ˗t%mVnKN%@*DcGY9E4sׯ_bB@#E͓Oa5Z. 2kJ&URE/_л!%MTαKÆ?$v(hO8L/WWkUyMuxס@ r%JD-[\e~ yeʖFb0B+Q525~۫/Od6mڴQDM*U      :c ߼gSK'Eҟ g  slCC12Z&ߖe?}P>ϯ7k nѫ;wE`;wrQRm ZiMNNNTRXhMϫ͚6,B j DSIj?%DD$f5` 1Kc >,fk7Ss$E      L|L@@@@@̑Us+X0(|1u0GPT`L      `ZA@@@@@ @Q5ǻ1j7Ss$E      L|L@@@@@̑Us+` iW0k/\ bkN'ysyNLw6 =:!s=s&_ښ&o}p5:rt     C㇏4u'9WLkVJjhU[S,>A@@@@@hU奵.\sŊttPTMѳO v @@@@@\r<&N-H:uZCE5^FL@@@@@ >yNB;vȩrf4f'OE5^NL@@@@@ x͚1֭]Kĩf]z 2ķ@Q>}D. ϟt׍~嗸>E5B<8      %/lE}@ݝJ,a7(&nA@@@@@@MSS^y*k͍֬V[ ;|9TRT3 \\6˛?U crΉSM۶&Ltn&P5      >x@S==glΎ4mB]v)R@R(>b     qWklZz5q$?zM3f303z`^fɢŴp3,eʔ!7k<LԡRa~z5c|R/_>ϝJ.;yNߝ9y2ݻwO#s"LV:YYYtl9UsC@"p jr)SݻQF&AO|kDtaY7q2Lvm!'E5P@@@@@x!M:mJdkkK7nݻSH5X$ F>7o//Zb6LZȵ+eQ!'E5p% -]ϛG>jR͔77o޼H$ E5晢E߻OJoQ8 h yjܘjL @@@@ԡ]{fei`Fߟ]D)tY9cLŗ]}jZjT>X8*sg[RE-ӧNǤItE9)Snݨq&eM6 jl@@@@0sў{30~<]^{_vn޼I'yС̴m׎4vPT``     `~^D߿FV^=yD޼YjƥQCj&UThDP|/Zdp+*]9pZ?F?~ZkHuU\9N¾}͙K+/'???yYևdoh}f7o Sf(ƠlF}:ax#\&Q    L uaFz*zpV[9@_~KѼsÇr%K|=i#Dͼ=;;;^Q˟JA2(`gN&I)wH=hfo3y͚E%R>./o޸ONϟ=_{_*[<_?N06 (&nxDI&Kn\N44}\?eʔR)!=vwIjŊ'~-FĊHj:wsSSd^͛iiTp >}݈oH#E53@@@@@ h$u,I>=tEԑA*n7F     M 1i9}ZrH4)uҙ7oA j&?PTA@@@@ QΝDL4dPG%<-g AjѪ%uԉA#4#9 @@@@0ׯ_ӱ ?FӦ0kK$˙)Ƹq nuף"wkt j @@@@@ H.-%N>}D:9^(Q"idb[JMJʑ3Y91Z+tMZ>h%TbE%EЪ5B %,nS jE     c.^@W͛6XC\+EԲyszu8W~qpp0mB՝Ҹc۷BAw5Thz09(&@| 'LQp@Lسg=zƏG߿&uȕ+<_eΜY_z7kFϞ=өk#S?kS?ww94i1chU!Er5f ߽Jto@?b8]>I, M1{A9wќ^1>\5ǏiUrɝԬISzAi˗.Q+VCtuJ$XڗvC PfIIBɓj+N'iae\vnݺ}eCqL q%KXIlԦBYe5׵g/r߀NUԶ];ڳuԑ&L[]]3'Eogݿop_6XB, h,yrSDHK+\k9({#H ]Y fMҵW#^d+|F N5Vā֫G_ٶP/~?+fe$bq!3]    #UN秮ݺf|˗0̕K5=r޼y`]8AΞ9^z=v1>m9WLW ʗ->h܄>}4F !DlM+:xB @1$I_U`†N @@@"$΀J ׸IZT wI'h ӷ(6zY.-ZXOSNM.](SִhLZu9[[[عwZ=Ok׬!Vr_D.X A(Z{fGTkTݣ% [TyEPD+7l!yCw+]syf>ǵ7:u+W&;{;:!'N.͕[cQ=<11ЁZiCO>:I߾}J*VQiP[hwlNSC ZlII&둺R?WcD:~<:88e ^eAQfMu,kA@!EU!-D@xQ)'qi*Ee\    ?wN*}ǎԸIcm$Cs![k1Jj̙)eT5{6YBG?+e̘1" @QUӰ} 9EUzx}颲-piP҄ 3Ǐ_dw0o.1|,ZL ,\L2Է{-U B\Tyɓ'dɒ2؛f`)tM$N,@$Ά!666TX1CVnժW P#0sڜӬ3˗r jҥ6vt @QW;;GGGAiv]K.Cp D1EdA@@@@$O\}aI'ӽ{5&̩f-w"1NU4UU8E 6~c,30ȏKM 3HDL=\7 מ=wI4dPھWnc7ՈK;kmcM`|t![4Ex}DClC@ߢ*1$rY~8    `L7DIt&+mmۮioy#b˗.-/)3FUcP6>XIeawT;tFV:ub}90#~5ҤLAT597GC&U=N3}4ںehkkK7ݻ[S!l/ڿoYM Yݎ=5mތV\E߾}N ɓJjn~ՏDSQT>FUT0~(XK AĉnZ_6]X+2}eI5SfMrݛ2g&P'pFy lM_Gׯ]/c(ؼ: 9s왳4b(上m ξY|%9^ms' Got \\ȵOuseJ䩓Ҋm7?d~J˖,ysJo0GH șnpO?j c@MraCW@IDATŋchc՚_>ɮ//@@@ ]6tBz/_e(S٫WL֭[4h@ ^FҦiƴs9_Jn}ݩL212g4!ѡO9f|Sx1w<qQz &R[#|2&IDz\e.h1!GF \11uԑ|t]( Wi1B #uY7oSӧO5s&7#*j.w -5{66\y+CA`J:`?4R>j4  Q$<'O+W+95LE˖8ARY͞#9vǭW5o"=Ζ+WQ= dFPz<Ƀ8O+KzaڋxuW(fwKL;.ݺF%]TL;"=XWQT"Z5.'!n>J$^$kH   C2N<);uڴvtr$ܹsP)qx[ǚTx=yH9@@@ K/+//.RDZbgjφn**Uc8OsW[GLX!-Vv V{vdE߾]ezAzjx;,y   I Xh[Pu4nXz-qY^i5ThQY[ (s7.]R>{FUUtO8  xL'(EUkc;k@^*QuJm˗L*0P    9rYӣG(Mڴ4zڶ݇*!C@f8;MH8i"q$9jJTp %M{7k,JP%Sr+J[gOXJ҇/_V-ZRDsۗvC /ɂ _ I~ ݻ6.W|]3L-u믕Ʋ/7o)@-:e|ߟvb ݻG={Kt 9mڶ=G*N0a8fopp*@-opggY)6!IXTŚ=Eu]En8ɵ7NY߿   cxݧ9˗/iTZuKVDzNݺkk@(1ya, E h7~tAṯ0ӳ nƢj@^chET}#kϔN%"%`G]D+WhؐgZ?O^v#R>}D3O'Jiʕ˓4~I掠)NJATkT54"A ]t4tprws3g 㣼;p0̴cQSw4i[T.L1#٦JE-"o.^Rv$кkuj\n%8Ė_S5g֌kuTd c}Eoy ?jի7n}۷o5 ~6uuPh:&(H7[pEɧ4LiϞSAXWt   !`|Z[[$d(g7':}4ڹ;-iv95U]VRfJf̠uCI9h)cX#G3g'АaCՔ; UL~?5Uq._ע3dt8&~` lA@@@[+o޼I׮^/ӌie`a0vf1}9Wu&VdcS>~<&NGvJxMuك 7 `dc/S vdB'́H_T&g'iִRTUQC[`1rV̢[   ϶mTBE_. 8yN TD Wr#g%m>akWR6mMRIM옘z|7i%58Kj:2eP6mdET/^jlnٳ0kN Z8{~ڢY6P/d4w>x yԭ]G样Z}knqX (sc~}ѯy~7P񟾹|!4kr#$d`]P䮵NX =1X@@@wӊeR%hrּ˴v: 鿷oP)_*]Zqҍ6ȵs~tTj5ڶulwN8x0%OBg8Ոli)r䱣hEԎ;UFnKVZAh8Uka SPTU+^Ʊpak ]!   `.^@U*W#Gѳ蝈2zv%{`BԶ};YS&O_7#)D/O,ٳrJl2r2-!'e̔)KQ (.,S|\/2 +l'UڅtZi YT;XNY&Ac2%8uTPӈnj-lҲU+J<,ڷw/?^}ZZN9"S$GE)i@@YZB5>~i/]B /^gyJXK7CSΗ??-XЩ6jDG=w[޴IA/qeE55Ab]8i^*xaEU͗I\oET:+,?5tіa@@,@mPBjֻ_n-mqb|}2.sݕW[?;JfǏ@|vjݚ:vDI¾4k <޽+OgʜzCkZj ]20WK-ys dcYd0@Q5tSw[C!\K93.]Hw3U j-*œɎvVzQ|`H`sJnB\/q"')[v!oU=}J3g̤GHů@"LULE$_WRv7g.5lHGlּ9-^^z%i3?݄9]͛7os.>}Hd.ot&Xwڵ{7jԸ1q$Uל9 #C[`OiӦʍqʚԺEKZn-WV~ "pQPQ gI5,>UVZ}*+FW_EY|]j8xE`5r'K_v Әq|sI֮Mޛ7_pruղ`ivmVӧNK7cb%6*Y'OC6[qz N`rmw(؞b=XbdjdF+(Y$uQ 8ؕ~bш\MCCjhj&Z0;H^YQu09ҿ(>|S̙4@@M7Ұ!C圊+F޽4jHYvՓFK/Ҕ)S:ǏV傂 QgpyC[Ox{uҨ!uޝk\ ]2Kأ2[l`yl"Rl9uJh IxVGFUWZT#PTu ᣄ )Ne(rڊNءS*(UR^Z5=bYF-2d&MȢϟ?KrҥuV:{>;wn/bpeURy,OH-V:mKÆ X"j,fM㔩TtAHS8FU{߆/5dQU֦֨@7$kDBW䉯/Q!   /zT%x3T\n۾"vUBH>}P:^Rs9*_<"[dX\2KRo?w/< `{HjM24tW d̘M/pz2 А؊`F~(U/A૑0Um%0~=J&[I!   \tI;%ZXd-~)<ˋ&QD31&{Ⱥ 9\`oUȶYIe|uePRآ&(&;,oѲ_铧qf>}sʦbQeY-~V`uHjBî|>yZJN  񉀲tqShSE`Hׯbn vF)}OY;x@ۙ("zo"C38>oӱz {9r U\^0%Um!r^VT7X>W]_ןõrIŇ]Jy-MPR[0D-lT?eGe)(ĩe)K"+wίzNee t͛i#G-yrm"#U#|\z5ZiMuՋhXڴQc$j$b?ݿZm%UK; !5x%N2zX97LpQgD_5WY a U#Azz>`J5\\HVV^,9v$v@@@ ܤE ;{MM7QЀkϞԡ]{ljԲU(ϐ݆9}5kѾ{Ն}{[rL6qXQls&z6iT޽=ܬIDYQTC#do++m`JK^&UÆ:z@@LES,]N<!/Qxzj]~_|I7m"巾K(i|d:|Y R԰ci L#G4iD02;y`.~0` ]8]Fnbeˢ!cL,uՋDVhj)U mwFn ~Z޺X(20*˗Ӹ1c(iҤt/D4*δ{3=z|ZQtrYp.9'x!   `L.P(#O|Nz-2c0aVaicDΜ9ݝ*T&q X4SBQθϚ5+7N3Y8[Qv17W֢j-zn0(D(d_$8p!Us{0 mʗS.$ID(LJ<tۣW/lQN@~>\U^u6{EXPGG5FOI_Q5AQPTfJ?3/@@b8bĎk/jס6MxDsHeԱ}:99Q~kߠ>T  p4\7 ˗pYѭ;]f2*!{]ltFŢʐҦ/!o8[@@@@(lլV]*ohH;W?(Bq @Q5.oBCj#<xzj`7%j^ [Ƚ֪5W* ۥUT:U/B!DGo>GԠn=4plٳkU+Vaɘ)ȑCs@ؐ?ҴSɹReZ#;p@'u?ҥOݢMjRCscGo_/MDn<ʦ$sSڂ&#+z"􍶶]@4. g7'O1G-_ܿs͝3޿OEn۷o *mL(Ej**׬Eē(TXΥ\rTWh@L.3AaCmv2]gi7%OdXFٴյZi\\k'*b+\ՒLxYxoP  %hMR䗟Z%KzT %JDɒ'Ӷٯ:iҦN?6"prDtuʒ5+)RD9-[kyTϩy-[t!η M߉bfK]un޸I݌t+֦1W$ UyQenJQWrDQ /R}+W=ǔr=0\UYU=٢EIAPP A Jl;rݗ1u~o}g|ӻ'DYA@8HǏ'ģe0ǀH\ŀ/P%Jd\Α#ZRJE-[R9T.=~X]B(V.董4a8: /aC]ue:*tȭF ZDQ_]xdhTvN~&2{_oN-*&ą7SCQf*ObQM7n )+9 ڵkRTa\վ9ErYC[D;oCwyB%՞Rn\2+iܹk.O7sEoY)ǎS1OhӮ-5o"Fe ;x9)@VT% ^wqtҤICpq$ }"@i*#wsV2ϠN\%#G{<ʓ'AwefׯWȏBeU\MUO"RX-ë 7Ν#&-X 9v( 6L5ݱS'宆 >R)mڴ2\̒2eJ~ԣ[7Zv-șZic.a$Pi] uvSsɓ'ɓʹy~fj@NN&W*wnXV(ߍӦUk:yrP(ٲF-CmBICS=_ZkeV&!k4HDڻ*~T:wBӧM|]&˗?.a[+kKFae"3W2tgz*3o.}Xk׬];wҩSK.q"*-۶g諯J*}Lm۷#ܑ- -',C|-u6처f oiEګTB%9WO` x?v;/]VpBwרA]w̙3E>(+WfΘ9XĻJԣgOz嗭X RQȮ)ڴǏ˗~X?~븐_>;k> o(XqiPaCVxAeBXidyu='_ԉ mX.-!Aa5FˤRTxfQE T2+ϜXYfU[x.vE!^hBJ$Gz<{PMJ(XUẫ<c0)!PR3ӅH=0rHZzn*¶_rNR$[y] @(+]aEU8~eE] ,poFE|N.oǰc\/]yXq ułx]Ӣy~wqZd1%MT oGȠ kbMԔsy( 6K"ǎu7ht=s\A}'8'.<#X?f(JtUEh⅋hJ%9Zt), հcr;}4j/aL\Ʌ_/&:4Qf-&Xb9< ]PDu{CRJ0[lI'pI*W**j "d;39_A&0 Vb'LH߼qC UdR(2kU/x(ߐv"l_Vh<o +?A>}{{SL[^\2k]X|u,U5y5`F3̦Ç^{M߹{ H.\`ԍYATRxguҙNF{'OP\vw8gEV+x?e?Hk֭_yEU=yB w HS|6ojXM/[ 8?`(pM={lڲ]s"@|GsN:*%%>N3eT /4`Bȃ^v5 XvJwk.m &,({A\ȅ:u͗/[J.%Ղ xnټY?x~T ,@?>FM+9ğY￧#GpAt@J<=f %MLӧlΓٳؐujS U{bΘ=K1c-Jcm g uUE_->VB%o__[se Ϟ9K%G;m#ž;oUd\Ef´'iY2b-nR`(n#F4Yݺw +R^$ՙ'Z^CX@nzi7LPmbe<c.p0-m7 >PMpIcE"E8~q|xq"\i1ÂY/ ۻYsiQeEH(]KLUQ5\;wܓZTBHi?HeQA,p|Cm}j!-TrB<qM7%ph禍_j'Ogpo|Id؀#R޸"$323 TB$+믶ĸ 95͢LR^5C⋀DOආPL"o6<~H@VL %Lg:3#EV>!h3}wtY(Z)ËnvANϟCQ+19%Hx1ŋ<ΞMU "o!?f1Yp|(v,>6Les%yу╢o>T` %m-<%tvk-DZ=)_u^ >'KDY;;bvzʝ'7[.֐wPu:kLj޲0@6H fTPN={Uves݅x :T 8 Us$X(x`E5ui2d_Oh7|3C`AmּchL4s68 /0_8:<LZ^1®𻉰 #w\'[A@{_E5$fWz# /++&ΝS+b5u骘%'$V/ldLO21f^ wLbnϝ-~,`yT%Ndri;ǽ#eڵ $T]:u%L=mZ_ڜbfDg!~M̯բ?fA=VnYTcIpAHc;.c4E<5vCk3S#Yxs[#[k[9r0NAD$Dh"Qw + ʕ1aŊG`̐![`R,2EJ5QTKe>ǂ%'+%Pn~WݳHJ?3M3gXcsڙl6)ª EV<ĥK@ w֮[ff*pNF )@jOYB)&Dr=rAdly ˰1={&Q}įMgev֭@9h͌p}شy3?&[]Zy#KyA & 9f1.a7o*U zֱ'U{\M~>a2\uAi|<,\-Y͙P{Q}T~eOڒ 9 9ѱE"EQk*$x?x1>fK ė<˝;*vaeEj\)~,!#UxաCXNXC4o*%lA@[]~5UԪys.˗/ZHIXRTa+;06)Ӧ2}keA쌳e!,l:Q}(OB+~V_?G sK;}XA3K> ik*7zn'F: Xsj}G$J <;uRLAI_;kl vS,āTEK+{;c eܛ /O.\Z4kNp\-b4ޭR{w6̖g%W_'J-ड़܈ƢY2nõY qi,ܺlYA|`I;z&sf{ CmMb'BU~Wmݦw\8懲iSb!o~1}Bgŗ_:Xܘ\N] q;;UwٕaK3`Qł&`w**>tx`LT.0o(ye۶PLg?&:.}N6M}/ZMl!f2)9,#"YE۴le(o$!ZT}6lBW_$7w(:s샄VhG\'˩x*P^jJ1MJE%^rU-c9:u"x/]BwPFwn߱:|Ů|a/{=H9A >!jի+OVXM`I0E0+g3,aSVfsE-7_4a!ҵkW ulw& ؿ*U8ft2W!fPjH.3U>}Zr_p+GЮٍ90AI7D 07vR QA &#fj5<lX+)?Wcnj9v@dԻO0GE8~s-\ JeA@pppE9N1}5 2Xu=ԣRE 6*B7`kW\C,[7a0 bVN=a#yQclɱYE<ˮgzŠ VN`$ڥ‹ 6ZYzH,ڝj֪9իTUXK =ҢJ.ܜZԵsZv x6nP=9J7\~ZUA|*"d~nHT)uFDS^fժTQQna!Jjt|)ҧ :<5*[oW,qڂ.~eqzEquHvwHY@Az{'rLjγi pٹc'*ZU9xmd٠o7ː>iRS *(_U,WA|V nC@NҘ:/VLYL[m5׏o*@IDAT`(5wC*leT).,x`-1PT aUTa3g"蹭#__ s 6c' N7BV45^|jgE V^0ϠB`yE?X`hA70/R}Xt%kU zDsر+YX V[0S E`a *C VL 2 b!H/f]0yN>Q)#}Z q2awKcA !yw+n{=w.!BOD`ᇘC-W.89^ w)rv yQ@)A ՄIѤI-_Q(Z0yعfk_(ӷ_?$0)W!j+n/oRB=kGST][TYd[TmC)'9,]AI ,aqE>,vbnןݻ^?X8N:bDPXGf/}XXĄ!x6!PR^a'wFrNXC>[q,b1!K/Q[WHAE&Wwܥ-cyB~T(]p"!rԯw$2;?Afef!Q# wx <.X/YD[&煾4jXzC6+݌> \XaVJp]ժÆӚիWEڳ{17rs_`AO1gXq SyLhEM]G*kuE#<7:f+k>x}Xri9*oF*TTO}=CVC>Sձx஥4}V RYIlq-<|8=Pf|]۵2}LM{\7+EXE]"O<쾴/[>f]18^V yV35O2a #Ǐ)lRBV_O[9c3fn޶թ=-0ϖobı)xλ<]|;Oݾlexm{0{ҟ=8}'XݿlFJj-! " p!/XH-ˢzj[6o8jWpȌY3#e1myg<%@'}zX5 A #~+ ޤQ%b?P=u6v]2O'O'POD)56U SJPb.l`jB)1:X2 RYMwY)([Vf\l{T:)}ýbuqm W'1H u7gRRUZ~}5a:[g<]~TN316k9',L Z<XN`qGn*0ܖˆD>bdO(xF_~}chPz#C@8WJ*ab {q.eA \?fİ GU*'nW'ϢzY_(IJQu09w5~+EFNm^ۯ"ô.ډ<3M| 6Å3jh}uZ ̙3+ 7-eVFF;ƈkgEN Ml=vǢ y (Wys%X=#R@֤Qc`#f99RAl*"!m  `Eg֠qL]AU+.fF[{e t,S߹Ӕsҝ\mhڵN)p9/F EJ@dϢjQT[܊1q1|1Ĩ&|ԛRC\tE ̓rr$bvob NǤ6~^}#8nJ׋ې,؍=,TO@KҺʰ Ȁ;1b׆m'1 ;we1$Imkw )Ua"^dlSg4t2Z౦%[z7\[ 4Ab vW1" hLY;(ٺ=CKdP҉ =k`ik3~|]EՕEՋUSkOQBQA+ᰨ"./,buMcC\H<(7o(J Y8ƾٞS1mc7xl;v"+W&9va©R l^Ю ];#cưe*mPT ZF'[(MIy%x1hfZԍ2{OD+.v/Q R> d+DPBrZ .}lrO?Bv2ڷ' a]jIOaA ZVkn٭͇7Q&ujv}M?McG b ;ǁjp ͻtpvPq&*'u >Q ~Oq^iBu94n؈gu"d^)VZToٶF)J@J9A "]UU|'s~Mf-۷|tlE-X{[ W&rٓ:ꁀdgQK`6`eϚ&آ6EjQMj6C'q[ӴdϞe˦>:il |'NLe˗Sz:_,m۲ո\S ]+rF]/iluwKr[,#8_V9׃=lmO  Uی!Pƌlo\򃂝Κ?/TA9!D2H2Iq 'J q%_{UZ0+1G6$ubŵԕ>&sLmV/p Pߵw޷W}y\PЍhP A@p U.YbwJ-c0Uoc,+0k^/8tH넔6HM7Y߻G`FzkVFDA@xly+wn~6 IXAz!"VJׯ_SF3feJ xNWҬFBQ zl_?/XgXYQڟق,h?>2%v≈YzAޜK*&cj[̚RXq DJ0v}7h (Q$+t=oNM6%0E# [Aa&[q>|&O?NeȘQŠ"U[luY  UEPm k9N;S:'_K`Ɏ>+V@Џ}Ec c5= msҢdjc9ur@ f"puK1s2*A !-[C]>8w%*xEwuGj޴mZ)ɒ%^|B{ثN}A@p~%Ea{0 NzWjIQA j*Y9r:p:=r#UQs>f ՞믿Qm1ɍºmvgk>TiOC)˔T=ÇۜA@`a_9Wf¹Q6d^XL!`مj13ᇳz/mx\zzvAukզ'Npno?j٪;xuhog ORW/x= 4]՛T_X"?V8{J3sFfV, zbOQgQ ` A5KlI~Ɠ#$GkWz!W D G ,ZN:vءHjT^;m EPi~wj׬EGԝӁݺb F e<\H5fj1A\_A@[!&jTm[a7\{٪!&eu|B?F^/E7 QXSTy^?50#Dx>1i> OG5Ɏ Ϙ>6sl9TzP6Ϛ9E2Ua0Nf1nF g9u~́oԩոrD/Z.X`XjjIޔ+W.7Z" @ta?f))*RNM-WvzЏ\=6I!/k9M ,STPT[<\C)gb,p.a ͛ʾ  ĉ*rZ#Wiy%kZ[.rSYNHݽKserJ~ՋryA4#CiŲlRBDMP tQSXQX `ӷ/[]ڐB \c}8@ PㆍXI`4)4Ȏ .{j9}(_7CVE[TӧKﲫ{}B5lWNK%K褀 @)zI P7oܤ={*yDxsEk&"E:TLԹkj۾+Y]} nŻvI&ҵkٳSVaA ."r\DB) gw._YT_l F5]*+f[ns[*a0DEP^l!K4]v(34iBwإLK^v[;s4䉙 XgΘAK-6csI?Nȵ g,"?ףWOeU'cͷf5:q8;~'UlS.uݾ @ʢE6CJ@!6FwUe` kŢ9#Vj_44q"bP)]6u96@_}Ef4T/UroT=(Htf9-s&qc*%צLF6nXIUzsԦe+jѬRRAԭGwڳ 7%C< Fk1$WLs{7HJ=Y,xwK9A XL0*r`M~QWm[Mw6VE5ȤD[]% a֬P!"0bl.ȁ 1ŊQ6mh:.|TI˖,U3glB--Z 63nF?9w ùOkVAG!?;hڬY(I$q)#@!]p"GWp0̍=DɒTPT!`M㨬EQE9/:궼l]8՚'0U Lɟ+k_sQ!5k\RgUT,+YDA@bRTa]BXt=R-)w2qV>XM)e!SNn^,vZӨSs!C[T_>gˁYҥ5O'Q@H\*dZ.NIrby#) @!狞;{b}fv:cL#GYJ'C4q"%w9vIu6ђ{yW/ZDͣǏ@ԻO_L‘,}mr X깎}vA"lA pܞE4¸}ZN =@Q oUTC|oR01D!6crrֈQ,p8{8>f!"@t!n:*W -_L%d43cf%C(p ӍKQ:mL1 DV\Iʖ)&+%5wܴp",%50&A b)_(q>Ǖ_T%{ HpmA}ܷ!(^ilQ}aĵ@=VEUǨŀ3ٛC崵jSRN` &fA :ضu+ B Ӣ%U 痫W[jK/DMﭴiҼ h+M6<~䉓pgnqe:3B,\{'LH7m9JD@8*a͒t{mE|%/N>LQI ,@ɓO;$xEsT9NcQHu[Hxm݈V6>X ^ry*p1y ,S6T՗꼜A 2x?q UoO Zc(FU)*? Jj—_`hx[7؉cK aA`{Y&M/BvE2DOٳg!L򇐽E6+PdGP!TZpFK3XT s 3"󮞄e`:QuSk*g-YJsf6WY}(_ZD@ɒ% {ҿߧj1޵<a*,x3]mN87؄l)I&ڢ+Oj=}AH-"D nZT&ab /ۓP1ܧv5*YMh".{zʞ=m=(A gS@A@pc h`K'BZR 0@'䓦Lvmڪ Q-Q\B] Ÿ]&X^=odiSНwTUݧ7O 8@>Q#{iiĨQtq=wU^]1 Ae˪O# UkQu'} d'`Y}^LU1SaaV81}ښȪq8\DA@H#!0.*[L%TaZI?C~[ZH %V={оE+j;hfΜƌK7o%UA ϜF%>p9^!= ׯ]w)"D<VQAn(~Z8o[Ll$$F5[E?}eڦlmbY9Եχs? ÆQ#^Ao]$Elr3gNZϖӧL_K-]xI5$'ܼqø5kVEĘOƵL2Q5mjGb^4Ė… su9H,Y)-rE{*/]R)kۧ’ 6FXc E"S)MZ[r%wJA kQejrȢvEݗC4nXlk(E7-QpAnH̖q;|/u&A͚҅? shoҏ*~z6J*Yh̨Fߜ:E],ӦL5## k*R€PPJ& sU>LPRQSs޷|{ 9°!DG_\Yz#W.z) mj݋';=*o/Kk>ͣJ4WpcZ+S_irl<.bka[6@{3m۩Yt]zMR+ȗ$U`24Pf?*_tkm]G-3:Nυ=m۱>ed`A@2:"F4ѮӇlJ ,NHݽk7۪z[Ȕghqp*/U[_o&%L9qcIEZ$%" Yںe+Y|\Spehޜg"Eh4} 6%A@€@ƨa|REܴz#ͼ5frþբK^dqu6p%,!y,0RU!ĉtCڽ*Ti"_iTb L6urգXzt6mSvU[},ﮆҌiӔ 7gϞ)F󙜷tUtoT zxE-7STUJs޽L2zxA@dDQdU#s" b60-@3vRV,1}Z E(L.bPT_bQaF+yA?-F##1/գ'ܱCCpzR&y07o|ӏ?6{.ZrEY)M`p Oxq T3 oڽ;լUX ORW؈@Q_9 EU1VRY%[!5= T RD[TU ',0Rp>A lk56@<J*Ҿhْ:H6kfߜY}{;P6>*#GԀrM]JIM"GCmq @" oި[z!X-KgBAP"M:E#.o>`,XM7*%"UX֨i3￷9' 74@!_AGEFz2Z]VJuOѢERk:쳡ME?PA+r uڕթK=í۴+WeA@lg3UzE-Q1Ĩ`2m*Oz)9A)S'\ʬ[^hx. -$G/jD^Zsx{n=`K5k@Bӡ*ц=UI͚rRHqܶJ8β{z*ڵs';7{oN@jԩs0I3O{; 8ok2]( qE5ⰔbAtΆ>eQeW7-e˕)ӧ) ݐ1"ϻևm%L&#\BfLdaҶ4"1 gΪ=fWCZ/NZB?Oƌ˗.cGgN.0pǏ7QUg̝Khi*̪/W*%TRe69z(*A@D"SiZnb!.X#M[Tuked*bڏ lI5NzcUT}_40yZ4!+FEXb1`=v(=ɧݷRƝ`|Z .ٷCpKnTWS;+i̙ʺ TqEy椼 @ j,]@ܵ5/bT~|B4qqI]#ڢjaEms>cwI㈪%Kd%ȎT r@E;(x~G>G %FvJ3gfs/͟;`iivKN[uYvFJZ4iP ' um4޼qC5#gNI/*_BXz Q@vt*]эU:a{DjVѷ9/Umj5wkZ_)}Gy"gH6ySxs UE5 hJA f#K/QՌA6iڔ}]zי<=8_t`"uUϿ &:9.OtiVF[a9z(KϝWMd`6.4׮SSXۖz [z-kbn&S^zҗ/ͱV2%(Vߧ|.qD6d:_/]i@b>H57C) 0n'iy-֜&JjdûzSx @ZTo޼{# pעJpubQ u`Q*hocj5M5XT&zEUW_ ]YlIDYexC*5χSɛ߹7_r{ؾ]KG7;R)rnL  D;֭UwSabv4dyݴ?"!nk9$ɕxEJn&L=~f,#Q#r qkWQwv͟XTR7s*?d_)ET^]';wK3gPdI EժQ=_))+ p[Q `)&ӭ۷.Ǟ@Q`ecڶe+&ѩsg /FA pl*rc[6o!޵ۍRDAiQ3E5Iܭ>-YB%J:kG;wp ,+i>8({I XBOn"Wi]!pSuU))Sd>~^v޽{4-x+1VRvE %5ҐA@yKQ՟3}2"xbQ%'VSw,; YsǕ+bzI+\鬪fBQ z FWv5F].2 Ʃ׆k=+jT'ÐAoiԦU+N۩Kg iVyI}|}P${{̰H7{,*W -Yߧ6҄ID%NA@" ]#m$Ұ kQf2%'V 'p;rD'NR_Ұ>{*W7GЄ"S₁j2(GFy+R vxԹ#]4ZNma5qe+yf4q}WAĮ7b}:M:fƍF* egV,v[slʝ;r=~{!9>i[A LI؏N]2~87'OvŹnݒUgVtŮ$/n]ƛ JSgS>8D[-XyDٲS~зJIMJ>*[UGٺ* ?ܿ_nVԥ[WbϝgީS./u"0Bƒ˗T3d@;u:F4a"IJ,ԣgk}iA@/m)0("gŢ1={F(IHG`U앍[Gĉ4 >\%WduﮔAK,{<95zt UQ3\QN©$vŗm ]td|GGM,*# 7oŮ*UPn)kafӝ?3&MR"1ttS 9H4ȒY"" LaD,;&T!Iv(%x;)*_fv$M5cԿ_?E*r[R8=YRTauWrO6/DΘI:u$wwu"PcJD`u|^`>t?C zPqYA=7TsxV e"C~W8~<:xH58qbff%>#>MA@"]C'GzHv u,jd!CM(1i ] Uxz9 E~.ݪժRʔ)+᯿fεd+/F\aS6G?.֬$o妇6zy`syrd17xDr% l;PF 3µw6q4v۩8UЭ[T_Ѻ]ѥkWJ.IqA@@-Ǟ (s@ EnSu(.U V؁믹~HK/ ֣y U/+Ԣ:a-6Uȫayr23)iYy=lx{]$^ bmU֔+כ TݩIМYieF:*}D=zٳ{ҔA@ ͧKVVDÀTN̢ܶZ,F3_3> k֪t׮]9s(włi\1tQ{&QΜ sfzFwJ:xq,; @T|y7g៫TVۮ۶yp j3#N5}^8~?-|1  RTλRR&!&S8N7lޡcbwYXVdLv2\,iAYFa%]CFVHܚDby]cWJx}٣G<'e˖%|"C@qL;.r&ӛJ~Adt)m  DfxMu`~37mRfLN?⩓']L0=}8/;@T!7\X$ňb2M4 tE~㍽mɔ\17S/au. +}ZQ%UK„ -ǖH\բzdgjUР$ƌK7o%5@vA@"8*+ZľCyB>}ii:Zo?jƬH8>]4jL׭ A}uf%˙"ԙbuҶS3>OZQR,mG}Dhg~#^ز%+j<4RԫW_'*]J576ydR+ iҥ"wߩ>:wH.^RMO5j8\ȎAHc qHST_T98 +ZCX 8mGbEŋ9#DnZT.&YT>{+(ΝK+8^nHЁO-Z . ScE 72}/QMjԌٳh)yoU:z:A=8*2%gX}ΡyYUgPDҥmzϤP['M9' @f ą"7B ѧ~ۻoб>r1CDZf\`;V#^g>I/J΋N" q 8{ zΤ. yɖ{NLꫯRɒ%Uζ,Yoo/ŭV&F"EՇcH)1slUP%@\6buuCnS'Iy43}A@`:sRϞ{gB- Ν5kҩ)` qriڵʵo۹9eȐ  fQ`%_precl!qAvHD*'cTzPT"FUO4sVP 2yRׇ2%9"7͞I3RVL-cnjQ>ԧ(qj,YYj{ԲysDIڲiQ3˼p*WJoQ gP юyA@@sM:Q0@IDATfThAoȳgK4i˫#D2BFU9>kLiωYk^.eg1vb~ 7uj:rXBlЩ#8*>w.BvR'Nwx4mtw?ܡo26PE=[YLb嗊^=9' D/0hkt }]vM5]X1zσN,"DSz(V^_rfvh:)X| U+O[ě'I /e/OnnߺeDCI&&͚=-Wvl߮-T]蓄XTaep (o|=3fb… +~&O)S&֣;`aG6$'A@(HSTq_^݅pս }}Ȫ/~9rD}K?7bT1G 8So'S@L W qd`ێ钘'fE5{!iI؄}\c9H_h}r"s`'NҺ aO6edCIųUȫE$ {wRFV8)ƌ3ghqͩo)RP-/ D&v^^~ʗ?nڰ/Q._2d@X wbT* Ѹ) SsQUB~&M㘲)SǸoe3lwyz6@ @C(VlՒ=t ݿ?zLz "˃ah0<&:uR)cƌ6jŰtӱ75'M@ e@mڼJ7eUDA ~#]1‚ڽG~u#|D@U(HO*8=8Sr^DIԩSTN]5wN^HbqLE.2o^ >ϛT(ts#@yWRV/]< F7cJ ȻvF]ˁO/L;wVf?PV_Xy iovήt1  тcht*Dn)'9ST}BLY]X:#"˅U6k֬,W\zБG 9'xf`uP&,vaCIfJMUMbJ \01rk#%UqXyD'N eUZLڲm5JT lA@C#QT#b &"E_D.\Ą""!s-~mٮMZxIDtm`$-K#Ҡ+E%gL;o=x01y! J) U0NPiɢTlY=k"3,T}j%͜3^{(t# F bfʮ@BMj믟ñ֙8s U* `^t ծS[ņ1@Ct\K)D@3"VĀViڬ/Q\E"[[6oJ*Ҩ#>Y3ij+! Z+F5bfʱvx|E]/[#293qG5,JL@h$)p *܎ׯ]G-5Eb7$O&ŦFUbj;Ɉ#ѫqj玝>v~w6t(\e>|jVA}{L >mݾM v_;)A I+A7+r%t:dR ]uWUUy4w|;XV-P넯H!"4{?ZqmݲCBΪE;v,9r(e1tٵs"I}RzMI)"D7ǎժSW gҤI{ư2yU3QRh=v uҙs+(3?DvT)kjԬI~?TlhSj[BF.Ev¡z^{(T0FKf,#` T'KfL^PZKH/to+M *\XΘ= Fa/ IysJcz~P}IƍGDs.Pn]EzfF`Fn0m1!n'7$np"\q1$#qxMI&6鲕+`IbrX0>0u4T}'tRY I !۵SYwV8)%zѶE QU4o\u?t[/?pQɓC>EĔ~'I"iт"6 @\|9[J. Eukb-HRJDlDiaptO/OhӶ-hR0Y2&0#;f9߇c?-R !c0` ȝ'7C@i|Z0*H0ULZ`8Ls!N< kւʜ%#w թUx-cUuFc21VNC[jiBj~nfw,hټiv5k@֬Z ,ϟ?/WV$LDG"{.17l:bC|1#0@T=jܽKW C2ZԾh|0+\|:k'N#8#` kTE/F= GT8IǬ`NF1kl UV3Bg[uqcmi@4H8׮uV9SX/(nFi <{69Z1>G69g6"ZIfbJ56k|ݶ};Q:˦0 4LHĬk+{̛;6 A9dUQ^{"E []eF` Շ0(95kՂCF+OUk2$!'Ʉ @ ݻvU#gߠMQ& a꽄ӄ8 MΧX8WZ.ɻq~ SSh{ p!OޘYg4蘒P)e8XZ В! ծ9Kk*8 1d6RG|jۨƌ u 0 PL&IDȵ=sY@ҥNf IvYZ%4`ӮQyg#38-[TEmȒ5qF`Fda3.j4k^W!LvT߇ݑ&fД;|?m;|1pV۷m'$lvfeoLLE!G[$F X;tH4G4';ԾL0NGUjT^㇏%~@F>T2uXpp^IT<==Ez97ٷآN՜sK)$5Cld wԌ9@r_F` ,Y2hبXא$*U(N%#_!|K0#8 f=NGݺ rqƋGZWhht򈇣h(eS̵`YʬJT44%S:5UXmNNf)!> ͘.ϝ;5U?UX>~uT*U0f:v\,4LttWan ۼISعc`]ht.م!*Qu9IZիTs!YT-գ`'O@>}}}w˃C.!V4"d< #0 {$K+v%H`Q (uzIa)bY#Nb,P^O5YV7)U[jl6o26_MEsWRКD:'SA*Uc&I:ES s,.~~:@WvgS6:\ H@(DzoΝ8(9~BKefxؖǨOPemkCDccbwJ*"x!"9F`["Uf9Jp !gKU݈jD }Ug+ըbldXt`^П2y2kAs%e#-ԯ2*9=QBD)X,s8-Jlmǚ@G6gc:vs۷CzӢVu(g1.&%\F\"$1UZԙӰnzXh"YV ̓2۰jJ D°oʴi@l#0# U%zJ&+>#`Xը쨪ר:[)hDUALhԘ'OUvFT*~5OR~JX N{waW߾:mq9u 0P\bJSvm(zlF&)"ʖ+=G'0p~bH 1S&mlzPT36pʖ* 3ŕ@efhܕ`Fu{u1;X"MCDTSi.苨|5oT’@36-0x̙"e=;uTq9LKUYN8ݓ&t(W>]pvJA#b2;RZUQ"4*]RvUfPϔj?!"u;*RmhE"ZS3EXhrj&ҨR6\2l(֡KT,3gF`LE R#h]r?F -}iYjjpƪqӸ0 Kjp䔨M (x̸\ *؀kTڗdH_jt8\G,BHnXBǔW))j8qDfs=(Hcӈ~ U0iBm۶ r-ȎƣBz.@ "J#ǐ:tL7n܀/^u"!$D;0> Ӌ_x 5jT-ou):۲u+hպ`;#0"UUvTm:AČYCK0RT)gߠ:ٱ}{h֢9PQ3gE* EǕOHOEGUmljK޻7|>adI`ZP1A#ώأwh+ۻ°á~ẗ*] `$n^d͐8]RD͛עҋǎ=S5c+ؒ)+:v1#0@TET9[xf!n*sDUpjKu㠙2i)1m*u*XqhR OL$?FLQը}sZ FIt7-FbȜ0wIy'r M^r}^#gN(_<$K,wɖ4Ӎ6ӤEVf8+6ґ%gx7=!kL&vbrRR|af'z|`F0Ӟ84=NzӍ(E@2GU.y&ݗz$ѤAe֨FalIBBaʁ\~j dSNo>&,UWFTtltӳ[ CǏ^]#GBõmXcHѭ۶ /@cd=5.r)g%ve'O`; 7hP#1}[M& 4i5n{%(Q:w~vmQP A~}!G0#0VB BjVp%kVCr_̜=/'X*O먪0Q[2%1M#%9%JЯO_!]3d ;N?aƁoN#n<}~ʔ-#j] Fe7o^"bbaC 'k&O [1嗝T%Z0#ETM@n\odҹ/?fԇ ș5,RjZD9F.*dA>&:Ynҵ#؉ڴmEw^}hټPF޽"a1N x~b]-H0umxi9:1%cvH6ݞ6u!;zl!.k2y2\|E ?A| J-Gek8#0="Uk6uTԈ"Rb~ ,!tTʹ?PFi,EE'T:fλ1GRCe|d[ݰn=,_ Μ9Ý>$GXFFD") ×KiWXB,O8ZN(co#NÇAΝ!QD>`̨A/,w4ǎcRV-u6EO`F`hQ2i2;QKŗA҈\'I􈪺s㪖NlfQZ0|##x0hu&۷MU했xywϔn'hduLITKu)&O≵&xFYsdH/]'˗dZFL1,d.p44XxeMpMqǼ+FA~ʹGv 4B*O㾽{/HM,9b;D-ϟ?Y@2-ɉl#0#`XIY^05P 7nߺ*ruM5w`G)JsrߦCjjHƤ6Nl:;N.63WUےSY樾={LUZxMʓu.^ U:tжm2l?RNm(P#>>0f^㐴Z}Xb'2#0hW4Y2 Z~!Au5;tH"q-PB@#)DJ_g7Rw]TxBUs|jרc/m+7Zرk@ ޲RlXHֹ MhM3~S\^9> OC;cTU勶=IφܡVb9ҦLu:C{U2<;"!KnbIB 岥qs ׮rMkx#x9J̄m[,!5S.tFI5g3`F` \z!qS@5j 4/6F hz,T:診)Uw/8(ݛ6۔.A!A5)nZ8w,0~˕K:d-Zk 8ٕ3CPvSjuA>~"5z5PfzC=z(-MԊÃTq##` $BX?CmHGTMܹ`Z|9ƪ5e{tr`GU"#J݃CV["*Ȼ[„uU_X&j4 j mEfV\. Af`bbE_`F#cv6#Sz<$#RJA  =[ `,W/'kXRQuQ0;ET*7>n;js9HvC400}չU޻ r.YիT6Zm;p[g85k:mc{Hjf˦PLY:epR3g,kVj0#9hRJY5C!l-0KNIX]AQ*ujH,W4iEd)iҤQq|h2WvEDUzH_+9ZXEdX {mSz? H⤈XNll3=Tj L˖5`o®] 7o董.oj[ʩD:u 2ew褎E?SZ!ÆS.!wj5hb%Iʹ9 -Z 1#0#@Q!wubŊgNɓ&6XSȔ1":[TXJg.Ws R؅ FÔNuHIsEqt-٩YٷV*V._UP#f Iut*XR͜JR 3x:/H4~V^`[$14_C%z { '[ρgF`Bf?YZA$T{o@$WJ%ڨFlĉb{ޑ~'#`mLIsT$i0V*bkl$Tt>{,irSeK!y3?>}Ԥ!]T)D\|- 폵,$l g:;91ޡΪ>[8ܸqCDGMT#B$%l $5sn5f]Dy .#0#Ffs|3xb=(9~ Zn3RKo߾;XSR5qRqJբ֞UƓ9D #;Ht`TZL$o+V v3S)"MQ*¢ Eص䁤uRDw %k$Rة`+~=>LuJ]?o86xkdI,Yʔ,$Cz烍79s ]t=%#0#86sT5)iERt""%rjk#`R/9*Μ5kT}_ ETQU}k>hlJh:UiLz')^}zB0 իV˻n')\wakMỉL3UP6(շ?R/E.+cmd99R3&څ!Z mX6F`F`LAfjPrwOu./_Ԧӑ=#`mLI FGYQuK>St"N8~fӄ@Cz$"=I0aB4k (JfPJt -Z4Yf:iJFTbWJcNR3իTt_D s#0#`'9|v6sTIT>Uzn]T tEё4AF\ugc)䨪::)_A0PQM8ኴl/1Z~hظ ʖk׉K{/92U^53g#ԨV5k@ ӧN<ZM%1r;6ARcKR3~(IR3R36xxF`FDUlAIԑl߶LÇ.(SSh1z8^XQ~Hk#1AG(S]=g(W$XG6g]~ӹ[GT#=#F&-܈JF~=ѧpaHֹ| 7o*P:P$)Eׯ_^ Ro+<lmY͍PtQR3-[b[<>#0#JR}cǀ<_~rccl@05}*W;BH:I%B;DzaV9s[}Ȋkנ^:0d`U6ޤCBtJ߉TB&dΜH_Un $@Gzۯ^aCBJCbf30# .ؽg}M:vVT11f)"┪խZk^PDuT ''Wr_5iRZc꾃zBbkPlYXrv_(eG&oEf9rh5⣳j rg@e`ƍ"ݙ4Zfl80#24"پ Μ;+4O v=z̚,#)MuNCAWV+FkK2%c8DH]i6xܘPفϞ==k7c ӇT-\HXDu,WCOL«qAlBcκ`y.}zcpF`F`E RhV850%J4J2%=fP߳|;cƌpq9l={^G)iQ7J1#0#0D@-c3)dJQU8*l99)U ]G5kT)hF34Lio^X<̛;~'fF`ԩM9Ʊpl"ܱl8{ ԭUz)DѣD/;IF`_vTsSȔ DNch*]Vney܎7 Z.;kLlD@#mZȲy į\9ܴ! 5GkmE/PJuCwƔ0#0!eY)T<g"R 4U7 }:acg[dk I$c!Bn4R.7N`k~(qmu{Ϟ=}Aj"BݤiS8x0tBi1c<.#0#0 7F4?ְbv@#FQCU,ތjUA=qU}Rkx{@IDAT):x8#snu1laDÆu&LLž۷ Jݻʆ  m 6bF`F@SUZ_<qT+W?Ji\CEzIڱNd1+ah0Ҙ9QDUPUA=JicXqeDU9`+bJ)$%{Y{[ܰTn/_#'ʛM%C`ҥ -۶´!eTV0#0;Z:w  ;vhg;| ` p mb*{BG{ t#vj8xfb&-Rt-,FXñct4gUUZR7630u:9..A5Xq1޿wP~6;Oaдy3?v\zN{fP:B@RqΨkJkZ֫u58m`&2 |RO}bix|#0#Dq$Jqĭ.CW(s'Oô]A}5Pt"KΪ߻= uX9 7o܄]{4Ա$#m>+]tga~7S".UA :sX&d]we?{ϛ7/lڲvS'O>UJ(vehk%n;zN"ds\.޳Xsks3#0@PT]E|@Gp9oX/#9PJ1C i$#Ǐ\D Hk20P9N9 ' Z @ ێZ'5k֬pI| HdÆ x0h=LMg G@K,'Q~6tTG (ըEE QpPHDUWZzֵ p2W]Zo^aàJJHv@DLkש ZԾ'NwngF`#`B|*=Qz]Ad4%zE:%Rqҁ 3ג'G1kJӞ_P!]5;{VP)aTIi.1<5~!CdDblj-uo_mI+5qĪ$IXT۷s("YRLS3PJlDbi"Z.ePW⨺Ō(뗿ݼ n0/G2}XD\t/ʹ*4p;CGY:U:)H'qiQƆZ˕/gF` S ?5W1缈;R[uթK/‡`ړSS+t>GXgЄog l㲁'b/_|z[SN!$a@2Wܧ\k<=s0룲cADUIt|{w3 ;HR:k4wی#0#`:+- X(!YyƔJdbI:yFt|}&9. 5%}]ޞ aBќ0a E}&uվ߽{W-1Kҁ;ÈK)dqƱ8*GRJ*HiL{|Wgx]Q7/5";Vڹf,b6SŊp&ep󪁎E`ڔpǹ`F`oa~@T- Wi!!:r7n!$.?-)͕dY^x >ԲFƯ1*"O4:U>h0M-~!5cѱߗFߢSP&v?c2sgA6m}h^)D_@I":)$HW?VZ+O:cگFjhjQu~dJG9}:SnBK_bIeٸZn[ֶK}`F`~]W(2۶n5"<\o߼;0gϞ_%Jԩ_)DۛЈa(dԮG#]}Q.CuH.\Fj<{&7}J1Bz/\2Kɢr`8#P D;$,wYB+f{"1G~SttرP\yZj?=FUlj^5s&)U V._?F`F`9RjPe^L2Z\RoPԘ) 3kNkq˝K{,q'|]{"CuL>oBƠtae*ks6*ʈ*=֣J'P)[~-9cu?,?_8V$jۑ,W|ReJMJV2 {`A2rXH%aK,!ڹ *ƄD3ޝt}GfhѲ9ԩY :8~ԭ'8ôQTi_b>ݳ=Z8+VgΈJ,)ґ0&N ïQuww:'J$]#;!r4bpq -ӦղeϦs4d -7gtR@…DyA*]wϞpssy`F`%h%Jӈ R+:rPrSz ֹxh BIE [b&#GXp˔,fԙE'O䌒mJ*(PmɶrFY5:ڴ7еԆ5k\+#ֶBN2r׬Z Z:_?3VL3n!]Q+]""ݒ=CR8rQfJ0|0AQ)ӦmPeY I:]J`r60V'/{vѣ:}g8\粣 ϟ`F`BJ7h@hJJ0j:|qNy>X[_ik#g^jLWS:u,Ö.YkWkWB[d΍ߋ]щ-RTV)-IQ9͛3WLQua"?F`耀MUT$UrЋ0B){Z䠺'g\{jFl#vuUh MCA5F1d/i4Bզ׭W3'F20R er^=u|HЧo_h‹Qwu=f~\|Y'{ݠ`BҩvNr=T:AvKNdb:G?DZ59XJ1#0.X%f_SKNPTix#SsFddJȂ@!5kXXdHLL`vQF-^\931uv?I VI%¶ݘ;bԨ9N<C*7/SGxthN1zh֢*%hѬ94mΟ {cO$36NՖZn!%1".d@NvM1kN3#0"U G6M% Z&]PStK7& ȍXcĈ$w3o;DTB٪挥 y=}Qz3P7sdKsFsvai\ӝ-i*x  m۵ s}m/Jعj -'O;Dd{tƐz! . 2fQ&ٲ?x2@!]t0#0M#ӧN}FWDp:NB7ZbQ%)#Gx:1G6:HI*W '5JO4𵹓*ݒ3F 3 W7Wțvd4'h^Yt7i 4S'O;'`(5 uagO8$ՓEJ$I MeF`F iD36HL2qqS$._WB@jʈWф%f,~b2i6ed:`mhMa3"q֭_xl4rG;vK>հZЩsg(UHٟ9c<}T[S\;x 3܂EL)`BIɓ={T#0#uQ}1>*o٢W4Yk"EcGՏdЇwkbcwT G\#cT8m48ʶ끩DRԮ}{sw b΀~mZ7d[XY+5"#EX;"l\v :4R{"$uV\%8d0rSd dhDZP}&4J}?~xǧ&Gd*S,u4&3#0@!`3DȈ;Y>}2F!rFA}푇滮jp4^ QFT?"xBw)DJF(¤HݜYgQO2[j׆ݺڋbd7Ò"vZ|gX gT:p h߾X֮Yon.}zб#TRHjVԃ|}z|HJUkh}^_NiST!Ck׮c$#K2%YOm`F`~u< Q!ϟW6Fh~}REkGUQRĜ|x Zǎa޽K*="CwsM'ݻN*9kׯxi F`FWG XmFD\suƍz?UvF 7e)iz;F ("pmEיnE&F#X+-R3 ;F;۸Ο1BgX V: Sd-vh*9={B-$Kҥa‘4e,C}H*֔.X!1Y]̹w;E4Q%p%aԘѰki z\F1"V*#"'sccF`ݧ[+"BL.G<Py|aEdJ5+: rsM?CosT]#!v32(h 1JcHQPuh_/_N=&~9XڬysQl2x%7ϛ'#i9wD"]6iDN En'N@m%޿s3rY"c]k !cPRe~zHPErg@wh#GgHEkSjի{5l#0@T"U6sT?8wӿ4L4`z$QF|~"[Tf k kcKuCm\[ L2y ܹ}[\&I$M5ktبDtKg"&Eod^|dX)EШIcݾ],NY!K) 6)+Գ Gߨ Kر0޾X/Grdi4KM&Ha!cFVS_xY<`a>+]|0z((Kx0΃uk!CZ!~gF`~lj0Je4'7z  mr8ϟFc9w!ԟGⶰ3JR3Q"zLb%NbutsA ^=#zJFh/Z+:jlһ;.խWjש#F-\iҥz*U6iRbF\ /9߼&`ɦ~__hԸp@/^ e͖Unj],fݔiҦ?=>zmdϞ]Rjx =)I1la7|H(g1ػ{%TV5ҘMw0#k!ڢl󄇷BɈ4*ƒvFbdJN1߹03:O10P/-Z7߷_@IDf͠ʚ)sρ~g͜  йcؑwoԜP)~\re TJ("Fzsg xbH.$BOnb duOtj_%?,.?61 YVb9s݃W p~Bq-R7KP6H2"]m޲NqEd*uwF`F RGum&/"Ȝ9` S$#`M4 2%gik^Dz 䨺Ykw"ME&93S`#Zhd3*z8 WHn'xGLE9s'clȎE䰒{.*^nF5Zjl\8ҫaȈ(BJAGW^vr&kT.jJ cj,Yɓ,҂ՅMW}h2d ꔥZegRq]fLCpQIӦiM8-[nID)rTɮ~,; 0#D*@LJciyfL@pB(\Q@p4;*gt|jOY~.Y"|C8K*)2f wO䄦l ޗ}5j@hA`!yz@֘\|,(r9f騒xwK~)=*LdMJzʹ SI5?HjJk۷oAԩykV۷_?,-MРƭd R;3#0" $AZ9W[064(b'U!4 G _}jHe_cID6N+FI>CD*bNڮ>i<$~waoŊP#.. -P/_[4YrRk,Qē^NKzݔ|t7n8(Qb(S+_NZk!@K-E XJ;/K䔓G|"D4%1>|Hf@I#bV!IJx`F !`(PzTdY7m$'NuL:y;V5J GU(ZjM͘>],-:PlrbWdH.=($C,鳧lY(VLI: 1뺵`͚;z ̙5SyAfM6eDDOz3ƕ֐-7_ E4YRXN69׮] #+@HG/:~(X x"b(&--V74҈ק/\]ڧpO>L Лlܙ`F6uT9 ];wg~x mF "33)?}S'O)Q9$RF5]u<Q;A9'I߾̗jL$) Qﶭ0{ DZ0>,]jԨ -[QIk\JFEyH&u6vx߼y:z /\(\zѹ4z ҧ6uޟ.Pc|&[jw!G2 ^.2KSwޅQDR3#0Q-zJJ[Q_sn@`HrLbcI]JhyX!`Qu3FXX[4kmT///~Y~Ev+.F2"3b%$> LURH44!a9@i_@7qԾHR3ּ|,=!"%2C:T҂%#B b[d(gmaEpپ 4RKSߢNdH䚮, 2\`m wRiH$Eڭl#0= `*\xIc>}mv%z%ڠ!G! 6F(~iLvTlԌ7(ذ<ͣiӴ5$H;v>J/ʹ|hgJGϠL[!^4RUIچREKQE9GE[+ * dӆ$B%ZPz6jA|%wmSM!sJeIE+DĈ̊jjc-#ňCF`F YDɓǢ'&ծ[G{j]% +,eϢA(C#HjR~j G *TN*E#s`줪-ʴdZ  Q۾,[Ν?'"HD$HTB=ZˈW2bQ&߸A,|Jy~)ܩ+YSӕxN*1 )Uԭ[bXם4e KZKwF`_b J^ 7tL:߭˩eR5{rW0FUP\Hۖ/]˖.o## }z[p`l>c"3m&S۪%<{ɄE,&˓Gn퍴iѣGiFX驯^Y3f jիC!SLttԩӠTMJcM<.3V^CTۻOM%^챖Nh̒άdYttF`~`h9|]݉Ux+X-GwߓFEr%ܸ/ЮЉ!jY٣J75r $kasLGT~X\`O_bt!߃2= F`C 0l>a ]4[l`B+9slvR }B|"dJQD,l*{"7a'+2f:`|t.FaQ 9F~S'a(΁X"ʔm'$ΤxBŊeVv:\lHUz5Y;zz_sܝkO! so\$ }F`ۅ5 ߻RRĩSp_p)\oPH(R(J@UPP"019&սX8qbǼ1'd,ݻç'wB́Z{{ҶGF,K&FÉS=(Rad׬]KD\#k^ƮCcNgnq8Q"o}Lj?{_B9$ԨACq>L 9s洺\v0#K"`sGP% DJB @Lp0<iGwHۖ8-P,\ZjYQZ`FvD_}ŌSHJPa./R6FZ(iD꯻qlվm޴ffÛ7oĕ&O᮪q%p3P$5FN]bǁW+ta@Pv:~Qi~u+H;x \8A\N^ Yڿz C4i,om0d`g@Bڱc#xdͪgHA̛'D7mLsi%loW훷BW{A7Azb,&gȘ4_~ ;d^5f4/F+wcF\]DjTYެ9sѫOo# kNu^xap_4U{ MӦÇTGixJ vZG9_}?ҳZWJ,~.,ڃM( g͜ sVҥٻ &&:8-]ŋgO O{58>:w}([ɑ֝ԬI*Ōsd?`Cʎ&jH#EjLnݪUo>pN;X"TTi%n~hԈT|ʟ'/ޝ,Y2Y piru_PAMnRQV8] _;z M8J*$:!GJ3&8WX5K\]nxBѣFĿ}F)/_MGGȑ#NZ*.j>8Ϝ=n޼]Mѿ,*G}k\rE.\xqMC1bᲟ @!`5G[׮tQ/F p6mׯ@Mj-;͍;<Orj2u?tx|]i+)gJ=Y/UQ]MW8r vT7) (W"g;~s5!,-?ڴ̓7/h4Rq1uU é~.ڱ}zt&ɰo/`fq!NԠ^}ZvHhɧ &}6~u[z"o~^n/,SAB%49z lqC 1w<ԽgJayTI6_N[T&_(`ѲgK. 6z2@XHE ghV4MT,WT1Y%ZeʨI;5>їsM!:ӃMӂY N*jl], K8L;wmhO0C&%'b^9KB AqMoz~oGBKZ3=/5kjSܿRGvXKs)Q-@;G6P[  @օ[9OXrE6FWL)gϡsLȑnzj:{,m۔:|03z4,Y{5(ϟ(Q~vՂ R%Nim}H'>FYf5Ը"Ҍ5njhQ[>f d!Cí͜1]9XqzBYK6x  .68\ZYC->8بŠҌQ;On Z1A@?#ϻX ?k98#;PH;K`t ³O_߾T\y夢c{vS]:EZyr. |ϙ3H^7(%)\A[wlWAo̙TSPs DLpl~#P04VR2{5J atÆU:}9]@TnߺMCbOۯMj݆Ԣ޻Qvr{*a!3g̠Ɯ&#k6jԠ!͘>. @`Q0nzCP&)n<]/^RO/G5d8RN٦v.dK;;%`"%JM[s" %1!y)|Ɔ7>Nm-$Oz ہÇhҔ)TtAs)קϓzE'N0H8-Zex"m4S H;̟O-5Ò$I`C mԥ30,#]PW|JᒑŊӾ ;},0յb`q4?#qVXLDǕ4j`A@0ovȑ#9sМyT=v={Ek5jЭk~ sqlڲ8-x%/!];8eS9ZHQjTr^?3GS*!8y2UVU#?"do$MTA~nTvE?XA+՜ٞkŋZ5'5jԨ!lt' Qٲ*'[4}4!N 0c, `EljPC|Mۍ6VXYMe `*O*}.Ѓ(^H@#cHg۸e3)ZmNG5,6o\"4nL)g΢:R(/wzǹnUs<,A>vpL|yR\ o>" x>}-NqDTr8G_H^Q+V2Ǐ=LgѸ/ij/O$I".y)5-_R`ގ?fX)0J"]!<^ WB _7fOH,?5g7_W,|blz $_xQEuZ6oͣDR|wr l.;zbA (58qְ[egyкsTQ _ϺÝ, ]"&L;.,~i6lȰscRv?ھmڎlʕTHs}v^G6Pǀؔ ߎC&x0`Ukq!^tšʹA 0mˋ`l`"/ eԩ\pis2#w3\x TnW^Ѵ)SYq"8Cm$6:v sI/ҦS5^&mɤ5ƌ%tq4\0 Sn6Gϻu4-[ r*)FKj9|3 *"=dLÆ U^Wu)X<@tT%i?|rVW .\{$Ib:8>~RKx¾1}}s)lrdYG*"/O\= 8t2_N ӌ&axyR ̛O[#n}ݍ-?mЮ%rv-gFuN]u{;r_Ǝ#wD  j(3&D˶p  )WK4ʔ3gNU5U,X.q+Kst2!h+}xP'ag =rT5k(I>dTa5g@rעi3:Yjpx+V,ϙ8:|?v28X5Q%:P4iw;7FmڪիWS֬YY52AGJDj5>fsVW._V0A9AM_N*,>կֱcce>'G l{;򰰻)rǨt4#F X{h  ~+R5w-ZLo>e=Ȳ*`,siE q̘1iҫ~Y%mfjV-ޭR YVRE3v<7@T/QBmGtv\>I9%Yoa†!|WpZs3ysVOPfM)C S6 Ǎ9fe?`77a#˂@0E :˔UuW$ֈ䨾ٝ @>r+(䃳ݸq19 a'/:7 OѝN۷Fuzq ECwPy)hyc&ܒJRdNm;v4HhG+_ZnҭJuj֢s\S D%L -~N`+ҁ7DLemѪ/_yWX o!{[LOCIz_5/A x#ЧWoZ.#6 מo_ӧO*w>l=(FEYnz69:կ1ծ~Y@wLEGԴVԖyDSGD rv[]nC3}~l!sFxi35˗L-7s ,T0EV?sc1㇛r.Tk` 4b0)rRq1g('<ד vbÅﭣg</lW LI!Cdxڔ)jDQHar} ͬ[ܫOoɴQHA # rZm 6^a_8ƃOt2΄bA@tv.^lpM=м޽*bhLμ{fϜtsm ,]u5" &ɥ#rV?{/Zs/[NN W˼'>dgMM({XĈhbTl9B ("yb>#A`#]zMVL '8,f]8rp_I_g  9kLO}7a6nRX9%+h,@Dٽ{ UFT1oTVE ;t0{4L74QJ,8m"5.YBf$>0߽g%]` Y)8( 3̿پ.ql2hpJbiݦ?>~HI䇨,8BW"oՄ_Act1@Nl8brf?Ǥݻv߃{Iƻ<C]Jժ0 ZΛ3pM}4: @@g^GyAw ]Ƌ 6+fj׬I<0MVZ8 h2!ꆺ3"WKO:5Bu7u ';DbG#G/ e%/zgGRaE͛Xv&Qncu;׵:L`/^J!9y&C5[65ׯYiz1 ev:J&>baDOMdž US{wwtN_#(g0gw ZS06FcwG]Yc鳧r6ҩ3;15Μ1ðٳL™q+X/lUFf1i>uwkml ` ~rڹ܃ _ x@Q#@PC &4tA\xot{Q~ 5OK- GӢKTi-GVmFiKC' BD)n{(ji GfrnS1ǁAc`1A@x2Pj53<)?P҇PsԠ۷nc^xAI& A _AQ}'X#D.\JE F Gҧ]C5kF`&1#m$VNdɛsNz" Y".U˩Uj[Di-}鼝wP2ujզQdI[J3H#)^{Z%>Kj/-Y_p"8(v@`ETv#נf7gpV!S#&U~3emz ϛ;rH<(RtHaӛ @dpa;\ٓOk}r-\DN2POΓGMRN;h]u#c+n…dRY8X H?tHBUo?6oyA@X-Aض};JE[!C A[H'b/:{6'NR\h/:%X>{i hNb֛tJB?ApemAyf"݈fe S} =;Yf'G[Qcw^5$(wTTI%cK{,>_| NjUO@$6:ȱ0y%>={Q>}({'aca@50Dw제eȦZR|O7ʔ)w5ŷ}ŏG2f r OE- 0dInsQ*dlk `Q ` R3qơ;1oEa @pE f6-֍%lt,4SR,vĬ@zVhiN+>@2gKP1%g:1#c4j Ij?vT!$⻲hNfFi&֣L ں>mڸ1 h}Vi޸~RNEGʑ.ZMr 8.!5t\؃"Ywޥ2%K3޳0ۮw9sY=Z8<9`qF0 R3-[  awa05jR&& bC];v.kqE#U8g`>1 s֭[KHț/Zrw@#t;p\oߺm=a9Kt`~f;(ϟ~/wj"Fgr^f Mh F|aHMLmtU9 X@$)N[}I'tX#7iBit% D?JB}LDsŊR$@SW^ଢY|7޹sPvrRѼTSbm[S|9jנQEꘑ,&RAqؘqcT}:ϓWQ>5? `O?ױГDI`%L:uL+KPL⒌%OYCվ{63 ~}a,ge҈,!x@'Qjგ>zAշ5&-E>E8MXRmaa4mTZjaWDG^P}yX9 뽛RfŘ`K3m y b Q}Biz=\Ic_!5G5&!i옱t%uѣ+0ބ &# Q E]}~ ҕ*ɉ _I!B2. Xb֟\[|uqG{q<`>tGRB SlY#-W3& 4tX]E/} Vrif.i\Y^\b#FLüq !C"ّX?u!;GEf*M^gI ;05DQ"'> Bàڨ~J"mez, !brM̤TFlpU7v 9|D]"M6&͚*As[^[-G <^3 &uѳw&E;s'e;XS>9:G*kߞ*MX"r2l߷/ժS[ibPg8-׮_F6ngϞׯ)UTYfSxd? aJ,A5*$&8"6%SԡؾMx8[O5b$=~Xlv,Æ;"@3 `y$[&MH[6oVB2 mڶ1r~A@>r7T~%sNeKjCTa8!z Q&NctŦ3$k0efkV{Gxj}vmieei;p:5R;[=E|yinGPU;ŋGx@%_|'o^ZL(5iD)g EKE R!!,E Ȕl樢Vh8~AG.ts~ ٲ$KEثWhiJI(,֝:uRi76T oȕk-\`$c5#;6ͧ: m|pPG0u2h+:~n̖h\YwPx)= `ySӸgΘ#YdRɛݻv7~`i>x*#W(U*~;!uBŊԱs'J~m'5uî t$INڔ4inQfA_*g@;8,4%c^K?\D2Y[TSf(50` 4n7 !53ax?٪=zN4 0@  `|HɺMst?KgcƤ= z8;;SY.7C洞>}JIZRqS>v 3LKkifcǩ*d[0 UԆ"YZU'Z8)E|"V_T#.{q(l,YA JQ~X񮝻Џ?agGDo$HHQE+U+Q ` Fi-8s5ܵ+P#R 0` {vV)Z/˾ӈjh4ITT:uLHeAO[8w=i \ǚ;Q%cH%~N05k\d=KDZAsW/r/eϑC9y9:ZW1.RD۞ct0K`޳0huU& QM_4kA9WcF)tv5Gb l oExkl-Zkهׯ_Gϝg⥂8#bO+QEKS-U;DӥKGԧbŋR$|2N὞0Q>Q9?L"a9r[ =7G j_3/tA@ pVSל֧YNX>5lv/*\XMh[rQv0ЏARaWTVL @Y}Ç6$֨^: ;&2e֝=s0Ệ!]zC N[bN]F=׭ [%s$䐩 3zNE™ӧʕ+Էw4\X|8 "-rh=]|kE}pz"ΣsXZoty<4׬^CӘh˗jұ@5/R3zd^@&8>;͛]ߣ]˖Qz d&x!5L0 kNiuhӆj)R҄.b[p7pGBYYYZj%kC4|5vFM#z أ5CYYeΜQTZ9=<@~ hAd8dꯆ /]BK/~3&~Xy˖S:ڂԎb=1q7o2A`H}N>uȮ8P C}!0{,9c!U:<B0/k^Q* v*.G;KrMk]YҼWwR|:D}W9.typgԳ.]͈ >!e0#} Uo+<盎kI#^@},Ns6;w ;4  U=*60LS",߹ǃp"APիtVezkרh2A FUON"AhŲ>337Fΰs 2ҤM˩9əA@sTva&`:H[645w9:0=#{QP3Ԅ Ata j:)͛6QK(%MLcyu5R :({DGO@5nmxDqrYۀSIHWWW"eQ ;"珘@1U\ΙcѮ.L: 9#BYuj &U L"HWaǏ!t6ZѾT-;{@gFI;`5Bɦ6uTmr9(,rRWO᧓ί~sEYXZٛ:y ]FazׁMbAZ@{~[il]̞jtyҥj_oΚ;H=XV:OL3gڍm2 "Acq9>Lܹ(UKIն˧m@GڪU4ڀ1]=x"Ң'OңҶig3.Lrȩ~4L6'8[a/_ǁWZ0P@Td*Lq*N[ 3jӲr< *D;E=FtEtJ" ._RyG N&brɩ0t3wA]L0c6i8HÄ1}DD iYU Yr" b5KP1()#} EסΚka^*swVc%l լY(D@9vd[ HD5~Fw#_ӪhΊ db6^{J#PdA"թW+0cT fQ5%udL!_A;U>=gVP7fG/uL}S89^SN,nN8҄/_xuD)5Wʁ WK1Z ~:Op}sҪT=mH.[ԃ)UVpJ_БmG=th׷'ծSG:FȂ6idr39Vzu;EØ"k wG;o)N#N:Vu}f'G^BG.^'''ɯ&{0֓Lu֬U灳+wnψkN Aox"iӥxkPqɹdIrfЈ$*&X ,&Vq=qJIE5WK$IA9rPR+Bd y K{8t =պ\ҳw/՟4b~58`H?3#K ɒmd ry8V)u<`PFxhY["aAfGT…xLRy@X "hyGw?X>)Ę~ŏO 4XkSH!e2Im@ GGОBwNfG>uąvpf~?(P†B:{-Y=Z I9,~._~|WX1JvzpA,[TQ|yB֢UK%m]Zfb5sDO3&>ē'xH;}%֍2J]FA@v3L0qi.O4A mE稍nx\R\; TS P*3]F+VQ= PR&L0+_ΧXC dл%ґ0VE *'+9ig[RBFK۷mSX^]+KFq:17?0~-' |"˨YB#33rJAt9p_L6 ŕkVi&Yxg70yvIÇ**Sl٩e4gl&9kKF׃V DO, C74aZnE[wx:imڹK߀AroYztyH qݠx o5.+̠,}ԅS˿sOVl"x1))41\ի" D5kVk^BH CG0iҤ%>߸aBLT:~zi#}gVS ](Q/ctY,ElQ΁ADYmEhc2eʤXfFY2gK+A}mݺWIf˦Žɓ'֭[VNjJ+:TP&;oWQW8L0w@4imKZtڔxr*4r(i!Zf;ֱiF4q*Ǖ%KFt"5{/ 3uB<)n +\lWu\ݯwڰi>gTcDq!zX8k֌kGpߏ܉407ӕʕ(Ln@ l, VE7YdQ4*ta& à3X1=lecΑhZkɞ0q wi~f.SFp{28,v^=r:uH8G"TcnjׯƎӊS5h"Ʋid9!p!uS zG&hASζ3o;N&b)}fUo/㓆4LO_Lk':8mQ)v>&F Q49}F5A {LQӚӆfJq%fe::TԣYczUNN;7P20ׯ_j߸?zM}}Z9h EuaaY^~hw}(BDmԙ1Q[[Z ,Z(ݻD-jG;רiD={ +3=?Ο%m86iڔ~WĊezIYXD!&ϟ"5i+pPl+L0țI5Y(3Rىta r ^ H0`NfR 1d`!zQ^ ܸ)&҄ӦvU8 g@@IDATk%rݽ1Ey&!u.s뒑xwMYyOTʕcNu}kՏ|`<-|?سg:p87t55Q) Lx!+?|pQ8 JmDq_XzKoa9O2BU%Go6orH,GoڌRm+^AO&CYNVg9g"h$-VMEr\) ; XBԉݣ]D2VVTg;A^#!cF6T90 O ЗEf,DSc3GCRvmAm)>"IT`A޳Ei%?)}f9Xxiٺ $mh GÊS6޸L^}rbʩ_q>,wܓ@pZᰡzkaÜtkbXJkSMEm{?Ysڵky˫k*ڊ Ca77' 3tDJ'DX1gqyG]\jZAg^. r沈yvh<$Wݿ6sT!WXHo`6u"ѯuk[h(,]tԣWO%wQL(j>BUQ=M9#H̜1uXIk K0<=9%kK#qez'S&iJx~G?ڕn'B ,"&3T|yLUx-t[1icm҅1(gF1@0' Y#$XZcF 4$,ӲKUaF~2#/ZREqҧY;wiĨ*۷*\1fZV,94ڠ aBҵz "3t}f$L?#Ϛjj5jyg+Da1d&ԪUK[rB  ̿׮bYx|.zL%g.yu-,wnԭCӚo_̙b# mҽQf,*rHNzT OŹ\V#"|oE p ?f櫝ûODGe)ܹɌQRֆѮ[KtA͖#j^M/ 4mnzV1uT_GVx\]@5E|M82M1C =z<}znۆy̼(:`ї RMY=1>yF'􇇼xnԮJ0b.yA I$ 02]⨫r0Y3jn 霈-6#;ّ>8h}I\=w% :,>krX7/_ZSd&M8ɠy TԢŊs~1!ʂۗum/QׂE )߾y pZ4kn5k2}a'$1= eaxzUǏ7Z23Z(Vu3Q郔* +vlߡQ# Wh玝}$!"׳p]#=}{G8+IǙȝ˖kf[2q}/ƬgXN޲zHV8lp0 #"Oo1rޭ&8S2C 5%`X w^="}svQf =`r-toݦ"w Ґ1]ziDj}FI&.'@f*5d`T ݻvZ2ϜA_|ZהȤ^ǰ8 gϚMK.=ȴ*VD9/L~a7vQ1Aؾ]T#;N59r 9|]N2 la9W晴/fj"WW "zٲ /WpAGrU#)0YyFu0iQWd!2VubZzcDXsj2*p`%ݖA̺e=3T̐Ҝ!ޥsg툠;0_C}_k\{͠~Uԡ+\D9(a8*8 zXK/\|r 1CYΣ%+ 4F.{2Q+lin^>s4eYRǐ Y~>WNh3\ȝTs@DƄJN,9^ZFŵiݠ!Ŭ^^\VӒ ڢ9!F೘ @`%klj V}%M 9q  yʐQmsc z]vm%+?٠[ڧWo*%C2o\n8!djL Qys҄qsTN:Ee`Ѳ@! 0a$Zh1|b\DMG] anIE AR`{r=2oeNEFH`j=:iVŋ/h1A \bcBtWqtMV2fA5NRez1pgO!^_4mdiIuB J=tZƟUРOJ;l樚):T=t*05ržs *Ӧ..*Xbv?᣷\-& ü#ru;o iB?n9ԑbiD56'Az(mcG/ɭk0K251VÇy_ N̶my JҲ%!*+&PRL5jTk5x%t"G`/cbXq_|> r/'F>i?BŊtm#˩SuU ]:uVDGRa_TNuaiQ[nW;ۿiB6$\h܉YIPOMlc L``İSTkI=Ћ:ib<,ul žc*&ƍ'55=[\ $;VcD}<_$Ntak֐+믺ycܽ1.YLI$.K1 @4e˗.W r>ׯi-_ OˑV)RPڞ GKt҄ 5 tI~fP<8 70YVN_ӧW/50t0^3`%,8]@1;(R6uR;E2!+fRZD 0:W5hZE&5_Α@'jDJ&qN:EǍcR14i/q`ʰkcņ3kFgYfsvJɢp\:h ݛ>\$g;O&͞qj0P" G9*SZ5C g!—.}:q^5`𙔃_I'5 %J(2WMu3cJ$˲2H~1, 9y ||mTNlc1~5cR&M~8F{祘bAZ 5,y2iݷURlLztJk}6>OС w=mQ}X`Z(fLЭdRټS 9wY?26"2, 1' ¤/_Rģ4"Wq^}#o܄w:{,8v=쥤w< 9'Sq|DrJ $<" #zezI0iȫ8>)7kbB@tuWOq`,Y( b mAl˖-tAH|i”*HC>ubeF9Dɒ*J {2wbjO_Qj˵6\4P mۈ @q TOޘ +w\gry`$ՂAzœFZ`X琣G.6v/|'U/jΫr\فU+BYy}*.MI.bNl ~ lzB|9Kp"jv{P_Ԡ3fSG77{n{玢6{s>GH5{@vT!s4?F:w23{`tcb7۷Qhnc%)uJ| J=|9r`aBdZaC(  ;]6eNWhQ (͛uĨVrc\R܅BIF    "wAʰ{;6TbL 5m4K5]SP 2,^lWhQo6mSsd?ilx <{O 3R=(W\m7N%M<K?#%2PYh Y0V˂!{46UZ̟$k0Z,fk aB.ŨXK,[:k&|֨yt3o;nkӆ7iJ!< vA@%zLz) ^ekukVHԴA 2+؇!#|pvvV~?u-ԧG\gsA_߇eG?!%J:y:#4q[<&ڽ;Jpnݾ'a\/௔F{lsyT)jQ*"x'c^1 vgIk -جK`ŋȝ%_MDO.لA:ռB2PgOzMi^a'O<1 m߶]ەbs>"rQ: [xqѧWoZσm6sTy7k87g-Bԩ]Lwe!ՄqC NNNԼe jڬݱoDlÓUjhvɧ#pYuYfA'%otQZn<$fe vlCڑCp)*ΘA/׮18{!gܚ62My 'n\&6K-g=aEgC Ӂ] }DԹp0dsĢVS0(3  }NM3k6;V KY pW\E7 ^թWZnmO#8}97;b-89YV=gz A:R+s3%r[m°v!!=̝vyis8^&:+/; A@: /͓7ׯuD_9n 7s+)Rqt` `Ml樢&sjŻ#Mm3 S/wz"G͐[REȣމF+ץxM-dA` "vQE-Jqy){m۶*Ubv@N5稾89nZ$I)Iz4f4}ks0/YB H r5kV5iM@}W`wǴ}6mw5*m3:E`DL9^fmB GQ-m%:PWq*V:f~sM4QW%mt-;F9&$18qZt8S "V,bLovTzXܟFtk4mJ6P#[{Ò\k0W8pZ2ౣGդ~'HR35#YL6sTtalGtjPCx0bN*X޲\S')T,m"0wd%IRLZ}j,ḑ{YM:.rG3d-Ps ̺QY7t,rCӾ0LzLzƄKq7W1A@/>5i 7oTua8mvWĄpXQ ')KS ;LG왳ނ 'e@h9.trߣQ#3}i ܹ!d5i-z>ljKI=5Zwӗ+2c ` Ξш>U1S2ei t?{EI%$HB! (UiJ/H^EDE^;H(U#X%@BBB y;.%\ٻfw}yn3gr .q5&E"KeG43*oguQبTvS " 4KDI11Tx~r=}䄀 N:_m֩[կGG˖WdȨc%w옾H{Xqc=Růӧ?(N<~=͕T y8@'wrm6^pM3^eV܉%c56#EdU\uc3f3TuS aZ3ŋ٬OP Ѽo˖QuTmR*$y->_/]=^PhQz39KUUw.A9 `nsߟ i4lpBEsPP M!jƿwIkԤJZ^^p$ "Qs*BZS0㗕uq  `[dيxYʦ<,AW3Νecgj՗}RZת< +ke~h*f3T#U"yMAdkcl7-7׃gӛIQ&;):h=)Lvt$WJbQ^jzlPrZn֚eK 3琸A@lq}!:gJ%yfi $E֮+W *y)3$|obKˁ@bJtNN `?ģ).dkߡ~`)$$Xb# +WЍ7Զoѯ*Fn}JM.`4_QQQg ok>5)҃S~Ƃt4f o]KnkI6A@ ./No՘f(2ӚjKIF>,kŊ'r>5ű ^#PҦPm@,G|M.[]WjסΉxE<2g.]%+jߞJIx&N@C/ ?by|ӥڢ:rԍݑ_s97oNuͭbEeA@@n: XF2f+/m;b궊SK:zHPȉUyŊLQ<޶bcə#B@  qu6kF8x⅋hۓl}HMlRyt{&ND NڻNLZQߡBxYN@oF>QŅu888BxSd==oYk(E;uMdVg̬#"dMdv _GW\K?"*@avI} ʳg#n-vmoZ`E F &Rק؃ 4P}x1c_"EdcH%P_prc_U)nZ)|LܹET8~@rA@\7 %n -Xmb<3>6{ qL^3\+ l {}p!2KM6ۇ@ Ƀ]5\Q\4]{*A/Lxl%uY8fJ5{PIʇW0e{zr,AH7.)؉]ZI8`#ȏ::"=E:8YZ~})it.^Pb PN3^:{ E&ʱGE6Z+y6K,iXbǬUdQsHMƌUR=wӑ#Gh\I!Cy:A `'"9 `F;j7~fッ"n+5DɐK7/2WwBaw*/nGŊe$''siyeȆpn5U7 %WVrg+k!׬nwۜ=dj˧1ٌLmO W[^p-l ljy"fOa֍+b%O {$ KWʍˑѵY?3auG?@?D:u&A0T ֺMtH ^F념 tlĊ%ybsT E-jĊk)fa*b2Cuett_4T݀s \DٓȚD?ϝ C՞.ƒ-g//\wo2 c{N)ut72?p oۖ]7KI xI'6LB_ XUؠ{. 6YVi(E<(0 Pnl@@@U88hc2-UZkQVT-]O?mJ9+zTleA#)1!*TS q `v)߬K}l9%G7;OtZ!@b cimDהӧ(t›T0xy*b/*l@ K3 h,cDDD>r ҉'ԖWmhǩ(]8Nl~FUye 5{Iݸl~?rpV709ߙrdZ -opAc^J~0 .,ܵ u>S@pZjImo"ܺvJW7Wi6űAQ#n,LݣHv́_J瀑;RNR4/gl t" X9q+rI!C1t%C\Zny:86Y0٠ `2T?2۟i w߱ cV=f3TR}' Hykb())5 ϊȔmڼ\~Ȍk}(Rt2ܩ[?yS 5SP 4k܄$kvvARtIoJ@<{?E3Ep4[Ec<۴r_"욧{QM # 8xM۳+FmllQmemȰFd۽k ؑ\ŕf]eWT1_7N əIRV/^<m/Fo]i,/)v$}8C/5ڷO?<< A@@$N:uԖQ7n3`߻˗R'25繣_z-[ޟIVzI c_m;U9SEC֘8 36WX 9!Od#LD &cwӬցֵcU7G e?nwwzSԹsgz'Tn6F󛈌ҨQ#Zr*\M4Q3 c fT3"9JD6iVllࠁ4q[xbz #YQ-t "DŞjD^pkzz5NȨ#Dž O> {c9es֊kUi @u!+3k@}&y&:jm/ weMi_:٘d\f+2JC6Tu"E$NĐ(KxKAdB _q5ԉ_{ $# | lVޜơP!79GGJ'@2 ӛ7n .˝:wRw8?|¯PI Mu/ȇ*dt "޿Oq^%J )֑l=9/"3ѝ[)́&d@ppZr텁̠ߟMyss 3ExYl+ֺuq8p n~5]#28m2B9EIN"Dn$""hi+7ufAg_rJGZ_ u>sדd?4JpD)|v{95˺a"$sͨEZ:INNf+ 71V ퟻwMAVHPk׮)u5ogb^4TDDc9XsbjT~tשϟOF^ܿOX>?|89`ͱo&09HzoP-dslfr߾={Zniu[<ܹS$z)[5+[Ԡ3g`dVQ{.yzzF9NJ,uȉJ"z%LuZ1r%`Sn_LcmZ' E!ZCne=zŋѼ9sa @~\j9r9!,ZH.;R,\ 'PN]c q+bcb- Al#FlZ4#$/V0G.6Xֵؾ]MU:rQ{E29oF.ץqݓ[[P zq{2-{Kٳg*牆䝀Wr\:۶S#HwM:y..n֔^}p@3 e f&3{e'Bb^l6z(ڽkHo6ScI4&7'Lti-4~k|@]n-y l*K욀lA$xٶ۩]oۦn@LD Dg͟WPD5A%H%v% 41!;q @v =q"O7| KMi=D6Їdil5x":Ǯ"+ѣL][j8q=w+WU or֨YӰ]CۯXnݢ"rULݺwSADy\ubC35r0җm@@Gxw颶{#7eCIˆ {wd7۫V-gcKO^ {q  y%`iM̨}Qu-N@<' "ޮJ˗.L! ~?k{' w_ѝ={ݬ=eLnݩ3w|M 9#kUQA-;'05ME;i{=8$쥋H\! % ^mRS]wɃאg+׮~S:ґ.ENy3[p@N֟: ,؆ջb1jkpF%9b5^TkV*AxIPvB??: N @Q۷Q ΀jkO @P 4Kh~}IC(G%ա+-BT jəjJFd]2vlj~/i `֊ C,jE%K.Ed(/=UqTgY-_N%#g8EG͹sTNtkg "CUSʀX@LL ݸqCuy!DT$m֕+W@@<#IΎ?9͑I-ܪ%KIuKZ Z `0TU }||ӪhjժQ'䗕\mpxE6O>{?Rip]:|NFϔpvX UKF_ $_Z&R R]\ ɬ3@68ϬV_Bg-As VYf:T :ٿ7T9"~A4C@>5 @3:iA-ZPʕ(6&V\@. zJu ivkG) oӦtée}\sj.h@f^U"Rga*[y  `kOG:vv={bq )sB@@`Z24 wP2?>Xˋ\L۷m\% 6GՕyMWY:N<45=@,@8v  O ,,L "uի8s&-ڶk @lgjVmSԟ;֪tY*ސi!QŸpJV"k]H<3  0TB  IKKW݌˔%3{6?tIU)G[ ! F(nYC֭l5LGՖbB/<5[Gzk!  kJ `tS}ݎ3?+]4=YĢ ʗrcRmU~VnȩXi]G:۷'yM) k A ̨G U8@?ذ~mڸh%JP H@f@%?l(gNԉoO.Y݆r;'5v1< \Ԏ4ͿdIk:\+ڲ|ߜ@왑8p{K}HǞjA'~d,0T hA $/+84Fٙz.-YXQ/S˨T* i)))׬)\#0Tab( #pUJO W*[ln._䜪董tJq.տ?Uh6y6iJ/òxs֭9Uu*OILT R­[6;sjNh@@t*pTɣ y4ꐖfْ5@@ h̝ۗKEA^;#GJoӵ/#|fkwTVU5_~gOwf|濯8@[ P` ֧"5M~J<i'3#  N۴iөT9ihđomBg^I=EnR$} }{5UvӥҗM:Pw  aJRӨPjժE슷zժ\݋  2ݹ3U5V7 J _?|^AI"!_5' {^i=Nt/ƢErqH֋:57{GS?4M:n݌^C!# BհqxfS>}ݷT5+h0rVhKɒTz Ű[l_(rfJIHȤteT eTɵ\LUޓ@IDATyV")tӀ]Ge+WζW^8u(m~'NkeĝS3[G f-*-Jg۵vF#-%\'8D]d15n؞fg͞wysEfWh lZnXA YժQiZUk*ݬl<MAŊ=#}(sQ$6>D^Ŋ {͛(lҤLG=LI>N@@G`ԈcvݩoIC 5zQ5U f?XV\!4@V$Օ+WQssssn=Ӣ i9[ .T҃SԶ?(|<;y2S.)(J"吏"φOW{t 7op^WiٳH]w%a\^feMjM?"~H5X:?t^UEkF:'r`1ͨ-Z=cڶ#1; QK_)$$:"&c;3 )|{0gRؓǨD6R%rzW1P7ZN$i N#pժn4ձtt,qԘGnSҝ;"gÏQ2c78?ceGXAN y׮YCQ 5<RX_7+V͚сIRռք5@@6mFŞ8A3|pEqJJ[4oի_ծJ#.ÇeJ:ykɧlbto49'/8MN ȓ7Zɍ=I$Rիf5tZeGNsgo0IJqf?ى)H:$UL[DWWҕiu@󙯾R%80ֽ8Zˑ_-³Ɨ >| -H*ɑKpj!u3) Bm;!p1,uF?NFdaH}ѧ|BK= U<  hWR "Fݻή%EEQ"G1w!7NSj5*^&9߹"kQ&N)UֆJai#;rq:ldS'j#t'Y2h"ZnH?Ȏin$%z5]g2ewpO2E+6Vߑ#"ZDm)w be `H! i*\Ȼo9@R4i$0#G)G$oWR() 2y3W&O?wZ,r>C9Z8n?QfA2FA:r:]d_4z4 bOGɭ5R9O˗)83gʳ'׭ּݺ{W_evO.} (&adW/]/gkg(sB@ 7`K.drww%KŘ=*$Ye~J~ee UNsߨŽ*3)Tޏg+p$!#/"0TXCka}wޝ$!o>jޢ][% /}μГ>L{Sd<0(I@p0T$E\ǣ` OٽB8)=@@@{ʍC%z2NJ 5z=>]"O<׮fy$ܼI8X=j`;ӥSw=ک#]k=vT}?0Ih$kh@V]TDNmEO?^ԺM9)SlEu  ' #JVU` 0C:ݽ>/a0wmi??}%FEѹ~wuןgE,E)I FS­۔pJs?,y9{I p^*[ .Ѿ=ykG 3L*蛗/Z0]߀if_ `-1TqqFr)ҾH`4  ]b,19ЭիUQM-nqt7]=~gxtI11t݃sCdTfML)IItBŝ  `GpPׯ!+1oтy!z BOGx2bŊtc3o%OWne@j?S;HÆDٸBEg|ojU^Qů@!p1-5qGFF'RtzK8~_LN?:ݣ;%FD8@8E_ӃÇΎ{}=Il:Q!^S8b6%Ry}/UR䴿![E`Z;:]߀@kto>uhO~jooͨ&q?wd}淡!C*Cu^R 7~YnXR2V׻[s}hAŋupm֏tEe%{9e;wBl{pb'ǁ4C~/nUSkկQF&S֚֫_OkN1p:_Ł4c'Z)   `o g+pu%'"b/~Q#5'KX9x̡1HtKtuw3ir^V5 C5'r"pWc5n]j<vرm߷vړ'Gג K[GGGkI5  &;u*3†R= 9{aQdNϙG`O!O#-S1tu /kͨ7O@l.oqv)_l]ڳ[gFFdӦH~nM5T۳{֤eVTzu :s,^LF֚@@rLבgRoauO?&|5]:e+UVR\E1l4J2$=պu')!&= ׮QhJ{+%H2gI V*弴.\H kQ`jQ81|ÜU]a1c_1,1 BXbLʕ1N=w^sX:P78eVӢevrwwפP @@rB@ֈ9NJ={ȑ Cy~pYOC|n!Cn}'N#)2G̺>7e[TUw58㿑Qt0GxdϜIQ}: USvw^ִH~ã5wAc rK 4vSd5V5CU_e+,mj6,7xY    ` FSIk8HT3TYl*Q} Y*;?صLϨ{Ct!;}k1s"؅&iоyƛ+o֠n>EɓjPZUFɠRpwg U @@OB/Áv t҅ʖ-K7oޤիWkWQh   `V0T͊X[)**d. 0КpqqCSתΙ=sx'41tBBy9__rssKw '%ۛ\L֯׮ @@@l` -6TCS$r׿TͪLJJJ]    ``#@"|Tr嬪\zyy{QXXaFZ   "C\d. O3T+Pȭ4xpZ}   `` Y8.uFJ̨fMIWK>>>t%Z}P @@@I7n(E0j .LGP~?c=x /$CTx4sgϪJH"54IWT\9 N,ԤP @@@`)Zg)-TmB^ rqnצp jC 䜀nFJ*9 55Is]FC?^:B)jZh @@#ΝKuVF4y%@zKݾlRҥk{@@@@`jAC<8jbF54xKfg$5!T0%imP\\MA@ӝ;wɉ*UBj{x2& ۻof/8@@@@߿ODl^ѩܽ{ԫoJ+o6A@ M@b*TAUh$18@@H`i4V sטQ̤8 lgԈ"⯝=YGot5v7> @@AA{f!fT`>===i}F5(TfSAЭOZ il=J_777z4|0Z0>uڅרp@@@ xƼ %$g_Tnqo_z勞 .Î6Zzu;#вU+lX퉓(Jkgt`  @@K2<VNAE@jp5fTxq:u͝3@jZh @B/RB|yxxVVݛ;}G!!!f ͂X UkPG f#tF]J6em4詖-ՋybKZkej_G x@JXZ0~L@+ Ơ1J kej@O@7ZZ5wN\r?FV  3D "QEj =3ҧo_W)74   ` 0T-A}X@z*fT-\ 8::G|Bδ}6-@@@Aj>Vm8{6H)TL*Z6f% :e EFF?4   `^0TX@PYfS-]C]9*WLnݢ&OѐfP@@@ `hnFZuRC2b\ɉ~߼6mh49 P5']  `Q@JUaZ:U5Ji$n޼! @N P)))=&t# Q_}u>aZ09&GAA|Zn> L 5Xz}xJLLԤP @@@ 3@ ʕ>YTvttϧOW9u;F}YA   'CL"?^Z]>! #PlYOfu0~8P @ j9 5 S^*p8   6L ?< Jʕ+K..., ;K~=}LQ   -0T< @9sFUgSX@F /J~lZ8A*8zP@ oNիW[@Y&M|{?#qc   ``S 9sZPM'FۗQ7v,EFF"kj'AMnFfT 4'ׯ_Jo K`"6,@FtEU\ fwF{vg4R E   $C՚7@ 6J.M^^^n  UVLQoi}c%6&qGVjԨaJA ݺwWUW_a3YTG1H*C*)lڸI5ժU+S5v LStt49ĕ   𐀃cK9[3e}IIs26e˕Ef,9h%^zqrtt:hVO(]3gt98-ׯ:XSYHLL .PrRRQFETf>bcb.]jC%'''QZ#qFRfM[kA!PT)վ}[~QGۈP@@O`ꕫߐ [jBT%ZnFɠP6jvY*B/!P|0ޙ4O?h5A@@ $46z]zA:0T͖o޽;(ٳBڷ7={Щ'i%kieTV|@@@@O'N5d2S2+^4 `.vTM?inn#0靷yt=9l8]vpA@@@`j9@ \صs㩖ONT 8;;}Kgƍ4lP\0 fFAItAE˖-.)B̦%K٠ α:DA,h0dC@LE_Q||:U    'C ~[dќ!ڵk_}rXne U3E !kWԖ-[ i~zsˉ|lҴ+؁ UsE &'BW._&WjҴG K}+cǪbq޴15oz80c@,@`wZFQ…-#ѯ>}RJJ ڻg/ U3E 'cvSp5=\-w:uL tl"~Gkj@ /BСCHڷKLϨyt=:h0?~<*k! `mE<М (::GZ@@ Ux7];w҅ ӓun߃l@"lΛ9}Rll, 2VZmSc   E0TT@: Φ\B@@Kw9sΔHLDMPђ@@l U[zZ I=JIӷHC4/hWK//amA}  #CUs "x[T&t^,-%MVT\9J-ߒӣFfQX}kWZd):kh@|niy@!`K[ZCUOiqQƍ)ujk ޻w֮NMIӻo[S擀6l8?w>-YmZӺQF$i~ԫ7sK> 'C5 B'p)6釿qot]G͛77}hQNPHH4\ehNzvNoOH[a,Ij=ٳg--'pBܒ/H P?Cp5u:b ۙeK^zRX70-q~=6otװ@@@싀} ǶG#AcF Faa2ujۮ-}ZO>*ǨPQ9BFRtCJA eʨ@KoH V֫G/yؑ *q ̨$>Me$''Ӗ߷Њes^fB ::":wVilEw Yt]vKѣ4q[ԬqzWhڵU(Cx ŰԙfO6{vӟv$zȷ|C$fJ@BB9S2iL68 x֛#&k @n ٤Jm#?6oD/]mV/εJ와ץv֚QF~ gK?(I:!Æϧѝ;w詖-55/CS"Eh68.]dlݺU?Vd! ___ر*"itH%t"/,רAm9"dɒeDEEP lMU7yi%Ѐ_bŊ0 ֌* U nH.3]H1W}a``owv~Fөjժ&crRj/99ɤ1 Tvm*O9c)CP^TfL777*QYoIۼؠ"/Y+{O=R= n.AM@ۣ`Fj$u6kJ+K{m+%%Lh[ahf" @LDL|х|2]r\捏oP1$H=9./oys#7¼^ Q!9v+ Iٕz4p^Ɔ{@@lfT5$گNhPwߋ˗lF]y{¹uARw{*mF iķ,5uQ1e߿Owsw&nݺEoN߾>CVvW6Q, Of F|ExWbMQ3QDPg1hVX.D...FB!ȝc$Nu/_%ɭkLlBw+M(.d^ ?Y}\%" 3D7nP_^k֬E3Qc}O&Y 6{!a:y⤶հvbVBLZ̆|/C\^8IubV-վ;rnGR[Hf 7GGG;ucɱy/7 Xjv/횪`#w.EW癎ue{]uSCBBTssfϡ_׮3eh#!C%&V=|W%#j尴6%j ʏwx<$/TuQ#yxx\/]s ڐM>^ypf,6A C gv-%3-է=# ti\:nböl.<{l.j* 3w mzϴm?q늸yS#\V-A:"^c|7/0$T!J*eXc0J u67mVWfv9@I$GBh+c4~F}}}?}~^{Ӕʐ' }9;t ܹO11*:sPDF!DEE={h׮]t!8󀓪TP (7Aҋ"DlTQTPEwtQAAP@˗d3wvÏi7?s'$''inI#˔*j/x oټY.Y*K jJyh+YdIs|kd^\}3f$[jժ!#4=},_\VX!=+ҧ|Pj֮,I0'sE raɩ-^Lj֬)eʖ*رcUm۸a矒K[rewm\'$_oU99qnVT}5k\RV,_&N}P)]Uh>g-~ :*V ]˖-ܷw^p3ݹ/'iF/o4nD֫e3Uax۲e\rUɕK*WW3z˗+3OCZk˝wY٦ej׏]:O…tV\}Ν;ezWHoUCߛ3Ęi$񲥒;wHegϚ-}{igjpλH?i~%ݞ~J#R+CG>uȈQ#=IqMҼiS9nOnݤsD9rDo Pp%E2c, +$]:u՟)P6wd'c2oɒ%Kr $%ȱcB6^zgՠOzɓs.cN񵡯>n1c(ޫ{qH[! ,VBt^!$~GgҥKjI!3ax曞؜`d˖- #  %E2ut)RHpQsԻ^/>bJ:~"G?bԖZ>O ^ї~HR%5^x])_Y3gʺk򿛦MVpwǏF@ІOS/P Z׸?߽}"&ݦlMbz߼i3 lcM H]NPjɦeJiJ~% M`x.38,5t=,>cj?6M6MuK/ ~_leV#x˖6mڵiOncӔye@OH 4j~?>s@s&MFaӔ -Ϩ%6qF  i®:tȦ˗))Ԧ)$[Rm<}{i̙' l~{ߓmلOu&&)=IDATX֡}m<}$IjzUtE^W6m>A^#h~}v6m)PQ Ib'0(|ho X[Wש[מcm-j}dRFQ͖g*T}teu ou>a:?$_|G))0qr-Kӕ+Wx+m۵#Ј[rMw^y 'o|R0N;t𐝅(} f`+T`C^|6 7q%eʔ 5xp0wyU&SȑC'Z7!֑cl+ϿӞ[Ά @ve{Zt^V_oۦ ~ \߰=ݬ,ጸ]NL>bX7n}GէMԚS#07 sDc}l_>}75&#Մɱ7L`gsO?m!ãRc׺~8kI:u\-8/?)IF<)Xʖ-g~ɗw20uz'>y:uʚVko2(ep2LL>Mڵo/'M5rf߀^͋TRI޼)f`Z qh"XgK;sRlɘÑ ])W>y4etI . Uar뚸g͚dSI MTSw)b@}PA{9W3 vb FF%  |A% B`ro&):> ZM˹gblT+o٧L܉x$Da:[/F̏ȏΏWr/ I . ܱ^?++/36gEVWSh2ث}ވn 1LE5!~jl g7, .^#KZd-<#Y@۫o .oε8&rbż]ѾPɒy` Q俏 o.1l/} "3[\)XW1[>|ȫ]χD=u<{]˘ #a($_$u:Dl ۦΘ1CoϜƝQ¼ٗ3,Y2gYaHtu}^`r%f<^yG4ժm_ps'IOeZ1cz6h|0bssMc2g#M>V{<&@T|9yQ8Alǎɦ?Bi%}YByL~etCо&ܿTTgǖGČ$KX7c*ancf͛њ;*m (ȷ Li㾠yiI⊀EO1ϴ=mZ, ihYf lR˴;d^QȦMMDJ xh׋;`c.<{mUFJ0To^ɇ /<&G~6ʝۮvSd떭wID̼ap83ep4(1e{.i^]ob#O3SFE61W#W,3gFoF./jFG5=Bg"=6x)埽~Y+Ҧ0@c ⅋t02ma␀Θ6*}Ix:sEMPׯ[kĉ{@A3gx1ƋysX9@`d?͟+V @pIh@1T?(YZ۳){e+˗/˗"q.\@ {([f L ?M x0xE:D~cpqВ@D\ٸq{wbŕőK4,A9P63ѷonj#hj^XHߕ tEȐA3&a1gl-Z0ԭW׺_h̞9KnϾc{#xܹ>=xP=˄8ڿ[lmHqE ͨ-f{K&cyZnL6mf٬oD Mv0;0` XbϞڪ3^|IH(f]ޓufoxkhot\ 孟Zk$XdV l>tH/1cQk_yeRVGc~:BkѲ65[>gxYfoK}uTj򖏷2Ex$8#p-3h\n}ႝ3; 5ڍ7#Vg#mz[~u>(;ueto 11om:th3<Uf

]pEh  tݘ@o&:yV?+fM1+&}5@]t5Sd/ #F)Ef&0jxkev N8:xqn^l QmQH >@'ٱ}9w0b(l!C?jS]"^0:Q-#PuV{ZK@]Na}6ڶ<sdB';mHqI/ƍM Xݘߓ'j9߰TANi alq^977Swל!б^ҥ˯ 3ݷOՏu?P1B>0\ʹ|W_2-ԭ+]K+s /x r=@8~>fBj:I+5 SCWPZ5NqOa3gNWTQ?O'R3APN{ԨYdMGΨ&7S頻/#bhpyi=A <&*M Y]9H9|Dy]$5 ѕc: 5t0wqL2FMk~gnGW:{L +i5Ty8^b'B* f`YoAw=>F 9b) +0 mJPf5?T~> li!X&%Q0k:CѧAŶ7VS'x* ScIHHHHH 3DHHHHHH !?5HHHHH1*孑 @B$@E5!~jl3 $bTT[#     HjBf     H&F$@$@$@$@$@ Մ$@$@$@$@$@$ PQM.oHHHHH"* ScIHHHHH ?\ $DTT6 F .;v/t]׭͚_}u @dTT#3a @"'k˸wߕukʙ3gnnl,_o&۵]zXHH @JxF$@$@k#rZ`5[VI:>}Z'O.vri{3IdI"o+WȱGٲgTRŷfF^g>}H?Y2-)1gӫ!CѦ %T(YeJL2HHPQXJ$@$˴)S#5{&>*Ç ӊOHNy+V$}~@\|:֥Z6)_|`"{PC_yE>8IҤI#V,Y4o>2{,5kVYfli>imD'W!r9yZutP}I0!ϝ?,TyA7aG.F -% s9s3t556mZɓ7|W: [lܹHʔ)u\ҤI%m+W.S,^ѾtIdt/]?rHn}fvɓr…Hb;bAZIm.]@yo(I>tY'YZ.Y*+IHbHj A1 @ Ю}{ټmhdY2v8LчL:fZU9ۿ/lzԪ];>6/ԩKg}-Z:hM?xњ.YVmh1G+@t'+$@$@1 @E5HH +T6jΝrV9H#?٣}>$R3-{Էayׯ_o.]uĭ۴GN3@$@$I n3$@$@$? (X6l玝@BYwJ-Z%KY+/Ι܄n(ժW˗/twW\YnW]g={vAZ!8WʃST#0]btT…%r烲]0_W *,g;vhgC 48Eڸq/8K9~cu޾}+V, {Xz4K=׮SMfHHPQXJ$@$@:Cxb(U~ U>L Ȅqݱcu?8Pސ>M6koN'̞uDIrd :nϕч<3m}~]w 'GGvCǎ7zo^[dR6*pB;wn11K Oٕ%}BUx  HVXA{CMT/[+[)g6j$0)\TXѦ)[V+?سURK*vƓ DM w:SIHH (_z%|orʶPD!^ffѴ3"@8`$x_y~Gv1jN3k]<wsTU&8w9{|ycxi2y}O>n)|t[L6U-]OA{=)Y*œ6omdg6:/uk睷ѧлqf?o)`#Tsf=jJ|ݱڜؤ[Uj֪)_)\RO5Stv̺u(j~cPL2P1KRe ` %B$@$psh{sXHH (T8¡#[\vˊe%y[cdڂauf]y];yA)ӦiEӦ Ά[ήu7J#oϬAUl6Q&Qw?V=O$ѧ 40`&d￟ ,ޭr!S{5gE,+Lv3\@ck#hfS!EhߥKȋ^ YEL& hTTE  H` ̖͗Wޗ3ؑz=}XZrHOy͠PSC _#L9sk5!u֕ 2x1bg}lAI-_|@9QxOzIgɏʕXOiΤL=;O9y6\njIVRpl\iR*N:m<<Ë3N}<4c3$kѣGeǷJ<뱑4ԛB$@$ps7" 4¡Y7x}u .bUlMyue>HiQfI-ewLQkAOrZi٪eٔX#ڷWr# dO0,7Rdګ1MO5 Fmɚ5zqԇpd\nݢ'T9L`fO^NJD濡}fP惷&!  ЙRtN$@$ -R`&*^f.7ELj̘=?bF4uۄc'/{W&M"ۮKu^zߌLH)\B_;~|_Iㆍ63kͽnx=~٦\G  #D8{X=M$@$@qB3590Znk K-&P.FZ3mP*c~U[x B5d۶Rf:t3pآf뵒eʸjԖ[hǍ7aNp|dzx"d\|ܪjתEK/ /왳o>Y> >HkT,|\dաC#GLs/--ä́NvWv h[`muzK6Q[`=Hdj[3Ǭ , a^f-=``uXAtȑYn'Z 3c   xD Z 3bŊi%MzO8HҥKEj-f 'N(m !0پCYr߳jOIEP3Om>(l(XPN1ݮ>^kPSJgw%Oav횀4c۶n!_|&5O@)uثΆb&uT"ypE5G|!"M\N: F?fӦLuR9*/$@$pS8zSXHH 1z6i:"uFa{p/0q=4y[b%WcY0uݴqnotie~~`0M7in܍ i9Z\*ɒ%"-mjw 6L59v2? p' @$PD3kG ^(8Gj[4lȓŞݻaj=>KQ uwdZ s^8 8P㌪-U{*rQ6mAyN$@7A37EHHH@< c-oҥQ3mt(S'O#Gm>SOe'˖I֭ݷy≛nL~lTksޝS-XҬ/‚$@$/$@E_IHH -u5t-1SFkdQ 0Α#M5ML=SN{TE,D$@$@8xB$@$@$hRzuŠ{FR+'S؆~Rj O?];ڭLfF}mw[UQHHbgTc#k!     %ܞ&@      !@E5v8      X"@E5@      !@E5v8      X"@E5@      !@E5v8      X"@E5@      !@E5v8      X"@E5@      !@E5v8      X"@E5@      !@E5v8      X"@E5@      !@E5v8      X"? 6ʽ:IENDB`spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/bb5000_lmcavg.png000066400000000000000000001406051511632712700273570ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxw|TULR EBHшԈD,.қe (UA@@)R)K RJ E?@@jCYB I;|߯;$yrs0 7[J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDm(Q""""""nDDDDDDF q% """""6J@DDDDDmxlru @xx8AAAԩSkfobb"}݄ШQ#vڕa{`x׹tRva0vXʕ+G`` ?0/N׮lٲ TT)go:<ҧO*TܹsiѢׯnݺ3 -Zg]wԩSiР;w|򎶻wI&<L8xƍ_4lLc9r$?#>,_ϢE([<2ٽ{7+V$$$$Hٵk5jHw=22˗/sACRR5kLϏjժٽ{7T\9= ȴ$}ԩSmDDDDD L@ Kw=,, 08~x lLf1r9voF|7w}YFƕ+W8|0͚5XbV'ydrT *U*˾꛺+7s… }{oΝ;gX'&&F5 HjX~=/^LSel6ժU˲oFnٲ *V@DDl߾֭[;ݸqݻwӮ]4={6OSU<ׯ_'66 Rdl0T>=}aĉV!SޡUޡUޡUްo>:w&9 H֭?~<3f̠o߾~ܹԩSpN8Abb"*TwҦe˖O@hh(M4!&&!C8?>.]Js3}:u*~ `į(3N]vUJ w+T<@_C_C_C_Es#HڴiàA8y$#G0gG2|>L2e34i/"{XbL: fQFEzѣL0f͚ѴiSGpz~:k?g|BpBIxh` BLL Νjժ|WDEE9l6yvV^M~裏r ̟??MիvZ @߾})X ݺuc3f EO>a޼y,\0RT.\`˗J*V#4'>}Z )R pE$WT."""""nDDDDDDF q% """""6J@DDDDDmٳg)Z(={: Ȉ#E\Yaƍ :k׮1dȐ4ׇ= .LTTSN%999[۷ν{۶?vڵkPtiuƸqHHHxrJׯO…)X >( .tb=D(]'U Gfcذaw_=z3fеkWJ(a РA8z(_|={$.. 6*Uŏ?Ț5kx'2m;c l6ݻww\߿?SNeԨQL2ƤI۷/ŋK.gѥKѣ]2XO IJoU`:8tnWٲP6hO=weM""BL>d^xL4hЀCO*UO5jeʔXl޼Yfe$&&KHH:tp\/]45b3l_8p ŊcΝ{YfMƎKVYSϠ%X"58ʕ3ᅦMa4X6l0́-xE a6_ܹs{xGrԯtTT SNeO6m(\0Vʴς r :tHdoߞ/tŚfƍۑ|)RAӝ>x% "ore7A2uf͠^=`8~/x3qٳW#""ٻw/ DEEѣG9pDvܹ3III̝;76ffK/{.** 0r[f͚{y|NW<`Xux 3hT~%o_xuXyW7>|8.v|w+CPk>|x0`6mVZYoݺu$Yj̚5=::)S0{l۷O?Qz cT LWHoÇfe;F;~*Vmҥ ȑ#$%%뫏F_Q> > [ +@_tZ `ԩܸEDrc~b9Pkl… I@~7l6aaaYoƍ>K/6yUDDua֭lܸz99s&6L(Q_d|||HIIaĈ9J@$  ̰}hh(N"11TuX !\juY둋 (Bй3<fg\Lղ53g!+Æ KS؞+۷/+V`۶myq44h@f˖-̜9ӑ\|ŋDǎ3hѢ:t3gpwCJJJ^HFɓР\6AwBo 5%s~Hf\?CիYuK߰0z5j#GdڴiY~lfKk׎޽{˔)S(T/… tʕ+ibwPpBl6 *q3(q ̭s/\~]7Y^6<<4lhn/DDRgRgBr*um7m{Z̝@:uY`={t,֭[}Ϝ9$5 *Ub۶mw|lْi>_v?FÆ s<?LZسg=z֭[IIIQFiր$''gܣk׮~{=v{iD F0w0Z>Xެ?_r嬉EDěd /@˖-Z*`=4nܘ 6a}ai5 V^ͱc(_|Mtt4?t9| 6g}6We\r37x5jЮ];|}}YlǏg9K% ".vyx`Ӧ˟NSyzÆKBܵLDۤVd /@ٲe +·~ŋ޽{uޠ *T/oAhhhСo&.\m۶Yx駟RVtKwޔ/_3|RRR`̘1Y%y^5w{p3hМ 3ən{z*U'K@yygNpp0ϟVە+Wr &Mx׿׿եcC"/T)XL7D#v;Ǐ7djذa<裴iP )q W[MzJEв%\nuD""C͙*U2Ϟ:"FJ@Dhs!C7/7f-EDDDDĉRg?>Х Xx% "N0e /=}ѣG1c]vDiР 4 ))G_гgOX`mR QQQ㏬Y'x"Ӷ3ffѽ{wǵ3uTFŔ)Sn;^nL4}Rxqt邟}]ta޽=:[9t fq=Pxq~w,Nbرc;v:ɦdø~hH\_ #$0w#+gl6n nlٲ%sÆ 3l61|t=z 1vqȑl5|fZʴ獠 #44Ըxb6mug8to/^܈w\?{QlYؾ}{ucݺuƹs 0Ν;vذaCb 9-~ zY- '?_~iu4""yܹs{xGrԯtTT SNeO6m(\0Vʴς r :t 888s۷ŋ,]4GfǬYq{&<ju$ѵ+hݺ3VG#"ݻrѣ8pPG"r;tܙ$ΝaYfax饗=a|w9v֭[@f=׼ys{+A5 "t8YӦfu4a̙ [ MUV[n$))xVZE@@f"$$$۱EGG3efϞM~<}v~'WaL*U`銹 `rïQF<㎿8p+k[ti8rIII}%}EEr)& vĽJSCh2~ɥ˗a~[2t̶-\p~f6nܘC//m[EDDPNnƍW㹙3gbوδ%_INNσRRR1bD??4 @3lʩSHLL䮻87(0m :kbcW^=R3Yaun{ϵEɲݰalћ+۷/+V`۶myq44h@f˖-̜9ӑ\|ŋDǎ3hѢ:t3gpwCN;D$o}`$#f΂DDIHllY&"T X1 իY3n7,,=zpqFȑ#6m`:[b$ ڵw2e *ŋp3rJ؝%44D.\6B|\;áqc#Nb mкG rLKA8]/mxErh*8wHgիVG#"q|||زeKm2P5>cl6 6?0jbϞ=#[[n%%%FZ?Ns]LJ~H||3gxϜ9Á8{l_x̀PL DFzԲbK*ǛgtMZ{e /@˖-Z*`=4nܘ 6a}ai5 V^ͱc(_|Mtt4?t9| 6g}6We\r37x5jЮ];|}}YlǏgv8q"Gfȑރ}:f0 {9sкuk|I%`k׮7J*exU3Q>Yl2|}}GӵkW8vX}/_Nɒ%iٲZbh۶-+Wƍڵkҥ =,]qmŊ$%%ѣG4cуx&MDXXzҥK|\Wk٬<=zΨX͙lzT_~i$s~~0ml 3gZٳ':t: *UCau(<2IHH ,,,0 8&$$`2m{ (Q<jԀ>AHDD$g2Ν;mb$9KZnMRR3fp\~:sΥN:p 8@rrr'O$66q,[~???BCCiҤ 111iʝ?>.]m۶k< L:5MӧO'<Hɒ%7ۺΜ:jU}FDDDիWgڵ 0}R`Auѣ3f-'|¼yYpaZ`n:Ϝ9stժU믿I&N|]Z#ɛBB`dh VDgu"NiaXRرC5 {ߴ*Or0'a>gb#;pUTV"tAAA۷ϱ&#v> YL +{PՑd0wgqc wR,1Y"<\9sgXsŚx% iTju$HJhH#̽d>-Z5?ݶO\,OI6lx-~`#TJ@$_ٹ<=8H2p90g̛CxN6о=i=judY 5',hDDDH>ʕ涸=guD+Z><5,:,ujz֧MDDD 0`QN֮]DGGswBFصkWmG{1 _Rرc)W<,^8]Çc  NlSx\b沫+wN'k<ѱY3sF?*C0ayVG#"""{?Oll,}B ̝;-Z~z֭i?0hѢ{u]L: sNʗ/h{n4i<ĉgܸq嫯Js3fwNZXr%;vnӶm4mm6ӧO'u>>>>Nzg$˗=}sש<(R<'Was&"iZᩧ0"""@[n5l61aǵW*T0dfkN2)bt)M͛ŋf͚evs\;vQ@W^i׫W(S6l0ngΜً6 cǎ`ر#}bb  9#fPcZɝx! 2_g11cDDD2}^skٲeҭ[75vJ\\ǎ˴)Y$-[t\+Vm۶eʕܸq .vZtf#88K:X$zf=zO\\\8RRRpB_̮]PJ9?fBǎVGsg*T8s}{׬k U@0r$ш_޽+zddڵ,򏌌Z+g#3>}:iF<}t3uTN:Es!0۠Xf6_LΝuKCV͜z8wPDDDM6 4'O:NB?rsq8p Ô)S0I&/w^+ԩSIIIaذai5jQQQԫWh=ʄ h֬M6u wތ?ׯSvm>s6o̧~${/ڵ㡇" ~%KPF ]I >}xqx} ݻ[Qug6r$,Y &XHb1YvѿTRF``#90 ^0|||#G~y[nFōQFΝ;3gc=f%J0zdFٲe㡇2-ZMtta*T7*Vh <8{L'kƚ5aYҥO 1G1g- eH3- CDD}^s6F"uM;TDhAP*,i~xÁβc4k~kYTɬY’DD$;5 "δgDDXTޒ0:t0muHJ$|C x7`>x! 9Ҝv1‚ʕ퉯^5OP?|!l$޽涼""":J@ī<2 7o>Iʗ7ݜ Uܖw8sËJ@īc>}d( ^ðz5ZdXh9hlDDD% L@Rq:L;CRn0SV0dubb?kgJa8Do2tYnLh/%o.>n?4'^fvP"""J?d>edTCa0eKY_?'!usϙǻq#.DҞ=P0x] .N[̝>Fvpc.JDDī)O+Mff9 #FY).dI>lN%""ՔWgp …нyXo_x5 HW!%ťCx-% u7d̟oK.HdǕg  [y.FDDī)s萙< 1 sU˖$[l6,'0ٺeCի;;aDDD:{.ٸ=\8䈯/,YժO`.2nyС.BDDk)p]p.d(_4p cAAj(y> *Æ;0.BDDk)vx-^p6[cE7ߘx,zJtC"""Uٻ˯-˗s(3.m&!ǏO륜w&o%""UWI˥s@P ;V |%lnV'%9}Fm[0D^DD+)p g@2 _xES=(|Y+.Y+檼aÜ~kD?.?BCw%oxI?`Lx߾ti2>qEDD*{B"&HNb>׮ے=c»' :Y>Py EDDDKwG8rtq|5>s 0g@6l zkD?pբEp=ĥl6sg3[pM}{3 """S"^#9<%IIo۵YvYR< ?N &9"""^)^ʵkלq+\W]4p+n ˡlY£Gv0=>v[dӇHBBB&(( I޽Y~C޽Kf@/5\psqPk͝zZ/CZNvr LBrhԨ ,.ҧ IDATptܙӯ_?:vH…QF-[)SpC? ~ 2 T׮Al9vDXY 𷿙gNӧ>)*mXB_?O۶mqر>ѣG3~x>|di^ss5kcTlRظUNYz4iʔqB"""^"?iÇyo|ԬYÇ3H[:P WKխkp|x]s;v"""^# H {9'ɰo Я^5C޶o,o3(< BCۭX_|[xl/dGB*NwKЪo,!>\%3`~~\կo'O:)F<(W iӦ }U2zh:vHH0.p ǻ膒.NfPa.Nf3e˚[͘8EDDR9RJFR۷/;wxM../@_ƴbm؅7ta83gO(X?# BPkIJ@BCCˋ˗|l6vڕEk֘E9r.D?8s4(7Tɩ[ ,Z/ 5cIJ@֭3 ]$5wW]tk`ݺ$t,S&X ׇ-`&(Zxz¬Y&8~ B% ֭sS"9r$!.;v-ܽ <Jkժ͚ƍŕʕQLҮTXEDDR$Odd$k֬qE7]d3mo^d޼mF4^~9cFDDD' 6mbѺukW^$ [6Ӕ(ɢCW3k-d1Go?tC"""K3zh+SO=WsqE%Iv-ZfaT˗DWTX:z9V(""9>}ʕ+S|yOαcǘ0aϟgt޽˛o?>>>ԨQkڵʕ+Ӈ-[64h@PPCnڴ:u닟 ƍqYɓ)VTX%K$Kƍ`v.9pǯ֭3?YE7 E 9>yǩ[Ly@߾I.""9\zٳgӰaC .)[,~-۶mò,J*E̙Xnݘ>}:]t?ˋ-ZiӦYE-Xd ܹs<:t(`5j۷6m{f̙o>}Gň#hڴ)1 s,[,XV\ɖ-[9̍BB\X~=Ԩ~✞=<Ƙ;ٳ姟`|ׇ'""jX^xZlu֭Y6CmݺղlԩScݾ}*QUv.]Բlʕ+c;wʕ+/Zۼysߺ~z̵YfYO?sԩSV̙_n]PBVTTT8n߾m-ZԚ0ae٬^{-ѯ{ǎ`ر#ѵbYYX.YdemYcǺfaEEYV>iY-:w6]ޯ%CO@n߾M\(Z(Ŋ#~Rb ݻw̵,YЫW/6o̩S_S`Aڴis-o޼oߞo{p5֮]K.]Y۵kW|}}c=Xz5?߿?'Odq4ie1l0ǿb̫K`/"βȎvLeO73B^yEGDD$}r(ٷo=z믿&00%K]$88%K-[Xc> *Wz`` 7o޽Tk]LU3/8eYqK?ΤIʛeϞݻӽ{w?W_}}<-<<G{.ǹ[{{ӜW_qAfΜɱcLcȟ? !Cș3gk:uSN H܁Ç]_o~\ n&@3cph5{k۶W~}xIPqŋxX׮\BѤ.0gܸqN \~= ݹsg[lLJ%KP|y@{sp8TT 'Np=jժEѢEcl6++O??m4X|vDFP*<@e5G׮׃|iX""ɯSNqޓM6-Jܖ$E۶m`̙1޽ܹsQ9s"##c={,+WvyVX>KLȑ#5b&ϛ77nFغuk1cF8?3N:j*V^eYlْիWSzu~2\%O@6lrD{ЫCbHz#XHv9r$gϞD̝;cǎ1gΜu#F`޼y=zB &>}:=z`޽͛3fĉ]6u֥O>8qSҴiS7nߟ3e޽KjXj7ndѢE1K,AEUV.Ne\!!PIщp$Ԯ풸Ds@V&0ڙ_(} #\f 4H;jFfK/:t࣏>bϟ_'QR%֮]:f͢w,_1J{(m6r?e'NdرGIvI*Uرch%^=Ex^3RCC]Hn6QQm$Ҕ~|=gCnQDDkIw'a"I梮6$Yab`0hN[C0h9UۢqU}Ȳ,;qN%xa.%qح\9:^y41O_~1/vġdJ*$:d^ljzj~gOOs9sܹРIF^ݽaC H=i<)DfYP㏦Ð!0j4mj=3 R$A7ooqy3,R _aNŊA.pqyYf-4JiHؼYǯ$կ#FϤa|w7'""bѯ9aa.ط^U,IƏաCpmU1;IDD$-p8Q!Iq9o蒘D$S&ӚMӨQ&4vI*B0a_|]km6?A-8yO@6nJ%q$üyвi;l]ۼLI@)Lgpr5EcnODD% 9<֭c̘1.\8 *Ę1cXnΝcҤI. V2P7%&[3"io5Cx][l65 rNL HJs(oիUVMp]*UѣWNRp"Kr ދAHK:t;ȕˌ;1T\ٮUTĉN%0aaI' V,˖Y6#FؽfM8}~э񉈈K.TP"[B|QDxyEP dDHRU}\K^ ۷CѢny14m &""""˝;{Dm8-ص zriL"6=6o7MQ&4i HP7o^l0TGI{$< H;7^m KU[&_dh% cǎܸq)SХK+D$IH@o,Y']HS P Ii[oo3gNXED$r(7n\_p)SЭ[74hʸDbDu:ٶ *VԻ*F#͟fݒ'XaZ|A2)""=DMXyѐm̬bxh kK` L~hFI X1'[^ !!J@$c>WU)JsR+@ǎ_CHc K zI8~cyZe 9s'M Al6 Ӣ[DDDDR$ٶʹ#-]ڥ1 KnXojB-\ 'N@`YnQDD2ЧN7of|r㬷l 2$iJGO8ym۠Jyysx}2ʖRiզ ݹ]J@ C+:~$!Ij.I$4>}Lu$`3'R%išȑ#C䡒Ԃ93DDl'MdHD;wfZ۷CnTDD2… + Ll}yU"bXիCVfy nnhlljDDDD"3g0i$[oΝ;`- ^۾r2=|Eǜm|E:c=iu(쩢tI:`rE4iͣsn P2$WjQ3|d|[=7n׮]>`Ϟ=^_(w(-x-KE;<)H9~H 6зo_^}Uʖ-Zb+W-AJ ;> ghH| 2EVCФI[Ə7E;֭Pd2)""CO@N8Aʕc]\2eqy&rܽdmyiShvNt',^  :K!NIwJ@"""Ȕ)SkѿQ-xٶͼKwiL"銗,]jli&"gNS~}zƍsfɈ8-4Jsed w%wߙ : n_>r̫=zk믿+8u0\GT˗ Ç&o_ػ^}7hLHPR^=w!GX4l %fObDL !!}$ I"!* JB…!_>% ÇСlYˣ7R ("" H߾}9rßСC}< w$!+й3tv}믿Cw/b4ĉ*U͛3w\N8ڣG2k,4iBҥ9yK# HTA*.I$ٳ^=x9ص+-O޽˛ob[o IDAT?>>>ԨQkڵʕ+Ӈ-[64h@PPCnڴ:u닟 ƍqYɓ)VTX%KYzj5k?Yf]vݻױo@f82gvpcJ@D.{v{6.${w;F4SEDD|ѣGzxbt֍+W2dJ(ܹsiѢ֭VZ,-Z{nN^˲bFƷL|9sp-"""JT%4Ԍ!(ZAAG .[oA\U K"G͖LH* {{{sΝ8o߾qglѯs8Ocw(S 'O7v1 P!xHΗ ;0vIB 9j~jG ѣ)NIuN@>soݺo<-<<G}4}+???֭[T<< 4`…v% C !gΜuԉN:%7= KB ֭]<S•+е+a&OS5fݧO2*"ŋFW\Ihj*Kc}G8q©$ uqX[lf 6Ĺe|||(Y$˗ˋ۷Ӷmۘu#88:ĺ_~ɁbO[nvڴi-( fM7]bC$xxWBvCVz n=$!C޼;wib$q}l߾W_H_>މO۶m`̙1޽ܹsQFLsBBBm۶={+W\;<+Vg%SLȑF`X͛Ǎ7b lݺ5^^^̘1#V}#;w.sQ~gU##,'DwFS"`"Sǜھ=6asjkdSDDR 9}ղeKj޼UdI9ru$ (i߾9sfk̙3ZjY3g6l[nf;s-22ҪY#G3fX˗rimY`YW;q4ʒŲNDteըaYyX֟&mjвr䰬dODE~-< Ν;V-fyxxĚ^>zG-oooz걦[eu􌕀Xe]|ݻ/_>+[lV ;w>lܸѪSc(P8p`{wEZYf|Ikq֌? ceΜzǬ_|ڳgO_@[od^7vjYU%&ŋ`Y[.rŲ*W-СdOD~-l$ӵkWO~Xn`Ȑ!L0̙3AM}pǎd ,˱}*T5c{"Οs'\~,ԮmfmhEDR3_K:k@ƍGչ}6ׯ磏>bǎ :4zǎU2Px1۷a>yڵ5opH ͠˗)NI1N' o6}a׮]1Eؙ3gweÆ DDDPVF9UgD$u(P~$A8~<Ŋ?ѣв%DDD!kG;o׮]kI N2DOldځVD > bwpT+T0]|ӌ{ΫCN' OYdw%oR㖸DI?nwaC8s&偁fiK8ED$Y9=x"ԣ*TO!_kN$ AA:~%Z-jzQ#Wȗ/UХ ,\ H"ElHHB̫C Hd$ڥq"Y&M6u"h .5}}Ͱu׋Hjt2{8 Hdd$Ge޼yϟ$9@8jz HV4[gA~<wy60w.t ٲU}N' ݻwco&իWʕ+^20w#(ȼ*IJ6A' wK/X$d UDD-}}}ѣӦMs% uP!ȝ-1=IBn2Iɓ .y&LHEDĽv6**3t<ST./n{Ly"MM^<3FIHzիY{Jzc(vn R"V-jjB,$!G&|(xm%!""5 v,B 1c r' 'OJ@DҦ"E)LWϴ-V,G1cb^DDcI@l6rx4i//o/Lhyu(QHW?ISOڵPLG6Mƌ1]z+Bp:C7n ÐΩAA'<[bdcoи1ԭ ?+ǻ' JBDD=T!,̌Ȗ́M ,h ӛ77mzԉw1IgϞf_:O2;`uxD$m`=,4iVAӦ.;ּ* I[N@~xzɸ \96\`ZwC$}ɞڵV`bxxϓ{_CQh"-E"4Zv`CpyU"x{]B0{6t 2g6zo܀ɓfw"\ qp2Hp*ZG__4_O>p(5j;vB G2XX<=3' h~Z1vl74IHI٠n""C?zwٳgO/\':~%lLĉ0n . .ES'{7B$eYC2Pȟrs͛D$L_'";;. ڴ[1VINJ s?!*J HF˰r%Yc\֭Ͳ_-M]J@$9<$(._m1H*պ5{V-8r$ޥ۷".%c""/=Ν;OBCCyGrIO20JAٲ%bT쩧`fG7PfK5udWDDbq83f cƌuW^β,l6  \ ;DǯD2ҥaVSQ>̝kjCZ5ذ UU<)]:y8̙3]qHp {`nx%$"iD޼v t=mz˔M̓:ṵYDDK@%0V' 7z""`bΛ%K!¬Y=cЪyh&!"tIQaa懘d^16Ш9r M"`A2*""J@$e:QQCCD$ 1=t۵+tS&s""IQN+O͚8$!~e^^֨Q0t( +"xhybf`aU)H:DR:`Hʝی@46}xoxsgSY""DRC ٳDD -2@j093|GCϞpn+")B+uddݻgB: /?.4'.""P")u8sƁ AAfyѢnKD2r`6Ym Æ/kž=w@""IWThӈJfȴi0aCsu\%{v-kUD$л9IN+q˩R%8ˊY3h XWq㔀H 9!O;_ϛwSLh&OXKe3LFZ""% "Lf]̫qয়77E XK\ /Ԯ ǎP""iI 2=1˖ukL""i?Smp TAJ@$E8/25&X41O`˗ƍ@XK|+gNm}BDDD͛p E$ (X< 0}~$o^39}x5ӶWu!""S".]3@ޅ{HQ`z|Û)L7@B񊈤rJ@$مW{`0% "j׆`WܺkIǎfzd yȀu O $yڱ8(ȴʪPq$*wn꣏/jUܧlY4ku K $PZAɒHj`ŽU`${vX4""Iv ]T."Uru+ #F6X sHD HTiDDR,Y`$e=jΟo:s?'NDD$Q"58s$, _W""_zе+t/|`A3`}(3ƌ9}:IAJ@$Y9Ԃ7(ȼ* gNcm<7//3C7WD$ݻC5Xv]{\B>}ȟ??ٲeAE}MS1h n˲hѢK,a{;w~CZLF}6ӦMw̜9ǹQ1bM6?ptܙe˖Z׷o_8@.]裏h޼91jΝ;IƤqev,VU=f~|NX|!SkXD$ݳR[Z6͚:uj̵۷o[%Jj׮ޥKZ6Zre̵sYr^|Xk7on[ׯ_6k,駟b:uʜ95pX֭k*TȊ~81͛7ϲl֗_~`;vkǎ K˺uXeYYرIDĽ - ,-X޶Ͳ-kѢ QDޯ[|b ݻw̵,YЫW/6o̩S_S`Aڴis-o޼oߞo{Ovk׮K.Ƭڵ+l^sߟ'Oyku֍St,[ni8wNO@D$+RԄ|)_~!U.YZAгi!"^$88%Ks1OPP+Ws=007orAvMDDUT.SLĪ xe[_-SyU`tIOl6ҥ͘_s `Xoؐ1IL@s˲8@„1{ñlsS@DI&E۶m\]bj؝ =.dS9-3OC09J@Gn]3P"ޤ֭[dɒ%Y|ܙe~o#),Zٳg3l0/ﺌX*ED z6OCʖ-M3g(V ֯w1Eի""EL@11wff?4oޜ &sFT""^*9{/fT_@T@DTSh^)u >?֭s(]vѺuk*T?2d9suSNt{F_Z\.ѣJ@D$MMo!C20z4 kW_\"~/fűi[ҥ$ uqX[lf ۲e >>>,Ycfܻw`:t_~%U_<Yf,XiӦ=>=ɀ(ٳᥗLz@ #G5kLgǹ?4[TEa?޹sg&FTym۶DDD0s̘kweܹԨQΜ9CHH=n۶-gϞeʕ1Ο?ϊ+xgɔ)9rQF,X yqƍX[n3f̈g}?jՊvY4imĽXPcIU4?4OC&N4oCm@&!9y2eqF|Hv9r$gϞD̝;cǎ1gΜu#F`޼y=zBwKj۶-ӧOGݻy2c 7n\3qDj׮Mݺuӧ'N`ԩ4mڔƍǬgL2wRZ5VZƍYh~մiS=c} ШQ#7|҆P>QAAPxz=&T&L͑zL̟^~\9Sz""iHAߝ;wÇ[>mU^=tr˲ݻ[ֱcb]|ջwo+_|Vl٬ X;w|ٸqUN*P5pXZEfj=ŋWd KX\eDDRHSʕ˲yIJ>ز"",˲K,gOwkÆup *AkfYIg wؑj@n5̴K;n݂a ?MMȬYX'uy@qPz~\W$%J$pngR""ț״ݲO]/41u!!)H9D IDATH Í\|2YISW7? J>"wl= +¤IfHjDCʔ̋<=MރAjUذua.x55\޺5M $ I\J@ĭ"#!,̎$(ȼVDD2\̘Ph^lUK3퉢jUfWR"nu(ܽkGs'.lk=̚{]PJ_~ER ]?w.D UHy++W Z6AΜТ&<ͮ~ctX4(6͌jI*% V!!'Ȳ5azX]ëa=~ۈ7ұi[ ,]I% V!!'g I;v .]RHJ٠eKرV"W:|va Rtիot"V) 1U=]O@DDR ڴ`s vg^=SþJ+"iq+Z  X""zxx@v矦7oXUUes|N0 O> 3)J@m^py޽0>}{i>akY JVDR;% 6W% ""鄧'9w5gj hg~wxq};J ́dٳJ@DD//$"|8,ǕO1" }ݢD s3 JD~J@mBBLYG ,RH}4k.[zcȏ͹^*C~+(]̓ȔVDR % 6v %KL""6j7ڵd͟!rXyOn/ojEEt"Ҕ؝Tlf _`&-] CztAhHFD"* BCL@4PD$Ydd_s9~i /?{ՕdTJ@-N[I@ΟU!"U CdՍ.q:Sa:ޗR%XBGD2% !!5)*@8 iӰ8縱<7Jyfʗ !""wS"nYo}iUD%""),W.5 ѣf\{L-җl(fV^L EH+<=XmT c("d /lf^M-l96ES 4IOb~(S&E۶AjRк5l7X|asE91T*rɓʕTD\E ž}Pl )DDDV-X ,2'B!2|y 8y2R".w"9H}yyPRx?F710\v,F^u]twt",% rm _>M@(&q8ާvDsYSTXKf?Y""iq}̑ޒ%X}9~ ""l` <E-}4fjU"XX-|E % rXYijT.""N?DYLg_-?ɢy=sXDR/% r;f+glШ~` }Cd1:OՉVJ@M@ KDDbE?s{bhiX?ի!22hJ@ĥ^5--@1(X0tP!<S'}JG2gK~nŮ2e \ҁq);`-8~B*8R}xHJR".o9[T< `੧`2lǎ=b0}s/'N:m[n̓[R:XE Ծ}PCsZz"""~a|xoi;pۿ;<R".wǯ@O@DD$e/[avu1Su-?mɈP.۷S:XK ]\-&8T>L8a|s,0_CM  !!)HD\u3C""fdz"AA}9Fe(u1oܸJ@e0& DDDR<Ϝc4tU<ϲ8 C^aXVJ+v)ٷϼ.[T!""/Ͱky\s֓ ZP%O}L` {wӽu&e$UlID)REbťUjm).^K]!A- "D|~Ls313#|93=L\j`& TfΜ<@GhԨq=_7RѨkc1W೮gDEl,%*-& TfJ~(Pf-QybeM?Azʯfb3:aאmՓ?8cH?& Tf~hР ͛-""jU`XHP^q`},q476& T&=.]52PcIeKEDDRgf*itc"|4ZV at௿L,y`Be_7P!1Qh Pܺ ŏZb974 BxH~w*N)zkf;I\Y֯ ]왈hz ?%^խ1Vi JP8yll TZd)DDD 77`0XM.\jXD&cS~G,Ue7X͐f S!WDDj]?s'Nk;-muCF/)+V:`l3E`` v]}1h TZjaaaHJJ[СC 1|pdddB`ƌUT*7nUVKIIȑ# JB*3!JH@}Љ@4&M_$Iz]ܿ_-Q I? 9~޵ccXR>F%K;wL4 fB$1k,,++Kx{{b]z$IlذA.}ptt{֪!<==ǏE B!v%]~]XYYaÆiߺuk% Ǜ9sP(ʕ+cǎ رco.m? TC!|}Qw'캍DNFwG-YxAz5sb= ֭R2kkk| ~zK.r3i&=zݻwo߾vvvZ=?0ds 2׮]C||\Vre N,pU ADD>VgOqX.`s ; \Y^SMT2L@ ZUh'''7)) M6)o޼93?lp}Oй_4I3TԁӫLiQT)ʒ?Ͼ$~7T9^$ 73P!!h PQšTBCa=+nތMHǙ 1ڵB 6jLDDDT B9z;UPwSt\5w0'UztׯU|\]Wx+!i޼9wc͛ƒ%Kp}'Xl._ ///믿{gӧOGAA>sL2hݺ5 Wb֬YGvz1bfΜ4k 7nD\\V\bΜ9$ qqqB`ܹ\2*W?xFTP$';pѨq3REt4, Sڵ olم&@2 gUΙm1\[C_CvX8&} b1ѣPTEZO'B '?x@ 8PZ-'..N[[[* dM&j֬)lllDFDllN˗/ IBYf\ޞyΝ*1tQc"""2)įOƊ@9D?ŢEB\ DA~5s$ gf1ǎ+s@VzЬ-7ww 6VSʿw{.lU%>s(l[ j0ue_3Gf9ʇ$ͳt(\U+DDDD/Э,u ݻt>Y ;ӑkB(κIHک@j2L@%%Z "" V-` X Y~?%}d>] ӑc1PkzHRuk&$*& \$ Cp{?^%ԩԩ;oҦ!wV9{ !!@*`B%5U3C*Њ_DDD $$/%TwgA[oxMX[B1r!Xia*&$<A  e-1(Ѳ%` ˑ#f~l1z\DDDTNHP:P:,{%ܿ:qh eR62?-saժ^ U1rм{aa6t`?@v6plDI6WV)+}@&˛E%Z,E =Q`(=<ЌGy_D7=4hXZbzf.hlܿ_=."""$IoZ V $%&>MFk`6X\[b}`⏆!¡[ّ#z6٣yi͚ ^U*TaL@= tv2<) |,zo# @#_>& ̎|}54u """2KXv@3:#%8zQ`"L$K87." m0Cи-45& 'u 8u 31Puuºo_X@^p,q quq5GrwgP)~ȬvAQ#llL}1z&99'g}oa̐R 4j4jރ-ys4,&DT; k`$a?& LNܛz{@|a^Ф &M`7h MOIJ d 8g@7& L4fz6 =&"""F<~} SGUq1z&jVxp"оI"""" @H۷kDDDDT & TjWh֛ ЪV=.""""*?P<Ԇ,`^""""1R;xWprzjÁ@f&""""**b_yz =&""""*_Pܿ{1 H$=.""""*_P:\9WDDDDT*L@TՌY 6iLQ)0RW7ڴI$qQJt3ܻYsgEDDDD*޽: ֭@~>F'& T_ѲiТaaB%*%+K._3`BźrpAOs' *݀B>aj͓7EXDDDDTN1bml TR=LOL@Ƞ,`.cǧ6lݪ~mbB&I@VooEDDDD2矁5 >|+""""zL@H/!4?:v$Ȇl *dQw:ï~ LoJS@i:R=ؿ1UXDDDDTαtgu @DDDDd %yyyҥ@^Je؈|cB:V4S=d;v,.""""*WݺE6̝yGӦ&?NB'-g5= ˖=&/ѳaiY@֭ΙDDDD˜]¿{4χ}jI,""""gd˖@E l`B49Ƃ@.@ժfiDB""""Iز8wXHܹ'1&*NBB4_ӤQ¾}mE NADDDDe= 8!?.p=[|{@^q7۷y l؈a Ez?6n6oVlmMU7oW^za͚5Z222`„ 4i rs5nV,-I<&L> !QE&Ç$Ib֬YrYVVzj!Iذa\vm(zU7""BxzzǏe- BڵK.~Æ ڿuKeӧO B;vL.;wP*b~1@k߲#DB(B߅[ ae%D׮B翔󚃕+W:*S*?V۪|x^fn:(J 8P.|x\~ׯt"9;;#** 6mBnn.ѣGؽ{7 ;;;n~`ggճO?!//C :א!Cp5kYfhڴ\VN:%Эfq+0h~E ʕ,DllCR`;lmU~Ua8 ZU޼ysy!IIIZoN:$33:666W![Pݢ(m<%_Dn.p2$o?]ťh;fQH}ի#FUX 1DR!;;[<++K>>9zaРAz*f͚Pl۶M+1c`̙8p 5k7bXrVoǏѤI prrBe5u:t!!!;rm{ׯl> 6ZFuc=eZm+SwDEEvڰ ڴi-[}e"FϾ}$IbȑbŊZ_wޕ]vM8;; 1o^O>Ѫ#B+$ Ç2. {|=Vo:2!{RJAXX;&oKMMŭ[_͵[U BnӦMɓ'HIIyL.NB^^1---ǹ-[D˖-;v숮]_رcm6dffudff{.X:B.2ut~)ShL0֭CTTܹs裏~=e{ʜ9ݻwGjj*֬Y|dgg}ejrvܹ3 !T*rJʒ5tLI.SKIglȑ$ wV/͛7ѡC8::bڵ$ )sd =e C>}yfJj+CxOaM鼯Ln۷uʒҥ\V ,2335j\zjP(ARw^*}1ڥw]Nj,#P(bӦMr:uVVV:K|{JVí[trssEӦMB2%& dDĔ)S… ň#R8w\իEx{{s犩S*U???u̟?_( ѽ{wh"ѯ_?P(ĴiӴ狖-[J*I&O1upp)))F~s6o<1yd1d!IڵYW>>>bΜ9z=x@ 8PZ-˫5jBʕ+r=SK\\ U 6LSWAImѯ_?+jPTQFbɶ*[HPh=eZi+Sa⭷J899zKlٲE.+ӐIDDDDDd4L@h0!"""""aBDDDDDF  """""2& DDDDDd4L@P>}c0Jxb( |X.CPPZl:tuօ\wߡVZ?~<+xzzbZIHtt4.\'NhҥK8vz)M8>իٳgcĈرcڴiSƍC6m0w\ 0˖-CDD z$?@=о}{̚5 ߿?Ο?/׻z*x `„ 1b.]k7oаaCX111;v]Cٳ4i M6aذa^R(ӻ}ŊS7nΝ;VҩW|M#55Ǐܹsѻwoo ~ܛ;r<'f͚.]-Z^z3f?]Z$ yyy@ڵ_ CѡCbƌC߾}q5_g!I " ̙3B$1e!yyyBV!nnnB#T*sܶmۊuʿ?x@X[[cj՛:uB!.^(,,,̙3>>{$uim6!IXv\k B!7n+++ ",,,ӧ岻w GGGP(uv-$HaÆ KKKOQ={zegg GGG1i$,::Z4kLnY_uB'O47ӧP(>ӹ&gggѴiS#oڴIH$&OsJ.wbƍrE}BP""cbUXՃ<#99Ovtt@V>pΝ"* yG\\V5k 8H8p@g_reO?q%$&&8q=z\pU\\\䯪U… u8<޽ \]]1e_֩$ժU9R&s$ŋx"ammw2zY^sXXtO?ҥ .]5ܴʮ\ISnݺrVZV^{5 =5eզ4uDD/SHHlقSNСCZƒ0zh!..Qh׮6lٳgZj͛1w\y֬YYJ]v@T_~(((/_ {ժU~{Co_IC ӱ}v䑈Qfiif͚!>>xI@áT*cڴi'?cǎŨQ`ii)/Z'NIJeкuk̜9=F 0|=0yd̜9!!!#)) SNիo q*Ч֭[wˮ^szFvzj4J{͋/Fz0vX,\_}$ իWٳŞ ӦMCRRZnsbرѣKtqN>5aԘQI3|)88$RJ'܅իu֡F¢E C{J;h׮՝Ək&MѣGc֭СΧOYp!{ܸqǏDŽ ~ 0ZT {Eݺu1uT̙3> @{pL>z”)S YRyQի b۸}6v),7@ӦMÇ㫯Bg ?#0rH 7n,?\3f /^ݻcPc/\kn:iE""25IDDT.}GXt)=zd]p 4ݻѪU+iƾfciܸ1"""0m4SBD$c+,++K۷ocʕhӦbƀ!IDAT&n݊+W`ѦH {@^a7F۶mQn]bŸy&߯PUf""sex^aذa~(  &&BȜs@h0!"""""aBDDDDDF  """""2& DDDDDd4L@h0!"""""qi {nIENDB`spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/bb5000_renorm.png000066400000000000000000001376231511632712700274160ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxwTT ("b j$^b^ޣF-&آ5 Q 5Ѩ$*(X Ksq{gsޒBHr """" """"" DDDDD3,@HgXΰ!"""""aBDDDDD:t """"" DDDDD3,@HgXΰ!"""""aBDDDDD:t """"" DDDDD3,@HgXΰ!"""""aBDDDDD:t """"" DDDDD3,@HgXΰ!"""""aBDDDDD:t """"" DDDDD3,@HgXΰ!"o߆Ba ?$$ ֵk`bbKzlE ???c ,@0I4nĉǧ~>{l(  /h=ߓ'O0~xNNN>|8>}jժ033UVT]3gN8]vZDD @DDu)8p_}LMM5K!CE㘛FǏѢE ܸqmڴA~@ddƹΜ96m ++ {FqQ̙3Gů ###1W?1h cǎ裏_a {>_|=z:DD ""'$IC-P7 B!BBB uCCCq,00P( Q9R( 1yd !IرZ{VVWP(bjz% XhZ{\\055Ν;O 777P(ӧ ZhP(_-uH;>ED^nݺ᭷ނ%y/,--agg޽{ƍ^x;wΙ0XXX`֬YjƎ5kF\\=""x鬒Yx1XfZ > 5jP`Z䥨ׯذaCCDDڱ!"37oD-S=}Att4:v۷B`Ν޽;jԨ;wD-pu222вeSx{{cر#,--Uߏ<@PPƍO>Dɉ' Iy>iiiZ4ռysݻ:DD̘1CiӦ8p >}ݻwk۶Z(]6=wܹpppzmOOO|y&RSSqm_7oKϞ=SeӧOu2&_~sjժϑ iڴLЪU+!p9vmS( cVDH$4hq|ԨQB$矫ZJH$:u֞%ׯ/ طo=;;[ŋܺuKy`\\ǢvZ7LJJ"))Btabb"7oq No t1e(Ļ+>\O>#F+Wu"::Zkߓ'O ___ann.U&˗/5eggE WWWajj*7n,l٢EH{>"Pr VZ ;;;'M& "̄ؾ}NҵkWadd$#O.:v($I+WZPxxxGGGq}B!Đ!CD@@>|U$ITZU\xQ|=u BmVL6MtUH$͛75Ɯ9sFXZZ ccc1` 7o. cBbرb„ FBP)Sh5k$I̞=BC I4vi'"_~XL:U|wW'O;.;;[+++1w\,6l(ō7;wNf͚k׊3fSSS !D@@$I=Z_^tEH$nݪo޽bj,X $I}Y?"*r aÆXѭ[7agg',,,Ŀ/_lܸQ( "ÅwZj*P(ġCڟ?.ƍ'Zh!bÇyf?~pqq&&&Q|"!!!1111O>rTԭ[W̞=[9fUVZXZZ ///i&}Bs)4ρL/ 3gIUmiiiM;v֭B$k.UÇ8pZߎ; ''';ׯ Ball, ggg"nܹy'"ҵϟʕ+nݺx077#G; QwCCC1BfbbÇ#22 yݹs'UݻѧOݻ^xGA"Rdeeٳgc߾}{v ,NDDTxzY?TkR˹s4VZvҥKDfSZ6{`y!"ҵQFaz)NNNشiS{Q@D888h;88@{;:ݻ  11$y+sΩKXX$I€CDk r(3&O,w"rC/D=gSh ;VW(j!n݊&M6"""""5TNj2V$؜׼FQ?~ 4iRysKJJ? |##55qqqСS&eDccs76q澆?^<7og~g|KDDDD "Ǐ˗/&>}$3߱oknnwww@Æ ahh?zR{Ο?}sÆ U_ ڵ [Fj ]\\(B׫W@c`&L+Vހ????!&&~{^ zҥKn:L8 ƍ '''3@5vΝصkz@hӎ;`mmv!,, 3fP-dGk׮0a_׬Y'''hp<}PqcWӺ ?2????^ ^^^ݻ7M 7n۷? 44qqqpvv,@V\C˰Gpp0v~~~9r$޽˗Ch߾ƏK"##͛7ݻqI㏐$I=l޼"M6aƌ Ó'OиqcWG$( y) !"""""9 DDD?ܹ$c*{{{ʪTzXQܹz!%%E(D111,BJ """WRRRRRzTp!""W'Qq: """"" DDDDD3,@HgXΰ!""" mڴ)yZjB_n߾ BaÆT!"""*( :k׆9lllиqcL2+9%I$I&I,QAq"""B:u*,Y###o}AFFN:K"88!!!ٳgssb۴iw'HϥiiP򕈈toΜ9Xd jժCݻ1p@{WsHիyJ L <=[\\fMU  =;1Qpm̛7طoFݻwNJ+1cƨCBBP(Cu֨T T}r} :UV94iPDDD@P`Μ9j… xakk j MLLĜ9sвeK888NNN8p bbb `B'Ӂ+Eѣ@~wn?o=233ѣGԯ_?~1pUDDD%IѥKX[[c̘1ׯ_|! `„ hڴ)ƎUVi3\g1bt'N]v~Z~ /-zꅉ'Eعs'pҥ|兏`_~F >h~QY.W_~f"ɓ$ m۶ͷZn-[ɓǰ8x <{.N Ǐ͛=8p7nĠATm֭ѣj*^Z޶m[|YYYj "$%=zg( O>п?г'|90w.oi] *6`wsKZTд[kqUyw!e1~B]!V'Oh ǚ5k$dffI$TZPX 1hVY= yW/-d}yы"Pr\4TV {޽{$Q3 ~QWTIk!VZ &۷3!Ivލ/"==X؃@V@r2pPB.qsS/)S?TN^/Gbnw"e˖8v9Ç/;;Ǐ Sa7ؽ{wnذ݃GypE$''kKdtmShɈ.RHG~ׁڵusݞ=Ν; qq.Qyӧ###]tZٳǏ!b]}ӧO1o^DDD st[ok;8l򋿾ptZ:vT.kc#w*""wށ6l \~Bテ E~KT>x߯i49:*'ݻr'"""mF/_⧟~ʕ+qItGE߾}GThBTJS]ڷ 6m߬DDՌ30c c!* \ L\}J) ͛/; wBT LT&O;Iܽ |rNDDDD  (W*+&NΟ>h@%QGJـ{ٻ Iڵ@ݺI˝# D%(*Jahn{왲ʒ;7,@JP}\v\]-[Ç3NCDDD /eGn70>`r"""M?!r!""Q vMyc4@4%CPe` dg˝ D%`jrs#G*M XD4DDOP(o+ iFTBBBP(*wʅQ1=lʝk|/3gNCD$/BBWWWdddhd[ǒ$AE b RSѣNRz5Sy\4DD$ wʕ+<^ $$DXCv6 89ɝ)MJ&L; lmmagg 1wmի bu_$X{`~3fӧO1{BݶmPR%qXpǹ\\\PV-x'N+1gs0lقwyprr¤ITի裏 TV ĵk״^F޽aggKKK!Dn 4m h!w>ؽ1/୷NDD$c"((k׮?j׮1ӧO… Qre 88x O_~ sm$%I222ЦM>>yݰa$I—_~ʕ+ -[`l2yq]ѷo_̚5 ;wF˖-_q4nXΝ{3Ga̙3޽;.]j ϱzjԭ[WmL1bZ @BB9Zjaرjt{O. "Bnito_`.O??ADDbcKZTXXl|||ԩSy;wuԩի֭[xTLMMѰa<+IiM|NNNB >>^=%%+WĞ={p5xB5B$$$$䙣06oތ@xyyajN> 859s@bbb\[lQVZC,@? =IRiPYڥl#"R,丮x{{W^عs'oߞgϞ޽O UTyc- 344$Iys0rdffu8{,5j~r022^y0}mGA{/_ϵjժZUVؙ!*m+w+wعKDDwuv'BN_}݋iӦ[nZWM"-11Q_]M޻w/Ξ=aÆi|IݻP{- $IŋѠA73z/^h*\ӕ{b ȝF^={ݺ~ p)|"j׮O>nBPP>M4\u7 kkҌ7n@$t]㘶̅)))عsBĉZ=vXCSaBTH/ 0dI'I7iiIr!"̙3accmذaB`޼yHJJRgggcҤIB?ed5...Bh7oD@@@ĤK.úuЪU<:*UٳqYBDDDڷo[naj}z`RXG#troNDD{>}:L@ѩ-Z`ʔ)Xd 6l^z˗ yfvG /9m,_/^D&Mpms駟cժU8s j׮[ni\>tP8;;;v@=퍶mۢA$ wEdd$?~o-Z?ٳg>۷٩t L:NNN07779RϞ=ȑ#QJXZZM6U^w)lpppq㐜OŋVZ033o[n,--akk __Iz8tO$epuk`H@>DDJ^w u .Ė-[M6!((B̟?_c7]89s>nnncǎar _a֬YشiS NMM$Iy&̙O\\6mpE;oڵkh۶-nݪv=7779s={ĩS_#>>{Eݹ>g7ׯ066SN}FFFɓ>>>J̝;W  kkkq ΝfffYfbڵbƌTtIB$1zh~zѥK!IغuFYf B!+֭['1fovnl6omׅ05bxQIOTp#B̙3B$|rU[ZZpssݺu$IڵKCakk+ַcǎI|Rն~zP(ÇUm X";;[) XjU޴_負{w!}Wk"r'!"`;z֎;`hh#FLLL0|pDFFΝ;QZ5UѧOݻW/p 4mۦj۳g2331fk3񈌌T\sQ%p τ @1@viHeryRKu I'Nh>}pww4l?+ׯ_zϣo߾jܰabcc&'TP(gʕ+XBDzGVrQNR(5@Ӧeir'"""*mXĈ G/ի233n:U[FF6nooo899߿W"++Kmk.U[RRv؁>FFFkkkkaaajK円"99}QuV˹f899Gַo_dee!$$DՖ͛7AVZq?ұ3gGΝNR4n ̝ ܺ%w"""zy {ƴiaƍ}6~U"..ʕ+1tP\|Fvv6ծ3|#Gݻw|rt۷WsrrtRdddyؽ{7N<QqQFa;v,^ gggݻؿ~pT*Wi*TH֭QמN$"" F/ شif̘0;  "-~Uڶ9ʳy_|!o"""- DZ> 4n T*wre``z *J4DDD+,@^#rzr')ƌ4> Ζ;   ,@t "#͛NCDDD5Щjr!""5GI*ŋ$`QicBKVrt~[ĉB]QibB˅ {ɝ6 VQ(h\$50r2r!""(01;IG'0~r9d"""*XOv6|JN3-r!""._?f"V=SQIcB?r'ŋ.; 4 Dokr!"" I(_r'!""իG~8C6!w"""*),@|; 6|8и1%""*OX8yRI(ey##[NCDDD%_pyC?it\75U4DDDT\,@{~>[HL/;  "#,@W:?W{r!""`BީS#PI(?_~ )_bBީSʻ$wOJƍ@tiXP=ǯʊ#`D.KDDTV y -HYah,[ܵ~QQ -2014; Tǎ@@ziXPvм9`l,w*eˀ8`jQa -g:- (̝ $%ɝ UX @|<-w*ٳ ""BbBٳW//ysPTdQA ?:9ɝπ5?;  w?:`bANCDDD*l#X͛˝GO9afiMXPt:9,_}'w"""z T!wA%Y3```L3Q~XP@ݺ@Jr'2>|%"""*? 2X yS4DDD TddsGyAL; U8/* 叅WΝoɝaBFFo˝J&NT.LDDDU8QQ@ÆI4(ʟsXiu,@9whTTZzMNCDDD %#/ …@RdI(7 T\ z4i"w*mjr!"",@BVhX$ _|XZӧ˝r %:ZIHsMgNCDDD `8>\ل r!"""-@2220uT8998rH>{ #GD*U`ii6mܹsZ:u -[0n8$kY6GŋVZ033o~IٳP(4\14/NTnPHDDD2;@^ ]va„ pssƍѩS'?~>>>yBSNtLz hժQvmUϣ]v_>VXx,Y7n@xxyOEaԨQxww^ 0 }Q+I֬Y\'CEu Q@N)@HVB9sFH$/_jKKKnnn7߱[n$]v>|(lmmvQ899/_֯_/ 8|-!!A ~~~YdggB=*ܛBDEE "**c„xD$$+W00b"QYkŧ`ر1bÇGdd$sNTV ݻwWۣO>ػw/^zx9Aݩ3[;wĈ#uV˗y%Tlo,>tI4DDD^NBOMMFfiB565Q <(w""G/TDccs76q澆?^<9jԨǏL0666jmG 44;88Z VwAڷNDDDh˖-زeZ۳gdJS~eǏ˗jO> I'Nh>}pww4l?ѫW/UW^۷97l؀Xɓ#..NxmVXQT0NIbڵʝ_GGGk,bD` Xn-##7n7իW6صk-)) ;v|ڵCXX硡HNNV\k׮044DppZ5kImcĤ$cǎEH8^  ̚7O##!]; V|B]R3QQQR,=z!)5[W9d1*.]6dAڙ {GʝW2*.^7;-qLo,@\{ 5; 3I|Y,/ T]dd;(1xH4DDD *.]RĂ@Vro"""*,@\x^; U3g~+, T]ĻT8}ԩEʉJ *׸1bpki Tn={ܹ; Tx;:&)7*$""ʭgyb =`R/,@ܺt 04֕; Ey _}ܽ+w""[/)'*3kk`T,@ XT\; ['Nȝ|`B? 7QrsS(Ν6l; QʥB%<>xX4DDDe *.]*UNBŢEW_ʝlcBŋǯ$I$T^T̞ YDG˝bBҕ+@ÆrO clM,@^ח; 77O!!r!""*XP@F7D%0@9'r!""*{XPsw@,Y3gʝaBΕ+[oUȝ+GG 0.\; Qʝ+Ww?&n]F_ IDATt!NCDDTvre>~EX8q ; Qʕ8tMO`d3 ,@\yHOҝeˀ/sBXPrw@HWWfKNCDDXPr2`k T*wH&L܀>t""7aB W"9+DD7˝Hr>~Eh8;YY@l,'|/W.0mIW iiiHOO/S٭[@Z| kH" ǏDŽ KKKXXXVVVqJ˗Br=xWr!""?+]˗/G\\дiS|ᇰO<[5kĤI0j( •+Dr10֬&M;~)p憌 2}AӦM۷cXt)⊛(_/+ X$f̀O?fzNDDD?  f͚a…4$YH̝ X[ɝػ )$BһJ EBPVp""6`uUPPiR"H RQ$dzȄLL}^y;$0g#^ҝ 4???oˠAN p } k?aw4"""Cmx%[8vtTHDԩje&_lw4"""!5 NߠcǎN_#HXqမ3jU`d#S HNpײ;p8HHHXd"N8xD$ea7zjHDD^N% sK..\18AxҦBqC#FE0x0|~NED$gs*ꫯXx1k֬aݺu4k֌ݻOE(2$ "y7;"8>\͙7ogΜaѢEΝShQz)>3]HT޽O6ѹsg9s aaa/tؑbŊ|̎S$Mf^)w7u ""9]WO>)R{"Zd7mwW ҽhDDD]BnڴRX1|I|||={6Æ ˬD()P8Dң[7hшd=W@vҥKY|9Nnݺ3zbŊ"F:xJAOpʕaH5DDDS <@tt4< "44e˺*6tQx%!C 45;"T?ެ\+W|?xWId$4onw"yYX~"" wn#N% 7N.n܀hxy#qN\0{6Ԫ'›oHp*ٴiɘ#GL-X≪TѣMҹ3TnwD"""wW]n'!!?UO/xQLqLO@ns=GPP۷IAȓ;3[v3FDDz!Xx1K,رcҲeKjʖXR,&'k1O<KdxԩS;Ԯ]UƱcǘ0aΝcʕ+ÁꫯL@@gÆ … 8"E'O6mݻoy֭[iԨ1tP._<˲2e eʔߟ5jlٲ;裏Ő!C8AmaD^4,hDDD\ǩ?`ܹ4k֌%K2~x*W?bY<wX޽ gϞ̘1oooڴi֭[o{eYiӆe˖1d~mΞ=#<ÇSA͹vӧOg|t%=#GҲeKfΜIɒ% eŊi9̅"#U.C޼G~=|шz'+VXW^M\ttp8իW;?XÚ6mZk׮Yʕ6lxk/_n9+<<<ٳg XݻwOqn֭`ҥKfϞmyyyYׯO>vI2dH7nl(QJLLLǵk׬ҥK[&L /޹sX;wbYgZXʕvG"yBC-`Aˊ;^{N\v Ptiʔ)CnMZj 0 g۶mX""=9߿}zjBBBPo^ f*T@X֬YCڵg|1"Óӯ^z˕-_W^еe%_ֹ7Ùx6nȚ5kxwӌQ2:`Iv6sي5xbHr׃i׮+V̙3̙3RJFf2\~=k׮%>#:k:{7J^n L2:`IvvVFDD$d $yO>ӇǏ` =_@%m^%wksu j_s:t?cǎ-0cǎQH&PÇ')u֍nݺug% u;XM-v -]K8v>25٧~ʸq;v֬YM6qҥI35j֬yk7oޜ B TZooovANϻqt5sΙ3(DOVZp zv8,X fڵkwۯZAÇ!!A[${}\lZ4^q7wڕ8箷`BN?N>_>>}HR\{Ó;wUVѮ];|||ȗ/͛7gѢE)&/\˗/Fؾ}{5kV8?CiР`~H׬YڵkS|Xc=ڵkW^&~rkZN[DD$q  sΌ53gP\9ϟϱcǘ7o^y#Gd…=z%J& o߾۷B 1k,7n\L8 ҸqcHLL ӦMe˖<3l0NJ\\> k֬a˖-,Y$yy WXtҴm6S9Wd$Eul>{N[DD -\Æ cѢE :Ұas^^)///ѵkW{=^y)ƍ)jbÆ /2{l ʕ+S3ydz-+y?ŋSlJHNR$sDGJN+ր%""aYlĉ)G%)ܹsj@!8,;n<̝ }HΤkwϩ-XvJ(rM"o}Сf+VRvG$""<u{+eYv$.q2:H o17߀n5s*>lHN??̟MdHDD9N% }qQ"mS@$hѣeKRDDDϩ\r)բ!_>(THD3q")={B\шS eYiHEEW (9?|) &H|QDDDt(:w޽{,|7o^Μ9î]Xx1ժUcժU+EDGeiHzTӧ3@˖СNm:4-HDDrB pr uz=]q +l HDD;_=EreNJϞ=)SL'&HHP" ^^5oZХ)N;*ΜJ@ƍϿ+SNw4m43IԂW k{/ZeZ2HvBO[CD\)$O3` L h(SF-xE\gᩧ;ɮN^T_d>Ĵ.^;"Ɏ 'CL ewD""8U>mڴr +W|.B(_HDrJ`B3{g$5DD$;q*1b-G<D& Hz ; U Z;".J@98DnI-xE3nݺPHvTRdIW!rKQQ"vHRbVDm35""""wé,X#GpORvmW&Bt4. NHfXՃ~`r-KDD$ނe,\P(9[t EV2,XO> ux27/O?vZ~^|E]`j+:v4F_x2V@6o̠Ax\2޴mۖPJ)9SBw1~)J)PDD9ޣvXŹs250S".r傥KX1h~DD9Xҟ2/*l??|;]9="""pЎ;ȝ;w/^`رE(9Vt~"\9X ZHDD< HXXaaa7.1áɰ((UJ-xEQ&0s&< TbEDDév7ntU"{47Mx~Uq ͚δi :X;q]$$&Zqwf:z"3-JEDDRHw2h 9 >̠ANr'u% "{Lg_~] #w$&&x֭[3|bbb<ѣ̞=-ZPbEN8)JΑԂW g(_tx9,#w/-[0uTHBB{/J@XoƑ#Gȕ+mڴaƍ4jȕ_dCfYRvG""մ)| eȑvG$""ȩ fN<ٳy'ȝ;7'NɓӱcGfϞ͉'Xvm8^}U ~lذ!]^pRHCӦMٽ{-ݺu+5"00 ˗SgYSLL2SF -[꼵kҪU+ɝ;7?;wf߾}}rh3HD}èQfj_ehB…۷/}xݛpNr?>mڴaӦMvI2dH7nl(QJLLmLgΜ|||;wZs۞TjY>kw"Qׯ[V&Ue>:u8LJ5k 00+zN˲nY_rΝ;O?O?ŋi޼rWKsp kgEDD2%((( ,ԩSH666Ñ7#66E9oV~})BYjcƌ_~i-R ^T)sػz#erURϝ;w3reY&=uHRJ\z4?EE.mw$"օe`::T3BDDr ur5_kג?kGIi{=2Ozk׮TT )SP"ն-| Ŋ1vG$""vpG1hР4?U^~efΜsu TX/~kλݵI۹:{iӦ p=дiS/^dϟ?űnݺѭ[;^DGkHv4p 9cB"""lҥ,P .MdY9ss=}%&&&C H͚5ٴi.]JQ}v5kּ7oNu|PBV7;vSNݸqv9̙S'$W^MoYHSDGCvG!"0fIBBcG#Iۭ޵kW&F ׀,Z;vPjU,X-IÆ I&߱=mZ:uD||<q򱸸8ϟOӧOIMU:u̙3';wV]v/_>7o΢ERL>_p!/_N1\}x{{3k֬q~xT_ѣGy3I,K+ "ٙd IDAT O> vG$""Y-+ 4i҄Я_?/_ÇyW?~|}gйsgFř3g';vy%7rH.\ѣG)Q`0˾}(Tf"11qƥĉiذ!7f0m4Zlɣ>|^pp0Æ cԩfl’%Kp8VVf͚QfM (C;w.L4)Cߏi|Y Hv+|)}Xr岎;n 0*\'OiӦ֮]ny-[X5EZC I1f&MJ.mΝ۪VtT? ^׺ݻ[?fMִᄈ,}DD\˪]۲ÇFD$}z9,+ #""իgaӦM@j+矛Z.] #WpǏ뼤"w/paӞgOXش# HRR̿HCEn':<*Zˡsg O> ׋p2wT HBBGe…)R{#))[8D~:ЫaaUx ' }Is*… }zɁ!8DDA#3Ϙ$dD#E@]MEEi4hL`w4""2r'>}UO/Pt4Ԭiw"n^|Ѵ}51cGDDN' }o6j짗l*ovG""hhHLc͟x ' ^^^iv,%J0k֬ &9˯… ڂ%"iKJ:x ' zpP@ʖ-K-v/f̣1c̊ر+VҶ,ƍaHN"^]Q""YD!n!:LM;;֬(  'awd""ٟUtL#"8CI;LD${S" qXDD/ՀmKDEΰq#DFB~̧DlDDI};xyAfxd>% bh(X|2eªUMޥKHD$Q"Q,qG Y!]Bh)T,>T.Q"",ea꣏q;Zh3x>/6-ϝ;*ϧDlqUݑ^a޽vG$"ٔ-6ZOи17閵vx.% b OSlZA*N% b(ȟ_ӆEij+VХ \lwT""E ":8vG""//|ÿ ±cvG%"9-ԂWD<]m\>owD""A B dժ*UiS9Su!""wDܕ+p 2ӟ{^xU]HڔHKꀥ "]@X,] AziwT""I d(DDL]vG$"~HKj[ݑdʕMҪt#FvG%">HR ^atx]h bcJD=(,dg 7ڷZJD~J@$)Q#ص *U2z'N45"""9R/J@D$g)V ֯ѣaXhN;*{(,"Sy{_ @Hs$..W_}`_>6lH׵.\`)R|8Ź4oޜk׮1}t L.]R=ѣ9r$-[d̙,YPVXAqAz{G֭9s&=ׯ_o͇HNU0|L B,"Yn~5mڴc׮]ʕ+g5l._r8VxxxgZ w֭[[֥K͞=֯_|ɓ5dȐ7n*Q|oM… -a͙3綱ܹ;w@xqhFHv իWKu#:k:{d4~֭[3a„4c)O\f?xSNuV*IR-Eo{my6i;WZ| 6mTcqqq̟? ӧ$5N:qÓ;wUVѮ];|||ȗ/͛7gѢE)&/\˗/Fؾ}{5kV8?Cy衇9s-ZͿo j^2% ""#gt} q[йsgFř3g(Wرc̛7/#GpB=J%ѷo_GB5k7.}&NHÆ iܸ1$&&iӦѲeK}󂃃6lSN%..|5kְe,Y㦷ZlѣGyWSܯhѢ4o1e܋Ho`=$< TbVG~Z!"A읃ׯ[UxqߪW^eY}re;v,0`Upa+O[l5jdXE b2&Md.]ʝ;UZ5kҥJI&d_,DD${7nm̲~Drz-8,˲NHSslWP[шd_}9K;<<8DD_e܂%OR rcܸǕ+as  ъZ{a(:V9sLD֔Hb o^#q3f?hg8~CLTRŴl/o^9tF ?^z /Z,X79z4s;zլjT*DhQexpΟ7OÑ#&qYƌN,+CAFJRU$k~xFKᣏ4uwDDTTnw6:,san6oQ6hk$#3\lVU""̪֭'sfFVм%"J@6t _1<oeq92 ȓO )S`JzѶy[E S Λ<$"7—_¼yA?'E${[x}3I}j>uBK}2Ν3;r͔5`fɓ:.HK&w1#Ǐ} ȑPiS;fd r!pYt};2ɔ%u ȑ# ABO7ॗHeݹx1kbzL.x;_rjkLDr"% rI HٲRWU+–-fT=УpgAh)`?{T)/`PX>]DmnmAGMmކ vG%"9qvG"[ӦFA^9 ,o^x)3ͷhaVFxN;J &01<);rD$WHi"#@8xe`AB}ܸio~ض Z4J:MLH+ƋQD*ر+)˖ 㦢wadSh^Qa ?Ϙa&MF?KRD20,4۲~$]T/(JH0ýUWP:oV r;7/<,_m'>p}Eɓ&L0-ԭkƍ®HfS".u٩m>0U!9uMGd<3G3YD{;*Phwv5M!⁚77Eaa}ou#@ Td$.X 3w̿9e˕3䁡C͞%K-vmSz||CLs#Lz_ADqHΙ'v̔NV+y{Cns0PٖU)`zE ^{B*&WDSyBGzڷ7EAǎvGYh oSf:gxʕӍ\҇6";24J@ĥ<o\YؼKU~j~ ڶ5K2.\;:q#cvZcq? >mwd")z`o mkךy9ʖO>ÇkWxM(Y^ݴevZ<SBr`x-nȝ)9tW.#!4k*:d0|ن;W&I"4v4]|"ّq̻Xn̔%K X|0tن_m~{s"ڵ!< H)S̢D\b~\(n;'ᅇÌiA 5YxU{D@Vf<0&|J@$ӝ?Oarդ ш+m> 7C*SGD3۳64WH΢D2fHT@AX])@ɨ\[7VefCA> ag;+Wz6"Æ/"D2վ}nj*S|f"ʕسǼj9sy40խvG("N1c֯7 0+Cưx1\fw"ٗTwtLj{@$[2Z""L??SZ ̛qqvG("N*WLW1 УiK'd.% i.]2ڶ& '¹sfc90oaVSԯ)cj.^;BqYt @ŊfsB|(E% i4[ IDAT% ;B k>3WD ;~D$*T0-{O0[LHbf*J@$o+V)QL+h+mX?lNn!<<9bwt"s>|ca$)'["% i7okͷn5'܂Kr7۰7>/7;wV _VYl߸4{->Ct4[Y q mXǎZ=dlXvG("ejB,ӧalxBP<~x"iS"槟L3,r%ln?4\M@yEr~`*]˖5+%.dP޼ߛv?_|GE$%ZLq[Zu9Ҵm4o.//xq3fnȑfp p(l-[‡k0~;JD2E;<իgg4~;o,rj47!CLř[^GăyyG-ZAJ0nIvG*b% )5â+U›yi,H& 2?11N䧟aC_-2+|"|}\eLW }ִMܥKvG*HسǴ$̝; o:i)?> o*Iu"C|Ø1) kZp)[<{ִ-\:v44Tr% )'^2?D//Sϴ~)Z)1 ,W(柵P<,^ aw" H\\*P~}6lؐk/\)RyiӦ޽nݺFHPPC˩γ,)SPLQ˖-KuޡC>|8 6///g3˲!0kYxS,TI>N3 IӦP*|ldK?` 'N3gGk~ymһwoٳ'3fۛ6mڰu^gYmڴaٲe 2~g#pFDDмys]0`1]tIGfȑlْ3gRdIBCCYbEm̙3t+Wp7͝< F*"Y޼0x<<ǽ{PD2Iɒfa6ӣb$8wz2昈G?`9kڴiǮ]f+Wjذm]|p8cgϞ (`u=Ź[K.%={e_>ɓ'-___kȐ!)oܸUD +111o|SNcǎ޹sX;wL/, ,石=zXVuJP;fYG[VѢ/_5oe]lwd"11fY ^^ոeMfY]㩯܉[Z ooo |Ϗm6N<浫WXbt!XBҥ ֭ƍ\x 6гgOի)V6֮]K||<Nqs mۖ|{I|9=Mڒ%f?d6ƎkZD%J}11j}U!C`>#Lt}0t(l fH޼f#@ٲf رc3eA ȓ'O!!!ɟOݻ]v!!!\rCw^SN|||YfXb,+b^-=Kk67qs>>Wm:i-_nB6lhz~^jw"3?lZ j2|4{9k!.hEn-XR ²,N:kkcccq8i{=bcc)Z3ʲ֮5mw}}"lYͪȊfwo(^ԊܩFELqq+͛'jyzʮc[ .17.!6҈xzz溭&_njs71<<+VSuʺf"*ss9a׮HA+܈lpwKZw^`96֥\lذ6lI{IY^I 8x ^xĉP7Q0Mo߾8q"߿oooZ nw}駟b͚5y&T@ _}{=\p...Xx1233ghժڴi#Fۘ7oѱcGm>///;sAjj*4i;v 22ׯיٳgX`EAdd$Xp!*V+GJPf֭[1$*J[ǾDJӧ F""dm Ы|ߡlEDe5Щ\=9/k_~)nUCl@`is"&L <==Z͚5ә\!*fOHHÇNgQ%B 9| FVGpҵ Nܱڷdӭ#GdPb(ug2i[s6 @PNO$|p tР"1Q~JV02xѲݴkW^=KTNYXd}]'] ?.'Ud{{D4k8; (723{M/^m'MM8l&L&ޕP `^ )إ%"#R1d>~ SYم/{޴4ce*k׀b@eGաCxDd<=咜 :-GReی]RKLDFfg5! kInܐ#ZtٗaCYҤ|UMةS5 wzcb~wY#j}~#~)kH:w:uS]j"22EjԐˀ2-)I~\ca@ rAIlYP:%Apဗ{ES"*4=NƏկfYk_~)kGڶHNG*ACVrHHaDEɠd`I7 iPW¯ L\l G`D0!GgL9&pu5vȄT; % JVS2(HÆp- @@RS E:ArL/Q()V%Z=Z%5j$ AmmZl"2=*]7bcoͲm0wqYV09^!EVrn0>)Qeѱlߟ̚%l4jr;"lE #kfd &8yRc|ȹ5 J Wv""#bB䉜p_sG Z͛cȴ'3e'zƍex++Q `Br|}~QyRн\ٹ%ݠd'R>&2ˁe꯱~Qygf&k> iIIs3r9u*+(17J|A j @(_~UNZ}(DDRni$%a5AITz5.u tWWQ0<=z$U;pXXDDyQFHN JΞn xxd#o)_kՒ  ھkdZ5~5д\422dsr<~=0k\oe%{eLX[BDF!W!wp$s33] FΟ N֯RRzWWԭ'^=8AD ӯ:rc!\DD''];hW&A9{zSn@YpDTV1\ݺ%k5lõs|RGDDanԩ#>}_. LvږZڵ n'bBڿ_Η!Z Lh5> n]o߬Tʕ% 2XJvdݠD(CDjn?}v9t9~/8KK|O7=3/%9LݻYtkL55="2) @(G/ ,- "x<+~pRP I`Bͯ.]/eU9밷3:!'O7P7nIIYjreh^\J2hV_oS"""ʢ(I ۷]׿.^Mtqv6xyS6#BcBz6nyGov{[˙OQdm`8Oj>XdR7d= ѼϾQ9Ղ(1#sgwb+QȞgdbh9wػW򕙩'!M|Y{Ry gFp'(M*9 5rS'<{@ll΁ʽ{ӧۙg$G.$*! @HU>E>7:76MpKDDTޘ>o{$ܻ'dw8{V޿/d@R\\]޿5+d#Gd~AF:Lλ sT>_+*쇒Sg{{`t,[&'m&|pgiYE#""*?T* W9&0y@FG6YZf$..-vnaB_|Z?&Mƍ+@BDDDEJQGG?#C>S葬ipA8RRcf&W>,֚5wȐ|dNM %ӧ{وeծԫw~!/e qVPbhx1}B~M gwv *V5{_&0!2X K־i4Yr$ 2ElmRJȐ3$$ r0'O4*xRl.fo/ U Kȼ?0c B """*GE 66rǂJOdR=i_ѢI{p1* @ʖT{1% ՟'DDDD<{aef+o9s9ÇQQCQYR*U5k2yM @ʹ;Çc(p`Z`zy+-ʨ㏁LNҿրc3gn?KFƌ&O.QriY1e Pn-`!fϞ5j@VAظq}"44pppo7nӧ@Æ9Tjdf} ,^ C W_}Aa077G.]pر\BK.ظq#F/>Dvpu111С1| >˖-Chh~'MO?XhV`:Ѯ];9rSLivɓ'yMii@߾r$] W2$$={0k0w (tI(7o6-99Yx{{VZM(bڴ GGG ^^^ŋڴ+VJ%~mݻw=zmڴUTڴYf J%Μ9Mt077'OεgΜt-JBB Q+ gOX֯_o"P>:VUkU:$moݺ>|6 >?wm^zi\\\NUYIDAT;w"-- s߿ 6akkS#==#G9ȑ#q?~\M4AFijBjKJ@>M#((ʻwC`t1VQņ ]^҃ת*=x0$&&Ioڴv}Nu~g˗r Gzz:7n:}Fbbb`kkڵkS+`ׯ_7ؿ84js_?)'` _jJDDDDT>dt!h(9~8Ǐ#%%%_/nB'O-Z+_FxYҵ 4V&Mnܐ#^9#$)) VVVzVVSoyg^eii͛ǎ?I? |lBB23f̀eˀ0Bb)ѫL2QHIIKONN֮/̶hռ71[W5OJ PȖK@Ȑ1%RP6?p zuON{WXӧ8{Ayu*=xJ^҃תt?C$W@i<==sV/m5͹rʛ8x`trrUo͛7䘧nܐKӞm!TzZVUqMj(L2 'N(uۣG꥟8q666QQQӧ6_ZZbbbϕ+WҥK:_-(_>IԨQCgĭW#""ժU˵#)) 7oDppRzuh;w6-%%E-[jĥKDzz6mӦMBRm۶i4 0@8?kܹ#,--G}}֭Eʕ=ȤI """"*3!t:0|;v,j*DEE~Vw :k֬͛7QJ@ff&q?...Xx1n߾ӧOG{hj u#pm̛7ڵ޽{u'`Μ9>|84i;vujK^x ?~<1|p%#""""2QFr"&L <==Z͚5ә\!*ĭ[tÅAAAٳ)pssG֩n̙zZԯ__lذ`wPQbEaoo/z)_^Qb5 DDDDDTDDDDDDT61!t!T* N{%t*T3Gʕ+Qn]jbѢE=}#F@J`gg DGGy68;;CRa͚5;v ƌx)k{֭kpVE+** ~!`ggU",, W {ʸ{xOŋ5kh۶-vޭ !qƉu,|w...G,ZH?NNNaÆ"--MgK.Pb 1d(={NLѲeKQB_ŋ ???aoo/]V"on޼)EժUAAABRիW3ujZ4nX|'E.]b{*jX~}{nVEO>S3F\RL>] ;;;qm>SƗk{+BBBĴiĊ+Ă D۶m(b|$M}8eCF)lmmŝ;wiIJJ...G:8PTPA$$$h6m$E۷oצir~w_JTq}!QQQBQ?j}]rb,ʪ^C *?^qq:W^bРA4SƗk{4eff QNm+aB&){s^sssaaazj;v~޻wPT⧟~wq(Xn6-44Txxx>vvv"55U֘ٳgB|:RSSE  ve@~ ٳkU7n,yOW)ս{w#+a2iamm 9sF.66<@@@vM6ioy߸qc|7JۨQ#|%\UHOOۧٗǀ/_pvvƇ~תdݿ...xOJix%Ǐ?:}el @$YZZO>믱k.L>ڴisz{xxHKK533OΈզO:yIK\\E1/.OOOL0VƍѳgO,^!!!*9{.){ZLɿ/1y,\+c37v iѢZhܭ[7o&&N{")) `ee5 )) HJJcY[[k&} !t>c_k:CCC)S`֭ ^r%|hժ 2tSdܸq۷/bccyfddd %%+cc 5kDϞ=q!V@e]rr2hjorr6&oNTE'/3u~y7nEiVڵ+e()Zq"((Į]s+ccBJʕDm58899;-- ԦyxxO:yI9˛5cmUz:wgϞ᧟~v)Ӓ۵ )ЧO>}W^}ed @T~:aggOOO"**J/ߩS!^ӧO#33S/ٳgy ׷Ϩ1u󃹹>O2ŋx\]]iV'%%ݺuõkװgԪUKg=)ӑ׵ )ӠiSWVnÇbbbի6-1-[MKJJ𶳳O<ѦmڴIT*9H4cx0Hί,(< %q]r[.IR9]dsPTbΝ4^⑑!z!,--̎Z2 B>YS>>>b%$$Ç WWWagg'ٳgKjժ Jepu6Kdd 666M=Z)Sy׵JHHNjQ~}1k֬'*ZڵT*+?׊iشiԩYtI޽[//+P|`'t"""""*1 @0!""""J """""*1 @0!""""J """""*1 @LcbiʕPT8kgĈڵk`Ϟ=ppp'O]"" @Lڲe T*vܩAPT8t޺*U 00$+EQ(7`ڵ׽n9_UVaPTŋ/^XE)11SNѣG]v튪Ub֬Y.  DT&iW>.\"##uݹswA֭KŢEr @^QV-lu ؾ}{0^xS.JF%K ))E!"bBDeW?~BWoѣG( ZjUE-RSSagÆ 8p nݺ,]o O>HLLĶmJDD9aBDeV`` MBBBp +W}pssZ/_]HHjժe M4{zjxw!0o<ԫWQ3|oy>|M6Z7֯_Ϙi666R fΜ˗CRiTre\rJJBNtcvvvӧO:t h߾ĝ;wЯ_?~9SбcG5j#fcPSL]f̘@qttĵk{{{ 2D7QFPըT {S[nK.P*Wop9իW͛3XQ4}Btagg'"""B%K!x077|>ۡCQvm焄aee%&NoƌL !~033swyann.Km(b֭:ݻW("l٢M{7J'NЦݻwOXZZqȑL\pA/Jwզ׮][tQob (ҥNѣHLL& RRR6m6-,,L4iD/oQ֭[JϟϱJE4jHjw)Ez;w6Z;vh__|!T*xIBDTXBDeV:u/_jDlRdرcJٳgG۶mqm~tI ͛m۠( zx5j9֭[vlZof͚i?iC֭Qn]mNM~(>@'u_:5N޽O>)OqZ <+B]v!###swϧNB||<BޣGx{{cϞ=zxmm kmѣG>"ʴ-[jzDFFRJ^v&(zȑ#G+VWWW|gOj󅅅ƍ\|ΝC~y] ԨQڥRJv ...իV^ŏ?T EI Q۶mÉ'{n۷+;v j:}X[[ rCDTQ8r"##1n8ƍ ɓ'f޵kҰgiۧw;;;t7oٳyfk<5kրdtf͚8ru*Uڵkz醚7ڵkc˖-x%lll[lAjj*/_+l>éSдi ͛7GkbȐ!زe \IժU!˗j._UxyqjRML 6ىթDÆ 7˗z?5Ot>>:u*֬Y6m`Μ9Xt)&LDDDxAAAxݻ믿7|1cƠjժ8x`6~)*T cΜ9 qƈƌ3i&:tH.&NiԦM888`ڴ۷oٳmбcGlڴI'8̏ʕ+QNL8˗/ܹs GGGt @|}}a,]6mŸ---1sLDGGM6Xp!&N~;_CĽ{pDDʼ@(KZ(>֨Sn݊L?+VG}QF?=VQ[oFaÆ 3f Νu~p7n ;vy>֯_|'Xr%Ç.DznouVE""26EWD""*>C^ϟ?/]v Ѻu9JKJ 3g(DDZ!"*ǒu>?|ׯG۶mK :thH6s. {[0acHk@ʱ C]6bccrJܿ֙ԯ,)LDdJ8 /Q9֥Kl߾~-T*Qs&"2%!""""> DDDDDTbQaBDDDDD% DDDDDTbQaBDDDDD% DDDDDTbQaBDDDDD%f.IENDB`spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/johnson_bi.png000066400000000000000000000766511511632712700272770ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxy|d! 4,I؂4ȀZSh=".CAEM B,m3lJH$ $ 3=3;3_Ɛw=8]A2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2!C2q 1Zt222d|Gyyvء.L:u]NX"ҥKu-.cѢEm .!|Cgee-E&L'|vsRI}<'u|sRI}<'u|>r-p .h-Wm۶xN9>xN9i'!t!C2!C.uxN9.xN98c6lА!C~z\k!6 +.^:uRZZ2"W_},.^| #)..VYY-Z, \ἸdtYYY :"!! vI#@LLbccOx]111uƪ]v6l~ߪv6rH9RTUU;ww߭5kh…v D#GjԩuڵKYYYz5sLn"`X+]vJNNYgYfTzzէO͙3[oU馛$s9zwѣ? :e˖ѣZ-_/_/\;vTbb~Xn;rHƪF/DiҤI:z >{ ֭+I믛sy`ɓ5k,oVVdM˺khĈ;v^z%_cǎURRvޭիWkҥkoO뮻RVt׫sZbfϞwyGڴiS{ K^^V^iF̙Z=)?;w͛զM pׯw$9ׯ] ͂mx<'&&ι5k8p[{ڹꪫs '&&ƹ+#GԞ߻wӮ];}NUUU;v>>Zs-]x<W\Q{ĉq:WNBBӶm[g˖-unw]w9O~Rȑ#}΁jϗ9{v={45m48#GtML6͙2eNǎN:9oV>WSW>u)+?gHɡ{{NGSLQJJJ=zjҤI;|%$$=%%E\s.\͛73Ϭstg?sK/UZZ֭[W{qhѢ۷o_ .ѣGO>un7sL-ZH .SO=:1gm۶\RRnf=O7dժUZjUsqqqug7 4 u~iȐ?{7J.zӧu/RT֭k?ֶm[ѣ}w.Iڿ 8-|w﮵kuֺꪫ;hÇsURRRo׮ >H~_! >^3mڴ:mgz뭷t}魷ҺuԵkp30aRII$)55jΝ:p@Ү]oiǻOMMMsfϞ_|QӦM8JLLԨQ4w\uܹKҁ}s!Mxǩwyvޭ3gjƌ~wBCڕ[-HEEE hֹ]$$$hԩ:u j*-X@-R~~V\Y"eee<8s%Nc^K $IZbEm߾]vR=\-]*//OK.U޽zAq/))ѦM`8 @]]KnV93f|MM~9o=5>w:tjo멧~ʔ)*--՘1c 7Z$BoxQ=`Xryiĉ/~iԨQjٲ,Y?\Ç<Қ 4h _guwR;ڳgƏ-[J2;k͛7Ow}nA)))Zr֬Y3XFFyXB+VPqq:t蠾}jΜ9;T>}4w\*++SCn}4k6ݻ~†<ΉL͆ 4d_^afK.֭+M^{1do$Ϸ\ `-XA2uTmݺUu}. F>|X?ϕ;*&&F/B_RR;C;wVVtE^-D3fhɒ% +;;vIu4X>5pn8?OM8Q;vo[9R6lP^W8p ?GiD.]TTTΝ;k:s|W_}Uk֬믿뮻Nt+33S?ϵhѢ` -XWΝO꾯N?!I:u 7ܠ?O:zhs HlܸmٲUVV-[X JMMw>pnݡ. pH+!!D9r U\eQIIIwȑ#xdCn&Ҹq9Hݻxb.edHDp7ސ>.~kO78Qϥ^|Ѽr[h> a 2RESTTT͛7ܨQg犋kꫯVWi$oԱiZ\ڽ[0@z[ +zj׮uYgi֬Yl>eeezDGs̩w|[oU~~n&())Is}z9zϟ!CCjٲzkV˗/w˗/Wǎ}Viiiێ9R/~ eff*11Qiii4i=z Cpmۚ>cnEs 9 fafcG]$fet)!Az!U$L1cǎK/kرJJJݻzj-]T_|qm~iu]jժzuY+Vٳ;?V6mjohի6mӜ9s_kn5֯_Hr֯_oWcǑgӦoE㤦:θq_u\t3zcw}8۶ٮ~x:֬Yx<'##ٻwoj窫rbbb{}222+t9R{~޽Nv;UUUwQ؏>hϵtR8W\qE'&&nطo_; N۶m-[Թ]wx<'?I#Gt<sg;=_VVۉs4ݴiL>I?~=}Xmh:h!~o08zTzqpfmW4ӧK&y|ܲ2;-g!%'{9y<M2E)))cbbӳ>I&ջ󕐐P]s5Zp6oެ3<ιK/TiiiZn]9#qԢEkn߾}/\PGՃ>Xoϙ3gjѢEZpz:Ax<3gڶm[{.))I7|}Q}m pMLT#?׵J>*}XzWi83H>a4mZx]DUcMi __/ ۸q$ />}[n/uAnݺcm۶U=ݧ{T{o8p`;Fu]k׮{֭uUWwPÇ׹瞫l%}۵kA飏>W|~D\/4̎6w<(gүm^to'[kL gVdq 67JJJ$I ~<55U;wԁv5xHu>5W^ٳ/jڴirG5jΝΝ;7~I:p@}{.)#r@jUU?yjoy<_om6Tڷϴ^55;l7>g!]%ЂTTTFaaaۅJBBBŗ j*-X@-R~~V\Y"e5+m~6o**N ɫtWr\#oɛ0!ÇdfW̑,ՠ )^bEm߾]vR=\-]*//OK.U޽zAq/))ѦM`8A"6m2N\xi~S @~ڬ|KһJ+k^& n^^n|[oUhƌ*..=_SS_oiM?x:[nEzꩧ}:2eJKK5f̘:͍+xl&GTWnK/5ᇛ6aA3#zolCUGL Zk̘a"y睧'ꗿQFe˖Zd>s >\<@Hk*((РAԿuY޽JKK;hϞ=?~Z{t͛7Ow}nA)))Zr֬Y3]z5;?9$W|A T=:Viipگ$!ȑf\7/33mW.ZI?.]i:묠=TN[n%h4duv*-moiDs}=~)= cG@T\\KNfGkZKMUqXzQ^~ )&xciiiP!tV0[$[7"[R~fJD\+-XH+V1XTQ!m \py'mW @ZnåM]@ٶ\Hyy+paB!CkK2qO> -xfh\B v $-vG}|R[j߀fhbەV(Z< B"P`= kizM/9tT^,Izu#GXB-x./O:tHzەɬTV B԰[f7,!A+v E<mX@ٵ˴tGK'oW*-5P`JÆ@X'j7lW @J́|TUd~ edخ$|J^H#Bق%9C=4 |>)3,qF>Pڽv%",I:lf)mX@`H/S/p IDATۮ@#JKIIys @` ޓӮta*\)pP^?5qB`~iV@NҧJ[ڮ@"JKC~p_K۶q4͛͑sRŶ+ p  l6q43,ffڮ$<%%I]gڰXR+RR.9_JOmWF6+I7ڮ@"l`IҀ 1~.ؼ+0: l`I "碑nQz%v5" dK2dNi߾?6fPQ!}+ ah4;\f $l`622h p%[-X梄aa7GZN#I*UVڮ@!l`I@I:H:ٮ$2m.tJD\т%1cЯԿ?%Ь p dKUUv)` 7z?Iٮ@ uJJf0Fjj؂7nI*+~v%"SZjZ:iLAy HȐ?ݰ4\'@lo/@#mыmW @:[$ BŒoȰ]Izq^] @n K>OlJ"O%fA딖JL[ {1\GKVI;wڮ@#u!*F~?kD饗lW @:vۯ$W/)9̲%$xZݰ2\dZ>n7GZkhiӦc;I u-X+mb MLەDD0:S@븡K2c @t;IH?_] 0F븡K2o.1*?M F븥+ɱu:4[z:-\--X{#mXUTH_| Ht.a 'qK VVR׮m 4bI#U=-X;aa-xC58`aWuG NX@XNlW=^ۮ@"UJK-+ fv%@xlW=zt I!UJJML*(] FcVA NXqS DZ55lkˈҧJۮ@!4R=vd :T|A~z]yJMMU֭5`=S{HvȐ k+UUIkڮ@!4bر7oƌ+..NO{ 6hذaꫯ4i$=իƏ?DՇ2sLN[G@|iu&.#$ʕ+flF֭/\&L$3Fĉ8W/ǣ>HmG4n89R ,ГO>!\[NXRBYDhy<́8A4^S\\ƍW{.!!Av֬YL$;;9rJKKuw뫯{[O>Dύ-Xp%_JOw߻f{*"NCooذAC TQdFRUUysZ`]Jy:#33S_{F/Zn^z Cnl +Ay1Xi@vvz=ڳgz (??_?|&M^xA;vPZZZ1c(;;[wq/jƍ9sb٫؂%RXh ;3[|>+mWI1B7Os=)ш {բE4~xUWWwհajox =Zս{w͝;W>OkҤI2Ž[W@ W_|aVQaA^+XiD-4{l͞=sd}^髯|ەp1\Qn],)#v% .0GڰQ^nnmJLv%Rfk|WǎBAk[W@$3B,p@FY99p-ݼ^iv%\p{ ĵ@ n6|9~:-X={JRiJ(#-X*CF@Ђի9~:23mWaq@҂%1X=҈?)g.Dk HNRV́0^s\n\At*ӥ4iJەp!\#ĵ@k**?>s AkI R˿+`ɶmRu5+ 6l] qK=Dr~H&a^! /^TS#}J Q^%UUIvٮ2~ԡ )vmX!5gDb9Ϭ~x<+ASx<́h.-X*s @ozu2"E¥E {wV@!#WWەp\#\Z$ӆ嗶HAt0_?];ڰAk  Hx'Iуg.a#V+F`s}- d~klJp^ӆ +F`Í!~ ZV] 5iGs p' ZF8̀tlVk @8 μ^ijv%\,x H1B*-ەp\#Z$vB&@23ցw9f3ڰ ,k!IDCD 6[ć닞=;ەJ}$9JXF+c8!9bfc[F\@]  pp kІQEG H;<%/s @#$Za', o7=-& 1V@Nc@+ 59 @ ؂%t~ԡԩJ^@#±Kb@=ە9 f_҆D5\![$.F[Fv @#¹l 9 G# @#+ ؂% hfvIi^tkJXB+ ~9Y7GVAE+KR|JNL.f@ )#v%hN))fUD-\,گ$22 @PRfD+_U[A؂5]  p\؊\^9^mV@ ee}1@39p@**b$Ruf~x\i@ ܂):$c vb$r1D-\![1-[D@̴[w @ ނH[ڮ >LywmW  ppnJL4 @3b=i.Du ppnL-X@3@t4b@"¹K2m꬀ͤl- HzN-XYٶM] mY^TU%]k!D+ ֑#Ү]+"gȗ%ue pp_  ~C)%v%6G>D\!HF,J #F ە\![̎| GׄulW D qDb+^Y8[FΒڴ "XXuV@3صK:|Mbc . Q1[$fGI'7GZ+}1?@(Au+ }ߝ;vخc>`vv@zƍ+X)$/mX)?Xە 1+Wڮ@@`]`u&%&2УSy1D woV@S>H] #H [h>] #HiLa8I sM+mX@#HZ̔] };lс(@u8+/G׬8J֕K?e8 ( C=]*99YC|ծ];iFg}^} VJNiImH7ۮCl7[ 2D4H#Ǝyi̘1?┛O>{.S-ciܹ1bvOYYt\xz]30P'3GV@0bsR@D"4`ӦMTVήxc/_38Cw֭[cǎ:u^6(Z$Dڳv%@ە .0GڰEi@aaRSSOMM8ڽ{wݺu+z뭺+77W3fД)SYv؊@I ]M@:H@ H˕o̡C8fϞx@tuoѯ~+M Զm:򔗗הΑ#fHV صK:|tUҍ7ڭQmZxqs%%% 8P+VСC ]VGlC ѶmTPPxN3ΐ-]&i~Iu a 2RE5JUUUzgjUVVj:tv*I***͛U]]]{oQ瞫=8yuЁo9bI.ٮ~ }M@^/@bٺkϞ=ݻ,X|=󵷛4i^xرCiiikF_|{1}0`|M}'zgorH N͛%2'=|>nwlJ&^7H;ڮ@3b .ԽޫEi񪮮ֻᆱaÆ(&S?IsWwݫ?B%H M؂v hѢfϞiڵ~P6?jW?O@ڴiS]pL$֭]D#t)-MZv%Eb+ 8p@**b 19 @`]`fsd zRەhFXdVv% [jj?] fDU55Reed,Q/lWozmW7GMZv%VUTc$@G mXq0xlW@`U$TMс@J[H۷ۮ@3!#G1 :p\E%+ 8/%KlW@`U$xڶMf׺4|8 X$8+\(< ONH+  *HIgJەrs/ D, hoRc]VnX@ H ={Jqq  b ^4U`;^@@U@uXq؂'&7l\uJ""/РaV@t]$h* *Z+ wQjJz"VECʒv] "~y7;#v%'99ҊRYJ:rD5ڑ*ae:WLh\„aX q25faa!n-u :P[dxԾb$sM@CU@'a!=ە HVIڮ h ={Jqq. D%+4s% VES7!8lջْ9 @`U4I$ H敓c@Xmo_iU hNΝۮ@@`U4/**lWXK-ZH=zخd#aakǼRSc. D!ڮ$1Q"@0B5Uh s R #XrrիRەh9r)t,mKAb ^KNTU%-_nM@5@<vB*) YApiiDcHo XrsَXCH` Lu rk+= &Ⱦ}7خ!_JOZ] "+%'/ &* ⋙Dk *>\ͦ\k5$%IiiDJsMV@l99Ru+pXDbQf6`KO<9 b D[҂Pa;^ &ȶm½@ە 暋^+9rDlWz}JGJ+Bx IDAT7J .@jՊݰ##GsCb+^DE(h!́.F5@u3a@ɑ>Dڿv%@5@bb@ xҡC #rr\k9H섅(#+ ݥ~\k=dfJ[ڮ2aD6+!\k={;X~I۱+A͕6n] h *"6Ljݚݰ" }-v`K|t%́.D5Ѿҡԩ\[rrUڷv%k=H #-X%e+-XC!  <ֵtYa.C5cqlW/K-[ڮ,7x! H_m @ۮ@` \ D #Γڶe;^E "%y<DJivaC5))IJK# m&UWw͕֭mW@XD1 -x&_nvXv%DEKK))+Ti @ !dfV"F`] `xa XGH1Bڹv%@3iJ|#}JGG#V7ۭh65@>+knX @`䘴4E @A CXI]XA9&6Vݛ#+ po]  "@섅e=lWuvUFTVVꡇR׮]C>83n8ꫯB (~] PiIC0XFiرc5o<3FW\\rss'4s|%%%D+3S?a-/FҲel XDiu/k֬Y5knv-_\8qb?5vXu9Ն'H]fmlW4HIٮZkӸqj%$$nӚ5kTPP^3g԰Ex1JJBV@^Ra@i&effUVuggg~x:I&g? ԕb' *6x (,,Tjjj󩩩rGw>Od{*1@x*{ixrr륢"ەQҀr%4?l_-7z-[h;wVc#ԗ "gٲJ]vyx+ HJJREEEGxZ?^\pڠ bb̅iakخ8 #t,}6s %k@jjjmV.]4x/Zt|MKQUU˕:u} &m۶u)//dW:rĬ~x<+q}b3%ϴn+WRUQ/ŋ+))TM_\+VСCu׮]+ǣ6x;w뮫s񨠠@={ԓO>{縏OjX oEAXog!'G>]ZVzxÆ 2d"-X 5j3ԞԂ 4tPuUok?+DT$K,iZPPK)E?jfvL-AڢU-K,5cIb-lǙ{+7d9~'ύ==|'O"=X~=|AAAhѢ+t]kr6 ԑ3BB.Yy[+h b7,"8bCdd$_iiiS/_ .`ٲe&O+W^:VUZ}ǣbŊ ` ԨNXŽ!W`nǻy33tZ *bcc1~xbӦMhӦM`2=z5M0fވNNʕBr]hODR///||2222;gٲeA~glذ@ȥ?._ r:-[TWBd( mr}NJ-xO>} D:c!%@lWΝS] Q !7NKD`!%@l{/K|HO ];w={TWBd mUK3 :qB>r\MD<`d@؊\〗PJdt>"1 c',rI'NEEGȥDp H@%[NLgAtBJ0,4HM{"\[+ Zd! )R0v"s6rm][YY+!r{ HBC# v"w+{J)R $\9\Qx8P`y^"p8P:秺3ݴIu%Dnt'ȣII *dn@'з~NHP] [c!ݙ1,, 8}_u%D,i\].@ժŪ+!rk {#H€\N. #grJÇ~ m1@a;yRlPu%D1|8p."Bcy@ٌE@%+!r[ ;Ftr r|@J':ػ8zTu%Dnt!ٱvDN-)?tTY"a!ݙHjpvaa3EN.)˯xzÆV!r; ;sU[3w23ȑ/֩08R8EN Q:3p0@ ǀʕ@ȉ7)trWO?q*@Hw\UxEN-)Iv*[Vu%Dѻ"BȐ-xM{$rj܀Nx%` +Ku5Dn22€g;;ȩ/At4paJ.3€<חȩ;`q]Æ@܌NdG ;΀w;."sLǜ!#nΝS] [`!1^ٲr/9v"#.U] [`!1 7SJJTܝe@Nj\h@)%%q˨Q+ͪ+!ry Raarݻ+!z@r2͛s3:08R4MBǎݓ@h ȥK+!ri ; 6>1w,2e+!ri ;c!'bޔBFS 0`솕"Bc)M@ȉ$'+St4p<tRtMG 7rIIA 4nD%Bc)M_ΟW]  _QiٰHKS] Kb!ef2UӦ˰H{3g8B6x0X"B˓0MHBN)v"*W}҉H@HWh4I;`q.:8}رCu%D.t!yz1SHJb,"x)#щte )Ms;wTWB D#G_|ܸ"Bb)>F#GAD:TYJu%D.tR| \E ݿ/;`qH z˰@HW %C)sDG˥{e0@JId<,P7d6rsUWB$)WNu%DdF۷UWC@HW %ӴLڝYF4ՕnD'HJ!+#qĆ/\ƈ#g\|>|SO=@?~! s!kޜKΒ`v"@o_ &Bu5DJ0p!?HݻHOOG38N@J@lۑo#z||<4MCxxCMt 999ؾ};*VX?و(VΌ3 ռ9p<Z5ՐKKNݯUWBަN3{lf͗T,\eC߾}ŋ[eeeahٲ%THMMɓ'k/##QQQHII͛QvmwV@!WQ14o.W[v"҇?`gH7!22믿4ԩS˗/Dž l2}'Oʕ+qyT^0h ߿#F@RRKgϞg *WOՐKKJ 4H7ݺ;sBHVZz u4iM6M6{4Mɔ4 | >|QCh*!s1cTWBd}4htjK >/_FFFѱc|,[ 9998wrssm~z x-ZNXyy+!e%XD f>ؾ]u5DBaq-۷DŒ,قH_#GmGkO@H7 ǍTbIIV +!2 X8wx=9:u@9AJÆF!Ev6-}TWA.-xz y(QGnt!@E A$'8y3 D*ȥXvK!@H iB_|a,"Ю0|80i"c!]dfGxOXؾ]u5DEBHK*UR]i#[Ƴ/=h{!*Ej*P*', ([˰!].^"Wc2,[jt5JZFtzt΀0`d@UWCTh pyy2pDmݻDVڵUWBD@ZQ\9͛@n.g@Ti}HJR] 9D.G.ڵ Q] Q'9\j| Px:k>\MIQ] #1åG΀Q@͛r+?UWBH pQMG΀@``Z`F=9\Zĸڶ.\.]R] 934Tu%Dd;1 zJruJȩ$&܀N.4 XP۪!* ֭UWBN'Zw>8p@u5D61q9 |gnΜ"w4aФ  䨮 9g@Cߪy:g@܏x1p䈜 !r2 pqk7ĸ @z+!"Gh{AΝS] Q> Pr/s[vgR] ) 7{xeT|y`X@Y0C]q K.߾]u%O@'ree " r()qM5kr+p$A@߾7UWC| :g@eX6ș)2Çr ΀ܹ _ʥX@ȡ8|zRR}TWB$$@Æ+!"=f˖]?"28rT @6!к<˰ ,1QDT] eHم Q#yF)BgSЧf aO@'2n݀$`h`d٪ Pጆ.^~Qu% q 2*`l >^yIUWFBԲ<nrՕS_!2-3E䲬͛UWEBiau\2#,Lu%D'kc@h\5pod3 kٕqZՕƍe,""][ 6{~}`R%a!ɑ's3$'IDAT9U<aNB5M^|QSvzyh)1\&< 6 ص 8}Zu%{d wtI5!dW 0<-Y8r =ڳG}">A<-egC~}??8z 8}ZuE@!V>>:h ._ n'9Yv 9BZ2.-;"rr ?*́ KUWBv(-U*rCv+"'Bv lꥺ**MF5Ր$$@2+!"wVܘ t|I1m лJ8 AdJՕt"c[ZÇM/Ya![Q=\UPЧd jrrC/+\DRРB dWyyW_MS] Wt<dNՕP< dfre25Ǐ˃ _|ΝS]9.ruKJ,!A>>:Ș*U[v f͒dX dW%>!{yY'w,KJL܀NDΪvmoX ~rsUWGBv(}'M~ؽ[nK.&!U  T] Q4M=~:Tvj Q6mW]%El3СJޢ wU] Yb" .]^~Y΄<\gwJJ,'X0P] ٛy䧟;TWC'1->+{ϜD]UR10Pm&qLQ] ?w 9BDLo)?̜ dd3EBB}ϟW]-Xl3sܗyL_IDF `x`v 5U/[H[NI ]!555ooqb?~Х Pl@zj Ć/\ƈ#g\|[*UB޽-ׂ /`Æ vhzڸزE.q$O*dOŋʰ'S[Xsꊜ GqLqL*%)?gC4c@~rWϞ5 :Pi|A<>###SNٷXERRd{ Q] I䞿ҥeKv{#pyoȃW"iд)˶S#Ç+e[9;lnĆX] W\)s<"/OT| 7Q` v-pl8"vWN6>\ k&"z%j_ի'N0ؐ ooo>>>B>U̙l*u Vj 8xZU3poo甕%7Nr#e۶uǎ7 ~*n斈 R%yȖ-pիeӁ op {Y>_jNjZnN //8۷BiL̑&ȏ@reqcƒ^iL&'G.Fʕex9JtxXXX3ԯw/rq<0ߐGdaaaV׷m&4M7n,uݺutRa2ıc |nll~?'-/$8bCxx8oߎ|iܝ;wZ]GҥZs;wXԬY3%DDDDFff&Ο?Ν;.eiBp!۷-[ĬY?<QFƮ]}6ԩR[ cXv-~:BCCիWyQDDDDDNW_}W_}uqhӦ `ذaXr%Ο?իжm[$%%+`\xGݺuU,"""""V[oXܺu M4M,4Mɔd7|^{ Cff&"##rJ""""2<΀nx /Ѯ];lܸ'NK.(S ʗ/^z ׯ_u.] ?n߾QFB GpAƒ>}:L&4ib9Ɏ;`2>J*}(cb=z|Cƍ^Q_}b^IIIk19s  jժ 4ԩSe< !!]tAٲeΝ;6uq{.yDEE|0LXr{Uݻwm۶CHHƏw~;͛7yNA\u<˗/GϞ=QzuqƘ>}[ؼySL111bܹ]vB4d}.]AAAnݺb'Ei^111bСB41s|֭[2eʈS Fq]^\tI2eʈƍ[}(c}vi0aXzu7nX3Ҙ!ķ~+EVĜ9sDLLxŤI,iL㭾?bcc_?F/{LԪUK|bɒ%bB4ѫW/}F!HHH^zbb֬YvNw煦if͚Cd2+VXݧ}0L:TL&KF!ڵ(_uZJJ(S%w,&B4p~QQQJ*"==r-&&FL&ubzkW{ !xW >BnLĞ={;ea2Ķm,aL t]XbŊVիWO|8>K.!..-kzҥcǎ0-_ѣGc5==={ b0 \38/App0ԩ^{ }ybܼyٖ{K*ߐ˗Ǖ+W,RRR ݫ /NjF///}kL>ǎO?mlق7n_\3ҘtSN֭[Oz4hƍYf0x@z@lݻpeSSRRiZ:8b9s&ʖ-(5# B;0a+W?Gnn]\soooXDff&l>>>:dff5V]brM;xhIVЪU+?&M_͛ 7&Ę1c0{l@^p},^SL1ܘާ~ ///rhcRfMk}E`` 6mڄӧRJ;vcر;v,'"77ӦMCjj*߾?6.?wq{~… `n1q; Ehh(`ܹ3zxtn=ʲgܻw/Իo_S4zW^)-?8zCa11 w}РA㏱g4hqAw_.]\rF>0j(9s.a^I&a=z4.]?+Vih޼9&NӧOlQ;8b񈋋[o#GbԨQ>g1q$.r}b8}=RRROOOr-77תOyvv6nܸʕ+[5W/gΜ%K0n8\|.\q=dgg… u떡aU,ܽ{pcbs+Vz 'ׯGfffW 5& .DDD=z ##4xM:iiiعs'9{"77,oq\@Q2Nq>K ˗!qPV-ԪU k޽{qIԮ]SN5Ԙ<ٳgÍyyͺyk  7&Zz5ѽ{|׍4&iii_ !rrr 5*[,ZnmiuVTZ`[TFkfggСC1xݻ}Add$`2Yjl1х>ͶիWegggi~/\˗k?_8a2-a5=h Ƣ~ذaGFD͚5_-;&0ΘkC ///ѻwo5#ib8Pxyy!Z<==Űal~(cҽ{w#N>z^Gg Mٳ]7¸=^xmxi}XdxW 'Ng1B#F$/,X 'L&x7-mLb޼y=(cO? OOOQbEˉQQQd2ѣG[3x!Ǥcǎb̙bҥbȑCtMםebڴib̘1B4?AL6ML6Mܹs)^bbbѢEoQQQJ… k-[&߫Vr(̘믢ZjC̜9S!0&΄DNDHH˗:u7n799YtE@K/ٜAB& Qn]1w\/"::Z ѡChh۷M4n17ohٲ ^^^J*bСٳVeL"''GL2EԪUKx{{PHc"Z!!!6f43ʘ߿_tMT\Yx{{3fXm8{ҥP 63g6wqY0L6?=\~~~裏m6mRzzƎrc̙3ڳgOgϖ1F=u?oZZ]v~@Y$>>^M4K{HHy9x𠂃sڵk:~$СCJOOWV\/_^AAA.kF秦M渦1&~Ag֜9sgݹs|}} 7̷?PIHHP@@@ctܹ[+96!!A#Ͼ5j\Y&M`?ϜԢE M>]Zlի &hڴiJ;.BOJJA ߿جy~kƍ?g,6mr#FGԸqTV^(Z(%%%G{rr2p8f}ͫo{h ?^Çu؍8qmۦ8 2$>.\жmT~|쑔'O{ZqJ$ %!!A}3ج\y~]+Wǵxb:uJ-d-z?uꔪWoPNIŋm6=cy~êU4tPcHn-@+W,D:S#(((߱_~e{yƽ+OOO۷O~iii]tR=ze!zV-[JN>8\Rڸqzg'NHUgKWL8Q ,;F3ɉg#'IN+:}Ŋj׮%I?.]F\rα6lPll}QI֔[˗$~ڵVZ/έxuU飉'***ew}W%Iv#=#z_~QŊ5k,y{{c' w}SJ+<~g$'+GNU***J>}}fΜ:SN ӧݻ[n~0a͛TiF7nԮ]fIM4 W^޲ef̘P5h@/^Ԛ5kta^za=Nqk"I|hժU_t}i֭Сpy IO뭷RRRBBBƍmٲvء)Sgmݦ0k9̞=[+W{ァ+WqZzT8gy{zj?^^^^ onfϞٳgg.oDTXQ/ŋ{/LSLє)Snov9ڂsl փ[1x`#;믥1c.]N( (@ו$)}VaT%%$Pn S7~U?IZ^j\ZT:~\xQz-/#GN ( xpȰr\)mhhVzEO%u#HUXEɼy_Hqc{w饗~M5Y|H4|U?;d2Yix)0P:U*8SƮ҅ Җ-EPQ@tRÆ:瞳v|5*7iLj^z (=(@ 7k:UҺuɓ+H5kaaFR@iEe@f{RFoH'[´i=lY\P:IMMՔ)S(___kN;v측.]RxxW.uE̵ݻձcG) @ǏիWs3hΜ9jذ|||ԢE }ҭ[7yxx("""oٲEZիӧ+##>'˚5fԣ}JV ½6p{k…6l|MyzzgϞڽ{w1ٳ>CEDDhܹ::w'N􍏏W׮] (,,L/րr\^ԩSս{w-ZHӐ!CG%66V{#Iҟ|ʕ+kѢE۷f̘gE!%zѪtNUk=|R:wN䓢3nW_a"##mɦQFC]nq8&66vySR%3tP=z0ʕ+ζ%K}vgٳgpߩS'Sn]#GrriР1cq8fܸq94k gۋ/hʕ+g;gܿdߟϓkc77˘՘ݻU+c~}w終syzz*,,QFiϞ=:{lc7lؠ5ko߾ζUjڼy$I/_֎;4l09>\~~~.o66mڤt;^cǎՙ3ggϞ9fϞ-c{\s9rDGQxx<<>STLLL *3: MOA//e3FߤSwO@$>>^M4K{HHy9x𠂃sڵk:~$СCJOOWV\/_^AAA.kF秦M渦1&~Ag֜9sgNÑ]vkV.^z^sA%l ȍ[ h1FΝcp8 QueҤI V͙ ˾}Zݻ[s/ &-Y"4Nn-@r}sPBoe196k^}f|ڸqx<30Y#u(U&<(iw"ih)1Qڼ$ƭRRRr''';+csl׼fǍ5|\> "3Sz%iPi@kzNei\Az]Ow,)HYӖjժج~͚ΕWP\\urJ?~\/֩4H:uJիWsUBBs\m۶y~,'NTŊ]_w,!%E>\#ץ)S:)>>^tҥKuQYyZl)I:}Ծ}{{;\Rڸqz co>n7!!AgΜј1c,Xp7-ʮ˗Gvbb~NPixibkg.(irrl6)XJOOŋmZbڵk|c?رc.'*11Qζ .(&&F{V%I~vUV|WFاOyzz***%ᆱ@6nܨM61֦Mo65kMjη$%+?)(~IE~Z|IPA9RZ\V$$$D״iӔFiŊ:uꔖ/_7uTEGGɓ[$YpFÇjժRffOr3gCԩuiEFF{֭_``&Ly)55Umڴƍk.Yyy&MoX~AիKܹsէOuM ҡCo+,,LwuWa>>nݺ_6^5Yc41vmc47P8yd'[e)ܿ?k@8=kMJN>\Nݜ!{Nk5 Oִd).ԧT{v' PL]$=o֛ NtkʗFl{( (^ᅲm+o> CFLF4hut}v'*z=9@γJ,_/m$;Q@1֟E7IR[oٝ`' (&>X0A4I;4\9駥uݽeGJCX[ΙcwV!v'؅lvUxԩcmUQ\4t;RZiv(@i@Omٝ=uv'؁l4sIkJٝ=ZxPVQM>\>]z%d8G׿Np7 ?JK؝yD - fcIz+TYSu0UŋvΝVQinc˖ٝN FH/(M,ubw{U. (EEYl7vr{W_;M3[; p)S'W^^v)BB?l e[;>͞-5kfwe8ivQ܁ؕ+ҨQRN֔#Zv'^XT࿺9x{[;bX!iE }񅵾ץFNS|+XEt""I[ZA7ސN(J PDfϖN/fՍ8Q:uJڸ$_PfΔ:ײԹiw@QBfvmsܸg; P@![VڹS|}NS<Ը`IE ѕ+ִ~NSxxXkA6lN> PfΔ.^ͳ;I5|T}1BԩRv)1c`B((@L(J'۝{)9 4B}u54%@E!=Աv)=&ܴ$DrYo?ӔLիaImڝyYP½{N(, PK?,IJ'&҇nх ִgaݢu0aL @iA(Ǵi(\Tz((@>-4iTiJ7__)":y nJf-F{ikEN(( 2eviǎ74ҥK W.]ݽ{:v(???hzj~͙3G 6Zh?0GM6顇R``*T:u:|pחG?O= }N۷J˗KUU"Io%]bw@Ax?bcc5qD5jH+VPϞ=9={СCiwidkkNUn-@դI8*888G{HH]ǏKJUV.ʗ/ 5#SӦMs\K.… oOڵk~;wՠAy~6%ñcֶ*؝lOfϖ23Nn]2ܹsXI:w%$$py/5j׮];;vLtm_O<ҧEر.Zb&Lq@5sc(mSH< m*ewrk$ooĤ[kqW<+VoZ|.O{6mr3bC7njժP<Қ5Rd$o?ֱԡJ >>>JIIўu8αY_m۶=p@}ݒ9s]&Nm۶)..NC ɷ/g\re~SH{K_~i$íH@@@Ӛ$)7~͚ΕWP\\-呤;C]tի[ԩSGt|IVRbEk ;'-[&u*7Rf[ EeڵZ]/.]dSíHPPt{PPPPc>yƽ+OOO۷O~iii]tR=ze!ɒtC"8qBs,X )H06S} IDATv1B{N4ȱn[w Uzz/^lKMMՊ+Ԯ];J~G;vL.clpbbbԻwo/_^tk׮ZjѺz}\r t99>ɓ'gM6ζ_~Eۚ%==]f͒?P,3H{1 ,թ#]4q_ӦMSbb$SNi~SNUttN_]իW/ (󎔑!ED؝e,PܹÔ3ydSV-cڶmr:1ƌ1”+WΜ:uʥ_5aaaZjt8p ڵt5jѳ5kiРPi޼Yvm> 1UT1^^^vfСoq~ӧOSNSBsN: 6\p&P$%S1c؝y|٘ʕy(+ycwK֜ HRr]x.Y"KGJYfbh{(JVpnei~!Lӧ~] Knm{RVѸti->Ӈ⣸7N?_7 ((@;R\ҎVᑙiw%5j$u*ըamcPAJI.]~zw.epH#oo~0ɶK|b;@1uAXjb!3S3-[!0P w۶RӦguUK{HwKoMUKSӟf<:gDљ0AZzkm_@1DVbex]I R~Ro% ۤ-?#GZm*+m.}z ~}Ere駥߶vŪRDrb:K/I;[o$N>CYwNמ4I۷֖oaw@~x\N0bU,TnVVP<[#]kM3:YK]z$P(r? =4dԮ5j,Haaւ˗N "a!kw  Nld; 7 Dr5*4J!W/S,Sl|U~@[p%KB.Ӧ@Kkפv%, [ҰaֆIIvdGЬ_o"d-Z؝e /H?$-]jw@v \5|”+دQ#i`kǵdP(c)SߦM%ooS^X  [f4u4wpk@qѤ4|kvH n19scx{%知߶; @p.GFR|xk@zIilNGM̴]J'ڝ?YrEz (@ܴ;ǥ7vmii>vu\)5l(=I]wYӱA _WJK?s>v~*aw((@+6VrE>$@x)SNE _+VH;K("4{tGvҏ@~AskP=ԫ?Kvҍ@>)_?Eץ'E@v n4@ѻiW~; ^ rgLB+֦ ٝJ/ ZR[ZkKKK vHjjL@]vq_tI^եKݻwcǎS@@ƏWgќ9s԰aCEs۴iz!B SÇz-[UVQz4}tedd얒bc@3umM>hk…6l|MyzzgϞڽ{w1ٳ>CEDDhܹ::w'N􍏏W׮] (,,L/րr\^ԩSս{w-ZHӐ!Cb>^~~~jڴikcr]_r%]pA||I]|Y]vup8r? @ks P\l"%%IٝcI-[J'JvíHBBrsXIα r8y~ըQ̮]v^>_Ȏ:N%[ eM[UVcr9cs7=wKy$;P.]zjg5*!!A9ĉUbEk Ě5R׮R.32aCkҨQaʆkj`^tɦ4[ ʕ+. +á|~9+___5iDtSShh_ZZ5p@k.]TGuY~#y$%%$c֭ۧ[;t3\`A t?#-[fwyiri4N]rrl65 JOOŋmZbڵk|c?رc.'*11Qζ .(&&F{V%I~vUV|WFاOyzz***%ᆱ@ovɓԦMg[fԴiS-^Xg{TT<<<ԯ_`_///e~4sj(p$$$D״iӔFiŊ:uꔖ/_7uTEGGɓ[$YpFÇjժRffOr3gCԩuiEFF{֭_``&Ly)55Umڴƍk.YFٷyzJ*Zl5k,ϝ;W}Qn4h :tHot]w .&F~7)-Z$M -e+p3}aJJS?^5=ps(@2nF\9GN/(YnPH]H+۝(9*VW):myfQeO?I;ӯ[R˖OKَ\Pmhe+WNzmi~N%PHTI'ւ?ow((@2_8_?%۬Y1Ҵiv'(7)=]$@Vkҥ޽v/$99Y)))6mڴj׶; PKSO Yiĉ nM!!!0al $'KqPXʕ޳; o-RddN<ʕ++88X=*U$c~}Zj|MիWO&MѣU|y;wJWH}؝(=ڶ󟭭W;O3g?(888ki޼y:y{R(T6II͚ٝ(]^]ڰA:UZ4PX|$@W`ðaRv'O?իqFm޼Y>GyD~~~vPntEǤ>ƎF;ϣk׮Z|j*UPAFR54h  .]Rzaea-D'饗NŃs,ooo_JLL… O?GU͚5n:;s(O?)@wkP>]z i>]V֭ӹsԺuk4hj֬iwFo5O/KYS,뮻w鮻ѣ5dyvPn*U$@ cH۶Yo#OOO_^ׯw_x Kݻ[@_zgOi*|(k<;u< @铐 8` ~=zH[:ϸ83(B5㡇N ˂w[cEG۝+.X\TY[v-+PԨ!͟ovdz>}u&$%EھݯhKl~; OKR9իWk͚5:uԽ{w˝_HWPő!-]*5o.={v'p)@Ν;kj㣤$͘1C&M]9܂[@E MҼyֶI_v'oiٲezU^=+j֬l٢2讻J[>(å]QKNE3={j͚5ի*T I:qℝwI~+͝kwq8%KX&YJ3dUTI 4PÆ Ot; WOք|ihyF 6($$DM4/Gڝ @l&u vI܈Qݥ'~4Pt<6m3fTTTu]C?9܄4iN%ITWSr9cǎzw7*88X3f7n{N{ZR%K)+WJ BOOO[}tRկ__ .ԃ>Xjʔ) ڵk;vK.)<<\իWt颃wرի9c4g5lP>>>jѢ>bcc5h ySӦMsR.[ԯ__9TMW 3CZX^ixN܄3f⫯2DFF:ےMFLn:p8LllRJfС.}{a͕+WmK,1fζg///2SNnݺ&33=Ghp8ҥK]ׯoz$ dpØeN ٴ$終sGcbb驰0gF={ٳyݰaj֬}:۪VhJKK$]|Y;vаa;|p飏>rmڴI;v˽Ǝ3ghϞ=ζN:Ȕȑ#fNKKӵkL@Q3%cI{KGK۝ [ x5iD.!!! eB{HH]ǏK:tjʥ_f$>>޹4乾$KBB$;wWjР||mۤ{N  kk^cNíHBBrsXIα r8y~ըQٳP-Zh銍ղeT^=M0AӦMz@AcP:ԬiNe.J.B/LIII.dtKc1αY_ɳf-[LSNuY/YS1bzH7Nj@A=*9cft[3:~JphONNv~V:جy~[_'T=4cƌ<3g7qDm۶Mqqq2d nֶmv'Pϗ>\:TڳG;:֭[pPgc @eZKߛgfMʫo{zb~ykGw֯_/N:7ĉUbEk7t/]~jv'P|}5kv^fͲ;P6]Vk׮ui 8e˖AAAӕ+W\ݻWCAAA/sݻW36^yzzj߾}.k3\sҥ:zB8qB=j֬o򽉟N8!IVu.X @~RR8WN(K3fHSJ=$ulw"ȱnd IDAT;:dζӸqcӾ}{g[BB9zIOOw[xxx 68۲2d};O?u9sxyyqƹL:u\MÆ MڵͩS/^4.miiiCB &111ϱ+ر:3Nӹ1ksi γ\rZj[6m':uJ˗/w:uuIխ[W jȑ:|V(effj.9s:tN:)<<\OVddwnݺ9j„ 7oRSSզMmܸQvҚ5k\ u]'Oɓ_ܯFڵ$i˖-1cBC?{U=PRC4HY$t4A$@ ,ui+k-,"A6wEzPY(K'顤=?3 duxx9wr)gI9q-b۶m;Ԯ]"5ysHq)W,o3k^RpO?kϥK̘1cLݺui߾3x`S\\# N2Æ 3j2&<<$&&XӱcGoԩcF1"ӤILMJLMTTT>N3߯.]%$$={oTTT\tc&?zvoX?$"G׮p jg {NaBBրU9v j׶>84" C@t4$%vbk xmի{7xϬY?v)<o|P |Mju8θ7 Z[ovpBg!"%7ڝBD;׬(.I&i H)?LlwÄ nuJzRHIaRn*kNJ&ʕb9п?dfڝHD`*@DJUeK^$"b:u * ֮Z)TbX?N""v'x kӈϹzj)"RkᩈXƏ] ۝FD$o,׿9s 7pM6\r6V :v;ABC +WZG$.>}1ʕ+s 7pQOi޼94j"r7@hw))j׶փ2%KD$q8qp~'&NȞ={8uԩSݻ'{nN8awfеCD~㭷?;';Yf *«ʚ5k8vu؀Hu+8"qJ CN#" +:t(mڴ)c֭2d˖-R4)ȪU۝DDJ">*T~ #D""iժU:nݚs$)oN""%UZx1+؝FD ('O_̑DJa:+.4 &Ohӈm۶,ZcLO8UKD߷BjH2 ömv_|gHJJܹsyvJMMeРAlݺgyEV*UeKHipyРNٝHD|_dzonٳ|,['NڝY^mmAE`Rhx `ڴinݚ?Ơ7/Wƍ3k,"%߶;6 ZFDĉv'_E~ׯ??gϞn7 zE$テu}&@V֔,orQF4jȎ,"RkX?Z;VAB<l݉Dė oNիW/("RkZjj\+χwoRT"+\5kp\EGD f(y"rEmZ#!KjQxGʴi8p 41ptlw) n>||G/pM8ѣfڴi 4p,R] 7v'QW_ny!HYVRd\v&XkA ￷;u*@DJtk_HQs:O)Y<G؝HD2 "DB)bdfBϞz3DXڵU+HYuMV CV݉D,rM>ݣ8ѣOD.[ |yHYֺ5,\<ݦmE^~#GΞ={Q<UXS?DĻ*Thڞ7>T;v={Ю];N81ɓ'`os<̴cwE5j_@зk*"9qDΞ=_l2nf^|En3gS'6U""ĵaF> @ӦMq\iwkV1Raw")m\7oRJƳgp8ذaNu?콄">ln8z$""̱nի5ETD`̙DFF 1'zGFFҧOz`ZZcǎ%88:tʕ+ uӧ>|8k&00plْg߸8:vH@@AAA<󤦦gaʔ)4h???ZhŋsaÆФI^~eN>WXA֭^zL8Q#Jr֯储( ]N$"k^}Aa4jԈ5k;CDDɌ35j0g:wLbb" 6tMJJk׮4mڔ3fpANO?_|q &0ydFA6mX|9tҷo_w#F !99ٳg_HKzMxx8g&997|cǎ{OSʺۡjUx:v8FSH`hӦMpӧ.^h5jd >3ĸێ;fUf ѷG&88؜;wikwۡCL ̨Q<ԩ 1YYYkʴ`p8G}޴iSӪU+n{WLrΝ; `#[yYSo>c5eKcN;Hfbذa+2tP9tP~xVfMIOO++Wd>dw۲e`ȑ9r$$>>)Cl߾ݶ}voq:>deeH$#GOEDJ+!-D"R9s޽#F\uIII4nܘ@vW%%%{-[rm}uyjrr2nڣ_ X3^{c]_-%% 9GqM7]"6l^UHI׼9,_nM<tymѣGϟρw^>C^4ia)))j ÇZ}mJJ #߾9B:uxL<Edd=sޣdz_N""rew ~ ow)\Wfڴi >LjԨ-Bj0pIɓ')W^ <kg… t1}mk~}s>z,Zy1n8WzٳgHN6h])]"#a,x9U ƍ;D08v׿gǎ5jswpSvk~.]~E_˵}mk~}s>Z_z=zoYHJ_-O)}!0HN_ԪU!C0dȐb{X~S-խ[ktmt|FPPk֬<[ngϞ~Xh}{jLJJ ۷{6zhT֯_?wklPkFY#!Po-DUTTQQQm'rʚ5k8wB7p8 - ٫rsظq#4nf͚rؼyڌtxG=Gcٽ{7w7x#31͛7ӦMw{JJ w]A?"f̘{6Xn$""WဩS!5z:3$?"F^'&&lHWፌ$##sҘ?>:tp9r;wzѣGq?~hz!ʗ/@ʕڵ+ .8|z.سgO\.sq0ѣG{q\|WT^=iӦ4i҄sbqϙ3#?GOB߷o߸qX`{%$$ 3g2dmF͚53gYYYL89oaaatԉÇsON֭_pp0/ӦM#--m۲tRbccYhw޽{3f ׯx^:uڵSNgϞt֍{d{= mH[%ش z$""yyrs)"'^tɌ3ԭ[{Nn16ʕ3h?u6lU 4&111ƚ;SN3j(s4i_Ti޼tեK\/_nZjeLHHyLFFF?)g v').a1۝Fsc*{NaBBր)S)pyuRD\7êUcHkϫk@D֯T|Hgi wd]< ovpjCob:PDʦ@!$u]N$"v(@F}ǡCru\~=͛7>Z8_p )VjԀ{ݻN$"Q,\͛7ӬY3/]tϏx[뭩W8RDԪU V)nG7y '990|I"""hѢcƌ!11QmDЪHYWCVs݉D[r-B "&&mW_O?1e~ma"R<6l EHVv'oU$%%ѦMxghڴ)cƌa̘1ّQ'8`}_RUԮ ]kw")nĉi߾=/^dڵ$$$K/1c ZjEBB]YEʴ8;!"mjYgԭk!ow")Noٺu+w^~TB&MĆ ;%HY Z5o-z!)D"R\< +W痫cٺu+=‰X~o^~}IL;K.vX"5/JM> ;UƍsBD"R\9B]R,aD|շBfF@DD {]_|$ã[p8W(338k/$""%CWa!+VX E(@͛d޽,Xڵk3x5/;gED| 7XE[!C^vQ <8ߎcǎ}>}3,ѣN""RX#GAoWD( 23fgc:""X੧`>D"r=\W򋬬,9R\YD|Rl5];\CKpb骈0*@Μ9úu:u*-[,L">%.Z:Hxm뼐~f϶)=< ә.XBBB3gWX^S/l!Æɓ`T`w*),cpPZ56lȽދuUDǎ?Ÿdw'B=!:Z."%G51qDb8U\ښ{_NRM(.օNVΝЩyU8>b#[wȵk֯/ 4T"իչt &M;Hƍp]X<={؝A'mb!:PDhڵ)KDJIl,iHQ Ka>&L,SHN &۝CY/ow(6 yq9i$~gʕ+ǪUl%Rch]pK/YkA.n S3">e8zTHqݾ;;h  {s;xk-Hi݉D| B&PIDD|CFև?Cΰd݉D| `޽$&&pi~GVEZR<)B5aJxIxQ{xupXr꫼Olpt"eӐ ?owS|)h[ Tlw2 S6mv=;55"+V@Æv' AٝAħB|8k&00plْg߸8:vH@@AAA<󤦦gaʔ)4h???Zhŋs۵kG&,, ???N'ٷr N3W^[oP;];ؼn պ DLL GQF̟?֬YÝK1Arr2cƌF̙3Ν;H{%%%ѵkW6mʌ38x SN姟~/ Sȕ5ֺ#`zx}}$R$mڴ83}twŋMFLXXX~gpw۱cLj̀<sι>Ct:_n;t萩P5j:u2!!!&++vIMfNٷo_Yo%!!&!!᪯?cEN"""WO 0淿5fvӈ~yu Vtt4.aÆ*VСCСC^s7һwow[͚5۷/˗/'==gϲrJH@)x Xdmٲeddd0rHg9nZ #==_5Rve""Kec\ III4nܘ@vڹ|צp8)))ԩSZ-Z`ĉ0o<ի /~R6B-0.>ZwݩDJ.Bp4] IDAT+V^R%_˵ٯSe˖y~уӧsQnk^VoawwT>}U+~^R/^t\p8f73'=z4Y)֭pm@Bv):)PR.5Z@PP_AfOʯogY&պ8q=*Ux׏~YxPLDDʆar2*@6lh]'_ʀ(mSëHhh(kܹ֬s 7n܈ 44k7lؐ}ƍh֬.͛7NRR>=?#v0yݻUΘ1#RzA֐nj?)ŜN7nZ-by}k#:^IFFsu1|:t@pp0GaΝdffz\{QbbbmǏ'::zPrev… =N>_` Ŝ9s}0~x=> }߾}|~ƍcݻ{FFF2sL ¶mۨY&s!++'z<筷",,N:1|p8޽;ݺus ^`ڴiѶm[.]Jll,-‘c3g0k,cxwZ*UVg`ŊDFFR~}N8Eضmk.ƟDþ}Z!"RUKy0j[QQ/]dƌc֭kL=N'7Ƙr:iԩSfذaVZ&00Є<k:vhM:ųQڶԈФ o_ZڝJ{Tc_s`Xk4$ ;~vPS"RLholZyݩD bg\0akbŊСu~HZD bAZv'Ҡysظ^{ &M6m`S= "D?DDj/o~|8ЮUhm%*@DAj*$%i\Pkg ݲBCa:S  "`f\ OaUw O='N؝L)p &"""ףY3XWSkwHH1\9HYt~۷C.p}{D "f5W""RԂ/`Nktw =d"D?""R|""`6xYk׬VDJ "E,!""e[@Ljm|RȑpD DAӦPIDDZΜ myew2)bZ!""V;v@n0t5iDrS"RΜd{[ [ ;t!CBH[k,:vֆ>и1ϐfw2 "E*.USr0bO<c@؝L| "oMr,)!WٳaSw^;*M)"YY """%հx1$$X;6*;gw25*@DȎpHpZf9" |v_DYSڵ;H7B{`pk}ȿem"RTxkx;0$"""s-ֶ7[C|t~/R\T8ҩuk 8~ڶ~`IYD8a ckVDD֭ᇰv-4i/h;'RTTWHiW  ?hа`EIYDCРIDDDF@ pm1K ";HѪ]{mֆsܿmmn}m`w:)iT\N"""b?zテKS :u, kj,_8Ы$%eֈ}Yh,_$--c?:t`ʕ >ڵkHxx8[lɳo\\;v$ yRSSs30e4h-Z`ŹڵѣGNuŊn???իĉfeΆ p"""o_ +#@f':Wy4h3gd̚5 EDDqqq^g!""ŋ3j(Nʱcܹ3w蛔D׮]x"3f`ذa̝;} 7nݻwgԫWd~̞=sѴiS8_һwoWٳݻ7o&F~%""r%t VY6lO<f1^i&p8m/^452aaa^gabbbmǎ3ժU3 ۣGlΝ;n4_СCB fԨQwɄ,wɓ'6mq:f߾}yfmڴiժt+\rfΝ~ 0 (8}Ә?;H铔ḍpd̟lٳv2_~^r1l0w[Ŋ:t(:t(k?snFznY&}e大pYV\ p}'Xl9Y#Gǻ۪Vql߾۷3|p_~O?4YYYDGG_R:lhaX"""WE Xv o?lw:)N^-@hܸ1ڵsy~lBVrk׎ϳk.Ƞuʗ/Ohhǚ$hҤI{c]_R-[p8r=?((n)%Sl,Ԩfwҫqc#ؽ߆og; )))j ÇZ}mJJ #߾9B:uxϫq/[l5Qr )5 !:gOum[vxp+V^R%_˵ٯSP>_J k _ZWa>Ckd-|-˳jǥKr_5]p8f73'OA9 |)nT%""R\*U'd+^  `T8ur\|X~S-խ[ktmt|FPPk֬<̾Gpppo=z4UThׯ8|X EDDW[øqIO? )%o|x%3fSn]gڷoq:1 <ؔ+W.IN2Æ 3j2&<<$&&XӱcGoԩcFq2zN&M27*U2͛77QQQݻ8t:s}կ_?W˗VZ???b^{5QF'k|b sIDDD0WSYĘޯ]?1UHLLu$$$y袔 #GڵpLiisÇ[_װϐޯ]?) 6l+Bx1í[ M<ӧxK Nm*@DDDJoEM)p } o}ZDDDJ*UiԫVYpMл7_awʲOUذj׆ N""""F@._`^xAWؽe kMʱCbժ3-zY6ja.؝lQ"RHii~%""RVje'@V|8k&00plْg߸8:vH@@AAA)&))dw `hӦMpӧ.^h5jd >3ĸێ;fUf ѷG&88؜;wikwۡCL ̨Q<ԩ 1YYYɓ'im;v0.[n1>`O^ ^"""Rh\.Æ sUXCϡC?ow5kҷo_/_Nzz:gϞeʕ 8=dw۲e`ȑ9r$$>>m۶UVn{9s+Xطn""""eW $7nLN{k׮e79=yt+e=z4Y~}_~ ]Bv'):)PRRR  r+\< _߳zTXP7 XӹdTա_~WVɓow)ih;}Mi Ysy,D߸q#ݰaC7>cYf\.6oLdd_zz:III<裏رcB_q84oޜ͛7zMhРǎ[yٽ{7j*3\p/E!+ z;4y}k#:^IFFsu1|:t@pp0GaΝdffz\{QbbbmǏ'::zT\]pB,X@jj={r1g>#FFFwߑn۹s'Vɓ'_FF&MbŊt~hRJ[xWG@ڵkG>}?~>cwqƱ`KHH`3gdȐ!l۶5k2g8qsz-ԩÇL>ݻӭ[7w`^xMFZZm۶eҥƲh"O?|@DD/2.3fċ/b |M"##_>'N`ѢEl۶wyڵkOWVV| hw/]dƌc֭kL=N'7Ƙrʙ}y:u 6ԪUpsbccMǎS5j9M4ԯ_TT4oDEEСCo߾jժrʦgϞf}LϞ=7l*Ud*Wl:ud>+ltw%&ƬZew)-~91"H,s  ~y~*T;zvD$~WŇv. ⓾23N""""[TOZڷ+)""""EL w{;Q">y$""""GeˠI6 S22` M )~%"""b S-vj$""""I cgOp|[m͛a^xa. 3N$""""KL3ʕ;R">a8|;oS">!* Ճ;;oS"e^z:DGcawߦDʼ+{$"""痿 IDAT"Dʼ(hZ;29XZ|W""""S"eڒ% ۝DDDDD@q}ݺAHIDDDDew};Y """"R2hDʬ>5ࡇN"""""TH PiDDDD$ )O8v ;Dʤs}{h$""""K};?,)Y4"eλB:зIDDDDTHr$0rD*@LHO$"""" Rf\ӧOXSDDDDQ"e[[kwɏ )akڝFDDDDmxLػ/;D# R]> nw) )́x ȕR xmxI) TH?X _$""""R^/@;v,ӡCV\YkO>é]6e˖<ѱcG '555W?c SLAѢE /^=>L߾}VUTW^ٳ'Ͼ+VuQ^=&NHfffO)͛o^xiDDDD0^ 43g2p@f͚"""3ŋ5jSNرctܙݻw{MJJk׮\x3f0l0ΝK߾}sw„ 7ݻ3{lիGYdGT:wyWxٲe ;wɓ}KzMՙ={6{7dԨQS_۴  ?iDDDDЌmڴ83}twŋMFLXXX~gpw۱cLj̀<ۻ(*ֆFdE 7% jt ƸEGA=c0GQ㒸'Q0q[Pp$4EAٹ?8ԏt#}?{Ium!԰aC˓b111$"bw!SSS ߽{wruu2)l2EΝ;'Ů]F)[UVKRlܹdddDׯ_:s>ۥϟ': &pAӣ9a8'J9·Ds9㵗3 066ĉ&LSNΝ;Zݽ{70d)fooPٳ\:tGv̘1PRR)S5edddԩSwRe˖իlW^իW1i$wԩ(++CBBBrߎ;}sW_));v Ds"P(qN8'U$%%Pղxǎ$''+Sܸqp%O>>>{FRRR`ii OOO6HjKDx"5?--M$99 (Fig);@͛_黇1cytgggEDZnVVAڶ>X6E۷_k׮U(c1(H0|w1cW_!)) ?tkܸqزe nݺWWW@YYq̚5 ذan߾>ѵkWxyyaҤI}6VZ={̞=+VĉѡC|}vْFFF8{kЯ_?XYYcƌ5n766ZJ֭[ݣG0i$4hjAAAHNN~ɓ'?>BBB`ggQem='O"00pvvɓxjw}WcjJv_ל$%%aڴiZF&M7o*J4'R#/ 44-Z%УG۷OPꤦ91:yŋ!"ڶmXf(u,m91:;}_ƈFA4{l] %&&k/ȑ#$͜9m&dggK222ޞiݺu'-oߞeܴi @Ccǎ%Ahveee@VVVh"ڰay{{Sz(55U'u @M6 E6oެh'''J"???/_SqƑJ۷f߾}sN F...4}tŋjrΐj91!":p… )&&֬YC=z A(::ZjgHuRӜRTAdeeEmڴQ,3:yvrbuRD*Mj*)VPP@nnnԵkW=UL@*?2Y)S%eddHC)GO4h F"+++ɑb;w$Aobk~w^vh5RTTD#"$A_㪟}0˪iNƍGVVVnuɩSÿy&ѣ!HMsb(5MYY3:DSN N¨wԳgOIU91: xg|Pnn,'(P.*O@rss>ё-[R>} Q~;u @۶mbɓIVSQQыTu?~LLL?+**"+++8q 9dRZZJ?ֺ ~~~/}7ٜz曲r(sburQ211˗/k<6:.'X'g))):v(-]WsI233_cǎk%+(Sܸq*{.]BIIb&&&=3z)իkkkaڴiajNݻ{{{\#*礂ӧO_W޽{0:*'J!<<'ND֭ NICڄ' zgggEDL=嘚bذaϱw^,^/_Fqu<@qqHqbbb;;;Y'ZO}?++ hm< ""_}k <6l@HHʤvu1'qqqsF!r?!ȳ9 Fnnn[oaڵR*>:*'ƍcѢEbT61w ]~~>qsssiK.ҥ}:t(ڶm9sҸ ajjq_UO"5ۿxbPcܹHHH@hh(Թ\v ӦMC׮]1f̘M]M9 FfΜÇ#33vBii) kԧ6uN `Xu̟?̓6V'5 `XuR=SThV(((-Zqa4]RHv d9* Ԛ|{ (?Ah꺔{aA||<AQ*KD^# ¨Qw^bРA5S6mjDFFJichuRhSW뤶 9;;KF+KƍO4:iNuRD|||p O S^4CVHJJR;{l>>> "E۟eeeϟWlӰ+ыallfqq1RRRjUpppbu!'8p RSS~lRkhSWkDK3=zduIhSΝ; "Yfh֬7o3gh޼9-ZdPuRӜhSVţvYr+,,$www c^ܟ) 2DUL/R瓝ojz۹s'({IGJ<^= U_|Ж㨉U-"ٳG9)--AⱎR$'T#DD"V\\LdiiIOLjgHuRZhT'< H-PXXHB*:uZsڵԹsg'SSSjذ!;mׯj1chW///277'wwwZfv9994qDrpp ZMAAAtW:4mڔDQIOO{HH_b^rCcƌ!RդRM6l2/|]sҳgOEQPj&91!*%o߾LdggG}})J$'V'ٓڶmJhlNNK "e`1c173c1t' 1c1 c1cLgxc10c1t' 1c1 c1cLgxc10c1t' 1V 5 Fbcc!".^Rۙ4i z`Ç cN(سgbYv "=X@]tJ @}wC~zlݺU㲗gZZ+DFFj\~%KKKԾ^'O`8qℾрФI,[L]a10ꤊIijr LLL([ tMg|][Ne^-[D@@۶mCÆ QVVo/Ë p1}wEI&aƍwWcLXf͚)& Nae'N ڵ.jЊcimc5 ضm{W5"z 6 O<ݻuoӆ' :+00(,,bFHHN>-ki^z* ވ-[jCo޼ydffV;"ªUкukSNǏe5jz ǎCǎR۷+ݻXt)!ԧƍƍ8tDQ(۷l;1cV1lذ{pQW^9r1bO?޽{vzpY@1i$嗍@̝;W˒%KcccT^z;vPThРƎwYtVVVhܸ1 Zf͚a׮]:99u/Ed1} c Dqq1Μ9#.] ''/_=zڵk1n8lٲ!!!(++ ׯcĈׯVZkkk;7oޔݾ}onܸsbƌؼy36l cݺuprr7mۆ8̙3GZND:u*^ bʔ)سgëP~FJEh\m6lڵaffZU޽{Fff&"##vZ;R-999aٴ8oԟbaÆXj ȑ#ann˗;ѭ[7Y EOꊩSb֭0`:w˗GFFF"7~~~ cL1_~AŋQII j#""'''ڸq#撱1M}*] 2|I*eff&cdggGqtM5f׮] 3`CEvvqvvFqacIHHz)[*Jn۶mѩS'黣#믿J[nhժ A0ydY[n(--^ٲ3N۷=ƹsdg5*1ׯ_D{1Tޓ}?{,&&&R|РApssۘ0a amm-mk]VZy 1^%0관^D4h͚5UL@!brq:>cƌy4iDׯ+ζ]~M4ymV~L c _Kv233eg@LMMѾ}{_O>UV\LÇe ۷+W.CB,X@<:P!**JD(ޚq)v}ODNNs:]tAYYΟ?/o۶ ?~}`ΝaMṯœ9s+W"44666ׯ v؁M6aΝzj755ҥKݻcڵ3gF77=yܽ{W\ݰcXAﯸ|k׮Փ~兄a֬YᅬSj܏J>}h|Sdd$ .DDDߏ(~~hlڴ wEdd$Νcǎaܸqܹl=mUĒ%Kf?G ?Fpp0-[#GbZY]23339RU x7*o;vӱrJj ?prr̙31rH|Վ„ ؾ}; 1{lb8vj־WהXZZEb1}诺#1kiڴiؼy3rssuTnBntgz̺Ү];`ҥ cI c?۷oG=t7777Ngɵa̺~#""B]a1>c]vݻ7<==Xܻwǎԯ.113Xme1ֿ|7/ "W q̌1Vc1Ƙ= 1c1 c1cLgxc10c1t' 1c1 c1cLgxc10c1t' 1c1 c1cLgxc1ә%{PjIENDB`spacetelescope-synphot_refactor-c682dc1/docs/synphot/images/tutorial_fit_ab.png000066400000000000000000001613141511632712700303050ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxwdUaR !QAD & ]0-*PqEAUQ@eYA a`ɱsT:NB!B @U@!Boݺuhhh@UUzB! %JGGj8#JҎGywׇ˗ne]B!& %ܹs}v꫸kNҎªUpzwߍ{_~y[G!B f ػ 'x"ڊ3<?|":u*Lcccpeaɒ%B!T e-܂3<---kpUW^+Bj$u].\yoB!R$>Kя~7pkC~~Pl߾_qע`K!B 2{Aww7cݯݟJ׿{kMLL`tt4jϧ?i,]^xaB!ʇy嗑N79T mmm}-|T*AEjˣ>__yB!drARLLL J?9g8_+ӟ4Fn˧>)X-† vlݺX`A%B!H<]Gy{l"tRiO}%KZjӦMظq#/^q*YgS3oO!B Ӄ믿T =4`ԩ:u*."[֬ٳt'x":ꨜA!B*TX[lW0u뭷SNAcc##ŋ=xWpBߏxG1<ˆ xbR-Z֭|~3\pFB!BP ---Euu5VXo|8裋l?#fΜ7q'^&B!RkÛ&OC!BHQ) {.n6 Xs*:::pwc}EcccZH!Bqꩧh`YqyeB!$ ?OOnFYBR@֮]}tP[V\~݌$lxL2Ȇ$lxL2ypy6o#ѡ WZ?83t~逴Zܭ: is:-74p*PF!$w(@)aTorӹ; ޛ )@L": O=|t@zzTHc\ >J'oR{R(20$!9 wlx|\AP$u}}qsRd gcW9Dz9,_/lB8  ABH 倨*Ѕ\0W20tua*|Mdrc: ӧGw@;H[3k=%ߘ\1ߵ%dv@-D:+`%!%g=2Yu@FG1cgϖۃ_;7)^Hic: Q&zt$ڕyNB& N@1CTCFGxʡw\닾 C+ }\=\\UBt :Un_xm"ƂI'mðlexZN8ߔc-Do3: v\Js/CT$wQefv0? `NY0cc8Iv@pTϛ# NBߵKK),3D}inv;=NGL mۢ2+Y(@HEr\V䎗֖]5% EgUW͕1)ofe:$t {]--G16 7$|_Jw@v[򓟈@x9 Qƴ'CT$==30ϙ1W̢paT~褍.H/Bq@¸==rRQGQlIw\~_dV] _~\9瀴x u뀍R'8D!@B*tLe2<,ѸBw d}I,VhQGR} I耴 ug\}3i΅pm-a9U .(tacC$Y(@H1<,ez]'1:Q뀤+pJR!X]X° r< GGmC_,B0Uo$t@¯sh  &꫹axذ!XDcڸC:  @29 e$Y(@HšA L~:5\% qԃ@H[t@wdI0G1Ƨ;wfs@a8IH1!G  Bo --2$ HH?P]-&6z-tu~qw;8 f,]ZxDHS&O&*@lsxJTt0G1 8ЫIR/d<'LC' `y|aVPT7'?Wć&퀔1J$Bds: Y1aXI; 67gxx{qNw]r@/N.tvEEѿUw_|t@\GG% ? =i(@HšR[߱C:(; U$s[j(i2`zP*D- '۶I$+~!X6L!es@6n̽w$)GDVѺ}ܯ â"x倄 1 {yF (UD'۷{t9 Hik^5 AаJ?Dx}=Kk>] [`;|[X >iw%J}v)t@P6 or =0+9(@HQd۶p ime0#Kt@GϿ}rnd ?E6bKDW~F!Qem: KmaXCC ,]  ׾9'@%䚄nQ!G N9 ut29 xA-nâI3ms퀜v|Z7CZZd ?$ď[1ah%Da~vU\3JQx9 ,q: B9 q}m: AB* MT f'1. I&Πm N<9ޑG3s[2lnRU\tx/>b: w%,u@fW>p{GMRb: ܹ; #7c: :ytJUr@l!XUU_Px`Y%HrPLF- ^.t@Te0CA瀛n ~~,w:@e!%lU'Nϗ+i 4 D~PD{GdR伆u@lH'Jd+ un: X kd$nX.@Ёp}*CJ Rqϥ4%ktwt@胭 h)Qsо d؏8I@NɣWD CCΤsU`̜)K<}w%@Zt; r\]v&KʦIz;\Yq/$ww00ï\L#@)+䳏INt ?T):\B̙t@ 8zzJKtu7 {> >Z^28/9@}w*3kd$[y !X. : |624-%sk&@98PqYl  ; KZIgGM v@Bz9xAPR_/)N(@r@缙5yO/dZK_Kqp@)@ 8z{Jgٺ5hu/2<,_*!.^LrTWB ^G:-b׮ w}̞mXGF; hG;LIÅ`"R z-44D CC=̞-QFex缙5KTS3y9 ڇ{݀PEqoiaV1!途[W8MxtPi@d84nde9 V:-BPz6-// d;🔤""f̐#S9 qm3QWUy G[,8kRgLl[%,w`5mZ 8-xG~)怌_ p]}r+t@$~(vS&:(Ud"8 Ltrr|wN蚚\3k lm ^w _R&ݿ_M|?[)°|>={'{>e 9']OOv ^9~^GHw%f 0s@.߃H]|>)$l;V#/J%k\RP䑉 \r%G>>͙O;Ri&t,ID7'*8 56&?^exd%sERˡ'$n8t`r- ˼&`̘^ w2Dtia t7sʭ u.?9_MbÜH76{pć:Y)B Wd y LB/<2s^u`Gorn.F/WccΪo箶% uEr 9SVJo6}#8m0`>+΂N`倘!X')~ 3'fxrÅIJm̷ ~&U\(@ĕW^3f`ʕnʤBHKK ٳ%A4|: ӧW~~qCl$BRXԽp; 55׿.]dooE"h D \I-<ܛk/0Ip9S=↸?_PǤDߟ~wNXc#4 kgba@>yGqWҾ-@4+;W Du?am>$HxWp7640:: 6̺_~9\as9眼1'"bTRٹS\{mpg^$t :t`ysV k>{nKgf~!X򽶴Hn '; mmO5 -@wH%zM r@)S߹jU> ]^ujT0+Y(@3pt]wRfyD1H9 9u"mZ'ARmNzR}y/F{9 3]̒^;۪`MB@&&d]IDu@0oϷ )ﷇ̘`ΰa($F~ܳBM&Tx u]B4A?jeBas@s@!Xsd; ^؈!X}}NX-ͦM 2&U@$Tj +aP%Q,  ==᪆1ꘃ{52(K(I耷 k q: A!XuA~x!E2}d~9 =lzUU"lޗ,@k*U 6į dr@$봫[0dv)g%Y+y(@ ȽދUV2^~9?2>H藈V44H\G証ގџh$76:IS_:ʞ(=& h0w; ~ђkl [y~0N ~H,rjג=i*X@pА9~NF+;;Į.yx82>t@I\O%'nN>9?2Hm I\`aغU? I m_pd";=: +UkRꀴbnLh uu; gU^w =O}[TWgVaӽ@lxJB`{d[_WVK9 Jȱ"hi0h쮮^d|qAu< 8\;:I*$IssdBle0 1zAN͇~v@p&^Q DHdDKe>$*Iv=Yی0$timu#LNAPZVW 8E={KS9 ӽc\t@i2鉟'Lҝ~Z%T8 @xdbB>)@~^}*JB7%HR!Xti+A<1"@O³G U1ᡡx$!X-9 3,JX$t68 Ć{O3L(y۷;I, vvfŞBoo,]IZHkw¯QCXz |: '*p]3rCv"!vC7' "t"Vs.9_x%zyoObvoD?s1EGq@l%+1k|ܾ8>Mc<^7 r΋&9盚Saϩ"CRLv$$t V d2T_"1Ò`u@!@. lϺ:Q1o52& &+68 J UNȚ5N [H,v\{$QqL?RJ$Ϟ=G9 UU=V¢E\}3qz˵ȼy2Kd@sH.I %}Th 3:HT!X@tbNl9 dǛW9w3 lh)l=nn` ! ի+gr@z%z~Q9SwX;w&iRNHlUBfQrtg'Uܾ]Χ )@ H2YC4;nVMb ji v@Lp@)嗄 =Hymk nn4|*,+}DvCOBJy>r@IߪrTؚ9 AU֬[̈^h$׫^)2J8dl)o0+Y(@*ΛH"dZd[ f|; qs@!@s JB';nRU%$SD/})ԩrNN^s#¨!X6ɵ'@ԙ'@t@l䀸s@<񄈼|94F?TLH\<(9 *@Ms : rK7YCtb [hKEńEնB: Qs@l[:f pLOI1/~1xT*3Wx>MM2aܽ[¯qIxMN娨1C$r@db}r_ ݵ C8 s\}9 是!XS:aQٳ)@ H3?N;m h" w=}NlHRĽqk˷Ĭ| 9II; JTr@, 3wo8L,&GC'S@dv; ~!X_{^-Gwj= a 2HwnDWrR$ʜTU*##++ ^q+7sa%tN3 mdN J 2?lG1sˁOJ[?\?ȼO'!s  ) $3;s$-@L/@8$b.Vje!I'np2@q; ~!X @VYܞGdGJ:$$t_pݹ wrGf8)GF7Y [%98c1u/dwƀ͛~: BRFMeN׬^z)?m+y੧: :>wv !X~)@Gs@t?4$[&@0+q1?i@wdRd G_)A;]I&ٛwg bĶ?/}^O|zQJMM1cZNCg㌙9 ~dpPlu@`z $ eDXbv>j~Gc)81/X;!D 2+Fss7']>,3=`% ԔfBs=}TxzII#t)D]Ww`Mi{rX*uV M,S.s=vD$NL$d ۪^)re-D{No Wyr * rmio//]mH6aHܱ=GXt^+57;}lܘ[U\>?a|$퀸wCk^w$H3qDi9 as@9N{m*訜XWͺhrD` Xu@HP *@ɰ-k`٪CC;ўIWNXlȼyM{.HWW|: f(v}X$_$@.``;ǣ#scU8!Xf.`\#k:uuJe?%.$*XI; ,w ^ SLLwr zuҗGYHU{eWcc"B*Y4w9 :o,@ktlׄ$H+@as@l񸥊D+x9 6͝,]}Q$KLFu@s&dƌ` ^!XdW}MK $' ==X?dAƽHM ルDOR,_.<ens@4/+ =i=CLLgGhDZm°ru@O1UlYwTCu59 ;d`voF+C< e逄 55rbh|kNԝ\%@tWV*9uR=X%Uk':)g>~sB$q@s5EHMMeL EGG909<]e-^y[_4x+ 3D4ۄVF9 R `U"eG)+ h怘AOG@pŶCgd| ׌ Ա!XCR&D :27C+'G];cсXShΎ[{E16`&N,/Ғ| 3gh۱Cm9% TFBN}I:  yhHG.(1s@ yBRD~N>]&^ ]X6+@@\0Zomsz9 8|8 3Bjk%t@r@E?޺UV9?倸]W@>kf )S%K9 ]h ;HP {WNRt-S46Jc ,lKαtbN  MBZ+$idbB>N,^h8 { U]M[ \W1M4r@-kC'?YL&HoyKǛ)`=+ es@R)ė 7O;x64D -@!8DZs@`!XCR&#! Չb`͜YG B4r@Lشn7Dg ^!X~8 a: nYoz䮻o {{'t߽BX$N1g u╄d: S8+$ݙD_?*~HR!X0)n>ƫU!XN ` Or@v@NN? Gq .Iskk8,][n6tpf{U(@3JV: :Q/DnYVUULIDpjdPV$l`1:5Rz Ns@A;m EPm/fm`2į"܆BtH@[nѹ PfI$H6Exh8)Yc[%@l5\?g.447;?$Y(@ʄ8!X^9 }}ŵhub%d 9Fn$r(|7mK6 ʧ7K07$S7 Lr@B$HU'(S$: EfbYV~. 44I; ]7ěRS#;1K3H> OE~L./N^ðLG2N}PHMSO naB ә!XA+8zht4do݆NTL8 ڹbΌ9ź^{8 tfWH$llܘ3K'e̝;-@N8'SNq&^߉/˝ds@xL-eғv'TKZo\ R1:u8 pً6_f5|Ix(@Jl!a`@n -;,,l`F:yrc9/9X\ hXHuls@c)LZ_7`+X zjikcT?ذZ_^_/2& WGms tpuR<$]זJY0y͉ `i? hǍ?R{ 8@5/SZ\#He\͋n#^`A } OMk5 .Ďm$0WBRuN}n 0ix7iqDk}F>@S\S7i$~`VǕwk| /7ܐ'>ۤrmzH!x}87r<я2{Y\)4>hj_F96wx^ e5 Νr쯻VX>Q׿mmcEi M'JB7?q?@? "Ya÷>(gߏ?^swb{ JKm|{.b2IپOqwc^= }A]9qW7LYwI6~SH?}$sʼn 뀿=uÏ⬳=TKפoym~ӛϽRϼ{hLtہ#dsϖ߯=,:HV}pOܱ9N> x߯8 SO~SǾ2E宻.H,XT!)E^h<<=gcm-]'u@\*Y[M9!~l[<`FHFLI spޟtV̅@(Y%{j 8|_]dûmCe@Ցf`T?f pDpzh1RT5XtsTE< ^gѽ? _$~_VCblx9G;sGcM{ǃU= Lm4 X3@ $oρc98yYUM\A?I=o\f"< jKO||2gJLBNGdI/fd|3PSړߊ;+N=/fw6Ro~@.pйJƃMM6<1nBkzWA|yS¥ߵF_uYޯ[`]94x_գ^|lTߡE75,8__/}|ϜxW <7 yy^/G#g;Xx'0x!*Xe&i>2Fu/aŭ& W47F뱙n*Xd]M*X6=%LZW'fsg=)]Jg{63۬d~/8 VU}='*X~ 10 +Ķ2a[[x-8p~{`f _a(qc [9/} زU/x e}cRR1$t7GZPbpл<+  -I].l:uTwd=MƲe~s:֛: ,?˸%G $PnW1`N {r D;͛=? V.$lޖ*X{x A= 1qO`/ *Xҧ=JDK-N$sѢ-L"NiLa6"TZ'g4Jיg>6 t@‘S֎Ύx_,?DtsS$\)hXyI)@9%h S 3??Y*JF  [)߸O➫$y(@ʀNkk ^ amt^kfI Rr@P؝MDk zo.rS,:8(ǭO&,J:-@xo?'44g!`r}@lDۚimu*WUu?]_&==eV&&mBHGpIb}̻frWG@>W1;A|T A)s{\bc|ѣ^_QظQTxɹن D1>.2O)ORP !Nԩјd p@ N iS187"&@rq@LC7DÏtÙ %3+@: ~uޜ;ss@ܫ:䀨 US_ x[P;M.9o#; }}ͺ{@X3 0!X@\hj>;J 1]\[o̯b6 ꃇJﱍo~jEA ʀ 0C: \r@Z>s@[{!X\Ql!Xx J i`hx)F~'6OL8ΒNHuYè[Nxf9 awB;Ӕ 2Ҡ):;9 8|`:0;G%AI躒ovn?9 wS A{9 ݺ#@lpڦa+=_}{e1d._.a_1% ݜ ׊y$p 8~/qʮ_p&X܍k;$هwGⷯw=r@܅JAMEK_4yaYW9 W4';冋q)r Hg%-? ~ڒf ܩq sٵˉ xIbw=KO6g67 }{1dӦ$eN6z ewV9 жg~ŏg;W^l‰S~6~ ;R,@)[^UuټY*}W\ UUF`R)Pf8WⲉI3Cqȷ24;u:k&@@& E ^~-+Nb怨(0,=4=/Jyo;w;:[[ x`TJDH21!Ko%N'<2|v*z>Jq"P*8 %@iUrlABgdr@R) J"K)D.=?opNrINHe@RHu\aC ~VO Ӧ[I  rqN;d,Bru@:;uÇ`fH״ ~z6UJ>$l _ m{HV^SS#w ۼDTcj_f}Vf$RjH\??wd|\O~}rXA$h!S/2uMIRPa;ĄT;s@TMD gܕ|8 l*37عSȜ98 Iu; 3fHF̘iombfTbL͚^ dNL7 !Sx9 ccsN=j钜 61iedD®n~UAH%q} ?qFT=x7 ^!X3N12)q*Xqfu@>KBTU ~e>Ү]r p@Br6M~HUaf^ 8+H쳏䉌`[DHTD$@rޝkS=N_)@|ؽ;׿ަBdWz1{N蹶s޼{8$I8 wX)Z/˱{.diN-.gs@dmVs2M}ֻM--wSL7$I,ODV$Hq@B8 f@:zn5D7 vp$ūjR\V8}ձB24o^TvBRL(uSܥ夭_/9IٴIđ¾m|ʕўȱχOޛ dX.hs2VU?yIW6-Y+K?=֓JWU%{֖-@Q;^x`q@ےüv*V[+PHX+&!X~9 A&IW4Ž'^< Mr*#O<\ziAThR, cc pa>G]dr/ӥNlbز%mQT %V4u晒9kVqBk{U2ȎҙEOw@T$5w o3@'۶e?ovj{ٹӻב&y`ag*tfkar@8~9 V]|iW$tkS߁X\BPߖ]N; m*4 R*I:1KE7#% ؁ s&@` ً/aIARDu@!XSd"@h8 .퐦M&:ٍKWVMSImk{{WVP]3 FZZt@LLzfx)G,Nl\^x9 ^e[٢P`8+~*9f*܄1?Fq$ MH+wFa)$tnr@1?5 a.xBdz-'@8 - ŗ0!CeD!X^̝ 8N° U 3sYЊvɭ`lAߜD- q [Hî )#L {6s@Hss笫 #@Y@s&{>Tb@ʁЇ ֦Br@*$tn8 ]]mo/ Ĭ1Q: $_P86ɀavQBHuqkHM G ^9 $^]Q u@ol / ]w]l,X5Sni ڼY^o̝4q5awMa@&W$tu@XW_/6IpgT/_T9 uY.I耿tiٯ3RU{%!X$〨p4"@8 t@&  %RŌ,hk ܹ`̘!2>.`3r.{g19q.Ms4kfǵ ߋ&Ws-@L4?55I(- ݶo? ~߁~oA611C:]sKA+ /J}wm*4UUr~wSJI@N;TWW2%Xs _~~$=@+@Fu@4 T> %B&aC̑ke"s۶$!GND7ٲE13d4|ԙJ1MuzIRW IDAT3b:m^:,檤W JjUC<"Jeni^/Z[%6(+-@q$7o}kAT t(x I(fIq ITPIE|pmÆ`͝+0,q'XOLdGȃTm"kctT~qy en] }P99 f) iܪ2tb~/^-Kg3M.fe }v/_t}qT~ex(ICC "sOLH?Y*Ge˕| !rH$t-28}&O(@J-[ n 3Gnmðt2+Q Ĝ&6bu瀘fX?=WDDm;`HCC$SHA?N9 #@Z[ $*}x9>c$'>m}ï]ۈPSܝg1$ - I/ S "@4NL(@Jի6 ./D-@Uu@. t@DD>_EMBnSP{ulL3 ##א)sv֬$$[K\]w$A/3 ޮb``2:LY('akr@27j-Q,o IQ0_?j' %Jřq@&G2yr@, ]In 8p'~HX47˄\89 ct@dRNbcA^kF qz9 un.َ`Z<JIB 'l_MPgxr"u$$'Kkb @2{kB I5 ò%JCUpJ;->~pW/׏$H c$wmUwkyd;$/Y@!$aʄiRR PiR,-C(m00i˰/MR,aH`X,%9myqtZt}O>Hǎ|}wR/;0 TU%ٳsK.>8|J|lY'P=+ Zr%\9 H$YO"V@E|;wjN}}ʈ\:9 zs@,ucmG?~:1OCC5U ȪU/~1"3:_R\{C,&eW۴_u~]g@k,yu%LZ @t^q(˽k` EiV{`1d}Z2R`Չ* | mi}7,H~D|jXU>|o+>]  l*.rm7q##& :rm{UWx=|m v{[.lUm$.耾LM /$|Iϋ/}LF{bUå@1C&nZIՂ >țDќ9sϤmQl* ,{`1HD\hPchkK݂5c.VMww-K:_|] SN@9 @rɉ!ւ$t =;Rdv ^ sJ@-r$ Z2/OV@&yX!> ߇W^/hme3dI@V@hylV-Xȼ.v"WBW@Aq =0Ԯ]W2q- NN_T@R.dkmE\=wn,$]bcd8̤nʷ"O$%x zz "ϭn )I?]Dex3m %e<@󏦼k6t`olhi˕m:L[­dVk:gNN!qʧ+ mʧľF@E||>qQؤd-X.W$a}(H@>X`ʕ % o!~cȘ.LwcSIׂMkodR$sӶ`0g ̙cd0IZKieׂ{4kdUSGs@MBc%fy: CgA{RĻWl* h{w瀤 @f,&lJ :" Qb'a@-4˖}}>H1Ha% *^2&$kLH)NB3݂ {~7T45q0+3 ]a 0n@$tnZU]{\֢Lkns=͛'N(Jk+p=‿iS~ 7:[}_DCVąN I  &(U`fWDH%ɎrI0+ H@&&cn&>`AL& :d0(>&jI `:l+`M@]g@wCβ @d tYKt#xwIeb L„.?yћmAQ' ȻiJ+ -p;ivׂ-(x&TByzW曪r%K22"_~^H6kVTKT;ٵ`eS-?N+QO']zhVq1j"_84:П.RHcU|߰B0А ?_G Vy!,yGJ݆WQiHI==1Xܹ№**eeEYؖ'12@,0SQu8ȥ0c$*'O H0(6k֬sY-雮K~+ w=.q8 D%_|xl: ^u&SUUvD]6#ue7֯O.:l&~ZK+9 :do?I@.6n}LJĄjkEU&, q)^ IuA(" ZxC29`)od~RRU@7!jkųF>\8Udl,9> k h(f ,] Ö- D%W_F˗6&^p$1qS'RL* ۶ ȼwoI_6>P')_@J^D<, H0DzB HShs@2`\T^H'әXHػ7Ts@/光:ȿ˻VڱC|^3h+ ZE[ \emcj9^GDzĝCeF&s e)'';Ȋw`R @-X* ,s $j@k'kʕX^w2h Kb+@9 d-矏Ӡ6] @HMUϧk` @oZrJHJ5$,ud`@{S:$i[dۂ(Źr)mZU"[rr:>I"_dpMU-XH$BVddD^ 6쿿Hhڲ%~:Q>?12P tR ==5RIZAਣ3$wU@nbT@R˦dӂiѫb %J,n'*^ zdȜ9.|ozFO:I2=+Jl3|* Gz2(ж` OCCwA2w5]q8D#.,Y")Y U@}W=`c$q=U=ݷhG1TVoT-X+VyNՆj|_-1$ 8MNf7H@ҵ`e[fU[W-YDxT zT@"`Cs3p v򯀤z\7jB^Lʤ+7Hy* eeⱦ hJ ۰HyX؆$M?K]ͪ*Q[ N:%{KzKx, iB?:"8r"zil!o`\dʝ y]溞B9*$t5yo;1ab L HMB~\y~D[|YR9 (w)BW@dАȈs禞d6ճLR/^mXaG [OQ3t:J|d*Jl'|ˋY^TہҳrI1DT-Xc'W@y.Rp8~, } Vc8&tNT&lh+ G ~5wnd <.k? %L{ނU=tfjv|{N2Hr` t`3U@@(C~yaXS1&"B`|8$] ڵ;T >\}}[u VeeuDD㼬tR.R6R.fqmҩ 3~$u1?EJ)S_țWkp{39y״eŦÑc}@ ]$t yIUqoi=Tq2]??~Il+ ҡ r7tI@ů+ 4= HnDQJ.&8K>M+ \}(ش[Օ!3*~xڏb3^ @fH \@z< `6,y錮j{wNgDy.y Z_;gJ@*+cLWQD݂’b/ OQ]] ׋c=O?SS@|-XhÒ$ dz9Y% * \EI<@jU }X"cU@Ev1cf [@a* ?L. h7/~kyq;g`+S/k kJi*K/eJ ǬNlJWўd `"qs]2SWcl͂PM`_P;PW@]TH Ko,3S r-[M{I\H^il$ H($1dx*lp 8>vcɒ%]Ѷ`@Tw.,T S H&ĪE.U@Ϥоf2Ղ&ۈ ۀW;Pc U@29) l[$WEEl7.k.g;˟`n{lV@DQ̙3}DHsm:![dq&d|\|V @P *q!N(VaI5oDﻛTfQ !T{qvv39+ <浪V$B/ fdUc?m7צpt{b)O>u? t{| =* .~'H"fR*ҟf pp!cGn##,2>}瀨,,bbU@y>+Ts@p!p9ؓI VSxW%NnnW][U/Dмy_D77R`wKo)ˆl47[RD_o~[nł R~ڵkQ}Yk4#jjASU7vZS"U`FP@b;R)`}+F@ 4 `##e[~UV&^;zV@J!x<-ee"i+ ꟯ T<:g6Mx<:W[H@2b 6`Æ qnM1h7suDtА(Oӂ]ۿKE[Qrg~Wj<3kNVf3ZVz}gR##~m~5z(QY$R >7d@Ђ3} V:.* bTV@̼oRYXRnzo6^}UP-GC=4';<˅<0-Ͽd5YDA?UCy(k mBMBb$  b07:߁bPL~BR_sS} 'sǎK9 2wf2{ڏwߍ|;v@$Aee%Dׇq(vs9ַ,^|ŬYՅz}nvuQo;$B *Ȃ֭ݪի}d@6#7B;ኌK~s@ I]I@į:=J H2>.~ӽ&-W_[֦=6JmV}op'Ǯ] ى.Aڵ ?8N>ds=?>~d\_Wp8_ ]t֭[9s'ĥ^noқK a⮉>A|al @f~#B@atA q ^-V@t @Rå~גy#sҥ`+Ď6 gQkjMi Vg'p_1EQb }{6HV@^}裳^l3fdyUԛ(JnccijjbKT@w 2 NBҙDP4HF4z$a>26{[W~{qǧ7[T#d@P@V@4{ 'u!"pMMk Hgvgda CCCp\Xj,:]Z]mdp06ERW@~EJ V-X@T@v% c5nT0 ^Nɶ"lee=dvqnfp. X8([N[\}o%2؛Ț5kObƍ8qgSNS[J f|N6i+ xuS ?^B7 Cv:GyLgO:VM,;:XSEFxNgl`0y{!Vg.FI]M|`5_$HeyΝӷAa9 =q}arrguZZZp93C̚}0o  ioj+ 8Ip,*Ub* S@+}T8V@ MK޲eKsϗ8e~l@v3O?Nr-Op' wQ mU -X@t yD{T?lR%f7AL-.Z=tth(M$d҂e%2jgNzUN ~Ȗ-bCC7&\tEx3 n0zh3{ <$]δƠ T@2UL $;1 ILB@$i&lذ?0~?VX+W=n+ H ȾC\ٌR;сv*(> v z`iM@ddl@}]w{ر|0.rYsJlbz[2J3<gq<@3V@PH|* NL}r6s p]w\Nٮt XRw/8U:rakl@\.vi8ꨣ7nƍ~(Xvm159db,t-X BVf:|s7?щsLoųقEm2[ ق(|݈V|Os[#%~ $X8o.2̚5LEIӌ/ BT@dHdVk^{-@] 3B9TP2p yn 2߅ O>1/m۶ᡇ~;l۶ s*yggTV <[&2+ٞ$t8I`};TXrҹfIA*ѩ^Aa Ýwމ˗c…1w\_~?CxW ۯׂĵ`@}=31d`!*.[d"C5V@2v '&V@֭Nv4t F Td%+ %NUAfpC6lxps@dDb!C [v[*V2flynB + Dư*Xo&# E+_isx QdD=GuuV@@ Bd ;wqGǮ_( BPFe_e.U-,V*gפ"c* F4X!ʜ Sj+ux;3PQ1Vc5zex2mDݑh xK:al cЉP\(s`؃Hx*V@arbY 0"؂E m ЅVTw(U@ DưMٹs'.\N8ivOqb8k׮"^8 (s-pw(={@x@a9 >,^}Uvm  Ԅy桡Hؾ};z{{p8p'^1c-ɋ$ق58(He_Rr$X!Cp^"c&+b ~ZJ ݾgF^@JvZ--@@ع+1Q Q` FW*.l@~_(."(3Ujk!*U[ BDd ַpc {嗱xbs=(5> S$t""277Ax qeaʕp\x %QRmz{Y!"38.VX?'x"9ĕW^-[`ɒ%F(v H_Ph.DDvPnֆG}gqF(n k׮5zhDDI[* }NۖU"".V@l2l޼q+ĕW^qGD i$meo7W@v8 _nEDDarc 7oW\uaɒ%ؼy$"#H$XQ|b%, @Sl@n&\pxqG*++q뭷W^$:(GIDO`POFW2{O u7t2وmV@R oVeoKSF5{|SD""m#koo/H2'/л'J( HY#毰>l@͛EQP(TeF^'T@Z[NTW =#0ىm}ݗ@B>SBDdYEQ!"ʝP׋Xv7̪aoF?BDd ?|IdDD /ԓU@\~sW@diA7>q;q""MO.d V s;`ڕDpWyGFFFDDE9 o/A̝;_WuVFDRo H}=0#Cws@Vꫯ;SO~{ pw /K/%K/RkRk{B-SFDDar뭷?\qرc/crrzEDna81j̫!iDV$H$cy ~g>>@#"{IW/̻ao/:؂EDdG IDAT c0ĥms=͘g!""Y~=vލ~FJ\U`vԫ`8?""";2ҧ~-[[nE},Ys~ᇸ⋱b }y?tY殀xt`lԉa""]kq}좋.JH$EQ zntIhhh? (o)+ .PS ?84b)>BDd Qo``<+5vZ}l͚5XfM!ID%&e^3@0`&5x.z%͆ aÆʝ9S'm۶+.\]n._DdMb yEX i>X!&+xDp> Dd6noٲK.5hDIq_#0zHDd!g:ESXLB߽ش )o]#HlDV@VbSOSNA C=3<Ӡ\g>^/Baxx Ѣ --Yqj>@|@ ߆(xꩧSO%| E+\|hd!I2XD@ ^0zDdW^/f{7sWa H_PMX`!"!"~>I_4OZ*zD"(kdȎ@$q~ AutU/""""+fp,Wx@&z^T@A =M f(A@v 1 ը)j[>@F@p: @j끲2 *.9&{@?>@ka$@M^@Q%1y8LLf 0Yǃpu/n$ zwЉ(<E^ +@:'قEDD1 DDVgTl""""3+ 0Y]S@: =@cU DD4**3A$""BDdMx@0X j_BDDx=0 =T/+ DD$1ـQ:""BDdJ[gxb@1dz""BDdEB޽f!"x DDv.܋<޽@$aW""x DDv V@Hb!"DT|2X,""BDdR9P_,""BDd~@Q_E*+DDd~ DDvЀ0Xil.(yZ""2?Ə~#p hjjBYY|AEDvp` գE׋Q_Q< 馛CDd! FG9=9s&܌͛77zHDds#n/fsǃ`R hnn6zDDSFkX!"@l"8o""Rc!":/Cş 1DD D 04x<ػhl,Qia!"P@oO>eBk׮E]]]֬Y5k4""p0WC4_Uf!ҵalذ!c:@LhݺuXd "2 <nZ[ TDD-[tRFd l"" 9@ /$+ DD/>޽ObΝK.Flu8|Ӊ DDn6tttEc={ }Y[4"]܌n1ۍËzwCErqM\"(T@)Qia!" YqKQ DD6!+ }E ^/~EDD@lBV@*@-XM HՀD $ [(%""z/'pa$ l"""-""j +aO3|>V@( 9/ >H_e3&'@( @By@HFF=/uu9 DDFJT`1و : =@n0OCDDFNDD\@E+ ܄Ra!" )o.J %SnxN`oY* H\# "utt = *ǃvay DD6r~( ccBсEaddPn| !BDd#N'C30<,TWѽEžf|l" h"C:pYg!0\p4 컯~ ^LN2u-ZK,1zD%ЉlvMFHWm4` %BDd#.W( vBDD1و tp߻ʁ`l}s@lFDyB2ˇ]رxJׇ'""`!""Pt >Cx3 p>4Y\m dtt0kY3sq ""Js@lDV][zzfhk1ȼ8N477cҥ77"\<xdرs\}ոu}8Dg|+_7̝;?>7o</o.⤏S~577vc$.<*`ٌөo Vx"HBd77p ^yLLL#ѨkNJ+裏bŊ8cݍ?O80sfq䨣w܁@ V%\Z\r%O~ŋ_" /+WL;d<""k#zEEΏ׿ՇBdrUoXrs9眃/XjU¿+++SO=k>,.̚5 \p~bѢE G 7܀x`} f{o~:^7t#1L\$~ ]L ~܉U؂Edcd/~nI?zj^:pe.Kߏ?Rapnٶޏ""U@= u :Mf\hzE;wu‡f4BDd3S-Xtz e]{Х̄ө@lF`B@x+@*{?(3 DD6#+ 7C:_(3 DD6#+  ݙ V@(3 DD6#+  KiPs|Pun5BDDa!"SliP{\D'r{01e2BDd3.k01,>l؄0ԉ^@lF.;g"|ؑۃEH`Qfk͸\U@ӡsvX(C\s :efYDȭ2=B y:!"̰frwaQm 0ĮFhD>SeiXbhRen=dₚ" 0^&dfs]\;h9sN%ڳ5 /ebF:t(dYFV5cT!"e^}8~ps+yigWpـ2,?gڵu%I,uxxxkZ,"Z~C؉͛0+ BCM _2sLB$MJJJR8Z!"T~% Wvr7GXDTCH鑳ݻwݻwdm- V"D06 DDmL8<R )5CTDT̙3`Ç/s][׀̚5˜!RspA>*iS Qpߠ @6[̝;`K.Ol@؀r.g+,q<];3FTSEIOڶ5[uT3!"݁_*,㌶1B*0kV *ix_* Q- \͵Np~S~&:j9Yn;Sڧl;7ggGD5J)\""]g8ܻ ܻo)OOCKނ*\TkϨf,""B{C2˗n]dg{oo~P*!!!ػw/ @Ȳ4kL؀ |t\& &M"#={ 8xΰCOe&"=pgY7)) .[$''C???6 `|!pss4xMsyM!Cբ\[EEEWx@@v؁[nJ|Q؀Qű!""%/ ݸ Щ}5eBDD@07ֿ-ft4{7pnSap* ݽ'EG]|#؀Q6DDC}<3lO-KaWw$þQu`k \(ՖˣO?m 8Y DJDD`~3X t/@DDT!"N m ̚{uT:tP(@""؀߂waI=\23 DDx y;xdV@e"BN>>8y$nݺt(d&Q: b̙HHH@NN_|Q|-y IDATЈ,83?yVXj1~@%$^n&Ç'|aÆaɒ%B޽qC#"z?~EA@Pe"" 9r6l `аaCLԅ KNNV:*51ĚzY%KZ,N1b51ĚbM؀͛aee1clmm1zhaՈv)BÚbM &]f? 1b51ĚbM ]x;vT:j n?#.D?t$IB֭nySPP/"22RP-I!9r:tEwPd-Z iii GHDDDD 1PSNō7իW#33_})g@̤3gDBBrrrXJFDDDD6 DDDDDd1|Y ǿ/DEE,cڵz!zjDGG-[ļy>3VZf͚ ٳgF&M5˜1cpuZ^Jd} QQQ8pYr-%1c@e$=+%kfȲlR% ݻѽ{wԭ[ MLgE(Ynݺ=NdY6YKQ8IOOK////ԩSZҥKjMky)]ppps=#33yV9jaÆeF*ܹc8v%kruL2ptt,HMM5KՂJx$I!˲Xf:yyyB$&ϟ/ѣJ\b$I 0@NjÇ I… 5SLVӧOKܸqìy?5111b//mڴ*JڵˬyEz<BV}<ϊP&W,yD5'Q8/,ˢW^b?Xxr~%k{n/$)dMӅhٲO_|!bbb$IbĉfI_-T*h߾Xt7opss֭[fIQ___*z-lllȑ#VaaaN:˗/-Zٳfɷ<ɏ?(dYM4;v,}% >/B$P]Pٚ>>Pa .tc׮]J28ȭ€'?Ç1h lnɀk. ƍ3f7x30E=̙Z'Z$fslMj5FnݺXx1:v숣G~T*[3g@RaԨQx["66UYEQ\\!C-fslMƌ |爏XYY>رc-U&[.zjXM*ڵkҥ ++ ͛7TVٚ>6 ?>ك88:: `ccct;;;T̝;4_ՙ&|&M˗/c͚5(,,ÇOUdz>}K, `mmm5߿?{ݯ_?;wƼy|r%`I^^dAvv6>SL6 MĄ5)) nnnL*`ȲFW^0`lmm &SUTek"Iƍ bڴi5jܹ{O7ITUTVM* 5!} 6`̙x7 5Gaa߿_? rJlnIpp0w#FÇ1rHnopf{Scǎh߾=vmx-T5)gN_u(~̊0qr:t ,Wt& ,… !C^Ö-[7|\OUܹs1zh| Dhh(uch4KĞT7zCj5T5!}h c۷/ {yyn!Q^=m._={)))J<5y5뇭[yTسgvڅz ŋQTTdffݻɩ}%޾}d1)kRou!@NN20=s'$ 6Kdʚ!""jZo~!++ /^4KfʚX[[/@VVߏSNoEnn.dYF@@1դ"tL tMZl)\]]۷ucŢ]vIYJQ8yԂ ,b۶mϖ&{s@dY[lэ>dO ,]G9 B"tYlrssuر/_[$ ɓsN5jﴝ}L0 @dd$RSSGz1zhddd ##CL ::ܩIDEEAh߾=ݑիWڵkظq7D=4h o}5gO16m $$NNNHOOW_} bԩ8jݻpMj ۶mÁ_(zjR*!!MR&SLacIII8v͛, KS&زe :w F7oƘ1cΔ5;wBÇ8~yhѢ^'|#G"##X|9Z-fϞm˦TM 66$!##B]L>ݬyW9 7@5eOffxbeY61NjM ;;;Ѹqcdɒ %R/R5Y|ܹpww666C"--iIzg̙͞3E۶mb„ FϞYI~~xwDzhժHNN6wOdMZhРx͝f(YNtM뎓+W;R&G]v...BV6mTza1u?+ƌ#܄FѣL(%k"IT*%KP%HBT'LQ+jb؀Ű!"""""aBDDDDD, Y """""6 DDDDDd1l@b؀UACEƍVZYqĉJgرӧ"HIIrrrH"6mY}veZ,طo2["'$ $)βe˰n:*szjL>~ ,yyyz/Sǜ9sO?)Q}AÆ ( 6 DT#68{.222`mm4eW\+WЩS'Y]|ge6 I& 3<11ׇV֭[óÜ9st(e;v,PPPt(DD:l@F򂟟ArA!пe?$IBǎ-jVXXd 8u1tPDFF"11т=B+kǖ-[,DDeaBD5Vxx8;ТE DEEСCzk@VZݻhѢV\]TT4ib45k $$j...2d}7o;;;xyya믿kР^y"44@RR>Wtj>>>X`V\ Yu1y{{ؽ{7dY,ٳ~ 0qDA^+׵Cnn.wnt?+W`РA8p ك7ngȑ#ѣ\]]Vc(6V^=H3f2|%8;;ٳ#Ѷm[Ç,Gff&z:u9㈈F6nh'7ont*"R؀Qú4^@nn.8pAAApvv֍ӧOŋQ~}7N 8p Ξ=Ǐ _]76g5 M6'b׮]ҥSo5jM.]`ҥ1b֮](hZz$ԩS4hzꅏ>NNN>|8Μ9[֭N>3f`ĉXf /_w]g}OOOhHHHԩSu˅?~>>?~<֭[>}CXp!0l0\rŠ6ڵ3nHD(ADTCB$1o߿o_|Q^ [[[1uTϟ/T*Bq9RĢE;qℰ~nlСqƺ{$͛7m7IĦMtc 4,CƮ_.lllb?!T*Ѝegg ggg!˲zn<((HàB$ѻwozKX[[|m ///5R̄$I 4X?((zcNNNzcNNNhРe=󣴾UDTY)9cΝp 0yd\v iiiW|}}uϜ9=zE رK.ջ7"$$7n^}U:ZVVV_֩Sl$;vÇHIIn|׮]hлwolܸ .ƍѵkWiԨ ȣNy4jGxxԝٳg ƍMo2׷AAAشiݻZߴi rJԭ[Wo'Ob֬Y8rBCC+~:t: 66֭ñi&3դaÆBԩSgN: VxOsxxxI!"R `Qwmڴep=2?z#''k׮5^˗rJdddMW_}$aΜ9F}vy 05XVTTdp+򈌌uѻL988 774/Z-=7@5 ϤI`ooL)ormժnPe PTTqKO|#؀Qfmm-ڵk<,, $22VVVݻ7/_  $$DwQ^z%jL4 ֺۮjܸ1̙kעsXhVXɓ'qHHH(3=۷/>S,[ o66lµ2e ԩbѢE]#7ڵñc0|lذ-+kSy>uNNNؽ{nHMMEttmlmmѣGlذA9,j*4mSNʕ+xb 0ի$00Xb6l؀'O>mll`;v ;wҥK1uT 4uqE\~z) x$ !!!ӗ:vITӦMyfhZL4 ?}{{{KC=iشi`ܹ$BCCz!!!W\޷~Cƍ1fRAVܗ "2d-[ b&w%ر+VDݝX?gϞśos纺"Eݻw;%<~1118x 7o.]BRR6n܈]v!::1ϟG-p=j0{llٲ{EHHHsrrЮ];[|6l؀za͚5[j3g 44`?7v1#m۶E͚5q1?~7V… !"N ׮]DDD"EEE9yOo߾ݻ7 Ǐ>>T랚iӦ!&&Axx8zCY;vP0B%Ky 2ghӦ BBBFaڴi6z^!>>*U??Gf͚C5,?cȐ![.BBB `ҤIʲwԩS'\v CXXѬY3\;.]TR Dߟ ~!Zj 22ٳgzE=z4t::t:{'wIz*>S4l6-Yv-bbbYo߾=,XHNN& eQ{9s ::eʔA`` ЫW/ܹZ`t -Z{?wv܉'x |G}???|w]==n*6m `Fc@,]8q/2닰04mo6DQ,."R[@Tzz:MCСCw[Ne>}:N> O>Aٲe^ ^Ø1c3gƍq5<쳨RJlt;v@:u+?3|M>|_  RJx7~CnnQm'OѶm[ƢTRt֯_7bӦM1t:&L .`ňO? [k;v{С>|ѣGcƌ +lذ׿m6l޼ر#ЫW/dff"11?|8fΜ?3:_B#w^tݺuU=o<9*T@=P\98q/^aÆL20ak\v /rUfPSaǪUШQ# 0vكm۶}V{Y_W"##w?VZ/p-Z`Ν8tڴiWDQƍo< xg_G0qDTV-9ߛ>K~ǏG-XTZ|?++Klժ(XF HMM޽kT˗ˋ 65n߾]AiJIIQ(ocǎu:w}999 Nop .J}}}˗/:N\lc Q1>>`-zq1 @5&3ܹijgOMMjժ߿(Xreʕ+6"بQ#_{[n-zyyzC(Xp7n`ӦM Clll<̛71c `ƌEK.B;LNҥKTz'Oƍ6F!ƏoВ0sL0>SwڵkJ*>}:=xꩧ⚫V?>>(b˖-SN5#G"++`l]vF- N3 s4jm۶Ŏ;ooQ=ɖ,YGu￯` yZʔ)cyA(&WRy*߷1zj3Ν3gbϞ=xѧO/ JrA%DMyyyYMO#00֭N>mw 'OK/˗T^{5苿h"`SgΜ'?43w\̙3]8l={_Dʕw[g". h֬cǎbזڵk#""ΝãG +WNBB F*V,RI&Yf t:ʗ/ADEE)ۮ];{פI} Ž{_="""~nڴ {[n\2/^l0櫯7 8SKiii[.FΝ;vSVT)tw?L4 ?~xgaq߿ 6 99Z¦M\R~uDž \R [d  Ν;cڴixϟ6mرc\Sx!1x`Xp!O@_a/Ξ='^|E[7o4=''G1n8ѣx' ]|U(ȯƍTׯY~=zC 1ftUP͛7y}9998q"*Vcǎ]$޽s3x`|X` @ 6c W_ū`޽h"t]b„ 0a^ݻwoŋqرêժU L.8x90VZEѪlذ ]vFFpp0 ^#h?#qalڴ 9OZAD.Xm6O>sNAмys򐙙iYٲeK/ìY={O>32228۷oc͚5Xp!AP'_^=a˳Ja޽pׯo>>̑kߵkѱgQbΟ?A )Z.[ |sMuF#--MҰ0{rJ<Ve`t_}^yܾ}a׸H[nETTvڅ4QV-TXgΜիWoܸ 8'޺ud~ x!APmrK^^^hѢ&NYf!//֭S&" ;w(} m۶dߠo еkW^:ڵk `0܏&̙3vZ+W={4'F+W >>^ꫯBEL4)33|b=UTٳg7no^0h >`Bnn.FFԜjժE(l$''>{F~\of0V&;;#GT/(`^z f[?T?Alٲ˳xέ[p)iiiHOOW~7>k 6 yyyF?aÆjԨ?ި|ر㓿M6E'O6ZfC- ?x@[]߿_1_.!vҰ<d?|Y6mZt^of\z/^D*UPR%j p=u UVšC  `b?yaݺuA pM;wôiPvm7 7|z矇'֭[P DOHH[oƍϞ=8ww~I }x1{lԫW/a9sڵCBBSjףGDEEaڴi8~85j/bÆ ޽?4n+4iN:Ν;HJJBZZfϞm1Nz 3gD LxڶmZ7~éScET ݻwGҥSOjժŞ={p4oܠCXf zΝ;QQQ۷/_f͚QFhР"##~ n¨Qw |r$''}x"V^ ,Z1_~%Zj#Gb֭]6ߏ_~u58n8lܸ[nEݺu{Ç?^F!C`cgw=eٳmڴATTpIlڴ ʕÐ!Czn"sg-9>,>bpp$vI<~hM$Qq۶m(b}|| 4ydQӉY/^,vA,[#FFFO?'׮]3Yڵkbdd/>x@5kftoFlܸ /xi,پ})S\˖-[n-~~~b O>`YddXfMnZV<ֿCwʕ+b~Ċ+bYfN;uTk_SڵkbŰ0Ol֬rJ54sss3fu * ^j֗Z͜9SAׯS狽zW.e˖4i"Μ9hU&z{{:`m¿{'NcbbHWP#&%%UwFF8~xF&h}W\(VPAV*5JLMMU[QFuD1**J} 44/_Ɔ кuk|gvO>'OD5k`#9shذ!F K j*mqoߎ ݻwڵk]]bT\[@-[?8<֭[?!i[@T8hPaɓSb=Ӫg޵kWtUsu N¶mp]xzzVZ5jz-WW /޽{O-_W\ϟrʘ;w#%%}E5?Тzyԯ_ Uَ- *hԨp0QF \rVB^\\%s$''/lZ={e˖ֳc<3sTPAz"hYR%KLθED.#F`Ĉ4hF\L4)q.GD%I-^:tVCSDÆ իW1}fMbјc:u*17}K.E]P)YG~\]&DE!!!}mۆHUV }ԩ ={ /7{Μ9_@dŊ8|0f͚e>r:up 7ōq_|oǽ@TgL8:uBٲe~|ڵ+<"""""aQAŊ3f -- QQQ2e \]0Zjشi """"r;:Bqqq.޸/7W׍=zmN IDATM4#G8茈 z~l!"""""a!"""""a!"""""a!"""""a!"""""a!"""""a!"""""a!"yI`bWWADDD`!"7``WWADDD`!"M10<|(m}}][ن4%+Kzz""" i@t׋H_8iJv('_ﻦ&"""iR ȵkȑ@ !DDD4E)|J?sM]DDDd- Ӂy5ueBD@rs@ʗnpM]DDDd".XyyVU*pT~"""r? D)- rА[@jԐn?|ڈh D)`ɋ:.""" iRyH+@HSƀ<~,̀BDD@HSZ@//"""-`!"M)<]}R+dd6"""*iHDˋH @HSHnn//WBDD@HSABb!"MXRn\nX DDDݻ/(-m@K- DDDBDnO ^^ DDDϣO>TPN|GnV:[@GW^EfPti[(S ߏ8z(֬Y4EBDDu *Xx1>!!h8ũR/[@ t""rD$&&KMMuQ5 n޼2eW9I̞=ѪFEr+G:I GI&.x,X*Y&;_lt:6lʈ\ %d"uk$"""˰D.6oތ֭[cȑ([,~GlٲC A]]"!HnxxH[94kELDDD6m`߾}hڴ)ϟ`ʔ)7o#$/OT&yV,WZ]s~DDDd[@TҴiSO.X(GAw,9ugF40 #?\- D[@L~/8ŋN)`!"' r,޿d~38@ɭDp_gKiMDDD@).Xr+`:^y;t(8~sj&"""e D!wE# "xJsj&"""e D]@ <\MDDD@D~,s- YYR(qhXx9u1"r{J- 8{V唲HiZf&~ J [J[iڇ=zɮdsiSuy!Ҵ۷mzk u r ix .9v"""2B)msr\[K|^8ixss?rv b1HǏ][KD"5 ZΈ@Hӂ-o( Z L])}y@H O'u@ƀ[ dd8v"""2B!mss][˚AZAHٲ]NDDD@H }إ835 RV- qu14d`B)j4@*rDžd0&"""c i|_:H]ֶȫk!"""`!M[@x3Rx`tRTmv#""r>Ҵƒxf:`K?tTk'"""C i- ŗ5DDH7ԭ1 <\29/HR2nD>fD vZ6)`!Mc H1 ,m7mRn"""274΂U2ȳUj)jDQ:+0q\ 4E^x`9=k",JZ %EډiBrl)",j%tzUH۫Wխ 1q%T,@j0K.-mSf"""RB@vnu]-S]HHe!""r.4u+쳮S8[@ǀ RLXDDDBelT(o17 *OS3)c!M{x_*o8RA]~}%uj&"""e iG+k` C a HNYEDׯ;^"""2%!=ru%d/[[@rrO3U(M+*22\]#/Ozyz^ utiEt"""r"r[уM(%m!0JJv*_ڲy@-n17??iqBDDDB)uNTk׺z+mM@.e ,X*>|8y}(bذaV"""\T- 1 yyl!""r7 *h޼97ono޽x碪G r 5c@n9`9ҥKR4C]ixA_Q- ׊!""r68ANNЪU+T\ }ii&~e4r)Ɓy@`͸s_9Њ\)j!BK3 ,[ x]] .XDDDDeX~=:wҥK"M b,YVuJHH@HH8`- DDdD$&&KMMuQ5ʖ.]@t̞=*VE p:A GI&.x`,ݾ};v@޽r4\ %BDD~@T|rr+" n:[@-[ptեxﻺ- ]BDD^8DEsu ?K\̒vUY:]"""*wudDDi^ %- DDDBZy=[@Ěv"""r.*/>[p]d- С4ӕ5ЃW3BŚlg"ϚAK- ii1PVԷޔZ@=]""Lcboɽ.WT ˕o;n"""2gTD۔Z@[@.XN OṞ!DDDj`bys@NtSDK˒__i[8<?o[DDD]A81@],?.ؗ]pF %"""e<#ͱdEsT9HI6mvt\m\^Xaro9sƾZ4OW@d-KHQ-$&GX~Nr-[[@,H[r}il!->Eҷ򸂻wWC6"8.XCHF-g"""rK|A@ge9&R5Ě.X Kn9p@ږ*|t;%沉b.Xsr S!.XJ3d) SJۗ_gZ_;)c!ͱDV3;ɱ(]Z+LDDD@Hs@,R]<= >XL+9i޽Ǜ>UpIϞAr,KZ@HjפK:sCDD 9֬Q4+`9ll r c@Hv6в%Ps*Rի"""2B3{5@H[l]Ė.X@T1DDDd.DH"뷔R!p: q-8V4%'"""c )Y_Ү::jR8\9k'""EbmGso\k"8kA[@i:޻w15~c~uKSTЧ?.XuoFk&"""cEbn*pM}vtd4v1<~uuil!M1֮5giᢄ33[@{O6i @HSb(Z_ (ujX= $'[^?c!MwϺ3]paه4CǔBj)|̑] `H&M*|DDDdiꜗݟ6 ?k]DDDd MK[@ͮEcnS~ Ç DDD`b.XU~ln!r l"*%m'""" isYwK[@@ܓ͕c*T moܰ5!Ҕ'0}\>}O➜15$"BڦXV?J)JAa -MNg> 5`ɟ- 9BCmϞR+HxuB4I];逤$UJ"9 "/'E1}H>}Fm[uj"pe,_(iO>  SO0t0 !!\]b: q H͚_HΜik """C )Z@<=n1!!, @AxO#8csc@FnZ4iٿඹ<8jza@zz%"""c *:z(bccQlYA]]9:$$nժ6`[[@.Xǀ?`,,]7&O xDۃʕ=T,w2~AßmQz)-i{p^'"" *رcqԮ]ƈ#ɯmfˬC߿"9r\|`RpZ@Mj}DΝCvv6z.]~믿/ ruyeET ȢE@Zt; qg DFF ٳggϞ3g ˗#99%jR~ղtǀ4n L.-:gs(uv5V=e cGADDDco߾E  Np СQ gԿd?P88DǏ"?;Zv""",XPN>paaa{EZMHH@rB5Ɩ Ps>oȏNnwuAS_&[[@Et""ҎD$&&KMMuQ5 4i۷ڵkQF jgFtt5j=܅R HnWOQjQs,9pȃ-y l}0|KXbF˻DM' 2Y*_Xd;Zu@kRЕs&"""c삥 J*ovZTRs[o4˞.('slr 17j5~|QڷDDDxxx`ܸqp?~g2|I.X8rA5- M p4"""K0f5q[fC")5Dߜ9=$a!PĔۜuybm,>3aMn㈈J" 5[@L???كmiT޸Q0)c!P3o`qBא>5"ϝcc KiI c!Pk,tI+ysӦdpp.Xл=|$ "@X>yUk~+`:=4Yشɶ jv9p<ك=df˗/~""4Ci\@Qli)@jִy>.Dh[[@믥uc!pF H>>@J?/C3t ""*@H3l 򅬥JSsbO,{Z@'D;c!P3?9#`Y3='+۵fy+ {HQ֯/94ԺǓc9{ ~,{[@}Vr="""e jR:н're,{[@ʕ};QqBn-= TK;}}CK.""G#GǏٶoel1"jse,G|Vڶ_lOW@dNF΂Ulsg#GsN2fIg +Z@å͛@ݺ8a 5QQ=Qysii=sƾy ʗ'.""- ֔./_*Tyi+mWr UQ]]kqT QqBnM)x{n1Ŗ @R<.Xٳ#Z@3s Kn!"""v"74@t,X\Ĺ`!w rk 1 4Nغ1#""*.@ȭK = c@ 6X1#""*.@ȭ)]GI1 n逈 ǞHJL{ժUt k׮իWc\~7nǏqU]ݺuW_}իwu%Š5a"4TVrLtI6qyĴ޽=zF PBt}֭[iӦ9RgMw+%M&mՔKgBeYnݒ$qB""*JLٿsD IDATՏ={DϞ=U,aoM? f ( z1AgmY}NAQIȭӷŁ@F@8͂Hnpƍ.23_Gq.Xj|jԐg8DDDZSb`@ppU*UCpmxL ǀ8}9  -FXw/K??CgAҥ]]YR~re,Z.\PDDDZRH\\֯_͛7s۷/bccw *I6ln?zz,oI;U뀨5 / deFDD%Y o>$&&")) nBVо}{uݻCURi%؋1@Ԟ0\ J@~w,[ ˗/ǥKаaCۈC%y3oy8bIHBtkWbw\D4HݰQ9D2e 4hƍ#)) ɓ'qq=c/bbbp$пYxEb N$j (:$+Q- cǎz-Z6oތ͛7+_$$$XgI!$) hܸ`}ӥc pU H l!"D=wѣGY(B`{JOw~ŝ5![@xJ@Tb0aJt_BBBBB !..Ρh~Ys]-x*-lXq,Xp1B""ILLDbbTUS|b~ K.Ŋ+pu799f̞={^-ӿwaR ZHQlRө;  >ȱ>z(4i⢊9<.]e˖@֭m:۷Q\9}'N?{ZXϑc@,  l!""*˱tRג:t еkWnPz燖-[",, NW_}@L:Ց/BBZAW3P. ܻDXd :wH_Bʕ1c Ç#..z;w0{lHJJ /~ jr)/D;ur]p"ST) #V9]jÏ?lt-BϞ=d5!3rH9!*/Dcc]W9 W\[@5RSB4J@VX(,Zm۶uu9d Q5`9+f?_j~r>\nzIwyوA 0uT\pe11ÜGi:;guRT)i$+Qdڴi|2oߎ͛cQ7o pq@7@uLF0Qix ?JHu7_m{_ʞ;(];~U_.H '`y6beoh`dgDDDZVeM4Q#-TY'%Y[6ޓ 2#^c@ ͛cz=Iմp޴zzK5xxXvi I:7n8>"""gs2x`ϼDO < Qnn0(bwk׬_Z Щ1 y=zqj#""r .]BժUe˖ҥKŋe˖V._JɤO`vBϞJW=dI? (ԫj#""rwaݘ9s& 4|(Z(uΟ?[nmڴ/F)][2BgXN*O- ?m[CnFtt4l޼{;Ah۶-J(ptBEpU i ȣG򶗗?gSU1 A߾}Jql yWu2MɜuԨT|iی!ˉe}o+S ֣GRo/[@0C- Z3/ޗ֌Y; BOKߢWԏH@HL'Z Kˬ- /ܼxj O3c@׸ܽ۱u LbEyOIvvĉ.-KզLܩ$((RD5"""-b!zQpUίG ʡc@;ΩX1%"""b!2+??yY}YzNOc@7n'i?81tPUCh} HThz!ÞVHLqDDDDZdȐ!hݺ5lt_QV-,ZHt"x劲u Z߷n$2/~}$v DDDdʕ8t"""|rkgkjE9huZ{9dqZ7!""re[n8~8ѯ_?i?8>#9qqqrM:Fkvs?(]sGrsQ;W2_^޾ x{i:hWhh(6l؀~? fΜ#F8u"00Сϫw+]k X޽Je:<SpT  Ŋ DD n@.^h~ey7vXs5[ɋ}S6m_F^^\Z@@re`v5tH6/_;4luŹsh"Xi] 55.\@…Q4TG ms-Z4|}RS]SZ$s=oϞڵ@Xu nX۾;w(T~mOHZZb (Qj;!!B 6 PYf|i.w̳f=d@6׮uAr􀈈rg ุ8.P@n@}FSO=jرcsB znw3=~ac@1$ yS7S-IDD$'۷/fϞaÆh߾ٳg`0]v(Sxm7r믁;w_{5)U-  <ә- 4n,&] *f#==׮]s3$w hξ-pA:- Y$&&bΝxO8>1ey ([9;hBCy@t㟟6l[#([,曾J$E04I[Ju(͑D- e֬vADDTn@Əo@ -+e˖tדd7ݽ+/3-.]Y\{U- ))i1mo:t"":DDDg%i=ͻw矁={@:Vgu+˗}s^(?6~l }8Z@Ҝer ڸMׯ_c0d'TCpR2pl{W81?.(W 4o 8g?!gZDDDrm۶ǙNf sh]r?3^e>0:tnXo]{R:xzѿXRZ}0j1w` ĶzuJܶh|E-7onctd0Av#""r6|$2- l~^-m͚/y#E"0йuS ŋeJWBDD@%D5dn|RaNʔ/@Ϟr:\W0wD嗁kl߿vǑ=@N@:;9J?@Utl͚qc` {G IDATD @NnvkS8+Lb4V{>S""~1 n|y̞mrey L;u*0qbPZ֮q㊈R1= f~z2(ug`?sߍ \QTG$o\z{u .`][@̂eKҥJWCDDz?rg yߕ{~U۶ooƎufe9ckÆCcr}믿0{l|h޼ei#Fiy?Dnرr!C\_h-[k*] i>7@HH*U7|;vć~tYpժO?6'w11/`yiO;F-[`ŊhӦ C҄*U@fKLz[71VӀtgb w&(] iF?J*h֬z聍7ݻh߾ei ~1!ׯkg][@ʔyGv:rDjHk8 u /2Ξ=ʕ+g߈#d-66.Qu@Ot"a:$߻'oR\N/w{!"իzjmw@\(99@gFTT+JR=*YhصK.Vxr+E'^^@rj^""p\\ԩPE?=z˗/jԨ@Ub?Nd$Ԯt%}G6#""- N0x`$&&駟FXX]UVӘ5k.Q3@܃3ɛ3oF.U""|O׮]၅ W^ٳQLlܸÇW3G !""ʉN>H@U^|QB\z F#ЭFy\!""鑩J/$$DNϻ~~삥=z eE&;v^}bQtGzb?P24?Q""R+R53=, |!vBDD?HO@H@ 68HHP""R~^0؏]G`,]_m%~^0;(]K̙#V#!""5BD:S@95 QQJWDDDj?:={k]IIJWCDDje 3Lavի+WC >Hx2Mz*W,_Zt5DD47#b!=sz=zCt5DD$7#-b`i;@ΆU\'$%EjH)nGZÓi3w Gc*] )>Hk@H-O ̜ ㏴~\mZ{1r]֭帐ו\M?H+@3pb4 `@!""Wsӏ? Lk`sM\ɍ?H @H9@N@Ŋ@V=JWCDDv 񑗾AssLt5DD #չw|@m-88x ZΜQ"""r4R+#(-M ԭ|yয়%U"""r$R'@H2s"ۊHHIDDB9txx(W0اjU`R`z`x!""Ga!a!cߋ/'ʙNT""rRһ+Жѣbŀz8!"b!@Nў=ƍJWr!C7 T- w)]n l> Ԯ \tEDD_ j Dd3r'СpQ~0d^2+]Zv_;uiǀQN"#ˁ5kӕT- DdKNrv TЉoT4is=sa֭Zݏ={6XenXQ:H[BCkrb9ũS}Y>VN"[_šN: Uܹ3ߏ/S$M@4eW~/@k֒%e@[JD:6mڄƍXjݻwW2m t"ʯ%ew6Lz]^x_ؼ\YZ;v 6m¦MgəɓJWBDZ"߼)[9~mطx9BZn#""a,'_L9?hQ^wǁ.mOJ޽͛Y@Hue!"ʫ…D8%mW(@n@IψyTGNIDS\#VO?@Ǝ.ZV""wBBD$[@n71c>}!6Ŋ\""Ď.:1 DDyeꂕ ][' d+ 9OHuP!9= YS/B*AD_ yH4T- D_>>@Z?ye %űu3R"/__yyvxzd t)Ф pcj$"rw :EDeB֭~_N`ǎ?'i[@(Yz@͚r\g9y[@(bR@@^{~""w4T- D_Joo??|1eB"/%`eհ!p(г'sW*S 4T- D_J .6oת_\=DDjBBD%I۶@Ӧ@K/ׯ+]@HuA k۷5j˖ql/A-u< }͚O+]1AM$$X'%9S֌\7 OHuBDbҢoС[oə~]骈\TA3ݻw(`$ %EʈT]@LxCl u"/A+ (N8 2iBR?tHʈTGQi)DE7B|R_JWFD8<#IOg _`bA~ T&p`QAKooe((OO^ș3o*JWGD :NDjЩ~ƍΞ6 U ؼՉHxG"*&M땮J,‰0MysQ+#"RB'"^dw& !A\rEʈ ԫc)|ȹ@ %JP a k=@|<+WE ۷m9 2€SK> DE_}q"D8 * DD~ غ:vAd\E+$"c!U1T""wg0͚[;v!/PPl-9yR*H@HULM!!ADDfO? l /R@͚@Æn)]%i#F ((b[ll,bccuLhLD:AArXYdC=abDzzj^b۝;wF?@ThوR EM!"R7__ϵkr…dH"y{K/7d rc ุ8ԩSG3{d v*']F Wz# <(߸8tH^:S~tйw? YLf۶c` L- NGHHHlܸ.] 6 Rԩπ^do`2E2͜9B _}gϞ 60iߓO?$gz-a[g~0p~>w/p ɩΜTAd@YhĥoĉΟ?t BDТ5h %_V;?.[On~U>ÁPyd+̙5zOcNLD8 5똼|="ROHU@e9HgOyggekFٲիvx\@ʕSr` %~y1ouJW>fb_BDi ,)[ NKA\0<HJۊ3`@Ŋ 2*%ӤaC4.^Aemۀ;? @r>.X*H̑rU IIr09. $$/*T|G멩Ufr߈9UO=%<<(3~L.XDD .52d0l8 _W/˖€B }d@)QºU#Ki!DG9HIq'"3摪0ԩr-CFB[`5Nlr* #Gwݻѣbd^Νs'r{<#Ua!"ҿptx_^@ޕ#k˗8̡&ƍ;_ٷLݭ<=嘒 ewڶ>\b}xE"!U t""R6g@fcY.]3ked7ӧxdGFD109R0 ǷED9`!Ua { ͚ˁY[@LkY^>V11tgnX弿/{rJceh1eٲE+wOSҠUɳ-" <#U,XDDgs(UK^fJ[ 3ϦS  }=+W`[7o\VSd+k" q'3gʩzDzLN""ZRN[y[3Ϝe9@ʔ#5UNժɖ~{O 9| LbJ֕QQ % *'K3r_sl)MN~[.h<1枞.Y4CI"94k&ǮT(?r%R%GHDDj֤ se p.ZvocFUcH9ۗiÇCE,YRDFP!ǹ8q{c!UiBO\"""W?^3{}&ǭT%$Oݽ.]2?zuZҪ&8鍉 ֭[Q\99RTo_ԑիW+]GxlԋFx|H@/'޽{`uzۖ vM-yuQ/Q7+'8z(T@˸]ݻga#mQ18իWj=44B\rEMyٷ/P~>hǴ cGW'pC7f0o7 xx.""""r O #???<|j2LN:&OZs7?O?ysZzب: bqPݬ^ (]zԢAqiyVNKzبz#::Z24 "##}v$%%Y D߷o "##m>UVXr%ʗ/m+ )'99hժҥhA[RA8p̙3+GDD $$wVB"""""e ի^z o_J*aٲep.]tyDDDDDa `ܸqXr%nݺڵkcʔ)h޼ҥ)\0@JJ F0~زeeiޡC0tPDDD 00ʕC.]pY}n Bpp0z7n|%KFC*U0o<ݹs B%f͚ȑ#}z2uTFԮ]>eš}F@@jժeqsΡk׮(S PzuL>>AbΜ9b⭷F؇.]$)"{'-Z$' СC~<6/ (_h֬0bV)},9"D:u,ƍ'|}}E6mKQ {MRR0 aÆbڴibŢC4k9ylDaA̚5+cۃDJDtti޽{s?{={6d ._m˖-`0EelKNNŋ۷x=zB ۷ogl[v0 bÆ QhQѽ{wGҥh޼hڴUqDQT)ѩSqS (N:ewh4f.yl/%%E\~]!ġC`@>111",,L$%%el[x0W7{MJJػwc'M$Fغuk6cQ؛o)ݻw-h4ZEQNQn݌%K]tگjժE;a4?`޽{`Vֹsgj"%%oEv!ĉ'l[`0B!ݻ'ӭqѣG (_FBW)(y,=z~)))PBby{ӱ`0yelq<QѣGQJ~rׯx+WFݺuWEM:uXWNF}l>qKOOǰa0p@ԬY~elݺ ƥKPZ5pxW2F(iӦB_~8v._kb…>|8xlTDcqq>>V}}}3'?0tPDGGW^̿܎m}}}-UNU ͛0aƏbŊ܇GIIIHNNƐ!C0{l@C|'4iʗ/&MSN(V[L:J+c"J^ҴiӰm6,X cx 9ۃ2~:ڶmEb0 ̿_{RRRl>,UN`0;v,1tlQZ Mu놏?{Eظښ5k0h ;w.: -- FBll,ݨ"13[v-ƍ`РA8`),44463ӶҥK$ILLD֭~Jʸ1(V2MKK=55űqٹsh" 6 p… uBLdɒK(<6 Z`moǑ#GxlTDcaΝݾm>+W 6T2KKK۷VSe|Iƶdls@q֭mk׮FQ|LwoOnܸ!Q|yqFq !9" ѣX-^*QBv턯8{:OOOwW֚駟5"csIQxqQvm|0 +W1t *U~6m(V~h4^zI,^XKF1}tD D…ŤI2VB gΜq"[(h4.]狗^zIFogcz;w^^^dɒ,(k̛7OL2E 2D /)S)SD!"..N(pB1vX'bbbQXnݻL2S̘1!"<6>#GK~~~⩧ дiSa4ɓu"00P+VLK6wŢzWT\Y̝;~o!!!"00P4kL9}IӦMEڵޣGĤIDxxUTqmۊҥK QZ51}tf/_>Ϙ .dؽ{hԨ%KÆ ]r;69#9yl Jw#"""""ADDDDD2 DDDDD2 DDDDD2 DDDDD2 DDDDD2 DDDDD2 DDDDD2 DDDDD2 DDDDD2 DD*ԣGT\Y2rdFozAm۶oEPPnݺt)DD@H֯_шoF;v찺lٲhԨ+J̑``P }>3?˖-رcmqF ))@Hĉk.Km۶(W{=K!"BDd YO޽^^^ؽ{}/_˗Ѹqcթ6ٳQjU4lVBXXӱaԐIII8q"vܩt)4h,XdK!"BDpw^!K/Yݷk. DGGTիWK.zjZªU\X]΄y_ЩS'ܻw_~_(; D[5‘#GÌmwFDDbbbo>m%KgEɒ%燈,Zq111Z|Io/_u޽;\B`֬YY&|}}W^y=cر#v܉z*UnGO? -[ӧOǢE`43j*S Μ9-[h4h4e˖ϓ^{ !!! DN{cܾ}>oߎ˗/k׮ҥ mۆׯ[ @-PxqB 4hmt0 x3~/ӦM -ZΝCLL .޽{g<5k???(Q{Ƶk,4=Dž ЦM*Teʔ 8v5k@cݺuVTRYͮDDJa!"jԨRSSmwFÆ ѠAܾ}'NȸoϞ=V-mPƎ>aaa}b ===c?ӧOk׮hݺ5f͚ EUq݅`)bNF2&bFLeҌI9P ) !Pd]s$h(М̲!UbpGwWh3 sc=qܹ ˱o>Xp!*++a0g!55mmm֭[ql۶HI$<6WVV{EXX֬Y\>HTns>prCBVBf~qclhh3cߟ߿1իWL&c[l\cppPt+V0Z_rr!(äR)e1ŤR);}4dl޽|lÆ LR 8f6u?Sq3L|lܹL"Ǐ󱾾>,֭[T*e|b0B$ _ZfϢqm۶1'''_ꌵ~z`ܵkטB`|,))-^XTvs6L"ӧO{__5ֆ D"a('oooh"fZ#GqL׋QPP.]\\\T*e7~z7D"a/_ !8̀BfPxyy{={ K"##;---=K.X,Xt)Μ9ï>*Zc4j8t8Cbb", 磡n.f^^^XlFߏz?J? ;S0c3a˖-XTTqֵܹX,jkk/qIƨ1`xx9 / 8>q, ^|E899Juuuk+ T*xxx-uwwwAcŋo9BJ4!h^f{ύ@qhį􄏏|$={~-?֭[Ǘ0ϟ"??? P(2Ν;R)*g+6y0} fnR Յ.(Jrѧ2瘘$$$ ++ HHH@yy9VĺqBBBDj51wwwxxxb;ww~~:Bno!Z-jkk?E!<22܌9swtt 66 .oy555(,,ݟ`4h`4!ɐȗL&ng϶̙ ?}}}Run=////1g}*z!#q®]pC㨭E}}={9;hiipqqt7drx{{BT!dFhjjBss3v \.GCCћkjjpuϏ׋qwwG\\F#`4l2eFSSZ`?NQZdf͚M&V+JJJ)ֆ,8qK,T{"""^ <0Lxgn3 c ٶvM9{,D3)2]h !dFh4^ 3|Aa``@p.ؙ˗/6JJJBOOJJJ*X~8wYҥKvXv-V+zАQԄV>vEOrssÕ+W&x~a+++͛7' 2ќmc억gɒ%144?ttt >>~Lɓ'B @!3/^cǎA.#<<\p>22ǎDA&!..Cnn.4 F5k?vuJݻqDGG#??HOOJ`GLL RRRzj(**jҟkٳg#&&zjwq)䠺_5,}=zzz؈5kج#jp"&sYYBCC`ڵP(x= Q\\jݴ}gggԩSFaa!222n:( =x2*ذN!Ӎ OՂ8h4Gy;p lPZZ_~6quuE|||xSRRPUUk׮W_EYYz)466nNj f3{!dqڑH!K/r\z!uvvѣG6o%,, +WDnntwBx4B!A PUUK:J6mr؏BΎPWWnOwW!Df@!6+V@Veee8</Inǜ !俄K!8| Hh`0f1gB/B!BB!BB!04!B!8 @!B!CB!BB!04!B!8 @!B!CB!BB!04!B!8e/4i;tIENDB`spacetelescope-synphot_refactor-c682dc1/docs/synphot/observation.rst000066400000000000000000000162151511632712700262470ustar00rootroot00000000000000.. _synphot_observation: Observation =========== :class:`~synphot.observation.Observation` is a special type of :ref:`source-spectrum-main`, where the source is convolved with a :ref:`bandpass-main`; i.e., a photon has already passed through the telescope optics. It is usually the end-point of a chain of spectral manipulation. Unlike a regular source spectrum, there is only one way to create an observation; i.e., by passing in source and bandpass objects into its constructor. Operations that do not make sense in the context of an observation (e.g., redshifting, tapering, addition, and subtraction) are disabled. An observation also understands detector binning. By default, the bins are assumed to be the same as the ``waveset`` of the input bandpass. However, this is not always true, particularly for "obsmode" in **stsynphot**. In those cases, the bandpass has an extra ``binset`` attribute (wavelength values for bin centers) that must be passed into an observation's constructor, as shown below:: >>> import stsynphot as stsyn # doctest: +SKIP >>> from astropy import units as u >>> from synphot import Observation, SourceSpectrum >>> from synphot.models import GaussianFlux1D >>> sp = SourceSpectrum(GaussianFlux1D, amplitude=1*u.Jy, ... mean=6000*u.AA, fwhm=100*u.AA) >>> bp = stsyn.band('acs,hrc,f555w') # doctest: +SKIP >>> obs = Observation(sp, bp, binset=bp.binset) # doctest: +SKIP .. testsetup:: >>> import os >>> import numpy as np >>> from astropy.utils.data import get_pkg_data_filename >>> from synphot import SpectralElement >>> filename = get_pkg_data_filename( ... os.path.join('data', 'hst_acs_hrc_f555w.fits'), ... package='synphot.tests') >>> bp = SpectralElement.from_file(filename) >>> binset = np.arange(1000, 11001, dtype=float) >>> obs = Observation(sp, bp, binset=binset) It has these main general components: * ``spectrum``, the input source spectrum * ``bandpass``, the input bandpass * ``model``, the underlying Astropy composite model * ``waveset``, the wavelength set for "native" sampling * ``waverange``, the range (inclusive) covered by ``waveset`` * ``meta``, metadata associated with the observation * ``warnings``, special metadata to highlight any warning It also has these components related to binning: * ``binset``, center of the wavelength bins * ``bin_edges``, edges of the wavelength bins * ``binflux``, binned flux computed by integrating the "native" flux over the width of each bin To **evaluate** its flux at a given wavelength (not binned), use its :py:meth:`~object.__call__` method as you would with any Astropy model (except that the method also takes additional keywords like ``flux_unit`` for flux conversion). To get binned flux values, use :meth:`~synphot.observation.Observation.sample_binned`, where you must provide the exact bin center(s):: >>> obs(6000.5) # Native (not binned) sampling; Angstrom # doctest: +FLOAT_CMP >>> obs.sample_binned([6000, 6001]) # Binned flux in given centers # doctest: +FLOAT_CMP To calculate **bin properties** such as covered wavelength or pixel ranges, you can use its :meth:`~synphot.observation.Observation.binned_waverange` and :meth:`~synphot.observation.Observation.binned_pixelrange` as follows:: >>> # Wavelength range covered by 10 pixels centered at 5500 Angstrom >>> obs.binned_waverange(5500, 10) # doctest: +FLOAT_CMP >>> # Pixel range covered by above wavelength range >>> obs.binned_pixelrange([5495.5, 5505.5]) 10 In addition, it has unique properties such as :ref:`synphot-formula-effstim` and :ref:`synphot-formula-effwave`, which can be calculated in a way that is consistent with ASTROLIB PYSYNPHOT:: >>> # Effective stimulus in FLAM >>> obs.effstim(flux_unit='flam') # doctest: +FLOAT_CMP >>> # Effective wavelength for binned sampling in FLAM >>> obs.effective_wavelength() # doctest: +FLOAT_CMP >>> # Repeat for "native" sampling >>> obs.effective_wavelength(binned=False) # doctest: +FLOAT_CMP :meth:`~synphot.observation.Observation.countrate` is probably the most often used method for an observation. It computes the **total counts** (a special case of effective stimulus) of a source spectrum, integrated over the bandpass with some binning. By default, it uses ``binset``, which should be defined such that one wavelength bin corresponds to one detector pixel:: >>> area = 45238.93416 # HST, in cm^2 >>> obs.countrate(area) # doctest: +FLOAT_CMP .. note:: If flux values contain NaNs, ``countrate()`` will raise ``SynphotError``. An observation can be converted to a **regular source spectrum** containing only the wavelength set and sampled flux (binned by default) by using its :meth:`~synphot.observation.Observation.as_spectrum` method. This is useful when you wish to access functionalities that are not directly available to an observation (e.g., tapering or saving to a file). To accurately represent binned flux visually, especially in a unit like count that is very sensitive to bin size, it is recommended to **plot** the data as a histogram using ``binset`` as mid-points, as shown below: .. plot:: :include-source: import os import matplotlib.pyplot as plt from astropy.utils.data import get_pkg_data_filename from synphot import Observation, SourceSpectrum, SpectralElement, units from synphot.models import BlackBodyNorm1D # Construct blackbody source sp = SourceSpectrum(BlackBodyNorm1D, temperature=5000) # Simulate an instrument bandpass with custom binning bp = SpectralElement.from_file(get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests')) binset = range(1000, 11001) # Build the observation and get binned flux in count obs = Observation(sp, bp, binset=binset) area = 45238.93416 * units.AREA # HST binflux = obs.sample_binned(flux_unit='count', area=area) # Sample the "native" flux for comparison flux = obs(obs.binset, flux_unit='count', area=area) # Plot with zoom to see native vs binned plt.plot(obs.binset, flux, 'bx-', label='native') plt.plot(obs.binset, binflux, 'g-', drawstyle='steps-mid', label='binned') plt.xlim(5342, 5372) plt.ylim(5.598, 5.62) plt.xlabel('Wavelength (Angstrom)') plt.ylabel('Flux (count)') plt.title('bb(5000) * acs,hrc,f555w') plt.legend(loc='lower right', numpoints=1) .. _synphot-obs-specutils: specutils --------- A `specutils.Spectrum1D` object can be passed directly into `~synphot.observation.Observation` as a source spectrum. For example: .. doctest-requires:: specutils<2 >>> from specutils import Spectrum1D >>> spec = Spectrum1D(spectral_axis=[499, 500, 600, 601]*u.nm, ... flux=[0, 0.1, 0.8, 0]*u.nJy) >>> obs = Observation(spec, bp, binset=binset) >>> obs.effstim(u.ABmag) # doctest: +FLOAT_CMP spacetelescope-synphot_refactor-c682dc1/docs/synphot/overview.rst000066400000000000000000000675031511632712700255700ustar00rootroot00000000000000.. _synphot_overview: Overview ======== There are two basic kinds of spectra in **synphot**, those with and without flux units. The former is used to construct :ref:`source-spectrum-main` and :ref:`synphot_observation`, while the latter for :ref:`bandpass-main`, :ref:`extinction curve `, and :ref:`synphot_thermal`. In the center of them all are :ref:`Astropy models `, which are used to represent the data, to create composite spectra, and to evaluate the results. For simplicity and to be consistent with ASTROLIB PYSYNPHOT, a spectrum object stores its wavelength internally in Angstrom. A source spectrum stores flux in PHOTLAM, while a unitless spectrum stores throughput as :ref:`dimensionless_unscaled `. Despite this, most of the functionalities in **synphot** are unit-aware; i.e., you can pass in :ref:`astropy:quantity` and specify the desired output units via optional keywords (see relevant :ref:`API documentation `). File I/O in **synphot** is handled by its `~synphot.specio` module, which uses :ref:`Astropy FITS ` and :ref:`Astropy ASCII `, but read (both FITS and ASCII) and write (FITS only) spectrum data in a way that is backward-compatible with ASTROLIB PYSYNPHOT. In most cases, this module does not need to be accessed directly, but rather via ``from_file()`` and ``to_fits()`` methods of a spectrum object. .. _synphot_models_overview: **synphot** and Astropy Models ------------------------------ .. note:: The interactions between **synphot** and ``astropy.models`` might change in the future as the latter support more features, such as ``Quantity``. When that happens, the existing API will issue deprecation warnings, where appropriate. **synphot** takes advantage of the analytical nature of :ref:`Astropy models `, except for `~astropy.modeling.tabular` data, which are interpolated using Scipy. This is very different from ASTROLIB PYSYNPHOT that relied heavily on interpolation of internal lookup tables. But similar to ASTROLIB PYSYNPHOT, each individual model that goes into a :ref:`compound (composite) model ` is stored separately and the final result is only calculated on evaluation. For simplicity, only 1D models and single model set (``n_models=1``) are supported. At the time that this package was developed, some features needed for spectra manipulation were not (yet) available in Astropy models (e.g., `~astropy.units.Quantity` parameters and ``sampleset`` that provides an array of values that best samples the model). In addition, some models (e.g., `~synphot.models.Empirical1D`) are simply too specialized for our use case to be in Astropy. For those reasons, `~synphot.models` exists to bridge that gap. For instance, a `synphot.models.Gaussian1D` is just like `astropy.modeling.functional_models.Gaussian1D` but with the extra ``sampleset``. Still, some models can be used straight from Astropy (e.g., `~astropy.modeling.powerlaws.PowerLaw1D` where ``sampleset`` is infinite, thus does not apply). The following table lists the models allowed to be used for spectrum construction (with flux unit or unitless), where they reside, and special notes: +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |Model |Package |Notes | +=========================================================+===========+==============================================================+ |`~synphot.models.BlackBody1D` |**synphot**|Calculate flux in PHOTLAM per | | | |steradian. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.BlackBodyNorm1D` |**synphot**|Calculate flux in PHOTLAM. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.Box1D` |**synphot**|Like `astropy.modeling.functional_models.Box1D` | | | |but with ``sampleset``. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~astropy.modeling.powerlaws.BrokenPowerLaw1D` |Astropy ||note_flux_conv_incorrect| | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~astropy.modeling.functional_models.Const1D` |Astropy ||note_flux_conv_incorrect| | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.ConstFlux1D` |**synphot**|Constant flux in a given unit might | | | |not be constant in other flux units. | | | |This handles flux unit conversion | | | |properly. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.Empirical1D` |**synphot**|Like `~astropy.modeling.tabular.Tabular1D` | | | |but with extra features specific to | | | |spectrum (e.g., option to keep negative flux) and | | | |different default values. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~astropy.modeling.powerlaws.ExponentialCutoffPowerLaw1D`|Astropy ||note_flux_conv_incorrect| | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.Gaussian1D` |**synphot**|Like `astropy.modeling.functional_models.Gaussian1D` | | | |but with ``sampleset``. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.GaussianAbsorption1D` |**synphot**|This is ``1 - Gaussian1D`` model. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.GaussianFlux1D` |**synphot**|Like `~synphot.models.Gaussian1D` but allows | | | |backward-compatible parameters like total flux and | | | |FWHM. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~astropy.modeling.powerlaws.LogParabola1D` |Astropy ||note_flux_conv_incorrect| | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.Lorentz1D` |**synphot**|Like `astropy.modeling.functional_models.Lorentz1D` | | | |but with ``sampleset`` and ``bounding_box``. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.RickerWavelet1D` |**synphot**|Like `astropy.modeling.functional_models.RickerWavelet1D` | | | |but with ``sampleset`` and ``bounding_box``. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~astropy.modeling.powerlaws.PowerLaw1D` |Astropy ||note_flux_conv_incorrect| | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.PowerLawFlux1D` |**synphot**|Like `~astropy.modeling.powerlaws.PowerLaw1D` | | | |but handles flux unit conversion properly by | | | |evaluating in user flux unit instead of internal | | | |unit of PHOTLAM. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ |`~synphot.models.Trapezoid1D` |**synphot**|Like `astropy.modeling.functional_models.Trapezoid1D` | | | |but with ``sampleset``. | +---------------------------------------------------------+-----------+--------------------------------------------------------------+ .. |note_flux_conv_incorrect| replace:: Flux handling might be incorrect unless amplitude is in PHOTLAM when creating a source spectrum using this model. .. _synphot-spec-math-op: Spectrum Arithmetic ------------------- When spectrum objects are added to, subtracted from, multiplied with, or divided by each other, the resultant spectrum contains a compound model derived from the operands. If the operands themselves also contain compound models, then the final compound model is a compound of the input compound models. Operations that do not make sense (e.g., multiplying two source spectra or adding a bandpass to a source spectrum) are prohibited. The type of output spectrum depends on the operation. In the table below, unitless spectrum can be a bandpass or extinction curve: ================= ============== ================= ================= =========== Operand 1 Operation Operand 2 Result Commutative ================= ============== ================= ================= =========== Source Spectrum :math:`+` Source Spectrum Source Spectrum Yes Source Spectrum :math:`-` Source Spectrum Source Spectrum No Source Spectrum :math:`\times` Unitless Spectrum Source Spectrum Yes Source Spectrum :math:`\times` Scalar number Source Spectrum Yes Source Spectrum :math:`\times` Unitless Quantity Source Spectrum No Source Spectrum :math:`/` Source Spectrum Unitless Spectrum No Source Spectrum :math:`/` Unitless Spectrum Source Spectrum No Source Spectrum :math:`/` Scalar number Source Spectrum No Source Spectrum :math:`/` Unitless Quantity Source Spectrum No Unitless Spectrum :math:`\times` Unitless Spectrum Unitless Spectrum Yes Unitless Spectrum :math:`\times` Scalar number Unitless Spectrum Yes Unitless Spectrum :math:`\times` Unitless Quantity Unitless Spectrum No Unitless Spectrum :math:`/` Unitless Spectrum Unitless Spectrum No Unitless Spectrum :math:`/` Scalar number Unitless Spectrum No Unitless Spectrum :math:`/` Unitless Quantity Unitless Spectrum No ================= ============== ================= ================= =========== .. _synphot-quick-guide: Quick Guide ----------- The tables below summarize some main functionality of **synphot**. The variables, where appropriate, can be numbers (assumed to be in certain units) or Quantity. These are only for quick reference. Detailed explanations are available in their respective sections in the other parts of this document. .. _synphot-quick-create-bandpass: Create Bandpass ^^^^^^^^^^^^^^^ +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Load from file. |bp = SpectralElement.from_file(filename) | +---------------------------+------------------------------------------------+ |Load pre-defined bandpass. |bp = SpectralElement.from_filter(filtername) | +---------------------------+------------------------------------------------+ |Create from wavelength and |bp = SpectralElement(Empirical1D, | |throughput arrays. |points=wavelength, lookup_table=throughput) | +---------------------------+------------------------------------------------+ |Box centered at ``mu`` with|bp = SpectralElement(Box1D, x_0=mu, width=width)| |given width. | | +---------------------------+------------------------------------------------+ |Create from tapering |bp2 = bp.taper() | |existing bandpass. | | +---------------------------+------------------------------------------------+ .. _synphot-quick-bandpass-params: Calculate Bandpass Parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Average wavelength and |bp.avgwave() | |associated throughput. | | | |bp.tlambda() | +---------------------------+------------------------------------------------+ |Peak throughput and |bp.tpeak() | |associated wavelength. | | | |bp.wpeak() | +---------------------------+------------------------------------------------+ |Dimensionless efficiency. |bp.efficiency() | +---------------------------+------------------------------------------------+ |Equivalent width. |bp.equivwidth() | +---------------------------+------------------------------------------------+ |Rectangular width. |bp.rectwidth() | +---------------------------+------------------------------------------------+ |RMS band width as in |bp.rmswidth() | ||koornneef1986page836|. | | +---------------------------+------------------------------------------------+ |RMS band width as in |bp.photbw() | |IRAF SYNPHOT. | | +---------------------------+------------------------------------------------+ |FWHM of equiv. Gaussian. |bp.fwhm() | +---------------------------+------------------------------------------------+ |Pivot wavelength. |bp.pivot() | +---------------------------+------------------------------------------------+ |Mean log wavelength. |bp.barlam() | +---------------------------+------------------------------------------------+ |Unit response; |uresp1cts|,|bp.unit_response(area) | |for given telescope area. | | +---------------------------+------------------------------------------------+ |Equiv. monochromatic flux. |bp.emflx(area) | +---------------------------+------------------------------------------------+ |Check if bandpass fully |bp.check_overlap(sp) | |overlaps a source spectrum.| | +---------------------------+------------------------------------------------+ .. |koornneef1986page836| replace:: :ref:`Koornneef et al. 1986 ` (page 836) .. |uresp1cts| replace:: flux that produces 1 count/s in the bandpass .. _synphot-quick-create-unitless: Create Other Unitless Spectrum ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Reddening law from |redlaw = ReddeningLaw.from_extinction_model( | |extinction model. |rlloads||extinction_model_name) | +---------------------------+------------------------------------------------+ |Extinction curve from |extcurve = redlaw.extinction_curve(ebv) | |reddening law at given | | |:math:`E(B-V)` | | +---------------------------+------------------------------------------------+ |Extinction for Lyman-alpha |extcurve = etau_madau(wave, z) | +---------------------------+------------------------------------------------+ |Bandpass with thermal |thbp = ThermalSpectralElement(modelclass, | |properties (from model). |temperature, \*\*kwargs) | +---------------------------+------------------------------------------------+ |Bandpass with thermal |thbp = ThermalSpectralElement.from_file( | |properties (from file). |filename) | +---------------------------+------------------------------------------------+ .. |rlloads| replace:: Creation using Astropy model and from file also possible but not shown. .. _synphot-quick-create-source: Create Source Spectrum ^^^^^^^^^^^^^^^^^^^^^^ +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Load from file. |sp = SourceSpectrum.from_file(filename) | +---------------------------+------------------------------------------------+ |Load Vega from file. |sp = SourceSpectrum.from_vega() | +---------------------------+------------------------------------------------+ |Create from wavelength and |sp = SourceSpectrum(Empirical1D, | |flux arrays. |points=wavelength, lookup_table=flux) | +---------------------------+------------------------------------------------+ |Blackbody with temperature,|sp = SourceSpectrum(BlackBodyNorm1D, | |``teff``, and |bbnormflux|.|temperature=teff) | +---------------------------+------------------------------------------------+ |Flat spectrum with constant|sp = SourceSpectrum(ConstFlux1D, amplitude=flux)| |flux. | | +---------------------------+------------------------------------------------+ |Powerlaw spectrum with flux|sp = SourceSpectrum(PowerLawFlux1D, | |of 1 in given unit at |amplitude=1*unit, x_0=x, alpha=a) | |``x`` and power of ``-a``. | | +---------------------------+------------------------------------------------+ |Gaussian emission line |sp = SourceSpectrum(GaussianFlux1D, mean=mu, | |centered on ``mu`` with |fwhm=fwhm, total_flux=total_flux) | |given FWHM and total flux. | | +---------------------------+------------------------------------------------+ |Thermal source spectrum |sp = thbp.thermal_source() | |from thermal bandpass. | | +---------------------------+------------------------------------------------+ .. |bbnormflux| replace:: flux normalized to a star of solar radius at a distance of 1 kpc .. _synphot-quick-modify-source: Modify Source Spectrum ^^^^^^^^^^^^^^^^^^^^^^ New source spectrum is created as a result unless stated otherwise. +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Taper flux to zero on ends.|sp2 = sp.taper() | +---------------------------+------------------------------------------------+ |Normalize to given value |sp2 = sp.normalize(value, band=bp) | |over given bandpass. | | |Count and VEGAMAG unit |sp2 = sp.normalize(value_count, band=bp, | |requires extra inputs. |area=area) | | | | | |sp2 = sp.normalize(value_vegamag, band=bp, | | |vegaspec=SourceSpectrum.from_vega()) | +---------------------------+------------------------------------------------+ |Apply extinction curve. |sp2 = sp * extcurve | +---------------------------+------------------------------------------------+ |Apply redshift (models |sp.z = z | |modified in-place). | | | |sp.z_type = ... | +---------------------------+------------------------------------------------+ |Apply redshift (new source |sp2 = SourceSpectrum(sp.model, z=z, z_type=...) | |spectrum). | | | |sp = SourceSpectrum(modelclass, z=z, z_type=...,| | |\*\*kwargs) | +---------------------------+------------------------------------------------+ .. _synphot-quick-obs: Create Observation and Calculate ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Observation has binned and unbinned components. Most methods accept an optional ``binned`` keyword to indicate which component you want to calculate for. Only the default binning option is listed below. +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Observe a source spectrum |obs = Observation(sp, bp) | |through given bandpass. | | +---------------------------+------------------------------------------------+ |Sample observed flux. |flux = obs(wavelength) # Unbinned | | | | | |flux = obs.sample_binned(wavelength) | +---------------------------+------------------------------------------------+ |Effective wavelength. |obs.effective_wavelength() # Binned | +---------------------------+------------------------------------------------+ |Effective stimulus in given|obs.effstim(flux_unit=unit) # Unbinned | |unit. | | +---------------------------+------------------------------------------------+ |Count rate for given area. |obs.countrate(area) # Binned | +---------------------------+------------------------------------------------+ |Convert into simple source |sp = obs.as_spectrum() # Binned | |spectrum. | | +---------------------------+------------------------------------------------+ .. _synphot-quick-misc: Miscellaneous ^^^^^^^^^^^^^ +---------------------------+------------------------------------------------+ |Description |Command | +===========================+================================================+ |Generate wavelength array. |wavelength = generate_wavelengths() | +---------------------------+------------------------------------------------+ |Quick-look plot. |obj.plot() # Any spectrum object | +---------------------------+------------------------------------------------+ |Write to FITS table. |bp.to_fits(filename); redlaw.to_fits(); | | |sp.to_fits(filename) | +---------------------------+------------------------------------------------+ .. _synphot-fits-format-overview: FITS Table Format ----------------- The FITS table format supported here is the same as that in ASTROLIB PYSYNPHOT for backward compatibility with existing data files. Data is extracted from Extension 1, where the first column contains wavelength values, and the second flux (for source spectrum) or throughput (for bandpass). The extension header must contain the following keywords (unless you overwrite them with non-default values in :func:`~synphot.specio.read_fits_spec`): * ``TTYPE1`` set to "WAVELENGTH". * ``TTYPE2`` set to "FLUX" (for source spectrum) or "THROUGHPUT" (for bandpass). These were required in ASTROLIB PYSYNPHOT, as well as this package: * ``TUNIT1`` set to :ref:`supported wavelength unit name `. * ``TUNIT2`` set to :ref:`supported flux unit name ` (source spectrum only). For writing out FITS table, many options can be set to non-default as acceptable by :func:`~synphot.specio.write_fits_spec`. .. _synphot-ascii-format-overview: ASCII Table Format ------------------ The ASCII table format supported here is the same as that in ASTROLIB PYSYNPHOT for backward compatibility with existing data files. Wavelength and flux/throughput values must be in the first and the second columns, respectively. By default, wavelength is assumed to be in Angstrom; For source spectrum, flux is assumed to be in FLAM. All values will be read in as double-precision floating points. The file may contain blank or comment lines (any lines starting with ``"#"``), which are ignored. By default, :ref:`Astropy's ASCII reader ` will attempt to guess the format of your file (e.g., space- or tab-delimited). If guessing fails, you can pass in additional keywords to the reader, as well as specifying non-default wavelength and flux units, via :func:`synphot.specio.read_ascii_spec`. .. _synphot-accuracy: Result Accuracy --------------- This is indirectly discussed in a similar section within **stsynphot** documentation as it is heavily built upon **synphot** machinery. spacetelescope-synphot_refactor-c682dc1/docs/synphot/spectrum.rst000066400000000000000000000445361511632712700255650ustar00rootroot00000000000000.. _source-spectrum-main: Source Spectrum =============== A source spectrum is used to represent astronomical sources, such as stars and galaxies. An :ref:`synphot_observation` is a special case of a source spectrum that is convolved with a :ref:`bandpass-main`. A source spectrum can be constructed by one of the following methods: * Load a supported :ref:`FITS file ` or :ref:`ASCII file ` with :meth:`~synphot.spectrum.SourceSpectrum.from_file`. * Use the pre-defined Vega spectrum, which is also used to define VEGAMAG, with :meth:`~synphot.spectrum.SourceSpectrum.from_vega`. * Pass a :ref:`supported model ` along with the keywords needed to define it into a :class:`~synphot.spectrum.SourceSpectrum` object. * Create a thermal source spectrum with :meth:`~synphot.thermal.ThermalSpectralElement.thermal_source`. * Build a composite source using :ref:`synphot-spec-math-op`. (Also see example in :ref:`synphot_getting_started`.) * Build an empirical source using :ref:`synphot-source-specutils`. It has these main components: * ``z``, the redshift applied, if any * ``z_type`` that indicates whether redshift also conserves flux or not * ``model``, the underlying Astropy model * ``waveset``, the wavelength set for optimal sampling * ``waverange``, the range (inclusive) covered by ``waveset`` * ``meta``, metadata associated with the spectrum * ``warnings``, special metadata to highlight any warning To **evaluate** its flux at a given wavelength, use its :py:meth:`~object.__call__` method as you would with any Astropy model (except that the method also takes additional keywords like ``flux_unit`` for flux conversion):: >>> from synphot import SourceSpectrum, units >>> from synphot.models import ConstFlux1D >>> sp = SourceSpectrum(ConstFlux1D, amplitude=1) # PHOTLAM >>> wave = [1000, 10000] # Angstrom >>> sp(wave) # doctest: +FLOAT_CMP >>> sp(wave, flux_unit=units.FNU) # doctest: +FLOAT_CMP >>> area = 45238.93416 * units.AREA # HST >>> sp(wave, flux_unit=units.OBMAG, area=area) # doctest: +FLOAT_CMP .. _synphot_reddening: To apply (or remove) the effects of interstellar **reddening** on a source spectrum, use :meth:`~synphot.reddening.ReddeningLaw.from_extinction_model` to provide a reddening model name (see table below; not to be confused with Astropy model) and then :meth:`~synphot.reddening.ReddeningLaw.extinction_curve` to create the extinction curve with a given :math:`E(B-V)` value (negative value effectively de-reddens the spectrum), and then multiply it to the source:: >>> import matplotlib.pyplot as plt # doctest: +SKIP >>> from synphot import SourceSpectrum, ReddeningLaw >>> from synphot.models import BlackBodyNorm1D >>> em = SourceSpectrum(BlackBodyNorm1D, temperature=5000) >>> ext = ReddeningLaw.from_extinction_model( ... 'lmcavg').extinction_curve(0.1) # doctest: +REMOTE_DATA >>> sp = em * ext # doctest: +REMOTE_DATA >>> wave = em.waveset >>> plt.plot(wave, em(wave), 'b', wave, sp(wave), 'r') # doctest: +SKIP >>> plt.xlim(1000, 30000) # doctest: +SKIP >>> plt.xlabel('Wavelength (Angstrom)') # doctest: +SKIP >>> plt.ylabel('Flux (PHOTLAM)') # doctest: +SKIP >>> plt.legend(['E(B-V)=0', 'E(B-V)=0.1'], loc='upper right') # doctest: +SKIP .. image:: images/bb5000_lmcavg.png :width: 600px :alt: Apply extinction to blackbody. +--------+---------------------------+------------+ |Name |Description |Reference | +========+===========================+============+ |mwavg |Milky Way Diffuse, R(V)=3.1||mw_ext_ref|| +--------+---------------------------+ | |mwdense |Milky Way Dense, R(V)=5.0 | | +--------+---------------------------+ | |mwrv21 |Milky Way CCM, R(V)=2.1 | | +--------+---------------------------+ | |mwrv40 |Milky Way CCM, R(V)=4.0 | | +--------+---------------------------+------------+ |lmc30dor|LMC Supershell, R(V)=2.76 ||mc_ext_ref|| +--------+---------------------------+ | |lmcavg |LMC Average, R(V)=3.41 | | +--------+---------------------------+ | |smcbar |SMC Bar, R(V)=2.74 | | +--------+---------------------------+------------+ |xgalsb |Starburst, R(V)=4.0 ||xg_ext_ref|| | |(attenuation law) | | +--------+---------------------------+------------+ .. |mw_ext_ref| replace:: :ref:`Cardelli et al. (1989) ` .. |mc_ext_ref| replace:: :ref:`Gordon et al. (2003) ` .. |xg_ext_ref| replace:: :ref:`Calzetti et al. (2000) ` For extinction due to Lyman-alpha forest, see :ref:`tutorial_lyman_alpha` tutorial. To use a model from the :ref:`dust-extinction ` package, see :ref:`tutorial_dust_extinction`. You can **redshift** a source spectrum in several ways (shown in example below), either by setting its ``z`` attribute or passing in a ``z`` keyword during initialization. To blueshift, you may use the same attribute/keyword but set its *value* to :math:`\frac{1}{1 + z} - 1` instead. By default, only the wavelength values are shifted, not the flux (i.e., total flux is not preserved): .. plot:: :include-source: import matplotlib.pyplot as plt from synphot import SourceSpectrum from synphot.models import BlackBodyNorm1D fig, ax = plt.subplots(3, sharex=True) # Create a source at rest wavelength and sample it because it will # be modified in-place below sp_rest = SourceSpectrum(BlackBodyNorm1D, temperature=5000) wave = range(2500, 25000, 10) flux = sp_rest(wave) # Redshift the original source as a new spectrum sp_z1 = SourceSpectrum(sp_rest.model, z=0.1) ax[0].plot(wave, flux, 'b--', wave, sp_z1(wave), 'r') # Redshift the original source in-place sp_rest.z = 0.1 ax[1].plot(wave, flux, 'b--', wave, sp_rest(wave), 'r') # Create a redshifted source from scratch sp_z2 = SourceSpectrum(BlackBodyNorm1D, temperature=5000, z=0.1) ax[2].plot(wave, flux, 'b--', wave, sp_z2(wave), 'r') # Extra plot commands ax[2].set_xlim(2500, 25000) ax[2].set_xlabel('Wavelength (Angstrom)') ax[1].set_ylabel('Flux (PHOTLAM)') ax[0].legend(['z=0', 'z=0.1'], loc='upper right') You can also **redshift while preserving flux** by setting ``z_type`` to ``'conserve_flux'``: .. plot:: :include-source: import matplotlib.pyplot as plt from synphot import SourceSpectrum from synphot.models import BlackBodyNorm1D # Create a source at rest wavelength sp_rest = SourceSpectrum(BlackBodyNorm1D, temperature=5000) # Redshift the original source and conserve flux sp_z1 = SourceSpectrum(sp_rest.model, z=0.1, z_type='conserve_flux') # Plot them wave = range(2500, 25000, 10) plt.plot(wave, sp_rest(wave), 'b--', wave, sp_z1(wave), 'r') plt.xlim(2500, 25000) plt.xlabel('Wavelength (Angstrom)') plt.ylabel('Flux (PHOTLAM)') plt.legend(['z=0', 'z=0.1'], loc='upper right') A source spectrum can also be **normalized** to a given flux value in a given bandpass using its :meth:`~synphot.spectrum.BaseSourceSpectrum.normalize` method. The resultant spectrum is basically the source multiplied with a factor necessary to achieve the desired normalization:: >>> import matplotlib.pyplot as plt # doctest: +SKIP >>> from synphot import SourceSpectrum, SpectralElement, units >>> from synphot.models import BlackBodyNorm1D >>> sp = SourceSpectrum(BlackBodyNorm1D, temperature=5000) >>> bp = SpectralElement.from_filter('johnson_v') # doctest: +REMOTE_DATA >>> vega = SourceSpectrum.from_vega() # For unit conversion # doctest: +REMOTE_DATA >>> sp_norm = sp.normalize(17 * units.VEGAMAG, bp, vegaspec=vega) # doctest: +REMOTE_DATA >>> wave = sp.waveset >>> plt.plot(wave, sp(wave), 'b', wave, sp_norm(wave), 'r') # doctest: +SKIP >>> plt.xlim(1000, 30000) # doctest: +SKIP >>> plt.xlabel('Wavelength (Angstrom)') # doctest: +SKIP >>> plt.ylabel('Flux (PHOTLAM)') # doctest: +SKIP >>> plt.title(sp.meta['expr']) # doctest: +SKIP >>> plt.legend(['Original', 'Normalized'], loc='upper right') # doctest: +SKIP .. image:: images/bb5000_renorm.png :width: 600px :alt: Renormalize blackbody. **Integration** is done with the :meth:`~synphot.spectrum.BaseSpectrum.integrate` method. It can use trapezoid or analytical integration (if the latter is available). The type of integration being done can be controlled with software configuration or keyword. By default, trapezoid integration is done in internal units:: >>> from astropy import units as u >>> from synphot import SourceSpectrum, units, conf >>> from synphot.models import GaussianFlux1D >>> sp = SourceSpectrum(GaussianFlux1D, mean=6000*u.AA, fwhm=10*u.AA, ... total_flux=1*(u.erg/(u.cm**2 * u.s))) >>> sp.integrate() # doctest: +FLOAT_CMP >>> with conf.set_temp('default_integrator', 'analytical'): ... print(f'{repr(sp.integrate())}') # doctest: +FLOAT_CMP >>> sp.integrate(integration_type='analytical') # doctest: +FLOAT_CMP >>> sp.integrate(flux_unit=units.FLAM) # doctest: +FLOAT_CMP >>> sp.integrate(flux_unit=units.FLAM, integration_type='analytical') # doctest: +FLOAT_CMP .. _synphot-empirical-source: Arrays ------ Creating source spectrum from arrays is recommended when the input file is in a format that is not supported by **synphot**. You can read the file however you like using another package and store the wavelength and flux as arrays to be processed by **synphot** as an empirical model. The example below creates and plots a source from some given arrays. It also demonstrates that you can choose to keep negative flux values (however unrealistic), if desired: .. plot:: :include-source: from synphot import SourceSpectrum, units from synphot.models import Empirical1D wave = [1000, 2000, 3000, 4000, 5000] # Angstrom flux = [1e-17, -2.3e-18, 1.8e-17, 4.5e-17, 9e-18] * units.FLAM sp = SourceSpectrum( Empirical1D, points=wave, lookup_table=flux, keep_neg=True) sp.plot(flux_unit=units.FLAM) plt.axhline(0, color='k', ls=':') .. _synphot-planck-law: Blackbody Radiation ------------------- Blackbody radiation is defined by Planck's law (:ref:`Rybicki & Lightman 1979 `): .. math:: B_{\lambda}(T) = \frac{2 h c^{2} / \lambda^{5}}{\exp(h c / \lambda k T) - 1} where the unit of :math:`B_{\lambda}(T)` is :math:`erg \; s^{-1} cm^{-2} \mathring{A}^{-1} sr^{-1}` (i.e., FLAM per steradian). :class:`~synphot.models.BlackBodyNorm1D` generates a blackbody spectrum in PHOTLAM for a given temperature, normalized to a star of 1 solar radius at a distance of 1 kpc. This is to be consistent with ASTROLIB PYSYNPHOT. The example below creates and plots a blackbody source at 5777 K: .. plot:: :include-source: import matplotlib.pyplot as plt from synphot import SourceSpectrum from synphot.models import BlackBodyNorm1D sp = SourceSpectrum(BlackBodyNorm1D, temperature=5777) sp.plot(flux_unit='flam', title=sp.meta['expr']) plt.axvline(sp.model.lambda_max, ls=':') .. _synphot-source-from-file: File ---- A source spectrum can also be defined using a FITS or ASCII table containing columns of wavelength and flux. See :ref:`synphot-fits-format-overview` and :ref:`synphot-ascii-format-overview` for details on how to create such tables. The example below loads and plots a source spectrum from FITS table in the software test data directory: .. plot:: :include-source: import os from astropy.utils.data import get_pkg_data_filename from synphot import SourceSpectrum filename = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w_x_grw70d5824.fits'), package='synphot.tests') sp = SourceSpectrum.from_file(filename) sp.plot(left=4000, right=7000) .. _synphot-flat-spec: Flat ---- .. math:: f(x) = A A flat (uniform) spectrum has a constant flux value in the given flux unit, except the following, as per ASTROLIB PYSYNPHOT: * STMAG - Constant value in the unit of FLAM. * ABMAG - Constant value in the unit of FNU. These are currently unsupported: * count * OBMAG Note that flux that is constant in a given unit might not be constant in another (see example below). Such a model has no ``waveset`` defined (i.e., no clear wavelength constraints on where the feature of interest lies). Therefore, wavelength values must be explicitly provided for sampling and plotting. The example below creates and plots a flat source with the amplitude of 18 ABMAG and shows that it is not flat in STMAG: .. plot:: :include-source: import matplotlib.pyplot as plt from astropy import units as u from synphot import SourceSpectrum from synphot.models import ConstFlux1D sp = SourceSpectrum(ConstFlux1D, amplitude=18*u.ABmag) wave = range(10, 26000, 10) plt.plot(wave, sp(wave, flux_unit=u.ABmag), 'b', wave, sp(wave, flux_unit=u.STmag), 'r--') plt.xlim(10, 26000) plt.ylim(12, 22) plt.ylabel('Flux (mag)') plt.xlabel('Wavelength (Angstrom)') plt.title('Flat spectrum in ABMAG') plt.legend(['ABMAG', 'STMAG'], loc='lower right') .. _synphot-gaussian-abs: Gaussian Absorption ------------------- To create a Gaussian absorption feature, you can first create :ref:`synphot-gaussian` and then subtract it from a continuum (e.g., :ref:`synphot-flat-spec`): .. plot:: :include-source: from astropy import units as u from synphot import SourceSpectrum from synphot.models import GaussianFlux1D, ConstFlux1D em = SourceSpectrum(GaussianFlux1D, mean=6000, fwhm=10, total_flux=3.3e-12*u.erg/(u.cm**2 * u.s)) bg = SourceSpectrum(ConstFlux1D, amplitude=2) sp = bg - em sp.plot() .. _synphot-gaussian: Gaussian Emission ----------------- .. math:: f(x) = A \; e^{- \frac{\left(x - x_{0}\right)^{2}}{2 \; \sigma^{2}}} \sigma = \frac{\text{FWHM}}{2 \; \sqrt{2 \; \ln 2}} A = \frac{f_{\text{tot}}}{\sqrt{2 \; \pi} \; \sigma} where :math:`f_{\text{tot}}` is the desired total flux. :class:`~synphot.models.GaussianFlux1D` generates a Gaussian emission spectrum using input values (central wavelength, FWHM, and total flux) that are somewhat consistent with ASTROLIB PYSYNPHOT. The example below creates and plots a Gaussian source centered at 1.8 micron with FWHM of 200 nm and the given total flux. As stated in :ref:`synphot_overview`, conversion to internal units happen behind the scenes: .. plot:: :include-source: from astropy import units as u from synphot import SourceSpectrum from synphot.models import GaussianFlux1D sp = SourceSpectrum(GaussianFlux1D, mean=1.8*u.micron, fwhm=200*u.nm, total_flux=1e-26*u.W/(u.m**2)) sp.plot(title=sp.meta['expr']) .. _synphot-powerlaw: Powerlaw -------- .. math:: f(x) = A \; (x / x_{0})^{-\alpha} where *A* should be set to 1 if you want to be consistent with ASTROLIB PYSYNPHOT. :class:`~synphot.models.PowerLawFlux1D` generates a powerlaw source spectrum. Such a model has no ``waveset`` defined (i.e., no clear wavelength constraints on where the feature of interest lies). Therefore, wavelength values must be explicitly provided for sampling and plotting. The example below creates and plots a powerlaw source with a reference wavelength of 1 micron and an index of -2: .. plot:: :include-source: import matplotlib.pyplot as plt from astropy import units as u from synphot import SourceSpectrum from synphot.models import PowerLawFlux1D sp = SourceSpectrum(PowerLawFlux1D, amplitude=1, x_0=1*u.micron, alpha=2) wave = range(100, 100000, 50) * u.AA sp.plot(wavelengths=wave, xlog=True, ylog=True, bottom=0.1, top=1000) plt.axvline(sp.model.x_0.value, color='k', ls='--') # Ref wave plt.axhline(sp.model.amplitude.value, color='k', ls='--') # Ref flux .. _synphot-source-specutils: specutils --------- A source can be constructed from and written to `specutils.Spectrum1D` object. See :ref:`specutils documentation ` for more information on how to use `~specutils.Spectrum1D`. The example below writes a :ref:`synphot-gaussian` to a `~specutils.Spectrum1D` object in the flux unit of Jansky: .. doctest-requires:: specutils<2 >>> from astropy import units as u >>> from synphot import SourceSpectrum >>> from synphot.models import GaussianFlux1D >>> sp = SourceSpectrum(GaussianFlux1D, mean=1.8*u.micron, fwhm=200*u.nm, ... total_flux=1e-26*u.W/(u.m**2)) >>> spec = sp.to_spectrum1d(flux_unit=u.Jy) Meanwhile, this example reads in a source from a `~specutils.Spectrum1D` object: .. doctest-requires:: specutils<2 >>> from astropy import units as u >>> from specutils import Spectrum1D >>> from synphot import SourceSpectrum >>> spec = Spectrum1D(spectral_axis=[100, 300]*u.nm, flux=[0.1, 0.8]*u.nJy) >>> sp = SourceSpectrum.from_spectrum1d(spec) .. _synphot_thermal: Thermal ------- `~synphot.thermal.ThermalSpectralElement` handles a spectral element with thermal properties, which is important in infrared observations. Its :meth:`~synphot.thermal.ThermalSpectralElement.thermal_source` method produces a thermal (blackbody) source spectrum. This is usually not used directly, but rather as part of the calculations for thermal background for some instrument. See **stsynphot** documentation regarding "thermal background" for more details. .. _synphot-vega-spec: Vega ---- **synphot** uses built-in Vega spectrum for VEGAMAG calculations. It is loaded from ``synphot.conf.vega_file`` using :meth:`~synphot.spectrum.SourceSpectrum.from_vega`. The example below loads and plots the built-in Vega spectrum:: >>> from synphot import SourceSpectrum >>> sp = SourceSpectrum.from_vega() # doctest: +REMOTE_DATA >>> sp.plot(right=12000, flux_unit='flam', title=sp.meta['expr']) # doctest: +SKIP .. image:: images/vega_spec.png :width: 600px :alt: Vega spectrum spacetelescope-synphot_refactor-c682dc1/docs/synphot/tutorials.rst000066400000000000000000000235611511632712700257440ustar00rootroot00000000000000.. _synphot-tutorials: Tutorials ========= This page contains tutorials of specific **synphot** functionality not explicitly covered in other sections. .. _tutorial_em_line: Emission Line ------------- This tutorial is adapted from `Exposure Time Calculator User's Guide on a similar topic `_. In this tutorial, you will learn how to manipulate and superimpose an emission line to a continuum spectrum. Create a continuum spectrum of a 5500 K blackbody with z=0.6:: >>> from synphot import SourceSpectrum >>> from synphot.models import BlackBodyNorm1D >>> bb = SourceSpectrum(BlackBodyNorm1D, temperature=5500, z=0.6) Create a Gaussian emission line with 8E-14 FLAM total flux, FWHM of 100 Angstrom, and centered at 7000 Angstrom:: >>> from astropy import units as u >>> from synphot import units >>> from synphot.models import GaussianFlux1D >>> em = SourceSpectrum( ... GaussianFlux1D, total_flux=8e-14*u.erg/(u.cm**2 * u.s), ... fwhm=100, mean=7000) Add emission line to continuum spectrum:: >>> sp = bb + em Apply extinction curve for LMC (average) with E(B-V)=1.3 to the composite spectrum:: >>> from synphot import ReddeningLaw >>> ext = ReddeningLaw.from_extinction_model( ... 'lmcavg').extinction_curve(1.3) # doctest: +REMOTE_DATA >>> my_spec = sp * ext # doctest: +REMOTE_DATA Plot the result:: >>> my_spec.plot(right=45000) # doctest: +SKIP .. image:: images/tutorial_em_line.png :width: 600px :alt: Emission line tutorial .. _tutorial_continuum_norm: Continuum-Normalized Spectrum ----------------------------- In this tutorial, you will learn how to create a composite spectrum with a noisy blackbody continuum, an emission line, and an absorption line. Then, you will divide it by a smooth continuum and plot the resultant continuum-normalized spectrum. .. plot:: :include-source: import matplotlib.pyplot as plt import numpy as np from astropy import units as u from synphot import SourceSpectrum, BaseUnitlessSpectrum from synphot.models import BlackBodyNorm1D, Empirical1D, GaussianFlux1D np.random.seed(1234) # For reproducibility # Create the smooth continuum that is a 5000 K blackbody. bb = SourceSpectrum(BlackBodyNorm1D, temperature=5000) # Then, add random noise to it. Since synphot spectrum object cannot # be multiplied with scalar array, this has to be done indirectly by # applying the noise as a unitless spectrum. wave = np.arange(100, 30001, 10) nse = 1 + np.random.normal(size=wave.size, scale=0.02) sp_nse = BaseUnitlessSpectrum(Empirical1D, points=wave, lookup_table=nse) bb_noisy = bb * sp_nse # Apply emission and absorption lines to the noisy continuum. tf_unit = u.erg / (u.cm**2 * u.s) g_em = SourceSpectrum( GaussianFlux1D, total_flux=2.65e-14*tf_unit, mean=15000, fwhm=500) g_ab = SourceSpectrum( GaussianFlux1D, total_flux=6.62e-14*tf_unit, mean=4500, fwhm=100) sp = bb_noisy + g_em - g_ab # Divide the noisy spectrum with lines with the original smooth continuum # to obtain the continuum-normalized spectrum. ratio = sp / bb with np.errstate(invalid='ignore'): ratio.plot(left=2500, right=17000, title='Continuum-normalized spectrum') plt.axhline(1, ls='--', color='k') .. _tutorial_dust_extinction: Using dust-extinction model --------------------------- In this tutorial, you will learn how to apply an extinction curve using a model from the :ref:`dust-extinction ` package: .. doctest-requires:: dust-extinction >>> import numpy as np >>> from astropy import units as u >>> from dust_extinction.parameter_averages import CCM89 >>> from synphot import SourceSpectrum, ReddeningLaw >>> from synphot.models import BlackBodyNorm1D >>> ccm89_model = CCM89(Rv=3.1) >>> wav = np.arange(0.1, 3, 0.001) * u.micron >>> ebv = 0.1 # E(B-V) >>> redlaw = ReddeningLaw(ccm89_model) >>> extcurve = redlaw.extinction_curve(ebv, wavelengths=wav) >>> bb = SourceSpectrum(BlackBodyNorm1D, temperature=5000 * u.K) >>> bb.integrate() # doctest: +FLOAT_CMP >>> sp = bb * extcurve >>> sp.integrate() # doctest: +FLOAT_CMP .. _tutorial_fit_ew: Fitting, Equivalent Width ------------------------- In this tutorial, you will learn how to fit a Gaussian model to some real data and calculate its equivalent width. This is not handled by **synphot** but it is included here for those who are interested to see how fitting in IRAF SYNPHOT is done in Python. See :ref:`astropy:astropy-modeling` for more information about fitting a model. Read in the real data. If your own data has a different format, you need to adjust the example accordingly:: >>> from astropy.io import fits >>> with fits.open('/path/to/combined_13330_G130M_v40_bin4.fits') as pf: # doctest: +SKIP ... dat = pf[1].data # doctest: +SKIP ... wave = dat.field('WAVELENGTH').flatten() # Angstrom # doctest: +SKIP ... flux = dat.field('FLUX').flatten() # FLAM # doctest: +SKIP For a good fit, only use data around the feature of interest. In this example, the feature is between 1202 and 1211 Angstrom:: >>> mask = (wave >= 1202) & (wave <= 1211) # doctest: +SKIP >>> x = wave[mask] # doctest: +SKIP >>> y = flux[mask] # doctest: +SKIP Create a composite model with some initial parameters close to the desired result (usually sufficient to guess from looking at a plot of the data) and fit it using some fitter that is best for the data (sometimes, several iterations are required for a good fit):: >>> from astropy.modeling import models, fitting >>> bg = models.Const1D(amplitude=3.5E-14) >>> gs = models.Gaussian1D(amplitude=3.5E-14, mean=1206, stddev=1) >>> init_model = bg - gs >>> fitter = fitting.LevMarLSQFitter() >>> fit_model = fitter(init_model, x, y) # doctest: +SKIP >>> y_fit = fit_model(x) # doctest: +SKIP >>> print(fit_model) # doctest: +SKIP Model: CompoundModel... Inputs: ('x',) Outputs: ('y',) Model set size: 1 Expression: [0] - [1] Components: [0]: [1]: Parameters: amplitude_0 amplitude_1 mean_1 stddev_1 ----------------- ----------------- ------------- ------------- 3.63064137361e-14 3.62623007738e-14 1206.27454371 0.23713207018 Plot the fitted model on top of input data:: >>> import matplotlib.pyplot as plt # doctest: +SKIP >>> from matplotlib import ticker # doctest: +SKIP >>> fig, ax = plt.subplots() # doctest: +SKIP >>> ax.plot(x, y, 'b', x, y_fit, 'r') # doctest: +SKIP >>> ax.get_xaxis().set_major_formatter( ... ticker.FuncFormatter(ticker.FormatStrFormatter('%.0f'))) # doctest: +SKIP >>> ax.set_xlabel('Wavelength (Angstrom)') # doctest: +SKIP >>> ax.set_ylabel('Flux (FLAM)') # doctest: +SKIP >>> ax.legend(['Data', 'Fit'], loc='lower right') # doctest: +SKIP .. image:: images/tutorial_fit_ab.png :width: 600px :alt: Fitting absorption line in data. Calculate equivalent width using the fitted model:: >>> import math >>> area = (math.sqrt(2 * math.pi) * fit_model.amplitude_1 * ... fit_model.stddev_1) # Area under curve # doctest: +SKIP >>> height = fit_model.amplitude_0 # Continuum level # doctest: +SKIP >>> print('EW = {:.4f} Angstrom'.format(area / height)) # doctest: +SKIP EW = 0.5937 Angstrom .. _tutorial_lyman_alpha: Lyman-Alpha Extinction ---------------------- In this tutorial, you will learn how to apply extinction curve due to Lyman-alpha forest (:ref:`Madau et al. 1995 `) to a source spectrum. For clarity, we will only use a flat source. .. plot:: :include-source: import matplotlib.pyplot as plt from synphot import SourceSpectrum, etau_madau from synphot.models import ConstFlux1D # Create a flat source sp = SourceSpectrum(ConstFlux1D, amplitude=1E-4) # Apply extinction for a given redshift z = 2 wave = range(2400, 4200) # Angstrom extcurve = etau_madau(wave, z) sp_ext = sp * extcurve # Compare the source with and without extinction plt.plot(wave, sp(wave), 'b--', wave, sp_ext(wave), 'r') plt.xlabel('Wavelength (Angstrom)') plt.ylabel('Flux (PHOTLAM)') plt.legend(['Original', 'Extincted'], loc='lower right') The chart below illustrates the Madau 1995 extinction curves for different redshift values. For clarity, they are plotted against rest wavelength, not the redshifted wavelength: .. plot:: :include-source: import matplotlib.pyplot as plt import numpy as np from synphot import etau_madau w_rest = np.arange(800, 1400) lc = ['k', 'navy', 'b', 'deepskyblue', 'mediumseagreen', 'lightgreen', 'y', 'orange', 'r'] for z in range(0, 9): wave = w_rest * (1 + z) extcurve = etau_madau(wave, z) plt.plot(w_rest, extcurve(wave), color=lc[z], label='z={}'.format(z)) plt.ylim(0, 1.1) plt.xlabel('Rest-Frame Wavelength (Angstrom)') plt.ylabel('Lyman-alpha Forest "Throughput"') plt.legend(loc='center right') plt.grid() .. _tutorial_xmm_area: Setting Area for XMM-OM ----------------------- Some telescopes (e.g., XMM-OM by ESA) provide throughput curves with effective area information embedded in them already. In the case of XMM-OM, its throughput curves are in ``effective_area * 100`` meter squared, for which we would divide each throughput curve loaded into ``SpectralElement`` by 100. We also would set the primary area, when it is needed, as follows: >>> from astropy import units as u >>> area = 1 * (u.m * u.m) spacetelescope-synphot_refactor-c682dc1/docs/synphot/units.rst000066400000000000000000000233501511632712700250540ustar00rootroot00000000000000.. _synphot_units: Units and Constants =================== **synphot** understands :ref:`Astropy Units and Quantities `. Its `~synphot.units` module expands on that by providing: * "Shortcuts" (proper names) for some constants and composite units that are frequently used in this package. * A convenience function, :func:`~synphot.units.convert_flux`, to convert between different flux units. * Support for non-standard unit names for backward compatibility with ASTROLIB PYSYNPHOT data files. .. _synphot-constants: Constants --------- These are the constants provided by `~synphot.units`. They can be computed from existing constants in Astropy but are pre-calculated here for convenience: =============== ================================ Constant Description =============== ================================ C Speed of light in Angstrom/s H Planck's constant in CGS HC :math:`H \times C` SR_PER_ARCSEC2 Steradian per squared arcseconds =============== ================================ .. _synphot-flux-units: Flux Units ---------- In addition to flux units already supported by Astropy, such as Jy (and its prefixes), count, ABmag, and STmag, `~synphot.units` adds direct support to the following as well. In **synphot**, the easiest way to specify the desired flux unit is by passing in a ``flux_unit`` keyword into a function or class method and assigning it the unit name (as string) or direct variable name: +-------+-------------------------+--------------+ |Name |Variable |Unit | +=======+=========================+==============+ |photlam|``synphot.units.PHOTLAM``||photlam_math|| +-------+-------------------------+--------------+ |photnu |``synphot.units.PHOTNU`` ||photnu_math| | +-------+-------------------------+--------------+ |flam |``synphot.units.FLAM`` ||flam_math| | +-------+-------------------------+--------------+ |fnu |``synphot.units.FNU`` ||fnu_math| | +-------+-------------------------+--------------+ |obmag |``synphot.units.OBMAG`` ||obmag_math| | +-------+-------------------------+--------------+ |vegamag|``synphot.units.VEGAMAG``||vegamag_math|| +-------+-------------------------+--------------+ .. |photlam_math| replace:: :math:`\text{photon} \; \text{s}^{-1} \; \text{cm}^{-2} \; \mathring{A}^{-1}` .. |photnu_math| replace:: :math:`\text{photon} \; \text{s}^{-1} \; \text{cm}^{-2} \; \text{Hz}^{-1}` .. |flam_math| replace:: :math:`\text{erg} \; \text{s}^{-1} \; \text{cm}^{-2} \; \mathring{A}^{-1}` .. |fnu_math| replace:: :math:`\text{erg} \; \text{s}^{-1} \text{cm}^{-2} \text{Hz}^{-1}` .. |obmag_math| replace:: :math:`-2.5 \; \log(\text{count})` .. |vegamag_math| replace:: :math:`-2.5 \; \log(\frac{f}{f_{\text{Vega}}})` The function :func:`~synphot.units.convert_flux` provides an easy way to convert between all the supported flux units, including count/OBMAG (needs an extra input specifying telescope collecting area) and VEGAMAG (needs an extra input specifying the Vega spectrum to use), by taking account all the necessary unit equivalencies. You may also use :meth:`~astropy.units.Quantity.to` directly, as supported by Astropy, but you would need to provide the equivalencies on your own. Somewhat related are ``synphot.units.AREA``, which is a shortcut for the unit :math:`\text{cm}^{2}` often used for conversion to/from count or OBMAG, and ``synphot.units.THROUGHPUT``, which is identical to dimensionless unscaled unit in Astropy for unitless transmission curves. For backward compatibility with ASTROLIB PYSYNPHOT data files, the following non-standard flux unit *names* (case-insensitive) are also supported: +------------+-----------------------+ |Name |Resolves to | +============+=======================+ |transmission|Dimensionless unscaled | | | | |extinction | | | | | |emissivity | | +------------+-----------------------+ |jy |``astropy.units.Jy`` | +------------+-----------------------+ |stmag |``astropy.units.STmag``| | | | |mag(st) | | +------------+-----------------------+ |abmag |``astropy.units.ABmag``| | | | |mag(ab) | | +------------+-----------------------+ .. _synphot-units-counts-mags: Counts and Magnitudes ^^^^^^^^^^^^^^^^^^^^^ .. |ab_nu| replace:: :math:`\text{AB}_{\nu}` .. |st_lam| replace:: :math:`\text{ST}_{\lambda}` **synphot** supports count and the following magnitude systems: * VEGAMAG, which is defined by setting the magnitude of Vega to zero in all bands. The :ref:`adopted Vega spectrum ` is defined over a wavelength range of 900 Angstrom to 300 micron. * |ab_nu| magnitude from :ref:`Oke (1974) `, which is based on a constant flux density per unit frequency. * |st_lam| or Space Telescope magnitude, which is based on a constant flux density per unit wavelength. * Instrumental magnitude (OBMAG) that is the logarithmic form of counts. Conversion involving counts and OBMAG requires telescope collecting area to be provided. VEGAMAG offers a reasonable approximation to many of the conventional photometric systems that use the spectrum of Vega to define magnitude zero in one or more bandpasses. In broadband photometry, the relevant bandpass integral is calculated first for the source spectrum and then again for the spectrum of Vega, and the ratio of the two results is converted to a magnitude. This would not be a scientifically meaningful option for spectrophotometry. Meanwhile, |ab_nu| and |st_lam| are appropriate for either spectrophotometry or photometry. Their zero point values of 48.60 and 21.10 mag, respectively, are chosen for convenience so that Vega has |ab_nu| and |st_lam| magnitudes close to 0 in the Johnson *V* bandpass, as shown in the following figure: .. figure:: images/VegaPhotomSys.png :width: 600px :alt: Standard photometric system Standard photometric systems generally use the spectrum of Vega to define magnitude zero. The spectrophotometric magnitudes |ab_nu| and |st_lam| refer instead to spectra of constant :math:`f_{\nu}` and :math:`f_{\lambda}`, respectively. Magnitude zero in both systems is defined to be the mean flux density of Vega in the Johnson *V* bandpass. Thus all three of the spectra shown here produce the same count rate in the Johnson *V* bandpass. The pivot wavelength of Johnson *V* is defined to be the crossing point of the |ab_nu|:math:`= 0` and |st_lam|:math:`= 0` spectra. Because the |ab_nu| and |st_lam| systems are defined such that they result in constant magnitudes for spectra having constant flux per unit frequency and wavelength, respectively, they will not provide magnitudes on a conventional system, such as *UBVRI*, without first deriving an appropriate transformation onto the desired standard system. OBMAG and counts are used to predict detected count rates. For instance, :meth:`~synphot.observation.Observation.countrate` calculates the predicted number of detected counts per second integrated over the bandpass. There are two important things to remember concerning this unit: #. The number of counts per channel depends on the width (in wavelength space) of the channel in the wavelength grid that is used. Flux calculations are done internally in the unit of PHOTLAM (unless stated otherwise), so when the output unit of counts or OBMAG is requested, the PHOTLAM values are multiplied by the collecting area of the telescope and by the width (in Angstrom) of each channel in the wavelength grid. Therefore, in order to accurately predict the number of counts per channel for a spectroscopic instrument, it is necessary to use a wavelength grid that provides a good match to the dispersion properties of the selected instrument mode. For supported HST instruments, the appropriate wavelength grid will be automatically selected in **stsynphot**. #. The unit count may refer to different physical units for different instruments. For instance, in HST, it refers to the actual detector counts for the FOC, FOS, HRS, and HSP instruments. While for the WF/PC-1, WFPC2, NICMOS, WFC3, COS, ACS, and STIS instruments, it refers to electrons. .. _synphot-wave-units: Wavelength Units ---------------- **synphot** supports all wavelength, frequency, and spectroscopic wavenumber (inverse wavelength) that are supported by Astropy. Conversion between those units can be easily done using :meth:`~astropy.units.Quantity.to` and passing in :func:`~astropy.units.spectral` as equivalency. For backward compatibility with ASTROLIB PYSYNPHOT data files, the following non-standard wavelength unit *names* (case-insensitive) are also supported: * angstroms * inversemicrons * jy .. _synphot-units-examples: Examples -------- Create a blackbody source spectrum:: >>> from astropy import units as u >>> from synphot import SourceSpectrum >>> from synphot.models import BlackBodyNorm1D >>> sp = SourceSpectrum(BlackBodyNorm1D, temperature=5000*u.K) Sample the source at some wavelengths given in nm and obtain flux in count for HST:: >>> from synphot import units >>> area = 45238.93416 * units.AREA >>> sp([499, 500, 501, 502] * u.nm, flux_unit='count', area=area) # doctest: +FLOAT_CMP +IGNORE_WARNINGS Sample the source at 5E+15 Hz and obtain flux in FLAM:: >>> sp([5E+15] * u.Hz, flux_unit=units.FLAM) # doctest: +FLOAT_CMP Sample the source in internal units (Angstrom and PHOTLAM):: >>> sp(6000) # doctest: +FLOAT_CMP spacetelescope-synphot_refactor-c682dc1/licenses/000077500000000000000000000000001511632712700223265ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/licenses/README.rst000066400000000000000000000003721511632712700240170ustar00rootroot00000000000000Licenses ======== This directory holds license and credit information for works the ``synphot`` package is derived from or distributes, and/or datasets. The license file for the ``synphot`` package itself is located in the root of this repository. spacetelescope-synphot_refactor-c682dc1/licenses/TYNT_LICENSE.txt000066400000000000000000000027631511632712700250370ustar00rootroot00000000000000BSD 3-Clause License Copyright (c) 2019, Brett M. Morris All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. spacetelescope-synphot_refactor-c682dc1/pyproject.toml000066400000000000000000000002231511632712700234320ustar00rootroot00000000000000[build-system] requires = ["setuptools>=30.3.0", "setuptools_scm", "numpy>=2.0.0"] build-backend = "setuptools.build_meta" spacetelescope-synphot_refactor-c682dc1/setup.cfg000066400000000000000000000051761511632712700223530ustar00rootroot00000000000000[tool:pytest] minversion = 7 testpaths = "synphot" "docs" norecursedirs = build docs/_build synphot/src astropy_header = true doctest_plus = enabled doctest_subpackage_requires = docs/synphot/filter_par.rst = numpy>=2 text_file_format = rst addopts = --doctest-rst --import-mode=append xfail_strict = true filterwarnings = error ignore:can't resolve package from __spec__ ignore:numpy\.ndarray size changed:RuntimeWarning ignore:numpy\.ufunc size changed:RuntimeWarning ignore:distutils Version classes are deprecated:DeprecationWarning ignore:Class CCM89 defines class attributes [metadata] name = synphot description = Synthetic photometry long_description = This is a package for doing synthetic photometry that relies on Astropy long_description_content_type = text/plain keywords = astronomy, astrophysics, synthetic, photometry author = STScI license = BSD license_file = LICENSE.rst url = https://www.github.com/spacetelescope/synphot_refactor edit_on_github = False github_project = spacetelescope/synphot_refactor classifiers = Intended Audience :: Science/Research License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: C Programming Language :: Python :: 3 Programming Language :: Python :: Implementation :: CPython Topic :: Scientific/Engineering :: Astronomy Topic :: Scientific/Engineering :: Physics [options] packages = find: zip_safe = False setup_requires = setuptools_scm install_requires = numpy>=1.23 astropy>=6 scipy>=1.9 python_requires = >=3.10 [options.extras_require] all = specutils>=1.10 dust-extinction test = pytest-astropy docs = matplotlib sphinx-astropy [options.package_data] synphot.tests = data/* synphot.filter_parameterization.tests = data/* [flake8] # Ignoring these for now: # I100: import statements are in the wrong order # I201: Missing newline before sections or imports # W504: line break after binary operator ignore = I100,I201,W504 [coverage:run] source = synphot omit = synphot/tests/* synphot/version* */synphot/tests/* */synphot/version* [coverage:report] exclude_lines = # Have to re-enable the standard pragma pragma: no cover # Don't complain about packages we have installed except ImportError # Don't complain if tests don't hit assertions raise AssertionError raise NotImplementedError # Don't complain about script hooks def main\(.*\): # Ignore branches that don't pertain to this version of Python pragma: py{ignore_python_version} # Don't complain about IPython completion helper def _ipython_key_completions_ spacetelescope-synphot_refactor-c682dc1/setup.py000077500000000000000000000030121511632712700222320ustar00rootroot00000000000000#!/usr/bin/env python # Licensed under a 3-clause BSD style license - see LICENSE.rst import os import sys from setuptools import setup, Extension def get_extensions(): from collections import defaultdict import numpy cfg = defaultdict(list) cfg['include_dirs'].extend([ numpy.get_include(), os.path.join('synphot', 'include')]) cfg['sources'] = [ os.path.join('synphot', 'src', 'synphot_utils.c')] cfg = dict((str(key), val) for key, val in cfg.items()) return [Extension('synphot.synphot_utils', **cfg)] TEST_HELP = """ Note: running tests is no longer done using 'python setup.py test'. Instead you will need to run: pip install -e . pytest For more information, see: https://docs.astropy.org/en/latest/development/testguide.html#running-tests """ if 'test' in sys.argv: print(TEST_HELP) sys.exit(1) DOCS_HELP = """ Note: building the documentation is no longer done using 'python setup.py build_docs'. Instead you will need to run: cd docs make html For more information, see: https://docs.astropy.org/en/latest/install.html#builddocs """ if 'build_docs' in sys.argv or 'build_sphinx' in sys.argv: print(DOCS_HELP) sys.exit(1) # Note that requires and provides should not be included in the call to # ``setup``, since these are now deprecated. See this link for more details: # https://groups.google.com/forum/#!topic/astropy-dev/urYO8ckB2uM setup(use_scm_version={'write_to': 'synphot/version.py'}, ext_modules=get_extensions()) spacetelescope-synphot_refactor-c682dc1/synphot/000077500000000000000000000000001511632712700222255ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/__init__.py000066400000000000000000000010011511632712700243260ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This is an Astropy affiliated package. """ try: from .version import version as __version__ except ImportError: __version__ = '' # SYNPHOT UI from .config import conf # noqa from .utils import generate_wavelengths # noqa from .models import * # noqa from .observation import * # noqa from .reddening import * # noqa from .thermal import * # noqa from .spectrum import SourceSpectrum, SpectralElement, BaseUnitlessSpectrum # noqa spacetelescope-synphot_refactor-c682dc1/synphot/binning.py000066400000000000000000000400301511632712700242200ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Utilities related to wavelength bin calculations.""" # THIRD-PARTY import numpy as np # ASTROPY from astropy import units as u # LOCAL from synphot import exceptions __all__ = ['calculate_bin_edges', 'calculate_bin_widths', 'calculate_bin_centers', 'wave_range', 'pixel_range'] def _slow_calcbinflux(len_binwave, i_beg, i_end, avflux, deltaw): """Python implementation of ``calcbinflux``. This is only used if ``synphot.synphot_utils`` C-extension import fails. See ``include/synphot_utils.h``. """ binflux = np.empty(shape=(len_binwave, ), dtype=np.float64) intwave = np.empty(shape=(len_binwave, ), dtype=np.float64) # Note that, like all Python striding, the range over which # we integrate is [first:last). for i in range(len(i_beg)): first = i_beg[i] last = i_end[i] cur_dw = deltaw[first:last] intwave[i] = cur_dw.sum() binflux[i] = np.sum(avflux[first:last] * cur_dw) / intwave[i] return binflux, intwave # Try to import the C version of calcbinflux, otherwise fall back # to the Python implementation above. try: from synphot import synphot_utils except ImportError: calcbinflux = _slow_calcbinflux else: calcbinflux = synphot_utils.calcbinflux def calculate_bin_edges(centers): """Calculate the edges of wavelength bins given the centers. The algorithm calculates bin edges as the midpoints between bin centers and treats the first and last bins as symmetric about their centers. Parameters ---------- centers : array-like or `~astropy.units.quantity.Quantity` Sequence of bin centers. Must be 1D and have at least two values. If not a Quantity, assumed to be in Angstrom. Returns ------- edges : `~astropy.units.quantity.Quantity` Array of bin edges. Will be 1D, have one more value than ``centers``, and also the same unit. Raises ------ synphot.exceptions.SynphotError Invalid input. """ if not isinstance(centers, u.Quantity): centers = centers * u.AA if centers.ndim != 1: raise exceptions.SynphotError('Bin centers must be 1D array.') if centers.size < 2: raise exceptions.SynphotError( 'Bin centers must have at least two values.') edges = np.empty(centers.size + 1, dtype=np.float64) edges[1:-1] = (centers.value[1:] + centers.value[:-1]) * 0.5 # Compute the first and last by making them symmetric edges[0] = 2.0 * centers.value[0] - edges[1] edges[-1] = 2.0 * centers.value[-1] - edges[-2] return edges * centers.unit def calculate_bin_widths(edges): """Calculate the widths of wavelengths bins given their edges. Parameters ---------- edges : array-like or `~astropy.units.quantity.Quantity` Sequence of bin edges. Must be 1D and have at least two values. If not a Quantity, assumed to be in Angstrom. Returns ------- widths : `~astropy.units.quantity.Quantity` Array of bin widths. Will be 1D, have one less value than ``edges``, and also the same unit. Raises ------ synphot.exceptions.SynphotError Invalid input. """ if not isinstance(edges, u.Quantity): edges = edges * u.AA if edges.ndim != 1: raise exceptions.SynphotError('Bin edges must be 1D array.') if edges.size < 2: raise exceptions.SynphotError( 'Bin edges must have at least two values.') return np.abs(edges[1:] - edges[:-1]) def calculate_bin_centers(edges): """Calculate the centers of wavelengths bins given their edges. Parameters ---------- edges : array-like or `~astropy.units.quantity.Quantity` Sequence of bin edges. Must be 1D and have at least two values. If not a Quantity, assumed to be in Angstrom. Returns ------- centers : `~astropy.units.quantity.Quantity` Array of bin centers. Will be 1D, have one less value than ``edges``, and also the same unit. Raises ------ synphot.exceptions.SynphotError Invalid input. """ if not isinstance(edges, u.Quantity): edges = edges * u.AA if edges.ndim != 1: raise exceptions.SynphotError('Bin edges must be 1D array.') if edges.size < 2: raise exceptions.SynphotError( 'Bin edges must have at least two values.') centers = np.empty(edges.size - 1, dtype=np.float64) centers[0] = edges.value[:2].mean() for i in range(1, centers.size): centers[i] = 2.0 * edges.value[i] - centers[i - 1] return centers * edges.unit def wave_range(bins, cenwave, npix, mode='round'): """Calculate the wavelength range covered by the given number of pixels centered on the given central wavelength of the given bins. Parameters ---------- bins : array-like Wavelengths at bin centers, each centered on a pixel. Must be 1D array. cenwave : float Desired central wavelength, in the same unit as ``bins``. npix : int Desired number of pixels, centered on ``cenwave``. mode : {'round', 'min', 'max', 'none'} Determines how the pixels at the edges of the wavelength range are handled. All the options, except 'none', will return wavelength range edges that correspond to pixel edges: * 'round' - Wavelength range edges are the pixel edges and the range spans exactly ``npix`` pixels. An edge that falls in the center of a bin is rounded to the nearest pixel edge. This is the default. * 'min' - Wavelength range is shrunk such that it includes an integer number of pixels and its edges fall on pixel edges. It may not span exactly ``npix`` pixels. * 'max' - Wavelength range is expanded such that it includes an integer number of pixels and its edges fall on pixel edges. It may not span exactly ``npix`` pixels. * 'none' - Exact wavelength range is returned. The edges may not correspond to pixel edges, but it covers exactly ``npix`` pixels. Returns ------- wave1, wave2 : float Lower and upper limits of the wavelength range. Raises ------ synphot.exceptions.OverlapError Given central wavelength is not within the given bins or the wavelength range would exceed the bin limits. synphot.exceptions.SynphotError Invalid inputs or calculation failed. """ mode = mode.lower() if mode not in ('round', 'min', 'max', 'none'): raise exceptions.SynphotError( 'mode={0} is invalid, must be "round", "min", "max", ' 'or "none".'.format(mode)) if not isinstance(npix, int): raise exceptions.SynphotError('npix={0} is invalid.'.format(npix)) # Bin values must be in ascending order. if bins[0] > bins[-1]: bins = bins[::-1] # Central wavelength must be within given bins. if cenwave < bins[0] or cenwave > bins[-1]: raise exceptions.OverlapError( 'cenwave={0} is not within binset (min={1}, max={2}).'.format( cenwave, bins[0], bins[-1])) # Find the index the central wavelength among bins diff = cenwave - bins ind = np.argmin(np.abs(diff)) # Calculate fractional index frac_ind = float(ind) if diff[ind] < 0: frac_ind += diff[ind] / (bins[ind] - bins[ind - 1]) elif diff[ind] > 0: frac_ind += diff[ind] / (bins[ind + 1] - bins[ind]) # Calculate fractional indices of the edges half_npix = npix / 2.0 frac_ind1 = frac_ind - half_npix frac_ind2 = frac_ind + half_npix # Calculated edges must not exceed bin edges if frac_ind1 < -0.5: raise exceptions.OverlapError( 'Lower limit of wavelength range is out of bounds.') if frac_ind2 > (bins.size - 0.5): raise exceptions.OverlapError( 'Upper limit of wavelength range is out of bounds.') frac1, int1 = np.modf(frac_ind1) frac2, int2 = np.modf(frac_ind2) int1 = int(int1) int2 = int(int2) if mode == 'round': # Lower end of wavelength range if frac1 >= 0: # end is somewhere greater than binset[0] so we can just # interpolate between two neighboring values going with upper edge wave1 = bins[int1:int1 + 2].mean() else: # end is below the lowest binset value, but not by enough to # trigger an exception wave1 = bins[0] - (bins[0:2].mean() - bins[0]) # Upper end of wavelength range if int2 < bins.shape[0] - 1: # end is somewhere below binset[-1] so we can just interpolate # between two neighboring values, going with the upper edge. wave2 = bins[int2:int2 + 2].mean() else: # end is above highest binset value but not by enough to # trigger an exception wave2 = bins[-1] + (bins[-1] - bins[-2:].mean()) elif mode == 'min': # Lower end of wavelength range if frac1 <= 0.5 and int1 < bins.shape[0] - 1: # not at the lowest possible edge and pixel i included wave1 = bins[int1:int1 + 2].mean() elif frac1 > 0.5 and int1 < bins.shape[0] - 2: # not at the lowest possible edge and pixel i not included wave1 = bins[int1 + 1:int1 + 3].mean() elif frac1 == -0.5: # at the lowest possible edge wave1 = bins[0] - (bins[0:2].mean() - bins[0]) else: # pragma: no cover raise exceptions.SynphotError( 'mode={0} gets unexpected frac1={1}, int1={2}'.format( mode, frac1, int1)) # Upper end of wavelength range if frac2 >= 0.5 and int2 < bins.shape[0] - 1: # not out at the end and pixel i included wave2 = bins[int2:int2 + 2].mean() elif frac2 < 0.5 and int2 < bins.shape[0]: # not out at end and pixel i not included wave2 = bins[int2 - 1:int2 + 1].mean() elif frac2 == 0.5 and int2 == bins.shape[0] - 1: # at the very end wave2 = bins[-1] + (bins[-1] - bins[-2:].mean()) else: # pragma: no cover raise exceptions.SynphotError( 'mode={0} gets unexpected frac2={1}, int2={2}'.format( mode, frac2, int2)) elif mode == 'max': # Lower end of wavelength range if frac1 < 0.5 and int1 < bins.shape[0]: # not at the lowest possible edge and pixel i included wave1 = bins[int1 - 1:int1 + 1].mean() elif frac1 >= 0.5 and int1 < bins.shape[0] - 1: # not at the lowest possible edge and pixel i not included wave1 = bins[int1:int1 + 2].mean() elif frac1 == -0.5: # at the lowest possible edge wave1 = bins[0] - (bins[0:2].mean() - bins[0]) else: # pragma: no cover raise exceptions.SynphotError( 'mode={0} gets unexpected frac1={1}, int1={2}'.format( mode, frac1, int1)) # Upper end of wavelength range if frac2 > 0.5 and int2 < bins.shape[0] - 2: # not out at the end and pixel i included wave2 = bins[int2 + 1:int2 + 3].mean() elif frac2 <= 0.5 and int2 < bins.shape[0] - 1: # not out at end and pixel i not included wave2 = bins[int2:int2 + 2].mean() elif frac2 == 0.5 and int2 == bins.shape[0] - 1: # at the very end wave2 = bins[-1] + (bins[-1] - bins[-2:].mean()) else: # pragma: no cover raise exceptions.SynphotError( 'mode={0} gets unexpected frac2={1}, int2={2}'.format( mode, frac2, int2)) else: # mode == 'none' wave1 = bins[int1] + frac1 * (bins[int1 + 1] - bins[int1]) wave2 = bins[int2] + frac2 * (bins[int2 + 1] - bins[int2]) return wave1, wave2 def pixel_range(bins, waverange, mode='round'): """Calculate the number of pixels within the given wavelength range and the given bins. Parameters ---------- bins : array-like Wavelengths at bin centers, each centered on a pixel. Must be 1D array. waverange : tuple of float Lower and upper limits of the desired wavelength range, in the same unit as ``bins``. mode : {'round', 'min', 'max', 'none'} Determines how the pixels at the edges of the wavelength range are handled. All the options, except 'none', will return an integer number of pixels: * 'round' - Wavelength range edges that fall in the middle of a pixel are counted if more than half of the pixel is within the given wavelength range. Edges that fall in the center of a pixel are rounded to the nearest pixel edge. This is the default. * 'min' - Only pixels wholly within the given wavelength range are counted. * 'max' - Pixels that are within the given wavelength range by any margin are counted. * 'none' - The exact number of encompassed pixels, including fractional pixels, is returned. Returns ------- npix : number Number of pixels. Raises ------ synphot.exceptions.OverlapError Given wavelength range exceeds the bounds of given bins. synphot.exceptions.SynphotError Invalid mode. """ mode = mode.lower() if mode not in ('round', 'min', 'max', 'none'): raise exceptions.SynphotError( 'mode={0} is invalid, must be "round", "min", "max", ' 'or "none".'.format(mode)) if waverange[0] < waverange[-1]: wave1 = waverange[0] wave2 = waverange[-1] else: wave1 = waverange[-1] wave2 = waverange[0] # Bin values must be in ascending order. if bins[0] > bins[-1]: bins = bins[::-1] # Wavelength range must be within bins minwave = bins[0] - (bins[0:2].mean() - bins[0]) maxwave = bins[-1] + (bins[-1] - bins[-2:].mean()) if wave1 < minwave or wave2 > maxwave: raise exceptions.OverlapError( 'Wavelength range ({0}, {1}) is out of bounds of bins ' '(min={2}, max={3}).'.format(wave1, wave2, minwave, maxwave)) if wave1 == wave2: return 0 if mode == 'round': ind1 = bins.searchsorted(wave1, side='right') ind2 = bins.searchsorted(wave2, side='right') else: ind1 = bins.searchsorted(wave1, side='left') ind2 = bins.searchsorted(wave2, side='left') if mode == 'round': npix = ind2 - ind1 elif mode == 'min': # for ind1, figure out if pixel ind1 is wholly included or not. # do this by figuring out where wave1 is between ind1 and ind1-1. frac = (bins[ind1] - wave1) / (bins[ind1] - bins[ind1 - 1]) if frac < 0.5: # ind1 is only partially included ind1 += 1 # similar but reversed procedure for ind2 frac = (wave2 - bins[ind2 - 1]) / (bins[ind2] - bins[ind2 - 1]) if frac < 0.5: # ind2 is only partially included ind2 -= 1 npix = ind2 - ind1 elif mode == 'max': # for ind1, figure out if pixel ind1-1 is partially included or not. # do this by figuring out where wave1 is between ind1 and ind1-1. frac = (wave1 - bins[ind1 - 1]) / (bins[ind1] - bins[ind1 - 1]) if frac < 0.5: # ind1 is partially included ind1 -= 1 # similar but reversed procedure for ind2 frac = (bins[ind2] - wave2) / (bins[ind2] - bins[ind2 - 1]) if frac < 0.5: # ind2 is partially included ind2 += 1 npix = ind2 - ind1 else: # mode == 'none' # calculate fractional indices frac1 = ind1 - (bins[ind1] - wave1) / (bins[ind1] - bins[ind1 - 1]) frac2 = ind2 - (bins[ind2] - wave2) / (bins[ind2] - bins[ind2 - 1]) npix = frac2 - frac1 return npix spacetelescope-synphot_refactor-c682dc1/synphot/blackbody.py000066400000000000000000000221171511632712700245340ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Model and functions related to blackbody radiation. .. note:: This was ``astropy.modeling.blackbody`` module that was deprecated in ``astropy`` 4.0. The content is copied here so we can still use it without deprecation warning. Eventually, when we can fully pass in unit handling directly to Astropy models, we can remove this module. See https://github.com/astropy/astropy/pull/9282 and https://github.com/spacetelescope/synphot_refactor/pull/224 . """ import warnings import numpy as np from astropy import constants as const from astropy import units as u from astropy.modeling.core import Fittable1DModel from astropy.modeling.parameters import Parameter from astropy.utils.exceptions import AstropyUserWarning from synphot.units import FNU, FLAM __all__ = ['BlackBody1D', 'blackbody_nu', 'blackbody_lambda'] with warnings.catch_warnings(): warnings.simplefilter('ignore', RuntimeWarning) _has_buggy_expm1 = np.isnan(np.expm1(1000)) or np.isnan(np.expm1(1e10)) class BlackBody1D(Fittable1DModel): """ One dimensional blackbody model. Parameters ---------- temperature : :class:`~astropy.units.Quantity` Blackbody temperature. bolometric_flux : :class:`~astropy.units.Quantity` The bolometric flux of the blackbody (i.e., the integral over the spectral axis). Notes ----- Model formula: .. math:: f(x) = \\pi B_{\\nu} f_{\\text{bolometric}} / (\\sigma T^{4}) Examples -------- >>> from astropy import units as u >>> from synphot.blackbody import BlackBody1D >>> bb = BlackBody1D() >>> bb(6000 * u.AA) # doctest: +FLOAT_CMP .. plot:: :include-source: import numpy as np import matplotlib.pyplot as plt from astropy import units as u from astropy.visualization import quantity_support from synphot.blackbody import BlackBody1D from synphot.units import FLAM bb = BlackBody1D(temperature=5778*u.K) wav = np.arange(1000, 110000) * u.AA flux = bb(wav).to(FLAM, u.spectral_density(wav)) with quantity_support(): plt.figure() plt.semilogx(wav, flux) plt.axvline(bb.lambda_max.to_value(u.AA), ls='--') plt.show() """ # noqa # We parametrize this model with a temperature and a bolometric flux. The # bolometric flux is the integral of the model over the spectral axis. This # is more useful than simply having an amplitude parameter. temperature = Parameter(default=5000, min=0, unit=u.K) bolometric_flux = Parameter(default=1, min=0, unit=u.erg / u.cm ** 2 / u.s) # We allow values without units to be passed when evaluating the model, and # in this case the input x values are assumed to be frequencies in Hz. _input_units_allow_dimensionless = True # We enable the spectral equivalency by default for the spectral axis input_units_equivalencies = {'x': u.spectral()} def evaluate(self, x, temperature, bolometric_flux): """Evaluate the model. Parameters ---------- x : float, `~numpy.ndarray`, or `~astropy.units.Quantity` Frequency at which to compute the blackbody. If no units are given, this defaults to Hz. temperature : float, `~numpy.ndarray`, or `~astropy.units.Quantity` Temperature of the blackbody. If no units are given, this defaults to Kelvin. bolometric_flux : float, `~numpy.ndarray`, or `~astropy.units.Quantity` Desired integral for the blackbody. Returns ------- y : number or ndarray Blackbody spectrum. The units are determined from the units of ``bolometric_flux``. """ # We need to make sure that we attach units to the temperature if it # doesn't have any units. We do this because even though blackbody_nu # can take temperature values without units, the / temperature ** 4 # factor needs units to be defined. if isinstance(temperature, u.Quantity): temperature = temperature.to(u.K, equivalencies=u.temperature()) else: temperature = u.Quantity(temperature, u.K) # We normalize the returned blackbody so that the integral would be # unity, and we then multiply by the bolometric flux. A normalized # blackbody has f_nu = pi * B_nu / (sigma * T^4), which is what we # calculate here. We convert to 1/Hz to make sure the units are # simplified as much as possible, then we multiply by the bolometric # flux to get the normalization right. fnu = ((np.pi * u.sr * blackbody_nu(x, temperature) / const.sigma_sb / temperature ** 4).to(1 / u.Hz) * bolometric_flux) # If the bolometric_flux parameter has no unit, we should drop the /Hz # and return a unitless value. This occurs for instance during fitting, # since we drop the units temporarily. if hasattr(bolometric_flux, 'unit'): return fnu else: return fnu.value @property def input_units(self): # The input units are those of the 'x' value, which should always be # Hz. Because we do this, and because input_units_allow_dimensionless # is set to True, dimensionless values are assumed to be in Hz. return {'x': u.Hz} def _parameter_units_for_data_units(self, inputs_unit, outputs_unit): return {'temperature': u.K, 'bolometric_flux': outputs_unit['y'] * u.Hz} @property def lambda_max(self): """Peak wavelength when the curve is expressed as power density.""" return const.b_wien / self.temperature def blackbody_nu(in_x, temperature): """Calculate blackbody flux per steradian, :math:`B_{\\nu}(T)`. .. note:: Use `numpy.errstate` to suppress Numpy warnings, if desired. .. warning:: Output values might contain ``nan`` and ``inf``. Parameters ---------- in_x : number, array_like, or `~astropy.units.Quantity` Frequency, wavelength, or wave number. If not a Quantity, it is assumed to be in Hz. temperature : number, array_like, or `~astropy.units.Quantity` Blackbody temperature. If not a Quantity, it is assumed to be in Kelvin. Returns ------- flux : `~astropy.units.Quantity` Blackbody monochromatic flux in :math:`erg \\; cm^{-2} s^{-1} Hz^{-1} sr^{-1}`. Raises ------ ValueError Invalid temperature. ZeroDivisionError Wavelength is zero (when converting to frequency). """ # Convert to units for calculations, also force double precision with u.add_enabled_equivalencies(u.spectral() + u.temperature()): freq = u.Quantity(in_x, u.Hz, dtype=np.float64) temp = u.Quantity(temperature, u.K, dtype=np.float64) # Check if input values are physically possible if np.any(temp < 0): raise ValueError(f'Temperature should be positive: {temp}') if not np.all(np.isfinite(freq)) or np.any(freq <= 0): warnings.warn('Input contains invalid wavelength/frequency value(s)', AstropyUserWarning) log_boltz = const.h * freq / (const.k_B * temp) boltzm1 = np.expm1(log_boltz) if _has_buggy_expm1: # Replace incorrect nan results with infs--any result of 'nan' is # incorrect unless the input (in log_boltz) happened to be nan to begin # with. (As noted in #4393 ideally this would be replaced by a version # of expm1 that doesn't have this bug, rather than fixing incorrect # results after the fact...) boltzm1_nans = np.isnan(boltzm1) if np.any(boltzm1_nans): if boltzm1.isscalar and not np.isnan(log_boltz): boltzm1 = np.inf else: boltzm1[np.where(~np.isnan(log_boltz) & boltzm1_nans)] = np.inf # Calculate blackbody flux bb_nu = (2.0 * const.h * freq ** 3 / (const.c ** 2 * boltzm1)) flux = bb_nu.to(FNU, u.spectral_density(freq)) return flux / u.sr # Add per steradian to output flux unit def blackbody_lambda(in_x, temperature): """Like :func:`blackbody_nu` but for :math:`B_{\\lambda}(T)`. Parameters ---------- in_x : number, array_like, or `~astropy.units.Quantity` Frequency, wavelength, or wave number. If not a Quantity, it is assumed to be in Angstrom. temperature : number, array_like, or `~astropy.units.Quantity` Blackbody temperature. If not a Quantity, it is assumed to be in Kelvin. Returns ------- flux : `~astropy.units.Quantity` Blackbody monochromatic flux in :math:`erg \\; cm^{-2} s^{-1} \\mathring{A}^{-1} sr^{-1}`. """ if getattr(in_x, 'unit', None) is None: in_x = u.Quantity(in_x, u.AA) bb_nu = blackbody_nu(in_x, temperature) * u.sr # Remove sr for conversion flux = bb_nu.to(FLAM, u.spectral_density(in_x)) return flux / u.sr # Add per steradian to output flux unit spacetelescope-synphot_refactor-c682dc1/synphot/compat.py000066400000000000000000000011201511632712700240540ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Module to handle backward-compatibility.""" import importlib _optional_deps = ['specutils', 'dust_extinction'] _deps = {k.upper(): k for k in _optional_deps} __all__ = [f"HAS_{pkg}" for pkg in _deps] def __getattr__(name): if name in __all__: module_name = name[4:] try: importlib.import_module(_deps[module_name]) except (ImportError, ModuleNotFoundError): return False return True raise AttributeError(f"Module {__name__!r} has no attribute {name!r}.") spacetelescope-synphot_refactor-c682dc1/synphot/compat_specutils.py000066400000000000000000000013011511632712700261500ustar00rootroot00000000000000"""Module to handle backward-compatibility for ``specutils``. Since ``specutils`` is an optional, dependency, this module should only be imported under the condition where ``specutils`` is already installed separately; otherwise, you will encounter ``ImportError``. This module should no longer be necessary once this package requires ``specutils`` 2.0 or later. """ from synphot.compat import HAS_SPECUTILS __all__ = [] if HAS_SPECUTILS: import specutils from astropy.utils import minversion SPECUTILS_LT_2 = not minversion(specutils, "2.0.dev") if SPECUTILS_LT_2: from specutils import Spectrum1D as Spectrum else: from specutils import Spectrum # noqa: F401 spacetelescope-synphot_refactor-c682dc1/synphot/config.py000066400000000000000000000067731511632712700240610ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Synphot configurable items. The default configuration heavily depends on STScI TRDS structure but it can be easily re-configured as the user wishes via `astropy.config`. """ # ASTROPY from astropy.config import ConfigNamespace, ConfigItem __all__ = ['conf'] class Conf(ConfigNamespace): """Configuration parameters.""" # First option in list is the default. default_integrator = ConfigItem( ['trapezoid', 'analytical'], 'Default integrator to use') # STANDARD STARS vega_file = ConfigItem( 'https://ssb.stsci.edu/trds/calspec/alpha_lyr_stis_011.fits', 'Vega') # REDDENING/EXTINCTION LAWS lmc30dor_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/lmc_30dorshell_001.fits', 'Gordon et al. 2003, ApJ, 594, 279; R_V = 2.76') lmcavg_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/lmc_diffuse_001.fits', 'Gordon et al. 2003, ApJ, 594, 279; R_V = 3.41') mwavg_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/milkyway_diffuse_001.fits', 'Cardelli, Clayton, & Mathis 1989, ApJ, 345, 245; R_V = 3.10') mwdense_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/milkyway_dense_001.fits', 'Cardelli, Clayton, & Mathis 1989, ApJ, 345, 245; R_V = 5.00') mwrv21_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/milkyway_rv21_001.fits', 'Cardelli, Clayton, & Mathis 1989, ApJ, 345, 245; R_V = 2.1') mwrv40_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/milkyway_rv4_001.fits', 'Cardelli, Clayton, & Mathis 1989, ApJ, 345, 245; R_V = 4.0') smcbar_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/smc_bar_001.fits', 'Gordon et al. 2003, ApJ, 594, 279; R_V=2.74') xgal_file = ConfigItem( 'https://ssb.stsci.edu/trds/extinction/xgal_starburst_001.fits', 'Calzetti et al. 2000, ApJ, 533, 682') # COMMON FILTER BANDPASS bessel_h_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/bessell_h_004_syn.fits', 'Bessel H') bessel_j_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/bessell_j_003_syn.fits', 'Bessel J') bessel_k_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/bessell_k_003_syn.fits', 'Bessel K') cousins_i_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/cousins_i_004_syn.fits', 'Cousins I') cousins_r_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/cousins_r_004_syn.fits', 'Cousins R') johnson_b_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_b_004_syn.fits', 'Johnson B') johnson_i_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_i_003_syn.fits', 'Johnson I') johnson_j_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_j_003_syn.fits', 'Johnson J') johnson_k_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_k_003_syn.fits', 'Johnson K') johnson_r_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_r_003_syn.fits', 'Johnson R') johnson_u_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_u_004_syn.fits', 'Johnson U') johnson_v_file = ConfigItem( 'https://ssb.stsci.edu/trds/comp/nonhst/johnson_v_004_syn.fits', 'Johnson V') conf = Conf() spacetelescope-synphot_refactor-c682dc1/synphot/exceptions.py000066400000000000000000000043371511632712700247670ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Exceptions specific to synthetic photometry.""" __all__ = ['SynphotError', 'TableFormatError', 'DuplicateWavelength', 'ZeroWavelength', 'UnsortedWavelength', 'OverlapError', 'PartialOverlap', 'DisjointError', 'UndefinedBinset', 'IncompatibleSources', 'InterpolationNotAllowed', 'ExtrapolationNotAllowed'] class SynphotError(Exception): """Base class for synphot exceptions.""" pass class TableFormatError(SynphotError): """Exceptions to do with table access. Parameters ---------- msg : str Error message. rows : list of int, optional Row numbers where exception occured. """ def __init__(self, msg, rows=None): super(TableFormatError, self).__init__(msg) # Save rows with wrong values as an attribute so calling code # can access it directly self.rows = rows # Also make this info go into the visibly displayed message in # Python 2.7 (self.args) and Python 2.5/6 (self.message) args = list(self.args) args.append('Invalid entries at or about row: {0}'.format(rows)) self.args = tuple(args) self.message = self.args class DuplicateWavelength(TableFormatError): """Duplicate wavelengths are not allowed in table.""" pass class ZeroWavelength(TableFormatError): """Zero wavelengths are not allowed in table.""" pass class UnsortedWavelength(TableFormatError): """Unsorted wavelengths are not allowed in table.""" pass class OverlapError(SynphotError): """Exceptions to do with overlap checking.""" pass class PartialOverlap(OverlapError): """Partial overlap is not allowed.""" pass class DisjointError(OverlapError): """Disjoint data is not allowed.""" pass class UndefinedBinset(SynphotError): """Exceptions for undefined bin set.""" pass class IncompatibleSources(SynphotError): """Two sources in composite spectrum are not compatible.""" pass class InterpolationNotAllowed(SynphotError): """Exceptions for interpolation.""" pass class ExtrapolationNotAllowed(SynphotError): """Exceptions for extrapolation.""" pass spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/000077500000000000000000000000001511632712700271505ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/__init__.py000066400000000000000000000003541511632712700312630ustar00rootroot00000000000000"""This subpackage handles filter parameterization. The algorithms in this subpackage were originally developed by Brett Morris as part of the `tynt `_ package. """ from .filter_fft import * # noqa spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/filter_fft.py000066400000000000000000000165501511632712700316550ustar00rootroot00000000000000"""Handle Fast Fourier Transform (FFT) for filter parameterization.""" import numpy as np from astropy import units as u from astropy.modeling.models import custom_model, Sine1D from astropy.table import Table from synphot.models import Empirical1D from synphot.spectrum import SpectralElement from synphot.units import validate_quantity __all__ = ['filter_to_fft', 'filter_from_fft', 'analytical_model_from_fft', 'filters_to_fft_table'] def _simplified_wavelength(n_lambda, lambda_0, delta_lambda): # tynt assumed everything was in Angstrom, which coincides with # synphot internal wavelength unit. wave_unit = SpectralElement._internal_wave_unit lambda_0 = validate_quantity( lambda_0, wave_unit, equivalencies=u.spectral()) delta_lambda = validate_quantity( delta_lambda, wave_unit, equivalencies=u.spectral()) lambda_max = (n_lambda + 1) * delta_lambda + lambda_0 return np.arange(lambda_0.value, lambda_max.value, delta_lambda.value) * wave_unit def filter_to_fft(bp, wavelengths=None, n_terms=10): """Calculate filter parameters using FFT. Parameters ---------- bp : `~synphot.spectrum.SpectralElement` Filter to parameterize. wavelengths : array-like or `~astropy.units.quantity.Quantity` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``waveset`` is used. n_terms : int Number of FFT parameters to keep. Returns ------- n_lambda : int Number of elements in ``wl``. lambda_0 : `~astropy.units.quantity.Quantity` Minimum value of ``wl``. delta_lambda : `~astropy.units.quantity.Quantity` Median delta wavelength. tr_max : `~astropy.units.quantity.Quantity` Maximum value of ``tr``. fft_parameters : list of complex List of complex values that are FFT parameters to keep. """ wl = bp._validate_wavelengths(wavelengths) tr = bp(wl) diff_wl = np.diff(wl) delta_lambda = np.nanmedian(diff_wl[diff_wl != 0]) lambda_0 = wl.min() n_lambda = len(wl) # Create a simplified wavelength grid simplified_wavelength = _simplified_wavelength( n_lambda, lambda_0, delta_lambda) tr_max = tr.max() # Interpolate transmittance onto simplified wavelength grid tr_interp = np.interp(simplified_wavelength, wl, tr) # Take the DFT of the interpolated transmittance curve fft = np.fft.fft(tr_interp)[:n_terms] if isinstance(fft, u.Quantity): fft_parameters = fft.value.tolist() else: # Older Numpy does not return Quantity fft_parameters = fft.tolist() return n_lambda, lambda_0, delta_lambda, tr_max, fft_parameters def filter_from_fft(n_lambda, lambda_0, delta_lambda, tr_max, fft_parameters): """Reconstruct a filter from given FFT parameters. The inputs for this function can be obtained from :func:`filter_to_fft`. Parameters ---------- n_lambda : int Number of elements in original wavelength array. lambda_0 : float or `~astropy.units.quantity.Quantity` Minimum value of original wavelength array. If not a Quantity, assumed to be in Angstrom. delta_lambda : float or `~astropy.units.quantity.Quantity` Median delta wavelength of original wavelength array. If not a Quantity, assumed to be in Angstrom. tr_max : float or `~astropy.units.quantity.Quantity` Maximum value of transmittance curve. If a Quantity, must be unitless. fft_parameters : list of complex List of complex values that are FFT parameters representing the filter transmittance curve. Returns ------- bp : `~synphot.spectrum.SpectralElement` Reconstructed filter. """ wavelength = _simplified_wavelength(n_lambda, lambda_0, delta_lambda) n_wave = len(wavelength) ifft = np.fft.ifft(fft_parameters, n=n_wave) transmittance = ((ifft.real - ifft.real.min()) * tr_max / np.ptp(ifft.real)) # noqa return SpectralElement( Empirical1D, points=wavelength, lookup_table=transmittance) def analytical_model_from_fft(n_lambda, lambda_0, delta_lambda, tr_max, fft_parameters): """Similar to :func:`filter_from_fft` except that this returns an analytical model. .. note:: This model needs to be sampled using the full range of wavelength. See https://github.com/bmorris3/tynt/issues/9 . Returns ------- astropy_model : `~astropy.modeling.CompoundModel` A compound model that consists of `~astropy.modeling.functional_models.Sine1D` models. """ wavelength = _simplified_wavelength(n_lambda, lambda_0, delta_lambda) n_wave = len(wavelength) n_fft_pars = len(fft_parameters) m = (np.sum([Sine1D(amplitude=fft_parameters[i].real / n_wave, frequency=i / n_wave, phase=0.25) for i in range(n_fft_pars)]) - np.sum([Sine1D(amplitude=fft_parameters[i].imag / n_wave, frequency=i / n_wave) for i in range(n_fft_pars)])) @custom_model def fft_model(x): """Approximate Fourier reconstruction of an astronomical filter. Parameters ---------- x : `~astropy.units.quantity.Quantity` Full wavelength range that samples the filter. Returns ------- transmittance : array-like or `~astropy.units.quantity.Quantity` Transmittance curve. If ``tr_max`` is a Quantity, this will be a Quantity as well. """ wave_unit = SpectralElement._internal_wave_unit x = validate_quantity(x, wave_unit, equivalencies=u.spectral()) mo = m((x - wavelength.min()) / (wavelength[1] - wavelength[0])) return (mo - mo.min()) * tr_max / np.ptp(mo) return fft_model() def filters_to_fft_table(filters_mapping, n_terms=10): """Run :func:`filter_to_fft` on a list of filters and store results in a table. Parameters ---------- filters_mapping : dict Dictionary mapping human-readable filter name to its `~synphot.spectrum.SpectralElement` and wavelengths, if applicable. If the filter object has a valid ``waveset``, just provide `None` for wavelengths; otherwise provide a Quantity array for sampling. For example:: {'JOHNSON/V': (, None), 'Flat': (, )} n_terms : int Number of FFT parameters to keep. Returns ------- fft_table : `~astropy.table.Table` Table storing FFT parameterization for the given filters. Use its ``write`` method to save it to file. """ # noqa wave_unit = SpectralElement._internal_wave_unit colnames = ['filter', 'n_lambda', 'lambda_0', 'delta_lambda', 'tr_max'] + [f'fft_{i}' for i in range(n_terms)] rows = [] for key, (bp, wavelengths) in filters_mapping.items(): n_lambda, lambda_0, delta_lambda, tr_max, fft_pars = filter_to_fft( bp, wavelengths=wavelengths, n_terms=n_terms) rows.append(tuple( [key, n_lambda, lambda_0, delta_lambda, tr_max] + fft_pars)) fft_table = Table(rows=rows, names=colnames) fft_table['lambda_0'].unit = wave_unit fft_table['delta_lambda'].unit = wave_unit return fft_table spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/tests/000077500000000000000000000000001511632712700303125ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/tests/__init__.py000066400000000000000000000000001511632712700324110ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/tests/data/000077500000000000000000000000001511632712700312235ustar00rootroot00000000000000fft_test_data.fits000066400000000000000000000264001511632712700346440ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/tests/dataSIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 193 / length of dimension 1 NAXIS2 = 13 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 15 / number of table fields TTYPE1 = 'filter ' TFORM1 = '17A ' TTYPE2 = 'n_lambda' TFORM2 = 'J ' TTYPE3 = 'lambda_0' TFORM3 = 'E ' TUNIT3 = 'Angstrom' TTYPE4 = 'delta_lambda' TFORM4 = 'E ' TUNIT4 = 'Angstrom' TTYPE5 = 'tr_max ' TFORM5 = 'E ' TTYPE6 = 'fft_0 ' TFORM6 = 'M ' TTYPE7 = 'fft_1 ' TFORM7 = 'M ' TTYPE8 = 'fft_2 ' TFORM8 = 'M ' TTYPE9 = 'fft_3 ' TFORM9 = 'M ' TTYPE10 = 'fft_4 ' TFORM10 = 'M ' TTYPE11 = 'fft_5 ' TFORM11 = 'M ' TTYPE12 = 'fft_6 ' TFORM12 = 'M ' TTYPE13 = 'fft_7 ' TFORM13 = 'M ' TTYPE14 = 'fft_8 ' TFORM14 = 'M ' TTYPE15 = 'fft_9 ' TFORM15 = 'M ' END SLOAN/SDSS.u/E:@A=5?@cS@rP" ?> οmc?žNe2)?$?[6 ? ,V}sT~ٿ ʾטqj3#`? 8ah?oKΣ0SLOAN/SDSS.gYEbA>P@0;x!WUǁ|BP_lI<"M6@5؆Y"C[J5S  7@?se$?oؒX+[(?{nI:մ_A Rt?ڼ? @?_0܀?+R,࿭X_@?@@#U?ރ+.SLOAN/SDSS.iYEA>غ@1?#"-mܿbE3_Q?0nz:@H;E?x=R?Q -j?Ȣ6傭{8GxcMkD?؈r$?Zhkn'?àHԳ?`piL[׿'IHWSLOAN/SDSS.zEA=-w@ RT_=Ni> ȋ~? L$? Q?vI>~?b.u?H ~?rܿ;x@G~ .{?/^TEBEQ*&Ez@C"'2?z?62MASS/2MASS.JkF%A?@J'63֕fS@!=<^I@Jk@"ז$|K`Q^@wãT?2W?<{ȑq-G?_?]r)?겎?'=8?0 0]ª2MASS/2MASS.H:FIhB?@;֕7>$@/V.;;KnB 4?ܙp$f?5*'?p??@\?2Aw}h?\0?<?2Aw}h\0?p?@\Generic/Johnson.B Eg@CH?@W @df]1tz{ z?tz?G\п?bF. (ԿbF. G\пztzGeneric/Johnson.VECH?zH@p`Pˎ! >靉 l?=6 ׈$]?wd??\(?wS??[454o*W=|8P??{%`?P*W=|8`?{%@Generic/Johnson.RECH?@$34{?ktS;c`?G+ ?Yr(?ʚm@`;@?R?z?B^s?eHd3`?Q?ybcU`?cGeneric/Johnson.IEԀCH?@'($:iN?8-=D?IG|ꯨ?Q!ar?"p?\yi?/WeV8?9D d?Em??AcD?F?SJspacetelescope-synphot_refactor-c682dc1/synphot/filter_parameterization/tests/test_filter_fft.py000066400000000000000000000053371511632712700340570ustar00rootroot00000000000000import pytest from astropy import units as u from astropy.table import Table from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from synphot.filter_parameterization.filter_fft import ( filter_from_fft, analytical_model_from_fft) class TestSVOFilters: """Unit test adapted from tynt package.""" def setup_class(self): self.fft_table = Table.read( get_pkg_data_filename('data/fft_test_data.fits')) self.fft_table.add_index('filter') self.fft_cols = self.fft_table.colnames[5:] self.lambda_unit = self.fft_table['lambda_0'].unit self.dlamb_unit = self.fft_table['delta_lambda'].unit def inputs_from_table(self, filtername): row = self.fft_table.loc[filtername] n_lambda = row['n_lambda'] lambda_0 = row['lambda_0'] * self.lambda_unit delta_lambda = row['delta_lambda'] * self.dlamb_unit tr_max = row['tr_max'] fft_pars = list(row[self.fft_cols]) return n_lambda, lambda_0, delta_lambda, tr_max, fft_pars # Answers from: # http://svo2.cab.inta-csic.es/theory/fps/index.php?mode=browse&gname=SLOAN # http://svo2.cab.inta-csic.es/theory/fps/index.php?mode=browse&gname=2MASS # http://svo2.cab.inta-csic.es/theory/fps/index.php?mode=browse&gname=Generic&gname2=Johnson @pytest.mark.parametrize( ('filtername', 'lambda_mean_true', 'w_eff_true'), [('SLOAN/SDSS.u', 3561.8 * u.AA, 558.4 * u.AA), ('SLOAN/SDSS.g', 4718.9 * u.AA, 1158.4 * u.AA), ('SLOAN/SDSS.r', 6185.2 * u.AA, 1111.2 * u.AA), ('SLOAN/SDSS.i', 7499.7 * u.AA, 1044.6 * u.AA), ('SLOAN/SDSS.z', 8961.5 * u.AA, 1124.6 * u.AA), ('2MASS/2MASS.J', 12350 * u.AA, 1624.1 * u.AA), ('2MASS/2MASS.H', 16620 * u.AA, 2509.4 * u.AA), ('2MASS/2MASS.Ks', 21590 * u.AA, 2618.9 * u.AA), ('Generic/Johnson.U', 3531.1 * u.AA, 657 * u.AA), ('Generic/Johnson.B', 4430.4 * u.AA, 972.7 * u.AA), ('Generic/Johnson.V', 5537.2 * u.AA, 889.7 * u.AA), ('Generic/Johnson.R', 6939.6 * u.AA, 2070 * u.AA), ('Generic/Johnson.I', 8780.7 * u.AA, 2316 * u.AA)]) def test_lambda_eff_w_eff(self, filtername, lambda_mean_true, w_eff_true): inputs = self.inputs_from_table(filtername) bp = filter_from_fft(*inputs) assert_quantity_allclose(bp.avgwave(), lambda_mean_true, rtol=0.03) assert_quantity_allclose(bp.rectwidth(), w_eff_true, rtol=0.1) def test_astropy_model(self): inputs = self.inputs_from_table('SLOAN/SDSS.r') bp = filter_from_fft(*inputs) m = analytical_model_from_fft(*inputs) wave = bp.waveset assert_quantity_allclose(bp(wave), m(wave)) spacetelescope-synphot_refactor-c682dc1/synphot/include/000077500000000000000000000000001511632712700236505ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/include/synphot_utils.h000066400000000000000000000014121511632712700267430ustar00rootroot00000000000000#ifndef SYNPHOT_UTILS__H #define SYHPHOT_UTILS__H #define doc_calcbinflux \ "\ \n\ \n\ \n\ calcbinflux(len_binwave, i_beg, i_end, avflux, deltaw)\n\ \n\ Sum over each bin.\n\ \n\ Parameters\n\ ----------\n\ len_binwave : int\n\ Number of wavelength bin centers.\n\ \n\ i_beg, i_end : array-like\n\ Locations of bin edges in ``deltaw``.\n\ \n\ avflux : array-like\n\ Average flux associated with ``deltaw``.\n\ \n\ deltaw : array-like\n\ Delta of merge wavelengths (native + centers + edges).\n\ Values are in ascending order.\n\ \n\ Returns\n\ -------\n\ binflux : array-like\n\ Integrated flux associated with given bins in ascending order.\n\ \n\ intwave : array-like\n\ Integrated delta wavelength associated with ``binflux``.\n\ \n\ \0" #endif spacetelescope-synphot_refactor-c682dc1/synphot/models.py000066400000000000000000000654041511632712700240730ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Spectrum models not in `astropy.modeling`.""" # STDLIB import math import warnings from copy import deepcopy from functools import partial # THIRD-PARTY import numpy as np # ASTROPY from astropy import constants as const from astropy import units as u from astropy.modeling import Fittable1DModel, Model, Parameter from astropy.modeling import models as _models from astropy.modeling.models import (RickerWavelet1D as _RickerWavelet1D, Tabular1D) from astropy.stats.funcs import gaussian_fwhm_to_sigma, gaussian_sigma_to_fwhm from astropy.utils import metadata from astropy.utils.exceptions import AstropyUserWarning # LOCAL from synphot import units from synphot.exceptions import SynphotError from synphot.utils import merge_wavelengths __all__ = ['BlackBody1D', 'BlackBodyNorm1D', 'Box1D', 'ConstFlux1D', 'Empirical1D', 'Gaussian1D', 'GaussianAbsorption1D', 'GaussianFlux1D', 'Lorentz1D', 'MexicanHat1D', 'RickerWavelet1D', 'PowerLawFlux1D', 'Trapezoid1D', 'get_waveset', 'get_metadata'] class BlackBody1D(Fittable1DModel): """Create a :ref:`blackbody spectrum ` model with given temperature. Parameters ---------- temperature : float Blackbody temperature in Kelvin. """ temperature = Parameter(default=5000) def __init__(self, *args, **kwargs): super(BlackBody1D, self).__init__(*args, **kwargs) self.meta['expr'] = 'bb({0})'.format(self.temperature.value) @property def lambda_max(self): """Peak wavelength in Angstrom when the curve is expressed as power density.""" return ((const.b_wien.value / self.temperature) * u.m).to_value(u.AA) def bounding_box(self, factor=10.0): """Tuple defining the default ``bounding_box`` limits, ``(x_low, x_high)``. .. math:: x_{\\mathrm{low}} = 0 x_{\\mathrm{high}} = \\log(\\lambda_{\\mathrm{max}} \\;\ (1 + \\mathrm{factor})) Parameters ---------- factor : float Used to calculate ``x_high``. """ w0 = self.lambda_max return (w0 * 0, np.log10(w0 + factor * w0)) def sampleset(self, factor_bbox=10.0, num=1000): """Return ``x`` array that samples the feature. Parameters ---------- factor_bbox : float Factor for ``bounding_box`` calculations. num : int Number of points to generate. """ w1, w2 = self.bounding_box(factor=factor_bbox) if self._n_models == 1: w = np.logspace(w1, w2, num) else: w = list(map(partial(np.logspace, num=num), w1, w2)) return np.asarray(w) @staticmethod def evaluate(x, temperature): """Evaluate the model. Parameters ---------- x : number or ndarray Wavelengths in Angstrom. temperature : number Temperature in Kelvin. Returns ------- y : number or ndarray Blackbody radiation in PHOTLAM per steradian. """ from synphot.blackbody import blackbody_nu # Silence Numpy old_np_err_cfg = np.seterr(all='ignore') wave = np.ascontiguousarray(x) * u.AA bbnu_flux = blackbody_nu(wave, temperature) bbflux = (bbnu_flux * u.sr).to( units.PHOTLAM, u.spectral_density(wave)) / u.sr # PHOTLAM/sr # Restore Numpy settings np.seterr(**old_np_err_cfg) return bbflux.value def integrate(self, *args): with u.add_enabled_equivalencies(u.temperature()): t = u.Quantity(self.temperature, u.K) return (const.sigma_sb * t ** 4 / math.pi) # per steradian class BlackBodyNorm1D(BlackBody1D): """Create a normalized :ref:`blackbody spectrum ` with given temperature. It is normalized by multiplying `BlackBody1D` result with a solid angle, :math:`\\Omega`, as defined below, where :math:`d` is 1 kpc: .. math:: \\Omega = \\frac{\\pi R_{\\mathrm{Sun}}^{2}}{d^{2}} Parameters ---------- temperature : float Blackbody temperature in Kelvin. """ def __init__(self, *args, **kwargs): super(BlackBodyNorm1D, self).__init__(*args, **kwargs) self._omega = np.pi * (const.R_sun / const.kpc).value ** 2 # steradian def evaluate(self, x, temperature): """Evaluate the model. Parameters ---------- x : number or ndarray Wavelengths in Angstrom. temperature : number Temperature in Kelvin. Returns ------- y : number or ndarray Blackbody radiation in PHOTLAM. """ bbflux = super(BlackBodyNorm1D, self).evaluate(x, temperature) return bbflux * self._omega def integrate(self, *args): return super().integrate(*args) * self._omega class Box1D(_models.Box1D): """Same as `astropy.modeling.functional_models.Box1D`, except with ``sampleset`` defined. Parameters ---------- step : float Distance of first and last points w.r.t. bounding box. In default units (nominally Angstrom). Defaults to 0.01 """ def __init__(self, *args, **kwargs): if "step" in kwargs: self.step = kwargs.pop("step") else: self.step = 0.01 super(Box1D, self).__init__(*args, **kwargs) @staticmethod def _calc_sampleset(w1, w2, step, minimal): """Calculate sampleset for each model.""" if minimal: arr = [w1 - step, w1, w2, w2 + step] else: arr = np.arange(w1 - step, w2 + step + step, step) return arr def sampleset(self, step=None, minimal=False): """Return ``x`` array that samples the feature. Parameters ---------- step : float, optional Distance of first and last points w.r.t. bounding box. If None, set to attribute ``step``. minimal : bool Only return the minimal points needed to define the box; i.e., box edges and a point outside on each side. """ if step is None: step = self.step w1, w2 = tuple(self.bounding_box.bounding_box()) if self._n_models == 1: w = self._calc_sampleset(w1, w2, step, minimal) else: w = list(map(partial( self._calc_sampleset, step=step, minimal=minimal), w1, w2)) return np.asarray(w) def integrate(self, *args): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): w = u.Quantity(self.width, u.AA) return self.amplitude * w class ConstFlux1D(_models.Const1D): """One dimensional constant flux model. Flux that is constant in a given unit might not be constant in another unit. During evaluation, flux is always converted to PHOTLAM. For multiple ``n_models``, this model only accepts amplitudes of the same flux unit; e.g., ``[1, 2]`` or ``Quantity([1, 2], 'photlam')``. Parameters ---------- amplitude : number or `~astropy.units.quantity.Quantity` Value and unit of the constant function. If not Quantity, assume the unit of PHOTLAM. """ def __init__(self, amplitude, **kwargs): if not isinstance(amplitude, u.Quantity): amplitude = amplitude * units.PHOTLAM if amplitude.unit == u.STmag: a = units.convert_flux(1, amplitude, units.FLAM) elif amplitude.unit == u.ABmag: a = units.convert_flux(1, amplitude, units.FNU) elif (amplitude.unit.physical_type in ('spectral flux density', 'spectral flux density wav', 'photon flux density', 'photon flux density wav')): a = amplitude else: raise NotImplementedError( '{0} not supported.'.format(amplitude.unit)) self._flux_unit = a.unit super(ConstFlux1D, self).__init__(amplitude=a.value, **kwargs) def evaluate(self, x, *args): """One dimensional constant flux model function. Parameters ---------- x : number or ndarray Wavelengths in Angstrom. Returns ------- y : number or ndarray Flux in PHOTLAM. """ a = (self.amplitude * np.ones_like(x)) * self._flux_unit y = units.convert_flux(x, a, units.PHOTLAM) return y.value def integrate(self, x): # TODO: Remove unit hardcoding when we use model with units natively. # TODO: We do not handle wav_unit as wave number nor energy for now. if any(['wav' in t for t in self._flux_unit.physical_type]): wav_unit = u.AA else: wav_unit = u.Hz with u.add_enabled_equivalencies(u.spectral()): x = u.Quantity(x, wav_unit) amp = u.Quantity(self.amplitude, self._flux_unit) return (max(x) - min(x)) * amp class Empirical1D(Tabular1D): """Empirical (sampled) spectrum or bandpass model. .. note:: This model requires `SciPy `_ 0.14 or later to be installed. Parameters ---------- keep_neg : bool Convert negative ``lookup_table`` values to zeroes? This is to be consistent with ASTROLIB PYSYNPHOT. kwargs : dict Keywords for `~astropy.modeling.tabular.Tabular1D` model creation or :func:`~scipy.interpolate.interpn`. When ``fill_value=np.nan`` is given, extrapolation is done based on nearest end points on each end; This is the default behavior. """ def __init__(self, **kwargs): # Manually insert user metadata here to accomodate any warning # from self._process_neg_flux() meta = kwargs.pop('meta', {}) self.meta = meta if 'warnings' not in self.meta: self.meta['warnings'] = {} x = kwargs['points'] y = kwargs['lookup_table'] # Points can only be ascending for interpn() if x[-1] < x[0]: x = x[::-1] y = y[::-1] kwargs['points'] = x # Handle negative flux keep_neg = kwargs.pop('keep_neg', False) self._keep_neg = keep_neg y = self._process_neg_flux(x, y) kwargs['lookup_table'] = y super(Empirical1D, self).__init__(**kwargs) # Set non-default interpolation default values. # For tapered model, just fill with zero; # Otherwise, extrapolate like ASTROLIB PYSYNPHOT. self.bounds_error = kwargs.get('bounds_error', False) if self.is_tapered(): self.fill_value = kwargs.get('fill_value', 0) else: self.fill_value = kwargs.get('fill_value', np.nan) def _process_neg_flux(self, x, y): """Remove negative flux.""" if self._keep_neg: # Nothing to do return y old_y = None if np.isscalar(y): # pragma: no cover if y < 0: n_neg = 1 old_x = x old_y = y y = 0 else: x = np.asarray(x) # In case input is just pure list y = np.asarray(y) i = np.where(y < 0) n_neg = len(i[0]) if n_neg > 0: old_x = x[i] old_y = y[i] y[i] = 0 if old_y is not None: warn_str = ('{0} bin(s) contained negative flux or throughput' '; it/they will be set to zero.'.format(n_neg)) warn_str += '\n points: {0}\n lookup_table: {1}'.format( old_x, old_y) # Extra info self.meta['warnings'].update({'NegativeFlux': warn_str}) warnings.warn(warn_str, AstropyUserWarning) return y def is_tapered(self): return np.array_equal( self.lookup_table[::self.lookup_table.size - 1], [0, 0]) def sampleset(self): """Return array that samples the feature.""" return np.squeeze(self.points) def evaluate(self, inputs): """Evaluate the model. Parameters ---------- inputs : number or ndarray Wavelengths in same unit as ``points``. Returns ------- y : number or ndarray Flux or throughput in same unit as ``lookup_table``. """ y = super(Empirical1D, self).evaluate(inputs) # Assume NaN at both ends need to be extrapolated based on # nearest end point. if self.fill_value is np.nan: # Cannot use sampleset() due to ExtinctionModel1D. x = np.squeeze(self.points) # np.squeeze may throw unit away. if (isinstance(self.points, tuple) and isinstance(self.points[0], u.Quantity) and not isinstance(x, u.Quantity)): x = x * self.points[0].unit if np.isscalar(y): # pragma: no cover if inputs < x[0]: y = self.lookup_table[0] elif inputs > x[-1]: y = self.lookup_table[-1] else: y[inputs < x[0]] = self.lookup_table[0] y[inputs > x[-1]] = self.lookup_table[-1] return self._process_neg_flux(inputs, y) class BaseGaussian1D(_models.Gaussian1D): """Same as `astropy.modeling.functional_models.BaseGaussian1D`, except with ``sampleset`` defined. """ _sqrt_2_pi = math.sqrt(2 * math.pi) def sampleset(self, factor_step=0.1, **kwargs): """Return ``x`` array that samples the feature. Parameters ---------- factor_step : float Factor for sample step calculation. The step is calculated using ``factor_step * self.stddev``. kwargs : dict Keyword(s) for ``bounding_box`` calculation. Default ``factor`` is set to 5 to be compatible with ASTROLIB PYSYNPHOT. """ if 'factor' not in kwargs: kwargs['factor'] = 5.0 w1, w2 = self.bounding_box(**kwargs) dw = factor_step * self.stddev if self._n_models == 1: w = np.arange(w1, w2, dw) else: w = list(map(np.arange, w1, w2, dw)) return np.asarray(w) class Gaussian1D(BaseGaussian1D): """Same as `astropy.modeling.functional_models.Gaussian1D`, except with ``sampleset`` defined. """ def integrate(self, *args): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): stddev = u.Quantity(self.stddev, u.AA) return self.amplitude * stddev * self._sqrt_2_pi # TODO: Deprecate this? # This is not really supported anymore but kept for backward compatibility. class GaussianAbsorption1D(BaseGaussian1D): """Same as ``astropy.modeling.functional_models.GaussianAbsorption1D``, except with ``sampleset`` defined. """ @staticmethod def evaluate(x, amplitude, mean, stddev): """ GaussianAbsorption1D model function. """ return 1.0 - Gaussian1D.evaluate(x, amplitude, mean, stddev) @staticmethod def fit_deriv(x, amplitude, mean, stddev): """ GaussianAbsorption1D model function derivatives. """ import operator return list(map( operator.neg, Gaussian1D.fit_deriv(x, amplitude, mean, stddev))) class GaussianFlux1D(Gaussian1D): """Same as `Gaussian1D` but accepts extra keywords below. Parameters ---------- amplitude : float Amplitude of the Gaussian in PHOTLAM. Also see ``total_flux``. mean : float Mean of the Gaussian in Angstrom. stddev : float Standard deviation of the Gaussian in Angstrom. Also see ``fwhm``. fwhm : float Full width at half maximum of the Gaussian in Angstrom. If given, this overrides ``stddev``. total_flux : float Total flux under the Gaussian in ``erg/s/cm^2``. If given, this overrides ``amplitude``. """ def __init__(self, *args, **kwargs): fwhm = kwargs.pop('fwhm', None) total_flux = kwargs.pop('total_flux', None) super(GaussianFlux1D, self).__init__(*args, **kwargs) if fwhm is None: fwhm = self.stddev * gaussian_sigma_to_fwhm else: self.stddev = fwhm * gaussian_fwhm_to_sigma gaussian_amp_to_totflux = self._sqrt_2_pi * self.stddev if total_flux is None: u_str = 'PHOTLAM' total_flux = self.amplitude * gaussian_amp_to_totflux else: u_str = 'FLAM' # total_flux is passed in unaltered, any conversion error would # happen here. tf_unit = u.erg / (u.cm * u.cm * u.s) if isinstance(total_flux, u.Quantity): total_flux = total_flux.to(tf_unit) else: total_flux = total_flux * tf_unit self.amplitude = (total_flux / (gaussian_amp_to_totflux * u.AA)).to_value(units.PHOTLAM, u.spectral_density(self.mean.value * u.AA)) # noqa total_flux = total_flux.value self.meta['expr'] = 'em({0:g}, {1:g}, {2:g}, {3})'.format( self.mean.value, fwhm, total_flux, u_str) def integrate(self, *args): # TODO: Remove unit hardcoding when we use model with units natively. return super(GaussianFlux1D, self).integrate(*args) * units.PHOTLAM class Lorentz1D(_models.Lorentz1D): """Same as `astropy.modeling.functional_models.Lorentz1D`, except with ``sampleset`` defined. """ def sampleset(self, factor_step=0.05, **kwargs): """Return ``x`` array that samples the feature. Parameters ---------- factor_step : float Factor for sample step calculation. The step is calculated using ``factor_step * self.fwhm``. kwargs : dict Keyword(s) for ``bounding_box`` calculation. """ w1, w2 = self.bounding_box(**kwargs) dw = factor_step * self.fwhm if self._n_models == 1: w = np.arange(w1, w2, dw) else: w = list(map(np.arange, w1, w2, dw)) return np.asarray(w) def integrate(self, x): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): x = u.Quantity(x, u.AA) x_0 = u.Quantity(self.x_0, u.AA) gamma = u.Quantity(self.fwhm, u.AA) * 0.5 a1 = np.arctan((min(x) - x_0) / gamma) a2 = np.arctan((max(x) - x_0) / gamma) da = (a2 - a1).to(u.dimensionless_unscaled, u.dimensionless_angles()) return self.amplitude * gamma * da class RickerWavelet1D(_RickerWavelet1D): """Same as `astropy.modeling.functional_models.RickerWavelet1D`, except with ``sampleset`` defined. """ def sampleset(self, factor_step=0.1, **kwargs): """Return ``x`` array that samples the feature. Parameters ---------- factor_step : float Factor for sample step calculation. The step is calculated using ``factor_step * self.sigma``. kwargs : dict Keyword(s) for ``bounding_box`` calculation. """ w1, w2 = self.bounding_box(**kwargs) dw = factor_step * self.sigma if self._n_models == 1: w = np.arange(w1, w2, dw) else: w = list(map(np.arange, w1, w2, dw)) return np.asarray(w) def integrate(self, x): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): x = u.Quantity(x, u.AA) x_0 = u.Quantity(self.x_0, u.AA) sig = u.Quantity(self.sigma, u.AA) # Roots, where y=0 root_left = x_0 - sig root_right = x_0 + sig x_min = min(x) x_max = max(x) if x_min >= root_left or x_max <= root_right: raise NotImplementedError( 'Partial analytic integration not supported') sig2 = sig * sig def _int_subregion(xx1, xx2): dx_min = xx1 - x_0 dx_max = xx2 - x_0 a1 = dx_min * np.exp(-0.5 * dx_min * dx_min / sig2) a2 = dx_max * np.exp(-0.5 * dx_max * dx_max / sig2) return abs(a2 - a1) # Unsigned area return self.amplitude * (_int_subregion(x_min, root_left) + _int_subregion(root_left, root_right) + _int_subregion(root_right, x_max)) # TODO: Emit proper deprecation warning. # https://github.com/spacetelescope/synphot_refactor/issues/249 class MexicanHat1D(RickerWavelet1D): """This is the deprecated name for `RickerWavelet1D`.""" class PowerLawFlux1D(_models.PowerLaw1D): """One dimensional power law model with proper flux handling. For multiple ``n_models``, this model only accepts parameters of the same unit; e.g., ``amplitude=[1, 2]`` or ``amplitude=Quantity([1, 2], 'photlam')``. Also see `~astropy.modeling.powerlaws.PowerLaw1D`. Parameters ---------- amplitude : number or `~astropy.units.quantity.Quantity` Model amplitude at the reference point. If not Quantity, assume the unit of PHOTLAM. x_0 : number or `~astropy.units.quantity.Quantity` Reference point. If not Quantity, assume the unit of Angstrom. alpha : float Power law index. """ def __init__(self, amplitude, x_0, alpha, **kwargs): if not isinstance(amplitude, u.Quantity): amplitude = amplitude * units.PHOTLAM if (amplitude.unit.physical_type in ('spectral flux density', 'spectral flux density wav', 'photon flux density', 'photon flux density wav')): self._flux_unit = amplitude.unit else: raise NotImplementedError( '{0} not supported.'.format(amplitude.unit)) if isinstance(x_0, u.Quantity): x_0 = x_0.to_value(u.AA, u.spectral()) super(PowerLawFlux1D, self).__init__( amplitude=amplitude.value, x_0=x_0, alpha=alpha, **kwargs) def evaluate(self, x, *args): """Return flux in PHOTLAM. Assume input wavelength is in Angstrom.""" xx = x / self.x_0 y = (self.amplitude * xx ** (-self.alpha)) * self._flux_unit flux = units.convert_flux(x, y, units.PHOTLAM) return flux.value def integrate(self, x): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): x = u.Quantity(x, u.AA) x_0 = u.Quantity(self.x_0, u.AA) amp = u.Quantity(self.amplitude, self._flux_unit) fac = 1 - self.alpha denom = x_0 ** -self.alpha * fac return amp * (max(x) ** fac - min(x) ** fac) / denom class Trapezoid1D(_models.Trapezoid1D): """Same as `astropy.modeling.functional_models.Trapezoid1D`, except with ``sampleset`` defined. """ def sampleset(self): """Return ``x`` array that samples the feature.""" x1, x4 = tuple(self.bounding_box.bounding_box()) dw = self.width * 0.5 x2 = self.x_0 - dw x3 = self.x_0 + dw if self._n_models == 1: w = [x1, x2, x3, x4] else: w = list(zip(x1, x2, x3, x4)) return np.asarray(w) def integrate(self, *args): # TODO: Remove unit hardcoding when we use model with units natively. with u.add_enabled_equivalencies(u.spectral()): width = u.Quantity(self.width, u.AA) slope = u.Quantity(self.slope, 1 / u.AA) return self.amplitude * (width + self.amplitude / slope) # Functions below are for sampleset magic. def _get_sampleset(model): """Return sampleset of a model or `None` if undefined.""" w = None if isinstance(model, Model) and hasattr(model, 'sampleset'): w = model.sampleset() return w def _model_tree_evaluate_sampleset(root): # Not a CompoundModel, grab sampleset and be done. if not hasattr(root, 'op'): return _get_sampleset(root) model1 = root.left model2 = root.right # model2 is redshifted, apply the redshift if applicable. if isinstance(model1, _models.RedshiftScaleFactor): val = _model_tree_evaluate_sampleset(model2) if val is None: w = val else: w = model1.inverse(val) # This should not ever happen, so ignore the redshift. elif isinstance(model2, _models.RedshiftScaleFactor): w = _model_tree_evaluate_sampleset(model1) # One of the models is scaled. Non-redshift scaling does # not affect sampleset of the model. elif isinstance(model1, _models.Scale): w = _model_tree_evaluate_sampleset(model2) elif isinstance(model2, _models.Scale): w = _model_tree_evaluate_sampleset(model1) # Combine sampleset from both models. else: w1 = _model_tree_evaluate_sampleset(model1) w2 = _model_tree_evaluate_sampleset(model2) w = merge_wavelengths(w1, w2) return w def get_waveset(model): """Get optimal wavelengths for sampling a given model. Parameters ---------- model : `~astropy.modeling.Model` Model. Returns ------- waveset : array-like or `None` Optimal wavelengths. `None` if undefined. Raises ------ synphot.exceptions.SynphotError Invalid model. """ if not isinstance(model, Model): raise SynphotError('{0} is not a model.'.format(model)) return _model_tree_evaluate_sampleset(model) # Functions below are for meta magic. def _get_meta(model): """Return metadata of a model.""" w = {} if isinstance(model, Model): w = model.meta return w def _model_tree_evaluate_metadata(root): # Not a CompoundModel, grab metadata and be done. if not hasattr(root, 'op'): return _get_meta(root) m1 = _model_tree_evaluate_metadata(root.left) m2 = _model_tree_evaluate_metadata(root.right) return metadata.merge(m1, m2, metadata_conflicts='silent') def get_metadata(model): """Get metadata for a given model. Parameters ---------- model : `~astropy.modeling.Model` Model. Returns ------- meta : dict Metadata for the model. Raises ------ synphot.exceptions.SynphotError Invalid model. """ if not isinstance(model, Model): raise SynphotError('{0} is not a model.'.format(model)) # Deep copy to make sure modiyfing returned metadata # does not modify input model metadata, especially # if input model is not a compound model. meta = deepcopy(_model_tree_evaluate_metadata(model)) return meta spacetelescope-synphot_refactor-c682dc1/synphot/observation.py000066400000000000000000000605151511632712700251410ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This module defines an observed spectrum, i.e., a source spectrum that has gone through a bandpass. """ # STDLIB import math import warnings # THIRD-PARTY import numpy as np from scipy.integrate import trapezoid # ASTROPY from astropy import log from astropy import units as u from astropy.utils.exceptions import (AstropyUserWarning, AstropyDeprecationWarning) # LOCAL from synphot import binning, exceptions, units, utils from synphot.models import Empirical1D from synphot.spectrum import (BaseSourceSpectrum, SourceSpectrum, SpectralElement) __all__ = ['Observation'] class Observation(BaseSourceSpectrum): """This is an observed spectrum, where a source spectrum has gone through a bandpass. Usually, this is the end point of a chain of spectral manipulation. It has extra attributes that deal with binning, which is introduced by the detector. Parameters ---------- spec : `~synphot.spectrum.SourceSpectrum` or `specutils.Spectrum1D` Source spectrum. band : `~synphot.spectrum.SpectralElement` Bandpass. binset : array-like, `~astropy.units.quantity.Quantity`, or `None` Center of binned wavelengths. If not a Quantity, assumed to be in Angstrom. If `None`, input ``self.waveset`` values are used. force : {`None`, 'none', 'extrap', 'taper'} Force creation of an observation even when source spectrum and bandpass do not fully overlap: * `None` or 'none' - Source must encompass bandpass (default) * 'extrap' - Extrapolate source spectrum (this changes the underlying model of ``spec`` to always extrapolate, if applicable) * 'taper' - Taper source spectrum Raises ------ synphot.exceptions.DisjointError Bandpass does not overlap with source spectrum. synphot.exceptions.PartialOverlap Bandpass only partially overlaps with source spectrum when they must fully overlap. synphot.exceptions.SynphotError Invalid inputs. synphot.exceptions.UndefinedBinset Missing binned wavelength set. """ def __init__(self, spec, band, binset=None, force='none'): # Duck-type specutils.Spectrum to avoid hard dependency on specutils if hasattr(spec, 'flux') and hasattr(spec, 'spectral_axis'): spec = SourceSpectrum.from_spectrum1d(spec) if not isinstance(spec, SourceSpectrum): raise exceptions.SynphotError('Invalid source spectrum.') if not isinstance(band, SpectralElement): raise exceptions.SynphotError('Invalid bandpass.') # Inherit input warnings like ASTROLIB PYSYNPHOT warn = {} # Validate overlap if force is None: force = 'none' else: force = force.lower() stat = band.check_overlap(spec) if stat == 'none': raise exceptions.DisjointError( 'Source spectrum and bandpass are disjoint.') elif 'partial' in stat: if force == 'none': raise exceptions.PartialOverlap( 'Source spectrum and bandpass do not fully overlap. ' 'You may use force=[extrap|taper] to force this ' 'Observation anyway.') elif force == 'taper': spec = spec.taper() msg = 'Source spectrum is tapered.' warnings.warn(msg, AstropyUserWarning) warn['PartialOverlap'] = msg elif force.startswith('extrap'): if spec.force_extrapolation(): msg = ('Source spectrum will be extrapolated (at constant ' 'value for empirical model).') else: msg = ('Source spectrum will be evaluated outside ' 'pre-defined waveset.') warnings.warn(msg, AstropyUserWarning) warn['PartialOverlap'] = msg else: raise exceptions.SynphotError( 'force={0} is invalid, must be "none", "taper", ' 'or "extrap"'.format(force)) elif stat != 'full': # pragma: no cover raise exceptions.SynphotError( 'Overlap result of {0} is unexpected'.format(stat)) # Create composite spectrum super(Observation, self).__init__(spec * band, clean_meta=True) self._spec = spec self._band = band self._force = force # Merge in other warnings self.warnings = warn # Initialize bins self._init_bins(binset) def _init_bins(self, binset): """Calculated binned wavelength centers, edges, and flux. By contrast, the native waveset and flux should be considered samples of a continuous function. Thus, it makes sense to interpolate ``self.waveset`` and ``self(self.waveset)``, but not `binset` and `binflux`. """ if binset is None: if self.bandpass.waveset is not None: self._binset = self.bandpass.waveset elif self.spectrum.waveset is not None: self._binset = self.spectrum.waveset log.info('Bandpass waveset is undefined; ' 'Using source spectrum waveset instead.') else: raise exceptions.UndefinedBinset( 'Both source spectrum and bandpass have undefined ' 'waveset; Provide binset manually.') else: self._binset = self._validate_wavelengths(binset) # binset must be in ascending order for calcbinflux() # to work properly. if self._binset[0] > self._binset[-1]: self._binset = self._binset[::-1] self._bin_edges = binning.calculate_bin_edges(self._binset) # Merge bin edges and centers in with the natural waveset spwave = utils.merge_wavelengths( self._bin_edges.value, self._binset.value) if self.waveset is not None: spwave = utils.merge_wavelengths(spwave, self.waveset.value) # Throw out invalid wavelengths after merging. spwave = spwave[spwave > 0] # Compute indices associated to each endpoint. indices = np.searchsorted(spwave, self._bin_edges.value) i_beg = indices[:-1] i_end = indices[1:] # Prepare integration variables. flux = self(spwave) avflux = (flux.value[1:] + flux.value[:-1]) * 0.5 deltaw = spwave[1:] - spwave[:-1] # Sum over each bin. binflux, intwave = binning.calcbinflux( self._binset.size, i_beg, i_end, avflux, deltaw) self._binflux = binflux * flux.unit @property def spectrum(self): """Source spectrum of the observation.""" return self._spec @property def bandpass(self): """Bandpass of the observation.""" return self._band @property def binset(self): """Center of binned wavelengths.""" return self._binset @property def bin_edges(self): """Edges of binned wavelengths.""" return self._bin_edges @property def binflux(self): """Binned flux corresponding to `binset`.""" return self._binflux def __mul__(self, other): """Multiply self and other.""" sp = self.spectrum * other obs = self.__class__( sp, self.bandpass, binset=self.binset, force=self._force) return obs def taper(self, **kwargs): """Tapering is disabled.""" raise NotImplementedError('Observation cannot be tapered.') def _validate_binned_wavelengths(self, wave): if wave is None: wavelengths = self.binset else: wavelengths = self._validate_wavelengths(wave) return wavelengths def sample_binned(self, wavelengths=None, flux_unit=None, **kwargs): """Sample binned observation without interpolation. To sample unbinned data, use ``__call__``. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, `binset` is used. flux_unit : str or `~astropy.units.Unit` or `None` Flux is converted to this unit. If not given, internal unit is used. kwargs : dict Keywords acceptable by :func:`~synphot.units.convert_flux`. Returns ------- flux : `~astropy.units.quantity.Quantity` Binned flux in given unit. Raises ------ synphot.exceptions.InterpolationNotAllowed Interpolation of binned data is not allowed. """ x = self._validate_binned_wavelengths(wavelengths) i = np.searchsorted(self.binset, x) if not np.allclose(self.binset[i].value, x.value): raise exceptions.InterpolationNotAllowed( 'Some or all wavelength values are not in binset.') y = self.binflux[i] if flux_unit is None: flux = y else: flux = units.convert_flux(x, y, flux_unit, **kwargs) return flux def _get_binned_arrays(self, wavelengths, flux_unit, area=None, vegaspec=None): """Get binned observation in user units.""" x = self._validate_binned_wavelengths(wavelengths) y = self.sample_binned(wavelengths=x, flux_unit=flux_unit, area=area, vegaspec=vegaspec) if isinstance(wavelengths, u.Quantity): w = x.to(wavelengths.unit, u.spectral()) else: w = x return w, y def binned_waverange(self, cenwave, npix, **kwargs): """Calculate the wavelength range covered by the given number of pixels centered on the given central wavelengths of `binset`. Parameters ---------- cenwave : float or `~astropy.units.quantity.Quantity` Desired central wavelength. If not a Quantity, assumed to be in Angstrom. npix : int Desired number of pixels, centered on ``cenwave``. kwargs : dict Keywords accepted by :func:`synphot.binning.wave_range`. Returns ------- waverange : `~astropy.units.quantity.Quantity` Lower and upper limits of the wavelength range, in the unit of ``cenwave``. """ # Calculation is done in the unit of cenwave. if not isinstance(cenwave, u.Quantity): cenwave = cenwave * self._internal_wave_unit bin_wave = units.validate_quantity( self.binset, cenwave.unit, equivalencies=u.spectral()) return binning.wave_range( bin_wave.value, cenwave.value, npix, **kwargs) * cenwave.unit def binned_pixelrange(self, waverange, **kwargs): """Calculate the number of pixels within the given wavelength range and `binset`. Parameters ---------- waverange : tuple of float or `~astropy.units.quantity.Quantity` Lower and upper limits of the desired wavelength range. If not a Quantity, assumed to be in Angstrom. kwargs : dict Keywords accepted by :func:`synphot.binning.pixel_range`. Returns ------- npix : int Number of pixels. """ x = units.validate_quantity( waverange, self._internal_wave_unit, equivalencies=u.spectral()) return binning.pixel_range(self.binset.value, x.value, **kwargs) def effective_wavelength(self, binned=True, wavelengths=None, mode='efflerg'): """Calculate :ref:`effective wavelength `. Parameters ---------- binned : bool Sample data in native wavelengths if `False`. Else, sample binned data (default). wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` or `binset` is used, depending on ``binned``. mode : {'efflerg', 'efflphot'} Flux is first converted to the unit below before calculation: * 'efflerg' - FLAM * 'efflphot' - PHOTLAM (deprecated) Returns ------- eff_lam : `~astropy.units.quantity.Quantity` Observation effective wavelength. Raises ------ synphot.exceptions.SynphotError Invalid mode. """ mode = mode.lower() if mode == 'efflerg': flux_unit = units.FLAM elif mode == 'efflphot': warnings.warn( 'Usage of EFFLPHOT is deprecated.', AstropyDeprecationWarning) flux_unit = units.PHOTLAM else: raise exceptions.SynphotError( 'mode must be "efflerg" or "efflphot"') if binned: x = self._validate_binned_wavelengths(wavelengths).value y = self.sample_binned(wavelengths=x, flux_unit=flux_unit).value else: x = self._validate_wavelengths(wavelengths).value y = units.convert_flux(x, self(x), flux_unit).value num = trapezoid(y * x ** 2, x=x) den = trapezoid(y * x, x=x) if den == 0.0: # pragma: no cover eff_lam = 0.0 else: eff_lam = abs(num / den) return eff_lam * self._internal_wave_unit # https://github.com/spacetelescope/synphot_refactor/issues/159 def effstim(self, flux_unit=None, wavelengths=None, area=None, vegaspec=None): """Calculate :ref:`effective stimulus ` for given flux unit. Parameters ---------- flux_unit : str or `~astropy.units.Unit` or `None` The unit of effective stimulus. COUNT gives result in count/s (see :meth:`countrate` for more options). If not given, internal unit is used. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. This must be given if ``self.waveset`` is undefined for the underlying spectrum model(s). If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. area, vegaspec See :func:`~synphot.units.convert_flux`. Returns ------- eff_stim : `~astropy.units.quantity.Quantity` Observation effective stimulus based on given flux unit. """ if flux_unit is None: flux_unit = self._internal_flux_unit flux_unit = units.validate_unit(flux_unit) flux_unit_name = flux_unit.to_string() # Special handling of COUNT/OBMAG. # This is special case of countrate calculations. if flux_unit == u.count or flux_unit_name == units.OBMAG.to_string(): val = self.countrate(area, binned=False, wavelengths=wavelengths) if flux_unit == units.OBMAG: eff_stim = (-2.5 * np.log10(val.value)) * flux_unit else: eff_stim = val return eff_stim # Special handling of VEGAMAG. # This is basically effstim(self)/effstim(Vega) if flux_unit_name == units.VEGAMAG.to_string(): if not isinstance(vegaspec, SourceSpectrum): raise exceptions.SynphotError('Vega spectrum is missing.') num = self.integrate(wavelengths=wavelengths) den = (vegaspec * self.bandpass).integrate( integration_type='trapezoid') utils.validate_totalflux(num) utils.validate_totalflux(den) return (2.5 * (math.log10(den.value) - math.log10(num.value))) * units.VEGAMAG # Sample the bandpass x_band = self.bandpass._validate_wavelengths(wavelengths).value y_band = self.bandpass(x_band).value # Sample the observation in FLAM inwave = self._validate_wavelengths(wavelengths).value influx = units.convert_flux(inwave, self(inwave), units.FLAM).value # Integrate num = abs(trapezoid(inwave * influx, x=inwave)) den = abs(trapezoid(x_band * y_band, x=x_band)) utils.validate_totalflux(num) utils.validate_totalflux(den) val = (num / den) * units.FLAM # Integration should always be done in FLAM and then # converted to desired units as follows. if flux_unit.physical_type == 'spectral flux density wav': if flux_unit == u.STmag: eff_stim = val.to(flux_unit) else: # FLAM eff_stim = val elif flux_unit.physical_type in ( 'spectral flux density', 'photon flux density', 'photon flux density wav'): w_pivot = self.bandpass.pivot() eff_stim = units.convert_flux(w_pivot, val, flux_unit) else: raise exceptions.SynphotError( 'Flux unit {0} is invalid'.format(flux_unit)) return eff_stim def countrate(self, area, binned=True, wavelengths=None, waverange=None, force=False): """Calculate :ref:`effective stimulus ` in count/s. Parameters ---------- area : float or `~astropy.units.quantity.Quantity` Area that flux covers. If not a Quantity, assumed to be in :math:`cm^{2}`. binned : bool Sample data in native wavelengths if `False`. Else, sample binned data (default). wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. This must be given if ``self.waveset`` is undefined for the underlying spectrum model(s). If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` or `binset` is used, depending on ``binned``. waverange : tuple of float, Quantity, or `None` Lower and upper limits of the desired wavelength range. If not a Quantity, assumed to be in Angstrom. If `None`, the full range is used. force : bool If a wavelength range is given, partial overlap raises an exception when this is `False` (default). Otherwise, it returns calculation for the overlapping region. Disjoint wavelength range raises an exception regardless. Returns ------- count_rate : `~astropy.units.quantity.Quantity` Observation effective stimulus in count/s. Raises ------ synphot.exceptions.DisjointError Wavelength range does not overlap with observation. synphot.exceptions.PartialOverlap Wavelength range only partially overlaps with observation. synphot.exceptions.SynphotError Calculation failed, including but not limited to NaNs in flux. """ # Sample the observation if binned: x = self._validate_binned_wavelengths(wavelengths).value y = self.sample_binned(wavelengths=x, flux_unit=u.count, area=area).value else: x = self._validate_wavelengths(wavelengths).value y = units.convert_flux(x, self(x), u.count, area=area).value # Use entire wavelength range if waverange is None: influx = y # Use given wavelength range else: w = units.validate_quantity(waverange, self._internal_wave_unit, equivalencies=u.spectral()).value stat = utils.overlap_status(w, x) w1 = w.min() w2 = w.max() if stat == 'none': raise exceptions.DisjointError( 'Observation and wavelength range are disjoint.') elif 'partial' in stat: if force: warnings.warn( 'Count rate calculated only for wavelengths in the ' 'overlap between observation and given range.', AstropyUserWarning) w1 = max(w1, x.min()) w2 = min(w2, x.max()) else: raise exceptions.PartialOverlap( 'Observation and wavelength range do not fully ' 'overlap. You may use force=True to force this ' 'calculation anyway.') elif stat != 'full': # pragma: no cover raise exceptions.SynphotError( 'Overlap result of {0} is unexpected'.format(stat)) if binned: if wavelengths is None: bin_edges = self.bin_edges.value else: bin_edges = binning.calculate_bin_edges(x).value i1 = np.searchsorted(bin_edges, w1) - 1 i2 = np.searchsorted(bin_edges, w2) influx = y[i1:i2] else: mask = ((x >= w1) & (x <= w2)) influx = y[mask] val = math.fsum(influx) utils.validate_totalflux(val) return val * (u.count / u.s) def plot(self, binned=True, wavelengths=None, flux_unit=None, area=None, vegaspec=None, **kwargs): # pragma: no cover """Plot the observation. .. note:: Uses ``matplotlib``. Parameters ---------- binned : bool Plot data in native wavelengths if `False`. Else, plot binned data (default). wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` or `binset` is used, depending on ``binned``. flux_unit : str or `~astropy.units.Unit` or `None` Flux is converted to this unit for plotting. If not given, internal unit is used. area, vegaspec See :func:`~synphot.units.convert_flux`. kwargs : dict See :func:`synphot.spectrum.BaseSpectrum.plot`. Raises ------ synphot.exceptions.SynphotError Invalid inputs. """ if binned: w, y = self._get_binned_arrays(wavelengths, flux_unit, area=area, vegaspec=vegaspec) else: w, y = self._get_arrays(wavelengths, flux_unit=flux_unit, area=area, vegaspec=vegaspec) self._do_plot(w, y, **kwargs) def as_spectrum(self, binned=True, wavelengths=None): """Reduce the observation to an empirical source spectrum. An observation is a complex object with some restrictions on its capabilities. At times, it would be useful to work with the observation as a simple object that is easier to manipulate and takes up less memory. This is also useful for writing an observation as sampled spectrum out to a FITS file. Parameters ---------- binned : bool Write out data in native wavelengths if `False`. Else, write binned data (default). wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` or `binset` is used, depending on ``binned``. Returns ------- sp : `~synphot.spectrum.SourceSpectrum` Empirical source spectrum. """ if binned: w, y = self._get_binned_arrays( wavelengths, self._internal_flux_unit) else: w, y = self._get_arrays( wavelengths, flux_unit=self._internal_flux_unit) header = {'observation': str(self), 'binned': binned} return SourceSpectrum(Empirical1D, points=w, lookup_table=y, meta={'header': header}) spacetelescope-synphot_refactor-c682dc1/synphot/reddening.py000066400000000000000000000240241511632712700245400ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This module defines reddening laws and extinction curves.""" # STDLIB import numbers # THIRD-PARTY import numpy as np from astropy import units as u from astropy.io.fits.connect import is_fits # LOCAL from synphot import exceptions, specio, units from synphot.compat import HAS_DUST_EXTINCTION from synphot.config import Conf from synphot.models import Empirical1D from synphot.spectrum import BaseUnitlessSpectrum __all__ = ['ExtinctionModel1D', 'ReddeningLaw', 'ExtinctionCurve', 'etau_madau'] class ExtinctionModel1D(Empirical1D): """Model to handle extinction curve. This is like :class:`~synphot.models.Empirical1D` except that its ``sampleset`` will not be propagated to composite spectrum. """ def sampleset(self): """This simply returns `None`. Use ``numpy.squeeze(self.points)`` instead for array (in Angstrom) that samples the model. """ return None class ReddeningLaw(BaseUnitlessSpectrum): """Class to handle reddening law. Parameters ---------- modelclass, kwargs See `~synphot.spectrum.BaseSpectrum`. """ def extinction_curve(self, ebv, wavelengths=None): """Generate extinction curve. .. math:: A(V) = R(V) \\; \\times \\; E(B-V) THRU = 10^{-0.4 \\; A(V)} Parameters ---------- ebv : float or `~astropy.units.quantity.Quantity` :math:`E(B-V)` value in magnitude. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- extcurve : `ExtinctionCurve` Empirical extinction curve. Raises ------ synphot.exceptions.SynphotError Invalid input. """ if isinstance(ebv, u.Quantity) and ebv.unit.decompose() == u.mag: ebv = ebv.value elif not isinstance(ebv, numbers.Real): raise exceptions.SynphotError('E(B-V)={0} is invalid.'.format(ebv)) x = self._validate_wavelengths(wavelengths) header = {'E(B-V)': ebv} # Duck-typing dust-extinction package API. if HAS_DUST_EXTINCTION and hasattr(self.model, 'extinguish'): y = self.model.extinguish(x, Ebv=ebv) header['ReddeningLaw'] = '{!r}'.format(self.model) else: y = 10 ** (-0.4 * self(x).value * ebv) header['ReddeningLaw'] = self.meta.get('expr', 'unknown') return ExtinctionCurve(ExtinctionModel1D, points=x, lookup_table=y, meta={'header': header}) def to_fits(self, filename, wavelengths=None, **kwargs): """Write the reddening law to a FITS file. :math:`R(V)` column is automatically named 'Av/E(B-V)'. Parameters ---------- filename : str Output filename. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. kwargs : dict Keywords accepted by :func:`~synphot.specio.write_fits_spec`. """ w, y = self._get_arrays(wavelengths) kwargs['flux_col'] = 'Av/E(B-V)' kwargs['flux_unit'] = self._internal_flux_unit # No need to trim/pad zeroes, unless user chooses to do so. if 'pad_zero_ends' not in kwargs: kwargs['pad_zero_ends'] = False if 'trim_zero' not in kwargs: kwargs['trim_zero'] = False # There are some standard keywords that should be added # to the extension header. bkeys = {'tdisp1': 'G15.7', 'tdisp2': 'G15.7'} if 'expr' in self.meta: bkeys['expr'] = (self.meta['expr'], 'synphot expression') if 'ext_header' in kwargs: kwargs['ext_header'].update(bkeys) else: kwargs['ext_header'] = bkeys specio.write_fits_spec(filename, w, y, **kwargs) @classmethod def from_file(cls, filename, **kwargs): """Create a reddening law from file. If filename is recognized by ``astropy.io.fits`` as FITS, it is read as such. Otherwise, it is read as ASCII. Parameters ---------- filename : str Reddening law filename. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_fits_spec` (if FITS) or :func:`~synphot.specio.read_ascii_spec` (if ASCII). Returns ------- redlaw : `ReddeningLaw` Empirical reddening law. """ if is_fits("", filename, None): if 'flux_col' not in kwargs: kwargs['flux_col'] = 'Av/E(B-V)' elif 'flux_unit' not in kwargs: # pragma: no cover kwargs['flux_unit'] = cls._internal_flux_unit header, wavelengths, rvs = specio.read_spec(filename, **kwargs) return cls(Empirical1D, points=wavelengths, lookup_table=rvs, meta={'header': header}) @classmethod def from_extinction_model(cls, modelname, **kwargs): """Load :ref:`pre-defined extinction model `. Parameters ---------- modelname : str Extinction model name. Choose from 'lmc30dor', 'lmcavg', 'mwavg', 'mwdense', 'mwrv21', 'mwrv40', 'smcbar', or 'xgalsb'. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_remote_spec`. Returns ------- redlaw : `ReddeningLaw` Empirical reddening law. Raises ------ synphot.exceptions.SynphotError Invalid extinction model name. """ modelname = modelname.lower() # Select filename based on model name if modelname == 'lmc30dor': cfgitem = Conf.lmc30dor_file elif modelname == 'lmcavg': cfgitem = Conf.lmcavg_file elif modelname == 'mwavg': cfgitem = Conf.mwavg_file elif modelname == 'mwdense': cfgitem = Conf.mwdense_file elif modelname == 'mwrv21': cfgitem = Conf.mwrv21_file elif modelname == 'mwrv40': cfgitem = Conf.mwrv40_file elif modelname == 'smcbar': cfgitem = Conf.smcbar_file elif modelname == 'xgalsb': cfgitem = Conf.xgal_file else: raise exceptions.SynphotError( 'Extinction model {0} is invalid.'.format(modelname)) filename = cfgitem() if is_fits("", filename, None): if 'flux_col' not in kwargs: kwargs['flux_col'] = 'Av/E(B-V)' elif 'flux_unit' not in kwargs: # pragma: no cover kwargs['flux_unit'] = cls._internal_flux_unit header, wavelengths, rvs = specio.read_remote_spec(filename, **kwargs) header['filename'] = filename header['descrip'] = cfgitem.description meta = {'header': header, 'expr': modelname} return cls(Empirical1D, points=wavelengths, lookup_table=rvs, meta=meta) class ExtinctionCurve(BaseUnitlessSpectrum): """Class to handle extinction curve. Parameters ---------- modelclass, kwargs See `~synphot.spectrum.BaseSpectrum`. """ pass # TODO: Find a better way to handle so many magic numbers. # See https://github.com/spacetelescope/synphot_refactor/issues/77 def etau_madau(wave, z, **kwargs): """Madau 1995 extinction for a galaxy at given redshift. This is the Lyman-alpha prescription from the photo-z code BPZ. The Lyman-alpha forest approximately has an effective "throughput" which is a function of redshift and rest-frame wavelength. One would multiply the SEDs by this factor before passing it through an instrument filter. This approximation is from Footnote 3 of :ref:`Madau et al. (1995) `. This is claimed accurate to 5%. The scatter in this factor (due to different lines of sight) is huge, as shown in Madau's Fig. 3 (top panel); The figure's bottom panel shows a redshifted version of the "exact" prescription. Parameters ---------- wave : array-like or `~astropy.units.quantity.Quantity` Redshifted wavelength values. Non-redshifted wavelength is ``wave / (1 + z)``. z : number Redshift. kwargs : dict Equivalencies for unit conversion, see :func:`~synphot.units.validate_quantity`. Returns ------- extcurve : `ExtinctionCurve` Extinction curve to apply to the redshifted spectrum. """ if not isinstance(z, numbers.Real): raise exceptions.SynphotError( 'Redshift must be a real scalar number.') if np.isscalar(wave) or len(wave) <= 1: raise exceptions.SynphotError('Wavelength has too few data points') wave = units.validate_quantity(wave, u.AA, **kwargs).value ll = 912.0 c = np.array([3.6e-3, 1.7e-3, 1.2e-3, 9.3e-4]) el = np.array([1216, 1026, 973, 950], dtype=float) # noqa tau = np.zeros_like(wave, dtype=float) xe = 1.0 + z # Lyman series for i in range(len(el)): tau = np.where(wave <= el[i] * xe, tau + c[i] * (wave / el[i]) ** 3.46, tau) # Photoelectric absorption xc = wave / ll xc3 = xc ** 3 tau = np.where(wave <= ll * xe, (tau + 0.25 * xc3 * (xe ** 0.46 - xc ** 0.46) + 9.4 * xc ** 1.5 * (xe ** 0.18 - xc ** 0.18) - 0.7 * xc3 * (xc ** (-1.32) - xe ** (-1.32)) - 0.023 * (xe ** 1.68 - xc ** 1.68)), tau) thru = np.where(tau > 700., 0., np.exp(-tau)) meta = {'descrip': 'Madau 1995 extinction for z={0}'.format(z)} return ExtinctionCurve(ExtinctionModel1D, points=wave, lookup_table=thru, meta=meta) spacetelescope-synphot_refactor-c682dc1/synphot/specio.py000066400000000000000000000312731511632712700240670ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This modules handles synthetic photometry data formats.""" # STDLIB import os import warnings # THIRD-PARTY import numpy as np # ASTROPY from astropy import log from astropy import units as u from astropy.io import ascii, fits from astropy.io.fits.connect import is_fits from astropy.table import QTable from astropy.utils.data import get_readable_fileobj from astropy.utils.decorators import deprecated_renamed_argument from astropy.utils.exceptions import AstropyUserWarning # LOCAL from synphot import __version__, exceptions, units __all__ = ['read_remote_spec', 'read_spec', 'read_ascii_spec', 'read_fits_spec', 'write_fits_spec'] def read_remote_spec(filename, encoding='binary', cache=True, show_progress=True, **kwargs): """Read FITS or ASCII spectrum from a remote location. Parameters ---------- filename : str Spectrum filename. encoding, cache, show_progress See :func:`~astropy.utils.data.get_readable_fileobj`. kwargs : dict Keywords acceptable by :func:`read_fits_spec` (if FITS) or :func:`read_ascii_spec` (if ASCII). Returns ------- header : dict Metadata. wavelengths, fluxes : `~astropy.units.quantity.Quantity` Wavelength and flux of the spectrum. """ with get_readable_fileobj(filename, encoding=encoding, cache=cache, show_progress=show_progress) as fd: header, wavelengths, fluxes = read_spec(fd, fname=filename, **kwargs) return header, wavelengths, fluxes def read_spec(filename, fname='', **kwargs): """Read FITS or ASCII spectrum. Parameters ---------- filename : str or file pointer Spectrum file name or pointer. fname : str Filename. This is *only* used if ``filename`` is a pointer. kwargs : dict Keywords acceptable by :func:`read_fits_spec` (if FITS) or :func:`read_ascii_spec` (if ASCII). Returns ------- header : dict Metadata. wavelengths, fluxes : `~astropy.units.quantity.Quantity` Wavelength and flux of the spectrum. Raises ------ synphot.exceptions.SynphotError Read failed. """ if isinstance(filename, str): fname = filename elif not fname: # pragma: no cover raise exceptions.SynphotError('Cannot determine filename.') if is_fits("", fname, None): read_func = read_fits_spec else: read_func = read_ascii_spec return read_func(filename, **kwargs) def read_ascii_spec(filename, wave_unit=u.AA, flux_unit=units.FLAM, **kwargs): """Read ASCII spectrum. ASCII table must have following columns: #. Wavelength data #. Flux data It can have more than 2 columns but the rest is ignored. Comments are discarded. Parameters ---------- filename : str or file pointer Spectrum file name or pointer. wave_unit, flux_unit : str or `~astropy.units.Unit` Wavelength and flux units, which default to Angstrom and FLAM, respectively. kwargs : dict Keywords accepted by :func:`astropy.io.ascii.read`. Returns ------- header : dict This is just an empty dictionary, so returned values are the same as :func:`read_fits_spec`. wavelengths, fluxes : `~astropy.units.quantity.Quantity` Wavelength and flux of the spectrum. They are set to 'float64' percision. """ header = {} dat = ascii.read(filename, **kwargs) wave_unit = units.validate_unit(wave_unit) flux_unit = units.validate_unit(flux_unit) wavelengths = dat.columns[0].data.astype(np.float64) * wave_unit fluxes = dat.columns[1].data.astype(np.float64) * flux_unit return header, wavelengths, fluxes @deprecated_renamed_argument( ["wave_unit", "flux_unit"], [None, None], ["1.4", "1.4"], alternative='TUNITn as per FITS standards') def read_fits_spec(filename, ext=1, wave_col='WAVELENGTH', flux_col='FLUX', wave_unit=u.AA, flux_unit=units.FLAM): """Read FITS spectrum. Wavelength and flux units are extracted from respective ``TUNITn`` keywords, from data table (not primary) header. If these keywords are not present, units are taken from ``wave_unit`` and ``flux_unit`` instead. Parameters ---------- filename : str or file pointer Spectrum file name or pointer. ext: int FITS extension with table data. Default is 1. wave_col, flux_col : str Wavelength and flux column names (case-insensitive). wave_unit, flux_unit : str or `~astropy.units.Unit` Wavelength and flux units. These are *no longer used*. Define your units in the respective ``TUNITn`` keywords in table (not primary) header. .. deprecated:: 1.4 Returns ------- header : dict Primary header only. Extension header is discarded. wavelengths, fluxes : `~astropy.units.quantity.Quantity` Wavelength and flux of the spectrum. """ wave_col = wave_col.lower() flux_col = flux_col.lower() try: fs = fits.open(filename) subhdu = fs[ext] # Need to fix table units for key in subhdu.header["TUNIT*"]: val = subhdu.header[key] if not val: continue newval = units.validate_unit(val) subhdu.header[key] = newval.to_string() # Must be generic to handle mag # noqa: E501 with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=u.UnitsWarning, message=".* did not parse as fits unit") t = QTable.read(subhdu) header = dict(fs["PRIMARY"].header) # https://github.com/astropy/astropy/issues/16221 lower_colnames = [c.lower() for c in t.colnames] t_col_wave = t.columns[lower_colnames.index(wave_col)] if t_col_wave.unit: t_col_wave_unit = units.validate_unit(t_col_wave.unit.to_string()) else: t_col_wave_unit = u.dimensionless_unscaled t_col_flux = t.columns[lower_colnames.index(flux_col)] if t_col_flux.unit: t_col_flux_unit = units.validate_unit(t_col_flux.unit.to_string()) else: t_col_flux_unit = u.dimensionless_unscaled wavelengths = t_col_wave.value * t_col_wave_unit fluxes = t_col_flux.value * t_col_flux_unit finally: if isinstance(filename, str): fs.close() return header, wavelengths, fluxes def write_fits_spec(filename, wavelengths, fluxes, pri_header={}, ext_header={}, overwrite=False, trim_zero=True, pad_zero_ends=True, precision=None, epsilon=0.00032, wave_col='WAVELENGTH', flux_col='FLUX', wave_unit=u.AA, flux_unit=units.FLAM): """Write FITS spectrum. .. warning:: If data is being written out as single-precision but wavelengths are in double-precision, some rows may be omitted. Parameters ---------- filename : str Output spectrum filename. wavelengths, fluxes : array-like or `~astropy.units.quantity.Quantity` Wavelength and flux of the spectrum. pri_header, ext_header : dict Metadata to be added to primary and given extension FITS header, respectively. Do *not* use this to define column names and units. overwrite : bool Overwrite existing file. Defaults to `False`. trim_zero : bool Remove rows with zero-flux. Default is `True`. pad_zero_ends : bool Pad each end of the spectrum with a row of zero flux like :func:`synphot.spectrum.BaseSpectrum.taper`. This is unnecessary if input is already tapered. precision : {`None`, 'single', 'double'} Precision of values in output file. Use native flux precision by default. epsilon : float Single-precision :math:`\\epsilon` value, taken from IRAF SYNPHOT FAQ. This is the minimum separation in wavelengths necessary for SYNPHOT to read the entries as distinct single-precision numbers. This is *only* used if ``precision='single'`` but data are in double-precision. Default from the FAQ is 0.00032. wave_col, flux_col : str Wavelength and flux column names (case-insensitive). wave_unit, flux_unit : str or `~astropy.units.Unit` Wavelength and flux units, which default to Angstrom and FLAM, respectively. These are *only* used if wavelengths and fluxes are not in astropy quantities. Raises ------ synphot.exceptions.SynphotError Wavelengths and fluxes have difference shapes or value precision is not supported. """ if isinstance(wavelengths, u.Quantity): wave_unit = wavelengths.unit wave_value = wavelengths.value else: wave_value = wavelengths if isinstance(fluxes, u.Quantity): flux_unit = fluxes.unit flux_value = fluxes.value else: flux_value = fluxes wave_unit = units.validate_unit(wave_unit).to_string().upper() flux_unit = units.validate_unit(flux_unit).to_string().upper() if wave_value.shape != flux_value.shape: raise exceptions.SynphotError( 'Wavelengths have shape {0} but fluxes have shape {1}'.format( wave_value.shape, flux_value.shape)) # Remove rows with zero flux. Putting this before precision logic to avoid # keeping duplicate wavelengths with zero flux. if trim_zero: idx = np.where(flux_value != 0) wave_value = wave_value[idx] flux_value = flux_value[idx] n_thrown = wave_value.size - len(idx[0]) if n_thrown != 0: log.info('{0} zero-flux rows are thrown out'.format(n_thrown)) # Only these Numpy types are supported # 'f' np.float32 # 'd' np.float64 pcodes = {'d': 'D', 'f': 'E'} # Numpy to FITS conversion # Use native flux precision if precision is None: precision = flux_value.dtype.char if precision not in pcodes: raise exceptions.SynphotError('flux is not float32 or float64') # Use user specified precision else: precision = precision.lower() if precision == 'single': precision = 'f' elif precision == 'double': precision = 'd' else: raise exceptions.SynphotError( 'precision must be single or double') # Now check wavelength precision wave_precision = wave_value.dtype.char if wave_precision not in pcodes: raise exceptions.SynphotError( 'wavelength is not float32 or float64') # If wavelength is double-precision but data is written out as # single-precision, wavelength values have to be recalculated # so that they will still be sorted with no duplicates. if wave_precision == 'd' and precision == 'f': orig_size = wave_value.size idx = np.where(np.abs(wave_value[1:] - wave_value[:-1]) > epsilon) wave_value = np.append(wave_value[idx], wave_value[-1]) flux_value = np.append(flux_value[idx], flux_value[-1]) n_thrown = orig_size - wave_value.size if n_thrown != 0: warnings.warn( '{0} rows are thrown out in converting wavelengths from ' 'double- to single-precision'.format(n_thrown), AstropyUserWarning) # Keep one zero at each end if pad_zero_ends: w1 = wave_value[0] ** 2 / wave_value[1] w2 = wave_value[-1] ** 2 / wave_value[-2] wave_value = np.insert(wave_value, [0, wave_value.size], [w1, w2]) flux_value = np.insert(flux_value, [0, flux_value.size], [0.0, 0.0]) # Construct the columns cw = fits.Column(name=wave_col, array=wave_value, unit=wave_unit, format=pcodes[precision]) cf = fits.Column(name=flux_col, array=flux_value, unit=flux_unit, format=pcodes[precision]) # These are written to the primary header: # 1. Filename # 2. Origin # 3. User dictionary (can overwrite defaults) hdr_hdu = fits.PrimaryHDU() hdr_hdu.header['filename'] = (os.path.basename(filename), 'name of file') hdr_hdu.header['origin'] = ('synphot', 'Version {0}'.format(__version__)) for key, val in pri_header.items(): hdr_hdu.header[key] = val # Make the extension HDU and include user dictionary in extension header. tab_hdu = fits.BinTableHDU.from_columns(fits.ColDefs([cw, cf])) for key, val in ext_header.items(): tab_hdu.header[key] = val # Write to file hdulist = fits.HDUList([hdr_hdu]) hdulist.append(tab_hdu) hdulist.writeto(filename, overwrite=overwrite) spacetelescope-synphot_refactor-c682dc1/synphot/spectrum.py000066400000000000000000002075441511632712700244550ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This module defines the different types of spectra.""" # STDLIB import numbers import os import warnings from copy import deepcopy # THIRD-PARTY import numpy as np from scipy.integrate import trapezoid # ASTROPY from astropy import log from astropy import units as u from astropy.io.fits.connect import is_fits from astropy.modeling import Model from astropy.modeling.core import CompoundModel from astropy.modeling.models import RedshiftScaleFactor, Scale from astropy.utils.exceptions import AstropyUserWarning from astropy.utils import metadata # LOCAL from synphot import exceptions, specio, units, utils from synphot.config import Conf, conf from synphot.models import ConstFlux1D, Empirical1D, get_waveset, get_metadata __all__ = ['BaseSpectrum', 'BaseSourceSpectrum', 'SourceSpectrum', 'BaseUnitlessSpectrum', 'SpectralElement'] # TODO: Update model logic when astropy.modeling supports Quantity. class BaseSpectrum: """Base class to handle spectrum or bandpass. .. note:: Until `astropy.modeling` can handle units, all parameters are converted to pre-defined internal units. Parameters ---------- modelclass : cls Model class from `astropy.modeling`. clean_meta : bool Scrub "expr" and "header" entries from input metadata before merging. Set this to `True` when those entries no longer make sense in ``self``. This is automatically set to `True` regardless for spectrum arithmetic. kwargs : dict Model parameters accepted by ``modelclass``. Each parameter can be either a Quantity or number. If the latter, assume pre-defined internal units. Attributes ---------- meta : dict Metadata associated with the spectrum or bandpass model \ (warnings, legacy SYNPHOT expression, FITS header, etc). Raises ------ synphot.exceptions.SynphotError Invalid model. """ _internal_wave_unit = u.AA _internal_flux_unit = None # For handling of units with models. _model_param_dict = { 'BlackBody1D': {'temperature': u.K}, 'BlackBodyNorm1D': {'temperature': u.K}, 'Box1D': {'amplitude': 'flux', 'x_0': 'wave', 'width': 'wave'}, 'BrokenPowerLaw1D': { 'amplitude': 'flux', 'x_break': 'wave', 'alpha_1': u.dimensionless_unscaled, 'alpha_2': u.dimensionless_unscaled}, 'Const1D': {'amplitude': 'noconv'}, 'ConstFlux1D': {'amplitude': 'noconv'}, 'Empirical1D': {'points': 'wave', 'lookup_table': 'flux'}, 'ExtinctionModel1D': {'points': 'wave', 'lookup_table': 'flux'}, 'ExponentialCutoffPowerLaw1D': { 'amplitude': 'flux', 'x_0': 'wave', 'x_cutoff': 'wave', 'alpha': u.dimensionless_unscaled}, 'Gaussian1D': {'amplitude': 'flux', 'mean': 'wave', 'stddev': 'wave'}, 'GaussianAbsorption1D': { 'amplitude': 'flux', 'mean': 'wave', 'stddev': 'wave'}, 'GaussianFlux1D': {'total_flux': 'noconv', 'amplitude': 'flux', 'mean': 'wave', 'stddev': 'wave', 'fwhm': 'wave'}, 'LogParabola1D': { 'amplitude': 'flux', 'x_0': 'wave', 'alpha': u.dimensionless_unscaled, 'beta': u.dimensionless_unscaled}, 'Lorentz1D': {'amplitude': 'flux', 'x_0': 'wave', 'fwhm': 'wave'}, 'RickerWavelet1D': { 'amplitude': 'flux', 'x_0': 'wave', 'sigma': 'wave'}, 'MexicanHat1D': { 'amplitude': 'flux', 'x_0': 'wave', 'sigma': 'wave'}, 'PowerLaw1D': { 'amplitude': 'flux', 'x_0': 'wave', 'alpha': u.dimensionless_unscaled}, 'PowerLawFlux1D': { 'amplitude': 'noconv', 'x_0': 'noconv', 'alpha': u.dimensionless_unscaled}, 'Trapezoid1D': { 'amplitude': 'flux', 'x_0': 'wave', 'width': 'wave', 'slope': u.dimensionless_unscaled}} # Flux conversion will use these wavelengths. _model_fconv_wav = { 'Box1D': 'x_0', 'BrokenPowerLaw1D': 'x_break', 'Empirical1D': 'points', 'ExponentialCutoffPowerLaw1D': 'x_0', 'Gaussian1D': 'mean', 'GaussianAbsorption1D': 'mean', 'GaussianFlux1D': 'mean', 'LogParabola1D': 'x_0', 'Lorentz1D': 'x_0', 'RickerWavelet1D': 'x_0', 'MexicanHat1D': 'x_0', 'PowerLaw1D': 'x_0', 'Trapezoid1D': 'x_0'} def __init__(self, modelclass, clean_meta=False, **kwargs): # Does not handle multiple model sets for now; too complicated. n_models = kwargs.pop('n_models', 1) if n_models != 1: raise exceptions.SynphotError('Model can only have n_models=1') other_meta = {} # This is needed for internal math operations to build composite model. # Handles the model instance, not class. Assume it is already in the # correct units and _n_models. if isinstance(modelclass, Model): self._model = modelclass if isinstance(modelclass, CompoundModel): clean_meta = True elif isinstance(modelclass, BaseSpectrum): other_meta = modelclass.meta # External metadata self._model = modelclass.model elif not issubclass(modelclass, Model): raise exceptions.SynphotError( '{0} is not a valid model class.'.format(modelclass)) else: modelname = modelclass.__name__ if modelname not in self._model_param_dict: raise exceptions.SynphotError( '{0} is not supported.'.format(modelname)) modargs = {} # Process wavelength needed for flux conversion first, # if applicable. if modelname in self._model_fconv_wav: pname_wav = self._model_fconv_wav[modelname] pval_wav = self._process_wave_param(kwargs.pop(pname_wav)) modargs[pname_wav] = pval_wav else: pname_wav = '' pval_wav = None # Process the rest of the parameters. for pname, kval in kwargs.items(): if pname in self._model_param_dict[modelname]: ptype = self._model_param_dict[modelname][pname] if ptype == 'wave': pval = self._process_wave_param(kval) elif ptype == 'flux': pval = self._process_flux_param(kval, pval_wav) elif ptype == 'noconv': pval = kval else: pval = self._process_generic_param(kval, ptype) else: pval = kval modargs[pname] = pval self._model = modelclass(**modargs) # NOTE: This does not pick up any later changes to model metadata! # Start with model metadata. Others can be added later as needed # without affecting model metadata. m_meta = get_metadata(self._model) # Merge compound model meta self.meta = {} self._merge_meta(m_meta, other_meta, self, clean=clean_meta) @staticmethod def _get_meta(obj): """Extract metadata, if any, from given object.""" if hasattr(obj, 'meta'): # Spectrum or model meta = deepcopy(obj.meta) elif isinstance(obj, dict): # Metadata meta = deepcopy(obj) else: # Number meta = {} return meta @staticmethod def _merge_meta(left, right, result, clean=True): """Merge metadata from left and right onto results. This is used during class initialization. This should also be used by operators to merge metadata after creating a new instance but before returning it. Result's metadata is modified in-place. Parameters ---------- left, right : number, `BaseSpectrum`, or `~astropy.modeling.models` Inputs of an operation. result : `BaseSpectrum` Output spectrum object. clean : bool Remove ``'header'`` and ``'expr'`` entries from inputs. """ # Copies are returned because they need some clean-up below. left = BaseSpectrum._get_meta(left) right = BaseSpectrum._get_meta(right) # Remove these from going into result to avoid mess. # header = FITS header metadata # expr = ASTROLIB PYSYNPHOT expression if clean: for key in ('header', 'expr'): for d in (left, right): if key in d: del d[key] mid = metadata.merge(left, right, metadata_conflicts='silent') result.meta = metadata.merge(result.meta, mid, metadata_conflicts='silent') @staticmethod def _process_generic_param(pval, def_unit, equivalencies=[]): """Process generic model parameter.""" if isinstance(pval, u.Quantity): outval = pval.to_value(def_unit, equivalencies) else: # Assume already in desired unit outval = pval return outval def _process_wave_param(self, pval): """Process individual model parameter representing wavelength.""" return self._process_generic_param( pval, self._internal_wave_unit, equivalencies=u.spectral()) def _process_flux_param(self, pval, wave): """Process individual model parameter representing flux/throughput. Parameters ---------- pval : number, array, or Quantity Input to be processed. wave : Quantity or `None` Wavelength for flux conversion, if applicable. Returns ------- outval : number or array Input converted to internal unit. """ raise NotImplementedError('To be implemented by subclasses.') @staticmethod def _validate_flux_unit(new_unit): """Make sure flux unit is valid. Parameters ---------- new_unit : str or Unit Unit to validate. Returns ------- new_unit Output from :func:`~synphot.units.validate_unit`. """ raise NotImplementedError('To be implemented by subclasses.') @property def model(self): """Model of the spectrum/bandpass.""" return self._model @property def warnings(self): """Dictionary of warning key-value pairs related to spectrum/bandpass. """ return self.meta.get('warnings', {}) @warnings.setter def warnings(self, val): if 'warnings' not in self.meta: self.meta['warnings'] = {} self.meta['warnings'].update(val) @property def waveset(self): """Optimal wavelengths for sampling the spectrum or bandpass.""" w = get_waveset(self.model) if w is not None: utils.validate_wavelengths(w) w = w * self._internal_wave_unit return w @property def waverange(self): """Range of `waveset`.""" if self.waveset is None: x = [None, None] else: x = u.Quantity([self.waveset.min(), self.waveset.max()]) return x def __str__(self): """Descriptive information of the spectrum or bandpass.""" return '{0}\n{1}'.format(self.__class__.__name__, str(self.model)) def _validate_wavelengths(self, wave): """Validate wavelengths for sampling.""" if wave is None: if self.waveset is None: raise exceptions.SynphotError( 'self.waveset is undefined; ' 'Provide wavelengths for sampling.') wavelengths = self.waveset else: w = self._process_wave_param(wave) utils.validate_wavelengths(w) wavelengths = w * self._internal_wave_unit return wavelengths def __call__(self, wavelengths): """Sample the spectrum or bandpass. Parameters ---------- wavelengths : array-like or `~astropy.units.quantity.Quantity` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. Returns ------- sampled_result : `~astropy.units.quantity.Quantity` Sampled flux or throughput in pre-defined internal unit. Might have negative values. """ w = self._validate_wavelengths(wavelengths) return self.model(w.value) * self._internal_flux_unit # Operators are to be implemented by subclasses, where applicable. def __add__(self, other): # pragma: no cover """Add self and other.""" raise NotImplementedError('This operation is not supported.') def __sub__(self, other): # pragma: no cover """Subtract other from self.""" raise NotImplementedError('This operation is not supported.') @staticmethod def _validate_other_mul_div(other): """Conditions for other to satisfy before mul/div.""" if not isinstance(other, (u.Quantity, numbers.Number, BaseUnitlessSpectrum, SourceSpectrum)): raise exceptions.IncompatibleSources( 'Can only operate on scalar number/Quantity or spectrum') elif (isinstance(other, u.Quantity) and (other.unit.decompose() != u.dimensionless_unscaled or not np.isscalar(other.value) or not isinstance(other.value, numbers.Real))): raise exceptions.IncompatibleSources( 'Can only operate on real scalar dimensionless Quantity') elif (isinstance(other, numbers.Number) and not (np.isscalar(other) and isinstance(other, numbers.Real))): raise exceptions.IncompatibleSources( 'Can only operate on real scalar number') def __mul__(self, other): # pragma: no cover """Multiply self and other.""" raise NotImplementedError('This operation is not supported.') def __rmul__(self, other): """This is only called if ``other.__mul__`` cannot operate.""" return self.__mul__(other) def __truediv__(self, other): # pragma: no cover """Divide self by other.""" raise NotImplementedError('This operation is not supported.') def __div__(self, other): # pragma: py2 """Same as :meth:`__truediv__` for Python 2 compatibility without future import. """ return self.__truediv__(other) def integrate(self, wavelengths=None, integration_type=None, **kwargs): """Perform integration. When integration is not analytical and wavelengths are provided, flux or throughput is first resampled. This is useful when user wants to integrate at specific end points or use custom spacing; In that case, user can pass in desired sampling array generated with :func:`numpy.linspace`, :func:`numpy.logspace`, etc. If not provided, then `waveset` is used. When integration is analytical, wavelengths provided are only used if applicable for the particular model. If the model does not support analytical integration, it will fall back to simple trapezoid integration. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for integration. This is ignored by analytical integration if not applicable. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. integration_type : {None, 'trapezoid', 'analytical'} Defines how the integration is done, either by simple trapezoid integration or analytical formula. If `None`, the option is pulled from ``synphot.config.conf.default_integrator``. If analytical integration is requested but no possible, trapezoid integration is done anyway. flux_unit : str, `~astropy.units.Unit`, or `None` **This option is only available for source spectrum.** For trapezoid integration, flux is converted to this unit for sampling before integration. For analytical integration, while calculation is done differently, providing this option would result in equivalent behavior as trapezoid integration, where possible, for consistency. If not given, internal unit is used. kwargs : dict **This option is only available for source spectrum.** Other optional keywords besides ``flux_unit`` to ``__call__`` for sampling when integration type is not analytical. Returns ------- result : `~astropy.units.quantity.Quantity` Integrated result. Raises ------ NotImplementedError Invalid integration type. synphot.exceptions.SynphotError `waveset` is needed but undefined or cannot integrate natively in the given ``flux_unit``. """ # For non-analytical integration: # Cannot integrate per Hz units natively across wavelength # without converting them to per Angstrom unit first, so # less misleading to just disallow that option for now. # For analytical integration: Keep the same behavior for consistency. flux_unit = kwargs.get('flux_unit') is_unitless = self._internal_flux_unit == units.THROUGHPUT if flux_unit is not None: if is_unitless: raise exceptions.SynphotError( 'flux_unit cannot be used with unitless spectrum') else: flux_unit = self._validate_flux_unit(flux_unit, wav_only=True) x = self._validate_wavelengths(wavelengths) if integration_type is None: integration_type = conf.default_integrator # NOTE: Emitting warning is not done because it overcomplicates # the logic here. # Fallback to trapezoid if analytical not possible. if (integration_type == 'analytical' and not hasattr(self.model, 'integrate')): integration_type = 'trapezoid' if integration_type == 'trapezoid': y = abs(self(x, **kwargs)) # Unsigned area result = abs(trapezoid(y, x=x)) elif integration_type == 'analytical': result = self.model.integrate(x) # TODO: Remove unit hardcoding when we use model with units # natively. if not is_unitless and result.unit.physical_type == 'length': result = result * self._internal_flux_unit # NOTE: flux_unit is flux density, not integrated. # Use wavelength for unit conversion, if applicable. if not is_unitless and flux_unit is not None: modelname = self.model.__class__.__name__ if modelname in self._model_fconv_wav: pname_wav = self._model_fconv_wav[modelname] wav = getattr(self.model, pname_wav).value with u.add_enabled_equivalencies(u.spectral()): wav = u.Quantity(wav, self._internal_wave_unit) to_unit = flux_unit * self._internal_wave_unit result = units.convert_flux(wav, result, to_unit) else: raise NotImplementedError( '{} is not a supported integration ' 'type'.format(integration_type)) # Ensure final unit takes account of integration across wavelength # and make it pretty, where applicable. if not is_unitless: result_unit_str = result.unit.to_string() if 'ph' in result_unit_str or 'PHOTLAM' in result_unit_str: result = result.to(u.photon / (u.cm**2 * u.s)) else: # FLAM result = result.to(u.erg / (u.cm**2 * u.s)) return result def avgwave(self, wavelengths=None): """Calculate the :ref:`average wavelength `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. Returns ------- avg_wave : `~astropy.units.quantity.Quantity` Average wavelength. """ x = self._validate_wavelengths(wavelengths).value y = self(x).value num = trapezoid(y * x, x=x) den = trapezoid(y, x=x) if den == 0: # pragma: no cover avg_wave = 0.0 else: avg_wave = abs(num / den) return avg_wave * self._internal_wave_unit def barlam(self, wavelengths=None): """Calculate :ref:`mean log wavelength `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. Returns ------- bar_lam : `~astropy.units.quantity.Quantity` Mean log wavelength. """ x = self._validate_wavelengths(wavelengths).value y = self(x).value num = trapezoid(y * np.log(x) / x, x=x) den = trapezoid(y / x, x=x) if num == 0 or den == 0: # pragma: no cover bar_lam = 0.0 else: bar_lam = np.exp(abs(num / den)) return bar_lam * self._internal_wave_unit def pivot(self, wavelengths=None): """Calculate :ref:`pivot wavelength `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. Returns ------- pivwv : `~astropy.units.quantity.Quantity` Pivot wavelength. """ x = self._validate_wavelengths(wavelengths).value y = self(x).value num = trapezoid(y * x, x=x) den = trapezoid(y / x, x=x) if den == 0: # pragma: no cover pivwv = 0.0 else: pivwv = np.sqrt(abs(num / den)) return pivwv * self._internal_wave_unit def force_extrapolation(self): """Force the underlying model to extrapolate. An example where this is useful: You create a source spectrum with non-default extrapolation behavior and you wish to force the underlying empirical model to extrapolate based on nearest point. .. note:: This is only applicable to `~synphot.models.Empirical1D` model and should still work even if the source spectrum has been redshifted. Returns ------- is_forced : bool `True` if the model is successfully forced to be extrapolated, else `False`. """ # We use _model here in case the spectrum is redshifted. if isinstance(self._model, Empirical1D): self._model.fill_value = np.nan is_forced = True else: is_forced = False return is_forced def taper(self, wavelengths=None): """Taper the spectrum or bandpass. The wavelengths to use for the first and last points are calculated by using the same ratio as for the 2 interior points. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for tapering. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. Returns ------- sp : `BaseSpectrum` Tapered empirical spectrum or bandpass. ``self`` is returned if already tapered (e.g., box model). """ x = self._validate_wavelengths(wavelengths) # Calculate new end points for tapering w1 = x[0] ** 2 / x[1] w2 = x[-1] ** 2 / x[-2] # Special handling for empirical data. # This is to be compatible with ASTROLIB PYSYNPHOT behavior. if isinstance(self._model, Empirical1D): y1 = self._model.lookup_table[0] y2 = self._model.lookup_table[-1] # Other models can just evaluate at new end points else: y1 = self(w1) y2 = self(w2) # Nothing to do if y1 == 0 and y2 == 0: return self # Do we need a deepcopy here? y = self(x) if y1 != 0: x = np.insert(x, 0, w1) y = np.insert(y, 0, 0.0 * y.unit) if y2 != 0: x = np.insert(x, x.size, w2) y = np.insert(y, y.size, 0.0 * y.unit) return self.__class__(Empirical1D, points=x, lookup_table=y) def _get_arrays(self, wavelengths, **kwargs): """Get sampled spectrum or bandpass in user units.""" x = self._validate_wavelengths(wavelengths) y = self(x, **kwargs) if isinstance(wavelengths, u.Quantity): w = x.to(wavelengths.unit, u.spectral()) else: w = x return w, y @staticmethod def _do_plot(x, y, title='', xlog=False, ylog=False, left=None, right=None, bottom=None, top=None, save_as=''): # pragma: no cover """Plot worker. Parameters ---------- x, y : `~astropy.units.quantity.Quantity` Wavelength and flux/throughput to plot. kwargs See :func:`plot`. """ try: import matplotlib.pyplot as plt except ImportError: log.error('No matplotlib installation found; plotting disabled ' 'as a result.') return fig, ax = plt.subplots() ax.plot(x, y) # Custom wavelength limits if left is not None: ax.set_xlim(left=left) if right is not None: ax.set_xlim(right=right) # Custom flux/throughput limit if bottom is not None: ax.set_ylim(bottom=bottom) if top is not None: ax.set_ylim(top=top) xu = x.unit if xu.physical_type == 'frequency': ax.set_xlabel('Frequency ({0})'.format(xu)) else: ax.set_xlabel('Wavelength ({0})'.format(xu)) yu = y.unit if yu is u.dimensionless_unscaled: ax.set_ylabel('Unitless') else: ax.set_ylabel('Flux ({0})'.format(yu)) if title: ax.set_title(title) if xlog: ax.set_xscale('log') if ylog: ax.set_yscale('log') plt.draw() if save_as: plt.savefig(save_as) log.info('Plot saved as {0}'.format(save_as)) def plot(self, wavelengths=None, **kwargs): # pragma: no cover """Plot the spectrum. .. note:: Uses ``matplotlib``. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, `waveset` is used. title : str Plot title. xlog, ylog : bool Plot X and Y axes, respectively, in log scale. Default is linear scale. left, right : `None` or number Minimum and maximum wavelengths to plot. If `None`, uses the whole range. If a number is given, must be in Angstrom. bottom, top : `None` or number Minimum and maximum flux/throughput to plot. If `None`, uses the whole range. If a number is given, must be in internal unit. save_as : str Save the plot to an image file. The file type is automatically determined by given file extension. Raises ------ synphot.exceptions.SynphotError Invalid inputs. """ w, y = self._get_arrays(wavelengths) self._do_plot(w, y, **kwargs) @classmethod def from_spectrum1d(cls, spec, keep_neg=False): """Create a spectrum from `specutils.Spectrum1D` object. Parameters ---------- spec : `specutils.Spectrum1D` keep_neg : bool See `~synphot.models.Empirical1D`. Returns ------- sp : `BaseSourceSpectrum` Empirical spectrum. """ # Remove masking here if specutils does it natively, see # https://github.com/astropy/specutils/issues/585 if spec.mask is not None: msk = ~spec.mask points = spec.spectral_axis[msk] lookup_table = spec.flux[msk] else: points = spec.spectral_axis lookup_table = spec.flux # Spectrum is designed to be immutable, so no need to make # copies of spectral_axis nor flux. return cls(Empirical1D, points=points, lookup_table=lookup_table, keep_neg=keep_neg, meta={'header': spec.meta.copy()}) def to_spectrum1d(self, wavelengths=None, **kwargs): """Create a `specutils.Spectrum1D` object from spectrum. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. flux_unit : str, `~astropy.units.Unit`, or `None` This option is not applicable to unitless spectrum like bandpass. Flux is converted to this unit before written out. If not given, internal unit is used. Count and magnitudes are not supported. Returns ------- spec : `specutils.Spectrum1D` Raises ------ ImportError ``specutils`` is not installed. """ from synphot.compat import HAS_SPECUTILS if not HAS_SPECUTILS: # pragma: no cover raise ImportError('specutils must be installed to use this method') from synphot.compat_specutils import Spectrum w, y = self._get_arrays(wavelengths, **kwargs) return Spectrum(spectral_axis=w, flux=y, meta=self.meta.copy()) class BaseSourceSpectrum(BaseSpectrum): """Base class to handle spectrum with flux unit like source spectrum and observation. Do not use directly. """ _internal_flux_unit = units.PHOTLAM @staticmethod def _validate_flux_unit(new_unit, wav_only=False): """Make sure flux unit is valid.""" new_unit = units.validate_unit(new_unit) acceptable_types = ['spectral flux density wav', 'photon flux density wav'] acceptable_names = ['PHOTLAM', 'FLAM'] if not wav_only: # Include per Hz units acceptable_types += ['spectral flux density', 'photon flux density'] acceptable_names += ['PHOTNU', 'FNU', 'Jy'] if new_unit.physical_type not in acceptable_types: raise exceptions.SynphotError( 'Source spectrum cannot operate in {0}. Acceptable units: ' '{1}'.format(new_unit, ','.join(acceptable_names))) return new_unit def __call__(self, wavelengths, flux_unit=None, **kwargs): """Sample the spectrum. Parameters ---------- wavelengths : array-like or `~astropy.units.quantity.Quantity` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. flux_unit : str, `~astropy.units.Unit`, or `None` Flux is converted to this unit. If not given, internal unit is used. kwargs : dict Keywords acceptable by :func:`~synphot.units.convert_flux`. Returns ------- sampled_result : `~astropy.units.quantity.Quantity` Sampled flux in the given unit. Might have negative values. """ w = self._validate_wavelengths(wavelengths) y = self.model(w.value) * self._internal_flux_unit if flux_unit is None: sampled_result = y else: sampled_result = units.convert_flux(w, y, flux_unit, **kwargs) return sampled_result def normalize(self, renorm_val, band=None, wavelengths=None, force=False, area=None, vegaspec=None): """Renormalize the spectrum to the given Quantity and band. .. warning:: Redshift attribute (``z``) is reset to 0 in the normalized spectrum even if ``self.z`` is non-zero. This is because the normalization simply adds a scale factor to the existing composite model. This is confusing but should not affect the flux sampling. Parameters ---------- renorm_val : number or `~astropy.units.quantity.Quantity` Value to renormalize the spectrum to. If not a Quantity, assumed to be in internal unit. band : `SpectralElement` Bandpass to use in renormalization. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for renormalization. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. force : bool By default (`False`), renormalization is only done when band wavelength limits are within ``self`` or at least 99% of the flux is within the overlap. Set to `True` to force renormalization for partial overlap (this changes the underlying model of ``self`` to always extrapolate, if applicable). Disjoint bandpass raises an exception regardless. area, vegaspec See :func:`~synphot.units.convert_flux`. Returns ------- sp : obj Renormalized spectrum. Raises ------ synphot.exceptions.DisjointError Renormalization band does not overlap with ``self``. synphot.exceptions.PartialOverlap Renormalization band only partially overlaps with ``self`` and significant amount of flux falls outside the overlap. synphot.exceptions.SynphotError Invalid inputs or calculation failed. """ warndict = {} if band is None: sp = self else: if not isinstance(band, SpectralElement): raise exceptions.SynphotError('Invalid bandpass.') stat = band.check_overlap(self, wavelengths=wavelengths) if stat == 'none': raise exceptions.DisjointError( 'Spectrum and renormalization band are disjoint.') elif 'partial' in stat: if stat == 'partial_most': warn_str = 'At least' elif stat == 'partial_notmost' and force: warn_str = 'Less than' else: raise exceptions.PartialOverlap( 'Spectrum and renormalization band do not fully ' 'overlap. You may use force=True to force the ' 'renormalization to proceed.') warn_str = ( 'Spectrum is not defined everywhere in renormalization ' 'bandpass. {0} 99% of the band throughput has ' 'data. Spectrum will be').format(warn_str) if self.force_extrapolation(): warn_str = ('{0} extrapolated at constant ' 'value.').format(warn_str) else: warn_str = ('{0} evaluated outside pre-defined ' 'waveset.').format(warn_str) warnings.warn(warn_str, AstropyUserWarning) warndict['PartialRenorm'] = warn_str elif stat != 'full': # pragma: no cover raise exceptions.SynphotError( 'Overlap result of {0} is unexpected.'.format(stat)) sp = self.__mul__(band) if not isinstance(renorm_val, u.Quantity): renorm_val = renorm_val * self._internal_flux_unit renorm_unit_name = renorm_val.unit.to_string() w = sp._validate_wavelengths(wavelengths) if (renorm_val.unit == u.count or renorm_unit_name == units.OBMAG.to_string()): # Special handling for non-density units flux_tmp = sp(w, flux_unit=u.count, area=area) totalflux = flux_tmp.sum().value stdflux = 1.0 else: totalflux = sp.integrate(wavelengths=wavelengths, integration_type='trapezoid') # VEGAMAG if renorm_unit_name == units.VEGAMAG.to_string(): if not isinstance(vegaspec, SourceSpectrum): raise exceptions.SynphotError( 'Vega spectrum is missing.') stdspec = vegaspec # Magnitude flux-density units elif renorm_val.unit in (u.STmag, u.ABmag): stdspec = SourceSpectrum( ConstFlux1D, amplitude=(0 * renorm_val.unit)) # Linear flux-density units else: stdspec = SourceSpectrum( ConstFlux1D, amplitude=(1 * renorm_val.unit)) if band is None: # TODO: Cannot get this to agree with results # from using a very large box bandpass. # stdflux = stdspec.integrate(wavelengths=w).value raise NotImplementedError('Must provide a bandpass') else: up = stdspec * band stdflux = up.integrate(wavelengths=wavelengths, integration_type='trapezoid') utils.validate_totalflux(totalflux) # Renormalize in magnitudes if (renorm_val.unit.decompose() == u.mag or isinstance(renorm_val.unit, u.LogUnit)): const = renorm_val.value + (2.5 * np.log10(totalflux / stdflux)) newsp = self.__mul__(10**(-0.4 * const)) # Renormalize in linear flux units else: const = renorm_val.value * (stdflux / totalflux) newsp = self.__mul__(const) newsp.warnings = warndict return newsp class SourceSpectrum(BaseSourceSpectrum): """Class to handle source spectrum. Parameters ---------- modelclass, kwargs See `BaseSpectrum`. z : number Redshift to apply to model. z_type : {'wavelength_only', 'conserve_flux'} Redshift can be done in one of the following ways: * ``'wavelength_only'`` only shifts the wavelength without adjusting the flux. This is the default behavior to be backward compatible with ASTROLIB PYSYNPHOT. * ``'conserve_flux'`` also scales the flux to conserve it. """ def __init__(self, modelclass, z=0, z_type='wavelength_only', **kwargs): self._valid_z_types = ('wavelength_only', 'conserve_flux') self.z_type = z_type self.z = z super(SourceSpectrum, self).__init__(modelclass, **kwargs) def _process_flux_param(self, pval, wave): """Process individual model parameter representing flux.""" if isinstance(pval, u.Quantity): self._validate_flux_unit(pval.unit) outval = units.convert_flux(self._redshift_model(wave), pval, self._internal_flux_unit).value else: # Assume already in internal unit outval = pval return outval @property def model(self): """Model of the spectrum with given redshift.""" if self.z == 0: m = self._model else: # wavelength if self._internal_wave_unit.physical_type == 'length': rs = self._redshift_model.inverse # frequency or wavenumber # NOTE: This will never execute as long as internal wavelength # unit remains Angstrom. else: # pragma: no cover rs = self._redshift_model if self.z_type == 'wavelength_only': m = rs | self._model else: # conserve_flux m = rs | self._model | self._redshift_flux_model return m @property def z(self): """Redshift of the source spectrum.""" return self._z @z.setter def z(self, what): """Change redshift.""" if not isinstance(what, numbers.Real): raise exceptions.SynphotError( 'Redshift must be a real scalar number.') self._z = float(what) self._redshift_model = RedshiftScaleFactor(self._z) if self.z_type == 'wavelength_only': self._redshift_flux_model = None else: # conserve_flux self._redshift_flux_model = Scale(1 / (1 + self._z)) @property def z_type(self): """Redshift behavior.""" return self._z_type @z_type.setter def z_type(self, what): if what not in self._valid_z_types: raise exceptions.SynphotError( '{0} is not a valid redshift behavior, choose ' 'from {1}'.format(what, self._valid_z_types)) self._z_type = what def __str__(self): """Descriptive information of the spectrum.""" return '{0} at z={1}\n{2}'.format( self.__class__.__name__, self.z, str(self.model)) def _validate_other_add_sub(self, other): """Conditions for other to satisfy before add/sub.""" if not isinstance(other, self.__class__): raise exceptions.IncompatibleSources( 'Can only operate on {0}.'.format(self.__class__.__name__)) def __add__(self, other): """Add ``self`` with ``other``.""" self._validate_other_add_sub(other) result = self.__class__(self.model + other.model) self._merge_meta(self, other, result) return result def __sub__(self, other): """Subtract other from self.""" self._validate_other_add_sub(other) result = self.__class__(self.model - other.model) self._merge_meta(self, other, result) return result def __mul__(self, other): """Multiply self and other.""" self._validate_other_mul_div(other) if isinstance(other, (u.Quantity, numbers.Number)): newcls = self.__class__(self.model | Scale(other)) elif isinstance(other, BaseUnitlessSpectrum): newcls = self.__class__(self.model * other.model) else: # Source spectrum raise exceptions.IncompatibleSources( 'Cannot multiply two source spectra together') self._merge_meta(self, other, newcls) return newcls def __truediv__(self, other): """Divide self by other.""" self._validate_other_mul_div(other) if isinstance(other, (u.Quantity, numbers.Number)): newcls = self.__class__(self.model | Scale(1 / other)) elif isinstance(other, BaseUnitlessSpectrum): newcls = self.__class__(self.model / other.model) else: # Source spectrum newcls = BaseUnitlessSpectrum(self.model / other.model) self._merge_meta(self, other, newcls) return newcls def plot(self, wavelengths=None, flux_unit=None, area=None, vegaspec=None, **kwargs): # pragma: no cover """Plot the spectrum. .. note:: Uses :mod:`matplotlib`. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for integration. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. flux_unit : str, `~astropy.units.Unit`, or `None` Flux is converted to this unit for plotting. If not given, internal unit is used. area, vegaspec See :func:`~synphot.units.convert_flux`. kwargs : dict See :func:`BaseSpectrum.plot`. Raises ------ synphot.exceptions.SynphotError Invalid inputs. """ w, y = self._get_arrays(wavelengths, flux_unit=flux_unit, area=area, vegaspec=vegaspec) self._do_plot(w, y, **kwargs) def to_fits(self, filename, wavelengths=None, flux_unit=None, area=None, vegaspec=None, **kwargs): """Write the spectrum to a FITS file. Parameters ---------- filename : str Output filename. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. flux_unit : str, `~astropy.units.Unit`, or `None` Flux is converted to this unit before written out. If not given, internal unit is used. area, vegaspec See :func:`~synphot.units.convert_flux`. kwargs : dict Keywords accepted by :func:`~synphot.specio.write_fits_spec`. """ w, y = self._get_arrays(wavelengths, flux_unit=flux_unit, area=area, vegaspec=vegaspec) # There are some standard keywords that should be added # to the extension header. bkeys = {'tdisp1': 'G15.7', 'tdisp2': 'G15.7'} if 'expr' in self.meta: bkeys['expr'] = (self.meta['expr'], 'synphot expression') if 'ext_header' in kwargs: kwargs['ext_header'].update(bkeys) else: kwargs['ext_header'] = bkeys specio.write_fits_spec(filename, w, y, **kwargs) @classmethod def from_file(cls, filename, keep_neg=False, **kwargs): """Create a spectrum from file. If filename has 'fits' or 'fit' suffix, it is read as FITS. Otherwise, it is read as ASCII. Parameters ---------- filename : str Spectrum filename. keep_neg : bool See `~synphot.models.Empirical1D`. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_fits_spec` (if FITS) or :func:`~synphot.specio.read_ascii_spec` (if ASCII). Returns ------- sp : `SourceSpectrum` Empirical spectrum. """ header, wavelengths, fluxes = specio.read_spec(filename, **kwargs) return cls(Empirical1D, points=wavelengths, lookup_table=fluxes, keep_neg=keep_neg, meta={'header': header}) @classmethod def from_vega(cls, **kwargs): """Load :ref:`Vega spectrum `. Parameters ---------- kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_remote_spec`. Returns ------- vegaspec : `SourceSpectrum` Empirical Vega spectrum. """ filename = conf.vega_file header, wavelengths, fluxes = specio.read_remote_spec( filename, **kwargs) header['filename'] = filename meta = {'header': header, 'expr': 'Vega from {0}'.format(os.path.basename(filename))} return cls(Empirical1D, points=wavelengths, lookup_table=fluxes, meta=meta) class BaseUnitlessSpectrum(BaseSpectrum): """Base class to handle unitless spectrum like bandpass, reddening, etc.""" _internal_flux_unit = units.THROUGHPUT def _process_flux_param(self, pval, wave): """Process individual model parameter representing throughput.""" return self._process_generic_param(pval, self._internal_flux_unit) @staticmethod def _validate_flux_unit(new_unit): # pragma: no cover """Make sure flux unit is valid.""" new_unit = units.validate_unit(new_unit) if new_unit.decompose() != u.dimensionless_unscaled: raise exceptions.SynphotError( 'Unit {0} is not dimensionless'.format(new_unit)) return new_unit def __mul__(self, other): """Multiply self and other.""" do_meta_merge = True self._validate_other_mul_div(other) if isinstance(other, (u.Quantity, numbers.Number)): newcls = self.__class__(self.model | Scale(other)) elif isinstance(other, BaseUnitlessSpectrum): newcls = self.__class__(self.model * other.model) else: # SourceSpectrum do_meta_merge = False newcls = other.__mul__(self) if do_meta_merge: self._merge_meta(self, other, newcls) return newcls def __truediv__(self, other): """Divide self by other.""" self._validate_other_mul_div(other) if isinstance(other, (u.Quantity, numbers.Number)): newcls = self.__class__(self.model | Scale(1 / other)) elif isinstance(other, BaseUnitlessSpectrum): newcls = self.__class__(self.model / other.model) else: # SourceSpectrum raise exceptions.IncompatibleSources( 'Cannot divide by source spectrum') self._merge_meta(self, other, newcls) return newcls class SpectralElement(BaseUnitlessSpectrum): """Class to handle instrument filter bandpass. Parameters ---------- modelclass, kwargs See `BaseSpectrum`. """ def check_overlap(self, other, wavelengths=None, threshold=0.01): """Check for wavelength overlap between two spectra. Only wavelengths where ``self`` throughput is non-zero are considered. Example of full overlap:: |---------- other ----------| |------ self ------| Examples of partial overlap:: |---------- self ----------| |------ other ------| |---- other ----| |---- self ----| |---- self ----| |---- other ----| Examples of no overlap:: |---- self ----| |---- other ----| |---- other ----| |---- self ----| Parameters ---------- other : `BaseSpectrum` wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for integration. If not a Quantity, assumed to be in Angstrom. If `None`, ``waveset`` is used. threshold : float If less than this fraction of flux or throughput falls outside wavelength overlap, the *lack* of overlap is *insignificant*. This is only used when partial overlap is detected. Default is 1%. Returns ------- result : {'full', 'partial_most', 'partial_notmost', 'none'} * 'full' - ``self`` coverage is within or same as ``other`` * 'partial_most' - Less than ``threshold`` fraction of ``self`` flux is outside the overlapping wavelength region, i.e., the *lack* of overlap is *insignificant* * 'partial_notmost' - ``self`` partially overlaps with ``other`` but does not qualify for 'partial_most' * 'none' - ``self`` does not overlap ``other`` Raises ------ synphot.exceptions.SynphotError Invalid inputs. """ if not isinstance(other, BaseSpectrum): raise exceptions.SynphotError( 'other must be spectrum or bandpass.') # Special cases where no sampling wavelengths given and # one of the inputs is continuous. if wavelengths is None: if other.waveset is None: return 'full' if self.waveset is None: return 'partial_notmost' x1 = self._validate_wavelengths(wavelengths) y1 = self(x1) a = x1[y1 > 0] b = other._validate_wavelengths(wavelengths) result = utils.overlap_status(a, b) if result == 'partial': # If there is no need to extrapolate or taper other # (i.e., other is zero at self's wave limits), # then we consider it as a full coverage. # This logic assumes __call__ never returns mag or count! if ((isinstance(other.model, Empirical1D) and other.model.is_tapered() or not isinstance(other.model, (Empirical1D, CompoundModel))) and np.allclose(other(x1[::x1.size - 1]).value, 0)): result = 'full' # Check if the lack of overlap is significant. else: # Get all the flux totalflux = self.integrate(wavelengths=wavelengths, integration_type='trapezoid') utils.validate_totalflux(totalflux) a_min, a_max = a.min(), a.max() b_min, b_max = b.min(), b.max() # Now get the other two pieces excluded = 0.0 * totalflux.unit if a_min < b_min: excluded += self.integrate( wavelengths=u.Quantity([a_min, b_min]), integration_type='trapezoid') if a_max > b_max: excluded += self.integrate( wavelengths=u.Quantity([b_max, a_max]), integration_type='trapezoid') if excluded / totalflux < threshold: result = 'partial_most' else: result = 'partial_notmost' return result def unit_response(self, area, wavelengths=None): """Calculate :ref:`unit response ` of this bandpass. Parameters ---------- area : float or `~astropy.units.quantity.Quantity` Area that flux covers. If not a Quantity, assumed to be in :math:`cm^{2}`. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- uresp : `~astropy.units.quantity.Quantity` Flux (in FLAM) of a star that produces a response of one photon per second in this bandpass. """ a = units.validate_quantity(area, units.AREA) # Only correct if wavelengths are in Angstrom. x = self._validate_wavelengths(wavelengths).to(u.AA) y = self(x) * x int_val = abs(trapezoid(y, x=x)) uresp = units.HC / (a.cgs * int_val) return (uresp / u.s).to(units.FLAM) def rmswidth(self, wavelengths=None, threshold=None): """Calculate the :ref:`bandpass RMS width `. Not to be confused with :func:`photbw`. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. threshold : float or `~astropy.units.quantity.Quantity`, optional Data points with throughput below this value are not included in the calculation. By default, all data points are included. Returns ------- rms_width : `~astropy.units.quantity.Quantity` RMS width of the bandpass. Raises ------ synphot.exceptions.SynphotError Threshold is invalid. """ x = self._validate_wavelengths(wavelengths) y = self(x) if threshold is None: wave = x thru = y else: try: mask = y >= threshold except Exception as e: raise exceptions.SynphotError( '{0} is not a valid threshold: ' '{1}'.format(threshold, str(e))) wave = x[mask] thru = y[mask] a = self.avgwave(wavelengths=wavelengths) num = trapezoid((wave - a) ** 2 * thru, x=wave) den = trapezoid(thru, x=wave) if den == 0: # pragma: no cover rms_width = 0.0 * a.unit else: rms_width = np.sqrt(abs(num / den)) return rms_width def photbw(self, wavelengths=None, threshold=None): """Calculate the :ref:`bandpass RMS width as in IRAF SYNPHOT `. This is a compatibility function. To calculate the actual bandpass RMS width, use :func:`rmswidth`. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. threshold : float or `~astropy.units.quantity.Quantity`, optional Data points with throughput below this value are not included in the calculation. By default, all data points are included. Returns ------- bandw : `~astropy.units.quantity.Quantity` IRAF SYNPHOT RMS width of the bandpass. Raises ------ synphot.exceptions.SynphotError Threshold is invalid. """ x = self._validate_wavelengths(wavelengths) y = self(x) if threshold is None: wave = x thru = y else: try: mask = y >= threshold except Exception as e: raise exceptions.SynphotError( '{0} is not a valid threshold: ' '{1}'.format(threshold, str(e))) wave = x[mask] thru = y[mask] a = self.barlam(wavelengths=wavelengths) if a == 0: bandw = 0.0 * a.unit else: num = trapezoid(thru * np.log(wave / a) ** 2 / wave, x=wave) den = trapezoid(thru / wave, x=wave) if den == 0: # pragma: no cover bandw = 0.0 * a.unit else: bandw = a * np.sqrt(abs(num / den)) return bandw def fwhm(self, **kwargs): """Calculate :ref:`synphot-formula-fwhm` of equivalent gaussian. Parameters ---------- kwargs : dict See :func:`photbw`. Returns ------- fwhm_val : `~astropy.units.quantity.Quantity` FWHM of equivalent gaussian. """ return np.sqrt(8 * np.log(2)) * self.photbw(**kwargs) def tlambda(self, **kwargs): """Calculate throughput at :ref:`bandpass average wavelength `. Parameters ---------- kwargs : dict See :func:`~BaseSpectrum.avgwave`. Returns ------- t_lambda : `~astropy.units.quantity.Quantity` Throughput at bandpass average wavelength. """ return self(self.avgwave(**kwargs)) def tpeak(self, wavelengths=None): """Calculate :ref:`peak bandpass throughput `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- tpeak : `~astropy.units.quantity.Quantity` Peak bandpass throughput. """ x = self._validate_wavelengths(wavelengths) return self(x).max() def wpeak(self, wavelengths=None): """Calculate :ref:`wavelength at peak throughput `. If there are multiple data points with peak throughput value, only the first match is returned. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- wpeak : `~astropy.units.quantity.Quantity` Wavelength at peak throughput. """ x = self._validate_wavelengths(wavelengths) return x[self(x) == self.tpeak(wavelengths=wavelengths)][0] def equivwidth(self, **kwargs): """Calculate :ref:`bandpass equivalent width `. Parameters ---------- kwargs : dict See :meth:`~synphot.spectrum.BaseSpectrum.integrate`. Returns ------- equvw : `~astropy.units.quantity.Quantity` Bandpass equivalent width. """ return self.integrate(**kwargs) def rectwidth(self, wavelengths=None): """Calculate :ref:`bandpass rectangular width `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- rectw : `~astropy.units.quantity.Quantity` Bandpass rectangular width. """ equvw = self.equivwidth(wavelengths=wavelengths, integration_type='trapezoid') tpeak = self.tpeak(wavelengths=wavelengths) if tpeak.value == 0: # pragma: no cover rectw = 0.0 * self._internal_wave_unit else: rectw = equvw / tpeak return rectw def efficiency(self, wavelengths=None): """Calculate :ref:`dimensionless efficiency `. Parameters ---------- wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. Returns ------- qtlam : `~astropy.units.quantity.Quantity` Dimensionless efficiency. """ x = self._validate_wavelengths(wavelengths) y = self(x) return abs(trapezoid(y / x, x=x)) def emflx(self, area, wavelengths=None): """Calculate :ref:`equivalent monochromatic flux `. Parameters ---------- area, wavelengths See :func:`unit_response`. Returns ------- em_flux : `~astropy.units.quantity.Quantity` Equivalent monochromatic flux. """ t_lambda = self.tlambda(wavelengths=wavelengths) if t_lambda == 0: # pragma: no cover em_flux = 0.0 * units.FLAM else: uresp = self.unit_response(area, wavelengths=wavelengths) equvw = self.equivwidth(wavelengths=wavelengths, integration_type='trapezoid') em_flux = uresp * equvw / (t_lambda * self._internal_wave_unit) return em_flux def to_fits(self, filename, wavelengths=None, **kwargs): """Write the bandpass to a FITS file. Throughput column is automatically named 'THROUGHPUT'. Parameters ---------- filename : str Output filename. wavelengths : array-like, `~astropy.units.quantity.Quantity`, or `None` Wavelength values for sampling. If not a Quantity, assumed to be in Angstrom. If `None`, ``self.waveset`` is used. kwargs : dict Keywords accepted by :func:`~synphot.specio.write_fits_spec`. """ w, y = self._get_arrays(wavelengths) kwargs['flux_col'] = 'THROUGHPUT' kwargs['flux_unit'] = self._internal_flux_unit # There are some standard keywords that should be added # to the extension header. bkeys = {'tdisp1': 'G15.7', 'tdisp2': 'G15.7'} if 'expr' in self.meta: bkeys['expr'] = (self.meta['expr'], 'synphot expression') if 'ext_header' in kwargs: kwargs['ext_header'].update(bkeys) else: kwargs['ext_header'] = bkeys specio.write_fits_spec(filename, w, y, **kwargs) @classmethod def from_file(cls, filename, **kwargs): """Creates a bandpass from file. If filename is recognized by ``astropy.io.fits`` as FITS, it is read as such. Otherwise, it is read as ASCII. Parameters ---------- filename : str Bandpass filename. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_fits_spec` (if FITS) or :func:`~synphot.specio.read_ascii_spec` (if ASCII). Returns ------- bp : `SpectralElement` Empirical bandpass. """ if is_fits("", filename, None): if 'flux_col' not in kwargs: kwargs['flux_col'] = 'THROUGHPUT' elif 'flux_unit' not in kwargs: # pragma: no cover kwargs['flux_unit'] = cls._internal_flux_unit header, wavelengths, throughput = specio.read_spec(filename, **kwargs) return cls(Empirical1D, points=wavelengths, lookup_table=throughput, keep_neg=True, meta={'header': header}) @classmethod def from_filter(cls, filtername, **kwargs): """Load :ref:`pre-defined filter bandpass `. Parameters ---------- filtername : str Filter name. Choose from 'bessel_j', 'bessel_h', 'bessel_k', 'cousins_r', 'cousins_i', 'johnson_u', 'johnson_b', 'johnson_v', 'johnson_r', 'johnson_i', 'johnson_j', or 'johnson_k'. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_remote_spec`. Returns ------- bp : `SpectralElement` Empirical bandpass. Raises ------ synphot.exceptions.SynphotError Invalid filter name. """ filtername = filtername.lower() # Select filename based on filter name if filtername == 'bessel_j': cfgitem = Conf.bessel_j_file elif filtername == 'bessel_h': cfgitem = Conf.bessel_h_file elif filtername == 'bessel_k': cfgitem = Conf.bessel_k_file elif filtername == 'cousins_r': cfgitem = Conf.cousins_r_file elif filtername == 'cousins_i': cfgitem = Conf.cousins_i_file elif filtername == 'johnson_u': cfgitem = Conf.johnson_u_file elif filtername == 'johnson_b': cfgitem = Conf.johnson_b_file elif filtername == 'johnson_v': cfgitem = Conf.johnson_v_file elif filtername == 'johnson_r': cfgitem = Conf.johnson_r_file elif filtername == 'johnson_i': cfgitem = Conf.johnson_i_file elif filtername == 'johnson_j': cfgitem = Conf.johnson_j_file elif filtername == 'johnson_k': cfgitem = Conf.johnson_k_file else: raise exceptions.SynphotError( 'Filter name {0} is invalid.'.format(filtername)) filename = cfgitem() if is_fits("", filename, None): if 'flux_col' not in kwargs: kwargs['flux_col'] = 'THROUGHPUT' elif 'flux_unit' not in kwargs: # pragma: no cover kwargs['flux_unit'] = cls._internal_flux_unit header, wavelengths, throughput = specio.read_remote_spec( filename, **kwargs) header['filename'] = filename header['descrip'] = cfgitem.description meta = {'header': header, 'expr': filtername} return cls(Empirical1D, points=wavelengths, lookup_table=throughput, meta=meta) spacetelescope-synphot_refactor-c682dc1/synphot/src/000077500000000000000000000000001511632712700230145ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/src/synphot_utils.c000066400000000000000000000066551511632712700261200ustar00rootroot00000000000000/* Licensed under a 3-clause BSD style license - see LICENSE.rst */ #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include "Python.h" #include #include "synphot_utils.h" static PyObject * py_calcbinflux(PyObject *self, PyObject *args) { /* input variables */ const int out_arr_len; PyObject *oindices, *oindices_last, *oavflux, *odeltaw; PyArrayObject *indices, *indices_last, *avflux, *deltaw; /* local variables */ npy_intp i, j; npy_intp num_indices, first, last; double flux_sum, delta_sum; /* return variables */ npy_intp *out_dim; PyArrayObject *binflux, *intwave; /* put arguments into variables */ if (!PyArg_ParseTuple(args, "iOOOO", &out_arr_len, &oindices, &oindices_last, &oavflux, &odeltaw)) { return NULL; } /* turn inputs into numpy array types */ indices = (PyArrayObject *) PyArray_FROMANY(oindices, NPY_INT64, 1, 1, NPY_ARRAY_IN_ARRAY); indices_last = (PyArrayObject *) PyArray_FROMANY(oindices_last, NPY_INT64, 1, 1, NPY_ARRAY_IN_ARRAY); avflux = (PyArrayObject *) PyArray_FROMANY(oavflux, NPY_FLOAT64, 1, 1, NPY_ARRAY_IN_ARRAY); deltaw = (PyArrayObject *) PyArray_FROMANY(odeltaw, NPY_FLOAT64, 1, 1, NPY_ARRAY_IN_ARRAY); if (!indices || !indices_last || !avflux || !deltaw) { return NULL; } /* finish creating return variables */ out_dim = (npy_intp *) malloc(1 * sizeof(npy_intp)); out_dim[0] = (npy_intp) out_arr_len; binflux = (PyArrayObject *) PyArray_SimpleNew(1, out_dim, NPY_FLOAT64); intwave = (PyArrayObject *) PyArray_SimpleNew(1, out_dim, NPY_FLOAT64); if (!binflux || !intwave) { return NULL; } num_indices = PyArray_DIM(indices,0); for (i = 0; i < num_indices; i++) { first = (npy_intp) *(npy_int64 *) PyArray_GETPTR1(indices,i); last = (npy_intp) *(npy_int64 *) PyArray_GETPTR1(indices_last,i); flux_sum = 0.0; delta_sum = 0.0; for (j = first; j < last; j++) { delta_sum += *(double *) PyArray_GETPTR1(deltaw, j); flux_sum += (*(double *) PyArray_GETPTR1(avflux, j)) * (*(double *) PyArray_GETPTR1(deltaw, j)); } if (delta_sum == 0) { PyErr_SetString(PyExc_ZeroDivisionError, "Division by zero in synphot_utils.calcbinflux."); return NULL; } *(npy_float64 *) PyArray_GETPTR1(intwave,i) = (npy_float64) delta_sum; *(npy_float64 *) PyArray_GETPTR1(binflux,i) = (npy_float64) (flux_sum/delta_sum); } free(out_dim); Py_DECREF(indices); Py_DECREF(indices_last); Py_DECREF(avflux); Py_DECREF(deltaw); return Py_BuildValue("NN", binflux, intwave); } static PyMethodDef synphot_utils_methods[] = { {"calcbinflux", (PyCFunction)py_calcbinflux, METH_VARARGS, doc_calcbinflux}, {NULL} /* sentinel */ }; static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "synphot_utils", /* m_name */ NULL, /* m_doc */ -1, /* m_size */ synphot_utils_methods, /* m_methods */ NULL, /* m_reload */ NULL, /* m_traverse */ NULL, /* m_clear */ NULL, /* m_free */ }; PyMODINIT_FUNC PyInit_synphot_utils(void) { PyObject *module = PyModule_Create(&moduledef); import_array(); /* Must be present for NumPy */ return module; } spacetelescope-synphot_refactor-c682dc1/synphot/tests/000077500000000000000000000000001511632712700233675ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/tests/__init__.py000066400000000000000000000001711511632712700254770ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This packages contains affiliated package tests. """ spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/000077500000000000000000000000001511632712700243005ustar00rootroot00000000000000spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/cos_fuv_g130m_c1309_psa.fits000066400000000000000000017721001511632712700312340ustar00rootroot00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T FILENAME= 'cos_fuv_g130m_c1309_psa.fits' / name of file ORIGIN = 'synphot ' / Version 3.0.0.dev134 END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 16 / length of dimension 1 NAXIS2 = 32042 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 2 / number of table fields TTYPE1 = 'WAVELENGTH' TFORM1 = 'D ' TUNIT1 = 'ANGSTROM' TTYPE2 = 'THROUGHPUT' TFORM2 = 'D ' EXPR = 'cos,fuv,g130m,c1309,psa' / synphot expression TDISP2 = 'G15.7 ' TDISP1 = 'G15.7 ' END @3]^@zA9@%#@#b$@-NLD@7ϊ@Aܳt@L# @Vjz*@`]}@jAŝ@u?%@@Љ,d@Д@ОZT@Ш>@вz}J@н/]@vA@ѽ$@0@J @@س4@@fz]i@^G@#A@.;%o@8O@Bo@M@WV@a5@kzU@v+^'@рrB@ъ%P@ѕo@џFx@ѩ϶@ѳԳ@ѾU@bzu@ҩ^@A@7%0;@~ [@X@ B@R!@kA@$z@/'^@9nA@C%'@M{@XB@b"@lгaA@wKa@ҁ^z@ҋ^s@ҕA'@Ҡ3%G@Ҫzښ@Ҵĺ@ҿ @N-@ӕ+@{@#^S@jB>@%|f@ f@>@Ў@%̳L@0 @:Zz@D^4@NB3@Y/%\@cv F@m@xo@ӂJl@ӌ@Ӗz@ӡ^@ӫfAR@ӵ%r@ӿ &@:@ԁO8@ȴ9X@w@V{a@^@Ar@+%ȑ@r @&@0/X@;Fx@EW@O{A@Z^>@dbBj^@n%@x @ԃ6$@ԍ}лD@ԗij@Ԣ @ԬR{" @Զ_ *@BJ}@'&4@n r@ߴD@Лc@Bٷ@@{*@^J@^B*@'&@1 S@<2=0@Fy{@Pe@[@eN{@o^i@yB@Մ#%@Վj @՘O@բ[@խ>E@շ@{n5@^@ZB@%@ @.o@u@ %@@J{NU@(_8u@2Bv@=&`@Gf ;@Q[@[Ǯ@f:@p!@z{.u@օ_@֏VBV@֙&A@֣ [@֮*iz@ָqЧ@¸@A@F{a@^@B@&!'@b G@ I@3@6r @)}\-@3{@> _@HRB@R&F@\ f@g&)@qm@{R-@ׅ@I>{@S_$@]C@h&Mr@rZ 7@|u@؆`@ؑ.X@؛ux@إ{@ذ_@غJB>@đ&^@ @@e@$@~w@h@:{@ _ @B]@!&}@+V @5@? D@J* c@TqH@^|2@h_q*@sFC[I@}&@ه @ْ@ٜaѬ0@٦@ٰԣ@ٻ6|@}_QI@C;i@ &y@R c@/@ьO@&ʢ@ m@{@!_5@,BC@6'@@ C@K.@U]lo@_V@i똔@t2|@~y_U@ڈB@ړ&@ڝN $@ڧ;@ڱL@ڼ"6@iu@а|_!@_t@>C@&@ @[@Yz@@"@-.|?A@7u`)`@ACg@L'Q@VJ '@`z@jѸ@u@e @ۉ|`@ۓ` @۞:CG@ۨ'1@۲ pF@۽Zf@Uј@ќ@-@*|L@q_@Cӿ@'@F 2@:@#$@.b@8aL@B|l@L_ɿ@W6C@a}&2@k R@v @܀Q@܊C@ܔߙ-8@ܟ&|k@ܩm`U@ܳC@ܽ'~@B r@҈@@@] X@|K@`5@2Ct@y'^>@$ @/@9M@C$@Mۘw@X"|ח@bi`@lD @v'>]@݁> (}@݋f@ݕP@ݠC@ݪYyc@ݴ|@ݾ`@.C*@u'}@ݼ @F@I1@oc@יY@|@e`@%CI@/'i@:: @D@N/@YO@cU9@m}#@w`b@ނ*DL5@ތq'@ޖ t@ޠ@ޫEO@޵o@޿ә@}@a`B5@ިD,U@'j@6 T@|@};@ @Q@&|@0`!@;&D t@Em'@O 4@Y@dA]Z@n@xϙ@߃|!@ߍ]`A@ߗC@ߡ'ִ@߬2 @߶x'@=z@'@Me@ߔ}P @``@"Dx@i'@ @F@=f@'@1˙@<}0,@FY`n@PDX@Z'@e. @otf@yҩ@@I@}L@`l@D8@e("@ a2@KR@9҉@s@Ǚ@}8@U`ڋ@ Dī@(@* AR@(p+q@2i@@ @5@|4@Ú$@ }\w@QaF@˜D@(o @& ]@l@@$@AC@ }<@a&@De @)](O*@3 }@=w@H1ҵ@Rx@\c@g}ȃ@qMa@{D@(/I@" i@hW@⤯A@/@=@Ä}@`@D@Y(i@ @7@-!@ t`O@Jo@ }@*Iar@4D5@>(U@I ٨@Sd@]@g;@r9*@|~@aS@DT@U({t@㥜 @@);@pZ@η @}@Ea3!@EA@([@ E@ `@n'@ z@+5@5|}@?a @J D`@TQ(;@^ %@hd&@s%NF@}l@䇳v@} @Aa,@䦈D݀@(ǟ@ @\@ϣ.f@@1V@x~@@aL@Eil@ M(@ @!2@,!@6h@@6@J~!@U=a_k@_EI@i(@t q@~XR@刟Ӛq@@-@t~8@屻aW@E)@I)@А R@<>@z@dd@@}W@9aw@E @"(@- 2=@7T]@AZ@KD@V)$@`p~mC@ja@tE@E( @扌 )@}@@`$@沧@~Mc@5a@|Eu@()@ I@Pܜ@Ƽ@޷@%/@l~-@#b@-EU@8A)@@B ~i@Lh@WӦ@a\@kO@u~n@1a@xE@甿) 5@ ^@LH@糓ӆ@ڷq@!n@h~@ܯa@E@=)T@ t@(@@XQ;@$;Z@.~y@9-bc@CtE!@M)@@X ʔ@bH@l@vַ1Z@z@d~Y@蕫bC@E@@9)l`@贀 @@ &@TF@ݛ@~@)b$ @pF,@)L@ 6@Dt@%_@/ҷf@:۹@D`~@Nb,@XEL@c5),@m| @wU@ ?2@P}@閗g@~@%b@lEk@鿳)@ @@@އQ@θ q@G@\1@bp8@E@1)@&x @0@;q@EL@O'@Y@d!bPW@nhF:w@x)x@ b@<=@ꗃԋ]@ʷɰ@@X~#@bC@F@-*@t C @]@k}@H@@~C@bc@'dE@1)@; #)@F8 I@PK@ZƸ5@e t@oT^/@yb@F@))@p @뢶h@+@D@T/@>O@b|@`Ff@)@ 5@4͈@ {Է@·@ @(Pn@2c@Q@H̥@SD@]b@gF8@r*@|`@E@0@4nq@{X@@ c@PFW@Η*w@ @$@k=@N@8@ @w@ca#@ Fw@+*@5\ @? @I]@T0}@^w@h@scAC@}LG+c@*i@S@ )@g|I@ﰮ@@<@σc!b@G @*I@X3@rI@\h@ ,@s@!/@,cO@6HF@@*@J@U5@_c<@i&@sd@~8O@cn@F@ *@T 4@T@@(@oE@ڶ/:@cm@DGW@*@ @t@_ը@"@,@74Z@A{cz@KG7@V +!@`P`@@j@tՈ@$@k&@y@cٙ@@G@+ @@`@*@[h@ۢR@霑F@0{e@wc@G@*,@LL@# @-@8 3@Bgqe@L[@Vc@a@ZH(@d+g @o4Q,@yz@y@@O@e@dʅ@$H@k+@˲1K@k@?Y@ꆺC@͝1@lQ@ [d@H@+@(0k@2v@<9@G#@QKbQ@[Lq@ed@p Ht@zg+7@W@۪@;@@ɝ=@,@We@̞HU@,?#@,}v@r@֥@=@ G]@ @d@)H5#@3c,C@=]@GG@R7ֆ @\~p)@fŝ|@q @{Sd@H@+b@(@n'@@PH@C@͊x@d@H/@_+߂@ɢ@@ 3@z0h@@*X@4OeB@>HN@H,kn@S$@]j@g4@qT@|?@@e#@Han@[,K@@t@/ֲT@vt@ؽ@@Ke:@HZ@,+@ @fT @ >@@*|@5;f@?@Ie&@THy@^W, @h@r4@@}+_@r\@F@&@GeoF@H@,@ @b,@٩@@7&@~@eOe@ I9@S,w@!a@+K@6'ޟ@@nȾ@J@T1@_Ce/@iI@s,W@~B@^k@j@캨@3@zQ@eq@H@O,@ږ"7@ W@#J@j4@s@ p@?e@"H@,,@7W@AZv@K*@U@`/S=@jv=]@te{@Ie@K,#@C@̖@׶@f @)@|@;e[@ۂIE@,B@nb@V@ז@)@+H@#r@-e@8I&@BG-.@LN@V8@av@kba@uh@@7e@~I@,N@ .@R@W@A4@'@ni@e@I@C,n@@@@$^!T@. s@8I@C3f3@MzIr:@W-\Z@b@lN@v @ܻs@#@j)@f@IRY@?-b@Z@d̼@oD(@yZ.H@fl@JV@/-@v.@@@J@ˑ$H@؃h@fL@fJ6@-u.@_N@ :?D c@؇?U8H*@Ȼ?`4@l@(4?ẻ@2V?keNx@O@ԂΧ?v@f?r:@bI?Emm}@-:?t:@?֣d@6 ?|@@}H?仉|@ļ2 ?L܂;K(@ ps?^@RZ?-d@f?@J?wK7@ '-Y?+M@ny?X&w@?8ۛ@(?Ijӹ@3B??)"@=_?few@GЃ:?g! @Rg$?Ty@\^Jc&?]=@f-y?D)L@p?:2:@{2?k`@yش ?Be@_?Y@?&\c@N?l@g?ynq@JCE?/'@#.-e?w(@jk? B@װU?';2@ؔ+?Բ@>~K?݅6#@?8fPC@̃?G a@ f?=A|@ZJ1?5k@. ?/X@)K?#@4.5?Ο*@>utK??@H^k?M@S?!$@]J?vx@gf1?ϥ@qJQ?dª@|-?(@f?RY,s@?ɣ,z@7?@~1@:>?Sͫ@(?."@ȃf?3@gQ?dM@VJp?i7G@؝.y? l@?m@*?v[!@qV?m>/@?f@ ?ZKAO@FG?ڿW@ g1=?Gco@*Jo?ž@5.Y?4cH@?b?p@I#?!IKKY@Sv?*@^6?/@h}?r5@ră ?Q~@} g\?qy@RJ|?cT@.9?]! @#? 2@&bB?J @mLb?KZZ_@?6u9@t?]0#@B(?"ں/@ىf|?@Jۛ?y@.?ZY@^?@Bb?q-;@ ,?砑1r@2j?^(A@!yT?Ԫw8@+H?K%@6g}h?;A'@@NJ?8 ,@J.?rJ@T.?$=@_"N?1]U@ii ?,@s?ֻb@}5?@>4?tbov@g]?꟤t@J?` 6@.?-*@ZN?M0@m?S@?9p@.? P@u4?%*@伃T? @g=?@JK'?5x@.f?&V@ P:?sKb@?x=H@"ex?_]b@,?<Uy@6 ?K5z@A:s?n@Kgɓ?6@UK?v@`.?"6v@jV0Y?}@tn? 3E@~X?Md¥@* ?F:u@q??n@?,7Y@g?YG@FJ?Lz@.%?D҅!@y?Ru@?/̡C@a8?@>@娽# ?g@a_?@6K?us@}g?zdm@Ks??hb@ .E?c@#Re?ؖgS@-ڸ?M8bș@7?P)@B&+?6i^HL@LmA~?WN@V+?@`gi?O!@kBKT?M`@u.e?|*k@|?dB@?e7j@]٤?/l @K?N'@k?"A@2 ?71@yg?«{R@K41?t@/Q?ÓH@N\?0ꐕ@F?|`#@م?{M@"o7?dk@ i?ʵl@ ?LM|@ g?-l@ $>KP?4Xq@ ..p?Ǩ!$@ 8@ C/J?:J@ NF?WcP@ Xs?˽Ÿ@ bٱb?@$@ m?մ`M@ wa?(0v@ ?֜ہA@ hH?%?n@ 6Kh?ׅZl @ }/*?Q@ ?mW@ S.?f8@ Qّ?Uɖ@ ɘ{?}@ ߠ?>&@ &?ڲ@ mgg?&"@ K̇?ۚ@ / ?`O@ B?܂?@ 3N?L~@ m?i9@ &[?ݲ0@ 0]E?Q@ :4?[K}@ DhnS?9&C2@ O2K?߬+@ Yy/? n@ c?as@ n:?h@ xM?{OP@ ;?d@ ۡ&?c@ "dS?֜?@ ihNs?J/t@ K?㽼,;@ /v?1Bk˂@ >9?d+@ ʄY?<%n@ ݬ?勯l@ ?4@ Y?rA@ ??@ h.?Y?@ .L?Eq@ u/W??2-@ A%?]@ 'y?$@ 1Ii?@ ;? [@ Eס ?}sLn@ P_?:@ Zeh?bE@ dK?յ.@ n/7%?Hiԟ@ y:!E?Ϧ@ _?-FT@ I?`{@  ?@ Ur+?\ @ ~?8x@ h?j"@ *K?(@ q/?O@ ոe?@ ?4@ E)?B@ ?THA@ ӡRK?򋰁@ Ui? w@HLQg? @R0;? p,[@]*y? Wa@gpc? Ts@qڢM? V~v@{m?8e@E?D@?s@h4?@L1?ȏ@a0?q@Y?z@D?UJb@5ڂm?\@|l?8*@á?(@ ?Lc@QhS?<@Ls?<@ /?pp@&?u@ l$9?S ˵@*Y?%O@4L?59@?A6?Ge@Iu?Ot@Si_??Q @^L?Lq@h]/?jA@r?0@|Y?L:{@1y?XK@x,?-{@?@U??} @Mi?_?Gm@L}? A4@0g?a @"%?~@hE?C/@Θ?a@?$~A@= ?CTx@+?Y@ i~?vE@M ?@!Y0G? WV/@+2? 3@5pd?!8MM@@-ڮ?!ݬ@Jt?",]B@T+?"Zwt@_K?"%@iIh?#jK@sL?#ڟ c@}0(?$J!o@1?$3v6@dP?%+s@:?% @x?& R@9c?&|S_@j?&8N@i?'\Y6@L?'tq@U0?(< @P?(+v@p?)2@)?){@p?)fZ@ C6?*n('@?*E2@"Eik?+P\$@,L?+l@60?,2w @Ap?,|%@K`?-zr@U?-rٔ@_?-e@j5#V?.gQ Ԅ@t| v?.6D@~iK?/Ik@ M5?/_4@Q0t@ƳB?2^\R@?28D4 @Ai+?3?" @M?3^$@0T\?4!j@>{?4%@\|?5F lM@f?5r"@꾥B?5Sܔ@#1b?6Sїv @-x͵?6I*@7i?74!@BL(?7%@LM0H?8+$@V?8:@`?8C/?@k!G?9f@uh1.?91@o?:G);@Y?:i;[@=i?;'+@M?;&@0g?<.D@?8u}@t9?>T@ix??>E@Mb3??[@I0??ިǻ@?@if|@?@m@$۳?AJeay@.dm?A@8ۍ?B+Ja"@B?B@M9j?C s{@WMBS?C|v@a1,s?Cͨ+@lj?D] D@vTT?Dj@ۓ9?E=i~@ь?E@)?F(?b@p?F[O@i?FRv@M"s?Gn9A{@E1 ?G@ȌJ?HNF@5?Ht@sY?I/@`]y?ITA@񧢛?JȔ@?Ja@5i??J @|M_?K^n{@0?K@% ?L>#@/P%?LA@9E?MV@C޿=?MQ@N%{?M;@Xlf ?Nm3@bi^?Nݢd@lM~?OM[ݭ>@wA0?O:@?P,\1@E?Pc@d?Q & @\?Q{PW@?Q4 @F+?RZ@1j0J?RL y@xMn?S9VPx@ӿ1X?SL%@?T@L1?T3Z@ۿ?Tr8@ڿ?Ugɪ@!?U;@h?VB @jj?V"@%MN?WB?z@0=18?WS,{@:w0?W}@DaP?Xg@O۟?Xԟp@YX?YB'M@c?Y$P@m憲6?Z$@x-i?Z W @tMک?Z~-@1?[ep{'@?[Y@HAp?\@/1@+?\Zk@ֿi?]Т@T?]an@dV?]aL@ԫj|v?^bٮK@M?^*@91?_=xE@@O\?cZS@ZD{?c/:a@d?dYjSL@nҿ?dJH@yB?e3$+@`a?e N@j4?@H{Dd?(D@R.?w] 8@] l?9h@gPV?I#@qjJ?T@{Nj?oO@%1? @l?v/@0?W뇄@P? I*@@?)ǽ@?.g@·7?2,@k!6?c&l@\N_?*ԥ@2I?58@?|J@0r?K@wܰp?pέ@ ?CE@?Aj @ L6?I-@*kV?@4N??{[@?!2)?D[o@Ihh?L<^@SR?@a@(?dmn@0g9?d @wQY?˟@?2y@ky?a@LN?8MH~@Ɠ2??g (Mv@?ӛ& @ ʲ?4>@g ?Uc,S@%? Y5@1x?h[^@<?Q t@kY?9*Yt@OD ?i@#2^? ;@-Xl~?sZ@7?QFf@Aݔ?E ~@L,D?z@Vs?m@ϣ@`?@kk: ?2@uHO$+?PQ^@2b~?N@L?!u@?@cu?@d?ZY@񤝄?q@8?+Y@k?K@OJ?W[@ 2j?e jH@T,?bAr@?5^@U0?SV@(?P?A @@o}?n@?ַY@#k?>@.DNj?SA@82Ή?9|@B ?wXv[@M?q;3@W_5P?G!C@ap?)@k]?8@v4G?&^@{k6?׋x@OpV?OY@ 2?p@P?W\@?8@M@ bC(?z?@ l݁{?@ w k?}rg!@ g?I5@ ?FY|}@ ka?Ɣb@ @ #G?m?ȷY@!Y8O|?=zT@!c3f?;@!m3?@!x S?Gѻk@!Sͦ?ʫ#(@@! ?+@!?sqo@!(4l?%@!ol?;\@!O\?̟£j@!3F?=@!DS?g@!Ԋor?ˀ@!ݭ?/a)@!?Γ=@!_9?2f@!X?Z+U@"k?f@"4O?%4Z@"{3'?ЋB@"&?? ?@"1O?VY@";O9?ѻ[d@"Ex?!^i@"Oݥb%?҆ڸ@"Z$x?R.@"dkk?QƉ@"nO?ӷ6D}@"x3>?b2c@"@^?ԂqS@"/?k;@"?L$@"X%?ղ$z@"[BD?z$@"?|i(@"lj?~@"0O ?Gbޱ@"w3*?׬ٚo@"߾~?2@"?w%4'@"K?]^@"?A@#٥"d?٦[i"@# ? @#glJ?q7@#'P4?7I2@#13sJ?;V@#<<?۠p@#F?]@#P?jg@#[0?Ϧظ@#eW?4\@#o?ݙ@#yl*?(@#,P?c^@#s3Sj?Ȭ;F@#=?-nu@#{?ߒ{:S@#Ge?|N@#P?\cZ@#եo?G/'@#?&& ?8OM@%H[l-?`-@%RP!?" ?@%\4 ?cCm@%g0I?R@%qv4?*{A@%{rg?R}@%\?@%K?U/ y@%?q@%lM?<~@% P? }@%g3?8*@%î*?Fh@%3?#ԍ@%;R? ԛ@%FT@&SE9?PL@&]m/X?|@&hPm?@&rc3?U@&|?Ggr@&r?@&7޾?4@&~?r@&ť?]@& %X?9"@&Smx?vS6@&ĚPM?;f4@&47?d}:I@&(v>?L4@&n`^?+tuR@&ޞ?V@&ˆ?Y@'C$?UY@' D?.zC@'l?T@'!Pٷ?,@'+_4 ?MG}@'5*?Fb@'?@~?3@'J3~? E@'Tzh?pb@'^D?%H@'id?7@'sOlϷ?U~B@'}P? @'3*?`@'$J?n@'j ?'!@' ?Ia@'I?m_7@'?30?P!_@'ņq?3t@'m[?٥ @'P?yÓ@'[4?G@'i? ?Q@'? 3@(/? a<@( v? h4@o@(P? ʝX@("Q? -5@(,Km;? b|3@(6Pz? "@(@4d6? T@(K ? jIV@(Uf?  @(_? {p@(iµ? K@(t;o??@(~ݏ?S@(m?@(Q?f;X@(W4DU?lM@(.u?*zS@(l?|@(+V?oBG@(r•;?Qtf@(й[?"5@(?9^@(Gl?wLǞ@(P"?[[@(4$u?;f2 @)?ly9[@)bL?nn{@)7?al@)"u[?e|@)-7_{?%Z1r@)7~?K]@)Am?7߸@)L PA?K  @)VS4a?F@)`?㔞@)j?p@)u''?ҕ8@)nG?4hy@)??7@))?:@)Cmh ?Y^@)QR-?i@)4?E2;@)?~5@)^?ys@)ѥG?Bcd@)g?@)3?@)z ?g[-n@)mH-?Zc@*Q2M?*~S@*O4p?,@*Z?@*#?P\p@*.#߃3?4@*8j?3@*B?u׈!@*L?עz@*W?m? 9iX@*aQl? +Ԡ'@*k4? k@*v:?!^@*Z$?!YP@*cR?"" +@*¡?"-VG@*/?"a @*v?#G@*m9?#@*P?$ AU@*K4ܬ?$kٮc@*Ғ?$m$*@*?%.[E @*Cr?%D4@*f-?% @*k?&SKs@+V?&h@+;mX?'9?@+Q~x?'wɺB@+$4?'o @+/?(:a@+9V>?(Dȏl@+C^?(?m@+M ?)_ jW@+X+L?)eN@+br6$?*!@+lmtx?*J~@+wQ^?*_b(A@+G4?+E-'t@+ ?+0@+^?,2@+߯~?,ip@+b?,ʪ@+?-+@+D?-=H@+7nd?->"G@+~Q>?.OfL@+5(?.@+ g*?/@+RQJ?/r럂@+ߏ?/j@,y?04 C@,'?0s[%@,n0?0)g!@,%m?1V @,/Q?1@,:C5?21@,DGJ?2x֍=:@,N1i?2w-@,Yo?3:\)@,c^Y?3T#@,m0?3>k@,w슂O?4[\d@,3m?4Yk+@,zQ?54\@,4?5}b\@,6?5@,N?6>Z@,?6U7@,9?6A@,#$?7_D@,jbo?7N@,ޱnL?8 {@,Q?8І@,?5u?87=@,U?9A"@-?9W!@-?:1Ei@-Z?:b{.$@-&;?:9@-0B?;#=@-;/n,?;AE@-EvQk?;{i/@-O5U!?@-[?>$y@-f{?>/u@-n ?>=@-Q??DK@-;55A??{@-a?@׬8@-]?@d݊m)@-ߜ?@@-VÆ'?A$io@-ߝz?AcB@-䊮?A@-+m?BD{"@-rQ ?B@.5a?C~@.?CfM@.F=?Cǒc@.''?D(G@.1fG?DG@.<Pf?Dg2@@.Fb?EKwH;=@.Pnx?EeD@.ZQ-?F Pfl~@.e75M?Fn6=@.o~ߠ?F@.y?G/mZ8@. ?G@.R3?GT.2@.0?HRvoTA@.n?HCQ@.'nX?I @.nQL?Itr@.5l?IՐ4@.?J6L&@.B?J}@.3?J @.R?KXggMG@.?K@@.^?Lm@/ n9?Lz\@/R#8?L@/35a?M;3Q@/(zK?M*[ @/2?Mw@/=t?N]J0&X@/GNòr?Nӆc@/Q?OX@/[܊?O~ِ*@/f#n?OVB@/pjRX?P?ζv@/z5A?PB@/+?Q@/>j?QaÓ@/T>?QZ@/Ò?R!鲥t@/|?RH9@/Z?R⣾E@/¡n$?SBrߝ@/Qx?SL @//5͗?T*(@/v ?Tc..@/ ?T*V@/4^?U$lx@0J}?U-@0 \?U;@0؋F?VCO#@0nD?Vkr@0)fRod?W՛w@035?Wa1+f@0= ?Wt[@0H:*?X[e*@0R}?X~֥@0\?X# @@0gR?aGO@1I'5?ag`@1Sn85?a01o@1]"U?b$> @1g`?bh;@1rBJ?b{@1|?cAB6Y@1Ћs;?c@1n?c=@1^R?d]c5n@15?dV@1!?eF@12u?ey^@1y?eJ@1*?f6@|@1?f1@1NS[?f[@1n?gRT{UP@1R{?gY@2#5!?h~FA@2 jA?hnx<>@2?hm|@2 ̴?i,^r@2+> ?iKF U@25'?i3,@2?̋3z?jIr"@2Jo?j?@2TZR[?k1@2^6F ?keeS@2h`?k~H>@2s.n?l#MmF@2}u?lw@2Ė?lf@2G?m?G@2Jf?m_R@2n?m@2R< ?n[Ξ@26&-?n@2fd?o,A@2ϬN?owվ@2?ozF8@2:w?p5@2f?p '@2ȋ?pNj@3n?qP9@3 VR?qqBg@36L?r K@3!l?rlI@3,*.?r@36q?s)!&@3@W2?s@3JAR?ss.@3UF?tD]^j@3_oi?tR;b@3iR?uD@3t68?u` @3~bЌ?u@3?vg @3?v{5{@367R?vىHO@3}!r?w7@3ċ_?w$+i@3 oI?wk@L@3RR8?xR\`@3Й6rX?xn@3?y&+@3&?ym] @3m?yˎJ @3>?z)r/@4?zٍ@4B?z:?vfE?o@4хo?ӣ@4Rc?0܌c@46?E@4Z?A9@4?Hm2@5%I?@5.i?>)@5uM?_؁@5#?|a@5.ov0? 3@58JR?wE@5B6?*%@5L?14@5W?:'ԃ@5aei?;ju@5k?H8iշ@5u-?1@5:?%@5oVO?_1@5S@o?}@56~?B@5Vh?uPR@55?ҫH *@5U?/@5*Ϩ?\b+@5q?.G;@5ܸ?EVx@5o;?sq@5FS ?&@56^?\LC@6I?Wi@6U?W @6aqu?sڴWu@6$į?d@6.神?.L@696;?=j@6C}o[?識B@6MS?E׭@6X 6?b@6bR)!?a@6lA?]SL?@7m76?opd@7wuL?b@7_l?) t̥@7Y᝿?L@7?U]V@72?> @7.?;@7uo?"b @7S,?Tg[ @77?@2Hz@7JUl? ȶ#@7ސ??jMȹ@7}?\ @7g?#H͉@7eR?P=@8r?<=@8o?8a-@8:S?$E@8&68?5@80X?LC6ـ@8;?LC@8EU ?Q؅@8OH?`Q1@8Y2>?MӍ"@8d*p?E*@8nqo?t9xW@8xS?(*@86X?, @8Fw?k @8?݉@8??⛃@8(>?x3@8a]?k@8P?S==X@8p:? F@86Sy$? t@8}7cD?f*n@8?X\i@8 ?u`@8Q ?y̜U@9Ŵ*?Հ;1@9ߨ}?1/@9&ܝ?ڠ@9'mp?g@91T?D#{@9;7Cc?*%@9FB?\@9Pk?V]@9Z*??@@9eŔI?iK@9o]ҝ?iG@9y?Y@9o? 8y@92S/?|KHm@9y7#?ג<@9 ?3W@9K?tԦb@9M6?h@9ti?EFź@9۩^?E@9"?@9ip?W`Ļ@9SO?%3@97o?@9>?iTeT@: ,?(@:5?!@:T?|qɻ@:(Y>?ب(@:2|?4u@:Ԯ@:G.So?xנ@:Qu7?G斾@:[?@:f?8@:pIU?Zj@:zt?5@:ש?FoF@:?mr@:epG;?ɐ3@:T1[?%.H@:7o?!@::Y?_@:€!?7!@:A?~"@:?ւ@:U?J@:뜌? E @:p'Z?u@;*Tz?]h@; q7O?w@;9?@;xA?oR@;)Eb`?ʺ#X@;3Š?&ZO@;=ө?|[%@;H'?)@;RapF?8-L@;\S?*@;f7۹?@;q6 ?J>@;{|-?]W;@;B?k@; ,?[@;Qj?ْ@;U?IG7n@;pf?my9@;&Sѹ?ȥS@;m7?#ͽ@;ʹ,?~j @;L?@;A"?5,G@; ?C@;ϩK?U@<52?FT R@< ]ps? =h@<T]?0e@<7?U՛@<*2?ïE@<4xl? [⮋?d6@!GB@<|i7|?Ƃl@<f8?ܼ@?pSCT@=]?T@= p?$Q5@=+T?~JX@=5e7$?? ~<@=?D?2/N^@=I?͌HH@=T9N?@=^9 ??n@=hǩw]?ΙŖ,@=sa}?}I9@=}Up?Mw{@=T?ϧIs0@=7C?@=*c?ZQ@=p?дԅ@=?hV@=)?h%?u@=EI?@=όA?/p@=q+?uBZg@=Tj?9@=a8T/?(צK@=?ӂ9*E@>|?ߙ@> 5?6ʿ@>|ƥ?ԑ'{A@>!éi?@>, !?F"*@>6Qq ?ՠ5U@>@TJ/? F@>J84O?Uz@>U&r?֯@>_l\? K+z@>i?dH@>sƅ5?׿ @>~AÈ?d\@>?sn@>p? @>T?(W@>]8n?قG@>?|@>1'?ڑ`@>xeU?똽>@>ڿOt?ET@>?۟?(@>Mp?&"@>T;?TM@?7?ܮprd@?"ޮ?@?h?b9@?"!?ݼM(X@?,Et?#j8@?7=/?pG@?Am?/@?KqX?$fPY@?VTZ?~_{@?`Y8z?'A@?j?2@?t? @?-@?'0@?t`?@-@??᚛h@??;D@?Iq8'?N^z@?U"F?9 E@?8`?XI@??[@?d ?㵱Y@?۫`?{(%@?Ʊ?iA}a{@?9?9xl@??%@@qF?yvȲ@@Uf?N]@@U8@?:t@@#*?~:@@-i,?K@@8)SL?\ @@BpƑ?*@@L{?(S@@V?~5n@@aEq2?޵#O@@kT??0Q@@u8̥?韨@@ ?"a@@`?`+@@3l?7}@@q?!c@@5[?%HR@@|2?)ju%@@qR?B5@@ T¥?a@@Q8?6FJ@@ܘ?c@@8?y@@%?$![@@l?hWI@A;?OD@A&?DI@AAqdq?%Oa@A$UN?]R@A.8?eX}@A9w?e@AC\W?%@AMw?`@AW?:C6@Ab1?F[G@Alx>?xڊ@AvqD?p @AU.?f@AM8m?ƹQ,@AW$?&Gr%@Aw?m+;@A!?rt@Ahƽ?FaK@A ?0@A]?/r]@A=q}?fj@A݄U?ƾJr@A8?&~Ep@A7C?VE@AY!c?j@B_?BAE0@BI?8w@B-)?5n@B%trI?N@B/q?@B:T?MC@BDI8?Z\*@BNc?mW@BX? UT[@Bc??fiI@Bmd)?0@BwhI?70@BRi?r{KW@B9q?˺p#@BUz?$F@B8/?~+k( @BO?]ٺ@BT?0XC@B?#@B ?@B)5?; $@Bp2?.!@Br?4@BUZ?GI@BE9E?Z<@Cn?gVX@C?Ro: @C?tPV*@C&`5?t_@C0U?]pXV@C:?hb>@CE5q?\ @CO|U;?hKu@CY9%;?6Œ@Cd c?% @CnQM?s0@Cx?ߓL@Cv!?$$@C%t?}k@Cl?bo@Cq?/0@CU?C@CA9Z?#@Cz?9=@C-?>ڝ@Cl!?@C\V@?C@C飪?]u@C~? q@C1q? Mh}V@DxU&? h#@D8z? D9@D;6`? K<@DF! ? mC@DPh^? UDw@DZrH? Nݼ@DdUF? @Do=9qf? xb@Dy? lM@D?:Ә@D,?أ@DXL?@D?]@D>?Ʋ@D-r)?u@DtUgf?O.@D˻9Q?@D?B4׵@DIy?!@DL?w@DǢk?e3@D?f@E d?'B@Er 2?S@EUR?񙓼@E(991?Io>@E2?}@E<Z? \&O@EG D8?l#[@EQTǂ?;@E[l?-W@Ee⎪?ae@Ep)r?qo@EzpUq?O|w@E9?c]@E?,@EE:8?q>3@E$W?|2"@Eb?3v@EL?@E`?X &@Ȩru=?T\Z@EU?/L@E59?u@E|?vM@E$?'n@F w?7@F P?0(@F,?oH@Fޏ ?\)io@F)%rU]?*A@F3lV?}?w@F=9}?1%@FG#?s@FRAC?CZ @F\?;07@Ffζ? "@Fq ? gFz@F{\)? @Fr5}?!*1^@FV?!^@F19]?!0@FxH?"N!ok@Fc?"j@Fp?#ׁ@FLǮ?#q8r@F͓?#.c8@FڎI?$4h@F!ri?$G{@FhU?$Pq@F9?%XU@G(/?%-@G =O?&U@GP?&{z@Gǎ?&ܛ0@G*y?'= W@G4Xh?'F@G>r?'+|@GHU?(`2@GS-9?( 7@G]tO?)#]>@Ggn?)?@Gr0?)"@G|H?*F#2q@GY5?* Cه@G֏CT?+@Gr?+iǎ@GdVk?+@G9?,*f*@G;?,۳A@G9Ҏ?,-^@G伮?-Mh@G?-]'@G !?.d@@GT#t?.p=)e@Gra?.v@HVK?/1U@H )9:?/;@HptZ?/=.@H ?0RuD@H*?0 i@H5D ?1Sd@H?@?1sƊ@HIҏ?1B@HTr?23rEB@H^`V,?2G@Hh:&?2@HrTz?3SJ$@H}5>?3@H{|?4F@Hg ?4tko@H `?4ԏ'3@HP?54=@Hr?5Ѧ3@HV &?5f|@H%9F?6U @Hl4?6(v@Hٳ?7Bţ@H] ?7uZ]@H@G,?7qf@H?857V@IΏo?8f@I r?8@I\V?9Ud@I!9e?9!@I+?:ՊD @I61?:ul?x@I@w?:鬞@IJ'L?;5>׸@IUk?;/ti@I_LO?;q@Iis9?5N@I<k?>Q@I?>^@Iʏ/??U^0@Is??y@IXVXQ?@$B @Iڟ:Bq?@ul@I?@՜Jr@I-j?A5dڬ@Is7?At@JȓW?A@Jѫ?BU@JH?Bm2@J"r?Cq@J,V=?CwEf@J7:"?C׮c@JAd ?D8f9@JKK?D|pl@JU5#?D@J`8sw?EYC@Jj?EA@JtƏ?F]@J r=?FzbCI@JTV]?Fھ @J:?G;0ԝ@J?Gr9@J)+#?Gə#@JoC?H\_@JS?Hs~u@J=?I4l@JD| ?I}ފp@Jۋsf)?If b@JV|?J=#7@J:?Je@J`?JJ?q@K?K^C@Kc?K @K4߂?L^@K#{?Lc2@K-\)?Lߥd@R@K8 sFI?M?@KBPV?M$먔@KL:n?Nb@c@KV?N`B@Ka%/?N@KkkՂ?O!mZ@Kuȿ?OG=^@K?O|f@K@?PAd{@Ks&h?Pk@KW?Q(@K:N?Qb@e%@K\8?QmV@KwN?R"9@Kan?RU@K0ȟ?R!@Kw?SCW@K澏5?S6e@KsT?TYȜR@KLV?Tc{dl@L:.?TÞ@L?U#.@L!Wn?UfN@L$gA?Ud_@L.?VD%,@L8j?VCw=@LCv@P[{;_?}5M@Pe?}v @Pp ?}ϘL@PzOn?~Tb@Pɰ?~?խs@Pݬ?8@P$?sh`o@PktT?3ˑ@PXt?2nB@P;??k@P@)?@Ṗh:?Q1Y@PRZ?Hk@Pɐ?C3{@P[?oɮ@P ?N]@Pst?.N@Q 0W?Ss,@Qw;?s0@Q ?MQ4@Q)HZ?Λ@Q3K2y? I@Q=p?kHx@QG٭Z?;4-@QR @?*zH2@Q\gt`?&'X@QfW?/@Qp;?I @Q{<&?zi(@QF?蛹@Q?gU(Re@Q?:@QW; ?&)jx@Q%,?!@Qtc?1`@Q,W?D[@Qs;?}O@Q׺F?z@Qe?bL@QG?CK\@Q?!9@Rխ,?@R K?w@RctC?>bUn@RX-?KKM@R);l?2q@R48V2?[F+@R>?I@RH~?ޯ:@RS ɼ?wj[@R]S?֞q@Rgk?5{@Rqtϋ?Wεy@R|(X ?1F@Ro;L1?R ~W@R6Q?f@Rt?1@RC^?nC@Rɝ?\8k@Rѭ7?,,@Rŋ?<@R_t?JD@RئW?H@R;?]t@R4q?%$@R{?d @S>?ð:@S )?"t7@SOgW?5jB@S Qw?t@S*t?>@S5$Xy?ps7T@S?k;=?+l9@SI]?Z@SS?y(@S^??R@Sh #?w@SrͭGv?չ@S}1?4jt@S[to?\v\@SXZ ?:i@S;]?Ptm@S0|?k?@Sw? y@S?lo;y\@SC?@SKb?)@Sْ?[@Tsk.?@T~UN?N驐@TG?qO@T}?@Tt? wd@TX4?wւة@Tc;?3nG@TΧ?&b@T ?}TpW@T7?>O)@T~5n?,Ga@TŮ?HQ@T ]?7Gi@TSt4?2H@UXT?S@U ;ħ?[~@U(?8gl@U"o?{@U,:?@U6?>6@UAC?w@UK>?7@UUu( ?C|b@U`Xfs?/'@@Uj_K@W.Y?@W8<\?!8@WC G?YwGS@WMcq?ʲw@WWo?}@Waʭ?X@Wl77?@Wv~W?n@Wu?WR˾@W X?4yY@WS<=?%o@W '=?U5@We?D]@W'O?@Wnʎ?T~&6@Wȵx#?S\r@Wv?&8j@WCu?R1@WX?ƶ@W< ?}L@W \?Q^@X_|?>CFp@X/?H@X?O@X%3XC?*SY(@X/zBb?]R@X9u?N|?@XDX ?Fx@XNO<)?; @XX|?)+be@Xbќ?\@Xm#?@Xwj?粋@X8b?ɗ]r@X"?'@X?u`?ZFː@XYJ?ÍYg@XP@ZyC=A?v)~Q@Z ?̥@Zi?/v<@ZE?K!@Z^˒e?1gD@Zи?_[kn@Z ?͎l@Z3u+?ͽl@ZzY7?d@Z=!?/c @Z _?HNf@ZOJ?w0@Ze?Υ@Zr?"@[ #? @[j?1F/R@[uK?_p@['Yk?ύaF@[2?=?ϼ<p@[< ?G@[F*1?@[QQ?GP2@[[ZR?u[ܛ@[e^?ױ @]Hvq?'r\@]RY?|@]]3=?U0Д@]gz h??剛u@]q‡?cqe@]|?؆2@]N?ت|@])N?x>@]ܓn?vk@]#vQ?[Q@]jZ;?8^H@]=z4?[ڮ/@]!dT?5&@]??٢u@]؅?;W@]?VG@]:? @]Z?0Ձ@^v1?RbQ@^ Z?q#}R@^/=ZT?ڏ@^ v!Ds?ڮ9@^*?̾\Ñ@^5l?>.@^?J˫:? lf@^IY?(0@^Sؒӭ?F2@^^v?e@^hfY ?ۃx|@^r=@?ۡۿ@^|!$?@@_5!?@_@7?ک@_J}??u-@_Te?9 @__ ?WPJ@_iR?uUh@_sw ?ޓQ@_}ZHK?ޱʟ@_'>2k?ϳ[@_n!p?@_? wt@_1?)S h@_Bׄ?G)@_?d @_В?߂ZO@_v?ߠR@_^Z(k?߾V%9@_>??@_!P?Ɣs@_3:?t@`yyQ?&@` cp?# @`?!z@`"N?Z@`,v7?@`6ZW? 2@`A#=?#@`Kj!?߼@`U?߭zX@`_=?ߞUA6?@`j>C?ߏYD@`t?@`~̓l?p|@`vV?aM@`ZZv?QC@`=?B=@`!?3AU@`/^?޷Pb@af! ?ާ=@a(?ޘs@a|?ވho0@a#:̯?x;@a-?iY@a7ȓ,B?YC8C@aBwb?I=@aLVZT?9W@aV>>?)W@a`!}(? W@ak+gH? +)@auq襛?F ^s@ȁ?Y@a?fEH@aF.?l@av?ݺl@aZ?ݪew@a>?ݚW@ab" ?݊CB@aǩGh?z(!@a1?jQ@a6o?Y@a}Y?I @aēN?9xȫ-@a wn?)<<@bRZ?HU@b=?>9S@b!4?kW@b$''?m_@b.m?ܷr}@b8O?ܟO@bB:?܈]@bMBxm?pȓ@bWwb?Y,c@baZ?A@bl>?)}u@bv^!S?.n0@bs?vX!@b?>@b2?V@by:?۳#@bY?ۛOӔ2@bwB?ۃt]@bN[,?kt@bȕ>k ?S?'@b"U??;("@b#?#@bi? À@b̼?5@bY?۱o@c>y?Þ@cw"?ګ=]@c[ ?ړb@c%>K??{:I&@c/Z"5_?c n@c9s?Jԯ[@cC]?2?d@cN.̜%?RC@cXuE?R@cbĘ? @cmw?[R@cwJZ ?ٸ`@c>+?٠?@c"?و$e@c?ot@ce=?W2@c|E?>⠍@cfe?&$>Ju@c:? @cɁw?@cZ+?Z8 @c>K?ó4@cV!?ثK @c߾?ؒQ7@c?yA@d*1?Dm@dqF?C@d0?ޣ@d%wn?׀:@d0F[Y??#@d:>j?3@dD"?ּ7&*@dO?z@dYa?9&J@dcQ?q/@dmp?յ"k@dx6?tK@d}wO?2{@d[97?Q?@d >w?ԯ A)@dR"a?mUAˁ@d?+\@d?餇]p@d&p?ӧN@dm?e"I@dԴ?#ؑ @dw?[@dB[V?ҟά@d?v?]X-V@d"A?')@e+?|&@e]j? 3ّ@eZN"!?@ed ?τN`@enJ\?B(Q@ey"4|?L@eir?ν<@e\?z{ @ewB?7ڊ@e>[b?0&@e>õ?Ͳ}@e"?op@e(?,k@eYH?/g@eՠ?̧Y[~@e?dy@e.=?!S @eux'.?ޠb$@e[e?˛< @f ?O?R@fJ"?b@fH?ʾ֬@f'h?t_@f2?* b@f?ya?@g(" ?.v?@g3 s?oK@g=Q?˜\[@gG@?M|>@gQ߱+?k0@g\&iY?Qu@gfmxSy?l.@gp[?!{@gz?{?:@gB"??B@g_??FG)@g? @g?TP@g] %?]6(@gE? @gx3?S@g2[q?zy@gy?\ ?/K@g"_?+@g~?D@gM?Lz~G@hͬ?k@h ۰E?|諕@h"e?b-@hix?x,@h)[?ՅN@h3?<+?t @h>>#&K?@hHd?q*z_@hRN?/I@h]͍?m(c\@hgYw1?@hq?hTJ@h{x?*3@h.[?dK@hu?K?U@h#j?`J@hD?ݯ0@hI.?[JPZ@hm1?ٺ)@hױWP?V]]9o@h?J@hex?QAq/@h[?Ρ@h?7?K<@h:"??@iЪ?F|`H@i ?î&`@i?@כ@i U7p?({@i*!?:g@i4x_?@i?*\J?4?XR@iIq?V?A@iS#rv?.}z@i]? c@ihE?(Z@irў@k,u3?tǴ@k6S?kS@kA??}a@kKI?;@kU?i@k_x9?wnB:@kj\6?sR@kte@ ?gjj@k~#_?'@kI ?V@ @k9s?~u=@kq?Fy9@kDZ?N;p@k?5(<}@kUxY?V8!@kƜ\y?$@k@?fkR@k*#??i@kq)??@kg?:U@kQ?xiu,@lE?<@lz%?MMQd@lxy?/7\@l#\?j@l-a??}`.@l7# ?;Vi@lA _?H| @lL5~?` @lV|1?ku@l`ò?wý@lk ZE?@luQyDe?Av@l\?N@l@l? څR@l&#+?pW@lmK?Ճs A@lӞ?:D@l?~@lA?~Q@lLj:d?}h=@#@ly$?|%@l\b?|1NT@l]@L?{xS@l#J?z,8;@luj?z^A@m1곾?yר'@mxΝ?y'X@m1?xPfG5@m$P?wyH@m.My?wSq1X@m8\?vn@mB@-?vu@mM"$6?um @mWiU?to@ma??tGg~@mk}?s8b 7@mv=P?s]I@mp?rr^@mx?q^D@m\?q90 /@mY@ 6?px@m#V?p @m5?odt@m-?n3rw@mt^?n+S@mһH?Q~@oy}?QDZ @o]g9?Py@oM@?P+@oԔ$?OsM@o?N*xQ@o! S?N=\@ohs?M?@o4?Mbn@p?Lvu@p=y]9?LT@p]GY?K/@p&@?K֛@p1$o?JG@p;Y?J.<~}!@pE??I @pO֒?I=~I@pZ-?H!޹@pdt?HLef@pny%?GA/"@py]'x?G[$@pIA?FEuL@p$O?Fj'L@p: ?E-؜3@px_?Ey@pdb~?EWу@p?DV%@p%?D8@p9yE?Cϩ(@pՀ]?C?@p@?B@p$0 ?B,7!@pU+?Aw"@pX~?A;w@qB?@9v@q)?@IVw>@qpk??l@q'yd??W{@q1]?>ރ*@qe@qF$?=W@qPJ?=srTz@q[j?<^9:@qe`"?lBQ@q%?7ĸ@ql+P?7KQ@qzp?6@@q]S?6Xm@qAA=?5]@q$|6?5enQ@r fV?4'|@r뤩?4>t@r\ώ?4Ov@r(?3YU@r2ꖷ(y@r\$\V?1l&'@rfMFv?0O@rp?0@rzn?0PF%@r!G?'vÑ@sHdW?';X@sRzA?&4+@s\]?&Xa~@sg9Aj.?%@sq$?%t3@s{?%nƴ@s ?$$8g@sTϻ?$DK@sg?#]'@s?#;pnE@s)z!?"|}"@sp^ ?"Wݢ@s÷AJM?!倇X@s%4m?!sx@sEr?!i@s\? Tt@sϛ3? 8kv,@sS?O@t`æ?J_@t z?ZcM9@t]?je,R@t 5A*m?zd @t*|%?a=@t4R?\Ý]@t? =?UJ@tIP{S?Kz3@tSes??U@t]ޖ?0 @th%z? 9@trl]9? dh@t|AY? d@t$? ߐ@tA? )h@t? 9c@t?? I{@tE? Yh @t\/? iEgg@tģzn? y@t]Y? b(7@t1Ax? ߚ^@tx$?  @t? p׈J@t?? ?R_@uL^? w@u %? F7@uڗ? @u!!zN%?!aB@u+h^8E?!$#@u5Av?!&&o@u?%`?!6H5@uJ= ?!F_@uT+?!V@u^~?!eϧW@ui?!uq@usX?!6@u}z?!@u^d?!ȋ@u-B?!@:j@ut%@?!UIn@u+?!Ӑ/@uiJ?!4 ]@uHϧ?!֣f@uŏ?"vg@u֖?"@@uz0?"!@ud]?"1G"@uA?"@8;@u% ?"Pr.O}@v9 ?"a@v Ij?"v*=@v3?"P@v" q?"J @v,T[?"@v6zP?"c @v@^p?"ӈV@vK)A?"rn@vUp%?#@v_6?#y%v@viV?#.@@vtD?#Cw.@v~Q?#W/:@vҗ<?#ll}@vzzp?#7s@v`^d?#Y;-@vA?#QD@v%?#==@v5V?#ҫU*@v{u?#* @v?#j@v ?$;@vPr8t@y^D?? g@yBd??Kڻ@y\%ŷ?@UӎN@y ?@u@z*?A-5y@z0J?Aj@zw?B>"@z%?BP.cs@z0{??CP@z:L_)0?Cؿk&R@zDBg?Day<@zN&Q?D5eB@zY! ?Er宒@zcgz?E C@zmиj?Fr@zw?G 5+c@z-?av=K@| (M?b@|[f?ck[@|P?cDNO@|鴏?d5g>X@|0y3?dc@|w{?ePj@|_?e8R@|B?fkuP!@|L&?fB@| m?gKH@|?hr@| 0?h:@|go3?i/0@} YS?i@@}{?jJT@}<_?j9@}(B?ke@}2&9?kB2@}= ?l@}GWҬ?mO+@}Q?m O@}[?n)#@}f,9r?n/@}ps|#?oDQp@}z_a?oxw7@}CL?p`@}H&X?pr@} tx?q{s @}?r d@}ќ?r?s$Zy@}ª^?s1@}|?t?ߥR@}8_B?t͛@}C,%?u[SuD@}&jx?u @} T?vv\9y@~S?w|@~ } ?w5I@~ᴻ^?xK+@~(~?x@~)o{?y:=@~3_?ydž\@~=C D?zTQ@~HD&d?za@~R 4?{oGe@~\?{D:@~g]*?|#@~q_GJ?}-c@~{?}t@~|o?~3E@~4_?~ 8@~{Bd?N @~&ք?ە@~ ?i@~O?@~Ö=J?M@~ݵ'j?mT@~$e?+V}D@~k|O?,j@~_0?@@~CxP?G l@@&?]8:e@ ?b@`@?@ 6?~B@*[? /9@4?D|@>|/?&ޒ@I0`?z @SwCXo?B;{@]'B?Ϸ~@h ?]Y)@rK6?V@|ѩU?x]/@ٴ?H,@ ?ջN@g|?!Gv@_\h@S3?Ho@?S2@|\G?ޣ?@(`Fg?iR@@oC?pR@϶'n?~@ -? l@CM?#^*@ՠ?F@ѵ?B@?4Q"'@ _|?ۆc@"|?\@- `r?WX@7gC?n5,D@A'%?n%@K x?{@V;Ø? m@`?a8! @jɵ ?V\C@u*^?Mk>@W}~?-E}"@`R??'@DQ@ю ~?uD80@|?K}@`2?T`@cD?^@'[d?k!Bh@ E?"x5@7?y@~m?44@#ŵJ?i@. j?F\@8S|Խ?@B`?Xd@LC0?@W('P?k#L@ao %??ɺ@k?}^#b@uN?~q@Ci?H@v? @|?¡NB@`?+@_CO?ô6@'o?=`@ ?ƌ@3?OG g@z.6?!@U?b#@V?J(@O}@?t~m@`? @Di@l'?֫@v q?oZpZ@/!?|@vҚA?ςfnr@ؕ? p@´?Еy@K}?@`'?Ѩ H@D){?2# v@ (?һ O@g Q?EF)@ݭ< ?@za?Xp@;d?@?k-@}?<@`G?~_g@WDg?w@%'?ג"(@/ 2 ? @:+-?إ\GR@DrZ?/!@ND?ٸ@Y?BO@cG}m?@m`f?U&]@wD?ROA@'?iFJ@c ?򱑈 @M?|c.@l?r?@7$?ޏڌz@~?J@}M3?ߣ<.@ a7R?,f@SDu?ඳK@ޚ(_?@pY@ ?0*@'l?S)E@nƌ?ݳ@?g0@?DI@C}-R?|@&ar?\0@0DU?a@;(??[@E_ ~8?(2%@OhX?0'@YҦ?}-&@d3?E^Y@nz?{6@x}>?Z6آ@`?,+@OD?o BR@( ? @ $?ɖ@#Hx?mӁ@j2?9բ@p?#\p@>?S8@?}^?8Q&n@߆`ױ?*5@D?MN@($?γ@[ D?bP#@(?@?wZ@/Q ?@'v;*?j@1}y}?o@<ac?@FKD?,+@P(?R@Z d?A0ۿ`@eﴃ?'@of?VX=@y?Q@J?k@;~i? @aC?#o@D? Y2@(l0?8@W ? _i@?:}a@?5?3@+?u'@ri?K*я@}?ӢsQ@a#?`~O@GE ?*A\@ (LO?v@ 6o?tv4U@t?d*@(b^?Dk@26?3w@@3~1? $=@ zap? 7slr@EZ'? 7͍@({?d3.@)O ?Ƴ$@3?7g@=A?)]e@H#a?,w\O@Rj'?V(@\~?n@faP'? M@q?E:G?{*@{(x?TG@ b?I/;@ ? #@ZӋ-?v@ɀ? F@蚳?=@/}?;L@va?|@ͽEf?ifMK@)?Qo@K B??Pd@,?..@kL? {v@Ul?\&`'^@ f?uF@}?^s@a3?"@*;D?8-^@4(?RB'@> "?#o@I ?@SVKl? 9`:@]5? "'F@gs?!H#@r+~]?!B>@|raR?"wi@Er?#ޡ@(?#^͉@G ?$?<@8?$т@X?%n;@?&LW.,@b?& @Ω~>?'5}*@a|r?'͔)@7Ef?(eZ@~(?(#@ ?)@ X?*,s@ Rӷx?*ĊS8@?+\[@+'~>?,9@5nb^?-#@?EF?-z@I)0?.SF8@TC o$?.n{=@^YD?/Nq+@hӗ?00;6@s?0$ic4@i O?? @to??4@~J?@6bK@"?@V@؛ 5?Ai$@~J?BuK\@fb4?B*@Er?C6>}@)]?CКz@; o?DjU9@Ё?ET@?E;i@?F7s@VU?FY@~u?Gk@b?HL@+E?Hn@r)=;?I8~O@@" '[?ILu@,e?Jls@7FO?KTҭ@A!?KMi@KԚu?L9hD@V~?Lug@`ba?MmQ @jE?N.F@t)[?N2ע@7 z?O:5@}E?O@/?Pnq@ nA?Q4@RXa?QbR@~?R6&i@B ?U0N@-?Vr+iD@Л8?W "@"?WW@^b`?X?1@#EG?X#6Z@-)f?Yrr@83 Ǻ?Z m&@By?Z*@L-?[?cU@WL?[ 2@aN?\r#@k?] g<@ubA?]i@#F+3?^?ɿ(B@j)i?^~(i@ S?_s4NJ@?` _0H@>|?`,@l?a@eG@̛?a$S@~?bs5@Zb?c {@ܡF R?cmfE@)r?dA5Wej@/ 3?dm@ur?etʡ@\8?f}P@?fhn ~@J?gB:l@$~?g@.b?hud@9Er?io@Cf)Ց?ir@M ?jCthT@W?jSrDO@b:?m@Fw^?nxk@)?o.G@+ ?oė@q$?pFG@w?p{@?qzqĘ @FD?riW'@ݍ/ ?rdD8F@bm]?sH`F@FW}?s_<(@b)?t|_7@ ?unc@D?u:@6Ԩc?vGJ@%}?v೙@/ě?wyh_@: *?xzi@DRbJ?x‘@NF7?yD˲@X*!?yUM@c' `?zvAk{@mmJ0?{$q@wԈ?{&@r?|B @B?|.b*o@~I?}tFt@bi?~ _b@F?~{@^*??+D@ @/?ع@*O?qd@2h? W@yR?&m@?=O@{5?y@Nb?o0@F?@)?@# ?;8{@&i o?mcй@0?mk%@:2?DM@E>?u@O[U?9UH[@YcEu?ҕO@dF?kֹ@nZ)?97@x ;?_@?7 N@.Ԯ?NW@u?j=%@!?F@;t?@Jc%?6-=ӯ@Fc?ρjy@*N?h׷:@ [?0bt@evz?1@Դ?4 @?E@:A?g\q@`?٣@c?@F?2;O>@'V*.'?@1 lz?e1ߧ(@;V?QX @F*Ԕ?rک@Pq ?0y@Z`?ɼ"X-@d?b@oFb? @yF?9M@*F?.g@ f?ǗD@a6?`g@ ?@_-?4?Ì@6IL?,l@}?ŧ@cq?^@ F?"}@R*2?b@ ؆?*z%@¦?L̻@&?]1'@ m?L?z)@)l?!@g?)64@(BcQ?ag@2F2?[@<*zR?@G ?[\Ld@Q]?'ڿA@[? bYz@e8?Zh"2@p2 ?ŵ@zy?%0@c1?&Tu@G?Ed@N*Zr?YQ@m@D?XO@?#y@D@"m?%`X@iX?@̰w?Xnc{@?иC@>c?UQ~@F>?$ul@*:?Dt@$?Wl_@ Yc?[^,@M$?\C@縋w?'$@).u?7@3u?\ړ@=c ?@HF]?&t@RJ*}?,)E@\?{@f?b()R@q-D?t@{ec?:@U?2=c֑@??A@:c~*?g2$ @F}?e>@*?!q]@ ?7߶E;@U?Ҡ!@͜ c?mbL@?'B@*5?g:@q?=Ԑ@c^I?؁@GHi?sNy@ F*?8@p?KN@/?Cª)@*ՙO?ޘ0@4aע?yoǹ@>?I@H?ï%U۽@S6c5?JLS@]}G(?T@g+?Ń@r P?@|QO?Ƶ"*s@yo?Pxɜ@߸?c; @&?ȆOD@m5?!>|@cU?ɼ/X@G?W"@B*?'@Ή1?ˍ-@;?(a@Y? *@]C?^x@?X!@l!?Γ"7@ 2ct?)qp'@yG?ϿÂ@ *?V@+?ln@5MZ?т$|@@?z?}-@I۹#?үy ξ@T"b!?EmB/@^iLA?5ͩm@hc?r`@rGt?g _@}>*?՟_@'?5@z?/7@Ś?b#k@Y?4u@ ?؏wFf@,`?%D.*@.d?ټ[A@uGT?R+ @ټ+>?G@}F?FW@Igf?:‹_@ե?ܬ@׹?C6G@ ,?ٶ@e ?p9x@!c?@h@+G4?ߝDѥ@6:+?3b@@]f?W[.@JG?`]L@UՅ?rǘ@_Uo?1U @iL?$^j@s〘l?)_ @~*cֿ?Qi@qG?XaL@*2?~򐂫@R? @E'?,-@?B@ӹP?n@:8?pٗ@ax?6@ڨdb?`@G?4 .;@6*R?ʶ@}q?adt@?,mZ@ ?쇫e@Q08?,q?@"X?D@,߀X?<2G@7&dB?ͷj@AmG?_>G(@K+k>?ƛv@U?Pp@`A?h@j?h@tϹ$?6A@@w?ȇ@{ @]?Z@d"? @H ?}@@2+K]?ֶ,@y5}?nrP)@s?2T@ղ$?âv@MC?U>@۔ڗ?ܮ5@ۀĶ?x|Gs@"d ? 9@iG*?@++}?-cȓ@? 3e@=S?PMe@#>?XD@-˹|c?t+@8f?/@BY?\2@Ld?) Y@VGI?cq<@a.+i?LmP$i@ku? @u?oտ/^@/?A@I\?DNA7@F?$'@׀?a@do?HuA@eGi?3 7@+?k9@@?C@9?w53@܀O?!d@-?%/m 6@t֖?%'P9@?&IEto!@?&eJn@&Ik?'}@0d?(U@:H%?(ή0@E,?)K'w@OeNR?)?g@Y8q?*G 2@cv?+rs@n9`?+)@x8?,NJ~@ǁX?,@dǫ?-0`6@UH?.do:@+?.%K@>?/QD@)?/ @p?0D@ʷA?1 Z@W?1@Eiw?2Tʯ@d?2>@H?3@+=?4#T[@a]?4 V@?5XR@?5qJ@'5!$?6ي@1| C?7'3{p4@;ÁI?7L@F e3?8[ѯR@PQHr ?8#AO@Z,\)?9v@d}?:*i@o%?:!%@yl?;_z4d@?;P@c?cL4p@,gL@]z??9:@ˣd?@2w,@֣?@W.@1/?AgGX@x˂?B,W@?BS3@d?C6:@ MH?CNs@,i?Dlg@?Ez@(!D?Ex@2h.?F<)@Y@e@!?S5 -@I*@?T'-?@),h?T&6@3UR?U]!@=?U3@GZ?Vn@R)z?W.|@\p?W-@f?Xd#F@pe @?X(@{EI `?Y/y@,H?Z58 l@2?ZBV @q&?[kN>C@`[F?\[ښO@?\k@?]<|`5@5 ?]׎σ@|e,?^rrJ@H?_ @ ,ԟ?_YЍ@Q?`C钋@?`{@;f?az42-@ %%?b({@lc?bA@,?cb.@)eL?do@4AHʟ?dfi@>,?eIR3@H?e&@S2?f<@]\?g0xf@g?g-X@qC?hu#)@|1.?i&&O@xelk?in@IV?j]%r3s@,?j`6@M~?k+@R?lD(@קq?l9ME@!?m­^`@h?n,M0@د8?n@eL?oqixm@=I6?p@,t?p4@_?qY @@ q?qj@Xׇ?rM|@ ?s@@*枰?s@5-W?t@?tew?u(@II?u^@T-?vn>Q@^I?=?w2@h)]?wIs5@rg?xUu]@}Q?xĂ@d#?yEΣ@zC?z=@e?z>WJ@9I?{Q@, ?|&x\@]?|ȷ@ }?}kma@TG?~$g.@ٛ1?~@pC?S@)Zc?Ul@pe?e:&@I?;͚@ ,)?t@EI?@!?#&@+Ӽ?t@6?i"@@`/? ҭ4.@J:?]PK@Tf$?Q7A@_5Ib?@i|-M?"%@sh?9\@~ u?{ @P׳?~=U@/?!@ޞO?Q8@%?gc6@lf? @IC?s@--5?Ob@Ak?+@ڇU?,1@ד?7jpl@~?ڐxj@\n?}`A0J@? 1ٱ@ e?,v@1I?eO@"x- T?-2@,t?ڊ@75?NdBu@AL?@z8@K^:?l@Uڞ?6$^@`!?߫~G@jhe?|t@tI!?C@~,t?Ž˥@=ה?ewg@?a@?MRP@>Z?N;Ɖ@X(z?+w@f?=@fP?7@-I@?Ǔ@t-y`?|گ@?['@?z@H&?e^m@F?L@֟?ǫ@?KsV@#df1 ?4es@-Io`?@7-Y?09@B9?,~p@L?sD@VF? -@a f?3@kT?X@u?@f,?K @)IL?> !@p-9?߸Lk@#?r@b?#-8K @DL2?#@?fĀ&@ҟt?i/@?+P|@`f?K<}@Ik?ݍ#@-ŋ?|I:@5?1Eje@{B2?K @,Q?ts`@ j?Xr@$PT?{@.?ZMf&@8f}8?!2@C%I?s@Ml-??͟(@W?ᦁK@a?-˰@l@ q?%]@v?;@Ο4?i@? J=@\f]W?2@JGw?N,@-?z@1o?g@w=?4ɴO@Ⱦ?k/@ְ?xYt@L?I{`@瓂#?:@f=w?^. }@!J'?"@h-e?b!@P ?BIt@]?"2@%S@JW??Ǎ@. ?]C@ ? @_3?υ@=? @([?Ud@34E?L`@={?q@Ggn#?y+@R Jw?uPu@\P.?d@f?<vs@p ?]hϤ@{$]?hb@k|?@%?S@?+3@@gNC?W@J?XW @.v?@ ? Ey@[)? jV@ע|? s"@ǜ? H)#@0? ފ,@w? t7@@g.b? S@ K? c@L.V? 8!@@@? ΋22@)I?dXW@4 ih?c2@>g?cr @H?(AH&@R/?i@]$@~ս=?>’@ʐ??L@c??nʀ@g?@tG*@K#?A!@8/v?A @?B/ك%@C?B÷ @ ق=?CW8_@Sl]?CyT@嚠?D\9@ᄔ?EA-@(g#?E'D@oKC?F;C@.?Fx@?Gb@#C$ ?G@-)?H@7ѽL|?I@B6?I@L_t?JF[@Vh_?Jڂz@`Kb?Knx'@k4/?Lo C@u{?Lgi@?M*aYR@H?M\@O,?NRYq@?NX8a@݄U?OzX6@$h?/?PYV@kK}?P\{/@Dz/g?Q6ah[p@?Qg~@??R^o$'@h?RxGj@ͽ?S6@?T'6@[?TS@hN?Uf)@L n?UvN@$0/G?V @.w1?V{@8p4?W5|[@CZT?W̧5@MK?WdiI@W?Xuj${@aل?X@l gn?Yk4i@vgK?Yѭ@/'?Z`or@?Zh@;PT?[UP>@:t?[Pَ@ɽx?\J@b?\ŗX5@W:?]@K?lrO@3|?lm>@zf?m#<@?m¢,@&1?nM+@0Oͅ?n~I@:h?nw@DK?orœ@O$/?oR#N@Ykk?pg 8@c?p--R@mF?q[/v@x?0?qB@oQ?rOVqM@ͅYq?rk]'@h?sCg@[L?s @/7?t7@W?t=a@/?u+pm@v?ue@Խ?v @Oq?v=2@K9?w\w@hw?w|ҝ@Lb?x@ /W?xJF@gv?x3@?yw 9.@&ڲ?y0j}@1;=?zkWe@;]?z1h@EɅ?{_@Pi?{Ԉ@ZWLB#?|Tf}@d0,C?|-p['@nj?}H[U@y+T?}Šb/@rړ ?~GL?@H0?nM̏v@R+? @]K?ky@gb?1p@qվ?iC@{?f'5@71?g;t@~i@ٖ?D_8@Z?\+@㡿 ?B[26@@\?Z|#M@/*|?@[p@vih? @ MR?(:k)@0B?`k@!K{b? *@+?oB@5ۣ?r@@(?J^@JfH?.ٯ@T ?$Z7@^i?1@i;M3?w@s1.?kR:@}[?o@E?FDՋ@Vۃ?v~K@H? =@䢬h?ܬ=@+?*M@ri?hFEX@ŹM.?}@0N?B]b@G;?좈@%?%8@d?` G@N4?*g@b?d7 @ v?<>m@i??R,@"7M?F@,~0n?@6Ǎ?‡=@A ?SkH@KR?az@U.T?ٵE@_l?<Ar/@j'V?ĩcƆ@tni?6>>@~M:?Ń@0?9 !@C?^>J@?u@ ?9t@s?Ǧd%g@^?e@ƥ6?ȀH@j!?NX@3M_Y?[@z1Iy?؊@?6AG@q?ʣ@N۰??c3@_?zI@ܢس?@##?Pɿ@-jj&?̻rc_@7M?y?&Xg@A1)?͑@W@L?g?(u@VR ?gZ@`ې_?(@kz?<) `@uZ?ϧc@?@iE?} C@/Me?蜅?@v1 ?SBi@?Ѿ|o@2+?)nV@JK?Ҕ`m5@ǑZ?SF@أD?jGN@?<}@fjm1?@2A@M?ԫ)@1?!1@;?Ձ@9H@K?َ@k?Wb@$:? Xu@.V$?-'!@8c1?טc@BjMQ?v@M+M?n@Wr1u?@a?Dy/@k7?ٯH@vF܊?@ƪ?څ ?@ԣ?%]@?[@bj-p?^@N?1!#7@1U?ܜ)Gܥ@7@?2\R0@}~V?r?%]@?i(@̣1H?Oe@h?DÍ@ZjY?q%@NC? ut@%1.?cд@0/lN?ÁC@:u?#2J@Dܔ? @O?V@YJ4?BJN@c?N@mj?!>@xN#?ai@f1bN? Xys@Lm? ח@?P@:t?HJUv@4?@@ȣT?s@ۧ?v0@Vj?_21@ԝN?5@1:?:@+,?~j$S@q?(ҡ@U?=9d@? ?>1@F}s?vfU@g?[x q@&j??@1N?#Rp@;b1Y?y_ @E ?؛}@O?7H+@Z65 ?<@d}??Su@nģ]?Ucn@y G?V@Rj?{a@Np&?sS@1y?ҕ_@'?1'w@m?@ ?_@_?Ok]@B?x@Չ'?0IY@k?mwU@NPE?̿b@^2:e?,1@x?P׋@b?ֶ@2ܡ+?I劷t@y?0@'ɞ?}.t@2?g@?bKDz@?@j1? \o@NQ?Hύm@Z1?ߞ|@?> @#?LB͡@. 7?;i@uK?\&@༤5?V[x@s?/@JjP?{ fv@Np?g @ 1?:K;@?[ @e7?8@(V?Z@2+?"c@=:?K@GT?{ua@Qk>M@ ? Rb@Fk\? =A܈@N\? sl@2F? @"? ]lC@aoB? {(@ܭ? BJp@? ~w{@6 ? ޮC@}(?>@ j|?G@ N?Uށ@R2&?_@)?A@3Ob? qM@>&9?=@Hmw?y@Ra?@Yhb@\H?W@gBkh?1-@qNȻ?apW@@{2??g@.?!@]/?1yϛ@?s0@W?Bf@2B?@yg?<@@kj?c+@N?r&@N2?$ w@@N?S-/&@m?䚡@"?D.*@i? k@ "4?xy@ S?dܝ|7@ >kJ?Ľr@*O4?$.@42s?E:@?]:?dD @IY?DGo@S݅?,]R7@]?xAL@h.S?cI:@rus?R8@|k*?#0@‡O?@‘J2S9?㕺!,@›=Y?C!2@¥{?i8Q @°e?T @ºe ?c?@Ĭ??+@̓?#o@:k?m`@N?^9@2%? B=@y? ӭv@U?!3R@ E?!biK@0 ?!§\@!*n_?""@+q?"XA@5k?"n@?N%?#Bv4a@JF2E?#kY@T?$a-c@^?$bX-@i& ?$Pw9W@sa+?%"HZ@}N~?%Aބ@Ç8?%;Ŀ@Ò6kv?&B6 @Ü}Oa?&1S@æ2e?'-8@ñ ?'b)ZQ@ûQ?''+$@Řݱ?("%:~@K?(#/@&j?(#rB@m?)B#@l?)$@OA1?*&@B2?*_]|F@ i?*1@?+ Ƅ@"ݒ?+d@,]j?+1@6?,h=@@?,jB@K2k?,׮@UyO!P?-4@_3 p?-pI,@jI?-ǂТ@tM3?.@~r6?.uV@Ĉ\V?.3h @ē"?/$ov@ĝi?/{%;@ħk?/iğ@ıO2?0e@ƅկ?0ؤ7/@?1/@RV?1$CJ@Y-@v?: 0l@E`.?:d|@ݞ?:@S@?;"z@?;if@a?;Zm @kg?<{G@#Oه?_d@M *m?=Ơ@WQh?>z&@aR?>sg_@k߈4?>4QK@v&kχ?? 1!"@ƀmO??v@Ɗ2??@Ɣ?@#cB@ƟA m?@yХ@Ʃ ?@2]N@ƳH?A&6 @ƾ3?A}O8@]qS?Am\@Ҥl[s?B)By@O?BCY@23?B֮33@y9?C-@Y?CFR@?Co@M?D0bV1@?Dо@$ۈ??D?@/"l;?E3\h@9iP%?E5@C3d?EY@MY?F7>@X=y?Fs@b?FC{@l?G:Yod@w??G-<@ǁY_?GAj@Njl?H=u@@ǕP?H,1@Ǡ.3D%?H@Ǫu.E?IAֹ@Ǵl?I"i@ǿV?I @I ?JD]#@Ӑ+?J 7@׈~?JsJ@l?KGء@eO?Khl@3?Ke#@d?LLhFL@9L?LR@6?LK9@%u+?MR2@0_K?M{Z@:U?NK1@Dl?NYv @NO?NGj@Y*31?OI@cq?O`})g@mؤ?O_@w?PT>@ȂE?PgRU@Ȍ?j?PQ@ȖӉ)?Q$( @ȡlg?Qn,?@ȫaPQ?Q^s@ȵ3P?Rlb @ȿzp?Ru @5?R̮?@|ޢ?S$P@6?S{9@ ?Sӕi@Q ?T+9@@lG?T݁>@P2?Tڂc8@&3pp?U2'ڜ7@mZ?U@&?Ut@0ރ?V9@;AV?V@Ev?VlW@Oψ?W@qI@Zl?W,w@d]P?dEGdp@4(?dׇ@f?d2@)Q?eL^y@pޏm?e"訴@ y?e׺@?fS\8@E?fsJ@(lS?g:m,~?pL@HMPj?p@R4T?p@\E?qWP@g!}d?q@qh޻?r @{¥?rb{@̅+?r}]Y@̐=J?suf@̚m ?smn@̤P?sgێ@̯45?taQ@̹Y1?tx\C@ß]?tWb4@G?u*S%V@-…?uO.c@tp?uLي@컉j?v5JS@l?vHTk@IP?vG0@ 40?w@FG@P?wF @ =?wGr@*d'?xKHɞ@4f?xJm@>P6?xMM@I9?yVPz@Smx?yTL2@]P?zX{@h4?za]3Z@rUp?zclp@|ɐ?{i0@͆?{lpq,@͑)?{x&@͛p0V?|H@ͥv?|w@ͯmX?|ВnN@ͺEQB?})qO@Č4>&@lQ?./@v5?6 @ҁ9[?㲯-@ҋ{?>/T@ҕ?7@Ҡ ?,3o@ҪT!B?MJ#@Ҵ_?+{@ҾnI?d@)Q?],b@p5r(?W@ݷ{?0J@?l5>@D?6*@?!6@ҧa?|?@?)@`n)?1K8@%R?Vw@/5RG?YDWk@:5@1Ƨ?~@< ?'rv@FTn+?Ď@PR~?4Lv@Z5?<55@e)(?@oo?[}@yQd?QY@Ճ;?$Zvc@ՎDy? @՘c?fZ.@բnJ?U^P@խRj?&@շ`5ʽ?|$t@?؍4[@0?4J@4P?đ`<@{?t]r@¨?J5B@ D?ŦQ@אG?YJ@ךc?K$\*@פ?Ԧ@׮(? S1@׹8-?]H0@P?ո]@o:?mi@ Rx?o@T6c?[y@g?&ӝS@?ׂLk@(?>@ oij?;=d@M?ؘ$:@m?v@*Do?S l͕@4S?ٰT/@>6C3? [N@I-S?jU%@S_k?+h@]U?%u>y@gĔ?ۂ/Z@r4l? ɛ@|{?=U@؆n?ܚ@ؑ R?-@؛P6#S?U:y@إ r?ݲѺ@دK?f@غ$5?m&^@kt9?vQ@β^X?',@?߅hK@@o?jS@R??r@6??"֪@?d`@ [ײ?W@? uy@ %?c@+0>x?o@@5w|?t@?of?*iW@JR>?P:@TL6^?@^ͱ?Bt@h?|@s %?*%Z@}gD?Z@ه? @ّ?@=@ٜ@ڒ,o?13@ڝ(j?@ڧoT?%$W@ڱo6?Ig@ڻS}V?𦩺y@D6?R@Ћ?a0{@?u7@"o?F@_ ?y@J?GT @5?3J@4osU?}@{S]u?^{@"6?KhL0@- ?4Re@7O? Qŋ@ݴ{^? @ݾ:Y@[? &b36@C{? M@;? זJ7@э%?!).@pdA?!zi@'_TNa?!a@@17?"@;v?"oP@F3'?"1t@PzG?#!{s@Zݚ?#diM@eǺ?#@oO ?$8I@yp-?$Y@&@T.?$3 >@$7l?$}@kV?%N>z@ࢱG?%@g?%]Z@?Ž?&B,gp@?&@͌-?&Aa|:@pM?'7@[T?'-D@7?'*@7?(,z@/!3?(~rq5@ v_?(dd@I?)!@?)sb@(Kr?) `@2pl?*d @a@p;)?,`u@zh?,RP@ɍR9?,*@p?,Ӈ@WTz?-GS@ᣞ7?-N@?-J@+r?.?0ɐ<@m^?1O@⫱?1laN6@)7ƕ?1ʟ@3~$?24mq@=ōx?2`U@H p?2 P@RST:?3t{T@\8% ?3T9@fc^?3M0@q'M~?3-^@{n?4I'}bk@ⅵu?4k+O@D?4@Cd?5=r3@⤊pܷ?5=r@T?5R8FH@8*?61± @_J?63cQ@ͥ-?6ԥ1@?7&9@3V?7wY@z@0?7ͼz@~?8pZk@p?8ki@ OT?8YѲ@7J?9_@i?9`CU@*# ?9>(@4j?:0xsV@>60?:TN@H P?:GS@S?^?:p@]qH?;I#>v@gT?;Sn@r8q6?; 3@|[?<=}B@ㆡ?<3@?&e_@KU?>w2o@Β8QU?>a9@??WF@y??l_@f??ߎyW@Ƣ;?@_ @?@`B@ ;ʮ?@`@q ?A &@ T!?AR@+81u?A^rW@5W?A j@?Y?BDr@ID?B`h@T+Ƃ[?B M-q@^rl{?C6H)@h?Cg@sq?C@}GTA?D(2@䇎8a?Dys0X@?D"/@?EҨ@b$'?Ek"W@䰩bz?E4N`@L?F 2 @7?F]x@~qu ?FJa@Ta?FC@ 8?GOƦ@S?Gd:@?G!@G?HA!`@ 'f?H@n,?H9ax@!?I30$@+qU-?I3@6CU?M?I^o,@@8}?J&u@Jg?JvJ$@U?JLjP^@_^3?KAۃ @iΆ?KhI6@s ?KiS@~3?L qw@zq5L?L[, @Ul?L|@8]?L@OG?MMb`@展3?M 3U@pR?ME/@#Ʈ?N?@j?N[y@ڱ?NrwV@q8?O1ۆb@?T?O@8?O]*g@'?P#[X-@?Pt8t@ZPr?PĀs@":?Q @,x?Qec*@7/c?Q[Q9@AvqX?R0P@KT߫?RU@V8?R:pW@`K?R̪w@j>?SFѭi@t0?S@?Sj6i@fY?T7@CV@擭C$?TQ@qx?TTu'w@;Uk?U(P@沂8?Ux@ ?UBu@^?V@V}?Vi㭰@۝?V52d@?W !a@+#D?WZ(?@rr d?W+L|@UK?WL@95?XK 2@Gt*?X'mE@#}?X|:@-㜝?Y<ыp@8?Y'Vq@Bb?Y} @Lc?Z-p>@Vq?Z~+@a7U+?Z΃{@k~9?[@uTJ?[o4[.@ >i?[@R|?\租L@甙f?\`A@થ0?\@'O?]@nqͣ?]QSV@罵U?]@8?] F@C6?^Bj@܊?^&@\?^&5:@F?_3v@^O?_z@oo?_э)@q?` i@3U?`nN'@$z85?`Y@.U?a 9Uk@9?aW@CN?aOW@M'?aj@Wܫ;?b@Q@b#O?b}Q|@ljr9?bW%t@vUx?c*?H0@9b!?cw>@?u?cšN*@蕆?df_@?da+Tck@dz?d@Z[?d@辡/?eJ}@r?eCջ@/UX!?e qD@v9BA?f3@?f;@j?fcQ3@J?g,@Ǔ'?gj@تz?g*@?h#@%fq?hTV@/U ?h!@99"`?h|{@D; ?i=3f@NJ?i@X4?iT#@csG?j'!<@mV]f?jt'@w?j¾r@r?k=r@+U-?k^]s@r9?k-8@頹?kB @*?lGF@F?lo@鿍Sf?lr@ԫ=?m1E'@{?mf@bre?mcc@UL?n0@9l?nhy@7̿?nh4@~?oG2@2?oYHw@ R?oJeJ@&R?oL@@0?pOO@-Z@:rF?pRq=$@E'V08?pV+ڈ@On9n?qEZeO@Y?q_""@c?qdj,|@nBR?r;j09L@xǿr?rp@Ъ?rwNE@?s1~E@^r&8?s}+@ꡥVX?sՎ݂g@9N?t'@38?ty%i@zw?t˫ + @a>?u~Z@ǟ?uona@N?u@镎?vc*@r$?veb]@#Uw?vc.@j9ڗ?w 펩@?w\ O@ ?wE@'>A^?x*&&@1?xR:0@;̫i?xJPQ@F$?xZ-@PZrD?yHlGb@ZUЗ?y}G@d9?y@o/ ?z>@yv*?zԒ@냼!}?zɋ @ ?{4$@JI?{򌰷@뢑4?{@rrc?|+5@V\?|}3@f9?|J@˭?}!b@I?}sy@:i?}ŒV'@?~7@ȫ?~iĢq#@0?~ތ3@ VrR? cJ@V@ī?!@ ;?R+lz@Rr?0@̙U?6=K@9?@Y@'%U? {@nu?߄C@M?.Y@7?~w9@ Bv;?9&@`[?mB@r?l@)V?dZ @3^9!? 9 @=A?[^0@G?۞i@R2ٴ?Y@\y?I0@f'?V`@q@z?4^@{Ns*?8VuY@텕Vh?d@:S ?W9>@#`?&؃@jϴ?vZJ>}@?ܑV:@'?_Nִ@>G?d"8@ͅ ?fA\@s ?wU@VI ?So#=r@Z:3-?Ov@q?y @[?AI@ .? tٙ@uȄ?x$@f?/1n%@*?~F q@4Jr?\T@>V?r@ @H:L?kwE@Sl?@]f;? @g%?XΫwE@qd2?u@|:?@?F@r?2<@V?L @V9l?3gZ@݌?]@?ўcs@*? @qDR?o@ظ.r?,Ǯ@l?@FsV?]/[@V8?N<-_@:X?m9 @ ?J @b?%@ ?V@*>?7y@56?B[i@?}L?1[@Is7?%Sk@T VuX?tv3 @^R:_w?Ù|D@h?9@r?av)@}&>?'r@mȰ^?+XZ@?OP+@?w#@Bs$?흾 @ﰉWD?<ח@:??f @)?s@^h ?*s/?w@I@iV?ţ>@s:?Cd@~?bkqy@Z? @i?59z@?M@.:?@u$?ghj@scO?8cn@WMo?5ې@J:?՝+@ڑu?$-~K@5?roI@?X@eܨ?B&Ȉ@?]g\@ ?$@:sCo?Tl@"W-?H^@,:k?Z@7V?ƻ@AVU?43ɬ@K~t?T@Uȼ?Qݛ@`*?}@jq;?moI@ts[?\!@~W ? a@F:?Y?@(?T0@&g'?ټ @#mQF?x@-s??2=a@7Wy?_2@BB: ?ی~@L-?){=@V?wc@aʠ?c@k]?Fߙ@u?bvl}@1f?ˉ@2so?o?@yWY?M@:,?:"@L?l1@N?7?@媿?Ѭ@?k@"2?"99@i?pm[h@s?1ٚ@W9? yb&@>;$?[ <@bl?Cq@L?z"@?ED=@$Yt?#x@.R? @8琝r?0Y|@C.s?~y@MuW?F@W;8?@bB?i@<–@lJ,?{7 @vj?g6d@U?S0C@q?.lD@e}?k#TD@s?>KW@W?K@::X?$2@w?)bܢ@ ?wt@?@U5>?! -@眭]?bav!@]?T@*tG?2 @qW$?L@;pD?#m3@?@%F?5@/ ? @9]?L@D}?Ý@Na=?klSc@Xt'?@bWfC? @m6;Pc?S@w}? E@@x?l~@ )?< 0@QɡI?@ߝ? ڽu@ߐɼ?$O@&t?r@mW/?cG@ɴ;0? u@?Zhp@BX?¨-@C?p*@Ɂi?C&S@@?Ð~@]?1z@s/?+@WO?y>sK@&2;?ś+@0y?M?b@U?i>Wo@t?ȶT@+?Yi@Yj?Q燧@ʠtT;?ɟuS@W?ի@.;|?:-r@u?ʈ#Q@!?մ4i@t?#D;@I͔?poC@ ?˽@א? #o)@'t4Z?XjJ8t@1eXz?̥Bh@;;\?RuX@EF?@@@P:@?͍'@Zo`?b@dɭ?(i/@o?ucI7@yU'?­8 @tF?@W?]Bs`@*;@ӐF?zZ{@tf?ǩb@aW޹?C@;?bG@,?үee@ 6L?>5@|/?J8T`@?ӗ{@( X?@2QB2?2-@@Mq?٢>~@t?g:@X*??qc@Gː?U@Rṯ?ܡ :@\YX ?La@f;$?:lZ@p3w?݇´@{.?{@t[? @F ?mRsBr@]?޹B*@In}?j@t?S({@X?ߟŅ@;C?ca@ec?9b5@׬?p@??@9&)?B1@I?kW@ǑN? @ t?2@UXw?Qb0@;c?@)?K2@4*?7H<@>p?)@HI?Џ+@Ri?3@]E.?iA$@gu?}-@qXW/?"Z@|@?5Z>@5ʒ5?c@|Ј? >@Ñ?@ t?h]9@QX?@ؘ[@MXZ?@@@AY;?B@&@|=Z? ֣+@ P? V@ :?*⺵U@Py ?uoJ@c@?DY@ޮ? $K@%%?Ur5@/lu?%@9Y&?7F@Ci@1YF?Q`/@x<ҙ?ʈ@ ?xf @ ?i uG@L,?B@ɓ#?6!i@گ ?HnOI@!K?aS@hv6??2@Ytf?(0@=^?s$_@= ?t2@?o[@L?RW\v@&˯k?|C@0X?d@:?1~gf@Dv2?{h@O-ZR?Dׯ@Yt=>?)@c |?[ G@ng?q@xHk?֚L@ˏ?:<3:@֮?@?=@duQ?n @Yq?c@=?=1@9!?v@ʀG7?C @1W?v#@ o?ߩ@TY?"I:8@󛒘?l.R@v=?u@)Y?UPO@p=?K3v@ ?_@&#?# @1Dw?+7@;O?u[@Eү9?@Px=? ;@Z`vb]?TJ @dY?[|@n=?ʞʼn@y5 #? 497@|C? ~*E@? @ ۶?!. :@P ?!]#p@)?!lii@vB|?!!6@%Z,?"=PG@l=j?"T>@ճ!U?"5ix@c?##Fx@@}?#gW@˻?#@ή)?#@ I?$F+@\v"?$K@Z ?$ۡ.P@'=K?%&,@21!5/?%p@@{ ?.l@Tv?/ )@Z9?/X-<@>#&?/ǔa@)!az?/a@p?07/@?0v@@?02sU@D`?14z@׋?1bjZ@v?1U@Z&?1刻@`>F?2BAJĉ@!A?28@ +?2ֱ@4j ?3 q!@{T,?3jp!@@)¯?3OĘ@4 |?30E@>Pv?4H2@HZ?4@R=e?4z@]%!ͅ?5%\/@gl ?5o_@qJ,?5zJo@{4L?6]`@@r?6M@^@\?6$^@v?6E@Z2?7*@\=Å?7tҿGl@!?7;@?8d@0?8Rd&)@wk?8k@⾯?8R&k@Oq?: yEk@!!?:Wۋ@ hw?: @*7?:@4̠W?;54@?<ު?;Ch@I?;ns@Sw?<Zs@^ZEq?<]FShL@hX>/?<2-@r!m?<Lh@|X?=; eJ@,W?=߄y@s̀w?=F;@?> @?>bĿ@Hv=?> @Z]?>S@>??@5w@!??b @d8#??t0@"C?@eJM@`?@hVƠl@8J?@Hd@ ?@)+ @ ws)?AEҰ@ Z|?A|6@!T=?A&e0@+!?B"ї@5C?Bl|o@@(c?B(.K@Jo@?B@T*?CI\@^i)?C-@iDwSI?C N@sZ?D&t@}>{?Dp5{ @!?Dm@`/?El@@?EMAz@̢?ES@4 ?E @{?F*Q!@w3h?Ft?@ [?Fi@P>[?Gd7&@!/?GQ @N?GM@$¢?Gz@k̬?H.-i @ ?Hwf@4?H=ë@"@w?I IuwQ@,Z?IT@6>;?If@A"&?Ih@K\dn?J2V!@UN?J{Ԏ@_̌?Jŋ(&@j0w?KB,@twT?KX@~wt?K_Ǣ@Z?Ki@@L>?L6"*.@":?L%.@Z?Lɔ`@ .?MNQ(@gm?M]}+@ƮW ?M?@t?M~ /@?Nͱ[@!Z?Om @Xy?O`\@?O-@?O_@#,7@?P;]@-s!`?P$@7w_?P͹ъ@B[I?Q @LH>&?Q_h@V"rF?Q@`?Q@k隹?R:@uc ?RS.@,?R̠@?Sg@8w??S^)Z@[)?SD@>hF?Sќ@ "Re?T9<@T?T@ǚz?T˙8\@̹,?U~@(K?U]@o?UJ@w˿?U՛@[ ?V8l@ D>2?Vwi@ "2?VʥZ=@ ?W@ $Z?W\O@ ._E?Wab@ 8k?W|@ Bm?X7@ M4w?X @ W{Z1?Xy@ a>Q?Y{fP@ l "?Y[|R@ vP?Yף@ ;?Yd@ %7?Z6Xvq@ $c?ZEV@ kM?Z-@ w?[Mq@ [v?[[hL@ @>q?[V@ ȇ"?[?@ ?\6&]@ ?\0 @ [W?\;}@ w?]G 8@ -?]ZR@ 0x?]6r@ w[V=?]to@ ?@]?^4@ %"~?^}@ /L?^\t;@ 9#?_'a@ Cv?_WP/@ N ϖ?_g@ Xg ?_Y]@ bw ?`2Us@ l[6]?`{!0@ w?eS@ :"?f+l.8@ D .?ft@{@ O N?f@ YS1?gMr@ c?gN@ mZ?g*@ x(xD4?gm:h@@ o[?h)DT@ ?l?hrQ_@ "?h@ D?i@ n?iLS+ @ ͽ?i|@ ?iUA@ _:4?j'.:@ Ԧx$T?jpБ@ [b?j\@ 4?L?kQ@ {"?kJ;@ u:?ktFE;@ 鳍?k۳ '@ O͝?l#ǁo@ ?lkԄ@ &ݔ ?l@ 1$xt?l@ ;k[?mD@ E?,?m04@ O#?mG7@ Z@UZ?n]j@ d?y?ndt7q@ n}?n4@ yg?nʾ@ [@?o<‘4@ x`?o8@ [γ?o @ 0? ?p;9@ w"&?p]@ 5y?p9E@ ?pT@ K]?q5n'@ ՒH ?q}@ ٔ_?qťP@ xp?r & @ g[?rUV'@ ??r@ "E?rDm@ <e?s.41E=@ ?svQuq@ '?so@@ 2(,?tf:(@ ?~q@x|?~@\g ?;L@$?\?I@k#|?/@?G̡@?! @?C?i .4@b?ƶ@ ͕?@x] ?AЊ@[\G)?s$@)?|?pa@3#o? ѫ@>0?a%p@Hv?*@Rb?0(.@]?96@gK?<@$@qx?B}@{\'H?Iz3@ @h?YQ1@g#O?X/H@9?a@x.?1ixC@;bN?yrQ>@?{4@ɕ? O@x?Q@W\4?gS@??{@#/?))@,?qRz@rXN?@ Bn?¯J@?G@ Gj?}@*x4?q7q@4\T?=@??ѧ?d]x@Ic#?})@S?M@]:?9͌@h7"?@r~ ? @|ŕK?#rj@ y5 ?VE3@S\ss?hg@@]?qi@#?+֗@(:?rҚ6s@nZ?E@ĵ?Bz@?H@' v@C+ ?ee@y@?֋(b@\S?@@=?dd]^@_#|?V@ f&?%;j@y?:LN@!3Ύ?tN@+z?Ȝt6@5 ?\ @@x_?VN@JO\?@T@?AUF@^$?,ki E@i$FE?sy@sj0e?M@}n?\@ ?I^W@?,?CKW@x?o@\??[@??eDU@[#?ip@Ţ&e?$pw@?;R@/N?@v8?ɯ@wK?9M@yak?Xۛ@K\?2@ @?:>@#1?-C!@" Q?tMx@,f?V7@6?` x@@?IkC@K;7?vc>@UyA?ׁD¸@_\?{!@j@i?e0 @tW#Q?h@~q?V@?:s@+κ? 6K@r7?E@W?@y!?VN@G] ?fˇ@Ǝ@J?:@$4=?,$@+@r?s48_@b\?D@Λ?UGI@#?Hf_@7v?w^@~y?։G@\?Ҝp@# @*=?d^@-S$\?N=@7R?ԗA@A?b]x@=#^)?ţ@GjAgS?z@Q%Qs?%,@[?gA4@f>y?ƨb@pϸ:?85@z̳Y?*RC@?kk@Zz?Ǭܣ&@^ ?.@A??.р@/%1?oռ@vo?Ȱ@¼Z? }Z-@ϘY?3(Nv@Jy?tDps@ᑖ?ɵ`υ@z?} p@]??7m@fA_?x'R@ %?ʹU@?@::%?:g@)$E?{@Jc@3ȳb?˻ [@>L?P@HVz ?=,@R^u+?}Ѹ@\A?̾v-u@g+%?M<@qr??R@{E?̀h @e?^w@FB?M@,?B[㜩@zk+?΃o@^UK?ê@bA?R]@é%}?Dt@?υ:0@61?KY@}?u{@ijΤ?G+w@ ?ЈGEb@Rz? N1@ ^5j? B"@B?JEp@ '%]?ъk @*n G?˛sz@4Q? Ff@>pp?L` @IB?ҍF @S?Jv@]z7?@h^?O@r^A?ӐPI@|%=?1+@ (?@2fp?RY @yP?ԓ@?Ӷ@y?e{)@NzV?U;@ĕ^v?Օ @A?sZ@#%?#f@j ?@ Y#?V £@{CB?גw@!^?m@+ZA? 牓|@5% ?IܤY@?\?؆@J.|?Ǚ[f@Tu?rg@^?=@i9B?z$I@sJ{#b?ٷ@}^a?d%@BK?1V@%(?nC#@f tH?ګ}*@첛?u^B@М?%m@:?be>@Ł.?۟^]t@{?Wb@^?PIk@VB+?VIj@%jH?ܓCq3@ Th?=nU@*쒻? 7f@ q|?J1@.?݇,\@!N?'w@,Fz?"%/@6^?>[@@B ?{$@K%4?޸v@Ub 4?[~@_?23I@i\?o Y@t6G?߬R@~}m?nT@{o?&_I@ ^?c Jq@RB? @%S?#]@ s?9@&?V?@m=?,@д'9?^)@e? A(@B{O?J~:@^?nW@Bx ?@%s?*@^ ?>N@?z)n@"?_Y@-2Y?L@7yy?0q>g@A{/?lln@L_?䩃-@VNBX?? ,-@`&B_?"xT@j ?_!@u"j?囬Np@iЩ%?6 @E?@ј?QLX@>{?2@^ ?cb@B8_?="@&"?C{@@Z `?L@ѠJ?缔@ЉE?!ԟ@.se?5vR@u?rG@V ?-@ 1?]E@P?;4>@*3?wšO@q?Ww=@{\?/@_F7?-{A@FB?jk@ҍ&n?>D @ ?4LY@?ǝ@ap?\[)Y@?A@ ?c@ 6{?G@ }_&V?KfdX@ $Cv?r@ / &N?>$@ 9R ?V@ Cw%7@ BB?* @ &.?f5@  ?4@ W\?NS@ ]A|?ډV@ ?-d@ i?@ 2{B?;@ y_b?w(Q@ Bе?|@ &?<@ N (?)%=@ H?dzt?@!!?|6@!"_?$8@!iJ?zAr@!%{b?Q)@!/_r?%@!:>B?|'q@!D&?Ҙf@!N H??)AN@!Yg?z)1@!cY?I@!m?.S@!w*.?,?U@!.|N?gz@!u_R?6#@!C Q?ʊE{@#;?@#z1?@4@#dP?{\@#Y?K@$ |?@$_?*Va@$.C7?d"aS@$(u&?,@$2 ݪ?׻l@$=?g@$GIZP?KUn@$QDp?#W@$[ט?J@$f|l?գ@$pe_6?2:@$zCV?l[/W@$&ө?)>u@$: ?e@$? QU@$`cm?X,o@&I"C?nKA@&Si'?>c$@&] 3?u@&gS?=@&r=?vb@&|?G@&˙?W1q@&}9?"@&Y`C?[ɪ@&D-?h@&'l?<0@&. S?vM@&ts?@F@&λ?yp@&?$"@&I9?_hD@&|Y?%6H@&`#?^5l@'D ?mu@' e'L?K'@' 6?? y@' t?CM@'+9^?|Z@'5?;t[@'?Ǚ%?xN@'J|x?(@'TU`?a@'^C?.@'h' ?k@'s* _? z @'}p~?F0a@'>?%hk@'}%?c7@'EgE? @'|?+@'`?e@'C ?]ɲ@'a'+?לO @'Ϩ ~?Rj@'?Jk@'5?[l@'| ? @'ÙGd?'@( }1?.v@( Q`o?emi@(DY?"K@(!'J?o@(,& j? x@(6l?C /W@(@Ҫ?zY@(J1?.1@(UAP?v@(_}? Cy@(i`O?Wu@(tD:?h^4@(~]'xj?0l[@( b?a@(?4p@(1Ҋ?l@(xP?n`r@(p?ھV@(|? x@(M`? I^@(ДD6? O@((V? i@(" B? POt@(h,?!&@(k?!]9ʔ@)U@,n?5e@,)X0?5A@,p}?5* @,a?6+(@,D?6ckS @,E(?60@,ތ j?6K:@,ъ?7 w @,?7A+fK@,`?7x~[O@-8P?7 G}@-~"p?7~Dv@-5a`?8l@-&|EJ?8V`/@-0(6?8Q@-; sV?8D q@-EPﱩ?8l@-O?94( ^@-Y޶?9kX/@-d%p?9 Ј@-nl~?9{@-xa@?:Rǩ@-E+?:Ie]s^@-A(iV?:ؔS"@- Su?:K@-?:ᅰ*~@-{?;'3_""@-\,ѓ@.F=(a?>cͷl@.P ?>%@.Z?>ƈ H@.e<(??4~@.oX&G???3#@.yd??v/@.~N??V;@.-a??䷼)-@.tEw.?@T%@.(?@R@. ?@ @.H?@+@.?@}@.ַg?A.[+@.?Ae)c@.d~.?A~@.am-?AӨ@.EWM?B 6@.9(?BA*N@/ ?Bxv!@/?B~r@/ Ө3?Bwr@/(T?CC@/2Ц?CT@/<~?Cc@/G)a?C¨z@/QpE7m?CS@/[)!?D0=[@/e _?Dg+@/pDI?D@/zӈS?Dծ%l@/ҷrs?E f@/?EC4@/`~?EzB@/a9?EHh@/EY?E@/5)?Fp@/| ??FVH1@/*?FR@/ hr?Fćq@/PR?FH@/뗚?G2ˀ@/~{?GiD @0%aX?G3@0 lEx?G֛<5@0(?H gNj@0 ?HB42B@0)@ ??Hxs@03^?H@0=η2?H 8@0H?Ihrd@0R\~[%?IO5@0\bEE?IM@0fE?Id Y@0q1)m?IbN@0{x ?J&mO@0^?J\; @0~?J X;z@0L?Jc@0?Jx@0~;D?K3v^@0!b%d?KiEo@0hEc?KO@0ͯ)M?K<8@0 *?L z:g@0Vj?N$d@1I@?NZC@1SH~?N}@1]0?NOo^@1g~P?N!v5O@1ra?O1,@1|dE?Ogp@1)?O@1 6?Ok8Č@186?P >5@1 ?P?0{@1Ʒ^?PtL@1 I?P@1T~o?P2=@1Λbq?Q^P@1E?QL2L@1))?Q@1p V?Q@1u?Qb@@2?R#r0@2 D?RXsD@2)>q@3i?YsdR@3s-?YAvuf@3~<3?Y$@3U?ZD6@3??ZI@3b}?ZI"!N@3XFh?Zw/@3)m?ZM7<@3 ?[Оt@3,?[USnw@3s 3?[h@3ںS?[Y@35?[ii@3H?\+`[x@3b^?\`@4FH9?\o@4)?\<w@4d p?\<@4"?]2ϱ*@4,ԙ?]g @478r?]c*i@4A?]ϮQ<@4K~?^v@4V b?^8C{@4`TF(X?^lI@4j*x?^@nE@4t P?^$Z@4(:?_ ozb@4oy??_=(@4c^?_r/@4?_RM>@4D~?_ڞ)r@4b%?`.s@4Fx?`C6W@4)?`w@4` 0?`?p@4ۦ ?`@4Y^?ah@44C~?aHn@4{?a}~-@5k?aO6@5 bD?a@5PFd?bv@5#)ҷ?bN8G9@5- ?bf@58$*?b@5BkJ?b"4i@5L#?cpy@5V ?cSW@5a@L?c yZ@5kbd?c\1@5uFt?c@5)?d$x@5\ ?dYIH@5J?d@5j?d-@50?d7@5w?e*@5,0?e^n@5cP?e'@5LFT?ew@5ܓ*>?e#@5 }?f03@5 g6?fdi\#H@5gԥ?f0@6?f5U@6?gұx@6<?g6p8"@6$bo?gk ;@6.F?g@69*?gI s@6CX ]6?h՛@6MGU?h=!>@6Wԅ?hr$A@6b,o?h-j@6ls?ha쎶@6v@68x[?j@6cb{?k>a@6F?kR4@6 *?k,@6T A?k @7a?k@7?l%b@7(0?lZG]@7%o'?l@7/X{?lG{@79cB?lRD@7DDF?m,MH@7N*k?ma-s[Q@7X a?mϽ@7c?mr1@7m_?m@7w?n3m'@7G?nhZt@74g?n@7{c"?nѠ@7G ?oD!Q@7 *K-?o:@7P5M?ooRE@7s?o/&@7]?o%w@7$?p wH@7kg?pB/@7Ć?pv,@7c?pd@7@F?p c'@8*+M?q2=@8l?qE)@8S?qw*5J@8&[=?qQTW@80|3?qy @8:fS?r @8E0?r?Ri@8Owc?rqp@8YF?rl|@8d*9?rD> _@8nL ?sm8i@8x߬?s:c@8?sl@8 ?s;@8gFr?sÚ@80?t<԰@8cn?t5f5@8?ubf @8&?u@8,?uƽQf@9scO?u K@9G9%?v+N@9*wx?v]@_@9'Ha?vl Q@91?v I@9;Պ ?vŅ@9F^?w%) @9Pc~?wX@9Z?wKf@9dc?wy$@9o8GD?wz.@9y+d?x u9@9A?xS!S@9 ?x/cP@9Sj*?x]@9~?x@9ᜒ?y-:`@9(?yM@9oc?yxJH@9˶Fd?yF_@9*?yuu@9D!?z@9 ?zH%p@9JJ?z{@94j?z3@: _r?z߁`XX@:\?{K @:c0?{D#_O@:(4GP?{vt@:2{*ã?{@:<?{4@:G?| iw@:QO*i?|?l@:[?|r @:eݜR?|_g@:p$If?>5i@?7@=T?eogb@=^[d?W,@=hG? c@=r+$? A@=}0x?|1<@=vИ?J3z<@=?w@=M>?pF$@=K7^?Z"/@=u?˃@=d_?.@= G$?\/@=g+D?:CR]@=ٮƗ?p@=?%F@=; ?cɐ@=*?Ae@>ɝ}?q%@> ?A0S@>Wd??7#d@>!H*?@>++hd?Pf)9@>6,R?x\@>@r? O@>Jz?=@>UJ?/D@>_Gi?fwe@>i?C@>sd ?mz@>~H 0?&!@>c+H?E@>2?}A@>p?R@>7[? E!@>~i?$2a@>ŝ?\\YG@> ?:iw@>Sd?TL.@>ښGO?"'@>+o?;k,@>(?s&kn@>n?d@?;6?❕R@? %U?Yr@?Cc?R@?"M?k@?,d?P@?7Go?KSd@?A_+?1WK|@?K?hŏ@@?U?@?`3U?@E@?jzu?s@?tC?G@?-?z@?Odl;?9,@?HV[?N@?+?&Hr@?$~?^v~.@?j!?5uI@?֧A?@??i3E@??ϴ?=u@?ۆ?u5ʬ@?d'?Q@?H6{? @?[, ?x@@^?RX_@@A?UY@@/ևa?$&@@#vŴ? !@@-? M@@8'?TPmG@@BKdG?4y@@LH?Z@@V,?@@a ? ?"Z@@kf)-?VM9 ~@@ug?F@@Q?W@@;?,O@@z?$36@@df?XNg@@H?u@@W+?_@@?#ߡ@@ M?&:@@+l?ZT8@@r1?@@湝p?H@@Z3?&?@@Gd?(•B@AH?\^u@A+?@A?×P@A$bl?3g@A.ӌ?*и4@A8?^mA@AC7? _@AM~:R?Ũ7@AWe$r?Ev@Ab Hb?,yk@AlS,L?`bz@Av8?xk@AuX?ǽk@A'ֳ?\5)F@An?.=I@A?bK@Ar?8!@ACe?@AHB?wG@A,-?1ۿ@AkX?dp@A^Ux?V@A֓?@A}?@A3>?37zq@Bz^?f4Ί@Bd?vc@BH?8v@B%O, $??@B/D?3[K@B95?gX1@BD#?h@BNj^ ?ʹ5@BXH*?l@Bb}?4N#K@Bm?ep?g :@BwH?!^J@B+D?5dv@Bc?ً1@BZ?4ym@B?hLG@B>*?lI@B/(J?κy@Bvf?@BɽeP?5WakZ@BH?h@BK,y0?@B?DP@B?`Q@B?5ӏ@Cf?i2xQ@Ci?H]@C?Jf@C&;e0?"w8@C0I?6r @C:,YO?ia@CECo?>"@COV?e S@CY??@Cc亪5?7e)@Cn+?jX@Cxrҩ?~@Ce?O@CH?NRM@CG,9o?7E@C#?jo@Ca?EmC@CL?ј*y@CbU?ϖ@Cʩtu?8>.k@C?kt@C7e?F@C~H;?8E@C,[?f @C ?8fx@DR?kg@D,!?@DPC,z?Ȋ@DZ?x @Dd?,e6@Do A?^S@Dy^a?A*@D4?/@D? 7~@D3e]'?& Ə@DzIGG?W9A1@D,?!@Do?E@DN ?G @D˕ט-?>@Dܺր?Q+@D#?2@Dj?O@De=G?vȆ@DI'f?g/@E ?,e?KWa|@EO?}G}o@E-?8i@E(xL?)@E2Z? @Eěx@EzJ?pM@EXl?L@EػB?ԛ-@E?9@Efj?81@EeR?jtZ@EIr?h@E;,?[wE@Ê?Ov@E8?2B$@E8?d6t@EV"?*d:@E`?J_@EK?GD@F +er?+4G@FrIs?]Ǥ@F,?.@F)?m=@F3FX?D_t@F=x?%XU@FGԻ?Vy\V@FR? @F\b+>?@@Fff^?xe@FpIS?P @F{7-=?P(_@F~|$?@Fw?)@F פ?屩B@FR?P@F ?Ic'N@F ^?{<%B@F'e}?RO@FnI3?MG@F׵-?,H@F\D?Bk'@FBFc?t{7@Fׄ?U)@Gлn?/8@G *? Ao@G^J?;>@Ge՝?mz@G)I?Y@G43,?ua+@G>z0?P8@GH&?5+m3@GS?gKO@G]NN?7P'@GgI?ʿ0@Gq܂wi?&@G|#e?.w^f@GjI?`S@G,/?0Rt@GO? @G>?`@G?'$i@G̻/?YB@G5?+@GZW?_?@GءfA?=Ӡ@GI?!#'@G/-j?R@Gvo?B?PbTt@JK?ʀ!Ӫ@JÛ?ʱ,2@J`f?s1U@JjZIr?tih@Jt-?B)N@J~ ?ru+@J. ?ˢ3S@JuIX?=s-@J3w?$@Jq?3X?@JJ?dQõ@Jf>?̔:j@JIؑ? W@J-±?gh5@Jf?%ĹqD@J$?V!@J)w?͆-@J:?Ͷܤ#@KQ?:A3L@Kȃ< ? G@Kfz]?G@K#VJd}?xT @K--?ΨK @K7?f@KB*D? o@@KLqصc?9\c@KV?j,@K`?Ϛ@KkF*? @KufZ}?Jc@KJD?+-@K-?\ 2@Kbm?Ќi\@Kc?мS<@Kؕ?)u @K6?@K}?M-٩@KĂI?~J@K fi?Ѯ0e@KRJ$? nyL@K.?m <@KM/??θ@K&7O?p0m3@Lmu?ҟ=@L_?'|@L?@L$B5?,J@L.fƉ?\`E@L8J?ӋG@LC-?ӺQ1@LM^-O?'@LWo?2N`@LaU?G>Pŝ@Ll2??vIn@Lvy~5?ԥU@LhU?a@Lf?m@LNJ?2y@L-?aB@L;?ՐåS@L"?տg}q@Li?35@LȰ ?"$@L !?L8@L>Ht?{q@Lg2?֪cY@LJp?W@L.[?@MZ[?8 <@Mz?gR@M?ז%्@M%.!?4@M/uA?B>@M9(?#Q {@MDg?R_@MNJJQ?؁nV@MX.;'?ذ}@Mbyz?ߌ@Mmc?-@Mweء?=Z@M ?l@M`?ٛʞ@M:?z@Mf?wk@MJ?(@M.F?X @MVf?ڇV@MɜC?ڶ+霙@M-?<ڕ@M*l,?MQ@Mq?C^K@M򸃔?ro7@Mf?ۡ@@NFJ?ЁD5@N-f?z@@N?.t@N&#?]mN@N0a ?܌go@N:LL?ܻaU?@ND6l?[d5@NO6t?Us@NY}g^?HO@NcJ2?wJgK@Nn .R?ݦE @NxRť??·z@N?:ST@N?35&@N&8?b1$S@Nm?ޑ,Z)w@N?'X@Ng>?#~@NBJ}R?Fߝ@Nʉ.gq?M7Y@N?|IK@N?߫5@N]8?:@N󤼸X? f@@N?8 \@O2?g @Oyg?#@OK >?e@O'.G?!@O1N1?" @O;p?Q 5@OEZ$?@@OP"w?I@OZi?@Od? @Ong ?<۩e@Oy>J]?k?%@O.}?g@O?z4@OP$?M[@OY:C?'IG@Ox?Vf{@Ob?W5@O. ?*@Oug*?@OռJ}?Ul@O.?A0@OJ?p,)=@O?PuZ@Oc?Ƞ@P ?Bc/@PeB?-*D-@P,?]h @P'gkI?匀-j@P2:KUi?i{]@P<.?Tj@PF}?Pi@PQ/?J)Fr@P[U?y @Pe?@Po"?j@Pz* ?(@PqgKi?7A=@PK5?f"@P.s?ז@PF]?ńB<@PO?˚@Pنo?$\du@P?S+C@Pa?5a@P֨5?貢9@PgU?9@P6K?{ߋS@P}.?@@P>?pV+@Q (;?vzn@QQf?0@QP?3@Q(ߠ?. _<@Q3&U?]zN@Q=mgt?e.[@QGJ?V,@QQ.?:e@Q\B;?3&@QfZ?J7!V@QpF?zr@Q{0?멀1@Q]o!?!@QYA?^h@Qg?73@Q2K?g=d@Qy.?얭@Q'?J<@Qz?@QMҚ?$%w@Qה?Tmr @Q۠ ?"@Q"9`?N@Qih#?Ecs@RKa?1^5@R .&?=@R>F?i\e)@RȚ?$?@R)ٲ?9c@R4 ?@R>Y,?7@RH?C9@RRh?o$ @R].KA?]hl@Rgu/,?ų@Rqjf?N_H@R|T?@RIْ?J;8@R|?u󊅗@RנL?𡫃n@Rl?cr@Reg?@RK?$(@R/ 2?Pn@R:J?|E)@R؀4?ڃ@Rr?ӶI@R]?o@RUl?+(@S?V@S g?(@S*K?TmRd@S q.R? S@S*q?Ǐ@S4?1K@S?E?];)S@SI=8?"+@SSӡ'X?;@S^e?iq\@ShahO? # {@SrK?78N@S|/x>?cʉ@S6?Sx@S|?Fv&@S?0'@S W?7@SQw?>?`5@SE?i@Sh/? @S&Kn=?q@Sm/X]?-+ @S?瑩@S?D@SAٿ$?p`y@TC?p@T Ϡ?M@TѶ?++@T!]h ?o@T+K)?DL@T5/8}?n9i@T@2"?T>@TJx`?o@TTK?l@T_c? @TiMs?@܁@Ts?j-V@T}g)?y9i@T"KI?(@Ti/?-c@@T?II@TA?=dz @T=+/?gm@Ti?v @TˡS?@T?Ԡo@TYh|?޸[@TKi?: 4@T/?d)@T.?F4 @Ut?bp@U O?@Uo? |= @U"I3?6ru=@U,?`ֆ@U6h\5?d@UAK?X@UKe/?.[@UU? K @U_?3ip@Uj9n?] @UtՎ?L@U~ǡ?Չ@U?2g@UUhu@Z՛hF?gȦT@Z⾦?Е\m@Z)?؟A@Zp ?^@Zi `? sy@[L?4J|@[E05?]@[?6@['^F? ^@[2Hf? @[<`?M"@[Fp?+%2y8@[P,?T.,@[[5iL?}7B@[e|Lן?@lN@[o0?I@[z ?S@[P2?!\j@[(?Jf^R@[޿?soF@[%P?ys$@[l;?ŃK>I@[iyk?8M/@[Mc?@P@[A0?@]n@[ֈ2?iо@[Q?@[?K@[\?@[1? c~@\ 8?5ۊ?@\1iY?]@\xMC?@\(0?`KF@\3l?@@\=Lq?!?@\G۔?%\@\Qھ?L@\\!?t½@\fhW?zO@\piw?ĄPPX@\zM#?e9$@\=1 ?F:g@\L=?<'N@\?dy4U@\t?C@\X?@\#?۬Ri@\w?@\-iŖ?+oz@\tM?SQII@\0 ?{3y@\,]?@\H}?O^@]T?k@] ֿ>?-@]}C?B+..@]dgc?js@])i?a@]3M?DD@]>90)?&˫s@]HI? k@]R?1@]] ?Yꈓ@]gT?hb@]q]c?0@]{G?w>@])i?Zz@]pMo?!>$d@]0I?I!ph@]h?q(@]Dּ?L@]?ܡ>@]Ҿ/?@]O?;B@]`'?8w @]j?`Z-@]MP?>@]51:5?"@^|x?ˋ'@^ b?GK@^ ۠?(YP@^ P?Q_-@^*n?yB@^4ކ?8[@^?%i?ʥ)|@^IlM04?K@^S1T? )<@^]X? C@^h@B? lY&@^rہ? E@^|οk:? 3~ @^? @^\?!3@^i?!6{X@^M!?!^C5s@^10t?!V_@^x?!į@^ľ"?!2+M@^ ?"v̼@^LKZ?"){h@^㓣5z?"Q|?@^چs?"y@^!j]?"Yu@_hM@?"z)@_ 0ړ?"5E@_ij?#@_!<?#D(@_+&?#l稇@_5ʿ+z?#?@_@?#_@_JXS?#ΩY@_Tj> ?$=9@_^M|`?$6g@_i-1f?$_<)O@_st?$8@_}?$-@_F?$j@_Hf?%?U@_?%)I)b@_ֆ?%QʒW@_j,?%z)Hm@_dNL?%@_ū1F?% +@_0?%yY_@_8o?&6@_ۭe?&DZ?@_ƿ?&l@^@_ ?&;@@`T?&$<@` iK?&R@`Mk?')@`")1&?'-{~ @`,p?'Sh@`6O2?'xvH@`@9Q?'9xc@`KDw?'@`Ua?'b*@`_҆?(^@`jj7?(4r@`t`Mȋ?(Z!%#@`~1?(]@`?(LA4|@`4?(ᬑ@`{q?(w.@`?) @` A?);.E@`P7?)a8M`2@`ƗjjW?)6@`M?)d5o$@`%1?)PL,@`l?)@`=?*&ȫ@`?*B2h @a@?*hS1@a"?*GR+@a· #?*@a#jJw?*<@a-\N4?*V@a71r?+$ET@aA] ?+Iܳ@aL0]?+osu@aVw܅}?+ '~@a`?+Ԝ@ak?+9I@auLC?,ѐ+@aj*?,+i9@aN?,Q@a!1S ?,v}F@ah=)?,0ѵB@a{|?,ߋ@ae?,a@a@bk%?/)p@bv8?/MY@bNN?/@bƇ8n?0 ;@b jv?0*CO@bTN`?0Pe@b14?0v} @bT?0X@ej7?9mu/o@fo?>4M#@fy?>Y@f0/?>)ϭ@fwk?>f4@fO?>ɢMN@f2C?>J.@fL.??@flh??9X@fV??^J@f ??қ@fg~??@fஇN??Lױ8@fkn??@f@g 4?@cBuf@gT?@@gW6?@Q@g( ?@@g2_?@9= @g=,n?Aw@gGsk?AB–@gQN?AgT@g\2?A2Kh@gfHT?Ap@gpt?Aׯ5@gz?A_@g?B",':@gc?:?BGkL@g)Z?Bl0w@gkg?B+@g8OQ?B(A@g2 ?Bgm@gz@?C|@g ?C&{@gSݢ?CL%o@g?Cqey@g&?CxI@g( y?C@hok?CT@h O1?D@h2p@?D( L@hDZ_?DLD@h)?Dp5@h3݂?DLm@h>&?Dz]@hH_F?Da)T@hR?EG@h\kӹ?E$.`@hg4O ?EH@hq{2,?Ek[@h{:?Eg@h$?E{s@hOb?Eװ@@hM?E(X@hݤe?Fm")@h$u?FCfH@hkk?FgN=@hòO?F5Kr@h2K?Fgz@h@?F@h?FF@hC?G @h-1?G>x@i[k?Gbl@i U?Gh5@ik?GuF@i 0O~?G]!@i*w2k?GF Ɓ@i4?H.@i??H:'@iIK?H]٧s@iS Q?HQ@i]٤q?H@ih 5?HɺsZx@irgl?H/@i|O^7?I\ @i3HW?I5uې.@i<?IY_*H@ip?I}H@iݯ?I2 @iq?I1)@iWא?IK@iĞ?J @il?J0ɿ@i,O>W?JT v@is3(v?Jx~@if?J4]@iP?J&@jGݏ=?Ju@j y]?Ky@jդ?K)4@j!?KK9@j+ck#?Kn#\@j5OC?KSi@j?3?K(@jJ8?Kի=z@jT~1 ?K-b@j^)?LzQ@ji Y|?L=36/@jsSC?L_ AV@j}?L8A@jkB?L@j(Ob?L>@jo2?L!'O@j?M E\@j)?M.Ȫ^@jCH?MQLD@jŊ9?Msφm@jѥ#?MS@jb?Mֶ@j_lL/?MZni@jO?M8@j3t?N b&@k4?NB-@k z?NejB@kh?N6]@k"ň?Nrk~@k,O?N>@k6?N{ҹ@k@l,N?O/@kK$Oj?O4@kUk3T?OW}/@k_?OyR@ki}4?O=@kt?ݻ?O@k~?OZ@kͤ?P@k?P&%@k[l n?PH'@kO?Pk0jM@k34?P[@k0?P;+ @kv]T?P~@kнGt?PF@Ff@k?Q @kKo?Q:Q@k:?Q\yw@klZ?Q]bD@l O֭?Q3/@lg3?Q"M@l ?Qv^D@l"=s?RޞE@l-;'?R*]G@l7e?RL+@lAɥP?RnC@lLY?R[M:@lVWlxy?RsV7@l`O?RԊ@lj3?R{@lu,@?S7@lr_?S: ^n@l?S\Rz@l?S6@lG0&?S{@lE?S4f`p@llX?SL:@lPB?Te!@lc3 ?T)~-@lѪk,?TK\A@l?Tm;@l7ޓ?TȬ@l~?T@lťE?T@m e?TߩE@mSl8?U-0L@mP"?U:Fg @m#3a+?U\_5@m.(KK?U~y?W@m8n?UȜ@mBs?U¬hK@mL?Ue@mWC1?V@maڅ?V(@mklĤ?VKp:@mvP?Vm-\@m_3?VGǠ*@m+k?Vab@m?V|3@m3S?V @mz=?W;g@m|Q?W9k/@m?W[l@mOl?W~@mҖO?WYJ@m37?W6(@m$ ?WQ~v@mj?XkW @m3?X(%@n?XJ@n?\p?XlcvH@nF?XE䖼@n$l?X(d0:@n/Po?X @n9[3W?XA)@nCv?Y^@nM?Y7-@nX/޿?YYy@nbv=?Y{y @nl\?Y\V@nw&?Y?5@nKm?Y"jv0@nPO#?Z@n3v?Z$ ={@n w?ZF{b@nf?ZhC@nޠ ?Z(@n\?Zw?@n;|?ZZ@nӂ?Z>r@nl?["/@nP/B?[4r@nW4b?[UR@nW?[wH @oA?[@o+ހ)?[c@orjH?[{@o%?[`3Ej@o0?\!DA@o:Gl?\C)R@oDP.?\e(@oN3?\j@oY?\חk@ocb!?\ʼ&@om`H?\{[@owJh?]@o7?]0ke@o~r?]RP-.@ol.?]t66Z@o PN?],@oS3١?] d@o?]收@o?]/?@o'4?^Ɋ@on*?^?@o޵?^a}|f@oR?^cf @oCm=?^IgQ@oP{n?^/yj@p4e?^+@p?_%@p^?_)@p&T?_J@ݮ@p0 ?_j@p;3?_@pEz3?_W9C@pOm:?_ R @pZP[?_~@pdO4E?`nF|@pn?`/ »@pxn ?`OSn@p#ެs?`p@pj–?`8@p?`p:@p?`ҞJL@p?lY?`Q4|@pPy?a3I@p4%?a4A@p?aUjd?@pZN??avw@pߡ8_?aߘ@pv?a7J@p/`?a7_@pv&?ah@qly?b~@qPǙ?b:RPۡ@qK4?b[v@q' ?b{&[@q1._?bm@q<?b!r@qFfV?bՊg@qP@?bS@qZE?c=6f@qe;mie?c?@qoP?c`5c@qy4?cZ`N@q+?c@qVK?cu@q?cx@q?d,N@q+!?d$X^@qr 1?dE[@qmI?dfJUb@qQ3?dR@qG4q?d,@qK?di@qk?d @qؾ?e ?A@qb?e*m@r 1?eK@rQ?ek;@r7m)?e@r(~Q?esɋ@r24R?es@r= <7?egVJZ@rGRz?f HH@rQd?f.[Or@r[¢?fNe@rf'?foO@rpnp?f @rzm?fD<@rP?fоwpW@rC4?f8s@rV?gk@rZ?g2-ƾ@rD?gR@r^ƒ?gs#_A@r¥m=?g+@r쉫?ge@r3m?gԓ2m@rzP?g#@r4#?h |(@rv?h6-@sN?hVe,@s $?hv)@s ?hwGy@s#M\?hs@s)j7|?hm@s3mu?hS@s=Q_?ie%@sH?4B?i9@sRb?iZ\@s\Ƶ?izu١@sg߰?iT`@sqZ(?i[q@s{-|?iLh7@s?iȈ@s/mU?jDI8@svQ@?j=ټ@s4~b?j^=R:@sh?j~@sJ?j62@sÑߐ?j6@sH?j/[T@sh?k e@sf?k!(~@sm?kA0@sQ .?kb"d@t;5 N?kyl@t H?kr]@t2?kB~1@t q?k7@t*V[4?kwYN@t4?l^@t>䊃?l=#@tI+m?l]6tjU@tSrQN?l|vG>@t]4m?l-Ś@th(?l!ϩ@trF?l6(%2@t|Q4?lv?+?q?a.@u}?q^f@ug?q}e@v?q@v Z?q*w~@vme?q;cI@v!Q?qLa@v,/4?r]l%@v6v?r8n@v@K?rWm@vK k?rv4@vUJG?r?h@v_1?r&@vi؊p1?r nQ@vtnZQ?rև,@v~fQ?sl@v5?s0]@v?sP \K@v:7?soB@v?s.4@vӪ?s@^W@v?sR@vVPP?sd6@vНn:p?t vU@vQx?t)@v+5b?tH@vr7?tg=9T@vV?t @wɪ?ts*@wFó?tT~@w?tϤ2@w"Ԋ=?u ]=!@w-n?u"j@w7bR?uA.`@wA5C?u`Aa@wK-#?uT/{@wV6kv?ug n@w`}U?uy)@wjÓ?u܌8@wu ~ ?u@wR\?v4@wm?v9H@wQ?vXنa@w'5#"?vwшi@wn B?v/@wK?vw]@w5?v'J@wBt ?v:]@wщ^(?wN@@wЊ|?w2a:@wn?wQu@w^Q?wpub@w5?wRz@xb?wp1@x2ׂ?wЙ@xy?w^ZO~@x#?x>@x.>H?xL, @x8N(h?x;)=@xBnf?xX:0@xLRP?xtF.{@xW#5.?x(fg[@xaj́?x@xk?x@xu?x@x>?yg@xg?y| l@x̋?y;2(@xnF?yXkB[@xZR0?yt/@x5oN?yZI@xYm?y^@x.?yJ",@xu?y@xܼ4?z9@xS?zR=v@xJ?z<)-GL@xn?zX]@yR?zu @y5:?z ֔@yf9?z @y$#?zʁ4 @y.b?zZ@y9:àS?{q@yCs?{av@yMȊ?{?7vU@{&nP?S*@{0Rp?ob@{;5?8jP@{EZ?y@{O7?Ĺ0@{YV?C@{d.8?;|kN@{nu"?|`-@{xa?5N=@{oK@{Ri?lU@{6S?53@{V"? @||B?0`@|ຕ?Ԉ/@|*Ĥ?ߘ:@|'q?7r'@|1(?w@|;o |?1)@|FFR?I=m.@|P63?`k@|Z?wxa@|e\b?D@|oa?V@|yĄ?2wY@|(?J:\@|6H?u@|}n?A@|Rջ?Q͗"@| 6?2_@|R.?J<.S@|S!?c@}…6`9?J@}JY?Iw@}?עN@}Yr?^2@}ı?S@}稛??m@@~.ٓ?5y@~ uoò?L] ˲@~S?c?{@~6@Y?{y9@~)J*y?h'@~3h?@~=R?L_`@~Hđ??t@~Re{_?ޅ@~\?'OF@~fo?f@~q:R%?5@~{6E?M3@~ ?d@B@~?{n@~U3 ??ޣ@~+?n4W@~[~?@~*E?L@~qo?6)@~͸Sn?@~6d?YLO@~F?6@~?N d@~+?efG@K?||`@ a;?b @%?suPL@od?9:l@*6SN1?'-#@4}6?@>v?ک@I ? 4@SQ?7d@]j?NH@gߨNJ?fB42@r&?}$*@|mo?@S.P?P)@7p?ê0@BV?@@?^,@6? =@Ľ?!S@]?8lq>@Τ?Oƒι@o?g g`@2Sp?~z@y6?@6?/S1@!?@ M_V?؈U@Iv?@ ۨ?Hv@+"q?-u@5io?h_21@^"?|e@hB?xGW@s)?@}Y?@R?pi@o\?@.Sz{?6b[@u6? ag@?!O[Q@B?5٣@Ib?Jh[@ϐ ?^`@ר?saT@2(? ҥ@epH?o[@SZ?&o@7D?ųv@ :?@@m.?̞@!᫁?Y.C@,ŕ?ސ@6U?,rS@@?@@Jog?UU@U*S:?j|@_q7$?~,@ic.?1OL@sMM?@~Eዡ?J@u?/@Ө?cї@4?w$u@ao܇?}}@SƧ?# @7?7op@6?L#@|-m?`Ȳw@?u@Ca7}p?-M@Mg?@01@W?S@b5?eH@l|V?xaG@vév?Ք6@ ?@Qp?,@T {@mh?Qm@w0a?cWo@?vB y@=X?*O@B?w@pG?qFV@Tkg?Tˇ@Y7?7ˏ2@?@.?@-M? .@t? cp@軩?3I=@#?F,@Iq 3?Yl5@TK?lr@85?l@s?@&d^?+H@0m?`N@:?̕@E9?ʱ@O3?⳹@YpS?5@dT+?jE*@nU8?,vN@xT??ԧF @>9?S 8@)|?f? e@pf?yt:d@?jkb@?ޛ1@Eps?u@T?Hx?@7?~,#@?\@`Y?v@x?@F?&Rnw@50?9@|o??LL @p?_{@ T?s'LK@'Q7?\*%@1%? 2F@;x?8|@F%?h@Pl&?1?@Z ?fc@dO^?AP@oAq9~? $@yTw? R@8a?3;9Z@E?Fp2@\d?YV@ȸ?l "@Ʋ?<+@1+?Ei@xJ?z'@˿q?@U?@M8B?!@d?ON+@j?}Q@!?PK@ hƒ?*x@J?;Q`:@j?L~@(=p?\g@2T?me O@<8"0?~@G P?+[E@QXJ?xA+I@[4?)\@es?{@p-]6?ы @zt?<*@q?ڪ@T?'@I8?P]@p?%1@*?5@?Fd^@dS6?WcN@̫=V?gư3@{?xxI@9qe?)X@T?ڲ%@8i?„s@HS?p@S1q?{^@]xTg?w@g8?s@r?o˓X@|L?(k@!M?9gNW@ m?Jc`@!I?[_@h3?l[\@qr3?}X@U\S?T0 o@=8?PP@΄?Lw@?H@9?D)@X?A @լ?=??@?9}3]@ -q?5} @tU?+.@%XV-^?گ y@/9k?L)^@9U?H@D-%?gn@Ns~D? #ĕ@XǼ?LY@c?&]8p@mH ?2#@wr*??)@V ~?L5G@9?Xr@d5?eoN@ ?r 75@^d?~J@8H?G-‡@?_@Əp?@ rJ?@TU?@9׽?Y:'@?t4@)0?㓰@o>?0י@(?-l@f? kmA@&DQ?x7@0rj?"@:Vy?/C9ɫ@E9?;c*@O`?H}`@YP?Uk@co?a_>-@n4?nU@x{?za<@16?Kc@ sV?-)@PVY?`@:C?hFx@?@%o?Ƣ@k䪏?@Nخ@ʲ?ݩ<@?{6"@@U?eU@ru?t@V9?S'@:#?¤@\b?5d@:^?E@ڱ?T@?d*=@[$?s@D?EoR@+? ;@0?`@wsT ?U4M@׾W>*?{C@:|~? @L?\|K@?%@D?ɑ<@ d?@.@g ?E~i@?.\ @)s4*?=C@4:\?]im@HF?l-@@[ ?VM@J-?ea@Ts̀?tv@_0W ?ݤ@iw:?8m@s3G?@~g?@K[?N@E?A@٬-?o?@ nM?Y@gs? @W? .@:?Fb@<3?) @ڃ?8@?G aw@%?V&S @W?e/ @Nl?s>@ t8?}F@,Wv?8@"s;`?Ya@,R?@7ݦ?hvS@AG?#@K?zC@Uլ9?I.@`.?TY@jct?>@tWV? d@~;A?7@8r?&?t@i?3Q@?A0$@ ɒ?Op||@SX?]*@x?jܕ+@s?xĿ@(W?[/@o;!>?>@ ^?эL@I?~@C3?Gsm@r$?jX@Ѭx?ؽc&@?x_:@#_s?3\ɑ@-W ?]@7;^?_u@B4~?den@L{)?+la@V?8v_@aRD?FV@kO@wo'?NC5@z?sXx@?!4@C(?.8@ ?<"@tQa?IKZ@X;?W9_@_;y?dtb@ɦc?q@G?[Fi@3g?Ί@zʺ?A @?d@-?(c@OtM?*@X?VM@<?}@&$D?s@0k.3?/@:l?Q@Dɪ? rFi@O??{+1@YL?"S@ctl?.sb@nW?:@x[;?GV@$3?S9@R?_Zˁj@/L?k|db@v6?wEGA@u?@_8?@Kt?)@ʒX?"GP@;?Cr_@ ?dϔ@gr?̆ !@ؒ?ا\@?Ȥq@;?@?X? 8L@t}? , @'Xg?M$@1W;?!o $@;>?-p$@EΑ?9@P+渱?E+@Zr?Qeͽ@d$?^8@ox?j7@yGu ?vXg@XG?y@<2 ?q@p^?r^@cZ}?Θ@?+X@ʂ? @7D?A{@~d?cIc@t?ㄪ@ X?@S<*?qĎ@P}?ֶ.@:? =@ 'x? {@nc?+w@c?7H@'?C]@2Ct?Ou#}@u?o@f (?U>N@pf?;=@{Q?ː#@fʏ[?q u@ͮ?Q@?2P"@;t!?@XA?B@<?է@ ?M@WG?* @ם1'?6xxo@oz?BYj&@+Y?N:]@r?ZQm@u ?eo@ Xa?pk%0@Gbf?Yrs@H9?͜@R#?@]7ub-?ĥQ@g~X?,O@q? vJ@=?%Z@Z'? j@f?*]Qy@P$?5"·@/uw??ۥ@vYx?J16@@_穝?4 @iV?P6@s?mG@}c?퉝@+u? i@rY8?¢L@="? %iq@ aI?@GKi? )^@牽?*4:(@s?4Q+2@0?>mUo@b?H,@uڣ?Ra@Y?\--@7=?f߭^@~ Ai?p,@ +?{L@ i?5+ q@"RS?Q+@,O?n(`@6|o?C@A'u?$@KnY?â@U<5?@_ U?mz@jC ? @t?5@~4?R&@;?nH@^\? 2@u?~@Y?/z@3@jYe!?kt؈@=OA?p/P@ ?tI7@#?w?ybK@-?~`@7ˠ'?@Bz?!@LZȚ? Pa@Vv?M .Z@`Y ? ,1@k/=/`?@uv m?}@W?8lV@'?^I@JˀG?p@?i@ؒ?$ @u ?b.@fY-?;A,@ǭ=?U@ ?z@;7?ʪ@"?Ӆr@`f?@58@J?r@V?ᵯ.@vr?pf y@YL?+f@$+=l?@.r ٿ?p,@8?[@B2?@MF@?V @W*?@aԒh? E@lvS?@vbYl?Y@={?u+pq@ ?/E@7?#0;@}R?(3a@r?-_$J@ ?2@R?6@șv38?;r#@ZX?@H1@'=[?E= @n!E?I @?Nw@n>?S2M%;@Bˬ?[lW@?e@В?p]@%vX?z@/^Yw?…Ns@9=;?F@C!%?š?@N3d>?¤r@XyN^?¯1 @bˌ?¹t@mv?"6f@wN$?Κ@vD?bk@Yݗ?b@#=Ƿ?@j! ?}$ע@*?h@.}? nQJ@>?ۏ@ɅV?"_}@̓A?,L@vc?7P-@ZY?A@ 2@=?LA֛@ *?Vl{P@/I?a3 U@u?k@?v$/u8@&7?ÀS@0J!/?Ë[ߠ@:v_?Õ@DZI?àH@O=?ê$@Yf!r?ô@ci?ÿpJ@m蚉?@x:?av@? zl@ȓO?RT@vo?9i@VZ)?C϶@>?f>@!R5?4@+?@qz?(&(v@Ը˸?2Np@?=Tԫ@Fo?G~@vˎ?R0@Z ?\@=?`@b!2U?aИ@t?c@&Z?ez`@16D?gCd@;};?i W2@Eēm[?jլy@P v?lB@ZRZ?ngq@d=!?p0Jq@n!A?q@@y'?s0@m:?uM@%?wSp3@cZ?y)V@BMz?zQ@v?|@Zu?~v0QX@=A?Ā>yg@^!`?Ăjk@եܴ?ă;@?ą9@2'?ća@yF?ĉ)@-?Ċ @ w?Č@NZV ?Ďw@>@-?ĐKUς@'!~?Ē@2#h?ēf@ ?Ě< @ev?Ĝw@oZ6,?Ğ=@z> L?ĠUڧ%@Z!^?ĢC@H?ģ$a@?ĥ?-@.q2?ħvT@u?ĩ>cy@?īk@v?Ĭm@JZ?Įi@֑>l?İ^_!@!?IJ&NE@(?ij60@e?ĵ} @QR?ķ}@ ;r?ĸZ@:y?Ĺ1@wc?ĺ;@(Z8?Ļ/W@3=?ļ@=V!ʫ?Ľ% @G?ľ͕@Q?ĿG@\*1q?b;@fq?@pY?!S@zwD?ae@FZX? @>lw?FM@!? "$@?*UA@a>?4@̽]?>@?H"@6?R,@}w$$?\@[D?f;^@ >L?pK@R!?z@u ?ф2@ ]?Ҏ@&̝}?Ә9@m?Ԣ@)?լy0@3wC?ֶK@>BZc?&@H>,?ܠ@R"?Ӛ8@]U)?Q@g]?I?Z@q}?M@{g?N@2?>;@yw/? 0@Z΃? 4@>? l@N!?*@?34@i?=I@"]?Flv@iG?O]d@Ⱃ/?Y/U@wpO?b @>Z?k@>?a@ !?質9@5?oG>@ Y?*ή@*?fP@4'?ߡ8@?.?]_Q@IuwPo?·@S[:?3@^>x?֏I@hJ"c?J0@rU?,O@|t?mW@?|,@e?7lj@;?#@w0?ƮS@:[?i$ @>Y?$-b@"C!?Ŀ-8@t?Ľ#e@Uk?ĻU[f@̩?Ĺ2@㰔?ĶΟ@*Z?Ĵ @qwz?IJ@g@ Z?į&k@>?ĭh@!F"#@?īp.@+ `?ĩ++@5K?ĦĴj@@5?ĤT|@Jat'?ĢZ( @T^F?ĠY$@^w?ĝΉ@i6Z?ě9@s}> ?ęDق@}"`?Ė@ ?ĔD^@Q+?Ēsb@?Đ-CO@߰TF?č@&>f?ċ%]S@mw|?ĉ\F@Ŵ[f?ć^el@>,?Ąm@B"L?Ăr[@͟?ĀDn@鷿?}a?@?{JE@]2?yw@ ?wA4@x?u @"2[F?r@,y?1?p@6"ol?nj/,y@A?l45/x@KM?i1@U2?g%f@_۰R?e@j"?c[@tiw?a%~@~['?^.@?8?\\@>"O?Z@9?XL˟@w?Vum@b?Sܹ@Yq?Q8@Ơ?Os;7`@w?M<"U@.[?K;@u>W?HϮ)@"w?FE@?DbwNo@I?B+@B>??@װ?=_@#j?;V@-ew?9P @7[$?7oU@A>w?4@L:"?2+ @V?0u8@` ?.>;k@k"]?,6^@uU }?)'@J?'Ķ@x4?%aL@*[sC?#*HZ@q?]c? @"?S@? @E)?M@njͮI?f @Ӱ?w@*?@ax?p%@[Sc?8:@?=? !@6"{? d@}e?R"d@I?ޒ@$ ͎i?M@.Q̼?8O[@8?l@Bw/?Ѹ@M&[O?i@Wm??k2@a#?շL@kF?qT,@vA05?Q @n?ĝ@ϱX?þe@?ù7|@]x?ó/@[n?íG@>?è@2"?âi~(@y&5?Üw@ҿU?×q@N?ÑO@D@M8?ËZy@w?Åb[I@xa;?À4@"[?z{@i??t@"?o@$!?ig@/=t?cP@9ڔ?^L8@C˱?XLt@N?R[@XYxAZ?Lo@b\+z?G2 [@l?i?A~|@w.#S?;^=@u@?6dJ@Д?0c԰@ͺ?*B@I?$D@'?I;@x!z?zv@\ ?B@e?I?.KQ/@Ӭ#4 ?zY@r`? @9\?j1@͚?_F@DZ?@F?Uh@Uxf?,]C@[?j4w@%??ڨ //@0*#,?,@:qL?#@D@?9@Ey?fNR2@\DO?y@ @.n?Ġ@#l?@aV?]@(5?HM@2T?u@=5? in@G|?@@Qx?rs @\ \;?*%@fQ@?W: @p#?@z7?@%!!??G@l_t?z a@?q92@?hfC@Ax:?_@\Z?VǽD@??Mڬ@#?E7@]!?!`? $@Hhˀ? w@R ?壖@\?ƴ@g=y2F?@q\p?l@{@Z?H@# ?$"@Y,?9@?1@Ϋ?0@-?}@t?tpӯ@ûyf?kLw@\?b(\@I@:?Y>@$$?OM@cL?F@Mk?=ѵk@d΋?4s6V@ u?+O{;@2?"+KB@ 9yR?3E@*\ܥ?&@4@?6@?$?pʽ@IUCk?v3@S-?QG@]k?-c@h)U? gj]@rpQ?&F@|y~q?e@\?[+@E@?x/'@#7?S@W?/@ ? (@`?@ħ6?i@ =?}@5y^?ty#@|]H?kU63@@?b0@ $q$?Y Z@Qw?O=>@ ?C#@?7 e*@!%=?*g@+l]?m@5y>?L@?](?o+@JA@g#?@T$QC?p @^?VWL@iy?<@s\θ ?"@})? (@}?[@1yʜ?Փ6@x]?@@?~*@$1c?&+@M?unOz@œY?iTvQ@C?]:,@!I?Q @h?E^ @y?8U@\?,z4@=@/? @ $?K@?&r@"9?k,@,X$?Q.@6bh?7. @@L?(@K-y? E@Ut]t?i@_@N?%@j$n?5@tI?)@~?ks@5?fS@T?wLV0@d,?k2]Ԣ@yj?_5a@]U?R O@9@n?Fh@ƀ$}?:ɦ~@?.p@ ?"5co@TT?z@t? `R@ ?FqSZ@)y?@p]5:?6@AZ?G@"$]?Т~@-EG?Y @7 ?@Ap@?1@L?{@ڕ@V`?1K@`y?T9@j]&?Xwo@u5@z?vSZM@|$=?k XD@'?_RZ@ f@?TuIˆ@PP`?I+=@?=-ȇ@ޖx?2U@%y&?'M;@l]F?T@ѳ@ߙ?%0@$ɹ?n'@A ?$@,?`¢@0?6Z@?FӜ@\X?֦@zC?Z@#]e?gii@.1Ak?-X4@8x$?@B?@ML?>fPT@WL?}rd@a?ruE@kږ9?g_r@v!z#2?\-n@h]a?P֨@AK?E|!@$?:60@=t?.뽩c@k?#Y@Ϝ?V0@? @X?5@ҟzQ?w@]q?-1p@-A+?C@t%?ԘW?U@H|?f@?n2@$֖?/@/yq?yʝ=q@9d]͑?ix Q@CA ?Y&]w@M$?Hi7@X94W?8OK?@bw?(0/@l\? @w F?Q@T=?9@zo]?@]?֕Q4@)A?C7|@p$#? @C?C8@?LM@D?@Ӌ' ?t@җ)?dUZ@zO|?TM5@`]?CI@Aw?3^?!@$C?# ،@5c?k@{޶?f=@%?B@0 )? {@:PI?oz@Dz/? '@N^?ʃ"w@Y%AX?w@cl%B/?%f8@m?2@wj?o7@@Ϩ?_-@?N@Ζh?>O@z?.5x@\]?@A? >@%"N?=j@1`?dž]@wJ?ܘ]@޾ω?E=@s5?qx@L?@z?L`@]?ހ"@!A?n 'К@h%n?Vlw:@&??Fd@0*?'ᨊ@;<?m3;@EST?>@Oʗ=t?b;@Zz{?&@dX^e?~@nA:?L@x%Z?߷@-̭?lr@s ?U:@ ?=a@3t?&+,5@H?@z[?QW@^F?`_@AZ?w;@d%nz? b@߫?^@?/*@8@?jh8s@`?SU#@Ɩ?;M @ z?$z_@T^&&? 1@'BF?ӵM@1%N?2q$@<) 8?r@Fow ?W,@Pa,?!;@Z?|@eD?i$^ @oz?QW@y^F?:4 2@Ae?"wB@`%.? XA@ ?;;c@W,?}@4AK?!@{?3@—i?4xBK@ z?~Ƹ=@P^2?gX@AЅ?O%#@%?8}R2@%?!y@@k? N@ !k?={@ ?2M@@I?t@@({3?q@2^rQ?I@=A?}Hl@G\%?e;@Q?N@[7?7%q@f0?@pw?S;I@z)?^x@{?يv@L^Rq?&<S@Bz]?4xs3@HH^|?c\@RA?@\%?I@g %C?! @qcb?=Y;@{M?T$Q@7?c9,@8v)?yQm@{`I?ap\u@^?Jnj@ B?3"d@T%?Vs4@Û /?X@m@?%@(-?Վy@o?(M@춗VH?ï!@{@h?^z )@D^~?wef@ Bh?`LlA@%/?Hnh@  N?1ho@*_Ϣ?]^sd@4й?LV.@>?5P@I44?nD@S{{ ?@]_ ?#Ȍ@h BH?~*@rP&3?sa4s@| qn?\4$@†[?D@‘$Й?,%b@›k?DG@¥T?b@¯{?@º@^?T3@ćB)?˲7@&:? [C@ Q?c烰@[;?okI@z?X]@d ?@sa@0t?(?@ w{?(?4@^?*#@!B?|@+L%Z?7]@5 y?@??&@J ?FAs7@TgD@?k@^.`?S@h{l?@7k{y?HFթ@A_c=?O@KB?rS݂@V@&?qO1@` ?VE^4@j#?<12@uv?!W@[ܖ?Z%@ʼn?%@œ| ?҄@Ş0_C\?tc@ŨwC-|?8@Ų&k?By@Ž U?h׮@KC?Nl_i@ђ~b?4b@ٴ?L4@ ?*I?@g{)?@_#|?Sl O@C ? @<&K?I@ 6?yy$@#tb?^7L@.^?C<@8W?(M@B?AN@L{H?L@W,_h?%{]@asB?5I@k&?Di@v .?TD@ƀGN?lcq@Ɗ>?Qs=@Ɣյ(?6u@Ɵg?4@Ʃc|Q4?Kv@Ƴ_?尧)@ƽB?ʿ@8&?G@ N?ލv@n?y @ ?^f@S?D 2@G4?)]T@|1T?*~@(_o?9@@oCY?Hԩ@$&?W*@. :?f½@9C?uy@CѪ?lz@MѴ?Q^@X ?6]@b_|s?z?@l_?Vl<@vC9?,@ǁ4'$?M@Nj{ bZ?@Ǖ?U@Ǡъ?z <{@ǪO ?_*@Ǵ@?D'W@Ǿ{?)6?@$_۳?D1n@kC?Ss~@ݲ'&?b :@ By?pU@?,? @j?*[@͵U ?j@_?Mr5@[|}?/bQ@%_?@/C?P@:0&E?G@Dw e?ip@N ?@YK ?}-fO@cK5,?_y)@ms?ABP@w|]?$^@Ȃ _?^¬@ȌgC?R @Ȗ&e?@@Ƞ ?Cᨇ@ȫ;?@ȵ?qR@ȿɵK?T(m@k?6t0]@W|=?@ޞ`'? L@Cf1?XH@,'PQ?z@s ?7@x?<,@?빅@7?@ ~8 ?@}"@?@ ``?q@)SDJ?PͿܸ@3'?/Р/@= s&?vE@H'y?F@Rnқ? 7@\?@f ?f@qC}_?i-@{`@?Hӌ@̅D*?'nߌ@̐'i&?@̚_ SE?z@̤?n@̮{?~@̹3 ?Z@z+?ah@|?@˛@`̞?#:@OD ?u`@'?@ 3e?{@#?4k@ j[?{d@E?Z@K?9 0@*?}nk? %3@4`? (@>C?+8@I'1?@S[ ?r@]?sh@g;?R!`@r/&?1oLc@|vdk?C9@͆}N? @@͑`?Ϲ@͛KDv? L@ͥ'Q?":@ͯ p?k#i)@ͺ?J%g@f?)'3@έ7?(@W?*1ۣ@;}.?+K@a?-'1x@DW?.WS@(A=?ca4@ W ?A@?<3@ Ҩ?`wA@++V?ϫ@5rv?>Ց@?}? @J`?x@TGD7=?V$\a@^(!\?4,t@h _?j-@sI?$0@}b҈#?H@·rB?(@Α𙰖?%p@Μ7}?k@Φ~` ?J|9@ΰD)?(r?g@λ (|?X@S ?OUp@ϙ)?þ[o@?,ѯ@'Rb?@n?_ *`Q@}z?=x*@`(?3@ CDH?UZ7@'?@! ˻?2j@, ?@6^.?t4\s@@2?R}Y@J?0/c@U3}Z?Ze@_zaE?5@iDh?6b @t(m?x@~O ?@ψ?g@ϒN?E@ϝ#n?$\GP@ϧj?ʱ@F@ϱ};?8@ϻa%4?i@?Dc?f@І(M?|;t@ ?Z @@v?9]`@ZҴm?ˊ@?9=.@?>|@/}?sep@vaS?b@"Ds?clF@-(-?>&#d\@7K ?T@AV:?O@K@Y?S|y@V~? 3@`fh?@j} ?^@ta@?9:!@;Dϓ?*@Љ( ?6~@Г ?f@О6Y? ( 3@ШV y?~ّ@в^?Yu)@мH?4LK^@+}??Ta@raq_?x@۹D?x@(?1N@G %?yxo@E?To@?/\@? }@b) ?ο[@#~+?g@-aQ?@9@87E;?tz@B~(y?Op@L d?*kCT@W e?$%@aR?O@k?)@u +?N; @р'}K?pߜ@ъna1?J}:@єE?%xb@ў(Z?0r@ѩC D1?^@ѳ?@ѽl?Y6@?kb@^?Eʻ@ܥ}j? @a?~;U7@3D?~j@z(?~@ $Q?~/K@p?~hS53@NL?~Dw^@$?~ 1@.ܚu7?}@9#}?}kH@Cja?}n8@MD?}*@W(?}mM 4@b? p?}Iq\]B@l?}%I@v,?}w}@ҁ?|K@ҋZUV?|nb@ҕ~?v?|"0@ҟa}?|rFA @Ҫ/Eg?|Ni@Ҵv(@(\?zA=R@; p|?z8-@%?z(f@/Ә?z|2 9m@:B?zXTT@DVb?z4w @N}?z@Xa?yJ@c+E((?y@mr)H?y@w P?y%Z@Ӂ:?y]G@ӌFy?y9j$@Ӗc.?y@ӠԚ?x񯚄@ӫ~?x@ӵba?x@ӿE?xo@(h?xb9I_@7 0?x>[@}?x}t@Y.?w.@ CN?wgN@R?wQ@~k?w1mW@a?w`~A@'E4?w8ꢵ@&n(҇?wf@0 ?vf@&@:?v]J@EB?vm'@O#m?vrMw$+@YЛ ?vJs@d~K?v"i7@n^b6?u4R @xEtS?uӁ3<@Ԃ)^s?ut>@ԍ3 ?u @@ԗy?u\g@ԡ:?u4Pɒ@Ԭ?u @ԶN?tM;@~,?t?@b ?t8@#ETs?tn3V@j)>?tF_@ |?tFv@g?s'@>ӥY?se7@y?sa@̚?s2n@~?sXIa@'Za??s0&f^@1E_?sRI@;)?r.vӠ@F/ ?rz@PuG%?rƟz5@Z1E?rj#@eo?rB^Z@oJ?r+i@y~ ?qysW@Ճa_?qBXaN@ՎE?q*@՘f(?q{Ѕ@բ ?qT%Q@լ'E?q,qky@շ:e?q@O?pZ@ț9?pTPx@~x+?pv@VbbK?pebMO@E?p>6ʜ@)?pLz@+ ?oʹXo@ q1?o=-@?o @ۤ?ox$evF@(F?oPF@2?o) F@#@=f"?k$RN@H~v?j"z@RNb?jՔ,@\E?jۚ@f) ?jxH_@q# \?j^a@{i|?j7\@ׅ?jΑF@׏?i@q@ך>FB?iI@פ0b?i$@׮bn?iq*@׹FX?iJT[@Z)(?i"yC*@͡ H?h'@?h\@.?h@u?h?D@&b?h\@?h5fP@ JbN?hACb@F8?g볜V@)wH?gX@* ag?gb{7@4e?g}&͍@>ԉ?gXM:c@H.?g3s@S:N?g%%@]~?fX@gb?f!@rF?f 6@|V*4?f{40O@؆ A?fVZH@ؐ+?f1Q@؛*i?f wQ@إqT?e΃@دm?e%lQ@ع~?ef@Fb?eyBsK@΍E4?eTi"@)S?e/Ӷ;@ !?e Ь@a ?dF "@J?d5@49?d*ʀ@ 6r?dwQk@}\?dRxa@ b?d-4_>@+ F ?d ɥ@5R)s?c$ @? ?cĞm@I?c:@T&?cua+@^mY?cP @hy?c+p@rb+?`M т@@FK?`( @J*?`;Ps@U M?_ҘtG@_Y8?_i!@ivd?_2@s`?_rJ}@~.?_N/W@ڈu?_):Y @ڒbK?_^@ڝFj?^M@ڧJ)?^l|@ڱ ?^$(:@ڻ1?^sN|@P?^OS@e@?^*B/@ڬ*?^@i?]Gg@:cS7?],@F?]I_I@*{?]t@ ?]Px@U?],"@"p?]@, ?\?i@7* ?\,L@AqI6?\n@Kc3V?\vpD@UFq?\Q'@`F*[?\-5A@j ?\͡\@t*?W(m@܅ g?Wo+@?VM]s@?V*M@Y?V^@M?Vx@m?VUq@@.c??V2 X@$uG)?V~2@.*h3?U\.I@9RS?U9ɹ@CI?Uk@Mz?UҖ@W׸?U_Һ{@b9?U?Nb'iL@n=(?N?Y͜@xgP?NPW@߂˹Qp?MH@ߍ?MH @ߗYy?MI1@ߡc6?MP@߫GV?MlZo@߶.*?MIk@u?M&}l@ʻ ?MsbW@ @++?Ai1x@~?Aw@ )?AepU@p+?A@h@?Aρ@)Td?@=j@4E>?@gO@>d|?@@HG+?@V@S+J?@c祾@]a?@?A@gͽ?@<ޏ @q ??g*@|50??В)@|4??@Á??熐@ d\??b= @QHG??=<@㯘+j??gZx@o?>wn@%?>ν?7@l֗?> V@سP?>>H@p?>`=@A?>;h@d?>g@H'6?=d@ ,V?=ʒf@]O?=0@ ?=|X@*x?=V8@51p?=/IO@?x?=w@I?S@!+?9m*@+?9s@6(?9d2@@dG?9=H@J?9&pm@T?8T%@_9+?8Ƀ/@ie.?8)?@sHS?8{@~,=?8UqUf@U{?8.<@咛f?8k`@֤g?7@)?7c%@p?7@廷 -?7l%{R@dM?7ET !@EH3?7@ڌ,?6>o!@\?6@F3?6@`ք?6=/.@n?6\Kq@ ?65+@5?6 G@"|dm?5-@,H?5ɟ@7 +?5ml@AQ?5qAJ@K&S?5J6@Us?5"n@`%N?4%h@jl8?4ԏU@tw9?4c@~eaY?47aA@AH?4_ +>@擈+?474@?4,@r?3醣@\?3Z~q@漣.?3.`9@?3tE @1WY?3L0@xeAx?3%!@H?2~@,i?2R K@M??2& x@^?2 Q@в?2a?@!?2: (@#h%?2v3j@-E?1JH6'@7e!?1dfD@B=I ?1U@L,J ?1vƨ@V4+?1O۬@ar~?1(ob@kXְ?1C4@u?0kd@D?0l@-d?0I@te?0d1p@瞻H?0=h{k@,**?0<˅@IJ?/ rM@罏R?/{}@t>@lEԉ?-@v?,Ym@?,|Y@?,>@`%o?,n\x@蟧?,E$ $@eM?,@5I8?+ vu@|,vV?+|6+@`u?+@ ?+ua@P׈?+KԎu@痺#6@eyJ?o@ocj?j0@z<ס?xC@섃?h6[@ʞ0?<@P?@Xe?oٟ@쭟I?-@-?@-6?dp@sC?9gl@ֺ-?%`<@k?ۄ@HV?3h@o?`@f~?a#|@ I?5H@d,6? r@V?X@(#?FW@38 ? S@=L?]I @GƟ6?VԵC@J(?+>W@`-gA?ឣ@קQa?Իn)@?ze@4?~84@{'?R;ԉ@ž{?'E{g@ ?@&s@Pf?k@J ?[f@)-Ga?ya@4%1?Nw"@>ko?#b@HY?D@RG?!V@]@g? @g?u>@qf?I&w@|I-?ZE.@\-M?g@?vq@?A@0:?p@w$3?E!)@b?i1@?=@Lf?i@ؓIM?ZE@-l?k1@!?@v@g?N8@3?铳@ S?"n@i@*fk?;x@5JU9?[y@?X-?{o@I}?y/@S?@^,ئ?b&@hsr?7$6@rΒ? _[@} ?B7 @HfK9?аvk@J5X?_^C@-s?]J@]?2|ߠ@c? @ﺪ؆>?ۚQ d@Ē?)=@8?@?YF%y@f%?-՚@ Jx?d{8Z@T-? ^@=? !H?@ ( ? ~1@(f^? QAV@!oP~? $RWK@+? b@5x? s(#@@DfD? @JJd? p@T-߷? C@_ ? @i_*? ŘN@sF~? &^@}0? Ҽ@4n? bQ@{Y? 6@fd? @ J? ):]@P-? 9l@? J"@J? U[X]@$j? (l>@k? |ܤZ@䲟? ΍G@90? w@@@g#P? tKw@Ja? G(3&@ .K? @?{I@"[t6?@,ز?A@6?g@A0?:% @KwP? 6޲@Ugo?GV@`JA?XS<@jL.+?i!@tj6?Y{@~TU?,"h@ ؒ?H=@g|?Үp6@񝮟?@I1@,;?[D@s[?S@fî?,(@J?Pw@#H-!?\ܒ+@-A?/B@7?"N@B?er:@Lc=?=@V''?{$@`e{?MW@k8gO? 탛@uJ?[א@.x?wՌ@ a?PFc@@S?l(š@??Gbg@?@(G?^@og?7@Ƕg/?c@Jn ?]<-@D.X-?0@?}&,@?+@ؾ?,@_?{w"1@g?NP_#@ц?!)$'@$4g?@.{J?@8.8M?@C "l?lwy@MO`??e[ʝ@WJ?>B@aݼ3?2@l$sS?$(@vk?G@g?]@J?0{!O@@.9?T*@?-;@@?RU@*?{k@[iR?Nv@ȢSr?!?5@郑?jh@0g{?D<@wJ8?GB@.X?ly@??IX@K?@ ?$@ټ>?qug@% 3?<@/g?WJ @9g\?(j@CKF$? >@N<.x?o@Xn?E@b?n3lP@m>??`u@wW^?V @􁞠?YT@?VL@,g<$?au@sK&D?VnD@.d?'Z@N?C3]@G ?ʥ@Ɏw*?W@ռ}?mj@?>@@c?.y@g?ᐵC @Kd?P@8.?UA @.?U&@?'h@& WJ?|?@0SAj?ޞ9@:?AK@Dჾ?lr@O(g0?>@YoJ?h[K@c.У?ɷ@m?-[ x@xC?9u@7i?Tr+9@ѽ!?&U9@_?k@_I?>@gO?|@Kro?kߏ@4.?=BB@{?@6?rl@U?jw}@O?AH@?T0F]@݄*?%*@$h;?_@kKR?@.?ؐ@&{?jU@1?U?;;{@;٣u? Z@Eͼ?y @P?@Z[ ;?$]u@dg[?PC@nK2?!lT@y0/?@w[!?4ˣ@EA?Ty@ك?fsBL@Km?7$@?O<@ل'?@ g{?u@gK?|ϒ@ծ.?M/2_g@;A?N@;%a?nmM@c?z@ɽM?i@ '?bq@@WvG?3@g? >,@'K?+E@2,. ?JO@?Tn@O?熈 @g?U]@K?%j z@$/ X?Yl@kx?Kp@1?擼#4@?c,( @?Z>?2@׆D^?Y1@̈́?$~@hl?u?@[K$?p`ɂ@/D??ѣq5@ ӗ?Bh@/?޳l@v ?$[@)*?}N@4$}?MIu@>K?wG@HhL?O9@RKD?Y\@] /ud?m5@gg?Z;S@q?)j@{*?/@;J?Ȏ@?#@Ʉ?gqX~@h-?6}9@WL0?S^K@/U?!yU@??6nv@+}?tĮY@rh?DT@⹽i?G@?R@G?mS@h?AN@ KO?R bt@/o?"+J@ c?EK@*^?_!@4H5?ߒy]@?7?bC@I~p?2+|@Sń?7@^ h?H @hSKo?ޢ@r/?s@|?C/Q@'?I$@n(U?c9@u?ݳ}Q/@P?݃s3@C:?SH@hy;?#wa@Lc[?}|@/?-@_?ܔi@!?d4@ڴA?4N@3?iG@z0?ԃ@ ?ۤW @hY[?t[AA@!OLCz?D;@+/?/L@5k?@@#A?ڵ"] @Jjڔa?څ<@TҴ?UW @^?%qR@i?'?<@shG?Ŧ҅ @}L#?ٕq#@0 ?e@[L ?5)@6-?j2@t?,!e@/^?ئFhX@v?vad@ŽG?F|eB@hf?0@KL?f@/?׶@,-?׆[@L?W~@fT?'$`\@ >?Fګ@}?̭@";g3?֟e@,h?q{G@6L?Czs7@A/?IkE.@KW?^'@Ul?ջZ@_?Ս~Y0@j+?_aS@@tr?2LkT@~GR?~c@i1r?@GLo?ԩ%@/?{)@8?NO@֌? +ѝ@b?]@Ʃ?ŅN,@?ӗՑ@7'r?jT{@~i?? @7^?@Ah?Ѣ]@LCL?tŁ@V0$?G- @`D?p@kB?-c@u^ڀ?оc@k ?Аe@졩^?c3 +@3}?58}@zh?f@L?jQ1@/D?Ϭ] @Oc?9@Ǖ"?Q`j@ ?$ +@#K*?pR@j5J?@s?Λ@t@i]?m @?L?@#M@00?RKL7@ă? @$?Ͷﻨ@.Z?͉>}@8+I?[E@Bi?-U@M/S?*㗌@Wvi=?yH@aL|/?̤Ș.i@l0fO?wy>@vK?Ifcr@?P7e@?E@5?S=@f?˒>h@ߨ?dA?@i?7@M@;M? \@Ȃ0Fo?tE@0?ʮ-u@n?ʀ|Q@VY?R@񝾗U?%@䢁u?j6 )@+?ɹo@rh?ɜn@L;?nW@%0&?@;@/G?J@9O?E@C9!?ȷ74@Nwu?ȉ@Xba?\33N@b?.i@li?r@w7L[?"Qn@~0z?ǥqp@?wO@ ?J+@RA?`e@a?@A?@'+?ƓO-ݑ@nij'?e~@ӵMTG?7{@0? >,@C?܍@ ?Ůݜ@`?Ł-^@?R$Z@^!?"xd@ ?I@%iJF?;+@03M4f?ē@:z0r?c&@D\?4R)Q@O-?Hț@YNۅL? tF@cà?åi@mܢ?u\@x#?F$WC@ji2?@M?:!v@0?·?@=S@iv?rA@+M`?Q@r0?0s@$?Z@w?QI@F۱?"N.@Ս?ma@Ԣ ? & @]?lu#@bj}?cC@M@?4+[@1*?{kA@7iD?]@}Sc?@'ۑ?ud$J@2 {?Ep@?m@G5?=@Q̣U?I@y@\D?ޘ@fZj.?!w$@pMm?7@z1W;?O>͆@/?@u?&ʣ@۾?v^R@!?/nx@Jt?a @Д?1f@j?n@M?P@f17[?V2 @!z?r_BR@_?Bk@:۞!?F6@A?w%U@ ȢƔ?M@?#">@Vi?Ly@)M'?Ύ@31z?^W@>+?z:q@Hq??P*E@R* ?R&'6@\h`?7w@gFR?TO@q?e@{jz?~?W@MF?WUjt@b1f?%+nY@?ޚ?@?[@6 ,?@}L?\@ģ2?*\9zg@ p?2@Rj[? *@Mf?৶U@1?a @'?/@m?e *@ L?<@l?=%@ B?f2@*?4@4j;2?z?@?N%R?qN@I^1c?Hc@SM?l \H@]?9f@h2v8?ϫ@ry?էlD@|?: @?qW@NjR??/ -@Nr?  3@1C?@#-?: @il8?vl@İVX?DgCc@??Y@>~?Z @ㅆ?ˢ@j>?{I@M?I۫y@Z1ϱ?e@ ?@$?`@!.6w?<\@+u ?M[,@5^?٣G@@I ?WmW@JJj]?Jb@TNq}?S5E@^1?P3#R@i$?OA,@seC?\v@}?KrA@?ů@:? ?THd@)*?!oT@jg}?DV@NQ?Z@V1?AN-@ŝz?W@c?%?6E:@*ܢ?.@q?{@yUt?/k>@j?x4@#N}?,H@@-N1;?cp&@7Z?.@A?H@L"?Gc@Vi !?c@`A?Yf.@j5?$y@u>k?Z@N^? 3@2H'?8Q@z?N흒@Yp?~’@ܮ?Wte@ ? xy@.`?y>@u?Dv@Ѽj?+w@N>'?<-@J2(F?|@f?oLp@P?:@ ܏ ?YQ@ ey,?lM@ ?"_i@ #󇡟?d -J@ .:j?/%@ 8N?CױT@ B2f?@ M?@ WU0?Zei@ a?%]@ kYL?P0@ v*Cl?Y@ q?>M{@ kk?Od/@ N2?l@ F2R?br:@ ҥ?@ ?z@ ?Ev7@ a9l?=ap@ Ҩ#?E@ a?>s@ 6kK?pbDȒ@ }NR?;_m@ 2tq?Јh@  ?cp@ Q?v@ 8?eV&c@ $X?/-H@ /&?I@ 9m?í@ Ck,?=]@ MO>?Yr"@ XB2T?$1p'@ b>?|{@ l}?%@ wܻW?m@ ]w?Nc@ ?cz@ ?Šl@ 2k =?<@ yN]?x'@ 24?B~ZV@ ? T@ M]$?s@ ӔGC?+4@ ?lie@ "o?6Q[@ i ?_R\@ k*?a@ N}?Uy@ >2?`еy@ ?+Kl@ %?Ov@ 0'c?B[@ :Y?-r@ DO?U9GL@ N燎)?TZ@ Y.kxI?0.@ cuN?@ m2?(@ x?Ij"@ I/? X,@ ?ޜ\0@ ?mϱ@ /?s@ e?>Ǩ}@ kXi?2@ OB? f}@ :2?х@ ԁj?hJN@ O?2~y@ ݓo?s@ U?x#!>@ ?q@ 5?Z8J@ *kU?#{\@ qO"?v@ &2`?bB@ 0K?}s@ ;En?Ee@ Es?+*@ O?ִ@ Z?>\@ daT?gȗқ@ nkt?0RV@ xO?܎j@ 62?fσ@ }+;?ö@ Z?R{ @ S?Rݼ@ Q=?㏯@ |!? @ ߈f@?t@ &k?=/6T@ mO?;@ ߴ2?D@  Z?_@ Az?_Z8Ϛ@ 3?'({@ ?p%@ \@?8@ ]F`?ZNg@ 'k?JV?@ 1On?֯D@ <22&?(1@ FyF?@ Pՙ?l?@ [ݿ?4ʦ@ eM ?VI]3@ o,?W@ yۈ&?m{@ "l?V~@ iON?&@ 39?x>@ wf?,@ =a?y)@ ݟ?A.@ ,? B@ L?l|^@ Y?ZxS@ k?cJŇ@ O/?,s֡@ .32?pϬ@ uW? @ A?t _@?Nz@Ij?N?@(k?~gLK@2׈?~ݶt-@=k?~pT5˿@GeO?~8{)@Q2R?~Af;@[q?}ɸc4@f9!?}.ߛ@p ?}Z,M@zJ8?}#Ul@4W?|듙t@Ur?| @k?||@O?|Dk@*2q?| p>nH@qÑ?{Ƞ@·?{^@?{frx@E*W?{/M@ጥw?zŚ%`@ӈR?z=Jd@l ?yJ@HQ޶?xu@Rl ?xv[@\O[]?x]fsA@g&3E}?x%@qm?wW;@{m?w<@ݬC?wHb@Ac?wG@Զ?w:kK@ψ?vس@k)?v,T@]OI?vi@ä3%?v2D@?u@1N?ue@x8/?uD@v?uT4Ww@`?u}@M?t91k@ l?t2k@Oi?toB@ "3?t5 a@*i?sp@4./?s@>O?s9}@I=V?sJ@S@?sx'+@]ˈ?rw@hli5?rq`@rYO?r`T@|3?r&j@?qQg@-?qd@tn?qvm@?q<^@ ?qy@I ?pYAj$@ĐlIT?p֕@P3t?pRSB@3q?pq@e[?oN_@:?o̚#@ބZ?ohJI !@9®?o-@ ?nE@Lj!?nϭ@!l)t?n~AΏ;@+UP?nCܦ@53Q?n > @?<?mμ5A@J)zZ?m:j@Tpdz?mYe@^?m7LQ@h?lO@sE@?l4co@}l`?lo L@O?l51@3?k]@a&?k/vH@F?ki]@D?kK-rcY@5.?k5@|m ?j+H@È`?j@ l?ja*NN@QO?j&~@3?i).r@F?i@%f?iv;E@ l$?i;4i@?hj±#@!M,?húj@,A7L?h @6lu?hLZ[@@P_?h@K3?g<@U]2?gK+a@_ƅ?g]Z @iް?g!t@t1?f@j]?aM@u?a1Eh=@dQ?`փ]@;#?`E`@yw?`_(}6@9c?`#{'@l?_Y,@P ?_!.0@3]?_pt@U}?_4#b@ћ?^+b@?^mOW@)C?^@pc?^FZ@C?^ g5@m-?]@EPl)?]3@4VI?]R@#?]X@.~?\l@8`޽?\U7@Bc?\\=v@L?\~<@W5#?[H@a|m ?[wt/@kPLI?[eA>t@v 46h?[(Ii@Qt?Z@^?Z,(@ޝ/?Zo6_@%‡O?Z1dw@lŢ?YVR@?YJ@l?Yy)nj7@AP5?Y;p@҈4?X [@?Xf)@>?X2@\)?XE9@gn?X@Q?W @1?Ww@xl5?WNpc@$PT?WK߼@/3?VӶFv@9M?V *I@C?VXy@M :?VP@X!G?U`6@bh1?UX@lp?Ub5|@vmZ!?U${<@=Pt?T g@4?TvdE@?Tkyj@?T.L9@XZ?SΛ@z?S#)@?SuG@-?S7!@tm:@?Ren@ݻQ$`?R/@4b?R<@I?RAF@&?R.@z?Q|!@³?Qz6@d?QKG&@% ?Q ݓ@/m`?P{@:9Q?PxBҵ@D4B?PT"@N,?PDY@Y kF?O٪֞@cTUf?O0rH@m“?O^v`80@w}?O ܠ@),?NB+@pmL?N`X@P?Nhద@4ο?N*vq&@E ?MNJ@Ke?MC֌@5?Mqp6@s?M4~@`]?Lx}@ާK?Lߋh@mk?L{Fv@5PĿ?L=|@|4?L#@2?K|\@ Q?Kģ@P?KGKu@&?K F.@0ަ>?Jp@;%(8?JyYz@Elmf?JPP@OQP?JR6@Y4?Iպ6 @dAy?I"E5q@nq?IZl_@xߡ?I@?HZ@\7?HW^&@W?Hd+?4@mF?H&WJV@1Q0?GtH@x4o?GeL@Y=?Gml;"@?G07H@L߁?F5@ߓ?F :y@ڦ#?FwrO~*@!w?F9|@hmҖ?EDX@Q?E?@4 ?E}e[A@=9]?E=E@'#}?D6/@1a?Dö$@<K?D"~@FXC?D?qŐU@Ptc?C㱖@Zm?CDQ@e-P ?Cf~@ot4)?CAÂ@y|?C94'@?B鿙@HA?BS_@,?BB@֦jb?B&6@T?AÐ%@dm?A@Q|?ADd[@4I?A@9h?@8@?@8TH@?@F BN@ /?@w1@TN??Ԛ@ 4??Mx@n??GЪ@)Q]??")@(p4h?>ȍ_]v@2?>HD@IcJ-@GD߭?> \*@QN?=9f@[Ҧn?=ķ@f?=K @p`m?= {@zQ=4?<@5'T? T@H1ѳ?7Ӎ}0@Rw?7?@\&?7T,@g8y?7|Z%@qL"?6 @{`?6@nK ?6Uk@!Q`?6E@h5s?5 8@?5\C4@?5Vn@@@ s|?3@ߺe?2Ӽ٨@ ä?2$@*H?2Zv( $@4?2z@>n K?1̊@IQk?1jcqk@Sd53?1[#@]?1 @g\2?0__ @r8FQ?0/G@|Ä?0],@Ƨn?0U@ ?/ݧ%6@Tmk?/Mv@QՋ?/^KH)@5?/\@)?.:@ow@wð?'<; @?&@b?&#?@ LnÂ?&wx|@R?&5O@!5?%MO2@,!*H?%@6gh?%q"5@@R?%/|t@JÑ?$ ΅@U<{/?$a/@_?$jllK@in?$)79@tQ?#!Wi@~X5?# @ h?#dx,@?#"Pd@,2?"N@s?"r@[N?"^%E@En?" J@Hn?!T ]@ЏRm?!gRy@54?!WӸw9@T?!?@cԧ? ԫs2m@? n@? Qq/@8;n? W@%?N@"nc?%A@- RN?Ja}R@7T5T?@Avt?;@Q@K?}@V(?CSO@`o:?O@jZ?̹y@t?~ H@Dn?@ R@?V&@P5_?h-T@@6?'(}@ ?f @$_&?=p@kIF?ak;@#? @-q?_ @8@n ? E@BR,?Zi@L5?7@WŸ?YQ[@a[?@k?SV@u)e?i@0?T@wQ?@o;?LB@RzK?  @L6dk?QԼ@?aq@?E@ 1?@g ?PCF@ܮ? FJ@1?>5)@(@ Rv?\@ 6?Ļ@ ?t,5@ S-=?0@ ݚ]? @ U? d@ (?? e.@ o~#? "5V@!ohC? ޝ@!R? @!D6? Wo@@!% ? t@!/)? @s@!:|? }@!D_? Ir6@!N? {3@!X^C? }u@!c4oHb? ~Mݪ!@!m{R? :/a@!w6p? S@! )? 7@!OH? o/@!ל? ,]ME@!? ?@!$?0@!k/?aˁ@!o(?1@!S?n'@!@6P?ج@!އ;?SCY@!yh?@!c?&x@![ġ?`@"?DG=@"N? ;@"0on?\@"&wR?x @"061?4И@";4?@"EKY?@"OC?ia@"Yā?%0P:@"d l?A>@"ngn?S8@"xo?YdX+@"R?v@"<6?чM-@"T?>@"t?I9@"#?$7@"W ?άP^@"L:?}X@"6Z?9^@",ot?@@"sS^?&@"6 ?n)~s@"s?*;@"Gœ?No)W@#?a +6@#?^s*L@#,Y?@#'cy?֙\U@#1oT?R<@#;S>?NZEn@#F86}@? |@#Pg_?_@#Z?ǒ@#e ?? b,@#oS&?nW@#yF?3l#@#?sG1@#(o?/Z@#oS ?n@#7 ,?@#G?c@#C1?`@#o?۾(@#ĮE?@#e?St.I@#_ָ?8@#o?l~@#R+?% @#46K?D9@$ {'?n-@$?.p(@$P?p7 @$(O:1?)x@$2x?@$<݌b?"@$G$o?U?]@$QkS?װ@$[6k?@$e?gN@$p??:I&"@$z?Э@$Q?ΗD_@$q?fpN@$[B?Tfo@$o?ؗr3@$Sk7?ڒ@$06?Kf@$w?aB@$̽?󽤇@$?v@$Kp?0+]@$뒨?oJ[@$ٌ"?4@% p ?[B@% gSKW?:/b@%75v?~&@%s?* @%);]?AM@%3=?Kq@%=ņ\? ]@%Hİ?lԎCS@%RW?&$̂@%\o#?]a@%fS+v?d@%q,7?Q~6@%{sS? ,w@%> ?q`@%|\?}{@%Gf|?6@%?A;D@%Ռ?A@%oB?b*mD@%cSb?¬@%ͪ6?Wv@%?쎝>f@%7)?G!8@%~H?).@%F?o)0@& 0?s4@& So?/RW֛@&pY.?m@&S?@&*(7?aҲ@&4o?l'.@&>H?Ol(H@&Hh?铵~[-@&SC&?O@&]? A@&gьO.?E5@&rp9N?Nڗ@&|_Sw?<:a@&7a?&@&?糂@&34?nR#@&zȇ?*P4&@&Ų?)A@&?9@&O?\\7@&Ζpn?왨@&T?SLe@&$7A?去TP@&k,?J",@&jT?i8R@'Ts?m@' ?Œ?|Y @'?75@' ͌:?)@'+o?㮑@'5[S?i1@'?7"?%a@'I ?H@'T/Js?2@'^v4?W#Rx@'hr?h@'s]?lXP@'}KY?}@'py?E=褢@'S?@' 7?Ym@'g@?wx @'_?2@'?K_@';?ߩn@'ς=&?e-'@'Ɍ{y? !4@'pe?UL@'WS?ޗ[ @'7 ?R$@(_? R@( +?Ű@(r?~s"@(!?6la@(,E?s}Z@(6Ge?ܧ([&@(@pE?_`@(JT/?Xs@(U7n+?C4@(_cXK?ۈ@(i?AX"@(s‾?`=^]@(~7ſ?ڱF,F@(~1?ji1@(Ō?"}|@( pѤ?@(ST?ٓ<@(7NK?K8A+@(8k?`@('v?ؼ[@(n`?t@(ڵş1?-t@(Q?|*z@(CǤ?ם܆@(p?V<@)S?@)77?L@)_?_$@)"?7@@),@?!-B@)73+?ը]|U@)Azip?`H;@)KS?EK@)Vp?Ѧ@)`OT|?Ԋ\@)j7V?Bj,@)tv?(@)#?ӳ."϶@)j!?kN<@) =?#$}@)I?T@)?3?Ҕ @)pr?M*a@)T\#?|s@)7v?ѽ@)[?vBљ@)ۡ?.Ͼ@) ? 2=@)/\?Пl=@)v|?Wum@*?@*p?XW@*KT@+CS?_;E@+M4?xd 7@+WT?ϵ$o@+b'?Ƈ{@+ln?@/@+v@?l(@+q*:?Űeb@+CTh?h@+8R?!$??@+?a"_@+{ ?đN@+^s?Iq#@+ƣ?gB@+?úY @+3?r@+zq Y?* @+Ty?~@+82?›SX@+Oq ?S, @,[?? A@,♓?U:@,#ƃ?{#7@,%j?2a@,/&?꿑΅@,9py?e@,D?Tԙ?Z\X9@,N8?*@,X ?O@,c;_?ǿa@,mZ%?9@,wc?ew@,M?4Y@,/E?a5@,vqve?@,T?Т^@,8?qk@,K+?@A>`@,?U$@,?8@,C?g?Qy@,f.?` @,譍le?Q,@,qV?"Ss@,;T?FA@-8~?&2@-K?豶@-k?nd [@-&V?&5H@-0?@-:1?@-E+Q?Mw@-Orq6?zX@-YU ?L@-d8_?uGqN@-nGI7?,@@-x?@-q?+"@-Ư?Tfc5\@-bQ? 8v@-p? ,0u@-q?{ϊ@-7U?3q@-~8?7?E@-)V?V4X@- g?[)F7@-RQ?s@-Ɛ?>@-z=?/n@-'?:ve@.nq?_@.T?{@.8#?bdb@.'C v?,c@.1?^@.;1?c@.F ?C @.P^Z\?'\@.ZD|?'o@.dq?lZ-}@.o3T"?$ጤ@.yz8B?ܿ\@.?@.ӵ?M%ia@.N ?Xނ@.(?(@.ܪ:|?u -@.#$?-|x@.jqb?&˟e@.˱UM?Z@.8b?V|@/<U?3@/G?@s c@/QJ~?̵@/[Ƽg?S?Ӗ)@0(s?@0Ԫf?i22]@0)P?%aG@03bq9?CV1@0=UyY?d@0G8?Yi@0R7? n@0\} ?P@0f??J@0q ?J0!g@0{R?ᐬ@01?Ż@0r%?B=@0'UYy?;si@0n9C?>@0?5C@0l ?pDb@0B_?,7ux@0͉ǔ?hji@0Ъ?*M@0%?`˲Ֆ@0^qE?S@0U9?/X@19#?`@1 3b ?Qa@1zL+? @1~?:>@1*t?)@14N?B[Z@1>? @1Hqe?1@1S#Uń?vf@1]j9?3&۽@1g?YH@1q,K?b@1|>j?g30o@1T?#$@1̫>?'@1}1?Z=g@1Zq?XFV@1U?sI@18?w@1/?*.@1v j?I^(uW@1ؼ?go@14?H@1J?}A6@1]P?:/@2rGp?tg@2 U?O@2f9o?o*}@2 7?,&F0@2*V?P@25:֪?Gt@2??a؏8g@2IȪ?i@2TF@2b90"?оl@2٩B?ncOX@2X?*@26B?z@2}ǁ?c@3īk(?`s@3 |?A@3Rr?"E@3!U?hS"@3+9?R@36'b?k@3@n?#Gr @3J"?W@3Ta(?EK 3@3_BKH?@3i?s@f@3srs?{@3~U?7r@3^9.?0e=@3ځ?U@3ġ?mY@32?)K@3y?情,@3+g?P@3?_¬@3NrS?C@3ڕV=?tV@39|N?mV@3#fm?R6@3j?Yr@4?Zb~'@4 4?tB@4> ?J˨N@4"?G@4,r3?9+.n@47V?Os@4AZ9\m?(P@4KF?܈@4U?v"@4`.o? G@4juǭS?e1@4ts?~2wX@4?ҵ@4Jr?m[e@4U9?BJ@49Y?\V?yl@4&?TI@4f?KIc@4O?F(\@49??:? %@4:w?d>g@4ہa?Tnu6@4r?C@1nT@4UY?2nuz@4V9y?!)X@5?p@5?&J@5*/??,o޺@5#q_?](F@5-W?͎t}@57A?/L =@5BFr%?}nE@5LVjE?%;ZE@5V9?X-@5a?yLr @5kb ?с?1@5u+?'ɚ@5~?UpV|@56?l|@5}!?K->j@5s ?);;@5 VJd? @5R:4? @5r?{Ԃf@@5+?wF@5&K?s5m@5mٞ?m t~@5洫þ?d@5?Xf.@5Br1??tmZ@6V*@6:@6R@6$^=@6.{j@68e@6C2@6My@6WrP@6bVp@6lN9@6v@66@6"[@6iE@6@6n@6>rp@6V@69@6@6ZV@6v@6%@6.@7uN<@7s8\@7Vv@7%J:`@7/"@79B@7DǕ@7Neȱ@7X@7b.\@7m:s{@7wVV@7:@@7B@7Vib@7䧵@7ȑ@7*(@7qH@7ɸr@7V@7F:!@7 .@7I@73@8aq@8\@8g@8&6s@80}V@8::.@8E M@8OR)@8Y@8cR@8n&<4@8xmz@8sd@8V@8B:@8m@8@8@8]@8ʤS@8s@82sD@8yW.@8:m9@8@9N@9@9Ⱦ@9'"s@91i@9;s$@9EW@9P>:MY@9Z7y@9du@9o_@9yYȞ?@9_@9Ʋ@9.s@9uV%@9:E@9@9J@9ː@ @9~^@9h~@9e@9s@9VE@: ::d@:@:@:( +@:2U K@:B@;b@<@< @<Y?(@<t)H@<)Wg@<4.;Q@<>u@;^%@> x@>2@>!x@>+ɯ @>6^@>@M~@>Jt@>TW@>_";>E@>ii(d@>sf@>}P@>=ɏ+@>yJ@>ː@>t@>YW@>;d@>@>.F@>t0@>oJ@>Yj@>I@?t@? W0@?;P@?"e@?,@?6@?A96@?K9@?UǑ#@?`ta@?jUXL@?t;p@?~t@?*@?p6@?V@?@?E@?tB@?X,<@?;j@?aT@?@?}"@?5ɻu@@|@@Ð@@ t@@#QX \@@-;{@@74@@B&@@Ll]B@@Vɛ@@`@@kA@@ut(@@W{@@;֛@@]@@@@=a@@1'@@xe@@ǿO@@tG@@MXxg@@;@@@@"-@AhM@A@A@A$=0@A.tng@A8XX@AC;@AMY@AWM@Aam@Al-@Avt@A3@AtS@AIX8@A<"@Aa@AK9@Ad扌@Aȫs@A@A9@Atr@AXĒ@A<@BUA9@B+Y@Bi@B%)S@B/p@B9|?@BCt@BNEX@BX;@Bb%@Bm x@Bw`@B3@B @B5\^@B|uF~@BX@B @Fdu^@GY @G <@G9 2%@GD@G)Z@G4 D@G>T @GHm*@GRu~@G])Y@Ggp<@Gq @G{d@GD@G$@Gү@GMJ@G`u@GYu@G<@G5 0@G|܃@Gƣ@G @GP@H-j@H v@H%YU@H l=?@H* ~P@H4hp@H?@@HIː@HSή6@H^V@Hh\u@HrY@H|= @H1 ^o@HxH@H@Hq@HLU@Hu@Hu@H!Y@Hh=<@H [@H(@H<@IQ"@I ʯ;A@Iy@I!Xvc@I+Y@I5=(@I@- {@IJt@IT@I_1A@IiHa@IsY@I}vC@IY'@Id=lG@I @I@I8@I˽-@IƮ@I @ITv#@IZ@I=Lg@I)!6@Jpt@J ^@J˝M@J"D۠@J,@J6v@JAY3@JK`=,@JU!@J_T@Jj4?@Jt{}l@J~¯g@J @JPv@JYS@J=r@J% @Jl@JƲ9@J X@J@G@J凓1@Jvp@JYr@K\=@K @K@K#0X@K-wx@K7'@KB@KLLvP>@KVZ:^@K`=x@Kk!!b@Kuh$@KD@Kɘ@K<@K @Kv*@KZ~@KX>@Kǟ!B@KD@K,kd@Ks˩@K𺯓@K*@LHvJ@LY@L=@L$!#@L.d 0@L8K@LB5@LM8s@LW^@Lavj@Ll Z@LvT=@L!@LP@L(+@Lo@LT@L>6@LDv|@LȋZf@L=@L!@L`o@L跏@L@M4@M{U@Mwu@M% ZF@M/P>0@M9!o;@MCY[@MN$藯@MXḱ@Mb"@Mlu@Mw@v@MZ&@M>@M!O[@M\9{@Mw@Ma@M0A@Mwa@MӾvȴ@MZ@ML='@M!G@M@N @NgB @N,-@N%j@N0]3@N!@N@N@Nc̮@NԪl@N֌@N8w@NZ@N>=R@O !{@OTe@O@O&̎9@O1(̌@O;o@OEv@OOZ@OZD>r@Od"@OnE@Oy0@O_nX@OXx@O퓖@O4w@O{Z>@O>^@O !@OP@OՖ$@ONx@O$8@Okv@Owa @PZ^@P@>~@P!@P'@P2D@P<[d@PF@PP@P[0wA*@Pew[+J@Po>i@Pz"S@PL@P|0@P̺@P @Pg@Pw!J@P[ i@P<>I@Pփ"3@Pr0@P\P@PW̚@P@Q @Q,w6@QsZ@Q(>թ@Q3"@Q=H@QG@Q!@Q;@Q @QS@QE@Q/"@Q(wmu@Qo[W@Q>@Q"@QD[@Qdh@R Y@R@R!@R([8@R2m@RJ@R|V@R2&@R@R56m@Rrַ1@RvT@R@R+<=@RiU@S #@SH@S"5_@S(_ը@S2uFS@S<@SG-@SQVT^@S[@Seє@Sp4Pj@SzLԙ@St7@SA@S@SCS@SM@S @S3@S9ӋX@Sws)@Sr@Sc@S0R#@Sm@T n@T2@T&|@T(drz@T2d@T<߲@TGRKQ@TQZ@T[@Te1]@Tpn@TzQq @TUh@T̰'@T Q<@TGs@Tx3@T0@T_~@T>p @T|F@T๯@TP.@T4@Tra@U /!@UP@U+om@U(i8,@U2@U)[n@V{ɤ@W iB@W F@W4*@W(rH@W2Q@W<툯@WG+(L@WQhȖ\@W[h4@We}@Wp!h@Wz_G'@W@Wڇs@W'@WULJ@Wg%~@Wo @W @WLF@W։@Wdž@W&a@WBy!@Wf@X `l@X,@X9FG@X(vx@X27@X<%@XG/j@XQme@X[Q@Xe@Xp&E9@Xzc@Xt@X$%@X[@XZdq@XC1@Xգ@XD*|@XP<@X֎@X#@X MG@XGc@X4@Y ¢R@YC@Y=⹞@Y({*@Y2"@Y<>@YG4b5@YQr%@Y[o@YeB A@Yp*@Yzh@Y!L@Y0 @Y!ay@Y_W@Y`@Y@@Yb@YU@Y֓ @Y:@Y`j@YL@YRE@Z ?@Zߍ@ZBQ@Z(u@Z2@Z<_\\@ZG8@ZQvC@Z[>g@Ze*@Zp/~ȳ@Zzmfr@Z@Z^M@Z%~@Zc5 @Z=@ZU@Z}@ZZW@Z֗a@Z]? @Z@ZP&l@Z<,@[ @[ |w@[G@[(@[2\0@[@cGb@cQ#K@c[I@cfb @cpYЕ@cznT@cB @cU@cO`@c"<@cګ@caxk@cF@c̃_@cAC@cG@c<@cz!.N@c@d a@d3Y@dpQ@d(@@d28d@d=)$@dGg @dQp@d[`@df@dp]B{@dz?@d)@dsS@dT@d@d^^@d @dJ3@d̈>}i@d)@d~d@dAt@d~4@d]@e @e7 @eu=n@e( @e2}V@e=.@eGk@eQ\"@e[x@ef$n@epb<`.@ez@e|Gy@e9@eX.@e[̄@ejD@e@eO;Q@ěO@e{8@e֛@eE '@eZ@e[@f 2@f<:B@fyڌ~@f(z*>@f2@f=2@fGpYI@fQM@f[뙖@ff)94T@fpf}@fzy@f_@f@f]X@f7@fؘ@f8%@fSoB@f̑x @f@f N@fJW @fۙ@fŗyY@g 7@g@`@g~vd@g(G@g2@g=7Vo@gGt@gQj@g[6G@gf-R@gpku@gz9R@g@g$Ut@ga^@g\@g5@gCi@gXt(@g̖*@gӴt@gU@gN@gM@g4 @h 4@hEsҋ@h@h(@h2Tb@h=;"@hGy>@hQ3n@h[&-@hf2so@hpp y@hz8@hR@h(@hf0D@h2y@h@hra@h]@h̚@hQ'@h@hSr@h1k2@h@i qR~@iJ=@i@i(P׉@i3uI@i=@@iG~0\@iQT@i[pC@if7@ipt++@izO@if@i-7@ik/M@i@io5B@i$@ia@i̟NM@iX @i@iX.?Y@iΈ@in&@j  d@jN @jM@j(<@j3@j=E-0@jGzG@jQm@j[ @jf;R@jpyL@jz@j]@j2,"@jok@jl i@j R@j(@jfKt@j̣@ju@j+@j\] @jj@j DW@k @kSJ@kb@k(Ίg"@k3 *@k=INm@kGi-@kQ 5@k\y@kf@Iq8@kp}@kzX@k)@k6?@kthݏ@k '@k@k-Ig@kj&@k̨I@k(r@k#12@kag@k}@kܧ=@l G@lW睉@l;H@l('@l3"@l=Ngl @lG @lQɦ@l\F+@lfD@lp,@lz&v6@l@l;f]@lyB@l@lE@l1M@lo@ḽ%g@lX@l(eN@lf@lc@lD@m q@m\;@m$X@m(@m3d@F@m=S@mG'@mQCR@m\ c@mfI@mp#J]@mzÓ@mc1@m@h@m}@mB@mTs@m6@mt";@m̱…K@mb# @m-@mj V@mA@m@n #b@na!-!@nv@n(am@n3-@n=W@nG@x@nQ@n\@nfN @nph@nz`@nO[@nD@n?@nf@nr&@n;@nxYr@n̶^1@n@@n1}@no>|=@n@n~c@o (@oeJ@o]@o(2 @o3@o=\=m@oGݷ+@oQ}T@o\v@ofR<6@op\@oz#@o A@oI= @oܨ@o|FM@o@o?-@o}[X@o̺@o@o6;0@osۙ@o{7@o;@p ,@pj[h@pF@p(嚤@p3#:@p=`ڋQ@pGz@pQr@p\]@pfWZY@pp@pzҙh@p9@pM|@py@@pc@p@pDYKK@p @p̿2@p8V@p:n@pxx@pUa@p!@q 1X<@qnm@q#@q(7@q3'_x@q=ew@qGF@qQැP@q\W.@qf[@qp[@qz6@qP@qRvf@q8&@qͶ@q Vq@qH1@q†@q5}@q @q?u@q})@qs@qU@r 5?L @rs?\ih@r4?e[C@r(k?l@8dK@r3,t}*?r V<@r=j?u0@rGdv?y@xD@rQT6?|"@r\"K?<_z@rf`? S@rp3A?E"6@rz?7]3 @rsn?t(Y@rW L?BԻ]@rU?ʼ@rR?q@r=$?i@rM?< @r‹2x?#܁3k,@r/? Ѫ@@rr_?N<@rD{?غV@r끲G:?AU@rQ?a@r.?YVI@s :F?t@sx2?[x6@sѳ?Biɠ@s(qQQ?)Z!.@s31?KpX@s=n8?;qk@sGP\?*RH@sQ?"k$@s\'?#@sfe14?r@spФ?@sPs? m5@sK?~A9A@s ?񶐗3+@sR/?e+Мuz@sϖV?ؠͺ%@so4?L @s }?X@sHa?2h @sOd?r@s?T\@$@tl?HYl@t ?.?#$(b@t|·?@tnD?غg@t(o?v&@t35 ?Q@t=sNVO?iC@tG?C @tQ?@t\,-[?~]@tfiy?I@tpm¦?h@tz `f?@t"%?d @t`MG??xtT@tq?DCH@tۍ.?! @t,̽?P@tVj|?@t”l?t@t Q?`@? @t?; o|@tML9?ح=@t?}@tȌ _?q\@u+?=7@u C[? O.@ukk?[@u C*?6@u(?p.@u3:K*v?H(?J1u]@v=|?$l@vG'?q!@vQ4?ڊ],@v\5gj?R@vfs?Gn@vpR??j,@vzF?Et@v+9? u!xG@viJ?=@v&u ?M@vƾ?ό[@v"f\U?|ZQ@v`?fay@vC?A*@vEa?T@v*?EJ@vVȬ?ц$@v&8?OeE@vů?MD@weM?a7@w MD?<@w5?uFu@wD?>@w)O?b@w3C?X@w=%?'ӡ@wGġZ?]f C@wQd??8/u@w\:?~@wfw&e? \@wpDo?Ȏ-@wz ?X`@w0q?~"]@wn#?X@wÒ?3WW@wc0|?H*@w'z?LKEZ@wd?S@w¢CaT?&@w?y4 @w?Tv@w["_?/A٠@w„? 4@wbͫ?~נF@xkj?~/@x Q *?~1bp@xBR?~t\:@xu?~OOM@x) 5?~)SN@x3H!?~n@x=u?}@k@xGa ?}ͱ@xR\?}l}@x\>?}n@xf|AD?}I<-H@xp?}#̣@xz+d?|\}>@x5 #?|jO@xrf?||f3@x`o?| o)@xN/?|hM@x+?|C,@xi@5z?| W@x¦:?{M5!@x?{݌ @x"?{m5@x_XE?{l@x_?{b@x??{=@y?{,j@y V?&?z@i@yĜ?zѨ@y(?zb{6@y)?z_c@y3Lt?z\Q@y=^3?z7U9@yG0?zhi@yRz?y7!@y\C>??yȺz@yfݵ?yY@yp}?y{Kk@yzJ?yV|0@y9?y1@yw]?y @y"U?x1)$@@yk?xŅ@y0= ?xTsߐ@ymS-?xu/I@y«|?xPw@y?x+ ّ@y&8?xÈG@yd\u?w-v@y?w@yߜ]C?wQl@z;?wo @z ZD?wJuzM)@z{O?w%@z?v@z)ɚ?v*(9@z3Q[gZ?vb@z=?vM@zG̛N?via@zR :e?vDq?@z\G5?v*M'@zfzӱ?u' @zpqp?u'3Q@z{?uL@z>ZX?uKw^@z{H?ucݰR@z@?u>oT@z9?uT@z4'S?tp@zry?t'4T@z°?tI@z_?tLR7b@z+YJ?t]h@zh?t8q,@z릙1j?tt:@z8)?sJ@{!?s*-B@{ _xu?s" @{?s}P$ل@{ڸ?sW8d@{)X;?s2v\@{3U ?s (@{="?rȁ@{G8lX?r0x@{R ?rÁ!c@{\Lw?rwVN@{fc?rQp@{pǷ#?r,~@{{W,?r}@{Bvo?qMI5@{.?q9 )@{7]?q@{z?qq`@{9v9?qK@{w?q&b@{´?q@{V?p۰)@{/g?pD@{m?p)u1@{6O?pkmqnS@{?pF_@|&u?p p@| d(?o@|q?o:@|Us?oC@|)Y3?oOL@|3Z?oc!9@|=5@?o=>1@|G>?oZe@|Ru'?nw*@|\QŊ?n˓!@|fcI?ny6@|pT?n5{@|{ J?nY!s@|G!?n4@|41?n#@|Ϡ?m@y@|t,?m]@|>?mz9e@|{T?mv!F@|¹S8?mP[$@|;?m*Ҩ @|4?m@|r3#C?l m9@|?l*龬@|s ?lHrɈ@}+N?lmf@} h?lG@}R?l!qZ@}-Y?k;,@})!v?k@}3_2?k@}=Ѳe?kb@}Gq?kd6d@}R?k>U@}\U!@}fQ?jv@}p?j̯V@}{hH?j @}L1?j} @}O?j[ G@}pS?j5)y@}?jHQ@}Bԟ?ifij@}Pr^?iÅl@}½?i2o@}Y?iwBh@}9/j?iQ1@}v@?i,d@}o޵?i@}|u?h>=@~/?hQB@~ mOc?hD@~L?hiZ@~K ?h@@~)&.?hcO@~3c2X?g @~=n?glE@~Gm?g[e@~Rc?gvvF@~\ZNU#?gMꞓ@~f?g%R!@~pՎ?c[@= ?cu@G㫋?c5@R!K?c_yQ@\^r?cZ@f?c1e@p+Z!?c @{?bM@Uj?b#k@ ,?b8%@Ъ|?bg1@Jx?b>y@Kd7?b? U@?az@*K?aMA@C?av1@Bj2?at[@ Ў?aK@뽩nN?a#j{`@I?`|@8U?`y:@ vY?`c @)5@p?_&@{h?^3@ZS?^޹f@Q?^S@G?^sH@8^?^Kt!b;@P?^#WF@'?]@ƽi?]$@ g?]fq2@G?]Eㅠ@ᄦA?]Xn@F?]0g,@)?]@=sL?\߈|@ {& ?\N3@Ů?\1@eW?\f;#@)4?\=(L@3qߣ?\];wx@=E}c?[b@G"?[t@R*d?[@\h%n?[s:'@fK?[K3U`@pd?["Z@{!y?ZV_j@^?ZG@Dn?Zy1@ ?Z @V?ZX@U#?Z0/g@=\?ZWr@c?YS[pi@x?Ypl@Kg?YwQ@C`'?Yf ʼ@㩳?Y=<@Gs?Y.i@B"2?XӺ@ .?XV@b~?XnH"@j>?Xs@)8?XK;8@3vBQ?X"8G@=?WAM@G8?W[@R/!֔?Wlk@\l !?Wg@fa?WX>b@pl?W0.#3@{%,?WB@cAB?VZ%@w?V<@ށ*7?VhRf@!s?Vf@Y?V=@`B?VIM@?Uߺ@?Uv;@P@4N?U g@}?Usl@ˀ?UK:z@ e%?U",@F?Tg9@ _?T@@1?T@?T,\@)=?|?TXðyw@3zo?S~֛@g`?R@}^?RĮL @G?RF@ ?Rs@^^/5?RKuP@?R# }&@ٝj?Q'@=A?Q><(@TR?QvNI@|?QnqE@9L?QY@ ?Q0 k@K] ?Q6x@ W?PߌmD@Ɯ\?P6@0@Gn?OE@R8\?O`@\u?OC!C'@fMy?Oq?C@p;?OHk@{.4?O HX@l{~Q?N@?N],@纹?NNЯ;@%[\?N}R@b?NT舁@?N,U̸@:g?NDؽ@&'?M@Yzo?M\@ r?M2@Թ2?Ma ͈,@Y?M8d~@O~?M=P@ ?L$oz@9y?Lmeio@?Lŷ@)Fya?Lm @3?LDv_@=Ha?L&@GX ?K'7@RꊱG@.?>7a/@7"?>ιQ@unl?>ot@ ?>F.wF@Se?>@.M%?=*/@k?=E@ᩍp?=`[@-v0?=z{@$?=Q=@bm]|?=(@ ;?;@(-?7`@v?6쓐@hf?6Ö@A]?6-@~?6q+V@Gr?6H]@?6@7?5aF@u'I?5ͪٛ@h ?5@g?5{34@.OU?5RT@k?5)Ţ@ F?5)@`?4)q@$r ?4ŕ$@)b&?4ɧ@3Yk?4\M@=e+?43+@H@?4 L@RXv?3ڧ@\F(?3+@f?38&@qc?3f@{O%?3=츃@J?3ir@eY?2(@2?2M@E?2V@Ee?2q @$?2H -@T?2@<$p?12c@y<0?1W~.@d?1f@#{?1{#I@2;?1R)nw@pD ?1)@ 㨆?0K @?0Rl@)#?0mt@)f-?0{@3cw?0P.@=?0$^@H?/m9:@R]B)?/ 4z@\?/|y@f؂u?/wJ@q"4?/K@G@{S?/ @bh?.)Nj@@?.@ O?.hVM@JA?.soZ@K?.GJ՞@Ł?.H5C@!r?-6W@@V?-ňI5.@~aY?-(k#@?-nȣ}.@A.?-Ch@7@?- G@t|?,쩶I@ 9?,J5q@ c?,ɵ@-?,jmo@)k`KD?,?,&w@3?,L@=2?+m@H$?P?+ @Ran?+`@\?+fP@fU[?+::@q?+2@{X_?*b@N >?*6d@~?* \ č@F?)F@I?)g@E^. ?)At@ׂ?)]gI@T?)2j@@=?)'@;?(ɩB@y}`?(b~@ 8?(E@?(e=@2]k?(@l|X@)oh?(1@3?'@=kH@׮R8?Q@M?р@R9?1B@D?@ . ?aU@ ;?M'? @H?*?M~@R}Ȧ?\j@\-2?77<@f̯?R|@q6lM?~IY@{t =?0M-@4? @L~?|@,H?WE:U@j?1em@,? @ˡT?Zz@#k? L@a ?@מ&_?wp@Ko?R" a@ ?, <@Wj?J+@*?5o@ ʒ?s@jB? LJ@N z?q*`@)?Kp5@3JaM?&n7q@> ?H@HDH?QX@R)X?@\Ʉ?5U\@fiͤ?j م@q; kd?E5{@{x?jO@IR?A{@o?qE@19?k@o(׻?Uᐔ@uz?cg"@h?>:@(\?@eR? P@ףHD?͓ >@?G@+]?xB@\'?\@?7^r@ gh?@N(?D @R?Ƹ!^@)G5t?+b@33?{L@> ?V1@HI&?0@R ? 3@\f? l@g?? /Ki@q?? S6@{}F&? tǚ@pb? O;fnp@"? )Dm@6%? #20@sm? ޗ,@e-? 9@0? V@,zx? mU@jE8? HgD@קa? "e@? P`0@#$C? ˊ@`? 9Ca@d? v@ ? g[[/@k? A'N=@WD ? @)S&? t<@3҃? 0@>#? XAt@HM2? @Rcu? `=2@\}? :j@g]=? !Sp@qDB? :1@{D? rT@@H? xꍘ@#+? ~oB@:ɔ? Y^3@xbgS? 3Юt@? Cc$@N?)@1A_?(@n5?A|@׬Ӫ?x;@"6?R|S@'?,R@eaX?hM@B?FI@ @?NW@A?]#@['M?q5>@) ?KP@3!?&1Q@>X?rY@HR`?bw@R?w9@\͠1c?Vo@g @z?j^v@qH?D҄@{o?Ft.4@?qz$@?.G@?_F?@|?A@"?c @?lR?=VC@5 ?s@sS?@ױ]?\@?(p@,^ب?E”h@ivh?\n@(?74)i@ >]?B@"s?g@`~D?}/s@)?@R4w@3۽?}[@>] ?WÕ@HVg?2u@RV? Ms@\=O?8=@g?b@qM}6b?@{!?x[xL@ȼq?S<@\m?- @CY,?U@?je@<@x?.@8?е@:|'?s!@xŃ?Nzz@׵?)>xs@[? WQ@0J?Vu@n?.@@;1?P@ Ϛ?o@'{&?I@e?$s@)r?bMy'@3Z1?'r1@>;?|@H[}?}w@R:#"Y?:#@H`6c?ï@R@?Ȧ1@\vޯ?s@g(;?~kf@qV?YN@{Vc?40@F?Ff@K?{@M6?zl@2Q?z"@u?zok@?U @C\?0eՎ.@́UU? I<@׾?,^J@'4wV?sJ@Hd?M@Rs?(ث@\a?@g!?ޠh@q[S?h\@{l?i].r@֓,?oMj@3h?J2@Qx?%Ӭ@sP?@?ߘ@ ?9:@HR?)@ͅr?k@Ò?Frx@2Z?!WUt@>?+ @LF?.$2S@͊? >0r@/.A?X?@?r\Ϡ@Co?򦌅\T@L?򄦾?@?bb@ N?@V@98W?:z@w?'G@).?*tb@3i/?E/N@>0n?_Hi@Hn ?uzq(@R:?S$@\M?1c@g&Ն?ʷ@qdsF?9@{-?@Z?}@lQ?6O@[ ?fQ@ߝ?Dl@L}\?"R@?2@Qd?޾@͏,g?a@K?E@ k?y@H 3??W,B@?5GE@Kn?db@ J?Wȝ@>V ?ϴ]"@|*?p]@)=V?Ap@3j?j,=g@>5 $?HT+@Hra?&}C9@RJ` ?<@\ꩭ?@@g+Gl?t@qi*?~@{.?}G K@iw?[p# @" ?9̲@_?tI@IQ?NH@?!a @8?<<@V)Z?d.@͓ ?n`@h?L@ f?*@L%? Al@H?2uK@q?[b;@ *1?룅 ɸ@C(s?끮j@|?_@)gU @3?*ܽ@>9?Tt@HwG?~<@R}?궧ˆ@\?ьr@g0'e?rZ>@qm?Q%74;@{gLj?/O @*? y5@&?@dFv?2>d@o5?T!@߆ ?!>h@&V?dKW@ZA?Bv @͘f=? ecO@ی?U@yL?C(@QE?Ĥ@`?JV8@̅#?wL?!@ %G?WBO@G?6@e//?p@)?R@@4j?d@>>D:?絲N@H{Q?a@R?uqH@\$9E?T@g4?4r"EL@qrd ?"G(@{Q?z@?ӂ;@+C?3k@hC\?]@?rܑ@#*?RD1;E@!t4?1@_c?7 I@͝?U͖@ڢ??nj@B?尷@U4?g~@~J?p@" ?Ot@ e?/zRӀ@LbU?+@#@?9ם@)ǡ?΍=@4Aa?>PQF@>B?mr@Ho?m^@R! l?MQ y@\V?-U@g9`? bv@qww?eQ@{?&t?@@y?Ȝ@/O?z@ma?k+u0@?JEIF@HZ?*dI@&_? @'@d/?[@͡e?ɤ(N@?k%?V*@ߴ?.@ZRq?h@0?Hk3@տ9?(\?h@4 ަ?!}9@>G~C?oO]@H_?P}H @R¾+?1@ @]]?Cq@g=j?Q3@q{*?5l_X@{=M?cC@ݗu?۱@4}55?x1@r~?YJ;w@?;$@\@?K@*?yl@h?ާS@ͦ<?߿hPm@܈?ߡf@!|&?߂38@_p#?cb:@ ?D0o@[?%w@ .?vs@U?M,1@;z?L--@)z:?ު{@4{?ދ@>La?l?:@HE?N*@R[H?/7E@]?fnd@gBP?@q:?@{k?ݳ- |@z(?ݕ#@9R?vRq@v?WU/@Z:3?8@?T@/u?Ԟ@m9>?@X@ͪ\?ܽp,@y?ܞR@&DJ?ϡ@c ?`n@Y+?B/D@U?#^N6v@ ?0V@Z8? 1@N`?x@)x?ۧ"@45?ۉ6@>Pk?jBU5.@HX?Kh~@R?,@] C? , @gG7?CR-@q??5@{wN?ڱ()@'?ڒNr/@=p?stE@{WZ?Tv@?5 @?@46e?U@q1%?6 S@ͯvz?ٺ\k@p?ٛ@*a?|vG@hU?]]z@{?>O@? L6n@ !5?FV3%@^S?mi@ul?Ô_K@) ?ؤ=@4S^?؅@>UT?g 40@H?H1@RДj?)X @]4v)? F @gKԿ?맸K@qt]u?7@{5?׭@D?׏WA@BS?pEAM@, ?QmM@?2`)@3g?&}q@8ӱ?@vsN? V@ʹ?ַ4bE@6#?֘\%@/R?y@ln?Zc@.?;@2X?@ %Ңz? s@cr@9?CFa@?g0@)޲'?ա@4QE?Ղ@>Y?cA@H?D @R1JP?&F@]ѓ?=6@gPq1?a@q{(?ɅZ@{˱?Ԫ@ P?ԋͯ@F3?l0\@?N2@0~?/:@Ѕ>?^\@=p"?s.@{l?Ҧv@͸ I?ӳ[@PS?ӔN@3?v>@qU?W8@/?8]Q@@v?/@ *o`?ܱ@h]?FD?@?Ҽp@)OE8?ҞW@4 ?9i@>^?`^n@H.C?As@Rh?"m~\@]n?q"@gUON?@q?@{N6?ѧ<Ɨ@ Y?шa@ @Kr?i;@-?J@Ye?+ݯ@m? ?PT@B @? @p?B)E@ͽM'?аgq@ż?БA^@8H?rݼ@v,?S؇Y@J?4=<@lS?+E@ / 2?˓@l?$@B@L^?Ϻwg@)?Ϝ@4%?} d@>c+i?_g@H<)?@C@Rk?"@@] #u?@gYm?H@qK ?ƃ%@{ꨀ?Ψr@ ?Ή}+)p@P*?j@-?LvY@jw?-v~@ ?pRT@F^c?7@ÄI"?j*|@?ͳ(@n?͕d1@=).?vF@zʺ?X^e@ihy?9ے@ 9?X>H@ 3O? IF@qH?S\~@D?̿и(@)?̡N>@4*(r?̂ˏh@>gȼ?dI m@HhY?Eƕ @R?'D*@'@] A'?8@g^G??ut}@q(s?˽+sT@{ه2?˭: _@'c?ˎ9@Tǭ~?p6@gK>?Q}a@?32mZ@ 2?j@KFI?.t@È?׬@Ɔ?ʹ*0@&UT?ʚ#q@Aƞ?|'@fle.?i0D@Hw?Jo*@RN?,zp@]%D ? ]@gb?qw@qY?o@{$?Ȳh`@ā?ȓ@Ydd?u_z@h?V˄@Ԥ?8V;@DPqK?no@Ht?P{@RB3?1<@])?c@ggn?@q! ? y@{U?ŷ;@ aW?řN @^=?zr'@?[3@2@A$c?=x G@"?Ԛ/@T ?r$@Ò n?[@G-?l@ `?Ĥ颅Z@K.y?Ćf@숟9?g`@@?I`@߳?*J@ A? MI@?p@8?`e4@)_?ò3_@47?Ô]@>uig?u~y@H?'?Wq@Rޤ?9u@].~s?UU@gl2?( @qվ?:ހ@{^s~?@$=?¢@bZ?„wh@=?fK:tR@ݖI?Hw@}?)@Y}? @Ö ??@]d?n4@?CPE@OL,?0 !@z;M?\I@H$?eb@R{™?G7@]3`Y?) 9P@gp? 5w@q[G?쵰3@{0?Ί{@).?_T@g:̰?48@~?U'e@Hx?s)`@RL?T@]7~ ?6^@guX?K@qeW?za@{?O t@.8L?#P@kb?#@w"?̷W@Ѯ?cT@$om?Eu3L@bW -?'JKx@ßV? t$@ݖy?A܊@7>?Us@X?<@vy?rR@?rGj@`?T꫊@ OV\?5f@H?;@ʕ?@+@*6/g?qrA_@4E'?F@>uj?@Hr?Q,@RR2?bƳ @]?F%@HŲ%?@>@SRo?CY@]@ ?kdR+D@g~W0?Oif@q1?4I@{ђ?@7q;?@uy??1@Ç?| A@QaG?cl@-?2V@kH?t@é0R?Y@/?=#@$p͞?"@@bk]?ҫ@쟰?eG @PR? @h?=@ X9?[ۅ@/״?}"{@!@?bB@*o?F̒|@4O\?+h*@>K?@HOD ?0@S?!I@]E+W?e?@g.?G@q?rC@{nb?kn0 @<N!?PF#@y?4@N5m?'C@~?$@2?Ny,@p-x?{@í?u`@m?W@) P?tf0@f?Y/ J@M&?=Ö@p[?"W;t@?@c@ ],?@g?Lhc@l&?Ґ-"@* ܲ?X@4Szr?^ޒe@>L1?=d @Ha?u@S }?p@]J,I ?2Z@g?}{@qk?H@| ?t3~x@@k?So@~K`?1t@S ?D@?@@7+:k?*i@t+?|@òju?8Q/@ w?h@-]6?GE@kJ?%Ն@D?S|$@A?f@$*+?a@ aɍ?@j?~p @ ?\?Ge@*N?;~~V@4XI$?y_@>5?#@HӈӤ?W@S)0?A@]NȺ?#{N@gi{?rz@q;?Q2G@|??/H@EH?AӶ@'F?ɼ"@p?Q6.@(?cp@;ǬR?aK@yg?f>@÷?Eq@@1]?#O@2Gz?i@o? %@쭇b4?Rs@&? 9@(Ɲ?|_@ ff@?^^@?? @΋? 9 @*FlK?RR@4\ ?l'@>S?Å@H%V?g\@Sŏ?s@]Seآ?f;\@gvb?G^@qΥ?)G@| E]? j@Im?:[@D?TVw@$?n_@,E?r^@@d?o@~g?P@ûP?1E@DO?:Z@6? ;@t6[?%&@#?@KX|@?Z@-cf?xu;@ kY&?Y|X@?:[@C@r?@*#?ߩ'@4a'?c@>"}?)@@H ?/0@Sb?J֙@]XJ?be@g?C1@qB1?$9@|{`?"V@N?ք@!?7@k?(k@a+?#dgB@E?k>2@v?LYJ@A#6?-u\p@l?[@; ?<[@y!T?Ǽ@?J~@`? 8@2?t-@ ov?U8^G@@?6V,@^$?s@*(?wO@4f Ep?ٯ@@>/?@H_?v@S{?}@]\h;?^& @g???D崷@qO? b@|~F?@S6?=@Ԓ?ýrz@^rQ?۳@ ?x@IY?gW[@>)?H6M@@?)U*9@}ި? s[*@@(4?,AH@}?̰@^?]s @??@6J?p @ t=?Q+i@2K?2JOZ@| ?i)%@*-? 7@4jV?է@>]?@H?o@S#r?\@H꙼T?Un:@S(9Z?w&@]e?Y>'@gyA_?:f@q?(m)@|(?y@\Xk?lt@d*?j@ט?s @8Kv?q@Rؕ?d57@x2?F[?@Ё?' @  ? FPA@IW?껠8@U?0B@ė?a"@7{?S8@H6.:?#@S,w?|>@]jv?]@gF??* i@q? @|#U?@`?ֳ@?4@5?y%ZL@i)?\#s@Wu?ie@Pt?Jz@Ҵ4?,RJXQ@T? ȱK@M??"@⋔s??еRM@4?,+@Z?@DsJ?uX@ A?V*0@ߖ?8 3@S}V?@*:?s@4xd?r +@>3-?D@HK?b|@S1r?@]o39?bS?A@g?C˫Ek@qRn?%D"z@|'D?R@eV?51@2?ɭ@=O?&o@q?!@\$?n@Z?O@R ?1 w}@?W@RGf?B@1?t7@.?:@ pq?fIF,@I?yak@ ?[X5d@PI?<Ѷ:@ ?J@*?8? ?¶@Hpi?0XW@S6_?ϙ@]s?g#R(@gO?H(@qj?*y4@|,**? @j/s? xr@v?΃@o[?RJ3@#?w&f@`?r@N ?TjOD@}?5@Y?^6@W.e?@?SGK@nLd?5@ #?Gfd@M3?~%IW@ Mo?`@o/?Be\@ ?$2e=@*D-Vz?h@4:?7@>m=?ɚ"@H ۆ?gKl@S:%?4}me@]xL?o@g`?PM@q?2\Y#@|1,G?iL@n̑i?7)e@l/(?@ ?' :@'t? @eK3?}mPzq@Q?_:a@?A̡@+9??"e@[˂?-@k ?r(@ J??S@? 4I@RJ?Í@ "?mjd@͊?Owҿ@ **?1E@*Ht-?@4j?@@> ?ְ}`@I8?~ @S?I?M e@]|?|r!@g~C?]2f@q)??R@|5e?!<_@siO?U^@ L?#>S@?@,HZ?H2@i?w@o?l^$@( e?N-@"V?/t@`g?\@>=?Nh@ۧ?iN@Gy?8Yĺ@VH?@ a?z؁@'?\d@ HT?>zUZ]@*Mf? KQw@4/?W@>Ȧ_?j-@IFk?ž!@SC洪?W@]Rj?`h@g&?k2%y@q9?Mr@|:eu?. \@x!?+@?w{@FM?I3@0 ?u@nC?*@%X?yņN@+?[m2@'et?=a@ed?2\R@⢤#?F@D?~N@o?Ĩ`C@[5.?zMq@ $~?LD@z?jI= @ df?KW@*R?-rs@4?G@>C?fɟ@I ?9m@SH]? NU@]#p?ݣl@g ?xκ@rcWh?Zm@|?(??D@bH?ic`@,?J6b@i0?,8@A?]@k?b@"!?5$@`!R?@ ? /@a:-?x&̐@ ?Z%ON[@*V!x?<,>@4@8?3@>\?; >y@I?B__@SM DC?Iݖ@]?Q+$@g`+?X@rN?j`'@|C?Lg@??.oOX@NZ?v7@?~"@:5?Ԇa0@w1?'I@_?@?zٚ@0=?\@n>?>@? @~H?@''?@dp?/@ ^S?*M@?dU@ ?lQ8@*[=^?N$s@4?0Sf@>}z?@Ij?.@SQa?{@]\?4K@gIA?!lj@r ?}*h#r@|HSX?V2-@|[?_)@:?h@c?q[@5;v#?ozs@rۿ?Q$@{]n?37@?^@+D?E@iZz?ٯ@ ,?TdZ@?4!v@ ";Q?w72@*_ڱ?bkb@4zN?D5+@>]?'@#|@I6? ZO@SVY?ܪ@]h?ȷ@gљ(?K@r:?C9@|L٢s?t@†y@3?W@?9X@D@›'~?z@¥CYq ?޾Ó@¯?"@¹?elc@8?2@9ؓ?E>@wx1?i/×f@{!?KsKH@?-8@0Xbm?~8@m,?>*@ ?ԁ@7x?š@ &ׅ8? nm@*dw?{ME.@4l?])/E@>߷ C??{@IWS?"@SZ?]@]N?~(1@g6?~BS@rv?~)j}@|Qv&?~m2@Æ]?~o@Ð̵?~Q#@Û VE1?~4:v@åG?~~G@ï,}?}@yP@ù5u?}F@|OH?}]E@⹴?}d@U6?}F^"@4S?}(i@r?} @ 4?|s@Y^?|2w@ +t?|x @*i@?|bW@46?|w~o@>T'?|ZF@I!ŵ?|<(@S_A?|@]3?| D@gJ?{ p|@rsL?{Ɛ$s@|V2 ?{5@Ć{?{Y m@ĐSX?{n:m@ě?{PĚ@ĥL?{3 <@į2c?{Zv@Ĺ?z&@r?zڪ@C#n?z-g@؀l?z @R ?z4@TF?zd*@9?zG;ʛ~@w1?z)ul@ Q?z C*R*@qw?y@ 0?yJI@*m^\?yΎ`@4P?yRq@>E?yx^P@I&h?y[ZWן@Sd0'?y=\(@]ʳ?y bj@gphs?y慚@r?xj,@|ZO?xe}@ņO~?xs C@Ő7 ?x]@ś?xo{@ťQ/r?xR"@ůϼ?x4v@ŹoY?x&@ a?whz@GA!?wa@؅N?w@(l?w)g@,?w5@>/?wf$S@{έx?wH @ nK7?w+#|!@?w @c@ 42?vn@*rMB?vҖ@4?v.a@>퍷?vUә@I+.?vz 5F@Sh͞?v\"ɼ@]m*A?sq(@I/s?s1k @Smj?szn4@] ZL?s]+~~@g ?s?@r&JA?s"%@|cW?s@dž(?r +ϩ@ǐ)ƣ?rɝt{@Ǜdc?rǜ@ǥZi?r$a@ǯ K?rqI@ǹթ:?rSu@I2?r6@Pй?r Gn@؎E?q @(?q݉Cd@ U?q@GhQ?qw@=?q5@ ¨?qg@H$\?qJ-@ =?q-G@*{ ?qYP>K@4'g?p,@>?pg@I4g?pр@Sr.s?pQ@]w?p~w+i@gG?paJS@r*~?pD;@|h ?p&c@Ȇ&?p ;@ȐU?o@ț!f?oi0U@ȥ_?odd?mw@I9f?mtv@SvL%?mHTq@]C?m=@g3q?m/@r/0?mj.,G@|m#n?mM7@Ɇø|?m0lI@ɐcV=?h-S@S۾?h+"@]~%J?g9]C@g ?gܗ@r8`?g^@|v]U?gr"@ˆH?g~e15@ː񝑡?ga>xh@˛/=/`?gD @˥l ?g&﫬@˯}?g Sos@˹l?f@%R+?fy@c\?fR)e@ؠ9w?f+c'@ޜ?fxA@< ?fZ+;@Y۾?f= @|?f i@ ?f:FJ@Z?e{@ P[?e5e@**?eB;i@4˛te?ek[@? ;%?esJ@IFگ?eV@Szp?e9{@]0?eg@g?e=[R@r=Z~|?dg\ @|z;?dƑg@̆e?d{c@̐:?dX|@̛3M?dpÏ@̥qy?dS9@̯?d6du?cbLq@^x5?cl$J@y?cO@ ٸÀ?c2XHw@Xa@?c +@ T?b7@*H?bbv@47K?bAV@? /?bB@IKw͗?bN@SkW?bi C@]Ʒ?bL8g@hWR?b/cX@rA.?b@|9?a?` @4?_T @?t?_ 8Q@IPJ?_>@S ?_n@]Tҕ?_{Bݫ@hpU?_^tAq@rF?_AE@|4W?_%.K@Ά`?__FH@ΐs ?^돢+@Λ=ܬ?^@Υzzk?^w@ίS?^ u@ιa?^xQx1A@3w?^[ 3@q3I?^>)@خ?^!I5@s0N?^4@*?]D@gk?]uy@RZ?]H}@ S?]$Q@ ?]u @ ^2:e?]X8K@*$?];i@4r!?]@?p?]@IT]0?\#@SQ?\.G@]D{?\_w@h ?\@rK1+?\q@|ɇ?\TF(@φq?\8$?@ϑ?\Vu}@ϛAN?[u@ϥP?[rS@ϯ5?[s1@Ϲj?[@80)?[MQ@uϺ?[nA@سpu?[Q@4?[4I8@.?[m@lO?ZF=D @'@?Zޅ-R@ p?Z@%/?Zd@ bάK?Z W@*n?Zl!hG@4?ZP@?#?Z3Z]8@IYNz?Z9@S?Y!@]Ԏb.?Y`c@h-?YK}@rOIz?Y"!1 @|m9?Y@І ?Yl'@Б΅?YO}@ЛFMlD?Y3-䄺@Х?Y* @ЯS?X4)@й,P?Xݷ$@<:?X:Mj@zl؛?X59@ظ v[?X@&d@?Xk @3L]?XOG`@p3?X2ʾ(U@D?XN( @ +?Wќj@),>?WUg@ gk?WآF@* ?W\4@4⫱I?W@? KO ?Wkc{@I]똕?WN->B@S6T?W2j@]*?WE@h?Vr&V@rTj`?Vaa @| ?VzG:G@цϪ?V9m@ё J@k?V6@ћJ?Vk;k@ѥ'?VNMz@ѯ*qC?V2g[@Ѻ?V@Ai?U@ N?Uܚ@ؼ?U>-@I1?U@7{Y?U'K@u?UjN<@)b?UN'|h@ d?U1v @.h$?U"+ @ l?TP@*p?TdG@4H?TC@?$l?T @Ib {?TR{[@S(T?Thp@]?TKO\@hg?T/@]@rY?TM@|v?SݹQ@҆G^?S/vT@@ґ^?Sd`@қO?Sk@ҥ'Ei?S_@ү)?SfnH*@Һg,?SId@Fu?S- @΃h4?S]$@F?R^@O?R,@0@3?RG6c@ pY?R*o@*E"?R.cV@4@?Q~@?)n?QV7@Ig%(.?Q)@S?Qp(3@]ey?Q~@h 9?Qb"#@r]J?QEa@|D?Q(Fa@ӆ2D?Q O@ӑ{?PS8@ӛT$?PҤM@ӥ÷O?Pp@ӯd?PE @Ӻ ?P|@J'?P_a!@ΈC?PC8ZN@#?P&we@m2?P x'2@A# ?O+@~T~?O|C@b>?O"0@ ?O2Zc@7ى?Ox5K6@ uBwI?OZq 1@*?O<ɡ<@4^?O@?.!T?O^"˾@IkE?Nr9@Sa?N@]_?N=7@h$?N0@rbAh?Nl'@|7?NO/@Ԇ݁O?N1gBT@ԑ ?N>@ԛX7B?MV@ԥ`?MG?@ԯr?MH&@ԺN?Mȣ@O@Z ?M'f@Όࣙ?Mar~cB@ʀAY?MCjp@?M&b5@E(?MSbI@_d?Lp5S@?L@ ?L4T@;@ vZ?El@J?ES/ܟ@ BG?E;2@*U?E"O!@5}?E y@?@R?D&@I~5e?Dx>@Sծ?D x@]uL]?D@h7?DmN\@rt3?Du~@|Ti?D]~N@؆o(?DDblOx@ؑ-?D+1T]@؛k4Vt?D@إԠ?CWq@دt=?C᩸@غ$?Cs@a% ?CM@ΟS?C:@ W?C~@?CfC@X3G?CM@ӑb?C4KV@s/"?C9@ ?C*j@Nm?Bb@ R-?B01@*?Bx@5y?BA@@?E298?B'@I҂?Boz@Sr ?BVo˒@]j?B>4 @h;?B%qe H@ryQ?B N@|?A}@ن?Ai@ّ21*?A» @ٛot&?AeT,@٥q?Aa@ٯ[r?Ax @ٺ(2?A`t9@fP?AGYkt@Σ}?A.B~@~=?A"E@0?@R @\e?@3@pH?@Q@L?@Dli@ ?@vTJ@SP4 ?@i@ ?@h= @*Ώo?@P F@5 /+?@76??@^??E@h@O%??4 @r}B??fD@|a??@@چ.??pp@ڑ6HM??WL@ڛtn???-@ڥ/??&_n@گX?? ù@ں-N?>|@j?> @ΨRc?>' 3@-?>Y@#9?>6B@am;?>x,@ ?>_,@ܬ?>G"i@ MF?>.T@W?>d@ ?=Rn@*,R?=1@5+?=G@?Nlt?=P@I ]?=@Sɫ?=_@^K?=g)@hDh?=O«@r?=6MI@|+~?=+r@ۆs?=@ۑ;kf?I^@(jWb?<%|]|@f !?< f~@>?;v@Im?;$@ z-?;©66@\ù?;-l@ )ax?;Ś@*ɫ?;y7lڷ@5iH?;`@IE?85@S?8P@^A?8ւt@hN%?8\Va@rp?8i4@|eM?8Qh@݇W?88 Ɋ@ݑD?8 tC@ݛDX?8z|@ݥ?7 L@ݯz?7[@ݺ;$0?78Us@xa?7\~@ζc?7d@I;?7ul@1?7\@oD0?7D+AMW@F?7+%@l?77myS@ (#?65@eSQ?6? y@ b?6Ộ@*:?6FÐ@5]?6ʯp@?\C!?6N*@I⿨?6gҠn@Sׂ]h?6OVy@^"?66ڴ@hRD?6^̌)@rb@?6@|+?5g@އ ɿ?5G @ޑIBK?5oJ@ޛ ?5@ޥāN?5x7@ް!V?5rc,@޺?6?5Z @}a?5B&t@λa?5)p@!?5 ˨@6A?4@sm?4~@?4Ǜ'@ ?4 B(@ ,'x?4 @j`q?4~)Y@ ?4eF@*埬?4M3@5#??44"@?`ߓ?4<2@I[?4o$X@S{?3FP@^?39c@hW_bf?3P*@r&?3%@|ҟI?3Z(@߇>q?3p4@ߑMޅ1?3XdJ @ߛ~ν?3?fC@ߥl}?3'nq(@߰ |Q @Il?/FE @SY ?/-\@^"T??/@h`?.;G@r8?.u[@|K?.M@@xw ?.%ս@W?..@ᛔ^V?.ջ1@W?.lk@E?.TO@Ma?.<^VZ@ċ8,?.$6D@ʭ?. }:@whl?-^@D?-ۿ1@큷O?-×X@Vx?-oP@7?-TnT@ :?-{lr I@x7O?-c|K@ ּ?-Kh-@*vY?-3@51[?-Һh@?nA?-@IV?,6@S(f?,u.@^'%?,-@he6?,F j@rխq?,^d#@|uK1?,tv/@?,\-=@[2|?,DZ@⛙U|?,,d@?,؛}M@?+'@R5?+ 2@ďԞ?+"V)h@t_?+:n@ ?+S6L@H#?+l]A@Tmk?+m:@ *?+UA@T?+=6@ ?3v?+%χ9@|Ӑ5?+ g@ s?*O'@*w?*@6@55A?*3:@?sS^?*L;@I?*eF{@SF?*~~X^@^,2?*ftP\@hiҁ?*N@rr$?*6@@|h?*q@"o?*5~@`RP/?)|FV@㛝?).+@ے7{?)H @1:?)a@Vr?)z;@Ĕq?)wX#@ZE?)_@?)GR&@MQA?)/|6@Q?)oO@ȑ(?) @0Ɯ?(A&@ C(?(ƽ@p?(\ ԙ@ K?([@*4?(v @5:P2?(d,@?wг?(ze@I??(h}@S/?(U5@^0?(C9,@hnoJ?(0Z@r= ?(To@|鯆?( @'O$U?'o@dm?'7e@䛢 ?'Ԋ͓@.a?'i2@?' @[n?'3i8@ę.l?'a/@֮w?'xOQ.@N?'e@Q_D?'Sj@폍?'@Vi@-?'.#Xf@ O?''@ Hm?' B2@ ˛?&/<@ íiZ?&佑@+M?&K|@5>P?&m@?|e?&gdo@I,%?&b8@Sձ?&d @^5lsq?&vnzL@hs ?&c} @rZ?&Q-@|K|?&>@+B?&,IL@i?&0@囧,)T?&f%B@?%Y_@"kd?%ₔ@` _?%c@ĝL?%@K?%-e}@3j?%F@V*?%J#@+?%snE@ʸu?%af@jV5?%Kʼ@ M ?%*U@=?%9@ J ?$-4@+$?$Ś,=^@5CŒ?$ef@?* ?$r@Iɩ?$`@Sid?$?KZ 2@^: #?$ƅ@hw.?#$?-@rIxo?#ڐÔ5@|/?#V\b@0?#is@n(z?#u֠ @曫ț:?#TCY@h?#2_@'?#g@d E?"g@ĢHi?"|@?"c@Q?"е4@['?"i=ǭ@nj?"GV@g(?"&@s?"Ij@ Q?!@G[3?!_-@ ?!>CB@+ B?!~:(@5H&??!\ #@?}?!;@IfNJ?!5@TeJ? +@^>? ^~Uw@h|FL? 6@rU? 9 @|3? q @5%ѡ? P@ro`? .,@盰e? J@V?_`0@+8?͡@iE=?;@Ħ۷? ;@%C?e!9@"$?CeB@_ ?!o@dO?c@H?#{@?q3@ VD/Z?@?|6/u@ ф?[m@+#e?:,@5L?]@?c?v/i@I9p?!@T?c@^CC ?@hjH?wIcH@r?V%`@|"?6Է@9S?qD@wb?VN0@蛵*?7*@t_? I@0B?^@m[?r_@īj?Qqq@!)?1&F@&?!8@da~u?L@?O@ߡe?K@A?*@ ZM ?myo@@?Lц@ !4X?,@J2@+? 2@5Q`o?Yzt@?c?jM@I̠W#?Η@T ??2JF@^G>o?h%@h.?Gҁ-@r %?']@}z? @>_a:?%|@{?ʼnw%N@雹H?>@??Q@4/?c[@r~͐?Cg@İ?"~@?b@+^R?F@h(?LT@9?/@>s?sI@!!3?^r@ _}??&S@?+ͷ@ ڽ>?BȖ@+]?YS@5U?q0@?+J?\5@I=t?@T?_@^L|U??[)@h?@rǼ?B@}\-?b@B~?,XPt@ꑀ?C@꛾?AJS@ dܥ?!c @ze?{<Ή@ Z?ᓁK@+a?[@5Z=?1&;@?:H?ܜl@I?a@Tz0H?B @^Q?"&"@hk?>@rYS?Wc@} S?pGa@G?e@둅9:^?y@?bu7@y!?BW+%@>j?"F@{??i@ĹX?GN@Du?7Zu@4?Px=d@r8+?i@uM?cU@x ?C@+?#i|e@ hX?:@W?@ 5?>@+!c?jp@5_7#?чq@?f?d@L6?o@쑉X?f(MHp@u?FU&9@?& +@B? @캀Uz?@Ľh?@b'?6ߴ@94?c3@vIs?g^@t3?GQ@0?'ڴ@/~?+(@ mTl>?E@?rH@ S?d@+&3I?Ύ@5c:?hpu@?sؕ?I) F@I"!?)VS@T? ]I@^ZS]? T@h,? @rՓD? &@}3x? ;/8@P,7? jiO@푎r? J|q@? *@ C? )@GRO? !@? O@’6N? ~ n@2? I*w@=? kږ[`@{qY? L^@? ,7R@? e@4Q1? +!@ q? ̞t@'? ͆@ 1q?[@={?nz @ {+?#@c?iآ@ k?FQ,@@+4 ?$)@5q!?%@?J?J"@Il?oW>1@T*m,?;P@ ?SAHD@Ƣa?0ҽjJ@!A ? I9R@+AK?j@5l?򆴀@?!3+?:!@I?F@T8aw?_u@^v7?<@h?(@r@?3O@}.=B?>@l?IQ@ $?T[@n?j_~@%` ?GkN@b?$v`L@󺠟%?@??ލj@.?}@Yx0?@?u@Կ_|?R@^;?/G@O? '@ ?ڨ5<@>G?@!?f@+F~i?`~@5R?]O`@?P?;W@I]?@T<]?!(P@^z?#f[@h=s?,=@rݽ5?68@}3}Z?i?@q?FI@B@?#Rw@\?\'j@))?e٥@gL?o}v5@0?H]O@)?{D@gV%|?XL.@@;?5ca=@ ?ׅ%@ 5?ͷĖ@]HF?@@ u?A@/?톰6@!R?c@+TU?@v;@5?@?ϔ)?F@J 4?ׁ$/@TJ9?wϭ8@^t5?n:@h ?neK~@sj?K\f;@}AT@?(R3@~?I@?@F@3K?70@7+ ?/@ust?y&%@V?VV5@[?3T@.R? ޚ*@kb?8@㩒?P@2~? \@$9?鐇j@bre?`D@ ?>8 m@ݲME?~`}@!Q?@+X4? @5P?Oo(@?1p?鐕:@Jѹ?m@TOqW[?K y}@^?(fB@hʱ>?@sPf?p_@}E%?9 @ò?3l@0ar?zi 9@Ъ?X S@?ޭ~@@gp?ދu/@?il@ XI?Gd *y@JF ?%[.@?R_\@ņT?I;@&{?ݿ@N[@@Ġ?ݝ8:|@~fb`?{/<@?Y'z@I?7&t@7Ek?O@t0?7]@ η?РU@%lv?ܮG?@!-Ŷ?܋`f@+keS?iz{@5?G;,@?; ?$ڊ@J$D?^=@Ta"Y?/Ă@^?۽t@h$]?ۛ}hy@sħd?y$gH@}XdE$?Vuz&@?4ra@Ӥ,p?@C/?쟠@N?h-<@{?ګ|@#O:?ڈ8@Ø?f^A0@Ec6?D+)@ك?!;U@?TD@B?k@;?ٺ&@y?٘Ku@ "i?u@Š)?Se0x@!2b'?1CE@+pqt?0ϫ@54?+s@?A?;3:(@J(?اEq@Tf??؅g@^!?c3ދ@h{?@0X@saJ?@}]b?,n.@?Ҷ[@AJ"?׷}AS1@?ו%R@S?rJu{@ -?Pvz@l?.@ ` ? 8m@JT9?pL@ه?«@@;?֤š^@D?ւku@@w?`u@~?=:@ ^O?hm@_?I-@!6E?־-@+t[?մhNh@5?,?ՒQ@?ʦ?oŷm@J-2?Mi@Tk?+Ѩ@^O?tl@h^=?k"C@s#6?G2@}aԽ?ԡd@>I?lx@ݼ?]2@~?:ÚFK@XT?ow@A?ܳ@]?#@(_?ӱqz@Nq?ӏj@ٌ=?l#"@ܭk?Jt@|?( @E?̘܅@2v?xI@ \|?$};@?ҞЄ#@!;cN?||5@+y< ?Z(Q?@5۞?7W@?{Y? a@J2?-i<@ToϤ?ټL@^[md?Ѯ @h $?ь2[@s(T?i ~@}f:o?GH@ڐ/?%8-@zٻ?5@w{?!~@\?о>>y@Z^?Л _@?yqR@F?WDȥ@S9?4;@ِ-^?@y?KȎ%@ h?k@Ii?ϫ h@YP(?ωRǢ@ ?fC@7t?D@!@84?"WS@+}?YU@5x?ݰD@?Z??λ]V@J6?Ι @TtXA?v@^?Tc1/@h(?2 v@s-7Ɩ?3@}j"?i)@w?e]@K?ͨSG@#-?͆pMZ@aW2?dV@|y?Aim@ܗ8?wa@6?$@W?@ٕvD?̸B`j@?̖,@?sa@NV$O?Qn5@m?/4@ ɖ ? w@6U'?g@!D?=^h@+u?˥g@52?˃&B"@?w?aF@J;U?>@Tx_=?m@^?Pq@h5F?8@s1H?ʵiD@}ot?ʓZ@˔?qu@iT?N4N@(T?,ev @eP? )@_?%j@47?pu@ի?ɣ@\ssj?ɀ͌ @ٚ?^|H~@׳Z?<*6@SB?hz@RB?"9@?8@ 3)M?ȲL@ ?Ȑ8H&@!Is?nR$@+X?La @5IJL?)L@@R?n@J?3d?!=@T}#?WJ@^2?Ǡb@hѸo?~=D@s6r?[7@}t?9@=z?Zu@Q?LU@,$?WT@jnR?ưvi@1 ?Ǝ+9A@Щ?kߣ@#p]?I@a?'H@ٞ.?.G@Pxh?ʌ/@(?fv0@W_?Ş,@/t?{I@ ϛ3?YŠ@o?79@!N?6@+ ?@5Oi?X}-@@?Į $@JDQ?ċĭ@T.?iww@^Ό?G-/@hn"?$v@s;s?Ӓ@}xm?M-@N[-?þT@?Û4}@1Bx?ym@o-8?W#<@)?4y@mDŽ?@( eC?DP@e?"@٣ML?«@O?‰e_)@3?g@\,њ?DE@&?"R@ l?;Z(@ V?n#@!R2?@+L=?W@5}?w g@@ %=?T?@JI+?2tn@T ?(@^kH?gxy@i ?ˑ@s??Fm@}}K/S?mI@x?d,@?BdZL@6*_? (@s?㱙@j?ۂ5@ 6?7@,?b@jJ ?tJ@٧jB?RV@?0 ?@#*Q? L@`M?v@i ?+[H@ ֘?ਹ@tX?4@!WI?bKo~ @+[?@R@5҈c?h}@@)B?k@JM?!L@Th~o?A@^?-y@ie?rB @sDHF?O @}M?-n@? d\'1@(4R?TI@:?[@xgo?pp@]?<)@W?_ @1G?=1@n>h?_A@٬(?@'%?H@'s?i֚@eg ?8Fh@?o@ H?Md(@F ?+5~P@![/?N=(@+͊?$@5&?&l\@@Ŵ?/ @JReb?qQ]@T!?]~@^ͥ9?:Jw@i Em?c!.@sH!,? 5@}j?Ӯ$%@%x?T|w@Ħ8?@?d?lg@}?JGF:@+C?'{6@Dt?@5?: i@s\?di@ٱ#?@Q@×?|-E (@,c&?Yƺ@j~?7zWq@r? @ Cf1?ǟE@"?nW@!`M}?Yk@+"?MO+@}!ܟ?xX~:@&+?V @a?4B@Da?Y@6?S@AH?9FOb@ᒂ?3@:0A?g@x ?f0 M@ٵ?C׽W@`L?!} F@1S ?'J@n?! @@:X?lq@ ?GA@@'!?n'@!ec?I@+?$j@5_?/&\@@;?SLI@J[?{Q@T?+?*@^uF?i(C@i?C\"@sR?`P@}Q?:&y@^?ә@ ?6Q&@H]?@>?cog@f?> cI@~h?1@?M?F @|?X@ٺ]s?2>@?@5p?] @s=~?8W3W=@ X ?d@ |?푧(@ ,?V?.@ !i?U)@ +\z?}i@ 5a?X<ߩ@ @"b!?2˾@ J`W?!@ |wI?w@ ?ݒ/@ 1/?Cz@ 5V?o(@ !rl?jm@ +:?Nuth@ 56S?2ۇd@ @+?A"@ Jiv;F?ʼ@ T? T@ ^"?t6MV@ i"UQ?|DX@ s_^?@j@ }?q$@ 5E\?V v@ Վ?:s\k@ Vu,?o@s@ g?@S@ ѵ?}ǿ@ T?9@ LOs?tۧ@ ϊ?`ݷ@ 46?yB1@ ԀJ?]?@ Ct ?BY@ ?&vt-@ V? S@ S?C⨨@ 9?̃@ !wa?4]@ +3(!?pg@ 5q?p@x@ @0sl?Q"\@ Jn,?2f`@ T?/@ ^Rw?>CM@ i&?}@ sd{?O @ }2?F1@ c?z<@ r?[|8Ky@ [JZ?<+*@ ?e@ Q?;H@ f?{eM@ Qm%?N/@ Ϗ1 ?CO @ Tq?;A@ p1?e{M@ H;?Fc#@ |?'Ap@ Pw^?˼3@ !|0?~h@ +E?<߃<@ 5o?o}H@ @5-?PG@ Jr?1: @ TPj?>]u@ ^*?ZI@ i+O?տY@ si/v?@ }75?Ab@ n?y'@ "?Zt@ _A?<@ O?Dy@ ?@ AL?ƫ@ V.?c@ ϓ(?HʳE@ nr$?꓅@ ?d <@ L?F Q@ M/?'M@?V@ 2?@C-|:?@!?@@+mc?L@5 E?n}K@@9?O2@JwL?0oB@TQ?X|@^?AL:#@i0,m?rM"@sm \?Y_@}lT?oB@ ?x@&g?Y6@dK?:g@w?BZ@ߋ??ʒ^@+^?K@Z?-Y@ϘkFJ?^̭Q@ ?MJ@-?bd@QJU?CoT@i?%%Ɠ@̊?V{@ *Pa?zyB@G ?Ⱥ@@!j7?B@+ l?B@6?lO/@@>I?M@J{Zw?.7@T?!z@^)A?@i4ɋO?J ͋@sri)?|;@}?u@Z?u@+H?W {^@hK?8Eh5@e?wx\@(3%?CW@!|?@_hq?M@ϝ0?A@ڨ?t@G|?`4@U?A$@?# @'$??@ n?rݗ@Lg ?Ʀ*)@!U_?ـSi@+Ǧ? @6F?j@S@@Bj?Ks̀@Jx*?,S@T&? Xm@^_u?)g@i9e5?B*@swF?uݣ@}?M@E@?sjW@/?U@n@mi?6E#@%?y4@P? @&d?@d8#?!@ϡ?I?vn@Ds?}}h@.?^V@ZZ??۲@$z?!%z@B:?N}:@ c?j@Q)?ķM1@!E?Ǚ@+D? K@6 㮑?hT8E@@GLP?Izs@J#?*!F@T3? չ@_b[?'@i>?\_o@s{?6@}C3?@?q@4=?S0.q@r">?4ez@$?2@bn?0@+ J?X*@h ?9e@ϦA?nʊ@U?{@!/?\l@_!x?>t2@`?D;@a_?y'@ ?K@Ul?#k@!@? @+?L{U@6C?f?@@L j?G@J?(@T`QN? !@_?VG@iB?̋|T@s?Z?m@}t?'@?p+[y@9[e?Q`l@v%?2,@_B?˥!2@p?*a@/)?6G:@m>Ǽ?lWF@Ϫe|?@~?yײ6@&L?[ q@c?)?d wC@@P?E2 @J]%u?')f@T5?_>K@_ ?`@iG~@#?I@4;?Ԁ'@qo?Ud@ϯ{.? B@ ?x$@*jz?Y[&@h[9?:<@Q?ɻ@?@ !:E?6@^?mau@!zt?ܛ}@+P?c^z@6[?c@@UY?DG@JC(?%~9I@TЙ?~@_9~?PR@iK3?"y@sye?YQġ@}?3gS@M>?l"@BX?M8@4?/5"@I?l4@8p ?Q҆@8ع?y `@vxWU?.@ϴ?H@>?v8@/W`?WQ@l%?8@ì?&`3@8 8?]q@ %ת?ܕ_1@cwH?{+@!C?C@+޷0?<5J@6V?as@@YN?B@J?#t@T6?J6@_֜Y?S-Qn@iPv:?Nj@s?W@}˶!e?H @ Vj?k3)b@F?LkF@p?-oa@5?ۢI@Ս?@=u+{?L-i@{u?@ϸ??@U\S?tR+@3?V-9,@q?7fQ@4^?%4@?g@ *tȪ?4@hfi?H%@!)?s@+TM?~@6 u?_W@@^5?A*-@J3?"bͭF@Tp?yE@_s ?.v@iUW? G@s?E@}S??~t@ ?i}c@K&c?Jl@2#?,)i@a? br9@rn?@BI.?ԣ@? @ϽR0y?G3@9?sF@8?T"@v1?5;@SD?,Q@q?e@ /:?ٟ=/@l?ô@!Q!?W@+?}K@6% '?^y@@c0??V@Js? @Tp3?2:@_+?l[@iYu~?ĦuF@sP>?/@}?4@?hTv@P/I?I@?*0@o? l@ T?=&a@Ff?wf_@ńO?@N,? 8/@?r&pb@=.?S`>@z7?4Z@np?D@?:i@ 3XC?G@qM?/@!??@+N?~m_>@6*-{ ?`:)@@gę?BX@JmbY?#VY@T ?Ȼ@_ I?m~S@i^Ld?:ãF@s0?0@}ٌΰ?@,lp?nf@T̵?Po> @lS?2@s&?|a7d=@}^I?|ǝV@ f?|v. @^E?|Vo@ ?|6o@F,?|a#9@ʠ?{LX@T,?{.~@Œ%?{@O?{x@ e7?{ycI%@K6?{Y'g@?{:1?@EB?{k@?z.@@ A?zfi@$M?z.@!?z4R@+d?z|P*@68(Y?z]èZ@@uq?z=j (@JD?zbN@Td?y8Į@_.?yޠ0@il#?yeI@s`@bcG?y@%@C?y! e@J?yuȜ@R?xN@@Y"?xE(@ŖϞ?x 'c@bm]?x@ ?xc|*@OT?xC8@Ai?x$M&@;?x=v@ٴ?wA}@ F!wt?w/@?wD@!a^?w|ƺ-0@+L?wZHID@6c?sي@@~~?s&t@J}=?su-@T?sr2@_7?sO8CS@iu]?s-L@sm?s 03@} ?r"y@.=U ?rŦ^@k?r* Ҡ@|?r @+?r^1S@$w?r;Z@b\w?r99@ş_7?q'y@ݛ?qA#q@b?bD&@"Jӎ?bC]@"U.%?a[z^K@"_Nm?aM@"in ?a+@"s ?a@"~E?aeCb@"EM?a?$;@"/?a?@"yP?`qg @"-?`+z@";̴?`樓@"yl[?`9@"ŷ ?``Z@"?`;.s@"2Lf?`Ϗi@"o!&?_1@"j?_D@",r?_g`@#(Q?_ @# fk?_[tZ@# }?_6/o@#! ?_@#,Kt?^륝@#6\?^`@#@\?^@#J*?^{c@#UC`?^V@#_Sj?^1M?@#i ~?^ $@#sΪk?] @#~ Jf+?]O @#I꯷?]:'B@#Mv?]vLA&@#)6?]Qa@#4?],m@#@i҂?])6g@#~ pA?\@#Ż?\@#IW?\\}@#6?\r@#t>?\Lԉyf@#(ܘ?\'z@#&$?\L@$-h?[ˠ@$ k p?[žu@$/?[@$!HH?[j˻@$,#{?[D6w@$6a0;?[2b@$@'?Z|K@$J?Zҍ@$UgF?Z<@$_X?Z|r@$i?Z`t7Ö@$sG:Q?Z:kf@$~?Zcn%@$N!?Y[!@$'k)?YR@$?YJU@$f?Y|B` @$E4?YV:}n@$?Y02z^@$F+?Y *4@$u??X"@$;?X =@$y&\?X@$K?Xr Hrb@$e ?XL:@%2?X%iy@% oV?Wv@%E?W{@%!f?WH@%,(a?W+e@%6f%M?Wg'@%@?WAϘ,@@%Je59?Wc@%U?V@c @%_\p?VϺ,d@%iDD?V$)@%sX?V-@%~?V]E^@%S$?O?V7j@%?V@%d&?Uo<@% [?UŊ7[o@%Ib?U+@%C?Uy} a@%If?USv@%?U-p>@%@#0?UiXX@%}q?Tcbq@%c?T]F@%?TVR@&6S|?ToN(@& tB ?TIA@&:?T#4N@&!T?S'@&,-""?SM@&6j?S gE@&@b _?S+P@&J?Sdzо@&U#?S> @&_aAk?SBր@&i,*?Rξs'@&s܁u?RFx@&~!v?RV@&W6?R5.@&`?RZ<@&?R4@& ?R՘@&N@?Qx@&?Ql[@&ɀg?Q`@& ?QvT=6@&DNd?QPHIX@&_$?Q*=@&?Q1E\@&o?P%Է@';?q/?Pc@' x?PT @'X{?Pl@'!:?PER[@',1??PO@'6o^݆?OJT@'@{F?O@j@'J?OZ@'U(>b?O4@'_eެ?Oa@'i~I?O;* @'s?O>y@'~1)?N@'\]?Nɇʞ[@'l?N|g@'ם4?N}r.@'=S?NWgx2M@'Rݝ?N1\2@'};??N R5@'?MG@' "?M=.@'I\J?M2¶@' ?Ms(c:@'Ĝ?MM$.@'г@(@?L9@(J;6?K9[@(U,ۀD?Km\@(_j{?K>F@(ig?K|t^@(sO?KV ^!@(~#Z?K/@ @(`?Kt@(Z?Jᩁ @(:?JT%@(q?J9c@(Wzf?JmH- @(X?JF}-@(ҹ?J@)@(Yq?Ib[}@(M?IH@(䋙{?IQ1@(9I?I2a@(c?I]|@)Dy?I67@) JT?I'e<@)?H\fe@)7 ?G ;@)E?Frػ@)wY?FP(j@)\-?FC@ @)?F|Ô@)Wd?FUPU@)#?F/*k@)RO?FaxE@)6o?EX7m@)7/?E$}@) v?E"@*Iz?Em3;@* :?EFMKO@*V?EgU@*"?D(@*,??Dњ遥@*6}5?D@*@(?Dt@*Jur?D\@*U6?D6@@*_s?D}@*iT(?C7)@*s?CR"xb@*~,t?Cl@*j4|4?Csg@*?CL;@*tc?C%#K@*#??BB@*`J?B@*S?B F@*J?B'i@*?BcA@*W3m?B<\K@* U?Bw@*sT?A@*?AǮ(`@+M<-?AV@+ R?Ay䗔@+w?AR;@+"8?A,D7U@+,D2^?A6!@+6Ҩ?@R.@+@rFD?@m@+J?@Ws@+U:-?@i@+_xQO?@B@+i?@܃Xg@+s󑲚??\@+~11PZ??Et@+nљ??0;U@+q7??LB@+e??YhYzR@+'??2|u@+eP?? ;>@+=?>D@+?>H%@+0A?>O@+[ЋH?>p7@+p)?>I.@+r?>"K+s@+T?=g@,RO?=l@, ?=?t@,͏_?=a]@," /3?=^`)@,,H|?=7UŤ@,6oj?='+@,@c??7 "@-K?7@-0ꮊ?7vu @-nLJ?7gLB@-*?7@"y@-3?7#@-'j}!?6@-e ?6ʤ %@-䢩?6z%@-J-?6|PK @-?6U&@.[x?6.E@. )8?6 U&@.$?5@."in?5V@.,R C?5m٢@.6U?5zJ3@.@H?5V'y@.K N?52y3a@.UH?5 7@._(x?4龟j@.iZ?4ś3@.th_?4xo@.~??4}VD@.|G1?4Y3|@.G?45NH@.炱?4g2M@.5=?3ʧ@.s'i?3ȩnӺ@.dz?3 @.gQH?3d<@.,?3\Bd@.i8?38 &@.FS?3Z@.t?2Ҹ@."?2˹E@/`&[^?2œ@/ Ƥ?2u@/fB?2_Sg@/"j?2;2 5@/,V)?2=c@/6Eǵ?1?@/@A?1ζ{@/K?1-_@/UM%L?1@/_ŖM?1bh@/ie4 ?1>FC@/t?1%4 @/~CX?0j@/D?0Wp@/?0J@/c?0L@/:$>#?0e~@/wć?0A]ጌ@/d%n?0?-[8@0?-5b@0Át?-@0!?,x@0>[?,7^|@0|`?,~@0C!?,xũn@0?,S -5@05A*m?,-S@0r,?,+y@0䰀e?+u E@0 x?+)@0+M8?+q2 U@1i_?+p@1 4?+K*+@1C?+%GJ@1""@?*]p@1,_߹?*|H@16WN?*P@1@?*ft@1K>?*hw @1UV_&?*Bah@1_%?*>\@1iўå?)fEL@1t? 1?)|T^@1~Lު?)@1~}?)^E @1j[@2:Һ?%07>@2py?$a@2>z?$͓n@2|W?$"7@2乺Q?$&@2Z??$\(@24?$6Z=@3r&\?$~@3 9?#|0@3 ?#X@3"+yh?#"n@3,iI'?#yT@36?#S?@3@Y0s?#-H;@3K!2?#6%@3U_?"N@3_8~?"Pv"@3i ?"e:@3tx?"p@3~V:?"J(#@3?"%}@3X!?!M@3ka?!ـ^1@3L !?!:@37?!$@3l?!hK@3w,?!BL#@3C+?!;w@3ڀux? ^@3W7? aW@3\? ԃe@39? L&@4w6C? _?X@4 ? 8p@4v? -"Q@4"0?J @4,mf?@46V?7Q@4@N%?x z@4K&?Q^@4Ud65q?*1@4_1?p@4iup?(M@4t|?_6@4~ZXTj@4Q5&?o{-@4ē?.\O@4tbS?XKp@4 ?`#@4GI?\{2@4څT*?6@40?ڶ@4Ω?"w8@4>46?wvv@5{ӵ?i@5 sS?uhR@5A?N@5"4;?(Ygy@5,rS?@56"L?Js@5@ ?zm@5K+3 ?aI@66??m@6@/ݾ?2ȝ@6K/{~?ʛY@6Umo ?@6_b?}my}@6i诬V?V|'@6t&OJ?0?C@6~c? @61a?と@6. ?{%*@6l?v@6Znl?oMӃ@6T,?HBi@6ծ?" @6N;w?L,@6P7?@6ڎ"?][@6-?M|@6 ?a1FF@6Gm?:1@7 E?u+@7 ­?n@7M,? @7"=ʙ?B<@7,{%?y 4@76,?SA@7@q?,լ@7K4l0?.@7Ur 6?V7@7_|?@7iL>G@8,*1?\@86ϗ?,~@8@imW?cOfx%@8K9 ?;@8UvT?O@8_Hb?`pH@8i;?18@8t/ٮ?n/@8~m)#:?wr@8?P" n@8h^?(`k@8&E?$y@8cF?4@8H? @8-P?а@8?dGz@8Z(?U@;^}?\@<.>?b@< ٽ?%ZOA@<]i?b"@<"TJ?uwg@<,Q ?M?r@<6@=yGj?F@==)?1@=z?n=@=Xu?Eh Q@=j4?ȥ@=3?)OJ@=q8Q?ˊ Ř@=ڮ@?\2@=x8?zKe @=*֋?Q3@=gtK?) @>W?"A@> [?S@> #?=@>"^7B? @>,?e =G@>6w*.?>!@>A?%$ @>KTz?|@>UV9?J@>_L?V@>j ?{@>tK64E?Tw@>~?-!Q d@>v?$7B@>P?'/T@>A?*4;6@>U?-K@>>[?j0qI@>?C3U@>85%?6R0@>uo3?:;"Z@>ڳu ?=@>?A@>.>?D@>lT?YH#@?/?2K)@? yI? OsE.@?%4 ?S3QB@?"b`?W1N@?,sU?ZY@?6?o^3b@?A?Hb9c@?KYS`?!f/_@?U?jY@?_ԓj?oP@?j3k?sU=@?tOQ?w,@?~r?^{@?v?7`@??@?FRt?^@?N?ֈ@?\?󛒚U@?1?tP!@??$_Y@@_0^?.$@@j&?De@@tTo?[G@@~ i?r{@@ϯ)?\yx@@ O?4y/@@Ju? @@04?ήon@@/y?@@? '@@An??mq۪@@?E+@@ڼ?CB}@@N?ZD@@7?rR(@@u!?@A.k"?}q@A ?Ub@A.nRn?-0@A"l .? z@A,?n@A6My?L@AA$u9?1@AKb?fI.̑@AU-\?>a[ @A_D?yeg@AjmC?'y@AtY ?ƪG_=@A~O?¶oD@AL?v2@Af?Nz@AO'?' ]u@A,M?% @A?=0H@Al52?Vd@AF ?os+@AЃp?_a0@AK>?7\@AW?j@A@BA(o?H)@B~\?B [@Cg?;+!@C {?4[@C7?_-@C"uG?7& @C,R? G@C6g?@CA.'?8&@CKkN^? œr@CUf?oe @C_5?Gv@Cj$i?҄@CtbFq)?.@C~溵?n@C݆Xt?n@C%4?~m@CX??Vz@Ce?.ՙ@C' ?A@C?>s@COEb?T"K@CЌ?㎾N@CʅI?f}@C%b?>@CE1"?){@Cd?3@Dn?`@D -?❢d@D?ѱԅ@FE?ڨ@FE~R?ڀj@F"-?WA@F,?.qگ@F6^]?H@FA;?@FKy?ٴKi@FU=i?ً2Dj@F_7(?bb@Fj2}?9ǝ@Ftpt?{g@F~h?1@F]?ؿ$@F(?ؖUEV@Ff ?m@FT@I)x?J@Jܲs?ʽ0_@JR?ʓa@JW?imA@J"?@fK^@J,1?͓@J73?4A@JANq}?ÜSh,@JK?ɚ͓@JUɱdg?pkU@J`Q&?F@JjD?:@Jtr?W6@J~01? $\X@Jн?Ƞq@J;pn}?v@Jy =?MAGK@JU?#Y@JO?Z@J1H?zK@Jo?Ǧũ@JЭ/x?}JJ@J ?S=E<@J(o_?*@Jf?4@JG+?@KN?ƭUl~@K.w?ƃ9@K\6?Z&Q@K".i?0v@K,γ?@K7nQA?a>@KAS ?ųʤ@KK8?Ŋ3G@KUMM?`;@K` ?7@KjI? oj=/@Kt-[X?Ɗ@K~ͤ?ĺB0@KmB?ĐL@K@ 0?g9@K})?=~؎@KLǯ?@K;?REQ$@K6?C@Kt,L?×%Mo@Kб̖F?m@Kl4?CQ@K- }?c @KjQ?S}@KK?8Q@L?\o@L#]?s@La+?H*@L"ˇ?t@L,k%h?&@L7 n?h@LAW ?,ڼ@LKJs?u?@LU?J}@L`? @LjN*K?Wr@Lty ? o@L~j?'@L `V?wq`@LD?M$@LJG?"mU@La?u@L!?>@L;)̭??Y@Lxjm?y#V@Lжi?OYҚw@L Q?% U@L1x?i@LoI9?uKo@L?)ArD@Mt?{H7p@M((?Q])]@Me[?'E.@M"h[?@M,C?Ү8?@M7?bb@MA\H*f?~f@MK&?SI@MU׈?)^]@M`'q?4t~@MjRM1?$@Mtg?N/@M~4}?RoI@M ?@M}f?XFF@Mл%?-;q@Mok?@M6F +?fg@Ms??!@Mv?Ѫ@N%6?Zu@N,/?0e!@Njey?7`z@N"A? @N,`?݄m@N7#D?s@NA`L?]sӷ@NK?3VX@NU$? ) @N`$?O@NjWdj?٢@Nt?lz\@N~ҤR/?`v<@NC?6JEp@NM㍮? T@N;?bl@N#t? @Nþ?L@NDc\F?cl@NƂ?9@iw@NпC?SeG@NBQ?P@N:*?\a@Nxȝ?|@N"f\?fd\@O¯?<83@O1bM? <ֻ@Ooh?ͤ@O"4?@O,Aҳ?7@O7'??i_(@OAe??3T@OK!W?.@OUK?L@O`a? ?%Z@Oj\? C@Ot&V?l\@O~@?B1{@O ?-C@ORa?[s@O ?ðMf@O?Ͽ@O `0l?o[G7~@OIy?E0=@OƆ?7@O?x? @O?ƱlE@O??!(?@O}O?r\,@O?H2f@P_!?\-@P5k[?r@Ps ?*@I:@P"?R?C @P,f?^Up@P7,~%?.'+@PAjײ?@PKuq?@PU^1?Db@P`"\?qB@Pj`|?A҇@Pt>D?ny@P~?6@P}?R@PW?1@Pf?T_ @P]_?%^:|@PN?¼@PM?ƌ4 @PƋ=5k?"u@P*?g̺@P|p?8P?@PDv?A@PX5?~@P\?A@Q??z @Q:A?KDfP@Qx<&?4s@Q"Č?s2rn@Q,|? &@Q71?K>@QAnI?^9e@QK[$?.ѱS@QU0?i#@Q`'Σ?g@Qje;/?\@Qtڵ?q1g@Q~z{?AɃH@Q:?a@Q[:?-@QZ?O@Q"E?*z}@Qk?T6@QR: ?%[ @QƏ٧Q?m/ @Qy?ƍ"@Q ?%/ @QH,\?g;@QYu?8W+F@Q?@R]4?5n@R?8?]@R|ؘ?xUs@R"x??Hyn@R,?;U@R75ɋ?Y#?yĔ@TA|?IKC2]@TK2@o??@TU/?M@T`5q{?ZK)@Tjsz?Ȧ@Ttc:?V]#@T~Q?%j?@T+J?ľZ@TiE?F@T11?zn@Tϑ?bf\@T"pmP?20q@T`?@TƝT?M@TP(?BF6@T;?o^@TV٧?>IN@T0#3?TLRh@T?ݯ[C@Up ? @UM??|gF"@UE?K$/@U"O?;@U--J?zSn@U7C ?:@UA/?3@UKβU?XRHE@UUn?'n@U`:?G@Ujw7`?Ƥc@UtN? C@U~?e]{@U0h8?4#@Un.?^@Uͣ?s#@UmC?Й@U' ?r-l @Udԏ?A@UƢMrO?%@U?DC@UY?>.@U[,Z?~k@U̕?N] @Ulަ?@V |e?ū\@VQ?mo@VLc?1a@V"p?[%@V- J?*t@V7H+?+@VA2H?$l@VKk?}*V@VV m?gRQ@V`>S?7-.@Vj|KU?S@Vt?n@V~<_?6ơ@V5*?t @Vr#?C9@Vjj?@@V _*?Ӓn@V+?D@ViJFu?KN@VƦ?PPd@V-?T@V")ˀ?W(+X@V_ ?r?@Vi? @V P?]cIm@W?,]@WVI7?lP@Wc?p@W"щ#?}"@W-(?j#@W7Lo?9}Z@WAh.?נ(@WK?1>@WVz?f@W`CH):?v@Wjr?F@`6@Wt?@@W~'E?:=U@W9?O@Wwg?`@W?Si@W|?"_ U@W0G?#@Wmd(?Q@Wƫ?py@W'Ks?_ˮ@W&3?/&`@Wdf?O@W?cn@Wߦn>?8HG@XF ?lH~@XZU?: h"@XJ? =ll@X"&W@Xt%.8?M.t_{@X?n=@X>e?pzQ@X|C?!@XQ?G@XD?VT+@X48N?${<@Xr?s@Xư$?8rd@XýZ?@X+d?_{Q@Xi?.T@X念Be?W~A@XC?a@@Y!)?A.@Y_s=?hRh@Y#?7G{+{@Y"®?@Y-bH?Ԍ+@Y7V?.k!@YA3?qzj@YKB}S?@sn@YV?i@Y`Ld?ݸ@Yj"^?[@Yt?zk@Ya?IZ@YCj?D`}@Y?wФ@YAn? @Y u?-a@Y9V?R='@Yw ?!tP2@Yƴ?'@Y` ?@Y0x?__sy@YmX?\6@Y@`?*`@Y?J@Z&Gc?B@Zd#?@Z.?e"0J@Z"_n?3X@Z-j.?Yq"@Z7Z?-\@ZA?Qz?u@ZK9?n,)@ZV8?<1@Z`Qօ? d@Zj ?v@Zt^?G@Z [?w9 @ZG?E4@Z>B?rey @Zތh?щ@Z~*'?@Z>?H8z>@Z{s?NQ^@Zƹ]3?ӏ:@ZL?~M@Z4~?~M@Zr=4>?~X @Z}?~W@Z}?~&9ē@[+I?}0@[h?}({@[\?}ki@["!?}a51@[-!?}/@[7_<%?|DO'6@[Ao,?|#@[K| ?|@[V?|jN@[`U7?|8@[j[?|Z m@[tۃ?{7<@[yC?{{rW@[L;?{s4@[`?{A=@[zN?{q@[G?zOu@[B?z~D@[ZY?z|M @[ƽ?zJў@[j?ziX@[9:1?y*_@[vQ?ym[@[y?yh'@[9?uj@+@\7W?u8%O?@\=&?u 0@\{wo?t,@\ c?t]@\"?to6\.@]4V?t= J@]qn?t #=@]0.?sg:c@]"6y?sLbB@]-*y?su1F@]7hva?sCR@]A?s[{@]K㵜?r9@]V!U?rg@]`^?rz @]j\?rHQ@]t5k?rx@]?q^x\@]UuRh?qDmW^@]'?q*z1@]д?qNY@]Ts?q@]Ku2?p @]?psL@]4\~?p@]>?pSnuN@]BtC?p!wd@]?o]3@]エ+?oDz@]S?o+Sh@^8f?oYE@^v!?o&i@^3M?n):@^"?nf>>_@^-/s5,?n0@^7m?n]t@^Ax?n+Ʊ-]@^KR7?mo@^V%W?m\=@^`c?m'L@^j2?B?mb1|@^t҈?m0eW3@^r&?lR@^ZN?lU?1@^ ?l Ƞ@^Q?lgi>a@^%?l5@^P?l@^10?kOg@^z1?k@^ q?kl$@^G?k:ȡ@^儰 @a ,?` d@a"?_BG@a-=Iw?_T@a7z7?_mrL@aA?_9>3@aK)g?_#@aV3B?^їU@a`qiN?^u*;@aj?^iSPP1@at쨊M?^51#9@a*H?^@agq?]=@a%?]̵I}@a(X?]dEȶ@a ?]0@a^h@0?\h@a?\Gt^/@a٨'|?\&W@aG|?ObV@dދ;?O7Y@d~?O 87ý@d%r?NzH@dbF?N@d^Y?Ncs@d?NbC@ @dR?N7-@eY=?N *s@e|?M :_@e})?MOY @e#c?Mz@e-O?Maϫt@e7]K5?M7"@eA?M \\@eL2?L#u@eVF<@?L@e`n?L'@ej|?Laja@etUK?L6@e< ?L R1@ez\@e3;?Ka/@ep_b?K6FS@e{?K Q@eF?J@e)9?J T@eg[-?JW<@e˹?J`@eE?J5b@e :?J %'#@f]P?I{{@fzP?ID@f8?IZ\@f#?I`@f-TZ[?I69s@f7?I @fAϚ?H @fL 9f?Ht@fVJ?H6@f`y?Hah U@fj)r?H6<@fur?H G1@fAY?GF@f~}?G( j@f ?G6ʠ@f8?Gbs@f7U?G7x O@fux}?G F@f?FYU@fd`?F d@f.X ?F:@fkK?FbAy@f婗k?F8 Z@f7+?F (K@f$з?EY@gbwnw?Enyt@g 6?Er@gݷU?EcPzr@g#V?E8GM@g-X=?E2v@g7?DL@gA6x?DM@gL?Dw@gVOv_?DcY@g`e?D9i@@gjʶG$?D0,@guU?CL'@gE.p?CN@g0?C0Pbs@g6?Cd&@gճ{?C:@gasb@h~ ?>kfc@hRV9?>uf@h?>s{ O@h7?>Iq)@hu1D?>[@hy?=@hq?=˨qB@h.`P?=ڽr@ik?=wU=@iQG?=MG@i[?=#z @i#$.?<%^5@i-b0̧?<@i7jf?<$@iAp?<{n%@iLQ?@kHҭ?2%l!@kN9?2; @k?2~RG'S@k)?2ThX@kȡD?2*f4U@kEh??20@kۃ?1֬H@k&O?1Õj@kHo?1pd@k; ?1X^@ly[?1/ j@l'?1$q@lǒ?0?P7@l#2g0f?0Z%@l-py?0t@l7?0]́@lAGa>?03ԝ@lL(?0 @lVf?/ c:@l`&I?/8l@ljƄ?/z3@luf͔?/b2=P@l]kT?/8N.@l ?/iJ@lFR?.%X@l_?.p@lS?.dj@l%׫?.fu@luk?.O?%QҔ@nې5?%@n~ӛ?%g/L@n qZ?%>f_@nI?%=8}@o^X?$e@o2?$h@o??$8V@o#@=ݱ?$l1@o-}'=?$CXc@o7}?$-@oA?#Uۀ@oL6H?#~7"@oVt]J?#M@o`?#q $@oj1T?#GN@ou-<?# P@oj?"HA@o|_?"q@o?"&`@o#?"vvrc@oa\;j?"Lk@o?"#oA@oܜ"?!>Z@oe@pu1?6R@poy?횝@p?7Q@pq?ca@p(Y]?s\@peY?K,g{@p?"@p9@h?@p(?Zm|!@p\y'?9@pۚt?$@p׸c3?WD@pX?.ֻ@pRJ?Sժ@q ?ݸ1@q81?bu-@q ϊ?@q#Ix?c@q-?;MT@q7ķT?Lj@qBW"?Gf@qL?;?}S@qV}m?|@q`7#-?pI0~@qj?Gw@qu6w x?@qt8?z@q? @qV?F@q,-C?|c!@qjv?T @q6?+yˁ@qղO?b@q#u?E@qa?!@q۞&?Ǜ@qU?`y"@q?7߽f@qWh2?Fe @r5?G75W@rO}?9}@rt=?Pz@r#N?byP@r-ԉ?6c"K@r7TrH? @rB?\ @rLDY?9d@rV3S?Ku@r`@?[܁@rjsޟ?0C@ru;|_?X9ށ@rx?ؠtI@rSc?@r6?/@r1J?Uw@ro2?)E@r2B?@rr?P*0b@r(m?pv@reM?z@rۣRU ?O)/@r?#q;@r@s}P7?:@s]?hl @s?c@y?洕 @y0?*5@y#n_F?L@y-?df@y7?8ZK@yB'>Q? V@yLd&?z+(@yV~o?`@y` \?g?@yk?^)@yu[]?3To@yg?e @y֝?B>w6@y=y?, r@yQs?0+do@y}`?Y9@y?.\h@y HJ?uc@yH\ ? w@yх?-:P@yÜV?o@yܴ?(@y||Ra?b:x@z!?ݭCj@z9?]R@z5[l?z݈@z#ru,?O]S@z-?#ݪ@z7;\w?]E@zB+ۦ?xj@zLi{C?^eJ@zV?u@z`+?J_9dp@zk"Z?߿@zu_Z?`T@z?>6@z:M?a@zڗf?p @zVz5%?Ecc@z?SŦ@zѺq?eSp@zY1?g@zL?g@zъ|?k@z9?g?6mh@|#|5?к}@|-NQ??D@|7t?y@|B55?NHbJ@|Lr\?" @ @|VU?Q @|`?֕1@|k+Xg?[u@|ui4?te@|??Ieh@|t??{@|"&?o@|_ľ?@|TJ?z$ @| ?o@|?D@@|V3U? lm@|ѓ1?_@|sz?=&@|a?ꖛT@|L ?k!@|R??$g@}l?,@}?֢@}C2?8@}#"w?鑿 n@}-rl?fE4c@}7 ?:w^@}B9SO?Q=@}LwQ?1h@}V?^W@}`Z?21~@}k01v?akΩ@}um?5|@}q]e? y:r@}%? @}&D?糆쇺@}dPq? ׊@}0?\ @}ߐɼ?1@}0g|?)@}Zб?*c@}јpN?殱:P@}?9&>@}6?W@}QO?,Hr@}q?Ϙ@~̏?[d@~ /X?@~GϢj?~za@~#o@*?S @~-?'@~8'u?*m@~B>N5?кS@~L{?KR@~V?y\@~`.J@?Nkx@~k4Γ?"#!@~urn1?d @~ L?3gm@~?㠭S-@~+M?u>؞@~h#?IKFj@~?`#M@~-;? `@~!ͅ.?ǂ>@~_m"?@~ѝ lz?p/D@~ڭ :?E5`;@~L?Ƣ@~U?W@~E?Z$i@,-?z @v?l X@LlP?@@# ]?/;@-ǫ?]@8K\?S-K@BB? $t@L?gw<;@V+3?< #e?ۧf ]@u{%?|, @H ?P@p?%WgO @4?ޤ@r'?΂j@-|?ڣA@gw?w\@+?LCv@h? H@ѦF?o* @?!@@!_?ٞ&@_&?s1@@?Gl=@fhj?]@)? @UO?ŊT&@#Eu?ؚ @-5?nKN(@8?CMު@BL%r?䆟@L@?{@U<@VeY?@a?ו)V@kBA?j?G@uD?>,@|?mv@#?ֶ@9$c?ּ?X`@kGA?-Eֲ@u?\+|@I?ր:@!8 ?ҫ@=?\@{aU?TZ,l@h?( 5@?@4@`?4@q?Ѧ@ѯ?{p<@ 8?Ps7@*r?$Q@h`?K@ZC?鈯@?Т h>@!??w&@^N?K=;@#}? c.@-ƚ?@8dY?ɡx(@BU_?Ϟ@|@LK?rvV@VОe?G~d@a?2?@kKа?`@u~np?\t@?Ιk@U?n.@B]{?C:LN@=?T@?ypA@>$S?t+@8?͕܍@v}_?jXd@Ѵ^?>!@G?ub@/]?8@l.i?̼ء@)?̑x@=?eޢ@%ܳu?96{@c|Q4? fA@#?z~@-޼8?˵b@8\ ?ˉKDȞ@BY?]3@L?1<@V<?@aۤ?w@kP{c?ʬn@u#?ʀ{2@˻)?T΍@ [sn?(ǘ8@F.?| W;@?e_'@:y?ɤN&@ږ9?x8<@=z?L!=*@{}? aT@ѸD?~@Zd?h@3?țȢ"@qL?o@9?C| @ه?@*y'?p>@hn?ǿZ@# ?ǓE @-YV3?g/Z)@8 ?;Z@B^=~?1c@L8>?`@Vx?ƶSpn@ax‰?Ɗ@kU`I?^ @u?2B+@XG?j@ T?o_@K.?ŮZb@7̠?łE{"Z@j`?V0@w?*ߊ@BQ?.K@7?:m@ѽW8?ĥx@ַ?yɄ8@8 C?M83@v6?!Qc@?y@vN?zh@/C ?Ýkx@l?q\@#V*Y?EMY@-s?>A7@8%?/@Bc5d?!4x@L?•w@Vu?iM@a4p?@z۵?1e+!@syt?#힞@?|>~@3`?P 1@qR?#r@#H ?@@-?V@8*3/W?Ԓ\@Bg?sǙ@Lrj?G@Vc?@a R"?@k^Q?Ôg@u9n?Lt@ّ-?k{8u@2 ??n@TѾy?bRK@q\9?U@?IL@ C?=@KQ?c1^@Lj*?7%P3v@ƐȐ? S@1? fν@AЯ?@pM?Ȋ@'?Z@4?.&@8P~s?)@u2?_d`<@#?*&C@-0~?}c@8.ϡ=?Q݌8@Blo?%D@L?U^\@V&I? @a%Oo?%!@kb ?tfp@uT?H#@.?N@Β?)@Yn,?l@y?@Ԯ?k|b@Na7??Ho@O?V@ǍH?{ @-B?ȧf@̈́?w%@Fm͎?bC@ kN?6Q@? P@MR?ݨ"@@Va?+b@a.n?8\$@kl(-?6@u? i@hy?z@%?N-@bk?"fP@H ?<@S?m@?#@Y'?qT@ǖ?E X]@gu?l1t@g?C9D@O]'?\f@F?@Dr?hlj,@2?@#fg=?#@-?̼ @8@?zh@ %?MŤ)@]ĬB?!J@Ǜd?6, @?w%@1M?Ox@TDz?q(hTA@?E@σX?ِ@ #?쳧,@JÝ?G@c0?jL]@#?hF@."?<"@8ACl;?w®@B~ ?rr@LS?|Z@V"G?F@a7?_nO.@kubؒ?3K @uvR?'a֔@?9\@.B]??Փ@k]?t,@D?VfL2@!?*v&@$h?R@ba?/P@Ǡg? @ݡ@?y3@AO?MƏb@X?!@6K?׷@ ?^@q?;kh@O`W?q͉@Y?DDV@#ʠ? @.@@b?fh&@8E"?@B'?lЛ@Lm?hJTR@V?<(F@a<_?y;#@kyJx?M@u?˜@?1?@2τ?_S@p?3]P@?;@[?%@)^?f@f;?Ehh@Ǥg?V@>#&?* @l?swX @]~ r?RXD@2?1Lhb@ؽ?zO9@]}?M%@S-=?!ێ@v?v0|@#=?ɫri@. ^?}٪@8J|?q{G@B?Ecd@Lż ?L@W\?4iG@@a@k?8@k~h+?J'@u<?h1 @Ow?OP@2-?9@p8w@?$OK@ǭ?@w?,@)K?a޻@f ?5ЛJ@W? tM@V?ݧW@?@]7h?~`d@b?YkE&@#wO?-Wt@.?D@8Sm?0@BV?2K@Lr?} ݉d@W x?P@aJ6Z?$g\@k?Iǜ@uvAP?̽;p@?Bh@@|?t[M@~U[?H@d?q@?_@75Kf?Ls @t&?9A^@Dzu2?l'nE@r?@@-n1?WR@kT?q@U}?C3@攟 ?$Ph@$4.@~$?LB@ǻK?&]@N` ?@6?vūl@tGV?J#@.?x.@.?i@-ma?Dwmr@k?٤@?mz@#MQm?A}]@.#?M@8a8?2Լ@B-D?e'7@L ?@1P@Wl?eN/z@aX O?8zL @k? ѻ`@uL? %@[?s/@N*?c@,s?\?ts@f?09a@k&?t@E ?҂B @q?Wi@K?<"@}?Sf66@;}?'BB@y+e ?^@?Q@kLT?Yf@2 ?u @o?Ez@J`?Hg3@#o?@.( ?O@8f*Vk?!F_@B*?X @Lj=?)\蜯@W v?;4@a\y6?ʘ@kI?6B@u`?kI@ ?@H$? *}@Q?IQ@p?h&jK@@(9/?@}?b"@h {?3E;@:?kd@6?ԃ8@tG?#@CF?up@#?Far@.-'*?U@8jt?&@Bg?@@L?౭@W#)?YRV@aaF?* @k4?@u܆~4?`?x@&?@We?l*R@f??=A6@? \@?ނu@NEJ?# (@?õs@Ʌo?PdtЉ@% V?!H${@DV?~,T@d?~G'@a?~6@?~cV@;Dy?~95x'@x9?~e@`?}6 1@##?}ȶi]@.1HD?}6/@8oc?}}V@B/?}X7s@LO?}2j@W(Ck?} 9.Rv@ae㴛?|轒@kRZ?|:@u"?|6@9?|w{@ע?|J@B\q?{@@R?{s@C?{C9ؤ@"I?{pĎ,@ +?{KEZ)@Ia?{%i@T?{Hl@ġ?zʀŷ@AM?zL$u@?_?z0N@}5?zjO>@!~?zDg+N@#j?zSHyx@.6`*?y9+@8t?yW6@Bv?yFG@L@?y[b-@W,?ycݐ@aj&?y>_Κ@k p ?y0@u ?xdu@#_?xr@`?xiZ4@?x6@?d?x]n|Z@z$?x7%2@W?xsޅ@ao?w<@Ҿ/?wy{r@_H?w`Kx@Mz?w|V@拞:?wW\_@>?w1o @k?w W@D~?v=`@R?v8^F@?v2Ϋ@#^:?vm-L.@.:?vE'@8xu?v"@B=(?u/@L\?u@W1}t?uÊ@aoD4?u} @k?uUQ@u]+?u-@'??uA@e?ty@?i1 @u3?im{q @5v?iEK@ssJ?i*@]?h읷@?h̽#?@,SE!?h=@i?h|^_aJ@?hT/sB@2-?h+݊@"g?hж@`rx?gۡNu@O8?gr@۱?gCP@R6?gc@VC?g:hL@r?g{@1?fꑫ>@$YN?ff@.Mq?f;ƨ@8@?fr@BȰZ?fI'J@MQ'?f!m@WCť?eވ@a1?ef/Ϯ@k0?e;@uJ?e6O@:p=?eX%@x1?e0} @ϼ?e;"@PH?dh@0?d=4@n?dӾ.@/S?dg 2@<?d?'i@'o?d2@e#^?cl6@梯l?cBv@O ?cu@j?cv.X@[?cNŠ'@.?c&&@-u?br@$nw?bI`v@.R?b g@8^M?b@BM ?b]Ͷ@M ?b5@WHX?b {@a-?aR<)@kʤ?a)@@vmhc?aM@? #?al#@|O?aDnCV@Lo?a3 @.?`^:@5Ժ?`5`s@s,rz?` G?@̼?`{"@lY?`SL@, ?`+X@iA?`l'@@K?_D @(]?_$@"?_@`+c?_b@˭h?_: 8R@kK(?_|"@$ ?^THm@.V2s?^,9=@8J3?^O@B?^q"@M?^I @WM*U>?^! ϖ@aʞ?]f(@kjdS?XVPP@|f?Xuh>@K?XO@^?X|*@5F2?XT{Ҵ@rЪ?X+p!;@氅ni?Xu@%?Wۖ @+U?WqK@ieA?WOPm@=?Wc/0P@?W;! @$"E$L?W @._ ?V2@8 ?V¯S'@B$X?V1@MG?VroϬ@WVd?VJP,@a.c?V"0b@kѣ#?Uq@vD?U|@Ln?U@?U/G@#?UYq@8y?U1t; o@Cc?U UJ'@?T5@iQ?TV@C?T!Y@9?Th@w\?T@H8@"?T@ը?S|k@0bsh?S^0f@n'?S?@Z?Sx!@As?SPn@$&3?S'P@.d߿?R@8!}~?Rקh@B ?R8@Mad?RkwL@W[?R_Ml@aL?R7/nq@k@?R @v3a?Q@Q!?Q@ n?Q'@l?Qn}@ `V,?QF|G@G?Q_`@=x?PAj@?7?P$3@$?P,*@>ƒ?P},<@|`C?PU̶,s@湿?P-.@_G?Pud@4?Ou{@r.?OY1@>̙?O?I@&?Oe$Ԁ@$+~?O= r @.iQ?O!=@81?N@B^8?NĻ@M!|?Nם@W_ @>9 ?H@{ؾs?G@y?G9f@?Gր@$4C~?Gh@.rX ?GA@8*?G3ܤ;@BtV?FSx@M+8?Frk@Whׯ?Fj@awa?Fy=@k ?FQп@v!4?F)SE@_W~l?F1@,?E/@ڗe?EOj@7w?Eo@3@U֡7?Eb&$@v?E:@?E!8@?D5S@LVo?D^ G@܉ ?D/!@ǖW?DsO0@5?DKp6@BՒ?D#8@u%?C=@y?CѤ0@q?C=@$9Ua0?C@.v?C\3@8H|?C4Tq@B4NA@N ?@@²??{X@R5W??;\u@$=~??ȥ@.{??uH0@81b??Myq@B??%9vƩ@M4q?>(u@Wr:?>Ը7@a?>xT_@kQ&?>8'@v*pE?>[]@h?>3O$@0?> xF@P?=8Q@!p?=@_ܜ?=M/@z\?=jyY@P?=B:@a?=(@Ug?<@ܓ0H?<{*@?<h?%@[?%/`@~O?%Wm@=?%aԱB@zf?%7m@]?% @r?$_*@3>?$ @q=Y?$I@ܮ?$fqq@}AI?$< @* ?$£@g(?#J]*@\U?#Z7@d?#<5@ ?#ke6@$^@ܸ3"?;#i@?TdT@3Vn?Ɲq@p.?7+@U?@6y?jOh@)=9?@K@$gu?}<@.$?x6@8D?T-_@C V ?>@M]?oE=@WGO?EwNm@a5?m@l.?۠@vTt[? ַ@?@9h@ϴ?tr.8@ T2?J@J? ע_t@8? >Z@4>?'? |@l$? :x@vbKy? @2? `)q@݋`? 6c)@+~? @XH=? @j? @ /? J@I? e+@OJk? ;݅@Ҍ괔?  8@ʊRT? 3Ol@*? m}@E9? @i_? j}g@ ? Aʺ@? W5@@WB?@ar?i͡~@l22?jJ@vp"&?@+K@p}? Π@b=?@)?>@f?@AH?mEn@?Crm@z?T#@]!T?5л@Қa? \I@`?Kl@I+?pX@S?FJ@@?)@7?gI@ k?,@J ?j@$SB?s!@._?IB@9:?<@C@M?B@M~?v ?gN^@W߿?3@a]X?u9}@l7?K@vtD?!D@^d?sx@+?̳!@-ɯ?kt@k?;?x#I@ް?M @~N?#ޙ@$G?J(n@a6?1@ҟ]?@R?zr؝@?P+@X>?%?G@ݢ]?p@}@?Sm@? `@N'h?|塥@$]p?R}yC?@.?(6!_2@9t?0:@CE<?ӧ@Mܓ?`,P@W|1?p@a{ ?Tm@l;?*W1@vy\bW?D{@?f@?@2;b?puIe@oۅ!?W)-H@{έ?,Z@lm?O@( -?VR0@f[S?7E3@ңx?@ᚏ8?Y@:?/='@\v?s@z?ڱ'@]?@?1+@SZE?Ug@$?(@.Κ,g?e@9 9&? I@CIg?@O@Myr?uvV@WO1?Hn@b?o@l@Y6}?2@v}=?P0@?;U@8?h.@6YH?;ӎ@tx?+@@?bԽ@︊ ?š1@-X'?嵲@jş?\7@Ҩ+?/?c1@7?v>@#J?ծ17@aw6?e@1?|If@ܷ{?OT@WA?"6@W?ā%@$?d@.6M?4\6@9?ole;@CNv?B<@M#X?ܷ@Wɶl?,@bV ?MTeY@lDT0?d @v?b>@5?5t@;? /v@;uv?h1/@y?ﯠc@^F?݆@T?VC@1E?)Kx@oQ?@ҭ4?Ͼ!@ʝ?a\@(th]?v0J@f?IjQ@O?ݶ@Sh?tM@6?r@\Դ?q@$3rs?sp @.ӻ?Io|n_@9sY?nvK@CSK?m0p@MA ?l@WR?k@b (V?wku@lI?MjcW@v3?#i@M@ҭa?i?`@rK!?hM@@?hd}@}2m?{h+@Q,?Qg@?'gB@6x?go@t2?g~|@ұў?gB@qq?|9@|L?Q9H@$}?%ߕ%`@.|?D@95?,cJ@Cs]o?ϣ@M ?xy@Q@WW?M &@b,_?m@v|?e@y?Οv9@"j?tbmq@`\a*?I @?mn@ۜHv?Xv2@;5?d=@V/?͛@Ȕ{́?pN?.@k@?D/C@?es@M[R?E@?V@ț9?̗@:ח?l;`f@C!#?@L(n@z?M@$o?-_a@./?˾ӆ@9:ZC?˓ymb@Cwz?h :@M+:?@Ÿ?@©9f(?ɶ\@´?ɋJ7i@¾[x?_Li@ș3?4SP@ָ? ?k@X?@k@Qp??Ȳ@ ?ȇ6DW|@8W?[ߔ@ J?0h@Hw ?-S^@ܖ?'v@$÷zU?Ǯ}@/W?ǃ% @9>a?W5@C|`?,u9]@M7H?j@W?ű`9@b5w08?ƪn@ls?t_\@vk?Si$@ÀVC?(gZ@Ë+S?&@Õi?Ѹ)@ß6:O?ŦaY @é?{ P@ô"v!?On˜@þ`Z?$\q@ȝ]?@U?ͮ=@De?ĢW}@V?w/@5+?K@p? T@u?ܢ:@M?N@N|?Ýv@$T?r28{@/5?F,@9CS?|#@C4?M@MӺ?YP@Wt_?˜nS@b:?l y@lw?AT,@vSj?*@Ā'*?9o1@ċ0p?@ĕn3u?H@ğҬ5?g{@ĩr?<Le@Ĵ'?y h@ľd ?OU@ȢRz?_@?X@b?bF@[1?6&w@Ic? -<@q#?ߡ@?M@Qo?([+@Ql.?\a@$?1qg@/ Sz?1!@9H0:?YZu@C:?͔H@Mp؅?A@XvE?WE@b>?,*^@l|P]??@v?y@ŀD? @ŋ5/?}Ec@ŕr,(?Rr@şo?&ڇ@ũs?[8@Ŵ+3?&@žiON?FZ@Ȧ?xJ@6>?M0S@".?!@_?M@@nJ?ʐʕ@?Wx@?su;f@VN@U?Gߝ@?J7@$ю'?𴖩@/.q-?.A@9L?OK@Cm?m^@M 8?B_kq@X?Q?f@bCM1?5I1@l{C?R @v? q;@ƀ-b?hvw|@Ƌ9N?<@ƕwl?M:@Ɵ ?帡@ƩZ?$}@ƴ0L?I@ƾml?bMΙ@ȫ e?7g3Q@,S? Ȝ&@&?>A@dkp?@ ?@߫v?]@KH?1M}@Z^?[̓@?M*@$+ES?3>@/?@9Qk,?X ʲ@C ^?,y5@M̪h?_@X J?R\@bGOj?k@l)?~,N@v*6?RBJ@ǁu?'K`@Nj>j?sd{V@Ǖ| ?O@ǟY?M@ǩI ?x&@Ǵ4@?M(-@ǾrX?!-@Ȱ)(?Թ@?q2q@+ic?h@i#?sLƃ@J?Gs@Hn?(j%b@!2.?=t@_{?Vt;@(z?}@$Ƿ9?h@/h?<5/@9V?b@C? O@MG?/@X#??3@bLm?[N辪@l' ?.^@vTh?n@ȁf'?~6@ȋC?@ȕs?z@ȟFw3?MsF@ȩ? \@ȴ9^~?\7@Ⱦw%>?t@ȴE?<@e?m ;@0I?@m:s@m?"t@Eh?2@!?C*@&O?T @d$?_e5@7,?2v"^@$d?@/r?ؙ4I(@9Z7?64@CDY?~蜧@M䣃?Q^@XAC?$@bQ#? @l(?;2@vcN?@Ɂ ?q%N;@ɋG?D7j @ɕCKY?I @ɟ?[F@ɪ2?n@ɴ>"e?A3@ɾ{?c @ȹb?6M@@$d?@/&>?xK3@9cK?Nl@C~\?%Y.@M3?#@X?f풴@bZ^h?*@l'?t[W@v՝U?Ul@ˁ=s?,<@ˋP=2? ~w@˕}?ّq4@˟$~?5z@˪ >?v@˴G] ?](3p@˾?3D@œ? 7x@۞@?%L@=?]P@{5*?%@t?Nq@$u?m+-@/4[\?Dv@9q?;i@CT?h @Mg?Ɣ @X*~'?X@bh4dz?rR@ler?I]@vt2?G8+@΁!L?tcG@΋^~?ˡZ@@ΕT4 ?@Ο?wB@Ϊo?N)W@δU3?$VI'@ξV? ?@r?бӓ@> ?p@K?} G@S%l?S:K@,?)h @`?ګV@B2w?úi@H7??L@r??@$/?XM .@/8B?.{@9vR?1@C?؀@MRM?1@X/1?5Qd@bl9?]cօ@lq%?3j"@v ? 6@@ρ%?ς@ϋcQ0?@ϕ?Mys@ϟސ|?b|hA@Ϫ0@G?8@?h+@PO?g@R?=_@ˏ?u@ /~?& @F]?3@oe?+@?l$#%@$M5?By@/=N?&@9z? b!@C@?.@M.p?/@X3 ?oE@bqnWL?E @l ?v@v>?@Ё*MW?Ɩc@Ћgz?Մ@Еã?s@П-ab?I'@Ъ ͪ?i@д^mH?T@о m?˲+@٭/?2@L͹?w2>@Tky?Ms@璌?#E@,R?Fr@ ̜P?ό@Kl:?`l@ ?{b;@Ƭ!\?Qz@%K?'t(@/A?nV @9g?hf@C+D&?bN@Mˍ?]U@X8k+r?UWϤ@bv t?+RY,@l?L@vJ}?G95@с. ?Bh;@ыl?==(>@ѕ*5?Y8$=@џ?/3@Ѫ%j?.&!@Ѵc f`?)@@Ѿ ?$p@I?@l?]J@Y+?3j@)ҷ? ߤO@pw? j)@i6? @P W?/Q@?`M,@HB?6@%? u@I@/Fz?%@9(?<@Ca?¹^@Mg?d@X=I%?:߁@bz?@lH0p?暼F@v0?@ҁ3k?-@ҋq'|?h}~H@ҕS;?>s@ҟf?j\H@Ҫ*:?`l@ҴgF?W @ҾG!?N,@濒?lDխ@ ]R?B;ܟ@^&?2NH@D?) @f)? v@+?-@Tɩ?p@F5?F(\@?z@% N?@/K%@?R@96?ۋ@Ce?ss@NK?I p@XA ? @bE?®@lW?˺Q@v?V3@Ӂ8$?wGw@Ӌu'b?Md@ӕdp?#@ӟ?a@Ӫ.m?ϋ`c@ӴlC?@Ӿ㓹?{|5@E?Qtj.@%#{?'mR@b?e7@cbP?^2@?WY@I?Ph1Z@YB[?U&e@?*特@ԂΧ?@%"lg?i:S@/O &?*Ǔ@9bS?@Cr?WN@N:?-n@XFAؽ?07@bv}?' @l ?4@v!]?t@ԁ4$@Դp?~Gs@Ծk?~\o@ O+?~2j@)?~F݇@g`6w?} T@6?}ŧ@?}F6@ ??}_PS@]?}5`@?} =@@?| '@%?|[\@/T_'?|d@9qe?|a@Cϟ$?|7@N >?| h!@XJp?{+N @b~0?{˚@l1?{@w{{?{dui@ՁA^;?{:8?@Ջ~b?{q0@Օ?z(@՟=F?z1@ժ7?zG7@մu}?zg H@վ?z@ց?qS@v?q)BJH@.h?p,@kY?pԢ<@VP?p+\(@?pzs@%$7d?pUn@ًq?j@ٕ˄?j\@٠ iD?j25p @٪JQ?j@ٴP?iL?@پŐO?iG˸@0?id @@՛?i]J@~ps[?i3{@?i _@Z?hޓ@7Of?hѡ@tA?h@߲?h_4@0)>?h4vQe@%-?h Hy@/kod?gҠ@9I?g\ʹ@CL?g@N$O?g`qc @Xa3T?g5ʲ@b?g D@l/?fm@wθ_?fmI@ځXnV?f&@ڋ?fal%@ڕӮ=k?f7;{=@ڠN?f ƛ(@ڪN$?eQ@ڴv?eܣG@ھ. ?eg'@ͩ?eb7@EmN?e8~3@݃ ?e @.?d@MxY?d l@;?dw@y?dd7j@,d?d9K~@̛$?dO@%2l?cR@/p o?cfϳM@9 /?c)@CLi?ce~>i@N({?c; @XfQ?c*c]@b+?b#ps@lˌ?bW@wk?b<0W@ہ] s?bfȮB@ۋ?bY5(@oJ?`w@i?_l@%7 V?_10@/t"?_ΨE@9I=?_el5ek@Cۡ?_: _@N-%-?_Z@Xk(?^EK@b y?^ O@lh8?^ @w$G?^a U[@܁a?^5@܋H/D?^ [Y?Xr @΃?XG@ $%?X(b\@Id?W-n@ca#?WĊ9@?W@Ho?Wk և@%@C?W>P@/}/?W+J@9z?VZ@C#?V9@N6´?VX$@XtbR?V^X@b?V1@l9?V c'@w-B]?Uc@ށj!?U[q@ދ?U~1@ޕ"i?UR+a@ޠ#(?U%nSv.@ުaa?TU@޴t?Tnm@޾ܡ+3?T7*@At?Trz!@W?TE+@ݕ??Tv@ ?SE @?S@N`?S6nd@~?Sfer@ɠ?S9SJ@@f"?S s@%D?R|l@/Mm?R|@9-?Rc@C?RY e@N;_y?R,~@Xxp8?R0H@b ?QtF@l?W?Q"kt@w1C?Qy+@߁o>?QMBJ+<@ߋ܏?Q ƀ@ߕzO?P@ߠ(^?P@ߪea?PU@ߴ&?Pmr@߾>H?P@ߘ@?P$G@\~02?Oi4@ݚ?OG9@׽k?On@]=?Oa:6@RR?O4p@?O6qH@=:H?Nx@ ?Ng@%I}!?N@/S?NVI@9Ľ?N)F@D\?M%@N?D_?MЮ%@X}?M8.@b<+?Mwm @lu6?MKJռ8@w6|?MUr4@t?L]D@B?LJO@[?LqJVV@,5?Ll@jM?L@ڃ@ന; ?L<@f?Ki@#{X?K#l@a?KS$@ݞ?Kb7@Zc?K5=@?K Ld%@Wp?JPI@:o?Ja@W?J-@y?JWv@%Nz?J+0^@/?I@9Yz?Iא@DR?IH@NDb?Iy-@X8?IL^@bI]?I Dc~"@lx?H[@w;0?H[9}}@xh?H@ዶXl(?HnrbX@?HAȅ@1Ss?Hپ%@o73?Gn@ᴬ:?G@w?G-aJ@(" ?Gc@e?G7Ed@ݣW]?G $@?F^t0@D?Fܶ7@\7b?FwU5@,!?FY@v?F,-r@m?F n@%R-?EӮo@/VN?E<@9x?Ezʪ@D 68?ENXB@NI6?E!6@X?Duq4@buC?D@m?Do@w??Dp!A,@}U?DC@⋺?D>@'?C͛b@65q&?C\@s?CI@ⴱt?Cez|@1?C9 @,?C @jT}?B(mb@ݧ{=?B#@?BGWL@#4b?BZ.@`H?B.f&@tI?BFn@?AՆO@S?A%@%WS?A|C@/l?AP5d@9ғ ^?A#"@D3S?@VJ@NM?@@Xs;6?@v19@b?@r[_k@mv?@Eߩ@wDRA?@(u&@ぁ^??!@㋿??I^@2EM??ڴ@: ??gkE@xr,??:@㴶X??V@?>H@1Q?>@nOc?>AP@ݬ?>\үf@16?>0d%#@'n?>@eq?=ׇIį@?=@F?=~Ik~`@P?=Q8)@%[@?=$ @/Q?3@NRp]?@}~?:gG@䴺 ?:@N?:7@5V?:Zoъ%@sm?:- C@ݱ. ?: W7V@Ta?9xwR@,m!?9*@j ?9{)~@m?9NOk@Mw,?9!z@"?83@%`^x?8Ȍg@/,7?8'@9E?8o>5r@Dl?8Bi@NW -?8@X?7J (@bLh?7asu@m?7ơ]@wMO?7cVB@偋+?76ӄV@7&?7 u_N@k?6c.a@D q?6[@媁1?6$i@崿KY?6Wp$@}?6*΋@:A@%nd ?+W8@/?+&@9?+Yڞ]@D'C?+,ڄ@Nd.?+$@Xx?*IL@b#?*nk'@m_f?*y SZ@w[b%?*L`@聙?* *@֢q?)B@B1?)))@Q˽?)Ov@誏i|?)lu0@"?(2v~C@|Z?(a@ ?'DK@B*?'Z@5`?'_.@%s)v?'R@ *@/5?'%fD]@9@d?&[@D+஁?&˴@NiLA?&ۋ;o@X ?&r@b3?&E)@m"_L?&Q?@w`?%xMn@遝?%$@?VW?%,Q@ߟ?%d@V=?%8Y@骔/?% > @ѿ$?$e3R@^®?$<@L :?$ @ӊ?$WݮdI@>?$+ǂ@ޑE?#-@C~/?#V<@x?#~@Q?#w0@]?#J׊ @9?#@%w\?"2vR@/=?"` IR@9݂?"@D0} g?"jtY@Nni?"=Dm@X?",@b]Q??!E%0@m&?!s5:@wd?!Z5@ꁢo?`5@%|:?ی@/V?cn(@9zZ?7(@D5>? Lm)@Nr?|@XZ%e?~N@b%?vD@m+ ?W @wi9q?*@b?)W@m06~?X@wm#?'Ak@쁫ve?ak@?xo@&M/?L @dU? aI@쪡4z?/~@ߕ:?G@5o?͡@Zչ?or@ӘuWE?Cky@?:‚@>? 5@QTP?E@%?i@̔Ü?fwҸ @ 4a\?:GO@GԪ?@%tH?@/3?9 @:/?$@D>SͲ?]UA@N{??1%@X?⨽@b3R?@m4ӜJ?.'@wrs: ?fsb@큰?T6ɾ@!U?(7@+R?׸R@h?ϨJ@`?x@2?wI@!ҍ?K@_r+l?ec@ӝt?[@ڲ?ƍig@Qw?^3@U?n/%@?B P@1O?tNĖ@?PЅ@Lq?h[@%fZ?=4E@/DZ?T֬@:QM?$,ӹ@DBe?<@N%?K Ϫ@X0ұ?c3@bpp?eh|@m9p0?6/8@wwW?Z8@|?֝(@P??&@/?w&U@mz?GjO@/?@a?W@&o_?7f`@dI?{@ӡ?X_@O0j?)Du@)? Jz@Zk? ɎN@.u? -@S5? jC#@n? :^cO@Q:? Ms @%@? Q@/N!? -@: ? {sx[W@DG ? K!@N-? @XD? Dg@cm#? 6!j@m> +? @w{uo? ]@M.? -\+@? S@4z? 菙@r,9? .*@絛5? nuNy@l? >˚m@+ E? a@hf? I E@ӦL? @P? ֣MU@!? Pf@_+? do@(?'k@kp?T8i@ ?.o@UX3?c'I^@%J?3@/ꓲ?݇@:>?Օ$@DL*z?oÙ@NĊ?wJ @XjbI?H$F@c ?@mBI?}@wIU?x@0?@Π?\hm@9)l`?-Ckl@vɵ?;,@iS?#O@k? .@/:?p1@mHط?AYE@Ӫ"C?e @?@&@&(]?Q@cȧN?͗@hE?Ua>@?&B@,Y?@ZG?fV@%?B(@/Շe?jU@:'O$?:m@DPǘ? _"@Ng6p?ܳ@X?T@c ?~kF@mGF{?OHAP@w? $@†?@&S??b@=Ɗ?@{f'?c(e@q^?4u<@?R@4E?/G"@qi? Y@ӯ)?w@%ݵ?HI}@*{u?@he4?e&@b?`@?C.@!EJ ?]*F@^?.t@%?@/$?ރ@:l?o @DUd ?qo8@NT#?B_@XУ?z,@cD;n?a*@mK.?IBe@wv?0@#z?W-XV@^9?'p@Bc?m@E?0C@򪽢D? @C,?k@8ʐ??e@/@?6S@:a?m@DZ(I?VƔ@Nq??]Q@XA?z)@cT?Kx9@mP?S@w ?k@2`?6@ `{?@G?_z@󠄠c7?0R@@@?vCx@ߞ?`J@=C?Jc0@{?t4p@Ӹώ?Eٕ*@_mN? 6P@3 ?D@qT?-5@>Y?s@ސ?YH@*~٥?*Ad@hwd?m @%?˨f]@/^^?\ @: p?mH@D^E?=Ì3@N=?wo@X-G?+e@c}?tF@mUh?􀓘@wS?QGr@]P?!@ ?+@K7^?d=@<?>@?d/'0@|i?5Ų@BZ)?7@?쟿@ӽ\At?򧡜5@?xV-@8(?I ܑ@v;ƀ?(R@ ?v_@{?+}@/K?F@l?\El@%[2?-L@/|c??4"@qX?o$@%P?(0 @/I?_0 @:*87?0P@DgՔ?RO<@NwsT? 0@X?$jb@c Z?s}0@m^W,?D6O@wA?M@ٖ߫?ԅ@7)7?b4@@T?@w?W7@B?(O@ L?H(@KV?`_@Ɉ3N?隼D)@ƕ ?kv>@6?<0K)@AոY? p@v?ݤ@?^T@=d?_@8U?O,@u$? i@%nR.o@A? w@.H?_@%?ޯ@/n?ހn~@:8 ?PHY@Du?!|D#@NN ?}@Xj+?‹]u@c.?ݓ0v@ml.Qw?c@w7?4"5@m?@% ւ?1@btB?ܥqH@M?vA܀ @[?F+@M?R0@Y-B?y@ɖ?۸b۷@l~X?ۈSa{@ ?Ysݧ:@Oe?)@L0?6x@L?x@?ڛ@F,4;?l*$@?<+@%ko? H[@/ G?מV@:R?O@X? A@c3+%?:;@mp]?5ݑ@wk ?ؑ݇@ ?bT@)Hh?23@gJ?tc@/?*N@t?פt@ *?u%@]ɴ?EGT@ɛiK?F@ ?q@9?ַh'@TIW?ևd@!?XӬ@ωj?)Ȏ@ )b?A@JȦ"?<8@h?՚/@%m?k_~6@0+-?; U@:AHt? Z,B@D~x? n@N\?ԭb@X'?~7H @c7Ǘ?N"J@mug?Z@w~?P@[?j)@.Gf?ӑ0T@k?am4@Mg?25/Z@&&?':@$4?Z@bfr?ң7V7@ɠp2?t@ݦ?EG@FW}?s޾@X=?8_+'@>?Ѷ]w@%܉?ч^s@&?X)Ò@Oe?)\O@a? @%ʥ ?X@0EH?Л@:Ek?l@D0+?=@N$?k?@Xw?PۘM@c@m>[?B\o@w,?'h@~u?d=@<f?űnU@y&?ŁU@]?QV;1u@r?!"R.@261?x@p=?@ɭ}?Đ7@}g ?`RL@)?0=P@f?@\?϶@?ßh@`?oO@]w%@S.PJ?&U@ ?ZF@n7?=U@ V?}5@I?L7f@M?@Za?Dx@?_@@-A?@}͋9?[U@m(?+P@ Ƹ?^_@6D?@c@tL?']U@K?m7h@%O?=$x@0-,3?*@:j|?B @DlZ?sǒ@N ?H1@Y#?RyF@caKf?#`@m?H @w܋?/@+$q?XL@Wm?f0@k ?7@ UI?@?ٶ~@NJ?^@T?{B3@Ɋx?Lo+@*?WD@D__?@\s@i?(@ F?g-@j?`8@;I*?1]@x˶?$@iv?Ӵ$@%)?ߵ@01P?u!@:oh?Fp7V@D 8 ?Y @N?B @Y(Hs?,Z@ce?g@mZ?ZM,@w(d?+< @B$? [@\g?ͼ=@)o?㹋@ק/?oQ@H?@{hj@Rz?eM(@L:?O}@'?9P@ 3?$xq@IfE?Uv@?%m@Ħ?f@G?4^l@??*v@}=?iЩȄ@&(?:;}@%$? @06fnt?ޢp@:t 4?x0i@D?~c&@NE?O`@Y,?? v@cj.? @m%x? 3@wJ?6@#e_?eȫ@a?6 !q@U?^@D?bF@䂡?$@W-?z#7L@$i?K)@?/Y@dQ8?5@N?<,N@苣?Bo@CD?`H@t?1O4G<@D?U3@#[O?\N@?bʰ@%cB?uiM@0;Z?Fpj@:x)?w@DBǦ?~'@Nee?`@Y1?'@co"L?[6@mq?,t @wb3?-@(Ѽ?Ϊh"@eH?J@A?pS@V?AyAw@T?R@\!>?D@?Is@a%_?fK@?V阫n@R ?'ݰ@@j?;Q@?e@ ? 4@I /u?l@y?=B@`? D@&?!@0? ?ᯯ@:}??SR@DX?Qٛ@N?"x@Y6 ?.@csjd?U@m_#?k@wQ?f@,o?7<@j>.? T@ֻ?١CX@~tz?N'@#:?{֢@`[?LN@]?@C?¸@?z@W=~?tby@?anQې@}e?2hZi@h?bvu@ MM(?\*@ \?VqS@ 4t?vQX6@ &3?GKѤH@ 0D?\1};@ cx[J?-,~@ m%?'z @ wÕ?"@ 1< !?y@ n۪?q]0@ {H?B@ -?T-@ '/? @ eZͬ?@ 8?qi@ ?VT!@ :?'J>@ [ڜC?Z@ z:?Z@ ?1)@ !O?k ;@ RZj?<﬊M@ ? E@ ͙Z?@ & 9?@ 0Hٍ? @ :y+e?R@ Dt?#1@ O?r@ Y?Y\=?&r@ c|?.2 @ m?g5E@ w8H?8= @ 5? D:y@ sxȔ?LC@ fS?Tf@ ?|[[@ ,XM?Mc @ i_?k;@ 4?sd9@ 7Ҫ?|@ "pj?LII@ `w?b|~@ W?3Q]@ ۶u?@ W??զ>]@ V?j@ &M?wN@ 6 ?H@ &a?ɜ@ 0MvX?Ҫh/@ :I?Ѫ@ Dȶ? gy@ OV0c?]`ū@ YC#?.˱@ c?J]@ m5o? @ wS.?@ :u?sR@ x:z?D(.si@ ?2@ U!?<&i@ 0?FEò@ n ?Pxd@ 4?YZ @ ]?*e$@ 't?o}@ e+?z.@ 袴uh?CI@ T(?n}+@ ??cD@ [s?sc@ 33?ᝋ{@ ?@ &s?O@ 0R>?TW)$@ :f?%'@ DS?N@ O N?ǟ@ YH?@ c2?im@ m!?:L@ xrp? F@ ??ܤV@ |X,?z:@ Q?~|@ ?x?O=@ 58? r@ s1z?:@ ă?¬@ qbC?6BO@ ,?d@ iI?5/s@ PN? {@ 0?׵j@ "Κ?o@ `0lY?yC@ е?Jh @ pS?ߑ@ &1?AW@ 0V:?@ :Oذ?w @ D"i@m b?|6_@x y?{@HLJ?{&.)@?{f/@Ì1Q?{Tu@+?{%՗V@>l?z$K@|k\?zc @ T?zxH@?zj1@5K;h?z<"d@r'?z b@谋"?yޢ@*s?y<@+^3?y#s@ij?yRcXa@ E~?y#B@䪏 ?xKr@&"J,?x$َ@0_ʉ?xe6ܦ@:?xhDu@D)?x91@OO?x '~@YVi!?whyZ?@c 6?w4@mѩl?w~V@xI,?wP+،@L?w!m&7@x?vGP@(7?v @?v1ռ@Ch?vfs7T{@(C?v7H3@q?vƠ@H?u8~m@9N?uz@w?u|Lj@'?uM!@&?uA7f@0g{?t@n?t5@c1?t+@G?teN@&&J|?t7]H@0dS7@Y[ ?sQ0@cT?s" @mES?rLO[@x;?rƳ;@Qٞ?r Q'@%w^?rjn@?r?q'L@|%?p]4@IJL?p<@dP ?pfG@5?pn@r7W?p@fM@C?p s@?o !@&+c?osU@0i$?oRq@:ã?oZ1mQU@DcAn?o,z@O"?n-@Y_(?n@cCrF?n2@m?ns6c@x?nEm@V"Q?nL"@@•?m,]4@b2?m @|\?my@L?m^娛@Bc?m0Z@g?m=M@'?ll4@C!?lLy_@ހs?lx,(@a?lJ H{@m?lm@9 ~?krR@wAU ?k*@?kiN@򀐉?kX@&0 ?k&X@0mw?j"@:`a?j 3@D_ ?j@O&?j_T@Yd@Fl?j-(6/@c,?i1y@m߀-?i:-@xw?iDD=@Zi7?ieMϳ@_?i3Wp@P?ia+ @B?hjC@Q?7?htb@Վ?hk~@?h9W@ ?h;@GZ?g՝@ޅ^%?g鬝@A?gqfU@q?g?@>>)0?g Ǧ@{?flW@~|?fF@@U?]@L:@·?]$ȿ@W=?\]ݼ%@&=a?\@0{% ?\~oZ@:7n?\M/@D l?\#7@O4v+?[ m@Yr?[5@cw?[qF@mV/7?[[ @x*x?[+0n^@h?ZE@6`?ZCd@?Z͚L@!u?ZiW,@_?Z8{s@?Zk\E@Ue?YuH@j%?Y i@U?Yw i0@ޓ5Qq?YFy6@0?YhS@t?X @L|?X4 @t;?X۰@T?XT~/@[?X$()@&BG?Wx{@04B?Wzm@:?W$Ys@Dt*?Wb눱@O9?W2w@Yve?W![k@cS*?V3r@mL?Vu%@x/?Vq/~@m345?V@MY@?Vs@s?U:p@&@?U9?@cW?Ury@R?UOJ[@>K?U$>@?TrSm@Z2%?T@ޗW?Tȇ@r ?T]s5@?T-@P.?S @Q?Su6@/?S @ y:?SkL@&G1?S;w@0д?S #]@:pE?Ry@E?Rzћ@O=?Rz&S@Y{PP?RIU@c!?R@mj?Q+P.~@x40[?Qס/@qQ?Q[@o?QX0@g?Q'n@*?P3@hOt?P6@r?Pj:@[?Pf\ @!.?P6=g@^CJ?Pꇉ@ޜn ?O՗ފ@~?OE@U?Oty]@UNf?OD_@?OD<@ЎM`?N@- ?ND@&K4?N&@0mk?NRF@: p+?N"i=ؐ@E?M OY@OBMWw?MM@Y?MMl|:@c>?M`2R@m,܂?M0DX@x8&?M2p@vl?LLP@ Z?Lvh@le?L\)@0%?KN@+?KW@l@%p?K}Cb@ck0?KLj @ޡ ?K(@ޫ{?J+G@K:;?Jη@Y?Jq@!?J[h @+k?J* @?I[ ;@&Pj?I^@0 ?I}@:˪?IiED@E J+?I8[@OFu)?I)2@Y?H0N}@c*\u?H)s@m5?Hwx#@x=i?HG*x@{ ?HK@@?Gd2@I?GՃ@3f?G?\K@qK?GUQ@)M?G$U@?F@*i5#?F?@h?F䨣)@ޥp?FcA@H.?F3.@ W?F͌@^?Ey @(?9?E&sq@?Eqû@h&?EA(n@&UE?E7f@0b?D>@:G?D^k@E IP?DI@OK?DO5@Y'0?D|6@c[?C\@ng?C @xB?C@Sf?C^p2qc@F?C.!@:?Bl@8>?B̈́1@v&!?B6Z"@ſ?Bl r@f I?B<"@/ ?B K+@l?A@ުEU?A@,?A{bVӸ@%u?AK@c%`?A"@ı?@y@d?@,$;@k?@$4@&Y?@Y@0D?@)DuP@:v??k3@Eg??Ȫt@OP$??]@YNN??h @cc??7#@n ??w@xFY?>+ ?2@Cq?>ޥ@?>vU@Xe?>FFeM@="$?>,o@z??=}@bp?=a@{/?=\@3ļ?=TVR@qBb{?=$~@ޮ?<3i@I?<瓌E@*!?<-@g1??7@&bq?6sA@0~O?6+@:X?6q3M@E?6Xrj@OY][?6(H@Y?5?@cԝ{?5r{@n=2?558@xOb?5f @}?56r@J>?5@?4?@F]1?4tB @I?4u~@m ?4DJ@Y@#OѶ? 1@#B?ߧ3:@$H? *@$?'@$EM?U^[@$&(> ?'+@$0ȇ?@$:h%X?ġx@$E<n?6@$Oy ?n`Ds@@$YGd?@-D@$c?R @$n2?Ȭ@$xp'/o?RE@$x?d @$g?Y1>/@$)`G?*œ'@$f?Da@$F?Λ/@$R?iW@$?r8?ɲ@$]&̝?Dx @$Ԛj]?p@$f?磆u@$Q?r$@$Sh?@ @$E(?]@%ִ?.p.@% tt?c@%J%?|j}@%&[?K?@%0d?vB@%;C ?G ~@%E@?m[9@%O~E*W?t/@%Y?XrN@%ce?(}@%n7$b?``y@%xtM!?2ǣi@%c?@%4m?g9@%--?7@%kD?z#@%x?KQo@%W8?^@%$#?x@%a>?IMV@%ԟc?٨@%%?dꕧP@%Ï?6\9@%XC ?7@%? ]*@&ӂg? S%V@&"&? }}@&N/? Ok2B@&&byr? !@&01? y@&;? r{F@&EEA}? Iy@&O=? g,n@&Y? 9z\@&c!? '],@&n;!H? @&xyaj? Uw@&? /@&R ? Qݥ~Q@&2@? #p@&o? 9RW@&+? G=v@& t? U@&(? jCz@&f`\6? ;^@&ԣ? Q@&C? Ngy@&?A? @&\? z,0@&ȍ? TZ!@'fM? &j@'? ~@'S_M?f:@'&X?@'0Ο4?lĿ@'; >Ҥ?>s9@'EIpc?#7@'O~?ґr@'YW?@'d;?17@'n@^>?V- @'x}ܺ?(㶅@'&F?@@'=?i@'6 ?@'t}Q?oP@'I?A9@'r?@'-]0]?aJ@'j?fk@'Ԩ?1@'@*0u/?ZA;@*;?V@*EW?um5@*OUg;?L@*Y?@VU@*dN?Hx@*nN4F?@*xԊ?+y@*tӒ?s0@*qQ?q"@*D?;/҈@*TX?luc@*\?\@*??hq@*;3ݨ?:d@*x{h?F20)@*Զs?LG@*b?'@*1??0b@*oSI?Ǹ@*?w-p@+1K?{@+(2 ?֢@+el?a`@+&rV?Ɣ@+0T?-I@+;?K${@+E\R;a?1@+O!?blo@+Yג"?5͗J@+d1l?1at@+nR ?|A@+xq?  ]t@+Ex?i#^@+ ?fd@+IQ,? 9e@+ʃ?譢w}P@+đ?Q >5f@+0?t7@+?[?W@+}p?;F@+Ի6?ް*> @+f?p]@+6P&?%e@+sg?`@+q?lWV@,/1?!4@,,?3@,jo|?VS@,& ?K|T@,0q?@,;#O?@JO@,E`Y?@,O?o@,Y.?*CF@,d?͖dY@,nWn{?pw^@,xk?={AK@,Үc*?ෑL@,N?ZK7@,MJv?9p?H@,6?ߡk@,.1?DF@,ρ?6@,DmmA?ދ @,ʂ ?.&@,ԿT?6c@,LL?uv@,:;?x@,x٘?ܼ6@,-#$?_ @-?Z@-1l^?ۦ8i@-o /?Ij%@-&E?@-0L{?ڐ<\@-;'-:?3@-Ee?@-O,?zB1=@-Y˲F?j@-dkP?X'@-n\ ?dI)E@-x7Q?,̍@-K?תWG@-?NQ@-R\?=@-+?֕;@-ʣ?8[}@- j4?۴m4@-I ?.&@-ʆ(?"g4@-Jr??@-?il@-?? tĖ@-})J?ӯ?@-ɕ ?S)$<@.iޖ?"o@.6 |V?ҙR@.s?=k3@.&Ic?;{@.0a?фF3 @.;,J?'|n@.Ej(?!t@.OȆl?n[3@.Yh?i7N@.d#m?ϵk@.n` w?X@.xHU?HSE@.?Οp@.7@0J?Ho@0M`[ ??4@0?x8t@0ȠBU?2g-e@1@?, @1C)?yL:#@1`?6@1& ?<[@10?c \>@1;:_Ll?Sj@1Ew?Nx@1O3?Mo@1Y?}C?A@1d0?bIII@1nn~?7@1xO?߻@1龠?~wt@1'^?!3@@1dZ?1&@1%?hI!@1>n? @1 e?Iw@1[}%?Rc2@1ʙ?]@1ֽq?b@1]?<4@1Qx?X@1|?}1@1=`?&ܻ@2 ?817~@2H}GS?mٓ@2?J@2&ü?HG@21\_?Wz@2;>j?f@2E|?Z#@2OeHq@2;B?\$@2?Ab@2"{*?V.@2`?FF@2ʝc?@2Z#?pj&@2L?0pE@2Vo?-@2:4.?w`AW@2?N1@3zz?Je0@3M:?a@3? '>k@3&Y?h9@31>E?KȬ|_@3;C?(@3E9%?ƽ@3Oo?5Ja@3Yy ?I/x@3d:?|@3nw(? @3xX?lW@3/?fm@30y3? /"@3n8?C1e@3`?Pu@3w>?U1y@3'?q@3d?;@3ʢWJ?|{@@3?D2@3j?%BB6'@3[7U?ȥoL@3Q?l^@3v?lQܩ@4`?}@4Q?UwμO@4Vt?r@4&8?mt@41 [?>i"G@4;H5?d/@4ECC?`E@4Ou?'\!nH@4Z*?X&-@4d>N?mTa@4n|Uf?P/@4x?M`@4MZ?VJ)@454?G"g@4r4?DD]@4te??A@4??k@4+??n7@4"4H?5@4_&?4%, @4s?W2IW@4 S?1l@5?1)@5VS?@0@5^?0/@5&ѓ0?/X{@513y?)/o@5;Lj?/!@5Er)?o06WE@5O?0r@5Zu?1_2@5dCR?X27@5n?3FC@5x!?4ޙ@52k ?A5 @59?7%@5wrRX?9N h@5?*;Iݿ@5?=u1 @50Qc?p?Y@5mu#?BTH@5ʫ?E$@51\n?YGlR@5&.?K N@5dqC?NL@5z?BQĄI@5߰9?Uk@6P?ܛ2@6Zf?,mY@6?0g@6&0M?sڗ@61?~@6;Qp5?/~w`@6E?^;@6O̯p?'@6Z O(?0=[@6dGW?Iۇ@6ns?K@6x/?3?2@6?4|@6>o&~?؊}Y@6|>?|6@6 ?@6N?Ï"$@64II?g(?rX6 O@8{"n?q}4@8ʹg.?qŒ@8 ?qB }@84y?pUL@8rG?pq@8?p+段@8,?o/o5@9+'v?orxYo@9h?oxN(@9f?n @9&?n\T>@91!?mh@9;_Fh?m,@9E'?mF1f@9Oچ?l| @9Z&gs?lo@9dU2?l0 Z@9nfN?k[@9x~?kv>@9>?kR@9LE?j=A1@9q?j` @9DžI?j@9%X?i _@9B?iJluX>@9e@!?h-@9ʾ?h(x@9{?h4Q(}@99D,?gמ(@9vb?gz뛟@9󴄬x?g8g@9$J7?f(p@:/?fd/@:md1?f2?&@:B?e&@:&m?eNu@:1&C?d80{@:;cTN?diLm@:E?d8e}@:O#;?c@{@:ZY?c@:dZc"?c"H@:n?bJC=@:xգ 1?bi,}@:B?b K/5@:PE?aU?2@:)@:AR?_'Θ@:=7?^&Ҡ@:{?^n"@:!^?^ܺ@:g?]8 j@;4a?]Xo@;ri?\HL@;?\K'u@;&@?\B<@;1*A?[y@;;hr?[_K7@;E ?[,P@;OYL?Z\@;Z!_ ?Zsv]s@;d^?ZӎD@;nW?Y0a@;x?|?Y]wP@;ţ?Y0o@;Ucb?XJ@;"?XGmy?Vxp@;޷?V>@;B~T?U@(}@;?Ub@;<?U@;]?T_z^@<8#\?TL\@<v?S@<=^?SE-w@<&ݨg?S6<@<1/}F'?Rsx@<;m?R}(Z{j@@=dh90?GZ@=nm?GdF@=xy ?GC@=!UB7?B2IRx@>P?Aը|R@>w@?AyLj@>&8?Ah@>18?@<@>;vWL?@c)%9m@>E ?@@>O??]p@>Z/6W??MKC@>dlB?>YK@>nv?> x)b?>7o @>%r?=Ъ]@>cV?=~2}K@>m?=!!,@>ޕ?<t@>5?Y3y?< #@>u}?;X6@>?;RG^@>dP?:`|@>PU?:Go@>?:<,@>˔\?9Ө%@> 4?9r%@?FЧ?9&ֵ@?tng?8:;D@? &?8m[-@?&U?8@?1=Sr?7hS@?;z2?7WͲ*+@?Eھ?62S#@?O3x}?6+@?Z3 ?6A$@?dqs_?5ccJ@?n?5I9@?xG?5,/X3 @?*R?4ϕƁ@?g.`?4r @? ?4bg@?2i?3ɀM@? ҳl?3]0|@?^rQ+?3c5@??2O@?ٲ8w?2Gf@?Q7?1YCi@?T?16BJ@?钑?11`@?1[B?0@? Ѥ?0xo%@@KqB?0S6 @@?/@@Ʊ)?/bm[ @@'PǙ?/t@@1A%?.kA@@;?.Lhj@@E0L?-9S@@OЖ0?-o@@Z8p3?-6ee@@dv}|?,ٺ7@@n;?,}$@@xO?, d@؁@@.?+ù}@@lG?+g@@/?+ d+@@χ?*4@@%o%R?*Q?@@cn?)fo@@ ?)$ߌ@@N]?);@@?(j}Y@@Y?(t}@@.5?(%@@x?'o@@n?'ko@AP`@?'iR@A?&wFi@ANG?&U@A'K?%'Q?c@A1F ?%m@A;-̗?%?^@AEjW?$10@AOm?$*u@AZ= Q?$)Ze@Adzb?#<ſ@AnM8?#pB@Ax֭?#@A3tm?"Iv@Aq,?"Zv@A[?!Rs@AlE?!X@A* C?!Dszd@Ag? N]@AL*P? iR@A? .Čb@A ?@A^+[?u{)}@AM?P>@Ak?3A@A 4g?_h@BT&?@BK?W@Br?I~@B' ?!@B1K*?e@B;>}?3@BEj ?R_@BP %?zm@BZAoU?*@BdJ ?]@Bn?d0 ?@Bx`?RS@B8) ?p@Bu/?O!s4@Biyk?ga+@B +?!@B.`?9W\@BlHw?ܿӏ@B6?'h@B?#ډ@B%(?O@Bb?j`@Bhj? JA@B?2&@BR?T4h@CYG?PӋ@C獘?nQ@Cԇ$?>؜Cu@C''t?B%r@C1OǾp?a@C;g\0?)@CE?́r?@CPC{?o7@CZFF;?VG@Cd*?@Cnȇ?Z-8 @Cx&fF?$@C<Ư?8@CzfM?DpӨ@CQ?Uv@C4?H1@C3Eҝ?.w@Cp)? >Y@C?un@C%W? y@C)š4? g@Cge>? _t@C? B[A@C&@? @C D? JB@D] ? 3@DK? O@D$? /ѣ@D'Ē? ѐ ^@D1Td0V? sZr@D;y? $7@DEϤ? τ@DP Ca? XIg@DZJ?x@Dd?N&@Dn#9?>@DyÃ?@DAc!?sĘ@DkD?#| @D ?G/@DCR?gu @D7P?@Du?V@D"כ?LxzE@Du[?E@D.b?@Dl\?1ߣ@D驡f?Ӭ@DBC?uzl#B@D$?H@Ebq?20@E!?Z@Ef?G|#@E'aI?@E1YN ?@OT-b@E;?&"@EEA5T?"E@EP?%T@EZOp?Nj@Ed `?i[E"}@EnX? +@Ey`?G@EF?k?N'l@E+?o`@E@&?k@Ev?4@E20?]R@Ep΍?$(m@E??@E޵?B .@E)~d?l@Fg$?E~2@F:?0ڗ:@F^p?H^x7@F'"/?}@F1]k?$K1t@F;> {? @FEݧ;?qPH"@FP}?Ұ@FZT?UL@Fd,F?d@Fn]u? [ ~@Fy ?-n@FJ]?Xayp@F?O5@G2?iٜް@HpX,?@HvI?糫q@H?Xlc@H')7?-z@H1fT?Τ@H;w?FN@HE?q@HP_?3@HZ]W?4@Hdg?ٸ@Hnؗk?~zz@Hy7N?#= ճ@HS?p@Hvv?lƅ{@H?L@H q?I6@HJV?[ 1@HY ?`|@Hŕ?ᤔ>@H6@Y?IXE@H@?m@H~u{?@Hd?7~@Hc$?jFJ@H7U?߁/7U@ItJo?%\@I/?ʹ@I51?o-@I(?ڄ(@IӳE?(pb@ISt?͗L@IN-4?r_]@I?'@I3?ػU@IҲ??`T@IEr?gJs@I߃?תJa&@I7J?Oj=@IR?v@I;?֘bi7@Jyh"?=pq{@J2?:ɹ@Jѣ?ՇPv@J'2q-?+;@J1p?К@J;y?ue@JEQr9?12@JP(?Ӿ@JZfY?c;@Jd0D? _@JnЕ?ҭ`@Jypޏ?R,+2=@J]|O? @J?ћ|@JPc?@<@JZ?^ @JSJ?Њ+!@J/?.+@J22?c'd@J o?x@JJm?aӅ@J߇=?/̈@JOT?f@J? To@J@@L*Ss@Ms&?@M'?3@M#Ʈ?,u/.@Maf2?=)@M?v/@Mܦ3?ηT@MF}=?g@MW?d`L,@Mߕd? )ZE@M&H?>@MŠ?R Q@MNe?@NS?S[@Nɥ?A#9@NEn?}b@N'D _?n'o@N1U?/HW@N;$?bW@NEđj?y2@NP;d?DU@NZyx?ӗr@NdB?g[z@NnD`? uT@Ny1?F|4@NoGM?V̏@N# ?Q@N.?x @N(cX?D{@Nfj?^P~@N?1-_@NCQc?3%@N#?9@N\8?|@Nߚ"o?!{@N?O@Nb?k"w.@NS[z?e@O?ɮb@OBB?Y$@O R?qh@O'I*?E@O1!?HS@O;]?V@OFa?û@OP@L?6@OZ}h?m@OdA4(?C9k@On}?%>@Oy6s?t@Ot 3?n[h@O?ka@O`?p@O- ?]G@Oj?]@O@%?*I@Oo?Kˈ{@O# ?𢶃@Oa?zI}@Oߞ!?:Qӛ@O_?)S@Om?6@OWy-?(M1@P??͡g@P`x?rgc@P~8?,@P'NG?@P1?`S@P;^C?~s@PF?E@PPDj?O Zt@PZ>?co[@PdQ?PG@Pn}?=`k @Py;9&?'U@Px?)@P]t?+@P1?~FH@P1[?uF/@Po=}?(3@PC=?9B@P|?c%@P(*?h@PeH?1uJ@Pߣ]?Q@P?ڑ\@PMS?V^N@P\?߷@QPI;A?f@QZ&? v!@Qd{o?A@Qo M?U G$1@Qy? ?#@Q}Z?'5@QX?Cqap@Q0?=ÿ@Q6:y? Z @Qsc?1 @Qz`?֤z@Q?{q2Z@Q,n? >,6@QjY? 7@Qߧ?iٰ@QF?%@Q#9k?u{@Q`?XC&8@RyRQ?k@R?ty@R?F@R'WX]? ^@R1u?T@R;Ҙ?5%^d@RF8\h?Q*@RPM'?~rn_@RZxC?#}@Rds?j;S@Ro*?m;8@RyDWȿ? W@Rf~?ʁ@R ?[y@R7M?g3@R:?V@Rxw5?J)@R?@Ra?|@R1V!?8$@RnW?v@R߬m?JP*@R6?,?'/ @R'ֈ?6Q@Rev&x?psi,@S7?޵@S ?or@SU?_D;@S'[?-Uc@S1?S@S;50?MèW@SFz?&@SPRu?nٴ@SZ?@W>Ŝ?Zrs+c@W|c\?Z@X&?Y7~@XJ?YgmԐ@X5eg?YU@X's1?XX@X1ϳ?X]ΐ@X;Emr?XDxd]@XF+?W(|@XPiT?WT0@XZ%J?VG@Xd< ?V4@Xo"d?VJɉ@Xy`#U?U B@X?Uh@XE ?U@k@Xa?Tr,`@XVF ?Tu@X$?T7a"@X-l?S!@Xc,?SRI0@XM?S-@XՊw?RC'@XC?R|on@X?R$5i @XC7?Qˮ9@X#?Qs(Mm@Y?Q @YchZ?P6@Y:?Pi!@Y'w?P @Y1Be?O@Y;%?O`s@YF0Ա?Oh@YPn"rq?Ni@YZ0?NVv@YdbY?Mh@Yo'|?Ml @Yyd@Ym?Igs@Y u?IF2 p@YH U5?I&2@Y?HBcje@Z`#?Gď@Z'|??GkP@Z1_L?Gm0@Z;?F;7@ZF5F?FbK|@ZPr#?F @ZZ_-?E*]D@Zdˣ?EX[ _@Zo+/?E W$@Zyi>?DzG1@ZP?DN뤒@Z~:?C[xo @Z"7?C;A@Z_?CE=(@Z^E?BKp@Z?BM@Z?B;=@ZV=P?A6@ZՓ?At@Z}?A1 @Z)\?@Y@ZLr?@w@Z]?@(>@[g??ϰA@[??w#V@[C 0@[1||?>m~W@[;?>֛@[F9dJ?=e@[Pw\ ?=c@[ZK?= NN@[dU?<Ճ@[o0;?@\'yQ%?6 D@\1?5Ǫ_@\<8p?5o@$6@\F>X0?5vQ @\P{?4܌o@\Z|?4eB@\d9?4 K@\o4ؤ?3k3@\yrxB?3[wn#@\?3ޚ@\)?2E@\+Xs_?2Q@\h?1N\@\?1}B]@\7j?1G` @\!ז)?0MR@\_w3?08v@\՝}u?0>@\ڷ5?/}@\Wd?/= @\U?/4Z!@\@?.×@]6?.-7@]և?.*V@]Lv?-1|@]'n?-ykF @]1Ƕ ?- խU@]<VV#?,@?@]FB?,on@]P?,@]Z5.?+!KW@]dx?+ey@]o9uz?+ W@]yw`9?*ö H@]?*\/p@]UG?*M@]/E?)?@]m.?)Rtq@]4̐?('@]jP?(M@]&t?(H(i@]dQ?'(7x@]ա[?' @]T8?'?9@]֧?&q@@]Z 3?&@]3?&5M(j@^[?%ܿ~@^s>?%2@^QB?%+i,@^'?$y-@^1S*I?$z1@^< ?$"Z@^FG?#u-S@^P2U?#pv]o@^ZM?#]P@^er?"ғm@^o>4`?"gGm@j@^y{}?"q@^R?!1@^k?!]@^4?!@^r1? v@^C? TlQ}@^q?~@^+%?f@^hoN?JkzL@^զQ ?6@^?Y#x@^!Z?@:@^_0?G@^ۥ?@_pye?76\S@_$?ޮd@_U`?&@_'Op?-pB@_1G?;t@_<?|ډ@_FL/{?$@_P?ˁ@_Zoj?rӎ@_eS?t-p@_oBR?H@_yN?ig~*@_9^?j@_?[>@_9.t?_ܱ9@_vξj?PX@_n\)? @_?VE@_/Cu?@_mM4?<?*W@`Z z?҂@`e &9?zJ@`oGLo?"9U@`y ?^I@`‹D?r~2@`+?~2L}@`=˒?}@`{k0P?j}@` y?}@`?~@`4Ka'?b~u@`q? 3@`կ? @`*3? Zd@`*ʃ? :(@`hj~? 4@` k>? R-t@a? K@a!JR? @a^I? J.@a' ? YT}@a1)ו? ׾@a<uT? B@aFUi? j6]@aP \? ~C@aZШ`? :F#@aeIC?0y@aoK?e@ay+7?2c@a(?ڪY@af?%U@aBhC?*8!@aN?ҷd@a?z@aH5N?"}]@a8?Ơ@av?r@aմ'Y?r6\@aX?%@a/g?jN@am?d?c@a?T;/@bG&?b@b%p? #V@bc ?2t@b'&?[LE@b1G?e@b<f?@bFZ0?Sa@bPzS?@@bZF?ő@be?Kz4 @boP^?X@by%?ms@b?D:@b ei?V Z@bG")?qč!@bk??@jrc@cv@?茤@c?A@dI?9>@d/ ?x@dl?`u@d'`;T?5l@d1?@d<%"?8@dFc@l,?1b@dP ?@dZ?@de7?-\zB@doY?֥IU@dy_,?h]@dvB?)8U@d?҂$@dP?]?{@dN?%K@d~ ?`@d ?w/Ys@dFY? Y@d˄^?@@dg?s@dd?3S1@d=>N?"T@dz?onMx@d}o?$@e?%@e3q?kRZh@eq]G?C@e'Y?M@e1?g8@e<*=@R?@eFg?T@eP}'?ch@eZ^? l讲@ee c?浺@eo^\?_pS@eyJi?V}@eٜ?層@e<1?Z @eTt?A%@e|?䭐@e?Vz$@e T?.v@eK[ ?}AE@eˈ;?R|y@eƛW?-;@e;#?m@eA?N'@e{ b? f* @e"?]w@f?Ju@f8Zn?;5}@fu--?$p?@f'v?G@gUFX?no&@g?H@gT-?`-@g˒4d?jE @g?R\@g t?ѽ#M@gK;?gDU@g􈴙?"@gT7?к7S@h G?d@hA?@h4h?ϸ4@h'R?a@h1s? W@h<8?ε`(@hFu]?_MvC@hPS? cE@hZr?ͳr@he.i?](V@hol3Y?@hy?̱u@hrt?[@h%?|z@hb|?˯= @hRK?Y{@hd ?r@h?ʭi}a@hY2KW?W`@@h˖?W @hr2?ɫO]/@hb?UG ?N@hOn"?>(@hQ?ȩ6H@hUm?S/ ]@i -?'[@iF17@jPd?7@mW @jZ-B?g@je7K?_ @joul?35!@jy M?܇~@j?.@j.Ln?/+M@jk X?}*@jU?Ш)|@j+?+#R@j$=0?v@jbk?}5@jˠ x?'6@jݫ;?p;@jK_?yĖ@jX멇?#@jGF?l@j*?u !@k .?v@kOjR?jD@k ?q%d@k'ʪ?:O@k2JQ]?i~@k.B@mX[?io@mDv?~&@m'C6?;4o@m2?u~@m@nP?xe@n[ @?"Ӵ@neJ@j?̳9(q@noഋ?v@nyŀRK? r_@n ?R\@n@9?t3@n~_V?@nu?"Gl@n?qA@n7?\a?پ@ntߥ?ŗ DQ@n˲C?oxeK@nm?YJ@n-*?;@nk^ȸ?m~@nD?h@n枰?ܫ@o $>M?jP4@oaޗP?@o~5?q@o'?hl/@o2[?O@@o@q;D?}=Sy@qy5v?}7c@roD?{A%c@rTZ?{Di@r'?{3G@r2(ɦ?zKy@rEW@x MU?I&@xae?IJ2Ҽ@xc?@IQ/J@y2Hޖ#?@q<@y<~߯?@54Y@yF}o??'@yQ.??s@y[?^d??=g@ye|z?>>_@yoL?>g@yy=?>D@y5݇?=S@ys}?=Ա@yn?=L-@y ?<9C@y,]V??9aO6@z.?9ZJȆ@z;̊?84@z(jI?80.@z2M{?8IX@z<Q?7Y@zFȻ!?7õ@zQ[8?77Ⱥ@z[C֠?6ܳ`@ze ,?6e@zo:?6&G@zyx?5u@z:z8?5pa@zxB?5M@z?497^@zZ*C?4_&@z0s?4@zn?3fy@z9N?3MZ@z?2{@z'y?2`7@ze4Y?2<]Ы@zꢹ}?1h2@zY?1@ze1?1+~@{ [?0lpI@{8?0uZ@{?-@|'2?g/@} dҒ?=k@}r?r@}y? DM@}(?3Gc|@}2[Ra!?(u1 @}uN?᫻ @}|p?UTg@}\?4<@}&?>@}5PC?K%@}r?6@}감+1?H @}/?@ZbK@}+}?laH@~ io~?R@|* ?@ɺ?HA3@iX?D*~@5 ?> J@ r???,@Ia?d@'!?.4@(+?5#ҾM@2i)l?܃@<Ȭ,?)T@Fh?+C @Q"w?Ҥa @[_17?z @eHz?!eb@o?~E@zB?p(7o@V'?@ǝ?W@g?fM2@? H@L"?GX@Gl%?\t@ ?ֺ@Sq?9@C&1?R@Ǝ?bc@f|?c|@v7@D?X @(0%?};@2mŀR?5!V[@C1?I.p,@ {n? @?&Aa@"??@(4E?/@2rb?#%@<;?6@FQ?ݘE@Q+B#?<@[hl?,g'@e \?^@o!?{cVo@z!?#@_ag?ʍz@-'?r r@ڡv?@Ar? W2@U]?h@? @ ~?@ ?_ @L`?_^@U? @Ǡh?U @@? @BOa?뤏 5@  ?L|1@? .`@l?^@(9_r+?B[@2v?8^@7?9T@Q/@?*@[m~ނ?#:@e(?/xR@o?)_@z&^c?~@c?&1w@J?͵@>e?u9O@2%?IP3@Z}?BP@q?kׅ@ս0?L"@]T?;@P|?bWr@<;? i@=?cK@ #?Xg@G|G?o@  ?~Ԥ@¼?OZ"@\?'c@(=?ឺS@2{-?FNF@<@Z?ps()@r? S@Ub?ۿ N@:Y?g7'@??S2_@{? |@?@NI?I@3o ?H@q ?&@.VU?@r@?rx?@*n=?*@h `?6:k@७y?ݞ5<@M¬?G@ `k?,g @^?6@ -G?{0@v?"ؐv@m/?+@(U ?q`@2j?y@v>@J?6QE@4?? =WS@p ?*i@zKEM?p1[^@I?fdR@ƅ5 ?^@%~?gq@AT?H8@d?nR{@?_Q@`?4b@8D?@u䈫?Vv@ೄ&k?-@$o?Ŀג@. ?N5$a@lcv?N@ ?sL@磒?P@%CN?0@(bz ? j@2?X=U@<#aY?p2@G?q@QYcH?_;q@[d? ո@eԢ$?>@pBͰ?grJ@zOkp?@?8}@"R?os(@{?D> @Fb:?y @?v8C@u?#ぞ@A?CG@<\?~N@z^?+s @!D?غ}@*@?r@3a+i?3'F@q)?]@ ?~ķ@@t?:z@)N4?(@(g?9{@2 5?Bq@9?Ttt@0?@A~z?h[D@D?@༾a?>@]?py@7O?ĸ@u?U@ =?w@'?$@.}k?бP@(l ?}D@2S2?)gt@<\?l*@G$?e@Qb=?/@[@zbV6m?y}&@-?y+&I~@ݕq?x@5y?xy@@@XY8?x+"@u?wm@@?wvR6@D?w+ h@OU'?vʬ!@֌ŏ?vu'@ʕ?v+n{@4?uʭ"@EJ?uu&@t'?u+ d@ 1?tq@Ϧ?tx;@@ |?[v`@J*}?[گq@(d=?Z7p@2j?Zqln@= K?Z@G@H?Yq@Q~J2?Ym LC@[Д?Y.?@enS?X=H@p7)?XhLy@ztU?X[H@i+?Wj )@ @B̃?Fgo@6?F5@t?EU@"Q?Eb@›?E @-b8?D@L@kf?D]g'3g@z?>eK @@Lv?>?c;@6?=b)@;?=`@yт?=:_Cx@oA?<^h@_ ?<^Q֟@1V?<5]ٺ@oL?;]@֭?=?;]m@ۘ?;0]~@(~yX?:^@f?:^F@`?:+_G@ ^/?9"@G?9| @\?9%( @(>/;?8Ϳt@2?8vWxp@=}j?8@GSF?7džM'@QR?7p#@[]?7] @f 9Q?6P.Z@pI?6ibh@z= ?6@ܾ\?5B@}?5c$@@?5 NP@}Ch?4' @\?4],@*?4j@@6t??3q@t<?3WQ|-@ֱۯ?2U @{K?2[@- ?2Q"@j4?1C@[~V?1Y@ ?1JJ@#e?0\@a;a?0-Ռ@(ڡ!?0DJ @2z?/f @=l?/{@GW?/>l@QZo?.>Q@[ x?.ۏo@fW?.8y4b@pN9?-@zْ?-$i<@y?-2Sd@y?,@D[?,@Ya?,,/ce@?+wG@Hf?+}m:@;8&?+& 3c?@x/?*ά=@ֶxq?*wL@k1?*?@1?)ȍK@oXR|?)q-ǟ@%@=1*Q?40;c@Gn?Ѓ@Qj?l'j@[ J\?R@f'?mc@peJ1??v @z{3?ڵ'@?vYŞ@)?@MfT?a@?Z=@ȥJ?+[@ E_?2H"@C2?6+@?Vd@(%j?wV}@2ķ*?zΤB@=:e? y@Gxu?YdM@Q<5?3e@[D?Qp@f0#?;Zs@pnm ?;@z$ ?|CR@è?@'c?@e?^?v@-?Ԕ>@Cw#?i2@??\@[^o?=@̙".?*nVO@™?!vez@bz?V*@R:?b+'|@?`@Bh?ĭ@ E?D襶@HO?I@<@!? @(P?&x@3a?L@=?r?gw@G|(?A_h@QAY? '@[?Irc@f5A3? @ps ?报}r@z(?+?@`>? >@,c?lrX@i? $@@KJ?䭧@?NBN @"2?;P@`U?xa@̝?0}D@_?ЯR@U`?qK##@V?'@?Z8c@G>.?޷e@Qw?X>@[~Z?PAq@f:?ݚ.@pw?:u,@z]e?e(7@?| @0?2 @n=p?۽{@h?^. <@}?@'PH?ڟ@d?@G2@̢\?@S?فY@s?"bE@[<?jZ@Z^?cQ@{?X@ A?ץ4!ݮ@Qj?E*]s@[})?k@(Ƶ?ևS@3 du?( L@=H;?ȿy@GK?iu@Qz? +@\3 ?ԪƬ@f>?K\@p|Zn?PeY@z?Ӎg@U?-V@5:c?vȖb@r=#?o.@y?Q@$n?Ѱ2P@+.?QWx@iZ ?M @̦z?ВɜJ+@G9?31@"9?}@p>?-@z?#3 FP@7s?_C@9I?>-@wwZ?xv@?,c@U?[+` @0V?b @m}?>OJ@̫,?@6d?"4ʛT@&?' @dvL8? G@?:@߶3?Qlp@ UC?}@Zo?<5x@?{Sh@(5VN?^D9Ǚ@3?Aq{@=Qu=?$(s@GY?Cn@Q̵$?C@\ T¥?΄b$@fG`e?l@p?*1h@z4G?|]ow@ԑt.?x}Y@|̼?vD:V@H?t CA@S?qV^@4Q?o/μڿ@rS?j,@̰39?fJسpK@ӂ?aB+l@+s ^?Zr=c@i?Q y}@ !@_@2*u@(t@3r@=V@G @QQ@\X@fL~@p1@zec@q"@CL@n@P.@Ѻ@9oy@w0 9@̴V@o@0>@m@Oy@@ &`@d/h@H'@(n@3/s@=Z2@GNj@Q~@\R>@fQ.@p9@zmI@  @G@N!@@C@>-,@{*@̹mtx@ 7@4@rL@B@5@ +,~@hN@le@( @3!Y@=_K@G눥@Qڋ1@\+o@fU @pkW<@z @@LJG@z@NJÓ@*aS@B@€jH@̾ ^@/@9Iͩ@vki@@)R@ /t@mi:@@(!L@3&H @=c\@GW@Q(D@\ȍ@fZh+c@p"@zը@Gn@PN-@@'5y@ @Gg@…@§@F@=\@{@&&@pg@ 4f'@r@s@(E2@3*ܾ@=hz~@G%=@Qa@\!d@f_I@p@zD@ @Uk@$l@S,@c@L:w@‰7@Cu@㿃@B]B@#@D@bM@ 9+@və@C%@(@3/N@=m"0@G5@QaӰ@\&<@fc@pB@zG@@@Z!@'R@ap@@P]@Ž@@@ 1i@G z@@`b@@@ =@{?L@߅ @(Η@34lW@=q @G_S@Qb@\*"@fh>خ@pvm@z~@!]@^y@^E@@,P@U=@’g@}\@O@K@]6g@'@@ BI@@. y@ kT@`a@@)$H_@3b?@=/@Gk@Rk*@\X@f_Rv@p@{9@O>ׁ@! @~@Y@E@^C@d@+$@<>t@yo@}/@@2{@ p]5:@~@@))=f@3f@=|@G@R@\]\i@fp)@p؜ @{s@`C@ ~Z@@B@)W]@3}@=ҝ&@H=d@RMݮq@\}L1@f@q3}@{D\<@n@@ @\@fW%V@q@{M`@Å6a@ÏH!@Úv@äD/l@î,@øV@x@:R7@x5@9@u@1 @n@ U@@'f@)e4%@3*@=ttq@H1@R[@\S|@f<@q@{R3~@ąG@ďse@Ě @ĤHM@ĮR@ĸ@*@?2o@| @rW5@@5>@sQA@ z@Ì@,1aL@)iѪ@3qH@=W@H"/@R`Pͣ@\kb@fې@q0R@{VМ:@Ņp9@ŏ׹@Ś!E@ŤMO@Ů@ŸȏQ@/D@Cύ@ׁo+\@t@@:Ng@w@ @.5r@0~@)nn@3fJ@= @H'M@RdU@\@f-ҡ@qpa@{[m @ƅ W@Ə֬l@ƚL,@ƤQܸ@Ʈzw@Ƹ,@ a@Hk@׆ I@ë@L0Z@>@|k@ +e@S%@5j@)s :q@30@=K!@H+|@Ri]<@\*@fD@q"j@{` +@Džɓ@ǏJ@ǚ@ǤVN@Ǯ)*@Ǹ5@iv@M 5@׊@I@@@C@(@ 'L@hp@:@)wW@3G@=瓣@H0/@Rn'z@\@fgb:@q'@{dI@ȅFE@ȏ@ȚΑ@Ȥ[&lP@ȮƵ@ȸfS@\@Q:@׏Eا@vg@ @H%]@ŧ?@ eD@@>,J@)|D @3@=U@H5$O@RrĘ@\d6`@f @q+@{iCl@Ʌ@ɏ䃢@ɚ"#@w@ɤ_Ê@ɮc'@ɸqO@@VB@דZ@т@"1@L{e@b%@ b@p@CA0@)@3|@=!@H9l@Rwa @\T@f@q0@@{m@ʅv@ʏ j@ʚ&^*@ʤd_@ʮEu@ʸߟ5@@,@Zʀ@טh@@@O@Q^K@6@ ̞ԗ@ ?#@G޻@)~Y@3.@>@@H>^z@R{(:@\@f>@q4ݭE@{r}K@˅@ˏ2P@˚+]{@ˤh@ˮ[@˸=@!ܞ@_|3@ם@ڼ#@\m>@U @T@ ;J@ې @L{ٕ@)wU@3ǻ@>[^@HB`@RE@\:@fځk@q9z@{wh@̅C@̏ZP@̚/@̤m7N@̮9@̸r@&yZ@dZ@ס@YAe@$@Z(@8p@ @x@QK{@)@3X2@> Ї@HG@R7@\^@gw@q><@{{j@ͅW$)@͏m@͚4 u@ͤr64@ͮ@͸v@+.@@hw@צV@_@!@_5@#@ u@n@Ui.@)U@3Pz@>9@HL4@RՅ@\tsD@g@qBZ@{SP@΅A@Ώߛ@Κ94)'@Τv@ήsd@θ3@/K@mS~@ת3>@@&3@cҸI@rV @ @=T@ZR@)$@3Ց`@>2 @HPѩ@Rq7@\@g .@qGQxC@{@υ@ϐ0N@Ϛ=Л@Ϥ{p@ϮY@ϸ @4Pi@qd@ׯP@/@*όp@ho@s@ {@!O[@^@)BS@3.@>}@HUn^@Re@\Ю@gNLi@qK)@{3@Ѕ-t@Аo4@КBm@Ф V@Ю @иM=@8ۋ@v%@״,@ c@/l"@m G@n@ L/.@%@cy@)+9@3@>k@HZ 9D@R@\K @gj@qP@{*@х'@ѐ j@њG *@Ѥt2@ѮJ@Ѹ[~@=>@{)@׸@i~I@4 @qe@IT@ L@*@h)4,@)@3ho@>!7@H^V@RG@\>B@g@qU(%@{N@҅ga @Ґ@ҚKHY@ҤG@Ү/@ҹd@B'@ƴ@׽fRo@@89@vFG@!@ @/&R@lŦ@)e@3^@>%+@HcEt@Ri@\ބ(@g$@qYėt@{d@Ӆ~@Ӑ@ӚPDf @Ӥ@Ӯ˄MW@ӹ #@FÈ@̈́cb@p"@ @=CWn@z-@>spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/grw_70d5824_stisnic_005.fits000066400000000000000000003542001511632712700311070ustar00rootroot00000000000000SIMPLE = T / BITPIX = 16 / NAXIS = 0 / EXTEND = T /FITS extensions present? TARGETID= 'GRW+70D5824' / DBTABLE = 'CRSPECTRUM' / AIRMASS = 0.00000 /mean airmass of the observation DESCRIP = 'Standard star flux with a new STIS calibration-------' / SOURCE = 'Flux scale of Bohlin & Gordon Review, in prep.' / USEAFTER= 'Jan 01 2000 00:00:00' / COMMENT = 'HST Flux scale is based on Rauch WD NLTE MODELS' / PEDIGREE= 'INFLIGHT 18/05/1997 31/12/2014' / HISTORY FILE WRITTEN BY stismrg.PRO ON 18-Feb-2014 14:10:30.00 HISTORY FILE WRITTEN BY STISREDUCE.PRO ON 18-Feb-2014 14:10:28.00 HISTORY coadd lst for G140L: HISTORY o3yx14hsm o3yx15qem o3yx16klm o45901010 o45910010 o45911010 o45912010 HISTORY o45913010 o45914010 o45915010 o45917010 o45940010 o45942010 o45943010 HISTORY o45944010 o45945010 o45946010 o45947010 o45948010 o45949010 o45950010 HISTORY o45951010 o45952010 o45953010 o5jj01010 o5jj02010 o5jj03010 o5jj99010 HISTORY o5jj05010 o5jj07010 o5jj08010 o5jj09010 o5jj10010 o5jj11010 o5jj12010 HISTORY o5jj13010 o5jj14010 o69s01010 o69s02010 o69s03010 o69s04010 o69s05010 HISTORY o69s06010 o69s07010 o69s08010 o69s09010 o69s12010 o6i801010 o6i802010 HISTORY o6i803010 o6i805010 o6i806010 o6i807010 o6i808010 o6i809010 o6i810010 HISTORY o6i812010 o8ia01010 o8ia02010 o8ia04010 o8ia05010 o8ia06010 o8v501010 HISTORY o8v502010 o8v503010 ob87n2010 ob8703010 ob8704010 ob8705010 obn6l1010 HISTORY obn6l2010 obn6l3010 obw3l1010 obw3l2010 obw3l3010 oc4kl1010 oc4kl2010 HISTORY oc4kl3010 ocetl1010 HISTORY EPOCH: 1997.172:11:08:00-2013.306:07:15:41 HISTORY SYS-ERROR is the broadband 1% INTERNAL repeatability of STIS fluxes. HISTORY IN ADDITION, THERE IS A SYSTEMATIC UNCERTAINTY IN THE ABS CALIB OF ~2-4%HISTORY Bohlin (2000,AJ,120,437). BOTH THE STAT-ERR AND SYS-ERR ARE 1-SIGMA.HISTORY G140L Net & Flux corr. for time,temp effects(Stys,etal. STIS ISR 2004-04HISTORY coadd lst for G230L: HISTORY o3yx11p2m o3yx12utm o3yx13tqm o3yx16kpm o45901020 o45910020 o45911020 HISTORY o45912020 o45913020 o45914020 o45915020 o45917020 o45940020 o45942020 HISTORY o45943020 o45944020 o45945020 o45946020 o45947020 o45948020 o45949020 HISTORY o45950020 o45951020 o45952020 o45953020 o5jj01020 o5jj02020 o5jj03020 HISTORY o5jj99020 o5jj05020 o5jj07020 o5jj08020 o5jj09020 o5jj10020 o5jj11020 HISTORY o5jj12020 o5jj13020 o5jj14020 o69s01020 o69s02020 o69s03020 o69s04020 HISTORY o69s05020 o69s06020 o69s07020 o69s08020 o69s09020 o69s12020 o6i801020 HISTORY o6i802020 o6i803020 o6i804020 o6i805020 o6i806020 o6i807020 o6i808020 HISTORY o6i809020 o6i810020 o6i812020 o8ia01020 o8ia02020 o8ia04020 o8ia05020 HISTORY o8ia06020 o8v501020 o8v502020 o8v503020 ob87n2020 ob8703020 ob8704020 HISTORY ob8705020 obn6l1020 obn6l2020 obn6l3020 obw3l1020 obw3l2020 obw3l3020 HISTORY oc4kl1020 oc4kl2020 oc4kl3020 ocetl1020 HISTORY EPOCH: 1997.149:22:51:50-2013.306:07:28:20 HISTORY G230L Net & Flux corr. for changes w/ time (Stys,etal. STIS ISR 2004-04)HISTORY MERGE POINT = 1678.0 HISTORY coadd lst for G430L: HISTORY o4sp03060 HISTORY EPOCH: 1998.141:13:38:43-1998.141:13:38:43 HISTORY G430L Net and Flux corr. for time & CTE loss (STIS ISRs 04-04 & 06-03). HISTORY MERGE POINT = 3065.0 HISTORY coadd lst for G750L: HISTORY o49x11010 o49x12010 HISTORY EPOCH: 1998.043:04:25:07-1998.058:01:57:37 HISTORY G750L Net and Flux corr. for time & CTE loss (STIS ISRs 04-04 & 06-03). HISTORY MERGE POINT = 5450.0 HISTORY file written by nicreduce.pro on 21-Feb-2014 16:14:41.00 HISTORY coadd lst and Temp(K) for grw+70d5824.g096: HISTORY na5307 HISTORY 75.12 HISTORY Corr. for non-linearity grw+70d5824 G096 Epoch: 2008-03-05 to 2008-03-0HISTORY coadd lst and Temp(K) for grw+70d5824.g141: HISTORY na5307 HISTORY 75.11 HISTORY Corr. for non-linearity grw+70d5824 G141 Epoch: 2008-03-05 to 2008-03-0HISTORY MERGE POINT (microns) = 1.169 HISTORY coadd lst and Temp(K) for grw+70d5824.g206: HISTORY na5307 HISTORY 75.11 HISTORY Corr. for non-linearity grw+70d5824 G206 Epoch: 2008-03-05 to 2008-03-0HISTORY MERGE POINT (microns) = 1.888 HISTORY HISTORY Units: Angstroms(A) and erg s-1 cm-2 A-1 HISTORY All wavelengths are in vacuum. HISTORY Written by MAKE_STIS_CALSPEC.pro 25-Feb-2014 HISTORY Sources for this spectrum: HISTORY ---------------- ---------------------- ---------- HISTORY WAVELENGTH RANGE SOURCE FILE HISTORY ---------------- ---------------------- ---------- HISTORY 1140 10155 STIS grw.mrg HISTORY 10155 24976 NICMOS grw+70d5824.mrg HISTORY NICMOS flux cal per Bohlin, Riess, & de Jong 2006, NICISR 2006-002 HISTORY CHANGES from previous version: HISTORY The HST flux scale is now ~0.6% fainter because of HISTORY the reconciliation of absolute visible and IR fluxes HISTORY (Bohlin 2014, AJ, in press) HISTORY For details see: HISTORY http://www.stsci.edu/hst/observatory/cdbs/calspec.html FILENAME= 'grw_70d5824_stisnic_005.fits' / WMIN = 1140.56 /Minumum Wavelength WMAX = 24976.7 /Maximum Wavelength END XTENSION= 'BINTABLE' /Written by IDL: Tue Feb 25 10:44:49 2014 BITPIX = 8 / NAXIS = 2 /Binary table NAXIS1 = 26 /Number of bytes per row NAXIS2 = 3991 /Number of rows PCOUNT = 0 /Random parameter count GCOUNT = 1 /Group count TFIELDS = 7 /Number of columns EXTNAME = 'SCI ' / EXTVER = 1 / INHERIT = T / TFORM1 = '1E ' /Real*4 (floating point) TTYPE1 = 'WAVELENGTH' /Label for column 1 TUNIT1 = 'ANGSTROMS' /Units of column 1 TDISP1 = 'G10.4 ' /Display format for column 1 TFORM2 = '1E ' /Real*4 (floating point) TTYPE2 = 'FLUX ' /Absolutely calibrated net spectrum TUNIT2 = 'FLAM ' /Units of column 2 TDISP2 = 'E12.4 ' /Display format for column 2 TFORM3 = '1E ' /Real*4 (floating point) TTYPE3 = 'STATERROR' /Statistical flux error TUNIT3 = 'FLAM ' /Units of column 3 TDISP3 = 'E12.4 ' /Display format for column 3 TFORM4 = '1E ' /Real*4 (floating point) TTYPE4 = 'SYSERROR' /Systematic flux error=0.01*FLAM TUNIT4 = 'FLAM ' /Units of column 4 TDISP4 = 'E12.4 ' /Display format for column 4 TFORM5 = '1E ' /Real*4 (floating point) TTYPE5 = 'FWHM ' /FWHM spectral resolution TUNIT5 = 'ANGSTROMS' /Units of column 5 TDISP5 = 'G6.2 ' /Display format for column 5 TFORM6 = '1I ' /Integer*2 (short integer) TTYPE6 = 'DATAQUAL' /Data quality: 1=good, 0=bad TUNIT6 = 'NONE ' /Units of column 6 TDISP6 = 'I2 ' /Display format for column 6 TFORM7 = '1E ' /Real*4 (floating point) TTYPE7 = 'TOTEXP ' /Total exposure time TUNIT7 = 'SEC ' /Units of column 7 TDISP7 = 'G10.2 ' /Display format for column 7 END D+ (z%(?FJD+(_x(Q?FJD>+Դ(K(?FJD+̰H(<|(.?FJDܠ+rr(- ( ?FJDR+](#,(`?FJD+(( ?FJD+ҶQ( l(?FJD'e+(w(P?FJD:+m'(?FJDL+ 'G(D?FJD_y+ر'ުI(?FJDr*+ܔ'%x(ns?FJD+בO'ȹ@(?FJD+'($?FJD>+՘'(?FJD+'U(9?FJDϡ+'(?FJDR++'(?FJD+ҹ'p(c?FJD+*'(p?FJDe+'^(?FJD-+5'(@?FJD?+r@'G(g?FJDRy+ڼ'(?FJDe*+'(L?FJDw+ѽ'(;?FJD+'|x(?FJD>+<'wy(?FJD+'t](?FJD +O'ov8(?FJDQ+Y'mo(?FJD+'h(u?FJD+ˬ'c؛(Z)?FJD e++,'a7L(&?FJD +ɴy'^D(X?FJD2+ƍm'Z#(~%?FJDEx+0%'W|({?FJDX)+E'R(x*?FJDj+'O!*(u?FJD}+ 'K=(t/g?FJD<+'I"f(s{?FJD+8'FD7(p?FJD+'A(lYR?FJDP+'?J(h?FJD+tR'=S(e?FJD+" '8(as@?FJDc+8>'4^(]?FJD+-'3`(\ ?FJD%+׍'/(Ye?FJD8v+z'-͌(W~?FJDK'+¸',a(T,p?FJD]+')4(Qj?FJDp+'&I(OU?FJD:+^'$(MF*?FJD+|'"(J2?FJD+)'(GE?FJDM+I'Vw(D?FJD+A'8"(A?FJD+'w(<?FJDa+$'!(79u?FJD+'#(4j ?FJD+ 'r(3Bm?FJD+t+'(1oC?FJD>%+,' g(.M?FJDP+Ys' i(+?FJDc+'((,?FJDv8+dZ'6($W}?FJD+zad'e( >U?FJD+sQ'M(!|?FJDJ+oYt&(/?FJD+j}& (*?FJDӬ+e D&J'(J?FJD]+_r3&O(i?FJD+Y&( ?FJD +R&(t>?FJDp+K&(a?FJD1!+D7&5@'?FJDC+?/&'?FJDV+9֖& 'x?FJDi4+3o& '-[?FJD{+.&&'}?FJD+'*&-'y?FJDG+!&R'$?FJD+&'+P?FJDƨ+&'y?FJDY+D&x'?FJD + H&B''?FJD+&'?FJDl*%1& '_|?FJD$*L|&'&?FJD6*x&9\'?FJDI~*Է&U'?FJD\/*W&̇'#?FJDn*&+'y ?FJD*BX&'k ?FJDB*& '_?FJD*N&'SF?FJD*$&~0'Fb?FJDT*h&v_':?FJD*o&m?'.ܷ?FJD*~&c2'#5?FJDg*m&[NL'?FJD*`&Tx'aU?FJD)*S&N 'v?FJD;&z?FJD)@%^%?FJDH).%.%~l?FJD) !G%*%e?FJDת)% %à?FJDZ)j%O%F?FJD (-%%D?FJD) ,%x%$?FJD"l)%"%?FJD5)+`%$*%\Q?FJDG)<4%%(?FJDZ~)O5%&c?FJDm/)_S%'&|?FJD)qy% &?FJD)|%2&(#?FJDA)%=&3Y5?FJD)%&AC?FJDʢ)W%,&Ot?FJDS)V% &^x?FJD)%Ϡ&pE?FJD)21%y&?FJDe)Ww&U&uk?FJD()&÷& ?FJD:)&Q&p?FJDMv* & &?FJD`'* &=&?FJDr*+&Z&?FJD*&&A$?FJD9*)%&2&X?FJD*4&\&49?FJD*@&#9&?FJDJ*L&'h'[?FJD*Yg&+w' B-?FJD*i5(&1W'@?FJD\*y&6'X?FJD *'&<}'+X?FJD-*:&A'7}?FJD@n*&GJ'E?FJDS*į&N'Uv?FJDe*&T'd~?FJDx*"&[>'u?FJD0*&a'%?FJD*&h'3?FJD*&o'i?FJDA*nl&w@'P?FJD+I&zy'/?FJD+ &Z'7?FJDS+&n'й?FJD+&n4'F?FJD +&D' ?FJD3d+$b&r'?FJDF++u&z'x,?FJDX+1sE&'"?FJDku+8&@':?FJD~&+>&I%'TL?FJD+E'&'0?FJD+J(&0(C?FJD7+P.&@(<~?FJD+U&͍(?FJDۘ+[K&s( +?FJDH+`&(i?FJD+el&)+(?FJD+i7&'(?FJD&Z+oC&(!-?FJD9 +s&+(#?FJDK+uO&}(;?FJD^k+{ &n ( ?FJDq+a&(%A?FJD+ߴ&((l?FJD|+m&l(,?FJD,+U&0W(.g?FJD+ &(1?FJD΍+&C(4?FJD>+d&j(6?FJD+A&p(8?FJD+&q(;}?FJDO+&<(=?FJD++Ш&(?f?FJD>+y&(@&?FJDQ`+U&(@n?FJDd+&(@?FJDv+}&-(?YT?FJDq+&!(>{?FJD!+G[&(A?FJD+ &<(G/j?FJD+&(I?FJD2+&/P(Ka?FJD+&I(J?FJD+7&|(I=%?FJD C+&1](E&(]?FJD+8 &1(_?FJD6+[&U(_?FJD+?&D(`P?FJD$+&<(a$?FJD7F+&(b6?FJDI+BE&w(b/?FJD\+{& q(c-?FJDoW+&4(c5?FJD+&#(c5?FJD+&x(bu?FJDg+&(b?FJD+&m(c?FJD+&(d?FJDx+A&,(es ?FJD(+&9(e?FJD+ &(fuM?FJD+,&(f?FJD*9+#&l/(g?FJD<+b&b(f?FJDO+&=(g?FJDbI++&1(gz(e8?|FJD+&(f ;?|FJD+&(g$?FJDu+w&Q(f?FJD%+&(g?FJD+l&(f?|FJD+A&9[(fy?|FJD4+>&վ(f?FJD+w&?L(f?FJD&+PJ&(e~?|FJD9C+E{&«(ew?|FJDK+PJ&‘(e~?FJD^+&(dѣ?|FJDqR+&¤X(d[?|FJD+n&O}(c?FJD+T{&>z(a?FJDb+&(_w?|FJD+&S([Y?|FJD+R& (V,V?FJDq+zw&(U?|FJD +=7&Q(T+m&`(a?FJDQ+W&Åe(b?|FJDd>+&ß9(b?|FJDv+) &L(b?FJD+ҕ&Ř(bU9?|FJDM+ l&j#(aW?|FJD+0&Åe(a =?FJD+&&K(b6?|FJD\+&j#(b'?|FJD +&ľ(b p?FJD+p&Ϳ(an?|FJD k+a&9(ah?|FJD+˒&N(a?|FJD1+0s&P(a?|FJDDz+j&(a|?FJDW*+0&Ų}(a =?|FJDi+T{&őH(a?|FJD|+u&N(`?|FJD8+&&(_x?|FJD+&Ĩ(^G?FJD+&(]W?|FJDG+`&(\?|FJD+U&[a(] c?|FJD+U&Ĩ(]݆?|FJDV+&܁(]x?|FJD+\x&u4(\R?|FJD$+)&U([?|FJD7d+"&E>([ƒ?|FJDJ+gG&(\'?|FJD\+3& (]su?|FJDos+&Mq(]S-?FJD#+U&(] c?|FJD+Ȏ&ƥ(])?|FJD+N&q(\?|FJD1+|&s(\?|FJD+i&7N(\C?|FJDߐ+\&s([W?|FJD@+&(Zu?|FJD+g&(ZK?|FJD+1&"(Y?|FJD*N+g&Ə(X?xFJD<+o&őH(X?|FJDO+d&~(Y?|FJDb\+(F?xFJDF=+|&1(Ez?|FJDX+&(E?|FJDk+D&+(F?xFJD~K+B&[(F?xFJD+&IW(G?xFJD+8)&(FI?xFJDX+&͍/(Fm?xFJD+U.&bX(E?xFJD۶+9&=t(E?xFJDe+-Z&S(Fs?|FJD+;&)(F?|FJD+l&ϫ(G?xFJD&s+p&!(G*?xFJD9"+;&Έ(G!?xFJDK+&J)(Go?xFJD^+J&p}(G}?xFJDq/+?,&Ј(G?xFJD+Q/&!(H?xFJD+E&ѻ(HY?xFJD<+&ѝ(I?xFJD+>&љ(Hr;?xFJDΚ+>&"e(Hr;?xFJDI+F.&&(IO?xFJD+ &$(H?xFJD+&C(GǙ?xFJDV+f&o(F=?xFJD,+)&"e(F?xFJD>+&A(Go?xFJDQc+x&Ԡ(HH?xFJDd+-(&a(G?xFJDv+ !&/(G?xFJDp+M&(F?xFJD+"&ԫ(F+?xFJD+t&(GA?xFJD}+&m(FMq?xFJD,+F&ԤW(EyM?xFJD+-&H(EY?xFJD+c&Un(E2?xFJD 9+&(E=Z?xFJD+&(D-?xFJD1+J_&յ[(E}?xFJDDF+j&=(E?xFJDV+&))(E4 ?xFJDi+z&/(D?xFJD|S+I&­(D?xFJD+*$&ձ(D ?xFJD+h&(C8?tFJD_+&Un(B6?tFJD+8&֥)(B?xFJDٽ+&Y(Bw'?xFJDl+<&'(B$$?xFJD+`&Y(AK?xFJD+kb&փ(A!?xFJD$y+`&ׂ(AK?xFJD7(+#S&B(At?xFJDI+kb&lc(A!?tFJD\+n&C(@ܶ?tFJDo4+N& (A=?xFJD+U&Q(Av?xFJD+&ي(@?xFJDA+&(@D?xFJD+g&"(@?xFJD̟+2&(@_?tFJDM+d_&y(@z?tFJD+ M&٤(@ /?xFJD+~&:(?Y?xFJDZ+&@(@h?xFJD* +o&آK(??xFJD<+ &}f(??tFJDOf+&ٕ(?pc?tFJDb+&e(?r?xFJDt+G&:(?'?xFJDs+&-(?pc?xFJD"+t&ڮ.(>?tFJD+&:(>^?tFJD+@&۝(? ?xFJD.+&ۋ(>W?xFJD+&(=Yo?tFJD+&ۚL(=p}?tFJD :+R&B(+&H(8-?tFJD+b#&1(7?tFJDʛ+z&w(7'?tFJDI+&"(6w?tFJD+&(70&ą(7Y?tFJDU+&[(7?tFJD(+p&(6R?xFJD:+?&ެ!(5?tFJDMa+&(6?tFJD`+G&߅(52?tFJDr+[!&(674?tFJDm+/&(5?xFJD+&i(6:?tFJD+&(5?tFJDy+&1(4`?tFJD'+ &33(4sB?tFJD+b&Q(4?tFJD+b&(4?tFJD3+~&(3Ԟ?xFJD+E&t,(3Y?tFJD-+&a(3Hl?tFJD@?+?&sZ(1(0N?tFJDE+2P&᫃(/?tFJDXx+6&5t(/x?tFJDk'+&=(/2?tFJD}+v&P(/I?tFJD+&l&:(/W?tFJD2+&9(/R?tFJD+&(/^M?tFJDȏ+&7(/ ?pFJD=+&ZY(.?tFJD+&㒂(.0=?tFJD+&`(.+*?tFJDI+&o(-_?tFJD%+B&[(.h?tFJD8+{I&zR(.I?tFJDKT+N&XL(. 0?pFJD^+Az&b(- ?tFJDp+&!(-?tFJD_+&栦(-7?tFJD+e&ŋ(-O0?tFJD+&(,/+*&~(,+?pFJDP+o&*(,5?tFJDc+o&k(,5?tFJDv:+(&-(+d ?pFJD+&(+"?tFJD+8&-(*G?tFJDE+&T(*6p?pFJD+&W(*_?pFJDӡ+LQ&'(*?tFJDP+ &(*K1?tFJD+f&0()?pFJD +=&K()C?tFJD[+&((r?tFJD1 +1S&?('7?pFJDC+m&('x?pFJDVe+&$<('W?tFJDi+&ܴ('H?tFJD{+:&N((R6?pFJDp+)&((g?tFJD+n&('?tFJD+&('O ?pFJD{+%&{X(' ?pFJD)+j&48(!o?pFJD@+{&&J(!&X(f?pFJD4s+x}&4l(y?pFJDG!+x5'+9(+?pFJDY+x5'͎(J_?pFJDl}+x\'\(?pFJD++w'W(?pFJD+w-`'(1?pFJD+v9'k(/?pFJD5+u'P(#?pFJD+va'ul(q?pFJDܑ+v'(?pFJD?+u'-(?h?pFJD+u'(2?pFJD+vV'(r#?pFJD'I+uf'("?pFJD9+u'5D(ܸ?pFJDL+vG'^B(h?pFJD_S+v('`(?pFJDr+w(U'(.K?pFJD+v'(?pFJD]+v'6(~?lFJD +uI'(?lFJD+s'(?pFJDf+rK'z(ND?pFJD+r'(a-?pFJD+q'm(H?pFJDp+p'x( K?pFJD+po'H(?pFJD,+p/'|(5?pFJD?z+oN's((?pFJDR(+p '}(?lFJDd+ql'OL(?lFJDw+q '.(@?pFJDŠ1+o̿'Y(x?pFJDœ+ox'R*(Y?pFJD¯+noD'f("?pFJD;+n.j'Z](o?pFJD+ly'/(X(?lFJD+k'(?lFJDD+m~''( z?pFJD +m'y(?pFJD+m'(?pFJD2N+lİ'\5(?pFJDD+lQe'J(>U?lFJDW+k'r(ȼ?lFJDjW+ko"' x(?pFJD}+j2' P(^4?pFJDÏ+k`' (M?pFJDâa+j|M' (?lFJDõ+i'Z(q?lFJDǼ+i?'(G?pFJDj+g'Z(>}?pFJD+h ' 2(n?lFJD+h' f@({\?lFJDs+hA' (?pFJD%!+g' }(y?pFJD7+g`' d(?lFJDJ|+e' L( ?lFJD]*+gz' (%?pFJDo+gO' cb(zp?pFJDĂ+g' D(S=?lFJDĕ3+g' O(N?lFJDħ+f' (?pFJDĺ+f' (Fa?pFJD=+eك' ?O(?lFJD+fN>' x~(eG?lFJD+e' (r?pFJDF+f'=(F?lFJD+e'4(?lFJD*+f'(Z?pFJD=O+g'wx(ץ?lFJDO+fB'_(?lFJDb+f2$'<(SJ?pFJDuX+d'(C?lFJDň+c'r(V)?lFJDŚ+bӝ'\(+F?pFJDŭa+d'{(|?lFJD+d*'(D?lFJDҼ+dH'((?pFJDj+dQ'X(?lFJD+b]'(B?lFJD +a '.(d?pFJDs+aO9''(2?lFJD0 +`u'(K?lFJDB+`e'e(I?lFJDU{+aA'2()?lFJDh)+a'jY(?pFJDz+aq'/(H?lFJDƍ+a'(z?lFJDƠ2+`_'(z?lFJDƲ+_'n (Y~?lFJDō+`'d(y?pFJD;+`'R(?lFJD+`'td(?lFJD+a"'?N(?lFJDC+aP'S(3?lFJD"+`X'o(k?lFJD5+_v'b[(-?lFJDHL+^'x~({5?pFJDZ+^Xu'(M?lFJDm+]'VC(?lFJDǀU+^a'36(R?lFJDǓ+_7'Ջ( ?lFJDǥ+^DG'(@.?lFJDǸ]+^9x'(9C?lFJD +^'^v(?lFJDݸ+^%'ԅ(u7?lFJDf+\'( A'?lFJD+]"''( ?lFJD+]TT'c( ?lFJD(n+]'|b( H?lFJD;+\Q'(  ?lFJDM+[d'( ~?lFJD`w+[k'( m?lFJDs$+Y'<;( q7?lFJDȅ+Z'\( ?lFJDȘ+Z' ( D?lFJDȫ-+ZT'-( w?lFJDȽ+Y'M>( 60?hFJDЇ+Y|'M( 1?lFJD5+YP'9\( ;?lFJD+Xe('( ~.?lFJD+WO'ca( +?lFJD=+W'( 1*?lFJD-+Z'WI( ?lFJD@+Xd'k( ?hFJDSE+X'n( >?lFJDe+U' >(?lFJDx+UU'Ŏ(,?lFJDɋN+URJ'(?lFJDɝ+V&#'|.( +?hFJDɰ+WV' `( >?lFJDV+WC' m( ?lFJD+X'!E( ?lFJD+W' e( ?lFJD^+W'!\( 2?hFJD +W0'!ȡ( W?lFJD +X9'"٤( b?lFJD3f+W'"2( K?hFJDF+Uŕ'"|(_?lFJDX+T'">(HT?lFJDkn+T'"A(P?hFJD~+R'!/(q?lFJDʐ+R'!*(B?lFJDʣv+R/'!ȡ(?hFJDʶ#+P'![(tK?lFJD+P^'"(Z?lFJD~+Qf'"l(-?hFJD++Q'"{(?lFJD+QL'#7(?lFJD+Q_R'#2(?hFJD&3+P|'# s(?lFJD8+Ph'#(a?lFJDK+Q'#20(8J?hFJD^;+Q'#(ή?hFJDp+Qp'$( ?lFJD˃+Q'$(E?lFJD˖C+Qu'%( ?hFJD˨+Q;'&8(7?hFJD˻+Qf'%s(-?lFJDK+P'%Y(?lFJD+O'#}(|?hFJD+O7\'#(O?hFJDR+NY'#n(T?lFJD+N7'%(Ja?lFJD++M'$͌([?hFJD>Z+K'$L(?hFJDQ+L1v'% (?lFJDc+K'$(vK?lFJDvb+KI'#n(?hFJD̉+K'$(We?hFJD̛+K'%'(dN?hFJD̮i+KQ'%*(zq?lFJD+K`'&E(J{?lFJD+K+'&u(E?hFJDq+Lp'&(י?hFJD+K'%(|?hFJD +J'%(G?hFJDx+K[s'&(& ?lFJD1&+K '%(?lFJDC+J''(a?hFJDV+K'''(?hFJDi-+K)''k(:?hFJD{+Kz''݉(\w?hFJD͎+J}''(?hFJD͡4+J!G'&(\?lFJDͳ+I'&(?lFJDƏ+I|D''(_?hFJD<+J]'((?hFJD+HM''(?hFJD+IÛ'(2d(!?hFJDC+Ir.'(v(?hFJD#+H '(k(U?hFJD6+Gl'('C?hFJDIJ+H]z')2(;?hFJD[+H')q(q?lFJDn+G')S'?lFJD΁R+G$')0'?hFJDΓ+GVx')S''?hFJDΦ+Gl'* y'?hFJDιY+H'*( ?hFJD+F')'!?hFJD޳+I%'*~(?hFJD`+Gٝ'*'?hFJD +GR'*-'?hFJD+EH')0'??hFJD)g+G$'+@'o?hFJD<+F8'+,>'[)?hFJDN+F.'*;'?hFJDan+C'*~'?hFJDt+D̂'+R' ?hFJDφ+E'+'_]?hFJDϙu+FN'+1'Ԁ?hFJDϬ"+E'+ '?hFJDϾ+E?','y?hFJD|+E','P?hFJD)+D50',Z'%\?hFJD+C',9'^"?hFJD +D?','(?hFJD0+D',\'?hFJD.+D',vp'A?hFJDA+C'-U'j ?hFJDT7+EE'/>{'?hFJDf+E'.'L?hFJDy+Es'.'?hFJDЌ>+D='-'/?hFJDО+C'-='E;?hFJDб+B'-S' ?dFJDD+?y'-'?dFJD+;'*'uL?hFJD+?j'-?'?hFJDK+BJz'.y'??hFJD+By'/'.?hFJD!+B8v'.'0?hFJD4R+@'/G'?hFJDF+Al'/'+?hFJDY+B'/w' ?hFJDlY+AX'.y'?dFJD+?9'.`'?dFJDё+?}'. '?hFJDѤ_+>='.wB'?hFJDѷ +>ڧ'.'K?FJD+@&'@<>FD++?&Fw'@EFDF+?e&V'@EFDw+>&ߧ'r@EFDҩg+>&ܫO''@EFD+>.o&ٯ'n@EFD :+>2 &'s?@EFD=+=&j"')@EFDo +<&'@EFDӠv+<[&ґ'@EFD+< j&'T@EFDJ+:&\'<@EFD4+:>&*d'y@EFDf+:?&'f!@EFDԗ+9W &ז'<7@EFD+8BX&%' @EFD\+8 &'@EFD++8U&@'@EFD]1+8M& w'@EFDՎ+86&/'\@EFD+7&'_@EFDp+6*&g',@EFD"+5a1&'*}@EFDTF+4&Q'^@EFDօ+4Q&IX'@EFDַ+4`&%'H@EFD+3le&̅'v@EFD+2hD&'\@EFDK\+1{2&jX'- @EFD|+1&\'@EFD׮3+1$&B`'_@EFDߞ+0&]'lH@EFD +0o&'i@EFDBu+0&N'd@EFDs+/t&L'B@EFDإL+0j&K'h@EFDָ+/^&V '༡@EFD#+/ &'@EFD9+.&'߲@EFDj+.H&'F@EFDٜg+-A&j'ދ@EFD+-E7&J'<@EFD?+-P&b'@EFD0+,!& '*@EFDb+,P8&''܏@EFDړ++O&.'ۡ@EFD++-&v'@EFD]+*&{'@EFD'+*I&'ټ@EFDY6+)&Y')@EFDۊ+)&,'@EFDۼ+(|&'@EFD|+'&'ְ;@EFD+'&/')@EFDPV+'7A&Y' I@EFD܁+&&:'T@EFDܳ0+%&,'uM@EFD+%?&4';2@EFD +%`& 'Ӯ@EFDGx+%Bt&Ϛ'ӈC@EFDx+%&ګ'J@EFDݪS+%&'f@EFD+$&&g'Ҟ@EFD .+$)n&' @EFD>+$e&l'n@EFDp +$e&'n@EFDޡx+#k&W'ь@EFD+#Fs&'@EFDT+"sR&''@EFD5+!m&'@EFDg0+!D&'lc@EFDߘ+ &'͢e@EFD + &C 'ک@EFD{+ &b'͑@EFD,+n&('@EFD^X+&u"'V@EFD+&'5&@EFD5+Z&'3@EFD+&P'%@EFD$+U&T'ʪd@EFDU+&'Pi@EFD+ &93'LP@EFD`+&''@EFD+n&y';@EFD>+ &'3@EFDL+(&d'jq@EFD~+j&ӟ'@EFD⯌+&8'ƈx@EFD+&̒'2@EFDk+f&~')x@EFDC+_&H'@EFDuK+&'İ<@EFD㦺+:&'"1@EFD*+J&'@EFD +8&'m@EFD; +Z&"_'Y@EFDlz+S&~Z'1@EFD+l&|'@EFD[+I&|uF'@EFD+P&{'@EFD2;+&y'@EFDc+o&x\'@EFD+l&v'@EFDƍ+&wr'c@EFD+G&uҳ'y@EFD)n+<&tD@'!@EFDZ+&r'w@EFDP+&sK'@EFD+<&s^ 'el@EFD2+b&r5'Q!@EFD +6&p8H'@EFDR+&ld'>@EFD烅+&lv'cE@EFD+=&k',@EFDh+"&j['5@EFD+>&i.'@EFDIK+[&hN'@EFDz+l:&g'@EFD/+N(&eJ'&@EFDݠ+ &d'@EFD+ W&dJ'>@EFD@+5&e'>@EFDq+ &cz('@EFDh+Y&cE'5\@EFD+ &a':|@EFDM+ B&`{'~@EFD7+ ?&``'̺@EFDi1+ L1&_/x'h@EFDꚤ+ P&__n'@EFD+ &]*'@EFD+ &]\'i@EFD.+ c&\'k@EFD`n+ >&[s'@EFD+ K$&Z'K@EFDT+ &Y' #@EFD+ u!&XA'9@EFD&:+ &&W';@EFDW+ &W|'5@EFD + Y&VV'J@EFD캓+&U'G@EFD+&T'@EFDz+h&SV'u@EFDN+&S'@EFDa+&S'pd@EFD+*&Q'@EFDH+O&PT}'@EFD+*&P~'@EFDF0+n&P# '@EFDw+~&P}''@EFD+6&OTs'@EFDڌ+&N'$@EFD +&M'&L@EFD=t+&L]'@EFDn+&K_'@EFD]+&R&J '&@EFD+b!&J 's]@EFDF+K&I'{A@EFD4+c &I\',@EFDf/+:+&H.'@EFD+I&G-'/@EFD+B&F]'@EFD+aF&Da';@EFD,+&E'@EFD]w+<&EF'l1@EFD+R$&D'@EFDa+!&Cj'2@EFD+ȃ&C'ײ@EFD#L+C&B'@EFDT+&A~'U@EFD7*&AiF'@EFD*&@A'q@EFD"*&A0'@EFD*E&?'@EFDL *)&=''9@EFD}*m&=3'@EFD*n&&6'@EFD* &5'G@EFD1*&5'f%@EFDcs*/&4lo'y@EFD*&4'&@EFDa*Y&25'/@EFD*&&3'A@EFD)P*&2_'6@EFDZ*&2'@EFD?*&2^U'@EFD*G&0^'k_@EFD-*&0@'1D@EFD *'&.j'@EFDR*0&.GL'Z\@EFD*&.:'M@EFD *e&-.'#@EFD*E&,f'ګ@EFD*Vp&+'A@EFDIt*3&+sr'+m@EFDz*q&*'@EFDd*Z=&*L''@EFD*&)'E@EFDU*&)V'5)@EFD@*!&('@EFDrF*U&''_@EFD*?&''@EFD7*Y0&&'W@EFD*&'('i@EFD8)*W&%'R@EFDi*2&%'w@EFD*3&%,]'B@EFD̓*f&$W't@EFD *W&$ 'kE@EFD/*&"'qQ@EFD`*L&"*'1@EFDx*h&!3'@EFD*|&!H':@EFDk*k&!EJ'@EFD&*{&'@EFDX^*⾷& .`'@EFD*f&'@EFDQ*&/'@EFD*f&z'^@EFDE*_& 'z@EFDO*:&'W0@EFD9*ߙ&nh'P@EFD*&<'@EFD-*Y&B'@EFD*IS&'Ch@EFDG"*&"S'@EFDx*0L&'@EFD*(&i'@EFDۑ*k&`'m@EFE*5& '@EFEC*,^&r'E[@EFE8*ڀ&'י@EFEP*& '^@EFEi{*&'k@EFE9*3&'!@EFE*Î&̇'@EFE*&c' @EFEr*p&}~'?@EFE/*S&' @EFE*.&'@EFE*R&w'z@EFE/h*&&'@EFEH&*Է]&!'#o@EFE`*p&'=@EFEy*Ԍ!&'@EFE`*Өn&'v @EFE*Ӏ&z'\5@EFE*1V&VC'ͨ@EFEܚ*ӄf&'^@EFEX*;& 'v@EFE*Ox& 'k@EFE&*Ox& 'k@EFE?*ii& o'@EFEXP*& '-@EFEq*Ђ& 'rs@EFE*j& '*@EFE* & h'@EFEI*`& !'@EFE*9&'@EFE*ͺ&'@EFE*&;'FG@EFEC*P@& 'f@EFE7*}&y'C@EFEO*/&O'QY@EFEh*Y&'@EFE>*bv&X'`@EFE*4X&d'@EFE*&'~"@EFEz*&l'3@EFE8*u&f'@EFE*6-&J'jZ@EFE*<&2'Y@EFE.u*V&R'd@EFEG4*&_^'@EFE_*B&Q'*M@EFEx*/\&.'P@EFEq*!&'Ɛ@EFE0*&.'~v@EFE*&au'}==@EFEۮ*!W&au'}Q@EFEm*ŨI&F('}]@EFE -*4w%'{$p@EFE%*ķ%'{M@EFE>*%dc'zE@EFEWk*&%<'{@EFEp**â%'zj @EFE*I%'y@EFE*Q%'xy@EFEh*/%@'x\e@EFE(*%$'yH@EFE*u/%/'w<@EFE*<%t`'wXK@FFEg*m%N'w@EFE6&*%0h'v4@EFEN*@%R'vz@FFEg*%6'up@FFEf* %z2'u@EFE%*O%'u)[@EFE*%('tg@FFEʥ*h%V'sl@FFEe*%'r@FFE%*%%'q0@FFE*:[%'p@FFE-*%'p@FFEFe*%'qY@FFE_%*j%?'p@FFEw*Ɖ%:'o@FFE*%~7'n@FFEf*|%_'m|@FFE&*0%V^'m@FFE*gl%'n@FFE*Ē%'mi@FFE g*%Q*'l(@FFE%'*%p''l\@FFE=*%)'k@FFEV*ZQ%:'j @FFEoi*~%0'kHO@FFE)*%&4'j$@FFE*5%7"'i:@FFE*t%'hCd@FFEk*K%{'h@FFE,*%'i_@FFE *w%:'hG@FFE *n\%'f@FFE 5n*:z%ぉ'f@@FFE N/*%%X'g@FFE f*"%cS'g>@FFE *s%/'f@FFE r*c9%'dV @FFE 3*%e'd@FFE *%'f!^@FFE *c%'ee@FFE v*%l'c@FFE 7*%'b@F FE ,*;B%'a@F FE E*%)'b@FFE ^{*:X%'b @FFE w<*"%ڈ'at,@F FE *%F'`@F FE *h%'a@@FFE *x%U'`@F FE B*Nc% '_@F FE *1 %h ']h@F FE *1 %Pn']h@F FE $*C%0']d@F FE =H*%׎T'\@FFE V *%`']%@F FE n*0%']\f@F FE *k%ע'\@FFE O*%'[j@F FE *|%-'[@F FE *'W%­'[@FFE *%\'ZG@FFE V*%{'Z@FFE *n%Թ'Z'@FFE 4*%Ӯ'YW@FFE M*r%ҿ'X@FFE f^*X%g'X@FFE  *Ȟ%: 'X @FFE *%\'W @FFE *%Ҧy'Vڨ@FFE f*.%o'Vϗ@FFE )*%9'U?@FFE *G%'V@FFE *%^'Uf@FFE ,p* %o'UI@FFE E2*ޠ%x'U@FFE ]*%2'U+@FFE v*%'T@FFE y* %Πh'R@FFE <*%'S$@FFE *C%|'S@FFE *X%B'R]m@FFE *%t'Q@FFE F*T$%Nb'Q@FFE$ *;%w'P.@FFE<*܆%>'Pvn@FFEU*p%̕'Pi@FFEnQ*%'Ow@FFE*%t'O:@FFE*%'O@FFE*%'N9@FFE]*-%q'NN@FFE *%ٷ'M|@FFE*$s%ȷ'Lt@FFE*%.'L@FFE4i*B%jB'M"1@FFEM,*%Dz'LE@FFEe*N%ƣ'KX@FFE~**%2'J3i@FFEv*%ſ'Ik@FFE9*u%'I@FFE*%'I>@FFE*}%Ĵ'J8@FFE*%-'HH@FFEG*UP%~'Ib@FFE, *%ì'H@FFED*u%ù'HE @FFE]*#%C'G@FFEvU*Y%Xc'GS@FFE*%!'G@FFE*[x%'F{@F FE*%I'EP@FFEc*y%'E$r@FFE'*vS%UZ'E-@F FE *4%'EaR@F FE#*e%#'DY@F FEǚ@F$FE~i*=%c'<@F$FE-*%';@F FE*%A%'@F4FEL*T%B'*@F4FEey*%'*@F4FE~?*%^'*@F4FE*kM%'*@F8FE*3%AE'*~@F8FEȔ*/% ')ϙ@F4FEZ*G%t$'(@F4FE!*e%'(0@F8FE*%|'(f @F8FE+*|%8'(mk@F8FEDv*CW%L'(F@F8FE]=*%C\''gz@F8FEv*2%y''\h@F8FE*%''#9@F8FE*%'&%@F8FEY*}`%-'%3@F8FE *a%'% @F<FE*%}'$@F<FE *l%'$b@F8FE#v*P-%#'$=@F<FE<>*-%jm'$|b@F<FEU*p%'$@F8FEm*~K%'$x@F<FE*l%pU'$b@F<FE[*T%E'$C3@F<FE#*.% '#5@F<FE*~%|'"@F<FE*~[%0'##n@F<FEy*~k%I/'#@F<FEA*}m%S'!@F@FE4 *|p"%e'!r@F@FEL*| A%'!N@F<FEe*{2%L'! @F<FE~`*{d%' @F@FE(*{$%' O@F@FE*ya%*'Թ@F@FEȸ*xT%U' @F@FE*wE(%Z'@@F@FEH*x%20'%{@F@FE*y`%%p'@F@FE+*xKr%'@F@FED*w%8'td@F@FE]h*wVs%ӽ'K@F@FEv0*v%-' @F@FE*v %('%@FDFE*v%'@FDFE*vG%'h@F@FEQ*uG%'ca@FDFE*ui%R'^@FDFE *s%''~@FDFE#*sK%'@FDFE}@FhFE(-*K%'S@FdFE(F*Ju%.'@FdFE(_y*I%7['Eu@FhFE(xF*Iˈ%L'&@FhFE(*I%t'/S@FhFE(*I%'k@FdFE(¬*H\%g['|d@FdFE(y*HQ%'4r@FhFE(F*GW0%7[&'@FhFE) *F%D&]@FhFE)%*Fy@%8& @FhFE)>*F<%v&]@FlFE)W{*F"%I&)@FlFE)pH*F%S&y@FhFE)*E#%&@FhFE)*D%^l&@FhFE)*Dx3%&{#@FlFE)}*DR%Pq&@FlFE)J*C%8 &T@FhFE**DR%&@FlFE**D%&ȝ@FlFE*6*D%&m&$@FlFE*O*DB%o&@FlFE*hM*C %0&G@FlFE**AU%}i&ʪ@FlFE**A%&X&@FlFE**@%&~@FpFE*˄*@̒%P&i@FlFE*Q*@%6&@FlFE**@mt%&N@FpFE+*?U%!&@FpFE+.*>%~&L@FpFE+G*>%G&5s@FpFE+`W*>I%&@FlFE+y$*=%<&@FlFE+*=T%f&X@FpFE+*<#L%&@FpFE+Î*:%&@FtFE+]*:V!%&@FtFE++*;+k%Z&@FpFE, *;=%-&t@FpFE,&*;j% &O@FpFE,?*;b.%)&@FpFE,Xc*;%9&A"@FtFE,q2*<% &~k@FtFE,*%&@FxFE-7*:J%5&s@FtFE-Pt*9%D&@FtFE-iC*9>%a&@FxFE-*9>%n&@FtFE-*8F%c&ߒ@FtFE-*7%ˋ&t@FxFE-~*8C%&@FxFE-M*7%&=>@FxFE-*7]3%&괼@FxFE.*6%&@FxFE./*7`%&Q@FxFE.H*71%&}e@FxFE.aX*5&% N&b@FxFE.z'*3 %d&@@FxFE.*3d%x5&e@FxFE.*2t%& @FxFE.Ĕ*/(%&33@FxFE.c*/J%J&_y@F|FE.3*0%&vm@F|FE/*3D %0&u@FxFE/'*2)%& A@F|FE/@*0:%D&!@F|FE/Yp*2%ȭ&Ĺ@F|FE/r@*3r(%s&@F|FE/*37%h& @F|FE/*3u %0&崈@F|FE/*2%=&Q@F|FE/~*29%&؛@F|FE/M*1%e&^@F|FE0*1%p!&@FFE0*1y%oZ&+5@FFE08*1q%& #@F|FE0Q*3D %&u@F|FE0j\*2)%&@FFE0,*1v%(&'@FFE0*1:X%& @FFE0*0w%=&2@FFE0͜*0 %^l&V@FFE0l*0Bw%&@FFE0<*/d%&@FFE1 */"<%EU&+@FFE10*.%'&`@FFE1I*-Lk%D&u@FFE1b}*-Z%j:&@FFE1{M*-)%&ݦ/@FFE1*-]%D&v9@FFE1*,0%n&@FFE1ž*,%1t&c@FFE1ގ*- %&9@FFE1_*,l%&M@FFE2/*+O% A&@FFE2)*+.%j:&@FFE2A**%EU&ڱ@FFE2Z*+71%v&'@FFE2sq*+k%j&jV@FFE2B*+V%B&P@FFE2*+%I&@FFE2**~% &C0@FFE2ִ**B3%G&U@FFE2**%D&ov@FFE3V*+2%&5@FFE3!'*)%S&Z@FFE39*'%&ֳ@FFE3R*' %&@FFE3k*(8%*&R@FFE3j*(%&"@FFE3;*'S%k&@FFE3 *'%M~&q@FFE3*'S%&ֻL@FFE3*'%&֒@FFE4*&d%R&!@FFE4Q*&n7%&@FFE42#*&%&Un@FFE4J*&N%2;&_@FFE4c*% %'&1@FFE4|*%K%h&ӓT@FFE4h*$W%Y&@FFE4:*$V%&Y@FFE4 *$%&@FFE4*$H%&/@FFE4*$'%4|&@FFE5*#%"&^@FFE5*Q*#%ƕ&qN@FFE5C#*$%ν&Ҫ@FFE5[*$f% ?&O@FFE5t*#%A&^@FFE5*#-:%A&ݻ@FFE5j*"Y%/\&ЛS@FFE5<*"%<&Ќ@FFE5*"Z%/\&a@FFE5*"F%&϶@FFE6 *")%&ϑ@FFE6"*"!-%0$&φ@FFE6;V*!=y%>&c*@FFE6T(*!N%&yM@FFE6l*!% &@FFE6*!#%;?&A@FFE6* eM%y&Nw@FFE6q* z%&@FFE6C* .%&^@FFE6*%L&˭@FFE7*P%B&f@FFE7*%d&@FFE73*Gm%&ʘ@FFE7L_*"%]&D@FFE7e2*%&ɬ@FFE7~*%&@FFE7*p%6&Ǩ=@FFE7*Ĭ%+&b$@FFE7|*B%&"@FFE7O*%9&Ȕ[@FFE7"*%7&%@FFE8*23% &V@FFE8+*IB%& @FFE8D*B%B&"@FFE8]m*%K&xG@FFE8v@*%dž&Ɓ@FFE8*D%=&T@FFE8*.%&ƢK@FFE8*%&B_@FFE8ٌ*Qa% '&Α@FFE8_*%&B_@FFE9 2*%[& @FFE9$*6%X;&@FFE9<*T%d&8@FFE9U*%t&@FFE9n*'%*&@FFE9R*%P&ă@FFE9&*U%o&Á@FFE9*8%@&Š@FFE9*0%&@FFE9*8%&@FFE:s*e%K&¤X@FFE:G*n%&վ@FFE:5* %&)@FFE:M*T%|&l/@FFE:f*% &g@FFE:*%l[&F@FFE:i*%&@FFE:=*%&@FFE:* %&7@FFE:*C:%:&V @FFE:*Q%K1&h@FFE;*` %p&z@FFE;-a*7%]&GK@FFE;F5*%&J)@FFE;_ *.%&@FFE;w* %U&ǚ@FFE;*;%&[,@FFE;*%V&@FFE;Y*$%&X@FFE;-*0[%J&f@FFE;*L%&@FFE< *<%A&!@FFE<%*u%f&g@FFE<>*%ѻ&@FFEI*3% &7@FFE>/*B%^U&@FFE>G*%&@FFE>`* %e&@FFE>y*ڬ%8&u@FFE>s*%&~9@FFE>H*-%%&@FFE>*%C&z@FFE>* [S%&@FFE>* R%.&@FFE?* %R&@FFE?'s* %n&>@FFE?@I* %a& @FFE?Y* @%&8@FFE?q* U%&@FFE?* @U%r&=@9DFE?E* ɢ&ҍc&^@@CE?4*&h&@CE?"* &^&@CE@$* &\&@CE@O* &N&@CE@{* E&z&@CE@* *&˗n&m@CE@*8&&]n@CE@*'&A&GL@CEA+*+&&3j@CEAW*&U&@CEA*&&(@CEAy* <&4o&@CEAh*ħ&%&9'@CEBX* Q&HQ&T@CEB3G*{&>z&L7@CEB_7*&V&@CEB'*&tb&Q@CEB*&B&o@CEB*&&0@CEC*9@&&\@CEC:*[&J&a@CECf*B&&Et@CEC*"1&&@CEC*&&@CEC*&~n&(@CED* /&&M @CEDB*{&&L7@CEDn{*&X&@CEDl*&J&@CED]*O&,q&(@CEDN*&n&*1@CEE@)+{&&Y@CEEJ1*~& &;@CEEv"*t&0&"@CEE)&6&@CEE*4&F&@CEE*&&@CEF%)&&}h@CEFQ)p&&3@CEF}*R&q&6@CEF)B&&&@CEFկ)&&&@CEG)&&@CEG-)&#&>@CEGY)D&&i@CEGx)H&S&$@CEGj)&:&@CEG])&p&H@CEH O)W&<&)@CEH5B)&k&>|@CEHa5))b&+&v@CEH')N&k&a@CEH)Z&z&=@CEH )G&&ca@CEI)&&@CEI<)&&$u@CEIh)C&z& @CEI)&*&;i@CEI)A&&@CEI)V&&@CEJ)&b&S@CEJD)&&@CEJp)9&J&9\@CEJ)&\&@CEJȂ)&P&IY@CEJu)L&&@CEK i)%/&&U=@CEKL])R&Ǜ&]@CEKxQ)饑&&@CEKE);&_|&@CEK9)&F{&@CEK.)&Y&^@CEL(") &<&n@CELT)&36&@CEL )&&A'@CEL)E&~&@CEL),&&;5@CEM)燲&{&-@CEM/)j&&p@CEM[)&_&L@CEM)&WI&h@CEM)F&q&}@CEM߱)4&f &@CEN )j&~;& @CEN7)4&r&i@CENc)&z&@CEN):V&i&9@CEN{)T9&&9@CENp)1*&&@CEOf)&i&D@CEO?[)`&&W@CEOkQ)a&&@CEOF)ܸ&bp&B@CEO<)a&&>@CEO2)&S@CER)& &Wt@CERڎ)&&@CES)&g&G@CES2|)f#&aU&K@CES^s)ҳo&%&=@CESj)w&O&@CESb)&u&6@@CESY)&j&&@CETP)x&}&8@CET:H)X&Y&@CETf?)$&\&%@CET6)Ρ1&g&>4@CET.)0&&=@CET&);&&E@CEU)e&&~@CEUB) &d&1@CEUn )X&P&@CEU)&&&.@CEU)&~J&@CEU)ɳR&~L&@CEV) &{=(&|9@CEVI)&&J@CEVu)ps&|&@CEV)&|F&&x@CEV)Ȩ&z&l(@CEV)+S&|N+&@CEW%)&}oj&@CEWQ)Ȝ&y&di@CEW})&wr&|D@CEW)8&y&@CEW՟)ßt&vձ&ze@CEX)©&uǡ&y+^@CEX-)8&tj&yr3@CEXY)F4&s&wd@CEX)&tFv&x&)@CEX{)Đ&t&{@CEXt)&sH&yv@CEY l)m?&t^&{m@CEY5e)F&rU&yT@CEYa^)A}&rv&ym@CEYX)4b&o3&v@CEYQ)&q1&v@CEYJ)&o%&rN@CEZC)7&n&sz@CEZ=<)&o8&tb@CEZi6)2&ny&r,@CEZ/)[^&l&mA@CEZ()|&n*.&o @CEZ")&l!&m@CE[)&lZ&m?@CE[E)&nl&r@CE[q)&iQ&hz@CE[)ǣ&l&p[@CE[)k&j,&lw@CE[)&h9n&l9@CE\ );&h&n`@CE\L)u&g&mc@CE\x))&h 5&o@CE\)M&g<&o@CE\)=J&g&o@CE\)L&c&i@CE]()]&f&mC@CE]T)=&e&m@CE])d&dz&i8@CE])&bZc&f)@CE]غ)P&a&e4@CE^)P&b[&h@CE^0)&bRF&h @CE^\)&bc&hٌ@CE^)+ &c&jt@CE^)&af&g@CE^)&aw &fJQ@CE_ )l &_[&] @CE_8)[[&]@&_-A@CE_d)&]W&bJ(@CE_)o&]R&c@CE_~)&]&c@CE_x)&]Ѹ&d$@CE`s)kr&[&`@CE`@n)t&ZF&^U@CE`li)&\84&b@CE`d)&\T>&cJ@CE`_)W&WE&Y@CE`Z)\&[He&b @CEaU)0&X&]\f@CEaHP)&W&ZT)@CEatK)z&VQ&[~B@CEaF)5&Zd&a@CEaA)&V&\@CEa=)&Y_0&`=@CEb$8)&V@&Z @CEbP3)&Tf&Y2@CEb|/)!&V=&\T>@CEb*)}&T(&Z@CEb%)&QO]&U&5@CEc!)&Rճ&W @@CEc,)'&S&[@CEcX)&Pf&S@CEc)&QW{&TzH@CEc)b&Qa&V@@CEc )&P&Wٗ@CEd)&Qʗ&Zq@CEd4)&OA&W,@CEd_)&N-&U:@CEd)&NJ&UoB@CEd)u"&O0K&U@CEd)&N&Uqx@CEe)&M5`&Vk@CEe;)&L&U@CEeg)e%&JA&Q%N@CEe).&K&UA@CEe)p&J&SK@CEe)&H&PJ)@CEf)Qd&J&T@CEfC)&H28&P@CEfo)O0&I&RP@CEf)q&G&P@CEf)&F@&Po @CEf)8&D&K@CEg)&E_&N@CEgK)\&E(&OҠ@CEgw)\&B5&K@CEg)u&B2&K@CEgϰ)>&A_&Lt@CEg){&B&OJ@CEh')p&@K&K@CEhS)&AJI&LX@CEh)&A}2&N.@CEh)ӏ&>RG&J@CEhכ)2&=&I^@CEi)&>&J2@CEi/)J&@CEm{G)t&)i&< @CEmD)79&(L7&=S@CEmA)&(&>#@CEm?)&(&?@CEn+<)v&'&=q:@CEnW9)&*u&B!@CEn7)&(҂&BQ@CEn4)~!&&&>@CEn1)P&&c&;@CEo/)ed&%U&<@CEo3,)y&"ц&9@CEo_))\&! &53@CEo')E& &4y@CEo$)Z&!&6@CEo"),(&x&2$ @CEp)& &8R@CEp;)gT& &7@CEpg)& &:f @CEp)&!#Y&;@CEp)J?&!9&=ϭ@CEp)ʿ&!R&?@CEq)&"&C @CEqC)&!C&AF@CEqo )&&!)&BAx@CEq ) &=&>@CEq)!&&>P@CEq)&&:@CEr)&&6@CErK)э&k&4?l@CErv)&h&.@CEr)3&&,[#@CEr)s&ԅ&$Ψ@CEr)z#&F& @CEs&)p& &@CEsR)va& &@CEs~);&_&#YK@CEs)3|&`&'@CEs)|&d&/@CEt)L&6 &2@CEt.)ֽ&}&4F@CEtZ)&B&< @CEt)&&)>&];&Bd'@CEvj)0&%&@>p@CEv)&&;@CEv)&Z&3-@CEv)k&b&1@CEw)& &+|@CEwF)}|0&&";@CEwr)|& &!@CEw)r&[&@@CEwʺ)b}&&5@CEw)YF%& l@CEx")Oi%&@CExN)IMI%q&M@CExz)VR%l& Zr@CEx)b?Q&!&]@CExҮ)h&&@CEx)v&6&@CEy*)|&6&!H@CEyV)&&)X@CEy)X&g&*,@CEy)& B&2@CEyڢ)& T&5T @CEz))&=#&:@CEz2)3=&&Wr@CE)U&^&?@CE+)D&&A@CEA)&,&C@CEW )&4&B@CEm )v&&C@CE )& &F9@CE )& *&D @CE),&X&B@CE)K& &E~@CE)& &G"@CE)& &Gy@CE)s&ҭ&F@CE)& H&H@CE3)&t&Fx@CEH)&6&E@CE^)*.&4&Fd@CEt):&ݿ&G?@CE)Mf&'&E@CE)k&&H8 @CE)*&;`&D@CE)?&$&D(@CE)t&ʐ&DlY@CE)2&*g&D;@CE)&&D@CE$)y&&C+`@CE:)oh&0N&ER@CEP)N&&AH@CEf)&+&AA@CE|)s&&@@CE) &"&>ǚ@CE)0&f&AK@CE)&b\&=Y@CE)&&=l@CE) &&<8_@CE)++&<&<`7@CE)z&>&;~n@CE,)8&X&;@CEB)$&&:@CEX)c&H&7@CEn)os%&6Q7@CE)e%J&4@CE))%HY&4ET@CE)%&1@CE)%]&-v@CE)U=% &.@CE)%%H&+B@CE)%z&(@CE)%&'@CE4)B%o&&@CEJ)|٠%&!@CE`)}E%Y&!@CEv)wH%웻&a@CE)nh%0&@CE)ji%ذ&@CE)g9%<&5C@CEο)`% &@CE)Yg%ԡ& @CE)Q%ج&a@CE)JW%g&8@CE&)E%Ҡ%2@CE<)@}%0U%C@CER)0R%*%ᰮ@CEh)(%2%@CE~)½%<%~b@CE)#%%T@CE)c%%#@CE) %~%/1@CE֩)\%ܡ%v@CE)"q%9&%@CE))-%%ٗD@CE)3%i%:@CE.):h%%V@CED)=%G%@CEZ)F,%%@CEp)Qc%&@CE)RZ%ӛ&l@CE)T%֠&b@CE)^%2L&@CEȒ)aA%y"&*@CEޏ)d'%n&@CE)hØ%{x&@CE )i%h&z@CE )ow$%T&B@CE6)oկ%ݻ&~@CEL)s%u&@CEb)x%O&p@CEx)z%Ӑ& ~@CE})|L%&!@CE{)ya%堜&@CEx){%y&!!"@CEv)~<%&"9@CEt)|^C%8&!@CEq)%,&'%@CEo)%-%鐊&%NO@CE(l)O%r&(S@CE>j)%}&'L@CETg)3%Y&%@CEje)u%飹&&9@CEb)ڠ%N &#@CE`)?%`&'@CE])83%&%f@CEZ)%oK&&bE@CEX)X%Z&'@CEU)}`%&%3@CER)\j%S&($_@CEP){%b&(@CE0M)u%&&3@CEFJ)D%C&'f@CE\G)P%_&'@CErE)%)&'2@CEB)i%}F&&@CE?)_f%{&%@CE<)D%E2&&@CE9)%&%@CE6)b%&'$T@CE4)i%{&$^@CE 1)z%& @CE".)ya%4&@CE8+){K%<& e@CEN()B%j&%s3@CEd%)D%&#_2@CEz")~k%x&"x@CE))%W&$ @CE)%]l&#ȶ@CE)!%&%I@CE)~+n%&"(@CE)~%S&#@CE)v%&$1@CE )zp%& H3@CE*){l&%f& @CE@)}0%m&!H@CEV){%%5& @CEk)z%T& ^@CE)zH%& @CE)y%0J&م@CE)|C%M&!º@CE){%&!@CE)w`%{x&Rs@CE)y%l&B@CE)wh%&W@CE)w%R&&k@CE1)vW%mi&@CEG)zeH%H& @@CE]){%d& @CEs)v%޲&zA@CE)tU%݂&@CE)u%ݧ&ة@CE)v %2&@CE)p%&D@CE)p%&~&_@CE)oŊ%&t0@CE )q"%ہ6&S@CE#)r%_Y&?@CE9)qP%ug&qG@CEO)o6%~&G-@CEe)pM%&A@CE{)qm%۷&@CE)q.h%=S&[$@CE)la%ٔP&@CE)n%ڄ&7@CEӗ)n%jK&@CE)j%[u&U@CE)kӕ%&@CE)m2%& @CE+)k$V%ؙp&}@CEA)g%>@CE})OfW%̠S&a@CEw)K%ʕ&Z@CEq)K%&=b@CEk)Jv%56&@CEe)K`%>&)v@CE&_)Ee%ƫ%$@CE%w%'@CE')8%XN%Z@CE )6%%@CE);E%%ﵭ@CE.)6!%V %,@CED )2lr%"%a@CEZ)4[ %%@CEo).%'\%߅@CE),%%O@CE)-% %g@CE)*%0%?@CE)'%%֐@CE)" %_%i@CE)!%%.@CE )W%4%Gu@CE)%%ĉ@CE5)|%T%J@CEK) %<%} @CEa)%-%Ë@CEw) "%1% @CE(12%%@CE(%Z|%p@CE(m%%<@CEϐ(<%%:@CE(%SP%@CE(y&%%M@CEz(H%\%;@CE's(ޏ%p%p @CE=k(Tt%o%s}@CESd(6+%O%7&@CEi\(J%%@CET)+%1S%.@CEM)%%@CEE) 7%L%J@CE=)E%%Q@CE6)%0% @CE.)Y<% %@CE&) % %a@CE)%2%N@CE/)"%?%"@CEE)!i%%Λ@CE[)":%\%ϧ@CEp)%6%%y@CE)$9%n%4@CE)'px%%R@CE)*xc%/%3@CE))%h%'@CE)*z%%6@CE))T%%ؾU@CE ))"%M|%k@CE ),c% %ܨ\@CE6)+%u%@CEL)-%0%ޏZ@CEb)/]%p%w@CEx)+d%%B@CE)/%%[@CE)0I%^%}@CE)0]%%p@CEw).@%k% @CEo)0A%(%@CEf)5#%1%۸@CE])0}%D%@CE(T)/N%%d@CE>K).s%P%ߎ@CETB)0S/%\%'@CEj9)0R%P%ᰮ@CE0).}%%Y@CE&)1T%%b@CE)3b%V%.@CE)1%%I@CE )1@%3%4@CE).%%{@CE)1%ui%n@CE)0%a%#@CE/)-%%ޢ@CEE)1x%%(@CE[)02%R%@CEq)2Z%`%}@CE)1%7%S@CE)/%%ྨ@CE)-%8%F%ݠH@CEɡ)/ݖ%%@CEߗ)/|%`%@CE)- %U%|@CE )0G%|%f@CE!y),x%Ӳ%H@CE7o). %9% @CEMe).%[%k=@CEc[)-G%U%;<@CEyQ)-%!%8H@CEG).4(%6%@CE<)+!%Js% @CE2))Z%%r_@CE')-S% @%k@CE),B%%J@CE)(%z%š%:6@CE)*G%R%@CE()(%7%,;@CE>)+e%%c@CET)(an%E%׆@CEj))ӄ%%`@CE)+%%L@CE))r%%@CE)*%%ڌ=@CE²))% %D@CEئ)*M%@ %ڹ@CE)%T%V%ӟ@CE)$ % %@CE)&%%d@CE0z)(9%a4%SL@CEFo)*]%O%@CE\c)%b%E%_@CErX)$ڱ%7%r@CEL)&3%l%՘@CEA)(=%s%Y4@CE5)$u<%4%ҁ@CE*)'Yi%%5@CE)$%4%ҿ@CE)&vI%o%I@CE )%",%Zp%^@CE!)!%%8i@CE7)#y%%S@CEM)%#%l%@CEc)#%%~@CEy)# %%T@CE)!~%f*%@CE)$#a%%@CE)"%%Ў@CEћ)#%z %G?@CE)!ɍ%ve%w@CE)V%v%̗y@CEv)#]%b%@CE)i)!X%,%΅@CE?])!D%%l@CEUP)!ʴ%\%@CEkC) %)%w@CE7)e%=%̴@CE*) #%%Y@CE)ט%d% @CE)%{%]$@CE)%ڪ%&@CE) t%%Ҁ@CE)^%s]%@CE) %-%w@CE0) 8V% %@CEF)MX%w%g@CE\)%d% @CEr)ǁ%V%ȭr@CE)r=%0%@CE)%]:%ȋ@CE)MK% %@CEr)O%%[@CEd)\%}%8@CEW)u%%ŵp@CE I)_%%(@CE";)%%nj3@CE8-)%%@CEN )zO%%@CEd)7%C%@CEz)^%G%H'@CE)a %%SC@CE)'%S%F@CE)%q%?@CE).l%J%@CE)z%%@CE)U% %@CE)O%_R%ʢ@CE))%h%t@CE?)O%*1%@CEUu)iS%%?"@CEkf)%mL%[@CEW)B%%T@CEI)8%%@CE:)%%ې@CE+)%3%h`@CE)pX%?%@CE )q%Z%z*@CE)%Й%9e@CE)%-%S.@CE0))%m%@CEF)%_R%@CE\)T%{\%$@CEr)2%?%i@CE)%%@CE)Y%Y%4@CE)C%|%D-@CEt)%%@CEd)%%s=@CEU) %%%Sc@CE E)b% %6@CE"5).%A%F0@CE8%)X%f%]@CEN)%%/@CEd)a%{%@CEy)4%%@CE)%%@CE)%%@|CE) U%*%@|CEѴ) %~%%@CE)a%C%r@|CE)%j%q@xCE)%%A@|CE)r)e%_=%@|CE?a) 5% z%v@|CEUQ)q%%@|CEk@) %{%w@xCE/) %%=@@xCE) ,%YA%T@xCE ) WW%HR%@xCE) %m%@xCE) %%@xCE) G3%C%V@tCE) f%%=@tCE) %!-%J^@xCE0) %%D%@tCEF) x% %@tCE\) u%;%%@tCErq) %%S@tCE`) ~%%T@tCEN)7Q%1%@pCE<) A%%@pCE*) x%@*%o@pCE))%X% @pCE)v%N%-c@pCE )n%_%Zp@pCE!){V%%j@pCE7)B%zj%i@pCEM)ޗ%%Z[@pCEc)%U%M@lCEy)[%I%AZ@lCE)%)@%^@lCEt)%Ө% @lCEb) GZ%m7%~@lCEO)zJ%%@hCE<)V%%@lCE*)e%%0@lCE)q%%@hCE))%%*@hCE>)%L%KA CEo)$h!%A.EwE)H$i% HAEwE)co$d%AEwE)$_G%AEwE )$]X%AEwE1)$[3%AEwEX)$YM%~:AEwE)($Y% AEwE)$X%AEwEͼ($U%AEwE(Q$U]@%AEwE($Tq%AEwEB($SG%tAEwEi($Sh%AEwE(3$RTl%!AEwE(U$R@Z%ۼAEwEދ($R(%QAEwE(f$Q[Q%AEwE,($Q%yAEwESy($PJ%FAEwEzr(*$N%'AEwEl($Ob%rAEwEg(]$N%dAEwEa($NA%2AEwE[(9$MH%hvAEwE=V($Ms[% AEwEdP($L u%bAEwEK($K? %AEwEF( $K/%EAEwE@(!$I%SAEwE;([$I %AEwE'6($H%>AEwEN2(r$G[%SAEwEu-(BP$FG%AEwE((람$EE%AEwE$($E]%@AEwE (/$Dg %:AEwE($E!%5AEwE8(庇$B"%AEwE_(g$A`%AEwE(-$A[%#AEwE (w$? %AEwE(no$?W% AEwE(0$>=%eAEwE"(s $>w%AEwEH(7%$=%AEwEo(GV$<%uVAEwE($(n$/l%AEwEe($/%nAEwE(эp$.3%AEwE($-%fAEwE(Ф$,L%AEwE(В$,h%|9AEwE(($,{O%7AEwEO(X$*o%AEwEv(}$*=%AEwE(̭$)%AEwE(/($*Q%AEwE($*(J%NAEwE(t$(*%sAEwE9(ʒi$(U%bAEwE`(#$(%[AEwE(1$'a%AEwE(ɮ!$'%IAEwE(Ȯ/$'%ozAEwE(Ȳ$'ma%rnAEwE#($'Sh%FAEwEJ($&Ď%~AEwEq(ƙ$&%~5)AEwE(F$%%|KAEwE(O$%~%{G|AEwE($%r%zAEwE (Ë$%}%zLAEwE4( $%%zAEwE[(m$%.n%xޠAEwE(0$$%x3qAEwE($$,%v7AEwE(g$$%wAEwE(R\$'%v+A EwE($$$%uA EwEE(^$#%t6;AEwEl( J$#E%sD5A EwE($#i%sqA EwE(I=$#b%sA EwE($"j%qĄA EwE(~$"n%qA EwE/(PC$"%q A EwEV( q$!%ojjA EwE}(R$",%p-6A EwE($!%o5JA EwE(h$!B%o){A EwE( $5%kHAEwE($%kAEwEA ($ >%k8AEwEh ($$B%kAEwE($42%jZAEwE(3$%j7LAEwE(+$F%hAEwE($%hAEwE+ (h$%hsAEwER$(7$8%fKAEwEy(($%g/AEwE,(g$%%eAEwE1(߼$%dlAEwE5($%dDAEwE:($ه%cAEwE<>(9$%bMAEwEcC(< $"%aAEwEH(Ƈ$i/%`AEwEM($]a%`yAEwER(9$%`JAEwEW(L$2%_.AEwE&\(S$%^kAEwEMa(\$q%]AEwEtf()$'%]AEwEk($%]bMAEwEq(z$%\AEwEv($%[oAEwE|($'%[AEwE7(JE$?%YAEwE^($ %YPAEwE($^%YAEwE($w%XAEwEә(s$T,%X[uAEwE(\$ %V.AEwE!(<$U*%VAEwEH($,%UAEwEo(j$[%VK$AEwE(z$)%U0AEwE(h$%TRpAEwE($c%%SAEwE (V$%RYAEwE2(3$%R"AEwEY($T%Q[AEwE€(.$[%PAEwE§(?$%PAEwE($x%PX.AEwE(M$%P+AEwE($l%O?AEwED(F$p%MEAEwEk (Y$:%M*AEwEÒ(Q$LV%M5`AEwEù({$H%L.AEwE"(X$ z1%KA EwE*($ %KZAEwE.1($ k%J-AEwEU9(*$ q%KA EwE|A($ .r%IA EwEģI(J$ %I A EwEQ($ 8%IA EwEY($ %HA EwEa(f$ %IyA EwE?i(-$ q%GA"EwEfr(n$ r%EŬA"EwEōz($ c1%DَA"EwEŴ(#$ S%BoA"EwEۋ(ł$%@A"EwE(o$ݙ%AoA"EwE)($%@ĻA"EwEP($p%@A$EwEw(iF$.%@A$EwEƞ(o$v%AoA$EwE(U$O%@CA$EwE(d$8%@A$EwE(/$q%>YA$EwE:(T$[[%?$A$EwEa(x$%>XA&EwELj(i`$t%=A&EwEǯ(;O$Y%{A*EwEG(#%-NA*EwEn(N`#P%-1A,EwEʕ(Nm#ع%+A,EwEʼ(#1%*oA*EwE( #"%(A*EwE (;#۳%'aA,EwE1(N#*%%A,EwEX( #%#FA,EwE(|}#V%!K1A,EwE˧(v*#Dr%A.EwE(q#o%ʏA.EwE(ls#d% A,EwE%(g#Y%/\A.EwEC1(a#3*%sA.EwEj<(\'j#% A.EwȆH(Ss#ݳ%TvA.EwE̸S(I#d%&xA.EwE_(?#Rp$A0EwEk(5#¥$yA.EwE-v(29A#˾$ SA.EwET(=#Ѻ$A0EwE{(EyM#cX$:A0EwE͢(Nd#g%A0EwEɦ(S#0%]QA0EwE(ZK#5% A0EwE(_S#%|A2EwE>(d#W%rA2EwEe(gD#4%A0EwEΌ(iv#M%LA2EwEγ(k[#4%A2EwE(nT#'%A0EwE(p#g}%A2EwE)(rY#j%?A4EwEP"(s#y%6A2EwEw.(st#s% A2EwEϞ;(t4#%%A4EwEH(u#%!A4EwEU(w #v%A4EwEb(w#o%A4EwE:o(w#%A4EwEa|(w-#5J%lFA4EwEЈ(w!#%A4EwEЯ(w{X# %ckA4EwE֣(w#%A4EwE(w,#%1>A6EwE$(x N#m%A6EwEK(v#z%ޚA4EwEr(v_#^%A6EwEљ(v#%ޚA6EwE(u#%-A6EwE(vC#%iA8EwE(uQ#F%>A6EwE6(u#{%eA6EwE]*(tJ#h%)A8EwE҄8(si#%cA8EwEҫF(tX#u%8A8EwET(st#% A8EwEb(sR #%A8EwE p(rx#됟%[.A8EwEG~(q#%NA8EwEn(p#%xA8EwEӕ(p#-s%1A8EwEӼ(o#V%A8EwE(nI#钛%A:EwE (nO#}%A:EwE1(nF#~Y%7A:EwEX(mRZ#%A:EwE(l#^H%]A:EwEԦ(m#+%wA:EwE (l #%cA:EwE(k#:%3A:EwE*(iX#敕%A:EwEC9(ie#Π%_]A<EwEjH(iv#%LA<EwEՑW(i#EM%A<EwEոf(hZ#|%A<EwEu(gd#7%,iA<EwE(g-#Z%UA<EwE-(f4#H%A<EwET(e#l%A<EwE{(e#㲈%A<EwE֢(dY#$%$A<EwE(cn#M% A<EwE(d#s%H^A>EwE(c(#|%ƀA>EwE>(d#>%A>EwEf (c#巡%A>EwE׍(b#㘏%GA<EwE״+(a#~%NA>EwE;(aR#?%A@EwEK(`z8#7_%aA>EwE)Z(_#%A>EwEPj(_E=#%A@EwEwz(^ȹ# %A>EwE؞(]2#,% A>EwEř(] c# % vA@EwE(\#r% GmA@EwE(\9#\% A@EwE:(Z&#ޮ % A@EwEa(Y# % x A@EwEو(Z#ށ/% qA@EwEٯ(Z# % &.A@EwE (Y@#% A@EwE(Z"#޷~% vA@EwE%)(X0#P% \ABEwEL:(Xc#UP% }+ABEwEsJ(X#&% MA@EwEښZ(W#X% ABEwEk(V,V#--% "ABEwE{(VG#R% aABEwE(T#&%7ABEwE6(T# %7ABEwE](TI#R%ABEwEۄ(S#(%zABEwE۫(Sa#XJ%HABEwE(R#ك%ՌABEwE(Q#%-PADEwE!(QJ#o%IADEwEH(Q#؀%ABEwEo!(P5#^%A2ABEwEܖ2(O#I%PADEwEܽC(Pm5#%dADEwET(PC#؜c%J ADEwE e(O#C%~fADEwE2v(M<#%Z3ADEwEY(LV[#\%ƠADEwE݀(M<#BI%Z3ADEwEݧ(K# %ADEwEκ(Jm#t%ADEwE(KF#v<%MAFEwE(I#8%FAFEwEC(I#'% ADEwEj(If#Ӧ%ADEwEޒ(IF^#ӡY%AFEwE޹"(Hw#p%#AFEwE3(G#n$ AFEwEE(G#$JAFEwE.V(Fv#A$AFEwEUh(Fd#*L$ AFEwE|y(E #>.$ojAFEwEߣ(D#$$AFEwEʜ(E#0$ AFEwE(Eb>#ϕ$AHEwE(DW#$5$ #ҷ$8gAHEwE(="#$(AJEwE(;p#D$h>AJEwE(:e#ЊZ$AHEwE(;=#J$YAHEwE&'(;G#Ӝ$'AJEwEM:(:#0$ AJEwEtL(9#t$UAHEwE^(9'#_=$AJEwEq(9Pj#Җ$3AJEwE(9#u{$HAJEwE(8)D#ф$AJEwE7(85#x$mAJEwE^(6#$AJEwE(6#%3$AJEwE(6#$AJEwE(5#ҵ;$AJEwE(6w#ӭ($AJEwE"(5/#}$gAJEwEI*(59#Ӝ$ALEwEp=(42#{$JAJEwEO(3 #4$\SAJEwEb(3%#*$ALEwEu(2#q$ALEwE (39#Ҳ$hALEwE3(2`t#|$RAJEwEZ(2* #($ AJEwE(2#y6$ALEwE(1KK#`;$ALEwE(1:#d${ALEwE(0d#J$NALEwE (1R6#Ѻ$ALEwEE(/0/#й$=ALEwEl2(.<#$ALEwEE(.#$mALEwEX(-ݰ#"$ތfALEwEk(-iy#$ALEwE~(-#ҷ$LALEwE/(,#R$RALEwEV(,#$ALEwE}(,t#$#$ALEwE(,#?$;ALEwE(+p#$qANEwE()Ԭ#2$b#ANEwE(*#$٤ALEwEA()*#҃$؈ALEwEh*()#((1#:$ ANEwEQ('5#(-$ALEwEd((_#!$ ALEwEw((#$wANEwE+(' #S$ANEwER(&)#$԰LALEwEy(&##$fANEwE(&}#/B$G#ׅ$d3ANEwE( #$ANEwE(!#1>$ANEwE( U#Ɋ7$:ANEwE( g#_$QAPEwE9( #$uANEwE`$(#$~2ANEwE8(A#0$˩JAPEwEL(#ݜ$)ANEwE_(I #5$ʚANEwEs(#.$ɘAPEwE#(ś#$ANEwEJ( L#`$8ANEwEq(1#s$4APEwE(#/$džLAPEwE(#̪$^(ANEwE(#k$MqANEwE (#˃$lAPEwE5(-#d3$APEwE\%(C#V$APEwE9(X#n$HWANEwEL(3#t$BANEwE`(L#ϔ$Ł3APEwEt(#av$APEwE(#.!$QAPEwEF(,#$ȦAPEwEm(%#ǎ$x.ANEwE(.1#$ANEwE(<#r$=APEwE(X#Ε$APEwE (#h$#APEwE1(#P$APEwEX'(E#Κ$YLAPEwE;(#D"$'APEwEO(uC#!$ANEwEb(#M${ANEwEv(#ɇ$`APEwE(#x$K'APEwEB( t#ġ$|APEwEi(?#$أAPEwE(J#$APEwE(#Ѩ$APEwE()S#1$]APEwE(F#$JAPEwE-(Z#φ$ APEwET*(s#b$.APEwE{>(v~#F$APEwER(I#$UAPEwEf(Av#C$APEwEz(#$APEwE()#'$APEwE>(h#r $EAPEwEe(9#,$TAPEwE(6#($APEwE(m#$9APEwE(?#ϙ$zAPEwE( 7#QO$JAPEwE)( #$!APEwEP.( #˔ $uAPEwEwB( #$ APEwEV( C#·$APEwEj( #Ѫk$>APEwE~( #&$hAPEwE( 2#L$,(ANEwE:( r#7$~5ANEwEa( {#:6$>APEwE( #֣$TAPEwE( #- $APEwE( #$APEwE ( B#֍$ʒAPEwE%( #Ц$APEwEL1(B#A($~APEwEsE(F#й$EAPEwEY(#,H$>APEwEm(Lz#Y$v_APEwE(#վ$1APEwE(N#t$1APEwE6(#|#r$9APEwE](#hq$APEwE(-#$5APEwE(#$ҬAPEwE(%#ۛ$9APEwE (#ܷ$APEwE!!(#'$/)APEwEH5(_# $APEwEoI(!# $?ANEwE\(#ӀK$"cANEwEp(#ԙF$TAPEwE(E#Z$rAPEwE (E[#$APEwE2(#0'$~APEwEY(f#$1[APEwE(#ޢ>$kAPEwE(#,$x1ANEwE(!#ت$ANEwE(#"$xAPEwE#(I&#`$|ZAPEwED7(:#ԏ$j APEwEkK(]# $NAPEwE_(%:#ղA$ANEwEr(#j$ANEwE'~#h$=APEwE(Y#ݣ<$SAPEwE.'<6#7$YANEwEU(O2#i$$ALEwFp'j#ɡ$XAHEwF'ߥ)#ۛ$"ALEwF'ߪ#$%ALEwF'#P$RmALEwF$'Bx#8$ALEwFҭ'ߓ#S$AHEwF6'p#$`ALEwF'ݵ#\$ ALEwF I'ޏ#?$pXAHEwF '#%$AHEwF4['#$ ALEwFG'ݨ#=w$.ALEwF[n'@l#~$YAHEwFn'#;W$nAHEwF'Ӗ#3$hALEwF 'ۇ#$ALEwF'j#؄$ɁAHEwF'p#ׁ $)AHEwFХ'ؼ#֋|$AHEwF.'א[#Ha$ALEwF'֒#؋$SALEwF A'+#S$dAHEwF'ӗ#W$jAHEwF2S'շ3#$+AHEwFE'־#%$oAHEwFYe'>_#L$yAHEwFl'F#TR$LAHEwFw'Ճ# $AHEwF'-#O$o6AHEwF'#8$AHEwF'ܛ#׫$;DAHEwFΛ'џl#Q$(AHEwF$'C#ӽ$GAHEwF'Ҋ#$AHEwF 6'd#ӀK$AHEwF':#԰$ AHEwF0H'W#1$AHEwFC'Ϧ#כ$AHEwFWZ'%#ك$ADEwFj'#G$|ADEwF~k'#L$&AHEwF'V@#$>AHEwF}'-#$EAHEwF'#ي$BAHEwF̏'A #"$ADEwF'#&$ADEwF'͇#t$AHEwF)'ν# $P[ADEwF'##y$iEA<EwF ['#$j`A<EwF %'4#$mPA@EwF 9k'8o#g$m A<EwF L'#ϐ$i&A<EwF `z'#ˁ&$h A<EwF t'5v# $fA<EwF '#Ca$eA<EwF '@#˘$epA<EwF 'I#?i$d5A<EwF 'L7#M$bA<EwF է'A EwF'Eu#ہ$#܃+$/dAEwF]'M#$.x$AEwFq_'Q #V$/AEwF'#$0%AEwFf'W#Ԓ1$/TAEwF'Ry#~$.~ AEwFm'#ϵ$,WAEwF'R*#$*AEwFs' #͏$)AEwF'O#S$)fAEwF y'.#$&QAEwF '\#$&+AEwF4'#X$$|)AEwFH'O#Q+$&ˣAEwF['˜#$'kAEwFo'q8# $&RAEwF'/8#$'AEwF '#H $)*AEwF'r#Lb$(AEwF'#E$(oAEwFЖ'H#Ꮌ$*AEwF'D#e$)MAEwF'#Q$(AEwF '5#Y$+8AEwF'z#$*ڏAEwF2"'#$)AEwFE'#2$*?AEwFY''&#I$+>AEwFl'#$-vAEwF,'Ї#w]$+HZAEwF'?#됟$+AEwF0'p#O$+XAEwF'?#?$+AEwF4'.2#n$*xAEwF'R#ku$) AEwF8'#$,fAEwF'#ވE$,AEwF<'#N$*]AEwF/'֓#ϋX$*jAEwFC@' M#P$*IXAEwFV'#e$(VAEwFjD'J#`$)A EwF}'#đ$-qA EwFG'#$+hAEwF'#A$*]jA EwFJ'v#$$*ԨA EwF'4$2$)A EwFM'l#E$*A EwF'#`$)~A EwFP'=w#&$)DoAEwF'#$+(zA EwF-S'0#$,nRA EwF@'#-$+AEwFTU'#$) AEwFg'#$(x1A EwF{X'#$*A EwF'(#;$)AEwFZ'1#U$'%]AEwF'`#M`$*RAEwF\'#$'cAEwF'5#g$%cAEwF]'##A$&dAEwF'C#$$$-AEwF_'#a$'>AEwF*'G3$qi$( 8AEwF>`'0$$&2)AEwFQ'd$ >$$AEwFeb'$ 4$#AEwFx'V $ $#jDAEwFc'$ O $$AEwF'YW$$$IeAEwFd'|l$$!NAEwF'}{$ )$"AEwFd'~#i$#('AEwF'~#~$#FAEwFe'|#&$!AEwF'z#$ AEwF(e'}'#!$"AEwF;'|9#$$!l@AEwFOe'$ Q|$#$AEwFb'y$ j$řAEwFve'wa$1$RAEwF'{$ö$ FAEwFe'xۭ$$DAEwF'sD5$_$AEwFd'rh$zT$$HAEwF'sg$6 $ AEwFc't|$y$OAEwF'p$D$AEwFc'n$>N$AEwF%'i5 $O$@AEwF9a'lqM$ $RAEwFL'rS$$TAEwF``'jMo$޺$AEwFs'm8$ R $N8AEwF_'k$ $5AEwF'j$ y$AEwF]'kߒ$ \$|AEwF'g$$87AEwF['dܴ$3$xAEwF'fó$ Z$rAEwFY'c$ $AEwF'a4$ BS$p!AEwF#W'_$ .r$AEwF6'`$C$aAEwFJT'`$<$AEwF]'^$2C$mdAEwFqR'\"$ P$ AEwF'\h$)WS$ AEwFO'V+j$4$ AEwF'SR$(֤$AEwFL'Q0$+c$AEwF'Qde$,$AEwFH'Q $,$#AEwF'Q$,$BAEwF E'PQ$/w&$RAEwF 'I$*u$GAEwF4A'M$*.$AEwFG'O$($AEwF[='Ly$'$ AEwFn'R$'i$AEwF9'Uv$#B $AEwF'P2-$!|$>AEwF4'Ra$"V$AEwF'Q)$"$AbAEwF0'Sk$%$`DAEwF'P$&2)$AEwF+'Z$-$ QAEwF '\E$6$ ߈AEwF&'U;$; $xAEwF1'XA$Ck$ AEwFE!'VJ$JK$ %AEwFX'X$Q!x$ HAEwFl'UԷ$T$AEwF']$_9[$ qAEwF'[P$c$ \}AEwF'X>$eZ$ AEwF']#6"0$-BD\Fc']c"D$BD3Fӟ'],p"=$B Dǣ3F D/'\"@$L&B DٚF '\"Ǻ$.B D#3F!%O'[h~"Y<$kB DLF!'Y0"Z;|$6BDs3F"m'XgC"e$BDͰF"v'WA"v $BDfF"'Sw"n$VB DF#X'O*d"h $BDF#Ȫ'L="W"$BDF$9:'KM"FqT$6B D˖fF$'K d"3$B DF%X'KH""$BDS3F%'Hh"%$uaBDfF%w'G",N$~!B D3F&l'C"'7O$z?B D3F&ܖ'> " $sWBDF'M$'<"v_$qiBDٚF'':WH"$n3B DyF(.D'7Z" $k/B D3F('4,"-$gBDF)a'0FE!dV$aBD@F)'+v!5$[x[B DόF)'$ !$QB DF*a'GL!:$H WBDF*џ'!)q$B]7BDF+B/'pK!;$>`B DF+'b!B$AB DF,#M'!)$EҩBDF,' !x$FwBDF-l'd!<%$H/B DF-t'!$JUFB DF-' 4!$M/BDF.V'!}$LcBDF.Ʃ'nr!S$I!B D3F/79'M!$JB DF/'}!$J8BD͉F0V'"!$HBD0F0'/!Z$HB DF0v'%!L$FB DF1j'!$CqyB DF1ږ'!$A=&B DϬF2K%']!$?BDσ3F2'!,$>}BDϜF3,C'!!6$=|B D3F3'"!;$=4B DfF4 b'z!$&&!$CDɚF>&c!rG$WICD3F?W&W!q$CDωF? &n!`$CD`F@&ڨ!^?$DBCDϙFA6&޺!t_$CDFA&2a!v$4CDiFBv&b![$ CDfFC&־!U;$ oCDfFC&8!i$CDyFDV&Ͳ!m$+CDFfFD&!L$.CD#ֽCD3FIV&P!c>D#ŅCD3FI&o!R#'CDFJ}&!:-%#ޝCD3FK6u&!;e#^CD3FKm&e!g#CD̀FP61&]!9|W#CDFP)&!:+#ђCDFQv"&1^!:t#SCDFR&W!6#= CDFR&!1#˫CDFSV&!2w#ȍCDFS&c!>z#ŞCDFT&yO!IZ#*CDfFU5& !J #¹MCDFU&!Ah#ZCDpFVu&)!7#rCD3FW&!4#CDȳ3FW&,!5n#CDʹFXU&v!2 #CD̙FX& !0;#fCD FY&!4##GCD6fFZ5&~!<͜#ECDٚFZբ&+!@##kCDγ3F[u&H!A=?#RCDVfF\&!E[G#CDlF\&J!CC#CDYF]U&!:H#SCDF]x&!6b# CDϓ3F^o&ʯ!4 #iCDF_5g&cX!1kX#CDF_`&!-c9#ЀCDIF`uW&|!&#ζCDːFaO&yW!'#?CDζfFaG&v-u!1X#CDLFbU>&sq!-#CD9Fb5&p!۳#CDPFc-&o3!T8#CDFfFd5%&kE!"g#CDpFd&gW!w#.LCDFeu&ej!+#.XCDFf &e~!#CDFf&bM!(#.CD@FgT&^ju!#XCDٚFg&[w! }#uCDfFh&Z'! #CD33Fi4&Y! ۑ#CD3Fi&W|!*W#CDyFjt&T!I-# CDFk&Q!#YwCD Fk&OH!~#_CḌ3FlT&MP!#fCDS3Fl&K= k#CDFm&J9 I#lCDfFn4&H ߫#jHCD Fnԕ&F +#~W CDϠFot&D |#{iCDFp&C 8#yWCDσ3Fp|&A~"F#waCD@FqTs&@"#vCDˉFqj&?7"-#t>CD͙Frb&;}"`#pCD͠Fs4Z&9 #mLCDiFsR&7A bX#jCD˩FttJ&4w #g#_hCD˙Fw&,} 5#\CD&fFx4&*c G1#ZCDFx&) #YZCDόFyt&(N 㓥#W0CDpFz&& sY#UjCDs3Fz&$m r#RxPCD˓3F{S&" ~}#PKCD,F{&!C ҅#N,CD)F|& m z5#MXpCDϦfF}3& q#K1CDpF}&a* V#Ir!CDπF~s& Ԣ#GGCDϹF&vq К#ESCDF& ,1#CCDF)& (#AYCDσ3Fy& ̼#>)CD3F&W5 rx#=DCD F&v =#<%CD33Fi& ~Y#:uCDpF&lq I#8ܹCDϳ3F & Q#6nCDyFY& :p#5L\CDiF& $ #4CDF& #2JCD)FI& N #1CD̓3F& i4 4#/CDɓ3F&J, #.skCDF9&Wj #-#JCDfFA% 8}#CDˬFi=%; 8.# CDffF8%X 8# CD3F 4%N 6 # CD@FY0% 0b#3CD3F,%f -?#VCD33F(%cI - #CDFI$%H ,q#_CDF%eL /c#0CDVfF% 3 #Z-CDͶfF9% 7"CD9F%> 7"CDyF%ĉ 5ҫ"CDٚF) %O 6ٜ"fCD9Fy%g >"CDF%v K"ZBCDϦfF% V"HuCDYFh%] ^T:"nCDFfF%ԣ `@"KCDF%I ^< " CDͬFX%^U Y<"OCD̓3F% Sq"CDɚF%D J"ٯCDϐFH%q @!&"4CD϶fF%_ 5D"ѿ2CDF% *""nCDF8%s $"UCDvfF%> -v"CD Fd%J O["iBDPF+% W"wCeDLF%n= gM0"&CeD#3F% a")CeDFf}%| R."\CeDFC%" E"W5CeD3FL % =f"CeDFfF%K 2"UCeD)F1% ,"ǧCeD6fF[%ϯ 1kX"CeDF"%ƿ ?"FCeD3F% Y "AfCeDVfF% q."?CeDFot%= ˜"CeDٚF:% gqt"_CeDFU% GH" CeDF% 6f"XsCeDLF:%e !;"CeDfFS%  "tCeD`F %^ "/"CeD3F% 3"KCeD&fF%5 ?i"gCeD\Fxj% 77"ECeDF0%w %5"CeDVfF]%K " CeDpFн%b *""CeDFC%0D & "CeD3FH%( 'D'"pCeDfF)%7 '""ACeDF%Kr ;I"CeD)F% "@CeDFb%~Y "CeDF'%zr }"ICeDFf%va ;I"CeDFٳ%s] "CeDFLz%p 5"34CeDfF@%o[ "0kCeD3F2%o !"kCeDF%lz &:0"/CeD3F%g )vN"}CeD驚FX%`y zR"CeD33F%^ z"9CeDc3Fo%]M 4"TCeDfF%Z! T\"CeDFfFUp%S &",CeDIF7%Oa "{CeDF:%Lf  ""CeDyF%Iy < "WCeDYF %E·0"}1PCeDc3FO%D1R"{ iCeDF%DTn"{MCeD#3Fx%Cž"zCeDF%D@"zCeDF^h%CYDN"z CeDfF-%AU֑"wCeD䉚FC%? "uCeDLF%>d"s!CeDF)%>>["sCeDIFF%>"sQCeDF %&'CeD)F+%";CeDffF)%X"EY6 [EY6nEY!6EYJ61EYs6 tEY6 [EY6 WEY6 EY6EZC6~zEZm6EZ 6CEZ6EZ6 EZ 6m%EZ&B6EZ,m64EZ26EZ86EZ>6amEZE6EZKG6!*EZQs6"EZW6#EZ]6%YEZc6&EZj%6($EZpR6)9EZv6*EZ|6,UEZ6-EZ6/"TEZ660EZd61_EZ63VEZ64EZ66#EZ67 EZM68ZEZ|6:YEZ6;TEZ6=)EZ 6>EZ:6?EEZj6AbEZߚ6BvEZ6D4EZ6EEZ,6GEZ]6HpwEZ6IE[6KCE[ 6LoE["6NE[S6O\E[6PE[#6RVE[)6SE[06U+E[6O6VE[<6XE[B6YmE[H6ZثE[O6\D)E[UN6]E[[6_ E[a6`ZE[g6aE[n6caE[tR6d΂E[z6f;E[6gE[6iE[&6jE[[6k{E[6m_jE[6n͹E[6p<E[16q8E[h6sE[6tE[6utE[ 6weE[B6xE[y6zDGE[װ6{E[6}#E[6~E[V6E[6E[6qE[6*TE\76E\ p6dE\6E\6~E\6|,E\"T6z#/E\(6x)0E\.6v.E\56t4\E\;:6r9E\Au6p>3E\G6nCE\M6lGE\T$6jLE\Z_6hPE\`6fSE\f6dWE\m6bZE\sL6`]E\y6^`E\6\c;E\6ZeE\<6XgE\y6VivE\6Tk9E\6Rl~E\/6PmE\l6Nn{E\6LnE\6JoIE\%6Ho8E\c6FoE\ʡ6DnE\6BnE\6@mCE\\6>kE\6E]A]69E]G64E]M6/!E]T"6)tE]Zd6#E]`6E]f6E]m,6,E]sn6 E]y6 SE]6 E]86.E]{6E]6_E]6E]G5E]5jE]5E]5n~E]Y5[UE]5GE]53E](5eE]n5 E]׳5E]5E]?5E]5βE]5ʛVE]5Ƅ9E]Y5lE^5SE^ 5:E^.5!E^u5E^5E^#5E^)M5E^/5E^55~xE^<&5aE^Bn5DE^H5%E^O5E^UI5E^[5E^a5!E^h&5yE^np5pμE^t5hE^{5`HE^O5YmE^5XE^5WE^/5VE^z5UE^5TfE^5SE^]5RZE^5QͯE^5PE^A5O'E^ƍ5N\E^5MQE^'5LE^s5KE^5K3E^5J E^[5I E^5H#E^5G"E^E5F)E_5E/E_ 5D6E_05C=5E_5BCE_5AJE_%5@OyE_+l5?TE_15>YE_8 5=_E_>[5Ea4Ea 4!Ea&s4Ea,4*Ea3/4Ea943)Ea?4EaFJ4=EaL4#EaS4GEaYf5f{Ea_5)GEaf%5^Eal5iEar5rEayD55Ea5FEa5Eae5PEa5CEa&5Ea5NEa5 EaJ5 REa5 Ea 5 ڂEao5 Ea5 bEa35&EaҖ5"Ea5xEa[5sEa58FEa!5Ea5Ea5EaL5KEb5Eb 5եEbx5Eb5`)EbA5%wEb%5Eb, 5Eb2p5v'Eb85;Eb?;5EbE5ǞEbL5EbRm5SEbX5DEb_95Ebe5 :Ebl5!mEbrn5"4Ebx5"3Eb<5#Eb5$Eb 5%OEbs5&"Eb5&aEbD5'Eb5(m@Eb5)4Eb}5)cEb5*EbP5+EbŹ5,SEb"5-EbҌ5-Eb5.Eb`5/tMEb50=3Eb551`Eb51ρEb 52Ebu53bQEc54+Ec K54ZEc55!Ec#56Ec57REc%58Ec,g58Ec2593Ec9@5:{Ec?5;F EcF5<EcL5<&EcR5=EcYa5>pEc_5?;Ecf=5@Ecl5@ѧEcs5AEcy5Bh%Ec5C3Ece5HnEc5NXEcC5T5Ec5YEc"5_Ec5eE7Ec5jEcq5pEc5v\2EcR5|LEc5Ec35#EcӤ5Ec5qEc5MEc5)YEcj5Ec5dEcN5EEd5lEd35zUEd 5XEd56wEd5Ed 5 Ed'q5|Ed-5Ed4X5Ed:5tEdA@5TEdG56EdN)5@EdT5rEd[5sEda5ſ.Edg5ȢEdnr5˅Edt5ivEd{]5MEd52QEdI57Ed5aEd65GEd5Ed#5xEd54Ed5|;Ed5cEd5KMEdx53eEd5Edh5(Ed5EdX5Ed5gEdJ6TEd6Ed<6>Ed6WEe/6*Ee 6Ee"6 Ee6 Ee6 aEe#6xEe* 6Ee06fEe76ݍEe=}6TEeC6EeJt6CEeP6EeWl63Ee]6Eedd6#Eej6Eeq]6 Eew6!UEe~W6##Ee6$$EeQ6%MEe6'qEeM6(jEe6*e)EeI6+Ee6-Y"EeF6.ӂEe60MEeC61VEe63C.EeA64.Ee669|Ee@67Ee690Ee@6:Ee6<'Ee@6=Ee6? EfB6@Ef6AEf D6C:~Ef6DEfF6E Ef 6G+Ef'J6H|gEf-6I2Ef4N6K;Ef:6LotEfAS6MEfG6O5EfNX6PcEfT6QEf[_6SEfa6TYEfhf6UvEfn6VEfun6XQEf{6YEfv6ZEf6\JEf6]Ef6^fEf6`E Ef6aEf6bJEf6d@Ef6eEf&6fEfì6h;Ef26iEfй6jEf@6l9'Ef6mEfN6nEf6p7Ef]6qEf6rLEfl6t7Eg6uwEg }6vcEg6x9EEg6yEg6zEg%6|6EkQ6oEkX6AEk_46JEke6xEkl6Eks,6mEky6DEk|64Ek%6cEk6Ekw6Ek 6 Ek6#Eks6NgEk6}Ek6%Ekq6ܚEk6 Ek6;^Ekq6jEk65Ek6ɰEks69Ek6(Ek6XOEkv6Ek"6El6-El {6El'6FvEl6v#El 6El'.6ՀEl-67El464El;76dElA6ElH6ĸElOA6ElU6$El\6UElcN6)Eli6JElp6qElw\6El~ 6EEl6vElk6WEl6֦El6El}67ZEl-6gEl6El6jElA6El6)bElǤ6YElV62El6Elۻ6AElm6El 6LREl6|El6El96"Em6Em 6?zEmT6p2Em6Em6ѫEm%q6iEm,%63%Em26cEm96Em@D6šEmF6EmM6'kEmTe6XbEm[6`Ema6bEmh6kEmo>6|Emu6MkEm|6~aEmb6Em6"Em6fEm6Em@6Em65Em6'~Emi6=Em"6T*Em6jEmƓ6EmL6Em6uEmڿ6Emy6PEm36Em6 Em6\Emb63En6JEn 6`En6vEnN6tEn 6En$6FEn+6ЗEn2=6En86]En?6EnFr6*9EnM.6@EnS6WEnZ6mYEnaf6Enh#6,Enn6Enu6&En|]6ݧEn6)En6 En6!0EnW67En6NGEn6dEn6{JEnU6En6eEn6Enƕ6ՌEnU6#En6En6/En6/EnY6FZEn6\En6sEn6TEo_6 Eo !6Eo6wEo6#Eoi6Eo%,6Eo+6)4Eo26?Eo9u6VEo@96m=EoF6EoM6EoT6Eo[J6REob6IEoh6Eoo68Eov]6%Eo}"6=GEo6TEo6lQEot6Eo:6\Eo6Eo6xEo6EoT6Eo6$Eo6(EoǪ6@QEor6WEo96oEo6GEo6Eo6Eo[60Eo$6Eo6~Ep6kEp 6EpI6Ep6Ep6Ep&6Ep-q6Ep4;6{Ep;6i EpA6WEpH6E6EpOh63LEpV36!BEp\6.Epc6Epj6Epqc6Epx/6Ep~6Ep6Ep6Epc6~Ep16l\Ep6ZEp6GEp64Eph6"lEp76Ep6bEp6EpУ6CEpr6śEpA6Ep6WEp6Ep6{,Ep6hEqQ6UEq!6C$Eq 60^Eq6Eq6 Eq"e6:Eq)76|Eq0 6ҾEq66Eq=65EqD6EqKQ6KEqR$6uEqX6cEq_6QEqf6>Eqmp6,bEqtD6Eq{6IEq6Eq6[Eq6Eqh6aEq=6Eq6@Eq6Eq6sMEq6`Eqh6N$Eq>6;Eq6)Eq6bEq6Eq6Eqn6EqE6ʬEq6Eq6yEr6UEr 6~(Er|6jErT6WEr,6DEr&61_Er,6Er36 Er:6ErAi6xErHC6)ErO6ErU6Er\6EErc6Erj6pErq`6]Erx;6IEr66bEr6 Er6jEr6Er6lEra68fEr=6Er6нEr6Er6i)Erð65FErʎ6JErk6RErI6KEr&6eBEr61DEr68Er6#Er6Es6`Es^6,Es=6Es6LEs6Es#6\,Es*6(Es16dEs8|6 Es?]6EsF=6[EsM6'kEsS6EsZ6@Esa6Esh6XEso6%AEsvh6Es}K6Es-6Z6EtEB6EtL+6EtS6eEtY61Et`6Etg6ƪEtn6NEtu6[Et|6&Ets6.Et]6EtG6UEt16PEt6KEt6Et65Et6zEt6DEt6NEtȟ6xEtϋ6Etw6mEtc68EtP60Et<6dEt)6Et6`Eu6*Eu6#Eu 6{Eu6VEu61Eu"6 Eu)6Eu06Eu7t6Eu>c6EuES6SEuLB6+EuS26EuZ"6ͲEua6sEuh6LEun6"Euu6Eu|6Eu6Eu6EEu6 Eu6Eu6Eu|6~xEun6wNEua6p EuS6hEuF6aEu96ZEu,6S_Eu6L5Eu6EEu6=Eu66Eu6/EEu6(Ev6 Ev6Ev6eEv6 (Ev6Ev#6Ev*6ZEv16Ev86Ev?y6߂EvFo6rEvMf6fEvT]6[Ev[T6SEvbK6DEviC6!Evp:6Evw26Ev~*6Ev#6Ev6Ev6Ev 6Ev6|Ev6ugEv6nIEv6g(Ev6`Ev6XEv6QEv6J|Ev6CREv6<&Ev64Ev6-Ev6&QEv6Ew6Ew 6LEw6Ew6Ew6+Ew%6Ew,6yEw36"Ew:6EwA6wEwH6 EwO6ƠEwV6:Ew]6Ewd6kEwk6Ewr6Ewy6Ew6 Ew6Ew6^Ew6Ew6#PEw6Ew6Ew6J$Ew6Ew6EwƓ6qXEw͕6Ewԗ66gEwۙ6Ew6Ew6^\Ew65Ew6#Ew6Ex6Ex 6LEx6Ex6Ex!6uEx(6Ex/6<Ex66UEx=6ExD6eExK6NExR6,ExY6JEx`6Exg6W~Exn6Exu6Ex|6Ex6Ex 6JTEx61Ex6Ex6uEx'6 Ex/6>?Ex76bEx?6ExH6k%ExP6;ExY65cExb6Exl6Exu6dEx6SEx6/Ex67Ey6Ey 6`:Ey6Ey6+Ey6CEy%6Ey,6\Ey36žEy:6(EyB6EyI6EyP6ZEyW(6Ey^56&EyeB6EylO6LEys\6WEyzj6Eyx6#NEy6Ey6Ey6TEy6Ey6 Ey6Ey6Ey6REy69Ey6xEy6Ey.6Ey>6RyEyO6Ey`6Eyq6†Ey6Ez6N Ez6uVEz6ÜEz6Ez6$Ez#6qEz+69Ez26aEz9'6Ĉ|Ez@:6įEzGM6.EzNa6EzUu6%Ez\6McEzc6tEzj6Ŝ^Ezq6Ezx6uEz6Ez6:}Ez6bEz06ƉEzF6Ʊ5Ez\6Ezr6Ez6(|Ez6PBEz6xEz6ǟEz6Ez6Ez6qEz,6?PEzD6g.Ez\6ȏEzu6ȷEz6E{6E{ 6.E{6VE{6E{# 6ɧ%E{*%62E{1?6JE{8Z6hE{?t6GE{F6pE{M6ʙE{T6#E{[6zE{b6E{j6?)E{q36hE{xO6ˑE{k6˻?E{6E{6E{67E{6a E{6̊E{6̴E{76ݮE{U66E{s60E{Ƒ6Z]E{Ͱ6̈́E{6ͭE{6RE{ 6E{,6)%E{K6QE{k6zwE{6Σ(E|6E| 6E|6TE| 6FE|#-6nE|*O6ϗE|1p6jE|86IE|?63E|F6;E|M6cE|U6ЌE|\<6еE|c_6ޕE|j6E|q60~E|x6YtE|6тrE|6QE|36CE|W6ϣ7E|{6E|6aE|6E|6E|6~E|46E|Z6E~6E~06|E~b6KE~6E~6E~6WGE~/6fE~b6 E~6bE~6E~6wE~26mE6"ES6?E6OE6YE6Y]ED6+dEA6^E6cE~6TE 6s4E6E E[6E6E6E86gE!6^E%w61%E)6E,6E0V6E36zE76MME;66E>6EBw6EF6iEI6hEMX6:EP6 ET65EX;6VE[6hE_}6UtEc6'Ef6Eja6˂En6Eq6nEuF6?Ex6uE|6;E,6E6Ep6SZE6$E6EW66E6E6fLE@66E6ZE6E)6SE6xEp6I*E6E6EZ6DE6~E6EF6HhE6Ȅ6s[E36E6_E|64 E 6ɻE6_Ej6E6E6!EY6E6ME6EI6zFE6E6:E:6=E6qE 6k'E,6E6Ex60zE6)E6_E l6E$6rE'6'0E+`62E/6WEE26lE6V6E96 E=6bEAL6PED6\EH6ELC6EO6iES6L+EW;6EZ6}E^6?Eb462Ee6I;Ei6"Em.6{7Ep6`Et6Ex)6G E{6fE{6yE%6fE6Ex6FE"6}E6z?Eu6?E6IE6HHEt6E6|E6Es6E6KE6~Es6E6E6zEt6Q?E6E64Ev6"m6ÀEB6@EE6OEIy6ķEM(6qEP6Ň%ET6!EX66U(E[6Ƽ[E_6#EcE6NJEf6Ej6YYEnU6Er6(.Eu6ɏEye65E}6^E6ƀEw6.E(6˕E6E6esE;6BE65E6͜EO6E6m-E6ՌEd6=E6Ϧ=E6Ey6w!E+6ߨE6HKE6ѱEB6E6҂xEʧ62EZ6TE 6ӼE6%Es6ԎE&6E6`E6E@63E6֜hE6E[6oXE6E6BEw6جE,6E6ـE 6E I6UE6ڿE6)UEg6ۓE6E6h=E#6ҋE';6Ew6xE 36+E 6rE6'tEf6aiE"6JE6E 6E$W6HVE(6E+6)E/6BE3J6-^E76feE:6QE>6%EB>6EE6I{EI6(EMw6EQ46ET6+EX6cE\n6E`,6 Ec6 Eg6BdEkg6z Eo&6Er6Ev6 TEzb6WwE~!6E6 5E6gE^6E6QE6E6ՃE\6zE6YuE6iE68E\6E6`E6"E6WE^6E6gE6)EE6Ea6iE"6mE6/sEФ6Ef6E'6tE66?E߫6El6E.6{4E66EB6pEFs6&*EJ?6EN 6EQ6GpEU66EA6 EE6CEI6{EMh6ݳEQ<6GEU6#EX6[E\6E`6Ed^6(Eh26E6ayE6FE6kEX6E.6NBE6E6}E7E7E]77WE7/E7ιE7mE7 YEt7VEL7 JdE$7 E7 E7 (+E7 {E7 fE ^7 cE 77 E7EE7~E7$E7%,E t7E$M7eE('7YE,7qE/7EE37 E77eE;h7&E?B7tEC7.}EF7EJ7LEN7:ER7LEVa7EZ<7GjE^7Ea7Ee7TwEi73Em7Eq_7aEu;7Ey7E|7oE7E7#E7}Ec7E@72E7E7E7?E7E7El7MEJ7E'7 .E7 \[E7 E7!E7!k;E{7!ŕEY7"E77"zXE7"E7#/JE7#Eٰ7#vEݏ7$?*Em7$EL7$1E+7%NE 7%ME7&E7&^E7&QE7'Eg7'nEG7'ɉE'7($iE 7(HE7(E7)5$E7)"E7)4Eh7*FbE#H7*gE')7*E+ 7+WE.7+E27,E67,jE:7,E>o7-"EBQ7-EF27-7EJ7.7uEM7.EQ7.EU7/LaEY7/E]~70Ea`70aEeC70)Ei%71Em71wPEp71Et720Ex72LE|72 Ew73dEZ74E>769E!77W0E78E79E7;KE7E7G18E7HJEž7IאEƃ7K*Ei7L~EN7M`E47O&NE7PyE7QE7S"0E7TvE7UE7WE}7Xt$Ed7Y2EJ7[E17\sgE7]tE7_E7`sE7aAE 7cE7duCE7eJEj7g!EQ7hxE 97iE$!7k%E( 7l|E+7mE/7o+aE37pE77qE;7s2iE?{7tyECc7uMEGL7w:EK57x EO7yES7{DGEV7|REZ7}'E^7OnEb7TBEf7Ej7Enk7ZErU7 Ev?7Ez)7cE~7_E7pE7mE7~E7ɺE7xE7&UE7ԺEj7-EV71EA7E-7bE7>E7E7 E7KE7FE7IEġ7qEȎ7QEz7 Eg7+ET7EA7C?E.7nOE7E7iE7rE7E7K{E7yE7˧E7֬E7Ev75Ed7dE S7EA7AE07hE7)E 7\E7E"7èE&7E*8yE.80E28K/E68fkE:8 E>x8 YEBg8 EFX8EJH8EN88 ER(8)EV8FEZ 8cjE]8Ea8Ee8 Ei8".Em8$Eq8'tEu8)7Ey8+VE}8-vEu8/E=88E08:9jE"8{E8@E8BE8DOE8GE8I'E8KJ)E8MlE8OE8QEĔ8SEȇ8UE{8XEo8ZDaEc8\i EW8^EK8`E@8bE48dEE)8g$PE8iJE8kq'E8m>E8oE8qE8t E8|E85E 87E8E8E8E8E8`LE#8dE'8AE+x8|E/o8$E3f8>E7]8 0E;T8}E?K8E59AE19C`E-9EE*9G|E&9J/E"9LsE9N6E9PE 9SDE9UE9WE9Z+E 9\]E 9^/E"9`E&9c2E*9ez]E.9g;E19j JE59lRE99nE=9p}EA9uEE9}EI9EM9EQ9*EU9gEY9ME]93Ea9&Ee9Ei9Em9}Eq97Eu9?Ey9E}9v?E9`0E9KfE95E9 E9 0E9E9E9xE96E9ܰBE9E9kE9}{E9mE9^dE9OIE9@E92NE:"E: DE :E :E:E: E: E: cE:jE:ޝE!:}E$:E(:LE+:5E/:E3:LjE 7:oE;:!yE@:#/ED:%EI:'EM:)|E"R:+E&W:-vE*\:/0E.a:1E2f:3E6k:5E:q:7E>v:9EB|:;EF:=iEJ:?EN:A~ER:CEV:ECEZ:GE^:I@Eb:KEf:MEj:OLEn:QEr:SEv:UEz:WE~:YjE:aofE:kT!E:u<5E:%&E:gE :|E:rQE:hqE%:^E.:WE6:NpE?:G{EH:AEQ::EZ:5BEc:/El:+Ev:'E:#Eω:!`Eӓ:^Eם:Eۧ:E߱:E:E:E:RE:?E: E;E;E;E;E; E '; E3;E>;"EJ;EV;*E b;E$n;jE(z;!E,;!sE0;$'E4;'IE8;*E<;, E@;/tVED;2-EH;4EL;7lEP;:[EU;=EY;?BE]";BEa0;EHEe>;HkEiL;JEmZ;M|Eqh;Py Euv;SEy;WaE};ZE;^KE;aVE;e6}E;hE;l$E;oE;sE ;v7E;zE+;}z`E;;yEK;6VE[;Ek;E{;lE;*Eœ;S`Eƭ;Eʾ;E;E;E;P\E;iE;E$;E6;xEG;SEY;Ek;#E};E;^E;\E;wE;/E ;XE;E;E;E$;E 7;!E$K;+E(^;5E,q;>E0;IUE4;T%E8;_1E<;iE@;uED;EH;㍗EM;EQ&;EU;;aEYP;E]d;Eay;4Ee;6 Ei;8Em<EEq<VEu<Ey<!E~< #E&< &E;< 'ER<*Eh<-PE~<0E<3OE<6UE<:E<=E<AE<EEE=I]EB1=EFT= 4EJw= \EN= :MER= \EV=@E[=E_'=GyEcJ=Egn=NEk=Eo=W=Es=ۃEw=_E|"=dEF=iEk=E=!rE="9E=$E=&E#=(ՃEH=*>Em=-#E=/,E=1IE=3gE=5vE)=7EO=9Eu=;Eœ==E=@E=B=E=D]hE6=F}:E\=HEۃ=JEߪ=LE=NE=PdrE =R$9EH=SEo=UrE=WdE=Y%E=ZEE=\E 7=^hE `=`)E=aE=cE=enE=g0E"+=h5E&T=jcE*}=lvE.=n9"E2=pE6=q֪E;#=s,E?M=uyECw=wKEG=ytEK=zEO=|gET=~EXJ=3PE\t=E`=Ed=Eh=_Em =EqK=Euv=Ey=E}=jE=[E$=SEP=L"E|=DE==E=5E=.E-=']EZ= ^E=3E=ME= zE =E:=9Eg=E=]E=-E=E=޿EL=+Ez=E٨=E=E=eE3=KNEa=0qE=E=GE=E=vEL='E|=E=wE =]E =CE:=* Ei=E=oE =E$=wE)*=E-[=E1=ϠE5=˥E9=DZE>=EBO=EF=+EJ=EN=)ES=EWF=pE[x=CE_=$Ec=Eh=,El@=7Epr=Et=Ex=ľE} =E==SEp=E=E=%E =9E==MFEq=aNE=u2E=̉bE =͝E@=βEt=yE=E=E=EF=Ez=%Eȯ=E=ֈE=EO=جiEل=ٗYEݺ=ڂE=mE%=XE[=DKE=/E=RE=E3=Ei=DE=LE=iE =䢀ED=E{=E=E=E!!= E%X=7E)=E-=,E2=BE67=XE:p=oE>=EB=EG=EKQ=˔EO=ES=.EW=E\4=(E`n=@Ed=XEh=q^Em=EqS=Eu=Ey>iE~>E;>Eu>E>E>(BE%>E_>AE>}E>[KE>HEK>uE>(E>?E>E:>Eu> 8-E> E> SE)> ~Ee> o\EҢ> gE> E> {EX> E>5E>#E>RaEL>E>oE>E>EB>E>E >E >dE:>Ex>FE>-E>)EE#4>E's> E+>}/E/>E40>_E8o>9E<>BE@>3EE.>%EIm>WEM>EQ>BEV->EZm>>E^> Eb>tEg/>$Eko>Eo>zEs>@Ex3>)E|s>E> E> E8>!%Ez>!E>"+E>"E?>#1E>#E>$-_E>$EI>%E>%`E>%E>&jET>&ݨE>'P}E>'ZE>(6AEa>(HEѤ>)=E>)QE,>*rEp>*uE>*E>+\E=>+YE>,BE>,$E >-!NEO>-xE>-E>.nE >.-E c>/ME>/E>0,>E4>0Ez>1 #E">1zE'>1>E+L>2YE/>2|E3>39E8>3E4zE@>4ED>4'EI:>5(EM>5{;EQ>5EV>6 gEZW>6rE^>6ŞEb>7MEg.>7kEkv>7Eo>8Et>8ciExO>8>E|>9 E>9[E(>9Eq>:E>:TE>:EL>;E>;wE>;E(>=>vE>=EO>>E>>E>> E.>?]Ey>?ʌE>@7GE>@/EY>A E֤>A}E>AE:>BWE>BhE>BE>BEh>C0E>CKE>CzQEL>CE>CׂE>D=E 1>D4E~>DcE>DFE>DEd>DE>EE#>EMCE(K>E{E,>EE0>E܏E54>FE9>FWE=>F@EB>FEFl>GpEJ>GNEO>GESW>GkEW>H?E[>HDE`C>HEd>HZEh>HEm0>I;Eq>IyEu>IEz>IeE~o>J3LE>JnE>JE^>J5E>KE>KWEO>KE>KaE>LEA>LAE>L{eE>LE4>LE>M*E>MeE)>MEz>ME>NoE>NNEp>NE>N"E>NEg>NkE>O&E >OME_>OuaE>O E>OEX>OzE>P'E>P;ER>PcE>P`E >PEM>PE>QE>Q*TEJ>QRFE">QxE&>QqE+G>QE/>QSE3>R E8F>R.IE<>RRE@>Rw!EEE>REI>R(EM>RERF>S LEV>S-EZ>SRXE_H>SvEc>SxEg>S!ElK>SEp>T Et>T2EyO>T[ME}>TE>TET>T2E>TE>U&EZ>UOBE>UwE >UEb>UɑE>URE>VEj>VCE>VlE>VEt>VtE>V4E%>WYE~>W$)E>WAE1>W]EԊ>WzE>WE=>WsE>WJE>W6EK>X E>X'E>XDEZ>XaE>X~E>XEi>XwE>XoE >XVEz>YsE>Y0E1>YQrE>Yr E">YE'D>Y$E+>YE/>Y^E4X>ZE8>Z5E=>ZV"EAm>ZvEE>ZaEJ&>ZEN>Z؞ER>Z3EW=>[E[>[:jE_>[[EdU>[GEh>[3Em>[Eqn>[ Eu>ZEz*>ZE~>ZόE>ZEE>ZxE>Z^E>Z9Ea>ZkE>ZWE>ZBE~>Z.E>ZE=>ZE>YRE>Z1E\>ZE>ZE>[dME|>[ʋE>\0E=>\QEѝ>\E>]dE_>]ʍE>^1E!>^E>^E>_dED>_/E>`1E>`Ei>`$E>aFE->a`E >azE>a ET>a:E>auE>aE |>aE$>b!E)B>b2UE->bL~E2 >bfE6l>b E:>b?E?3>bsEC>bϷEG>bEL_>cSEP>c)=EU'>cEY>c[E]>d/EbT>dEf>d Ek>e6Eo>eEs>eiExN>f>4E|>fE>fE~>gEE>gxEJ>gcE>hMfE>hxE|>hWE>iU,EI>iaE>ikE>ivTE}>iE>i EK>icE>iE>i(Eǁ>iE>iEQ>iSEԸ>iӲE!>i E݉>iTE>iEY>iE>jjE*>jE>jjnbEe>jpE>j҇E7>kE >k6E >khEt>kE>k*EG>kSE>l1E$>lcE(>lE,>lNE1[>lE5>m,E:0>m_E>>mlEC>mYEGq>m$EK>nEPG>nMET>n|EY>n}E]>nDEa>o Efb>o7Ej>ofEo;>oEs>oķEx>oE|>p"E>pQeEZ>pQE>p*E4>p"E>qE>qE|>q:&E>qVQEW>qrvE>qE3>qE>qE>q E~>qNE>rcE[>r7E>rSE8>roEЧ>r E>rDEم>rrE>rEd>r!E>rED>r;E>rE$>seE>sE>s Et>sE>sE V>s9E>sE7>s"\E>s&E>s+~E >s0E$>s4E)m>s9E->s=E2Q>sRE6>sw E;5>sxE?>sED>s'EH>tuEL>t,EQp>tQDEU>tuEZV>tE^>ttEc<>tEg>u]El#>u+Ep>uP8Eu >utEy~>u E}>u~Ef>uE>uwEN>u E>uE7>uvE>ubE!>uO E>u;E >u(1E>uE>u+Ej>tE>t2EU>tƢE>tEA>t{Eɷ>tE->txqEҤ>tE>t@Eۑ>tE>uE~>u+^E>uT0El>u|E>uEZ>u=E>uEI>vE>vHE9>vqyE >v?E)>vE>vE>wE>w=\E# >w'eE'>vE+>vFE0t>vE4>vY1E9g>v%E=>uEBZ>uCEF>uEKM>uVEO>u#BETA>tEX>tE]5>t$Ea>tT[Ef*>t |Ej>sEo>sEs>sXEx>s1E|>sE >tE>tE>t-E~>tCqE>tYLEu>to,E>tEm>tE>tEf>tƊE>tnE_>tQE>u/EY>uE>u3ER>u E>tpEM>tE>tVEH>tWE>t+ ED>seE>sѴE@>sE>sx`E=>sKE>s E:>r[E>rŲE7>rE>rl-E 6>r?_E>r E4>rE>q"E4>qE">q!E'3>qĎE+>qE03>qyE4>q E94>qE=>qqEB5>qaGEF>qPEK7>q@/EO>q/ET9>q EX>qlE]<>pEa>pEf?>pEj>pEoC>pEs>pExG>pE|>psEL>p_E>pKEQ>p7E>p#EW>pE>o{E]>oE>oӂEd>oSE>o2El>o&E>ovEs>oSE>oQE|>oSE>o}0EɅ>oyE >ouEҎ>oqE>olEۘ>ohE>odE>o`E(>o\E>oXlE3>oTAE>oPE?>oKE>oGEK>oCE>o?~E X>o;YE>o79Ee>o3!E>o.Er>o*E#>o&E(>o"UE->oE1>oE6>oE:>oE?'>o CEC>o EH7>oEL>oEQG>n`EU>n EZX>nE^>nYEcj>nEg>nEl|>nyEq>nEu>nEz>naE~>nE+>n}E>nrZE?>nfE>n[yET>nPE>nDEi>n9KE>n/E~>n'7E >nE>nE>n nE>nE6>mE>mmEM>mE>m(Ee>m{E>mE}>m*E >mE>mE">mHE>mE<>mqE>mEV>mE>mEp>mXE>mE >mE>m"E>m9E5>m\E>mE"Q>mE&>m-E+n>mWE/>mzE4>mͫE9>mE=>m/EB9>mEF>mEKW>nEO>n*-ETw>nBPEY>nZvE]>nrEb&>nEf>nEkG>n/Eo>ngEth>nEx>oE}>oE>o4'E>oLpE=>odE>o|E`>oE>o^E>oE>p|E>p#E9>pEE>pg E]>pE>pE>p˦E>p6Eƨ>qE;>q0RE>qQEb>qsE>qE݉>qE>q&E>q%ED>q-E>q:El>q.E>q#E>q/E*>q+E>qE S>q}E>qtE}>qlE>qdE>q\E"=>qTE&>qLE+i>qDE/>qq`E9+>qVE=>qEBX>qEF>qEK>rEP>r;kET>r_EYI>r/E]>rEbx>rEg>rEk>sEp>>s::Et>s^Eyn>sCE~>sE>sE7>skE>sEh>sE>shE>sE2>sE>sEe>siE>sE>s{E1>su>E>sowEe>siE>sdEǙ>s^\E4>sXE>sXEh>stE>sEޞ>sYE9>sE>sEo>sE >tE>t5gEB>tQE>tlEy>tE>tE >tMEN>tE>tE>uE#>u-E#>u4E(\>u6E,>u8E1>u;E64>u=$E:>u?8E?o>uAEED >uCoEH>uEEMI>uGEQ>uIEV>uKE[#>uME_>uOEd`>uR)Eh>uTQEm>uVrEr=>ubEv>uzpE{{>uE>u`E>uEZ>u؋E>uE>vE9>vE>v6Ez>vN0E>veE>v}]E[>vE>vhE>vE>>vE>vEŁ>vpE">vlE>voEe>v}XE>vb-Eܩ>vGEL>v+E>vE>uE3>uڬE>uEx>ugE>u)E>umEa>uRE >u7E>uqEK>ujE>u E>utE"7>uE&>tE+>tE0$>trE4>tE9m>tE>>tEB>tvEG[>tEL>tnEP>tEUK>tTEY>tE^>t?Ec<>t5Eg>tEl>tEq.>toEu>t2Ez{>tE">tбE>t^Eo>tE>tE>trEe>t&E >tE>tE[>tOE>uE>u ES>uFE>tE>t EL>tfE>tEɝ>tEF>t|E>tEט>tn?EA>t[E>tHE>t6%E=>t#wE>tE>sE;>sWE>sأE>swE:>sE >sPE>sE:>r}E>r`E>r|pE";>rGE&>rE+>qeE0>>q.E4>qs*E9>q>E>A>qEB>pEG>pELF>pi{EP>pA"EU>pKlEZL>pUE^>p_Ec>piEhS>ptEm>p~7Eq>pZEv[>pxE{ >pE>pEe>pE>p E>pHEo>poE>pوE>pE{>pE*>pME>pyE>pa{E8>p4E>pE>oڤEF>oE>oEʦ>oSEV>o&E>nEط>nEg>nE>nrE>nEEz>nE+>m E>mE>mE?>mE>mqE>maE S>m1E>mE>mEj>mE>mםE#>mzE(>mWE-4>m4E1>mE6>m̱E;M>mʀE@>m]ED>m EIg>muEN>mL8ER>m"EW>l}E\7>lE`>lEe>l}AEjT>lSEo>l*REs>lExr>kXE}'>kE>krE>kZEG>k1gE>kE>ktEh>k%1E>k3E>kBE>kQjE@>k`2E>knE>k}Ed>kgE>k*E>kEȉ>kE@>kmE>k.E֯>kEg>kE>l0E>kE>kƑEG>k*E>kE>kn>Ep>kPE)>k3E>k"E >jET>j[E >jE>jbE>jE":>jeE&>jHE+>j*E0h>juE5">j |E9>j }E>>j zECR>jaEH >jBEL>jj:EV=>iCEZ>i9E_>i$Edo>i Ei+>i Em>iEr>iEw_>iE|>iE>iE>iEQ>i|E >iME>i+E>iED>iE>iE>i^E}>i6E;>i E>iE>iEt>iPE3>i+E>iE̯>ixEn>iE->iE>i E߫>i0Ej>j /E)>jH5E>jpWE>j`Eh>jfE(>jE>kE>k8E h>k`E(>kE>k'E>k>Ej>loE"+>lE&>lE+>lE0o>lxE50>l^E9>l!;E>>l#ECu>l$EH7>l&EL>l(EQ>l*fEV~>l,?E[A>l.E`>l/Ed>l1Ei>l3EnL>l56Es>lBFEw>lUE|>li.EZ>l|E>lE>l]E>lEi>l=E.>lݾE>lE>myE{>mE@>m+sE>m>E>mRXE>meEU>my3E>mE>m\Eͥ>mEk>mE1>mYE>mE>mE>m,EK>mE>mpE>mE>mEf>mrE.>m E>mE >mxE>mpEL>mE>m E>m@E#>nE(l>n E-5>nE1>n_E6>n%E;>n/E@X>n8ZEE!>nAEI>nJEN>nT3ES}>n]xEXG>nfE]>np)Ea>nEf>nQEko>n̤Ep:>nEu>oREy>o9E~>o^Ed>o_E/>oE>o3E>oE>pE]>p8NE)>p\E>pE>pE>pEY>p[E%>pyE>qE>qEƋ>q.EX>qAE%>qU)E>qhKE>q{Eލ>qEZ>qE(>qE>q%E>qUE>qEa>rE/>rE>rE >r*E>r5Ej>r@E9>rKE >rVE!>raE&>rlE+w>rwE0G>rE5>rE9>rE>>rEC>rEHX>r1EM)>r5EQ>rEV>rtE[>rE`l>rEe>>rEj>rqEn>ra7Es>rPEx>r?E}V>r/nE(>rE>r%E>qE>qEr>qUED>qE>q0E>q΀E>qE>rEd>r!OE8>r=E >rXE>rt`EŴ>rEʈ>rE\>rvE0>r/E>rE>sE>s6ZE>sREY>smE.>sPE>s:E>s)E>sE>sE Z>sE0>sE>sE>sE>sE!>sE&a>sE+7>sE0>sE4>sE9>sE>>sECl>sOEHC>sEM>sEQ>sEV>s֬E[>sE`|>sPEeU>sEj->sEo>sƿEs>sâEx>sE}>skEj>s8ED>sE>sE>sE>sE>t~E>tGE`>tvyE:>tcE>tUE>u@E>u27E>uaWE>urE\>uZE7>uME>vQE>vLJE>v{WEަ>vjE>vE_>vVE;>vRE>uE>uE>uutE>u=E>uE h>tdEE>t E#>t[E>t#TE>sE">sE'>sz@E,x>sAE1V>sE65>s7E;>sE?>rED>rEI>rEN>rbESn>rEXN>r!E]->rҕEb >rEf>rpEk>rEp>rVEu>rEzm>rrE.>rE>rmE>rTE>r;uE>r"/E>r Eu>qEV>qE8>qE>qzE>qYE>qr1E>qXEã>q?EȆ>q&}Eh>q fEK>pE.>phE>pE>p;E>pgE>pE>pE>phEg>pEK>pE/>p{E>pnE >pb&E>pUyE>pHE>p<9E >p,E%p>pvE*V>o$E/;>oE4!>oE9>omLE=>oFEB>o EG>nLEL>nEQ>nEVl>n&E[S>n`E`:>n:~Ee!>n/Ej>mEn>mzEs>m)Ex>mʕE}>mE>mbEu>mE^>mAEF>mE.>mE>mE>mE>nTE>n E>n@E>nE>n%Ev>n$E`>n EI>mE3>mE>mOhE>m6E>lE>lE>lVbE>lE>kE>kEs>k]YE^>k EI>jE5>jE !>jdCE >j5E>jA8E>jLE>jXE$>jcE)>jo7E.>jzE3>jFE8p>jE=^>jYEBK>jEG8>jEL&>jEQ>j˔EV>jEZ>jE_>jfEd>jEi>jEn>jiEs>j<Ex>jE}u>iEd>i ES>i EB>i[E2>i.E!>i,E>h3E>h2E>hzE>hM E>h E>hE>gQE>gE”>gmEDž>gEv>gEg>gp@EY>gWEK>g?fE<>g&E.>g{E >fE>fݙE>f5E>fE>fSE>fgE>f--E >eNE>ekE>e||E>eAE >eE%>dE*w>dE/k>dUE4_>dE9S>c5E>G>cUEC<>cjdEH0>c/EM%>bER>b.EW>bE\>b E`>bEe>b:Ej>bsEo>bb&Et>bPEy>b?3E~>b-E>bE>b E>aE>aE>aEE>aĽE|>a&Es>a Ek>apEb>aQEZ>a2ER>aEJ>`xEB>`NE:>`'E3>` E,>`wE$>`XE>`9E>`{E>_PE >_E>_$E>_E>`E>`E>``Y~E>`vXE>`0E>`E>`E">`E'>aE,>a#E1>a@E6>a]E;>azgE@>aEE>aJEJ>a EO>`ET>`EY>`K E^>` Ec>_Eh>_Em>_KEr>_ Ew>^E|>^E>^JE~>^ E|>]ʮEz>]Ex>]UEv>]Et>\Es>\Eq>\}Ep>\GEo>\En>[۟Em>[Em>[oEl>[9El>[Ek>Z͑Ek>ZEl>Za`El>Z/El>Z,3El>Z(Em>Z%En>Z"#Eo>ZEp>ZmEq>ZEr>ZE t>Z}Ev>Z&Ew>Z Ey>ZhE!{>Z E&}>ZE+>YSE0>YE5>YE:>Y)E?>YED>YWEI>YEN>YbES>YEX>YE]>YEb>Y|Eg>YpEl>YcEq>YWEv>YJE{>Y>+E>Y'E>XؗE>XPE>X9E>WE>W!E>WKE>VqE>V E>V]E>VCE>UE>UocE>UE>TЁE>TE>T=E#>T"E*>T E1>SE9>SE@>SEH>SEP>SEX>SdEa>SIEi>S.Er>StE z>R[E>RKE>RJE>R.E!>RxE&>R~E+>RnuE0>R]E5>RMaE:>RR,1ED>REI>R 2EN>QET>Q6EY>Q٥E^>QEc$>QEh/>QEm;>QrErF>Q}EwR>QYE|^>Q5/Ej>QEv>PoE>PE>PE>PGE>PZE>P6rE>PE>OE>OBE>OE>OcE>O[E>OME >NE/>N\E=>MtEK>MEZ>MFEh>LaEw>LE>L/E>KE>KvkE>KE>JE>J_E >J#E>IFE>IE>IsE$>IGE#4>IE(E>IE-V>IѾE2g>IܑE7x>I]E<>I+EA>IEF>JEK>JEP>JEU>J(oEZ>J34E`>J=Ee>IEj+>IjEo>>IxEtQ>I7(Eyd>HxE~w>HE>HqE>H0>E>GE>GE>Gk1E>G)xE>FE>FE)>Fd>F)ES>FxEh>E$E}>EEŒ>EEʧ>EtfEϽ>EPE>E+E>EuE>D E>DE*>D{E@>Dv2EW>DQEm>D-tE>D E>CE>CE >Cv5E>CBE>C5E>BE!'>BdE&?>BtE+W>BA_E0o>B E5>A|E:>AE?>As^ED>A?EI>A YEO>@ET>@EY6>@E^O>@xEci>@Y0Eh>@:]Em>@sEr>?|Ew>?rE|>?E>?E >?E;>?aEU>?BEq>?#E>?E>>QE>>E>>7E>>dE>>9E2>>[EN>=Ek>=Eɇ>=EΤ>=dE>=:;E>=E><E><[E5><4E><#jE><E><pE >;E%>;݊ED>;Eb>;E >;E%>;E*>;E/>;tE4>;bE:>;Q|E?>>;@ED^>:HEI~>:EN>:fES>:|EX>94E^>9Ec!>99EhB>8*Emc>8Er>8WwEw>8 E|>7E>7uNE >7)E->6vEO>6OEq>6E>6hnE>6LE>61E>64E>5EB>57Ef>5E>5PEĭ>5E>5qiE>5UE>5:xE<>5Ea>5wE>4áE>4sE>4"^E>3ѮE>3E>>30HEc>2ߞE>2E >2>)E>1_E>1E >1KE!F>0 E&l>0_E+>0YE0>0E5>/E;>/E@.>/EEV>/zEJ}>/UEO>/0ET>/ xEY>.fE_>.OEdD>.8Eil>.w En>.REs>.,Ex>.E~>-E8>-Ea>-h8E>-%kE>,E>,E>,\E1>,E[>+E>+!E>+QAE>+3E>*FE/>*OEZ>*EaE˅>*mEа>)sE>)E>)yE2>)TE^>)/E>) E>(E>(E>(E;>(vEh>(QE >(,E>(E>'E>'EI>'E#w>'YE(>' E->&E3>&uE8.>&)E=\>%EB>%EG>%EEL>$ER>$EWF>$aE\u>$Ea>#ɑEf>#}eEl>#1YEq3>"Evc>"E{>"IE>"k E>"?E$>"ET>!PE>!E>!E>!gVE>!<EI>!E{> zE> BE> E> cEB> Et>4EΧ>YE> E >uE?>FEr>/E>E>3E >UE?>|Es> E>2E>iE > EC>>Ew>E>fXE!>6E'>{E,J> E1>E6>y*E;>IEA >EFU>EK>;EP>EU>\(E[.>,E`d> Ee>;Ej>LXEp >hEu@>vEzw>GE>E>E>BEU>E>E>=E>E6>En>8E>yE>E>o ER>:dEË>E>E>E8>gLEr>2Eݬ>E>E >E[>_OE>*E>E >EF>E>;E >E>E4>cEp>E!> ӏE&> E,$> CnE1`> RE6> =E;> kEA> "EFS> EK> EP> Q+EV > 4AE[H> `E`> ~Ee> ݑEk> Ep@> Eu> Ez> iE> LE:> 0Ey> 8E> OE> OE7> ^Ev> yE> q:E> AE5> Ev>E>pE>PE7>PEw>Eθ>E>cE;>E|>^E>.E>LEA> E>E>LE>EI>ĉE>E >OET>5E>pE">+E(>E-a>E2>_E7>aE=,>3EBp>:EG>EL>`ER>>?EW>DE\>Eb >EgQ>El>DEq>wEw!>VE|g>5\E>E>E9>хE>E>sE >?ES> E>|E>nE)>`{Ep>RDE>5EG>'Eˏ>kE> AE =Eh=ݦE=E=lEB=`5E=1E=E=MEg=E=sUE =CEE==E=E=E #=_E%n=UE*=%E0=)E5N=ټE:=SE?=EE0=EJ{=hEO=KEU=/3EZ_=E_=iEd=EjD=Eo=$Et=Ez*=h.Ew=KE=E=.E_=E=BE=pEI=E=G E=OE4=qE=E=E =^Eo=Eɾ=56E =nE]=E٬=E=EL=5E=E=E== E=dE=E.=E =IE=_E"=Et=뒺E=E$=E)i=)E.=9E4 =>E9_=EE>=kVED=I"EIW=&EN=ES=~EYP=OE^=ݝEc={EiK=YEn=6Es=EyG=E~=E=հED=ԎE=m+E=KEB=)E=E=EC=E=̢/E=ˀED=^E=<E=EF=%MEΝ=ĉE=rEK=REޡ=E=EP=AE=]E=HEW=E=E=u E _=ؼE== ED3= EI= EN=, ETB==EY=OE^=a(EdQ=kEi=rEo=ziEtc=Ey=3E=kEv=E= E.=E=FE=}hEB=yv E=u E=qIEX=mwE=j:E=f8Ep=c"E=_pE+=\/?Eω=X E=U:EE=QEߣ=NF<E:DE~<:;E0<6=E<2?8E<.?Ep<+E<(+~EE<%9WE<"FE<U E<bZE<p,E^<}}E<E6<#Eʢ< lE< 0E{<yE<ET<E;M~E.;E;V.E ;ٙEv;]E; ER;dFE ;E?;GE;DUE);@]E ;=klE;9pE;6E;3 E!u;0FE&;/j.E,a;.rE1;-E7M;,E<;+EB;;+EG;*=EM);)`3ER;(CEX;'E];&$Ec;%,Eh~;%Em;$1Esn;#TEx;"wE~_;!E; @EQ;޹E;0EB;#E;FE5;h~E;E(;4E;~E;E;E;3EŌ;E; EЀ;tE;oEw;J4E; En; ]E; Ee;yE;^E\;qE;3EU;E ;EN:.E:fEH:E":YE(C:+7E-:E3=:}E8:E>9:rEC:DEI5:EN:ET2:ظEY:ՈE_/:ZEd:+kEj-:GEo:̈Eu,:ŝiEz:mE€,:=E…:9E‹,:wE:NE–,:~E›:OE¡-:E¦:zE¬/:E±:LE·2:][E¼:-TE4:MEǶ:̺E8:EҺ:k~E=::EEݿ: EB:LE:EH:~HE:xEM:r'E:kAET:hE :fC~E\:cVE:aIEd:_SBE:]?E%l:Z.E*:XbE0v:VE5:SE;:QqEA:O xEF:LEL:J~EQ:H.PEW:EE\:C Eb':A?IEg:>DEm4:9E9FQEU9E#9_E)l9QE.9֪E49E:9ZE?9ȳLEE*9ƔEJ9ħ7EPC9¹EU9'E[]9aE`9BEfx9cEl96Eq9& Ew"97E|9IEĂ>9[XEć9mEč[9~`EĒ9YEĘy9EĞ9Eģ9Eĩ'9EĮ9EĴE9_EĹ9EĿe9E9#Eʆ94BE9D0Eէ9TxE89dlE9tfEZ9GE9E|9E9WE9E29NE9E V9'E9~E{9z`E 9v>QE#9r\kE)39nzzE.9jE4Z9fE99bvE?9^zEE9[EJ9W,EP=9SIuEU9OfE[f9KzE`9GEf9CEEl$9?Eq9;{EwN98 E|94/Eły91REň9/Eō9.,Eœ;9,EŘ9+OEŞg9)tEţ9'Eũ9&NEů*9$.EŴ9#(EźY9!Eſ9 Eň9osE9ZEз9IEO9E9"iE9!E9E9h*EI9ԐE9@E{9NE9 E9 EG9 E9^oEz9uE96xE$9E*H9E/9zE5}8E;8E@8}EFN8UNEK8- EQ8EW 8E\8EbX8Eg8`Em87Es-8 Ex8E~e8ԹEƄ8я-EƉ8dEƏ<8:EƔ8Eƚw8WEƠ8+Eƥ8EƫQ8bEư887Eƶ8 EƼ+8@E8AEh8-E8ZEҦ8EF8sE8rE8E$8E84Ed80E8*E8H+EE8E 8` E8E'8x[E8E!i8)E' 8BE,8E2N85E78E=8MEC58٦EH8eENy8ET8}|EY8 {E_b8Ee8 Ej8EpL85Eu8E{8~=Eǁ78{Edž8xZEnj8uEǒ$8rEǗ8pEǝm8mIEǣ8j,MEǨ8g@EǮ\8dVNEǴ8ak,Eǹ8^EǿM8[E8XEʙ8UE?8RE8OFEی8L5E28J#E8G'E8D;E(8AOE8>d$Ew8;wE89^+E87En86iE85E83Eg820E%80E*8/QE0a8-7E6 8,r{E;8+~EA]8)EG8(#EL8&ERZ8%BdEX8#JE]8"`EcY8 Ei8}vEn8 EtY8Ez8)|E8EȅZ8FvEȋ8 EȐ8c]EȖ]8EȜ 8,Eȡ8Eȧb8sEȭ 8,EȲ8 Eȸg8 J1EȾ8 E8gEn8hE8E8PEw8E%80uE7}E7~E/73E7E7[E<7 E7%tE 7@EI7\E7x E7E$X7߮!E*7.E/7KE5i7E;7E@7b.EFz7EL+7-]EQ7̒EW7 E]?7]Eb7Eh7( EnU7č7O7E7Eڨ7E\7]E7hE7HEE}7(E27]CE,{7E67oE6%E x6*ED6p4E6/E6 E"6E(v6kE.C6*E46DE96 E?6fEEz6%eEKH6EQ6EV6aE\6 ?Eb6EhO6En6\ Es6Ey6SE6Eͅ[6VCE͋*6E͐68E͖6E͜6OE͢k6Eͨ<6?Eͮ 6Eͳ6HE͹6EͿ6EP6(E"6AE6.E6*Eܗ6{&Ej68E<6E6iE6|HE6z`E6wEZ6uWE -6rvE6pM^E6mE6kCE"|6hE(P6f:E.$6cE36a0E96^E?6\%?EEw6ZEKL6YEQ"6WEV6V%+E\6TEb6S-Ehx6QEnN6P5Et$6NPEy6M>wE6K‰E΅6JFE΋6HEΑV6GOEΗ-6ELEΝ6D\uE΢6BEΨ6AiEή6?DEδd6>uEκ=6E#6"VE)i6 9E/D6_E56jE:6hE@6EF6q:EL6ERm6yEXJ6!E^'6Ed62Ei6Eo6Eu6 eE{y6 EρW6 Eχ56 ՝Eύ6zEϒ6~EϘ6EϞ61pEϤ6HUEϪm6_AEϰL6vbE5=iE5;E5:E59E57XE560uE54E53LE51E50hE5.E 5-_E5,pE5*OE5).=E"5'E(v5&JJE.o5$E4g5#f8E:`5!+E@Y5 EFS5ELL5ERF5EX?5E^85Ed35Ej-5Ep'5-Ev"5,=E|5>QEӂ5PiEӈ5b{Eӎ5tEӔ5'EӚ5EӠ5Eӥ5@Eӫ5ЮEӱ5&Eӷ5 Eӽ5 E5 pE5 -E5 ?sE5 QE5dVE5vE5&E5E5 E5E5E5E 5E5 E49E4^E#4E)4E/4ͻE54E;4EA4<_EG4`EM4텵ES4zEY4FE_4$Ee4#Ek4>5Eq4bEw4E}4ެEԃ47Eԉ4Eԏ4ڿEԕ4كEԛ4HEԡ4 'Eԧ4KEԭ4ԔEԳ4XEԹ41EԿ4E4ϥE4jjE4/6E 4E4ʹE4E4DzE4 E#47E(4ĔE.4Z?E44E94E@4EF4pE M46'E&T4E,[4&E2b4AE8i4J_E>q4iEDw4EJ45EP4_|EV4$E\4Eb4Eh4uEn4:Et4Ez4EՀ4EՆ4SVEՌ4EՒ4E՘4?E՞4lEե43Eի4{Eձ4Eշ(4Eս34M&E>4>EJ4S>EU4hEa4}Em4VEy4E4:E4E4dE4E4ZE4)E 4?]E4TE4j#E4IE$4E*4 E0$4xE634ԲE Eע4=Eר4;E׮4:@E׵49kE׻248EL47*Ef46ǐÈ45EӚ44mEٳ43!E42E41E40E4/EE:4.{EU4-rEq4,i0E 4+_E4*VE4)ME4(DQE"4';3E)4&1E/64%(E5S4$E;p4#EA4"EG4!EM4 *ES465EZ4AE`!4MEf@4YkEl^4eWEr}4q!Ex4|E~4E؄4E؊4Eؑ4Eؗ84+E؝X4ÈEأx4Eة4_Eد4Eص4Eػ4E4E;4 ]E\4 E~4 +Eڟ4 7xE4 CCE4O[E4[E'4gEI4sEl4E4>E 4{E4E4$E3zE$?3E*c3E03ŜE63 E<3EB3EI3+pEO>3EEUc3^E[3xEa3tEg3謎Em3kEt3TEzD3_Eـj3* Eن3.Eٌ3[Eْ32Eٙ3ފEٟ,3!E٥S3;aE٫{3ܓEٱ3 Eٷ3D_Eٽ3ڜE3EB3MEk3إE֓3Eܼ3SsE3֪>E3E83WEb3ԮE3E3\E3ҳE 3 E43aE^3иE 3E&3g"E,3ξE3 3E953miE?a3EE3EEK3sEQ3NEX3"E^>3zdEdk3Ej3)Ep3ǁEv3}E}35tEڃM3ŏWEډz3VEڏ3C-Eڕ3ÝEڜ3Eڢ33QEڨa3Eڮ3Eڴ3^Eں3 E3tEM3E}3bEӭ3dE3PE 3ƛE=3E3wUE3E3dqE$*3E*\3Q9E03ǤE63=E<3ܳEC(3*EI[3ߟEO3EU3E[3Eb)3vEh]3uEn3b6Et3Ez3MxEہ/3Eۇd38Eۍ3ﭏEۓ3"Eۚ3E۠93 2Eۦo3;E۬3%E۲3kPE۹3ޠEۿH3RE~3+E˵38?E31E#4EZ4HeE4E4#E4tdE:4-Eq4E4.E 4tE4hEU3E3E"3~E)3$E/;3:E5s3;E;3X EA3EH"3uEN]3ET3ےEZ3!+Ea3ԯEgI3>Em3ͼEs3]IEy3E܀73|BE܆t3 E܌3Eܒ3,Eܙ)3Eܟf3MEܥ3Eܫ3qEܲ3nEܸ[3Eܾ3)E3E3OiES3Eב3vE3 E3jEM32wE3ƲE3YFE 3}ٌEK3w6E 3p'E3iOE 3byEK3[E"3TDE(3M*E/ 3G E5N3@L:E;39w7EA34^EH35:ENT359ET36+EZ36Ea37eEg]37Em38 0Es38|Ez&38E݀i39vE݆39E݌3:f=Eݓ33:Eݙw3;UEݟ3;Eݥ3",EW3>lE˜3?E3? E(3?6Em3@vCE3@pE3AdnE@3AUE3BR?E3BE3C?E [3CE3D-gE3D*E23EE#z3EE)3F0E0 3F~E6Q3FDE<3GkEB3GpEI,3HXEOu3HtEU3IEE\3I3AyEE 3A4EKo3@YEQ3@EX3@%Ew3>_E}3>E߄I3=tEߊ3=NbEߐ3E37E'37?E|36KE36E '36-E}35|E35xtE)35kE"34uE(34jE/,34E533E;33\EB133EH32PEN32O~EU831E[31Ea31B&Eh@30En30CEt305E{I3/uE3/E3/)EU3.ЎE3.wnE3.BEb3-!E৻3-l'E3-'Ep3,E3,_E%3,2Eǀ3+E3+RE73*Eڒ3*^E3*EEI3)AE3)E3)9E^3(hE3(E3()`E t3'(E3'pE.3'E 3&E&3&\E-G3&E33%E:3%HE@b3$EF3$EM3$4ES}3#EY3#E`;3#&.Ef3">El3"rKEsZ3"tEy3!E3!dE{3! E3 GE;3 WEᙜ3E3E_3IE3E"3EṄ37E3ܣEG3E̩3&E 3Eo3pE3 E53E3`CE3GE_3ZE3TkE&3E 3E3IES3E3E&3?E,37E23vE9L34E?3EF3EL}3'VER3 EYJ3rE_3|Ef3=El~3cEr3 EyK3E3UE3E⌂3E3H;ER3E⟻3E#3>E⬋3E3E]35E3ܗE03*E̙3+E3kEm3{E3"EA3 ɠE3 pE3 ~E3 uE3 e~EW3 E 3 E.3 ZE3 E 3 E&q3 P/E,3 \E3J3 E93 F6E@$3EF3[EL3ES2E2iE82-GE2}qE2RE2TE2meE!u2E'2 E.]2^4E42E;D2|EA2P EH,2EN2EU2BsE[20Ea2Eht256En2#Eu_2ME{2(EJ2z)E2ˉE72E䕭2n^E$2E䢛2wE2c0E䯉2E2Ex2XlE2lEg2LE2NEX2E2.EI2D2E2GE:2E2:E-2 E2qE !21E2mE2عE2-#E$ 2ށrE*2E02*E7z2E=2ӪEDp2(fEJ2}EQh2ѢEW2&mE^`2{6Ed2ΡEkX2!Eq2tExR2ǛE~2EL2mE2 EH2AE2gEB2ѻ8E2E?2b(E岾2ϵE=2 E忼2^E;2ͲkE̺2E:2ZEٸ2˯E82E2XtE82ɭ E2E:2V4E2ǪE;2?E 2QE>2ŤE2E!@2LE'2ßE.D2eE42G-E;I2EA2EHN2BEN2EUT2=E[2BEb[2Eh2Eob2CEu2E|k2E2EEt2E2JE}2HE2E棈2E 2KE氓2E2UE潟2NE%2Eʫ2E22RE׸2E@2;E2WEN2E2E^2[JE2Em2E 2_WE~2E2 E2cE&2E,2E3+2hE92E@>2EF2lEMR2ES2EZg2mE`2qEg}2SEn2oJEt2PE{2rE灪2qE52E2uEN2tE21Eg2!E2x*E篁2E 2%E缚2|E(2PEɵ2*FEC27E2LE`2/]E2E}2E 22E2LE)2ޡE25E H2E2Eh28E2:E%2E,2E <2?[E2>Ey2=mE!2<)eE'2:E.U29LE428[E;27EB325ӽEH24EOr23LEV222E\20IJEcS20GEi20-Ep20ּEw621NE}21eEx21XE21Eꑼ22<&E^22E22Eꥢ235EE23Y}E23E깊23E-240aE24wEt24E25>Eڻ25NE`25GE25E26%AEL26lE26E26E ;27CE27E27E,28E#28dE*x28E128E729;E>k29EE29˃EK2:VER`2:[ EY2:E_2:EfW2;1El2;xEs2;XEzO2<E2=EB2>E2>qE×2? EB2?SE2?cEט2?ݚEC2@"E2@h$E2@'EE2@E2A9E2AEJ2AE 2BE2BUyEP2BUE 2BE'2C)E.W2CpE52CWE;2CEBa2DD~EI2DEO2DLEVl2EE]2E]Ec2E+Ejx2E]Eq(2F0zEw2FvE~2FE72GE2GI E쒘2GEH2G3E2HE즩2H^EZ2HE 2H&E캽2I.OEo2IskE 2IE2IEՅ2JBE62JE2JE2KEO2KY&E2KE2K Ei2L*E 2LpE2LE2LE82MBNE%2ME,2ME3V2NE: 2NW$E@2NjEGv2NߘEN,2O#ET2OgE[2OEbM2OEi2P4Eo2Px+Evq2P"E}(2PE2Q? E튖2QzEM2Q=E2QEힽ2R-=Eu2RhE-2RE2RE2SKEW2SUYE2SwE2SˉEԂ2TE<2T?2E2TxE2TJEj2TE$2U%E2U^rE2UE T2UE2V E2VC*E2V|E%A2VNE+2VHE22W$5E9v2W\E@22WEF2WtEM2X&ETh2X:E[%2Xr:Ea2XEh2XEo^2YiEv2YQ E|2YE2Y¿EV2YuE2Z42`HEU2`E[2`Eb2`DEiQ2a"mEp2aXEv2aE}2aĮEe2aE+2b0E2bfyE2bLE~2bED2cE 2c=3E2cqEﺘ2cE`2cٕE'2d sE2dAEշ2dtE2dIEH2dE2eVE2eBE2ev Ej2ePE32eݘE 2f@E2fFE2f{jE [2fE'%2f5E-2gE42gLE;2g)EBO2gEB2nyE2n9}E"2nlRE)2n?E02n E7Y2oE>+2o7ED2ogEK2oER2o(EYu2oJE`G2p$[Eg2pSBEm2p#Et2pE{2pEj2qE>2q=#E2qkE2qE2qѩE2rEf2r7E;2rjWE2rE2rϞEƽ2sBE͓2s4Ei2sgYE@2sE2s˂E2sE2t+E2t\9Es2tUEK2t}E #2tE2urE2uLfE2u|5E&2uE-\2uyE452v E;2v9jEA2vhEH2vEO2v:EVv2vE]O2w"'Ed*2wPEk2w~Eq2w&Ex2wME2x Eq2x9_EM2xi2E(2xE2xȁE2xAE2y'E2yW`Eu2yER2yaE02yE 2z"E2zDaE2zsoEߥ2zuE2zюEb2{|E@2{/OE2{^ E2{E2{E2{?E2|E{2|GRE$[2|uE+;2|nE22|DE82|E?2},EF2}Z>EM2}ET2}E[`2}EbB2~JEi$2~=Ep2~jEv2~E}2~eE2~E2Er2E2EU2pE82E2wE2E2E2$E¬29%Eɑ2L+Eu2_)EZ2qE?2E$2E 2E2SE2E2E2`E2En29EU2.gE#<2AE*$2TE1 2gE72zE>2EE2EL2ES2ƹEZ{2ٛEad2LEhM2kEo62Ev 2"E} 24E2FE2XE2jE2|aE2ZE2%Er2E]2:EH2E42E2(E 2E2!:E23E2FE2XE2jE2}OE2vEq2E_2_EL2ôE;2 E#)2\E*2E12E72E>2+,EE22:"E:2JsE 62ZE22jE/2{E+2NE&(2nE-&2zE4#2E;2>EB2׼EI2KEP2EW2)E^2Ee2El2..Es2<|Ez2JE2YE2gYE2uE2E2 E2GE2fE2E2ʟE2؛E2E2E2KE2E2rE2*E"28_E%2EE'2SHE*2`E .2mE12{&E52tE"92E)=2bE0B2E7F25E>J2˕EEO2ELT2XESZ2EZ`2Eae2(Ehk2SEor2(Evx25E}~2C E2PKE2]mE2jE2wE2E2E2E2E2E2aE2E2uE2E2E2E2CE 2E2(E25+E *2AZE52ME@2Z!EK2fE&V2sE-b2}E4n2E;x2EB2uEI2EP2EW2E^2@Ee2El2^Es2Ez2gE2J E 2,~E2E&2,E42qEC2ES2Eb2Ep2E2EȐ2YEϠ2$Eֱ2E2ԀE20E2E2vE2E2E(2oE:2EL2E_2NE$q2E+2pE22WE\2tEc2sbEk32sErl2sEy2sZnE2s,E2rEQ2r|E2rE2rvfE2rGE:2r Eu2q2j^F2j{_F2j]F&2j@F2j# Fl2jF2i F2iʷFW2iGF2iF2ir[FB2iTF2i7RFŊ2iF.2h!F2hދFv2h*F2hwF׿2h&Fd2hhbF 2hJF2h-sFS2hF2gF2gցFB2gF2gF2gF22gdF2gHXF~2g+F$2g|F 2fFo2fֲF2f^F2f}Fc2f}F 2f_F 2fBF$V2f$OF'2fF+2eF/K2eF22e0F62euF:A2erF=2eVFA2e9FE72eFH2eFL2dFP/2dǵFS2dFW2dF['2drwF^2dVFbx2d8Ff!2dFi2cfFmr2cFq2c Ft2csFxm2cF|2cibF2cKFi2c.F2c~F2b Fe2bF2bF2bSFc2b~%F 2b`F2bCFb2b&hF 2b MF2a%Fa2aF 2aF2aFb2atfF 2aVF2a7Fc2aF2`F̺2`xFe2`3F2`F׽2`Fi2`fPF2`J4F2`.Fm2`F2_F2_Fr2_F2_mF2_4Fx2_iF%2_LF2_0F2_^F -2^F2^F2^(F52^gF2^F2^fF!>2^JHF$2^-F(2^F,I2])F/2]F32]QF7S2]F;2]xF>2]Z$FB`2];FF2](FI2\FMm2\6FQ2\nFT2\FXz2\F\*2\m)F_2\PFc2\4EFg92\Fj2[\Fn2[FrJ2[Fu2[-Fy2[F}Z2[lF 2[P8F2[3}Fl2[F2ZF2Z[F2ZF12ZF2ZcF2ZjFE2ZMF2Z1IF2ZFZ2YF 2YEF2YFp2YF"2YXF2YhFÇ2YKF92Y/7F2YRFΟ2XFR2XF2XFٸ2XFk2XF2XcqF2XFVF2X)ZF82X LF2W F2WыFT2WF2WF2WxMFp2WZF$2W2QE,F2Q)Fݳ2Q6Fm2PF(2PF2PF2P@FX2PF2PtF2PZF2PACFE2P'F2P?F2OF w2OڎF32OF2O.F2OzFh2OoF$2OUF 2O:VF$2OF(Y2OF,2NKF/2NϘF32NF7L2NF; 2NWF>2NeFB2NK`FFA2N0FI2NFM2M$FQz2MFU72MoFX2M&F\2MFF`r2MyrFd02M_Fg2MFFk2M,7Fok2MFs)2LFv2LFz2LF~f2LRF%2LF2Lu^F2LYFc2L>F"2L#SF2L F2KFb2KxF"2K@F2K F2KFb2KeF#2KLF2K3"F2KFd2K@F%2JF2JgFŧ2J Fh2JF)2JF2JFԫ2KRFm2KF.2KF2LvpF2L%Ft2MkF62MSF2N`F2NcF}2OUF?2OaF2PKF2PŖF2Q@8F J2QF 2R5dF2RF2S*FV2SF2T,F2TF#2U)F'e2UF+)2V 9F.2VF22V)F6u2WxtF::2WF=2XlFA2XkFE2YaFIK2YFM2ZVPFP2ZФFT2[JFX`2[lF\%2\?vF_2\Fc2]3Fgu2]3Fk:2^(/Fo2^SFr2_jFv2_{FzR2`kF~2`vF2a2F2a~Fk2aF22bqF2bF2ceqF2cFN2dXF2dF2eK;F2eıFk2f=F22fF2g0aF2gF2h"FR2hF2i]F2iFɪ2jqFs2jF;2juF2ktF2kfFܖ2lgF_2lF(2mZ]F2mgF2nLF2nqFM2o?F2o[F2p2F2pFt2q%aF>2qF 2rF 2rF2s hFg2sF22sqF2toF 2taF$2u^F(^2uF,(2vMF/2vF32w;UF72w}F;V2x+"F?"2xFB2yqFF2yFJ2z FNQ2zwFR2zFU2{wFY2{F]2|hQFaO2| Fe2}enFh2}Fl2~hJFp2~FtP2k Fx2F{26F2wF2YFS2F!2:F2|=F2F2FY2A F(2F2oF2 F2GFb2EF12F2 F2M F2GFm2aF=2zF 2QF2FϬ2F|2#FK2V?F2DF2hF2F2ZxF]2~F-2܀F2F2^F2Fq2FB2!F2cF2zF 2F2'FFY2hF+2F2.F2,F#2mF's2:F+F2sF/21F22rF62F:2+F>b26SFB62wFF 2FI2FM2:FQ2|FUV2AFY*2rF\2?F`2Fd2Fhy2FlM2CFp"2Fs2Fw2)F{2H0Ft24FH2FF2 \F2L{F2F2΁Fr2FH2PF2F2aF2F2SFu2]FK2F!2F2V:F2F2אF{2FR2XF(2F2AF2F׮2ZFۅ2F]2F42F 2[lF2F2F2Fk2]FD2F2ߎF2 pF2akF 2[F ~2$FW2$"F02eF 2F2F 2)0F$2jF(n2>F,H2F0!2/F32pF72AF;2F?25FCd2u%FG>2FK2]FN23FR2sFV2?FZ2F^^22rFb92qFf2Fi2Fm22Fq2sFu2mFy^2NF}:267F2wF2F2F29F2z9Fd2FA2F29F2yF2F2tF294Fo2y/FL2F*2F28F2yF2[FƠ2F29F]2z8F;2vF2F2:F2zF2F2Fs2:)FR2yF12tF2F28F2xF 2F 2-F n26F N2vF .2GF 2F 25F 2uUF 2F #2F 'q24IF +Q2sF /22^F 32F 622F :2qF >2WF B2F F{20LF J\2oF N>2F R2JF V2-F Y2lF ]2SF a2F e2*F in2j,F mP2wF q32F u2'F x2fF |2'F 2F 2# F 2`F i2F M2ܟF 027F 2XF 2F 2}F 2$F 2NF 2F n2F R2F 72FF 2F 2«F 2F 2>oF ʱ2|:F Ζ2F |2F a25F G2sF -2F 2F 2-UF 2kF 2F 2F 2$FF y2aF `2F F2F -2F 2XBF 2F 2F 2F 2NF 2EF 2ȒF $i2VF (Q2B F ,92~F 0!2mF 4 2F 724F ;2qF ?2VF C2F G2&WF K~2cF Og2F SP2TF W92F [#2ZhF _ 2F b2ՆF f2"F j2PF n2F r2˰F v2 0F zr2FF ~\2„EF G2F 12"F 22uF ,2F 2QF 2ɋF 2ũF 2F 29F 2sF 2ʭ\F 2F 2 F x2\F g2˘GF V20F E2!F #42KF '#2̇F +2F /2F 22:F 62vF :2ͱqF >2F B2'F F2bF J2Ξ@F N2WF Rq2|F Vb2OpF ZR2ϊQF ^C2lF b42F f%29.F j2rF n2Ь>F q2F u2`F y2XF }2ђ3F 2mF 2F 2>PF 2xF 2ҲF y2F k2&F ^2`F P2ӚF C2ԊF 62KF )2H F 2ԂF 2Լ;F 2vF 20F 2jF 2ե&F 2 F 2F и2SF Ԭ2֍F ء2F ܕ2F 28F ~2qF s2תF g2F \2F Q2UF F2؎MF ;2 F 02F &29.F 2rF 2٬"F 29F 2F 2WF 2ڑdF 2?F #2F '2 F ֕2 F ڐ2tF ތ2@F 2F 2gF 3|F {3uF w3KF s3"@F p3F l3MF i3F f3|F b3RF _3(+F \3,F Y3 F W3 ;F T3 }F "R3 RF &O3 &3F *M3 `F .K3iF 2I3VF 6G3vF :E3IF >C3NF BB3 F F@3yF J?3F N>3rF R<3GF V;34F Z:3F ^:3F b93F f83oMF j83C!F n838F r73F v73F z73YF ~73`F 73 35F 83!F 83!F 93" F :3#|%F :3$N1F ;3% LF <3%LF =3&9F >3'F @3(gF A3)9 F C3* |F E3*F F3+F H3,}F J3-N\F L3.F N3.F Q3/tF S30F V31_F Y32/F \32F ^33GF a34"F d35nF h36>F k37+F o37ݠF r38F v39|Fz3:K4F}3;F 3;F3YF3?)rF3?F"3@ȬF&3AF*3BgMF.3C6yF23D1F63D'F:3EF>3FjFB3G7xFF3HFJ3HFN3IFR3JhFV3K3FZ3LyF^3LEFb3M'Ff3NjvFk3O8Fo 3PFs3PFw3Q)F{!3RlF)3S:.F03TF83TкF@3UFH3VfFP3W1?FW3WF_3XFh3YJFp3ZZFy3[$F3[%F3\F3]F3^NF3_2F3_lF÷3`}F3awPF3bAF3c F3cZF3dF3ecF3f,0F3fF3gF3hRF%3iKF03jnF;3jFF3kFQ3liqF[3m0Fg3mNF r3nsF}3oF3pMF3qUF3q F 3rF$3sgF3ZF3ߕF35F3F3F37F(3IF@3FX38Fq3|F3F35DF3F3CF313WFB3FG3FK13KFOM3$FSh3FW3CDF[3WF_3VFc3<8Fg33Fl3Fp/33FtL3mFxh3_F|3(F3xF35F3%F3iF3F63iFT3WFq3F3,F3DF3F3F 3.F(3|tFF3[3AFB~3FF3ӖFJ3FN3e-FS 3qFW-3F[P3=F_s3Fc3Fg3Fk3]Fp3Ft'3FxK35"F|n3|F3GF3F3@YFF3wFn3ƮgF3F38F3QF 3LJF43ǽF\3UF 3(F 3^F3ȓF3F&3"FO33F"x3gF&3ɜF*3^F.3}F337F7G3jwF;p3ʜF?3FC3FG33FL3dFPB3˖OFTl3pFX3F\3*F`3\]Fe3̍FiB3̿&Fmm3Fq3 tFu3Q Fy3́jF~3ͱFF35Fq3WF3?VF3mF3ΜqF"3ʣFN3F{3&F3TKF3ρF3ϮF-3۝FZ3F34F3aoF3ЍF3йXF>3Fl3dFљ3;F3fwF3ѐF#3ѻFR3EF3F38F3b,F 3ҋ^F;3Ҵ_Fj3F3 F34F3_F (3ӊ)FX3Ӵ F3>F3F30F!3YF%G3F)x3ԥF-3˼F13hF6 3F:;3;F>l3`FB3ՅRFF3թFJ3΀FO03FSb3uFW3;F[3_F_3փ+Fd*3֦Fh[3Fl3Fp3ʿFt3ZFy%3fF}X3-eF3'F4ըF4 F$4FW4_F44UF4gF4!F&4&FZ4+h8F40.?F44F49F*4>p,F_4C,F4GJF4LF4QR]F34VFh4ZF՝4_bF4d F4hF=4mZ#Fs4qF4vPF4{5jF4̕FK40F4yWF4F4F%4KF [4F4iF4xF4TF84F!o4F%4,F)4IF.4F2N4nF64F:4)GF>4]FC/4FGg4FK4FO4 FT4N!FXJ4zF\4F`4eFd4Fi/4%Fmi45;^F5<F5<ڰF#5=vF'U5>RF+5? F/5?F4(5@0F8n5A9'F<5AF@5BFEB5C[FI5D/FM5DØFR5EvTFV_5F'FZ5FwF^5G'Fc65H7Fg}5HFk5I>Fp 5JA^FtV5J7Fx5K|F|5LEF/5LFx5MAF5NAF 5N}FR5OF5P2TF5PF.5QvFx5RF5RF 5SV\FU5S'F5TF5U. F35UF~5VgF5WF5WF^5X8Fҩ5XZF5YiiF>5Z[Fߊ5ZF5[,"F!5[Fl5\SwF5\F5]x FP5^ F5^F5_'F45_F 5`A&F5`F5aQ|Fg5aؑF5b^F 5bvF$N5cgF(5cF,5dlF165diF55erF95e0F>5fwAFBn5fFF5gwFK 5gtFOX5htFS5hFW5im F\D5iF`5j_Fd5j׎Fi15kN4Fm5k(Fq5l9GFv5l2Fzn5m F~5mF5nF^5nu;F5nF5oTFe5v#@Fݷ5vF 5vF]5w7F5wF5wxFU5xBF5xF5xFO5yDF5yF5yF J5z=F5zF5zހFE5{-F5{{F"5{F'C5|C6F+5|F/5}F4A5}tF85}F<5~>3FA@5~FE51FI5eFNA53FR5FV5FF[B5wMF_5qFc5FhE5Fl55Fp5cFuH5Fy5F}5FN5F5CF5odFS5F5F5FZ5jF5BF 5kJFc5F5F5 Fk5 F50F5VFv5}F5F(5wFЂ5F5XF457Fݎ5\F5FA5>F5AF54FP5 EF5-=F5NF_5p F5F 5#F p5WF5F&5F5-.F5K F#85hF'5}F+5F0L5'F45F95F=a5FA5-FF5H^FJw5c]FN5}wFS05FW5VF[5)F`H5KFd5Fi55FCX5FG5=FL.57FP5eFU5&FYp5F]5gFbH52Ff5bFk 5CFo5Fs5{Fxe5F|5F?5IF5OF5xUF5=F5 F`56F5ɠF;5[[F5)F5|F5 F5Fa5%aF5F>5:Fí5wF5KOF̊5F5XFh5F5`FG5F5eF'5F5fWF5UFv5cHF5FV5[F5F75PF 5ɫF5AF5F5.eFk5JF 5?F%N5F)5F.15lF25ܞF75KaF;5@F?5%FDk5FH5aFMP5eFQ5κFV656eFZ5/F_5Fc5gFh5˓Flu5.CFp5 Fu\5Fy5PF~D58F5 F-5iF5F5 F5zWF5Fs5*F5F]5SF5+dFH5~F5ϞF25 AF5oF5]FŔ5 F 5X[F΀5F5Fm58jF5GFZ5F5FG5UF5[F65F5 F%5b}F5=F5F5!tF 5_ F{5F5BFl5F5KBF#]5F'5F,O5:F05#F5@5WF95wF>35FB5:FG&5FK5HFP5uFT5FY5F]5Fb5 Ff}5GFj5nFor5Fs5Fxh5F|5AF^5'\F5I|FU5jF5FL5F5ǂFD5F5F=5F51F55IF5`F/5v|F5[F)5FĦ5F#5fF͡5!F5F֛5QF5Fߗ5}F5F5{F5NF5#F5*F51KF 56F5;}F 5>F 5A^F5BF5CiF5BF5AiF#5>F'5;@F,56F050F55*F95!9F>5rFB5FG 5FK5FP 5FT5#FY5F]5Fb5Ff5ϯFk5Fo5HFt57Fx5XF 6k5LF :5PpF ?{5S=F D5UF H5WF M5WF Q5WF V$5UF Z5S F _55OF c5KF hG5FF l5AFF qY5; F u548F zl5,F ~5$F 5F 5F 5oF 5F 5F 25F 5غF G5ʹF 5F ]5F 550RF"B5yF"GC5 F"K5;F"Pq5F"U5F"Y5@F"^553F"b5F"gd5@F"k5F"p5$F"u+59F"y5F"~\5F"5TF"58WF"$5F"56F"V5F"5[F"5F"!5_F"5dF"T5CF"5!F"5F" 5F"5F"T5F"5qF"̉5MaF"#5(gF"վ5F"X5F"52F"5F")5lhF"5EF"`5 F"5&F"5F"35F#5{F#j5RF# 5'F#5;F#?5)F#5oF#y5zWF#$5MF#(5 $F#-O5+F#15F#65F#;'5eF#?55F#Db5F#I5ԨF#M5LF#R<5oF#V5tEEYX @aEY Bf-EYè DEY EPEY G5EY! HiEYJ J_EYs KEY MгEY OpEY RgEY TCQEZC VjEZm X*EZ ZEZ \EZ _XEZ  aBEZ&B crEZ,m e@EZ2 g(EZ8 jEZ> lEZE mߗEZKG obEZQs qhEZW s*EZ] tJEZc vzEZj% xVEZpR y:EZv { EZ| |`EZ }EZ EZ6 &5EZd EZ EZ C}EZ ~EZ EZM EZ| 6/EZ l EZ V{EZ .EZ: EZj (EZߚ EZ :EZ c%EZ, \^EZ] `EZ dE[ iDE[ mE[" rNE[S yjE[ E[# OE[) 8E[0 R?E[6O E[< [IE[B E[H TE[O %E[UN E[[ E[a E[g E[n E[tR +E[z 9E[ dE[ 5E[& lE[[ ߪE[ E[ E[ E[1 VE[h E[ yE[ ?-E[ E[B RE[y 8E[װ dE[ عE[ RE[V E[ E[ )QE[ eCE\7 [E\ p E\ E\ SE\ fE\"T E\( DE\. E\5 x)E\;: jE\Au dE\G ۩E\M dkE\T$ 'nE\Z_ %E\` E\f x2E\m ;QE\sL E\y jE\ :E\ E\< >E\y E\ BE\ E\/ J:E\l XE\ x"E\ E\% E\c =*E\ʡ OE\ WE\ pE\\ zE\ ZE\ E\ uE\X E\ kE] KoE]  |E]W z E] xOE] uE]" sE](X q&E]. nLyE]4 kZE]; hiE]A] evE]G b~E]M _E]T" \E]Zd YS#E]` UPE]f R]E]m, O]E]sn LE]y HUE] E~E]8 B&E]{ >ΆE] ;yE] 8&E]G 4E] 1E] .GE] +?E]Y (IE] %RE] "]#E]( hE]n s E]׳ %E] E]? RE] E] )E] fE]Y NE^ OE^ v0E^. E^uGE^rE^#EE^)MzE^/WE^5E^<&LBE^BnyzE^HΤE^OE^UImE^[!E^agE^h& E^npE^tTE^aE^/mE^zzE^E^~E^]E^sE^&E^A E^ƍ=E^m^E^'E^sΎE^E^E^[>E^E^ogE^E E_}E_ V E_0E_E_E_%E_+l]E_16E_8 =E_>[HE_DbE_J*E_QK.E_W~=pE_]}bcE_d=||4E_j{O+E_pzE_w1xuE_}wE_v]E_&uE_xsE_rE_qL%E_opE_nzE_miE_hlE_jjE_iE_chVE_ϷgsE_ enE__dE_c]E_aE_]`E_^"E_\.E`\Z=E`XME`V_E`]TE`RE`" Q)E`(`OME`.ME`5 L3LE`;dJuE`AIE`HHK E`NjG~E`TFE`[E/E`arE 5E`gD6E`n"C;TE`t{A7E`z@E`,?IE`=E`<E`8;PE`9DE`6*E`F4^E`1ΤE`/CCE`U,EE`*:E` ('E`e(ME`'ZE`'E`x'.E`&E`/&ZE`%/E`#LEaD!Ea"Ea " Ea[#$Ea#Ea $M1Ea&s$Ea,%Ea3/&aEa9'[Ea?'EaFJ(pEaL)mLEaS*AEaYf+Ea_,Eaf%.KEal/0VEar0^EayD1Ea3Ea5swEae76;Ea8Ea&:Ea<\Eao>Ea>Ea3?tEaҖ@ԚEaB]jEa[CEaEs;Ea!GvEaHWEaI4EaLJZEbJEb K gEbxKbEbKCEbAL Eb%L}Eb, MLPEb2pNEb8NuEb?;OEbEPEbLQhEbRmRvxEbXS,Eb_9UhEbeV"EblXbzEbrnYEbx[`Eb<\Eb]_Eb ^/Ebs_sEb_ЇEbD`QEbanEbaLEb}bEbb@%EbPbmEbŹbEb"bEbҌbEbcEb`eDEbfEb5gEbi@nEb jEbukuEcmEc KoCEcpEc#rEd'REd3GEd QEd EdrqEd ߿Ed'q Ed-PEd4XEd:&EdA@.EdGDEdN)ѳEdT]Ed[REda =Edg )Ednr Edt $Ed{] Ed }_EdI VEd 0?Ed6  Ed Ed# Ed KEd nhEd GEd -Edx Ed Edh Ed "wEdX $vEd &EdJ (Ed *ŢEd< ,Ed .]Ee/ 0ҽEe 2Ee" 4aEe 6Ee 8wVEe# :CeEe* <[Ee0 =Ee7 ?Ee=} ANsEeC BEeJt CEeP E5EeWl F{Ee] G(Eedd HEej JEeq] MCEew OhEe~W R:Ee TEeQ WUEh PEh ovEh+ $Eh 2EhQ ȔEh ;Ehy WEh 9Eh Eh6 YEh Eh` bEh ƶEh֊ ƫEh ̳Eh EhK +TEh ZEhw ljEh ǹ.Ei DZ4Ei : Ei "(Eih SNEi ĄrEi% õEi,/ Ei2 Ei9_ ±-Ei? ԵEiF 9EiM( EiS ?GEiZY iEi` Eig čEin% .aEit HEi{Y p3Ei  Ei ǑWEi( ǢTEi Ǫ Ei] DZEi ǹyEi #Ei/ Ei ǝEif >Ei \Eiʞ ƀEEi: !3Ei 6Eit awEi Ei k^EiK Ei nEi SEj$ qEj kEj` Ej PEj vEj'; H Ej- dEj4y Ej; jEjA EjHX EjN Ej U2EjU Ej DEjӝ Ej@ 4[Ej ¬Ej Ej- OLEj {Ejv èEk Ek N*Eke ĴEk 9Ek Ek#W ƞEk) QEk0  Ek7I ȸEk= \EkD EkK> EkQ EkX $Ek_4 :Eke NEkl ÛEks, áEky õEk| ,Ek% qEk Ekw Ek _Ek 0sEks EEk ZEk pEkq ąWEk ģEk fEkq tMEk tEk REks 1Ek 1Ek |Ekv ljEk" ǖEl Ǣ:El { ǮMEl' ǺFEl El El'. El- /El4 TEl;7 z"ElA ȟ^ElH ȽElOA ElU iEl\ ElcN AEli Elp 'Elw\ 'OEl~ ɅEl Elk CcEl ʢREl `El} A%El- El NEl ElA ?El ȷElǤ /ElV CEl Elۻ Elm ʻEl ˏ3El c El *El9 s/Em ͚Em EmT >Em Em 9Em%q PBEm,% F7Em2 ;FEm9 0CEm@D %EmF EmM EmTe ZEm[ ͮEma xEmh BEmo> Emu Em| Emb 5Em ͖ Em Em W Eq kEq ҴmEq Eq EEqn ЎCEqE Eq GEq WMEr ͔rEr ѽEr| &ErT LEr, ʓyEr& Er, ɉEr3 Er: ȇErAi ErHC DžErO ƻ$ErU žEr\ Erc Erj Erq` Erx; 8Er _Er Er Er hEr (Era Er= Er JEr ̀Er NErð Erʎ UErk ErI NEr& dEr Er Er dEr @Es ԵEs^ Es= eEs /hEs aEs# Es* ~LEs1 zEs8| vTEs?] EsF= lwEsM EsS lEsZ Esa ˝Esh {Eso +Esvh Es}K bEs- FEs GEs =Es Es Y7Es 8Es 9Esd vEsH Es, Es Es 2Es 1Esݿ Es PEs CEsp ]EsU Et; kEt" YEt Et Et Et" 'Et) :Et0 5Et7s 5Et>Z >EtEB FEtL+ MEtS SEtY D Et` NAEtg Etn Etu Et| {%Ets FDEt] `EtG ɶEt1 2Et Et XEt hFEt 2Et gEt $Etȟ Etϋ Etw Etc vEtP Et< Et) Z2Et DEu Eu ŠEu Eu "Eu Eu" Eu) Eu0 Eu7t Eu>c EuES "EuLB kEuS2 ۥEuZ" Eua Euh Eun JEuu ÝEu| @Eu BEu ĕ|Eu ĝFEu :NEu ֖Eu| rEun \Eua «EuS PEuF Eu9 Eu, Eu )Eu WBEu 'Eu Eu #Eu )Ev /lEv 55Ev :Ev Ev Ev# 4Ev* Ev1 YEv8 FEv?y rEvFo !EvMf ıEvT] gEv[T oEvbK WEviC LEvp: Evw2 Ev~* C#Ev# Ev تEv #Ev Ev Ev [Ev LEv Ev :TEv Ev ƉEv Ev CuEv Ev _Ev rEv Ev Ew Ew mEw Ew YEw qEw% }Ew, fEw3 Ew: EwA >EwH EwO َEwV Ew] Ewd }Ewk _}Ewr '*Ewy BEw FEw Ew Ew iTEw Ew Ew w0Ew 3Ew Ew EwƓ ]Ew͕ b+Ewԗ ֵEwۙ KEw Ew 1Ew Ew {Ew LEx Ex Ex Ex -EyO ױDEy` 7/Eyq ھ1Ey FGEz ɴEz Ez aEz ՙEz IEz# ལEz+ 1Ez2 ᮅEz9' pWEz@: AEzGM MEzNa (EzUu XEz\ xEzc Ezj 跇Ezq ںEzx GEz "-Ez FXEz %Ez0 yEzF WEz\ Ezr JEz $Ez Ez "~Ez ZEz Ez Ez Ez, EzD uEz\ Ezu B{Ez E{ E{ uE{ E{ E{# $E{*% 7E{1? b E{8Z E{?t pKE{F E{M %E{T E{[ /E{b 7sE{j E{q3 *E{xO E{k 2E{ $E{!E{!\E{!E{!E{!E{7!E%w HE) FE, C~E0V A`E3 @.E7 AE;6 Bo:E> C)4EBw CEF DEI ESEMX GEP HjCET IEX; K E[ L^E_} MPEc O Ef PaEja QuEn S Eq T^lEuF UfEx VQE| W7E, X E Z Ep [(E \ E ^lEW a' E cME esE@ gwE idE jՕE) lEE mEp o"E pbE q$EZ r E svE tEF w/'E ypYȄ |E3 YE P(E| UE E IEj E E aEY E E XEI E 4E E: E 4E E, E .=Ex {VE E .E l kE$ GE' rE+` HE/ )E2 E6V ͑E9 E= nEAL RED EH {ELC -EO SES (EW; FEZ #E^ ΩEb4 Ee HFEi {Em. ~&Ep Et [Ex) 8E{ [E{ 4E% {>E Ex E" V3E Eu ;PE ʀE [9Et E ǁE Es ~E E ʫAEs AE E ̙Et E .E ~eEv ϺE" "RE I$Ey E% ՊLE &E} ¬E) ^E #E ؉E. E ٫E m EB (EE LEIy lbEM( ꋃEP 4ET ǶEX6 E[ dE_ QEcE 퉯Ef YqEj )EnU Er eEu _Eye E} ,E Ew =E( E 8E n1E; E ؜E EO 9E oE yEd E "6E 'Ey E+ E +E EB (E 5Eʧ QEZ E !<{E!)Es!E&!nEW `E kE E΅ vE? uE }Eٳ Em E( #wE 'IE +EX 0kE 4E 9E >iED \E ݋?E ܹEw E 3 E ?E )Ef E" `E ՕbE dE$W ?E( ҡ0E+ *E/ ѲyE3J 9eE7 п&E: #E> ΚxEB> wEE /EI }oEMw kEQ4 ;ET 6EX BE\n NoE`, ZNEc fEg nEkg pWEo& qEr rEv rEzb sE~! aE ~XE E^ YE 5E 56E xE\ $E :E \E ~E\ E #E 8E NE^ dE {pE E "(Ea XE" {E YEФ Ef uE' dE EE߫ vEl E. E ~E Eu E7 VuE -E E \EB (E  E W+E iEN E -VE E mE#[ E' KvE* E. E2k IE6/ fE9 _E= VEA| v\EEA nEI EL VEP ETT wEX !E[ E_ 'Eci Eg/ ?Ej >En XUEr EvF hEz +E} yE E_ SE& -E 8E n}Ez EA DE 9hE E E] T=E% E zE SBE| wED uE E f@EŜ xEd 5E- E EԾ E؇ hEP E :E 8E {Et E= WE C;E pE Ed [E. vE E wwE EW aE! 'E HE E IE$L E( hE+ RE/ E3y aE7D sE; E> jEB OEFs ikEJ? WEN EQ vEU biEYp E]< Ea Ed Eh ˠElo TEp< Et Ew TE{ Er JE? E E E 0Ev %^ED RE  E eE E~ EM mE E E _EE *EX }E' C5E +E ɛE˕ AEe L|E5  E E Eޥ oEu 4EF E vLE E E jEY kE* =1E KE JE E o ۃEA ՄE E a>E E LE#Z AE', E* E. E2 1E6v fE:I E> &yEA EE EI rEMh EQ< ,EU B]EX ,E\ ^E` Ed^ m#Eh2 HEl n)Eo Es aEw ַE{X GE- dE /ME E #E EV E+ A/E rE 1E E EX E. E ZhE E E dE] E4 E eE wEϹ IEӐ PEg [ E> LtE HE JE RE ^SEt jEL DNE$ gE E E SE E ^ sE 7 E źcE cE E eE t Ͽ|E$M 7E(' ~E, E/ E3 ڭIE7 Q,E;h E?B ߝEC EF ʾEJ EN M.ER ~EVa EZ< -4E^ Ea Ee NEi ɭEm Eq_ -sEu;!LEy!k_E|!ϚE!3E!dE! xEc!9E@!SE!yE!%E!XE!E!_>El!=EJ! DE'! E! E! 'E!7E!ɵE{![EY!E7!E!JE!E!Eٰ!yEݏ!4Em!SEL!E+!wsE !9E!E!E!#E!Eg!yEG!`E'!E !ocE!qE!vEE!{eE!IEh! `E#H!!1E')!!wE+ !!!E.!"6E2!"E6!#E:!#͔E>o!$EBQ!%sEF2!&FEJ!'EM!'EEQ!(EU!)EY!*xE]~!+QEa`!,*xEeC!,8Ei%!-Em!.FEp!. Et!/Ex!0UE|!0Ew!1CEZ!3B"E>!4pE!!6gZE!7.E!8yE!9\eE!:/E!;WEy!;אE]!=7EA!>ӱE&!@q+E !B~E!C\E!EPE!F'Ež!HEƃ!JEEi!KEN!ME4!NE!PE!QE!RZE!S#E!T>E!V|ME}!Y Ed![uEJ!^vBE1!a'E!cv E!dxE!e_E!fDE !g);E!h E!iKEj!kEQ!mIE 9!ozE$!!rE( !tuE+!uj-E/!vJE3!wE7!xE;!yE?{!zECc!{EGL!|EK5!}EO!~ES!EV!zEZ!mCE^!BEb!ZEf!Ej!Enk!,ErU!2Ev?!j!Ez)!E~!E!~5E!+E!E!iE! E!$E!4Ej!߄EV!,EA!wE-!\E!-FE!.E!cE!E!-E!#Eġ!iEȎ!۰Ez!OEg!0ET!CEA!]E.!wE!bE!zCE!Y E!4E!eE!'*E!E!}E!ٕEv!mlEd!E S!煭EA!E0!E!ZE !fE! E""QE&"~E*"޹E."E2"E6" DE:" ]KE>x"EBg" vEFX"ZEJH"(EN8"5ER("EV"fEZ "E]" 1Ea""c Ee"$Ei"&Em")1UEq"+rEu"-{CEy"/q8E}"1fEu"3Z/Eg"5M'EY"7BEK"9?E=";;E0"=7E""?23E"A.)E"CsE"EE"HIE"JE"M%E"OuE"QQ2E"S DE"TEĔ"V#Eȇ"XE{"ZEo"]uEc"` EW"b1EK"ehE@"h E4"i]E)"k0@E"lE"n"E"oE"pE"qݾE"rE"zLE" E "E"&E":E"E"E":\E#"E'"$E+x")E/o"5E3f"E7]"ZE;T"JE?K"ECB"XEG9"զEK1"_EO("ՃES "ٖEW"ݘE[" E_"卖Eb"fEf"Ej"QEn"xDEr"ԤEv"0TEz#ѵE~#4E#GE# jE# pE# dE#'E5#A.E1#CsE-#F E*#IME&#LE"#NE#OE#Q#8E #RNQE#StE#THE#VUE #XE #[E"#] E&#_E*#bUE.#dזE1#g_NE5#iE9#lsdE=#nEA#s*EE#{JEI#QEM#EQ#AEU#LyEY#?E]#Ea#Ee#Ei#\;Em#-Eq#Eu#4Ey#E}#zE#JE#E#lE#nE#!E#'E#E#E#pE#@E#"E#mE#:E#E# E#\E#lE#v2E#E#E $E $[E$3E$ E$2E$ ]E$ E$E!$ E$$RE($CE+$E/$Y6E3$E 7$gE;$ E@$ED$!xEI$#EM$$=E"R$&bE&W$(R{E*\$* E.a$+DZE2f$-E6k$0 E:q$2E>v$5gEB|$7~EF$9EJ$<@EN$>`ER$@EV$BEZ$DƂE^$FEb$GfEf$IEj$J5En$KVcEr$LxEv$NEz$O5E~$QgE$XE$aAE$k%E$tE$~ZE $?E$΂E$E%$E.$HE6${-E?$wEH$whEQ$.EZ$Ec$NEl$Ev$E$6Eω$pdEӓ$0nEם$[Eۧ$ѳ'E߱$uE${E$ߪ"E$5E$;E$FE$2E$E$E%E%'E '%[E3%FE>% EJ% REV%E b%inE$n%E(z%jE,%E0%E4%gE8% E<%#vE@%%ED%'hEH%*HEL%,EP%/&EU%1ӭEY%4'E]"%72REa0%9Ee>%E &A8E 9&DoE S&G Em&JE&ME&P$E&S3E!&VR'E%&YtE* &\E.&&_{E2A&bE6\&d߹E:w&ffE>&gKEB&i\EF&jəEJ&mVEO&pES&tEW8&xE[U&}E_q&Ec&+Eg&1Ek&7WEo&Es&>Ex&0E|9&ZEV&nEt&E&E&\qE&E&HE&E%&[EC&3_Ea&GE&^E&uTE&E&E&(E&E8&EW&tEv&@bEΕ&zEҵ& [E&,E&"E&"E4&7]ET&Et&լE&¨3E&ĬE&ƴE&ȟME&yE7&REX&( E y&E&~E&ԑE&uE&ٝ>E! &&3E%B&ގE)d&AE-&E1&jYE5&E9&抺E>&@EB1&YEFT&-EJw&xEN&خER&EV&E[&^|E_'&EcJ'Egn']Ek'Eo'jEs'Ew'E|"' EF' Ek' E' Q0E'E'=E'E#'wEH'xEm'q4E'OE'v]E'>E' 4E)'EO' Eu'"pEœ'$,E'%E''E')QE6'+_E\',Eۃ'.wEߪ'0/E'1;E'2 E '4N|EH'5qEo'6E'7hE'8E'9nE';E 7'=BE `'>E'@E'BPE'D E'EsE"+'G_E&T'IE*}'JCE.'LE2'NE6'PE;#'S#*E?M'UTECw'W1EG'W`EK'XlEO'XET'Y~EXJ'ZE\t'[E`']AvEd'^&Eh'`xEm 'bamEqK'dEuv'e^Ey'gE}'ieE'k4!E$'l*EP'mE|'n[sE'o'FE'o:E'p'EBO' EF' EJ'PgEN'ES'EWF'1E[x'E_''L EB'EG'OEKQ'lEO'!ES'EW'TE\4'UE`n'Ed'Eh'lEm'gEqS'dEu'b'Ey'`E~']E;'Y\Eu'TE'P_E'LME%'BaE_'ʜE'ʳE'E'EK'cE'9gE'˲E'+E:'̤%Eu'E'oE'ԯE)'Ee' EҢ'E'ҹE'`5EX'E'zE'"E'ФEL'dE'SE'ѹE'EB'҆E'E 'E ',lE:'sEx'چE'\E'ڮ?E#4'[E's'5E+'ٳE/'VE40'hE8o'،NE<'$E@'׻EE.'½EIm'ϤEM'EQ' EV-'=EZm'E^'ܣEb'Eg/'\Eko'ڵEo'#QEs'GEx3'ڔE|s'zE'*E'zE8':Ez''E'E'E?'E'A E'ZE'EI'߳E'߀,E'UE'7ET'[E'JE'OE'}Ea'ݫKEѤ'ҳE'LE,'Ep'چE'7E'ۄ!E=''E'ܚ E'E 'vREO'hE'E'LhE '԰lE c'E']fE'E4'֎xEz'E"'֣E''՟E+L'ԚhE/'ӓUE3'ҊE8'bEE"(S E&(E+G(5VE/(\E3(y!E8F(ATE<( E@(=EEE(EI(:EM(ERF(7EEV(mEZ(E_H(9Ec(ϣEg( fjElK( ZEp( Et( EyO( E}( E( ET( VE( 5E( EZ( >E( kE ( IMEb( ݴE(wHE( Ej(E(@zE(e?Et(YE(NbE%(=E~(*E(FE1(zEԊ(jE(NE=(YE(E(EK(,E(ME(EZ(8E(9E(($AEC(% EGq(%fEK(%fEPG(%IET(%,EY(%sE](%6Ea(%HEfb(&UNEj(&Eo;('uEs('nEx('E|('E('EZ('E('vE4('lE('E(&E|(&N~E(%EW(%E(%#KE3($E($ZE($~VE~(%E(%E[(&GPE(&CE8('EЧ('E(' wEم(' E(' uEd(&ؘE(&bED(%E(%wE$(%E(%JE(%wEt(&E('2E V('.E('`E7(&E((%tE ($МE$($AE)m(%-E-(%b(E2Q(%`E6(& E;5(&EhE?(&wED(&+EH(&܏EL(' EQp('QEU(&EZV(&ծE^(&IEc<(&Eg(&El#(&Ep(&Eu (' "Ey~('&E}('YEf('{E('?EN('E(' E7(&E(&K E!(%SE($E ($l?E($E(#gEj(#E(#9qEU(#7E(#@EA($Eɷ(%ME-(&'EҤ(&w8E(&[Eۑ(&(REt(Eyn(QE~(#PE(:E7(E(Eh(E((4E(cgE2(.E(Ee(vE(_E(HE1(@E(lVEe(KE(BEǙ(@E4($E(jcEh(HE(Eޞ(#vE9(3E(2Eo(*E (&E(kEB(GE(Ey(,E(E (=EN(E(qE(GE#(E#(E(\(E,(ҩE1(E64(E:()E?o(4ED (EH( EMI(FEQ(EV( E[#( sE_(Ed`(UEh(LEm(Er=(|Ev(E{{(E(E(UEZ(E(ŇE(dE9(1iE([Ez(U?E(E(ME[(HE(DE(9E>(QE(EŁ(-E"(E( QEe(2E(Eܩ(EL(nE(E(! E3(=E(ZEx(wbE(E(;1Ea(E (hxE(9EK(iE(E(( EB(mEG[(3EL(EP(rEUK(WEY(1E^( TEc<(Eg(El(Eq.(Eu(mEz{(wE"(E(]Eo(>E(<#E(Ee(yE (E("E[(\2E(KE(PES(E(+iE(HEL(O3E( 2Eɝ( ցEF( YE( 3Eט( f8EA( E(E(hE=(ΗE(8E(|E;(OE(ݾE(dE:( E (hE(%/E:(E(E(E";(E&( E+( }E0>( z[E4( E9( -eE>A( EB( 3EG( 6ELF( UEP( EU( EZL( E^( Ec( EhS( Em( Eq( Ev[( E{ ( wE( JEe( E( ~E( Eo( E( KE( E{( HE*( E( E( hZE8( $E( ? E( vEF( >E(Eʦ(E)EV(E(xEط(XqEg( E(E( Ez(uE+()E(fLE(hE?(!E(XE(4E S(E(|mE(=Ej(E(`E#(GE((E-4(SE1(:E6(lE;M(:E@(x,ED((hECR(uEH ((EL(.EQ(EV=(i:EZ( ;E_(ͭEdo({/Ei+((Em(Er(Ew_(E|(*E(E(4zEQ( E 'cE'E'ED'UE'gE( E}(aE;(i'E(FE($AEt(E3'CE'E̯'{En' E-'E( gE߫(AOEj(vDE)(GE(?E(Eh(DE((vE( E( E h(a)E((E(BE(BEj(8E"+(fXE&(E+(E0o(2E50(E9(WE>(ECu(EH7(BEL(aEQ((EV~(\cE[A'E`'e+Ed'YhEi'MEnL'AEs'?fEw';OE|'6qEZ'1E',wE')E'Ei'E.':dE'OE'-E{'IE@'+E(> E([E(EU(=E(bE(r|Eͥ(+Ek'TE1'E'&E'tE'EK'NRE'E'+oE' lEf'E.'E'RE 'E'EL'ؘE' E'uE#'#xE(l'~E-5'TE1'4E6'E;'.E@X'EE!'EI'EN'ES}'[EXG'\E]'Ea'R%Ef'`Eko'TEp:'k\Eu'fEy'E~'Ed'IE/'E'#E'lzE'XE]'DE)'1E''W!EC'xEHX'xEM)'xEQ'lEV'PE['3$E`l'@Ee>'xEj'ܬEn'@Es'Ex'{E}V'YwE('7ME'E'E'Er'ED';iE',E'eE'E' Ed'vE8'&E 'ܬE'EŴ'*Eʈ'aE\'E0'!E'AE'>pE'tE'EY'E.'$E'E'\E'E'E Z'ZE0'E'mE'=E' E!'E&a'E+7'yE0'HE4'3E9'/E>',%ECl'!EHC'EM'EQ'EV'E['!E`|'EeU'Ej-'WEo'yEs'`Ex'HE}'0Ej' ED'E'xE'E':E'dE'E`'E:'E'zE' E'E'zE'gE\'TE7'AE'EE'atE'}iEަ'^E'jE_'E;'E'E'C~E'E'LE'E h'I'EE' E#'E'E'<E"'E''kE,x'E1V' E65'qE;':SE?'ED'EI'ՌEN'IESn'EXN'E]-'zEb 'BEf'Ek'|Ep'JEu'Ezm'\EN'ﵷE.'uIE'2aE'E'E'E'i6Eu'A{EV'E8'E' E'jE'}aE'[PEã'98EȆ'!Eh'7EK'E.'EE'쭫E'0E'XNE'&E'E'=Eg'둠EK'`E/'.qE'E 'E'E'9E'kIE 'BE%p'E*V'E/;'邍E4!'=E9'E='賓EB'nEG')EL'EQ'EVl'SE[S'hE`:'DEe!'`1Ej')En''Es' Ex'iE}']E'`Eu'cdE^'f EF'hE.'kdE'nE'phE'gYE'YE'JE'G'EC<'өEH0'hdEM%'&ER'EW'ҰE\'~#E`'KWEe'Ej'Eo'ѳ'Et'фEy'wpE~'qE'kE'eE'_E'Z2E'TuE'ME|';-Es'Ek' Eb'yEZ'ER'б]EJ'ЕEB'nE:'(E3'E,'ϙJE$'QE' .E'±E'{=E 'HE'AE'gE'ΌwE'αE'_E 'E'"#E'E'΃E':E"'͠E''/E,'̽7E1'KXE6'E;'E@'lEE' EJ'EO'RET'EY'˾E^'˪Ec'ˑLEh'vEm'[Er'@Ew'%E|' E'qE~'CE|'arEz'Ex'ɔEv'2Et'oEs'nEq' Ep'ǰEo'aEn')Em'^Em'tEl'%El'.Ek'ňEk'>El'IEl'ĹEl'ĢEl'ČYEm'uEn'^Eo'HEp'LUEq'\Er'm:E t'}Ev'ĎEw'ĞrEy'ĮE!{'ĺE&}'Ğ|E+'x#E0'PE5'"eE:'E?'|ED'× EI'j0EN'CES'EX'E]'Eb'¬Eg'†8El'`LEq'>Ev'"zE{'E'E'E'4sE'VE'IE'>:E'vE'IJE'E'JE' E'E'{E'+E'E'HZE'E#'E*'[E1'BE9'E@'EH'dEP'+(EX'HEa'|Ei'Er'GE z'&E'ҿE'cE'[E!'#E&'E+'E0'E5'jE:'SE?'''5ES'pEh'?E}' nEŒ'@Eʧ' EϽ'vE'DE'dE'\E'E*'bE@'#,EW'zEm'E'd1E'!E'׋E 'E'o^E';E'E!''=E&?'E+W'nwE0o'33E5'E:'E?'kzED'(EI'EO' ET'pEY6'ME^O',Eci' XEh' Em'˩Er'AEw'E|'fE'9OE ' E;'EU'Eq'E'RE'#E'E'=E'E'{VE2'REN'*hEk'Eɇ'֑EΤ'E'ME'!E'KE'xnE5'1ER'Ep'E'jE'tE'yE'qE 'rE%'zED'{Eb'auE '>E%'NE*'E/'HE4'E:'AE?>'sQED^':tEI~'2EN'ES'EX'AeE^'Ec!'ĽEhB'sEmc'Er'GEw'G E|'E'&E 'NE-'-EO'pEq'J E'#/E'XE'խE'E'EB'dEf'H@E',Eĭ'E'E'קE'E<'Ea'E'OE' E'E'3E'@FE>'cEc'E'c E 'qE'E'heE 'E!F'E&l'nnE+'E0' E5'qOE;'0E@.'EEV'REJ}'nEO'1ET'EY'LE_'EdD'Eil'g^En'?Es'/Ex'E~'E8'cEa''E'E'kE'VE' E1'}E['BE'E'E'E'?$E/'YEZ'E˅'Eа'SE'4EE'E2'E^'5E'E'E'SEE'E;'xEh'E 'E'RE'!E'EI'ΛE#w'pE('HE-'E3'lE8.'oE=\'7EB')EG'nEL'ER'xEWF'HE\u'Ea'ۛEf'sEl'Eq3'Evc'SE{'E'E'bE$'9ET'%E'E';E'QE'EI'E{'T E'~E'~zE'~ EB'}^;Et'|*EΧ'{.E'{-E 'zE?'y[Er'ynE'x&E'xOE 'wE?'w04Es'vE'u E'u6`E 'tEC's{Ew'sE'seE!'rE''r;E,J'qE1'q^TE6'pE;'pEA 'p0EFU'oEK'o9EP'nݨEU'nE[.'n(sE`d'mKEe'm1fEj'luEp 'l Eu@'kPEzw'jE'iE'idE'h^EU'gE'fE'f-oE'e~E6'dEn'd#+E'cuE'bE'bw{ER'bEË'aE'a2%E'`jE8'`jEr'`Eݬ'_KE'_?E '^E['^tE'^#'CR(EW'C E\'BEb 'BmEgQ'B!El'AMEq'AVEw!'A%E|g'ArE'ARE'A2uE9'A"E'@E'@)E '@ES'@E'@2E'@iE)'@JEp'@+WE'@E'?fEG'?xEˏ'?2)E'>E '>'Eh'>^E'>E'=EB'=tE'=E'=bKE'=7Eg'= E'<6E 'Eo'9NEt'9QEz*'9FEw'9w#E'8PE'8qE_'7/E'7bE'6NEI'6T E'5$E'5\E4'4pE'4$E'4E '3~Eo'35)Eɾ'2ƘE '2$E]'1h-E٬'0E'/EL'/=E'.E'-ͼE='-*.E',E',ME.'+E '+sE'+E"'*7Et'*/E')TE$')!E)i'(UE.''0E4 '&E9_'%3E>'%#ED'$R0EIW'#}EN'"ES'!EYP' E^' (Ec'SEiK'zEn'Es'EyG'ՎE~'RE'0ED'2E'RJE'|UEB'yE'ԋE'EC',E'Y!E'ED'E'E'EF'J7EΝ' E' mEK' Eޡ' LE'EP'E'ǣE'EW'oE'CE' E _&E&E&Ei&LE&>WE$&sE)t&E.&oE4&&E9&HE>&㏺ED3&EI&݁EN&}ETB&עEY&aE^&c^EdQ&ϷEi&Eo&WEtc&ǥEy&bE&Ev&|E&E.&E&E&}EB&,E&KE&q'EX&E&SE&MEp&GE&~E+&Eω&%E&EE&_Eߣ& iE&@E`&E&E&wE|&E&E;&E &{2QE&vEZ&rKzE&mE &ig,E%z&dE*&`IE0;&\8E5&WJE:&S!E[E&:]E`&7REf &3Ekk&0Ep&-dEv0&*E{&&E&#EX& ;ME&E&WE&mE&*EJ&E& E& Ev&jE&E>&N,E&E%dEm%IyE%.E7%Eܝ%E%ǙEh%ݢ>E%} E4%E%>E%̎Eg%֛E%E 4%amE%E%Ei%:E"%E(8%!E-%2E3%E8p%E=%MqECA%/EH%j"EN%ESz%{EX%!E^L%`VEc%Ei%En%Es%\Ey\%E~%}6E0%xTE%rE%mgEp%iCE%eEE%aE%\0E%XҎE%T4E%PSE^%LE%HzE6%D^zEʢ%@<+E%<E{%7E%3ET%/PE%,E.%)PE%&6E %#w Ev% mqE%cOER%Y6E %OE-%>.E%jE % "E!y% E&%>E,W%dE1%KE75$"E<$IEB$EG$EL$tERc$.EW$E]D$ࢽEb$Y_Eh%$BEm$ĽEs${Exw$2E}$EZ$Q2E$0E=$E$E!$E$E$Ex$wE$vE]$LE$#EC$Eķ$ E*$Eϝ$E$ Eڅ$fE$;WEm$AE$f(EV$E$E?$.E$ E)$~E $z/E$uxE$p_E$l aE!u$hFE&$gE,a$eE1$d7E7M$cE<$bqEB;$aGEG$`EM)$_ER$]EX$\E]$[̉Ec$ZEh~$YEm$XrEsn$WSEx$VE~_$TDE$ShEQ$RLE$PEB$OgE$N< E5$LE$KE($JE$II=E$H E$F*E$EWEŌ$CzE$A]EЀ$?AE$=#Ew$;7E$8En$6E$4Ee$2?E$/E\$-wE$+EU$)FE $'EN$%qE$#BEH$! E"$E(C$E-$E3=$E8$&E>9$-EC$X1EI5$',EN$ ET2$ DzEY$ E_/$Ed$iEj-$Q{Eo$9Eu,#F Ez#:E€,#E…#E‹,#E#mE–,#>E›#xE¡-#aiE¦#IE¬/#7E±#E·2#E¼#ȓNE4#fEǶ#:=E8#EҺ#WE=#Eݿ#EB#E#yEH#],E#AEM#dE#ET#E #5E\#E#Ed#E#XE%l#RE*#E0v#!E5#E;#1EA#[EF# EL#MEQ#}FEW#zZE\#wEb'#tEg#qEm4#nEr#kCExB#hE}#eEÃP#bEÈ#_EÎ^#\EÓ#YEÙm#VEÞ#SEä}#PEê#MrEï#J`Eõ#GP"Eú#DHE'#ATEŰ#>`eE9#;lE#8y=EL#58E#2E`#/E#,>Es#)E#&E##)E# E#E(#cE #E>#vE#EU#E## E)l#E.# 2E4#7E:#buE?"EE*"6EJ"TEPC"EU"E[]"E`"REfx"El"Eq";Ew""}E|"EĂ>"UmEć"ʀEč["?EĒ"ԵEĘy"+EĞ"ϢEģ" Eĩ'"ʶEĮ"PEĴE",EĹ"ÅEĿe"E"[Eʆ"Q!E"Eէ"vE8" YE"%EZ"/ E"E|"Y%E"E"E2"aE"E V"E"g;E{" @E "~9E#"E)3"ZE."LE4Z";E9"E?" EE"EJ"-EP="]EU"}E[f"xquE`"sREf"n=El$"iTEq"ds4EwN"_eE|"Z+Eły"W[Eň"U Eō"RDEœ;"PEŘ"NqEŞg"LPEţ"JjEũ"GEů*"EEŴ"CEźY"A^aEſ"?E"%EG"$E""0Ez" E"(UE$"4E*H"EE/"cE5}"E;"E@"\EFN"EK"EQ" !EW " <E\" W3EbX"rEg"Em"'Es-"Ex!ȻE~e!2EƄ!5EƉ!ZEƏ'Eg!M1E%!K7E*!J)E0a!H`E6 !FE;!DОEA]!C EG!ABEL!?xERZ!=EX!;*E]!9qEcY!8\Ei!6:En!4cAEtY!2Ez!0E!/EȅZ!-AEȋ!+}5EȐ!)EȖ]!'EȜ !&>kEȡ!$:Eȧb!"Eȭ !!PEȲ!rEȸg!EȾ!cE!En!E! vVE *Eڨ E\ E E E} IfE2 rqE TE *EU cE EE Ex E/ E$ gE* E0U /E6 GE; a EA} {AEG4 EL NjER 'EX] -E^ `Ec Ei cEoA Et Ez DEʀm ~MEʆ' |Eʋ z4Eʑ xъEʗV vfEʝ tEʢ riEʨ pyEʮ@ nEʳ m+Eʹ kEʿr hvE. f.E dEЦ bMEb `E ]\E [E Y'ET W E UE SE QuEI OE  ME KrE I^E? GE EE& DOE,{ B E29 @E7 >FE= ;ECw 9XEI5 76EN 5ET 3wEZt 1UE`5 /Ee -]Ek +s=Eqv )]Ew7 'J+E| %8E˂ #Eˈy !Eˎ: BE˓ nE˙ >E˟ E˥A E˫ UE˰ E˶ єE˼J oE UE E͓ iEW  E vE MPE Ee E) <EķE EvR,E; E E<2EoEOE$&IE)ptE/E5fE;-bE@ܺEFEL׃ERGlEX^gE]ЖEcFEidʹEo,SEtEzQÈ0KĔKUĚȆE̗eE̝o~Ẹ8E̩$cE̮PE̴tE̺]E'EE˼EчIEQEKEEUE}EHm}EEnLEE x~Z ED{ٙEy[\EvE"tgaE(vqE.Cp E4pA'E9pE?pEEzq.EKHqmDEQq[EVqE\qR EbpEhOpEnp>cEsoՑEyofEoEͅ[nE͋*n1DE͐mE͖mEE͜lŒE͢kl,Eͨ<kEͮ i2Eͳh8E͹g`]EͿfEPdE"cEbEat8Eܗ`XEj_7E<^ E\E[?EZ-EXEZWKlE -UFETXERڗEQbIE"|OE(PNk*E.$LE3KbE9IE?H2AEEwGpEKLFEQ"E}EVCE\BEbAEhx@VEnN?(Et$>Ey=E<|E΅;hzE΋:REΑV9(/EΗ-7EΝ6VEҫ<=.Eұ1;ȕEҷ&:_Eҽ8E7LE6&E4E3OE1E0bE.+E-vPE,E*E)gE'E &:E$E#\E!E" tVE(v\E.o^BE4g6E:`JE@YCEFS%ELLζERFEX?E^8wEd3)Ej-?Ep'ZEv"{E|Eӂ`Eӈ "Eӎ EӔ $DEӚ 3|EӠ ;SEӥ CsEӫKEӱTEӷ]EӽfWElEsE{EEyE%EJEyEEأEE8E lEEkE.E#oE)E/YE5qE;8XEAVEGuEMޕ2ESܵIEY E_Ee$EkKEqs=EwћE}ħEԃkEԉYEԏFEԕ2EԛEԡ $EԧEԭƺEԳłVEԹJ_EԿE?EEeE $EEEbE"E#E(ydE.pE4QE9STE@EF%E MYrE&T0TE,[kE2bޣE8iE>qOEDwiEJREPEJ EU&EaC#Em_Ey}EEEEoE#EEE iECEE E$E* ~E0$~{`E63|dE^E"=xE)<5E/;E5+:uE;@9 EAW8EGm7;EM6ES5EY4`E_3Ee2Ek1tEr 0*Ex$/E~<.EׄT-JE׊l,Eא+Eז*Eל)Eע(nEר'E׮&(E׵%E׻2$EL#|Ef"NÈ!*EӚ Eٳ EAEE1EE:ZEUEqE E|E}RE{xE"yE)z@E/6E5SE;p@EASEG EM ES EZ 3TE`! PEf@ nEl^Er}Ex E~E؄E؊ Eؑ Eؗ86E؝XMpEأxc]EةEد>EصLEػzEYE;E\69E~EڟE(Ez|EjE'EI;pEltcEE E!EJEkcE$?ۍPE*cٯE0_E65E<$}EB]7EIЖEO>0EUc *E[HEaɊ[EgEmm.EtEzDVpEـj,EنbEٌEْeEٙEٟ,dE٥S*E٫{cEٱPEٷEٽ3?Ef:EBEk}E֓qEܼEdEkE8*eEb*EA}EE¶E E4E^KE zE&JE,3E3 E95#E?aEEEKEQEXZE^>Edk)gEjEprEvT)E}EڃM$EډzLEڏEڕ4EڜFEڢ3ZEڨaEڮMEڴEںvEEM E}EӭU~EE KE= Em"E6EIE[E2mE c~lEEEE$*ME*\RE0'E6KE<,EC([EI[EOEU/E[Eb)4Eh]N2Eng&EtEzėEہ/ůDEۇdrEۍ Eۓ&EۚR7E۠9}EۦǫE۬ЈE۲E۹EۿH E~9E˵REjE#xEZփE׎{EؘE٢E:ڪEq.EڐE װEEUJE4E"/E)EE/;[E5ssnE;EAEH"EN]ETEZEaEgI]EmeEswEy=kE܀7^E܆t~E܌EܒEܙ)}Eܟf7;EܥyEܫEܲ*Eܸ[@E 8hEK2?E",,E(&E/ !3hE5NXE;EAEHJENT8ETEZ6Ea:Eg]-EmEs'Ez&E݀iTE݆^$E݌Eݓ3wEݙw EݟEOEݥ~4EݬDEݲrEݸEݿIEW{E˜/EE(Em&EE E@EE>#EhE [cEEE2pE#zeE)`E0  E6Q\E<CEBEI,WEOu)EU FE\ ]hEbQ nEh! kEn!cEu.!E{y"UEށ"@Eވ!BEގY!Eޔ!T2Eޚ Eޡ: Eާ N8EޭE޴E޺iE>EAEzEOsEӜEJE5EEFEhEl'EXEyE W#E2GEEBTE%!E+yE20$E8E>QEE VEKoEQ.EXE^a)EduEk{~EqU$oEwE}qE߄I wEߊEߐ>Eߗ?,EߝqEߣEߪ8E߰E߶xE߽0FEÄ%E,E,EրAE\E)E~MEE'hE|VEE ' E} \JE E) fE" XE( E/, :E5 JE; EB1 EH >CEN EU8 E[ 5EaݳEh@EnHEt0E{I==E~EeEUaEqE}Eb=E৻EEEp~E?E%EǀE%E7D?Eڒ_EhEIEE&lE^E1EE tEE.E dE&ӭE-GGE3E:9E@bEF+EMES}-1EY1E`;oEfElEsZREyE:GE{EE;?aEᙜEE_E=}E"gEṄ+EEGE̩E Eo*EAE5Y!EwEE_`EE&aoE Eb+ES|ElVE& E,wE2E9LlE? BEFbEL}kERuEYJaE_ߣ[Ef ]El~X;ErݥEyKE@EێE⌂ԖE;ERM5E⟻؊dE#*E⬋CEBE]yE԰bE0E̙ /EXEmѭENEA)EЗ=E;EE{6EWE {E.EyE E&qsE,ҫE3J/ E9ʋE@$EFF6ELȤESk=EYg E`FEf+LEm"ōEsEyh!EnE]EKzE㓺QE)˖E㠙7.E dEyEmBEYE=E:EͪEEڍ=Ex EpEM?ES|EE8\EEJEE-E!u{E'LE.]tE4E;DBEAqhEH,ENU]E[0EaEht5En0Eu_nE{ EJEiE:EE;E 5E>E GE!@vE'E.DLE4E;Ig@EFegEMRdeEScEZgb*E`a]Eg}`<En_2cEt^\E{]E灪\E5[ ENZ%EYEgX EWE篁U9E TFE缚SrE(REɵQ(ECPEO6E`NEME}ME L@EKe4E)JEIzE HHPEGEhFEE E%DE,C|E2B}!E99AQE?@EF\?EL>ES=EZE.(E&}EZ%E$'E$E#,E "WZEL!E EyE&E,E3AE9E@qEG EM+KET:nEZEamEh.FEn.0Eu9$E{EnE :E鏢XE< >EEr E $(E鰩 -.EE AE }!E}ExEѵ8EQvEEE(E)dEcR:EzEE <}EEyE!E'E.UE4gE;EB3EHCEOrkEVE\'oEcSEiQEpEw6E}[~Ex鱆EtEꑼ]9E^EEꥢ_EE뵩E mE깊cxE-캕EEtTEEڻE`EPEELtEZEE ;(EQEE,IE#E*x0E1,E7E>kEE6}EKER`рEYE_kEfW+ElEsEzOVEE뇡EJE@E뛜QEFEE믘@EBEE×2zEBE Eט,ECE#ETEEEEJEJE `EEP[E iE'E.WJE5E;މEBa(>EIqEOEVlE]HEcUEjx=&Eq(^EwE~NE7ՕEE쒘'YEHO>EsE즩OEZYE E캽oEofE EAEՅ]E6PElEEOEEEi=E lEEE8JE%E,E3V>E: XE@^HEGvaEN,evEThE[l9EbM~nEiiEo%Evq E}(<^EhE튖EMTEEힽEu7E-QEUE)EW>ET6EihEԂ}E<EEEjE$EEE T E6EdEE%AE+E2YE9vE@2ԂEFEM[EThE[%BEajEh"Eo^EvE|EEVEEyEESiE˶EE#EQ!E'E)Eԓ,VET.E1*E>EbEYEQEE gEa/E#E0E% E,l qE30 E9 AE@ EGz EN> n/EU Q@E[ 5Eb $EiQ Ep EvhE}EeE+ FE E E~ ZED E  1E Eﺘ 6E` ;E' 9E *Eշ 6E DEH RkE `.E mE z0Ej z)E3 wuE  tE rME oE [ lE'% jE- g]E4 dE; aEBO ^wEI WEO KEV ?E]} 3EdI 'Ek #Eq - Ex PEz t%EG E -E E 4E} EJ $E ;{E R!E oYEà BER ݊E! E NE ZE E^ E/ aE CE %|E Eq EB #E ;YE" RE) j{E0 E7Y E>+ EDvEK-ERWEYuz_E`GEg%Em+Et#E{EjE> E/SEdFE#EcEfE;KEцE͖EƽɪE͓TEi9E@EEEEEsEKE #EyREq0EE&>E-\E45PE; EA,tEH75EOEEEL=ES*EZ{<EadM)EhMK2Eo6+Ev  E} EEEE;^EDEErEE]MEH|E4bxEHE -EEEEE[E*vEOEqE_ҚELE;E#)E*E1+E78E>:EE'ELES4EZLEadEh|oEos8EvdjE}TEEmE6,E'EpE EE8ECEp-EEɹEЭqEנLEޔ'E_E|EpUEdEX̸EMTEBE7>E,.E$"XE+$E2BE9a4E?!EFEMJETE[E3Eb]Ei,EpEwE~SEPEJEmEtE EEzEt nEl{Eg,|Ea=]E[N3EVMEQ/ELEHECJE>E:E 6E2E/RE+E&( E-&E4#E;EBGEIEPEW#E^IEeFElCEsq%Ez~'EdEEEEE RE-EQEvEEEEEEENE"E%E'hE*PE .7GE12E57E"9=RE)=C>E0BIE7FMcE>JLEEOJELTH ESZFEZ`CEaeSEhktEor}EvxE}~kEEEEtE%EEDE iEvEUEE%EEE?EbE $EEZE *E5AE@EK$E&V{E-bDE4n E;xEBEI}EP}EWoE^Ee El&EsoEzE2LE EwKE&&E4 ECIESpEbקEpE~EȐvEϠ&Eֱ֛EECEDEO}EZE^E(BE:ELuE_^E$qTE+eWE2= E98mE@: EG;EN=,EU>E] ,[Ed Ek5ErJ+Ey^tEs`EZCEZE[dE[E]EC8E E"E9]EQLEhEՀ Eܗ ~E E E E aE !E) uEC E\ _Ev NE# %E* E1 `E8 E? EG PEN- EEUH E\d Ec uEj 2]Eq =ExEE E(wEEVOEb9EEGESEpEĊE?EvE4MER%EqEE1EE4EK E/WEOHEp(EE#32E*`E1ZE9E@7%EGYݪEN{EUE\\Ec7EkF%Er) -EyL Eo8En EzF]FڋPF&v)FaFlM^F8F)6FW3FB%FPFB_FkFŊ@F.ًFFvs7FAF׿{FdTF 0F PFS FųF֮ǧSF$@F( rF,IтF/ƙF3aF7S/oF; F>OFB`žFFřFIoFMm"FQFT~QFXz,F\*lF_á:FctbFg9GFjFnFrJ¼&Fu‚FyGF}Z F ҉F7FlFhFO.F6XF1F FFE\F#FFZF |FFFpF"FFÇF9FoFΟ{FRn FU.Fٸ9FkF,FF2F8E*FFFT-cFFFpdF$4F F FBKFNFG{FaF F#wF'"F+5F.}^F2hF6VKOF: %F=FAxTFE.FHnFLbFPQ,FTFWsF[uVQF_, uFbFfFjQtFnFqi`FuwRFy/FFVFݳFmKF(_F+FmFXCFFZF FEFirFF wF3tF$[FFhF$2F 2F$rF(Y3F,pF//F3_8F7LrjF; F>,FBuFFADFI^FM FQzFU7g|FXF\F`r9Fd0Fg=FklFokaFs)a0Fv`Fz`}F~f`,F%O`F*FFc5F"FFKFbnF"CFTFiFb#F#}FF:"Fdb F%@FfFŧFh=HF)oFkFԫFm[F.**FFFtF6%FF~F}F?FF FF J/F @kFIFFV 0FPFF#"F'eF+)F.lF2ݫF6uP9F::F=5{FAWFE QFIK^0FM2FPFTSFX`F\%!F_ZFcFgu jFk:XqFogFroFvw9FzR~XF~YFFFkXF2JFF CF yZFŮhFgF2ZFAF gF$ƍbF(^ƲF,(F/!F3F74F;V)F?"şFBVFF8FJъFNQĎ1FRJ+FUO0FYF^F]Q_FaO_FerFhoFlFpZxFtPLFx2:F{˗F˼*FFSUF!FJF[F̿FY#_F(͇[FxFhFFbυAF1FСVF FQFmїBF=܂F !FqwFϬNF|5FKӖFFB{FN FUF]]\F-dF{FҸF0 FqՍoFBFI_F֫F VFqVFYF+2lFcF؇F#ثF'sEF+FF/m.F2iF6ړF:'dF>bۺFB69FF ]FIܠFMFQ&FUVe\FY*ݠEF\F`DFdOFhyisFlMZFp"KFs/FK.FNFRFV'FZF^^UFb9iFfFiFmnHFq0FuFy^F}:FJFFTFWdFFFd|FA:FFFÏF^FFodFL\F*F:FFFƠFOFF])F;>FFsJFFL0F;Fs$ FRzF1+?F{F2FBF F F n ZF N&F .BF Z!F BtF F F #F 'q`F +Q?F /2zF 3F 6F :F >&F B-vF F{3F J\9F N>>F R+F VF Y8F ]١F aF eF in#zF mPaF q3F u@F xF |_(F F bF !F i,F M,F 0)F +F F "F kF F F nDF Rc@F 7kF sF |)F yF F ʱtF ΖF |F a~F G@GF -iF F F F F  F FF y,F ` UoF , F  wF ,1F zF F F F F %F :F xboF gtF VF EF #4F '#&aF +0F /:F 2E\F 6VaF :7F > lF BoF F@F J2 F NjAF RqIF Vb2F ZRF ^C(-F b4HF f%fF jzF nKF q]F uF yF }F F pF F F PF yF kF ^ʡF PF C'vF 6UF )F F KF F 5#F krF F  cF _F иF ԬYF ءF ܕ &F F ~$F s@F gwF \9F Q*F FF ;KF 0qQF &F F $F F ;F F nF EF #%F ' F +uF /'F 3F 7F ;ȄF ?#F CF G.F Kz GF Or&GF Sj?F WaXF [YsF _QF cIF gAF k:ZF o2F s+qF w#ZF {5F F F F ']F FF fF F F  F 5CF 0F 6dF dF xF F F  +F ­!PF ƨ"sF ʣ#OF Ξ$F ҙ%F ֕&F ڐ(F ތ)??F *aF +jF ,OF {-2ZF w.F s.F p00F l1pF i3CF f4QF b6ZF _7yF \8ONF Y9#F W9dF T:ĘF "R;JPF &O;aF *M< WF .KC@3rF BBAgF F@BF J?CF N>E4pF R<FF V;GLF Z:IF ^:J/F b9KAsF f8LSF j8MdF n8NF r7OïF v7Q 6F z7RQ:F ~7SuF 7TF 8UF 8VF 9WF :XF :Z F ;F <\F =]UF >^F @`^F AaF CchWF EdF FftF Hg$F JhτF LiF NkQF QlF SlrF VlVF YlF \lF ^lF amF dnF hp lF kqsF or&.F rrF vs FztoF}u-F uFvAFwXFx 8FxFyF"zF&{~F*|,F.}F2-F6A\F:|F> FBpLFFFJCzFNXFRFVBQFZF^7Fb9Ff8FkGFo GBFsFwf~F{!F)|F0ңF8"F@r^FHFPFW\F_FhFp?FyFFw_FFUFF,F÷JFF@FOFFF%FF-FFF%KF0F;bXFFUFQF[xFgmF rJF}i6FFzF.F /F$/F(.F,-F0XF4F8)F=GFAFEFI*.FM7yFQDFURFY_{F]m.Fa{ZFeFi8FmpFqFuyFy"F}fnFFjF *F7"F)F8 FG FWoFBFG0FK1xFOM&/FShZSFW"F[F_ϰFcyXFgpFlwFp/~FtLυjFxhϛF|F}FFkFFF6TFT1FqF=*FaFSrF޳F f)F(Է(FF\Fe5nF„sFƣճF%FEF֎F!nFA2F`׭F)5FإF qFوFF!>FBژSFcF5SFtF ۳FVFF)FK_F!m۟F%sF)ۭF-l,F1+IF6F:9ީ*F>[9FB~߲FF,FJॗFN3FS yOFW-ӉF[P-F_sFcʭFghFkFplFt'CFxKF|nuoF_FJdF'F&_uFKc>FpfwFZFsFkFF*JFPTFvF;1F筀FFWF5y-F\4FӂFש'FFF躇FF襄FnFFAFޠF ~F4F\F F +F$FIF&ƑFO6F"xEF&F*斶F.OaF3 F7G辴F;pBtF?雉FCFGMFLꦩFPBiFTlQFXF\F`RFegFiB oFmmhFq FuFydwF~FFCFq5FFFF"DFNOF{(F FF%F-FZFF3FFԽF>FllFљ8%FFG-F#}FRwFF1!F늚F F;=.Fj F|FAFF (ɫFXF됎F FZF!F%G2BF)xꐠF-F1L.F6 诗F:;vF>l^FBEFF-!FJ FO0FSb牸FWFF[F_%SFd*窡Fh[/FlFp?FtFy%TF}XF F_FF$FWF$F)F.PF&3յFZ8F=FBhCFFmF*KAF_PFTFYF]F3b6FhfF՝kpFokFsMF=x*-Fs|FzFMFaFKYFFrF@YF%F [|FFZ&FF8F!oVF%1F)F.F2NF6F:F>FKFC/ :FGg-FKJVFOFTFXJ{F\F`iFd Fi/%SFmi=FqȋFuFzp1F~OoF^~FDFMF9ژUFt]sF˚FJF$DF_r|FPFe FFMFzFfFɶF<FxCFδFZF-[Fj%FߧJFOF WF]F~FkFFS aF F *F  FJF^FhQFQF/FU0F1{F2F3kF`4UIF5 F5F)6R*Fm6FͰ7aF8$F78ʫF{9oF޿:F:FGFFFfFG>F#GxF'UHX=F+HBF/IwTF4(JBzF8nKF<KKF@LFEBMSFIMXFMNxFRNw;FV_N{FZOF^PFc6QFg}RFkSʅFp UFtVWZFxY%F|Z۰F/[J[Fx[DF[=UF [3FR[L]F[F\8F.\Fx]%F][F ^FU_c.F`*aF`F3aKF~a Fb,Fb{F^c/VFҩdFeJF>eLFߊfFgF!gNFlgHFgǯFh FPh3FiFiqF4i+F kFl#FmFFgniXFovF pg F$NqWF(rG F,s)dF16sF5sF9t.F>tzFBntFFtHFK sFOXs.FSsqFWsF\Ds]F`t3OFdt|UFi1tFmu>FqvnFvwFznxF~y\FyF^zFz~eFzFOz?FyհFyiF@y kFzF{F3}I{F~FRF(KIFy~F}F}/Fn|qF|vF|(-Fe{0Fݷ{£F |\F]}F}F~DFU~dF~B F~BFO}0F~'Fa[F JVFFFEFFFbFYGFJ!FFF "FCF6JF1Fk޵F 0F%0F)F--F2Z/F6F; kF?^lFC'aFHLFLnFQFFUyFYF^B=Fb]Fg $FkoDFoFt: oFxF}FjK|FF5!FFo#Fg>F$F4BFdFFhmF>F6FFFl~XF}UTF;|TFУ{F {%Fr{V+F{FB|PF|qF|8F|{lFzFNyFy -F xZFwF vF\vKcFuF/tFtYF s/F$ns:F(s,F-Bs#dF1scF6sF:soF>r!FCXsFGu3;FL.v3FPv֚FUwvFYpxF]xFbHy)FfyFk zFozFs{j}Fxe|F|}-F?~lFFF~PF}F`}_F}pF;}F~F~EF~}F~ZFa~ɚF~F>HFíFjF̊FPFhF*"FGFF'lF8FeFvFYFVDFF7eF +F F>FFkbPF F%NPF)wF.1fF2cF7(>F;oF?FDk=WFHWFMPFQFV6jFZcjF_S5FcFhFlu.FpFu\SFywF~D=F"F-YF%FJFF.FsFZOF]FsFHFF2F/FpFŔ9F F΀JF`Fm-FFZjF$FGFF6FuF%/bFFFF JF{[Fk,FlxF F#]SF'hF,O3-F0F5@>F9GF>3s9FB2)FG&RFKFP%FBšFG NFKFP FTFY[F]yMFbFfFkFoFtFx F}#F;F"T&FlF(FF.F'F4 FF F F %F F 2F {F ?F F $M F ( F -\ F 1 qF 6k PF : F ?{ F D 9F H0F MF QF V$F ZF _5F cF hGIF lF qY!F u;F zlʹF ~ĹF /F 4F aF F F 2fF uF GgF XF ]HF 8F s&F  F 'F F ǡF -F йF EiF KF ^-YF F vF βF .F F k&F 8HF!%F!S_F! #F!mPF! F!mF!EF!"(F!'4F!+$F!0R;F!4aF!9o0hF!=F!BF!GdF!KiDF!P<6_F!TF!Y[F!]kF!b{e6F!g /xF!kF!p,F!tF!yMQ'F!}F!oOF!F!i#F!"-F!F!FF!F!jO'F!F!@F! F!nF!D4F!F!jmF!JF!ːAF!#hF!ԷČF!J+F!E F!qF!F!xF!-CAF!sF!VF!|F"8OF"!F" F"=hiF"!F"gXF"\F""IF"'(F"+ F"0TlF"4!F"9իF">2F"B<F"GCF"KAF"PqQ[F"U'F"YAF"^5b8F"bF"gd=F"knSF"pF"u+ȨF"yiF"~\F"lF"F"$WtF"#F"VF"F"F"!QF"F"TF"F"wF" ?F"F"TJF"jF"̉]lF"#$F"վF"XF"wF"=F")pF"zF"`F"FF"F"3F#-F#jGF# sF#ƅF#?aF#CF#yF#$F#(|F#-O9F#1F#6:F#;'nIF#?)F#DbF#IF#MYkF#R<F#VQF#[x9F#`Q_F#d F#iT]F#mAF#r^PF#w2!F#{BF#pF#hF#*cF#OF#F#mF#/-F#F#p{F#lF#+F#RkF#F#fF#5$MF#1F#xCF#~͘F#ӻ~WKF#]}F#}hF#|F#D|v?F#{F#{F#+{F#z!F#qz F$yF$yF$ ZxF$spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/hst_acs_hrc_f850lp.fits000066400000000000000000003465001511632712700305550ustar00rootroot00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T FILENAME= 'hst_acs_hrc_f850lp.fits' / name of file ORIGIN = 'pysynphot' / Version (0.9.8.7.dev6, 2d444af0) END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 16 / length of dimension 1 NAXIS2 = 6927 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 2 / number of table fields TTYPE1 = 'WAVELENGTH' TFORM1 = 'D ' TUNIT1 = 'angstrom' TTYPE2 = 'THROUGHPUT' TFORM2 = 'D ' TUNIT2 = '' EXPR = 'acs,hrc,f850lp' / pysyn expression TDISP2 = 'G15.7 ' GRFTABLE= '14l1632sm_tmg.fits' / graph table used CMPTABLE= '16n1832tm_tmc.fits' / component table used TDISP1 = 'G15.7 ' END @?@@>vLl@B>v4_R@@D>vL@F>v h@H>vk@J>v,@L>uʚ@N>uis@P>uEpd@R>u8@T>u0@V>u~@X>uߩs @Z>uڄX@\>u[8*@^>u/g5f@`>ur@b>uY@d>uh@f>u|vx=@h>uKn,@j>uY'O@l>ul@n>uz)C@p>u9}@r>u$,m@t>u9Wz@v>uBs@x>uo@z>u|6@|>u?NF@~>uqHc@>uz2cȭ@>utr:3$@>uo6@>ujg$֤@>ue$ m@>u_o@>uZH @>uUC@>uOkpC@>uJ#;@>uEP^;@>u?ԶB@>u:I@>u5D>2@>u//[/@>u*@>u%++7z@>u (@>uk뙨:@>u#NN@>u@>u Z,@>u8l"@>t%x@>t.@>tIFz@>t-@@>tꢱxX@>tIA@>t@>tmH@>tXw@>tωQG7@>t9)@>tġ[yn@>t-n$@>tz@>t;@>t@>tMh@>tgnI@>tk+f@>tJ_@>t~z@>t ٙB@>tl@>ts#@>t}[@>txh@>tr{z4@>tlG'@>tgFg @>tab@>t\ Iw@>tVn&/@>tP[@>tK% o@>tE1@>t?ܗh+g@>t:0]Y3@>t4&V@>t. @>t),;LY@>t#x㇦^@>tƧ|9L@>tE;@>t\@>t }=@>t<@>tu@>s1P@>ss/@>s@ >sg@ >s羱)@ >sZ K@ >s͏d@ >sA4@>sϴV/@>s @>s-@>s)*@>s 5  @>s@>s-K@>s=MT@>sL!@>sX3g@>s^$|[@>svܓ@>sɶp@>sEf"@>s|ոA^@>svMP4b@>sq #@>skz@ >se9#@!>s_L@C @">sY`Tx@#>sS᫹@$>sM֍'U@%>sH Z|@&>sBE7 @'>s<}f@(>s6ӯ@)>s0@*>s+eR+@+>s%:x=@,>sl4I @->sο@.>s%"%@/>s ^t^@0>sx.i@1>sΎ.@2>rޱy.<@3>r[@4>r)@5>rR{.@6>r E@7>rl4@8>rHq@9>rpK@:>r3rW\@<>r і@=>r ЈO@>>rPj@?>rh a@@>r|@A>rt@B>rPP@C>rxu@D>rRR\|@E>rh@F>rΈn@G>r}D@H>rw[>@I>rqpɀ@J>rkf@K>reNBn@L>r_ثu@M>rX$ţG@N>rR}Ƹ@@O>rLGt;\@P>rFJ@Q>r?C@R>r9o0@S>r3!x@T>r,d@U>r&N-@V>r IҪ@W>rB@X>rmj%@Y>r mY@@Z>r!qIc@[>r0g@\>qV@]>q+6@^>qbki@_>qUK-@`>qSTh,@a>q4oq@b>qC@c>q}F@d>q1j"@e>qa@f>q=T@g>q>r~@h>q @i>q-@j>q>!rb@k>qK @l>q4@m>q%$@n>q4Aw@o>qeש@p>q|@q>qua@r>qo3:R@s>qhT@t>qbf&ٶ2@u>q[+@v>qUv@w>qO..-@x>qH³@y>qBRϥ@z>q;qf@{>q5mVt@|>q.GQk@}>q(ncis@~>q!TNr@>qVdb@>qtّ@>q7p{5@>qZl~@>q @>pv/vX;@>p@>pC@>pԝ3@>p3@>ph˷Z@>pq竿@>puC]@>pz@>pф@>p*׺4@>p~q=_@>p,@>p%h@>pts@>pAc.@>p@>pW@>p x@>p{5D@>pu-" @>pnrr(b@>pg-@>pa TA@>pZ]b@>pSD@>pLxPF@>pFJ0#@>p?J"@>p8a&@>p2* @>p+o @>p$ٝ@>pg/@>p@>pJ%uu@>p v@>p@>oh@>o穴ȱ@>o6@>o~"Rd@>o@@>o.C@>oz@>o@>o%y@>o{7|~@>omBO6@>o_I@>oQM@>oCJy@@>o5K!@>o' -@>o3@>o @>n-7@>n^zT@>nou@@>nԴ4@>n>ȥ@>npd@>n-@>nF@>n(b4@>nCɧ@>nr#}@>nd7Hn@>nV֨kJ@@>nHc=fY@>n:`*8@>n,$@>n`@>n8O@>nB[N@>mEC@>m廀7@>m׈f@>mM?@>m.@>mʆV@>m@J,@>mS|@>mHr@>ms|1@>me [@>mV5Α@>mH"-B8H@>m9>@>m+%$@>m @>m"{B@>l 1@>l)(t@>lwi@>l9oW@>lżjl@>l;C}@>l>@>l3HQ_@>l=@>l}@>ln)4@>l_]V'@>lP=b [@>lBT@>l37@>l$`-@>l}d&@>lUӗ@>k@>k$;q@>k@_@>k@>k4n;@>kX13@>kxkD@>kJY@>kqdQ@>kbHG@>kS_@>kDbj@>k6 ^n|@>k'a@>k r(@>k &@>j)\@>j(d?@>j'DI@>jSS@>jE@>joe@ >j VN@ >j W6@ >jk@ >jsul@ >jcԕ`@>jTm@>jE~ʝ@>j6O%@>j'/@>j I@>j j @>i&͏@>i1@>i۠T{?@>i[I@>i;@>i gi@>ik3@>ij^-@>i8&F@>ipO|z@>i`o@>iQl@ >iAQ4@!>i2ul%i"bu@#>it&%@$>iR}@%>he@M@&>h|@'>hՀ/@(>h"Ga@)>hN=@*>hZB@+>hx@,>h]@->hy{@.>hi"@/>hZ)OX@0>hJ @1>h:V@2>h+<==@3>hJ%0'@4>h w0@5>g|+@6>g¼r@7>gN @8>gĢ|@9>g@:>g6@;>gB3xF@<>gJpO@=>g|UpFF&@>>glTxft@?>g\V z@@>gLRl34@A>gg,>2“@C>g0s@D>g # }@E>f R@F>fa`@G>fStj@H>f(@I>f(.2@J>fr– @K>fY@L>for'@M>f{Kk@N>fk",=@O>f[59O@P>fKIե@Q>f;R`@R>f+[1_ji@S>f]U@T>f \c@U>e\n@V>eVۉbP@W>eHC 6@X>e>gި@Y>e`'@Z>eacA@[>et@\>eu@]>exx @^>eh~MĨ@_>eWM ;@`>eG}~ @a>e6ʛ@b>e&q"~@c>e&@d>e^@e>d/"@f>d x\@g>d pv@h>dÊ,*Rq@i>d!h@j>dvga@k>d q@l>da$C@m>dpCa@n>d`f1_)@o>dO?V @p>d?c8@q>d.ڐ.@r>dQ2f @s>d b!T@t>c4s=@u>cK+ @v>c @w>cc5@x>cBL@y>c/2@z>ch%&u@{>c;@|>cx IX@}>cgOX_@~>cVɝ#@>cEui@>c5r@>c$fBN@>cE@>cG@>b3e ^d@>bw>{@>bг%cU@>b{E@>bupP@>bO;@>b{@>b|f,x@>bkTJ @>bZ64@>bI_@>b7@>b&H @>b1[@>b[|@>abc-@>a5:@>ayH@>ahm@>am(?@>aN{@>a:`@>aءnر@>ap@>ak>&@>aV]V@>a4xU@>a>.@>aJo @>aSw@>a`&@>ak,@>ap:K@>a{ 4@>a‚9~@>a>Nv@>as@>aG2@>a i˼@>a7{@>aթ@>a 4@>a! @>a8\@>aO>8B@>acER@>axA@>aWg@>a_qg(@>a@>aX@>aC%ͣ@>a2Q@>aRm Ϭ@>anB<4@>a^ $@>aw@>acv@>a}v@>a*΋6;@>aV>J@>a1C@>az7o@>aүdh@>a;@>a% +3t@>aKH6Q@>aYC @>a`t@>akZv@>a~s+ @>a|}=@>aznѝ@>axE@>av)`y@>at]@>arKԘ@>ap@>anRui@>alح\|@>ak̹@>ai(-p@>agC@>aeao@>acwē@>aaH^@>a_;Y@>a]*po@>a[@>aYPX@>aWyƊ@>aV'@>aT @>aR!x@>aP420@>aN?"@>aLOd}@>aJQ'<@>aHRG@>aFUc@>aDW`@>aBWm>@>a@V @>a>W|eK@>aa:ULeB@>a8Tc=@>a6<=ɒ@>a4#@>a2 @>a/,@>a-ڽ<@>a+V@>a)o@>a'@>a%n(X@>a#S@>a!0!@>a P@>a@>aB@>a(o@>a{%@>aWt,@>a,I@>a ȃK@>a `@>a X@>a >@>alވ@>aFn@>aD[vp@>a##z@ >`d 5@ >`{@ >`xƢ@ >`MA@ >` #Q@>`3@>`e,}@>`Tfn@>`fZ@>`UE7@>`菸v@>`Q(@>`0P@>`E@>`߅@>`>p@>`yr@>`رZ @>`i$@>` @>`6@>`ω@>`Ea@ >`W@!>`ȲS2}@">`e#F5@#>`}&@$>`@f@%>`T61@&>`@F@'>`wV@(>`VV@)>`^X@*>`U@+>`0'D@,>`zoK@->`1ds@.>`u@/>`c@0>`OR @1>` &@2>`F@3>`fO~@4>`+@5>`DJ@6>`R@7>`!g@8>`Mz~{@9>`Nk@:>`橳W@;>`@<>`| #@=>`Dl@>>` D@?>`@@>`/_̤@A>`N@B>`}O4_}@C>`zC@D>`xij@E>`uɻ@F>`s@G>`qC @H>`n}In@I>`lPV~@J>`i@K>`g9ۼ}@L>`eU؏j@M>`b_@N>``y)@O>`^Xd9@P>`\eD@Q>`YL @R>`WW (t@S>`U 1Q@T>`Rk@U>`Pp@V>`N$@W>`K؝@X>`I&~@Y>`G9>z@Z>`DWC@[>`BpAL@\>`@J `@]>`=J@^>`;vP@@_>`9 L @`>`6Sf@a>`4/Z@b>`1@c>`/UJ!@d>`,dZ@e>`*yذ@f>`( a@g>`%@h>`#C@i>` ~@j>`y'@k>`N ')@l>`{@m>`J=@n>`BZ@o>`zXS@p>`l@q>` Xi@r>` HS]K@s>`?@t>`~^@u>`7@v>`M@w>_QG@x>_ @y>_Hs@z>_ H@{>_(D}@|>_4 4@}>_Cd[@~>_JNS @>_W9f+@>_c0N@>_j@>_tuUV@>_}v.@>_|@>_Z@>_/Y@>_9@>_@>_e'*@>_f,@>_rJ@>_$@>_4j@>_T@>_+y@>_ƈ4@>_~ '@>_y2$@@>_tL?@>_ol{@>_jlj @>_eY@>_`ݾX@>_[ r@>_VSN@>_R*@>_M)DX @>_H?$W&@>_CT@>_>k@>_9}@>_4@>_/.@>_*ert@>_%uѲ@>_ 7j@>_ @>_$#@>_}@>_ ?! @>_@>_!@>^pU-@>^-@>^ #~n@>^}@>^j.@>^#Tz@>^dP@>^85W@>^t$@>^ @>^dz4MO@>^†"A@>^v)@>^Μ@>^ @>^Tޢ@>^#p@>^ڳ@>^Srg@>^*@>^@>^6 @>^/̿@>^k@>^!9n@>^{#0 @>^ux]@>^po@>^k/@>^e@>^`W2=q@>^Z z(@>^Uf=@>^O<@>^I]q@>^C~@>^=4@>^7ݦ@>^1!@>^+)b@>^&9@>^ :<'H@>^^F@>^ݔ_@>^*B`@>^ Q"@>^r@>^w@>]%f@>]\6C@>]4 F@>]C'@>] )@>]sO}@>]!`&@>]M@>]ε @>]%{@>]Ç8@>] Oz @>]Zo@>])̴@>](Ms@>]@>]@>]\c@>]_S@>]0H@>]= /`@>]e@>]\2"?h@>]zп/@>]t^u@>]o>c+@>]i{9o@>]cpn@>]^{@>]X=@>]Rw"@>]L=@>]FmUE@>]A#וy.@>];zɘ@>]5ٛ!@>]0.S@>]*ߧ@>]$ܓ9@>]21@>]Qj@@>]B@>].cN@>]}ؽV@>]qB@>\ q3P@ >\OגI@ >\"@ >\ z@ >\ ~}@ >\aӧ-@>\ڤD@>\Lp@>\%B@>\f@>\éx@>\V<@>\) ^@>\iRN@>\U@>\R'@>\%@>\\ҙ @>\8j@>\Hq@>\.J@>\p2v^@>\~JFA@>\xr8.@ >\r o@!>\lΰї@">\f|D'@#>\a W@$>\[8@%>\Us@&>\O!@'>\I_l@(>\DEk@)>\>Wh)d@*>\8nYB@+>\2cC9@,>\,ΝW@->\'7+@.>\!mі^@/>\ @0>\nX@1>\/4j@2>\ n@3>\D0@4>[ u@5>[(/z@6>[iS@7>[}_@8>[E@9>[a/@:>[0@;>[9@<>[9p@=>[,þ(@>>[7~+N @?>[At@@>[M @A>[Z[hH@B>[bq@C>[YTW@D>[UiK @E>[N u@F>[Hx@G>[B&n@H>[5>@I>[-@J>[|ySr@K>[v@L>[pZ9,@M>[j,OH@N>[dS@O>[^zl-@P>[X^@Q>[Re@R>[L @S>[GlF:@T>[A%*A@U>[;D)@V>[5_^(n@W>[/X,=@X>[)RߤH@Y>[#J) R@Z>[F%7@@[>[;?@\>[06@]>[ 'ؗ@^>[\V@_>Z ٖm@`>Z}Ь@a>Zݭ@b>Z B&5@c>Z0|ҋ@d>Z@d@e>ZN|J@f>ZW g@g>ZgM @h>Znh兎@i>ZyW@j>Z@k>ZcE`@l>ZG3@m>Z!R^@n>Z"@o>Z @p>ZY0@q>Zw?@r>ZwY9@s>ZXb>@t>Z*4@@u>ZzG@v>Zs;@w>ZmK=H@x>Zg @y>Za~ @z>Z[YRR]@{>ZU3B ^@|>ZOGP@}>ZHy@~>ZBS@>Z<8 9@>Z6Rؐ@>Z0:xs@>Z*#.[@>Z$I@>Zr,@>Zfh$D@>ZW\|@>Z Dn֖@>Z6{߅o@>Zc)@>Z1@>Z:0V@>Z`g@>ZV@>Z:h@>Z.@>Zk|B@>Z7S@>Y@>Y<@>Y~@>YIpp@>YI'=@>Y K2@>Yy{@>Y@>Yoca@>Ytm@>Yh0̯@>Y@>Y_-3@>Yj@>YY @>Y.a@>YPr@>YpǢ@>YG@>Y_N@>Y?@>Y^e@>Y=X@>YMá@>Y;i:@>Y@>Y90ڗ@>Yo?@>Y8w@>Y@>Y2ES@>YR+@>Yfu@>Yv@>Yj@>Y_6^ @>Y\@>YY맩_@>Y:q@>YꄆH2@>Y #>@>Y x@>YǛ @>Y蔝r@>Y%=@>Y瞳W@>Y! 6G@>Y~@>Y"X@>Y夦@>YD@>Ys@>YDe@>Y]gB@>Y2_@>Y7F@>Yx@>YK@>YxG @>Y&a@>Yߗvn@>YIC@>YM"@>Yެo@>Y]z@>Y E&}@>Yݺ6@>Ylu@>Y@@>YQK@>Y<@>Yg@>Yڷ Z@>Y- @>YH U@>Yؕ]0@>Y@>Y.`@>Yx ˮ@>Y_}@>Y @>Y\1[Q@>YӤ-=@>Yfr@>Y>1j@>Yт:1<@>Yi@>YݪE@>Ya,@>YΫ(_@>YI@>Y}@>Y帴@>YQ'/{@>Y˴[6@>Y"7> @>Yʅ-@>YzX@>YV4@>Yr;@>Y%V@>Y|oIa@>Y`6tP@>Y7oM@>YŔA R@>YK@>YLh!@>Yå甑@>Y*/P@>YZ1@>Y<|b@>Y ]!@>Yh,o@>YtƼU@>Y*@>Ykܜ@>YR]@>Yt@ >Yr@ >Yg@ >YSVkD@ >Y:@ >YmiO@>Y@>YT@>Y ʸ:@>YT@>YX?@>YϽT@>Y2|mL-@>Y6p@>Yc!@>YBư@>YZ.5X@>Yc@>Yi@>Y3Ժ_@>Y}q@>Y4s@>Y ch@>Y=64A@ >Yp[@!>Y),@">YӲ@#>Y(-@$>Y9:P3@%>YlPs@&>YW@'>Yɯ'}@(>YQ@)>Y<\@*>Yբ@+>YnTH@,>YA+s@->Y;l@.>Y{Z@/>Y;@0>YHa@1>Y8OK(@2>Ys)@3>Ye|@4>YQmD@5>Y˿+@6>Y+j\L@7>Yߕ}@8>Yu@9>Yoe@:>Y=n @;>YH xX@<>YĤ~@=>Y6@>>Yp@?>Ys=@@>YVye+@A>Y{.@B>Y\@C>YKN7@D>YFA@E>YR@F>Y a@G>Ye=@H>Yk@I>Y&N1@J>YLII@K>YnnW@L>Yb~@M>Y!@N>Y\@O>Y>@P>Y @Q>Y+,@R>Y>V @S>YMxY@T>YX0@U>YhoL@V>YwH@W>Y@X>Y@Y>Ye}@Z>Yix@[>Y@d@\>YB@]>YLz@^>Y~ @_>Y}̐r@`>Y|`@a>Y{ T@b>Yzت)@c>Yyo@d>Yx6x.@e>YwWe@f>Yv.0@g>Yu`@h>Yt8y@i>Ys30@j>Yr-`jb@k>Yq?,9@l>Yp{@m>Yorj8@n>Yng 3U@o>Ymkx@p>Ylm @o@q>Ykt%@r>Yjx6@s>Yiyؕ1@t>Yh}a@u>Yghi@v>YfL@w>YeRǞ@@x>Yda@y>Yc1 l@z>Yb R@{>YaJ@|>Y` @}>Y_F[@~>Y^lw@>Y]—@>Y\F@>Y[ݦp@>YZw:@>YYwSzE@>YX} @>YWk@>YVUJAb@>YUC2@>YT.* @>YSnׁG@>YR5O@>YPԕk[@>YOLA@>YN@>YMZb@>YL]x@>YK4{@>YJ‰@>YH8N{@>YG˘iG@>YF@@>YEX c@>YD-$"X@>YC8*s͛@>YB@]@>YAI%$M@>Y@TK),@>Y?^)@>Y>gTh#@>Y=m'ɍ:@>YY;}`wT@>Y:@>Y9yqc@>Y8}m@>Y71@>Y664@>Y5'@>Y4 @>Y3$Du@>Y2p@>Y1謷@>Y0bhX@>Y/dl@>Y.AxjY-O@>Y+h@>Y*s@>Y)|x@>Y(5v@>Y'ai3G@>Y&8@>Y%jW@>Y$ @>Y#{@@>Y!`@>Y E@>Y)@>YA@>Y s@>Y@>Y;6K@>YИY@>YR@>YQt@>Yt_@>Y}Su@>Yu,P@>Yg| +(@>Y\f@>YP$E@>Y=@>Y2XK)@>Yx@>Y A`@>Y a9@>Y sݥ@>Y Z@>Y d F@>Y@z@>Y%q@>YF@>Y&@>Y3k@>Yu@>Y@>Yh]\@>XIy, @>X-+أ@>X}=@>XK\@>XAL`@>X-D@>Xth@>X,@>XaO@>Xv@>XYa@>Xh @>XˉF7@>X5@>X?S:@>X&sf@>Xԡ@>X~@>X\&@>XƎ@>Xޝ}@>X׬r.*@>Xm'@>XƜ[@>XO3A@>XZ @>XB@.@>XjX@>XC"]@>X˛@>X@>X)՜@>Xڗh$@>Xj{1@>XE@>X/@>XY>@>XԌa@>XA(`C@>Xe@>XЮ@>Xg_A@>XXlqD@>X@>Xˎ-@>XIqA@>X'!@>X Cʥ@>Xp@>XӡU@ >XĴ[ֲ@ >XÙ˄0?@ >X|@ >X[9H@ >XBSU@>XY5\@>X:@>Xj,@>X҃@>XlK@>X@>XP@>Xh y(@>XQ2@>X5Z@>XT{@>Xr@>Xδ@>XqS3@>X5c@>X U@>Xi@>Xbݔ@ >XW1 @!>X"g1@">Xpe@#>X(v@$>X0?<@%>XCF$@&>X{ C@'>X"@(>XT@)>Xo"7J@*>X$@+>XG^'@,>Xb]S@->X#nA@.>X@/>X㔳@0>Xcݨo@1>X$h @2>Xq7l@3>X(q@4>Xi(h.@5>X&i5@6>X@7>XoR@8>XX@9>XVg@:>X(`%@;>X@<>X̄O @=>Xۙ@>>XiLA@?>X;,@@>X @A>XU@B>XJs]@C>X~ni.@D>X}ԥ@E>X|hJL@F>X{}@G>Xz]6@H>Xyt@I>Xxdmk*V@J>XwOm>>@K>Xv}M@L>Xt-Lq@M>Xs]\!@N>XrNE@O>Xq W`@P>Xoи @Q>Xn @R>XmN@S>XlY@T>XjӋ}2@U>Xi X<@V>XhB"e@W>XfWd2@X>XeŠx@Y>XdrxbX@Z>Xc-WUC@[>Xa j+@\>X`e@]>X_]A8@^>X^;@_>X\,h@`>X[@a>XZwz@b>XYS)B6.@c>XX#%Dc@d>XVxe@e>XUkJl@f>XTq@g>XS_DE@h>XR1@i>XP{ @j>XO @k>XN@l>XMG@m>XL PGE@n>XJ&Z@o>XIs"@p>XHa]@q>XG#s@r>XEʼ@s>XDC1@t>XCđB@u>XB5ա@v>XAn@w>X@n@x>X?t@y>X>\ӵ@z>X=Fg@{>X<0_@|>X;Hkj@}>XDz({@~>XMk%@>XW- @>X`r;@>Xi/b@>Xs:,@>X|L@>X@>XO착@>X@>X`d+@>X/c6)@>Xxk@>X Q@>XzK@>XEQNaZ@>Xىc/d@>XX@>XTi5@>X]7J@>X@>YCŅq@>YeX[(@>Yw@>Y$$Mz@>Y-y@>Y6$$@>Y@19@>YI#b@>YRW@>Y\]h@>YeN3t@>Ynw 2)@>YwUG'@>Y]h@>Y :h@>YAl m@>Yp/9U@>YG@>Yթ:@>YOzq"J@>YfO@>Y>@>YԱ@>Y,Om:@>Yi L@>Yq0 @>Yp,k@>ZLU@>Z 51J@>Z5mx@>Z L-M@>Z)S@>Z3n@>ZZEד@>ZO8iY@>ZXL@>ZbN7@>ZkiDvğ@>Zt8@>Z~ K@>ZWY@>Zv@@>ZmE@>ZDNe'3@>Z25@>Zw@>Z7-x@>Zȋ툜@>Z y5]@>Zۆ2,@>Z2}@>Z9-@>Z ̚@>[d2I@>[ 7p@>[7D@>[G|@>['.j`@>[0|G@>[9@>[C-~%@>[L\N'@>[Ut@>[^DL@>[g8I@>[q$@>[zQ^P@>[T C@>[*k@>[̆W@>[vȺ@>[&k@>[ĝn@>[jpyY1@>[@>[к-$@>[gDn@>[e@>[H<@>[ܲ7@>[ @>\>\y@>\%ys_W@>\\K@>\$@>\-џ2@>\7 c¾@>\@F|U @>\Ie j@>\R&}J@>\\^|V@>\eAfB@>\nbgO@>\w_@>\'c@>\@b@>\\M@>\&@>\@>\_N{@>\pu@>\I}@>\G+@>\ԘDL@>\O7@>\4Z\D@>\]|M@>\Ы@>]#?81@>] p%P@>]}oh@>]Ӯ?@>](ctU@>]1:t#@>]; @>]DZT@>]M/ln@>]V(@ >]`?OY@ >]i{(XOh@ >]r3@ >]{D@ >]2q@>]w(f@>]Ѳ4@>]U[@>]*XU@>]h*4@>])?@>]E6 @>]϶@>]O_q@>]⎂S5@>]oyM@>]oԥ@>]+b@>^Q@>^-@>^}#@>^$Z@>^-ռ%G@ >^78P@!>^@* *@">^I.@#>^SW0r@$>^\O3@%>^f=@&>^otGيT@'>^x1@(>^MN@)>^A5=@*>^$(@+>^NP@,>^v5@->^mn@.>^ի@/>^F@0>^Ͳ.@1>^Lw@2>^Rz(@3>^k]V@4>^@5>^1x @6>_'~7B@7>_ =S6@8>_Me @9>_c+s@:>_(s؇@;>_18G@<>_;/]@=>_DkFw0@>>_M)@?>_W 9@@>_`c~:@A>_i؀@B>_sr@C>_|Yn ,@D>_Mp@E>_IS@F>_~ @G>_l+@H>_]@I>_}@J>_cS_k@K>_X k@L>_Ҡ@M>_> g@N>_Xv@O>_@{@P>_UX@Q>`PE@R>`*@S>` c?t@T>`&\_ @U>`Rk@V>`w@W>`)]@X>`!ةd@Y>`&@Z>`+N)C@[>`0|3$o@\>`4";@]>`9zg{@^>`>4|@_>`B,@`>`GQR@a>`Lc.Wg@b>`Q r@c>`UO|R@d>`Z{.^@e>`_MXu@f>`dtdj@g>`hnX@h>`m|Ko@i>`r:2%@j>`vЧ@k>`{S6@l>`g{@m>`?@n>`:W@o>`CӨI@p>`oU67@q>`zy@r>`tU@s>`&@t>`U@u>` @v>`@w>`U[@x>`yp@y>`Jۨ@z>`@{>`dT!@|>`%(]0@}>`C8@~>`Աp@>`t';m@>`7@>`@@>`Xp@>`.|;l@>`L8@>`ovM@>`&'B@>`b2$@>avސ@>a{@@>a @>am@>a'@>ap#l_@>a T]@>a%4@>a*M|Q@>a.+|@>a3$V@>a8ȕn@>a=$@>aBDP@>aFܬ_@>aKvn&@>aP 7P@>aT{@>aYA"@>a]5z@>abvŠvX@>ag&:@>ak|E@>apr#.@>au?7@>az \ @>a~֖~@>a@>alnʹ`@>a9>@>a$`@>a=@>aDu.@>a]iOL@>aT@>aߐ{Z@>ax@@>a]{1@>auIq@>aaɍ@>a^ @@>a @>aLJ@>aԦI|@>ang>@>a0Z -@>aj<@>ar@>aM6@>aC6RJ@>a )@>a'JB@>a5 @>b@@>bkyf@>b e@>bny@>b'w@>b߲y@>b ;Q@>b%V @>b*xi#W@>b.^z@>b3 \]@>b8y8@>b=F@>bB@>bF`"@>bK{a@>bPi4@>bUP @>bZV2@>b^vU@>bc|@>bh*2@>ble-@>bq2@>bv<AM@>bzt% j@>b}J@>bGXʮ*@>b_C@>b.@>bM@>b i(@>bkضP@>bH!@>b&*@>bg@>bn:}@>b?U@>bN:Q@>bw@>bR@>b)&1@>btr@>bK@>bַmKٽ@>bے=@>bl_@>bE@>b"bs@>bȎ ΋@>bp݀ @>b.L@>bHo@>ck@>cw@>c K@>ccϣ@>c-Є@>c"G@>crz`@>c"/`f@>c&dX@>c+}@>c0h']@>c5)SV%@>c9RJS@>c>2@>cCa 0@>cH!>@>cLɑ@>cQ߫@>cVdH@>c[tHl|_@>c`J[@>ceUP@ >cioY@ >cn̟@ >csO@ >cxt oH@ >c}C&o@>c u|@>cӟ@>c@>cj@>c5tfUD@>c,@>cȵT@>c- $|@>cbC@>c.|@>cX7@>c2!'d@>c#5;@>crEA@>cBQ@>cR).H@>c:@>cӲn;@ >c؇E)?@!>cs-8@">cdHSd#@#>cQ8I@$>c=y,@%>c/CC@&>cI3@'>c yP@(>c3@)>dP@*>d ت@+>dt@,>dJ#@->d(@.>d!p@/>d!tE@0>d&+a8@1>d*l,@2>d/$@3>d4ZZ`@4>d9 @5>d=N@6>dB-@7>dG+@8>dLoS$@9>dQD@:>dV{@;>dZH/E@<>d__ <@=>dd@>>dix6@?>dnMH2@@>ds+!ս@A>dx9@B>d|ޙ@C>dpi8@D>d @E>djM@F>dF?@G>dE!@H>dΑ@I>d@J>d׻@K>d@L>dlԋ3@M>d@N>d@O>d2@P>dqj@Q>ddGy@R>dTAV=@S>dL@T>d8>@U>dٝ{@@V>ddL@W>d$@X>d逍@Y>dg@Z>dsA@[>d7G@\>dʦP@]>dIV@^>en@_>e {Sm@`>ep@@a>eqe@b>eQG@c>e.@d>e" 2@e>e&Ũ@@f>e+\ۗ@g>e0ϬG@h>e5U@i>e:ʀ@j>e>m3p@k>eC_@l>eHz0u$@m>eMD<@n>eR!î@o>eV#@p>e[o~-@q>eZw'O@r>eYOÊ@s>eX&qKe@t>eV>I[@u>eU/@v>eTL@w>eS~q@x>eRWIב@y>eQ-1v@z>eP/R@{>eNehg3@|>eMʹvj_@}>eL聇=@~>eK*+@>eJqQTm_@>eIS|=@>eH9Cd@>eG@>eFC)@>eDу@>eC@>eBy<[@>eAEh:@>e@$@>e>N@>e=<@>e<{)L@>e;Es5@>e:@>e8kџ@>e7WM@>e6|a@>e5W@>e4d%@>e3`@`S@>e2$@>e1G/@>e0 ]d@>e/wed@>e.p4<@>e-Uq@>e,CI@>e++f3L@>e*\mL@>e([@>e'鮍\@>e&Ѭ@>e%@>e$lrU@>e#W@>e"clu<@>e!>#\Y@>e v@>e}U 9@>eƘ@>e#@>etݾ@>eLʗx@>e"hT@>e]%@>eB_@>eTݶ@>e\%@>e@>et @>eZ*:@>eA3@>e&;p@>e AB7@>e OJ@>e }@>e اm*@>e Ր@>egfN@>evZ@>e]L*@>eB3@>e+Q@>eFJ@>eܩ@>e@@>dz(V@>d;Eq@>dgт@>dG=`@>dxZ @>d;+!a@>dK@>dnP@>dx:@>d^{@>dIL@>d/y@>d:a@>dk@>d lo@>dׇS@>dõ-@>d0we@>dN@>d}@>dcr@>dJ8Z@>d2c@>d)@>dG@>d,@>d`@>dື?<@>dߣ#@>dcA @>d$׋@>dL6@>dڬx @>dkqy)@>d.Z@>d @>dճ$@>dv{@>d9WA @>d'ҚM@>dTY@>d X@>dzȴ@>d(@>dWYo@>dʛ@>dʻJ@>dɭ;I@>dțs{@>dMC*@>dQ@>dİ@>dbw#@>dN?@>d/+Y@>dw@>d)*>S@>d;9@>dz@>dty,Z@>dZ_x@>d@=@>d&@>d Ցa@>df`@>dQr@>d(Es@>d@>dNH@>duY2]@>d^]s%@ >dGvT@ >d0M}o@ >dI$JT@ >d9@ >d @>d٥DC@>d @>dG@>dl)@>d*z`@>dN Y@>d$@>dqf"@>d/82l@>dn@>dLp}@>doY@>d1ps!@>d9.@>d@>dd@>d@>dVF@ >d8@!>dmFJ@">dO@#>d4lp-@$>d%< @%>d˄T@&>dyT@'>de`@(>dG̃@)>df\1}@*>dEmz1_@+>d Fɕ@,>d\Ǵ[@->d3@.>d<@/>d8?@0>da!rM@1>d6k1@2>d~  @3>d|=k@4>d{4@5>dzZ@6>dy^%9L@7>dx4.?@8>dw v@9>duA@:>dtۘ@;>dsy@<>drQ@=>dq}ah@>>dpd@?>donWc@@>dnX L@A>dmAh@B>dl+^u@C>dj@D>dif@E>dhO{@F>dg'ݬ@G>de'3p.@H>ddt"vދ@I>dc*TY@J>da@K>d`j)@L>d_NUL4@M>d^[n@N>d\լ@O>d[mva@P>dZ#_@Q>dXR@R>dWe6@@S>dV>b@@T>dTfu*@U>dS@V>dR];@W>dQ&)X4@X>dO'Z@Y>dN g@Z>dM|Κ@[>dLE30@\>dKE[D@]>dIf@^>dHV4@_>dGd~L@`>dF/6@a>dD)<@b>dC4@c>dB_@d>dAX$@e>d?@f>d>@g>d=T2|}@h>d< @i>d:˟1@j>d9%sq@k>d8mYk@l>d7[pT@m>d6@:3@n>d5+O@o>d4˸@p>d24@q>d1P@r>d0̺F~@s>d/7/I@t>d.ΰM@u>d-96;@v>d+ֆ9v@w>d*o@x>d) ,zD@y>d'+U@z>d&C>6U@{>d$|?@|>d#z|@}>d"C(`@~>d ~@>d|e5[@>dGΜP@>dAc@>dc@>dd@>dwh@>dAȉ@>d@>d|@>d@>dytZ:b@>dVgR@>d,2@>d\@>d6!@>d Pj@>d %@>d d@>d >,@>d q@>dўZ]@>d@>dSj/@>dTg@>dP()@>d+@>dMeGG@@>c xs@>cP!q@>c*B@>cGN[@>c7J@>cCK@>cwxc@>c.}@>c@>c'@>ca3@>cO@>c3@>csj@>cH.h @>c {@>cP@>cwZ@>c1I]V@>cʆ@@>c壻@>c]?@>cHL@>c)!g@>c6@>cb ,@>c%) @>c'@>c۱D=@>cs|c@>c;M @>c;#@>c.@>cՈP5!@>cRml@>cxX@>cG#.@>cЫW@>cr@@>c=܋@>c; @>cx^b@>cʖ͢@>ck:0@>cC @>cA@>cW@>c¸C@>cÙ@>cp@>cE@>c @>cc{@>cW`@>cfAc@>c;l@>cJ a@>cM+@>cFO@>co65@>c{#@>c6N@>co@Z@>cd@>c`BI6@>c߱@>c\( @>cjp]@>cA@>c8@>cx@>ch=G@>c<kA@>c;@>cf.@>c'.@>cg:@>cd5Jx@>c;h#@>c$@>cO{*@>c'@>cmU@>cP@>cΚ_@>cb@>c3Oj@>cᄺD~@>c/P$T@>cFT@>c,a@>c?@>ck@>c3]B0@>ck @>c3@>c}J@>cAʿ@>ci@>cɐ.j@>c3%@>cS; @>c'qi@>c}@>c|?@>c{ث,@>czzJ@>cyN@>cx#j5f@>cva@ >cu>@ >ctI@ >csG6@ >cq*R@ >cpD@>co3'&@>cm״>d@>cl~'ܜ@>ck"h@>ciu2@>chm.v@>cg'@>ce¯4@>cd@>cc]s/@>cb%c1@>c`5B@>c_uq@>c^p)@>c]81/@>c[1VH@>cZ>'F@>cYtRO@ >cX"x@!>cVKv@">cU..Q@#>cT3!"@$>cR:@%>cQ,r@&>cPHe@'>cN5@(>cM8&.@)>cLGٌW@*>cJ!#w@+>cI@,>cH+&[.@->cFy@.>cEl%@/>cD(? @0>cB"$-@1>cAQȁ@2>c?le@3>c>ƥ-@4>c=5\@5>cc;KK5ܳ@7>c: 6%@8>c8x=@9>c7ͺ@:>c6s96@;>c5{%A@<>c4Qy@=>c2_Ǣ@>>c1 @?>c0i@@>c.@A>c-@yU@B>c+`@C>c*i B@D>c)!@E>c'jL@F>c&+"v@G>c$2@H>c#s@I>c"Zx>@J>c!0@K>cTݏ@L>c4珺@M>cB~B@N>ceG%@O>c0@P>cp”@Q>c$@R>cԭ-d@S>ca@T>c:R@U>cꚻ|@V>ch@W>cP )@X>c;@Y>c ﺛ@Z>c gU@[>c D!P@\>c x4@]>cSQ6@^>cr[@_>cP@`>c@I[@a>cx'@b>c̞@c>c,_V@d>b 4@e>cs_nU@f>ctm4@g>c ~@h>c M9 @i>c!OD@j>c@k>c(7+a@l>c @m>chʑ@n>c#AG@o>c&LK@p>c*4_a@q>c-N4@r>c1f>'@s>c4^@t>c8f@u>c<-\A@v>c? a@w>cC]C@x>cFp@y>cJPa@z>cNxyW@{>cQ0a@|>cU+E}#@}>cXș@~>c\D߯SN@>c_^@>ccaZz@>cfﷻ@>cj{n@>cn^Y%@>cq~0L@>ctTM$)@>cxm9}@>c|u@>c@>c@>c*=@>c#<@>cF@>c(#:@>cǔ{h@>cjg@>c ؅yi@>c'q@>cJ֬.$@>c%@>ce@>c+^"c@>c/?@>cc @>c)@>cB>@>c#bA$@>cöHa@>cPyh7@>c91@>cz_@>cv@>cե^7@>c,3&@>cܴ#@>c:$.O@>c3@>cG|@>c #@>cU@>c @>cdIr@>caFLu@>cv_@>dA@>dS5@>do@>d J5@>d6@>do]@>dO9+@>da@#@>dg@>d @>d#|W@>d'B_@>d*82@>d.H՗@>d1Us@>d5.;](@>d8DT|@>dd?χ@>dCOs@>dF،σ*@>dJ_Q«@>dMs3@>dQk)g@>dTD3@>dXx@>d[Oĩ@>d_Q0@>dco {@>df†@>di8S}@>dlPҹ\@>doi'@@>dr} @>duĘ@>dxK[@>d{Q>@>d~شo@>d(*@>dK'@>d @>d ]`@>dk @>dݢ@>d,Im@>d@>doU@>dI- nF@>du5@>dĺsw@>d<@>db@>dS@>d?d̎@>d]C!@>dx @>d?@>dV;@>dЊ}7@>doʹ9@>d"@>d &*\t@>d~7@>d,D^@>d@q5J@>dR@>dbob@>drl\@>d&@>d`r@>dd @>d3@>dn@>dqM@>d @>d$X@>dUC@>d@>eĆl#!@>e*@>ewʭm@>e E-@>en @>eS@>e@>eT @>e@>e;q@>e!eNIdr@>e$Uz‘@>e'CX?@>e*3H`&@>e-$Cb@ >e06np#@ >e3P\@ >e5t@ >e8MH@ >e;yL@>e>ş@>eA xy@>eE:24BG@>eHsJr@>eK:$ @>eN8_@>eR* @>eUf S@>eX+e@>e[ߎ@>e_$1@>eb?xp@>eea@>eh@>ek۟X@>enl@>eq'Q@>eu@ >ex3/@!>e{Rx/@">e~v|.@#>ez&q@$>ep3@%>e;@&>erq@'>e @(>e u@)>eF0@*>e܇@+>e2u@,>ey@->emM@.>eŖy@/>e@0>e$`@1>e~u@2>eD1}@3>e19@4>eF(g@5>e\!@6>epQS"@7>ey@8>e @@9>eĆR@:>eNj7=@;>eʒ,[J@<>e͚m(@=>eУ:Ǡ@>>eөu )@?>e֯)7@@>eٳ@A>eÉAQ@B>e%9@C>e׈@D>eaD@E>e]@F>e2u@G>ez+@H>e,g@I>e:`@J>eGj@K>eO2@L>eV@M>f\ݱW@N>f^P@O>fdI,@P>f jϥ@Q>f ns}k@R>fqbm@S>fy+@T>f~:@U>f @V>fD@W>f!@X>f"⻗@Y>f%ܬ~@Z>f(H@[>f+C@\>f/z@]>f2&f@^>f53Bh@_>f87bA@`>f;?b@a>f>?|@b>fAAw|@c>fDCD S@d>fGD`L@e>fJH,\@f>fMG4/D@g>fPJd@M@h>fSI@i>fVBQbb@j>fY=V@k>f\6MOK@l>f_,Ƞ@m>fb'@n>fe1S@o>fhP0@p>fk5~@q>fn W@r>fpѪ@s>ftK[^=@t>fw <@u>fz@v>f}@w>fa@x>f"'@y>f(h?r@z>f+l@{>f13#p@|>f6Es@}>f9Q@~>f;0@>f@)Y@>fA@>fAkK@>fF@>fD@>fGjӸr@>fGk .x@>fKf@>fCK.@>f;| @>f2{@>f,>(@>f#sYg@>f_P@>fTӎ@>f "(@>fvb@>f}@>f͋a@>fWe@>fҭGG@>f? @>f(@>f_Wtx@>f~@>f~n@>f@>f䜲 '@>fFh[t@>fڇ_@>fF|H@>fF z@>f'@>f`J@>fA @>f랲@>f@>f;3@>g%V@>gS9p@>g۰@@>g f% @>g E芒@>g|K @>gxo@>g%I[@>g{D@>g.r%p@>gJ@>gzq@>g D$@>g#4M.@>g%D@>g(|D @>g+U,@>g-¥@>g0cgG7@>g3L/@>g5@>g8JU@>g:k@>g=:P{@>g@*h:9@>gB?@>gElZG@>gH A/@>gJ9+@>gMF@>gO@>gRT'@>gTd]@>gWdv"v@>gY-@>g\k6م@>g^hv@>gawY"j@>gc[H|@>gf@>gi{Г@>gk@>gnA@>gp @>gs9~@>guo@>gx{@>gz] Y@>g}(@>g@>g*4@>gmc@>gi<@>g8@>g/ @>gO4}•@>g>%<@>g >@>g.Z̤@>g͎}@>gQܥO@>gV7;@>g\@Ӈ@>gݼe@>g^S$@>gS4/@>ggII)@>g駇O@>gl&*H@>gf@>g[E7@>g@>g6xHb@>g@>gP\;,@>g7@>gQX:@>g[Z@>g@>g5v@>g¾@>gQ-k@>gޤ [@>gmr!@>gNO@>gڇL@>gj@>gߡ2ų@>g,2@>g乪Y+@>gGeo6@>g$P@>gY Ci@>gqp@>gl O@>g@>g}@>g3a_@>gl('@>g@ >h;8b@ >h.No}@ >h @ >hCW@ >h Ǘ@>h Y&i@>hG@>hoV,`@>h~@>h_@>h@>hK/@>h*;@>h!S@>h#vZ ^.@>h%ؾ2J@>h(<@>h*@H@>h,kT@>h/a@>h1{q@>h4B_@>h68@ >h9&>@!>h;BS @">h>Z@#>h@o!@$>hB@%>hEN@&>hG}z@'>hJ53~ @(>hL~@)>hO*@*>hQ@+>hT'@,>hV"U@->hYW@.>h[^ޠ@/>h^N@0>h`|@1>hc bۖ@2>he @3>hh+1i!@4>hj 6L@5>hmD.@6>hoկy@7>hrd0@8>ht2t@9>hw~@:>hz0ll@;>h|_tt@<>h~qGP@=>hQig@>>hGOB@?>hvu @@>hs@A>h34u:@B>hʗ@C>h&ei;@D>h @E>hnC=@F>h(@G>h-Bt@H>hn\@I>h{]$@J>h߸@K>hjor@L>hU@M>h\@N>hgłN`@O>h(YK@P>h5!@Q>hu2%@R>hhs@S>h(@T>h~j}Dx@U>h'*@V>hӺV@W>h@@X>h.XH@Y>i`@Z>j1C9@[>k@\>llڽ-q@]>mVm@^>n@@_>o*Vf@`>p !q@a>p~ꛜ@b>p @c>qhpĖ@d>q,ux(@e>rQr@f>ry#@g>s; sN7@i>t$| @j>tf{@k>u ~ @l>u Z@m>uV-s@n>vi @o>vJ @p>wQ!@q>w{T@r>x:$@s>xfq@t>y!5 @u>y26ug@v>z ~s@w>z}/LZs@x>z𸭚i@y>{d3,@z>{יz@{>|J]@|>|Czf@}>}1^@~>}I@>~(,@>~\^@>~+g@>qq:@>TӤ@>+>[@>et4@>̓\n@>{Q@>@>Kh6)@>֮\@> @>c@>0ozt@>i/@>74@>#n9@>@us@>NX @>h7KC@>pϽ0@>@>2$Z@>k9ɒ@>mq@>D(w@>hu@>Pc/1@>@>oF@>k@>3vʏ@>lfz@>. @>xgW@>{x@>Mol@>Q@>I@>h@>/TO'@>gF0@>|i@> @>@>J H@>p*@>C@>i8@>+̶]y@>d+Ui<@>c]?@>ԟK@> ϩ@@>D @>}X5@>9}@>KS:@>%^N@>]b8@>`V:@>WԚn@>Bתn@>=)ިmf@>uF@>ڄ,|@>䩻.@>r.K?@>T0Sַ@>!N@>áq@>P\MHA@>2^@>jf@>5LZI7@>!@>u@>$k7Uys@>@+@@>[繁Is@>wϳN@>^T=G@>ܲ@>φ\@>zW@>5!9@>@>9 @>U67ϋ@>p (@>z'^@> @>Ô]@>-)@>sxd@>$rv@>1&W$@>MWo5@>h@> _@>yZIo@>YxH@>օU@>$<-@> 4@>)?@>DvK@>_ǵ@>{Zy~@>5mf@>3k@>̓S@>y5m@>}@>ap?A@>:@>UW.@>qqk@>P ω@>8@>¸o@> @>}@>~?Q@>.@>J Gx@>e+@>^@>@> 2@>,_=@>)Rn@>D#@>"f/L@>=|Ձ@>Xg%@>s=@ >@@ >d@ >: @ >@ >@>A/@>0]@>Lr@>g G@>nl@>^@>9_@>}"b@>t@>X@>#̘@@>>F[c@>YnX@>t7$ٔ@>%@>̱lv @>Ď1@>KEF\@ >*@!>?hR@">.pC@#>HI@$>b*g@%>|}@&>tX@'>)6@(>?\B@)>T>@*>c5P@+>W@,>46v!AK@->N|@.>h7Z@/>UKY@0>X͒@1>h܎@2>YB@3>@4>; }@5> \Y@6>:ٌ6@7>T=L@8>n=F@9>ED@:>~X[@;>Yx@<>8;TK@=>%o@>> 7C@?>$5F@@>>Ao@A>Xq'@B>r![@C>+@D>_P@E>g@F>!@G>;h @H>Pi#@I>(Y@J>BO@K>\KIa}@L>u@M>j@N>97@O>±r3@P>Cb/@Q>"@R>X6g@S>)8esO@T>Cܽ>@U>\y[@V>v´:@W>S@X>bW@Y>0D@x@Z>V@[>(Ƅ@\>|*@]>+h@^>D*@_>^7@`>w|͠%@a>@b>geZ@c>W@d>@ L@e>_@f>Sj@g>Q[@h>!w@i>./p@j>: @k>GB| @l>TF@m>`Ƃ@n>mG3g@o>zPtEM@p>ӓ1@q>M@r>5a1E@s>:,V@t>k{@u>FR,@v>ҙf@w>.ށ@x>s@y>PH@z>5'@{>bEѳ@|>ڛ@}>*a}@~>6ߧ9 @>CZm@>O!Q/@>\M[`C@>h4@>u6J @> @>@>Gf@>*@>p@>ߐkc@>NJ@>سA@>h?@>%g@>繟(@> K 6k4@>;V@>#{{s@>/ty#@>; @>H-@>T0Bs@>`NN@>m7ޭ@>y#\w@>zS@>0oFH@>~劋@>ru@>M,@>ZN@>ϡ[S@>yn@>+jt@>iNa@>@@> FO,W@>k+@>&5@>2ךu@>>@>KT̳b@>WD@>dmI@>pwG@>|E@> @>-L@>i%@>'[O@>Cԭ@>`xr@>z{@>ݔۈ)@>&@>̞'C"@>^V@>E@>+=@>&K9@>2b6@>>|%<@>J(@>Vg@@>bVz'@>na@>zOGN@>]'}@>=@>#@>|@@>Ƽn@>T-@>j+~1@>>F@>G)z@>LQ`C@> W9@>U @>!TQ@>-Sa(i@>9OH(@>EJĖ@>QA@>]6ٴ@>i*e%@>ugqj@> @>BL@>iyk@>2@>9`@>Y@>ȃzb@>Vު@>%f@>؇/y@> @>"@>P@>]@>&:v$@>2 LR@>>hOȰr@>I.P@>UYfM@>`ң=@>lI9@>w%@>,9P@>^@>}l@>wX@>I@>F_e@>ǩVq@> Mm @>kc@>Y@>'2e<@> @> ܚv@>,z1i@>"e@>-u_@>825@>CXτ@>Ng@>Y6@>d;w@>o~z@>z1>n@>FU@>nn@>EO'@>~re@ >G@ >O@ >/ϺJ@ >g߈@ >ߗM[s@>Ye@>+@>!k@> & 4:@>*f@>"+v M@>-( U@>8$3@>C @>N:(D@>Y R @>c;.fV@>n*S@>z@>3Ls@>Q@>ilE@>Џ@ >j==L@!>\Y@">l@#>ټ-@$>粥v@%>_@@&> -o@'>l~@(> >?@)> U@*>xٸu@+>)&@,>4myw5@->?47@.>I$@/>TǙ@0>_E@1>j` #@2>u,@3>@4>X @5>vΐ4@6>7|@7>Sa0@8>@z@9>m@:>!0@;>x@<>@ץ@=>5q@>>M%@?>"@@> 8Է@A>@B> JB@C>l@@D>HJͧ@E>v@F>p~-!@G>o6@H>%,@I>+ZY@J>FGi@K>R,@L>佔@M>ۓ|.@O>1H@P>zZ@Q>aaR@R>R]@S>& @T>=we, @U>@V>5ҽ@W>m@X>a@Y> @Z>=+@[>;?@\>E@]>]E@^>طQ4@_>^4$MX@`>$@a>[@b>7뀭.\@c>oT@d>D@e>V{R@f>Yw0t@g> )}=@h>T@i>2g@j>zD6@k>is@l> @m>R7@n>,:@o>ݍo@p>*nh@q>rj|N@r>[DZ@s>*&@t>Iסh@u>)4 @v>w9@w>O$@x>f@y>L@z>,[w@{><73e@|>:s@}>.@@~> L@>X?_D@>kV@>慸f@>-#G @>t`\@>5@>B@>$!n @>H˿@>kO&@>ݖl@>3^@>Ձmy@>tO@>@>?HR"<@>b9XP@>[G@>u)@>i@>g4@>5y@>5:@>Xɩ@>{ @>@>v@>_Qf@>6@>){1l@>LiLb@>oUֿ@>Ò:@>õ|G@>^C@>ʹO@>}ѯ@>@b`M@>c%p`O]@>ą7u@>Ĩt@>nG@>~6V@>2n@>T}@>wF@>ř$4@>ż 6@>]7@>6׷H@>Ǝv%@>kA@>>I@>ǖ]?@>@>Eys@>ȝ:N@>HT@>L +@>ɣC@> m@>P-ڨ@>ʧgr@>[qG@>T̓@>˫e3ɲ@>cp@>X72@>̮;jnQ@>*-@>Y('@>ͯ6r.@>Zh@>Zv@>ΰPj[(@>(@>Z7(@>ϯtD@>q@>-2Xb@>WE:@>Ђ+{@>ЬI΅@>@>l@>+X$5m@>V/@>р>0@>Ѫol@>B'@>($:k@>fL@>ҥZ_ @>z@>"f&@>` C@>ӟ-Jy@>o!/@>@>YĞ@>ԗRW@>ǹy@>Gh@>Q{ߴ;@>ՏBb@>(v@> [@>H!e@>օ@>}@>J< 1@>= @>z&@>׷J-@>'bJ@>1z1`@>n!t@>ث#@>\z@>$ڲM@>aCs@>ٝ)_@>L}@> |A@>R/o@>ڎ?9@> \@>A`@> @>K/@>В-!i@>U&_@>َ@@>]؎ȏ@>#L"@>ez@ >_@ >62W@ >x-@ >[*t@ >Y@>=/@>D"@>@>1P_t@>Cm@>[@> (qm@>(,Q@>H8 @>24@>y@> 𻄄@>KkÈ@>d$@>L@> 7@>N ]$@>lmo@ >ξ@[ @!>b ;@">O_@#>;H@$>;@%>.qq@&>O OQ@'>J@(>Ε!L@)>Aaٹ@*>M@+>'ϯ@,>障/[@-> >9}&@.>@/>V@0>dT@1>fõ@2>HT@3>?@4>-H@5>61о@6>DdK@7>2 @8>==@9>fW@:>7cV@;>$ө:@<>]yt!@=>L@>>E˜@?>f@@>>I @A>w,@B>5 @C>%@D>`{G@E>W,4@F>`g@G>ƒnL@H>6>@I>5\@J>mH!a@K>GD@L>s1@M>f@N>JX@O>&+8$@P>7@Q>#UV@R>Io@S>Ɛ@T>c+m@U>n@V>7@W>,2@X> ؊k@Y>uP{h@Z>b@[>HG۠@\>)`k@]>Br@^>q Y@_>@`>VsQ@a>Fs@b>'ryv@c>~@d>^@e>aY@f>Ʌu@g>19@h>~n,@i>Co@j>h@k>Јt@l?QC2@m?O @n??91@o?:W @p? D@q?ZTF@r?PYz@s??O@t?lEh@u?ޞq@v?o x@w?O?@x?@y?)xp@z?SoaL@{?L@|?#1@}?Y̬}@~?[@?Z˺@?;ݫ@?)3Hآu@?SIߵ@?mb;@?^^;Q@?.Ո@?+@?fO93@?uB@? _q@? ,0@? +(ņ=0@? vI@? @? [ @? 1l@? &I+@? Hm6@? Ը@? TvG@? S;z@?Y@?=o@?Ve@?JuN@?&r@? P.@?;:y`ʎ@?mz;_@?`z@?Ў:x`@?3 @?3BQ@?|Tp@?@?eV@?a9P@?0E@?RN@? R@?`q?@?Ů x@?*vo@?i@?+[@?XU><@?MQ@?! bd@?gaZ>@?|@?M&h|@?>?@?uX@?xp@?۰!P[@?>@?Ym(@?ti:@?fdj{@?ȸ3@?*>B@?;@?+WW@?P@?}r@?P&7@?umB@?Nw@?8Y@?L@?@? -а @? ^-e,@? 8.@?!%4&@?!45@?!6J0@?"ON3@?"@?#Y@?#x:W2@?#ۅ]@?$>ň~@?$Wgg@?%q:l@?%diր82@?%7@?&'5/0@?&lG9L@?&d@?'LS H@?')r@?(G@?(oO {@?(g#T@?)1a+tP1@?)6՘@?)Cx@?*S|r@?*R@?+CPhA@?+tqGi@?+z@?,4Gs@?,60'Q@?,ҁ5@?-QkF@?- E7@?.C3U@?.nů^@?.@?@?/+ + @?/Fd@?0'_$@?00@?03ZXw@?1Oy@?1@?2ȸ@?2v&A,@?2Z j@?39ǣ@?3^c@?3"m@?4^ @?4/\P@?5 %b@?5_@?5w@?6BAyT@?6mK@?7=˅@?7c[@?7#@?8# QHK!@?82Ip @?8r1lq@ ?9AI.@ ?9PL8@ ?:2@ ?:_ Bq,@ ?:w@?;\M@?;| M@?;ڡ_'@?<9WJf@?%@?>l+@?>(Co@??V1@?@1i@?@ gڄ@?@i[v@?Ab*%@?A\4Ͷ@?B,I'@ ?BO'@!?B|@"?C[:G@#?C!W@$?D$fql@%?D8@&?D@'?EQ J0@(?E@)?FȌA/@*?F|kua@+?Fel@,?GCA*@-?GOV@.?G B\@/?HT/O@0?H*"@1?IAK@2?Ia6j;@3?I$V)@4?JQ@5?JjdzaU@6?JƒjK@7?K#ƚ+@8?K@9?K˅P)@:?LCх@;?L뚳'@<?M(Vi@=?Mc&:@>?M>G8@??N"=W@@?NwE6@A?Pc"@B?P8 *@C?Q^|@D?R .@E?Se$E@F?T8]\3@G?U $^Q@H?U޲s @I?Vs2k@J?W>e@K?WqH V@L?Xh|R̯@M?X'@N?YM/@O?Y@P?Z0ֿ@Q?ZA@R?[4 M@S?[R'@T?[TY@U?\w~@V?\Xd@W?]y$[O@X?]@Y?^ywō@Z?^uC@[?_z5j_@\?_$@]?`<2E@^?`|X%П@_?`]:@`?aɢ#u@a?aq%-,@b?ai@c?bn@d?bd&@e?b#@f?c"@g?cW|:@h?c>_@i?d|M@j?dg! 0@k?d{7U@l?e' L@m?eh(@n?e+ߦ,@o?fE"Nk@p?fOou@q?gd^ I@r?gb]LR@s?gz@t?h'j@u?hMIJ@v?hf#@w?iNQ[@x?il@y?j#w@z?jtO@{?jּA@|?k82@}?k q@~?l0i(U@?l0\@?m'@?m]Hd@?n@?n-@?o7t @?oI4{L@?pr@?pH|g~@?piH@?ptYO@?v8(@?wT{@?wb,@?whp7@?x 4VN@?x~Y@?x{I@?y;;3<@?yj@?y'U@?zV@?z]a4@?{X脕@?{EW^ @?|Y&w@?|$uL@?}Z_pin@?}}jF@?~Zz+.Z@?~YU@?Z @?:&T@?()s'J@?P-T@? \9J@?gf@?w[@?)e!@?`"@?Eh@?S@?t@?k~4@?Id@? ^Qꇒ@?Yd' @?ڂ8b@? _@?G@?>@? @?)Q@?nK&@?|p@?a@?@? 6@?mmf@?Ѕה^@?3z/@?]H@?$_@?[ $@?bYq@? Kj@?+.@?kX`@?2y@?.M1@?eN4^@?@@?&@'@?a@@?R&qu@?ZE@?)^@?#ExN@?OR @?w'@?̓lm@? ny@?Kn1!@?u@? X@?@?X*y@?',q@?@? P=&B@?c@?wůw@?@?6HGC$W@?njK@?Ј@Y6o@?&q@?j#Ծ}@?9@?5@?Q@?fYL@ ?Ci.X @ ?+.,_@ ?k@ ? @ ?=;@ ?*@ ?jeL (@ ?+{@ ?ꑽ@ ?)׏X@?iU!z@?z:@?$fj,@?|@?Kȯ|@?唵A@?MFVf@?|z@?B=y@?G_@?fu@?*s VP@?L2"!@?m>@?e@3?Dv@3?V@4?$1A@4?^TDJ@5?WN@5?ҽ=]@6? IV7@6?>S@7?oVz@7?rL@8?nao@8?őH܃@9?5i)@9?fe@:?ʽ@:?2@;? I@;?S@<? Y@<? @=?,^3@=?8Un@>?DN@>?PDc@??\%_-@??hAr@@?tk[@@?܆9@A?K"@A?納I@B?St@B?4}R\@C?Zضش@C?2H,3@D?|2R@D?.@E?$]@E? y&« @F?$ (@F?=5@G?Ueג@G?m<@H?񁦴@H?/@I?mU@I?ΥbT@J?FK%@J?PՐ@K?( @K?3*>*@L?L{ @L?em@M?\@M?4@N?Y @N?vݑ@O?U@O?ўM@P?G޽@P?,@Q?P[@Q?.mh@R?=!9@R?Kk!@S?Z`@S?i6W@T?wO)@T?*O8@U?\^@U?0W@V?7dG@V?*zͷ@W?N$N# @W?q͢]@X?lrUO@X? ,@Y?ܦdӰ|@Y?+ @Z?ȴ%%@Z?"x*@[?݇@[?%FF@\?3Up@\?A*@]?PuL@]?^jI@^?mU.%@^?s@_??JW@_?E5@`?%@`?~E@a?&^XH@a?f@b?D6@b?&ֱt@c?;_ZJː@c?IΜ}@d?X8-?@d?fu2`@e?uvKE@e?l*@f?ϻv@f?0@g?;@g?؉@h?Bݽ@h?쮰~@i?[@i?/v$:@j?PwO@j?r43Vk@k?ߑ @k?RW.@l?7s-xR@l?E~ @m?bPJ@m?&4[$@n?32!@n?@' @o?NVp@o?[K@p?i6b@p?vo8=@q?)'@q?! @r?u5@r?:@s?9P@s?^wj@t?B4@t?G@u? !@u?ш@v?U@v?P<,I@w?݋-@w?R@x?؈&s@x?N@y?(#3@y?Q@z?y@ًh@z?d@{?zъƸ@{?nCq@|?ښ@|?"&4~@}?,H@}?5^K@~?>@~?G@?P<7@?Z;6@?clX*@?l,Xs@?uޑ@?z6@? -@?}K@?R?7@?5n @?P&@?h@?2@?&p@?}]@? 2@?בcي@? @?@?! %1@?9 !A@?QO@?jm(@?`M@?R F@?!JH@?1 N@?Ud@?_:0@?IRC@?=@? z0@?G1&@?-!@?=Uđ'@?Ib @?Uf"e@?aAW&@?mB@?x嫕s@?p@??@?_r@?1sVe@?h@?@?)LR@? fN~j@?^q3@?A>@?D@?$@?@?¸_,@?צ\@?"@?-DM=@?8d@?CYg@?N,1%1@?XxC@?cȠhr@?n!@?y_l,@?+t@?-@?@?@?φ2D@?γE<@?ݞU@?~G@?\^@? 9kbg@?'f@? ؙQR@?(歆%@?0PNü@?8@??_N@?Gz@?O3@?Vȯ@?^(B@?fU@?q#L@?{ R) @?'~@?} @?@?ko#@??!@?r!A@?b;@? ~@?\|L@?ͰA&@?@? QUY@? R-@? "(@?c@?g6 `@?9y@?ob@?/@?s@?!H$@?=$@?T|@?!(@?'$@?,c@?1Ta@?7w%@?@π?ߧ٧@?铊@Ѐ?4L@?sC@р?"v@?f' @Ҁ?܋Y@?WR\@Ӏ?ͦ @?Hp@Ԁ?P\@?3IQ@Հ?֢B@?"@-@ր?2W@?x@׀?T* @?uH@؀?a>,G@?0@ـ? FԴ\@?:gA@ڀ?+@?3)@ۀ?vF@?T6 @܀?1x>@?@݀?:S@? @ހ?C@?l|@߀?Hn#@?D.@?團 @?e@?3%@?F@?Cp%@?Eu@?y#a@? I@?)f @?1gX@?2J@?2@?3CC@?3̜@?3}S@?4LYS@?4يr @?5l @?5{DI@?5دCv@?9(@?=Ң@?A9@?E{:@?Id}@?MM@@?Q/@?U+=H@?Xb@?\YH@?\@?\@?\~̹r@?\\Syח@?\:f@?\>(@?[q69@?["@?[ސ@?[o@?_`t@?c8 @?g >+@?jMi@?n<:@?r+^@?va @?z4UD@?~_@?ܯN@?z@?d|$8@?-H0@?&@?7$@?Dp@?DK4@? {n@?ȹ@?=@?iW@?J1@?%hb@?ɩk@?\@?i@?dM@?l5@?I6+4@?"B{ @?t@?@?ZA QD@?x(@?&S~@?@? @?Z/!@?L@?!U!@?Wnٛ^@ ?Zi@ ?H9U@ ? .d@ ?@ ?G&@ ?yC)@ ?@ ?~0Y@ ?1kr&@ ?S@? &@?ޛ@?QE)H@?{^6@?Ǒ@?IѢ@?¡@?@??.@?f, @?gC@?nw+>@?(o@?OG@?˔ 42@?Ij@?"@?ٸ͇@?o9@?ܰ 2 @?9@?-@}lj@?m[*@?կsGg@?{\.@?-p.@?i`#+@?΢@?I@?ϔraS@@?D @?T*@?צ`@?P -m@?x$@?߬F@ ?]F+@ ?j[$@!?絉!=@!?"@"?=-(@"?J6 @#?~2@#?-@$? K@$? f[/@%?9ꖼ@%?eY@&?ߔR@&?D|@'?+@'?l@(?Bgq@(?@)?y>@)?=@b@*?d@*?./@+?2wK@+?ID@,?Ve7@,?&_2P@-?OP @-?v? i@.?@.?}r"@/?_+{@/?\@0?1@0?g1Z@1?p?@1? I@2?EA@2?z5@3?@3?ﰗW}@4?~@4?&o#@5?j @5?0@6? =K@6?9%D@7?Ļi'@7?C4h@8? @8?H\@9?lbL@9?Lo@:?4*@:?Xl@;?@;?n\n/@<?^p@<?}e@@=? Ym@=?܌X)y@>?Q@>?ӝs@??#C@??Ϥׂp@@?%@@?У.C@A?#bei@A?ѝ$w@B?~a;@B?Ҙ @C?"d@C?ӌc@D?ԩ@D?PK8@E?9@E?@F?ܓm@F?tMz@G?UT@G?3@H?(Q@H?Q@I?ϣ@I?@6@J?@J?]C@K?ْ @K?F'@L?ں׬@L?ݽN@M?{:@M?ΞF@N?@N?e\X@O?N8V@O?hv?@P?ds@P?llN1@Q?X@Q?l@R?ynB@R?n852@S?@S?ЅX@T?@T?T6%@U?!$(\@U?ĸ@V? Z@V?~y@W?G@W?+a@X?ʽQ@X?KG9@Y?PT@Y?)嫺@Z?@<@Z?@@[?j{Ei@[?Z@\?>n#@\?:@]?EG@]?Gc@^?}a* @^?ڧ@_?K@_?ݺ@`?MQx@`?~\n@a?<~@a?`"?@b?xc@b?utOW@c?R@c?9 @d?O@d?ۏ@e?b_@e?^Y@f? _D@f?+@g?"Z@g?E@h?A@h?]~&@i?cr@i?›@j?!mtP@j?@k?#?U@k?9A<@l?8YM@l?C<@m?^@m?g|@n?Inr@n?b@o?31J@o?H 0@p?&5@p?0x@q?;/>@q?wy@r?@r?{}_@s?* E@s?e7 @t?/'5o@t?A @u? e@u?>#Ep@v?y=yj@v?C@w?a@w??Mj@x? _K@x?zxo@y?BD^@y? 1X@z?@z?/_U@{?iq*@{? <@|?@|?s6@}?::c@}?ee@~?쥉Ο@~?\vH@?ư@?°Z@?r5>@?*;P$@?3V@?ѝ:@?K1J@?`Vy@?뵂_@?n~~)@?2@?T @?Cx+"@?줌+@?!r@?Tq@?쀼@? ?_@?D @?`D`@?߀!)"@?ݟkl6@?۷d@?NɃ.@? Ud@?d@?˟@?zR@?J>@?掑^&c@?@0T@?g@?'\@?Fg@?h9&@?omė@?֎4@?ǩn @?|@?x@? ^k@?<)a@?TN@?q:x@?␛+A@?044\@?#Pe@?eœ}@?B@?d@?(ca@?A_@?Rl\@?߼<@?W@?؅f+g@?@?XYX@?;2y@?$ l @?Ɔp%@?7D@?QV@?B@?<4'@?/#/@?%S@?9h@? ֗M@?)o@?E@?ٔGf@?Ġޮ@?-Aq@?Ï73@?F@?X@?<@?`@?Yq6@?m@?Ea@?u#@?^@?-@?5@?@?Î% @?~M@?LT@?p@?°9o@?J@?"Ei/@?$l˴@?d`@?GK2@?1_ @?Eֻ@?eZy@?ż>"[@?&g@?VfT@?i|@?3w\@?Y+@?@?=ۆ@?hG@?X@?=1@?y2@?=u@?/h?=@?qc@?3@?^D+@?T.I@?Aj\@?Fp@?(x@?ndDH@?}j@?XG~@?3 @?o$5@?A;@?_|@?%@?bO @?:00@?m @? ,=@?'e@?%b,@€?@??P@À?Dz @?~OD+f@Ā?z݋@?wdB@ŀ?sR@?py~CC@ƀ?q:v@?ru@ǀ?s"oG@?t+@Ȁ?uU@?v#@ɀ?x 5 @?y|m@ʀ?z&&@?{4o@ˀ?y%d@?w˵u@̀?uL@?r4@̀?p(O@?n@΀?lkj@?jv@π?h @?f]؈@Ѐ?f^5@?fu]/@р?fل@?g(2@Ҁ?g.7#@?gQdM^@Ӏ?gif@?gs@Ԁ?g7 ځ@?g|Qi@Հ?doÚ@?a M@ր?^|]@?[_گ@׀?XBCe@?U( @؀?RB`@?N@ـ?K4YO@?H`FNq@ڀ?Hgi@?HW)@ۀ?HBn@?I$@܀?I}P @?I0<@݀?I>+@?IS$@ހ?I_S@?IoP y@߀?G+k|@?Ef\@?D&8@?Bdf@?@W@?>;`l@?=gAX@?;Kt@?9 @?7r@?;}qau@??B5@?C.A@?F;@?J@?N5@?QY-`@?U0f@?Yd<@?]Ta@?U@?NI@?Fb2@??fF@?8[o@?0'@?)Z8@?!d5@?O-y1@?'[ @?8||5@?Pe1@?Y8X=<@?l@?z]@?Q+@?^_@?x+@?'@?Bpb@?<@?G^/@?Ws@? Fb@? gZyN@? @? {@?P1@?p@?@?@?iUX@?z'@?r@?<@?*+@? %@?t@?#(@?ɗMk@?Riq=@?muP@?)@?Њ-x@?f.a@?i@? &[@?df@?ڵ@? YY@?zЙ@?n} @?Z΍@?ǝ@?3OH^@?ءʨ@? 8@?p%@?!r@?C@?[@?t!@?ь#ȉ8@ ?Πd @ ?˷w@ ?˚+@ ?2@ ?u@ ? O@ ?"@ ?C:3!@ ?g@ ?`v@? ( @?B@?X`@?^c@?@?:e@?QTS@?~;@?w@?S2[@?f}@?#4K@?H=L@?nkT@?K@?5}@?KP@?7#@?MH[8@?@?noP@?jqv@?A@?ʨɀ@?wM@?"PA@@?.x@?@?:L@?/p @?cg[@?M@?6 }@? L|@?Y}@?A@ ?@ ?~h)~@!?|sԤb@!?zD@"?y*%@"?w$@#?uz@#?t5v3);@$?r$n4@$?pt@%?o2@%?m%@&?kx@&?j' %@'?hr.&_"@'?f @T@(?eṒ6@(?cW@)?ak@)?_k@*?^;Ǚ@*?[u @+?Yym@+?WY&@,?T *i@,?RP@q@-?Oru@-?M @.?K 8S@.?H/!@/?FS@/?B@0?=3%4@0?9h"6@1?51N@1?0Ȅ<@2?,|u @2?(,!@3?#u@3?z<{@4?>U @4?W@5?m @5?@6?C@6?N'?@7?k3@7?ۦ@8? /@8?[`Z@9? &@9?%;\h@:?@@:?\ wt@;?ng;@;? W[@<? m@<? dYW@=? Hx@=? uO@>?@>?:@??btb@??!_%@@?8Li@@?P]@A?lQ@A?x@e@B?ݠ@B?#n @C?ۮ/@C?ՁNS@D?D_@D?%tF@E?ؤN@E? U@F?b\%`@F?T'@G?6E@G?ی@H?o@H?UAz@I?:QyZ)@I?,, ۸@J? l@J?G@K?\/@K?_D@L?wd3F@L?^@M?-#n3@M?@N?{-@N?uAgt~=@O?nL[@O?hA @P?b9̡J@P?[߆d@Q?Uxd@Q?O<$v@R?HJK@R?FW@S?C)@(@S?@9 Bi@T?=] @T?:r5@U?7,@U?4d@V?1-@V?.Ū@W?+aK@W?" e4@X?>qg݉@X?~}@Y?ZVh@Y?CY@Z?2&@Z?m`@[?ݨ,$@[?Y,@\? >@\?0zz@]?Ï~@]?<)@^?vI@^?@_?0C@_??#0@`?w#,N@`?mq@a?Yo@a?>@b?!@b?t,@c?xe@c?w &+@d?m$ZA~j@d?c7W={@e?YBo>@e?O] h@f?Eq39@f?A@g?>i1@g?:т@h?7?@h?33@i?0!;bT@i?,B@j?(,o@j?%XqI@k?!@k??[@l?R;Œ@l? Z@m?샩(@m?D&@n?Mpb@n?j@o?ʄ,@o? | @p?InZ@p?C@q? ^@q?n_,@r?02Df@r?N-@s?A@s?\@t? kG,Q@t?^@u?fy@u?D0 @v?#J@v?=@w?ye-@w?vݙp@x?lP@x?b@y?X䶛@y?Np/@z?D_X _@z?>Ña@{?9;Z@{?4<=@|?. ٸJ@|?)>;_G@}?# @}?[w@~?R@~?ha|@? ퟘ@?Kem@€?+@u@€?@?$Tу@?0u@‚?+/@‚?;@ƒ?2iqb@ƒ?(&*N&@„?*"@„?3ˏ@…?h2@…? @†?=@†?F8@‡?|A;0@‡?reYk@ˆ? S@ˆ?[@‰?/@‰?d@Š?ތK@Š?x5V@‹?o;c@‹?f@Œ?^5z@Œ?U9@?L@?D0ҫ@Ž?;=$:@Ž?2Xd@?);|@? T@?7*@?m&;@‘? M@‘?|@’?|Y[@’?ꃻ@“?RZn@“?[Rd@”?RHu@”?1IFd@•?'}@•?۩@–?㌆@–?Ȓp@—?n@—?^?@˜?f5| @˜?}h>Ov@™?tqe)@™?k[A@š?bz7L^@š?Y`o @›?Pha@›?Gx@œ?>Nd@œ?5J@?,P@?#9:T@ž?1"G@ž?0f@Ÿ?9(M@Ÿ?jDv@ ?~$@ ?-Ѷf@¡?-@¡?z\Ϛ@¢?/L@¢?v< @£?Źҵ!@£?9@¤?@>\$@¤?{bD@¥?゛!@¥?Ra@¦?`q@¦?KmE@§?xG4@§?+!s@¨?a@¨?ո#@©?jfG@©? t@ª?)]Ȝ(@ª?}2u5HR@«?x@FE@«?sK-I@¬?nS|@¬?i&YO@­?du@­?^5 @®?Y*9@®?TzШ;@¯?O>L@¯?J #@°?DμS@°??A+J@±?:[" @±?5XGi@²?0b: &@²?+Y:@³?&VT @³?!?J@´?>>G95@´?Ag@µ?"L~@µ? g@¶?@¶?;G@·?y/@·?:"з@¸?v@¸?޺Z$@¹?x}2@¹?-^@º?\A@º?@»?U."@»?؎@¼?k=G@¼?=-@½?| @½?̭@¾?u~@¾?z(+E@@¿?qM߯@¿?hf!@?`{ۿ!@?Wwh#@?NIh:T@?EF$@?=6p/@€?4W~0@?+@À?" @?W@Ā?x@?WE3t@ŀ?34жm@?_J@ƀ?rA@?L&@ǀ?۵h3@?PNP@Ȁ?=@?# @ɀ?/u@?KɬM@ʀ?iÊ@?@ˀ?S4\@?^+0@̀?as@?J- @̀?yS@?q~{@΀?j0SF4@?bqvUI@π?Z$ @?SLa@Ѐ?K:@?D0@р?<|1@?4NR@Ҁ?-Z9Y@?%ԉw@Ӏ?"0U@?rqy@Ԁ?/?g@?=M$@Հ?r!@?碞x@ր?=t @?@׀?쯒=@?,׫5@؀?ыJ@?X@ـ?͔@?ѦP@ڀ?Ù@?ԉ@ۀ?v@?o7@܀?둓@?Ħ^_8@݀?>@?y̚~@ހ?pV9@?f7UvE@߀?]r,@?TWĖ@?J患@?AA) @?8@ @?.N@?%+^N@?3']@?&{@? auu@?&@?{^N&@?™Q@?&X@?=q@?S[l@?Xqe@?=@?`cz@?/%@?^PA@?6g@?a]@?F+@?{Yl+ @?qfu@?hN@?^@?Uc@?L@?B2@?9Sp@?/w/@?&C6@?+ @?ɌU@? fv@? #<@?c@?iO-@? Y@?W6@?ur5@? J@?CSlB@?h @?s%m@?8R1@?6@?`pD@?(k@?g@?y@?|İ@?tg @?l6ˑ @?c$M@?[`9@?Slu@?KM9@?B3g1@?:Ҳ/@?2N?9@?*D g@?!"@?~K@?i()@? @?o@?WU@?HV%@?3 @?@?l}@?o@?!:@?M@?{3@?dU @?|B@?֝ɭ@?WǗ@?jE@ ?|S@ ?s33G@ ?jfn@ ?`@ ?WҲ.+@ ?NA@ ?EWG@ ?< !u@ ?2ֿ<@ ?)G@? Y@?@? WC&@?@?@1N@?@?Z!ޤ@?߆@?QX@?t>@?%"@?\G@?EY@?#@?v7Q@?yw8@?9[}@? wzg@?y֪@?pmѰ@?grԚ@?z+@? `h]@?l2 @?5b+@?rF$U@?7@?מ@ ?OO*_@ ?7F{@!?dDX+@!?g@"?fM@"?A|@#?V2P@#?)܍@$?CP@$??2MV@%?KO@%?}Ee@&?vG|\u@&?o-)+S@'?h+@'?a1!@(?Z%9@(?S]P@)?L@)?E,a@*?>Nws_@*?7xg@+?0!3X@+?)!@,?"Bq@,?\<@-?@-?d@.?L@.?ҽq@/? \i1@/?8@0?] 9@0?,48F@1?^%#@1?F@2?ŠJFD@2?eɘ6]@3?*oX`@3?&I@4?Ih@4?a/@5?D@5?k2$@6?1@6?{Ndx@7?s#@7?j2@8?bwuh@8?ZQ:U@9?R"AP@9?I@:?A?'L@>?Uq@??tS@??|-@@?h7@@?3*@A?+H@A?/G1@B?@B?n`@*2@C?.@C?vx@D?s~@D?qCY?@E?,i8@E?@F?:@F?}XA$@G?vMsf@G?n\H@H?g@H?`o@I?Yj\⼨@I?R96@J?J1@J?C!P'@K?<8.c@K?5i(lV@L?.Cʊ~@L?&uT>@M?{:@M?]e/@N?u*F@N? B_@O?xm@O?53@P?, @P?@)\3b@Q?\7C@Q?V@R?;p@R?FV=@S?@S? M|@T?pb}4@T?aB]@U?S@U?D_%@V?5#@V?%@"Z@W?Z9׆@W?1Mc@X?e|@X?˺l@Y?Աo@Y?Ą ј@Z?W@Z?:,@[?ū@[? Sk@\?s^+v@\?bԉ@]?Ru @]?BM_@^?1K 0~@^?!ޟ@_?G)eh@_?Y$@`?ky2{'@`?H[!@a?hh@a? Z@b?}%@b?Kr@c?vS1@c?~pI@d?nݽ @d?^QC:@e?N%\3@e?= @f?-T@ @f?"T@g? ݪm@g?F@h? 3@h?۠b)@i?1݃@i?bjBh@j?V_@j?W@k?%#@k?7G@l?q@l?c{en@m?U<ֲ@m?G ^ @n?8Ŏ @n?*b^@o?Sc@o? A@p?r{@p?9$R@q?⨌u-@q?-@r?P`@r?>xk@s? 6@s?UUIi@t? @t?}(7֪@u?nyi@u?`!@v?Qen@v?CQ͢@w?4O@w?%l@x?Z!6U@x?@y?eQ@y?aʖ@z?ܧe@z?V>@{?*C@{?h6@|?V,@|?ۀjN8@}? _ @}?uDST@~?fu@~?U#@?DA@?3}oo$@À?"@À?.@Á?@Á?~P@Â?$Դ@Â?;+w@Ã?RV7@Ã?kx P@Ä?2@Ä?P@Å?y@Å?hZ2@Æ?W@Æ?F@Ç?6jS@Ç?%)^@È?A;s)@È?(Q"@É? >u@É?M?@Ê?Y@Ê?ҽ{+-@Ë?Ť\M4@Ë?C5e@Ì?u|`J@Ì?^}@Í?H~@Í?Qv@Î?wWk@Î?j]vk,@Ï?]gDȲ@Ï?Pl@Ð?CyT9@Ð?6@D@Ñ?)@Ñ?صp@Ò?\@Ò?.(S@Ó?zm@Ó? -@Ô?DX(h@Ô?Wm@Õ?m<1@Õ?mDZ@Ö?WE[@Ö?d'@×?;'@×?@kӫ@Ø?J@Ø?y/Q"L@Ù?m ä@Ù?az@Ú?Vw@Ú?Jl]{@Û?>(G@Û?3 @Ü?'W'%@Ü?˯@Ý?筍@Ý?C7\n@Þ?E@Þ?&m@ß?. @ß?{F@à?lD@à?r B@á?_hY@á?Z@â?yN@â?E-2W@ã?p@ã?wz(<@ä?l'8@ä?`q&@å?T'0@å?I@æ?=My@æ?0B `@ç?#ʭA@ç?Rv@è? L&WqE@è?4Q@é?@é?UF@ê?Vֽ@ê?ʛ/@ë?:@ë?*h@ì?sBr @ì? ta@í? ;Ը@í?~X@î?qe@î?d@ï?XC/Ot@ï?KO@ð?>/@ð?28jz@ñ?%u S@ñ?W:O@ò? :5@ò?.…@ó?HD@ó?B~@ô?٘@ô?Ge+{@õ?K+@õ?ǵw @ö?<4_@ö? ;e@÷?M[5"@÷?nb@ø?sϝֿ@ø?g/'I@ù?ZT&@ù?M$kN@ú?@qr@ú?5c0"@û?)1@û?mћ^@ü?&4.@ü?qM@ý?@ý?uŴ@þ?{@þ?r⫔@ÿ?hN@ÿ?pK@?:[A@?hH`@?b.3@?dkP@?fD[@€?}YfD@?qR@À?fIJ!'E@?Z=T@Ā?OS@?CIL@ŀ?7D#r@?,?<@ƀ? m[@?ܵ@ǀ? UЭ@? J@Ȁ?919@?hXP@ɀ?ڽU\@?_l@ʀ?ik@?k@ˀ?q)j@?e9@̀?e@? jT@̀?}XF@?q@΀?d/S@?W@π?J Q@?>pu@Ѐ?1/‰@?$J0L H@р?hfq@? k@Ҁ? X@?"@Ӏ?ᓚ@?鮡B@Ԁ?a@? v@Հ?#@?9r)@ր?LHi@?d9^@׀?|}h=@?o\ @؀?b"@?Us@ـ?Hf(@?;\:@ڀ?.O1TO@?!FFc(@ۀ?>#@?8D=@܀?2'(@?(jZ@݀?V@?Ӆ,wR@ހ?ƳsK@?ኍr@߀?e4@?Cep@?v`n h@?@?yuOH@?m(@?a((@?U?ke@?IW^U}@?=m-a@?1@?%@?R@? …en@?~@?睎1@?ӎbqC@?J@?v@?ÃY@?ru~f@?Z-AT@?AY=#@?)&@?V@?U@?GT@?wN>@?<@??^@?@?;D@?Pi@?xozӌ@?hz#8@?Xko@?HQ@?8>ѩ@?(ׄcn@? @? ԙ'@?A @?^]pO@?~/0@?ɝ۝J@?WI@?Cr@?[o@?N n@?wD@?ga!aS@?V+@?Fr:1@?5=/@?%~!X@?@?Cr@?@?@?1"@?E@? &f@?X@?{@?~I@?mRS@?]+} @?L?P@??w$@>?f @??V5 (@??E[܂P@@?5Gу@@?$f7 @A?Xq*5@A?`'#@B?J@B?ɢ @C?AZ@C?@D?7wr@D?}`D@E?3P@E?f@F?o.S3 \@F?^=Sv@G?ML@G?<\ܪw@H?+m!7B@H?}wz@I? 8@I?@J?繫@J?$I@K?a@K? ^낫@L?6w@L?]_@M?{S@M?q=w@N?`͂[@N?O~\@O??@@O?.Gh@P?pj|4@P?e@܎F@Q?O"@Q?C,@R?.9:o1@R?!@S? @S?\@T?P4@T?^D @U?hv@U?*%>@V?gɺ@V?gZ@W?DC&@W?wDb@X?k@X?`ث>@Y?UGi@Y?J u@Z??rGB@Z?5ld@[?*(@[? W4`@\?@\? ,|u @]?7^@]?B]@^?{{e@^?@_?׼,@_?` 8K@`?:;L@`?%g@a?C4@a?/ɜ@b?s@b?%6T@c?hz @@c?zc?跥@d?p^3@d?e5q;@e?[56lC@e?PȆ@f?F_2{0}@f?;s@g?1qB@g?'&sF@h?)R@h?M @i?ˍd@i?;X@j?LK4@j?гxT@k?x@k?)K@l?X9@l?|o@m?g4@m?RDr*@n?=@@n?&W@o?{@o? Q2A@p?Or'P@p?!@q?1.@q?LP@r?ig@r?s6Y@s?\_7 @s?FPg @t?/C@t?m;a@u?>@u?;@v?-ZR@v?F@w?b@@w?p{@x?|@x?f)n}3@y?Oͼs@y?9d:q@z?"+3@z? U@{?D@{? ?D@|?ɘ@|?6r"@}?3@}?@~?p-3@~?YƋs@?Cu@?-&Q@Ā?wv@Ā?| @ā?7;I@ā?r5+@Ă?G@Ă? r@ă?JJ)@ă?}]&@Ą?g>J@Ą?R!c@ą?={@ą?'],~*@Ć?Uu>@Ć?b;@ć?Ce@ć??7Y@Ĉ?m2@Ĉ?-@ĉ?Lᶴ@ĉ?{G~@Ċ?f,@Ċ?PQW@ċ?; ewo@ċ?%~q?@Č?:xa@Č?oj@č?$lH@İ?r- @ı?ޒw@ı?2;H@IJ?-&@IJ?N-@ij?6t@ij?shUG@Ĵ?^X%@Ĵ?PxlN@ĵ?C5D@ĵ?5SO@Ķ?' @Ķ??ۙ@ķ? J+@ķ??@ĸ?Iҍ@ĸ?7@Ĺ? X\|@Ĺ?au@ĺ?ȵ@ĺ?(8@Ļ?E؃a@Ļ?@ļ?EO@ļ?vz@Ľ?iȪ6@Ľ?[xs7@ľ?M@ľ?@Cp8O@Ŀ?2@Ŀ?%;ֲ@?h?T@? F@?1ms@?D^@?S@€?d`z@? @À?Z@?p/@Ā?@?[c@ŀ?a-[@?sW]@ƀ?frMl@?XbAk@ǀ?J\+@?= } @Ȁ?/6j@?!C@ɀ?c@?3 @ʀ?LwX @?ȍu @ˀ?=>jX@?ЪPx8@̀?%zR@?-@̀?i@?l"C@΀?b@?E @π?qD67@?d u&]@Ѐ?V}\+#@?H~@р?;Ovn@?-l7@Ҁ? 6+@?Ѵr@Ӏ?+Z@?;L@Ԁ?>s @?2..@Հ?%b!s@? YT@ր?g۴@?Lv,<@׀?1Ud@?\q@؀?~GJ@?~Q׫@ـ?~?k@?~K<@ڀ?~@?~sW^@ۀ?~XD @?~=u@܀?~"^Q@?~gU)@݀?}7Ss@?}@k7@ހ?}vHm@?} B@߀?}Is@?}d+@?}IͶ"d@?}.֒k@?}e{@?|]]@?|[)@?|c^3@?|?9m@?|\@?|p֜J@?|Uvc@?|:۔@?|V7@?|~@?{'5@?{Σ崜@?{#w@?{@?{}@?{bF,7@?{G @?{,h8@?{_D@?zc@?zۖ-@?zP@?z{%]@?zgA@?zoa?@?zTM5`<@?z9VÒ@?zBh@?z<F@?y=O@?y/˻@?y?&^@?y?ҧb@?y|O*^@?yaAGp@?yF_Ş@?y+Qae@?yQ#K@?xRi$@?xڋ.@?x5@?xiT@?x{s@?xo=1lt@?xT 9@?x9~cJ@?xD@@?xږy@?wZԺ@?w[ 2@?w>ji@?wNm-Ś@?w}O3@?wbP@?wGR5Cv@?w,a武@?wcv0@?vd1@?vu@?vz@?vo=@?vZi@?vo6@?vU^D@?v: W@?v=f Jq@?vX μ@?uu(_o@?uΗm@?uND0@?u_@?u~_Q@?uc8 2@?uH`h)@?u-@?u3G.@?t @?t k'J@ ?t9EGX~@ ?tHgٸ@ ?tVu @ ?tqf"RY@ ?tVzD.@ ?t;ՍP@ ?t ML@ ?tEY@ ?sɸ)@ ?sP9@?s\]>@?s50@?stEe\@?sd~@?sI @?s/5b@?sw@?r<@?r?Z@?r?v27@?rhc@?r#@?rsS?=@?rY'1@@?r>]@?r#Y-@?rr]"@@?q p@?qDWT G@?ql^B@?q 0@?q k@?qp $[@?qY8O@?qBb*.C@?q+D@?q WA@?p56@?pz@?pEo@?pthx@?p'5 @?pj@?pur{@?p^P@?pH4m@ ?p1oh@@ ?p@!?pR-@!?o|dx@"?on@"?o ?'@#?oR n9@#?o%6RV@$?n T@$?nG@%?nJ|@%?nocÑB@&?nAJI@&?nx(Jr@'?mKS\@'?mM#@(?m6t@(?m^d@)?m1S"W@)?mw9@*?lx7._@*?l1 @+?l{gkJ@+?lNAqP@,?l Ъ@,?k`@-?kO @/?k/@/?jl?-@0?jj@0?j &@1?j[v@1?j.-@2?jc@2?i,\.@3?iY1@3?iyGhT@4?iL1R@4?iLg\,@5?h{V@5?h{U@6?h`K*@6?hj`T@7?h=!@7?hv `@8?gvZ@8?g.x]@9?g-@9?gZR$@:?g-P~m@:?g /Z@@;?f @;?f(E<@<?fxiڒ@<?fK;X@=?f4[F@=?e=@>?eùH7{@>?e_1#=@??eib$ݲw@??e<@z#@@?e]"@@?dz@A?dn@A?dpyQq@B?dZ=~C8@B?d- =@C?cԋ"@C?cҡj@D?cq(-@D?cx>e[D@E?cKpj]@E?c)gIG@F?bڇ@F?b@G?b %m@G?bjEG/@H?b=v@H?bە@I?aE@I?aΈ@J?ap~@J?a\á@K?a.ݱ[@K?a@L?`ԫ{7@L?`3@M?`zx7@M?`M[81,@N?` FU-@N?_bk@O?_>3S@O?_2;I@P?^7j@P?^~2 @Q?^$2@Q?]84@R?]p6LR@T?\ ˝9@Y?X~[,k@^?U*v@c?Qq @h?L @m?E ׿@r?<3.I@w?,N@|spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/k93_4500_0_5_rn_box.fits000066400000000000000000000625001511632712700302620ustar00rootroot00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T FILENAME= 'k93_4500_0_5_rn_box.fits' / name of file ORIGIN = 'synphot ' / Version 0.1.dev0270 END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 16 / length of dimension 1 NAXIS2 = 1223 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 2 / number of table fields TTYPE1 = 'WAVELENGTH' TFORM1 = 'D ' TUNIT1 = 'ANGSTROM' TTYPE2 = 'FLUX ' TFORM2 = 'D ' TUNIT2 = 'PHOTLAM ' TDISP1 = 'G15.7 ' EXPR = 'rn(, &' CONTINUE ', &' CONTINUE '1e-10, ''flam'')&' CONTINUE '' / synphot expression TDISP2 = 'G15.7 ' END @VӠ@V@\=`q&@]s3 =vi_b@^S3@=Ԍ_@_33 =B":@_f`='}gӂ@` =@`P={ @`=(B@`=iWq@a3@=he^@ay=5+@a陠=#j @bff`>/ T@b>9ک@cff>"j1 %&@cٙ>/iB⒁@d@ >9 %b٫@d>F(-ɾ~@eI>Sݙ@e>[(J.^V@f>e8hG@ff>opo"X@ff`>rH\@gC3@>~QyI@g>+)D4@h<>(*@h>zQw@i9>n7\@i>B4z@jP>N@kf>6 ד]@ky> J@k>ʟoJM@lY>Ѵy~\#@l?RVB@m@?sT@n?{1#A@n? _v@o?yA`_@p ?=21@p@?-@p?w<]%@p?-Fh@q?WiZn@qh?hKF@q?7b@r ?$pJ9@r?L@@r?BI@@s@?l@s@#@oS@t@g9$@u @Hq@u@aqu@vP@f@v@!gm9@wp@!U@x@q'@x@&G%Ra@yP@-d=@y @-<@z`@*r@z@)y?QJ@{@.DM@|0@0.5@|@,%pLz@}`@-}u@~@0؈@~@+@@@1 A+@@,d7Gh@@4EC@@@3?@@2ZG[@@..WD@0@,Z-4@@2Iֲt[@@4Јۖ@ @4wYs@p@4-Qw@@1iԃ@@0m]-@`@4ȩ䆹@@3gN7#@@5&@P@4wu@ @2@@5'I4S@@5 @h@3oC@@5U )C@@2*ٚd@`@5kW@@5@@5nm@H@4,nO@@4}?@@28||@8@4 *#@@1@@@3.@(@3b;|@x@3LX@@3]-P@@0c`@h@3mm@@2(X@@3T @X@399W@@2@@23O<@H@2bMqE@@/ =DN@@6L@8@=ym6@@A U@@CmY)@(@E"~@x@>&)+^@@CS^Q@@@Hki@h@Af=@@B35[@@>-Q@,@BJ@T@B)l@|@B?&@4@=6F]@\@9(4]=@@< 㨓@@:H+P@@:/"@@6:@$@9ESPX0@L@9 RlN@t@8p@@9$Dt @@94H}@@9,#@@9U|#"@<@8qG@d@8l*@@83^&x@@7韅:@@72)@@7=l@,@6k@T@5#6.@|@4H@@4 @@0⥺_@@*E{a@@4Ԅ@D@3Tb1U@l@4uzꎐ@@3^o>~@@3Uܛ@@2n:@@2٬F@ @2о@4@2|Ew@\@2d=K@@2I煈@@2-$:s@@1ٯɛ@@1~@@0UG@$@*E@L@+ @@t@/(;|@@/g|I@@/_f:f@@/mh>@@.Pi@<@-S}U@d@-tS5@@-CK@@,3tQN@@-DW4y@@, .$@ @+7ؔ@4@-g&n@T@,[9@|@,J@@+Q5@@+I9.@@*a@@+8T@D@*05[@l@*l“5f=@@*aS@@)M@@)>a@ @)^Y @4@(Z@\@(Հ@@((r @@!by@@ \5@@!@@ w6@&@ afK@:@ }8@N@7|i\@b@ Rr@v@]jG@@AX@@x})@@M~@@z@@@@tTR@@zb@@3~@*@(iS@>@`S@R@17>'@f@ M%@z@tָ@@^}@@èTR@@Wj>]7@@Y.k@@,(@@ _'@@ݺn?@@MM#@.@ @B@Ȱr+4@V@Ue@j@9M@~@ Ft2@@1vm@@.=[@@bԻ*;@@lqu@@""@@4_@@M8@ @z#=@@y#@d@fZe@@B,q@@W@@+/@@"֞@,@N!k@T@Ԝ@|@L@@_9DŽl@@0;@@.[@@tE@D@*Cw@l@BW@@@@F9e9@@ɹ@ @/v1@4@j@\@"s2@p@xQ\@@N!@@9@@c4@@[@$@ydy@L@N<@t@vGI@@i_@@+Tvn@?rly/@?@<?u=@d?i_l@?M}-@?ǩ/@?Oa=@?:h7H@,?p@T?P* k@|? @?͝+@?_X@?ƅN@?>?PV@"?:k@6?aI!@J?e,@^? D@r?}@?mٟ@?8Sn@?9N@?n3@?ݪ@?`;@?R v@?xt@&?3C@:?<@N?P)@b?ډx@v?I Ek@?@?%.@?3Q@?eChE@?s[ԇM@?0k@?[&@?QZ@*?![VY@>?6I!$@R?P'@f?W>@z?&w@?sqݎ$@?;6q@?1 ;@?f[@[@?SF!@?˜@?Ǜǡ@?)*@.?.|@B?3#@V?oo @j?Ak@~?X֔$@?ney@?k:@?i@?p|]@?kho@?(!T@ ?D#4q@?nCլH@2?! V?@F?/ @Z?} @n?2[Sk@?Qnj@?늿*@?Nr@?{ @?꺱&3]{@?t&@?-a@??pa@"? `ٗr@6?_cG@J?#ȕ3@^?}B@r?%A@?RJ\.@?]j {@?EC@?lBS@?N5d0d@?%@?]@?psֲ@&?v-vi@:?7@N?@b?з0@v?嗽w'@?eP@?1YC@?] ktG@?`ޗ~@?A@?/b @?,k#@?,@*?r+@>?NV_d@R?oj"@f?K{KB'@z?0@?=\@?CҨ@?ↈ/E@?h)9@?34<@? nm@?樄@?rDnJ@.?xK@B?kzS*>@V?0樠@j?=>@~? <@?N@? @?%@?Y@?4rCx@?Eq@ ?߬&d@?ߎ{ @2?BC@F?%(X@Z?޸5E.n@n?ppo@?@?qS@?`?Lt@?R7S`@?+&J@?3F@?ܬh1L@?LX@"?7 ̂f@6?4U@J?۱lz@^?tP=@r?>=H@? @?ˢjt@?ڒ{g+@?YqD|@? @?ٷ(@?ٳ "Z@?}[@&?Hi ]@:?|vf@N?LN@b?ثaa@v?ps}@?@QK@?s@?Ṭ u@?׮9H@?}">@?P%E[@?~@?3G#@*?HtD@>?֔!@R?gw;m@f?:Y)@z?c{e@?݁p)@?նji@?Պsb_@?] @?4 Q@? @?[G|@?Դ%&@.?ԏa@B?_dR@V?>%@j?:@~?f~@?ʌ_ޝ@?n3":@?{c@?XN/N@?4>e@?>@ ?2m-@?tOpE@2?ҝMC6@F?}|y@Z?^)(d@n?:k5@?A2@?a9 @?@?ѱr%@?ђH @?rp@?S 8@@?2C&@"?\NT@6?B@J?.]-@^?вƄ@r?З @?y2 @?Z]@?<|@? G?@?RDfQ@?ëZ@?lK|s@ ?Dɹd@?xhH@?n@'?>5'EBW@1?s@;?cDG@E?̱ވ8}@O?̇l@Y?̒$f@c?m @m?mX~@w?̥\ @?m@?Cu韔@?blg@?- &@?M&Y@?@?ˤ}(o"@?X۔@?:?fn@?&܏7@?z$@?q-i`@?ʠ@?ض@ ?60Kr@?ɕ[U@!?'L@+?lx@5?ɱ#V @??ɂۘ;@I?[@S?b:&@]?uC@g?J 8@q?ȷј< @{?ȥB@?rF8Q@?m @?@?[>Ə0@?Ǿ}x%@?Ǭ˜PI@?ǘ#%pb@?_K @?OiYI! @?*@@?s@?Ģ[TB#@?QqQf@?#.@?1~@?/T@%?"lR@/?2/@9?I]51@C?V S4@M?Ń5@W?{A,@a?V!=@k?7@‡@u?SY@? *b @‰?r2%@“?Đ5@? 91@§?c)@±?g@»?lo@?T!@?#@?ؾ33x@?úI@?ÜE%@?bY`dY @?\oR6 @ ?C*8@? .4R@?Q}@)?@Ã?On@Ô?_$9%@í?ன@ƀ?4f@߀?K%E@?$r7n@?|S@*?GM@C?@\?/Y@u?C/2@Ď?Ԝ@ħ?hا@?ѕ@ـ?sA@?/6U0@ ?ʬtax@$?NZJr@=?!v@V?h0`,@o?rm@ň?A@š?g@ź?9@Ӏ?A6S@?]ck5@?;.q|@?竰I@7?1b@P?G~o@i?jׅf@Ƃ?ӑ@ƛ?]gݹ`@ƴ?w0@̀?`/Ŀ@?pA@?:>?$<=@W?P@p?{ @ɉ?Y|@ɢ?*⤔W@ɻ?.nS@Ԁ?5@?E@\?e @u?D< a@Ԏ? kZ@ԧ?mY@?16s@ـ?n|6@?Tg;@ ?lUZ@$?!@=?ު@V? q w@o?Rr@Ո? P/ $@ա?_9r@պ?35@O@Ӏ?'0}@?|XW@?"X@?l@7?uM[a-@P?(zNi@i?=D@ւ?vf:@֛?2ʏ@ִ?Fl@̀?a?е@?IZ@@?!S@?Aft@1?k @J?$&L@c?yav@|?>& @ו?TM1@׮??i[%n@W?63q@p?Æ@ى?Ff?@٢?$$@ٻ?a@Ԁ?ATk@?η?@? &@?F@w?xPb|;%@ܐ?xn@ܩ?w=ݑ @€?ws2@ۀ?wWj^@?wZ"M@ ?v7@&?v :@??vk?&@X?v2@q?unߤR@݊?u=Bi@ݣ?u9j@ݼ?u!%@Հ?u%tH@?t$^*@?t*w@ ?tۗ@9?tR#K?2S@R?t 1,@k?s] @ބ?sE@ޝ?s@޶?s^8¤@π?s/Xs@?s(ΐ@?r6-R@?r) I@3?ry>"N@Y?r7f*@ߋ?qA)@߽?q_@@?q;X29*@?pЮ#@)?p/tL@B?pSP@[?p o@t?o6@?nIʾ@ঀ?ni" ~@࿀?mv q@؀?m]d<@?l7I@@ ?l]|@#?kpA@<?kib@U?j1=ɰ@n?jִ5/@ᇀ?jA0@᠀?iKJ@Ṁ?i4~@Ҁ?hz@?hc/D'@?g@?g@#@6?fm?T@O?fM@h?f%@⁀?f$ξ@⚀?e'@Ⳁ?es=ϑ@̀?ei @?d˚P@?dysL@?d 6>O@0?c΍.@I?ck@b?cB_.@{?bu@㔀?bs@㭀?bYbM@ƀ?a_@߀?a@?a=cü@?aZiMf?@*?a'9@C?`l@\?`j@u?`]&q6@䎀?`$4d$a@䧀?_ӓGB@?__ףN8p@ـ?^* @?^~@ ?^msy@$?]|X@=?]A}-@V?\c@o?\d,@刀?\=A)@塀?[o{^@庀?[Q@7p@Ӏ?Zd#?Qc%5V}@W?Q/@p?P&:@鉀?PZ T@颀?Pө%=@黀?Pi<e@Ԁ?P9OG*Q@?P ? @?OYQO@?O\(@8?OYZ@Q?N*@j?NRN!R@ꃀ?Mc4@꜀?MfԖ@굀?MTkrG@΀?M"@?L׀K@?LaW6@?LTm+@2?Kİ3H@K?KxOG@d?K,X>@}?J=( @떀?Jp%@므?JPV@Ȁ?J U@?I+@?I}g @?I9lG@,?H@E?H'_@^?Hr `P]s@w?H1c;4@쐀?Gxķ@쩀?G4e4@€?GbPp.@ۀ?Fߨ*v@?F7.@ ?F&^@&?F @??FL-C@X?Fr4@q?Eg+(H@튀?E32r@?Ek28@?E5tݻ"@Հ?D(@?D@?D@ ?Dct @9?D0튳<@R?Cئ@k?C@?C s @?CkV]@?C<'m@π?C *S@?Bަ6@?BR"H@?By4n@3?BVI>@Y?B_}u@?Ad:@?AjC;#@?A3@?@ȏu5v@)?@z @B?@.H``L3@[?? @t??6b@?>xs@?>m9h@?=-y@؀?=-/@?{y@?&Q$@?&Z9D8@1?&dH@J?%ʇ:@c?%&@|?%> h@?$@?$&N@ǀ?$v:V@?$51@?#ң-@?#YqX@+?#ycC@D?#="P>@]?#YQi@v?"аpAj>bTAj>EtjcA"O>xA(j>< -9A.>r>#A2O>tFA5\>ha?A8j>`RC.A;`spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/milkyway_diffuse_001.fits000066400000000000000000000207001511632712700311210ustar00rootroot00000000000000SIMPLE = T / Standard FITS BITPIX = 16 / NAXIS = 0 / No primary data EXTEND = T / NEXTEND = 1 / Single extension present FILENAME= 'milkyway_diffuse_001.fit' DATE = '2008-08-28' / Date FITS file was generated FILETYPE= 'EXTINCTION CURVE' / USEAFTER= 'August 01 2008' / PEDIGREE= 'MODEL ' / DESCRIP = 'EC for MW R_V=3.1 Average from Cardelli, Clayton, & Mathis (1989).' /LITREF = ' Cardelli, Clayton, & Mathis (1989, ApJ, 345, 245) R_V = 3.10.' / SHORTNM = 'MWAvg ' / COMMENT = "Built from reference files provided by K. Gordon" HISTORY HISTORY This reference file was created on 28/08/2008 by R. Diaz. HISTORY Built from ASCII files obtained from K. Gordon on March 2008. HISTORY Converted to CDBS format with custom IDL routine HISTORY /Users/rmiller/Documents/stsciwork_agave/IDL/makeref_ext_syn.pro HISTORY HISTORY Contains Extintion curve for: HISTORY Average for Mily Way with R_V=3.1 HISTORY From Cardelli, Clayton, & Mathis (1989, ApJ, 345, 245) using R_V = 3.10HISTORY Generated by Karl Gordon (kgordon@stsci.edu) on 13 Mar 2008. END XTENSION= 'BINTABLE' / BITPIX = 8 / NAXIS = 2 / NAXIS1 = 8 / Bytes per row NAXIS2 = 101 / PCOUNT = 0 / GCOUNT = 1 / TFIELDS = 2 / EXTVER = 1 / TTYPE1 = 'WAVELENGTH' / TFORM1 = '1E ' / TDISP1 = 'G10.5 ' / TUNIT1 = 'InverseMicrons' / 1/wavelength in microns TTYPE2 = 'Av/E(B-V)' / Transmission TFORM2 = '1E ' / TDISP2 = 'G10.5 ' / TUNIT2 = 'extinction' END >ff>JV? >?$??4@@@@}@]A "ABA AFiA1'AJ[ARAOA?}ASzAƨAX :AMA\cAAaA\)AfжATAl$AjAqAAw{AxA}ZA AEspacetelescope-synphot_refactor-c682dc1/synphot/tests/data/qso_template_001.dat000066400000000000000000001702561511632712700300620ustar00rootroot00000000000000# /grp/hst/cdbs/deliveries/etc/trds.25.2.rc1B/etc/source/qso_template_001.fits # # Composite QSO spectrum from the Large Bright Quasar Survey # (LBQS) of Francis et al 1991 ApJ 373, 465 # Units are flux per unit wavelength (i.e. scaled ergs/cm/cm/s/A) # normalized to a B magnitude of 12.5 (in STMAG units) # Resolution is ~4A and channels are 2.5A # Composite QSO spectrum, from Francis et al 1991 ApJ 373, 465 # Rest wavelength (Angstroms) vs Flux (per unit wavelength) # # WAVELENGTH FLUX # Angstrom erg/s/cm2/A 800.0 5.287767497626737e-14 802.5 5.494042381952967e-14 805.0 3.657495381320826e-14 807.5 3.008966638134644e-14 810.0 3.8527903469583874e-14 812.5 3.943063730344962e-14 815.0 3.515029182977157e-14 817.5 4.874810475533238e-14 820.0 4.272620872012266e-14 822.5 4.4684216857259276e-14 825.0 4.306228767667064e-14 827.5 3.1893009690446214e-14 830.0 2.462166213100525e-14 832.5 1.843423044691362e-14 835.0 3.97370396136576e-14 837.5 5.2141566075653706e-14 840.0 4.731608374964995e-14 842.5 5.497312945568905e-14 845.0 5.674656911361896e-14 847.5 6.111464009557824e-14 850.0 4.928250122988691e-14 852.5 5.759952112710867e-14 855.0 7.474430145995581e-14 857.5 6.54585909673315e-14 860.0 5.832936537204444e-14 862.5 6.039527873039768e-14 865.0 7.325136184470685e-14 867.5 6.331061028078469e-14 870.0 7.605492570363775e-14 872.5 8.166212796039893e-14 875.0 8.618515514972891e-14 877.5 9.3190727487244e-14 880.0 9.678081225967736e-14 882.5 9.122111838686178e-14 885.0 1.01069611122169e-13 887.5 9.162002347117351e-14 890.0 9.028607532825597e-14 892.5 8.858185859090748e-14 895.0 1.0048097743393589e-13 897.5 9.762543285709788e-14 900.0 1.0632284169840439e-13 902.5 1.2332174940520718e-13 905.0 1.2409295596302328e-13 907.5 1.252510058559822e-13 910.0 1.373986238369443e-13 912.5 1.3498879477321507e-13 915.0 1.4821226656993453e-13 917.5 1.5697427353193044e-13 920.0 1.4727336104108923e-13 922.5 1.5637424894462265e-13 925.0 1.6237452192275487e-13 927.5 1.57610835732451e-13 930.0 1.6238627196379918e-13 932.5 1.8050205698606075e-13 935.0 1.803265382068625e-13 937.5 1.5303460809776986e-13 940.0 1.8991226776940429e-13 942.5 1.9173796936017978e-13 945.0 1.938050008020234e-13 947.5 1.865051895474229e-13 950.0 2.040278888762806e-13 952.5 2.0098317812539818e-13 955.0 1.9335229218490207e-13 957.5 1.907615775412208e-13 960.0 1.739162741772049e-13 962.5 1.920430638515172e-13 965.0 1.7656373325208863e-13 967.5 1.8721791695056056e-13 970.0 1.8871873736035077e-13 972.5 2.0332256115297015e-13 975.0 2.1454441955642833e-13 977.5 2.2422063934279118e-13 980.0 2.14244976468915e-13 982.5 2.1524944912414135e-13 985.0 2.1304914213024495e-13 987.5 2.1625477558857853e-13 990.0 2.2381432102612508e-13 992.5 2.2114977221449755e-13 995.0 2.1834670302280784e-13 997.5 2.1408180404195593e-13 1000.0 2.0613636394616747e-13 1002.5 2.107708674476197e-13 1005.0 2.1873011756858018e-13 1007.5 2.1796728647254654e-13 1010.0 2.2672740963326776e-13 1012.5 2.110807459810432e-13 1015.0 2.1775008011981623e-13 1017.5 2.1963161812247473e-13 1020.0 2.0774229775658015e-13 1022.5 2.2390084035948943e-13 1025.0 2.257596236690529e-13 1027.5 2.6004675843238623e-13 1030.0 2.6849545807158814e-13 1032.5 2.8325901194926895e-13 1035.0 2.9129343793836415e-13 1037.5 2.8185239515574056e-13 1040.0 2.66263736319744e-13 1042.5 2.575236573466866e-13 1045.0 2.3499336699629725e-13 1047.5 2.2879197451516897e-13 1050.0 2.2653035588841852e-13 1052.5 2.0901986738652845e-13 1055.0 2.0876666552167161e-13 1057.5 2.1228465762589827e-13 1060.0 2.2625940021298724e-13 1062.5 2.2552676414745731e-13 1065.0 2.085879618985917e-13 1067.5 2.1277329399251033e-13 1070.0 2.0783675887085795e-13 1072.5 2.026161221224329e-13 1075.0 2.0832520550208983e-13 1077.5 2.106972907776894e-13 1080.0 2.1433817719816728e-13 1082.5 2.2248098274692957e-13 1085.0 2.2362615773909023e-13 1087.5 2.1825563004031906e-13 1090.0 2.174414077613096e-13 1092.5 2.1504486017419333e-13 1095.0 2.0577094715645838e-13 1097.5 2.0454917328081162e-13 1100.0 1.9552339348277714e-13 1102.5 2.0173440825818623e-13 1105.0 1.950161494963798e-13 1107.5 2.048071456352274e-13 1110.0 2.008878767544367e-13 1112.5 2.0050135867994562e-13 1115.0 2.0316457934391186e-13 1117.5 2.1524280838583487e-13 1120.0 2.1850017184032317e-13 1122.5 2.1864801635906872e-13 1125.0 2.1752165227460069e-13 1127.5 2.1654986831487477e-13 1130.0 2.1593970643725424e-13 1132.5 2.1673399294881712e-13 1135.0 2.0697821982804815e-13 1137.5 2.12392833897658e-13 1140.0 2.0745783021157427e-13 1142.5 2.0650699845883164e-13 1145.0 2.0305217468367942e-13 1147.5 1.90483195080908e-13 1150.0 1.887767557291059e-13 1152.5 1.9598291902105797e-13 1155.0 2.0076044234158819e-13 1157.5 2.124684163416074e-13 1160.0 2.0838010678959906e-13 1162.5 2.0885470273807744e-13 1165.0 2.2087943995531545e-13 1167.5 2.2245852620943196e-13 1170.0 2.208581082775718e-13 1172.5 2.331225219375649e-13 1175.0 2.315669086604827e-13 1177.5 2.3961640505977544e-13 1180.0 2.387833854256005e-13 1182.5 2.4872232095088376e-13 1185.0 2.4963500233968205e-13 1187.5 2.615828560703637e-13 1190.0 2.716737696351751e-13 1192.5 2.8819045132071064e-13 1195.0 2.936523637100952e-13 1197.5 3.1346987180470853e-13 1200.0 3.2709233000090265e-13 1202.5 3.5431369210109365e-13 1205.0 3.8364713424339503e-13 1207.5 4.2105620205734606e-13 1210.0 4.724454876793571e-13 1212.5 5.118353657573849e-13 1215.0 5.476131700876685e-13 1217.5 5.853698602231727e-13 1220.0 5.677823662619819e-13 1222.5 5.355168890795736e-13 1225.0 4.618664934015471e-13 1227.5 4.601020627860442e-13 1230.0 4.4207253959913095e-13 1232.5 4.520720549208018e-13 1235.0 4.5186760149612537e-13 1237.5 4.544757853473108e-13 1240.0 4.5077643332468165e-13 1242.5 4.3807568250037177e-13 1245.0 4.065961705778526e-13 1247.5 3.8134149700844167e-13 1250.0 3.5582395862231164e-13 1252.5 3.3541341904440303e-13 1255.0 3.1816135013032487e-13 1257.5 3.0655092722077504e-13 1260.0 3.027817525782378e-13 1262.5 2.98526069315852e-13 1265.0 2.9221725950448474e-13 1267.5 2.858578445567167e-13 1270.0 2.773988992069848e-13 1272.5 2.7171971270223416e-13 1275.0 2.576571768442282e-13 1277.5 2.5082906129729465e-13 1280.0 2.4841120913748904e-13 1282.5 2.432581588419913e-13 1285.0 2.3817959323574334e-13 1287.5 2.3722069772934284e-13 1290.0 2.3926154568872093e-13 1292.5 2.404793757789653e-13 1295.0 2.4588217204489504e-13 1297.5 2.450989172904372e-13 1300.0 2.4678121959137433e-13 1302.5 2.493221829078657e-13 1305.0 2.577833779771055e-13 1307.5 2.557945446169524e-13 1310.0 2.538127043608118e-13 1312.5 2.5028817993849595e-13 1315.0 2.4688579089091056e-13 1317.5 2.37355653794763e-13 1320.0 2.349546609787395e-13 1322.5 2.304843056862016e-13 1325.0 2.287477661715859e-13 1327.5 2.297909583968971e-13 1330.0 2.357712820550556e-13 1332.5 2.383030296530808e-13 1335.0 2.4100163596545154e-13 1337.5 2.424219950215162e-13 1340.0 2.417351800503009e-13 1342.5 2.373619421673634e-13 1345.0 2.3803943299989527e-13 1347.5 2.335026703242926e-13 1350.0 2.315048651911622e-13 1352.5 2.301353281119328e-13 1355.0 2.2807466635785256e-13 1357.5 2.3148505139646003e-13 1360.0 2.302460251537436e-13 1362.5 2.2870659359408574e-13 1365.0 2.2835631497721e-13 1367.5 2.3106909723298596e-13 1370.0 2.3378949600902366e-13 1372.5 2.36508647952563e-13 1375.0 2.3506459907902955e-13 1377.5 2.3721289147370095e-13 1380.0 2.4186211301964466e-13 1382.5 2.4470418638448954e-13 1385.0 2.513092544394885e-13 1387.5 2.550239479228583e-13 1390.0 2.6277455688825113e-13 1392.5 2.658892257843132e-13 1395.0 2.710397553097599e-13 1397.5 2.753959983236437e-13 1400.0 2.754401795621725e-13 1402.5 2.7156220523162633e-13 1405.0 2.6887308568826485e-13 1407.5 2.604399714552924e-13 1410.0 2.511922961301316e-13 1412.5 2.458351989857721e-13 1415.0 2.3921004608552787e-13 1417.5 2.3266688597457785e-13 1420.0 2.294440679118104e-13 1422.5 2.2386347604212015e-13 1425.0 2.2332484440282935e-13 1427.5 2.2068455461481118e-13 1430.0 2.1845219589419068e-13 1432.5 2.1746005603867635e-13 1435.0 2.1531657479114535e-13 1437.5 2.1545420070441523e-13 1440.0 2.1205868278809797e-13 1442.5 2.116544244555596e-13 1445.0 2.098472356168793e-13 1447.5 2.104226352623445e-13 1450.0 2.0873090040250675e-13 1452.5 2.1027159234719012e-13 1455.0 2.0968463239606078e-13 1457.5 2.0999798037643624e-13 1460.0 2.0954561057249382e-13 1462.5 2.0891709857310398e-13 1465.0 2.097499962345345e-13 1467.5 2.0815738455831623e-13 1470.0 2.0833435345792017e-13 1472.5 2.0924122081256852e-13 1475.0 2.088886518186034e-13 1477.5 2.0727385465543063e-13 1480.0 2.088560715433202e-13 1482.5 2.1138596244512503e-13 1485.0 2.124222022240052e-13 1487.5 2.133305061465321e-13 1490.0 2.1640440904090869e-13 1492.5 2.1462924482389817e-13 1495.0 2.1660078515940012e-13 1497.5 2.207906980074975e-13 1500.0 2.2198616642793434e-13 1502.5 2.2143211201273993e-13 1505.0 2.2438958514631874e-13 1507.5 2.2645874433492585e-13 1510.0 2.272957077545032e-13 1512.5 2.322625598794037e-13 1515.0 2.3399847597777024e-13 1517.5 2.411477864183026e-13 1520.0 2.4279013586918363e-13 1522.5 2.519037495957166e-13 1525.0 2.5633884121259443e-13 1527.5 2.651958784950087e-13 1530.0 2.7297562539378706e-13 1532.5 2.818195980400229e-13 1535.0 2.902596511668992e-13 1537.5 3.063221605623806e-13 1540.0 3.2408022663035774e-13 1542.5 3.4082372341037726e-13 1545.0 3.476242189069667e-13 1547.5 3.5664846726943256e-13 1550.0 3.519478274354587e-13 1552.5 3.360872777996571e-13 1555.0 3.198748503487753e-13 1557.5 3.0060413251480067e-13 1560.0 2.8188521937651256e-13 1562.5 2.668256783057432e-13 1565.0 2.5692268408247787e-13 1567.5 2.4698285409040233e-13 1570.0 2.4071605711321886e-13 1572.5 2.3413009812151e-13 1575.0 2.2968855550170586e-13 1577.5 2.2468096448017422e-13 1580.0 2.2246828402898433e-13 1582.5 2.188180328122416e-13 1585.0 2.1783426841850972e-13 1587.5 2.1647238851712353e-13 1590.0 2.1549817865503668e-13 1592.5 2.1397934693665605e-13 1595.0 2.1181250113230798e-13 1597.5 2.1200329360961112e-13 1600.0 2.1114564903359362e-13 1602.5 2.117710981618462e-13 1605.0 2.1219144334411882e-13 1607.5 2.1029978160367474e-13 1610.0 2.100514586485941e-13 1612.5 2.1079493673584887e-13 1615.0 2.1033993774163817e-13 1617.5 2.1037089171366263e-13 1620.0 2.1071396038609136e-13 1622.5 2.116553460274062e-13 1625.0 2.118017946358547e-13 1627.5 2.1122261383531293e-13 1630.0 2.1125832474436917e-13 1632.5 2.1221614960112434e-13 1635.0 2.1145743847334614e-13 1637.5 2.1104411350014035e-13 1640.0 2.1134092739738541e-13 1642.5 2.0701958214092847e-13 1645.0 2.0321945352636678e-13 1647.5 2.010334851062015e-13 1650.0 2.0152056293219062e-13 1652.5 2.002237487136807e-13 1655.0 2.0080451515989972e-13 1657.5 1.9934984110507592e-13 1660.0 2.0086449864509248e-13 1662.5 2.0323911824327023e-13 1665.0 1.9980736086933765e-13 1667.5 1.9989118324979793e-13 1670.0 1.982671568156319e-13 1672.5 1.9502982399628027e-13 1675.0 1.930671741185927e-13 1677.5 1.912976477528791e-13 1680.0 1.871949183119767e-13 1682.5 1.862972666757945e-13 1685.0 1.844334011685475e-13 1687.5 1.8348369427555883e-13 1690.0 1.837006024726917e-13 1692.5 1.8333669001349695e-13 1695.0 1.8223931478461575e-13 1697.5 1.821404897565937e-13 1700.0 1.8142716604226117e-13 1702.5 1.8388503881475865e-13 1705.0 1.8200575053160806e-13 1707.5 1.844301621145572e-13 1710.0 1.833093139086417e-13 1712.5 1.855040914714584e-13 1715.0 1.832026961775049e-13 1717.5 1.8493790754445932e-13 1720.0 1.8382851122399069e-13 1722.5 1.845403577128632e-13 1725.0 1.834381713368416e-13 1727.5 1.8440750228915226e-13 1730.0 1.8405471645475263e-13 1732.5 1.8268607384231556e-13 1735.0 1.8182117866426956e-13 1737.5 1.8152119347566997e-13 1740.0 1.8149930614431292e-13 1742.5 1.8305348285351658e-13 1745.0 1.8248198633587231e-13 1747.5 1.8333427766366317e-13 1750.0 1.828108790648958e-13 1752.5 1.831467648979318e-13 1755.0 1.791908770887654e-13 1757.5 1.7833083371544128e-13 1760.0 1.7786075075850588e-13 1762.5 1.7694527754911343e-13 1765.0 1.7634172930474507e-13 1767.5 1.7484448676212405e-13 1770.0 1.740339643230282e-13 1772.5 1.7400260377518906e-13 1775.0 1.7464418041075735e-13 1777.5 1.741979905591981e-13 1780.0 1.7211128084792388e-13 1782.5 1.7296300296957418e-13 1785.0 1.7299604403078067e-13 1787.5 1.747331663040641e-13 1790.0 1.7334132176513584e-13 1792.5 1.728232764145951e-13 1795.0 1.730727919920655e-13 1797.5 1.7031005512119224e-13 1800.0 1.6827473659289383e-13 1802.5 1.6948295794138452e-13 1805.0 1.6908557074011427e-13 1807.5 1.6816650611102546e-13 1810.0 1.671445100381863e-13 1812.5 1.6845331824322934e-13 1815.0 1.6949225497501358e-13 1817.5 1.6859725963415395e-13 1820.0 1.6800521748534109e-13 1822.5 1.6734832649408643e-13 1825.0 1.6771953021289115e-13 1827.5 1.673703900082965e-13 1830.0 1.6582546967514045e-13 1832.5 1.6595696984613578e-13 1835.0 1.6858541472541955e-13 1837.5 1.6756123669570827e-13 1840.0 1.700417421885564e-13 1842.5 1.7143495553272742e-13 1845.0 1.728677015986127e-13 1847.5 1.753516358808313e-13 1850.0 1.77182826245105e-13 1852.5 1.7810503506049402e-13 1855.0 1.7950910397891706e-13 1857.5 1.8057698890870666e-13 1860.0 1.8168627680895805e-13 1862.5 1.8116161782516516e-13 1865.0 1.805012709394857e-13 1867.5 1.8078725636753307e-13 1870.0 1.7975210079082538e-13 1872.5 1.7974418611496623e-13 1875.0 1.8136182930884176e-13 1877.5 1.8096957851536366e-13 1880.0 1.846193960512374e-13 1882.5 1.8752489524317267e-13 1885.0 1.9231946764286523e-13 1887.5 1.958929844508503e-13 1890.0 2.011324185544408e-13 1892.5 2.0444137647981225e-13 1895.0 2.072452046130227e-13 1897.5 2.1041062772328423e-13 1900.0 2.1217747068862092e-13 1902.5 2.13769892629459e-13 1905.0 2.1951829189039568e-13 1907.5 2.2149776045428393e-13 1910.0 2.182982527382249e-13 1912.5 2.1338672202917547e-13 1915.0 2.072920692519284e-13 1917.5 2.0130252987530378e-13 1920.0 1.924652386249559e-13 1922.5 1.87524054986489e-13 1925.0 1.8444233228394336e-13 1927.5 1.7810777267097955e-13 1930.0 1.745540832102238e-13 1932.5 1.7246161367490825e-13 1935.0 1.6822705880235878e-13 1937.5 1.6495709149761534e-13 1940.0 1.6181568346547437e-13 1942.5 1.6029881686353137e-13 1945.0 1.5797327096618574e-13 1947.5 1.5655875304932537e-13 1950.0 1.5586959349091212e-13 1952.5 1.553583921665852e-13 1955.0 1.5470951071887978e-13 1957.5 1.547900533877683e-13 1960.0 1.5296473126775317e-13 1962.5 1.5021752559300078e-13 1965.0 1.485247200835177e-13 1967.5 1.4774692699750375e-13 1970.0 1.470371540452861e-13 1972.5 1.4588608370381256e-13 1975.0 1.4733741028442882e-13 1977.5 1.460255121031942e-13 1980.0 1.464664435742169e-13 1982.5 1.4489380832302667e-13 1985.0 1.4463949515094304e-13 1987.5 1.4587455050320275e-13 1990.0 1.45718005262023e-13 1992.5 1.4666210140876906e-13 1995.0 1.4601427705818182e-13 1997.5 1.4515431500002063e-13 2000.0 1.456891925892892e-13 2002.5 1.4466903966014327e-13 2005.0 1.4390070623808426e-13 2007.5 1.4371250229346794e-13 2010.0 1.4351475736973374e-13 2012.5 1.4220692494664594e-13 2015.0 1.413380317730889e-13 2017.5 1.4081756052018723e-13 2020.0 1.4062783869252943e-13 2022.5 1.4099673848171762e-13 2025.0 1.4123099391361027e-13 2027.5 1.3990832147328658e-13 2030.0 1.4088005122290387e-13 2032.5 1.4004879341725923e-13 2035.0 1.3850887396662376e-13 2037.5 1.3852590949325894e-13 2040.0 1.4012169246083173e-13 2042.5 1.402783867798102e-13 2045.0 1.399623960566393e-13 2047.5 1.3971366652574396e-13 2050.0 1.4006569341862285e-13 2052.5 1.3886945250413812e-13 2055.0 1.4055527846213584e-13 2057.5 1.4135634123727675e-13 2060.0 1.427099405445706e-13 2062.5 1.4285575218424273e-13 2065.0 1.4365003869580562e-13 2067.5 1.4274191095613176e-13 2070.0 1.435986204077755e-13 2072.5 1.437450012535882e-13 2075.0 1.4225969848739167e-13 2077.5 1.4107321539245932e-13 2080.0 1.4144638422770167e-13 2082.5 1.4046087155796666e-13 2085.0 1.3948804405364973e-13 2087.5 1.3833136296593357e-13 2090.0 1.369263453706096e-13 2092.5 1.3728372551171514e-13 2095.0 1.3634247539567185e-13 2097.5 1.3602010143221044e-13 2100.0 1.3579835498288284e-13 2102.5 1.3605624602213567e-13 2105.0 1.3600516654728445e-13 2107.5 1.3416694242141675e-13 2110.0 1.3348721542190412e-13 2112.5 1.3308711771520265e-13 2115.0 1.3181117438851309e-13 2117.5 1.311911869287044e-13 2120.0 1.2769405216377094e-13 2122.5 1.271515173966592e-13 2125.0 1.2535389664215107e-13 2127.5 1.2641900330387368e-13 2130.0 1.2623979823728898e-13 2132.5 1.26070554278164e-13 2135.0 1.2640429881190934e-13 2137.5 1.2690713822698096e-13 2140.0 1.2623924258367558e-13 2142.5 1.2590841184326879e-13 2145.0 1.2433545133142682e-13 2147.5 1.23954340715271e-13 2150.0 1.2343309696832144e-13 2152.5 1.2223173319857172e-13 2155.0 1.223396790773698e-13 2157.5 1.2070761599460023e-13 2160.0 1.2063341590842075e-13 2162.5 1.2077125866212512e-13 2165.0 1.2168967276991044e-13 2167.5 1.21017602948241e-13 2170.0 1.2221242084737433e-13 2172.5 1.2257954525550507e-13 2175.0 1.209302027006115e-13 2177.5 1.220801752873854e-13 2180.0 1.2161353467234765e-13 2182.5 1.205420583228617e-13 2185.0 1.2032071844934877e-13 2187.5 1.1909523118126125e-13 2190.0 1.188987330900254e-13 2192.5 1.1775338191501172e-13 2195.0 1.170161786478302e-13 2197.5 1.1548910699293868e-13 2200.0 1.1538313978310538e-13 2202.5 1.150213957282556e-13 2205.0 1.150206232342077e-13 2207.5 1.1421247248736416e-13 2210.0 1.152993174026451e-13 2212.5 1.1556571942895194e-13 2215.0 1.1615903551531748e-13 2217.5 1.167525684421175e-13 2220.0 1.1636327209955943e-13 2222.5 1.1522691980257738e-13 2225.0 1.162784739371439e-13 2227.5 1.1592205602546646e-13 2230.0 1.1458652223687166e-13 2232.5 1.1349742760208281e-13 2235.0 1.1268659345486237e-13 2237.5 1.1238954916465566e-13 2240.0 1.131351346698832e-13 2242.5 1.1204037507874312e-13 2245.0 1.1209772259740403e-13 2247.5 1.1276927742304155e-13 2250.0 1.1348645683134997e-13 2252.5 1.14837162674096e-13 2255.0 1.1259358923725385e-13 2257.5 1.1387463509041768e-13 2260.0 1.1396894712689676e-13 2262.5 1.1325367862491734e-13 2265.0 1.142295215665265e-13 2267.5 1.1406033181751013e-13 2270.0 1.1352783947302103e-13 2272.5 1.138738897014241e-13 2275.0 1.138333811977546e-13 2277.5 1.1373143908848665e-13 2280.0 1.1416632613239774e-13 2282.5 1.1482706604136472e-13 2285.0 1.151459976629285e-13 2287.5 1.1565889305314991e-13 2290.0 1.1661728711604563e-13 2292.5 1.1656863354355534e-13 2295.0 1.1524388756657677e-13 2297.5 1.1627031531579596e-13 2300.0 1.1709201858979557e-13 2302.5 1.1833844451233921e-13 2305.0 1.1747936336844317e-13 2307.5 1.1815979509936791e-13 2310.0 1.1815225989426914e-13 2312.5 1.1754282985311504e-13 2315.0 1.184057599147234e-13 2317.5 1.1806434465060772e-13 2320.0 1.1839016095596677e-13 2322.5 1.1890995458251064e-13 2325.0 1.19017317702641e-13 2327.5 1.1911771482381317e-13 2330.0 1.1933292895505154e-13 2332.5 1.177637224932318e-13 2335.0 1.177660670804298e-13 2337.5 1.1735637418450184e-13 2340.0 1.1664366033389134e-13 2342.5 1.153410862913401e-13 2345.0 1.143926804409584e-13 2347.5 1.1454225968317994e-13 2350.0 1.1414251434218453e-13 2352.5 1.1251598069049462e-13 2355.0 1.1217331859388058e-13 2357.5 1.1291448597525525e-13 2360.0 1.1315799100693191e-13 2362.5 1.1211593719390178e-13 2365.0 1.1177376976452894e-13 2367.5 1.1176613969174007e-13 2370.0 1.1083739178199825e-13 2372.5 1.1096963734198717e-13 2375.0 1.1091969627941706e-13 2377.5 1.1069511057565026e-13 2380.0 1.1013187432330762e-13 2382.5 1.0999339460082691e-13 2385.0 1.1035654134223735e-13 2387.5 1.0899916087986697e-13 2390.0 1.1018823928374971e-13 2392.5 1.1032939563034375e-13 2395.0 1.1038828136083687e-13 2397.5 1.1124998491873761e-13 2400.0 1.1191594932692325e-13 2402.5 1.1183218793283517e-13 2405.0 1.0994074980908916e-13 2407.5 1.1164423470997123e-13 2410.0 1.1283245252837956e-13 2412.5 1.1361561919141089e-13 2415.0 1.144715968065882e-13 2417.5 1.1522893912912363e-13 2420.0 1.1645759768856567e-13 2422.5 1.1732699230562749e-13 2425.0 1.159317325298559e-13 2427.5 1.1376340950004782e-13 2430.0 1.1323453568030939e-13 2432.5 1.137809058126063e-13 2435.0 1.1227361407109906e-13 2437.5 1.1281931335330175e-13 2440.0 1.1271455909464892e-13 2442.5 1.1122676943971926e-13 2445.0 1.1035265854320714e-13 2447.5 1.108150097834e-13 2450.0 1.0872115111405095e-13 2452.5 1.0723378158746313e-13 2455.0 1.0838217530482336e-13 2457.5 1.082611105797382e-13 2460.0 1.0708764468713924e-13 2462.5 1.0899077186555736e-13 2465.0 1.0836623753288782e-13 2467.5 1.0915676999442847e-13 2470.0 1.1004509071566373e-13 2472.5 1.0978562080699722e-13 2475.0 1.0991371929367638e-13 2477.5 1.0995861881614444e-13 2480.0 1.0890824375144048e-13 2482.5 1.0914669369048793e-13 2485.0 1.0872305524411638e-13 2487.5 1.0979020156117597e-13 2490.0 1.0796742731626618e-13 2492.5 1.0788590886542243e-13 2495.0 1.0890584495413386e-13 2497.5 1.0685462931148137e-13 2500.0 1.0772846915745038e-13 2502.5 1.0709588462365013e-13 2505.0 1.0665044693734804e-13 2507.5 1.0717257159856275e-13 2510.0 1.0656734284082703e-13 2512.5 1.058329788280847e-13 2515.0 1.0607984488649608e-13 2517.5 1.0581671579549742e-13 2520.0 1.0493002137752089e-13 2522.5 1.0330334542429584e-13 2525.0 1.0373753451305839e-13 2527.5 1.0343704110469046e-13 2530.0 1.0406036926244311e-13 2532.5 1.0380976270653666e-13 2535.0 1.0373319770436845e-13 2537.5 1.044147068612021e-13 2540.0 1.0347181011310935e-13 2542.5 1.0310957816728195e-13 2545.0 1.0275810015175288e-13 2547.5 1.0196688328759085e-13 2550.0 1.0186236619816325e-13 2552.5 1.0211385366833484e-13 2555.0 1.0149396107621625e-13 2557.5 1.0057366994341982e-13 2560.0 1.0106804580528247e-13 2562.5 1.0060106637706581e-13 2565.0 1.0052973265037984e-13 2567.5 9.952462980264073e-14 2570.0 9.963942648391622e-14 2572.5 9.906911581239811e-14 2575.0 9.807473301363945e-14 2577.5 9.889306848464077e-14 2580.0 9.842295164638748e-14 2582.5 9.787378969349642e-14 2585.0 9.862176721976701e-14 2587.5 9.724054108586552e-14 2590.0 9.777926759284641e-14 2592.5 9.541111932638568e-14 2595.0 9.51493861456841e-14 2597.5 9.663514969780393e-14 2600.0 9.651129315212462e-14 2602.5 9.689693031235055e-14 2605.0 9.690501439479915e-14 2607.5 9.579425604535133e-14 2610.0 9.6274435635018e-14 2612.5 9.599894663925301e-14 2615.0 9.559462054407886e-14 2617.5 9.676892669336148e-14 2620.0 9.591191230985674e-14 2622.5 9.58620119048681e-14 2625.0 9.456302250574963e-14 2627.5 9.438544374242366e-14 2630.0 9.476092328354613e-14 2632.5 9.3662599377764e-14 2635.0 9.31631142131635e-14 2637.5 9.23952415770278e-14 2640.0 9.192311218849183e-14 2642.5 9.08908094187505e-14 2645.0 8.912818806562292e-14 2647.5 8.84300702867595e-14 2650.0 8.88177267735317e-14 2652.5 8.897956427656589e-14 2655.0 8.841978391864805e-14 2657.5 8.790848095036746e-14 2660.0 8.768176072357359e-14 2662.5 8.786949032973945e-14 2665.0 8.920807343694437e-14 2667.5 8.941361784005689e-14 2670.0 8.958026649023149e-14 2672.5 9.008723264982213e-14 2675.0 8.94560304737918e-14 2677.5 8.8949484442543e-14 2680.0 8.781240708535809e-14 2682.5 8.833885500273558e-14 2685.0 8.837668688229175e-14 2687.5 8.861493353343186e-14 2690.0 8.843162882738245e-14 2692.5 8.871169857732619e-14 2695.0 8.915128157189686e-14 2697.5 8.90487567039612e-14 2700.0 8.884874173192836e-14 2702.5 8.911155233853885e-14 2705.0 9.005163693724672e-14 2707.5 9.105580466061206e-14 2710.0 9.150420357409775e-14 2712.5 9.223489485198078e-14 2715.0 9.208797190508183e-14 2717.5 9.070258514534343e-14 2720.0 9.085388555851379e-14 2722.5 9.198731728589371e-14 2725.0 9.238023215320246e-14 2727.5 9.355981701181237e-14 2730.0 9.308724716614383e-14 2732.5 9.301411095334611e-14 2735.0 9.30451462405335e-14 2737.5 9.255890867122807e-14 2740.0 9.296734118213051e-14 2742.5 9.453521949628896e-14 2745.0 9.564333510294135e-14 2747.5 9.561708385784004e-14 2750.0 9.719656313524408e-14 2752.5 9.685735693305483e-14 2755.0 9.611706368968173e-14 2757.5 9.693333240029176e-14 2760.0 9.757742980591108e-14 2762.5 9.653587066012215e-14 2765.0 9.56030298871792e-14 2767.5 9.548889050347079e-14 2770.0 9.734051807869584e-14 2772.5 9.797355662215582e-14 2775.0 9.920170018556593e-14 2777.5 1.0140128889552305e-13 2780.0 1.0504943947055659e-13 2782.5 1.0828323508032048e-13 2785.0 1.1158296373469864e-13 2787.5 1.1594978449602777e-13 2790.0 1.221536570896256e-13 2792.5 1.2849316337500138e-13 2795.0 1.3265586274856939e-13 2797.5 1.3630414884887448e-13 2800.0 1.3596156806742338e-13 2802.5 1.336447093399848e-13 2805.0 1.305130591273962e-13 2807.5 1.2431716897229328e-13 2810.0 1.180381611681422e-13 2812.5 1.1294373910512162e-13 2815.0 1.0794467939943472e-13 2817.5 1.0346566404204408e-13 2820.0 1.0164650832188496e-13 2822.5 9.965626549890763e-14 2825.0 9.820684304835681e-14 2827.5 9.680632489204866e-14 2830.0 9.544988633031562e-14 2832.5 9.468937271642566e-14 2835.0 9.327447532880492e-14 2837.5 9.291609907695342e-14 2840.0 9.176821357936155e-14 2842.5 9.074402199712311e-14 2845.0 9.01568994156679e-14 2847.5 9.006033765968091e-14 2850.0 8.947706399593802e-14 2852.5 8.916890663346333e-14 2855.0 8.815746120301518e-14 2857.5 8.695620585348271e-14 2860.0 8.721800679682007e-14 2862.5 8.552416451900954e-14 2865.0 8.554521159368292e-14 2867.5 8.494153460030657e-14 2870.0 8.431118623348707e-14 2872.5 8.46220473251294e-14 2875.0 8.410187422782517e-14 2877.5 8.319064295943257e-14 2880.0 8.236574806528771e-14 2882.5 8.147209442461653e-14 2885.0 8.247235902016092e-14 2887.5 8.178792929372514e-14 2890.0 8.052302450040419e-14 2892.5 7.990475821154433e-14 2895.0 7.989914068903814e-14 2897.5 8.07878002234523e-14 2900.0 7.974577351547649e-14 2902.5 7.838806101619078e-14 2905.0 7.707106708474548e-14 2907.5 7.809598372718676e-14 2910.0 7.792570299973434e-14 2912.5 7.783164168500764e-14 2915.0 7.767252146366824e-14 2917.5 7.832147067400944e-14 2920.0 7.822247623939793e-14 2922.5 7.916249307547002e-14 2925.0 7.974875507145082e-14 2927.5 7.981830664081577e-14 2930.0 8.014814804674017e-14 2932.5 7.993705388375724e-14 2935.0 8.018986950159013e-14 2937.5 7.98277663047707e-14 2940.0 8.005598408581532e-14 2942.5 7.944531398842644e-14 2945.0 8.038397557178292e-14 2947.5 7.95149536492179e-14 2950.0 7.909752226028383e-14 2952.5 7.909994816264476e-14 2955.0 7.900134675132078e-14 2957.5 7.940398555686401e-14 2960.0 7.962136131618378e-14 2962.5 7.946852946744479e-14 2965.0 7.845366880015331e-14 2967.5 7.864133064368339e-14 2970.0 7.868054488100948e-14 2972.5 7.832147067400944e-14 2975.0 7.74788287455537e-14 2977.5 7.722896080237726e-14 2980.0 7.78162595666855e-14 2982.5 7.743886234297045e-14 2985.0 7.619668513769023e-14 2987.5 7.536762961770846e-14 2990.0 7.535175283214512e-14 2992.5 7.469982884209317e-14 2995.0 7.432203181882702e-14 2997.5 7.330494176081837e-14 3000.0 7.373551910109383e-14 3002.5 7.311621604390653e-14 3005.0 7.212164350976769e-14 3007.5 7.174302655860859e-14 3010.0 7.160121291444749e-14 3012.5 7.102774450410201e-14 3015.0 7.006159161940945e-14 3017.5 6.943225969212666e-14 3020.0 6.907943997640914e-14 3022.5 6.876855855597608e-14 3025.0 6.860883524717823e-14 3027.5 6.923357964401869e-14 3030.0 6.900969189540043e-14 3032.5 6.849848379480994e-14 3035.0 6.810970922454737e-14 3037.5 6.893986927549237e-14 3040.0 6.907610605472875e-14 3042.5 6.911737349991898e-14 3045.0 6.92442183778362e-14 3047.5 6.911161367587765e-14 3050.0 6.914895088819262e-14 3052.5 6.944308816132436e-14 3055.0 6.90348453858021e-14 3057.5 6.872071135885158e-14 3060.0 6.901302581708083e-14 3062.5 6.93151116473896e-14 3065.0 6.999915512680144e-14 3067.5 6.911979940227991e-14 3070.0 6.926033910888835e-14 3072.5 6.913558809641673e-14 3075.0 7.006312983124166e-14 3077.5 6.989732143775074e-14 3080.0 6.961745497571434e-14 3082.5 6.963947783234295e-14 3085.0 6.926489953427636e-14 3087.5 6.918585441963859e-14 3090.0 6.862404795891092e-14 3092.5 6.869415518188926e-14 3095.0 6.91541076247755e-14 3097.5 6.877778105070578e-14 3100.0 6.838981963207258e-14 3102.5 6.914408553094359e-14 3105.0 6.915380946917807e-14 3107.5 7.033288610801963e-14 3110.0 7.02686674580906e-14 3112.5 7.067519583892762e-14 3115.0 7.010838171941577e-14 3117.5 7.151227445498579e-14 3120.0 7.213431512265861e-14 3122.5 7.283514340695324e-14 3125.0 7.259450473477008e-14 3127.5 7.188637163833833e-14 3130.0 7.256390312845168e-14 3132.5 7.219849989126975e-14 3135.0 7.179392307434321e-14 3137.5 7.050112040387149e-14 3140.0 7.18122189860039e-14 3142.5 7.048084582324601e-14 3145.0 6.910674831862862e-14 3147.5 6.988013005705326e-14 3150.0 7.024428646173683e-14 3152.5 7.03776907627976e-14 3155.0 6.953586198597123e-14 3157.5 6.954610092023764e-14 3160.0 6.951998520040789e-14 3162.5 6.943164982840463e-14 3165.0 7.013347422344524e-14 3167.5 7.012716552205409e-14 3170.0 7.122563850563493e-14 3172.5 7.140009341145143e-14 3175.0 7.090510768586675e-14 3177.5 7.099609257692902e-14 3180.0 7.14276795804776e-14 3182.5 7.192427128053028e-14 3185.0 7.149877613793834e-14 3187.5 7.185685423419241e-14 3190.0 7.198841539155995e-14 3192.5 7.147381238291686e-14 3195.0 7.122469660499758e-14 3197.5 7.155029606992214e-14 3200.0 7.161380321217548e-14 3202.5 7.03769182687497e-14 3205.0 7.055021443349435e-14 3207.5 7.097582477256711e-14 3210.0 7.09853318703671e-14 3212.5 7.064695237233437e-14 3215.0 7.046552469129608e-14 3217.5 6.897818226976257e-14 3220.0 6.898438932720005e-14 3222.5 6.775259335772138e-14 3225.0 6.875014067157098e-14 3227.5 6.891126666692948e-14 3230.0 6.907609927846517e-14 3232.5 6.836909781805095e-14 3235.0 6.750696057928121e-14 3237.5 6.72092047813988e-14 3240.0 6.721585907223243e-14 3242.5 6.79361420092596e-14 3245.0 6.714077129552423e-14 3247.5 6.699114461945765e-14 3250.0 6.715964996585264e-14 3252.5 6.74003157430901e-14 3255.0 6.78776831833719e-14 3257.5 6.754418937137893e-14 3260.0 6.730802303315728e-14 3262.5 6.751971350733507e-14 3265.0 6.639289541320731e-14 3267.5 6.588399801849693e-14 3270.0 6.617514695939075e-14 3272.5 6.718752751421267e-14 3275.0 6.69429111753092e-14 3277.5 6.719135610313426e-14 3280.0 6.686416421626887e-14 3282.5 6.657860569282692e-14 3285.0 6.644131859273594e-14 3287.5 6.675837996555217e-14 3290.0 6.747776843578704e-14 3292.5 6.634451966752372e-14 3295.0 6.57689370629419e-14 3297.5 6.527069873083977e-14 3300.0 6.484012816682788e-14 3302.5 6.535473795173455e-14 3305.0 6.414787863222304e-14 3307.5 6.382976693855222e-14 3310.0 6.381588237448083e-14 3312.5 6.363229306536114e-14 3315.0 6.323239187030344e-14 3317.5 6.317284206597967e-14 3320.0 6.200846314283887e-14 3322.5 6.247534770336544e-14 3325.0 6.18403847010493e-14 3327.5 6.230751998332826e-14 3330.0 6.242981121212104e-14 3332.5 6.255757766188488e-14 3335.0 6.26697722579464e-14 3337.5 6.305365436590563e-14 3340.0 6.312361928734883e-14 3342.5 6.367856139307196e-14 3345.0 6.461228985654363e-14 3347.5 6.392135491707293e-14 3350.0 6.265615196815455e-14 3352.5 6.230751320706468e-14 3355.0 6.209948191521902e-14 3357.5 6.175624383620085e-14 3360.0 6.162349005644358e-14 3362.5 6.18190665758328e-14 3365.0 6.124938609682745e-14 3367.5 6.12473667702812e-14 3370.0 6.077323838398971e-14 3372.5 6.08168910739594e-14 3375.0 6.192082572598415e-14 3377.5 6.165353600914858e-14 3380.0 6.158709474476595e-14 3382.5 6.098847962028239e-14 3385.0 6.17799810875147e-14 3387.5 6.171353982313207e-14 3390.0 6.121778837976308e-14 3392.5 6.052392609442667e-14 3395.0 6.141248398488716e-14 3397.5 6.095568250456471e-14 3400.0 6.098633832099173e-14 3402.5 6.165489126186419e-14 3405.0 6.184472828600282e-14 3407.5 6.212458119551206e-14 3410.0 6.188167925129384e-14 3412.5 6.254658656236131e-14 3415.0 6.249030291708216e-14 3417.5 6.346706065427435e-14 3420.0 6.395167869658464e-14 3422.5 6.493174325040291e-14 3425.0 6.608641856409997e-14 3427.5 6.47263208200348e-14 3430.0 6.334287884794329e-14 3432.5 6.25188580918e-14 3435.0 6.139737969337172e-14 3437.5 6.178472447201933e-14 3440.0 6.186769304326878e-14 3442.5 6.120744102527942e-14 3445.0 6.099423944432372e-14 3447.5 6.05696658735784e-14 3450.0 5.921105213123681e-14 3452.5 5.904304145208303e-14 3455.0 5.986921706004414e-14 3457.5 5.977883525644032e-14 3460.0 5.970693909987737e-14 3462.5 5.994576850968519e-14 3465.0 6.044782865444534e-14 3467.5 6.118284318849115e-14 3470.0 5.982768534057437e-14 3472.5 6.023674804398957e-14 3475.0 5.940757732752697e-14 3477.5 5.755855861377945e-14 3480.0 5.869401644396921e-14 3482.5 5.93579005392364e-14 3485.0 5.951974481853417e-14 3487.5 5.930552002177819e-14 3490.0 5.912763632659121e-14 3492.5 5.940275262785941e-14 3495.0 5.820832097575002e-14 3497.5 5.929301781547672e-14 3500.0 5.95427502333816e-14 3502.5 5.815006543776965e-14 3505.0 5.823696424189437e-14 3507.5 5.810271290788635e-14 3510.0 5.730230065404893e-14 3512.5 5.732432351067754e-14 3515.0 5.733842491518343e-14 3517.5 5.705607156441389e-14 3520.0 5.650310473952376e-14 3522.5 5.622265213068786e-14 3525.0 5.570784583413743e-14 3527.5 5.570234011998028e-14 3530.0 5.4895927484744506e-14 3532.5 5.494838931736565e-14 3535.0 5.55495353762956e-14 3537.5 5.521896891016835e-14 3540.0 5.520927885325176e-14 3542.5 5.500151183568565e-14 3545.0 5.39533559973035e-14 3547.5 5.367129063773603e-14 3550.0 5.433083792431327e-14 3552.5 5.47133613914251e-14 3555.0 5.48151036009175e-14 3557.5 5.473667512626533e-14 3560.0 5.4985804456711765e-14 3562.5 5.4773585433974883e-14 3565.0 5.41010616026457e-14 3567.5 5.404869802584644e-14 3570.0 5.484013511857476e-14 3572.5 5.521570275112374e-14 3575.0 5.575998579423862e-14 3577.5 5.511854129581009e-14 3580.0 5.483207475304869e-14 3582.5 5.4909791720025164e-14 3585.0 5.596520832483118e-14 3587.5 5.4414534943897364e-14 3590.0 5.437010298361619e-14 3592.5 5.446725427453447e-14 3595.0 5.42526262900956e-14 3597.5 5.422213988025802e-14 3600.0 5.3560739285592185e-14 3602.5 5.381444259395379e-14 3605.0 5.422059489216223e-14 3607.5 5.3996978194087095e-14 3610.0 5.451930614320914e-14 3612.5 5.3395154508799336e-14 3615.0 5.331291099775273e-14 3617.5 5.4152764493746106e-14 3620.0 5.436365536882169e-14 3622.5 5.3961531559310397e-14 3625.0 5.343081459587874e-14 3627.5 5.3923509944374046e-14 3630.0 5.3278501131303474e-14 3632.5 5.2607356269612424e-14 3635.0 5.3766964703194295e-14 3637.5 5.308277553411553e-14 3640.0 5.244138185766384e-14 3642.5 5.287546930247272e-14 3645.0 5.297739108294994e-14 3647.5 5.25325530959745e-14 3650.0 5.264525929993616e-14 3652.5 5.233795913480409e-14 3655.0 5.267000621452314e-14 3657.5 5.306471340354828e-14 3660.0 5.278752695375699e-14 3662.5 5.2652306614057315e-14 3665.0 5.2298666970446855e-14 3667.5 5.194135120384531e-14 3670.0 5.1962679493457176e-14 3672.5 5.1714986730889284e-14 3675.0 5.173974719800342e-14 3677.5 5.162239925349081e-14 3680.0 5.138500979969332e-14 3682.5 5.1668894586031494e-14 3685.0 5.1328729542545956e-14 3687.5 5.0422156955363256e-14 3690.0 5.119365489251321e-14 3692.5 5.170556094825224e-14 3695.0 5.1375299413986e-14 3697.5 5.1763043992184704e-14 3700.0 5.1265649304898034e-14 3702.5 5.155193627667462e-14 3705.0 5.1387378103813844e-14 3707.5 5.0733807481712426e-14 3710.0 5.062775218045261e-14 3712.5 5.03989143712906e-14 3715.0 5.0532450809491133e-14 3717.5 5.13727074931674e-14 3720.0 5.195286746379618e-14 3722.5 5.3507135652558144e-14 3725.0 5.643911987068817e-14 3727.5 5.906015829388114e-14 3730.0 5.824912085875336e-14 3732.5 5.4437838514342224e-14 3735.0 5.111490793347287e-14 3737.5 5.04969533527376e-14 3740.0 4.9964860807799605e-14 3742.5 5.0247407282081116e-14 3745.0 5.018323606599713e-14 3747.5 4.9209835967407856e-14 3750.0 4.961727914382791e-14 3752.5 5.0042706523784064e-14 3755.0 5.0697507037724895e-14 3757.5 5.0619522408337086e-14 3760.0 4.9305882727362915e-14 3762.5 4.959113631894385e-14 3765.0 4.8606152197767927e-14 3767.5 4.8920868983386157e-14 3770.0 4.9153779326958566e-14 3772.5 4.843493634594173e-14 3775.0 4.8705312650837093e-14 3777.5 4.818076547539324e-14 3780.0 4.805830145187921e-14 3782.5 4.78373003915452e-14 3785.0 4.746448053387711e-14 3787.5 4.7900153624363256e-14 3790.0 4.7155100055826585e-14 3792.5 4.6157552741976984e-14 3795.0 4.529544260826156e-14 3797.5 4.5471439114042056e-14 3800.0 4.60095015471923e-14 3802.5 4.5251698438733556e-14 3805.0 4.514004933189007e-14 3807.5 4.574133430422338e-14 3810.0 4.649375367126937e-14 3812.5 4.650407053256693e-14 3815.0 4.621789536913938e-14 3817.5 4.6227944568025606e-14 3820.0 4.588680374258483e-14 3822.5 4.557581051380273e-14 3825.0 4.5505401747095164e-14 3827.5 4.5425933115983766e-14 3830.0 4.504815303337656e-14 3832.5 4.5886305687211845e-14 3835.0 4.605225638223791e-14 3837.5 4.529644210713932e-14 3840.0 4.509595957291959e-14 3842.5 4.590262970617133e-14 3845.0 4.561835528467742e-14 3847.5 4.5719446972866326e-14 3850.0 4.6042854316523385e-14 3852.5 4.657683405086786e-14 3855.0 4.638637699861184e-14 3857.5 4.7214466901033744e-14 3860.0 4.769778728886884e-14 3862.5 4.861469706613983e-14 3865.0 4.9938867060714265e-14 3867.5 5.227937494804019e-14 3870.0 5.163826587465878e-14 3872.5 4.965630364577381e-14 3875.0 4.760361755392489e-14 3877.5 4.696959984037789e-14 3880.0 4.5486817844232405e-14 3882.5 4.548841704243682e-14 3885.0 4.6959079691172995e-14 3887.5 4.666754450325522e-14 3890.0 4.6985791722197606e-14 3892.5 4.621231511608287e-14 3895.0 4.499229290457103e-14 3897.5 4.460000822977504e-14 3900.0 4.417484173596664e-14 3902.5 4.498192183316485e-14 3905.0 4.4332173023721444e-14 3907.5 4.396117598095585e-14 3910.0 4.391669319869784e-14 3912.5 4.344706763955396e-14 3915.0 4.3597111055830584e-14 3917.5 4.3589931604569657e-14 3920.0 4.29406605217085e-14 3922.5 4.2587115745788134e-14 3925.0 4.2158632270958285e-14 3927.5 4.146443794870655e-14 3930.0 4.105537185715956e-14 3932.5 4.1233899297386453e-14 3935.0 4.0815719131327005e-14 3937.5 4.1190558315541345e-14 3940.0 4.1778202669292067e-14 3942.5 4.181362897527803e-14 3945.0 4.2491177406050323e-14 3947.5 4.274929883826481e-14 3950.0 4.259805602333487e-14 3952.5 4.1971302464343524e-14 3955.0 4.294566479236088e-14 3957.5 4.285729553903973e-14 3960.0 4.34519296086712e-14 3962.5 4.346682044788393e-14 3965.0 4.326578564818259e-14 3967.5 4.338652172448422e-14 3970.0 4.303657514452379e-14 3972.5 4.276526032712287e-14 3975.0 4.193381278609805e-14 3977.5 4.220494464438236e-14 3980.0 4.224055052135314e-14 3982.5 4.1777928230617156e-14 3985.0 4.1970570627877096e-14 3987.5 4.1672648811537025e-14 3990.0 4.0447229306085283e-14 3992.5 4.120937261136576e-14 3995.0 4.112565865112272e-14 3997.5 4.033688801811236e-14 4000.0 4.020115607051254e-14 4002.5 3.9758594908099326e-14 4005.0 4.01901243134075e-14 4007.5 3.96540541017492e-14 4010.0 3.940172976302572e-14 4012.5 3.99794841600843e-14 4015.0 3.9835061654445655e-14 4017.5 4.0714922210603743e-14 4020.0 4.040452529301651e-14 4022.5 3.961871588718975e-14 4025.0 3.9907906487909525e-14 4027.5 3.9437301758678614e-14 4030.0 3.884349778133546e-14 4032.5 3.897010887815924e-14 4035.0 3.8934526718110984e-14 4037.5 3.8531965839598906e-14 4040.0 3.8815694771874784e-14 4042.5 3.8305784325759484e-14 4045.0 3.800908223686346e-14 4047.5 3.8160707910685557e-14 4050.0 3.927827979316109e-14 4052.5 3.867599193381824e-14 4055.0 3.826770172445093e-14 4057.5 3.919169269716097e-14 4060.0 3.903562518256347e-14 4062.5 3.8958728143479934e-14 4065.0 3.9415404262926196e-14 4067.5 4.0612593854311846e-14 4070.0 4.110904325282938e-14 4072.5 4.0849163380216394e-14 4075.0 4.059048290625672e-14 4077.5 4.03350245456284e-14 4080.0 4.037029838568386e-14 4082.5 4.074837323575671e-14 4085.0 4.1622345218865486e-14 4087.5 4.158434732085166e-14 4090.0 4.1702125558101474e-14 4092.5 4.2797579716258305e-14 4095.0 4.2997086468522794e-14 4097.5 4.258982625121935e-14 4100.0 4.495664637001878e-14 4102.5 4.465517717969561e-14 4105.0 4.362239329524023e-14 4107.5 4.265543403518188e-14 4110.0 4.2010770811553785e-14 4112.5 4.2062649885507217e-14 4115.0 4.2087966006234753e-14 4117.5 4.081231744701083e-14 4120.0 4.062374080789771e-14 4122.5 4.0148399470425755e-14 4125.0 3.9774315839600366e-14 4127.5 3.969325817467992e-14 4130.0 3.938053361055363e-14 4132.5 3.9617323365024465e-14 4135.0 3.895437100599926e-14 4137.5 3.855769870053649e-14 4140.0 3.8171438124061374e-14 4142.5 3.7474777241867235e-14 4145.0 3.7291716481306636e-14 4147.5 3.623034692894732e-14 4150.0 3.6710133495326466e-14 4152.5 3.737147649175189e-14 4155.0 3.661320582110626e-14 4157.5 3.7353183968222986e-14 4160.0 3.766568830378299e-14 4162.5 3.6728439571382526e-14 4165.0 3.737172721350428e-14 4167.5 3.7052954834134594e-14 4170.0 3.695406543160855e-14 4172.5 3.7361390023415986e-14 4175.0 3.759759363108732e-14 4177.5 3.6997585984438475e-14 4180.0 3.6711265131344e-14 4182.5 3.5955566052726234e-14 4185.0 3.623647267122186e-14 4187.5 3.671859704853543e-14 4190.0 3.665930135409584e-14 4192.5 3.633208575030793e-14 4195.0 3.611112873568717e-14 4197.5 3.5386431062938914e-14 4200.0 3.4801988493728814e-14 4202.5 3.4552601665266414e-14 4205.0 3.550317591999308e-14 4207.5 3.603484833658924e-14 4210.0 3.533649677663238e-14 4212.5 3.576672852746536e-14 4215.0 3.563322258245093e-14 4217.5 3.557966299513014e-14 4220.0 3.572685360444042e-14 4222.5 3.613071891369127e-14 4225.0 3.5668842011948865e-14 4227.5 3.512382713236756e-14 4230.0 3.5464608815838697e-14 4232.5 3.633400004476872e-14 4235.0 3.67966562168226e-14 4237.5 3.662735804758899e-14 4240.0 3.6445716914247986e-14 4242.5 3.7031399539692866e-14 4245.0 3.6978829286854475e-14 4247.5 3.6271898977207825e-14 4250.0 3.6449237183176775e-14 4252.5 3.6240772210462124e-14 4255.0 3.5758641056884977e-14 4257.5 3.5406634492796824e-14 4260.0 3.522547786230165e-14 4262.5 3.611065439723671e-14 4265.0 3.6449233795044986e-14 4267.5 3.603310344871789e-14 4270.0 3.636169802214394e-14 4272.5 3.6113663058265355e-14 4275.0 3.5919577316863294e-14 4277.5 3.681241102964153e-14 4280.0 3.707990064625265e-14 4282.5 3.709113907939682e-14 4285.0 3.634820986949186e-14 4287.5 3.632084054090018e-14 4290.0 3.698897674156258e-14 4292.5 3.84200151890262e-14 4295.0 3.8221843360686583e-14 4297.5 3.891700330049819e-14 4300.0 3.7911805585068986e-14 4302.5 3.760370243270292e-14 4305.0 3.859742793389451e-14 4307.5 3.8581581641517274e-14 4310.0 3.893837563582331e-14 4312.5 3.910315064911858e-14 4315.0 3.996455943955368e-14 4317.5 4.0819751008155936e-14 4320.0 4.190316035780281e-14 4322.5 4.1200414390915596e-14 4325.0 4.196494632910733e-14 4327.5 4.249836363357483e-14 4330.0 4.320597834584286e-14 4332.5 4.573250144464941e-14 4335.0 4.598384322515407e-14 4337.5 4.644559476602028e-14 4340.0 4.721778727018698e-14 4342.5 4.792614398331681e-14 4345.0 4.734341580879195e-14 4347.5 4.624033157784625e-14 4350.0 4.462625947487635e-14 4352.5 4.452279609443513e-14 4355.0 4.4018550604671067e-14 4357.5 4.4564761494773897e-14 4360.0 4.392286298668564e-14 4362.5 4.262070229621266e-14 4365.0 4.242004019100812e-14 4367.5 4.106312051456104e-14 4370.0 4.0714298794354564e-14 4372.5 4.0431776036995576e-14 4375.0 3.819717098499896e-14 4377.5 3.7357530941308295e-14 4380.0 3.779402057155559e-14 4382.5 3.7441377038691104e-14 4385.0 3.649697257195224e-14 4387.5 3.658290575851708e-14 4390.0 3.609693585162298e-14 4392.5 3.601704370403795e-14 4395.0 3.680877556423191e-14 4397.5 3.64443548852688e-14 4400.0 3.5964249834501485e-14 4402.5 3.5586066564211385e-14 4405.0 3.558732017297332e-14 4407.5 3.519338886612787e-14 4410.0 3.5536325401416824e-14 4412.5 3.525643183432611e-14 4415.0 3.4667743935984374e-14 4417.5 3.549304201781213e-14 4420.0 3.490745764818913e-14 4422.5 3.334342825174301e-14 4425.0 3.4800534985191325e-14 4427.5 3.38871522531127e-14 4430.0 3.2779483879856464e-14 4432.5 3.377259612919424e-14 4435.0 3.3649193593174656e-14 4437.5 3.390739295242029e-14 4440.0 3.356093614820255e-14 4442.5 3.366604616069323e-14 4445.0 3.4154448746211846e-14 4447.5 3.408372149511611e-14 4450.0 3.3529704349371386e-14 4452.5 3.3400877414357585e-14 4455.0 3.336577298089158e-14 4457.5 3.4059852106662486e-14 4460.0 3.4465682532350966e-14 4462.5 3.4335374983745365e-14 4465.0 3.4673839185072816e-14 4467.5 3.528958131574986e-14 4470.0 3.570943860704487e-14 4472.5 3.4850011873706344e-14 4475.0 3.5139415926728826e-14 4477.5 3.536257861514423e-14 4480.0 3.492670223675075e-14 4482.5 3.427368049199915e-14 4485.0 3.3908585574810024e-14 4487.5 3.451885926077959e-14 4490.0 3.528539697299042e-14 4492.5 3.525565595214643e-14 4495.0 3.53106690480047e-14 4497.5 3.48864580073608e-14 4500.0 3.539295321663277e-14 4502.5 3.530446199056722e-14 4505.0 3.519377511315182e-14 4507.5 3.49415862996999e-14 4510.0 3.6168821843790555e-14 4512.5 3.6079737694661926e-14 4515.0 3.694571029861683e-14 4517.5 3.756705639927291e-14 4520.0 3.6706589509475154e-14 4522.5 3.608885515730617e-14 4525.0 3.5738149635825e-14 4527.5 3.4924022224505635e-14 4530.0 3.494879624414693e-14 4532.5 3.5192545221312405e-14 4535.0 3.4171623186250374e-14 4537.5 3.4795645911019774e-14 4540.0 3.4557080775491494e-14 4542.5 3.490562128075948e-14 4545.0 3.682147089404536e-14 4547.5 3.463122326343056e-14 4550.0 3.579737079136523e-14 4552.5 3.494266033747702e-14 4555.0 3.509575984862734e-14 4557.5 3.581396247273605e-14 4560.0 3.60817197517585e-14 4562.5 3.596267435321959e-14 4565.0 3.588252809575039e-14 4567.5 3.484236147212674e-14 4570.0 3.3848625806539787e-14 4572.5 3.406217636506975e-14 4575.0 3.529508364177522e-14 4577.5 3.5316252689193e-14 4580.0 3.6186616311946473e-14 4582.5 3.5560448899754626e-14 4585.0 3.479786174920979e-14 4587.5 3.476242189069667e-14 4590.0 3.4188069177954264e-14 4592.5 3.5091297679061204e-14 4595.0 3.466081859460762e-14 4597.5 3.447976699619791e-14 4600.0 3.372442705954978e-14 4602.5 3.34173166297979e-14 4605.0 3.294466208083463e-14 4607.5 3.4123111915295226e-14 4610.0 3.3047407177336577e-14 4612.5 3.3577595592209145e-14 4615.0 3.3887965404742065e-14 4617.5 3.448528965101401e-14 4620.0 3.4748760943323354e-14 4622.5 3.4845116023271214e-14 4625.0 3.4804431336748695e-14 4627.5 3.404863739044084e-14 4630.0 3.4345403853840856e-14 4632.5 3.3813185948026667e-14 4635.0 3.4775096891719384e-14 4637.5 3.330501361351913e-14 4640.0 3.392884660290835e-14 4642.5 3.314799403388892e-14 4645.0 3.42142797654741e-14 4647.5 3.3542081194796666e-14 4650.0 3.325414759097062e-14 4652.5 3.356448013405386e-14 4655.0 3.4582590019731005e-14 4657.5 3.3759026661379227e-14 4660.0 3.2914582246811735e-14 4662.5 3.302085777663784e-14 4665.0 3.38478804175462e-14 4667.5 3.2953054483276026e-14 4670.0 3.264695032866548e-14 4672.5 3.2544879470389546e-14 4675.0 3.279222664351496e-14 4677.5 3.30386996786388e-14 4680.0 3.290916123594931e-14 4682.5 3.3297403869521e-14 4685.0 3.383279306668971e-14 4687.5 3.241855636476783e-14 4690.0 3.138590122932043e-14 4692.5 3.189602173960665e-14 4695.0 3.1557916680248835e-14 4697.5 3.0803413612152594e-14 4700.0 3.134347504305836e-14 4702.5 3.0663239823777375e-14 4705.0 3.094660283782004e-14 4707.5 2.9790721349206087e-14 4710.0 3.0334072656078986e-14 4712.5 3.0525854467864516e-14 4715.0 3.110418484732723e-14 4717.5 3.0875533385413614e-14 4720.0 3.100183277411281e-14 4722.5 3.031316449480896e-14 4725.0 3.0680885214134576e-14 4727.5 3.1137876429837216e-14 4730.0 2.9948340628162956e-14 4732.5 3.045902695645794e-14 4735.0 3.048960823398561e-14 4737.5 3.121324880961569e-14 4740.0 3.0793201782940496e-14 4742.5 3.103575474958445e-14 4745.0 3.0196036778862637e-14 4747.5 2.955575779776953e-14 4750.0 2.920498790178437e-14 4752.5 2.8666308828648526e-14 4755.0 2.930121084459246e-14 4757.5 3.020790879265135e-14 4760.0 2.940769982672127e-14 4762.5 2.9299154248596526e-14 4765.0 2.935705064460725e-14 4767.5 2.925980448599888e-14 4770.0 2.987503839690757e-14 4772.5 2.9745357652682936e-14 4775.0 3.030185152276543e-14 4777.5 2.989117606861866e-14 4780.0 3.088746977370632e-14 4782.5 3.0371999403325245e-14 4785.0 3.077319147659456e-14 4787.5 2.971252326751557e-14 4790.0 3.05471759812128e-14 4792.5 2.968017677332582e-14 4795.0 3.106753203763364e-14 4797.5 3.091115281491155e-14 4800.0 3.1709976034939927e-14 4802.5 3.240083982364306e-14 4805.0 3.156006475580307e-14 4807.5 3.223357114535107e-14 4810.0 3.1947541671590446e-14 4812.5 3.254123384058456e-14 4815.0 3.3245609498862294e-14 4817.5 3.434042668824279e-14 4820.0 3.548010951877345e-14 4822.5 3.4994488589453615e-14 4825.0 3.564151672907044e-14 4827.5 3.5590450806746374e-14 4830.0 3.8433852319252546e-14 4832.5 3.8476498734080905e-14 4835.0 3.8478775558643125e-14 4837.5 3.8830958305584307e-14 4840.0 3.974079027554804e-14 4842.5 4.123063991460542e-14 4845.0 4.265496986112678e-14 4847.5 4.478568801620855e-14 4850.0 4.440543798552715e-14 4852.5 4.6725684844754756e-14 4855.0 5.014655615124923e-14 4857.5 5.260677351094471e-14 4860.0 5.4750132785731306e-14 4862.5 5.492643083524103e-14 4865.0 5.281384596149408e-14 4867.5 5.1009845354827235e-14 4870.0 4.921653430395474e-14 4872.5 4.7194883499293225e-14 4875.0 4.554918996233642e-14 4877.5 4.4156803322321914e-14 4880.0 4.309653152466224e-14 4882.5 4.14414088169366e-14 4885.0 4.103112299794556e-14 4887.5 3.8446266434127505e-14 4890.0 3.801000380871007e-14 4892.5 3.739429894748271e-14 4895.0 3.729122520219723e-14 4897.5 3.675917670297249e-14 4900.0 3.697987960770907e-14 4902.5 3.5812702087710535e-14 4905.0 3.5651535434770565e-14 4907.5 3.3777790135226804e-14 4910.0 3.323582457425561e-14 4912.5 3.4250431131662915e-14 4915.0 3.443950582614902e-14 4917.5 3.370806238300883e-14 4920.0 3.29894023611086e-14 4922.5 3.379181022456976e-14 4925.0 3.256403596752465e-14 4927.5 3.208273490623581e-14 4930.0 3.194417386859216e-14 4932.5 3.2243196827763665e-14 4935.0 3.0931383349823774e-14 4937.5 3.127637309297687e-14 4940.0 3.0707644679004234e-14 4942.5 3.088455259223598e-14 4945.0 3.164500860788552e-14 4947.5 3.137708531040541e-14 4950.0 3.129671204810634e-14 4952.5 3.4272626783012766e-14 4955.0 3.727419645182563e-14 4957.5 4.0974307415975533e-14 4960.0 4.1192001659683466e-14 4962.5 3.812745678530814e-14 4965.0 3.3788469526625786e-14 4967.5 3.2073925763584366e-14 4970.0 2.982580884201315e-14 4972.5 3.0075863132437985e-14 4975.0 2.928821735918158e-14 4977.5 2.8296431563439202e-14 4980.0 2.8878470253144994e-14 4982.5 2.9460181988133147e-14 4985.0 2.7946977956654073e-14 4987.5 2.895975153476352e-14 4990.0 2.994412918034921e-14 4992.5 3.205984468786921e-14 4995.0 3.300099315995883e-14 4997.5 3.4876656142095175e-14 5000.0 4.0442875556736396e-14 5002.5 4.7003752208811186e-14 5005.0 5.743697211639878e-14 5007.5 6.27641113994798e-14 5010.0 5.788774272213679e-14 5012.5 4.463724041000455e-14 5015.0 3.794678804579059e-14 5017.5 3.3640919775345876e-14 5020.0 3.189146809048221e-14 5022.5 2.9560236907994614e-14 5025.0 2.974679422056148e-14 5027.5 2.973837132493398e-14 5030.0 2.8857677288355796e-14 5032.5 2.8202141549816748e-14 5035.0 2.8132003833652303e-14 5037.5 2.806554901674252e-14 5040.0 2.7655107343689186e-14 5042.5 2.674192620545201e-14 5045.0 2.762955066560463e-14 5047.5 2.766755703394793e-14 5050.0 2.730733425027141e-14 5052.5 2.7251567295090082e-14 5055.0 2.7343815959309653e-14 5057.5 2.746206006468046e-14 5060.0 2.729810159114634e-14 5062.5 2.7083270318800125e-14 5065.0 2.6802951541169892e-14 5067.5 2.6695046319953272e-14 5070.0 2.6578474257620346e-14 5072.5 2.597779406681138e-14 5075.0 2.666657584853016e-14 5077.5 2.550317609547638e-14 5080.0 2.540106457961898e-14 5082.5 2.5173288949772825e-14 5085.0 2.472237943063147e-14 5087.5 2.547273034322027e-14 5090.0 2.5938747542008853e-14 5092.5 2.625121291405328e-14 5095.0 2.5743550493379994e-14 5097.5 2.5265605376628177e-14 5100.0 2.6177704006758763e-14 5102.5 2.5287089520302335e-14 5105.0 2.476737043265783e-14 5107.5 2.5493265809993504e-14 5110.0 2.4999982620632806e-14 5112.5 2.5186890604839834e-14 5115.0 2.4622475282634615e-14 5117.5 2.5278647989949998e-14 5120.0 2.578881085188358e-14 5122.5 2.4645734807366218e-14 5125.0 2.512866047784789e-14 5127.5 2.5202216818987454e-14 5130.0 2.422660765847174e-14 5132.5 2.5182411494614754e-14 5135.0 2.4897423871379255e-14 5137.5 2.5263499652721302e-14 5140.0 2.4686465233667888e-14 5142.5 2.540508120985486e-14 5145.0 2.547166646983852e-14 5147.5 2.6423502803656594e-14 5150.0 2.5734446583262904e-14 5152.5 2.5484590498547725e-14 5155.0 2.6919210201312334e-14 5157.5 2.7117429463496996e-14 5160.0 2.7538391285755227e-14 5162.5 2.6706716739900542e-14 5165.0 2.7240735437760594e-14 5167.5 2.5446118262083435e-14 5170.0 2.6204795508543745e-14 5172.5 2.6529785109746275e-14 5175.0 2.7163201429900724e-14 5177.5 2.829357536834106e-14 5180.0 2.587133896600046e-14 5182.5 2.5941710463258348e-14 5185.0 2.534456917610301e-14 5187.5 2.5651566103439966e-14 5190.0 2.5500042073571538e-14 5192.5 2.5549307203849743e-14 5195.0 2.6982180324677113e-14 5197.5 2.7589960345649964e-14 5200.0 2.6334933650559895e-14 5202.5 2.584527745627934e-14 5205.0 2.4949689192356635e-14 5207.5 2.4692431733748348e-14 5210.0 2.55430273015788e-14 5212.5 2.4235442212111602e-14 5215.0 2.55569406647704e-14 5217.5 2.626061328570191e-14 5220.0 2.579056929228208e-14 5222.5 2.6562019795586984e-14 5225.0 2.5510906118153022e-14 5227.5 2.4810973994716587e-14 5230.0 2.588799163374348e-14 5232.5 2.5548241636402097e-14 5235.0 2.5768546435653468e-14 5237.5 2.4832066809169114e-14 5240.0 2.5705699979098988e-14 5242.5 2.6399955287722925e-14 5245.0 2.458233269719834e-14 5247.5 2.482317973948652e-14 5250.0 2.519397180027888e-14 5252.5 2.555834673946284e-14 5255.0 2.6056979788918397e-14 5257.5 2.567709567647021e-14 5260.0 2.4405643318466987e-14 5262.5 2.6139104715352385e-14 5265.0 2.5388852058585466e-14 5267.5 2.507299008442255e-14 5270.0 2.5553798172536085e-14 5272.5 2.5571592640692004e-14 5275.0 2.5202105010638416e-14 5277.5 2.5747899160531197e-14 5280.0 2.5128497847522017e-14 5282.5 2.6302744704498338e-14 5285.0 2.5360046162115242e-14 5287.5 2.5744224731606008e-14 5290.0 2.511762872074285e-14 5292.5 2.653910586029786e-14 5295.0 2.619697061817701e-14 5297.5 2.6641290220988725e-14 5300.0 2.4990487381294085e-14 5302.5 2.4336500018982618e-14 5305.0 2.432880557168976e-14 5307.5 2.651766915046875e-14 5310.0 2.7031460701548368e-14 5312.5 2.566266731724668e-14 5315.0 2.49391182211749e-14 5317.5 2.5709594636590463e-14 5320.0 2.639642146626698e-14 5322.5 2.535531124794009e-14 5325.0 2.5611492974705365e-14 5327.5 2.5070516748216566e-14 5330.0 2.4702245457475236e-14 5332.5 2.4678930028569114e-14 5335.0 2.441802863422174e-14 5337.5 2.3641207942031242e-14 5340.0 2.4097042110727933e-14 5342.5 2.4408059056432556e-14 5345.0 2.4986316591061805e-14 5347.5 2.348736812408502e-14 5350.0 2.345355795696242e-14 5352.5 2.3424375977863614e-14 5355.0 2.36044788993724e-14 5357.5 2.4169803934962972e-14 5360.0 2.4062196869343785e-14 5362.5 2.232969092562289e-14 5365.0 2.3529541894528813e-14 5367.5 2.4726667111410472e-14 5370.0 2.224262779710641e-14 5372.5 2.211745326816117e-14 5375.0 2.2889047767067107e-14 5377.5 2.3144438365059646e-14 5380.0 2.3343397934040208e-14 5382.5 2.4055327432141553e-14 5385.0 2.33078005273989e-14 5387.5 2.293719989605262e-14 5390.0 2.2542524894279478e-14 5392.5 2.285339106811949e-14 5395.0 2.2708668712817515e-14 5397.5 2.231463915015018e-14 5400.0 2.24958432144904e-14 5402.5 2.2380497655865098e-14 5405.0 2.2024789557797443e-14 5407.5 2.174829598095701e-14 5410.0 2.2460650689597877e-14 5412.5 2.3119191701033784e-14 5415.0 2.2961087919231085e-14 5417.5 2.2530598670382138e-14 5420.0 2.281437842463485e-14 5422.5 2.2487150962385676e-14 5425.0 2.2180828273274736e-14 5427.5 2.185121895437788e-14 5430.0 2.1756752757902398e-14 5432.5 2.1781990951598787e-14 5435.0 2.012411030459689e-14 5437.5 2.2810070415065116e-14 5440.0 2.192865470641587e-14 5442.5 2.3218657085963962e-14 5445.0 2.0626632929346238e-14 5447.5 2.273581103657933e-14 5450.0 2.2883621674006996e-14 5452.5 2.261282693483569e-14 5455.0 2.142958119982774e-14 5457.5 2.1430004716301368e-14 5460.0 2.141320974702321e-14 5462.5 2.2856501373101808e-14 5465.0 2.0067272699770232e-14 5467.5 1.928184615283563e-14 5470.0 2.1036629063069315e-14 5472.5 2.0148254131725427e-14 5475.0 2.0355350299197314e-14 5477.5 2.1768458753233452e-14 5480.0 2.0460756773219534e-14 5482.5 2.11509920634758e-14 5485.0 2.171255457871467e-14 5487.5 2.163706530838947e-14 5490.0 2.17656364394532e-14 5492.5 2.208678220514109e-14 5495.0 2.2501869006877166e-14 5497.5 2.0726159300648618e-14 5500.0 2.1750349188821155e-14 5502.5 2.234523906240269e-14 5505.0 2.1733450881523432e-14 5507.5 2.1174739479185023e-14 5510.0 2.0371540486951133e-14 5512.5 2.13697146051817e-14 5515.0 2.057930919858314e-14 5517.5 2.084386808119676e-14 5520.0 2.1597002344050237e-14 5522.5 2.1932219021057915e-14 5525.0 2.2259973337800283e-14 5527.5 2.2069038558962008e-14 5530.0 2.1749871462238904e-14 5532.5 2.198381349194107e-14 5535.0 2.1012851154173992e-14 5537.5 2.2661790521384673e-14 5540.0 2.209852038772414e-14 5542.5 2.1852369225120252e-14 5545.0 2.255901323763073e-14 5547.5 2.2284378051076574e-14 5550.0 2.121793307729731e-14 5552.5 2.1465185382732628e-14 5555.0 2.165593889652019e-14 5557.5 2.0593776521322243e-14 5560.0 2.018571670491659e-14 5562.5 2.0172113355783686e-14 5565.0 2.03112402114361e-14 5567.5 2.124222090002688e-14 5570.0 2.0916357160822782e-14 5572.5 2.1689588127382815e-14 5575.0 2.0469564221805084e-14 5577.5 2.2033012553649388e-14 5580.0 2.2946471518693265e-14 5582.5 2.1124950882545415e-14 5585.0 2.1746290206937913e-14 5587.5 2.1333563238992888e-14 5590.0 2.0910800624688794e-14 5592.5 2.2186579626986593e-14 5595.0 2.367575333375206e-14 5597.5 2.3765919990987282e-14 5600.0 2.3394870432178957e-14 5602.5 2.159942316421349e-14 5605.0 2.219685921883447e-14 5607.5 2.24251667853715e-14 5610.0 2.1690347068903555e-14 5612.5 2.1231544896759685e-14 5615.0 2.070491571433148e-14 5617.5 2.0240177535293252e-14 5620.0 2.0700321407625573e-14 5622.5 2.051708615827784e-14 5625.0 1.9761122805380532e-14 5627.5 2.0546662854730065e-14 5630.0 2.0928581540317556e-14 5632.5 2.1396385978624845e-14 5635.0 2.0101496218971095e-14 5637.5 2.0061145263429794e-14 5640.0 2.0563679746640404e-14 5642.5 1.846741211558936e-14 5645.0 1.8876886477016928e-14 5647.5 1.9482094905961915e-14 5650.0 2.0315073882555372e-14 5652.5 2.096933568354175e-14 5655.0 1.93122732703669e-14 5657.5 2.0406733011843654e-14 5660.0 2.0270289556568143e-14 5662.5 1.965138291080016e-14 5665.0 2.0213128385155633e-14 5667.5 1.992474246573575e-14 5670.0 1.884640345531114e-14 5672.5 2.253653637134239e-14 5675.0 2.0589117840112345e-14 5677.5 2.011522831711198e-14 5680.0 2.055243961943034e-14 5682.5 1.9887805052971885e-14 5685.0 1.9509494727739697e-14 5687.5 1.8607851872310018e-14 5690.0 1.9584311453904775e-14 5692.5 2.0086537617122584e-14 5695.0 1.9036611479880672e-14 5697.5 1.8374860213574672e-14 5700.0 1.961219747259428e-14 5702.5 1.9539849000437502e-14 5705.0 1.8920588294897567e-14 5707.5 2.0936902791991382e-14 5710.0 1.9374924909343512e-14 5712.5 1.9316640572242944e-14 5715.0 1.876480368930445e-14 5717.5 1.8221448994299762e-14 5720.0 1.9232665725852152e-14 5722.5 1.8984932305702792e-14 5725.0 2.0158916582465464e-14 5727.5 1.855912714905216e-14 5730.0 1.9779012141226543e-14 5732.5 1.8947196987902613e-14 5735.0 1.7251804639798612e-14 5737.5 1.694862952511967e-14 5740.0 1.7364227934755887e-14 5742.5 1.8241306834715192e-14 5745.0 1.8514839184372023e-14 5747.5 1.875775806924919e-14 5750.0 1.9663946103473835e-14 5752.5 1.9339175036771697e-14 5755.0 1.9483894003941883e-14 5757.5 1.9023490939527703e-14 5760.0 1.732651972201002e-14 5762.5 1.8150206747172097e-14 5765.0 1.7833985631039544e-14 5767.5 1.981900903699589e-14 5770.0 1.9347204909111668e-14 5772.5 1.9022489746584048e-14 5775.0 1.8285743877194047e-14 5777.5 1.961551445361573e-14 5780.0 1.9672368999101332e-14 5782.5 1.8456261773871704e-14 5785.0 1.8675560297981737e-14 5787.5 1.8568137885545052e-14 5790.0 1.8662234775655533e-14 5792.5 1.7819813075766085e-14 5795.0 1.8481286515265385e-14 5797.5 1.9315325977108805e-14 5800.0 1.997933373918629e-14 5802.5 1.8064519200161958e-14 5805.0 2.0557630237331113e-14 5807.5 2.103473340333336e-14 5810.0 1.9614177835624962e-14 5812.5 1.864343572642417e-14 5815.0 1.839379648214349e-14 5817.5 1.755088180907874e-14 5820.0 1.7710349313926517e-14 5822.5 1.8510815777872565e-14 5825.0 1.8978759129583203e-14 5827.5 1.8244271450030582e-14 5830.0 1.8182441433012807e-14 5832.5 1.795189600542913e-14 5835.0 1.682795274112435e-14 5837.5 1.8874319967186748e-14 5840.0 2.0919160839878194e-14 5842.5 1.945063610230089e-14 5845.0 1.99471549575201e-14 5847.5 1.9916912493171332e-14 5850.0 2.0467810863604267e-14 5852.5 1.902156648067154e-14 5855.0 1.9788913956379946e-14 5857.5 2.1269480114335416e-14 5860.0 1.7574637695117433e-14 5862.5 1.936093192505487e-14 5865.0 1.9823625366558427e-14 5867.5 2.109481853247979e-14 5870.0 2.1581501641115483e-14 5872.5 2.084748321781564e-14 5875.0 2.1747387961637554e-14 5877.5 2.1053080136970888e-14 5880.0 1.8812335790172573e-14 5882.5 1.808972520660635e-14 5885.0 2.076693207859765e-14 5887.5 1.9145401003494225e-14 5890.0 1.820253305452168e-14 5892.5 2.021885771601086e-14 5895.0 1.972037713248581e-14 5897.5 1.7759067260920795e-14 5900.0 1.8080274012980888e-14 5902.5 1.930340991760683e-14 5905.0 1.7970315583900123e-14 5907.5 1.854088036530241e-14 5910.0 1.9541736189843985e-14 5912.5 1.9679021595869067e-14 5915.0 1.948278100264919e-14 5917.5 1.7904535005216354e-14 5920.0 1.8074478613555774e-14 5922.5 1.7405840969388596e-14 5925.0 1.710262350306229e-14 5927.5 1.860274595770397e-14 5930.0 1.8590860391388096e-14 5932.5 1.9430996796385852e-14 5935.0 1.906983380613788e-14 5937.5 1.9459734930220296e-14 5940.0 1.8985721740409633e-14 5942.5 1.8576823361386198e-14 5945.0 1.7565455857969196e-14 5947.5 1.607051893903061e-14 5950.0 1.8012233550393844e-14 5952.5 1.7358090334020082e-14 5955.0 1.7298311830800557e-14 5957.5 1.765478564665253e-14 5960.0 1.635658568224091e-14 5962.5 1.6082733154130016e-14 5965.0 1.8088137866863196e-14 5967.5 1.7015155492797022e-14 5970.0 1.7623060874646067e-14 5972.5 1.818347650727435e-14 5975.0 1.6948294100072557e-14 5977.5 1.6880583980334943e-14 5980.0 1.7870718061830174e-14 5982.5 1.7640833319945357e-14 5985.0 1.4958881369383538e-14 5987.5 1.8212050316717028e-14 5990.0 1.8263510956394516e-14 5992.5 1.9600528746712906e-14 5995.0 1.9050328331428508e-14 5997.5 1.786031988536968e-14 6000.0 1.5843080428297462e-14 spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/stis_fuv_f25ndq2_binset.bin000066400000000000000000002537101511632712700314510ustar00rootroot00000000000000@@H@P@X@`@h@p@x@@@@@@@@@@ȏ@Џ@؏@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Đ@Ȑ@̐@А@Ԑ@ؐ@ܐ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@đ@ȑ@̑@Б@ԑ@ؑ@ܑ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ē@Ȓ@̒@В@Ԓ@ؒ@ܒ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ē@ȓ@̓@Г@ԓ@ؓ@ܓ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ĕ@Ȕ@̔@Д@Ԕ@ؔ@ܔ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ĕ@ȕ@̕@Е@ԕ@ؕ@ܕ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ė@Ȗ@̖@Ж@Ԗ@ؖ@ܖ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ė@ȗ@̗@З@ԗ@ؗ@ܗ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ę@Ș@̘@И@Ԙ@ؘ@ܘ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ę@ș@̙@Й@ԙ@ؙ@ܙ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ě@Ț@̚@К@Ԛ@ؚ@ܚ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ě@ț@̛@Л@ԛ@؛@ܛ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ĝ@Ȝ@̜@М@Ԝ@؜@ܜ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ĝ@ȝ@̝@Н@ԝ@؝@ܝ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@Ğ@Ȟ@̞@О@Ԟ@؞@ܞ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@ğ@ȟ@̟@П@ԟ@؟@ܟ@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @Ġ@Ơ@Ƞ@ʠ@̠@Π@Р@Ҡ@Ԡ@֠@ؠ@ڠ@ܠ@ޠ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¡@ġ@ơ@ȡ@ʡ@̡@Ρ@С@ҡ@ԡ@֡@ء@ڡ@ܡ@ޡ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¢@Ģ@Ƣ@Ȣ@ʢ@̢@΢@Т@Ң@Ԣ@֢@آ@ڢ@ܢ@ޢ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@£@ģ@ƣ@ȣ@ʣ@̣@Σ@У@ң@ԣ@֣@أ@ڣ@ܣ@ޣ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¤@Ĥ@Ƥ@Ȥ@ʤ@̤@Τ@Ф@Ҥ@Ԥ@֤@ؤ@ڤ@ܤ@ޤ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¥@ĥ@ƥ@ȥ@ʥ@̥@Υ@Х@ҥ@ԥ@֥@إ@ڥ@ܥ@ޥ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¦@Ħ@Ʀ@Ȧ@ʦ@̦@Φ@Ц@Ҧ@Ԧ@֦@ئ@ڦ@ܦ@ަ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@§@ħ@Ƨ@ȧ@ʧ@̧@Χ@Ч@ҧ@ԧ@֧@ا@ڧ@ܧ@ާ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¨@Ĩ@ƨ@Ȩ@ʨ@̨@Ψ@Ш@Ҩ@Ԩ@֨@ب@ڨ@ܨ@ި@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@©@ĩ@Ʃ@ȩ@ʩ@̩@Ω@Щ@ҩ@ԩ@֩@ة@ک@ܩ@ީ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ª@Ī@ƪ@Ȫ@ʪ@̪@Ϊ@Ъ@Ҫ@Ԫ@֪@ت@ڪ@ܪ@ު@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@«@ī@ƫ@ȫ@ʫ@̫@Ϋ@Ы@ҫ@ԫ@֫@ث@ګ@ܫ@ޫ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¬@Ĭ@Ƭ@Ȭ@ʬ@̬@ά@Ь@Ҭ@Ԭ@֬@ج@ڬ@ܬ@ެ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@­@ĭ@ƭ@ȭ@ʭ@̭@έ@Э@ҭ@ԭ@֭@ح@ڭ@ܭ@ޭ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@®@Į@Ʈ@Ȯ@ʮ@̮@ή@Ю@Ү@Ԯ@֮@خ@ڮ@ܮ@ޮ@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@@ @"@$@&@(@*@,@.@0@2@4@6@8@:@<@>@@@B@D@F@H@J@L@N@P@R@T@V@X@Z@\@^@`@b@d@f@h@j@l@n@p@r@t@v@x@z@|@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¯@į@Ư@ȯ@ʯ@̯@ί@Я@ү@ԯ@֯@د@گ@ܯ@ޯ@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@°@ð@İ@Ű@ư@ǰ@Ȱ@ɰ@ʰ@˰@̰@Ͱ@ΰ@ϰ@а@Ѱ@Ұ@Ӱ@԰@հ@ְ@װ@ذ@ٰ@ڰ@۰@ܰ@ݰ@ް@߰@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@±@ñ@ı@ű@Ʊ@DZ@ȱ@ɱ@ʱ@˱@̱@ͱ@α@ϱ@б@ѱ@ұ@ӱ@Ա@ձ@ֱ@ױ@ر@ٱ@ڱ@۱@ܱ@ݱ@ޱ@߱@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@²@ò@IJ@Ų@Ʋ@Dz@Ȳ@ɲ@ʲ@˲@̲@Ͳ@β@ϲ@в@Ѳ@Ҳ@Ӳ@Բ@ղ@ֲ@ײ@ز@ٲ@ڲ@۲@ܲ@ݲ@޲@߲@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@³@ó@ij@ų@Ƴ@dz@ȳ@ɳ@ʳ@˳@̳@ͳ@γ@ϳ@г@ѳ@ҳ@ӳ@Գ@ճ@ֳ@׳@س@ٳ@ڳ@۳@ܳ@ݳ@޳@߳@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@´@ô@Ĵ@Ŵ@ƴ@Ǵ@ȴ@ɴ@ʴ@˴@̴@ʹ@δ@ϴ@д@Ѵ@Ҵ@Ӵ@Դ@մ@ִ@״@ش@ٴ@ڴ@۴@ܴ@ݴ@޴@ߴ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@µ@õ@ĵ@ŵ@Ƶ@ǵ@ȵ@ɵ@ʵ@˵@̵@͵@ε@ϵ@е@ѵ@ҵ@ӵ@Ե@յ@ֵ@׵@ص@ٵ@ڵ@۵@ܵ@ݵ@޵@ߵ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¶@ö@Ķ@Ŷ@ƶ@Ƕ@ȶ@ɶ@ʶ@˶@̶@Ͷ@ζ@϶@ж@Ѷ@Ҷ@Ӷ@Զ@ն@ֶ@׶@ض@ٶ@ڶ@۶@ܶ@ݶ@޶@߶@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@·@÷@ķ@ŷ@Ʒ@Ƿ@ȷ@ɷ@ʷ@˷@̷@ͷ@η@Ϸ@з@ѷ@ҷ@ӷ@Է@շ@ַ@׷@ط@ٷ@ڷ@۷@ܷ@ݷ@޷@߷@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¸@ø@ĸ@Ÿ@Ƹ@Ǹ@ȸ@ɸ@ʸ@˸@̸@͸@θ@ϸ@и@Ѹ@Ҹ@Ӹ@Ը@ո@ָ@׸@ظ@ٸ@ڸ@۸@ܸ@ݸ@޸@߸@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¹@ù@Ĺ@Ź@ƹ@ǹ@ȹ@ɹ@ʹ@˹@̹@͹@ι@Ϲ@й@ѹ@ҹ@ӹ@Թ@չ@ֹ@׹@ع@ٹ@ڹ@۹@ܹ@ݹ@޹@߹@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@º@ú@ĺ@ź@ƺ@Ǻ@Ⱥ@ɺ@ʺ@˺@̺@ͺ@κ@Ϻ@к@Ѻ@Һ@Ӻ@Ժ@պ@ֺ@׺@غ@ٺ@ں@ۺ@ܺ@ݺ@޺@ߺ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@»@û@Ļ@Ż@ƻ@ǻ@Ȼ@ɻ@ʻ@˻@̻@ͻ@λ@ϻ@л@ѻ@һ@ӻ@Ի@ջ@ֻ@׻@ػ@ٻ@ڻ@ۻ@ܻ@ݻ@޻@߻@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¼@ü@ļ@ż@Ƽ@Ǽ@ȼ@ɼ@ʼ@˼@̼@ͼ@μ@ϼ@м@Ѽ@Ҽ@Ӽ@Լ@ռ@ּ@׼@ؼ@ټ@ڼ@ۼ@ܼ@ݼ@޼@߼@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@½@ý@Ľ@Ž@ƽ@ǽ@Ƚ@ɽ@ʽ@˽@̽@ͽ@ν@Ͻ@н@ѽ@ҽ@ӽ@Խ@ս@ֽ@׽@ؽ@ٽ@ڽ@۽@ܽ@ݽ@޽@߽@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¾@þ@ľ@ž@ƾ@Ǿ@Ⱦ@ɾ@ʾ@˾@̾@;@ξ@Ͼ@о@Ѿ@Ҿ@Ӿ@Ծ@վ@־@׾@ؾ@پ@ھ@۾@ܾ@ݾ@޾@߾@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@¿@ÿ@Ŀ@ſ@ƿ@ǿ@ȿ@ɿ@ʿ@˿@̿@Ϳ@ο@Ͽ@п@ѿ@ҿ@ӿ@Կ@տ@ֿ@׿@ؿ@ٿ@ڿ@ۿ@ܿ@ݿ@޿@߿@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@p@q@q@r@r@s@s@t@t@u@u@v@v@w@w@x@x@y@y@z@z@{@{@|@|@}@}@~@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @!@!@"@"@#@#@$@$@%@%@&@&@'@'@(@(@)@)@*@*@+@+@,@,@-@-@.@.@/@/@0@0@1@1@2@2@3@3@4@4@5@5@6@6@7@7@8@8@9@9@:@:@;@;@<@<@=@=@>@>@?@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@I@J@J@K@K@L@L@M@M@N@N@O@O@P@P@Q@Q@R@R@S@S@T@T@U@U@V@V@W@W@X@X@Y@Y@Z@Z@[@[@\@\@]@]@^@^@_@_@`@`@a@a@b@b@c@c@d@d@e@e@f@f@g@g@h@h@i@i@j@j@k@k@l@l@m@m@n@n@o@o@p@spacetelescope-synphot_refactor-c682dc1/synphot/tests/data/stis_fuv_f25ndq2_mjd58300_0822774.fits000066400000000000000000001320001511632712700324350ustar00rootroot00000000000000SIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T FILENAME= 'stis_fuv_f25ndq2_mjd58300_0822774.fits' / name of file ORIGIN = 'synphot ' / Version 0.1.dev0270 END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 16 / length of dimension 1 NAXIS2 = 2459 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 2 / number of table fields TTYPE1 = 'WAVELENGTH' TFORM1 = 'D ' TUNIT1 = 'ANGSTROM' TTYPE2 = 'THROUGHPUT' TFORM2 = 'D ' GRFTABLE= 'mtab$*_tmg.fits' / graph table used CMPTABLE= 'mtab$*_tmc.fits' / component table used TDISP1 = 'G15.7 ' EXPR = 'stis,fuvmama,mirror,f25ndq2,mjd#58300.0822774' / synphot expression TDISP2 = 'G15.7 ' END @VZ@ G{?ъ'@%3@?Z @)z?0r@-?(ۈ@2?e5@6f`?_$@: ?#G @??Z]@CG?o @G?KS@H?ٿN@K@?ݰ @P3@? b@Tz?2j@X€?fh@]??U@a\ ?@e ? :@i?!Cݶ6@nG?!;7m@p?"8޴ @r`?"Zx{~@v@?##Q*#p@{)?#uQ@z?$R]@€?$n9q @?%臆}@\ ?&-`x@ ?&Z&bB@?'xF>}@?'@G?(!m@`?(B@@?)oԳ)@)?*εsb@p?*/@€?+v@ @?,'/@@\ ?,J$@?-+@?.K"m@?.MYW)A@=?.Ӗk@ȏ`?/]Rvk@?/1@)?09@p?0ǤR@€?0 l8@ @?1Y'@\ ?1Vͣ@?1N6>@?1k`}s@?1c@=?2;sC@`?2@?2}Uc@?3-2@p?3E@`?3WbHi@ @?4& W@ Q?4y=@?4sT$@?4=@?48s;@=?4pJ"@ ?5@"?5@'?55&}0@+p?5NBR@/`?5gG@4 @?5u@8?5@8Q?5I!噢@<?5o@@?5nV@E3@?5Ye@I ?5F?d@M?6kFN@R?6ȉ>z@Vf`?602h*2@Z`?6EdM*@_?6Z@`?6_:l@cQ?6lz>@g?6}!ۯx@k?6G@p3@?6,}@t ?6%Q@x?6ȫ!@}?6ձ@f`?6 "@`?6'h@?6IgQ@?6_@Q?7g1o@?7m)@@?7/@3@?7!Ve d@z?7*`_M@?73?@?7<{n&n@f`?7D@?7KY猗@ ?7L9bX@?7OD Ū@G?7R8ڽy@?7T@@?7W(b@3@?7YN˄@z?7\:@?7^FSZ@?7`:f@f`?7ayم@?7b. R@ۮ ?7b2Y@?7aä?@G?7a}(8|@`?7aC@@?7`L@)?7_ q@z?7^c@€?7^Bj@?7\~@?7\J-@\ ?7Zd_@ ?7XD/#@ ?7U|@G?7R|a@`?7OԘGw@@?7LH3@)?7I@ z?7F[kY@$€?7CNz@(?7@ϕ@)?7?um@-\ ?7;2@1 ?77r'@5?7301f@:=?7/[@>`?7+J @B?7'\@G)?7"2{^@Kp?7f?ոU@O€?7*_@P?7e@T @?7Z[@X\ ?7  x@\?7Pq>@`?6/|@e=?6&Cy@i`?6jr@m?6N@r)?6E @vp?6@x?6,s@z€?6ЉX@ZG?5nm>@^?5f$b@b@?5^m.Û@g3@?5V\Hs@h?5U(@kz?5O*?=@o?5G7@t?5@[@xf`?58v@@| ?51@?5*mW @G?5# LǼ@`?5S@@?5@?5@)?5 &s%'@z?5rP@€?4@?4: +&@\ ?4@ ?4 Sۙ@?4߉nd{@G?499/@`?4TD@?43a7+@@?4Ȯo@)?4fܲ@z?4 @€?4۶@?4*@\ ?4.NL@ң?4V?3ӵrl@Bp?2kK@F`?2/ٽ@K @?2ص,E@OQ?2h@H@S?2ŏ4@W?2\@X?2d@\=?25 x.@` ?2}>5͆@d?2j@i?2X(@mf`?2F}~@q`?24TN@v?2"vd@zQ?2 @~?14jn@?1-V@?1F@3@?1Uy @ ?1(: +@?1#@?1UN@f`?1U~*@`?1wX@?1d(@Q?1P +@?1D @?1?KR@?10ΫG@3@?1"xYr@ ?1n0@?14oO@?0UT@f`?0>.7&\@Ǯ ?0ٞܜ@?0ʭ?ڟ@?0B[w@G?0^@ԙ?0wdt9@@?01JP@3@?0tc$@z?0~=TR@?0nS|@?0_9@f`?0O= @ ?0?gx:@?0/@?0+;s@G?0 Kg&z@?0Dj.@@?0fe7m@3@?/@ z?/ě@€?/-;@?/-@\ ?/fYI;@ ?/Fصgd@ ?/59^}@!?/&)@&G?/qT@*`?.@.@?.%w<8@3)?.-s@7z?.~z.5@;€?.] +@@?.:O@D\ ?.|iK@H?-$bjz@H ?- }@L?-@QG?-zy@U`?-O3ը?@Y@?-qha@^)?-PP"P@bp?-.g@f€?- \@k @?,jfaK@o\ ?,Yo@p?,NM@s?,@w?,Daw @|=?,jĐ @`?,K:uA~@?,+0@)?, ʮ(?@p?+-߸G@€?+wo@ @?+GGX?@?+/@\ ?+@?+m98@?+NQY@=?+/LXk9@`?+ťC@?*Xl1@?*P8@p?*@`?*&@?*yL#4@ @?*r{sB@Q?*U@X/@ɣ?*8@?*_f@=?)\#@օ ?):e@?)-/*@?)ÂK@p?) m@`?)j=E@?)hM@ @?)MVg@Q?)0 H@?)J@?(~(@=?(SD@ ?(?H@?(jHq@ ?(0#w\@f`?(fI\@?([k*=@`?(G v@?((|@Q?( R"@?'>eڅh@#?'Ck@(3@?'7.@, ?' o@0?'lY\(@5?'M+lSA@8?'8)@9f`?'.]g@=`?'4t*@B?&𛯙@FQ?&ѭ/X@J?&a@N?&y@S3@?&uFW@Wz?&VG)@[?&7hD)@`?&*d 1 @`?&CZ@df`?%@h ?%]h@m?% @qG?%#'xq@u?%u:J@y@?%Tj@~3@?%3*@z?%,"@?$4跧o@?$G@?$&U@f`?$@ ?$#X%C@?$u8Hv@G?$V9s@?$7pdz@@?${:@)?#~w!@z?#3C @?#Z@€?#9L@?##@\ ?#y@ ?#YKM@?#9=-@G?#h\إ@ˏ`?"@@?"h@)?"6U@?" Ž@z?"ӈ @€?"xfȏ@?"YH\@\ ?";9@ ?":P@?!Ȧ@G?!nԲu@`?!y@?!CN6@)?!@?!~s;B@p?!k?H @€?!S@ @?!< $G@\ ?!#4w@?! !eo5@? a(@=? @!`? êm嬎@%? G`@(? S0[@*)?  L@.p? }ߦC<@2€? gT!E0@7 @? Pf@;\ ? :D¸l@?? #b(m@C? +̎@H=?NP@L ?)f@P?,xZ@P? @U?hkL@Yp??W 8@]`?`@b @?#jR@fQ?~@j?U]@n?nyWs@s=?D0@w ?l@x?5:@{?F7@@?Sd@p?X ۃ@`?~S+@ @?W_y s @Q?0V.$@? 8q@?PP@3@?97c@?@ ?@?gqh`@?=,AJU@f`?;d@`?}c@?fR@Q?/ u@?iF:@?=@?"h@3@?J@ͅ ?%4~S@?@?C:@f`?bO@޸`?68c0v@? "U@G?D@뙠?'$5@@?Æ@?,@3@?TH @z?$˫@?^^Aa@?N|O@f`?C@ ?cv0@?2O\ @G?@'? @,?@0f`?A?@4 ?z0@8?l@=G??m@@?#$in@A`?G@E@?ߢ D?@J)?k@Nz?{Y@R€?J'%F@W?S@[\ ?I@_ ?H2x@c?@h?Q2@hG?N@l`?!/ @p@?n .@u)?Ƥ6d'E@yz?C @}€?kT`@?=J{Ft@\ ?m@?!\@?`@?2@=?`k@`?ep @??C@)?`Ť@p?L$@€?д ;@ @?" wT@\ ?6s@?Yd !@?D*-S@?4;RX@=?S#,@`?>;@?@)?rF.@p?+@€?`}@K@ @?= c@Q?:tש@?ŀy+@?B}@?x~ @=?jqA@ ?( @?*nZ*@?O|z@p?c܊l;@`?!j@ @? |VǛ@Q? }-":@? m&D @ ? _1@? #{@=? 揜[*@ ? @? l<9@!? /7HX@%p? /:@)`? V@.? w/j3@0? Z ?9W@2Q? <@6? rV@:? ˩TH@?3@? ={H@C ? Z3Sl@G? !}Alc@L? 2΂@Pf`? 2h'@T`? ur(X@X? Iy)(@Y? <+u@]Q? XM=@a?ΫWr@e?6@j3@?_xsi@n ?(,"@r?$@w?u@{f`? _C@ ?H8i{@?DT'@?(/$@G? @?mgrO@@?{@3@?GG{9@z?hXG@?߰B/@?@f`?wPp@?dU~?@ ?F]@?ϷS@G?T!]@?I Vl@@?{Y@3@?WWQ@z?'qv@?̌@?g@?)`@\ ?50<@ծ ?kǘ_?@??ZА@G?$f@`?ۡma@@?#m.@)?i@z?`Pu@€?4T[%@?*A@?gv@\ ?ލ€@ ?MP7K @?OV허@ G?b@ `?9DQ@@?VD(^C@)?i@p?;o>@€??@ ?F,@# @?l21@'\ ?F4P@+?gu@/>{B@4=>O,@8`>V950@<> *@A)>qWI@Ep>md@H>?m@I€>"{Vi@N @>md@R\ >Om@V>Lp@Z>̧@_=>i@c`>t @g>-lO+@l)>')@p>`~b@pp>M@t`>Q@y @>It.@}Q>> v@>[$T@>ZTB@=>iT@ >n@>j[@>T&h@>t&@p>$ݕI#@`>s@ @>:^@Q>FG3@>ŝ<=@>2)@=>hž'@ >u%\@>*B@>4ea@>?@f`>V6i@ʸ`>j@>쁀r,@Q>d:@י>wyƥ@>œ`^@3@>*@ >nd@>2C5@>' @>eYՄ@f`>应C@`>d@>c#P"@Q>6@> 9CTv@>`?%@ 3@>座@z> 1K`@>AM]@> ئ@> N6i,@f`>u{@ >J@%>!0@)G>'a+_@->+S@1@>20025'@63@>6@8>&LPt@:z>c@>>ת@C>'@Gf`>:YN@K >ՃUq@P>lQ@TG>^2ڛ@X>\TOPX@\@>Ҧ+,Z@`>!}̓@a)>@ez>uuK@i€>@n>hsU <@r\ >Z 7@v >ηHX@z>ͬ%%@G>̟N^@`>˕q8Uu@@>ʉ @>ʁ:M@)>%@z>-+@€>9}p@>t;_@\ >ư4'=@ >.i^@>)c)ً@G>e@`>â;Lz@>af h@>X}@)>q @p>k@€>S0@ @>cP @\ >4^!@̣>Lן@>. b@=>hń@>[O{:q@ُ`>ra@>>(RHu@)>klR@p> 2`@€>iD́@ @>}S@\ >'Wk{n@>Wk@>}iF@>99@=>Q\.z@ >! Ʋ@>Wp@ >į@p>VH?0_@`>N&@ @>%_I@Q>^!h 3@">@&>PU?@(>mx;@+=> @/ >ƫU@3>zU@8>')S@F_@@`>h)d@E @>j`@IQ>on@M>G@P>Q!.+@Q>+C4@V3@>e=T@Z >l @^>oL@c>yP[@gf`>qN;Ad@k`>3z;{@p>P@tQ>QoB@x>aʅ.8@x>QK*@|>I@3@>)d @ >)@>4 Y@><@f`>*W@`>-DUZ@>C>}b@Q>Viׂ~@>1$-@>-4@@>sy@3@>Cd#@z>ˠ, '@>?#@>;EwD@f`>ή@ ><1@>1HKPZ@>~etG@G>[@Ι>?"@@>D@3@>P@z>8 0@>6ҟ@>7} I@f`>6K/ۮ@ >6?*@>p@>E$ت@G>ڎ*@`>̵?4@@>37@)>R׉ f@z> ۹@ €>Li@>/C:0@\ >]_@ >@>ԏ@> ?@ G>c@$`>ܵt@(@>m38@-)>=@1z>VIPن@5€>CfB@:>~}Uc@>\ >}fZHH@@>|@B >|x@F>|L"@K=>|e@O`>|+*@S>{|L@X)>{ )&@\p>{~`2@`€>{Dylm@e @>{ DG@h>z]{] \@i\ >zҐ2@g@m>zG|@q>zh6e@v=>z3Ih/@z`>yjd\@~>yck@)>yK g@p>y^@€>y)H>@>x9+@ @>xalq:@Q>xå#T@>x{?0@>xa8|_@=>x0F]@ >w(%@>wΑ%@>wo@p>wl)@`>w;4@>w-&{@ @>w 5@Q>vHh^@ã>v}J@>v@=>vX%ݲ@Ѕ >v+B'@>u+dFe@>uk9@p>u@>u'M|@`>ux?~W@ @>uN/bƥb@Q>u$g@>t{>@>t(Li@3@>tA|@ >t}{@>tS$6@`>t)}@>t*@3@>tY3gm@\ >sBq\F@>sle~S@ >sB8=@ >s\j~@>s3"L @>s B@B>ř@f`>rY)@`>rX5u@>r'{bZc@@>rhHXZ@>rB,D"@>r]B0@ #>q @"L>q@$p>qJ6g@&>q1x@(>q_mR,@*`>q9CQ*u@,>q%@- @>q]:R@/3@>p(Y@1W>pC@3>p7 s@5>pz.B@7>pf_g@9>pCa\5@<>p WHQ@>=>oR\@@>oiD@@f`>ox U(@B@>ouz/}@D >o5w @F>nl/C@H>nz]@K#>nsʣ,@MG>n3u1@Op>m|!%8@Q>m/@S>mpr\@T>miX@U@>m@X @>mǝj@Z. >m *@\W>n,q}@^z>n_w@`>nO@bǠ>nĸW@d>ntk@g>o*!YQ@h>o@*vq@i=>o$E] @ka@>n\=@m >n~{@o >n@q>nd[@s>n4P-@v>nxњ@xG>m`g#S@zk>mV @|>md @|>mq*{ @~`>m< B@@>mϹ+@ >l=ז@. >l@@Q>lh~j@z>l3 @>kl ]@Ǡ>k@>k" @>kX'@>knm׀+ @8`>kIѣN-@\ >k%'8@ >k@>jEJ@>j͗@>j$TQ@>jk޳@B>jF㤧@>j:yOh@k>j$x@`>j8z@`>iQ_@ >iā'@ >i 7@)>iTT&@Q>icrc@u>iC4R@>i"9f@>i ur*@€>i&M&@>hB_@`>hb0@3@>h T@\ >ht@À>hPy @ũ>hri@>hY'@>hA4ɟс@>h)<@>h(߿D@B>h'~%@f`>hW@ҏ`>gfy-@Գ@>g @ >g/@>gR\@)>gPBa@L>gY@u>gp3@>gz @ᙠ>gff)F@€>gJ׹@`>g/¯D@ @>gf"3@3@>fJ@W>ft9`@>f]B@>fFKX@>fL@>f{r$K@>foؾ @>fUq@=>ff"\1c'@@>f@@>e^@>eǏ@>e}r@#>eG@>e9ik@L>eo@ p>enQxX@ >eVhR2i@>e>E걨@@>e& f{G@ @>e @. >daT@W>d @z>dēt;aC@>d#@>d@Ǡ>d*o@>d~K>0@">dg*@$=>dP#*@&a@>d:)rL@(@>d#BU@* >d }_E@,>cxw@@.>cA/!|@0>cl]@1#>cș(@3G>cStu@5p>cݧ@*@7>cSsG@9`>csCy@;@>c]cm@> >cHY@@. >c2}%H@BQ>ck'c@D>c t@Dz>cKⵟ@F>b16e@HǠ>b g@J>b vǥB@M>b9ę@O8`>b߲@Qa@>b@S >b{W@U >bgaiW@W>bSSA݁@X>bQ@Y>b@MF=L@\>b-(,r@^G>b&oa@`k>b҅@@b`>ag+b@d`>a+Y@f >ac@i >agS@k)>aFec@l>a0ו=@mQ>aZN~@ou>a}f0%@q>as@he@s€>ab]Ϟ@u>aPXe@x`>a?Rj@z8`>a--!@|\ >a %@~ >a v@>`^e5@>`oM.@>`Z&W@>`,iO8@>`Ƣ($@B>`<@f`>`UF@`>` eG@@>`q@ >`sN"f@>`bk@)>`Sڀ@L>`C1+@u>`3"@>`$dp @€>`*_@`>`@u@`>_0@3@>_$[@\ >_PL@>_e@>_s@>_q @>_T2@>_7L9[@>_Xc0@=>^\:@f`>^C@@>^(@@>^.@>^k@>^)qI@>^lqˣ܁@#>^P@L>^5VQ<:@p>^wBͭ@Ǚ>]'@ɽ>]@`>]fT@ @>]ְ)@>]hY@3@>]g@W>]v|3^@Ԁ>]\l@֣>]B&@Ǡ>])A8:!@>]oג@>\ěQ@=>\܍3@a@>\I5@@>\v4@@>\V@ >\B@>\w6@>\_;@#>\Gm@G>\/V{u@p>\XL8@>[dWJ@>[&k|@@>[3k3S@>[«@ @>[@. >[ @W>[K2=v@z>[s!_@>[]4'S@Ǡ>[Fp}|H@>[/L @>[+M@ 8`>[3?N@ >Zj+@ a@>Z5-@ >Z+i@ >Z@>Z@>Z@>Z? K@G>ZmN6@k>ZXR)1@>ZC# Z.$m@ >Z+f 1@!@>Z @$ >ZB@&. >YS-@(Q>Yޕ,@*u>Y=@,>Y@.€>YL+ @0>Y`r~@3`>Y{,@4>Ysگ@58`>Yh$ծ@7\ >YV*IEZ@9 >YC#@;>Y1""h@=>Y @?>Y 5X_@B>XwԷ@DB>XR6@Fk>XԿl*@H>XA5@H`>Xº!@J`>X3@L >XiH@O >X~@Q)>X}=_Ka@SL>XlV@Uu>XZ >@W>XI][g@Y€>X8 j$@[`>X&p@\>X%jk|@^`>X11@`3@>Xp@b\ >WS @d>W`C@f>W20@h>W; @j>W-@m>W2@oB>W3d@p>Wo}MS@qf`>W<#@s`>Ww5 G@u@>Whn,@w >WXkv@z>WI;=@|#>W:C@~L>W+5x @p>WaG@>W Ǡg!@>Wߔ @>VV@`>Vᡔ@ @>Ve@3@>V s@W>V<@>Vo8'@>VD\h@>VR5@>V@>V}pĸ@>V}PuH@=>Vo0>8@f`>VbFCD@@>VT0\@ >VGkW,@>V9[@>V,X-4@#>V-C@G>V8k@p>VG @>V@L@>U@>U>@@>UUl1D@. >UýuQ@W>Uې@z>U4Qv_@>UW?]@Ǡ>Ủ@>UP5&@>UGu@>Uwa=@=>Uk j@a@>U_>`Z@Ʌ >USm@ˮ >UG5!@>U;OV@>U.=@>U"!M@>U h@G>UZ@k>U Rʮg@ؔ>TF[U(@ڸ`>Tsd@@>TH[@ >Tܖ;@. >TU@Q>TJС@z>TG8t@>T,AOX@>T/PJ@Ǡ>T@>TP%@>TT @8`>TbLz@a@>TvT@ >TkCN@>T`(Za@>TTh;@>TI ~@>TDQK@>T>})@B>T48ޝ@k>T)0(@`>Ta&W@`>TPy@ >T uSY5@  >S*s@ )>S@Q>SWe9w@>Sߤ<@u>Sw{zn@>SDP@€>S$g@>S/5!@`>S5{@3@>Sۉ@\ >S7 @>S<@!>Sm˲@#>SL@$>ST@%>SxUrj@(>Sn,@*B>Sd@,f`>SZ߲@.`>SPlq@0@>SF&@2 >S<@5>S2ك@7)>S(ᰰ<@8>S$z@9L>S&?@;u>Si@=>S V9?@?€>Sgee@A`>RP@D @>RKT@F3@>R垍d@HW>R@J>RDDU@L>R˄|@L>R^c@N>Rx@P>RMR@S>RF@U=>R\e@Wf`>RXGO@Y@>Rt@[@>RW8@]>R~\6Z@`>RtJ@b#>RlݴD5@dL>Rc0h(@fp>RZXaR@h>RQa&R}@j>RHR.@l@>R?@o @>R6UB@q. >R-\|A@sW>R$a@t>R!΁e@uz>R i@w>Rtb@yǠ>R )@{>Rd?%@~>QN@=>Q>k@a@>Q赗-@@>Q @ >Q}@>Q* @>Q@>Qʭl@#>Q1X7@G>Q>i@@p>QU@>QO@`>QE@@>QS @ >QK@>Q}V@. >Q @Q>Q4p@z>Q*>@>QPb&@Ǡ>QeM<@>Qutp@>Q_d@8`>Qz"jM@a@>Qt@ >Qo}:Aj@>QnL }@ >Qjh@>Qd2@>Q_aEtI@>QZQTϸ@k>QOQk@@`>QIѪ@`>QDG=@ >Q?3]6@>QQ9$`k@)>Q47}@Q>Q/]9[{@u>Q*'-$D@͞>Q$7V@€>Qsb@>QO@`>Q@8`>Q @>Q j@\ >Q Cp@څ >Q|qF@ܩ>QQCZ@>Pl! @>Pks@>PS@B>PM @f`>PIp5s@`>P.hp@@>P$/\@>Po6#^@ >P p0r@>Pq_"q@)>PB@L>Pi@u>P @>PcL@€>PD@`>Pf@`>Pr7\@>P;yLT@3@>P3@\ >P#@>P /@>P6 @ >P@ >P}a8@>P @=>Pv@f`>Pd˷@>Pzh0@@>P~I8D@@>PyvH;@>Pt>-@>Po4@#>Pk"@L>PfK^ G@!p>PakVt@#>P\D@%>PWq^@'`>PS}@(>PRڞ0@* @>PNypҺJ@,3@>PI^eI@.W>PE+D@0>P@|F2@2>P;ޑ%8@4>P7!F@6>P2n&@9>P-`Y@;=>P)*ԭ@<>P'2@=a@>P$m%9@?@>P 8֮@A >PÂ@C>PW1@E>P1^ۃ@H#>Pv!I3@JG>P LѻC@Lp>P+_@N>PCe]@P>OJVF@P>OYc@R@>O_@U @>OW2@W. >O:@YW>OGj@[z>O&@]>OFː@_Ǡ>Oo@a>O6r@d>O"+ a@d>OGNDmg@f8`>O @ha@>On5X@j >OY@l >Od.@n>Oy 6@p>OyJ:@s>Op̛ QC@uG>OhT*@wk>O_q@x>O]@y>OVVu@{`>ONq"@}@>OF> +@ >O=@. >O5\Õ@Q>O,58@u>O$|39@>Og1@€>OYy@>OOj3@>O ߈Ч@`>OVNo@8`>NZU@\ >Ny@ >NOg@>NQH@>Ni2l@>N<ϖ@>N{X@>N¢@B>N@k>Nv؅@`>NbfUu@`>N@ >Nq@ >N=s@)>NF@L>N>n@u>Nc/sp@>Nv_@>NuXRc @€>Nn6O4@`>Nf"FV@`>N^*d@3@>NU^ @\ >NM|Ǹ@>NE=u@©>N<+.@>N4?Y@>N+jT@>N'>@>N#k6@B>N@f`>N@Ϗ`>N b=V@ѳ@>N ɉ{@ >M3@>M8'%J@#>M+ =@L>Mdj|@>MM@p>Mע#@ޙ>MB$`@ཀ>M @`>MwtϬ@ @>M]@3@>Ms@W>M @>M+@>M{O^@>M@>M@>M3G@>MyB'@=>Mq-m@f`>Mhy^@@>M_'8@@>MVCF@>MN?r3R@>MEh4@#>MM8m@G>M3&,@p>M*[@ >M!>gp@ >MV:[@ @>MFta@ @>Mc~@. >Ly@W>L5<@z>L\f@>LI$@>L@Ǡ>L#@>Lt4@>L?@!=>Lm^@#a@>La@%@>Le c=@' >L.gI@)>L1@+>Lp3 t@,>LYׁ @.>L[ E@0G>L}YYB@2k>LtKmu@4>Lk9@6`>LaCφ@8@>LXw@; >LO-~kR@=. >LE#@?Q>LL9:Y{@Az>L3k@C>L*_@EǠ>L 3qp@G>LЍ@J>LGKn@L8`>LwF@Na@>Ka8@P >KߖA@R>K鋐 @T>KG@T>K3@V>K8(@Y>KW@[B>KKՅ@]k>KVtR@_`>KxԋO@a`>KY@c >KMK@f >Kd-]@h>Kʡ)@h)>K\@jQ>K.@lu>KzԤ@n>KqW@p€>KhsE@r>K_):@u`>KU_@w8`>KL:9@y\ >KC2.@{>K9<@|>K7 gz@}>K0X@>K(kЎ@>K8@>K:֕#@B>K ,\@f`>KFS@`>J+=@@>J9jU@ >J F~@>J@e@>JX؅@)>JH@L>J]c@u>Jƺ蕠@>J?Y@€>J>@`>JӞj@`>J]j@3@>JN?+@>Jn@W>J@x@>JhB@>J'&@@>Jy@>Jqa<3@>JhY1@=>J_q@f`>JWb@@>JN~@@>JELi@>JDգ@>J=DH@>J5t[T@#>J-x@L>J%>@p>Jj+@ę>Job:@ƽ>J iQ@`>Jg@ @>I[Ȧ@>IÂ@. >ILV@W>I~@z>I? @ӣ>I܎ rC@Ǡ>I3 p@>I˓{֘@>I'U@=>IҎ@a@>I"ɧ}@>I7F '@@>Ia@ >I 1C@>I~@>Ih@#>IZ@G>Iy7O@p>Io8O\@>Ie2\@`>IZC@@>IPCfX@>IOh@ >IEk@. >I;@@Q>I0co@@z>I%S@>I푔@Ǡ>Ih"I@>I@>HGw@8`>H: @>Ha|@Y@ a@>Hh,Q@ >H>(B@ >HƶI[!@>HI8@>H/I@>H/2@G>H=4I@k>H{q@`>Hx f@>Hnx>@`>HjZ,Y@ >H\r@! >HOFv1@#)>HA;@%Q>H3>Eb@'u>H%W@)>H @+€>H Ƞ@->G6x%@0>GZLx!@0`>G+@28`>G"@4\ >Gث@6 >G©\ j@8>Gw @:>G@@Fp@<>GU@?>G>@AB>G{~Gm9@D>Gi*+o@Ef`>G_@X>F K@l>Fc @>E}G@>Em/R>@>DU8}5@>D$׭@>Dp@>Cؾ@@>C>Ӳ1@ >Bװ=8o@ >Br@4>Br>@H>A@0W@\>AV~~8@p>@bR@>@] @>@>m.@>?#@>?𢎷@>>vm@>=GF}@>=4jV*@><8r@$><8r@8>;y<@L>:_@`>:e\+@t>9@@>9dQ@>8NZ@>8pt@>7(@>7;B@>7]ʏ@>6Kp@>6B*<@(>5ۉ@<>5x4B@P>5wKқ@d>4k@x>4W.@>32bI@>3A0Q@>3L).@>2x鼆@>2 hH@>2S@(@>2@>1iOҹ`@,>1e@@@>1{q@T>0C)JU@h>0.@|>0A>eI@>/Z"E@>/kِ܍@>.IJ+@>.bf?@>-Yxh@>-ZZ@>,/nʊ@>,e6@0>+1'@D>+ru+E@X>*%[9@l>*xS@>*%R *@>)wnd@>)0:@>(Q@>(Y aOE@>'Ic,@>'cOl@ >'C@ >&&I@4>&Qx@H>%q7@\>%A@p>%&N܌@>$h9~@>$dGS@>$ nc@>#eH@>#O9\P4@>" @>"B@>"Eyյ.@$>!л.O@8>!L+f@L>!D&Y@`> )ʳ@t> R@> LB@>l@>Vl5u@>޴E@>$65@>LC"@>ؒ@@>]C@(>˽(E&@<>=@P>g@d>%<պi@x>^/+n$@>7v@>'#@>w@>Iٱ@>w9gX@>8.@>@>,@,>xWd@@@>I"y@T>*&i@h>#)M@|>H\@>֢f$@>iƈ:@>'i@>Fk@>- ї@>_J@>c I@>h@>A8u@">@,> ![i@6> Cϙ@@> g9@J> A&@T> b}@^> Z+@h> UqS@r> @|>zuɴ4@>aP@>@aO@>FBU@>4@>1u@>Bhc@>zcs@>3@>mTq}@>E"@>slP@>S M@>0@>|@> _@>-+5@&=@0=pDu@:=7>@D==& @H=k=@R=!6a@\=Xg0h@f=O@p=.XS=@z=B @@=W_D@=zk@=Wu,R@=c(ϗ@=#W@=Q3]S@=}.y?@=z@=@=rO'„@= >@=|[xL@=XGc@=VIZ@=-@=r @$=I|z*a@.=_ u[@8=R@B=8y֞r@L=݇JU] @V=i#-@`=R@j=|ˊk@t=2@~=072vI@=َSZ@=<@=i,Z@= &T@=]8Eq@=M@=Bb@=њQ%@=G޿^=@=\ @=gd@=*w@=ӆ F@ =a,d@=Ҹ^Ğ@=Nϲ̤@(=^X@2=юQf p@<=3`?@F=.ȩ@P=Љˤ@Z=6"@d= @n=0%m@x=Σ-E@=<@=khK@=~@=l3C!qD@={2@=b2k@=cZ@=ujA@=xS^@=ɔc9H@=@=ȼ=@=J]@=@=ǐ!;J@=)MV @"=@,=}p@6=)@@=`"A&@J=Ńi: ۫@T=6fO@^=LM@h=ęy"@r=A_|@|=O @=ö w@=qhM@=4'@=C}@=)X@=sZe@=L%YS@=_X}@=֥\@=i?@=i٤@=.Uѳk@= p 0@=rܖ @= H@=}%$@&=F}@0='7@:=F@D=Gj@N=:8B@X=@b=&ו@l=jʡt@v=Uѷ@=ܴO@=k @=C[s:p@=n@=sK@=oę@=M"L@=+"÷T@=飽@=>J@=hoc@=&X@=f@={@ =y@=KC@ =:VB@*=IV@4=@>='Դg@H=Wj:@R=3O@\=h@f=צd/@p=EZί@z=uR@@=9@=~;d@=P V@=L@=W@=n@=R@='A@= XsN@=z@=8(@='# ~@=N'e@=2,@=i I@=L;@$=;@.={|*'@8=qXwY@B=G ĆB@L= choQ@V=פD@`=|_ނ@j=2oI_@t=&>@~=Ve6@=6P9@= )@=yf$F@=B:p@=,@=n 9!e@=>@o2@=f*@Ѐ=˃@=vЭ @=V@=Q@=u[@@=\t@ =A4@=4q]@=É@(=O˸@2=+@<=y盓@F=J%@P=u@Z=GlF@d=d,>@n=_w.@x=v^y@=R~@=9I@=B@=M2P@=T#@5J@=N*@=-@=c{@=@?eWÀ@=10@=ॡ - @=M@=qPXUP@=crZ9@=@=5@"=a+\@,=+q\@6=dy@@=υq@J=!Ѥ0@T= "r@^=ڵ@h=ha@r=bB+@|='7C@=gIS@=ۊF@=!Z!@=o@@=P.n@=Rw>@=[ʥ@=o`@=B:@={m@=n/ri@=$R@=6gkq@=>c8@= aI@=+ @&=jj$@0=$A5\@:=zn-@D=̻@N=Wݵ@X=Lp(@b=7V9I@l=s@v=D'a@=F)@=mש@=$pZ@=т@= +C@=1P@=zp@=2a@=f@=*@=@=+KO@=Ԙs@=;XsX@ =.)@=,B@ =UO@*=4# @4=P@>=nf@H=n(K@R=rt^@\=~=@f=|1@p=z\@z=yBlOw@=wjR ڋ@=u ~K@=tl6+k@=s@@=q|5@=pR  @=oQk@=m/@=k(C7s^Q@=ia)O1@=ge_@=f+A9Q@=dФsv@=c`Nf@=bkXY@=`xc)@$=_Yjc@.=]욧q@8=[)@B=YI@L=X?~1@V=V1@`=U9^@@j=S܂@t=ReA@~=QeW@=PG^iY@=NzK-@=LI@=JfL '@=I @=GkbdlC@=EciFp!@=Do@=C#q@=[`I@=$Z@<- !@@<._o!@@N<_@S?E>?E> ?E>0?E>@?E>P?E>`?E>p?E>?E>?E>?E>?E>?E>?E>?E>?E??E??E? ?E?0?E?@?E?P?E?`?E?p?E??E??E??E??E??E??E??E??E@?E@?E@ ?E@0?E@@?E@P?E@`?E@p?E@?E@?E@?E@?E@?E@?E@?E@?EA?EA?EA ?EA0?EA@?EAP?EA`?EAp?EA?EA?EA?EA?EA?EA?EA?EA?EB?EB?EB ?EB0?EB@?EBP?EB`?EBp?EB?EB?EB?EB?EB?EB?EB?EB?EC?EC?EC ?EC0?EC@?ECP?EC`?ECp?EC?EC?EC?EC?EC?EC?EC?EC?ED?ED?ED ?ED0?ED@?EDP?ED`?EDp?ED?ED?ED?ED?ED?ED?ED?ED?EE?EE?EE ?EE0?EE@?EEP?EE`?EEp?EE?EE?EE?EE?EE?EE?EE?EE?EF?EF?EF ?EF0?EF@?EFP?EF`?EFp?EF?EF?EF?EF?EF?EF?EF?EF?EG?EG?EG ?EG0?EG@?EGP?EG`?EGp?EG?EG?EG?EG?EG?EG?EG?EG?EH?EH?EH ?EH0?EH@?EHP?EH`?EHp?EH?EH?EH?EH?EH?EH?EH?EH?EI?EI?EI ?EI0?EI@?EIP?EI`?EIp?EI?EI?EI?EI?EI?EI?EI?EI?EJ?EJ?EJ ?EJ0?EJ@?EJP?EJ`?EJp?EJ?EJ?EJ?EJ?EJ?EJ?EJ?EJ?EK?EK?EK ?EK0?EK@?EKP?EK`?EKp?EK?EK?EK?EK?EK?EK?EK?EK?EL?EL?EL ?EL0?EL@?ELP?EL`?ELp?EL?EL?EL?EL?EL?EL?EL?EL?EM?EM?EM ?EM0?EM@?EMP?EM`?EMp?EM?EM?EM?EM?EM?EM?EM?EM?EN?EN?EN ?EN0?EN@?ENP?EN`?ENp?EN?EN?EN?EN?EN?EN?EN?EN?EO?EO?EO ?EO0?EO@?EOP?EO`?EOp?EO?EO?EO?EO?EO?EO?EO?EO?EP?EP?EP ?EP0?EP@?EPP?EP`?EPp?EP?EP?EP?EP?EP?EP?EP?EP?EQ?EQ?EQ ?EQ0?EQ@?EQP?EQ`?EQp?EQ?EQ?EQ?EQ?EQ?EQ?EQ?EQ?ER?ER?ER ?ER0?ER@?ERP?ER`?ERp?ER?ER?ER?ER?ER?ER?ER?ER?ES?ES?ES ?ES0?ES@?ESP?ES`?ESp?ES?ES?ES?ES?ES?ES?ES?ES?ET?ET?ET ?ET0?ET@?ETP?ET`?ETp?ET?ET?ET?ET?ET?ET?ET?ET?EU?EU?EU ?EU0?EU@?EUP?EU`?EUp?EU?EU?EU?EU?EU?EU?EU?EU?EV?EV?EV ?EV0?EV@?EVP?EV`?EVp?EV?EV?EV?EV?EV?EV?EV?EV?EW?EW?EW ?EW0?EW@?EWP?EW`?EWp?EW?EW?EW?EW?EW?EW?EW?EW?EX?EX?EX ?EX0?EX@?EXP?EX`?EXp?EX?EX?EX?EX?EX?EX?EX?EX?EY?EY?EY ?EY0?EY@?EYP?EY`?EYp?EY?EY?EY?EY?EY?EY?EY?EY?EZ?EZ?EZ ?EZ0?EZ@?EZP?EZ`?EZp?EZ?EZ?EZ?EZ?EZ?EZ?EZ?EZ?E[?E[?E[ ?E[0?E[@?E[P?E[`?E[p?E[?E[?E[?E[?E[?E[?E[?E[?E\?E\?E\ ?E\0?E\@?E\P?E\`?E\p?E\?E\?E\?E\?E\?E\?E\?E\?E]?E]?E] ?E]0?E]@?E]P?E]`?E]p?E]?E]?E]?E]?E]?E]?E]?E]?E^?E^?E^ ?E^0?E^@?E^P?E^`?E^p?E^?E^?E^?E^?E^?E^?E^?E^?E_?E_?E_ ?E_0?E_@?E_P?E_`?E_p?E_?E_?E_?E_?E_?E_?E_?E_?E`?E`?E` ?E`0?E`@?E`P?E``?E`p?E`?E`?E`?E`?E`?E`?E`?E`?Ea?Ea?Ea ?Ea0?Ea@?EaP?Ea`?Eap?Ea?Ea?Ea?Ea?Ea?Ea?Ea?Ea?Eb?Eb?Eb ?Eb0?Eb@?EbP?Eb`?Ebp?Eb?Eb?Eb?Eb?Eb?Eb?Eb?Eb?Ec?Ec?Ec ?Ec0?Ec@?EcP?Ec`?Ecp?Ec?Ec?Ec?Ec?Ec?Ec?Ec?Ec?Ed?Ed?Ed ?Ed0?Ed@?EdP?Ed`?Edp?Ed?Ed?Ed?Ed?Ed?Ed?Ed?Ed?Ee?Ee?Ee ?Ee0?Ee@?EeP?Ee`?Eep?Ee?Ee?Ee?Ee?Ee?Ee?Ee?Ee?Ef?Ef?Ef ?Ef0?Ef@?EfP?Ef`?Efp?Ef?Ef?Ef?Ef?Ef?Ef?Ef?Ef?Eg?Eg?Eg ?Eg0?Eg@?EgP?Eg`?Egp?Eg?Eg?Eg?Eg?Eg?Eg?Eg?Eg?Eh?Eh?Eh ?Eh0?Eh@?EhP?Eh`?Ehp?Eh?Eh?Eh?Eh?Eh?Eh?Eh?Eh?Ei?Ei?Ei ?Ei0?Ei@?EiP?Ei`?Eip?Ei?Ei?Ei?Ei?Ei?Ei?Ei?Ei?Ej?Ej?Ej ?Ej0?Ej@?EjP?Ej`?Ejp?Ej?Ej?Ej?Ej?Ej?Ej?Ej?Ej?Ek?Ek?Ek ?Ek0?Ek@?EkP?Ek`?Ekp?Ek?Ek?Ek?Ek?Ek?Ek?Ek?Ek?El?El?El ?El0?El@?ElP?El`?Elp?El?El?El?El?El?El?El?El?Em?Em?Em ?Em0?Em@?EmP?Em`?Emp?Em?Em?Em?Em?Em?Em?Em?Em?En?En?En ?En0?En@?EnP?En`?Enp?En?En?En?En?En?En?En?En?Eo?Eo?Eo ?Eo0?Eo@?EoP?Eo`?Eop?Eo?Eo?Eo?Eo?Eo?Eo?Eo?Eo?Ep?Ep?Ep ?Ep0?Ep@?EpP?Ep`?Epp?Ep?Ep?Ep?Ep?Ep?Ep?Ep?Ep?Eq?Eq?Eq ?Eq0?Eq@?EqP?Eq`?Eqp?Eq?Eq?Eq?Eq?Eq?Eq?Eq?Eq?Er?Er?Er ?Er0?Er@?ErP?Er`?Erp?Er?Er?Er?Er?Er?Er?Er?Er?Es?Es?Es ?Es0?Es@?EsP?Es`?Esp?Es?Es?Es?Es?Es?Es?Es?Es?Et?Et?Et ?Et0?Et@?EtP?Et`?Etp?Et?Et?Et?Et?Et?Et?Et?Et?Eu?Eu?Eu ?Eu0?Eu@?EuP?Eu`?Eup?Eu?Eu?Eu?Eu?Eu?Eu?Eu?Eu?Ev?Ev?Ev ?Ev0?Ev@?EvP?Ev`?Evp?Ev?Ev?Ev?Ev?Ev?Ev?Ev?Ev?Ew?Ew?Ew ?Ew0?Ew@?EwP?Ew`?Ewp?Ew?Ew?Ew?Ew?Ew?Ew?Ew?Ew?Ex?Ex?Ex ?Ex0?Ex@?ExP?Ex`?Exp?Ex?Ex?Ex?Ex?Ex?Ex?Ex?Ex?Ey?Ey?Ey ?Ey0?Ey@?EyP?Ey`?Eyp?Ey?Ey?Ey?Ey?Ey?Ey?Ey?Ey?Ez?Ez?Ez ?Ez0?Ez@?EzP?Ez`?Ezp?Ez?Ez?Ez?Ez?Ez?Ez?Ez?Ez?E{?E{?E{ ?E{0?E{@?E{P?E{`?E{p?E{?E{?E{?E{?E{?E{?E{?E{?E|?E|?E| ?E|0?E|@?E|P?E|`?E|p?E|?E|?E|?E|?E|?E|?E|?E|?E}?E}?E} ?E}0?E}@?E}P?E}`?E}p?E}?E}?E}?E}?E}?E}?E}?E}?E~?E~?E~ ?E~0?E~@?E~P?E~`?E~p?E~?E~?E~?E~?E~?E~?E~?E~?E?E?E ?E0?E@?EP?E`?Ep?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E€?Eˆ?E?E˜?E ?E¨?E°?E¸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EÀ?EÈ?EÐ?EØ?Eà?Eè?Eð?Eø?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EĀ?EĈ?EĐ?EĘ?EĠ?EĨ?Eİ?Eĸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eŀ?Eň?EŐ?EŘ?EŠ?EŨ?EŰ?EŸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eƀ?Eƈ?EƐ?EƘ?EƠ?Eƨ?Eư?EƸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eǀ?ELj?Eǐ?Eǘ?EǠ?EǨ?Eǰ?EǸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EȀ?EȈ?EȐ?EȘ?EȠ?EȨ?EȰ?Eȸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eɀ?EɈ?Eɐ?Eɘ?Eɠ?Eɨ?Eɰ?Eɸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eʀ?Eʈ?Eʐ?Eʘ?Eʠ?Eʨ?Eʰ?Eʸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eˀ?Eˈ?Eː?E˘?Eˠ?E˨?E˰?E˸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?È?Ë?E̐?E̘?E̠?Ę?Ḛ?E̸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?È?E͈?E͐?E͘?E͠?Eͨ?EͰ?E͸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E΀?EΈ?Eΐ?EΘ?EΠ?EΨ?Eΰ?Eθ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eπ?Eψ?Eϐ?EϘ?EϠ?EϨ?Eϰ?Eϸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EЀ?EЈ?EА?EИ?EР?EШ?Eа?Eи?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eр?Eш?Eѐ?Eј?EѠ?EѨ?EѰ?EѸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EҀ?E҈?EҐ?EҘ?EҠ?EҨ?EҰ?EҸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EӀ?Eӈ?EӐ?EӘ?EӠ?EӨ?EӰ?EӸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EԀ?EԈ?EԐ?EԘ?EԠ?EԨ?E԰?EԸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?EՀ?EՈ?EՐ?E՘?Eՠ?Eը?Eհ?Eո?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eր?Eֈ?E֐?E֘?E֠?E֨?Eְ?Eָ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E׀?E׈?Eא?Eט?Eנ?Eר?Eװ?E׸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E؀?E؈?Eؐ?Eؘ?Eؠ?Eب?Eذ?Eظ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eـ?Eو?Eِ?E٘?E٠?E٨?Eٰ?Eٸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eڀ?Eڈ?Eڐ?Eژ?Eڠ?Eڨ?Eڰ?Eڸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eۀ?Eۈ?Eې?Eۘ?E۠?Eۨ?E۰?E۸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E܀?E܈?Eܐ?Eܘ?Eܠ?Eܨ?Eܰ?Eܸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E݀?E݈?Eݐ?Eݘ?Eݠ?Eݨ?Eݰ?Eݸ?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?Eހ?Eވ?Eސ?Eޘ?Eޠ?Eި?Eް?E޸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E߀?E߈?Eߐ?Eߘ?Eߠ?Eߨ?E߰?E߸?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E ?E(?E0?E8?E@?EH?EP?EX?E`?Eh?Ep?Ex?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?E?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F ?F ?F ?F ?F ?F ?F ?F $?F (?F ,?F 0?F 4?F 8?F <?F @?F D?F H?F L?F P?F T?F X?F \?F `?F d?F h?F l?F p?F t?F x?F |?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F $?F (?F ,?F 0?F 4?F 8?F <?F @?F D?F H?F L?F P?F T?F X?F \?F `?F d?F h?F l?F p?F t?F x?F |?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F $?F (?F ,?F 0?F 4?F 8?F <?F @?F D?F H?F L?F P?F T?F X?F \?F `?F d?F h?F l?F p?F t?F x?F |?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F $?F (?F ,?F 0?F 4?F 8?F <?F @?F D?F H?F L?F P?F T?F X?F \?F `?F d?F h?F l?F p?F t?F x?F |?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F $?F (?F ,?F 0?F 4?F 8?F <?F @?F D?F H?F L?F P?F T?F X?F \?F `?F d?F h?F l?F p?F t?F x?F |?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F ?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F?F?F?F?F ?F$?F(?F,?F0?F4?F8?F<?F@?FD?FH?FL?FP?FT?FX?F\?F`?Fd?Fh?Fl?Fp?Ft?Fx?F|?F?F?F?F?F?F?F?F?=F*?ՙF?MFJ?F?8Fk/?jSF K?~F"f?} F$?zlF%?tF';?n6F(?IHGF*[?04F+ ?;F-|)>ޚF/ E>0F0`>ŐF2,|>F3>,F5L> F6>TF8l>e F9> F;#>i(F=>>F>Z> F@=w>FA͒>DFC]>q~FD>RFF}>FH>{8FI>b%FK.9>CFLU>A)FNNq>hdFOތ>cFQn>C@FR>/1FT>$a@FV>NSFW>.YFY?3>%>,FZO>"F\_l>%dF]>4s`F_>7ȐFa>(Fb>SjFd/>0Fe>08FgP.>FhJ>0dFjpe>-@Fl>7Fm>(VFo >DɰFp>=}Fr@>9$Fs >HdFua)>8xFvE> hFx`>4 Fz|>+F{>:`F}1>7lF~>C4F(>TlF>O F>oF >FI.?. F;?@ FI?VYKFW?c&Fif?l/F1f?r JF?tFtF?pF?n;FQ?mF?bF?\DF?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?FB?FD?FF?FH?FJ?FL?FN?FP?FR?FT?FV?FX?FZ?F\?F^?F`?Fb?Fd?Ff?Fh?Fj?Fl?Fn?Fp?Fr?Ft?Fv?Fx?Fz?F|?F~?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F?F ?F ?F?F?F?F?F?F?F?F?F?F ?F"?F$?F&?F(?F*?F,?F.?F0?F2?F4?F6?F8?F:?F<?F>?F@?spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_binning.py000066400000000000000000000232431511632712700264300ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test binning.py module.""" # STDLIB import os # THIRD PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.utils.data import get_pkg_data_filename # LOCAL from synphot import binning, exceptions, specio from synphot.utils import merge_wavelengths, generate_wavelengths @pytest.mark.parametrize( ('in_arr', 'out_arr'), [(np.arange(10, 20, dtype=float), np.arange(9.5, 20)), (2 ** np.arange(1, 10), [1, 3, 6, 12, 24, 48, 96, 192, 384, 640])]) def test_calculate_bin_edges(in_arr, out_arr): """Test bin edge calculations for even and uneven bins.""" edges = binning.calculate_bin_edges(in_arr) np.testing.assert_array_equal(edges.value, out_arr) assert edges.unit == u.AA @pytest.mark.parametrize( ('in_arr', 'out_arr'), [([1, 2, 4, 10, 20], [1, 2, 6, 10]), ([1, 2], [1])]) def test_calculate_bin_widths(in_arr, out_arr): """Test bin width calculations for multiple and single bins.""" widths = binning.calculate_bin_widths(in_arr) np.testing.assert_array_equal(widths.value, out_arr) assert widths.unit == u.AA @pytest.mark.parametrize( ('in_arr', 'out_arr'), [([1, 2, 4, 10, 20], [1.5, 2.5, 5.5, 14.5]), ([1, 2], [1.5])]) def test_calculate_bin_centers(in_arr, out_arr): """Test bin center calculations.""" centers = binning.calculate_bin_centers(in_arr) np.testing.assert_array_equal(centers.value, out_arr) assert centers.unit == u.AA def test_center_edge_center_roundtrip(): """Test that we get back the same centers.""" centers = [1, 2, 4, 10, 20] * u.micron calc_centers = binning.calculate_bin_centers( binning.calculate_bin_edges(centers)) np.testing.assert_array_equal(calc_centers.value, centers.value) assert calc_centers.unit == centers.unit @pytest.mark.parametrize( ('arr'), [1 * u.AA, np.array([1]) * u.AA]) def test_calculate_bin_exceptions(arr): """Test binning.py raising appropriate exceptions.""" with pytest.raises(exceptions.SynphotError): binning.calculate_bin_edges(arr) with pytest.raises(exceptions.SynphotError): binning.calculate_bin_widths(arr) with pytest.raises(exceptions.SynphotError): binning.calculate_bin_centers(arr) class TestBinRange: """Test wavelength and pixel range calculations.""" def setup_class(self): self.bins = generate_wavelengths( minwave=1003, maxwave=11001, delta=1.0, log=False)[0].value def test_wave_range_exceptions(self): """Test for appropriate wavelength range exceptions.""" with pytest.raises(exceptions.SynphotError): binning.wave_range(self.bins, 5000, 100, mode='up') with pytest.raises(exceptions.SynphotError): binning.wave_range(self.bins, 5000, 1.3) with pytest.raises(exceptions.OverlapError): binning.wave_range(self.bins, 1010, 100) with pytest.raises(exceptions.OverlapError): binning.wave_range(self.bins, 11000, 1000) with pytest.raises(exceptions.OverlapError): binning.wave_range(self.bins, 600, 1000) def test_wave_range_mode_none(self): """Test wavelength range calculations for mode='none'.""" w1, w2 = binning.wave_range(self.bins, 5000.4, 0, mode='none') assert w1 == w2 w = binning.wave_range(self.bins, 5000, 2, mode='none') assert w == (4999, 5001) w = binning.wave_range(self.bins, 5000.25, 3, mode='none') assert w == (4998.75, 5001.75) w = binning.wave_range(self.bins, 5000.5, 4, mode='none') assert w == (4998.5, 5002.5) @pytest.mark.parametrize( ('cenwave', 'npix', 'ans', 'mode'), [(5002, 1, (5001.5, 5002.5), 'round'), (5005, 2, (5004.5, 5006.5), 'round'), (5005, 3, (5003.5, 5006.5), 'round'), (5004.25, 4, (5002.5, 5006.5), 'round'), (5004.25, 5, (5001.5, 5006.5), 'round'), (5004.5, 6, (5001.5, 5007.5), 'round'), (5004.5, 7, (5001.5, 5008.5), 'round'), (5004, 1, (5003.5, 5004.5), 'min'), (5004, 2, (5003.5, 5004.5), 'min'), (5004, 3, (5002.5, 5005.5), 'min'), (5006.25, 4, (5004.5, 5007.5), 'min'), (5006.25, 5, (5004.5, 5008.5), 'min'), (5006.5, 6, (5003.5, 5009.5), 'min'), (5006.5, 7, (5003.5, 5009.5), 'min'), (5004, 1, (5003.5, 5004.5), 'max'), (5004, 2, (5002.5, 5005.5), 'max'), (5004, 3, (5002.5, 5005.5), 'max'), (5006.25, 4, (5003.5, 5008.5), 'max'), (5006.25, 5, (5003.5, 5009.5), 'max'), (5006.5, 6, (5003.5, 5009.5), 'max'), (5006.5, 7, (5002.5, 5010.5), 'max')]) def test_wave_range_mode(self, cenwave, npix, ans, mode): """Test wavelength range calculations for all modes.""" w = binning.wave_range(self.bins, cenwave, npix, mode=mode) assert w == ans def test_wave_range_descending_order(self): """Make sure calculations are correct for bins in descending order.""" cenwave = 5004.5 npix = 7 assert (binning.wave_range(self.bins, cenwave, npix) == binning.wave_range(self.bins[::-1], cenwave, npix)) def test_pixel_range_exceptions(self): """Test for appropriate pixel range exceptions.""" with pytest.raises(exceptions.SynphotError): binning.pixel_range(self.bins, (5000, 5001), mode='up') with pytest.raises(exceptions.OverlapError): binning.pixel_range(self.bins, (500, 5001)) with pytest.raises(exceptions.OverlapError): binning.pixel_range(self.bins, (5000, 50010)) @pytest.mark.parametrize( ('waverange', 'ans', 'mode'), [((5000.5, 5006.5), 6, 'none'), ((5000, 5008), 8, 'none'), ((5000, 5000), 0, 'round'), ((4999.5, 5000.5), 1, 'round'), ((5000, 5002), 2, 'round'), ((4999.6, 5008.8), 9, 'round'), ((5000, 5002), 1, 'min'), ((5000.5, 5002.5), 2, 'min'), ((5000.5, 5004.4), 3, 'min'), ((5000.2, 5004.5), 4, 'min'), ((5000, 5000.1), 1, 'max'), ((5000.5, 5002.5), 2, 'max'), ((5000.5, 5002.6), 3, 'max'), ((5001.2, 5004.5), 4, 'max')]) def test_pixel_range_mode(self, waverange, ans, mode): """Test pixel range calculations for all modes.""" npix = binning.pixel_range(self.bins, waverange, mode=mode) assert npix == ans @pytest.mark.parametrize( ('waverange', 'ans', 'mode'), [((5000, 5000.1), 0.1, 'none'), ((4999.8, 5000), 0.2, 'none')]) def test_pixel_range_almosteq(self, waverange, ans, mode): """Like :func:`test_pixel_range_mode` but without exact match.""" npix = binning.pixel_range(self.bins, waverange, mode=mode) np.testing.assert_allclose(npix, ans) def test_pixel_range_descending_order(self): """Make sure calculations are correct for inputs in descending order.""" waverange = np.array([4999.6, 5008.8]) assert (binning.pixel_range(self.bins, waverange) == binning.pixel_range(self.bins[::-1], waverange)) assert (binning.pixel_range(self.bins, waverange) == binning.pixel_range(self.bins, waverange[::-1])) class TestCalcbinflux: """Test both C-ext and Python versions of calcbinflux(). This is a simplified version of :func:`synphot.observation.Observation.binspec`. """ def setup_class(self): # Get bandpass data for interpolation. hdr, wave, thru = specio.read_fits_spec( get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests'), flux_col='THROUGHPUT') # Binned data. bins = generate_wavelengths( minwave=6000, maxwave=6010, delta=1.0, log=False)[0] edges = binning.calculate_bin_edges(bins) # Merge bin edges and centers in with the natural waveset. spwave = merge_wavelengths( merge_wavelengths(wave.value, edges.value), bins.value) # Compute indices associated to each endpoint. indices = np.searchsorted(spwave, edges.value) i_beg = indices[:-1] i_end = indices[1:] # Prepare integration variables. # In old test, this was bandpass * 1 FLAM, which is just bandpass # value. flux = np.interp(spwave, wave.value, thru.value) avflux = (flux[1:] + flux[:-1]) * 0.5 deltaw = spwave[1:] - spwave[:-1] self.size = bins.size self.i_beg = i_beg self.i_end = i_end self.avflux = avflux self.deltaw = deltaw # PYTHON: Sum over each bin. self.binflux_py, self.intwave_py = binning._slow_calcbinflux( self.size, self.i_beg, self.i_end, self.avflux, self.deltaw) def test_c_ext(self): # C-EXT: Sum over each bin. from synphot import synphot_utils binflux_c, intwave_c = synphot_utils.calcbinflux( self.size, self.i_beg, self.i_end, self.avflux, self.deltaw) # Compare between Python and C-ext np.testing.assert_allclose(self.binflux_py, binflux_c) np.testing.assert_allclose(self.intwave_py, intwave_c) def test_py_old(self): # Compare with expected values. # Flux values are inherited from old test, compare at 0.01% relative # diff. flux_ans = np.array( [0.12265425, 0.12226972, 0.12184207, 0.12141429, 0.12098646, 0.1205586, 0.1201307, 0.11970269, 0.11927488, 0.11884699]) np.testing.assert_allclose(self.binflux_py, flux_ans, rtol=1e-4) np.testing.assert_array_equal(self.intwave_py, np.ones(self.size)) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_blackbody.py000066400000000000000000000017071511632712700267370ustar00rootroot00000000000000"""This should be updated if blackbody.py is removed from synphot.""" import numpy as np from astropy import constants as const from astropy import units as u from synphot.blackbody import blackbody_nu from synphot.units import FNU # This test was removed from astropy in # https://github.com/astropy/astropy/pull/9282 # but the rest of blackbody.py tests are still over there on astropy. def test_blackbody_synphot(): """Test that it is consistent with IRAF SYNPHOT BBFUNC.""" # Solid angle of solar radius at 1 kpc fac = np.pi * (const.R_sun / const.kpc) ** 2 * u.sr with np.errstate(all='ignore'): flux = blackbody_nu([100, 1, 1000, 1e4, 1e5] * u.AA, 5000) * fac assert flux.unit == FNU # Special check for overflow value (SYNPHOT gives 0) assert np.log10(flux[0].value) < -143 np.testing.assert_allclose( flux.value[1:], [0, 2.01950807e-34, 3.78584515e-26, 1.90431881e-27], rtol=0.01) # 1% accuracy spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_integrator.py000066400000000000000000000162271511632712700271660ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test different integration methods. Things not covered here but somewhere else: * ``conf.set_temp('default_integrator', 'analytical')`` and its default covered in ``spectrum.rst``. * The following integrations are tested in ``test_spectrum.py``: * ``BlackBodyNorm1D`` source, and indirectly, ``BlackBody1D``. * ``Box1D`` bandpass. * ``Empirical1D`` source and bandpass. * ``GaussianFlux1D`` source. * ``PowerLawFlux1D`` source. * Compound source and bandpass. """ # THIRD-PARTY import numpy as np import pytest from astropy import units as u from astropy.modeling.models import Const1D from astropy.tests.helper import assert_quantity_allclose from numpy.testing import assert_allclose from scipy.integrate import trapezoid # LOCAL from synphot import models, units from synphot.exceptions import SynphotError from synphot.spectrum import SourceSpectrum, SpectralElement class TestSourceConstFlux1D: def setup_class(self): self.sp = SourceSpectrum(models.ConstFlux1D, amplitude=1 * units.FLAM) self.w = np.arange(5499, 5600) * u.AA self.ans_flam = 100 * (u.erg / (u.cm * u.cm * u.s)) self.ans_photlam = 2.79343128e+13 * (u.ph / (u.cm * u.cm * u.s)) def test_integrate(self): assert_quantity_allclose( self.sp.integrate(wavelengths=self.w), self.ans_photlam) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, flux_unit='flam'), self.ans_flam) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, flux_unit='flam', integration_type='analytical'), self.ans_flam) with pytest.raises(SynphotError, match='cannot operate in Jy'): self.sp.integrate(wavelengths=self.w, flux_unit=u.Jy) @pytest.mark.xfail(reason='Cannot convert to PHOTLAM') def test_integrate_wontfix(self): """Constant spectrum in FLAM is not constant in PHOTLAM, so cannot apply simple unit conversion to integrated flux. """ assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, integration_type='analytical'), self.ans_photlam) def test_integrate_freq_space(self): """When flux is constant in frequency space.""" sp = SourceSpectrum(models.ConstFlux1D, amplitude=1 * u.Jy) nu = self.w.to(u.Hz, u.spectral()) # Answer in this setup is basically # ((max(nu) - min(nu)) * u.Jy).to(u.erg / (u.cm * u.cm * u.s)) ans_flam = 9.73703017e-11 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose( sp.integrate(wavelengths=self.w, flux_unit='flam'), ans_flam) assert_quantity_allclose( sp.integrate(wavelengths=self.w, flux_unit='flam', integration_type='analytical'), ans_flam) assert_quantity_allclose( sp.integrate(wavelengths=nu, flux_unit='flam'), ans_flam) assert_quantity_allclose( sp.integrate(wavelengths=nu, flux_unit='flam', integration_type='analytical'), ans_flam) def test_bandpass_Const1D(): """Test Const1D bandpass and a few optional logic routes.""" bp = SpectralElement(Const1D, amplitude=1) w = np.arange(5499, 5600) * u.AA ans = 100 * u.AA assert_quantity_allclose(bp.integrate(wavelengths=w), ans) # Const1D from astropy has no integrate method, so this silently falls # back to trapezoid integration anyway. assert_quantity_allclose( bp.integrate(wavelengths=w, integration_type='analytical'), ans) with pytest.raises(SynphotError, match='waveset is undefined'): bp.integrate() with pytest.raises(SynphotError, match='flux_unit cannot be used'): bp.integrate(wavelengths=w, flux_unit='flam') with pytest.raises(NotImplementedError, match='not a supported integration type'): bp.integrate(wavelengths=w, integration_type='notreal') def test_bandpass_Gaussian1D(): bp = SpectralElement( models.Gaussian1D, amplitude=0.8, mean=5000, stddev=130) ans = 260.68913672 * u.AA assert_quantity_allclose(bp.integrate(), ans) assert_quantity_allclose(bp.integrate(integration_type='analytical'), ans, rtol=1e-6) # Equivalent width is basically the integral. assert_quantity_allclose(bp.equivwidth(), ans) assert_quantity_allclose(bp.equivwidth(integration_type='analytical'), ans, rtol=1e-6) def test_bandpass_Lorentz1D(): bp = SpectralElement(models.Lorentz1D, amplitude=0.8, x_0=5000, fwhm=130) ans = 161.28101053 * u.AA assert_quantity_allclose(bp.integrate(), ans) assert_quantity_allclose(bp.integrate(integration_type='analytical'), ans) def test_source_Lorentz1D(): sp = SourceSpectrum( models.Lorentz1D, amplitude=1 * units.PHOTLAM, x_0=5000, fwhm=130) ans_photlam = 201.60126316 * (u.ph / (u.cm * u.cm * u.s)) ans_flam = 8.06013348e-10 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose(sp.integrate(), ans_photlam) assert_quantity_allclose(sp.integrate(flux_unit='flam'), ans_flam) assert_quantity_allclose( sp.integrate(integration_type='analytical'), ans_photlam) # Flux unit conversion is iffy here because we do not have proper # LorentzFlux1D model. assert_quantity_allclose( sp.integrate(flux_unit='flam', integration_type='analytical'), ans_flam, rtol=0.01) def test_bandpass_RickerWavelet1D(): """Does not make much sense when transmission is negative, so this makes more sense as equivalent width calculation, which is also the integral. """ bp = SpectralElement( models.RickerWavelet1D, amplitude=1, x_0=5000, sigma=100) ans = 242.20770777 * u.AA assert_quantity_allclose(bp.equivwidth(), ans) assert_quantity_allclose(bp.equivwidth(integration_type='analytical'), ans, rtol=5e-3) with pytest.raises(NotImplementedError, match='Partial analytic'): bp.equivwidth(integration_type='analytical', wavelengths=np.arange(4900, 5200) * u.AA) with pytest.raises(NotImplementedError, match='Partial analytic'): bp.equivwidth(integration_type='analytical', wavelengths=np.arange(4800, 5100) * u.AA) def test_source_RickerWavelet1D(): pytest.xfail( 'Not sure if this test makes sense as negative flux is unphysical') def test_bandpass_Trapezoid1D(): """Trapezoid integration of a trapezoid. How meta!""" bp = SpectralElement( models.Trapezoid1D, amplitude=0.8, x_0=5000, width=10, slope=0.25) ans = 10.56 * u.AA assert_quantity_allclose(bp.integrate(), ans) assert_quantity_allclose(bp.integrate(integration_type='analytical'), ans) def test_trapezoid_box1d(): """Test the underlying trapezoid integration.""" m = models.Box1D(amplitude=1, x_0=5000, width=10) # Ascending. x = m.sampleset() assert_allclose(trapezoid(m(x), x=x), 10) # Descending. x2 = x[::-1] assert_allclose(abs(trapezoid(m(x2), x=x2)), 10) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_models.py000066400000000000000000000223311511632712700262640ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test models.py module. .. note:: ``GaussianAbsorption1D`` and ``RedshiftScaleFactor`` are already being tested within existing Astropy PRs. ``get_waveset()`` is tested in test_spectrum.py. """ # STDLIB import os import warnings # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.modeling.models import Const1D from astropy.utils.data import get_pkg_data_filename from astropy.utils.exceptions import AstropyUserWarning # LOCAL from synphot import specio, units from synphot.models import (BlackBody1D, ConstFlux1D, Empirical1D, PowerLawFlux1D, get_metadata) def setup_module(module): import astropy.constants as const from astropy.constants import si, astropyconst13 const.sigma_sb = si.sigma_sb = astropyconst13.sigma_sb const.h = si.h = astropyconst13.h const.k_B = si.k_B = astropyconst13.k_B def teardown_module(module): import astropy.constants as const from astropy.constants import si, astropyconst20 const.sigma_sb = si.sigma_sb = astropyconst20.sigma_sb const.h = si.h = astropyconst20.h const.k_B = si.k_B = astropyconst20.k_B class TestBlackBody1D: """Test BlackBody1D model.""" def setup_class(self): self.m1 = BlackBody1D(temperature=5500) def test_lambda_max(self): np.testing.assert_allclose(self.m1.lambda_max, 5268.67, rtol=1e-5) def test_sampleset(self): f1 = self.m1(self.m1.sampleset()) assert f1[0] == 0 assert f1[-1] < self.m1(self.m1.lambda_max) * 0.05 def test_eval(self): np.testing.assert_allclose( self.m1(np.arange(3000, 3100, 10)), [1.20906423e+17, 1.22815123e+17, 1.24735543e+17, 1.26667499e+17, 1.28610806e+17, 1.30565276e+17, 1.32530722e+17, 1.34506953e+17, 1.36493780e+17, 1.38491010e+17]) def test_multi_n_models(self): m2 = BlackBody1D(temperature=[100, 10000], n_models=2) np.testing.assert_allclose( m2.lambda_max, [2.8977685e5, 2897.7685], rtol=1e-5) np.testing.assert_allclose( m2(20000), [2.14331496e-14, 3.55819086e+17]) class TestConstFlux1D: """Test ConstFlux1D model.""" def setup_class(self): self.w = np.arange(1, 21000, 5000) @pytest.mark.parametrize( 'amplitude', [1, 1 * units.PHOTNU, 1 * units.FLAM, 1 * units.FNU, 1 * u.Jy, 1 * u.mJy]) def test_linear(self, amplitude): if isinstance(amplitude, u.Quantity): ans = amplitude.value flux_unit = amplitude.unit else: ans = amplitude flux_unit = units.PHOTLAM m = ConstFlux1D(amplitude=amplitude) f = units.convert_flux(self.w, m(self.w) * units.PHOTLAM, flux_unit) assert m._flux_unit == flux_unit np.testing.assert_allclose(f.value, ans) @pytest.mark.parametrize( ('in_unit', 'out_unit', 'val'), [(u.STmag, units.FLAM, 3.63e-9), (u.ABmag, units.FNU, 3.63e-20)]) def test_mag(self, in_unit, out_unit, val): m = ConstFlux1D(amplitude=0 * in_unit) f = units.convert_flux(self.w, m(self.w) * units.PHOTLAM, out_unit) np.testing.assert_allclose(f.value, val, rtol=2.5e-4) def test_multi_n_models(self): m = ConstFlux1D(amplitude=[1, 2], n_models=2) np.testing.assert_array_equal(m(1000), [1, 2]) @pytest.mark.parametrize( 'flux_unit', [u.count, units.OBMAG, units.VEGAMAG, u.AA]) def test_invalid_units(self, flux_unit): with pytest.raises(NotImplementedError): ConstFlux1D(amplitude=1 * flux_unit) class TestEmpirical1D: """Test Empirical1D model.""" def setup_class(self): filename = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w_x_grw70d5824.fits'), package='synphot.tests') hdr, x, f = specio.read_spec(filename) y = units.convert_flux(x, f, units.PHOTLAM) self.flux_flam = f.value self.w = x.value self.m = Empirical1D(points=self.w, lookup_table=y.value) def test_sampleset(self): np.testing.assert_array_equal(self.m.sampleset(), self.w) def test_eval(self): # Sample at existing wavelength (no interpolation) x = self.w[5000] y = units.convert_flux(x, self.m(x), units.FLAM) np.testing.assert_allclose(y.value, self.flux_flam[5000]) # Sampling with interpolation w = [4956.8, 4959.55, 4962.3] y = units.convert_flux(w, self.m(w), units.FLAM) np.testing.assert_allclose( y.value, [8.57166622e-15, 8.86174843e-15, 8.68707743e-15], rtol=1e-6) # Descending order w2 = w[::-1] f2 = self.m(w2) y = units.convert_flux(w2, f2, units.FLAM) np.testing.assert_allclose( y.value, [8.68707743e-15, 8.86174843e-15, 8.57166622e-15], rtol=1e-6) # New model with descending order m2 = Empirical1D(points=w2, lookup_table=f2) y = units.convert_flux(w, m2(w), units.FLAM) np.testing.assert_allclose( y.value, [8.57166622e-15, 8.86174843e-15, 8.68707743e-15], rtol=1e-6) @pytest.mark.parametrize( ('keep_neg', 'ans'), [(True, [-1.1, 0, 1.1]), (False, [0, 0, 1.1])]) def test_neg_array(self, keep_neg, ans): with warnings.catch_warnings(): warnings.filterwarnings( 'ignore', message=r'.*contained negative flux or throughput.*', category=AstropyUserWarning) m2 = Empirical1D(points=[1, 2, 3], lookup_table=[-1.1, 0, 1.1], keep_neg=keep_neg) np.testing.assert_array_equal(m2([1, 2, 3]), ans) if not keep_neg: assert 'NegativeFlux' in m2.meta['warnings'] @pytest.mark.parametrize( ('keep_neg', 'ans'), [(True, -1), (False, 0)]) def test_neg_scalar(self, keep_neg, ans): with warnings.catch_warnings(): warnings.filterwarnings( 'ignore', message=r'.*contained negative flux or throughput.*', category=AstropyUserWarning) m2 = Empirical1D(points=[1, 2, 3], lookup_table=[-1, 0, 1], keep_neg=keep_neg) np.testing.assert_array_equal(m2(1), ans) if not keep_neg: assert 'NegativeFlux' in m2.meta['warnings'] @pytest.mark.parametrize( ('tab', 'ans'), [([0, 1, 0], True), ([0, 1, 1], False)]) def test_taper(self, tab, ans): m2 = Empirical1D(points=[1, 2, 3], lookup_table=tab) assert m2.is_tapered() is ans def test_extrap(self): """Test extrapolation of constant at both ends, as done in ASTROLIB PYSYNPHOT. """ m2 = Empirical1D( points=[1000, 2000, 3000, 4000], lookup_table=[0.01, 5.0, 10.6, 1.5]) assert m2(900) == 0.01 assert m2(10000) == 1.5 np.testing.assert_allclose( m2([900, 1000, 1500, 10000]), [0.01, 0.01, 2.505, 1.5]) class TestPowerLawFlux1D: """Test PowerLawFlux1D model.""" def setup_class(self): self.w = np.arange(3000, 3100, 10) self.m = PowerLawFlux1D(amplitude=1, x_0=6000, alpha=4) def test_eval(self): assert self.m._flux_unit == units.PHOTLAM np.testing.assert_allclose( self.m(self.w), [16, 15.78843266, 15.58035072, 15.37568551, 15.17436992, 14.97633838, 14.78152682, 14.5898726, 14.40131453, 14.21579277], rtol=1e-6) def test_normalization(self): assert self.m(self.m.x_0) == 1 def test_multi_n_models(self): m2 = PowerLawFlux1D( amplitude=[1, 1] * units.FLAM, x_0=[0.3, 0.305] * u.micron, alpha=[4, 1], n_models=2) y = units.convert_flux( self.w, m2(self.w, model_set_axis=False) * units.PHOTLAM, units.FLAM) ans = [[1, 0.98677704, 0.97377192, 0.96098034, 0.94839812, 0.93602115, 0.92384543, 0.91186704, 0.90008216, 0.88848705], [1.01666667, 1.01328904, 1.00993377, 1.00660066, 1.00328947, 1, 0.99673203, 0.99348534, 0.99025974, 0.98705502]] np.testing.assert_allclose(y.value, ans, rtol=1e-6) @pytest.mark.parametrize('flux_unit', [u.STmag, u.ABmag]) def test_valid_mag(self, flux_unit): m = PowerLawFlux1D(amplitude=1 * flux_unit, x_0=6000, alpha=4) assert m.amplitude == 1 assert m._flux_unit == flux_unit @pytest.mark.parametrize( 'flux_unit', [u.count, units.OBMAG, units.VEGAMAG, u.AA]) def test_invalid_units(self, flux_unit): with pytest.raises(NotImplementedError): PowerLawFlux1D(amplitude=1 * flux_unit, x_0=5000, alpha=4) def test_get_metadata(): m1 = Const1D() m1.meta['description'] = 'a constant' m1.meta['foo'] = 42.0 m2 = Const1D() m2.meta['description'] = 'another constant' m3 = Const1D() m3.meta[42] = 'answer' m = (m1 + m2) * m3 meta = get_metadata(m) keys = list(meta.keys()) assert len(keys) == 3 assert meta['description'] == 'another constant' assert meta['foo'] == 42 assert meta[42] == 'answer' spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_observation.py000066400000000000000000000431231511632712700273360ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test observation.py module.""" # STDLIB import os import warnings # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.modeling.models import Const1D from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.utils.exceptions import (AstropyDeprecationWarning, AstropyUserWarning) # LOCAL from synphot.tests.test_units import _area from synphot import exceptions, units from synphot.compat import HAS_SPECUTILS # noqa from synphot.models import ( BlackBodyNorm1D, Box1D, ConstFlux1D, Empirical1D, GaussianFlux1D ) from synphot.observation import Observation from synphot.spectrum import SourceSpectrum, SpectralElement # Global test data files _specfile = get_pkg_data_filename( os.path.join('data', 'grw_70d5824_stisnic_005.fits'), package='synphot.tests' ) _bandfile = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests' ) class TestObservation: """Test Observation (most of them).""" def setup_class(self): sp = SourceSpectrum( ConstFlux1D, amplitude=1 * units.FLAM, meta={'warnings': {'w1': 'spec warn', 'w2': 'foo'}}) bp = SpectralElement.from_file(_bandfile) bp.warnings = {'w1': 'band warn'} w = np.arange(1000, 11001, dtype=np.float64) self.obs = Observation(sp, bp, binset=w) def test_invalid_input_spec(self): with pytest.raises(exceptions.SynphotError): Observation(self.obs.bandpass, self.obs.bandpass) with pytest.raises(exceptions.SynphotError): Observation(self.obs.spectrum, self.obs.spectrum) def test_inherit_warnings(self): assert sorted(self.obs.warnings) == ['w1', 'w2'] assert self.obs.warnings['w1'] == 'band warn' def test_disjoint_spec(self): """The rest of overlap logic is tested in `TestInitWithForce`.""" sp = SourceSpectrum( Empirical1D, points=[39999.9, 40000, 40001, 40001.1], lookup_table=[0, 1, 1, 0]) with pytest.raises(exceptions.DisjointError): Observation(sp, self.obs.bandpass) def test_taper(self): with pytest.raises(NotImplementedError): self.obs.taper() def test_binned_data(self): # Binned flux np.testing.assert_array_equal(self.obs.binflux[:10], 0) np.testing.assert_array_equal(self.obs.binflux[-10:], 0) np.testing.assert_allclose( self.obs.sample_binned(wavelengths=self.obs.binset[5000:5010], flux_unit=units.FLAM).value, [0.12265425, 0.12226972, 0.12184207, 0.12141429, 0.12098646, 0.1205586, 0.1201307, 0.11970269, 0.11927488, 0.11884699], rtol=1e-4) # Binned wave and flux w, y = self.obs._get_binned_arrays( [599.9999999999, 600.4, 600.9] * u.nm, units.FLAM) np.testing.assert_allclose(w.value, [600, 600.4, 600.9]) np.testing.assert_allclose( y.value, [0.12265425, 0.12098646, 0.11884699], rtol=1e-4) w, y = self.obs._get_binned_arrays(None, units.PHOTLAM) np.testing.assert_array_equal(w, self.obs.binset) np.testing.assert_array_equal(y, self.obs.binflux) # Bin edges np.testing.assert_array_equal( self.obs.bin_edges.value[:10], [999.5, 1000.5, 1001.5, 1002.5, 1003.5, 1004.5, 1005.5, 1006.5, 1007.5, 1008.5]) np.testing.assert_array_equal( self.obs.bin_edges.value[5000:5010], [5999.5, 6000.5, 6001.5, 6002.5, 6003.5, 6004.5, 6005.5, 6006.5, 6007.5, 6008.5]) np.testing.assert_array_equal( self.obs.bin_edges.value[-10:], [10991.5, 10992.5, 10993.5, 10994.5, 10995.5, 10996.5, 10997.5, 10998.5, 10999.5, 11000.5]) def test_reversed_binset(self): obs2 = Observation( self.obs.spectrum, self.obs.bandpass, binset=self.obs.binset[::-1]) np.testing.assert_array_equal(obs2.binset, self.obs.binset) np.testing.assert_array_equal(obs2.binflux, self.obs.binflux) np.testing.assert_array_equal(obs2.bin_edges, self.obs.bin_edges) def test_sampled_binned_exceptions(self): with pytest.raises(exceptions.InterpolationNotAllowed): self.obs.sample_binned([6000, 6004.5, 6009]) with pytest.raises(exceptions.UnsortedWavelength): self.obs.sample_binned([6004, 6000, 6009]) @pytest.mark.parametrize( ('cenwave', 'ans'), [(500 * u.nm, [499.9, 500.1] * u.nm), (5000, [4999, 5001] * u.AA)]) def test_binned_waverange(self, cenwave, ans): w = self.obs.binned_waverange(cenwave, 2, mode='none') np.testing.assert_allclose(w, ans) def test_binned_pixelrange(self): w = [499.95, 500.05] * u.nm assert self.obs.binned_pixelrange(w, mode='round') == 1 def test_default_binset_from_bandpass(self): obs2 = Observation(self.obs.spectrum, self.obs.bandpass) np.testing.assert_array_equal(obs2.binset, self.obs.bandpass.waveset) def test_default_binset_from_spectrum(self): tf_unit = u.erg / (u.cm * u.cm * u.s) sp = SourceSpectrum( GaussianFlux1D, mean=5000, total_flux=(1 * tf_unit), fwhm=10) bp = SpectralElement(Const1D, amplitude=1) with pytest.warns(AstropyUserWarning, match=r'Source spectrum will be evaluated outside ' r'pre-defined waveset'): obs2 = Observation(sp, bp, force='extrap') np.testing.assert_array_equal(obs2.binset, sp.waveset) def test_undefined_binset(self): bp = SpectralElement(Const1D, amplitude=1) with pytest.raises(exceptions.UndefinedBinset): Observation(self.obs.spectrum, bp) def test_as_spectrum(self): w = np.arange(6000, 6005) sp1 = self.obs.as_spectrum(binned=True, wavelengths=w) # Binned sp2 = self.obs.as_spectrum(binned=False, wavelengths=w) # Sampled np.testing.assert_allclose( sp1(sp1.waveset), sp2(sp2.waveset), rtol=1e-3) class TestInitWithForce: """Test forced initialization.""" def setup_class(self): x = np.arange(3000, 4000) y = np.ones_like(x) * 0.75 self.sp = SourceSpectrum( Empirical1D, points=x, lookup_table=y, meta={'expr': 'short flat'}) self.bp = SpectralElement( Empirical1D, points=[3949.9, 3950, 4050, 4050.1], lookup_table=[0, 1, 1, 0]) @pytest.mark.parametrize( ('force_type', 'ans'), [('taper', 0), ('extrap', 0.75)]) def test_force(self, force_type, ans): with warnings.catch_warnings(): warnings.filterwarnings( 'ignore', message=r'.*Source spectrum.*', category=AstropyUserWarning) obs = Observation(self.sp, self.bp, force=force_type) assert obs(4005).value == ans assert force_type in obs.warnings['PartialOverlap'] def test_exceptions(self): with pytest.raises(exceptions.PartialOverlap): Observation(self.sp, self.bp) with pytest.raises(exceptions.SynphotError): Observation(self.sp, self.bp, force='foo') class TestMathOperators: """Test Observation math operators.""" def setup_class(self): sp = SourceSpectrum(ConstFlux1D, amplitude=1) bp = SpectralElement(Box1D, amplitude=1, x_0=5000, width=100) w = np.arange(1000, 10000) self.obs = Observation(sp, bp, binset=w) @pytest.mark.parametrize('is_scalar', [True, False]) def test_mul(self, is_scalar): if is_scalar: other = 2 else: other = SpectralElement(Const1D, amplitude=2) obs2 = self.obs * other np.testing.assert_allclose(obs2([1000, 5000]).value, [0, 2]) np.testing.assert_allclose( obs2.sample_binned([4000, 4999]).value, [0, 2]) def test_div(self): with pytest.raises(NotImplementedError): self.obs / 2 def test_addsub(self): with pytest.raises(NotImplementedError): self.obs + self.obs with pytest.raises(NotImplementedError): self.obs - self.obs class TestObsPar: """Test Observation values from IRAF SYNPHOT CALCPHOT, unless noted otherwise. """ def setup_class(self): sp = SourceSpectrum.from_file(_specfile) bp = SpectralElement.from_file(_bandfile) self.obs = Observation(sp, bp) def test_avglam(self): """Tested for PHOTLAM only; no binning.""" np.testing.assert_allclose( self.obs.avgwave().value, 5321.091, rtol=1e-5) def test_barlam(self): """Tested for PHOTLAM only; no binning.""" np.testing.assert_allclose( self.obs.barlam().value, 5286.685, rtol=1e-5) def test_pivot(self): """Tested with value from ASTROLIB PYSYNPHOT; no binning.""" np.testing.assert_allclose(self.obs.pivot().value, 5309.578, rtol=1e-5) def test_normalize(self): """Tested with value from ASTROLIB PYSYNPHOT; no binning.""" obs2 = self.obs.normalize(1 * units.PHOTLAM, band=self.obs.bandpass) np.testing.assert_allclose( obs2.countrate(_area).value, 59517756.384, rtol=1e-5) @pytest.mark.parametrize('binned', [True, False]) def test_efflam(self, binned): with pytest.warns(AstropyDeprecationWarning, match='Usage of EFFLPHOT is deprecated') as w: x = self.obs.effective_wavelength(mode='efflphot', binned=binned) assert len(w) == 1 np.testing.assert_allclose(x.value, 5344.312, rtol=1e-4) @pytest.mark.parametrize('binned', [True, False]) def test_efflam_erg(self, binned): np.testing.assert_allclose( self.obs.effective_wavelength(mode='efflerg', binned=binned).value, 5321.091, rtol=1e-4) def test_efflam_exception(self): with pytest.raises(exceptions.SynphotError): self.obs.effective_wavelength(mode='foo') # ans taken from calculating effstim in FLAM and then using unit # conversion around bandpass pivot wavelength. @pytest.mark.parametrize( ('flux_unit', 'ans'), [(units.FLAM, 3.05131543e-14), (units.FNU, 2.91961387e-25), (None, 0.00822697), (units.PHOTLAM, 0.00822697), (units.PHOTNU, 7.8718752e-14), (u.Jy, 0.02919614), (u.mJy, 29.19613866)]) def test_effstim(self, flux_unit, ans): """Test EFFSTIM for all supported non-mag and non-count flux units.""" np.testing.assert_allclose( self.obs.effstim(flux_unit=flux_unit).value, ans) def test_effstim_count(self): """Test EFFSTIM in count and OBMAG separately due to different API and tolerance. .. note:: ``binned``, ``waverange``, and ``force`` tested in `TestCountRate`. """ # pysynphot 0.9.12.dev5 ans_ct = 101462.39601864747 ans_ob = -12.515762784747238 tol = 1e-4 val_ct = self.obs.effstim(flux_unit=u.count, area=_area).value np.testing.assert_allclose(val_ct, ans_ct, rtol=tol) val_ob = self.obs.effstim(flux_unit=units.OBMAG, area=_area).value np.testing.assert_allclose(val_ob, ans_ob, atol=tol, rtol=0) # Sanity check np.testing.assert_allclose(val_ob, -2.5 * np.log10(val_ct)) # ans taken from calculating effstim in FLAM and then using unit # conversion around bandpass pivot wavelength. @pytest.mark.parametrize( ('flux_unit', 'ans'), [(u.STmag, 12.68878224), (u.ABmag, 12.73668646)]) def test_effstim_mag(self, flux_unit, ans): """Test mag separately because tolerance calculation, if needed, is different.""" np.testing.assert_allclose( self.obs.effstim(flux_unit=flux_unit, area=_area).value, ans) def test_effstim_analytic(self): sp = SourceSpectrum(BlackBodyNorm1D, temperature=5000) bp = SpectralElement(Box1D, amplitude=1, x_0=5500, width=1) obs = Observation(sp, bp) np.testing.assert_allclose( obs.effstim(flux_unit=units.FLAM).value, 2.03E-15, rtol=0.01) # 1% @pytest.mark.remote_data def test_effstim_vegamag(self): ans = 12.737293324241517 # pysynphot 0.9.12.dev5 vspec = SourceSpectrum.from_vega() np.testing.assert_allclose( self.obs.effstim(flux_unit=units.VEGAMAG, vegaspec=vspec).value, ans, rtol=0.001) @pytest.mark.parametrize('flux_unit', [u.mag, units.VEGAMAG]) def test_effstim_exceptions(self, flux_unit): with pytest.raises(exceptions.SynphotError): self.obs.effstim(flux_unit=flux_unit) with pytest.raises(exceptions.SynphotError): self.obs.effstim(units.VEGAMAG) class TestCountRate: """Test countrate with Observation with well-defined ranges. .. note:: Use binned data except for :func:`test_waverange_no_bin`. """ def setup_class(self): x = np.arange(1000, 1100, 0.5) * u.AA y = units.convert_flux( x, (x.value - 1000) * u.count, units.PHOTLAM, area=_area) self.sp = SourceSpectrum(Empirical1D, points=x, lookup_table=y, meta={'expr': 'slope1'}) self.bp = SpectralElement( Empirical1D, points=[1009.95, 1010, 1030, 1030.05] * u.AA, lookup_table=[0, 1, 1, 0], meta={'expr': 'handmade_box'}) self.binset = np.arange(1000, 1020) * u.AA self.obs = Observation(self.sp, self.bp, binset=self.binset) @pytest.mark.skipif('not HAS_SPECUTILS') def test_spectrum1d_source(self): # Should round-trip. See also: test_waverange(w=None) spec = self.sp.to_spectrum1d() obs = Observation(spec, self.bp, binset=self.binset) assert_quantity_allclose( obs.countrate(_area), 280.75 * (u.count / u.s)) @pytest.mark.parametrize( ('w', 'ans'), [(None, 280.75 * (u.count / u.s)), ([1000, 1019] * u.AA, 280.75 * (u.count / u.s)), ([1013, 1016] * u.AA, 116 * (u.count / u.s)), ([1012.8, 1016] * u.AA, 116 * (u.count / u.s)), ([1013.2, 1016] * u.AA, 116 * (u.count / u.s))]) def test_waverange(self, w, ans): """Use given wavelength range on binned data.""" assert_quantity_allclose(self.obs.countrate(_area, waverange=w), ans) def test_waverange_no_bin(self): """Use given wavelength range on native dataset. .. note:: Accuracy unsure as there was no precedent to test against. """ w = [1000, 1019] np.testing.assert_allclose( self.obs.countrate(_area, waverange=w, binned=False).value, 271) @pytest.mark.parametrize( ('w', 'ans'), [([1016, 1026], 140), ([999, 1016], 172.75)]) def test_force(self, w, ans): """Force calculation for partial overlap.""" with pytest.warns(AstropyUserWarning, match=r'Count rate calculated ' r'only for wavelengths in the overlap between ' r'observation and given range'): np.testing.assert_allclose( self.obs.countrate(_area, waverange=w, force=True).value, ans) # Must raise error without force with pytest.raises(exceptions.PartialOverlap): self.obs.countrate(_area, waverange=w) def test_disjoint_waverange(self): with pytest.raises(exceptions.DisjointError): self.obs.countrate(_area, waverange=[1020, 1030]) class TestCountRateNegFlux: """Test countrate with files containing negative flux/throughput values.""" def setup_class(self): self.bp = SpectralElement.from_file(get_pkg_data_filename( os.path.join('data', 'cos_fuv_g130m_c1309_psa.fits'), package='synphot.tests')) self.spfile = get_pkg_data_filename( os.path.join('data', 'us7.txt'), package='synphot.tests' ) @pytest.mark.parametrize( ('keep_neg', 'ans'), [(True, 1510.219531414891), (False, 1627.8250215634343)]) def test_neg_handling(self, keep_neg, ans): with warnings.catch_warnings(): warnings.filterwarnings( 'ignore', message=r'.*contained negative flux or throughput.*', category=AstropyUserWarning) sp = SourceSpectrum.from_file(self.spfile, keep_neg=keep_neg) obs = Observation(sp, self.bp) c = obs.countrate(_area) np.testing.assert_allclose(c.value, ans, rtol=1e-4) if not keep_neg: assert 'NegativeFlux' in obs.warnings def test_countrate_neg_leak(): """Test countrate of sub-sampling not exceeding total countrate. https://github.com/spacetelescope/synphot_refactor/issues/126 """ # This bug only manifests itself in very specific cases. bp = SpectralElement.from_file(get_pkg_data_filename( os.path.join('data', 'stis_fuv_f25ndq2_mjd58300_0822774.fits'), package='synphot.tests')) sp = SourceSpectrum.from_file(get_pkg_data_filename( os.path.join('data', 'k93_4500_0_5_rn_box.fits'), package='synphot.tests')) binset = np.fromfile(get_pkg_data_filename( os.path.join('data', 'stis_fuv_f25ndq2_binset.bin'), package='synphot.tests'), dtype='' def test_mul_spec(self): """Apply extinction curve in inverse micron to flat spectrum in Angstrom. """ sp = SourceSpectrum(ConstFlux1D, amplitude=1) sp2 = self.extcurve * sp w = 5.03399992 * (u.micron ** -1) ans = self.extcurve(w).value np.testing.assert_allclose(sp2(w).value, ans, rtol=1e-6) def test_qso_countrate(self): """Ensure extinction curve waveset is not propagated to spectrum. https://github.com/spacetelescope/synphot_refactor/issues/129 """ bp = SpectralElement.from_file(get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f850lp.fits'), package='synphot.tests')) qso = SourceSpectrum.from_file(get_pkg_data_filename( os.path.join('data', 'qso_template_001.dat'), package='synphot.tests')) extcurve = self.redlaw.extinction_curve(1.0 * u.mag) spext = qso * extcurve with pytest.warns(AstropyUserWarning): sp = spext.normalize(25 * u.STmag, bp) obs = Observation(sp, bp, force='taper') area = 45238.93416 # HST cm^2 c = obs.countrate(area) ans = 1.104404103799421e-07 # From similar setup in Astrolib PySynphot np.testing.assert_allclose(c.value, ans, rtol=1e-3) # 0.1% agreement # See https://github.com/spacetelescope/synphot_refactor/issues/77 @pytest.mark.parametrize( ('z', 'ans'), ([0, [0.99514224, 0.99572959, 0.99630696, 0.99640647, 1]], [2, [0.80417561, 0.82569455, 0.84739614, 0.85119226, 1]], [4, [0.27908754, 0.32576126, 0.37920904, 0.38926572, 1]], [8, [5.80763088e-05, 1.89352199e-04, 6.04679639e-04, 7.38588957e-04, 1]])) def test_etau_madau(z, ans): """Test Madau 1995 extinction curve.""" w_rest = np.array([950, 973, 1026, 1216, 1300]) w_z = w_rest * (1 + z) extcurve = etau_madau(w_z, z) np.testing.assert_allclose(extcurve(w_z), ans) def test_etau_madau_exceptions(): # Invalid z with pytest.raises(exceptions.SynphotError): etau_madau([500, 1000], [1, 2]) # Too few wave with pytest.raises(exceptions.SynphotError): etau_madau(500, 0) with pytest.raises(exceptions.SynphotError): etau_madau([500], 0) @pytest.mark.remote_data @pytest.mark.parametrize( 'modelname', ['lmc30dor', 'lmcavg', 'mwavg', 'mwdense', 'mwrv21', 'mwrv40', 'smcbar', 'xgalsb']) def test_redlaw_from_model(modelname): """Test ReddeningLaw from remote file. .. note:: No check on data quality as it is dependent on data file. """ redlaw = ReddeningLaw.from_extinction_model(modelname) assert modelname in redlaw.meta['expr'] assert 'filename' in redlaw.meta['header'] assert 'descrip' in redlaw.meta['header'] def test_redlaw_from_model_exception(): with pytest.raises(exceptions.SynphotError): ReddeningLaw.from_extinction_model('foo') @pytest.mark.parametrize('ext_hdr', [None, {'foo': 'foo'}]) def test_write_reddening_law(tmp_path, ext_hdr): """Test ReddeningLaw ``to_fits()`` method.""" x = np.linspace(1000, 5000, 5) y = np.linspace(1, 5, 5) * 0.1 redlaw = ReddeningLaw( Empirical1D, points=x, lookup_table=y, meta={"expr": "ebv(test)"}) outfile = str(tmp_path / 'outredlaw.fits') if ext_hdr is None: redlaw.to_fits(outfile, overwrite=True) else: redlaw.to_fits(outfile, overwrite=True, ext_header=ext_hdr) # Read it back in and check redlaw2 = ReddeningLaw.from_file(outfile) np.testing.assert_allclose(redlaw2.waveset.value, x) np.testing.assert_allclose(redlaw2(x).value, y) if ext_hdr is not None: hdr = fits.getheader(outfile, 1) assert 'foo' in hdr spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_specio.py000066400000000000000000000175111511632712700262670ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test specio.py module.""" # STDLIB import os # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.io import fits from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.utils.exceptions import ( AstropyUserWarning, AstropyDeprecationWarning) # LOCAL from synphot import exceptions, specio, units from synphot.spectrum import SpectralElement @pytest.mark.remote_data def test_read_remote_spec(): """Test read remote spectrum. .. note:: This is just I/O test. No check on data quality. """ from synphot import config hdr, wave, flux = specio.read_remote_spec( config.conf.vega_file, cache=False, show_progress=False) assert isinstance(wave, u.Quantity) assert isinstance(flux, u.Quantity) assert isinstance(hdr, dict) def test_read_ascii_spec(): """Test read local ASCII spectrum.""" specfile = get_pkg_data_filename( os.path.join('data', 'qso_template_001.dat'), package='synphot.tests') hdr, wave, flux = specio.read_spec(specfile) assert_quantity_allclose(wave[::500], [800, 2050, 3300, 4550, 5800] * u.AA) assert_quantity_allclose( flux[::500], [5.28776750e-14, 1.40065693e-13, 6.48401282e-14, 3.57973708e-14, 1.99793337e-14] * units.FLAM) assert hdr == {} class TestReadWriteFITS: """Test read/write FITS spectrum.""" def setup_class(self): self.epsilon = 0.00031 self.wave = np.array([1000.0, 2000.0, 2000.0 + self.epsilon, 3000.0, 4000.0, 5000.0], dtype=np.float64) * u.AA self.flux = np.array([0.1, 100.2, 10.0, 0.0, 6.5, 1.2], dtype=np.float64) * units.PHOTLAM self.prihdr = {'PEDIGREE': 'DUMMY'} self.scihdr = {'SPEC_SRC': 'RANDOM'} def test_array_data(self, tmp_path): """Data as Numpy array.""" outfile = str(tmp_path / 'outspec1.fits') # Write it out with pytest.warns(AstropyUserWarning, match=r'rows are thrown out'): specio.write_fits_spec( outfile, self.wave.value, self.flux.value, pri_header=self.prihdr, ext_header=self.scihdr, trim_zero=False, pad_zero_ends=False, precision='single', wave_unit=self.wave.unit, flux_unit=self.flux.unit) # Read it back in and check values (flux_unit should be ignored) with pytest.warns(AstropyDeprecationWarning, match=r"\"flux_unit\" was deprecated"): # noqa: E501 hdr, wave, flux = specio.read_spec(outfile, flux_unit='foo') # Compare data np.testing.assert_allclose( wave.value, [1000.0, 2000.0 + self.epsilon, 3000.0, 4000.0, 5000.0], rtol=1e-06) np.testing.assert_allclose(flux.value, [0.1, 10.0, 0.0, 6.5, 1.2]) assert wave.unit == self.wave.unit assert flux.unit == self.flux.unit # Compare primary header assert hdr['PEDIGREE'] == 'DUMMY' # Compare science header sci_hdr = fits.getheader(outfile, 1) assert sci_hdr['SPEC_SRC'] == 'RANDOM' assert sci_hdr['TFORM2'].lower() == 'e' def test_quantity_data(self, tmp_path): """Data as Quantity.""" outfile = str(tmp_path / 'outspec2.fits') # Write it out (flux_unit should be ignored) specio.write_fits_spec( outfile, self.wave, self.flux, pri_header=self.prihdr, ext_header=self.scihdr, precision='double', flux_unit='foo') # Read it back in and check values (flux_unit should be ignored) with pytest.warns(AstropyDeprecationWarning, match=r"\"flux_unit\" was deprecated"): # noqa: E501 hdr, wave, flux = specio.read_spec(outfile, flux_unit='foo') # Compare data (trim_zero=True, pad_zero_ends=True) np.testing.assert_allclose( wave.value, [500.0, 1000.0, 2000.0, 2000.0 + self.epsilon, 4000.0, 5000.0, 6250.0], rtol=1e-06) np.testing.assert_allclose( flux.value, [0.0, 0.1, 100.2, 10.0, 6.5, 1.2, 0.0]) assert wave.unit == self.wave.unit assert flux.unit == self.flux.unit # Compare primary header assert hdr['PEDIGREE'] == 'DUMMY' # Compare science header sci_hdr = fits.getheader(outfile, 1) assert sci_hdr['SPEC_SRC'] == 'RANDOM' assert sci_hdr['TFORM2'].lower() == 'd' def test_exceptions(self, tmp_path): """Test for appropriate exceptions.""" outfile = str(tmp_path / 'outspec3.fits') # Shape mismatch with pytest.raises(exceptions.SynphotError): specio.write_fits_spec( outfile, self.wave, np.arange(3, dtype=np.float64)) # Invalid precision keyword with pytest.raises(exceptions.SynphotError): specio.write_fits_spec( outfile, self.wave, self.flux, precision='foo', overwrite=True) # Invalid wavelength precision with pytest.raises(exceptions.SynphotError): specio.write_fits_spec( outfile, np.arange(6), self.flux, overwrite=True) # Invalid flux precision with pytest.raises(exceptions.SynphotError): specio.write_fits_spec( outfile, self.wave, np.arange(6), overwrite=True) def test_read_nonstandard_fits_cols_01(tmp_path): """See https://github.com/spacetelescope/synphot_refactor/issues/372""" pix = np.arange(5, dtype=int) + 1 wav = (pix * 0.1) * u.micron trace = np.array([0, 0.5, 1, 0.9, 0]) coldefs = fits.ColDefs([ fits.Column(name="X", format="I", array=pix), fits.Column(name="Wavelength", format="E", unit=wav.unit.to_string(format="fits"), array=wav.value), fits.Column(name="Trace", format="E", array=trace)]) hdulist = fits.HDUList([ fits.PrimaryHDU(), fits.BinTableHDU.from_columns(coldefs)]) outfile = str(tmp_path / "jwst_niriss_soss_trace.fits") hdulist.writeto(outfile, overwrite=True) # Make sure column names are still case insensitive. for (wave_col, flux_col) in ( ("Wavelength", "Trace"), ("WAVELENGTH", "TRACE"), ("wavelength", "trace")): tr = SpectralElement.from_file( outfile, wave_col=wave_col, flux_col=flux_col) assert_quantity_allclose(tr.waveset, wav) assert_quantity_allclose(tr(wav), trace, atol=1e-7) def test_read_nonstandard_fits_cols_02(tmp_path): """See https://github.com/spacetelescope/synphot_refactor/issues/372""" wav = (np.arange(5) + 1) * u.nm flux_unit_str = "ph/s/m2/micron/arcsec2" # Invalid but should not matter. flux = np.ones(5) thru = np.array([0, 0.5, 1, 0.9, 0]) coldefs = fits.ColDefs([ fits.Column(name="lam", format="E", unit=wav.unit.to_string(format="fits"), array=wav.value), fits.Column(name="flux", format="E", unit=flux_unit_str, array=flux), fits.Column(name="dflux1", format="E", unit=flux_unit_str, array=flux), fits.Column(name="dflux2", format="E", unit=flux_unit_str, array=flux), fits.Column(name="trans", format="E", unit="1", array=thru)]) hdulist = fits.HDUList([ fits.PrimaryHDU(), fits.BinTableHDU.from_columns(coldefs)]) outfile = str(tmp_path / "skytable.fits") hdulist.writeto(outfile, overwrite=True) with pytest.warns(u.UnitsWarning, match="'ph/s/m2/micron/arcsec2'"): # noqa: E501 header, wavelengths, transmission = specio.read_spec( outfile, wave_col="lam", flux_col="trans") assert header["SIMPLE"] assert_quantity_allclose(wavelengths, wav) assert_quantity_allclose(transmission, thru) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_spectrum_bandpass.py000066400000000000000000000244241511632712700305230ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test spectrum.py module and related functionalities for bandpass.""" # STDLIB import os # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.modeling.models import Const1D from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.utils.exceptions import AstropyUserWarning # LOCAL from synphot.tests.test_units import _area, _wave, _flux_photlam from synphot import exceptions, units from synphot.compat import HAS_SPECUTILS # noqa from synphot.models import Box1D, Empirical1D, GaussianAbsorption1D from synphot.spectrum import SpectralElement @pytest.mark.remote_data @pytest.mark.parametrize( 'filtername', ['bessel_j', 'bessel_h', 'bessel_k', 'cousins_r', 'cousins_i', 'johnson_u', 'johnson_b', 'johnson_v', 'johnson_r', 'johnson_i', 'johnson_j', 'johnson_k']) def test_filter(filtername): """Test loading pre-defined bandpass. .. note:: Filter data quality is not checked as it depends on the file. """ bp = SpectralElement.from_filter(filtername) assert isinstance(bp.model, Empirical1D) assert filtername in bp.meta['expr'] def test_filter_exception(): """Test SpectralElement from_filter() exception.""" with pytest.raises(exceptions.SynphotError): SpectralElement.from_filter('foo') class TestEmpiricalBandpassFromFile: """This is the most common model used in ASTROLIB PYSYNPHOT.""" def setup_class(self): bandfile = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests') self.bp = SpectralElement.from_file(bandfile) def test_invalid_flux_unit(self): with pytest.raises(u.UnitsError): SpectralElement(Empirical1D, points=_wave, lookup_table=_flux_photlam) def test_call(self): w = self.bp.model.points[0][5000:5004] y = self.bp(w) np.testing.assert_allclose( w, [6045.1640625, 6045.83203125, 6046.49951172, 6047.16748047]) np.testing.assert_allclose( y.value, [0.0920415, 0.09125588, 0.09047068, 0.08968487]) def test_integrate(self): # Whole range (same as EQUVW) f = self.bp.integrate() assert_quantity_allclose(f, 272.01081629459344 * u.AA) # Given range f = self.bp.integrate(wavelengths=_wave) assert_quantity_allclose(f, 1.2062975715374322 * u.AA, rtol=2.5e-6) def test_avgwave(self): """Compare AVGWAVE with old SYNPHOT result.""" w = self.bp.avgwave() assert_quantity_allclose(w, 5367.9 * u.AA, rtol=1e-5) def test_barlam(self): """Test BARLAM (no old SYNPHOT result available).""" w = self.bp.barlam() assert_quantity_allclose(w, 5331.8945 * u.AA, rtol=1e-5) def test_pivot(self): """Compare PIVWV with ASTROLIB PYSYNPHOT result.""" w = self.bp.pivot() assert_quantity_allclose(w, 5355.863596422962 * u.AA, rtol=1e-6) def test_uresp(self): """Compare URESP with old SYNPHOT result.""" uresp = self.bp.unit_response(area=_area) assert_quantity_allclose(uresp, 3.00737e-19 * units.FLAM, rtol=1e-4) def test_rmswidth(self): w = self.bp.rmswidth() assert_quantity_allclose(w, 359.55954282883687 * u.AA, rtol=1e-4) w = self.bp.rmswidth(threshold=0.01 * u.dimensionless_unscaled) assert_quantity_allclose(w, 357.43298216917754 * u.AA, rtol=1e-4) # Invalid threshold must raise exception with pytest.raises(exceptions.SynphotError): self.bp.rmswidth(threshold=0.01 * u.AA) with pytest.raises(exceptions.SynphotError): self.bp.rmswidth(threshold=[0.01, 0.02]) with pytest.raises(exceptions.SynphotError): self.bp.rmswidth(threshold='foo') def test_fwhm(self): """This also calls PHOTBW.""" w = self.bp.fwhm() assert_quantity_allclose(w, 841.09 * u.AA, rtol=2.5e-5) w = self.bp.fwhm(threshold=0.01 * u.dimensionless_unscaled) assert_quantity_allclose(w, 836.2879507505378 * u.AA, rtol=2.5e-5) # Zero value w = self.bp.fwhm(wavelengths=[2e6, 2.1e6]) assert w.value == 0 # Invalid threshold must raise exception with pytest.raises(exceptions.SynphotError): self.bp.fwhm(threshold=0.01 * u.AA) with pytest.raises(exceptions.SynphotError): self.bp.fwhm(threshold=[0.01, 0.02]) with pytest.raises(exceptions.SynphotError): self.bp.fwhm(threshold='foo') def test_tlambda(self): f = self.bp.tlambda() assert_quantity_allclose(f, 0.22808, rtol=1e-4) def test_tpeak(self): """Compare TPEAK with old SYNPHOT result.""" f = self.bp.tpeak() assert_quantity_allclose(f, 0.241445) def test_wpeak(self): w = self.bp.wpeak() assert_quantity_allclose(w, 5059.8 * u.AA, rtol=1e-5) def test_equivwidth(self): """Compare EQUVW with ASTROLIB PYSYNPHOT result.""" w = self.bp.equivwidth() assert_quantity_allclose(w, 272.01081629459344 * u.AA, rtol=1e-6) def test_rectw(self): """Compare RECTW with old SYNPHOT result.""" w = self.bp.rectwidth() assert_quantity_allclose(w, 1126.588 * u.AA, rtol=1e-5) def test_qtlam(self): qtlam = self.bp.efficiency() assert_quantity_allclose(qtlam, 0.050901, rtol=1e-4) def test_emflx(self): """Compare EMFLX with old SYNPHOT result.""" f = self.bp.emflx(area=_area) assert_quantity_allclose(f, 3.586622e-16 * units.FLAM, rtol=2.5e-5) class TestBoxBandpass: """Test bandpass with Box1D model.""" def setup_class(self): self.bp = SpectralElement(Box1D, amplitude=1, x_0=5000, width=100) def test_eval(self): # Box: Outside, boundary, inside y = self.bp([4000, 4949.95, 5000]) np.testing.assert_array_equal(y.value, [0, 0, 1]) def test_conversion(self): bp2 = SpectralElement( Box1D, amplitude=1, x_0=500 * u.nm, width=10 * u.nm) y = bp2([4000, 4949.95, 5000]) np.testing.assert_array_equal(y.value, [0, 0, 1]) def test_fwhm(self): # You would think FWHM of a box is the width but # not according to IRAF SYNPHOT. assert_quantity_allclose(self.bp.fwhm(), 67.977 * u.AA, rtol=1e-3) # 0.1% def test_taper(self): bp2 = self.bp.taper(np.arange(499, 501.01, 0.01) * u.nm) y = bp2([498.9, 499, 500, 501, 501.1] * u.nm) assert_quantity_allclose(y, [0, 1, 1, 1, 0]) def test_integrate(self): ans = 100 * u.AA assert_quantity_allclose(self.bp.integrate(), ans) assert_quantity_allclose( self.bp.integrate(integration_type='analytical'), ans) with pytest.raises(exceptions.SynphotError, match='flux_unit cannot be used'): self.bp.integrate(integration_type='analytical', flux_unit='flam') def test_multi_n_models(self): """This is not allowed.""" with pytest.raises(exceptions.SynphotError): SpectralElement( Box1D, amplitude=[1, 1], x_0=[5000, 6000], width=[100, 1], n_models=2) class TestBuildModelsBandpass: """Test compatiblity with other models not tested above.""" def test_GaussianAbsorption1D(self): """This should be unitless, not a source spectrum.""" bp = SpectralElement( GaussianAbsorption1D, amplitude=0.8, mean=5500, stddev=50) y = bp([5300, 5500, 5700]) assert_quantity_allclose(y, [0.99973163, 0.2, 0.99973163]) @pytest.mark.skipif('not HAS_SPECUTILS') class TestSpecutilsBridgeBandpass: def test_from_spectrum1d_Empirical1D_bandpass(self): from synphot.compat_specutils import Spectrum lamb = [1000, 5000, 10000] * u.AA thru = [0, 1, -1] * units.THROUGHPUT spec = Spectrum(spectral_axis=lamb, flux=thru) with pytest.warns(AstropyUserWarning, match=r'contained negative flux or throughput'): bp = SpectralElement.from_spectrum1d(spec, keep_neg=False) w = bp.waveset assert isinstance(bp.model, Empirical1D) assert_quantity_allclose(w, lamb) assert_quantity_allclose(bp(w), [0, 1, 0]) def test_from_spectrum1d_Empirical1D_bandpass_masked(self): from synphot.compat_specutils import Spectrum lamb = [1000, 5000, 10000] * u.AA thru = [0, 1, -1] * units.THROUGHPUT mask = np.array([False, False, True]) spec = Spectrum(spectral_axis=lamb, flux=thru, mask=mask) bp = SpectralElement.from_spectrum1d(spec, keep_neg=False) w = bp.waveset assert isinstance(bp.model, Empirical1D) assert_quantity_allclose(w, [1000, 5000] * u.AA) assert_quantity_allclose(bp(w), [0, 1]) def test_to_spectrum1d_Empirical1D_bandpass(self): lamb = [1000, 5000, 10000] * u.AA thru = [0, 1, 0] bp = SpectralElement(Empirical1D, points=lamb, lookup_table=thru) spec = bp.to_spectrum1d() assert_quantity_allclose(spec.spectral_axis, lamb) assert_quantity_allclose(spec.flux, thru) def test_to_spectrum1d_Const1D(self): thru = 0.88 bp = SpectralElement(Const1D, amplitude=thru) with pytest.raises(exceptions.SynphotError) as e: spec = bp.to_spectrum1d() assert 'Provide wavelengths for sampling' in str(e.value) w = [100, 500, 1000] * u.nm spec = bp.to_spectrum1d(wavelengths=w) assert_quantity_allclose(spec.spectral_axis, w) assert_quantity_allclose(spec.flux, thru) def test_to_spectrum1d_compound_bandpass(self): from specutils.analysis import line_flux box = SpectralElement( Box1D, amplitude=0.5, x_0=5000 * u.AA, width=1 * u.AA) bp = box * box spec = bp.to_spectrum1d() w = bp.waveset integrated_thru = bp.integrate() assert_quantity_allclose(spec.spectral_axis, w) assert_quantity_allclose(spec.flux, bp(w)) assert_quantity_allclose(integrated_thru, 0.25 * u.AA) assert_quantity_allclose(integrated_thru, line_flux(spec)) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_spectrum_misc.py000066400000000000000000000364221511632712700276640ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test spectrum.py module and related functionalities that are not covered by ``test_spectrum_source.py`` nor ``test_spectrum_bandpass.py``.""" # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.io import fits from astropy.modeling.models import Const1D, RedshiftScaleFactor from astropy.tests.helper import assert_quantity_allclose # LOCAL from synphot.tests.test_units import _wave, _flux_jy, _flux_photlam from synphot import exceptions, units from synphot.models import Box1D, Empirical1D, GaussianFlux1D, get_waveset from synphot.spectrum import SourceSpectrum, SpectralElement def setup_module(module): import astropy.constants as const from astropy.constants import si, astropyconst13 const.h = si.h = astropyconst13.h def teardown_module(module): import astropy.constants as const from astropy.constants import si, astropyconst40 const.h = si.h = astropyconst40.h class TestCheckOverlap: """Test spectrum overlap check. This method is ever only used in the form of ``bp.check_overlap(sp)``, so that is what is tested here. """ def setup_class(self): self.bp = SpectralElement( Empirical1D, points=[2999.9, 3000, 6000, 6000.1], lookup_table=[0, 1, 1, 0]) def test_full(self): """As long as we don't have to extrapolate or taper source spectrum, it's okay. """ sp = SourceSpectrum( Empirical1D, points=[999.9, 1000, 9000, 9000.1], lookup_table=[0, 1, 1, 0]) assert self.bp.check_overlap(sp) == 'full' sp = SourceSpectrum( Empirical1D, points=[3999.9, 4000, 4500, 4500.1], lookup_table=[0, 1, 1, 0]) assert self.bp.check_overlap(sp) == 'full' def test_partial_most(self): """99% overlap.""" sp = SourceSpectrum( Empirical1D, points=[3005, 3005.1, 6000.1, 6000.2], lookup_table=[0, 1, 1, 0]) assert self.bp.check_overlap(sp) == 'partial_most' def test_partial_notmost(self): """Extrapolation or taper required.""" sp = SourceSpectrum( Empirical1D, points=[3999.9, 4500.1], lookup_table=[1, 1]) assert self.bp.check_overlap(sp) == 'partial_notmost' def test_none(self): """No overlap at all.""" sp = SourceSpectrum( Empirical1D, points=[99.9, 100, 2999.8, 2999.9], lookup_table=[0, 1, 1, 0]) assert self.bp.check_overlap(sp) == 'none' def test_special_cases(self): """One of them has no waveset defined.""" # Other has no waveset sp = SourceSpectrum(Const1D, amplitude=1) assert self.bp.check_overlap(sp) == 'full' # Self has no waveset bp = SpectralElement(Const1D, amplitude=1) sp = SourceSpectrum(Box1D, amplitude=1, x_0=5000, width=10) assert bp.check_overlap(sp) == 'partial_notmost' def test_exceptions(self): """Invalid input.""" with pytest.raises(exceptions.SynphotError): self.bp.check_overlap(1) class TestForceExtrap: """Test forcing extrapolation on a source spectrum.""" @pytest.mark.parametrize('z', [0, 0.03]) def test_empirical(self, z): sp = SourceSpectrum(Empirical1D, points=[1000, 2000, 3000, 4000], lookup_table=[0.5, 0.6, 10.6, 1.5], fill_value=0) sp.z = z w = [900, 4300] assert_quantity_allclose(sp(w), 0 * units.PHOTLAM) # No extrapolation is_forced = sp.force_extrapolation() # Force extrapolation assert is_forced assert_quantity_allclose(sp(w), [0.5, 1.5] * units.PHOTLAM) def test_analytical(self): """Forcing is not possible.""" sp = SourceSpectrum(GaussianFlux1D, mean=5500, total_flux=1, fwhm=10) w = [100, 10000] assert_quantity_allclose(sp(w), 0 * units.PHOTLAM) is_forced = sp.force_extrapolation() assert not is_forced assert_quantity_allclose(sp(w), 0 * units.PHOTLAM) class TestWaveset: """Tests related to spectrum waveset.""" def test_none(self): sp = SourceSpectrum(Const1D, amplitude=1) assert sp.waveset is None def test_sampleset(self): tf_unit = u.erg / (u.cm * u.cm * u.s) sp = SourceSpectrum( GaussianFlux1D, total_flux=(1 * tf_unit), mean=5000, fwhm=10) np.testing.assert_array_equal(sp.waveset.value, sp.model.sampleset()) def test_box1d(self): bp = SpectralElement(Box1D, x_0=2000, width=1) w = bp.waveset.value w_true = bp.model.sampleset() np.testing.assert_array_equal(w, w_true) np.testing.assert_allclose( w[([0, 1, -2, -1], )], bp.model.sampleset(minimal=True)) # Make sure scale does not change waveset bp2 = bp * 2 bp3 = 0.5 * bp np.testing.assert_array_equal(bp2.waveset.value, w_true) np.testing.assert_array_equal(bp3.waveset.value, w_true) def test_box1d_set_step(self): # first test that setting step to default value produces the same # waveset as it did before step was a valid input bp1 = SpectralElement(Box1D, x_0=2000, width=1) assert bp1.waveset.shape == (103,) bp2 = SpectralElement(Box1D, x_0=2000, width=1, step=0.01) np.testing.assert_array_equal(bp1.waveset.value, bp2.waveset.value) # next test that setting a coarser step produces a smaller waveset bp3 = SpectralElement(Box1D, x_0=2000, width=1, step=0.2) assert bp3.waveset.size < bp1.waveset.size def test_composite_none(self): bp1 = SpectralElement(Box1D, amplitude=1, x_0=5000, width=10) bp2 = SpectralElement(Const1D, amplitude=2) bp = bp1 * bp2 np.testing.assert_array_equal(bp.waveset, bp1.waveset) def test_composite(self): totflux = 1 * (u.erg / (u.cm * u.cm * u.s)) g1 = SourceSpectrum( GaussianFlux1D, total_flux=totflux, mean=5000, fwhm=10) g2 = SourceSpectrum( GaussianFlux1D, total_flux=totflux, mean=6500, fwhm=100) g3 = SourceSpectrum( GaussianFlux1D, total_flux=totflux, mean=7500, fwhm=5) sp = SpectralElement(Box1D, x_0=1000, width=1) * (g1 + g2 + g3) assert_quantity_allclose( sp.waveset[::100], [999.49, 1000.49, 5019.95906231, 6699.59062307, 7509.7672007] * u.AA) def test_redshift(self): tf_unit = u.erg / (u.cm * u.cm * u.s) sp = SourceSpectrum( GaussianFlux1D, total_flux=(1 * tf_unit), mean=5000, fwhm=10) sp.z = 1.3 m = RedshiftScaleFactor(z=1.3) w_step25_z0 = [4978.76695499, 4989.3834775, 5000, 5010.6165225] * u.AA assert_quantity_allclose(sp.waveset[::25], m(w_step25_z0)) def test_redshift_none(self): sp = SourceSpectrum(Const1D, amplitude=1, z=1.3) assert sp.waveset is None def test_complicated_tree(self): """Throw everything in and insert redshift and scale in the middle.""" # On one side, we have a composite bandpass. bp1 = SpectralElement(Const1D, amplitude=1.01) bp2 = SpectralElement( Empirical1D, points=[4999, 5000.001, 5030], lookup_table=[0, 1, 0]) bp = bp1 * (0.8 * bp2) # [4999, 5000.001, 5030] # On the other side, we have composite spectrum with # scale and redshift. sp1 = SourceSpectrum( Empirical1D, points=[5001, 5011, 5020], lookup_table=[0, 1, 0]) sp2 = SourceSpectrum( Empirical1D, points=[5000, 5010, 5020], lookup_table=[0, 1, 0]) sp3 = sp2 + (sp1 * 0.5) # [5000, 5001, 5010, 5011, 5020] sp3.z = 0.01 # [5050, 5051.01, 5060.1, 5061.11, 5070.2] sp = sp1 + sp3 # [5001, 5011, 5020, 5050, 5051.01, 5060.1, 5061.11, 5070.2] # noqa sp_final = sp * bp np.testing.assert_array_equal( sp_final.waveset.value, [4999, 5000.001, 5001, 5011, 5020, 5030, 5050, 5051.01, 5060.1, 5061.11, 5070.2]) def test_exceptions(self): with pytest.raises(exceptions.SynphotError): get_waveset('foo') class TestMathOperators: """Test spectrum math operators.""" def setup_class(self): self.sp_1 = SourceSpectrum( Empirical1D, points=[3999.9, 4000.0, 5000.0, 6000.0, 6000.1], lookup_table=[0, 3.5e-14, 4e-14, 4.5e-14, 0] * units.FLAM) self.sp_2 = SourceSpectrum( Empirical1D, points=_wave, lookup_table=_flux_jy, meta={'PHOTLAM': [9.7654e-3, 1.003896e-2, 9.78473e-3]}) self.bp_1 = SpectralElement( Empirical1D, points=[399.99, 400.01, 500.0, 590.0, 600.1] * u.nm, lookup_table=[0, 0.1, 0.2, 0.3, 0]) def test_source_add(self): """Compare with ASTROLIB PYSYNPHOT.""" ans = self.sp_1 + self.sp_2 assert_quantity_allclose( ans(ans.waveset), [0.00976521, 0.01681283, 0.01970276, 0.01998463, 0.0197387, 0.01985257, 0.02337638, 0.00978454] * units.PHOTLAM, rtol=1e-4) def test_source_sub(self): """Compare with ASTROLIB PYSYNPHOT.""" ans = self.sp_1 - self.sp_2 assert_quantity_allclose( ans(ans.waveset), [-9.76520783e-03, -2.71758275e-03, 1.72346256e-04, -9.29051118e-05, 1.69629843e-04, 2.83499328e-04, 3.80731187e-03, -9.78453651e-03] * units.PHOTLAM, rtol=1e-4) def test_source_addsub_circular(self): """sp = sp + sp - sp""" ans = self.sp_1 + self.sp_1 - self.sp_1 assert_quantity_allclose(ans(ans.waveset), self.sp_1(ans.waveset)) def test_source_addsub_exception(self): with pytest.raises(exceptions.IncompatibleSources): self.sp_1 + self.bp_1 @pytest.mark.parametrize('x', [2, 2 * u.dimensionless_unscaled]) def test_source_mul_div_scalar(self, x): w = self.sp_1.waveset ans1 = self.sp_1 * x assert_quantity_allclose( ans1(w), [0, 0.01409552, 0.02013646, 0.02718424, 0] * units.PHOTLAM, rtol=1e-6) # rmul does not work with Quantity if not isinstance(x, u.Quantity): ans2 = x * self.sp_1 assert_quantity_allclose(ans1(w), ans2(w), rtol=0) ans3 = self.sp_1 / x assert_quantity_allclose( ans3(w), [0, 0.00352388, 0.00503411, 0.00679606, 0] * units.PHOTLAM, atol=1e-7 * units.PHOTLAM) def test_source_mul_div_spec(self): """Compare mul with ASTROLIB PYSYNPHOT. Also test bp * sp.""" ans1 = self.sp_1 * self.bp_1 ans2 = self.bp_1 * self.sp_1 w = ans1.waveset[:-1] assert_quantity_allclose( ans1(w), [0, 3.52381254e-04, 7.04792712e-04, 2.01360717e-03, 3.97184014e-03, 4.03718269e-05, 0] * units.PHOTLAM, rtol=1e-4) assert_quantity_allclose(ans1(w), ans2(w), rtol=0) ans3 = self.sp_1 / self.bp_1 assert_quantity_allclose( ans3(w), [0, 0.14095528, 0.07048066, 0.05034117, 0.04413243, 4.57601236, 0] * units.PHOTLAM) ans4 = self.sp_1 / self.sp_1 assert_quantity_allclose( ans4([4000, 5000, 6000]), 1 * u.dimensionless_unscaled) # Dividing throughput by flux does not make sense. with pytest.raises(exceptions.IncompatibleSources): self.bp_1 / self.sp_1 def test_source_mul_div_exceptions(self): """Only mul is tested but truediv uses the same validation.""" with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * self.sp_2 with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * [1, 2] with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * (1 - 1j) with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * u.Quantity([1, 2]) with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * u.Quantity(1 - 1j) with pytest.raises(exceptions.IncompatibleSources): self.sp_1 * (1 * u.AA) def test_bandpass_addsub(self): """Not supported.""" with pytest.raises(NotImplementedError): self.bp_1 + self.bp_1 with pytest.raises(NotImplementedError): self.bp_1 + 2.0 with pytest.raises(NotImplementedError): self.bp_1 - self.bp_1 with pytest.raises(NotImplementedError): self.bp_1 - 2.0 @pytest.mark.parametrize('x', [2.0, 2.0 * u.dimensionless_unscaled]) def test_bandpass_mul_div_scalar(self, x): w = self.bp_1.waveset ans1 = self.bp_1 * x assert_quantity_allclose(ans1(w), [0, 0.2, 0.4, 0.6, 0]) # rmul does not work with Quantity if not isinstance(x, u.Quantity): ans2 = x * self.bp_1 assert_quantity_allclose(ans1(w), ans2(w), rtol=0) ans3 = self.bp_1 / x assert_quantity_allclose(ans3(w), [0, 0.05, 0.1, 0.15, 0]) def test_bandpass_mul_div_bandpass(self): ans1 = self.bp_1 * self.bp_1 assert_quantity_allclose( ans1(ans1.waveset), [0, 0.01, 0.04, 0.09, 0]) w = [4000.1, 5000, 5900] # Avoid div by zero ans2 = self.bp_1 / self.bp_1 assert_quantity_allclose(ans2(w), 1) def test_bandpass_mul_div_exceptions(self): """Only mul is tested but truediv uses the same validation.""" class DummyObject: pass with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * DummyObject() with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * u.Quantity([1, 2]) with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * u.Quantity(1 - 1j) with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * (1 * u.AA) with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * [1, 2] with pytest.raises(exceptions.IncompatibleSources): self.bp_1 * (1 - 1j) class TestWriteSpec: """Test spectrum to_fits() method.""" def setup_class(self): self.sp = SourceSpectrum( Empirical1D, points=_wave, lookup_table=_flux_photlam, meta={'expr': 'Test source'}) self.bp = SpectralElement( Empirical1D, points=_wave, lookup_table=np.ones(_wave.shape), meta={'expr': 'Test bandpass'}) @pytest.mark.parametrize( ('is_sp', 'ext_hdr'), [(True, None), (True, {'foo': 'foo'}), (False, None), (False, {'foo': 'foo'})]) def test_write(self, tmp_path, is_sp, ext_hdr): outfile = str(tmp_path / 'outspec.fits') if is_sp: sp1 = self.sp else: sp1 = self.bp if ext_hdr is None: sp1.to_fits(outfile, overwrite=True, trim_zero=False, pad_zero_ends=False) else: sp1.to_fits(outfile, overwrite=True, trim_zero=False, pad_zero_ends=False, ext_header=ext_hdr) # Read it back in and check sp2 = sp1.__class__.from_file(outfile) np.testing.assert_allclose(sp2(sp2.waveset), sp1(sp1.waveset)) hdr = fits.getheader(outfile, 1) assert 'expr' in hdr if ext_hdr is not None: assert 'foo' in hdr spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_spectrum_source.py000066400000000000000000000624001511632712700302240ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test spectrum.py module and related functionalities for source spectrum.""" # STDLIB import os import warnings # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import modeling from astropy import units as u from astropy.io import fits from astropy.modeling.models import ( BrokenPowerLaw1D, Const1D, ExponentialCutoffPowerLaw1D, LogParabola1D, PowerLaw1D, RedshiftScaleFactor) from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.utils.exceptions import AstropyUserWarning # LOCAL from synphot.tests.test_units import ( _area, _wave, _flux_jy, _flux_photlam, _flux_vegamag ) from synphot import exceptions, units from synphot.compat import HAS_SPECUTILS from synphot.models import ( BlackBodyNorm1D, Box1D, ConstFlux1D, Empirical1D, Gaussian1D, GaussianFlux1D, Lorentz1D, RickerWavelet1D, PowerLawFlux1D) from synphot.observation import Observation from synphot.spectrum import SourceSpectrum, SpectralElement # GLOBAL VARIABLES _vspec = None # Loaded in test_load_vspec() def setup_module(module): import astropy.constants as const from astropy.constants import si, astropyconst13 const.sigma_sb = si.sigma_sb = astropyconst13.sigma_sb const.h = si.h = astropyconst13.h const.k_B = si.k_B = astropyconst13.k_B def teardown_module(module): import astropy.constants as const from astropy.constants import si, astropyconst40 const.sigma_sb = si.sigma_sb = astropyconst40.sigma_sb const.h = si.h = astropyconst40.h const.k_B = si.k_B = astropyconst40.k_B @pytest.mark.remote_data def test_load_vspec(): """Load VEGA spectrum once here to be used later.""" global _vspec _vspec = SourceSpectrum.from_vega() @pytest.mark.remote_data @pytest.mark.parametrize( ('in_q', 'out_u', 'ans'), [(_flux_photlam, units.VEGAMAG, _flux_vegamag), (_flux_vegamag, units.PHOTLAM, _flux_photlam), (_flux_jy, units.VEGAMAG, _flux_vegamag), (_flux_vegamag, u.Jy, _flux_jy)]) def test_flux_conversion_vega(in_q, out_u, ans): """Test Vega spectrum object and flux conversion with VEGAMAG. .. note:: 1% is good enough given Vega gets updated from time to time. """ result = units.convert_flux(_wave, in_q, out_u, vegaspec=_vspec) assert_quantity_allclose(result, ans, rtol=1e-2) # Scalar i = 0 result = units.convert_flux(_wave[i], in_q[i], out_u, vegaspec=_vspec) assert_quantity_allclose(result, ans[i], rtol=1e-2) class TestEmpiricalSourceFromFile: """This is the most common model used in ASTROLIB PYSYNPHOT.""" def setup_class(self): specfile = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w_x_grw70d5824.fits'), package='synphot.tests') self.sp = SourceSpectrum.from_file(specfile) def test_invalid_flux_unit(self): with pytest.raises(exceptions.SynphotError): SourceSpectrum(Empirical1D, points=_wave, lookup_table=_flux_vegamag) def test_invalid_models(self): # Test not a Model subclass with pytest.raises(exceptions.SynphotError): SourceSpectrum(fits.HDUList) # Test unsupported model with pytest.raises(exceptions.SynphotError): SourceSpectrum(RedshiftScaleFactor) def test_metadata(self): assert 'SourceSpectrum' in str(self.sp) assert self.sp.meta['header']['SIMPLE'] # From FITS header assert self.sp.warnings == {} assert self.sp.z == 0 assert_quantity_allclose( self.sp.waverange, [3479.99902344, 10500.00097656] * u.AA) def test_call(self): w = self.sp.model.points[0][5000:5004] y = self.sp(w, flux_unit=units.FLAM) y_ans = [1.87284130e-15, 1.85656811e-15, 1.84030867e-15, 1.82404183e-15] * units.FLAM np.testing.assert_allclose( w, [6045.1640625, 6045.83203125, 6046.49951172, 6047.16748047]) assert_quantity_allclose(y, y_ans) def test_neg_flux(self): w = [1000, 5000, 9000] with pytest.warns(AstropyUserWarning, match=r'contained negative flux or throughput'): sp = SourceSpectrum( Empirical1D, points=w, lookup_table=[100, -45, 5e-17]) np.testing.assert_array_equal(sp(w).value, [100, 0, 5e-17]) assert 'NegativeFlux' in sp.warnings def test_conversion(self): x = 0.60451641 * u.micron w, y = self.sp._get_arrays(x, flux_unit=units.FNU) assert_quantity_allclose(x, w) assert_quantity_allclose(y, 2.282950185743497e-26 * units.FNU, rtol=1e-6) def test_integrate(self): expected_unit = u.erg / (u.cm**2 * u.s) # Whole range f = self.sp.integrate(flux_unit=units.FLAM) assert_quantity_allclose(f, 8.460125829057308e-12 * expected_unit, rtol=1e-5) # Given range f = self.sp.integrate(wavelengths=_wave, flux_unit=units.FLAM) assert_quantity_allclose(f, 4.810058069909525e-14 * expected_unit, rtol=1e-5) # Unsupported unit with pytest.raises(exceptions.SynphotError): self.sp.integrate(flux_unit=u.Jy) def test_taper(self): # Original spectrum already tapered -- nothing done sp = self.sp.taper() assert sp is self.sp # Tapering is done sp2 = SourceSpectrum( Empirical1D, points=_wave, lookup_table=_flux_photlam) sp = sp2.taper() x, y = sp._get_arrays(None, flux_unit=units.FLAM) assert_quantity_allclose( x, [4954.05152484, 4956.8, 4959.55, 4962.3, 4965.05152484] * u.AA) assert_quantity_allclose( y, [0, 3.9135e-14, 4.0209e-14, 3.9169e-14, 0] * units.FLAM, rtol=1e-6) class TestBlackBodySource: """Test source spectrum with BlackBody1D model.""" def setup_class(self): self.sp = SourceSpectrum(BlackBodyNorm1D, temperature=5500) def test_eval(self): w = np.arange(3000, 3100, 10) y = self.sp(w) assert_quantity_allclose( y, [0.00019318, 0.00019623, 0.0001993, 0.00020238, 0.00020549, 0.00020861, 0.00021175, 0.00021491, 0.00021809, 0.00022128] * units.PHOTLAM, rtol=2.5e-3) def test_integrate(self): ans_photlam = 12.39167258 * (u.ph / (u.cm * u.cm * u.s)) ans_flam = 2.62716011e-11 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose(self.sp.integrate(), ans_photlam, rtol=1e-5) assert_quantity_allclose( self.sp.integrate(flux_unit='flam'), ans_flam, rtol=1e-5) assert_quantity_allclose( self.sp.integrate(integration_type='analytical', flux_unit='flam'), ans_flam, rtol=5e-3) @pytest.mark.xfail(reason='Cannot convert unit in analytical mode') def test_integrate_fixme(self): """Merge this into ``test_integrate()`` above when fixed.""" ans_photlam = 12.39167258 * (u.ph / (u.cm * u.cm * u.s)) assert_quantity_allclose( self.sp.integrate(integration_type='analytical'), ans_photlam) class TestGaussianSource: """Test source spectrum with GaussianFlux1D model.""" def setup_class(self): tf = 4.96611456e-12 * (u.erg / (u.cm * u.cm * u.s)) self.sp = SourceSpectrum( GaussianFlux1D, total_flux=tf, mean=4000, fwhm=100) def test_eval(self): y = self.sp([3900, 4000, 4060]) assert_quantity_allclose( y, [0.00058715, 0.00939437, 0.00346246] * units.PHOTLAM, rtol=1e-5) def test_totalflux(self): """Test Gaussian source integration. .. note:: Analytic integral is more accurate because it does not rely on waveset definition. """ # PHOTLAM f_ans = 1 * (u.ph / (u.cm**2 * u.s)) assert_quantity_allclose(self.sp.integrate(), f_ans, rtol=1e-5) assert_quantity_allclose( self.sp.integrate(integration_type='analytical'), f_ans) # FLAM x0 = 400 * u.nm fwhm = 10 * u.nm sp2 = SourceSpectrum( GaussianFlux1D, total_flux=1, mean=x0, fwhm=fwhm) val_ans = 1 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose( sp2.integrate(flux_unit=units.FLAM), val_ans, rtol=1e-3) assert_quantity_allclose( sp2.integrate(flux_unit=units.FLAM, integration_type='analytical'), val_ans) def test_symmetry(self): assert_quantity_allclose(self.sp(3950), self.sp(4050)) def test_fwhm(self): """Should round-trip back to the same bandpass FWHM.""" m = self.sp.model bp = SpectralElement( Gaussian1D, mean=m.mean, amplitude=m.amplitude, stddev=m.stddev) assert_quantity_allclose(bp.fwhm(), 100 * u.AA, rtol=1e-3) # 0.1% def test_alt_source(self): """Same source, different way to init.""" sp2 = SourceSpectrum( GaussianFlux1D, amplitude=self.sp.model.amplitude.value, mean=self.sp.model.mean.value, stddev=self.sp.model.stddev.value) w = [3900, 4000, 4060] * u.AA assert_quantity_allclose(sp2(w), self.sp(w)) def test_gaussian_source_watts(): """https://github.com/spacetelescope/synphot_refactor/issues/153""" mu = 1 * u.um fwhm = (0.01 / 0.42466) * u.um flux = 1 * (u.W / u.m**2) sp = SourceSpectrum(GaussianFlux1D, mean=mu, fwhm=fwhm, total_flux=flux) tf = sp.integrate(flux_unit=units.FLAM) assert_quantity_allclose(tf, flux, rtol=1e-4) class TestPowerLawSource: """Test source spectrum with PowerLawFlux1D model.""" def setup_class(self): self.sp = SourceSpectrum(PowerLawFlux1D, amplitude=1 * units.PHOTLAM, x_0=6000 * u.AA, alpha=4) self.w = np.arange(3000, 3100, 10) * u.AA def test_no_default_wave(self): assert self.sp.waverange == [None, None] with pytest.raises(exceptions.SynphotError, match='waveset is undefined'): self.sp(None) def test_eval(self): y = self.sp(self.w) assert_quantity_allclose( y, [16, 15.78843266, 15.58035072, 15.37568551, 15.17436992, 14.97633838, 14.78152682, 14.5898726, 14.40131453, 14.21579277] * units.PHOTLAM, rtol=1e-6) def test_normalization(self): assert_quantity_allclose(self.sp(600 * u.nm), 1 * units.PHOTLAM) def test_integrate(self): ans_photlam = 1357.75787527 * (u.ph / (u.cm * u.cm * u.s)) ans_flam = 8.8608168e-09 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w), ans_photlam) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, flux_unit='flam'), ans_flam) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, integration_type='analytical'), ans_photlam, rtol=1e-4) @pytest.mark.xfail(reason='Cannot convert unit of analytic integral') def test_integrate_wontfix(self): """Powerlaw in one flux unit might not be powerlaw anymore in another, so we cannot convert flux unit of analytical integration easily. """ ans_flam = 8.8608168e-09 * (u.erg / (u.cm * u.cm * u.s)) assert_quantity_allclose( self.sp.integrate(wavelengths=self.w, flux_unit='flam', integration_type='analytical'), ans_flam) class TestBuildModelsSource: """Test compatiblity with other models not tested above.""" def test_BrokenPowerLaw1D(self): sp = SourceSpectrum( BrokenPowerLaw1D, amplitude=1, x_break=6000, alpha_1=1, alpha_2=4) y = sp([5000, 6000, 7000]) assert_quantity_allclose(y, [1.2, 1, 0.53977509] * units.PHOTLAM) def test_Const1D(self): sp = SourceSpectrum(Const1D, amplitude=1) y = sp([1, 1000, 1e6]) assert_quantity_allclose(y, 1 * units.PHOTLAM, rtol=0) def test_ConstFlux1D(self): sp = SourceSpectrum(ConstFlux1D, amplitude=1 * u.Jy) w = [1, 1000, 1e6] * u.AA with u.add_enabled_equivalencies(u.spectral_density(w)): assert_quantity_allclose(sp(w), 1 * u.Jy) def test_ExponentialCutoffPowerLaw1D(self): sp = SourceSpectrum( ExponentialCutoffPowerLaw1D, amplitude=1, x_0=6000, x_cutoff=10000, alpha=4) y = sp([5000, 6000, 10000]) assert_quantity_allclose( y, [1.25770198, 0.54881164, 0.04767718] * units.PHOTLAM) def test_LogParabola1D(self): sp = SourceSpectrum( LogParabola1D, amplitude=1, x_0=6000, alpha=1, beta=4) y = sp([5000, 6000, 7000]) assert_quantity_allclose(y, [1.0505953, 1, 0.77942375] * units.PHOTLAM) def test_Lorentz1D(self): sp = SourceSpectrum(Lorentz1D, amplitude=1, x_0=6000, fwhm=100) y = sp([5000, 6000, 7000]) assert_quantity_allclose( y, [0.00249377, 1, 0.00249377] * units.PHOTLAM, rtol=1e-5) def test_RickerWavelet1D(self): sp = SourceSpectrum(RickerWavelet1D, amplitude=1, x_0=6000, sigma=100) y = sp([5000, 6000, 7000]) assert_quantity_allclose( y, [-1.90946235e-20, 1, -1.90946235e-20] * units.PHOTLAM) def test_PowerLaw1D(self): sp = SourceSpectrum(PowerLaw1D, amplitude=1, x_0=6000, alpha=4) y = sp([5000, 6000, 7000]) assert_quantity_allclose(y, [2.0736, 1, 0.53977509] * units.PHOTLAM) class TestNormalize: """Test source spectrum normalization.""" def setup_class(self): """``expr`` stores the equivalent IRAF SYNPHOT command.""" # Blackbody: bb(5000) self.bb = SourceSpectrum(BlackBodyNorm1D, temperature=5000) # Gaussian emission line: em(5500, 250, 1e-13, flam) tf_unit = u.erg / (u.cm * u.cm * u.s) self.em = SourceSpectrum(GaussianFlux1D, mean=5500, total_flux=(1e-13 * tf_unit), fwhm=250) # ACS bandpass: band(acs,hrc,f555w) bandfile = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests') self.acs = SpectralElement.from_file(bandfile) # Box bandpass: box(5500,1) self.abox = SpectralElement(Box1D, amplitude=1, x_0=5500, width=1) def _select_sp(self, sp_type): if sp_type == 'bb': sp = self.bb elif sp_type == 'em': sp = self.em else: sp = None return sp def _compare_countrate(self, rn_sp, ans_countrate): # Observation is needed to compare with expected count rate # although it is tested in test_observation.py with warnings.catch_warnings(): warnings.filterwarnings( 'ignore', message=r'.*Source spectrum will be evaluated ' r'outside pre-defined waveset.*', category=AstropyUserWarning) obs = Observation(rn_sp, self.acs, force='extrap') ct_rate = obs.countrate(_area) # 0.7% agreement with IRAF SYNPHOT COUNTRATE assert_quantity_allclose( ct_rate, ans_countrate * (u.ct / u.s), rtol=0.007) @pytest.mark.parametrize( ('sp_type', 'rn_val', 'ans_countrate'), [('bb', 1e-5, 117.9167), ('bb', 1e-16 * units.PHOTNU, 116.8613), ('bb', 1e-16 * units.FLAM, 326.4773), ('bb', 20 * u.STmag, 118.5366), ('bb', 1e-27 * units.FNU, 323.5549), ('bb', 20 * u.ABmag, 117.4757), ('bb', 1e-4 * u.Jy, 323.5547), ('bb', 0.1 * u.mJy, 323.5548), ('em', 1e-4, 277.4368), ('em', 1e-15 * units.PHOTNU, 274.9537), ('em', 1e-16 * units.FLAM, 76.81425), ('em', 18 * u.STmag, 175.9712), ('em', 1e-27 * units.FNU, 76.12671), ('em', 18 * u.ABmag, 174.3967), ('em', 1e-3 * u.Jy, 761.2667), ('em', 1 * u.mJy, 761.2666)]) def test_renorm_density(self, sp_type, rn_val, ans_countrate): sp = self._select_sp(sp_type) rn_sp = sp.normalize(rn_val, band=self.abox) self._compare_countrate(rn_sp, ans_countrate) @pytest.mark.parametrize( ('sp_type', 'rn_val', 'ans_countrate'), [('bb', 2 * u.count, 2), ('bb', -1 * units.OBMAG, 2.511886), ('em', 2 * u.count, 2), ('em', -1 * units.OBMAG, 2.511888)]) def test_renorm_nondensity(self, sp_type, rn_val, ans_countrate): sp = self._select_sp(sp_type) rn_sp = sp.normalize(rn_val, band=self.acs, area=_area) self._compare_countrate(rn_sp, ans_countrate) @pytest.mark.remote_data @pytest.mark.parametrize( ('sp_type', 'ans_countrate'), [('bb', 115.9126), ('em', 27.2856)]) def test_renorm_vegamag(self, sp_type, ans_countrate): sp = self._select_sp(sp_type) rn_sp = sp.normalize(20 * units.VEGAMAG, band=self.abox, vegaspec=_vspec) self._compare_countrate(rn_sp, ans_countrate) def test_renorm_noband_jy(self): """Replace this with real test when it is implemented.""" with pytest.raises(NotImplementedError): self.em.normalize(1e-23 * u.Jy) def test_renorm_partial_notmost(self): """Test force=True for 'partial_notmost' overlap.""" sp = SourceSpectrum(Empirical1D, points=[5000, 6000], lookup_table=[1, 1]) with pytest.warns(AstropyUserWarning, match=r'Spectrum is not defined everywhere'): rn_sp = sp.normalize(1e-23 * u.Jy, band=self.acs, force=True) assert 'PartialRenorm' in rn_sp.warnings assert 'PartialRenorm' not in sp.warnings # Partial overlap without force with pytest.raises(exceptions.PartialOverlap): sp.normalize(1, band=self.acs) def test_renorm_partial_most(self): """Test 'partial_most' overlap.""" bp = SpectralElement(Box1D, amplitude=1, x_0=5600, width=870) with pytest.warns(AstropyUserWarning, match=r'Spectrum is not defined everywhere'): rn_sp = self.em.normalize(1e-23 * u.Jy, band=bp) assert 'PartialRenorm' in rn_sp.warnings assert 'PartialRenorm' not in self.em.warnings assert '99%' in rn_sp.warnings['PartialRenorm'] def test_exceptions(self): # Invalid passband with pytest.raises(exceptions.SynphotError): self.bb.normalize(10, band=np.ones(10)) # Disjoint passband bp = SpectralElement(Box1D, amplitude=1, x_0=30000, width=1) with pytest.raises(exceptions.DisjointError): self.em.normalize(10, band=bp) # Missing Vega spectrum with pytest.raises(exceptions.SynphotError): self.bb.normalize(10 * units.VEGAMAG, band=self.abox) # Zero flux sp = SourceSpectrum(Const1D, amplitude=0) with pytest.raises(exceptions.SynphotError): sp.normalize(100 * u.ct, band=self.abox, area=_area) class TestRedShift: """Test redshifted source spectrum. ``waveset`` already tested in `TestWaveset`. """ def setup_class(self): x0 = 5000 totflux = 1e-23 * (u.erg / (u.cm * u.cm * u.s)) # 1 Jy * Hz fwhm = 100 self.sp_z0 = SourceSpectrum( GaussianFlux1D, total_flux=totflux, mean=x0, fwhm=fwhm) self.sp = SourceSpectrum( GaussianFlux1D, total_flux=totflux, mean=x0, fwhm=fwhm) self.sp.z = 1.3 def test_property(self): with pytest.raises(exceptions.SynphotError): self.sp.z = 1 * u.AA with pytest.raises(exceptions.SynphotError): self.sp.z_type = 'unknown_behavior' assert self.sp_z0.z == 0 assert self.sp.z == 1.3 assert self.sp_z0.z_type == self.sp.z_type == 'wavelength_only' assert isinstance(self.sp_z0.model, Gaussian1D) assert isinstance(self.sp.model, modeling.core.CompoundModel) def test_composite_redshift(self): sp2 = self.sp_z0 + self.sp # centers: 5000, 11500 sp2.z = 0.5 # centers: 7500, 17250 assert_quantity_allclose(sp2([7500, 17250]), self.sp_z0(5000)) def test_const_flux_redshift(self): """Constant flux in Jy is not constant in PHOTLAM.""" sp_z0 = SourceSpectrum(ConstFlux1D, amplitude=1 * u.Jy) sp = SourceSpectrum(ConstFlux1D, amplitude=1 * u.Jy, z=1.3) assert_quantity_allclose(sp_z0(3000), sp(6900)) def test_conserve_flux_redshift(self): """Test redshift behavior that conserves flux.""" sp = SourceSpectrum(self.sp_z0.model, z=1.3, z_type='conserve_flux') fac = 1 / (1 + sp.z) wave = [5000, 11500] assert_quantity_allclose(sp(wave), self.sp(wave) * fac) assert_quantity_allclose(sp.integrate(), self.sp_z0.integrate()) @pytest.mark.skipif(not HAS_SPECUTILS, reason='specutils is not installed') class TestSpecutilsBridgeSource: def test_from_spectrum1d_Empirical1D_source(self): from synphot.compat_specutils import Spectrum lamb = [1000, 5000, 10000] * u.AA flux = [0, -0.5e-17, 5.6e-17] * units.FLAM spec = Spectrum(spectral_axis=lamb, flux=flux) spec.meta['source'] = [1, 2, 3] with pytest.warns(AstropyUserWarning, match=r'contained negative flux or throughput'): sp = SourceSpectrum.from_spectrum1d(spec, keep_neg=False) w = sp.waveset y = sp(w, flux_unit=units.FLAM) assert isinstance(sp.model, Empirical1D) assert sp.meta['header']['source'] == spec.meta['source'] assert_quantity_allclose(w, lamb) assert_quantity_allclose(y, [0, 0, 5.6e-17] * units.FLAM) # Ensure metadata is copied, not referenced spec.meta['source'][1] = 99 assert sp.meta['header']['source'] == [1, 2, 3] sp.meta['header']['source'][0] = 100 assert spec.meta['source'] == [1, 99, 3] def test_from_spectrum1d_Empirical1D_source_masked(self): from synphot.compat_specutils import Spectrum lamb = [1000, 5000, 10000] * u.AA flux = [0, -0.5e-17, 5.6e-17] * units.FLAM mask = np.array([False, True, False]) spec = Spectrum(spectral_axis=lamb, flux=flux, mask=mask) sp = SourceSpectrum.from_spectrum1d(spec, keep_neg=False) w = sp.waveset y = sp(w, flux_unit=units.FLAM) assert_quantity_allclose(w, [1000, 10000] * u.AA) assert_quantity_allclose(y, [0, 5.6e-17] * units.FLAM) def test_to_spectrum1d_Empirical1D_source(self): lamb = [1000, 5000, 10000] * u.AA flux = [1.5, 0.5, 99.9] * u.nJy sp = SourceSpectrum(Empirical1D, points=lamb, lookup_table=flux, meta={'source': 'foo'}) spec = sp.to_spectrum1d(flux_unit=u.nJy) assert_quantity_allclose(spec.spectral_axis, lamb) assert_quantity_allclose(spec.flux, flux) assert spec.meta['source'] == 'foo' # Ensure redshifting does not change Spectrum sp.z = 0.1 assert_quantity_allclose(spec.flux, flux) with pytest.raises(AssertionError): assert_quantity_allclose(sp(lamb, flux_unit=u.nJy), flux) # Unsupported flux unit with pytest.raises(exceptions.SynphotError) as e: sp.to_spectrum1d(flux_unit=u.count) assert 'Area is compulsory' in str(e.value) def test_to_spectrum1d_GaussianFlux1D(self): from specutils.analysis import gaussian_fwhm total_flux = 1 * (u.erg / u.s / u.cm / u.cm) fwhm = 10 * u.AA sp = SourceSpectrum(GaussianFlux1D, mean=5000 * u.AA, fwhm=fwhm, total_flux=total_flux) spec = sp.to_spectrum1d(flux_unit=units.FLAM) assert_quantity_allclose(spec.spectral_axis, sp.waveset) assert_quantity_allclose( spec.flux, sp(sp.waveset, flux_unit=units.FLAM)) assert_quantity_allclose(gaussian_fwhm(spec), fwhm, rtol=1e-5) assert spec.meta['expr'] == 'em(5000, 10, 1, FLAM)' def test_to_spectrum1d_ConstFlux1D(self): flux = 1 * units.PHOTLAM sp = SourceSpectrum(ConstFlux1D, amplitude=flux) with pytest.raises(exceptions.SynphotError) as e: spec = sp.to_spectrum1d() assert 'Provide wavelengths for sampling' in str(e.value) w = [100, 500, 1000] * u.nm spec = sp.to_spectrum1d(wavelengths=w) assert_quantity_allclose(spec.spectral_axis, w) assert_quantity_allclose(spec.flux, flux) assert len(spec.meta) == 0 def test_to_spectrum1d_compound_source(self): from specutils.analysis import line_flux total_flux = 0.5 * (u.erg / u.s / u.cm / u.cm) fwhm = 1 * u.AA g1 = SourceSpectrum(GaussianFlux1D, mean=300 * u.nm, fwhm=fwhm, total_flux=total_flux) g2 = SourceSpectrum(GaussianFlux1D, mean=400 * u.nm, fwhm=fwhm, total_flux=total_flux) sp = g1 + g2 spec = sp.to_spectrum1d(flux_unit=units.FLAM) integrated_flux = sp.integrate(flux_unit=units.FLAM) assert_quantity_allclose( integrated_flux, 1 * total_flux.unit, rtol=0.002) assert_quantity_allclose(integrated_flux, line_flux(spec), rtol=1e-5) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_thermal.py000066400000000000000000000044241511632712700264400ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test thermal.py module.""" # STDLIB import os # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.utils.data import get_pkg_data_filename # LOCAL from synphot import exceptions from synphot.thermal import ThermalSpectralElement def setup_module(module): import astropy.constants as const from astropy.constants import si, astropyconst13 const.sigma_sb = si.sigma_sb = astropyconst13.sigma_sb const.h = si.h = astropyconst13.h const.k_B = si.k_B = astropyconst13.k_B def teardown_module(module): import astropy.constants as const from astropy.constants import si, astropyconst20 const.sigma_sb = si.sigma_sb = astropyconst20.sigma_sb const.h = si.h = astropyconst20.h const.k_B = si.k_B = astropyconst20.k_B class TestThermalSpectralElement: """Test ``ThermalSpectralElement``.""" def setup_class(self): thfile = get_pkg_data_filename( os.path.join('data', 'wfc3_ir_g141_src_003_th.fits'), package='synphot.tests') self.th = ThermalSpectralElement.from_file(thfile) def test_taper(self): with pytest.raises(NotImplementedError): self.th.taper() def test_properties(self): assert self.th.temperature == 237.3 * u.K assert self.th.beam_fill_factor == 1 def test_thermal_source(self): sp = self.th.thermal_source() assert sp.meta['temperature'] == self.th.temperature assert sp.meta['beam_fill_factor'] == self.th.beam_fill_factor np.testing.assert_allclose( sp([6800, 7800, 8800, 17920, 18920, 19920]).value, [1.246735e-30, 6.63655885e-26, 2.80933935e-22, 2.76427032e-08, 1.33011769e-07, 5.40857951e-07], rtol=1e-5) def test_from_file_exceptions(self): # Non-FITS file with pytest.raises(exceptions.SynphotError): ThermalSpectralElement.from_file('dummy.txt') # Missing DEFT keyword thfile = get_pkg_data_filename( os.path.join('data', 'hst_acs_hrc_f555w.fits'), package='synphot.tests') with pytest.raises(exceptions.SynphotError): ThermalSpectralElement.from_file(thfile, flux_col='THROUGHPUT') spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_units.py000066400000000000000000000165301511632712700261470ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test units.py module. .. note:: VEGAMAG conversion is tested in test_spectrum_source.py. """ # THIRD-PARTY import numpy as np import pytest # ASTROPY from astropy import units as u from astropy.tests.helper import assert_quantity_allclose # LOCAL from synphot import exceptions, units # Wavelength conversions _wave_angstrom = [0.1, 5000.0, 10000.0] * u.AA _wavenum_micron = [1e+5, 2.0, 1.0] * (u.micron ** -1) _freq = [2.99792458e+19, 5.99584916e+14, 2.99792458e+14] * u.Hz # Flux conversions # http://ssb.stsci.edu/cdbs/supplemental_calspec/grw_70d5824_stisnic_002.ascii _area = 45238.93416 * units.AREA # HST _wave = [4956.8, 4959.55, 4962.3] * u.AA _flux_photlam = [9.7654e-3, 1.003896e-2, 9.78473e-3] * units.PHOTLAM _flux_photnu = [8.00335589e-14, 8.23668949e-14, 8.03700310e-14] * units.PHOTNU _flux_flam = [3.9135e-14, 4.0209e-14, 3.9169e-14] * units.FLAM _flux_fnu = [3.20735792e-25, 3.29903646e-25, 3.21727226e-25] * units.FNU _flux_jy = [3.20735792e-2, 3.29903646e-2, 3.21727226e-2] * u.Jy _flux_count = [1214.88479883, 1248.91795446, 1217.28946691] * u.count _flux_stmag = [12.41858665, 12.38919182, 12.41764379] * u.STmag _flux_abmag = [12.63463143, 12.60403221, 12.63128047] * u.ABmag _flux_obmag = [-7.71133775, -7.74133477, -7.71348466] * units.OBMAG _flux_vegamag = [12.72810665, 12.69861694, 12.72605148] * units.VEGAMAG def test_implicit_assumptions(): """These assumptions must be valid for proper conversions.""" assert units.HC.unit == u.AA * u.erg assert units.AREA.physical_type == 'area' assert units.THROUGHPUT.physical_type == 'dimensionless' np.testing.assert_allclose(units.SR_PER_ARCSEC2, 2.3504430539097885e-11) @pytest.mark.parametrize( ('in_u', 'out_u'), [('angstroms', u.AA), ('inversemicrons', u.micron ** -1), ('transmission', units.THROUGHPUT), ('TRANSMISSION', units.THROUGHPUT), ('extinction', units.THROUGHPUT), ('emissivity', units.THROUGHPUT), ('photlam', units.PHOTLAM), ('photnu', units.PHOTNU), ('flam', units.FLAM), ('fnu', units.FNU), ('stmag', u.STmag), ('abmag', u.ABmag), ('obmag', units.OBMAG), ('vegamag', units.VEGAMAG), ('Kelvin', u.K), (u.m, u.m)]) def test_validate_unit(in_u, out_u): """Test unit validation.""" assert units.validate_unit(in_u) == out_u @pytest.mark.parametrize( ('in_u', 'out_u'), [('angstroms', u.AA), ('inversemicrons', u.micron ** -1), ('Hz', u.Hz)]) def test_validate_wave_unit(in_u, out_u): """Test wavelength unit validation.""" assert units.validate_wave_unit(in_u) == out_u def test_validate_unit_exceptions(): """Test that unit validation raises appropriate exceptions.""" with pytest.raises(exceptions.SynphotError): units.validate_unit(10) with pytest.raises(ValueError): units.validate_unit('foo') with pytest.raises(exceptions.SynphotError): units.validate_wave_unit('Kelvin') @pytest.mark.parametrize( ('in_val', 'out_u', 'eqv', 'ans'), [(100.0, units.AREA, [], 100.0), (100.0 * units.AREA, u.m * u.m, [], 0.01), (_wave_angstrom, u.micron ** -1, u.spectral(), _wavenum_micron.value)]) def test_validate_quantity(in_val, out_u, eqv, ans): """Test quantity validation.""" result = units.validate_quantity(in_val, out_u, equivalencies=eqv) np.testing.assert_allclose(result.value, ans) assert result.unit == out_u @pytest.mark.parametrize( ('in_q', 'out_u', 'ans'), [(_wave_angstrom, u.Hz, _freq), (_freq, u.AA, _wave_angstrom), (_wave_angstrom, u.micron ** -1, _wavenum_micron), (_wavenum_micron, u.AA, _wave_angstrom), (_freq, u.micron ** -1, _wavenum_micron), (_wavenum_micron, u.Hz, _freq)]) def test_wave_conversion(in_q, out_u, ans): """Full equivalencies test with direct conversion.""" result = in_q.to(out_u, equivalencies=u.spectral()) np.testing.assert_allclose(result.value, ans.value) assert result.unit == ans.unit @pytest.mark.parametrize( ('in_q', 'out_u', 'ans', 'support_scalar'), [(_flux_photlam.value, units.PHOTLAM, _flux_photlam, True), (_flux_photlam, u.count, _flux_count, False), (_flux_count, units.PHOTLAM, _flux_photlam, False), (_flux_photlam, units.OBMAG, _flux_obmag, False), (_flux_obmag, units.PHOTLAM, _flux_photlam, False), (_flux_count, units.OBMAG, _flux_obmag, False), (_flux_obmag, u.count, _flux_count, False), (_flux_photlam, units.FLAM, _flux_flam, True), (_flux_flam, units.PHOTLAM, _flux_photlam, True), (_flux_photlam, u.STmag, _flux_stmag, True), (_flux_stmag, units.PHOTLAM, _flux_photlam, True), (_flux_flam, u.STmag, _flux_stmag, True), (_flux_stmag, units.FLAM, _flux_flam, True), (_flux_photlam, units.PHOTNU, _flux_photnu, True), (_flux_photnu, units.PHOTLAM, _flux_photlam, True), (_flux_photlam, units.FNU, _flux_fnu, True), (_flux_fnu, units.PHOTLAM, _flux_photlam, True), (_flux_photlam, u.ABmag, _flux_abmag, True), (_flux_abmag, units.PHOTLAM, _flux_photlam, True), (_flux_fnu, u.ABmag, _flux_abmag, True), (_flux_abmag, units.FNU, _flux_fnu, True), (_flux_fnu, u.STmag, _flux_stmag, True), (_flux_fnu, u.mJy, _flux_jy.to(u.mJy), True), (_flux_photlam, u.Jy, _flux_jy, True), (_flux_jy, units.PHOTLAM, _flux_photlam, True), (_flux_flam, u.Jy, _flux_jy, True), (np.zeros(3) * units.FNU, units.FLAM, np.zeros(3) * units.FLAM, True)]) def test_flux_conversion(in_q, out_u, ans, support_scalar): """Test flux conversion, except VEGAMAG.""" result = units.convert_flux(_wave, in_q, out_u, area=_area) np.testing.assert_allclose(result.value, ans.value, rtol=1e-6) assert result.unit == ans.unit # Scalar should work, except for count and OBMAG, which need bin centers. if support_scalar: i = 0 result = units.convert_flux(_wave[i], in_q[i], out_u, area=_area) np.testing.assert_allclose(result.value, ans[i].value, rtol=1e-6) assert result.unit == ans[i].unit def test_flux_conversion_exceptions(): """Test for appropriate exceptions.""" # Invalid flux unit with pytest.raises(u.UnitsError): units.convert_flux(_wave, _wave, units.PHOTLAM) with pytest.raises(u.UnitsError): units.convert_flux(_wave, _flux_photlam, u.AA) # Missing Vega spectrum with pytest.raises(exceptions.SynphotError): units.convert_flux(_wave, _flux_fnu, units.VEGAMAG, vegaspec=None) # Missing area with pytest.raises(exceptions.SynphotError): units.convert_flux(_wave, _flux_photlam, u.count, area=None) with pytest.raises(exceptions.SynphotError): units.convert_flux(_wave, _flux_obmag, units.PHOTLAM, area=None) def test_vegamag_obmag_calculations(): assert_quantity_allclose( 5 * units.VEGAMAG - 2.5 * units.VEGAMAG, u.Magnitude(2.5)) assert_quantity_allclose( (5 * units.VEGAMAG - 2.5 * units.VEGAMAG).to(u.one), 0.1) # Should not be interchangeable with astropy mag unit or with another # custom mag unit, but error is only raised if .to(u.one) is called. msg = 'subtract magnitudes so the unit got lost' with pytest.raises(u.UnitConversionError, match=msg): (5 * units.VEGAMAG - 2.5 * u.STmag).to(u.one) with pytest.raises(u.UnitConversionError, match=msg): 5 * units.VEGAMAG - 2.5 * units.OBMAG.to(u.one) spacetelescope-synphot_refactor-c682dc1/synphot/tests/test_utils.py000066400000000000000000000141131511632712700261400ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Test utils.py module.""" # STDLIB import os # THIRD PARTY import numpy as np import pytest # ASTROPY from astropy import units as u # LOCAL from synphot import exceptions, utils, units @pytest.mark.parametrize( ('a', 'b', 'ans'), [(np.arange(5, 8), np.arange(10), 'full'), (np.arange(10), np.arange(5, 8), 'partial'), (np.arange(3), np.arange(2, 5), 'partial'), (np.arange(4, 8), np.arange(2, 5), 'partial'), (np.arange(3), np.arange(3, 6), 'none'), (np.arange(3, 6), np.arange(3), 'none')]) def test_overlap_status(a, b, ans): """Test overlap status validation.""" assert utils.overlap_status(a, b) == ans def test_validate_totalflux(): """Test integrated flux validation.""" utils.validate_totalflux(0.01) utils.validate_totalflux(0.01 * units.FLAM) @pytest.mark.filterwarnings('ignore:invalid value') @pytest.mark.parametrize( 'val', (-0.01, -0.01 * units.FLAM, 0, 0 * units.PHOTLAM, np.inf, np.inf * u.Jy, np.nan, np.nan * units.FLAM)) def test_validate_totalflux_invalid(val): """Invalid integrated flux.""" with pytest.raises(exceptions.SynphotError): utils.validate_totalflux(val) def test_validate_wavelengths(): """Test wavelengths validation.""" # Valid wavelengths (ascending) a = np.arange(1, 11) utils.validate_wavelengths(a) # Valid wavelengths (descending) a = a[::-1] utils.validate_wavelengths(a * u.micron) # Invalid wavelengths with pytest.raises(exceptions.SynphotError): utils.validate_wavelengths(1.0 * u.K) with pytest.raises(exceptions.ZeroWavelength): utils.validate_wavelengths(np.arange(10)) with pytest.raises(exceptions.UnsortedWavelength): utils.validate_wavelengths([1000, 1002, 1001, 1003, 1004]) try: utils.validate_wavelengths([1000, 1001, 1002, 1003, 1003]) except exceptions.DuplicateWavelength as e: np.testing.assert_array_equal(e.rows, 3) @pytest.mark.parametrize( ('num', 'delta', 'log', 'ans'), [(10, None, True, [10.0, 10.71773463, 11.48698355, 12.31144413, 13.19507911, 14.14213562, 15.15716567, 16.24504793, 17.41101127, 18.66065983]), (0, 0.05, True, [10.0, 11.22018454, 12.58925412, 14.12537545, 15.84893192, 17.7827941, 19.95262315]), (10, None, False, np.arange(10, 20)), (0, 1.0, False, np.arange(10, 20))]) def test_genwave(num, delta, log, ans): """Test wavelength generation.""" wave, wave_str = utils.generate_wavelengths( minwave=10, maxwave=20, num=num, delta=delta, log=log, wave_unit=u.micron) np.testing.assert_allclose(wave.value, ans) assert wave.unit == u.micron assert isinstance(wave_str, str) class TestMergeWave: """Test wavelengths merging.""" def setup_class(self): self.thres = 1e-12 self.wave = [5000.0, 5000.01, 5000.02, 5000.03, 5000.04, 6000.0] def test_merge_none(self): assert utils.merge_wavelengths(None, None) is None np.testing.assert_array_equal( utils.merge_wavelengths(None, self.wave), self.wave) np.testing.assert_array_equal( utils.merge_wavelengths(self.wave, None), self.wave) def test_merge_thres(self): w = [5000.005, 5000.02 + self.thres, 5500.0, 6000.0] ans = [5000.0, 5000.005, 5000.01, 5000.02, 5000.03, 5000.04, 5500.0, 6000.0] wave = utils.merge_wavelengths(self.wave, w, threshold=self.thres) dw = wave[1:] - wave[:-1] np.testing.assert_allclose(wave, ans) assert np.all(dw > self.thres) def test_merge_same(self): wave = utils.merge_wavelengths(self.wave, self.wave) np.testing.assert_array_equal(wave, self.wave) def test_download_bad_root(tmp_path): """Test data download helper when input dir is invalid.""" ptr = tmp_path / 'bad_cdbs' ptr.write_text("something") cdbs_root = str(ptr) with pytest.raises(OSError, match=".* must be a directory"): utils.download_data(cdbs_root, verbose=False) with pytest.raises(FileNotFoundError): utils.download_data('', verbose=False) def test_download_data(tmp_path): """Test data download helper in dry run mode.""" from synphot.config import conf # Use case where user downloads all data into new dir. cdbs_root = str(tmp_path / 'cdbs') file_list_1 = utils.download_data(cdbs_root, verbose=False, dry_run=True) filename = file_list_1[0] assert len(file_list_1) == 21 assert filename.startswith(cdbs_root) assert os.path.isdir(os.path.join(cdbs_root, 'calspec')) # Make dummy files for the next step. for fname in file_list_1: with open(fname, 'w') as f: f.write('\n') # Use case where user downloads only some data into existing dir. os.remove(filename) file_list_2 = utils.download_data(cdbs_root, verbose=False, dry_run=True) assert len(file_list_2) == 1 and file_list_2[0] == filename # Re-create the deleted dummy file for next step. with open(filename, 'w') as f: f.write('\n') # Use case where user redefined data file to be non-STScI. # While the given file will be used, default Vega is downloaded anyway. filename = [fname for fname in file_list_1 if fname.endswith('alpha_lyr_stis_011.fits')][0] os.remove(filename) with conf.set_temp('vega_file', '/custom/host/my_vega.fits'): file_list_2 = utils.download_data( cdbs_root, verbose=False, dry_run=True) assert len(file_list_2) == 1 and file_list_2[0] == filename def test_download_data_cache_only(): """Test data download helper in dry run mode (cache only).""" # Use case where user downloads all data into new dir. # The other use cases in test_download_data() will depend on the native # behavior of astropy caching and not tested here. file_list_1 = utils.download_data(None, verbose=False, dry_run=True) filename = file_list_1[0] assert len(file_list_1) == 21 assert filename.startswith('http') spacetelescope-synphot_refactor-c682dc1/synphot/thermal.py000066400000000000000000000111571511632712700242400ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This module defines thermal spectra.""" # ASTROPY from astropy import units as u from astropy.io import fits from astropy.io.fits.connect import is_fits # LOCAL from synphot import exceptions, specio, units from synphot.models import BlackBody1D, Empirical1D from synphot.spectrum import BaseUnitlessSpectrum, SourceSpectrum __all__ = ['ThermalSpectralElement'] class ThermalSpectralElement(BaseUnitlessSpectrum): """Class to handle spectral element with associated thermal properties. This differs from `~synphot.spectrum.SpectralElement` in the sense that it carries thermal parameters, i.e., temperature and beam filling factor. .. note:: Use :func:`thermal_source` to apply its emissivity to an existing beam. Parameters ---------- modelclass, kwargs See `~synphot.spectrum.BaseSpectrum`. temperature : float or `~astropy.units.quantity.Quantity` Temperature. If not a Quantity, assumed to be in Kelvin. beam_fill_factor : float or `~astropy.units.quantity.Quantity` Beam filling factor. If a Quantity, must be unitless. Defaults to 1. """ def __init__(self, modelclass, temperature, beam_fill_factor=1, **kwargs): super(ThermalSpectralElement, self).__init__(modelclass, **kwargs) self.temperature = temperature self.beam_fill_factor = beam_fill_factor @property def temperature(self): """Temperature.""" return self._temperature @temperature.setter def temperature(self, what): """Set temperature.""" self._temperature = units.validate_quantity(what, u.K) @property def beam_fill_factor(self): """Beam filling factor.""" return self._beam_fill_factor @beam_fill_factor.setter def beam_fill_factor(self, what): """Set beam filling factor.""" self._beam_fill_factor = units.validate_quantity(what, '').value def taper(self, **kwargs): """Tapering is disabled.""" raise NotImplementedError( 'Thermal spectral element cannot be tapered.') def thermal_source(self): """Apply emissivity to an existing beam to produce a thermal source spectrum (without optical counterpart). Thermal source spectrum is calculated as follow: #. Create a blackbody spectrum in PHOTLAM per square arcsec with `temperature`. #. Multiply the blackbody with `beam_fill_factor` and ``self``. Returns ------- sp : `~synphot.spectrum.SourceSpectrum` Thermal source spectrum. """ sp = (SourceSpectrum(BlackBody1D, temperature=self.temperature) * units.SR_PER_ARCSEC2 * self.beam_fill_factor * self) sp.meta['temperature'] = self.temperature sp.meta['beam_fill_factor'] = self.beam_fill_factor return sp @classmethod def from_file(cls, filename, temperature_key='DEFT', beamfill_key='BEAMFILL', **kwargs): """Creates a thermal spectral element from file. .. note:: Only FITS format is supported. Parameters ---------- filename : str Thermal spectral element filename. temperature_key, beamfill_key : str Keywords in FITS *table extension* that store temperature (in Kelvin) and beam filling factor values. Beam filling factor is set to 1 if its keyword is missing. kwargs : dict Keywords acceptable by :func:`~synphot.specio.read_fits_spec`. Returns ------- th : `ThermalSpectralElement` Empirical thermal spectral element. Raises ------ synphot.exceptions.SynphotError Invalid inputs. """ if not is_fits("", filename, None): raise exceptions.SynphotError('Only FITS format is supported.') # Extra info from table header ext = kwargs.get('ext', 1) tab_hdr = fits.getheader(filename, ext=ext) temperature = tab_hdr.get(temperature_key) if temperature is None: raise exceptions.SynphotError( 'Missing {0} keyword.'.format(temperature_key)) beam_fill_factor = tab_hdr.get('BEAMFILL', 1) if 'flux_col' not in kwargs: kwargs['flux_col'] = 'EMISSIVITY' header, wavelengths, em = specio.read_spec(filename, **kwargs) return cls( Empirical1D, temperature, beam_fill_factor=beam_fill_factor, points=wavelengths, lookup_table=em, meta={'header': header}) spacetelescope-synphot_refactor-c682dc1/synphot/units.py000066400000000000000000000265631511632712700237550ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """This module handles photometry units that are not in `astropy.units`.""" # ASTROPY from astropy import constants as const from astropy import units as u # LOCAL from synphot import exceptions __all__ = ['H', 'C', 'HC', 'SR_PER_ARCSEC2', 'AREA', 'THROUGHPUT', 'PHOTLAM', 'PHOTNU', 'FLAM', 'FNU', 'OBMAG', 'VEGAMAG', 'spectral_density_vega', 'spectral_density_count', 'convert_flux', 'validate_unit', 'validate_wave_unit', 'validate_quantity'] # ----------------- # # General constants # # ----------------- # H = const.h.cgs # Planck's constant in erg * sec C = const.c.to('AA/s') # Speed of light in Angstrom/sec HC = H * C SR_PER_ARCSEC2 = u.rad.to(u.arcsec) ** -2 # steradian per arcsec^2 # ------------- # # synphot units # # ------------- # # Default unit of area covered by flux AREA = u.cm * u.cm # synphot unitless unit (using def_unit mess up arithmetic result unit string) THROUGHPUT = u.dimensionless_unscaled # synphot flux units PHOTLAM = u.def_unit( 'photlam', u.photon / (u.cm**2 * u.s * u.AA), format={'generic': 'PHOTLAM', 'console': 'PHOTLAM'}) PHOTNU = u.def_unit( 'photnu', u.photon / (u.cm**2 * u.s * u.Hz), format={'generic': 'PHOTNU', 'console': 'PHOTNU'}) FLAM = u.def_unit( 'flam', u.erg / (u.cm**2 * u.s * u.AA), format={'generic': 'FLAM', 'console': 'FLAM'}) FNU = u.def_unit( 'fnu', u.erg / (u.cm**2 * u.s * u.Hz), format={'generic': 'FNU', 'console': 'FNU'}) _u_ob = u.def_unit('OB') OBMAG = u.mag(_u_ob) _u_vega = u.def_unit('VEGA') VEGAMAG = u.mag(_u_vega) # Register with astropy units u.add_enabled_units([PHOTLAM, PHOTNU, FLAM, FNU, OBMAG, VEGAMAG]) # --------------- # # Flux conversion # # --------------- # def spectral_density_vega(wav, vegaflux): """Flux equivalencies between PHOTLAM and VEGAMAG. Parameters ---------- wav : `~astropy.units.quantity.Quantity` Quantity associated with values being converted (e.g., wavelength or frequency). vegaflux : `~astropy.units.quantity.Quantity` Flux of Vega at ``wav``. Returns ------- eqv : list List of equivalencies. """ vega_photlam = vegaflux.to( PHOTLAM, equivalencies=u.spectral_density(wav)).value def converter(x): return x / vega_photlam def iconverter(x): return x * vega_photlam return [(PHOTLAM, VEGAMAG.physical_unit, converter, iconverter)] def spectral_density_count(wav, area): """Flux equivalencies between PHOTLAM and count/OBMAG. Parameters ---------- wav : `~astropy.units.quantity.Quantity` Quantity associated with values being converted (e.g., wavelength or frequency). area : `~astropy.units.quantity.Quantity` Telescope collecting area. Returns ------- eqv : list List of equivalencies. """ from synphot.binning import calculate_bin_widths, calculate_bin_edges wav = wav.to(u.AA, equivalencies=u.spectral()) area = area.to(AREA) bin_widths = calculate_bin_widths(calculate_bin_edges(wav)) factor = bin_widths.value * area.value def converter_count(x): return x * factor def iconverter_count(x): return x / factor return [(PHOTLAM, u.count, converter_count, iconverter_count), (PHOTLAM, OBMAG.physical_unit, converter_count, iconverter_count)] def convert_flux(wavelengths, fluxes, out_flux_unit, **kwargs): """Perform conversion for :ref:`supported flux units `. Parameters ---------- wavelengths : array-like or `~astropy.units.quantity.Quantity` Wavelength values. If not a Quantity, assumed to be in Angstrom. fluxes : array-like or `~astropy.units.quantity.Quantity` Flux values. If not a Quantity, assumed to be in PHOTLAM. out_flux_unit : str or `~astropy.units.Unit` Output flux unit. area : float or `~astropy.units.quantity.Quantity` Area that fluxes cover. If not a Quantity, assumed to be in :math:`cm^{2}`. This value *must* be provided for conversions involving OBMAG and count, otherwise it is not needed. vegaspec : `~synphot.spectrum.SourceSpectrum` Vega spectrum that *must* be provided for conversions involving VEGAMAG, otherwise it is not needed. For instance, it can be obtained from :func:`~synphot.spectrum.SourceSpectrum.from_vega`. Returns ------- out_flux : `~astropy.units.quantity.Quantity` Converted flux values. Raises ------ astropy.units.UnitsError Conversion failed. synphot.exceptions.SynphotError Area or Vega spectrum is not given when needed. """ if not isinstance(fluxes, u.Quantity): fluxes = fluxes * PHOTLAM out_flux_unit = validate_unit(out_flux_unit) out_flux_unit_name = out_flux_unit.to_string() in_flux_unit_name = fluxes.unit.to_string() # No conversion necessary if in_flux_unit_name == out_flux_unit_name: return fluxes in_flux_type = fluxes.unit.physical_type out_flux_type = out_flux_unit.physical_type # Wavelengths must Quantity if not isinstance(wavelengths, u.Quantity): wavelengths = wavelengths * u.AA eqv = u.spectral_density(wavelengths) # Use built-in astropy equivalencies try: out_flux = fluxes.to(out_flux_unit, eqv) # Use PHOTLAM as in-between unit except u.UnitConversionError: # Convert input unit to PHOTLAM if fluxes.unit == PHOTLAM: flux_photlam = fluxes elif in_flux_type != 'unknown': flux_photlam = fluxes.to(PHOTLAM, eqv) else: flux_photlam = _convert_flux( wavelengths, fluxes, PHOTLAM, **kwargs) # Convert PHOTLAM to output unit if out_flux_unit == PHOTLAM: out_flux = flux_photlam elif out_flux_type != 'unknown': out_flux = flux_photlam.to(out_flux_unit, eqv) else: out_flux = _convert_flux( wavelengths, flux_photlam, out_flux_unit, **kwargs) return out_flux def _convert_flux(wavelengths, fluxes, out_flux_unit, area=None, vegaspec=None): """Flux conversion for PHOTLAM <-> X.""" flux_unit_names = (fluxes.unit.to_string(), out_flux_unit.to_string()) if PHOTLAM.to_string() not in flux_unit_names: raise exceptions.SynphotError( 'PHOTLAM must be one of the conversion units but get ' '{0}.'.format(flux_unit_names)) # VEGAMAG if VEGAMAG.to_string() in flux_unit_names: from synphot.spectrum import SourceSpectrum if not isinstance(vegaspec, SourceSpectrum): raise exceptions.SynphotError('Vega spectrum is missing.') flux_vega = vegaspec(wavelengths) out_flux = fluxes.to( out_flux_unit, equivalencies=spectral_density_vega(wavelengths, flux_vega)) # OBMAG or count elif (u.count in (fluxes.unit, out_flux_unit) or OBMAG.to_string() in flux_unit_names): if area is None: raise exceptions.SynphotError( 'Area is compulsory for conversion involving count or OBMAG.') elif not isinstance(area, u.Quantity): area = area * AREA out_flux = fluxes.to( out_flux_unit, equivalencies=spectral_density_count(wavelengths, area)) else: raise u.UnitsError('{0} and {1} are not convertible'.format( fluxes.unit, out_flux_unit)) return out_flux # ----------------- # # Utility functions # # ----------------- # def validate_unit(input_unit): """Validate unit. To be compatible with existing SYNPHOT data files: * 'angstroms' and 'inversemicrons' are accepted although unrecognized by astropy units * 'transmission', 'extinction', and 'emissivity' are converted to astropy dimensionless unit Parameters ---------- input_unit : str or `~astropy.units.Unit` Unit to validate. Returns ------- output_unit : `~astropy.units.Unit` Validated unit. Raises ------ synphot.exceptions.SynphotError Invalid unit. """ if isinstance(input_unit, str): input_unit_lowcase = input_unit.lower() # Backward-compatibility if input_unit_lowcase == 'angstroms': output_unit = u.AA elif input_unit_lowcase == 'inversemicrons': output_unit = u.micron ** -1 elif input_unit_lowcase in ('transmission', 'extinction', 'emissivity', 'throughput'): output_unit = THROUGHPUT elif input_unit_lowcase == 'jy': output_unit = u.Jy elif input_unit_lowcase == "flam": output_unit = FLAM elif input_unit_lowcase == "fnu": output_unit = FNU elif input_unit_lowcase == "photlam": output_unit = PHOTLAM elif input_unit_lowcase == "photnu": output_unit = PHOTNU elif input_unit_lowcase == "none": output_unit = u.dimensionless_unscaled elif input_unit_lowcase == "sec": output_unit = u.s # Work around mag unit limitations elif input_unit_lowcase in ('stmag', 'mag(st)'): output_unit = u.STmag elif input_unit_lowcase in ('abmag', 'mag(ab)'): output_unit = u.ABmag elif input_unit_lowcase in ('obmag', 'mag(ob)'): output_unit = OBMAG elif input_unit_lowcase in ('vegamag', 'mag(vega)'): output_unit = VEGAMAG else: try: # astropy.units is case-sensitive output_unit = u.Unit(input_unit) except ValueError: # synphot is case-insensitive output_unit = u.Unit(input_unit_lowcase) elif isinstance(input_unit, (u.UnitBase, u.LogUnit)): output_unit = input_unit else: raise exceptions.SynphotError( '{0} must be a recognized string or ' 'astropy.units.Unit'.format(input_unit)) return output_unit def validate_wave_unit(wave_unit): """Like :func:`validate_unit` but specific to wavelength.""" output_unit = validate_unit(wave_unit) unit_type = output_unit.physical_type if unit_type not in ('length', 'wavenumber', 'frequency'): raise exceptions.SynphotError( 'wavelength physical type is not length, wave number, or ' 'frequency: {0}'.format(unit_type)) return output_unit def validate_quantity(input_value, output_unit, equivalencies=[]): """Validate quantity (value and unit). .. note:: For flux conversion, use :func:`convert_flux` instead. Parameters ---------- input_value : number, array-like, or `~astropy.units.quantity.Quantity` Quantity to validate. If not a Quantity, assumed to be already in output unit. output_unit : str or `~astropy.units.Unit` Output quantity unit. equivalencies : list of equivalence pairs, optional See `astropy.units`. Returns ------- output_value : `~astropy.units.quantity.Quantity` Validated quantity in given unit. """ output_unit = validate_unit(output_unit) if isinstance(input_value, u.Quantity): output_value = input_value.to(output_unit, equivalencies=equivalencies) else: output_value = input_value * output_unit return output_value spacetelescope-synphot_refactor-c682dc1/synphot/utils.py000066400000000000000000000242651511632712700237500ustar00rootroot00000000000000# Licensed under a 3-clause BSD style license - see LICENSE.rst """Synthetic photometry utility functions.""" # STDLIB import os from shutil import copyfile # THIRD-PARTY import numpy as np # ASTROPY from astropy import units as u from astropy.config import ConfigItem from astropy.utils.data import download_file # LOCAL from synphot import exceptions, units __all__ = ['overlap_status', 'validate_totalflux', 'validate_wavelengths', 'generate_wavelengths', 'merge_wavelengths', 'download_data'] def overlap_status(a, b): """Check overlap between two arrays. Parameters ---------- a, b : array-like Arrays to check. Assumed to be in the same unit. Returns ------- result : {'full', 'partial', 'none'} * 'full' - ``a`` is within or same as ``b`` * 'partial' - ``a`` partially overlaps with ``b`` * 'none' - ``a`` does not overlap ``b`` """ # Get the endpoints a1, a2 = a.min(), a.max() b1, b2 = b.min(), b.max() # Do the comparison if a1 >= b1 and a2 <= b2: result = 'full' elif a2 < b1 or b2 < a1: result = 'none' else: result = 'partial' return result def validate_totalflux(totalflux): """Check integrated flux for invalid values. Parameters ---------- totalflux : float Integrated flux. Raises ------ synphot.exceptions.SynphotError Input is zero, negative, or not a number. """ if totalflux <= 0.0: raise exceptions.SynphotError('Integrated flux is <= 0') elif np.isnan(totalflux): raise exceptions.SynphotError('Integrated flux is NaN') elif np.isinf(totalflux): raise exceptions.SynphotError('Integrated flux is infinite') def validate_wavelengths(wavelengths): """Check wavelengths for ``synphot`` compatibility. Wavelengths must satisfy these conditions: * valid unit type, if given * no zeroes * monotonic ascending or descending * no duplicate values Parameters ---------- wavelengths : array-like or `~astropy.units.quantity.Quantity` Wavelength values. Raises ------ synphot.exceptions.SynphotError Wavelengths unit type is invalid. synphot.exceptions.DuplicateWavelength Wavelength array contains duplicate entries. synphot.exceptions.UnsortedWavelength Wavelength array is not monotonic. synphot.exceptions.ZeroWavelength Negative or zero wavelength occurs in wavelength array. """ if isinstance(wavelengths, u.Quantity): units.validate_wave_unit(wavelengths.unit) wave = wavelengths.value else: wave = wavelengths if np.isscalar(wave): wave = [wave] wave = np.asarray(wave) # Check for zeroes if np.any(wave <= 0): raise exceptions.ZeroWavelength( 'Negative or zero wavelength occurs in wavelength array', rows=np.where(wave <= 0)[0]) # Check for monotonicity sorted_wave = np.sort(wave) if not np.all(sorted_wave == wave): if np.all(sorted_wave[::-1] == wave): pass # Monotonic descending is allowed else: raise exceptions.UnsortedWavelength( 'Wavelength array is not monotonic', rows=np.where(sorted_wave != wave)[0]) # Check for duplicate values if wave.size > 1: dw = sorted_wave[1:] - sorted_wave[:-1] if np.any(dw == 0): raise exceptions.DuplicateWavelength( 'Wavelength array contains duplicate entries', rows=np.where(dw == 0)[0]) def generate_wavelengths(minwave=500, maxwave=26000, num=10000, delta=None, log=True, wave_unit=u.AA): """Generate wavelength array to be used for spectrum sampling. .. math:: minwave \\le \\lambda < maxwave Parameters ---------- minwave, maxwave : float Lower and upper limits of the wavelengths. These must be values in linear space regardless of ``log``. num : int The number of wavelength values. This is only used when ``delta=None``. delta : float or `None` Delta between wavelength values. When ``log=True``, this is the spacing in log space. log : bool If `True`, the wavelength values are evenly spaced in log scale. Otherwise, spacing is linear. wave_unit : str or `~astropy.units.Unit` Wavelength unit. Default is Angstrom. Returns ------- waveset : `~astropy.units.quantity.Quantity` Generated wavelength set. waveset_str : str Info string associated with the result. """ wave_unit = units.validate_unit(wave_unit) if delta is not None: num = None waveset_str = 'Min: {0}, Max: {1}, Num: {2}, Delta: {3}, Log: {4}'.format( minwave, maxwave, num, delta, log) # Log space if log: logmin = np.log10(minwave) logmax = np.log10(maxwave) if delta is None: waveset = np.logspace(logmin, logmax, num, endpoint=False) else: waveset = 10 ** np.arange(logmin, logmax, delta) # Linear space else: if delta is None: waveset = np.linspace(minwave, maxwave, num, endpoint=False) else: waveset = np.arange(minwave, maxwave, delta) return waveset.astype(np.float64) * wave_unit, waveset_str def merge_wavelengths(waveset1, waveset2, threshold=1e-12): """Return the union of the two sets of wavelengths using :func:`numpy.union1d`. The merged wavelengths may sometimes contain numbers which are nearly equal but differ at levels as small as 1e-14. Having values this close together can cause problems down the line. So, here we test whether any such small differences are present, with a small difference defined as less than ``threshold``. If a small difference is present, the lower of the too-close pair is removed. Parameters ---------- waveset1, waveset2 : array-like or `None` Wavelength values, assumed to be in the same unit already. Also see :func:`~synphot.models.get_waveset`. threshold : float, optional Merged wavelength values are considered "too close together" when the difference is smaller than this number. The default is 1e-12. Returns ------- out_wavelengths : array-like or `None` Merged wavelengths. `None` if undefined. """ if waveset1 is None and waveset2 is None: out_wavelengths = None elif waveset1 is not None and waveset2 is None: out_wavelengths = waveset1 elif waveset1 is None and waveset2 is not None: out_wavelengths = waveset2 else: out_wavelengths = np.union1d(waveset1, waveset2) delta = out_wavelengths[1:] - out_wavelengths[:-1] i_good = np.where(delta > threshold) # Remove "too close together" duplicates if len(i_good[0]) < delta.size: out_wavelengths = np.append( out_wavelengths[i_good], out_wavelengths[-1]) return out_wavelengths def download_data(path_root, verbose=True, dry_run=False): """Download ``synphot`` data files to given root directory or the ``astropy`` cache. Download is skipped if a data file already exists. .. warning:: Downloading data to ``astropy`` cache only is not recommended if you plan to provide a custom ``synphot.cfg``. Parameters ---------- path_root : str or `None` Root directory for data files. If `None`, download to the ``astropy`` cache location instead of a specific directory. verbose : bool Print extra information to screen. dry_run : bool Go through the logic but skip the actual download. This would return a list of files that *would have been* downloaded without network calls. The sub-directories would still be created regardless. Use this option for debugging or testing. Raises ------ OSError Problem with directory. Returns ------- file_list : list of str A list of downloaded files. """ from synphot.config import conf # Avoid potential circular import BASE_HOST = 'https://ssb.stsci.edu/trds/' if path_root is not None: if not os.path.exists(path_root): os.makedirs(path_root, exist_ok=True) if verbose: # pragma: no cover print('Created {}'.format(path_root)) elif not os.path.isdir(path_root): raise OSError('{} must be a directory'.format(path_root)) if not path_root.endswith(os.sep): path_root += os.sep file_list = [] # See https://github.com/astropy/astropy/issues/8524 for cfgitem in conf.__class__.__dict__.values(): if (not isinstance(cfgitem, ConfigItem) or not cfgitem.name.endswith('file')): continue url = cfgitem.defaultvalue if not url.startswith(BASE_HOST): if verbose: # pragma: no cover print('{} is not from {}, skipping download'.format( url, BASE_HOST)) continue if path_root is not None: dst = url.replace(BASE_HOST, path_root).replace('/', os.sep) if os.path.exists(dst): if verbose: # pragma: no cover print('{} already exists, skipping download'.format(dst)) continue # Create sub-directories, if needed. subdirs = os.path.dirname(dst) os.makedirs(subdirs, exist_ok=True) if not dry_run: # pragma: no cover try: src = download_file(url, cache=True) if path_root is not None: copyfile(src, dst) except Exception as exc: print('Download failed - {}'.format(str(exc))) continue if path_root is None: if dry_run: file_list.append(url) else: # pragma: no cover file_list.append(src) else: file_list.append(dst) if verbose: # pragma: no cover print('{} downloaded to {}'.format(url, file_list[-1])) return file_list spacetelescope-synphot_refactor-c682dc1/tox.ini000066400000000000000000000056771511632712700220530ustar00rootroot00000000000000[tox] envlist = py{310,311,312,313,314}-test{,-alldeps,-oldestdeps,-devdeps,-predeps}{,-cov} codestyle twine bandit linkcheck [testenv] setenv = devdeps: PIP_EXTRA_INDEX_URL = https://pypi.anaconda.org/astropy/simple https://pypi.anaconda.org/liberfa/simple https://pypi.anaconda.org/scientific-python-nightly-wheels/simple # Pass through the following environemnt variables which are needed for the CI passenv = HOME,WINDIR,CC,CI # Run the tests in a temporary directory to make sure that we don't import # package from the source tree changedir = .tmp/{envname} # tox environments are constructued with so-called 'factors' (or terms) # separated by hyphens, e.g. test-devdeps-cov. Lines below starting with factor: # will only take effect if that factor is included in the environment name. To # see a list of example environments that can be run, along with a description, # run: # # tox -l -v # description = run tests alldeps: with all optional dependencies devdeps: with the latest developer version of key dependencies oldestdeps: with the oldest supported version of key dependencies cov: and test coverage deps = # The oldestdeps factor is intended to be used to install the oldest versions of all # dependencies that have a minimum version. oldestdeps: numpy==1.23.* oldestdeps: scipy==1.9.* oldestdeps: astropy==6.0.* oldestdeps: specutils==1.10.* # The devdeps factor is intended to be used to install the latest developer version # or nightly wheel of key dependencies. devdeps: numpy>=0.0.dev0 devdeps: scipy>=0.0.dev0 devdeps: pyerfa>=0.0.dev0 devdeps: astropy>=0.0.dev0 devdeps: git+https://github.com/spacetelescope/gwcs.git devdeps: git+https://github.com/astropy/specutils.git#egg=specutils cov: pytest-cov extras = test alldeps: all install_command = !devdeps: python -I -m pip install devdeps: python -I -m pip install -v --pre commands = pip freeze !cov: pytest --pyargs synphot {toxinidir}/docs {posargs} cov: pytest --pyargs synphot {toxinidir}/docs --cov synphot --cov-config={toxinidir}/setup.cfg {posargs} cov: coverage xml -o {toxinidir}/coverage.xml pip_pre = predeps: true !predeps: false [testenv:codestyle] skip_install = true changedir = {toxinidir} description = check code style with flake8 deps = flake8 commands = flake8 synphot --count [testenv:twine] skip_install = true changedir = {toxinidir} description = twine check dist tarball deps = build twine>=3.3 commands = pip freeze python -m build --sdist . twine check --strict dist/* [testenv:bandit] skip_install = true changedir = {toxinidir} description = Security audit with bandit deps = bandit commands = pip freeze bandit -r synphot -c .bandit.yaml [testenv:linkcheck] changedir = docs description = check the links in the HTML docs extras = docs allowlist_externals = make commands = pip freeze make linkcheck