pax_global_header00006660000000000000000000000064146343361020014514gustar00rootroot0000000000000052 comment=a0b5dfdb85d81e9c3e47d3292aa33bb5923a4dad django-import-export-4.0.9/000077500000000000000000000000001463433610200156175ustar00rootroot00000000000000django-import-export-4.0.9/.coveragerc000066400000000000000000000001411463433610200177340ustar00rootroot00000000000000[run] branch = False source = import_export parallel = True omit = __init__.py _version.py django-import-export-4.0.9/.editorconfig000066400000000000000000000006371463433610200203020ustar00rootroot00000000000000# https://editorconfig.org/ root = true [*] indent_style = space indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true end_of_line = lf charset = utf-8 # Docstrings and comments use max_line_length = 79 [*.py] max_line_length = 88 # Use 2 spaces for the HTML files [*.html] indent_size = 2 # Makefiles always use tabs for indentation [Makefile] indent_style = tab [*.yml] indent_size = 2django-import-export-4.0.9/.flake8000066400000000000000000000001151463433610200167670ustar00rootroot00000000000000[flake8] exclude = build,.git,.tox extend-ignore = E203 max-line-length = 88 django-import-export-4.0.9/.git-blame-ignore-revs000066400000000000000000000004631463433610200217220ustar00rootroot00000000000000# Run this command to always ignore formatting commits in `git blame` # git config blame.ignoreRevsFile .git-blame-ignore-revs # https://www.stefanjudis.com/today-i-learned/how-to-exclude-commits-from-git-blame/ # Reformat files according to linting rules (#1577) dc025e1c3dfea741120c11188fc7f8959df79e77 django-import-export-4.0.9/.github/000077500000000000000000000000001463433610200171575ustar00rootroot00000000000000django-import-export-4.0.9/.github/FUNDING.yml000066400000000000000000000001651463433610200207760ustar00rootroot00000000000000# These are supported funding model platforms github: [django-import-export] open_collective: django-import-export django-import-export-4.0.9/.github/ISSUE_TEMPLATE/000077500000000000000000000000001463433610200213425ustar00rootroot00000000000000django-import-export-4.0.9/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012601463433610200240330ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Versions (please complete the following information):** - Django Import Export: [e.g. 1.2, 2.0] - Python [e.g. 3.6, 3.7] - Django [e.g. 1.2, 2.0] **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Additional context** Add any other context about the problem here. django-import-export-4.0.9/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000007501463433610200250710ustar00rootroot00000000000000**Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. django-import-export-4.0.9/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000011471463433610200235360ustar00rootroot00000000000000--- name: Question about: Do you have a general question? title: '' labels: question assignees: '' --- django-import-export-4.0.9/.github/pull_request_template.md000066400000000000000000000003471463433610200241240ustar00rootroot00000000000000**Problem** What problem have you solved? **Solution** How did you solve the problem? **Acceptance Criteria** Have you written tests? Have you included screenshots of your changes if applicable? Did you document your changes? django-import-export-4.0.9/.github/stale.yml000066400000000000000000000026311463433610200210140ustar00rootroot00000000000000# Configuration for probot-stale - https://github.com/probot/stale # Number of days of inactivity before an Issue or Pull Request becomes stale daysUntilStale: 180 # Number of days of inactivity before an Issue or Pull Request with the stale label is closed. # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. daysUntilClose: 14 # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable exemptLabels: - pinned - security # Label to use when marking as stale staleLabel: stale # Comment to post when marking as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when removing the stale label. # unmarkComment: > # Your comment here. # Comment to post when closing a stale Issue or Pull Request. # closeComment: > # Your comment here. # Limit the number of actions per hour, from 1-30. Default is 30 limitPerRun: 30 # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': pulls: markComment: > This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. django-import-export-4.0.9/.github/workflows/000077500000000000000000000000001463433610200212145ustar00rootroot00000000000000django-import-export-4.0.9/.github/workflows/pre-commit.yml000066400000000000000000000004751463433610200240210ustar00rootroot00000000000000on: pull_request: push: branches: - main jobs: main: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: 3.x - uses: pre-commit/action@v3.0.0 - uses: pre-commit-ci/lite-action@v1.0.1 if: always() django-import-export-4.0.9/.github/workflows/release.yml000066400000000000000000000036371463433610200233700ustar00rootroot00000000000000name: Release on: release: types: - published jobs: build: name: Build Distribution 📦 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install pypa/build run: >- SETUPTOOLS_SCM_DEBUG=1 python -m pip install build --user - name: Build a binary wheel and a source tarball run: python -m build - name: Store the distribution packages uses: actions/upload-artifact@v4 with: name: python-package-distributions path: dist/ publish-to-pypi: name: >- Publish Python 🐍 distribution 📦 to PyPI needs: - build runs-on: ubuntu-latest environment: name: pypi url: https://pypi.org/p/django-import-export permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 publish-to-testpypi: name: Publish Python 🐍 distribution 📦 to TestPyPI needs: - build runs-on: ubuntu-latest environment: name: testpypi url: https://test.pypi.org/p/django-import-export permissions: id-token: write # IMPORTANT: mandatory for trusted publishing steps: - name: Download all the dists uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ - name: Publish distribution 📦 to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ django-import-export-4.0.9/.github/workflows/test.yml000066400000000000000000000052471463433610200227260ustar00rootroot00000000000000name: test on: push: branches: - main pull_request: branches: - main jobs: test: runs-on: ubuntu-latest env: DB_NAME: import_export IMPORT_EXPORT_POSTGRESQL_USER: postgres IMPORT_EXPORT_POSTGRESQL_PASSWORD: somepass IMPORT_EXPORT_MYSQL_USER: root IMPORT_EXPORT_MYSQL_PASSWORD: root COVERAGE: 1 strategy: fail-fast: true matrix: python-version: - '3.8' - '3.9' - '3.10' - '3.11' - '3.12' services: postgres: image: postgres env: POSTGRES_USER: ${{ env.IMPORT_EXPORT_POSTGRESQL_USER }} POSTGRES_PASSWORD: ${{ env.IMPORT_EXPORT_POSTGRESQL_PASSWORD }} POSTGRES_DB: ${{ env.DB_NAME }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Set up MySQL run: > sudo /etc/init.d/mysql start mysql -e 'CREATE DATABASE ${{ env.DB_NAME }};' -u${{ env.IMPORT_EXPORT_MYSQL_USER }} -p${{ env.IMPORT_EXPORT_MYSQL_PASSWORD }} - name: Check out repository code uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install Dependencies run: | python -m pip install --upgrade pip pip install tox coverage coveralls - name: Run tox targets for ${{ matrix.python-version }} (sqlite) run: tox run -f py$(echo ${{ matrix.python-version }} | tr -d .) - name: Run tox targets for ${{ matrix.python-version }} (postgres) run: tox run -f py$(echo ${{ matrix.python-version }} | tr -d .) env: IMPORT_EXPORT_TEST_TYPE: postgres - name: Run tox targets for ${{ matrix.python-version }} (mysql) run: tox run -f py$(echo ${{ matrix.python-version }} | tr -d .) env: IMPORT_EXPORT_TEST_TYPE: mysql-innodb - name: Combine test coverage run: coverage combine - name: Upload coverage data to coveralls.io run: coveralls --service=github env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COVERALLS_FLAG_NAME: ${{ matrix.python-version }} COVERALLS_PARALLEL: true coveralls: name: Indicate completion to coveralls.io needs: test runs-on: ubuntu-latest container: python:3-slim steps: - name: Finished run: | pip3 install --upgrade coveralls coveralls --service=github --finish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} django-import-export-4.0.9/.gitignore000066400000000000000000000003761463433610200176150ustar00rootroot00000000000000*.log *.pot *.pyc local_settings.py docs/_build build/ dist/ /django-import-export/ *.egg-info/ .tox/ .idea/ *.python-version .coverage *.sw[po] .DS_Store # IDE support .vscode tests/database.db # generated by setuptools-scm import_export/_version.py django-import-export-4.0.9/.pre-commit-config.yaml000066400000000000000000000004071463433610200221010ustar00rootroot00000000000000repos: - repo: https://github.com/psf/black rev: 23.10.1 hooks: - id: black - repo: https://github.com/PyCQA/isort rev: 5.12.0 hooks: - id: isort - repo: https://github.com/PyCQA/flake8 rev: 6.1.0 hooks: - id: flake8 django-import-export-4.0.9/.readthedocs.yaml000066400000000000000000000007471463433610200210560ustar00rootroot00000000000000# Read the Docs configuration file for Sphinx projects # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 build: os: "ubuntu-22.04" tools: python: "3.11" sphinx: configuration: docs/conf.py # Optional but recommended, declare the Python requirements required # to build your documentation # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html python: install: - requirements: requirements/docs.txt django-import-export-4.0.9/AUTHORS000066400000000000000000000074461463433610200167020ustar00rootroot00000000000000The django-import-export was original created by Bojan Mihelac (bmihelac). The following is a list of much appreciated contributors: * Titusz * jmaupetit (Julien Maupetit) * geeknam (Nam Ngo) * tepez * rubinsztajn (Aaron Rubinstein) * pombredanne * djm (Darian Moody) * pjdelport (Pi Delport) * rhunwicks (Roger Hunwicks) * trbs (IdoTech) * mulder999 * inodb * paulshannon (Paul Shannon) * tomd-aptivate (Tom Daley) * mauler * brad (Brad Pitcher) * xevinbox (Степан) * peterisb * qris (Chris Wilson) * andreacimino (Andrea Cimino) * frank-u (Oleksandr Poliatykin) * Kobold (Andy Kish) * cherepski * ludwiktrammer (Ludwik Trammer) * cuchac * aidanlister (Aidan Lister) * tabac * GroSte * w0rp * nastyako (Nastya Konak) * ianwalter (Ian Walter) * amarandon (Alex Marandon) * caljess599 * mightygraf (Denis K) * spookylukey (Luke Plant) * kane-c * ddiazpinto (David Díaz) * jeberger (Jérôme M. Berger) * schemacs (Lele Long) * jbub (Juraj Bubniak) * manelclos (Manel Clos) * pkozlov (Pavel Kozlov) * vparitskiy * snj (KINOSHITA Shinji) * AyumuKasuga (Andrey Kostakov) * luto * gallochri (Christian Galeffi) * ericdwang (Eric Wang) * gonzalobustos (Gonzalo Bustos) * domenkozar (Domen Kožar) * staranjeet (Taranjeet Singh) * mikhailmain * retrry (Tadas Barzdžius) * ericbuckley (Eric Buckley) * PetrDlouhy * shalakhin (Olexandr Shalakhin) * fabian (Fabian Vogler) * citmusa (Citlalli Murillo) * jarekwg (Jarek Glowacki) * fossilet (Yongzhi Pan) * jnns (Jannis) * sgarcialaguna * carlosp420 (Carlos Peña) * freelancersunion (Freelancers Union) * jbradberry (Jeff Bradberry) * antoniablair * kellerkind * yueyoum (Johnnie Wang) * shaggyfrog (Thomas Hauk) * suriya (Suriya Subramanian) * arj03 (Anders Rune Jensen) * arseniy-panfilov (Arseniy Panfilov) * jheld (Jason Held) * pajod (Paul J. Dorn) * illagrenan (Vašek Dohnal) * browniebroke (Bruno Alla) * ahmed-cheikh (Ahmed Cheikh) * jschneier (Josh Schneier) * brianmay (Brian May) * williamwang61 (Will Wang) * adamcharnock (Adam Charnock) * paveltyavin (Pavel) * jameshiew (James Hiew) * mgrdcm (Dan Moore) * korkmaz (Ahmet Korkmaz) * petrmifek * ryan-copperleaf (Ryan O’Hara) * gatsinski (Hristo Gatsinski) * raghavsethi (Raghav Sethi) * jdufresne (Jon Dufresne) * trik (Marco Marche) * krishraghuram (Raghuram Krishnaswami) * int_ua (Serhiy Zahoriya) * Marpop (Marcin Popławski) * frnhr (Fran Hrženjak) * gelbander (Gustaf Elbander) * dfirst * lorenzomorandini * piotr-szpetkowski (Piotr Szpetkowski) * pacotole (Pacotole) * KenyaDonDraper * andrew-bro (Andrei Loskutov) * toivomattila (Toivo Mattila) * ZuluPro (Anthony Monthe) * kunal15595 (Kunal Khandelwal) * fatanugraha (Fata Nugraha) * aniav (Ania Warzecha) * ababic (Andy Babic) * BramManuel (Bram Janssen) * mofe (Moritz Federspiel) * kjpc-tech (Kyle) * Matthew Hegarty * jinmay (jinmyeong Cho) * DonQueso89 (Kees van Ekeren) * yazdanRa (Yazdan Ranjbar) * Gabriel Warkentin * striveforbest (Alex Zagoro) * josx (José Luis Di Biase) * Jan Rydzewski * rpsands (Ryan P. Sands) * 2ykwang (Yeongkwang Yang) * KamilRizatdinov (Kamil Rizatdinov) * Mark Walker * shimakaze-git * frgmt * vanschelven (Klaas van Schelven) * HaPyTeX (Willem Van Onsem) * nikhaldi (Nik Haldimann) * TheRealVizard (Eduardo Leyva) * 1gni5 (Jules Ducange) * mpasternak (Michał Pasternak) * nikatlas (Nikos Atlas) * cocorocho (Erkan Çoban) * bdnettleton (Brian Nettleton) * Ptosiek (Antonin) * samupl (Jakub Szafrański) * smunoz-ml (Santiago Muñoz) * carlosal0ns0 (Carlos Alonso) * travenin (Lauri Virtanen) * christophehenry (Christophe Henry) * bgelov (Oleg Belov) * EricOuma (Eric Ouma) * ZibingZhang (Zibing Zhang) * Glay00 (Gleb Gorelov) * PrashansaChaudhary (Prashansa Chaudhary) * Vedang Barhate (bvedang) * RobTilton (Robert Tilton) * ulliholtgrave * mishka251 (Mikhail Belov) * jhthompson (Jeremy Thompson) * thisisumurzakov (Akbarbek Umurzakov) * roharvey (Rob Harvey) django-import-export-4.0.9/CODE_OF_CONDUCT.md000066400000000000000000000126531463433610200204250ustar00rootroot00000000000000 # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [django-import-export team](https://github.com/orgs/django-import-export/people). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations django-import-export-4.0.9/CONTRIBUTING.md000066400000000000000000000003001463433610200200410ustar00rootroot00000000000000# Contributing Thanks for the interest! See the [contributor documentation][contribute] to get started. [contribute]: https://django-import-export.readthedocs.io/en/latest/contributing.html django-import-export-4.0.9/LICENSE000066400000000000000000000024771463433610200166360ustar00rootroot00000000000000Copyright (c) Bojan Mihelac and individual contributors. 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. 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 OWNER 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. django-import-export-4.0.9/Makefile000066400000000000000000000034371463433610200172660ustar00rootroot00000000000000.PHONY: clean-pyc clean-build docs help .PHONY: lint test coverage test-codecov .DEFAULT_GOAL := help RUN_TEST_COMMAND=PYTHONPATH=".:tests:${PYTHONPATH}" python -W error -m django test core --settings=settings help: @grep '^[a-zA-Z]' $(MAKEFILE_LIST) | sort | awk -F ':.*?## ' 'NF==2 {printf "\033[36m %-25s\033[0m %s\n", $$1, $$2}' clean: clean-build clean-pyc clean-tests clean-build: ## remove build artifacts rm -fr build/ rm -fr dist/ rm -fr *.egg-info rm -f import_export/_version.py clean-pyc: ## remove Python file artifacts find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + clean-tests: ## remove pytest artifacts rm -fr .pytest_cache/ rm -fr htmlcov/ rm -fr django-import-export/ test: ## run tests with the default Python $(RUN_TEST_COMMAND) testp: ## run tests in parallel with the default Python $(RUN_TEST_COMMAND) --parallel messages: ## generate locale file translations cd import_export && django-admin makemessages -a && django-admin compilemessages && cd .. coverage: ## generates codecov report coverage run tests/manage.py test core --settings= coverage combine coverage report sdist: clean ## package python setup.py sdist ls -l dist install-base-requirements: ## install package requirements pip install -r requirements/base.txt install-test-requirements: ## install requirements for testing pip install -r requirements/test.txt install-docs-requirements: ## install requirements for docs pip install -r requirements/docs.txt install-requirements: install-base-requirements install-test-requirements install-docs-requirements ## builds the project documentation in HTML format ## run `pip install -e .` first if running locally build-html-doc: DJANGO_SETTINGS_MODULE=tests.settings make html -C docs django-import-export-4.0.9/README.rst000066400000000000000000000176121463433610200173150ustar00rootroot00000000000000==================== django-import-export ==================== .. |build| image:: https://github.com/django-import-export/django-import-export/actions/workflows/release.yml/badge.svg :target: https://github.com/django-import-export/django-import-export/actions/workflows/release.yml :alt: Build status on Github .. |coveralls| image:: https://coveralls.io/repos/github/django-import-export/django-import-export/badge.svg?branch=main :target: https://coveralls.io/github/django-import-export/django-import-export?branch=main .. |pypi| image:: https://img.shields.io/pypi/v/django-import-export.svg :target: https://pypi.org/project/django-import-export/ :alt: Current version on PyPi .. |docs| image:: http://readthedocs.org/projects/django-import-export/badge/?version=stable :target: https://django-import-export.readthedocs.io/en/stable/ :alt: Documentation .. |pyver| image:: https://img.shields.io/pypi/pyversions/django-import-export :alt: PyPI - Python Version .. |djangover| image:: https://img.shields.io/pypi/djversions/django-import-export :alt: PyPI - Django Version .. |downloads| image:: https://static.pepy.tech/personalized-badge/django-import-export?period=month&units=international_system&left_color=black&right_color=blue&left_text=Downloads/month :target: https://pepy.tech/project/django-import-export .. |xfollow| image:: https://img.shields.io/twitter/url/https/twitter.com/django_import.svg?style=social&label=Follow%20%40django_import :alt: Follow us on X :target: https://twitter.com/django_import .. |discord| image:: https://img.shields.io/discord/1240294048653119508?style=flat :alt: Discord |build| |coveralls| |pypi| |docs| |pyver| |djangover| |downloads| |xfollow| |discord| Introduction ============ Straightforward, reliable and comprehensive file import / export for your Django application. *django-import-export* is an application and library which lets you manage import / export from / to a variety of sources (csv, xlsx, json etc). Can be run programmatically, or with optional integration with the Django Admin site: .. source of this video uploaded to this issue comment: https://github.com/django-import-export/django-import-export/pull/1833#issuecomment-2118777440 https://github.com/django-import-export/django-import-export/assets/6249838/ab56d8ba-c307-4bdf-8fa9-225669c72b37 `Screenshots `_ Features ======== * Import / export via `Admin UI Integration `_ or `programmatically `_ * Import to and from a variety of file formats (csv, json, xlsx, pandas, HTML, YAML... and anything else that `tablib `_ supports) * `Preview `_ data before importing in Admin UI * Support for `bulk import `_ * Handles `CRUD (and 'skip') operations during import `_ * Flexible handling of `foreign key `_ relationships * `Many-to-many relationship `_ support * `Validation `_ of imported data * Define custom `transformations `_ for exported data * Import / export the same model instance as `different views `_ * Export using `natural keys `__ for portability between environments * `Select items for export `_ via the Admin UI object list * `Select fields for export `_ via the export form * `Export single object instances `_ * Use `django permissions `_ to control import / export authorization * Internationalization support * Based on `tablib `__ * Support for MySQL / PostgreSQL / SQLite * Extensible - `add custom logic to control import / export `_ * Handle import from various character encodings * `Celery `_ integration * Test locally with `Docker `_ * Comprehensive `documentation `__ * `Extensible API `_ * test coverage :100: * Supports dark mode :rocket: Example use-cases ================= *django-import-export* is designed to be extensible and can be used to support a variety of operations. Here are some examples of how it has been used in the wild: * Configure external cron jobs to run an import or export at set times * Use `permissions `_ to define a subset of users able to import and export project data * Safely update project reference data by importing from version controlled csv * Create portable data to transfer between environments using `natural keys `_ * Manage user access to an application by importing externally version controlled auth user lists * Add `hooks `_ to anonymize data on export * `Modify import / export UI forms `_ to add dynamic filtering on import / export. Getting started =============== * `Installation `_ * `Getting started `__ * `Example application `_ Help and support ================ * `Documentation `_ * `FAQ `_ * `Getting help `_ * `Contributing `_ * Become a `sponsor `_ * `Raise a security issue `_ * Join our `discord `_ Commercial support ================== Commercial support is provided by `Bellaport Systems Ltd `_ Releases ======== * `Release notes `_ * `Changelog `_ django-import-export-4.0.9/RELEASE.md000066400000000000000000000037761463433610200172360ustar00rootroot00000000000000## Release process #### Pre-release Ensure that ``CHANGELOG.rst`` is up-to-date with the correct version number and release date. #### Perform the release To create a new published release, follow the instructions [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository). Ensure you create the new tag to correspond with the release as required. 1. Go to the [Releases](https://github.com/django-import-export/django-import-export/releases) page 2. Click 'Draft a new release' 3. Choose or create a new tag 4. Choose the desired branch (if not `main`) 5. Check 'Set as a pre-release' or 'Set as the latest release' as appropriate 6. Generate release notes if desired. 7. Click 'Publish release' The `release` github workflow will run and publish the release binaries to both test.pypi.org and pypi.org. ### Check readthedocs [readthedocs](https://readthedocs.org/projects/django-import-export/) integration is used to publish documentation. The webhook endpoint on readthedocs is configured using [these instructions](https://docs.readthedocs.io/en/latest/guides/setup/git-repo-manual.html). This is implemented using a Webhook defined in the Github repo (Settings / Webhooks). readthedocs should be checked after each release to ensure that the docs have built correctly. Login to [readthedocs.org](https://readthedocs.org) to check that the build ran OK (click on 'Builds' tab). For pre-releases, the release version has to be activated via the readthedocs UI before it can be built. ### Troubleshooting The build can fail on 'publish to PyPI' with errors such as: ``` `long_description` has syntax errors in markup and would not be rendered on PyPI. ``` This is because the README.rst contains syntax errors and cannot be rendered. You can check this with: ``` pip install readme_renderer python setup.py check -r -s ``` If there are duplicate target names, you can correct this with [underscores](https://github.com/sphinx-doc/sphinx/issues/3921#issuecomment-315581557). django-import-export-4.0.9/SECURITY.md000066400000000000000000000003661463433610200174150ustar00rootroot00000000000000# Security Policy ## Reporting a Vulnerability **Please report security issues by emailing djangoimportexport@gmail.com**. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure. django-import-export-4.0.9/docs/000077500000000000000000000000001463433610200165475ustar00rootroot00000000000000django-import-export-4.0.9/docs/Makefile000066400000000000000000000127651463433610200202220ustar00rootroot00000000000000# 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) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext 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 " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @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)/* 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/django-shop-discounts.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django-shop-discounts.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/django-shop-discounts" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django-shop-discounts" @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." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 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." django-import-export-4.0.9/docs/_static/000077500000000000000000000000001463433610200201755ustar00rootroot00000000000000django-import-export-4.0.9/docs/_static/images/000077500000000000000000000000001463433610200214425ustar00rootroot00000000000000django-import-export-4.0.9/docs/_static/images/change-form-export.png000066400000000000000000000520051463433610200256570ustar00rootroot00000000000000PNG  IHDR2M"m iCCPICC ProfileHTSϽ!B5&H'ZFHB%@##02X * bA@ 6,03oY'[;YfIl( M%pȇ؜L#44 6nh߲WpyP4O )G$UWfaE12 ·?cӜ0˟gr"˜SIlIӲ9|iVB@nii\#lOOKj&Hk|)Ϟe^LQ*{yR%s=EJ!^) CXɟ$_s2qse{Hq%Ŋc^wäL}%)x%=ق9L aJbIt~si9%ݛ'=;{~~1_33F:=)eyJ{RCT_i<3;\7 y J0:ǀ l ɚ>3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hVeXIfMM*iD2ASCIIScreenshotiTXtXML:com.adobe.xmp 306 533 Screenshot kn@IDATx|Eǟ@BitE7-+׊P@ADQ{-@ \r=\nowvv;{;}晽TeB#   ,ȑ; h<HHHl!@Qa FfB$@$@$@QsHHH`d&$@$@$@<HHHl!@Qa FfB$@$@$}9w7ƌ#mڴ0@N$@$tTl۶MFEēO>)W^y,XPr!*T{LZl)7n͛7< !`b̙>Ɛu]'K,~Mj֬&-/-[HٲeQFҮ]4is%s̑kXb:gϞ;wnWoVokݺ+}JJTRE.\WN:ҧOY`@, :ԕ7֬Y#VM6IrGEiʐfˇ]vʕ+upjժI|TO.H,+Wԧ^z:ݟ)֭(;CEܝwr>}Z.]u 1ua|E HfͤH"cϞ=[u{#=/Z(]f/BfIHBbq *$#F .XWˊ+䯿+:KoNo;… DŽA'OK|tRtq9-<Ag^{%| NF :J*Ɇ ?(͛W9`8b O=̤uzt(뮻͛mׯwCp,1nꪫq/6#AX6LJJ_~Y;EJ˖-beA̋ 8q rZjɑ#Gd„ 2uTy]6hW=| <ݺu5²W^fIH€#:MfZutA8ڵkMNW^yE`CtCEjcGl1ᣓ^x믿j7Ի<.o/H4N^ b޼y^vIސ>@_|%PWCGx? Y0CH&M :v(xs=SrwtO9?vFLal:T~}y]jxA@ cbbdԨQil`m۶G$@$l(bŊFP x c!GyD ?:nC qu|:tI 8`;w\ѱw7x!ZBnݺ}t` a)htMڣcaxLP^r?^{P:Xoŋ[W ʁ>\O$@$l{֞Ik>=ߚ.e ɓ':W {G@}Zsd&f>K>?08Bn5Lt7t`ZN싙,n /±Vfǚ/pDێ;V'S_ P7(?x%/! ^=Ogzxl1,g?w{ V l1}$pg1Wep<(^81ФI?~w_~yF'Y*) i o :q1tXTc<}-' 070CZLEBLL)s6a f (u|q e*\tvQl  Aztft``OR{2ܥE C,h_ +@HaƛH2EZ'&y#&H ᄇvN=HH“@z`Y9M7_IW:׏F ?:9ԼMyp$&L^CC( Ah<1&xb'+! F$@$."\ F)6,̼RWOQ  &@&x|@&pFHH | PTXC3G"#LÐ) X8K.LWœ7{-NmY}IH \PTKK$@$@$bHHHO"yD  p$ G6++E$@$@'@Q|<" 8E#"  >sHHI‘J @ PT9H$@$@$@QfeHHH (*ϜG$  GpdR$@$@$|g# # PT8YY)  >3IHH(*٬ EE$@$@$HlVVHHO"yD  p$ G6++E$@$@'@Q|<" 8E#"  >sHHI rjϞ=rJYlΝ[4h -[ҥK_Cmk֬KƍL2R^=ܹ̙3lĂ DTevWowyc\qy[O˶mۤCr{K+yҕ^}Uɗ/_m\A$@$@HiӦEɒ%no9>òi&X}v9x_z-[5\#o 0@{2{PG$@$@.z*h߾9sF-*~'^{>M7$>^XOCFI׮]믗Çc=&ׯiq^re;SN2o\w0x%ϟ;}#(*V" ̿ .SO=?X&MҞ y" ޏnݺڵK/AX қ N^xW2ԓF$@$@BVO\p瞙u]ݻz31b2~Ңcذںu\iw c`H't%߻wH 6x^z%]jÆ $c11QR%֥KWLw u̙3GozlٲHHB@0x=b&F|(1p7Uku*Ž;\y]w)yu}Rk 6tQ{I.\BDEFf*`HH‰eְ€q-Z>H|<nD&S̬_J,۰aKXn&^=7m%'N0%**ʵl0sNxų>@ Y= z  5 ɷjJ HS2W\2vX3w7@&!NaUN?}q9/u#:r<:*_{58a5GoM av f+t}S~K (/Ō3 `? #$@$@$l/Nb )Ke5t2 CP& xqf?L\v~V:n`x0b0knݺz%a={Bʽޫ) a(b$Fb zy衇L JLK5'cz33i |2҉'|'  &ʇ~K`5ѣGf;<#z(i0s Qmֵ^L}W2I:b_N߼ys1Y7|0-"Ep3iݗK c?  8rx ~ٳW?4t0 (0bgbJp〨 #1V5/Ǎ'oNr}ɐ!C2Jm$@$@$UTzxeGq/yBfVˊG)&ox)~RVIHH S ժUӳ+0Ăxl6D]Kƍs1|u|C$@$@M +` X"X6v#*ϲ G>̉HH"EED7?+O$@$@%s"  &@Qʓ }(*cɜHHH PTDt$@$@$` X2'  h< G>̉HH"EED7?+O$@$@%s"  &@Qʓ }(*cɜHHH PTDt$@$@$` X2'  h]{V2!p9p|X{8UџSeBCPHH_viFQi-L1 XqX$@$@$@$  " @(*g=IHH,(*,0H$@$@$8>Q3pvܓ4;vȊ+$O<ҠAX#>˖-x]Ϻu: @SyzzW{!bO<\wu2n8ϥzٗ#B`p0Aɗ_~)ϗnzCXF {dE'%''W\k:w\{j\H2=z̚5KwP&N(4nX?7C% m~3W_}|ZP3H@ ۯSo,H |Svx*pG}vjϞ=2l0i޼C>@_U^|E}_{k׮zHd͚5&kILL_~Yڵk6m`_sGʿo0BW믿^>3}ګdWׯyz Ő!C5e?}k. @ݻwo%02i$EO?T-?X_(q9t+)S#.̸h/X j0aB\  xjڴe\w?[7o^P:zsm۶{W{{=ï✬WN|u>o !j';^ .`H/;w֞cTTIމYg F<{ ~F$@@ ( aܙq-;:\$_u)U}N`RdIYt|Gz^xh6Nsʕz;\|EgHC3αlԨQGo?*3'E`gd…:n3y˵h:u ͚5 ʈ#v۵klٲE{9-0裏 D7K 8}& O?i\I$-u:իwj'Ob܉s1fٰaN .7|3Ewa+ \lazpXjU1c4iD_dw:7f< _~EC Xj~7`8qB2;w+V쪽ƓaV qWA !!M,TF鹍H d饗^[o5 SNi~Q.Sl\bk>xgɦMڵk;4<g\r:Pj@ O>cbbb.CD#3,<?j֬7 g|Z`Ü#<8'O0QѳgO)< o H G߾}u{0 A1tPP{>yp9gp ƨ1hԐ{f!;v9rD(xu3bwJJ.U`LE@GѢE.aHނwyd%UT717ovNyX@ʅz ԛA`8ÅSn  !!*Pz*CG]̍GYVkѻ㢌! tMt4r,|:tg}V RquU#Ebھ}{-` B;;؉SNz=mժNjO< 00+W.=$6m$:+Wv ԯ_K*q%KM$;s @Cct`*Tг=Ξ=$@$@$@p#   EE Ը @:p @ (*}HHHH+HHH!@Q5C$@$@$EE:$\A$@$@$@q   t(*!    @D}mz   c ?E!  pxz$@$@$," PT8Y=  `qHHH(* EEH8$@$@$po`VHHE"Xy  p8 70G$@$@"@Q,< 8E#  `iHHN @PT4C$@$@'@QfHHH X(*E!  pxz$@$@$," PT8Y=  `qHHH(* EEH8$@$@$po`VHHE"Xy  p8 70G$@$@"@Q,< 8E#  `iHHN HBB$''Kjj3?   %:~z~xɓ'HTTTV"   x( (rmw9 @5CPHHH"#)򈼓5&  UT) @ܶgIHHVdf$@$@$(*"Ys  E8 D.m{֜HHl%@Qa+NfF$@$@K"r۞5'  [ lìef^IN9Br\ҰZyرT-[¯2Ɲ8# ]GNɹڗI 9sHMRp>.&YNITL[P,..Nbcc*ň&;VLCxqh_./B1BAmj,,xYxl$w"C<NNxjQuࡠwWZLg7{8}5bp%w"\oCFT`#̟:cȃFIsПY'Byzz!#*"Ka:Ka=s6@V Ljwҝ~ʹq߭Wׂ׾ߺ]SԬT*U\}w&ެVeަ,{>jMmݯMH2ynW); Q ЫJLtN9|NJU;dX,ON'#GȓK Uf=dj Dw/ǼJz}m(ZP[\ۢ>Vz}EZeeRu;;5(ֻP7Jn8.Gה[}PWд MWVrr%U-ɸ?tW_rնMJuJj`lo 2慶kAkE?sRUKQ8/#TP$WJRy)R ӹ\ݰ֣2wnu}ˣ~/$ykv sJ!BhaV ybD]q8DlA)Y|<j"?Z*'τ?M>$bb#e° p~c:?b)rR |=wpf2knYNۨrI޸|gɭJ"9?޺fYNy/'ݥ{{S9z:Q:`Zr:|qHKV9-N'(ow7xo?w.=%cm^&\`oPO{9m_fM:>uM} :m-iRҥQ%wBj dþcҋCeu[D'wxpg {o+˸#R.~"R8_nIQm~Kx`ZRByupLxd/([G!khj($·q9gX+?8-ȗwHq:gt\ֳl9Xu~eTJ}QOaѳ'KFu.fv9i]lh;;w>8?mG4C?=.zG|>s<ЭFL]- ӺF5$^}D{Z1eyi9~\u+yk/OnblwEdPֺ34g?KM[F._XٽM#-Tȕ W4Y_W2lT.Pz6W]e).GNU;/ѴUw1$?OW_h NLֱnͫ%}l^uKǚ]etNܧ: 7R_pt0\++1tAMPNcߣś¥ĥNW'pANEe:I 1RBlPMeb%pGdžŨbv:)ձpݮVޭW| &`&XFGz@u0 ]%(ApA?pqwh'%ZV63uƅw>m]zqv#9_!3deu.)R@fzC\, "ꐧm/6J|Sm:fqe`{əS 3_8NFiY}X8ύE9=i i̲kH uvJT:qF_;%8:#< _˰ 51Tq_eî d*80YJu&-壉30/O Y_U0?6C \KWB@w0xСCH P+/RR]+.wꋊpww? [\[ՅJ.aq_go%rcu0z:m]G7{z.ۅ⢊8[(Ift̶D+wp.D6uLj8ٸ:1}v)Z6Zt)є[cqT TQY%>LXQ$황NC﯍hk5é_ Hѷ*Pn@*% e sB^@ګ:\|3KOy&@[} D ]CG Z:s'<$RŻ;df-nszrUZZT`ㄙKeĝ=};Oz'ٴ#xqg=\b#>d ܮEՔM'.^fx sƧ!(0kc@G;_ b$-l 1,~QU 堜Oirܩ^rfۑj=UU^NC0Bkf/*K(siXc!Иy1>^5]pQ `\p9'ѢKĈsy~x7 aF2,m(p FH}0dڰR~S1!\p}KAJ 2jo:0Zoܩx~rluʰA]ڶ~>v$@0 f[JeT?_S in/&ჵjz u.ǠWa"yaƾĝ ޞL1GJ PÝ+_n/a  ۘa)157\=2vμtu3ܐgԅ⁶0^ԭxRxLc gb8iE ÙSN%[E :Z |SW ǔWApݟV9;Zǘ$ߥXoܩK? a绯f&A%׮{YZ "n>Ӽ8 % é]VĽ<와#D5qw[\5ҹE]ɩjf(]EQ[UѮImA0aXjqNݯ~a]ZDL$~tR*+7]u⢄cg;U~R!~zh3UKK/"qbG4\Jt!eŅ /t(co"n}3nߔk&5/b]:_?^sS^E x/>/T ]=Wa^:g[ Qyp7Lmŵ!zhɜW(, 6rrfB$X+9z:}A4PNSόӢƾ8zZ@| ec_מc 5=ʔQ)E03=xq]2_KwZL7Ng03dD,TYgUTl%.rfZqqqMk?I3Lx MC2)7yOG_ LqbLD@h݊o Y|!BppwoQz6(_fju,o偋\=YfۭRpdm-p1{?.Zeʬ lgub ~s琕WN:_mD;Āetu gx 5|qlz2_78xOR 5gsyOul߉qvGx*x=rqܺ ݡpၻ5C:hk~.-| oFJ'Wfۭ4u.rz2׽#κΟr[ etf=?S#+端uyi/V"v82:}#f͔żR X)DZ b0ϵM|DM\ C@R T\,w=5ݓ!UζjPTdzHH X0,)K ;̝HHHA(*Ԙ d'c PT81Y  NI&  Q?AO d'Afgxl LOհZs\I??iN<6 dBFT T?ϝ{u(kz#; 砯WRLNk=-w }a_dd/d[PN1Eղ%**~]oᖃK=r6Gu0&&EN܍A$'1bp!D1+ )Qp_   %2ًG'  *$@$@$@EO   [PT؂ PT   E- E   [PT؂ **$55TIHH""&&F##L$@$@$`ȟ?$&&JRR=L1=w! @ CAD` nG#  $2C _' =BFTK%$@$@Y'2"Ua$@$@$@I";$@$@$ jLVHHEEvIHHA(*Ԙ d'c PT81Y  N!Yѻm+MI))reRplMPJ9^?^*Uog y޲G'9r,\USH|yc:RjyYc\^N&uV4YYn:խ\V}=Yܱ2w&OHHBcDŐ(JuAO>w^ !K<v  3Ho;tIDAT A #*JԮSeڭz6SU.WlO s9]d/dҜҥU}شކcRS/* EF$@$@aH1-\-Lܢйo9#5ȳJ!wg~c7%*ޗ%o}#'wP2j2솮C ڮG|***# hE;~`#ZG3 @8L #~ruRbi92cݶG-X-1RH!飆WrD'^ a'^-EɵygO12|`F$@$@N%(O:njbVnޥ?ԹrWȶh0i=W,]⾧H-%BN9+OIzi9~*AjV(fCUGL$@$@"(QQRYw%* @l< ˶}$9)2╸dJTa ~.P3g:+v¤; 8D `,SYܢ^<,sVnw?yv}HHFQ"iRmTS~[V'̡} ,o}RR=tmuQ$ڸz ab86>ڏ $@$@$4 ,<0[b*(2?UuJ++ውs$Mҁ}j*%b ^-gʹ剛{xΕ$@$@$Tѝ>fxʽu;=sGoɝ+X'I9NO̐Lb 5FW;!qL 5VN+sf.1HHH \ D/eܛQ8c^l<ڕƝt?ޥ#$@$@M bb*lexl8o;e^$@$@$5 @dIHH DPTHC$@$@$(*½Y~  !, ;poAHHBEE4A$@$@N dDEL.>2#+'e% @ȈQ̓"Yq !#*vl.7 @v )粓KXb eKEYH  )Q\̬ 8@ 85kH$@$@&@QeHHH h(*"  gpvv$@$@$4AC PT8}Y;  HHH(*ݾ "**JRSSVxHHH t**bbb$999tjǒ "(IIIX y    " chdHHAvQB$@$@$@GЫKD$@$@$," PT8Y=  `qHHH(* EEH8$@$@$po`VHHE"Xy  p8 70G$@$@"78IENDB`django-import-export-4.0.9/docs/_static/images/custom-export-form.png000066400000000000000000000704461463433610200257550ustar00rootroot00000000000000PNG  IHDR3xpIDATx^w׽{뼸&++7+9''d%\'q| xy4yg!1 !HČ 43HߢT-ԭYYT]]]]*>{׮{wsCDDDDߢǁDDDDq qHGDDDDǁDDDDq qHGDDDDG κyϥ粻*=UWSG݊ )刈8< {ܵ{m)K8RJX}ox;yʝƂh|֕n~/|,x↲eZ7m{YJ"""P%wZv+=\9pƇ~Q}9eվW#eu2eY߹k}юS)s垊:DDDġ3=|ۺgNww=w{x-;^.46 )/7{kxot;̯q3z`<';:]hMR=tooXﮆq5TmFO댾2_c ZI ڗ}7vsɁ>|޿U2Z܂>} MwwGS~i*屮R..rkNeN7榛9V~? .tJ. {5,Tuz2WS(л.-iSn"""PL>o1o8 AfsV6at+j+Xz42<7I= _],Q]ew?hZhϾ'} ADD0U@ "~z;? wBA+y} KS5>HF󽭥~ c&57݆ԣ-Իl?n{ExXITpJB4"nzd>{o/l Ba?-[+ B<]@}0}oZ{*k_ z5oW4Ge {] ]=%q4L2gt8OA RC t(i? 4 /{=T )_WTHU#8y i~WS Vмr/h ꭍn8y Аh5qfWiVT~ٕ /z ]-HjBx0`%:s(_h,M^tc—x+_jzVnPϖͺ+7@ vW <4)ꋂ> -UcMo@ְ#ٕ.DDDġ_7W2ovf_9VET.28 Qo.\dm t[aJ[*.=5o=邿^@e67]Щ퍎jC}~ e=g:wٽZ/lR+}+}iBܫioBW{t}?ES^ 0'ӆ,m(To7vk^Wu7_uש_CtUH?ͫSz j\?i"""bD꡷a /Z.oUSf4^荭goxznhAS\U5 >02=__۪ǟuI]hzkY9h>ts~+_]OQ={c9WftC U2]v3y8 ٪>㞵>4G挄Ǯ!=Su2 ʤ^#q+XϦ9_8i =hh_?u@cEDDDƜ cpGDDDdqIGDDDDǁDDDDq qHGDDDDǁDDDDq qHGDDDDǁ"!-Q >O >O >- >>|8d BGD$ /DLD?@1 2*ʕ+ڵUVVerj7}tܜRgϞu}[rw .͛7cǎqHrӦMs_~V8j̚5+uٸ{nlHyy9F#/\Нd[BBHP2/..v.]CtD RH~V`U:=ïk5^kphȌ>֯_Օ kږU ׶n۶k~>|9s.g_x1e?mڴiSxYb/h[>3]׶zGhY5XTϦeHжom;rHP~~p%ˈibuVgzvggWF Z! ^F! -OU޽{ݝ;wRUZe ZV0+'浏Lې#={'HJ ~;h(WhO:5*_Cb;ЫmA[e(R `;vuQ0$M[)?'z훰C ׼G---)C?@h{5V]aSR!\e6FϞ׼ulp5E_nMP(\ClY ]ոP}6_ zݰ)zԩh^h_(k[4_7G_' (DDqѢE8c _5Fᦿ>^}_t(`$ˈI)2tp^+(+Hp p`=2VvZ_~ 6۫zo[#"lO2 ZBKJJ6{Ι3'~@҂ݛ0PzRmSf5͚5Ѥа#-R^[1 2Ԙu$MQxk7?POz˄ü@d(iB6tG_{~ng;2F0 .4b6eԂXR=ӧO!\?(K׋?T5I}[,_WtAǾi*<^54'!b-2===ї)EGıg.33a„P oXI>}>}ڗ7>ĉ'~kC>=4BnWݍ*~z̙ȵ~58`@ȕ} ffYhµzم~OD}w}_V~Яl[V?%Ke ЏFa+=/跼Ҩ\!uMߺu+6Q{y r{mC:%7u#r:?$FOzܹ~+X+|=B3 IJ{/ 0Rws "ͥ?1a }ȶ0/^p!~ PәWUUzPt7DL| 3uTew:֯_uKGz=G DL| J?^_ {O y7GV,Շߩz #bbcs.]o^7\z5(Ns Atن_e@W`AG̥௛{LQzz?n:>7(4G~V\gĉ~,e5_T{n@1h(h~@ DL\ zgRCylMF\ ѐzz >+wiΘ1#*~7cB m#!oG zjwC`eÿ -z~ I'@|11kׯn߾ gG;N׌}Sq|oI7ٔ\s+5$A_oBckxRpOw==S޻_'oy^2s)vZsWS@Pj|]}>ot}Q_WVPs~M'=v%wW y^[y?elI~WPH4'Xt|:tAKM?r7}o}_ŸT1M wZݶ`^ET5? +/e*u궓n4O^早~ KWR ok}d/xӇvG?ÿ';]i}_fo}!(2 s ^p/oM#>Gs ܑgMpL;23}o ֣jشg|ῃYW{mzdd{]1 h?u@ v#9o*EF4И{)˙BT mF>zhhHkW^}igWkm^zU607ekߎBl$H*h a3߮: ._}Qq uiLa;Z^襾!2`at k3#~ V`V=bɱ`]i6Mt_CֈʋJX?@|$Ӑ kJ/#VŠh.c >MGC9Ppgwuϛ#9௞ijh,>Լ/Ty0aNDXXv5׋h 6MXH`;\6/},_njq]/V.V% / zXXXwElj͏w%, > wQڴ+ 6G wcQԫH^].l̺]N4mCTf s>z P[FhFe½Cyhֽt꣱icWK7;g&(_/kDweh~W#/' ^5#=R 'ӌlKۥ7௱'I /kb}$cC~9*2Cn6{ض 2E0mytC\௠.~hIѠ-?<& +=NF=ZQn=4o=D''  vs9@cFÝnl`8m^h5z}.G֝{+T}4  g-~zu?n2oƍk߹'<{[;;:`D%G"_a^r {pZCK @cFÝ~ο0]8ਞ`PXգU7}n;}v}UC3z#l4I +rGr5h4/^fU Ro6Gttd8Km3>o?ݺoGXgG #bbI?"&& > #bbcH`$|H 'A|H 'A|H 'A|H 'A|H 'A35ws*p>ă{nÑ IWvy]`b*Z“njhmυi d&f\k0HeOrU 7Uz_?F|X@ g.#UunվlƆ` %߫V$_zwA[PS/yԗiZZW>Y84lÿwlszUcgܯ?^~>e{NPear`]c L5E_0ss7]w>Lףnڊ]xnJ/:~cD|0xkіhU?RÂPϤXc+/y5 -oaU{|teYk<ۖz|?h 0lt:tu jAƶWZW*/_wkE{$mA;Kry , pq19?cAsǽh;vI`|= py_VWfm=cѨȫ%{ cD@`0yLOzSA0&- !5(s!DLs7y~9C8pҾj V7Z:|j)D$Ջn<)TXH5_ejyq5W<~po81é2F=bCP0&?|R5 >kZ7˯/5 F<`Hk (*(sʃ E_U×i\9!98dQ м_ ɠ_cmE}۰5vmg}Y7S]Uo:tUO3V_eKG~4WVVSN:@"$;`n!To #P @hCzGO}XNet߀௧2 2vA=ѡ>j /zoxȝFjhh jsϞsʭ>5tO:^{5ꫯ>,X={}bg$ 5͵٠~WEb_z? uH>Cq 5f'I_XcG oq,~>2Pv˖-so_n֬YJÇ}_}UPyf]QQ{E\ϳ+7ot|0a_joeU_ ø zcC 9r|E~+P_(+>}Ը)S{)+曮+ruuun׮]~~ҤI;v[xW>}wǏu'Otn֭>߸q mG}Է0.wv>QWwo 1]޽|~PZ8qoh뚛mذ:::@~Cȷ󉂿B#?XWTv̙ gHW'o۷o>tʣ ??v>4zKKK2}v𰞡VΝ;}CChH 1|)3g1W^uMMMO?] 2ew?_UUfi9? 1|2PW1crԩ~|թL7憗) 6_A֭v}`3m4_w^_o1'O<~4к=Poւw !@bp>?$RGD) 5>qI?"&& > #bbI?"&fW[[]YYYުϧϩ 3BqSSV|܁O_= }^}n =Qy 7 #晻j٧֍5)kxd~n\$_x;Q}_Ygg;XQ/6,sbuYpm9v:t]}d=ۆK'_O1a?\)9{߱/7]]}Ǫ޶u#7 :JG $S.S{-9}kfm) z֯ƃ]5ewM6\6uԐ8j[XJ{~ZߖTljJ\wT51^?7@.Xp|WRNsS 1SRʶ!/zr-StGW?,,2# ɒX7͹B7Fmkp7O)7@Pc<` D-mXj :Z>5 ֺgiO4]~=---uΝ1cFeFp(l>7$Kǯ5uMMMFWr?$F>O:::|pss@n@ȷBz5=_$H 'A|H 'A|H 'A|H 'A|H 'A|H 'A|H\8hA?$ @bp>?$ @bp>?$ @bp>?$ @bp>?$ @bp>?$ @bp>?$ @bp>!w7 "[?@|11 AG$DLL?@|11 AGۿA|y[뭷4i/S2e[`/Wѣ߿ꫠnӧܹs7tk֬z!H۷ow> ă-%nR)ua?Q=TRk>oQݾ}:CEEE77o+ߺu˗)1n:WWWΝ;::5>#wE?H__XcƌڇB_VSSl mO/_ѓ<-suM'-q'm1ۅo_\\ ߻wϯ… ʕ+~Z^k[6j>X𯿫z#*sZg^!ߖu}w>>>ןkoӖ|'u5.Z:˼Io!T^a?5 _?i}*_ѣ Ov8 _$Kk2=o9]5P^t2Z. "&ow}ׇjކh̽¼q2c௡?CF ?DI$[xo?dgnAT^W6[S?_勏GCʾk9{-s}z1^)볤?0a6 wu@!`A]L6/൙~#@=w /^/._~͞=۵+A"/k~. 󱆀y@ux O_M al=1>)oܸ1a~ڵ`|z]*!< j kϟ?x=>zѰӧO=EHe`|HWcd/7? 7ې tcku2G.g\YmAsTt<_ʸ(]D;/k~dzd_kWx>־PF@@5$A"_jyɠwyȟw47{_cշ2߸kJ]eP!nP b#z=zz99݀kOc:z=S % /ۅIĂΣ?Ѻ)q O#W?@|11 AG$DLL?@|11-wttZW^^G>{011)+)555h5@{W 30{p!#bbSW,=0{p!#bbSטlтC #A>Of0O&|`$ @b` / t>!h F?$F>Of0Ol766cǎ~mWWWy𨬬t\{{{ Fl_ @b$`K/={DŶm܏cNB„ Q&@:t>6V-CcE.0Xt>6իWoჹ_OO|M~򓟸﮴4l~ v֬Y~y9s='O_?]xoUUU_ӧOv>7ntuu?Ν;ݯ~~4WQWJLuSt`( 1|m0 I&p}!9Νkjj{(;;;pWWּ[_gyfwϯ]և_=zDIIV#E[|{}WgΜq}}uuOXteF/t} ݜ:t>6Cw=#l2_mpxڵ̰1a.#5[ZZׯ{XjUt명۱c`=.]_@_dHGn]a+KO,[^4c+8s1Z0nXly(7>gx/Z婹zshqZF|$pW0VOud_!6FGGWh )>Ba_pS A=(PQXX40z^o+9 ~ wls?4hL\k;wٯG P|?:Ux_fS\]HO$`f_\oݺuѣGNay0citDs$g^bEPwqD/t$;> B,t%ȀrAZWoz f߿ïn#1uëG3 +!D:+3f7{T= _|Epc |@e.ÿz hc/~ȏuZһs+,uswqvaNֵl ߠ`.-}̗k}{4?3Yל98=f*p1豛b?f~1utt!?^:^/&K8?їy湷z+xڠА j:aÆ~_mZFOғm\M00~ґhGO'H;R1oP^IK}/glf83 6ka?!5zʺA׍nz<.[LJ$5mW6``~HX@-gі'ݞ2׉o}ї5uސmպ^D1K8WgmY޾j8 V7Z:|2 +/!#zvׯ_VC~HXW W8hPضqW<~_CWګ~^]TtP@ƞ|Rz! ?{y;5 >k:\W}[y$`#A"&06D`kq Mkі௛U|}טd=\w41"]uâBa?cl atlNYOQcFyv㼎 }P9]qa@y~HH[Wxϗk聆Z˷@_.0 :}|E郿͇+ ROtϪN0vX~9S| ݔc+A=67w=ܳr+WכF_0$A7x DwwOhh1  5 L/qOF=ֲ;*^cXØD׍#W~ [t>kWV! =I+} #' gUPӘlO~)O >O >O >OcHqxR!"%DLL?@|11 AG̅1W%#bb|@G$DLL?@|11 AG3wqOk#࿿r>w[~=hmKYn)88}ٔRN,Q`n n-NGmtn\PYw)$Gbf)s}h.;xЯ|o!C RܾۜR/WXɢʋ>ZN?@|$l{{?Β)E?Wo%)a Ibw_8u ʠdu{uj+,qv]]ױ4gg٠.Wv/1jMY_aк회Ǻi*Ny_m/=ẖv7uvb|pYcGǐڹ;cĂ.9{ o.5+7}P8Szk,:/8]_EVKw OR1ltogg?t,\~:^_W|.85_ |ʝP_OG?z j.zptO׫^ 7ۋy m.y$xo+[}褻zlniMF\P=zL_כغZ 2X>'G {Gb?<ԧ0j(Ý~Z(P1w/}7|tԴSӾ&ˆ.ֈVRW7@D?;p0ߴO+Ǐfؘ2T 1W$@bD_uuuܠ+ 1r|~1$@bD#"b>Hȅ1zDDDE p>!#"bHȅ E?$F.O/} ݜ:p>!#"bhԹMnSnM)wʭ"% ~ u7%UtwwWE<5Wo.-NHOF ?""拉_᧓f|``3/hU?>~◫jW0Rфbbc>_߻³DuNj}٦cgx9C Ʒ 17M$Cwxﴴ7>_>r~1u~H8{gKܱ}yEUorr2Xw"ϧu(u_y0?GWSA5nƆ~5,B;e?v|ujKvk.4`oVa=vVy5|^pw_~0d!#"bHtmV!Ŭr  ꕴK}|뮟ו+|+.-]5 PUTzw 7puݢ}5s~oO۠qϚ?v0 6gٷoJەgǦ j\] hծuV]&/~6yޞ~CDD  e?h ֠'ֽ_do}ou@m]~~k|=]xg6?o-oݣy5n.^oӺrp20R'_O1a?\)k]{LnaWvWׂntӃW8 #q>mb ٩EGD 7t=a½aE4xkʲR](ش2 ^u) -a>Z—+4U Sn84?k7wUWzM+LOY)HOF`G-XDDH6LBPPpxay·S svn4Vh8mм{[yjt#D"Sltn8Rѯ^{Ydnv]UwRGO{+hMV|5t#eǯ=B,ic 8xob_*(Az w   *;tGR7ZB*ؘ~w=U{\U z=!Ș0XMņ d($-fsAF+w,Dc@O1tLWҢ؍jh (sϞ޳!y:ftO<dKDDC!?a4N>< ="{#誁+P~$LOQ@+E?bѓ`n{R Wp;ǒ 5{hOF2F%""1B=֛oCх٢uںN

!'ct_""W_WRCr=5hn~YrȒ\81/qc\81/q 1r|BODDKȅ ?/#'InrJѪZӷgu,ۖ5_i\qu[Sp-s^&|C嵞GfsF?U~;4=.oYlKDDH\8$۠Ǩw>Mͭx[_^r^^_7o >KǧkQmHYg4^}喟W#D&Ǹs)DDKȅIR_= goez ^W~|7,e j_k?xYC!êaR~JJPKDDH\8$Ŋ%5O%o6ewk|_}ߏr`9P 1r|Tqq z~\fwss5Kn{,௡< [{mDwُW>\FGD+AD߻6ٍ WSUo C}tB3?N/nR'&#"DLLf? nU|;]&?.K 5!@u7uT< DIϬ[{`[_tʗ}_vy=G7ꪀ;e,?{߮l>7?gl넞ٯ2?"b~HG$cc򍒚~?t~hxζʠ^WhK2/Uo ;Jf ecY?"&&p'_nM u\5/q11 DDKG$c&/KDDDLL?f2/q11 DDӵ-Gf7Z7$c&o;pí8PV,q/]WfSko?]^pQz\쾲s)M|})uĂFXrtJyT5:W{-SILF%""ĂºO'ǫv:-ƃL 6~O>s/`irF_=)uP#6ԅmikU\lHE}}<dt_""M,^\W#g/_ؗ+_uYݗ8|   Ѻ@|oCh l(*'u%;W5eǺS|pg fcAW4w_o;6` F^M_o/uR-`X'B?"HSz וC2Vj;uf Z]Az:Β)ۀk.fǀ aiZߖWa^DDıg"_2 9' 5rz|{OiUo_ի?d6_W}5kyVt%@_Z/t㽾R%#""= i_Vٶ3~+hw{`o_5<_z~"MG*qm7o?t;5N?lrWoÀ㏈86M,K=6P[!A*0l>Zk5LGmP8}y9"gn.k8Zu)esM=Mꇼt\$Q{nU#`DD1h͵!?#2ttth9"͵wj c"#DLL?""b|11 IG$#""'3ccc7-#""E ]K OBDܗ Ǿ_៞DDe ¿z6#""DLLO RGD) +CD #bbI?"&& > #bbI?"&& > #bbgkxͩ7Z7$Gb>.MYU߿[R>RtbuYw(ٙRIIj㑔:Ys)$Gbws?4;św,_.GG^?b5 1xxJ]X5ε\Օ:Y\}GIDϧqQIʲG{q:~k|>->, 7I4y)`p9Y[׻O/-O3vu'כֹ?ףa _ӭ'܄Ko>[9ѫ  j]&IᰟɺR^kܼ%nM?\?c@ߦ ym2_.ܽ0I4+D>XQ{0e9` PECy6W>T -{J77}Ê,+Ѡe.uZvrmu ImDLL7MǶƮjZ/GDž_ ˕U;/G_ Et9i;^~z&#yk^ h%+}0ѴaW?k(2~,Vu-ŮaIHI|= pyFwQZW4mW*/ ntӃ,ٻ0I4kMwB!pkZ\늮_=.kiʾ\ۡ!CZ@xX3u鴆{+:&5o˫lOoəj$GL# {n.`?7ӳf^_|c Rȍ޾ ͽϥ}{ֵs՟nYYӴ{@QFo_FoRl|"/g};?ܜFd?~D5;h~fW:g,[ϧmw/i{fioN||Χ'KbcǛ^^G_I'XБkϳͿs1׿.m+Ζ.߸cu1oݜDZ?Mz{e?v>T` RqKk\G2) Sqg*(%Ƕ'~*Ӷ7_iHf\>>cq{R(f 5.~8,M._ (}O?ž_t]{g)>y}(YԱ著lk\ws@QWl8g#Q7 "xxXrYq;o''cg-C, ^ķ'Oy2g.>9^>X}Y)}50Wl?]_l,;ErF\dTJ;%=U4r9糎9qv_1;ErF\!nţ8scķWHDDz([G ~Ez?_>8<7껫k {jvH.|Xۊo?KGxOx1Xžyۇ<i_]DwcY~K[/S>>;y}*SbY|]#ϝ/:7.ԍ1eh; M;uyZP0rB7[xSb([`%Fy>hƧo"(=(xH"Scp>͉ظ&mh|)mً>vJ.ӀT-킝E"wbѾM8/ny񺘂>H.p\4(K?Ly8}(1:^85qcN&=tALﶷ8/;ř>q!s{[31?rEීZدobJ[6~ ~skmʩV%qǐ^Y'"@9Պ܏w6_gS)돞:ݬ۵?=>K/l9{|Y3kUsmH(PN׌i[QsV5GON<؅ypfM\%=oSٖ߉uppbD\(Jbi[YykI+tfL7vmgy#'GO^,~kmkE\(J>{.MYs_K9C)nk^x}[qWZwD:"R7?S?2mv>s7C)!inѦ͉ӗps%"@9ՊN8;?C)Mi7W7L"R.?S?tSzW-{iw,+5.O3mَT)\gΞ.?X7]~sƿ4\v,[ՎG.j~8āwG߾fʻk.+_w9F*?rsc^^{'K;,Zi?%͇h>s6M e/0kV'tm*- mvsI\wM|E¿tg͊;:]=Wuj9H1צJQ,,DAȉ91'v/8FۀXdUtXa-L~']+oܞCN>qKQy:?.}v?;w#PźqF?ez1-Zt%d?3@sWn]ZĔG`90G⛀Ng1.E-ۉb`pUl,QbA)A1'xe*([ۙZ`߂~Ç_Jӑ&i{ڟqg,H<.W`R^ '6wǷ1?Ekb?/MK4 s`dRC\$By8rTZ]g7HQ]}i]lOF]| ~[\pMԞ<(w/'OYTg1?$]zEL 3m/Ʒo[\N_a?;U x zn](G1@9?PQj'PTc<r Ox(@5(G1@9C*""!`<r Ox(@5(G1@9?PQj'PTc<r Ox(@5(G1@9?PQj'PTc<r Ox(@5(G1@9?PQj'PTc<r Ox(@5(G1@9?PQj'PTc<r Ox(@5(G1@9?PQj'PTc<r Ox(@5(G1@9{CsMIENDB`django-import-export-4.0.9/docs/_static/images/custom-import-form.png000066400000000000000000002577131463433610200257520ustar00rootroot00000000000000PNG  IHDRECXf iCCPICC ProfileHP}$@ %&H'Z(t@B 1$ؑX *"*EĂEb .lX aw߼杙s9wgP8V S$DA"-qbfDD(@mAQi3^F@('󲹙(GSX"BKqnCY]qNqN9ё,0dG YshD<y23x(B<^:*x,Ff38ߖ!a.@zezӳB,J>BD dA1Sf%N1؛17tSlE);zQS,ɊTJS̑L(>[Q?O79عS2R%H|Qt3r^![W*R3=?_ĜΉQ䋥^E>?#PΉR앢q##p\\!XYea@JgOgvOM4 ӱuh9(\pojt QY @QL3Ì` u 169A4H@&`X A1 508 )p\@7 9x CiC)d 9@ BH(JR!$V@bBItA}0#0V`3x6̀p /S%p\oja9Eh" @XH8 dR!HҊt 79ah: `%ULӄÌ`b)X]5cSK2 Emę\qA\n9 ׈kqx<^oć9x)?@P"DO(#n cDU)ѝN7[׉1dN$EHkIEC%%%#%7yJB5JJG.+)}$,|FG~CP(>DRK9OyLLSUf+W+W*7)P~BT1Ua,RS)S9r]*QLQ]ZzR(FS3%:^L_VOZ? X4.mm?"m@nVOS/V?ޥ>QqZChi5347iռi 3fܘ^k_HQ'mvfG:+y:Kuv\y1S}L̢Ggׅut#u ;B_SG?Ma`Ygt :A/_ v5=2&3S07oJ4e Lwv7373[ol6de637hAXbQmqgɰLem[9[ *[.B]=ffUϺkCajچ6۾m2;q9e{`flojʁPpˑڱ񕓵iS39ysWK˰kk]:#Q¸uu[v6uCsi){%y%6xW{?1dZ2Ә/}|%'|߳Y+Ym~___Ԁ@mAؠ-Awzl.=2B9$*"IU$5  p\p()Gᏽ{6UUt?9P|AAyMdͅZ:ݺMp~ЂC݇44ml,>Ȏ<9;GCck8nzDQԴiY,oIh9|գ/ 581 1024 Screenshot r@IDATx|TUOHoJ{G**6Ăuuu]{]v׵7PDz]z'@h!H%!w^^f&w3}s9 SB!      (*͑ h4E       @ y$@$@$@$@$@$@$@jDȐvGVqxHHHHHH x.,%LAq_s9 2dPh{$e=^@irUR-| Q΁$|5/4iU'S.|D~XT]B\8}     b:])eX7Lޝ+uHTgwT+ d|Heh%WyyBOrBZ>&;tK@e7䓯c Te'7')Ԃ\)bnzw+qDV?`/<*uYu)Y~^Znw4W\_E>[qXIׅ y$|HHHHHJ\?Y'&ĿJHIyd^iVwtFc X!P|{jSޤ7.     ڳK<z_p/T =!meJ9EjߞHxIA,z|ۡA {Lp|6qY6IԼ]Ii~ʭl%Z=;eQ~T=߃H5v,Ϣ8{"E}7 x( [**uQX1ϦzoE窪 <{neﺝ[ʝ:?=tR2ve y1\5o(⵪S$t`KPJx},LfLpڸXiJ_5R+Xus6R>:{N[5#zL % Te;"U1qL=F H'(bݞP߻u[(z<5&qn{P~!tf:~+/@eXQeܱ{Qok<&    =>*s\nS+lZYZ 﫸|+P߽iV|@*?wcEYLq΢ +˿s[B!}OWlQJyZ8ϨUs6+W)(k0\ϜnJVeZxCSJ~=;Guj|tYb@{{s޾~`Z}v%QJmQvGk;Ptb8@*Όc- 31 Wj؞ \ܝˎ&G(}UgF$ջeJLqgQ10r?ap|߮f9 Yb!H*W 9v@t,XWkRO}JB"C%+SY1wUsun!]Hw5=$M)XY5F$3qԮRuw?uXq[eVLmgԃoSގS4J׉ۨtIx>i_5ҝ,<k$@$@$@$@$@Ai)m?ɒlޟʿ-KL%꞊ @zWd{ 2CGboX@w+ aێYVc `Go ,]U6Ź<⌳tHӞ$ Lx&z,'    (|b9&futm5ܴ^%!歶ck@g\vAtW}~OyF =#="I!%X60On^Gʃ<6|=eJp8Hs7]l(Rga09̹ol[`u' J%[     M ^o׊!zgRp#^>T,)zg!*٠U@c'0RPױKtBP[yW#KjnhmY}T^|Wc8}o3\crm6wP/nD+EYlwϗq Z*K} 5G$yhF-[)jqP+y ZHdjV0 @ey%y ?;k~2 3Wͼ}- _VGk)FƻcǸYY ]"ej Z&ޓhϽcҕGJ%:Jm OHHHHH|pܽ]* .pGL! 7|컾Q ~;0>kd_U_gʞ(Plz=0U zy{]3ϲJԘ )WO8IG$x)SS1xrPHHHHHH3~#soL,48mUX9/N;Wyk9!DOD?KP)γ {W>؆HHHHH|(WKXV΅x.y3dio^q ߹7 %5J)3S4V?!_{ƶnB~Z\C HG#+~8c8& @&NqXC &>gOtΦʲG>/Io`!C !!HHHHHHrJ斦%YZYGQHHHHHHH\y<~_s"qIHHHHHU@HHHHHHH |HHHHHHH"'NըxKOSCaH)"BuR%Q}@DWuELZŬCÚ]=S *4\BC!B֧e]dUnE(!AFZԩ&*,iSE+䯌_z+9J =!]E:hdٰ'9VۛBeO{-ᄚ6aYzbܭIrW?.ʵ[SVibŽqrRW2FWCs}s ]Vu3%<1緕hߴP `P]7fg:A( Tc /V}go Av'UUB8ve@^($@$@$@$@$@$PPz<|i|Ua(l(PwUVntR_)PVPV^-l0H@+ӽi l@uD%l<#`HW1׷Zᬪ60|4}_(۷tT uePoR|ëa@2Mfg̀7kxKr`|Ka^xG櫱+xq mUOjDcgzj+`,@ٖ}+F&\o n/hP?#x5PHHHHHH,L_ZjX]ݛ|UqZm.3+8*dBvVr i?&]rٶ t?(v3=V̹ߡҍ+yn(vٮe+Xv&v\*JŒ$Xy0U+tk^_O mj+θ_ƁJ¦Ο0oeh(h(왠/ HČe:WF'A;RPHUl {~)O#єHHHHHʒy@Y*>(p݆TV ;F)gݎ@{CMg(| \!p ߕt&e{~3+oS?Z{%gB0wD38( 6NOL]g͵¾s & CEZ/uAJ0<٤r=d>vL T8ۅrlU0i%0(c$KyT@@!     o!-UK^gÒNx P6ZJ]:w^\킭HrunC V)@qUg({o^])XAw~[)Ċy`X.kφ*qrHVѴ%fz<j|}{&f ֞0$!愜0@L@2 HHHHHVdZwR\ӷ+"*\P&"U}wV1UT2;ĸ:[8rSn}5T ]\ ?삜G=bk)^*%[u칵~[i*UAW ;JvA> vrSv]WTmlݯWvj$NMaat!*;?٭+裰gb9oc0|`'$h{1 0ffDƅDڡº3,'     }nߩL#{PJpBxߨpAwҝ''H&8J)V(G*hq'ZFl)lcŀr:cJ$ӫr9]v$I K dt|?oܠ0n&G9?c.YEګm6*WlQ}[ bڝڰs#<SHfb+w~a Ȁ['gSU{~ M2CCKƋ΍ceƚ( @{EvݤT,αVRzq@v#`gBZ *'LN?P[eU~$ʾ] VΤژ2w7ưSBo1n/r8c @qx@.%)Xŧ$J!VN:iMvWR®PEA.ݰ&pw_ )׭xHHHHH$^gB$@2!$U|yB$@$@$@$@$@^D=#RN >     u' h ן O$@$@$@$@$@$@HB$@$@$@$@$@$@N_? x@ :| r$@$@$@$@$@$@$<*$@$@$@$@$@$@$h' N)*:/ %""G$@$@$@$@$P(,V%(];{'    L y$@$@$@$@$@$@ YNIHHHHH*0*筓 T4Tg;%     JWXQݰ NnݺoHHHHJ@06mڔ,3 @'nݺrA    8p.sl      (#4hC$@$@$@$@$@$@ Y}ԩIHHHHH* XZZ_^N<)5ZjUN8!ϗ.]HxxWmժU2{lINNjժm&qF_䩧yr$@$@$@$@$@$@C=&L eɒ%Z~ X%!!XD kE?(Vߦѱc|ٲe>F퍠)7cJʕs:VM;3(/88tQ۴E\uyh6v۷o3x`]qƺO{=Wcƀ7u^ [< @!PZQ"z%!!!Z1:䧟~W\q믿zPtv*_ϗ3gh xU?2b{Rsnݪ)))z\{'/-ܢ94iDmۦj߾\yx޽_HVVVtLKꫯ/^,SL(Æ a`ŊW_}U $lnGUo=E]$xvF͛; 8^ RjUHBiB }vɓO>G}e VO0`ֱcG1FT~Zq7u ^X >ƃbj tAcJ>fҤI?2tPYz6ԩSG*cƌco}X՟8qS~='0bnN:ȑ#uc=&weϴQ~ir1la /j믿^.r_]vi@MO?[WRE+XG;\} e=((HmV+쨷n:u@inРԯ__oOo_|@YF=$>>^HܹS7L?[׭01H7|pA`=<W:v6C !0~ #-B!     (_J5b#)ߧ~W"l.6mڤaŕk+7o /Y5mԫQF:fÇB]N +8p΁`pqc@v`1cHHHHHH(U2/\PUem~ر-m6l wy@FoarVXG¸q:ȬDGGkڮ{&Û yxҟ:kw}{Zj`c      ATCC y\V-Ug(p7YQn&+W|x X }$;2C:wǃ>v0|Ϟ=z9sh( Vg͚C~z}o1'$D@$3[l2_h֬fg#3iڵz8xJ dF $*,4XHHHHHHKvzݻwˇ~3C!ٳu~le }]"l'LZ`dG B0U`,h{x*Xc&G=}vpe@!ChozK@\uUPw㺚} W[#;ZY?v0Fl YRHHHHHH|Z[/ܱR6mڸPJqh PvPD qCfwc!a! 0GE;;;[ʽ3㛹:kS2h1_]?y=LYQ$ $ÄtRHHHHHJ@N(2sluGәlo{{k](P=9 zru?0o^CV>o(%c\(qs2b9IHHHHH|@5ώ . t6m3!_%Nڰh"3ߪU+royМUHHHHHHHY@;&(|)!JSN>uB!    _ PI}H$@E%AǏ/۷o/jS{1?v Y(QHH|-[NÇIHHH %P"z $@$hRHHHHHJ@JgjH|+N >㏲aIII uҽ{:؎ۅ֪UKZi֬Fa۷37n,Gի;ꚃŋ˲etSց1G)3Udz _z~6m5kʰa_~4]'>TZў$@$@$@$@O%gsq6]- hߓ\FƁg}V $|7ZwԫW/ybx#ضk"ԩ^;qD(. "nСu?siӦ;wbbbرck<    (_ @z sLn˧\IÆ nʁު"VaxDFFE]d7{G{,Y$ߵ[n%] @&P"/voHT WEָ{3baVV߳( r\Re [nm RN]VA9HHHHb(ƊɁwM$@^O[1,. ]^    Ey$@>Lqp*dGA |HHG޽[MџB$@$@$@$@ @ 2|Bl㇘#}]97}HPPIu!   A4CI7lꫯ%))Im&/.s|޽I}]>} رceѢEăƶ-[l3xa!$@$@$@$P.oHJL]ky'?Jڵݠ?.}?kY`ԨQҽ{wG]sj]v2eۥsΦIHHHSJ>emIH@6P^+|駲k.y4cUł#ddbzzdffJ5n/- x7zxH*8ի{D+%a8Q      (>r$#[&ڑ1.?(cP{a8!9ʭeі}2_kټ/YlܹQk-ZP'"$/H_UPUgS&E5[ʷ6HtB{wH<!j +Kfv,ߑ(kv{Pƀ6A_In>ILɐ_o>-J]5otTiYtk+Qrh^  e˲mun,'Մ&<AZQ޿QR3doUo]_~YYd:9;9M,Qswv h+7 軒UjV:6rծ!um*\+=pp&m`9E]x|UnNsV/;{9uNu'jHV1%JCh[e(_~溑c}ۼWn!w3Y<w:K TD^]9L*CÚb^RάR=2TEHJqTC @yiųVTT 6#A?[)n:JQ/Df+$09nUP*(L({C;5m?ݚ(bt e0<`w'cfUM%lڛ,כdvHHHHH@pe1~IZP+յd} I)XY@Ibh=Ri4m[_U:.cAp^_#{5q12}.GmƐ2]G+HeZчg mCJQY1VC)\M.QV/JJ#Wç3zp~xF7V\@EW^ 3.p*;˕=Ws֛+#Q6QJ5D6=,@v2=i:g<'xψu >*Y<9X~oqKFkkԊ=@>e<|7“!S"    P/c$ ò79M:7ugSpTRyX 0bJ`Ċ/>V;UuPO 7XUjK칹7a†=y(ExZ_VXzl*bhS?ZLJv e2&JnVq?0lЀIp%]Tz|ޢEޕkUW{Pe4]Ub?>˶V=`T\)TA2Zjau~xrH|JQY$@$@$@$@$@Gk Xj.b |JWR$W;C=!b쭂xn{jj]G2:!a!#:,jocgr<*a&ŝ r VEHW` $; 1ƄdDf[1&ȷ`-b=fJDŽ@ӢN5^oM\*,xbOWF`I9??gpx7kUL?on(P~E{Q[IHHHHHxEHx ">'TB8;y-KR;Sn n$3^+v\cg Vy<ox( 1C{7 eξR]g:=񢵮r(Y]xn}[p'ȊԲn^HpcQ/yRvl0b;X੘w|[H9XOZ1r\.Uӹ0U<}X۸:.GQ1YN$@$@$@$@$[A{Z#K>$[tk|w*G1aW(;U}K# \|ϙ"  1&v]QiH8 r;`[xpFVTkxx8sw܍k$@$@$@$@$@E+ p4ݡ!Bɂ a]=acv/Vɭ+hXw}\*a]t92/>QV}HLQyI}[ϡ[m0CCexhb~nPꬲD)μsN${5 ]<[n0 1.^T'V3֪m ZxT'x̙3G`2dH͙ WI$󈌌YʸqdݺuҡC9%<<\N:%XFVZ۷oJ >}Hǎ% W̚5K^|ɒ%\r%:V_~ҭ[7<ЦgϞ2m4sڵdeeyXB*W,f͚h?uTA)Sy_^233e/7pm6=B%t{hݺn?&L\|źlڵl2m`@(pm꺞/kga `~ۧ!g]_ޱk\ ڵ3 ?=zHΝݾ.q6l)4UGF)Ѻرch~'NxC ~g8U\xLcܹ~#""{ %MÏ?׌eO8CMpuѿms xn|;۷c>x($@$@$P<_:)Yq, qC_+;g ~իꫯ(Pr.{3>^{ nP0Fo믿CJ?€6C!@)k+pG}0mEF7|Ӝjߗ]{T];G]O˚!{^ӌCs/꺫 m~= m1 f.v#[owyGgw<.|Ex6o~\='PGPa ae7 Ƃ1*԰;hqZ±]Pv=7- LJIOOחax!B$@$@eMSY2^Y_v;$mՖcR$@!073uoiP.VnMlߤ6N\  M?&w0f4綳rr{: V{ⴒR(b& p;3s'xts(P Gw4mT~aaESNzePʰpakUbȠAt.x-@@Ik>APO> ]pa?P< Xɾkeګ!88Xğf7ghѢCs_uqrne/o}3f~o+Pα2q /{`w^9sV~Ey睧aÆ9 Y3oFs yf)V|A 4o\31-pVE}@?w(Oõsq7 1ؓtDFq yre2FH m{B^vTJm㒒qje}W$mڴg(pNII)נ}cܵ_}@Ir*yP.j(ew{(Y0@̺q֕lc2<=F\ѲeK=3;BUaCy*I)k7v(gsޯM6nCy(ظqGy8lժU2`zժU2 0z(0!'5j/c=;;[iР.O_kt;i`lnx5%>aox9+S }+3sGOlKk7L5nXǻC F(}`{ɉ1NYcT(/v*8^qk XH$@$@eD+Bv8,x W-<%"M)M/PHjU,S喋zj\41մ r*דe=ȁҫM#yy2sf(z5JjF6(Ԯ^EScGEY+uyHPߩع[b='CeN`u_긷XOWЍ sY7Gfڢ񛥸&0i$ p?>^zNejJQX.P{c1΅ A1F``B*4VT.q/^(>\εaY pdz`9B {Ysx,ZHoLByg \瑀1E} M(j_p7bC~Q/+8G(!|B$@$@犀Wxlݛ'.V_%y!7_"a!>P%<4Hy ^9\v%&˷XItYܬTʠCbFJ#P\'ȏN$4]CJQڵ4rbٺ޻?$eenFn蔷=9߫n@HX{D( Va,!lg# ֜lg)GXu_ҷ^BXTݬ[])R 1^wvl58^XYQڲR1&.FҞ??,D kMwmyHHJW)7~ʜ[Kz1FG>j݌ u X\`ƊZ~#BV je`5yA^IdTF4xX6׮qy*U3U,Q '{ˆڋT:Xч[2Wϟ Ϯ4["`ر:oA]glgXF$@$@$@$Ph(YHnݺɥ^*wm={7߬+w}$%%9|gڅ^(qdeeM7$X뭷Lq &Fwn1/III&M$#G .@.bO}Ο?_ǠAgϞ+h^Ѻnzz>袋9Bp}̘12dٻw_^qPߖ\]F#Fwg4pL$@$@$@$@BRNI;رcuq?}C_vKZhWkd„ s'\r@?`a6ly}KZaNMM;vȌ3ty6mt=#VBKx*`U"\࣏>:; f`zjS뾠W^]{',X@ۧXK>}$@$@$@$@L9J0'(8ny"۶m pӦM=zN5knkI&ob\_uz6m$ aHj=y(7x6,`|x@q hG_/Pޱ?p~Q \nݺ:d~̙3GM&1111 ̮&_Wp/ oa=c,C$@$@$@$PP;L?-Nx B]8yJT!BYS2Iȼ-˚-Cuy@$p'OMgg.>JN͔(:[n~'|R:[[nչL>CIGb(XcǎX^xAeڛ|̸;8{qrq9`@"G}T$qJ=a@?ngs0P1W1b`ر>sf^H!L!((Hp?tIHHHJZ ӌ9!Uy!>_<{ź0A)|V?{:͟$U_;݉ri2_뭟um$ڼ0`^ͪ2{+p]D~R_kX*I ߸kOUi_ʡ _)I3{txм49p8Uj'/|;Us7_,G? Ntl*篕F_(ŭt7rWu|<##C'blF ?2^`\ Ƭ\XcU #^"#=7 l&ol'>    #3Dzs4cYZGP00/W(Y9/`c๛JZ?ʲT\nRp]6.+*'3[u\ xrOMCKy }7ep;yBn%aAr2AN'Oxx;O]uK `p&kQ>     'U/.}#ɻjWd#G('G ]yH2d#8?yP@Rq+$Ȣ ;?]Z8]?$U*g#g o L\/tUCGuH Bmɖ$iS% C^a~:vxÂJؠV!UC+zSaL_݌Q2T}Wl+XrT:F6INɈ>e]D&l ƃ-jh`w8 YK:, !0mf{G7ceiW[[#UV;lʫА9ˏWI\ygu     2%!$}Pc2/X"?zHJ| Okt4]t rG֢?="Âݤ^%2t: I`ew Nd+ hs_Og,୨>N. 0@_QlAQCPB[ye{ι}9s3^kC|^;4RϽZZ!?`ߞ!c(I?J|,K~ тbd>?.y N a20ၓ53d=cTD@D@D@D@@ "ss" " " " E@R :Kydyud(02jHD0Xh}̙3m?Jɓm1Æ KS?lԨQgԩ6x`6mZmyЯ_?3gN^dyl۶ͱZvN),'L؋/\ѣGLqFӧe ,1c/+Ǎgny~ժU/i_.0ݲeKtgfLI2'9|rb%7پbLL.@TAD b͟СCfBί:C*X֧ꊯf͚͘1#T]1bĈ ׍FYO3lˋ*yvW͛޳%KdgeR1~1>~}|e6Kxvq}7l+e>%<֭[g|A33&$Z ş={;1{l_d=OB]/YPt<( tb$yKF>:o3N~'e]qIV-\!C9=ŊG}4/ɓ< {}nٲ8p1ծ]VWVPzHp=EL9n! ׯAne˖͐<3U3\ڝ"ٞPeVH%x=cȕ*U޽{g(>.?ŲޢE i^Tzbzi~Qc9;0֭[]IWv/_vN2emڴƏo\sVzu[ܾ׽6m.2\rv!mtnv⋭I&n?z+f'xM4͛&xI+x|nߋ.ڴi矻Wx֯_m/2լYӅm\8 ;￝҃K{ɒ%]z{ fCMrϓs\oA( UV >s2ͷn;~?u>|KCG"~K+gݵ8蠃O<-Ҿ}{իW"6zǎ>>||A;>2έtҮ]y啶pB^BzfO=T{x,.]*UOl]}I'O\k/nfVq痺4kv' yWݽZQZ϶ &؜k,>~{)tMNG[ӶmHڇuQvGmm>5NC˭` )VAqi͝;?x)4Q}f' xp)W`%xmćY_Ƴɵ\ygDF`B`Lw}r)_N)+뮻.5IȬ>?ލO2e\ۺ]C8=n~Gן([1=&QɏEYy#?uqQ)4h4Q N){;'+XS@T6" Es=)'|ʾ+嗻ޱFŨSNZ^~)(W\qY&CYDEx0瞆{/ż'n[WE?!/T/3 WE~^g_^xQ\N9bEz6(h;vtrR_9&/{VF ((ܰ=]}'a۽yydbN:/Bg/]VN88xa ֣Lr ~K/RwG)ez$bыv}ApDRVqOHxyFGFA8D$n+ >vgy)(\3movFz1{ꩧ\1QB^!1$l_,>lK$U &H[=S']j"Q=s]cg `<ꪈ,qfՑq8G|/2 I̽9{~Kzz-gM[,#{ kt xG\C'`Cj%\SdZPEWj^2z=i b hխ[׽hbȍ{pޙ t}9V /?(\gzwFJ2y$Glu7D<H$b@y O~ιk׮ 1h/(\.Fn@Qmv jHyfw 3rqǹKX9wi)!+7SQY|h2G ?]w5V: Aߧ1&q{(3z:>Y42OChxkqmIf>0 c K/(aeK^r"~xI~ʏ4K3/ f_N?t:S Hx<1bϿ-'=3'm.Ov9ÌAwKĎ/7P^Knp^hWԭuRys9:]ϯD6p(p4Dyfe[k;6ђF2F1b #ֳ<=&QcSdVɏwʓ0Kne-A/" ;:==^P XTz61y%_Y /zwc{}LV P29^hjc# /k~#3OL$1`a|8~9) %@0!+y&b.F;9O'aN]58ڽ٧I4//Yic}P鑦We ^I\"I'oz"ɓ EH)S>(uwF&zl<>2Qw696?_Be/0ިox9;?((mqcw 3vyse;}i 1Īq3\RD++ϯx4Q~#[LX7(O᪍eGAꍠ3睕kƚFg73 r#iϖ̽ސ}g"c 1H~/} 1;MfʠO\Cqy"ybÃܟx WNQļ ]<8/KC~S_F'H8f"~8QNBc^ȃh scI=) ;?Re?xv0Qwx1d`GP(f``cz衑px3uꫯvme~O'YiNp>A$pU:S0Z7!(*/{7H_Ò=KF8Ò$b- {3ק;X4XC܊_t}=cXYyrK>_?]n>L +R(*P) +ianQJY&QۍWgsڦ2u<͏ )/4V&=xF)wU:[&/% $7aՎeMWDh( <*=aX,Tp\o@I:?F.!dSRErqi) r-gN{*֑rJsZIhQ~2I4+71 DL d\" (*WZ))@jQD@D@D@DH"xAt" " " " " " "dSD@D@D@D@D@D@ IvAT2U)" " " " " " IF@$ *$# @]GD@D@D@D@D@D@ AUy@ .#" " " " " " A@M|>6l`+WvI.;U^K*Ty fVZxעzZgHcE 216mڔ?G·k D+eH1`}=oӼ@#MHD@o ~g_|S~ꫯO?毼Jի'ʕ+]Νzvjtnn ' sn\rۆGDα_~뮻Zƍ#c=kK.ֽ{w[쩧2pg\*/[ʍ?C=wLknrM1xE<8Yd]}v!8&Mr7nh{Ν;aw?>믿p[nݬo߾mG} y/xPON>d;S1cc\K/5B_`yq^yw\Ow}e;7 e~ }Yדּr*fD@D@D@ % eI73g1){챇s9Őb+/#Gt9ǎ2zQQPZjeÇwy[~}kРSY'W\cL pGx~7H1}];c ~l}Y=ۉ'gtX0 ãD= _nС!7Xm?.͚5sJy cW_ >hucBX>#㏭VZOZҥÛٳ]<ƀӧ[>}z? \p=:rL `ʔ)n~ 'p'tbؘ? 4z-7wa{׻t'" " "P8 (p^W@>@y ly|ڛoJ@Om؝o 6 ևI==[lN:[z<#X~zQ04ibK?i,x ߺqP%g66?KmY9<87\?W:ue'4#QF9%zh$Mx((pEGP `L +l@0p-Z8/Q؆2MY A첋Oz1"!9z,\ЭgkvH]cVia| F9aKW`77XD0`=LÅi۶yVƽE/>b{1" %Kt1v٘|1+}7L4쮞 %тK;q <-B,!vxxux7|J2J>a_@1M?Ϋ3t^|~_C*&O쒿vy9x+:@( i0ZďᏣ@" @ẞ:Lbܹ|~MuGһ>X͚5:ܸ'yzW q^NO6zI~7|ܜ8QlSOW݆?eҍ`A{u۠^zn7ཀn!q'?O1#2XЗ /?ܨ|9pư`T0̚5+Ci@ P@ _<]D`@$v:,zo&N 6^fyfŠIlԩSX~`q^i3fs^ǁOi~1Sz10_`^GL8|̺8s @@=cOD@D@D( .Z DJ""   i7 @)c5zGmX( p εۻJuY^85*>:'G||abc@\}8c!&-^b)s̵d?J*39$" " " B 5$X?e^A|ײKGy"|B.g&[,0R3Tq)Α[_D@D@R sTR&@9ԋ7"}Zk޼)zME@D@D@D@0B$ ,UK@k3(B$>Ê2@~p"O@E @Q @Q:G"O@"_@D@D@D@D@D@D((\e@' @ "|otי3gĉ3M" " " " "do_DP6m϶lْj}]4(" " " " A O>X1D@D tID@D@D@D@D U*WJH ˖-{̕RJֻw 5j6k,ۼyh"C1bIгgO2s1valnj_}=V^me˖N;y'L26mdǏk^~e^r-nk ,Me]f+WNVD@D@D@D E( E.)"P=\{m 5a{WL2v[˖-3 ɓ'?o:uC9c֭sY?X+5kD~C +Wt.sO#|aƍ@Am۶n/_n~v" " " " )B i<3;})kV+&ǜ6ﭶa=*٢m-6g6L) NLj6m>u_6EME@D !RJYV\O{(Э[m7n\LCA}۶m]r%N_jW~ڵ6l0;s.ҥKK/u<ze;/rYn\zlNIc8kiW_[Jlti^z/jJ7۬dbV50 AhZhs>үTD@rD>:G'کZjN' Ξ=ͷoM5oʗ/o%J|3f8Ozȯr۷obXe%" " " " @Rv[)[9h-]ݮ" " " " @R7S!'mk[ň6|t׭V<2~_[ls?nۧRؽT6niI"Sv3M_ұwdB8|3>@Z==O=TP{Ξ~i={ #oq2}׍-@A ̨i.A;N:ߦl΁?uGuA'Jiƀ13f-fkwl]vlSћC_ (n+@/|ˑ; +5|"5Wj׮u5lE@D@D@D@D 6`P\(%1>Eg;cଏOO8ˤçdv4 'M]G~;l8`=zXCiE@D@D@D@D 'b pq<r44CPxDD@D@D@D0H0Pb3)vHO )BIK" " " " " " " yM@&D@D@D@D@D@D@D EE& @^U~" " " " " " "dH‹"@^ *?HB2$EQD@D@D@D@D@D@D D$!H" " " " " " "m$7.Zj׮,8"@@U" " " " " " "4dHK@ *gH2$ͥPAD@D@D@D@D@D@D l$ R " " " " " " "d?YD@D@D@D@D@D@ Is)T?2[," " " " " " IC =׾>.^cH󗬴^nyЎ"P 3c3u&3WbCd+֬wqڼ1k@H*m[2nK>[|6oj(ߴYǹiVyІ~k[nKۚlm[@kS𓈀<%wޡ3y_sz׬h˕q JDbŭX12ɳtGZѫݱ8FxƄm۷)f7oqi*/ey[23"P sўMi,).]֪UضHaf)i$uق lժU|%TD u/^*Wluֵc?SlTRH ߏp^~7Վ꼻[ww7ú}cعu~6ߙUA=kS[ul-{?3t˖[zb{4o?l/y oZwm5#Ռ6 õ-`>l`׶n&+`YbslTY"?ekР5iJ(\TiD lݺՖ-[U˖-eH@Q 4!k2qI{oHt!8kHzq;7U)_6G?:eJrֲam0<~ڼq /`Xk^_x_v˙vQ;W<9H.>"fm7rkxth5ٝ'X`'jTZNmF:@U*ک>#4#"p^zREDvE@Hv/Xʞl/tCT&Yڭ+UUX7M&ZhUrשlOݺ6o @^ Wa(>HFvE^WƜ2~R%p. J % g8mJ""FnT#@}ID@D $Oۏh2`_vT4g;\pDqb0v2}óq?/{pFײlu?snjyn ڠٽi]gϙ \?F Zi` io1Կ5'" " " " "PP@/?>p5sH|C0ߨ)#Sl"= 0#i=CO&aklfȠݲ<+z3x~׈@DZ!w'z΀aZ&u]ɠVw*'9̆O d߯uQ#{ǖ1l4/" " " " "$# 8FܾGscz#{W} wJN("nAXd%W< No $Sg2pGҴ2h0_nĤYv[ߺfvƠ> gW>QģoW" " " " " CXປ=^hծ]p|-\RNُ.&n7oq$kr`ȊH%|IЀܞÊ5ia4Q66-mr*}?jN +ѣG^{iz}u^;寣&!{-'˪d7})+(8r~ X3DDp"c)S:vhժUIΙ3.B{wVZ<Xu֨Qti " " "5zC'l4hPd*UX6m I"J;f͚Ϙ1쬳)mٲŖ-[fL_~{o?۰ap}\" " "  6@N ]XJrʶd۸qu.` c8O %\br;;c/zV>+V+Zɒ_3P׬YcUV[t!DŃzz1 {O?m[ǿM69-Z֭[k[nuۨO<[O<1G[nmGi ]tYҾC~'ݺݻ; 7`tDe[o~~?>`;餓#p1cƸMȾ~vav衇٦"@L<&T 4 VE@D J 2}t{#J)Y/tw3ΰ=)1QBꪫ[6=#G/r;uWyq| /؄ \^Z;REl6\馛;駟_"0dכM/? 5\ugܸqvw[Æ wǬiӦSOj/({s7\}"8*Ď;8 5=(:Fr:H^k5.̈0{.y' <MqgFSi 3g:}ԩzlT~};ꨣ eճgOI&q1=?1v)2{lWgEp6B~-[Y mPK1veAϬnc ʏA{΃%f}PkSܣ{Ih*"**WJHIjGEtܞt*(09SL(>+zȑn3zܒG+_|pY3;!(y([r-Zpev;_$ȏ0~x [n%:X^u߾}ĉ/͛7w~W.:Nv?AL[⸸{;pJ:nO@|2%ߟ0& 0r\}n 뮑uI {|W@jJ)"P PYDtڵkz܀9wEKRlֶܹm[+G= $UN׋ŬŠc+y~zl7;ȂfD #`zQxGih{/~>͂gmfoѫ`j߾'̀0\9-|Bv^/$c8hܸq²b@X~}tv1)`~`CtaקOje(};+XD(P@Q:W'@if|O?ue"? e}(bq'h/~%zk)W\艥G׏bΧe bf%)06͟?ߍ@y0t+<#'ݝc9ƹcXD<5{meb 1{\ 5](3|=e!TfN]EYYَ>+ƷXA)ϢE96_`<1>(m4nZsݥkd<L{@ )Sƹ?~n@?>1F/'n[oٹobW091(',2V<=ontrb J^ x(4h}f =\ᮌu=>|SGR<~>GA(ܸOt/qzzIK3Wz袋`mGzƥݻ˓6rpO(_'*+^6#xW~Cǡ=7n />cH{b _J, -"P  J>T1`qx9B#P'Zs<|Nd w̽~CE葧7g x7]Hydխ[E߿&wM_ Qz!9,!Wcp@Q "((.|c7j>?_Jy]xzq -7K,":B{Ʉ'*+J? =;Yzi#F 6I!_ԙ<1G@$P |F %#ZYBi`cD ΦM~0`Tۣɇ(CPiZRiSWj]/V < ESD [XK'-=z3نrU%\"u" " " "2%UBl \D@D@D@D@D@D@R xTf& LE@D@D@D@D@D@D  WMe< |R""hW05o*7! @pT." " "r.eR*$;K"" F@d"*uܹsm( :L&@?vE@(lRyD@D@D@ @e˖`l۶`@!%?=+ڗDD@ vET(@()͛7/#P" " " ;@RVYo#&ώ0(YmRjWYәa/}Ԯ]xDfD Y9Vig7:'2n<+^kV/>o0Xk7=Ck75>pkVw ۵BD@D@D@D@D`$`- jV{=ʕ))7o[@a#w)Y{ 8?F1~ӭDOh_mb ?#~'b2vۙmJW؏cJW6ٺK+Zk۷3[ضu[ϧ`ݪR""/f7ٲUl[a[nc8E@D@D@D@D@v"_TIۻeC8y"[1Mٟd=OajݸF nG#'9Db֫^v~m|nBrK}mI`$ؿmS <`H&Sry;=kӂE?lZ7-۶mkun$aevl]>io]*# r^D2֌@ $`eBNpj;uS,:wS6ԩ\>8֮<~$vD}{^`Ժq ~tz5c_OARo*mA~co~~eK< rP͈N"@̿w.cqG Fii:m?ٲz09"濘=^?& ;j_:mZ"" " " " "s $U6hv͂WCp= X<`bw%"PT 5֮9ty3@:h7g2T쾺1*iؐ}pO~g f_>HD@D@D@D@D@ @Rx Cp+#}DoQ|vͭL̞m|zo9}[ar3*92 `X$8[G~c;}[5 :Be'@ HBozt-w︛ mܼ6=~78aWK;dB`p3d" " " " " B@rsEYժ03_h 7*@guAOID0cd6@ve*hjo Fr@Y+VXڵ\D@D@D@D@D@A 87%H1`)T$=Be" È9 J# @:ZI@y]uV" " " " " " " phAD@D@D@D@D@D@ ' uY@:2á(d(Ug%" " " " " " D@D@D@D@D@D@Dpp^W#P2RVX=@A@ڵ :@!'hѢB~:=y" " " " " " "P`d(0:<y# Z>}l֬Yy]ʣqv'Z:uydE@D@R wTbs(Z38#.3O~:?'*z;vY<&ω"wu" "dH˦B@=^J-" " " ;mvzT# @]3XD@D@vM6و#駟v'#ׯ >.<ƚׯa{a^XJrʑӬZ~F/>c|> e`Æ 4YAqO+ҥw ;+ʯ4Cӧۙg_PyLK.)SؤI"5j<)d3fXz_wż⋭x sFD||1mݺ]9ܹ(QXH֬Yc%Ke&JfxvB^3KTfۡB >yd8\/fD@D@rD zY,֌K܇޶>o g1]`I9 ~Ke|zLwT("OfU6ojz_8tMrm^mk0ym ~EQN8KGo?zێ:꨸H0Kpux=~E>6/ڤǏ_󏵍<n<8VfL\pn_s?~vm#?cjժnSNuM~[nְaC mѢEkv#cǺmԛ[n~~͝;mClvsQ >5?u~WҥZ*:s@G)3 GٸqbFp?蠃np$:1ѣGo|+;Xr`=P2r;#?98F]~Y{1O׮]savO' o ss OD@D afկlkBq׆v=C0EixNrFz/K/ui9 0T>hCowF=K/̙3 :Z`=pa -p,z?sgtFk!e8uxb[d|Def Xy{=%P&q=0h*" ";IN.[~5o?SQ"/_m|)$hݸpJwjuCpsCphߝDv1[ϽZt8ҥenu;.^a}Μָvu_*2".\mFLi-G.=ަqK_{~u^ (PT`zm;ʠ"uٽm z Xzk[ɨ˕U+?9( (\qyX;Es${]w^x)=Cy⥝<)I(E(;3X\93~w%u⼽B2@y9-[p`8@A%‹>͛7w=(3{VLF$9 "d&(~\:+zy\c@tx ygz 0J*F9rI Gx t-@HPn]@][4" v`Dh۶#~'M0.kтM6n=1lė*U*p\Y|,cཱྀW9\3 'lwa/H;cS#pdݾ댕$y 05w6-Վ ;ύ,NG^(ߓf-/`llqf^(;AOR%K~ب)žXu|Rm6a1PNiZw[vZ?Ү=H:nߢ3x%]넿m)VFUWKe܆q }G2Ռ!bA#`\`f5F>}lK;۲z`B7s~V,XozfPO ?uH"6Co"yE~1Ôxjd^mժsF@IDATQf+܂ q[fiܞ)GE!CI+l5^QҲA%l6ޯʹܮ]2qɔr# nAWNMf۷OW>\>MF"kԨ<<0 zc^@PX +amg K<I`z]}nbhXbŊ ~[fS |pB~ Lk֬E[CŠ9 븮^hxLdVf0xpl<[oup`1clݽ/:ߦ@ $ zɭgt">~cwx'[a4{eѹM3[ .8a<#(7vMz[CfJz>O5-pQ]\usW]^EF5(#0Bs Jrv׹GX.@blL@ =J5zu˵?g,6jѮS`Z4=/eKe}=όh&%+B޴iSF6d2ၞEv٠2Z8‹W|~E sq+|| wera 0aRwKyBpYQSq#袋\#BG>MMn^ pe6ūA8Am# r"~<<8DR~}ǙA 5gVf(wN>dcxyyp< (xIaY5͝pEWsg՟zKfaw'O$\:3<=T/֌!4RDqPz5 <|P1P6Gz.)Nf䖏دmDayi*Aqb`S| _H$A32J }w,^azi/yMmm(z3'> AB5;veJ..^`{Kicu\q)gK L(5H$P:|>ˇ. e <}`x ؇4ӻ 9ʁ|>}\wW|s/`>C[BpǛrQsLHCFv`R~衇 Ε2p-0. Qq'pOAC^\S !ID@D@@R"1nа˺}+7a_hxqO2=T5Tp=Gvjk)+jTFNzg@x>Ì7BH?RZhb~W'Da7A|{a1Ow+c\'wO{w?f̳>t7ƿsg"/w$m$x&v7adK)=j(( ?gbK`^zFyZ\l/ńSb8gC> vfє< >nz_|, 뢽=0l!3@% DPHGw-cRwɻTRYf{|h[hīİ[vdIX(912t2|H˃7VPqxpLc z W1N ~})uur7z s ~ DaРpp7L\ ^?0"rbDH|Q"> Ȱ00De&4<)~Po$DTD@D w=wj~8|vO}.>:)6Eqd{Ngzi)$]Բ/9) >F?(Ww`[ J{@ySH `CG z9ecʎ8gl._8WD @_eå3깏p`ςQ̿s{[xS ~DZ +!<=[: n F/n_` J;ug0*F^Y+> \ MuB#c`  _ೃt JNݰ)G$W2ӲXC*F0x51eE%yօ MRI<זK}9zƣǏ˫_Mp RYCG$9-k \V^+1HHHHH]e O'Zn*2{ifb_O;bQt:\B\jĉ#>i hH $~d&e{k8HHHHH@PXێȇؒiR#^|{9~8x_eRDqwqKz^,8oLi eύ$㈰P xd%,l(!=;+ û |$뼕Ҧa 9vmٸc<$I;| (&KIltw{j:l;'$@$@$@$@$@G C =ȚmlVtE#(>xZO<$%_N[h-e=?DJ ̸tnDJ:2ִϳ Z[sL#Akuڿ wRsIfk=ٝjݩqW"{SҤ\d-ơV8:bqiؼs]T.j^W~s$Kl$@$@$@$@$@D ( ѥψaY3 6\AM7xq=*ѥS7] v͞”4/jUSE?!+ƛט%7pի+Ww73w&;ۦgsBTiqaSwOHHHHH@Ppj0v w[wŵ+w'|>boak1^XI}bLi^h(#ϴXR` fTKR]c? F51j~WFMeJ/.Mf̶53~/mS?Voe6,L9 @P5Bæaa1'pp\F'"wKUТ^5~a3Y!Q>))Ibb\}iGb*16.SʋRg1kKI/3 $P L{cߎ(7VבӰ~iq#EiӦZ;a&ҥKyd @!Bb cw(e?K<(W3 nfU$@Mk oluo4  $4K}Ȋ+/J*I׮]mY[oUj׮-ϗGʕW^)5ѣG[@ӦM^})%p,$$$w!Ww}W:v(O>|ײd2d%\"tOH +cǎ={zYEҥ.]ԝץK{݇N@g$@$@_/& :uL>ǃ>hCp vܹ2sLM6zK :w,˖-ݻK/8hhժvVF1RbŊYkժ'$  zUCG#=}  ((K,($bIIA|w5LW-Vczq84kg{pp8voxA>իWڞX_=x[_~IHH L{! `'P\9+w-*TvZ{ǦJnlsY''N(GuIHݒ ]͚53>3ݻ`ƍv?_kB@bbHp֬Yra{m|bVtt$ Xr@A  @ tlHH 3x~}7]ts ] AéxbyZhh:}Q&OlHHHH b'}y$! `pT i> +yr8Q C#'/\/HH {\= @@ @"M/}|M     pwlHHHHHHAx$@$@$@$@$@$@$;:|gHHHHHHH 7H$@$@$@$@$@$@Mi%}:pDy,N$Pz_O 0c/iI([W:&9 ͯ_:`&ٹ}ks8z줼4zc~8G8x0~U;{Ĵ@$\d޽\7HHH (!]SC/m\&<[LI;&ŠK ab>i-{HPyLً^z)CD aNSH`^VMʝ =+[&A,~3$@AF >>^VZe\rv&F!n*!  #λ{pV2DZ7,dصfk-r[rE8{_;h)nF.o\ݾL?_c* q̔zR!:^ vq_ޏdC6I(ԫd@ж@A%0$igD'TR&4G+%-L6'eJؘߣ S^\XAE&BO "" D+O(N;L??HH*r`/͔c exCҸF1E>ut;2g8+ ueY<%Q+`!ɩdS!VyZO OUcKm//ӛt"LdܟҷKUw=@0y_MNv_w©fRcf󟭖fU-v6̓ƁI6OADަ4+{v,e]b Bĵk;- @P}S>6!Uvo#y6XvՖ2c[|@I;heYq{M:X#w_UýY6-@ϙ.lZަ dz9vin6.oH1 A2Rmeܙ>0k0^UIHHHH@PXxoPuOTJmO8IukVrMaFxP*/ekþ# t?һ zث`ȭ\CɌC !ٯ!li{h@쇕, SqeE+{FrAAg<'    _A8G\U-c7KK?d}15 άAwҰ9?B\ٌ5ʺt_6yc&!rW:fLg2'no䏠#d g,|g|CµߵIH>`7%Ix N7s^82yF$@$@$@$@$=XK }c4[To5Xйyid dʹ&\]CN&S_ F|޶)B ' FKqaKg%f$FQ%|"sVlps̔mҹE|e~HHHHH@uBprͺjvD6qr90=aT_ǧ1/f3~yu`i4׳M= .kkzV5 xtɿMp5Bj6χ+e'UI'7TuEvF߈mkiOrx`|    (@v"))IsXڿŰRŭw|8av&:cc  f@  ciϰ,(ΚI_II'=sReH|'pgfNƟ8/f"A5i8ײC]{ 2 oi$@$@s }ۻ*C@)S2' Ž l@@ra  @ЇCޡ x\C#@{փhG>#D uq $@$@K6x HH|"(;S W87tgz\k ^ @ h^oHHC;+S4CYuhyǎuf&>A]\k?8 k?8s}jKHc  _; j\#]E z3! _]5b}N[Ѧ#Ogh:c   |: }4a*TlW(kӸVt\#e=T!FY>EQOq z_%q}x7xΜ!ǹC9}NBY  #@@ޱfO$@$@$3[Xř h./q li:P)e9.-mePSGPWڧc_< ixvzr8ڂ^#HH t3#v. @^hQ *TLĻ.S)TXG[zV1.q\kYQHTuPAڟZٿ;) %lCk[t {EmsދG(i苁HH p2 &&&pwȖI g僒Pa:S!01b \k^k_(<ֶ ?t>Q>4??9>搦yjHG@=:8g  ;~q'  (ZT!FPQ ы4\9Dkt9tlہ(C= i*;?F@9o#i*yڎ(zڟl~5bgy?sgHGw9Ql{w6q RJI2e{w|C9'Q!M ?`   :Õ _@ 9 ]:ڪeTC1={$-5U"##|ٲRosb[#Egx(znťɳ (!!ߑz'L}r^tG)--M%""B N؟}UZ>sİ)  @`e.a$P` (jo{&NasMƹ"Obm۶Id1Qv  -ON6RjU =QMC64@$@$clHHB)T()5B HC9`ޒft5*55[ |mDEIxX޽^6{FQGel1]0 lHHF9BHcU  B!\+~ 166#:@Xo/W6 vs(u!s-s  , !=5 '*IuT y^­M!8SjP;=\hC]1& [!  ~}#*R|Q8ٜOfH K;B8MnnQvփ=sV  / S,9GC!s*C@a忻cK$5x O0^a(:ZNm   dU2g&>][_k/jׯ7 ?/="&,^M~*:G܁t>q|& N@G@Uy(k&+=wAyH@<Kp TV(@:HC jAغ{@@<>|=v\R=]$+pfmLX"s?^j49np. 9-kч $@9#!A< tTE# cLyEpnum^kyiHHC (9}( V|'-waI?rL/3i^4E?n&[ #(jGޓihЀ,2IWܕ6797-߹zɘH  p r3@>CLpBBAyD $5UjW[9a8G8nݐ @ P W-\Uq@#tjVGɸl,Ǖ]'r7"A2R.2¦ jlJg֪,^v|4q|Mgsee2v"[?/e?ټC7)Sl}@^;Ev?hWXV,Jl_筰xH1ӹ\q~#gin$h߸w2Y2,?(+!=;+ 7_答6 kȱǍjظc<$I;|D`KIltw{N/Yk{@$sD*|T06q@FY4`Kc&[ 䏥Ch0ϳ3`6%IÙeN뚣޺Si(KoL29t8cfcpqi\#[E*m֭2sL'|ҧ6XP)1i tv:4ߗ'rC~gcQv{ājU-NO/J$@$hAXveܭuCE={=Yz=?a!ʓfPϋd-ݤ *ټVl_m~񎫬?l6iUܾDh ƞ?0[/Gz]d0[a=vd3^Jq_w7sz#sU{yrMs/1aުVt'^bxqJ7]:\7xn-Y8,\-%qxiff|նcO l֫Zhrua ffx駟͛s`˖-2|pÇ%%%%YPQqX3O(e̙#ݷ8--:ԁv Ԟf5 jj:cV   Ĕc {h$Fjŗ1";,#'f_k f `B\C="_iCKӪ16޸clݵߞ'ĕq #!0Qj@ʭ؜$U*D< 9\12r޺0-Ϙ@zt3 9_e0@h2j,[lҮ7KNM;1k;϶Voelgr޿_ފ':v }Fp\:0(]yt'''KDD~Jtt#RB;E;UV8B>PWk=rt_xVITTTnb"F@6vǐW(M'h0 Bkd}Laz5{c]rǍ qJ3pRa6ط:ߜo6L ڠ=0c +֯j;v-·*ʕ;?~rɓmڠAn={gd۶m֡УG"uȑ#ݳڷo/7xzĈc9pI׮]>^{[|3*{ "ܵ'#80KD!(UPYWiW_}\ԩSVՙN)/*@R[֖Q(`  r;&/tMc"  bG: `6g6[)ɶ{LG Sl)MkUqׅб* 6|꣟3Giʹ M  _ޱYm:skWz;}ZI-Yn8{yŦ3n6h-ΎoWYG2U6Ԭ,T*73S e4_O_,ؠK2S.01ަM3f,X 8@׭[ W^yŎN41ܢE oqYr:uH>}dŊ_JJG_zԮ]} 7ؙ򇀊NBI>bC:'h9eQ׽[6_[=!A80p:,Z(S~F$,,,_1Kaj~'4T4NZ5kug|0WC6q\: 9bg[?HH|& V܌>j2ᄇ 2k1!`?uJTDݩbi#!.\lNgn^qM;!3gg>D֛=S 6*O~ _eA:?|`sC IЫS 3;av Z/Xo0_8WjDZ~@n _\&:7ΦLg? fcJkg]owؤo/ȏիW)\pK&Mdڴigt@)W^yױcG??ܹsƃGhڴuB GtEx*pDEkD*FPJdMSL>*o3V^>BJ)C]۹(;W3ƙ?}6,=HK?*anWO̹7wm-7]Jh)dvUmC~GGu81E voŰ7@vvf?p:po9`:_mԄq94Tu|˖mَ?$,CkUV/jCBIIS!O@ @Y'Tŋ x%phwwأ:jR[Wvy툉$@$@gM@ǗJiYkaNgCbU*)}:pl`Y G2m?15\c( ǀ)SBħD.4k޽{=6nhV3,Y" HQTL8p {ȩ @[@IDAT&~-ia`&'`o_{U|aS~vPM(|!8];sطر2Ԟ51 o uN﯀vc;$@E6Pi|:t`YpBym+ʡCϔV^ݎjWc7π?5@=ʐ!C]tq!D/7aCVZv&#w* UXHByEgZN|٧(ː@N٤%lRg@Z3!#vu6}% )b d^RR{, 1Hr@ksPPIMMRJ?v=b$<8SRRۙ<!Hsܩ #),!\#1U#S 37H*Ug a7FCW[GA1 oןoXH|&YGgca|: ϳ=^s}GW;@$@4:Z쵨PCv48<-tot   ;C@$@$@~#ab^5M^kG& @ Ѥ#:L88WX!H d,OQ[E T[U;B#;ZH D$@$@$P `QTCPH4P.N #SBiƘHHw~q $@$@$@8p¡^U;^Zq%C(l |/?!48HHC/8 [!(I@ ҀsWD ~:kC]0&=/ }ujcz*{\rIHC.Upd+$@$@$D8 p\Z?p8GNQ@Hc[lV]jNg$@$Px e@'#  'b =c4UupӬq THB~ Ö-[dyr,;hРs9nΜ9#?},I\l4kTOgB)a)Y+u #MaZʛg/$@$P P/HHP޾Lzrz4L^!<#&&mI;K.IXX_oAHҥ嗟'X!l1cd/dפuV,=%,4ԝUUal}m}/]/*;Rj׮mʄ3A/'J&M'O٢2xN6aǰa$8G>\;^a @. hB$@$@"b?!TP FN!phq:r ۶mWRcOV&  Th(5OcS :TH3Oțo-FإGN堙Q{kG'2lثkz!;ꞹ+<+W]% Zi~v~޽䭷޶9.-Fp60dO $堂9m4د#4Gu~-g#sIHrJG6ogh)ɬb2H2'pP1EtH:r[P֭[~:v5/P#̽E)eSRR$8r3%Yl' ~?B3 Lw}rͺv x}꤂M#sȃ #FP['W  vi @"' D+$9ӫ!Oi;_ʕ+g_V!nvZBYV3Fԭ#w`wRJY#@]8ݪmk3$@$@g"@1H8!1"BiqC:hi~֭-">=&K%*Ӱ0kHw@'V[9ipkc   XHHN)x  4ƹ:фHSGq0FiӦ5Pk q#]q,<`9@$@$.VVHHH| ?AHt@BaAA\ê$pU{#b[t^i-g}@$@$^0HH %#KEOґQ\qv@^\)lY(lyj8{F=kz͘HH7k  '&#E!|UBJ}̏MMjxz=Gv),'ڿ  / ? "QAb b ZE- a?AتSæ1E3vz:#@0& 3d $@$@$WCHMNb 9>ʫhB8 psknjW öqP P!sM4*Cyo3QjOчվ|u -m (2v_)ˇ$  'bHE"%SB iTHi@?-[dyr iРs9/ϙ;W9b Rj",q Hdd;-uˎҾ};fϞ-RNgRlY喛϶YWCEة|Mùn jZ1 @ {vI$@$@~'XGJULA,eL~m|miڴi+WG:^yLy9xAү__9eK[ o ^Uz [GCWlqkAC?@:2 EGB$@$@~!H4 MXRV{w^ٙ$[:mLm"Ə( "^n(2WX)O)i٢[̻W|DU4a;k/r|\xgS<7lᕡCm~Z!Ylyt6xxu0 ΔGq hTҲe 0A7TGPgle.ѯCz?O$@$A32XHHDxB\nPNF mmfRǞxˆ4{]:f'zizjc7$>'eMN[~`Ba{ƍmw6=9F|bsNyl d͚52((WTV1CN&;te<L:Nj*rQNŲ~tdعkݭ酈_hFÏ{,?3ֵ=LqGeoظA'kQf ; wܹR%}z@{l/kת-M41WR`kw7 FCC2gҮ]wF\w˺]&k|Vᥗ_%Kڑ}pp(vgw'LcUQ`ø: %K<2Vw9 oXHHH@ @@APQB (Q-A'8q}u2E$|RJqry]_^|rkaDU˻Cnv~ºs_e DnoҥK;Bb ~dgY#kԮUK7_&!nߛ%Cf?gGfsJqq2e仮Yr؇FU#FBvqjZ/7HH༪"$@$@ ! *R*Pysbچc}]wuX?s|G=zt]oN>#ݽ3rڶKXX?QMH.|,5f֮?cv=-pJ 6o,#Ou kOM;oKn-nѢ7z]~h[yg ̜5UmBuY_Ml_;w$Z BfVo_.-˘HHwtΐ- @Qz~1Ds4/ݺ 6c>ewH=dW_4X˯R6}7o~ ~d d6 Cv3@oPO)pYAYXǮl0nӦr}^rC|)| 'K/;?ߧO;{>5F}kgs̵?j֨!ؑAR|3rskoQp'޽{J64dUG}]{t ~#hp-ǘHHw?> K2tv @Q&=V(*uL iU-N[lzuj[9]/%%E"##kn>ilTi`sY>T>ݗ ?K}iYXڐ03*7}YNWn; Kp<İ!~zW~HH0Ȼf|6  kk$\`9^#皮m2F+Wζ ?*I cDD>k.9~X}dg (珐S/ר(od{ϝ"&Ϙyjjxo`kpL F9MGjÚXHHpVXHHK@Ŧw\4FU,!FPwk WXvu[g@ '+{"{E6>Նqkg  / !" A*.[j׮-8`pF v3Ԇ;VGh{J Ltƻ& (T@9UD4  רsr <"pRİWՂզ,@m:   @x|H  B@W!TC(iAu 3H 3 #\c bg@mk    Ҷ^eIGedN6*UGʘ?WEMK*>HLDtj\oZ%;IDXIi_ԫ\$v>di@$@$@AbI<Ll':pj$& "_U=[9l=?nݐ @&h#o+ٺG+#W%CIR\Ǘ-m_Ď}Vµ5*JJYcK3q1S:sCG\ XJ[vKPiY)._Z,s  I*T@Fb e4izS* @yI@N):`8 #\m $@$@!zet0/Gv'O6[ i{_m@hR$󇷴R%\pzL[R'*IHH @4A,!kAkآ *ògWQ9H/NIkgub5nZ/7FHH r3 Gj]ּ +ayGOXvOHؾ5qT"Y`s3 6*B>9c8BCC}j;!HkG}Giq=`Ú2#  ݾ+Lwb;U6Kz> غ'E>ܶ:r - (cGFHSq4 8G:Ē &g d#)I̝.F|9*B[loNYl9s&Ӥbtj@&,\'fŊ@$@9!Wl1@xB?*T(i:J фzp@Z>/yǏ;cwk֬LW32io_9>{Ҏ$ҥ5S-O@$@$@D)UP}"B @U49|ӰbJyOI-䝷ߒV'OiYwƦg̐ɈI瞳_'M{Tx`L0AP3ݻWvZj%={^/sMOK;$˗-CeW2|Ν6q L0Ά^x^F|G#~ͬK/h/{O:\p&Mû{*]ƏаB7}hWMbɊ2iz&jǚ4  %y,B$@$@=bF#FHG PFt\k8v~n!h᜘݂:S8qn]&W_uaUL2;!܅, %/G/O^iS&˘1_^x;إ1q:PF! @0lHHΞ #%FPk *PA5?P%KV͛7կWv׮m;YdX?nxֽm۶~<]fsƍ?TWYGѣ{2>+T+~p~B%J`>ލ~uR#etSK!yjE) p @  #NB8(R!sgAs@v5ߛ"wymR|%{y]?6UX*隧<=[7͚Q@H<S'{T|:[>23d=l֕:M ۵m#{-Ǭ7 ڇgwm+:@mgƁ4VQNm~' "P&IfTś!(no_Ӭu'y111z{B@GEĐ'^G(΀-[H 쵶8q#s#>g__`eϦ_Èf.p W FBUf3)NT@wGku>FV|& k dC@b$854Z^E#k# rYFs+ 6`pT)Z6r8me  !   ¡_D*,FTtQ9wȖH {j;PUD" Fy8g#sIHrJb9  #=I5pr#XP/$$c V5>h ZdIktج:ޝ`E  p& @XrNWѯHcjxBYRǘ@H ө6B_g Ye`j ~FHHH?t^Œ 'z=!N\kַ AyDT`jj:UD{QGl   ~i @5GGE! HB*xGRlڴIo:nRRRd%2aaaҰAtewKt7~ͷk6hgG{Lv[w&ZWeYQ-5SR4,ICS+)\eQ\[r7- uZeK!(*H,E..s^.p|ٞ\x翼QK9sw97N>eˢ"j=kGJakE}LLZN-gLLLj$h+k3RFta(UN@.ǓO>]w}n]+iܸqona66fϮKoGy RؒuuuqW>%&ޫwXSW;nQ65?2dH.*㕾^e"ic-jJ!뙵g5-ϺL p>I0hmj`Ҥi(} 4`eYo.92yA]@"0rM1ز[m=蔾+s=y/y 䫆'n20X8!1@JF;LL*;8ak\p˽qEoǸψgIϿRn::n͵oq/O_V[ǜ lea3X9ĒNp+5~uYgϞqG塾DZKk>&ώiӧ.MƟy\Gs#_|)&G~8?swGz(N:Wglи{sY{f&u?>Zal(s/{eq @[#&L6+#>qѽ[xiWcA['.~:8ufS`Ɲd*_cK 8w,\TC0o ؘ MzMV☻ ni&$C,I̓F$qGqՔ4-&~Xӧii:z?㏏7j V}#6qXhqmPbo.X^ 88>Öe&8&7rLt9sD/)ۧ;ruL9'ytGxž=Tf&< BHeJ%Z믿U͝;7_nnvX~ l_KO'˶[Zlx_MS4oοڱj n!x`iMʼn' C9,u])n9Xߘ?yεZ00h161:q-g_m\1Gے،tr{[ .}1}&Q l{Q*^@wn\}t{<15]c7NW9 q?1c^9gyqr|ү{aIhJ'qf(\|&`& _=KVfs=뒯ɷ)ѭQ 6ҵ2394 5`ٷ.\j~-;K~ +CEOF>)Evڮ1?ZҚ|WcukgΜן'bkm}Վe:r jjsE00>DBHWGsh#@"IB_"hboFΧ= Ԋ6ϘOk>+F8Um:60oT[200pG\I,!$'D=(usĬtK6 گ`ZMƌFmX?g*_inֹZ|&`5 WjБ400hD6%! ďK~eV?/1y|gm)r7Қ['dXS?s?LLB*ӦM`܈ IFiDnGD!ɔIGZ~+"('NQG1y%ɣ_@h?zS&ĔxcQ_}vKaU [s|B\sJ\iΕGH?R_2l&`&`'P ~UdnL`#ĵn}+ ȕ]"<X_RG/b8mO?jS"NmKv%as\mSF>0Ҫvs?LLJ*U300B# (A%,AW>s'<Ӯ[u!ž1|WX㫱ЇX)Q:p_j[R:)yyTi00 o500@I(#MR\!cq|W_fG\Sr"M>Fi2<]V~ROM8v9Fʴ|h|5o̧xך#LG昺-qRb 1E!#S{#SC7qm -ԗ-ʩGROuԷW_ʔƪa%"타Cl!$ %pS ' %:KĕiƂLa)MW;Sw ;b ;q&ڂ5a%rOS~l2ƏF9LLZ7Z{1 zuuul rz>vB@IJ[K ? -#P&FX!RQF>u?!џڤor5Q9`ZLLZ7Z{2/}ܹswS)CJ&PS÷SyW)_BO iƊIUOʲcGy+^?Q?S_ @@vo&`{gS(J!s.E>#CҊK)e|U2SV6ՎPjOm-vV+^ge/? #5= @ 1DqZ)uĘD5f -렝#_>j#%I m׺1_Z{D9e6005Gw9LLZL-+LX)IS0'_q=#IkiH G?Z/k湩zf@Cʟ&`&`k7ui&`&`5"ЖȖ(+DeJ'7ՖD6OFRτW.IOu||%a9&`&`O`o?h&`&`&PEe54]}HWyjO? yҔi!~&Tƃ*W=߰kޙ'9f&`& x`ρG`&`&`5!CK6 #!'.Rjc@P fm&`&`mm1zT&`&`&`-$f3C"Q@8W2ՕP'P>!m.!퉿HSs'&`&`mhSす @ Hӓy0%O¯,_Q5>~q oчI[xl&`&`?=b0000000f@3ALLLLLL3oMLLLLLLLPv3000000Ly3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hVeXIfMM*iDASCIIScreenshotՠiTXtXML:com.adobe.xmp 218 919 Screenshot @IDATxT " *v!bw [,,R;~z߲|>ߙ;w̙%DD@D@D@D@D@D@Af9ʫR.UD@D@D@D@D@D@M@e*)" " " " " " & KrrYn @D@D@D@D@D@D@e%1cl9_~vwx1cM4ɦMsΛ7/ExsM]3gN"$={'xfϞ6U5i3" " " " "Pd 磏>eUV_:uoPrwܑ_XZS(tI̙33ΰn^x[qO-kÇ+{l 7t\{_޺v2yU5)3" " " " "PR.;;SK̈́!yŸqr-gmըQ#kԩcnQ(B^{mUV"l߾u֡CnrY;,x=[ne F~D@D@D@D@DK˂bKK.io}7vYW^AL 2dH"97pꪉNP쮺ꪬ)SYf5kԨ!5 oɰ3X"" " " "  K+p9m]v ;찃yA̕aÆs=g_}?Fٖ[ni;cf{`}=P^ Kľ0{G^l}]"q矁Ů eӇ~^}č:+v.R3J/9r{#qg0A(C9$mw^p{ꫯXK~3gٝw5\cmڴ|l" @ rٰaDv^z%[ilV IC#:GuaҧOv˾n*+ 8~~vb(/(.t\x~9qds( u)$rG1L)/&!~5(5(~m۶SOEdsݻwP⑎1"s0sYL&}7|3("_]tqg QxP]~u]f=QbowG$>.\냇߸qZSW.)oR;$S_G$Y@߄ ODIa lYl" @ ]`-lM6 YߣG0s1(7Q\|l[l|͉LÅC=dlB(TtY#0ۆbI(w?>u%őUbL&eave7,B!Fp2pp (0Bdvu7?#܋1炂-(h뭷^}Ey3%qРA %n(~ W,1Fo..fomruη>HCX7/%Jc˖- z b!A5(fmJ l GnD@D@D@D@D`Qy0KҀRg Q PWcy% w.q:'wf;wl[mU꣏>joWF:M6Nniwifn批+Ƙ2s1a"QnEfF61Gd G͛dg!"X;vlpϗ+Ǖ8~+?!,B &_O>ceM܎_j0&-ćr,+`69d&kV?p2?nr,.(K>W]ſscMg\X/ &eLcazbM3{l*Xc oqW21uɔW:iQD@D@D@D@*+&f3t3J;v4M\?O?t"*6c)GLQQ4P.PYӈɮ+ynـl/x'|H7wu0uEN~^5nC,nP7 ?|َ 溘 qQΌ"VYe R6/ra 1c¦46:O+O}ڵk5?/=#ʖe"_\l>R:ԗT2iY,`KW,>3rJeg2,Ѧ͚;<Ҳ;%eE.WA!b-3͕eAYO6avaVAeL:qcC#vUp+_lD|eZ6$2 Q JY7)Phs .LYoZTVIVʚW_}u؈)4Mk~s'; )d]( " " " " @3`JI&JIL+A1k5R +>~-~{G_W_i&:_{$F{{*J+h.1K|ͨ{tA6$҉RLwqŕtK7d?ۏ>ƑC1C 73   i4hMX}|CY+!$Q2ærWks ;ỳ]Dp%DD@D@D@D@52):ъ_D@D@D@D@D@Dr,r%[L\VPZD@D@D@D@D@DrYE ND@ee* ED@D@D@D@D@()UlL\VPZD@D@D@D@D@DrYE ND@ee* ED@D@D@D@D@()UlL\VPZD@D@D@D@D@DrYE ND@ee* ED@D@D@D@D@()UlL \N:^z%4iRecN_'N'xZ>a_m_~ecχUï P7gm} G[gyfpǵ8t~2Ǒzw!$ʘx1`A>R u٨/̌S?#8"xBnBz{WHnѢExn=td=epr{ Җ%{GhIm%kU](3ٵ^;Tz ?g9蠃J>ꨖ|%QcZ>kQ'$RJrI(Gv𣙥p-z.%ؗDJG):%kIBq{$zpF~uJ"%6;~RDĥP)+!h$7q?zJFHO\&Rzotõ%Y3~gJkI݃t_K$Ry4[v}tҥ$eeuB>lo8%_C% h9}ԙK%p`ɅT~2#Ȃ'e ;$|pmر |wnxX JLu)-,뮻 pAшQ)T$.SVnm u:tҐ~-\:B??ٞEǏ(~ @YÄ)[ s4q E6w4T),/'Šp-lv%Ђ+N[|v/SѾG }^r?񲏔H1aٞ!Wre9!֞}ązmbOav)^7iQ>sicV;?% kށ҆yf";O4>q/Ȃ&,'_p "DJXrJ3, LC{B9{?%K:@}">,@܇ m9<n?/is~ S?QD@*;hlGKppY QQG]w0)3/b(O?LfܢE=Ҁ)*!N2bu. $fc$z#_̺`)k[f-ee 8~S#fZJ:G. eW_}0C޳bV2$l뭷#̠֯_?8g"ϔLc&-Yg怍3J%'S>}#.~,lou#v3Bk]<#zx v~McfYgͧ㳭 IZ2>q3cJ،WaTq &r3B}$+x !_qs-ҮZo֏1dz#&73NeqǏoqgf %g)O.[lzN<-lteI%[;ҸqP:Dݥ^*yw`< ҹsp+_(FRx=˙V^M~zx).K-Thc=*c:.5i .6>Ke];0y:@U rI#KS;*83J0jPᅷ~/(5&!Sփ^HW!Kc f<\u˅|Ee ^_l^l>2HWjtb?:S<>"ȀJ&fm%o Fg6=:tJ{ /mg^5p!kr\?>bO]%/xةRt-[{6x{dIW#c' *O!olσǯT5 '(lfC']X=Щ30c6d{,`g2lCNgYt\7S9}:T!)hS3ȬU6!7Kn52k%^$S:t=wGDž`҉" /dcl 3ĉ΋%or>o?8F )dG:?eN=d #f\ Li\g"nBkzes믿ԟF:(<>uMbt衇Yt9,E.ʅ馛 ] Q6*"t}5ӳ*(.=sעMS³/]?o `NHp@;˽;g);,CcOJ;DئMYbPR?$~|1flmmGӧOC~\2%<=/dPgA59 b_/%դ'.䏽`ww`r\p9~$+DzKNr??OOCx}T #n= PgQ6i={ R)~]=Va0ywqTV5 0[Ic, 1nY7MOT%ߏ&l>..LR+:􎎲ɖ/atG2b58'f* }kӨQDg);-GfS*U}V8sS:@]IgB H#.ҁd{˒\P1ezO׮[0Ӕ:r+er2# 8P=ٞsiyxΥlT~H!A%f1dr',ҥ<׳ t]4`撮t3os GnD@D2]MPkIT9Ow> L:^ | !ɖL={&sڵ ^F^ڷoo{QV|7mYg}ݭF`7<0_zꩁvmʙ{r%r)k &vm6x`;묳l*UOe]NYmԻK/4g}.{w?_/y晥߿m„ [=B#g^)eQGhS߻wo{7l]vmݖKA=V[mKwZ>,xi˖wèHy3I}kƌy<@Q<=LG^6y/3i֬Qyez +s x*\>GN;P_(xOYRLngɒ33N;^&ϑǑy W_}5<зp8睪v,U9?Ok׮F ɔl~=Bj>`BɣoK'4/첡sݻۦnZ ޗCߟ>B8C;o&hi#8W~ 7Lu+)~yx؅<|EAb/Ç }:.{ (?V[-\/䗧4VZƬ!;ŗ?H y0rAҠ{d`w z衠pXkN8P~Ǡx'"/|SQPfcZc xi㠑F/Yq/H=ǓMu:@Ĺ:|\s@F|`amI8M^o[:ps!}Vv\I򜭽VΟf8p`Ny7)@JZ/[J<isꪫo}k&T;UyVx(_}ƚ>7<(/B s[$Ιsl(ׂ1:FχA;~駟F-[osVqOG;~:y)K0ޙNc 4]vY#Ai.L>Xzk98XO/q#T>j>ŧt1;ˈ{gS+Y(Ai.g^ 1Yzdz3A{ʻf! >X03{8trtr:uwr Ǚr*gS]KWRMeֹsg?$f[ݦMSt8B$ߓ밻~ #\~GAt7cY%<^&#NR=> 3f<nax` (n3V!lwW+tyůQ#m-gGVZ%fmX,vȅg InGaP۾6mŝ` 5VEO.u qvR4a4!( Y s]r=fP0yRhNmֆRJ8\_# k'bt\a4څ(錑o*F\G*FX|F%w|bƅ G?>?wyIa,%9&јąo lF&Ƹe`fذaN\aKF ;L8FꙏĖ7o P7]c]ֺaXyЖCZ%w*6 őn |` `@Re\O;"% /Hǩ4C;OL,gx`K;\& {0hmH\Kq{CCǗ^caDG HPO t}GHnK~Y>㹦,iH'sDZ=,((.'Kv<]yg+g3^qE9$-+7;مDž~% tKuL>{K^?|Y[dҏu<K"tC.큧Ǣ) <{3y( \i#LIS4 7ܐI@quh/T LO\ %B\ka]&T󉏆G􅢋~1eCS/MW.@sF#FLe]|-0aFx1R)0DDž.V՝[iuv.އ8}Bʋ HSٔK-/Me{*X6TD$xg.nO7eʻ}NG2hA' {&Q  k7]m/y{sm3L^&?hKl" y ёE;GXǹ1^g ''\i-1(S]:R3ܗZYlL>\psd7- xP!p_̔3e!.$&,bAsA9蠃=LCg$7xb/=G}CIof~`:0i.˯-cx)#{8G*^&?ěsV*BHG&W}FG;s>m+q-(tv[n!>91%>]|)1׶(~.xi%Ln2=G/SP ğ9{ƦH.qwSc}r&O,acPҘK^-o?3h-wVLÃ_'Lm)[h?cȤ[e6YB4gos[Op̠$Б^Ǻ QYYȌ{04 Y,U B!t5xsfʨ$TTLP`2 g]9dž6m`6:iᄏŚKLZ0?Ɩ[ˋVrit Dʄ[%z\B*IU:t˘CصF "a%3<-o/Oܩ.y?;ܿ馛B}H8̘GR"yzَꞗs6K|Gg2אl6ўqA>ϞdCr!Ietô%O )1Nl$q9}XgKuPÙJW$qed eFGY>AW.SŇgP xaKMBKOq1GGƅ ;oN,`]N̥2FE/'|2ܣmD!3B{'﮸rJǘ5et{(+f3҉;3{9^E4H 񿈡CzğsL;0NRR͠䲥Ge#񸤺ϔFPT#l/'So(L#BBMu2]Vat)t#l,O/V2[x9ϾӞeZLa4IDATJfQ QQ."_jT:U&2 zQ*=X3@%eXV" " " " " " U*ZpJT&R.+Si(-" " " " " "PE Hd@e"nl+X|o9SNE@D@D@D@D@D@% |ɽB\.DD@D@D@D@D@D@% 2_br/" " " " " ") !| H̗܋,D "Yg50{l;XɜY\֨]tXݖn7kuHԂY#ذi~Z/X}mkwVMn@D@D@D@D@D@R.򠃷IJS" " " " " "XК˨1e2^Sp?˨Ʋ,RVeK~D@D@D@D@D@D2uY$LСCO>oYƍQF (auf ѧ2{7n}'_[͚5Eܟ~>#߭nݺִi ?9ÇUW]elըQ#vwy+.|;# @D;wnhi#F؇~h\_jJ}ĉgn%%%ֲeR1rH{wmРAK[Æ r߇}4/bcǎ齔Kx 6mT@3^{YϞ=m]w1CV|Wxjo`NZ}^za%+xU?}QOGsUXZ;íw /ؾ[ɓ` bʄ X 3N8aׅwݞy{Wm=>o >c]w׎89ի.K/ٓO>(~eO?ݎ9{뭷B^~DpfͲn=Pӝd N:)]0." "P+oN9唠̛7N;4{m*CFwozj6X"$9,D9zXc [¬?nw}wh0YLa_{6po1tbXb~93 [D@fo?x㍭]v,^ ;w5ErM7wam۶ mqzqgݻwUW]5XbqW؎;h}gwyg"|NeuAi[K.ּys;ꨣlƌ[-˞ޑ@4~F@y (#묳a~S[,d쪘2# eGkM6ͦLR_竭Zt|s.(t0sO{~!t>nf|щCB|aca|Sa#0;'1i5ҳv_n&Mۥ~" ",.m%LxP: .z aGYcS"FQDQ>,XæaTW_=B,s t# ( .kx/i%1:"̑-0Kln\0iM>+b`!bG/teFd0"[.<鮻H۹e6,XL:5`A=6a;l(ʚ|ӆ5*(u6?_]nҤI߿P]kB~ٷ f6K'+#{x)?|c:\>xI [/l :O \SlTla5Q'%?kDX +3Y<=:*#☳+,brh橘y1}:f*٠uFHY "3tby+fb[mU׃~Lg} [wuK. 3tiu( Fik'*hٌ7aTV;/hgvmC;S2 mX_p6kcXK`lvLq߲)f,:A~D@D`q%0vk70k _bzU8̒yU!J Sels燿e ifv6vMq=i$$𲅣" " $hު6n[)) ^0qn T(&19IӧO7v, ,14e˖ɷo,,D, X-;RFBcr&" 5)Q~6}@5s V_:<\ȍTGKcdݒr ]D@D@D@D@D@D傲wRU+" " " " " ' 2b<'刍|9|pVڮh~iz-J@D +uFD@D@D@D@*)QY\Um_0+;/[Znvhͬw Mԉ@ H,8R(" " " E% 2W.J[L@eΨPD@D@D@*mS)AM@e.?^D@D@D@D@D@*)\VSE@D@D@D@D@DRrY)AM@e.?^D@D@D@D@D@*)jQFʹk\R@'Pۜ_zʡ@u!вe˜rO9^IN[%I!"syQD@D@D@VT^D@D@D@D@D@D`r+ZN\VT^D@D@D@D@D@D`r+ZN\VT^D@D@D@D@D@D`r+ZN\VT^D@D@D@D@D@D`r+ZN\V\yӦV\)K" " " " " @ʜ9۟ZRVa#kq}k~VVm٤/XsnK-6mܩJOV{'}nҬ]l%sX۳5+)qlfN;mMŬF +vA(t\c$v٥G3kWi kj$ G]XH,oq@-۴H+3;Ry3p޴)ll2aִV=N |hٜdkjlkOŶQMl}WzmeqP"!OVmlɵ6t'Z?(~y66oW:A'" " " " " %)*6Ɩ~hpW|6rk_jQMr9o\w3(6"(~j7mW8 V\-(qO(zP8Ƴ66/CE},\gf.6'~^49f d׺k W[;\b:ݗmױFnfuib΄׽W'~kOgͺuA'RFw ()ś6)P$zi!Ħ[wȘ.j`:yvEkwMքx͵ Ϸ?S*Dk(JHd¦ g:N8\:mj5hh :u\!X?ߐgZ6ڀɜ}?3nLfN0`F& $ku&~spζǖfHv+k" " " " " )*pf;PhKƿF?5>PF 3 \fKjo~X%k)8AIdCfL1:n[/_]3G pxîs>׺pŒ";;k73C"(7K3ӈo5`ǽZ;.\6|H雯"7o-̩ߟ1lqifgQ~XʦAvj7nNuX (d1A~j5jb5+Z|%fF;2.Uln5)Z< XMf]( \fƠ":ZftR5"ŵNe  ,lW9\&r#T" " " " " " R.UD@D@D@D@D@D@M@S]/wSD@D@D@D@JrY G?yΟ|T?2~e@rYT?R._*G" " " " " "P\V8rE(" " " " " ՏWʑT8)\@# r$" " " " " N@e#W" " " " " "PH~e@rYT?R.Y?1FBL6;0f͞нK}J})sε ~Jؙʔb]Qw4y˂D@D@D@D@OR.YoŅBy#_sVv/{4ujR>ϔyJ3f<<}KfJWZOUưѣСMysm޼y S,\ܷ`}r@7yrP:wdcYFQ6?4l+- :vDD@D@D@D@KvyXҊ֢Im7 8Df]ua׿f6boʎ쾃u[gНq}GͬKN3u|8!C푷jGt:BpmZCƶ^spp:u ru½m3g϶cw97iv'[ wwkؠcw ={ϖjEmM۹a~M56^c ;yݬKahG;^s{ {j ;uSݖm,E'}ڴha{Eqц oˮ!=8~]wZ5BTϼn:^w[ulֳcvթc7 g .sK% #Y)u]~h{.RN (JHmH1ʫ79kuTPdG"EzP{lmP>gΚm,cӟ~6LxiK{>HDX{ؾ}P_e{k;Q#o;qRp7cN [9딓i%=;So:#p&L*H,@=`%::(&!Kԫg^un[kմaF 5*s}ueR$-3^͖jl'E3({u) 'Y;.dFVf>ᇅt|2czb̀~{'MEGy? 76KB\ysy4szLdfN7јU;30۪6c,?e~XptiӢy8&㺛#pT10{7!iG M'Ŕ[ e:;*Sl?rCydæo% 4l .Κ3a6*b!MȌYCr9;(AxGfևFB c)oZiR&͠3a yL٥e4X"' IEk>lVaN?VLZ1{SVfR&nc!ּN6i)dg\Ue]$~f2r|ŮV6~F/4Ya.3y|5Yrɠ`f]J,eB".-˭E.\Ō+yZ" hY7My!Lݠ?gz#ZW]e!~ r:TwXyT4{D/`.^.uc<$oE@f*Ϯk0a쑠Y)jlȓNV\Cd]Ϗ>6f6aa6Pc߁W_8Pp(+{Gm+ a就LfXz~Y5C8 sw f\%W_iŗ|dh#ҍyK/UdƊܡ0Ҙ*z+odfG\9^3OF3K6z)cFk,ff:k3ߙ3\Lu}>)dFfu-&l4t |]#ĦPy^|t9S3;;l rѬ0f3 \w܊Ts,Pc.&1j"TιY$y"XWvDvW]fJL=H{nBp)fPo8K}Ѧ+]>sdW^ b{rSId׋bYMl=g﷯]6z57nР(7.fZ}z\{}AZo<}®|)/RYJXzafSo<0ۈN䠠ȡtrF Ζ}.oRM|PFXʣQĝgM-?bηRL_" " " " 5ьTf[=C&ٰ~0;-_Vrט-%6lPߝ:be:[d 3|Rqkm 39=H*avhOn56b-\1ͥ 4davz١xY'Oyss6 MfYQQ)?v<\l%Wr'" " " "P ,ӭIH,g6E"x,ܤS,D7gt#ͫ7OZ3)֙H2ߴ'սtQQ)LnlEQD@D@D@D@D@DrYL G@eo'}/E;_{3f?W[/|?!-c|H;N/" " " " "PXR. 36lh?thN!Auhvx#;loW1d[w{STяPf/{~QI^ϿX۶\3G?ڷlup{;d%/ >4mGRx}v[T/~IpCrq֤vg>}o i9f睬^:YoX ,ŏues/7?Gk 5og_]6fh.a㏵ͣ߳c_~exAYgb<Ֆv)'e +8}Xk:.?=Gu<מ۽l5װ##EWj[< 4qñXfhӧ'h챇=A{"R`gO`ֱSOu;tS&Ljq)p/O>8H^.~1%ۮm剰[6mjc {wZuqenө45*$E6ćœJ=ۢL{,("(ZWE \ R.lfm:3fx'___=h+wۗ;v\  )˔9պb[|Th@sM/N[׬WYTlSg=󭸨ȟ/-.K]0eqũƍo\QشԭlhзUMb?~}Xs4.>̖<;+Z`o͔abrV躜ŽwuGж̧\Խ4 n.z_{k+a}z~膩6|vSΟ\i\grr8T_y)7Z/U9/¼<99Uq++d-}* @@RLMYӑTsŮ{zHsh]o-;nٹeUlySGOErZ{s.gLyþLKJ}F2U87;ǟwEBk,鵍c]3$i;*=vZхnZj@@R)s:ԯiH?}6fr}S5vjZjPҿ߻UgOW8ꦌ>n?s_ٽ[Uz!9}k&,O}ήPS4]jj< >UjysMKY;bi77@@@+ 0-6Q?rƹQoptue#6Z"m}~mihwUX[ ?ms̭;8{ggg[[{jg?j R uiSo۳/lM=Br2Pgv;mL]SͤC͍1  f:}Ͻn6)+-5JΛBksRScve|T?>pSnSguF5]7Zx>0s:f͞ezn]?ȭ!^W.twG ^8u*`^K~+.\^:G+uӗ.SQ+ɋ%L^GBZ\yWV]h7~մGZىޥڽW鿛m3L@@,6s9¹.r?#Qd*癮SULuf$:J:y\GyWcBIE^zſ=m齺*s䙕KNR"B7'LϪ{'2ILU|rE@@&@qh; IDATx{\΅ی0"7E4A*MԤj65m_Mnf=g&9'kc[Y=[cSm6Dkh0+p 6 `R~>}4|/W YW#7f@DDDDDDd$(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" X\>x]QdJi~{{O^`.{̏ϲ0Dn#F"""""ҋqDfhe#o HMܢޱG4&<<[,wːyGrc>73%) x܍,/dא;MdDHDDDDDlR3Ndq3|#;{ݿ89R(L5}#)OY#v+u,4@`k<l#\'*K@|l͘zy  """""""w4ݓSKt3Ey^xOwVpt4ov=3TdhYenv3B)>)G"޸3djpg 0N&{Sd%S mX+܂l '[Ʀ>SOIOȺKdu ,߸~廪aֵc/f.Ԉ+3R^{( )onჷ3ZwV3/Qn3s + 3}7OOOykG>ƷIzV.q Bc8=įjf~}bOjȘK،jjr8/~_䟾s-ϥZi18y$ɦVSƊ)n,Xot)w^dEJ Wc賂<^K=?{]?O+:g?KQ:]ü6,FgN (SLP#;4a~ ;pr'(*nĴl?rwfγΟ–26D `JLbb'hfʊ+غNϟOc> ^.hJLͿN!Vy7Ff0U[/AF&f[M4̇dV$=2,K`(鮞b_ӪXTu3Xݕ̹Tǥ%=ٵufcuu<dz?wex}Cqeˉz@y}<[8Wg3X#z9I+z:({KdT6x9; $\ȆNjE0xٔ;Nv-'/O8zmU̿QYLS|^ww_ bظ"q^s4d,L骧*-{˥n s#q"Ooz׫z}c 8Ö=6gy1BPǮqifcwD֮tS[ǿU]qY7fq~^2b6pta]ߠ-ewsiyvgl6.ISl9t{Q_W)q6w<Ky~%2/bdOxh̡쪺y'7%+ Kf 5[E<m擂$6WB&;+-d ~/S3-Jf VeTr" |LT͏Hk,9gLfڄ)_/)~JN`[n$5m7b9^IibT90TW/+1J'|xIJo) Vf?IJV+rʄ7,\XD1j7h)I`[A-6ҫB3ٔ6&=,]ZV><5\`:wv Ova{vl|BAd\gu y㉔: #ܑQ : x76H'xjHLg1?P눠+ZCDT>71HJs8j/,D]9jx3%Ͽ 5yP21DF0i"zvډOM4g[Q-xIZ_9NFwODDtH"sh@F.Ycfl"&Dtywv^/5lXjEm3o< ɓx*ߺD#1ƪ3hRU!Ӕc;e{>uN qpdF0.3i{C-g6ogTR޳eaKiG043!֒9*|0h* 9,e'w5;vbX5)u.KdAe̙ D҂i鐿Jap7xcogXYf^v_5@d}<{$H|T:KAK&΄)lY͖P`?[mxppgf ' Ӈ46κ'dz~u*gˁF Vqf/vSH=EDA473SUW8)߷W=ά|w.`Nx3F&/)zg,Y5#{y8-Uy~wGsVbu t^S/[O?Kow,vIΰq) 6 +l|ko6L_2RkH}# ,c~cܴ'R̋k#U#:7{l AUVrZ6dǓielfx^~/Ϻ{hJUwVeOᳮMVZzTx^E`񙘎kg0%xj |a/w{@r|5*xt^VO̬r=yU/r6 [Q||9w:7Q<{jHvLd/(nK Kl|^`trF!),hgTИ{;wDd{!"oxb4/WT4)m>KȸheZ|loJίz](ݓ88+_-h5 ""_b޺fʬdlc-l,H !!C/2YYfckiO8m, i); ?&uU.e 3c`03wq`òRwo+E&JZzVVӀdKfβ>檉zq{˽XL'2u: Su ɥ*̋c̽gB* eyJFX)'} ā' f8wѾSLs_*l L9#{;-\dp69(R27^w X^=}FMiL+Oy)NVk#=0wɘ5N`[4cuE<2)=.0F<gZOa%%vԻ4w&#"'EY-, qC71=AF='/rR 3G1:xzr w-|Nl4ٱ IxB Sý M?'SwhxΥ+apG Ǔ umc˘'s{7UM&aߑeYl7jhx^ F > ??As\#AaKiFrs'` 2thE)C[[1 #Zjc(hp~-6x^=f>ɺٮ~);AJpG^L$"2(2l9!q|Zʤ0LfZu0M̽oO?|O?| ͘z_laO/`@Mk!l66pb;Xb^0;\OO /!3Iվ2b eH';KaդLq=CޠeSt 83,%`eg88 #왡- 2xp}<}<֦v[w2d& LJGYy>`&[":s ecL]Pfb$a2ӫ?S3lTĀ 5tL+s3},n(2s2mw_`4iFBcA{O̱Y묵VS&Dvl^\l侏U~Β8g֦18_PB0NjnhhGp/eU󍩗b~xao9ډ+zX剌nLMW y~3Mpot+6padub#5k 4+_8<9)9zgc9\2*#CMV̮}LzهUTT!E{5$Lv&"Et܇ÂVV]ܝ֎^w}xXgp̈́r[q:!>,{oAB*TUsrIٖjfNuf&[ &ư,^K)f{qtO)yX9)˿IA{>V_Km_Œ:\jQW} il"' &1rQ=?N[ gd0qTcgLuIΘΤqm+3'AQr;;*>^\3HHYZMcEt~:Oȣ|vF`&j$ 8c{p6|la=Yb#4 (ձm'nF8ic_Hh|`?V?Sۉ4m{YLKݺ<3gD^ݓ_b/v;8B@v UC'Nev] ~";H99g&?Km%^zOiSK??fd(C ?efO7 ̘n,^kkl\َzdN}3fcYscKX+s2n[Gp>d|m)4$&q*c( 2LL`>ggvp0fLS6͒i6<&(;~N=7NgίšNъdG)l*w)_=a ~|ٳߌ96g֦(`k+l&>- /0$"JysO,Xɲy/mw+zN;Τ_Gww}u]ܓU+Qks~u>l}yr(s3=yc({غu+YzMqv=j}c.Wl\%8[̅tnҴZR AYx aD6>{0<\&+}F5  Uk-'~Puoچh̉p2dxjpd|F# x^jHT1k|$%{Eu8Qc5JW8;'_lV;v tgsKx!7-bN/sh!/,5A|mx;z}«/l>g-O<=[S|&}HzE,&p^ܳOhohԜɺ}>U7:C9kًygw.o>g}?AF ~|?Ϫcͻ}שw}9YO"vf ZC͉xuy<ՙUVA:/݋=5~w^}Os{(} q CVKy/13G}]Cv}chnJ"2Y.qOyj3tLmq_޸(JE1:w'FZb(#AtLf^D_- uZˀ7[oC0St?~, Psb(Cdk IDATW?ϴc@'?ȸú$}Qܟxga_0/5oy/ Fy\p/pMїxz96^ak˱f뗝'4ݖ|,_Kzc2fD ˔l0 ofF,xg3wW.xRy515l̸ ̈́i|3g; }R%1S-.w>y<(jhc^{{#ỳvF=`A&1 rˊ%edaS2ln%=.`NdNk8Ϳm»y,|ŻV&S*xOSxoyAsGfY5A$>Oy]SZJ"J"icozRQlMOƺ+Hݔ"oM0Z^IrpGW|PMrN^ӓPz֊'kx!*+x:}f 4IcCM 6dĽ5@c9q&7 )k̦ݑ<1 "-NX*&r~EEEeUaYtX+l:1AyE=T-20PS{{r\i#ߛ\A:^_kxz,F> k6܃)ñDDDDDD䆺7egc:7uWeab5gt;g6<}U,"""""r+2%""""""rmn{pEDDDDDD """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*͛w """"""iWDDDDDDF\pEDDDDDdTPQAWDDDDDDF\pEDDDDDdTPQAWDDDDDDF\pEDDDDDdTPQAWDDDDDDFmieVŚ _Y4?S?9b;NB,̞¢ g9~}5N71j&>BkK  T]==1c]|yGb""""""7`Lg(rDd5w:aO*.!l-u P&Maf*8?ITDDDDDpX&3?psGZ,otc7iQVB[vCQE(I U WDDDDDnJ %ЬdXoQ،KLL|zKƔhlvk3Nffo%8˱Je2?>.\ོKԷT-Z۰۫ȵvކ8i f2! >ϳߘ0;;+[4@ 1wSiaf 6*.qo28e"wDYq U>#ca %l x-Տh/?d*t22SZ+C:㷅H2Luہ?\&,~2ߛGÁ}+g<0ϻE'>ZȶF'ƟL C-QGcGy2vu)<>+_PTsnl!kXl+.'+bBږc$G21K:ګɿ<) d !e T |\,c ԕWz*C"9ؾ#>k&'%fvgUqel}Z% %ۀJd4_@U+r✛6bM4YX4ٟ˷'Rڵ[ڮ[IkӁ&e"--m#KIdnXrN)j0R\>|^Pͱ:Kh)?S[y@L|$aMjh50>ãJR(*N;@FRqWQp+ܙ,"""""2]Y>q8)2Xx4Q՝TմAR&:n+8ֳVo; cDV\0>S醱39:ȸ6ʘPXwZM,c:Գanq{@!%BX1!J> !Ն{^Wj&4)&+wMh5mA 뛩;n7QhAYw ."""""rcxy(otzMu Ɖgg-HFk\ck \w[;X"` a|dZuᵎU|sIX#c\FqrqVe2vwQPILDn˜EH&DGpԱ\ϱ Ξ,"""""r{p4{!BbXgCE5G˅Vܔ7:Wjlfʄ)jW8FkMM'#*8h'<ʂƄj Z1D'ڈik5MQ MqG ОxC m>k@#Ŏgm )P/b"ޤpEDDDD߲np[dl-U0\Ѧ1dd2?B-ٷ$seCmH2:+9ei,LXfmϛqnoaMqLY+,l㳒˴pGco&!4DdP31fyOCM a|5!0'gGY]+ }SU@mH3'Fbvs8'0ƆEmSEDDDD j||fMۋ;_t ߵc>k dbM8Z?t5Vxm99q),rhq;9t[kϱ0 hu9r0G[3G4Ra&lOK/h?Z8^_MeAm…>wuwhaQr Yc[Ce 69)zjtBq \@WDDDDDDF\pEDDDDDdTPQAWDDDDDDF\pEDDDDDdTPQAWDDDDDDF\pEDDDDDdTPQ!ʕ+Wnv!DDDDDDD(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" """"""2*(Ȩ+"""""" ƛ]hhhTVVp8p:7HÒHhh(111aZG|mdXZL0bbbF|s3܈>)!W\r !""""2JrssEQiii1a„/F̚5Ks >i """"r;tvfJKKc׼ho#ϭ+"""",Þ={hhhE!Ylfy|Hs빖>)e}قIUU:_6RzO?{^ 쯿z[ 7{65K /"""7¡CC i/c}n=:ɍ0#j~k62Ϯ)g݋Vs~.V./k%'77f m m>9o;;3DE0ED lbʵ,[SCcC795-rN7t|nL^M{I~™hXٷ/zX,VOnap5<A'wxBj@x iw0C^fwN!}`˔yt)@ZGV/睝)qwlwjt~{9NtÔ9KY ׺lͧ?#x9_O]#4}<;o\~'tGNLVYGw ޽(?{OvC59ܹ4|5^{v'>KZN{s}#}M/y}й<:?N3?by՘{7+)Y(k%3!DLAܧQՙ1̉Y^;R̉ U713Zrvm&nYbQ( S{*#;v _7bGUCmΟ?OVVVϯ|Mki>=Ñ4?]z9#dY3_Lv.>m'mraכ%8"m*V,ks?.vgs,垔r~><tgv䌳ool8#F3!wWNJ9n&+Vbn_gŊxv^u%`w9>p/fZ=5k5P(#pM$/&bNvs/ E3';go59} yKfky$=+)?|׼?dӢpk.VoZM؞n6=ٮv6㹻R6`?>$I~\(OIr^=ϳK{--"""p|m}*=J4Su#%gij0JZJj&wfDa?=3o;F W?*C<.]*r~JXMLLoÁ@}r=5lZƹv,*7r6=QLD'%x'{^yzKwv^ kfa202䵿{†'aNx"HH_ʆYCBNvwKq|(S;ː'cMI^yװ U {\`oN^?ld'y>yd.snf{)g9۰QDDD{| ͟؏.| KI0aO <, za2|o"l[wNa&|QDO&sinM'R"0H~'I)"""#bqqA\V2fD7QT>@rO"m*~C8?W@ hh3a5_EU 4R;g62FY~=fI]גq IjKn#s\)n*" qV%:e%1~j*#nad,$O^Dљ&bw;Aq48 ‚9&A/Xv=#i݃wC:. XV*J'3"==UVu/Pnc݃ `"a!s)'~=9,]E#Ω&yy2+mrJ]lrFP+;{ӯ)K9vk 1oX>MO&f^,\͞`w 4e}q=>cR?WwXدb&!-g;`CQ\0;쥙5%1]qȘIIO1S?\Mcae>ٳ݆cjgҾ50s!;sz>j.dXOW${wW%}HSEDD.?CC R,穜:\\wZ+h pJ`> XVi` vkG,S; A``JtY?x8@}qWYw`גP|5u#Yr'N8N'b:55>4 z7R]&fQB#M$,}M#S$dF>VM3wSz9Ӕ@]n8z<6)C.Wο9>‰ȈX,#3.r.s3RN Pm4zoۻC rEHPJc1\նjդ$mirrYi_~m3=M[mƤ<cB*  |t`Zfϳf2k><7EuI{ Expv2ۗk"Iq#IiMIj|wNRʴ˄>ZLq J^5H6S0vkF3t KJUt@g~C%f&&DH&zU!VR.-J Ewށ/%%-Wr8WZZڹn"^}Ns:׮ᩍZ%J\3YCG}&e #y *9=6jP#Inܲ) l܃,)ֳGj]ZmGenfu$y=}<]9;;*rL IDATjH晗T2^}^[F-ReaWjS^{%IUF-N{T**uRL]cIeyrzwȤi7)[ 87iby_rYs&UսK7/znnv0K`HlSHǛRp޿bqvi5C7e~C6:[=:Gz:Ucѥ˗KG݆˫ʮHTg緯{/y VIE99 YpNI^5Uk׮އA++kTGb|uLIl+aIE*R쮳*ۗ=] ]ﯷR9}oVIrUPN~6A6)gO234zp[T]~'w]6mVԣ]}k m-QN*K SlM Ȉ`l}aT,_떽A%jBhK ?RU*W2,eeϱ(4*Z= O_oQck4BXRz;\ya3vTݢ>vЎX}P_FD%*qBUn]tX%*EQzʭiYb\̞a!mvm=UVjtrk:']:Y]#d6w˄za^9Ž=c׶nI;6\msuV\n}2'Ir׶?\x|uusBSm.xpH/JkWWﻋ=y|6_-njjp~'w([5wCwxJ>,gT%O9FY*eY`wvMȘ%וAjcr,eE{~8_U= nM;=Ybu0رST\wޡA@yDbt,IHAnw3m0wng0CnKB{YX+?.;WS-e%ԭѳ1ޡ VTTT-ITqqq9g8ҫ:N u(|~M/W-ۡ|Pq_ƹac3Ҩ|=&SZ/-GMN?szeR5J[m;5 p2MNU^_vР|m/PM~mYAcs[^a{[ֽڰsSz>Kk9V 4>84L;שO׶Չ߶^^nwi{~%qRtH/nyG595*/Ֆu딣X弴\-k^6U-G} s6h4LM(ݬ6hCn[hۺ @O]].v{z.Kv$Qmmmm>],|N;ưۢ2+Cw,YzΙuWiwXNI)*:ݑTQ>W?^ha m@;h{!U4H2jʼ+CEw>AQ^{+'cZܡ-.]+][*kq{[;ڰ43C/v;M:VQM|mxb>_v6]mZI*2ܫ_>z]ǼJsjud=k_~ }WZ31׿o/c_;905EAۮCYzqk}ݷWPi{yFʰjz;.Ԓi ӧO>#wHIIQJJOW1=SZZgT*++ӧ_'ժh($$4ߣH(>>^IIIÇpN| 0`\!p@`\!p@`\!p@`\!p@`\!p`w~]7%vmzp@`\!p@`\!FhSxS3Z7u+%sp-A6Uz; ͷ.ԢoX=|ՊeG>K++Z~ݗt"iaGOKQEyґђ4ZeON{%UM6)O t֭sc&Ǵ!F+$r0S_}$p}rFuuujnc /00PjyG/.M\hhdsJ^566|/Ԟj}{=5M'Zd֎Rzh4@˥Rj„ ln@NSuuu*--Մ hHHƏ/ͦQoby$LOp}FwSplRSSXSSŝ mmmCrε+00vp~u+O9p}N&Lw3IRDDJKKɺ:%%%=A7<<\eee\f.Ξ?CrJe#8t>^ОJm(`-K\innfX2F vs]{n;ç$v@qP|~p+I?m;w͞o(Gh8}ejoy"W9jԨn?|EuMT9 ӿE)F3n2͡߀قՋu:Q㧿{t:g޵Fhw[zTVm++=t9DʾQcS,K2'(-#CbWMKW˴<5\=><5Gvd)n~}y!X#$Mpf):^MM>غ]LCp%$N缠'jʛ=tgVZ"f7РXMO=AodUtOI|=`怲*W+$;#;G+?A5kS|\=md۵K 2S֎펿[w$(:Rp7 l&|fvEorS{p)tiXznPMA-XRczr)RS?mzU{[`jpףFd$I&ζxˡ:ūОR־piV(qJ9\$(Q2_q;51jv)Ϟūjv-Wk5d+P՚rF{ b[-;+[4-^=Mg #[91wKVknVv}cI'GET-{ǵ;B ĭ"SV7Ki3[VʖݕB-^ ty S&%-YE &)n_0.OYo)dJ}㛫xK:YIgi+*lvWHCoJb3F (==t-X`Put jmm=sFlRdEt]*xVt}djo_Gtz>\܁v<:UXaR4eIҜ9c<^3Y٩*iZ.zU{v%O+$%DY/˚4WbdӴ`=nSQJLSLY1Ӵ }zP꧞*:#%KS|Y5=[%2*nqB[UAeڿVKbiAI/<=WST$w g6W))Q%ɦcBGGRRCеw҅=]jjkfi[H/}7ת?|ESƴJc[Oї*~`v6 O=Rz8"BFY/= d7iXԱ^U!I~ɛ2US].l]2)*ζ=Iۺ9_];\5ZCIjw9>J7l$v9pg徬5g%օ!ً{)*HcԖCߟj\rRMs5(&VMv4[Y!&㔫׫I dw(5DdrϕE1MƳOݣodSHYv쩖p<'S7[u- _9kRS.^>*rgS"CY9R/y?v9^rG&w1DQ]AqH5*F[%YFƶEJz7&_E_b/06V//Óڿ0oE /aK CRzn;uvwu>4Fj*9);wbG/lkZbZqOUj UU]QE&*8@&*=*{Q*ΣG Ux\e;pFsճ<~'K9zޝKv(כŋf)jÕ4%J $)]ᒣLMJZG5-nfQB#Ob)$u%Na{_X$jFԞGCds@MVM\e vrZ_UaY&O̗/%*u($QV-ڧbXcOiU6(.>doJ“5&^е?ú•tmtua]Jm΀+kֵ_R{V?^'9GՑlcQkLE+Z*%7b>mM06Ӵ$ݩ]_ҟ;]AAJX؜ױrmqSX/ޢ_N qI 3u{5g-R#GW2)u^|_ Mvy0%-RFNj;-UcmY-^@}iwn'Ę`b=)rxTV=K+fu gU~IUj_Ÿ\ +:ݤY ~W;)EWe=ڵXvgi nﲊr~UTUK*H\y:{(8p@iiiQewQڰ\nۿ?tQoWm`$vaEH[{ ܮz{b= G}+"^ #bj*?J_g >3p0>()Ct*00۱@\.Y,I vBp1")""۱9L#  GUZZ*=HtNSuuujhhЄ =ǏKf+޸Ե>ǣV\.%&&:@'VQ!˥թ(00PjyG/.zjiiw\]  |z3ە!.C  0.C  0*UUbnqWǟ.lc5ֻumI [ڹmֲ>Q~n `0> l%d8U]kczal[}\O=B a4pb2 lTdTb4e e^Qɞ290Cg=e"G}1mKj_z4uul]3N3hP]=޿Nkw6bg$ӏ<:j.xYSL]5oSRiwmْyR&)HChIf)' Fzp`x TvMLR|$n@:X+%/HU̎#[ܶ2%,y@#Z\܍t]Az)dx 5s,mkGV(sQ6eW-I٭* ]c="IY=.uԛ%1ZrZH&!5}Zr`\LIҕj jyBE֜eŠI+' m.۫3nE^lfIf Ej2oӌ(IIKŽ{䔜J` Z}M BkٻUqrt(Jc*. 6{X*:[_4єIZ0æg~Eu32Oz u_PwE6Yjp-Kj[z3Jyeu#E C`Hf[bb%$,8Ae9$Y`lꃲ"=e֤^rڒOhZ%X- `6wzwZ-3ڛNS[meN]EB{ݵÌ%mIr8ݽ{),LjTy̭3B6C@}dUaajkkz{-c2ӧd2 s `gj/ZeoIӲ8;D{skeIOilY*'h\ڴWq=Nڶ7O7*eqE(X*dp"V=^Y ]*˩7)ϩq("*JF4@G 7ocǎ@fOIDATH7?Mխߥf( =I & MɼKۢ?˓92U ,ѸYjhpKk2Ua6#kтd}kEٽQo99y\.Z@lҳOȏJ^RŌjkkkEENs@rrr4wݷo222.Yv$ a}SYVxb&1]{{pN?AqUq@YY2.%nCvpa.~u~qUZuNՋ/9D;&7hzeoj=mt-\JI6yPj~$Ofy*9o>g']svl%^EwuelVn3}絺o ;3[~?Rd{tho~=*o8z_tj-HbI[O_z]<pͲMVrjwga>4tT;uV%Ky9*qR;5K%:FyO"uR'\r>5ZJS\}чxd~>閳))DׄvT1+rlTRF:%[d:3%tB$9pnvh9K5//0\)yw~WZ|.~5gԘ9t0$=46LCC*&fRoL8I>l9&Q':c==ӾTHH"mV;NQRs~FKWSNi"+))QDD#yMеfE{ tzģٷ*9hDJ'**ثV(}vdIKjM:][}3 ۰C߿_1L Sjjꐶ?7J̉,a^|q^S]3Z4YI>oyӾMҍmkSK\>|ޣ,6CfT[[[/*r:/$rO>鷜dRppV/.l7% ۵jZ>wE 0.}2p1 Bꇖ4`\!p@`\\a]zxYUo?Pp`P^}[#>WU`l67a5fGVɺg-0|p#""|Up'U`мz^"ew )(ZT^,Wחn>d!`x\Oi]4kכ*C é9rR-HZߪ߫ 0|6>|uWgW8췆b\֛5/z}%cbsaq̩?: Qx{Uj/M0[X-bV3w Qmmmmn|P?`>DrߗndRddfϞ-:-| {?O5J&Mܱc֦naZ\˟=>Fjkk_rrvp7)5CNZZZT`2 {un۷ܧX]N7IA`X]&h8lvW_E>tEao \7|zS5U76 뵷E"T~H!SdӵA?^8Qb=0|nN3'%i٭Ӕ(쌪yR^ӗ|n{pO߿_1L ׌3M'8%IRܒ,fR{߫m/M;04\׹:{N)Z{5KUkdVcFag?+o9ɤ!h:<٦kֿ-SM~CK>_R՜Uh4|̫#T4N[>_\)F@W---qWU/Z[?\`@vm.FK^zey00Iw|%]ޏUG*"&Qdi:ܼb4Kktqi4]emdr^ϬtM*׉Ky6\USJ_PWr) ʟ dҸV莤RrEbMNݩ|Znݽ|"Oμ=o9uZ8٥#oޯ\oՔ/7k\}W%$[{O)lr}r_Uo嫶s9*9ǥkWn!C csґ&]=gd Ziij>qD{=zBDR`dUS(ZS')uuUJKQ}6E_\Wd ָHnUSgӔl#Ce^NYubS`v7LM.ɦHQK^ߥFaꑚt*?kjU̐,"جaɥZWnjjR%XVd &9%KשZd ^t ˩VLR`J3[^|5/@W QiJW.(p]e2)rxׁMʥڣy*qEkWJn8R\6RjMU&M.`X%Uj: zp`p6O_\|`*7jᜫ{h#Ӵf^x[=&FSnEɽ[SM:?/͒%:Eoߊ(rMڣ eɱ  sy' 2p9uuu C,""MY3f` 0.C  0.C>xV^2&I1cao"ShT[[[/*r\*w=Z&Mܱcڪ4_4]XV7_---nKkeݮd/99Yv}Nss:CQ {un۷گS<uݬk ZWf W(q`b;qeƺ$9/|Pw~uD[%͞sKl{9O~[AJ Yrn6 7ozuw3M_J( Μm,I&Ym n:P|]TZOs '+azzfWcsfSnY߭Wfu+xJJs`{:wB3"Qyf]V#rʥG2p%k6& K÷kLU#}r%iFi:}lUWRp"̒d(ꚼCF {PII-WRRiD`n|u9aVI)M jW[И`EuHfo{9VD0sp`$#GhjmmdRXXN:lJӉ_7JB9h՝-:xLϼbaMzU Hҝ #p͜9Sr&I=9BS6G}79m=#zURxL,0#Ĩ6_Tr|Q :G .Q@@߮=oWC  0.C  0.C0O>WU`YV7|gWU`EDD s7% ۵ 0.C  0.C  0Qmmmmn\!p@`\!d>ّQ+ujӦz)ZkMV?0uju"q~g紩T\Ct-&зt^/) &w)sLeOI=zm1>ݗ($9Js&eG6%}wSj䏵՝ CRܴQY}6S<H2=aӴ⾻4+j7DiW)j3)3X/>MnIڲEpoکںN :eg~boֺOVUsZUk3kq|s~b|2ux6]3pȔT۞ˑ{.ąZ89LAAJϼYQCow]St,M^̙n~XbhVf&YdKǫaJ$\wy~ծkUzg"!!}?K2`D_uW)WLЀFNPUU/9D)܉ESoiWv֠(ٜv9;琞}jnVuaH\u?wGZX OO^if=`zo3o{稗CA BdvХG9,JA(ʡO:rڢd zLѦnW5(*>W>D9m90!Um6.ӄةGv(Uۦ곱Y&ܡYbm*TۭYzȢw((,ESߞR'z]FYb3vTUm]mnIo]'{[d;#ڨab;6\e/\P);)hڵZ8!JG..g,ZYX0? oν~1Ř_'i^"9R9tEz|Pj@ c`lpȜ DՀ @ ` @2P :p vpA/0 0 ރip@J:A r!_(bx *ʠ*:B=h@aL`UX6i0CUp<gmy/)@IP(c @Pq(!jUF5:Q=aK'4MASh:F7u6E z Cƨ`0&&Y)`j0K[1{,bDzvAl3 ;Np8%c2ps!#^{||߀??O :{?CXGI8B$\'2D=#1HL,%6/JHHhJIJ$r%J%K\D%hTK"#%ɺdr9\O@~L(I4dJr$s$%$$_ItRJNH]z)M֕fH7IK#=%C1I. sUf\'+.ˑ͗=,{AvhQ6e eL+'ǔK+;&/7)/+o%&%_.F~XTHVةТp[%%%ۖ4-ZAq"WPYg%RnvGheC@ʇ/)\*a){iҖU`C *UTTT=UT/TSPsQKT۫vVmBS߫~N9UJ&SK*^"*~iM=P$`2'BN?o:++?_Õ6S7q  T?T&V!-8|84bcDor$/# U5}徕cѷWZuugHa9 igUbl{?Dž3us9Ǎ;HpN(Ixcx+?$'&$'7SbRNeIjY#A`8>m_ڤGXJȐCDQH_h$)<ڰ'dY} m[,#46l0j)vSwVN~XgnfͿ3_5?7; $ w:l=mlV)VdVTRe;{(afG܎6;ﺽyw]Lqv=m{{ ۷få:,VkysJŶ9jT,#ǻUUmպ%3?=v'O55E5_kuAumTv6ƉGh2njVh.:?9->-'h'NꜬhAm&ڇ;";Oytlȟyx6̹sS]Ϗv~p!͋/\rzϹ+WN_zZ{Mo[u_ֿ]1`79|n7.d콵wD˹;~/><,|$ ~k>36$ɃQ2qW>{!x1?*^:˟}cglջSO(SϦ~})jϷ3)335'PȂr$+Ay=g64!nV "A]H !.;g+j0ǯD62?=W 4+V7beXIfMM*i&PyASCIIScreenshoti=iTXtXML:com.adobe.xmp 538 Screenshot 377 1 t@IDATx 9,QM\$EYQ%DPP@AEɈ$9߾Gkޡ'v路3UytO4 AHHbU1+vHH@ PA  &@eHH" 0tm۶mrQ٫W.W]_HL$ T$Ϛ5K~wM{7%K,~;q׮]e_KtlO$@"ʥO^ ⳢHx4~9sH͚5%{> !}l[?ڂe˖<{o} ӛxrmS? "41cg"EhmΜ9] aO/VhٳgN8 @|z&6Z7 %2`ϖ-dƓ @LiD   <w}Zgї.]Zz-f;wUj\Ϟ=eȐ!r ԋ Nܹsknc்׫LVT|!p|ѢEUmۦ"Oy̶N*ӦMS40 @`!cƌ^{M7ժUSa:WH͋ 6N"ړ 0HbE>F}  (>0HbE>F}  (>0HbE>F}  (>0Hb?Lak}2֏Ia5<~uUG({pq_B౶ ˕+gE8c@X a% }`J[ 1 ʊh 8j 3x #{ $`GQ 8q$@w+%:*  X!@d?HHE HH VPce$ !@( 50pP˗O}*THH]v;#X<([l45{RlYu |a…رc*7p꫶C} Yp)ezrA}_j׮|! X Vs ~ /̙3eѢEkɏ?(+Vp-̙hԨ 0zY Cw`ԨQ<$*1^zuqOҬYK.ҠAyGumxfy睂|gҹsgٻw9M۶muDaڵһwoY}+'qϞ=߻7G1܏oayO?XTRR~}[yeђ?~Bř~a9#o߾2qD=SNAvrJ]!O<&kI&;2fcp"x뭷dΝM@٣'&=w\'>Ў%Jȧ~*mڴ6lؠuᤇ{s= WB MGRF ^@M6ig `&~:;LB٢E 9߮];[u'T;;'͛78wܚ f8qPX1O>nB`_|EI&x2e$;vt̒'O_-[ 4Ξ=+.\&M?2n۶-6i>^p2pc=*W)SFpW3fH9䅶̟?_p_! 9Rgu#F@Lm޼R2l0#Ȁ5:ޟO`iU#H/^9I ƛxcL"YfwժUjt/hG:t S f۷Wsu@mB|̙ӓ'W}w$i+UFt =z;>4{w[jU5Y mC oG-!X}  2>^0ׯ>MK/y3[lҺuk2d };$sNh޸#"q֘joƱ|JL' XB&̙3rE+iӦ﮻JHzm w%^g M_~_xQ/^K,IHh[ ģ-8!΄/YB;7$>w}7MNJH9.Qu;qv}Fy'+ü]3QMRBy(k׮zꩄī O:7@߽!Þ:r,8Ljɚ5mщ'5Ѹ=f׮ltb ]mIYɶcHP>oQڀ+ $w/>iV#& -̙͗3:4oW4mJ/NH\'@w1+  ȇ=k&  8*x0 |JH&i,:@$zW굄5E"GE`_^b\#q٦X"k@v1*0 yBvkHB# f"ژ;Z 8. & X$ਹ&O$@$(n'xeH n Pvq x ")>}ѷ]8~L0g1' &Mm۶i˗/ہ苝;wN ?ٹsg"w!gs=9t̚5Kљ^.]闿 oyϝ;p$;@Qx׬Y?(ǎ_|QkժrY@<2da@>s/YDtu=W\c&ykOI̙3G2|p=Fw_}M3}zl#?mUoڠ۷o/]v/LCW]u{2sLT|P^y[,YR:qq7SO=% >c5DbTbE s"LgS\<㚯uZv`y5̙S7oެq}Ptim+N`/Et" NH Fx@Qǣ>_F`_ПY/18Ki=bq.<_^1I]{*<ciFJTqA&_lY= s>6p@R?xM- LSBWc|Nz-``<::tzݶT(lΠ|k#Diԩj͘C'ZުU W^z606@i7m?cbd Ƥ5h ۷4Wlj!8k\;CwN<7g8[7~|0!! Ν[uծ][g/4mTO"FlMY*A 'Nn#6 6LK NB… ;Ī~y#]tzQ#xdɒEjԨ3'0ӇǬ,+'92'eCp&˗c.b^N\Cָqcɕ+5noݺUqY aF03-[p7N}`Z&TX1BC & 5o1Ɖ "on2C!*"fL<01%\ /ݗ=YqvXBM0"Yƌ5fXCL03"o=K,f0iӦ+Dޮ~F|f@`N!x|KvL7Q!6/_>#3ypB i|0gY'6O6nx\ %Bk0_(7I9Nx È 3m 1@~;K@A0;6^*_ | `* q#z32|kqrČW Xh VfM)&.>kFq2a=1}\ύ&XTJٴԍ2Ϙ!Mݛ3mjjj>y'}^mnO l"oߜ@`ƅ;.@-;"̏H<9}Ve1&f<)#L(d.aZYûZ׋"cؽ{wO.̗gW>R<}ʁsO~`@ n#^ qGWe$x"`ƊL`XFx%WăԨQ$L֬YIX'?s}7}dlrcFL `.9W |ͽLd|>Lx'Yp/g<ك xqr޽{yjZM!\BCoF1c6' . q v_f>H}Q~ETʁ z-/o}|eBx 8lz D1ot(̂RO@>B0,W0{8ĉ6{ oglvmc5fG֛;cKcO`   >Sn{L4@mK3m>[s=Y0܏}MLɼ:3Jyof@cǍؚ( Ŵ Ѝm_z{f!onҢ<x>YOA6\ ĄG`NS9v>xW9hy E`W.{F)Ah'.p[\KpGX6uup5Onkxace"z&SN01`+F-gQh;U= p<;g 3ΦNn|j8JZvr39)DfMKlS`LLA~wxo"f&)K7`̚!p7=#x`T%,dBs|9(3l 8N q,HE>%/oH Pl] "@foIE>%/oH Pl] "@foIE>%/oH Pl] "@foIE>%/oH DgY^w,N%k>^%w9+ ,f +ڵkȑ#{Nzgn Vq N@$@$"?rHY~}Z݃m۶ӧmӭGJ'5KÂo-$@$ԂֳYZ(#HH y9;v^ZҧO7xw!5oX|z#IH\y W^*ƍKBoUVI%]:MIfnb=I  )3Ν;KժUݻ믿)S?7v3c7y3 p&Mc6l2;l3g ?f)) ?3 DWDnyt߹sgY~ #5ٶ{;`ˇ}ҷo_y뭷VZRZ5=4XSV7fk& h%aS?yd˖Mg)dr);{?{,.lʊW3HH 2of/N޳}䷋C)o0 @$ȇ {X? @j&5::HH L>'gH N Ptm @qf/IE>N&]_?,X,2(cJ]M 6f_~L>]VZR}]]s~]mNne$@ c)ŋCן)ǎ 2%S$Y @pE׬Y?i&]!t"O>1czz2 *?I›oI'(a]lʔ)OQ0#*Ѹ@?\rI$@$:WDʕ+KժUyգy3gxZzY9~?caÆrɄ5s̩Aʕ+N'$pرn:q%g-. q={l߾]b ?W  SR/fнzի'4m4`_ ,7i)P'̙宻}8So8(  ֗o߾m חno犀.}@b4 @p\4 ¼yモ]v}޽RPdɑ#\r6`U&#pZf&>V̟?I}7v3cK@[L$kFjtyx;w>&'Nx`ځo 2xBݰ4"qVo)P`~ H M4r-? Qd`W6Ŭ}ݺu;{g(:9rDM[{$'|VOQt M$@DQS/]nAf;[)!CHDgV-Z-[O?)šn"av~^W_U{{.]4CXp{*l/?HH  m=yXf͚D `/eL4v'SyGv; @pt& ZPI_!|soZIH &]t hGq$@L lhƶ @L>ZF$ d'! h!@b;IH (ɀCHH ZPeN H(3mk׮յMgTbJ6~5°lٲg w馛Kw~0H <s,YDr-5k )duJZ4m#GK.Iڴ,DJeȣLi͛=ML{rQgv,GJDzQx"pS3`ݠAתį{+;Q/ O$\y>@!@5kufXo… ypҀ~M@m۶r7"I7N "vں'PEI֭yz\0/x,2ZniO?$ӧVZIƍ88-AE۴iD2磏> YYkҥT<KuwB)yIb+nnu 2XÇI ިNpԩ&裏zO^&L 'OT \^p $ p3Hwg3i ڽ{wOV,]Y6A(üU-[T׆Xp8 oԨj' |#E$@Np\XF?;hlƌbVĊ0 @qcO>{0Ϙ4l tGHRJqsM,KT8GyDF!Æ KN1-F AQvL`n[@6C fƎG1a4iRPEaPH 5s7g1^{5};Zug7N<`*W,z|Z`_sC < ouGxWv/pG8WS4b 'Nv MWc\\x8pcxlҟs zH 8:yn5qf{(n諯p/'Ow(I GmP;CRH \w H-ɧiC$@a @tVI$@E"ZY E> Y% |jf=$@$?'wz RPa菣Un߾]Ok*b: @88>;ׇ/W g$qTD$@) ȧ-o>]m eM]{f3+q$@$ 5ʱXW"E&ð\=zT-*},5sL 2Yj&Mx2~em߾*UJt84p bo-|  8AUӭ[<5:\*̝;W}by^x]~ƍԒ'O]>Uaz,YRkyW_,YAvbD<ͫdᮯSN X^RȑC+p7~$?Sɗ/_"& )wH\&ȣXr0Ν; 9V*ֵ۱NX 3t,M OSX9j֬npl=*3ܹE:fw|X';IXY1> '!*;{IfM¶Q/{c 8Mu̜9؇<0KSfpQR%UavFuy2Z6pU+kc֏fnf#׀G[AR3H&ȇ^3l?BJQ~a-ul,]1vVW}+oGq$@nk`?7Ea__nS L6Vɓ' W_|9sʎ;+tR:uJp#7~$FM6ٳ矫'I<8q'1 @8:øCfWpau'hplFoT.7't>#pζz!j1YM=8%g< ĬY1<,Y_+ _>tF$"f=O>Dx7A[3rDM0/^m#6xܘdL:f(; !x#@H D =Eڈ?$2o<]K``޽{W^_)'MI@e|O8Q(S8A~ p3yrzٳNᗦ۶mK2I;V:KtK2k ֜4*qQ/T'IH"_kNב3X;_~Eԩ]+T N>=⃀"ooذ6fyX5k&uլX VgƌEX%x O9,{I7|ޤ0Yza(>L0U`5X.^Xq7XղiӦzbMm֜GL# p&,U1q@ gϞUa6x e`^?Dx):$7Q}|^oVIdZi +VPG"V3gG#pgh]c 1| y7S?RL#p3yh0Lج Fb޽:qw}`ּcJ,.K p a6na^*QVѲeK5ktE]b z,s?x_/_^DzmYS JqGkOؤMV}b'=1 { pסCg85mڴڵk{A ø@iӦ6BMcpaȐ!z~R?>I[\KrҲИm1H&L>PaciaH[{9*^d`ҥKLw4\MtYh͋97wvc0Gh޼.bŊj 2$q!m^ /׹MF ¶'Th{ 7p1Ǐ ȏL;vFv^ӮM]_zG" 9WsO$#R\cAѤc68DZҥxf'Hx~ =E$ 6w3,HH )6{$@$@nȻAe @G@$@$TY& D| A$@npl%ɣby1:aUHhh"E~Æ@Xq ֮=XRyڵrautҢE 3fShQӧgMom$WIDATVs*eʔQoYXg~V=n#ʘ#K} &d%P =#1`68#*2뮻'Ps*"kr-zL iG(/Pqfc2f(䘗3yXxJP7h@T`M,\zuݯZ =v.\u;ʋ/qC.qfL Gi$[yP)(X'i3g}nݪx߯O͛}Ŷ;]^$yW;jx42?r%^?? $@QE gN N0;T2qv_]~0hɇ=k&  P]G HH |(cϚIHuy |سf p)6TQn/CI"nţ$@) [W ~[<_}<;*#vaä+Q[N%KL8Q~7]anuM2i˗/j{itgm qUVM F _nƍ߽{wɐ!L4I.?XW\ѣݨQt.]qwY;[PpuƠ1# @p\qwM7 .]+"BVVM?JvĖ-[ʬY"HtB$@ E>Y5 MkL?,7M;~/Wμw{kӗ/_^jժ坔d. @pm&_eժU~QW۶me 2J;< "0PL' ppE!˖-Ӿ-^8} `],F &P3 Hs͚5kC| 'NrEjcǎիW %nժUJoڴI4q&M2sL̙3R^=bꖍ5J֢(#Kp)yHH "Y,\jU]Mj 6l%!Yt\!+o߾gONHXdɒ%2gUdI={~66v_7|S2eʤ8pƆ"0ZK$5@`ō[nE~G5ߔ+WNL3|< X_:VF  y(" X!@d?HHE HH VPce$ !sXlݺu$+TM_nnݠ2I|p\\aԥX[Kvmlj᫯ <_tɵfZrm@X0 8E~ڴi*X 3x8뀿Wu7tB˖-]WvNFͿk߮ Ƒ 8. Œ|sNy'kHmVGm 8mܸQ+zX_KWPEgXrڵ~|6m.q)V;vLO] ֳ]:-7pn2fU,ZHZn?Sz!-_X (=0`e87 %`(H GX];TÆ 5qgC*+VPL< ~m=9 ?F^ >e]K/$NRرDcϟ?gqG,ORXQ}5j܃DU9C a ꗡc^ _y$wܾx,OHbŊ*g͚U̱Q+WJڴiwE7(1H ɣ1uU1Ƴf{O`Yf*ܢE L,El0Y7AOā3" 3v1; k<pb .]hSw}$nw#qEѹsgNB~oWֺ x\"o6tn @J ׮`CH .ĄH$@$ ߸y @dGu$@$"$@$(=>l E>Ex0 D6|d[G$@)"@O>L$@M"֑ @PS @dGu$@$"$@$(=>l E>Ex0 D6|d[G$@)"@O>L$@M"֑ @PS @dGu$@$"$@$(=>l E>Ex0 D6tN7oڵr…$fɒE*T$;$@$@p\G).]izZ_Hy=Xn|WSOzI$@a!ȣ:t C*=~l߾W2IH & "Ha?qDYr\xQʗ//{d˖MΝ;nI.]*ŋ|P6l(-35 լYS˸ꪫd߾}2vXٱcd̘Qի'۷ŋ˔)S裏J۶m~l2rʾx jٳ0ӧW͸qdҭ[7ɔ) a׼gΜQڵ,Xb ӧ_H\GN:Cܟy|WlYU2w\y'$?Sɗ/Hb+"Y6MhݺhB/_.;wUjRϞ=eȐ!rQ#ժUtHRdɒ*v.]ZM&W߿縜9s fc;wnM+TeС.+i̘֬1C{1$ON&gH N Ptm @+V5j(iL  H#V/  HVdȑ5av!=ԬYSӦO?n8ٳg;DgϞHw.O$@NC#ǎ>@x OdҤIAI|dΜ9һwoy뭷dΝRF :u$$$he˖ÇsM=9Dl#㟁HK i7n(sرc̙3Zu~iҤ#!gΜ /.*UyI֭%C V0(74 ao߾]a7`XɱrnС/8rL0A׈-ZoVO-[:b;ĝ8^H$J&E?s ߿_w1K.\Pz%,]Tn6TRRbESF!; |ɒ%p+eҹsg={?^ڵk3z$SV-xҦMWQA)"f$@.ȧKN{= c:tO@!ݻwÇ 7 wutU XOЬY3h nz2Pfk#[lHE$;T0-s>kōV  qãHH,($ X#@eHHB"oM 5<1 (_A#_f< @|pT$ ~O@4+ DGE`{nS? EHH  8c(t۷O#˗/GbiL4CdH,H&;@G$@$|k I$@$TY& D| A$@nȻAe @G@$@$TY& D| A$@nȻAe @G@$@$TY& D| A$@nʑܨe L œ @8 \NH\&@w0' pȇ>&  P]IH (ϺIHeyx '|8n pEe,HI"NH\&@w0' pȇ>&  P]IH (ϺIHeyx '|8n pEe,HI"NH\&@w0' pȇ>&  P]IH (ϺIHeyx '|8n pEe,HI"NH\&@w0' pȇ>&  P]IH (ϺIHe-… r)9$$${ @DcǎIL$C &M06U K :Ǎ& PL$@$(9nl5 E e *Om{ɴerE?9;)CtRtORPޓ 8B 8 9sLV>=[SC`Ƭ$@\7`ٻ=|_n $@$RIdq;n.[ v~'K\|fu@=M4nN@߭@6 @hh6slH ?TӰzy} iYA4:[\r]颒;q~Ii$}ߝng_H^}:ٲJgqf,=_>1nΒ+A$@B 5Gc=L!KoʓS7+o>Q$LX³n7}xQ~\Y>g6>FrYٺF5 {_w#O$@pݑwg?pȚE~߱WeW(~.mZ}V.=y ښ D[YKZ޾q  x&6xH @w"  %@ЁaHH y'(  P6H @w"  %@ЁaHH |םqTh$EJ">K&\vR"F5FHRJkm{ɴeMⲽe'q _P^L% ȇf% pʢHHB$@ @4Gh$@$"|HE>Fm%  PC$@$M(4Zl+ H""0f' h"ȧIF_l+ @"D>C ry# 2A|֬Yٳr9l\ &5@t9ui {O$=[J$@$`e1N$@$](5^l- D".f& "@bkIH $p13 D|t[K$@!ȇIH PkZ E>$\L$@E"]֒ @H(!bf ./HB"@ 3 @tGx$@$%92{IENDB`django-import-export-4.0.9/docs/_static/images/django-import-export-import-confirm.png000066400000000000000000001055601463433610200312130ustar00rootroot00000000000000PNG  IHDRBlrsBIT|dtEXtSoftwaregnome-screenshot> IDATx{|TաOm2IATFA6/Es,>KhP/EZBAM &% L`I?r.2ٗ{fZ{>s| """"""r1(H@R @,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,""""""IXDDDDDD%,];E *ZӅ^έML<~x>6f6^ u!m!n 7 yE l*iE}A}x`0/;LMaiMAõ6ų阱_6n7wMtp(KSaaS|wF;޼ia1mEsN*bȶ"3M!`+3k"-yl#eLb;j_ -|PK<㬽[R"""""""74dźRDDDDDDΏ1C<Os NܼJn;۹6o O;R?Sk駹1 XPE8/n25W˜/&af<_ֻSdT#\[‰.̀I^$gƭgu|sWDH;F2:vwoB iu9,DjfwokWyRǽj(̾MfndeVafߒp8Oyy߹7ͨu;|ȨdyF#[Ak'$>g5:B+??W[GF7rϼ؊Bm8v'ܳ~<my4oBKH3~YSkY:3fv;:-NtJ g}Ids=q=WwJ Q:Vjl&*Dv4eWjhbeV% ;p'G,|ϛtJ(gM$ẒOrlR1͞5-o'/6?pmIċ&͹5n"yN*+gp{x,i3|[kop_=c%gL93QM^/ c0mU<8}ηaWJ48~htYo11u 陃`g\"r64B,c}y ;A̾cmmY>A #w'ŽvW;rXM~Q˿ܝΗr+whv$,!eۛl&U9;2nwgmnSx(͇~= r-<6:4ee2X #HMl&o/^Wi6tA'<{!+gv/j_9`e67m]G}_~ݟuЫ|ogi7u>4&fyxcl1m4`a[ ^ ,LOugsin{0|Ɨ7BunY۹nC 9j13ul^4Xp(ywؘituyŽ/ZW;v9ʺ)Mlx#m#hهX eœp,;Ա *3XFq$4 u0 gv~:ZJx03eaBg&?lD2rilq[-ĺr^j~Cd\%y[-1l`eL\^مdMax|aY2b9 _6M3EsAaW6ۏRހ;KRr=dĩ hj&dWqr*?hilgjF)?: 1lٕL3ȨfTכ~9뻜v+Ygk~$hÌi'#e)|""2SED !tC^0q<ڎ\ }~c[z rR/h}.:w[!9Fp=f!'5%=4&&Nߚjx!ų"0+鹎ޡQ=K=**z5s̬/)HjͳsOj t~ ml~QyHzowk !'%uNKdAiL+g@6W&;mc!/qs;l:.i7hAӓ#RspO p32w6y4&~ճkXaj 1 XP.{M>0sYSH_=Ic<<=rwn!yM]cyr;ziI?e;)BdJ v&̎X#fL*3uuϪ'puٟy3F&/'K'SqxG8FX~fM[̣9xP\}6u֯c_XRVŜ> i|yg}KrƂOdV.w:ibHEmCw>=74~l ĸ#(s8l)ǹ#[[y?4U[q233)O-I|ܽ5-+BWMF> iOWCGw^+4IS3SetCdz8_ӭ B5n1V&S3Jl%V@\rsC [. OcQiPk&Ow˟vN .IR niʚx>8fG_?-<֒Ě7(nK3J||!{Gfh/|T6 .;}{Ȫ$c[&Cqe;o.gEbOW* pL5 < ȸ84-Ei>(rWq:{]Xp^ 9>a*%:FP;E%C Nʂ *`zZ0y/=4R꣢ ;'vQ:0(h6>g{vǺ4醚4&]eQV/p]i8P܌bX^z9pWp''a9oRLVψ@# \3/2%CaZE%GoK5v{{SӐ>Pb >k?x^Aܡlk{'mȎ&Sw+>: _CkvZiV"y1 ZW doJz Q{}{}aoC ;'_} Ƶ['f6~0Oe*B0I f!R#<0`yyk!2tdE)Ca`NMa{{cFߕaaIkQMSYns[Wmd6 &P':9f& PfCm h`L7N;.;._D[n5rZf3Զ>'r;jYxoņZv6[jw̉!y0+#1H]PS $Xz. 46PMNJ8&{)YKV@<98t١94@/&` O`m77+c-[&b!%m凎QU &`&8UPV޽Y4s^ $خ,Ӎ<3s3-J`@m>ECGY^v);ճU`i}4Y"'5`gIOLMAܐ|fvyB);CWrv\'` EZ>jϧտu[x$Ԑ *L[wQc<x;?GəhHJGhkyxLwy??dj'GD-$Ҽ^S,6r͜hGwv^Hq!8S4LPcA ,.&Oc/s^;HAVoaNKldQjYnm+ 1 4zF:T 2ma`imϳe :4QWfj辍gډr3jT!jDMCB&! +Cb`Tu5ZD :x܃ p9fW0Ўib 97偻 Yz$ݥ*_~""C},ocO:5iK޸V/pfY!~^,a`v\|,N"\ir fF0 N4c;u )&KzعKF;Gv/{r_Y#-L&4(KϰssKNh-6ԕ5f8,fQP礴(g s++*y\NBfL#j^Cu]NJy!ak%9}&)\<ߛf󃝱hoee3uCr_]½P)Y=c4&ği`-O)'đGvۂ9P~gmKNry5m"cp$X{n2d~0{x]|x@΍I!~'f% kHs3MHOb4^UUCSSTp'8yI6wkhRX2k,ék,?ɖ#ձu ')]t\ ^{CȜmbO`> HW/͟4+̰ⱗ᱗bkLόg˶dߘD=u%X؞!bއe>־Ng},N5,a>s:!N{h|ge_8\4%Ϛ"&4 'hT$3Ԩ;WZKhݷ뛘yM:6{nsXl&tzMNR#~2t.f!Ytvl'w3 U-`)D΀7x,Xc’ K:a*nYksPx\_6rc?+s~ PL^89'^'ZM$4wSj024_lw)vk{LvrRnM0&踇r֗?nz^Ch;\qLsMtX'RS|Uu@nta{L釥=o67w%.C$rw{^>J@kC,u CdiSxwݶj؜OG'xiGO~sY,/ʑu0ؽ7z8RKD7^c%) T |y {?u;|`=CE^) זb^N[OM j{x]l^!{}3O|3<ԇ0Hi>ɽk{4Crq/ugC,YN<ճNh/l|/vxlu5 ~^ `|TARVp`}^Cy;_v>::z/<5ζ+yO]|>K˃T?5L%~P-a]>umByp6`'zk۽8/l>>:}ʜ׳G0\P5pR/ !Q_Cw^.K"͍ۊ"mut 3nq OsC(U0eG#q0ؓC|zZ)*AsX K‡2v6um5S-d,q#>HE7>v}޳ӎK"w IDAT֣fdG-ϨzOsK+b0 )4r=0s6RnY'/xUΜ}l, < Kbb;fD6 .gSW_ aqV$];a4<.#ƘSܒLOJn$e ΧX1Z\Ȩz`\̖q#NY\tq9tЬ/NA!Ӧ6frJƔނSC-,wu_qz;>㚸~FcS,xwSϥgf2zu˜U8OA,I*")գ]"NId[i$.&nɬ'7 LgYף>;zWF X:CqQ8.cEkYU̯,1UE#BdL;-[Φ^å);b=EDdOC4[X=S~jȶ n˓~ݩg+`UW#s'ChO{K$OUT [&PHK 3{ۧw(""qIgnjgΜGOjc;nKy;~}@l/ǷBm8vLaSIĨzt4:?U2$P af4U0u4\SdּɽY,]h$x bdǟ2L;Vfw u;).̚1 ~s/rgQ9g@:@UlɝnS9W!_|G g:Vjz v wdVKe OJ #i0uӺ@E^2m 4L^Lh)cA]J:<9ZxYOuk"Ȏ^%"". Xv g'h\7smXw^b?ZQBj,=HDDDDDD.K  DcT I=iPc.@ljaa47DǶ112]DDDDDD\IUSB<(g!#.Z1gopRYEamhӂjIh &ova`""""""qx w\_JySxi4O:<+*<,LaEzk*NF&ZåEDDDDDƢKZ"""""""gҾXDDDDDD,)H@R @,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,""""""IXDDDDDD$b H_2|C,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,""""""IXDDDDDD$b H """""" meV[؁!\y .ɝ4_PSnb8@ki~(8WÜrωGc;ѩ3a AL*v~a2tY^rUDDDDD>.^ < ;+yw_Gی$NMֹ3 V{.v V`#̽r*fA{e Żr>A|\`ϒ90'M&+ŞǵފalnJBw;͎6]@|3׎JsG q""""".@fM9H碬(s@X ~0GG\;5WDkHAZ܁!>y識iiIrİ`q_B 'ƒJD0P\^OLvP !-|#Ϝ̔jvpqFy7:ʚԶ*~{3ִYqY_$Xos;MXdGۧxr|>' 8s?9yv'_?M wu <M4R0`p蕂P_^֮7sVwVysɶuaIb<TQˇ1i-\53KK5v7w"ftnq;!*e:4DI~Dsd5h0Q1VRF;enHsq$8  &99a>Qj LLCoSwQbAOPWZȑ R0,""""r=Ėxh$L|\a'`?ʛKQ@+K;WQ2+S'^Fm?ʂYVb54nB;{IʻI|3eҶr!:-OEy2Q:zx*#1nsƱ OmoN`Nqz0Xֹ dyWڲOԵ|tR  KT(AAvگM̝Mkq]gنwduv8(uFa o6\gމsB$AԶtLs4qK;^+H9i!Ԟ61-H[C5E`{<ؙfiTv ~s3sKEĭU'21uN:Kc&ۺI ^W<Bx0""``gk #<Ø' vr4uCA18`ZivX"0:ԳQ$MB{+SF xn2 yp3)g g@[-**DFs?T6=A⨣f]-J9϶|D%Zvo 1 W>(o9+C\6+[R TW"4a2bj0DMy ~ 11^v>{(#6{o1~|}e%%> _LdeSrk#'>=u=Mgg&:SiCiZ\Y^G(eMgab粮Nǟ%% 8,I>kS2.>.=MMp8Eǚ8==-aĘÈԔ|5Dk7=(e!%sfxC3Tb!j}.\} B(OSpDž2J0ƅE0-ي7GOyL ^¢cH1."VZc!q3YDDDDRsчL|pL⛋:_tGÍF]v'~Jd/p45tkajYl̩\7KVG{#H<ƿr: /SPf(S|x0gɵ;|n1!^ UOgcy S5-,͐T34}e׳\Z\qmx0?vrOG=Op0(I LOk G|W{)'#1/TAH{EDDDDd,9\xBi AXDDDDDDؿXy(-9F.)!@,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,"""""")̙3g.v!DDDDDDD>k!@,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R @,""""""IXDDDDDD$b H """"""EDDDDD$ )H@R tqg?\bHQydu#e""""""c$b H]~s'5^y $l%,c+{V % @8iWsӝwl kzh Sj=$6=ɞ_q,|I? c/p~;I0RWxaq?;^,N3pO o'ji+q d͝Ʉ{j( vU'ů<Db NKЎOXߴC/i,$&99'5_fYArȘ56L{OSqդƌ'b|W,.ߞm_r _X G0>&V|=Xk1 9^5|W55^m5dGl/{*z=$4ŧr_#&Ǡ+"""""riq\0^E D 1̴pkϭFC2 g^ D0cWC<s֝,7H;I;W핈 ʾs\Dc4a.Wc8 q11.4,ۘ0dC% Vl[,@DhGO^߀ȥb 5.yT5qFNc "bGSѬ@DDDDDDƸK+7;zF^N :q:0~>LDDDDDDJ`SԴFmIK2А_1pkg% F}M\>ׁPEߞ_;vPm#s<_ ofi="K؈0X @lCgy@+XF4J>n~}:ϫs;dcsQns-[^{PUzlC.~f]=gy+nȎ2c1qѽDD> XI8P`?-?~ E K93.v)Ϋ"PB,[)0cp;7 T7DVy9Cֲ.J{''`΅,ڈY 'n0g|PO|9?|s:)S乪Bn%>Iƹ&csGs݊e,:煍ĥOHr8.zqo.듎B6YF͖͆ͪu:uyZk16Xxא:Vٰ 9d.WYu6:n#M3߲5l*GxkuodƲ{yC'.bŽYX' WE/MɹrtqY;jp]~VƎߺ6=j}+L,;oUMT}Uٝ]g[ػ8;8vh2 M(: wiGlѾ##^F{4+|m!%6c!{%\k^A%-CUcE 㖒i&6L*51KԈZr^UBϏss<4U۩ѮWNnWS?iϋĜB6L/* p' JQq$ζi.v%y35OrFWu)[drrr{hc7~:> p؏ꎌPz`n=ӽGm}||ٝl9aAH8ٳǩHPWXOYI"9ܸ/}sOʒ%;iKB/1`N'/-]c7 xB4=u#l=ñ0' pđL᳜,޴v-isj M-f6?{ ÌO$B45nӼ(}9;8|85Vܬ~ IDATPuwF;;N9 tv?3}?Ls^(ނCqD$ D< =Ŋ^եG:)kut(i(<:N1r!;3؜.0q/F219o3f;N~w9xWO7!JFn /-82d'sPh[̡ٜV݁SQlec̤07rh'©h9ÎB=Gab -}N%HWKhkǒgF?0~䀇#GzH.A*֌\J^ ~I4y~M*U("qb#ijKqnV Euzf F`$n|vWaf`/(7rfChff#}_z9;Jrɰf(MYr;fqͬMÆ-ʊ GhtrK(Xq @2eNf3VG 8nwX \gfbllN\A`J,I=3FfcLfEJXm(/dOH Ca|h6U4ą=[ IrQFܪ6W*׆`=em|_+ SZF l ю3'k{(bF3fXoz3tL]392C%Ȑǃon#G.H'vs:M(i'##-$pMj=&s[Va˰(*'?nc2)s ÙKՆ/Wx0=?#ҷ8 ;ϑsjs9I_AZɡ%_l->_+-7dNxو9# Ոٜ1ęiWLjCn-Mr%)b7H1kΰkD:%%f3)(yGx4y!""q\^j6[C78~/-Օl]cnl}3D4d-K 70buXNlJZ{XOȬXIeCmteuBޖjmY#'| _<=쩪+."=Hfx''oNǖ-8BnvB"qipր71t#5.>5)%}>cMf@ de4oW@J[?qv֛5dcG1m2wPs8A|vߍ2Hf>]> 9a{Hf30>M]x0bNwL<7C4qj0aHJ2P$Α̱M t AZÿ$fttv˘QHAr ^~=Ybxh#f=ә6m) BNVg ۊ)A\F26׼w̧ps-,dzWHkfܨN\}+]Z|X F{öywD Σ/oVX l/a_6 s1><^HIqZU3|+Z)>Pzx,&vo{7`[}P}Oc]o^evpڼD<2F0Ϋ<'ؘ:8Y)y;9`†*wDpk!3ɷqEcr;vv{[=ԟ-@sA=^7D PZ7'kX\[eO'3>lH/đXJۋ s^ ػdpqC\2FX7n3Mt;0$W n18ˑ-8}G%~a-]lӆ0g 30<~|#m_xg06SYB3 Wt+2+S9iTɋ #8 9ZHGn`&9Wha|!gmu9I:[Zinnzc5/s|=JW輝o1QIo;f66ᦟ4̝7^s{7>5s9F+5Jw jl'R?m=ڈQ2kJ`NY C} UT(,/\;&_aDDd">dz (sJ&'4OK:.ٞm$cO-Z|&o^Qa̷)VqHϏ5#q' gb/k6"rm0oҜ~/oNĖA_MexJuuُv7Ud8 ٲ{s7u'D Js&Auux I1bu`Q1;4f=约C=7VJ&fuG`[EqnAz+1'fwc͑Sl]6Z>=L:x릝7.IMT}n/YI4Dqyܦ~~>:i3!+9}`;jر<=^:z Wͣh cOy=^<> )S~ӘN2u20ut̾*[:vݳ7vrf賙l;0w4aΧp)yV3#ۙ{ÜNuq(9߁Ǎ/y^u GwR}o#;H,`|%;:Xi@'nmd;0@*WLڄj6w'}#sǀMmNZf:M?f HbNZTrBMǾiq7!K!N+T u`;=o3_$t6ZIi^o'*W{QwZp%>ږۛyz:)}t?aHv؉P ]WMg#SgG]KH?m-n:T)6v@Mss8ngk/Bs {{fZ!DG.)1If g-{yvqM1Z =46{x[R=P]4Wogg܌D,#4LDX~ktz4Nus)yȡ= xjwRy _~n,tNwK)(έnk_+)?Ol]|8XU3u>Cg^yy!"׸??kK9ЙIY^BR(\AnAJZڍ4[-;9q:5g^q2=\(+߆Z}|ح1;_`l} *o,%o /[q+J*ԕ>*:Q ~AffeEbۖ*<~09r<)7)[Ögg9;R6\ƆDB"$`TqSl=^VCen@rl(hɖ=- `$cڵO`qūvwC krPh񾦿~vS`冝@sF[9URhݺn@_>3 u^Vkyj{-i&񙽝.3(3Ӷޛm$;4n6@97gk/؁Vҷ0兽S9U=DcLn|̧5߭z~ϹƼtf;縦ȣ+eKnT;:Oy4TWS5 jv8,婵T{8c:xk#3l;Ĺflؼ.U0̈05eɸ/(%xO2*7e W!U~^|Y|#飶qfn="qj)dÖ;~]O˖Ulg787aH髥pm#'kRǍ_Bw9STK~IDsZ""_/i3਱+l7uEDDb6SZO{4" HBDD$4dZDDDDDDR'""""""HTR@,""""""QID%""""""HTR@,""""""QID%""""""HTί]F   rڵH&EDDDDDDh"Oׯ_Ď]#&&& """"""wεkڵkŃBS""""""c<Wʧ~tDj`WHڵkbw_DRD*""""""QID%""""""HTR@,""""""QID%""""""HTtDDDDDv)׿G>i ɑ͚_?w}Jr[r+Wx"kmmt2.vP'hѢ/8E!"""""2S~$]?G: E$]KNmQ@,""""""˽^bJ EDDDDD$*) XDDDDDDbJ EDDDDD$*) XDDDDDDRL """""_~ųkx$N~qל3b}Y‡^nG?AploďOG+ 7;~p O _wsK?sRc?Zyg4K^7[~ǥd>/qʲ+~]U/FVIJ2|ś7j/[[ϫY_ ^GU◐bYPɹt9lxL_g:'/ V1x\g~Z=4>ɦm)}UA~PM,_={xq|evQg}NFn,~ι?YopO@T6/{+#??_gy_Oy{~p,[׿;6w( iȴ, v/?>+<.ݦ*?jspGmhڙM|LO~ubT\=!|}0@? |M ÷A#YgK]˟θ\7\dsT]+PWK&?zd2}Ȃ2ЃF?磰rw\?~xOPz RoqsT lHD:?.ߺEߤ~ۏg do6rYG+.:+=|x(9?Χs( cw4dZDDDDDRLL(HlAB¢_jz~rξi-?9;] hƆ*}twͣN2g]Үxxf͂ ?u~qm^x*EߟEz."S3)fɛܠXDDDDDh(ЍGwһi N0<oU?ME<x̒}~~9 |4CW3C_E!`C G j)(ACEDDDDd %Oz5,?_" iq=Wz' `WgI>~_%.CxӞ#KåCFӇhw}[ag{rK~|o}A1|FQ'}O߄߿KS~s]نO'H?^Ô&o.2A E?du73L|=KޢȂw!3~f' gfj>.]~ÿ$~h\<{(ȳQ>z_ɥiG\~z$v|xHZDDDDDn_z#I{/w=}[}',Z NhȴD%""""""HTR@,""""""QID%""""""HTR@,""""""QI|._$"""""2+%9I7$F: Ej͊?t.?^p[r+Wx"kEm:{>O#K,w}moO>aѢE_`ODL$b XDDDDDDbJ EDDDDD$*) XDDDDDDbJ EDDDDD$*E, vZv/""""""v5/rsll,ڽDg}FlllڵkXDDDDD$ǂ}ׯ_ί]Ƨ~XDDDDD$w}rGttDbH,""""""HTR@,""""""QID%"""" IDAT""HTR@,""""""QID%""""""HTR@,""""""QID%""""""HTR@,""""""QID%""""""HTR@,""""""QID%""""""HTR@,""""""Q)zb YYdeRD:5""""""rDln5xq%ӧ9 Xze I/" gQ@Uw}ײݙEVq=}."++ Gvj=~`g[\Ƕw,xe{rY 5"7tGɺ3CN93"5?b31J>ÿ%tOǵ:!黇iv&2]TWz0}bK"=nD\{hvBN-""""""]O2tb6Y< ~/u1@HQ`a߾;CN!63LXMֱM1Zs4n?QF:[p 퉷U """"""r}IjҧjڏD :p&CmfV,^=uu{}[::c-k(XɱZK;Hxi=CJ~9O$tQ Vz[y8æ{b1X5S94WX knNC`vHv8HH33m""""""rgbv,/D`c(΂96I|CbNve(p2".9-8^ 6Zd8l &zEDDDDDׯ_t"DDDDDDD{XDDDDDDsP@,""""""QID%""""""HTR@,""""""QID%""""""HTR@,""""""QID%""""""b"+WDj"""""wEE: "Q+b]hȴD'""""""HTR@,""""""QID%""""""HTR@,""""""Q)& Sz]:=5xSH-fWY 5L3/x|ݻL/m(++^bTtV-l-ϓ97l!{=@,# ?S.z9lze/!vL&l)^ƅW^S0|C{9w!؞*j‹i걏I m:֯YF,ul{CB ֬_-~K^s0Zj<\&Tbe';NN_WSݱ<]'|16.Kkrm' m_yfԦdUɹn?HZ'7HZtPϊ[֔2vkZB<}X7sWt.ĉVXʞMKԜ|+m:Jc!,ϓ6 "Wv 66w'o+-n9K+xl~- kZ,Q]z.3|3a \ ~?Đf,-e7a0HBX[e'# RZ޼l4mЂ3;-VVsKغy ~|oݽQv;itlm3Ȱa ix l"mӡ_зIk^b{?Fa0`bIXcSylt]TN=0OVob0+iI12xVGG`dO($Ntua r[qbO撷";}#"ELI]M T8EҰ.ޫݸ0Xs=Y%-o)bݐ2Fk/Lށ9rIbMKx0<1,+a%R <\9)&{pChVHZYLBoYSK ;2WL 4z/00 .8c=;f|Rs7g ,<0X_0aSXɲK1?\JKH̡Z8Ųnc8)ٞvZϝ5δ3c QUvLܛ Z037&zgbie1)aGc `Nl<>_͋Ǻb,TOZU3eMu eOngϊkujtyL H[whbn9zG,7LfzMifܼ$V낽#7aYpW*Swy,64IscM8IbIZ&u{c&݃'ӱ^9)~" ]XG9sSgє]s!._`J` o`<1 ,:@#$fqzvwMz2G>BncOH:Ltn&GI7zǃv<梶òm?rN LzT S|Kϫ&dH @yVW{&V-uº8ݽSv:itmdw]&3&*q<ęl2mNZ!Ӧ%&*@B,pcץYug~z`g=4T(Ěn* 4(!c*8AS*0MNJխMgz-^O]lta=MꅤysN?̓3:5y844&u H53q0qL*ʹ.c=Iidj@rר''ag1S:YCFyS*mԁ&K (dʹLhM$ xxfIQŠY$,`áoR`i+<7`-oXZ$OZc4wTvVܛ="L& b ?vs5C.^)4_ شlͦ})TbHQ<~]̡&'™ͦajk8q cSr%2FjL!\cߕw{cȐXI&`Mu M=ʱ3LKwXׯ_Ď#=ZqI@i] 9úFRQ}aæJ2$rO0ԛ,) E.3`c$-sCE32H+LIrD>"XDDDD$D}NH$( XDDDDDDbJ EDDDDD$*Djǟ~iv-""""r,"]$ XDDDDDDbJ EDDDDD$*) XDDDDDDR~X"n2 ]/.5ZDd2HTR@,""""""QID( x*dHD}x;=xNހxUTuN^KrTYИfW:L6PY ++\'[LwNY7[:?GU '+\[h~k/bţlX"-YQK+#T ]p Kqgluz\: vDDGRGj@XPUwn>w-gg݆Nϻt*wݦl@db kwߦ"=" ,jk9U4{*;;KZ'}"rx6#^\{Ki~7u!kT#?psWJk pkvt@o)!p7UŬ TkZ]-N7-U=Jp 7|еs5!֓zqWr~?F{sI1YOn^ovwW4WaϞqqt/Lb'~?YޱB׏:ZEqnJY8x8"w^V_:K,bJ}X$ 0|R8c(H}sn]"" %Dz[َ1@ 5vD_Nę{\"#g.dp&9Z)@圸icEbI(hO)^t'hޘ,drƽx9߶mO_ 8O~=g>)??ĵJ78W?\g>Zb$mY>iFדP&˓c}#s}فaGfif`tLhc5ϡϡ,?xߍ -e,2ENU~ݧ5w-OTv=;ZfKK|4Pm빐S79ڃXD9&nHP.m$ǿ %R<0 *܋}~$)^@LUmGC ǓwPq--gzI mt7U=ڭ&3Q:SAQ7'v\ΰP̙ uAHJ\)ry`ĩQSϷι' [PY),T 'fK__] UWyauX36G0Wj?lit[P]T)*Pkg(SXDF9FV.mJPD^$IU8]5o*Cnrf;8 )S(UxX(A޹rȗ Q$B*3o+2w,Sw2CC6qs;%L&I$Z5A$"0QʕNvP0_,'rP^~/ y ~h 2.sk\^,,gGn4!(/:'DN[D ᑪݫfUoU-I]^ ؏$2nIp{2QXfxj#][hz IDAT9+"o\&[%\5iח}ue;,ϫP.CX@]Q~م1/224@Tm"njRmy8T>-R)aϏL" _ {!ů=~$IO ^^Z2?#sZjw_I^fu]~hI\!nl|}ٟ<~%IzuO|Hҋ@cs!HlX>녞2)Ӓ$Ng $I$%I$IvX$IKbI$IR,%I$Id $I$ŒX$IKׁ777В$IҁQ]]Cb!$I$ŒS%I$Id $I$ŒX$IKbI$IR,%I$Id $I$ŒX$IKbI$IR,%I$Id $I$Rqpy=DUV ~E$Ib=L}6 {i 4sk{N d{y'~<{C͍46O.?,C=LCs{/I$^HQū!5(9.m'[Lf}8S*g'X;~3G!w>&R:ۯ9$IzV^F衽y2<_xܠhvk|剽,N*7r鉷VXG9Vs;(?D"˗ln 8XqT45ԤO[_UbI=Bb9d~yI-??ĵJ7@\?\g>Zb$mY>iFדP&˓c}#s}فa_Lң\ZD>Ft!{sYr,pjsg逸CD9&nHP.m$IbT5v4pՈh}r jҽ TXLř;$j!H9p#Y}6$IyI^"J()kc˫L6WD?ii t42hkB\JXO VH]*IeD9*߂d}a5(Er $I $LTF 4N+*/A6$HT(DgVdYpe0bmovJLH0~kd0$Q`(K$$a$Ut@ɘ IDATx{|TOmd#DEhvKOSl=ZrzŗM b"BAM &% $!dr$s ?I2$%z̬ff}g-W"""""""㙂 """"""">(8,""""""⃂ """"""">(8,""""""⃂ """"""">(8,""""""⃂ """"""">(8pgWFuQ. >5\e:krr޽?S3\oҺ0gpȨuN dws{.5 r bRB0pp/k_130򋙖\@3[wgjHja1mrF }jy@0^8Iԩu\L><]o]Ʈja1c\vE9¸?瞁u3oZ&L# ⊴.+gې|ڸ GUf TY("Y%y """""""gyկ!ߜ&,}""""""r8"ٔSs+! 'XHjzMR>Xמy,[ʙM$틥xS;o:_͂GO[6>ΨdAh5o l:2h9~߹=Vx= PfV2-'?l5y}_<:MG ?p w֡1+:܄{o~pg[&?[hho;YyU˧u`ɮl n'X>@1Yd~yߴ|8 }(=9Gam/nmY2v|V;қ=ǝyT{7XP/&c;{wagϠ5wxȺ<ϩX$svpb'Ns 棾Ƹt^XvBPv#)ˮ& %BAq 8W.8FS28 4¸qck~ItdפgCB;o2ɴpoJ79 l<`ɂJYR@|l?28U˛Od-E)<;)=^ d7 gx>'nbbl,[ʆMlz3m0UW'36J 'X6OcՍEWz+3ؐIad62 (m56fű<D{@3ag.7hT],]Z-?4mv0ZZ&;ocv1/5y"4{S 1lx2%B:,[2IݗA8A p1BDԟbv/&֦1ΞEPB~_h6Iu$>7pP 6nwy"mẄ́f)@{Hnˌdۇ ogQj%|ԝ̱&& M؎|A89.=L?ODD|j,kƴ8М& e?fsIa8jz~C\N>K/ n,Jz{uE#dti!+ɏ#E4ŲMǚc̒!L͌ցἵo˧Jsl, ܉sbjͳgpGRxMg;m_#3._őizf뛞G[!d%Aq, n4;М11c&8SV_ [_|wXȼ\_.=@h<u_ E<% ed}ikT#"_=v;TpSI8?]8HfLݳ+x8N\^ á xl ^?Qdɻ<{YPdz'8Dx{[ {* Zxde1btP34rz OoS{pJnUM峾ﻀNn^z${$N-||$'[mP }?= cGa8?߬pt=ߝE?6p}-YTIsicax[`gֳ笟[΢Nyn{G cQn ak'K!u2ފԶ4gK,::]DX~)Is1?܂MjFH6*u8y}y0Pd퀣DI^ Fь Y;TY<̝K)yu& bv^Npao _+熈poE!DDu͔Y"I44q`aeVW3{ }A2-ul*Õ61#O8\dW6bkZ `ނ r :zz&5+ҁyRq% 줠f-6]9J~qmKʛLa Ytb;i䶴(=A*4iE(iƲ*L9cRe쎚NJP ]Q\NxV>qgEjeag=Lw{B3 q,)o/ۓ1/r չ88s!Jv=̌|^:u);IcPuu, 6L̝`] C9&8\}erSVpx\i/?@aY\zJr9xe:)A'88vja97؊x)okgp0KC0WNog ML&! 'OhA;RΫ{S!;x[d & 7 |oҀȞ\ Vzdm&mȮ?{Us;pNeSGΦVڬJ7ֵEs[0&o3$pwoli`n6C+G.3?aL6FXFh1{~l 'g9 HeeӐ OmT6?T Lp|gM;YQ3,C/y|A+CUS0-^XJppY%"2*.;;ͤX!tRKl|zA !̱w"j02{E{Exa߂`}Ӂ0s9Q[,1԰qlĦ'*׽Y$(cgGwvqW ST9m TG1*+':n vP=)s^YvqH1H^ZESp,+n{o{oYmI=kq2DC);|O+CX8)5=ASgdIL7;&@lսe{f X>$j4)B?*vFAN ϶FQ d ۠vE2ErO_o`Г!Q3Ybh'OO]i%3$;Ju <,LYO^]r-ޒAf#v!Z[Z]TUP, '9+v[5ͬ⺡ǜ/!6pi3q4sYcylq0v &/@rL;ww!~j+VB\>&uaK ؟%jeEls]M,B́{4\" KڛB Gk7_gjbnZ-z 3:nM~\P˂`3loEy[aTT ]{ Gy`8v@bbwL`[&4GE{wyG5]pq#xrsIF&q4kgFNn]N>ѡ]Ϫnryhn(NlJmh0UmWmC W lVώfFv)GF[:>aEXKFQVƦ<5vvձl!+MN%3MGG5۽tUX&CeNiQL˹w8d}:bm<]pdS鑺jBY2chdrۭ_nE. -|.Ntx/1 ВnΪ|~kt-YyCul6Fd>?pplr~ےqHۇohGZz?:ki >8=fV-L wb6 "۷=7zĄ;>B;1D~6ׄwbwpTW +~T O[WOch~ҡ4R3ʂK|bO> b, 66.` vξ01WKRDdzs`ap'{N\܍p6aeɜt1A~@o6WEZix̙J7qڌ2&ɽFw#U#6}.'rTV_K1bkw7uɬ=);+H(J+.BG1tƨ$4beNpyuv ry YY7:Iwh+it 1bRRH,`'8Z$"qbܞ`w֖S:Zp[@TO.pB77XљFM&0' JZwRűؤ(JNɛR\G;8,!`e.>=_O,Ӯ݄kF~sm|2dp׫W/ᇯc50OBn6C]z\7Lpn;gD9ܿ;ڐFnYz~??(Ꭹ]_PSۋ365lN1 pcm1vpDDt9)MZk=G]nrw$ݟe_LQd%X'$ $GsۘqV,C0dOȺ6º->Y€BllrϘoκbZҸm.. [C5',tֱc*K&(l ݖz.=1`VH7eyu$(L]w+goo fE =rճmG 7%=wD. S)5]6{Y}HR;p}_23oGR]pp +fbm 嶛Bg5[s)v$]Lfz-o[ۧ>)*d?=ݓ꼽PF :ƢE}JOyP{1fqykx@gUgb>ժ깮˦P_Hsճ"Vg-Qgh!SSToK QI$'C_<¤L&Ђ^ʎb#qTIyN1xN-7_".{=[U4t~cBmy5C\]l [33y^ĴrP7}B?S4q߃Wpe=3Oí]ް0n=O6%[vV 7=<O[^VQ,<_~kh0_ź,GsKKFs#ku(gHM=ݛ[>4k):=U!|R[ >q,#(өk|;$hv&?s^/Wa/v IDAT*ZZA9,.\х?b \6ceW ̬Z[!$mV|q[DDvq58w\;{wUp67rMlu:(c;2j _r{U,{.e2sHq al<k{9YĆ6-ÍtbG~0L:Ϊ}B#jXr~ve imzy?>L{ a/Ns5 `1UFRˏ3ڼ\q|IrȬ/X0j:jMhHSX:-4;|-빡,_ʆoyЂ 71M,لT6˸'3*isټ;o` ;oOV?LpCBm1{9̳SQJMkL7ՓcӟbG 4ZS [)A$>ӝ%xΦ}f6d[K$oSRrÌvlGge@7mJZp̴vq EAC_;J_Z&܄pOsM ܒRyjqWM}2߆G`"%v(+F9wH ǥ&wfƶ/N8EŹ.`<_IDDDDDDƛ  pmpcx;5(4G.ljgQ85AgkWq;^DDDDDD|8S˦18YZ\C0熜]ct9^c<ё۸lV-WX==LDDDDDDƍ;8sbR f ?N奱v9[(w(U)u(OfGio.DDDDDDDμ g@YDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDg ,8e,""""""⃂ """"""">(8,""""""⃂ """"""">(8,""""""⃂ """"""">(8,""""""\ +2SH)|֊\zu:_i;E@ Ҧq`~?ӹaNzMkcrKX.Kcu+3;'_(-7n@ OxĠ~)>ZGmB3#X{=??f"DˉJvTibƴHb =M!=ʟ||$EQl|ZLC]GRYDDDDB2Z-SRxt7zOmUqJy+*ψ%utp;rY%EIi>ΪN:@i g[2Vd-Z7{Q|/qξuh؇EVe$99Kki1.m.!.z6'`ΚrN`:rbr9s B٣%ۨEGxR ޥUNKx 8Z{U+Vwc!eab޴: z6&lNzp_wu'GM{&J]t㢬Y@MF:(fMdmOz\PUp,y@Ǵ), kڛ{MUMće78{:I[7솀s3s 39[aWMGv2OG}m}vwPBKf*/xL;Dӣ}pG{K(pau#S>]>{V_tm쪓T(n ߿& *jw4R5M1Qi]ma8]'|E7~ nr䄘v#}WOUYDDDD+b\gr[ۀQY]:_q9㓴vD\?ut P,?"Na?>aG[>pui%jVn(K6;a|?1, FŸK#Xw'zjfFGpi XZSo35unfGFYOMkJ;qvcwB N;uK]v;AUmN]MBwC=탓6\j _$ψ!%(m&8̌odjۧ[>Dt5j֍ F*kvRUV5$M@#NDeU}>m!(fx 3~T՟rrPa0n6ޡp+"""""#:j)8p~,9).:F.7,""""""⃂ """"""">(8,""""""⃂ """"""">(8,""""""⃂~'Osy\$+'U|B%zUǧ,M9gf~4~.W^ Z\3e.f ^1%ƛ;s)jHncdy1uL; qNz'{ L`уO]EDDDDDd^ "k䯯–'r7I^$V5`g5o'_`wsGv6-ʄEzͿz𝤾@k2WɱyL 8;8>HfABB$O?O_`YE򲈈yiwvPr?$E%~{7L7V/ذ"zՏ ;LqvTcȺUW<5YǏ|>v { ܴn@Xit oP>` [q&㒙$%D,"""""r \(D؁AKZr0 x[!E.B &Tp3rϾECTIXv+ˉrq<`҄k @!Y#!Bp[b$(jp TTtē᤼yN,"""""""8{?lN:I@Hp !$\ͮ@DDDDDDcop>c1j]ac!<SMDDDDDD ;BH0$h-^A^i_%""""""Lpv9\>%I]D`d!MT{78r9KG,f#Fp""""""2}e'yՃ4;ipoˈƙ+:xgy#grrx ;an38΃4 """"""硯ͺnL_0D$G%pɪYkclp"/ cy,ro:̳/=ν/EG([EDDDDDd|;ys]Y64p3DUDDDDDD+U[DDDDDDt(8,""""""WgӥgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgEDDDDDD|PpAYDDDDDDgApdtӇoUeE:ȧ2Zٷ&U;i=GVz& /~J3֑ttVlW*=5(r'Xt6sϘ>lY餧g9F\]9<Ίg""""">u`=W8<;j0a 2,L'k&>b1wd"OgCWd)wr?wݖK',L p#mdzطޭw'sLe\l8'\q,WYϲ8Aeq9-#'1i$&M#b,DhN'-^'TV`n}! us|V0s͝#Xg#8wQYTYXLVyL4ckz8 GFh޷'?jzq2q6?q?Tg +g5kX1/I?fXx g+#n8G_6mW=˰{y4sF_ߋ ϸΣhgdx%mspW.*w>̞YkذoO=]32{g}ot3Y\Ωnbl+W m;,ϝ*K~'V-&=9>پkL]|[ҷLlSe$}b+؛Yn|&U|®r=`Y6o஬ YfUz:wu1M'c>Zt+c5d>[8VdΖ5^㹬WGXɆz5 mbVr';i׳5/]"l /椡> {5-|-I.$8U~MDf$uܷ2 e_9xfӬ>1?ZϪ!܂Fvx^_A</#sŅgt=GλTug9_=Kg?c/fC;<HWw?ܽmas39$#$ h BSUҚ23uU (1UbB~ U _evzK"enaZ(v85=6|8`x=:K9?{>sB;vM[ET*OFV4-OgG6A]] yϽ*_?~W:o0D r?T=?NNmM'gVK=7y'%S;slb;} /lɚ(BM9rϻp],5r`k91LavPldGD7_;s 1D]n6BѩF:΂RdB^OEj4:cT/Iӹ~S`,uqyas G3 eՏ7= qwQ=+P=[qi7έ &t;VGLS̲iW8׆q8P\L'}ě9MJ/uT* l֚bvU4DGET̖B6jivEZt ~eg oYZWCYWH 3E5ab',q9+G07 IDAT ޘ`eqI{8/I#$jS uNX^XI\IKE1Gk<,Z9!m[8Ax~J4Fsr69=ֶK%#- <->[vv»vm[ aǚ|| BlfJVQĶ.d.lWGApr2"UC^q3_Yg7>kό⮥GkhvfQF* Abv"erNgyUm)ٜJ8_ #ݬcߖap$29J9+bl%6Vm3I\MeWJ}`8^Aj\&Gm t0E9`&\&'re\f &|v&6\Tҙ_FGB23lxZx_Y,OƖ3؞坾7)j"g:R4o!Iw7\.LHʛL zI>|}: s n).UEg@CKmdI';b*kiv%g`kYKj )4e,=ࢦMW5$siiL|jFZزjj|pX3:X:RnOM\ /*މ4K%#5!QZz{;3eg8ذ ^`͍fGp咿UϼDS`N`:kh\WrYbH%-1ݹ,Ǜ<<9%Yi!>nj+11+q|sS[!x,DVgl'f:J)MYBs\&]٢T2 "g |ffj_fyδ:X:*>mM\Rf,fsnvo Bo>}Ĭi}|^ؿSs K+;6e<΁2?aϞ= xh3y3۷y154e-7g^:]~U1,K&=;:IIs6O[/6!ϻ1+ܗ덍㤺 GT8|읣zHu=wH?WmColmvK+Z8WZOJwp1: o@939뾄xvȦ:7WNSrSNBSRXu j֝#_|miox<GVΝ\9w*|;bSrΛn8Y1 mts8sϤ[D3)s}s출4!${NAIQ/H|!3 heAI IHXx .g#`{‚80[]`6QYo{w:0XQ̇g4|Bf l[p'bAqIP]a7Kbɜ1 g= }&t :) hf<f3 "=m04T$1#6[FZ_As|D;nAٞ0BfL+ws /h{I[o>a$_aqhhYE+qAxzPq4Sy{1cKz[ä {|2сDp\8֦ZZ$21: ޖ5}HE'ZOhB9Uu͸ V2ҠUcόD61j#<ѳ!$8\e~ZOyU-AHJR~aON`G拳0=B{|l2ǵ zuaLe=D#H)j2G~|ܿZ/ 糾:29*f.ZEPRccTsG\ =tyޒp,䝝i7$⾓awdNSw4'O NqFft_A>Vp~lN\N̰c` .\mm荿#rtC3 ׍/gݴtx/  ugQ4{d\nd~4.\3>3 l |ǏphANga4hWCE%\jL# ,'׿~t\mFN\FL8ko#0 >m&ctspr4 (AGf IFG l%-{qݢΎ1>l1̎ad+'\%FH2/B^>Ȓҗ;}tavԳo:o21; ͅ8eg2xuT 8g[#k̑-/Z6֑DžQ `ĹJϲYY;Ը-~u4{vM\&W`M_0o-e7f@$j-5GQUxAXYr &mV c}APb^ f(:Ig`"Y=8e7`{7lmƉ@},iorj Ǽ_G6L7wӛe;-4ֺR Qg=U{xlzNds:*NN_y+qȻ]\e'fByy>?k+{SNS_izmOrtA@5N$jFPSVK+BU{&-nz:ywPuܤw{(q?;ቄ4j8ξ[Gu!883HVU9MݸpFMF<Z[300;#Ll(t[35X}6I :oi>}eC lQӑO7Κgj]D{_l8̙ܰ);(>ZSNsoI]q<5IxfhYg<nu_*\U6hw6jpfY*D5+>cmw0 D8Q᭓{ŜoeX/K9*VOG&s[(/G뽣tۈX-[)XɏaͮMOQTp٭yl)n8jJ} "2rɌ`IZ4y^d ,> @ML#~m]Dty1[ND+l#i-B$ϖuE#r!+<zѻGOfRI #Q:E鸀m6?I$ge`]AId6SsM0,y>ix]f^ 乨@%p|kdW8p%0i%;aF fQB9_˦v1*8x9`ʨ!NvR3$f1CJ`EꅾBK&9(ܙMAHBdgSh&ݞښ |BXy#g}Ք؉ee1mb6P%VŚ>'1+z ]L qEw!,Hf߾p0K`F޹Zn?8ĝ!D'Ehآ9: #6ta\Bw߶/")7kp9np}Lb|̦bYn<VH+sjyRMg"Dia%R5{q(X:11xe>3fr66491I͊l!wA_yinL(&%獋 O"|?<=8cej}oz3-H#9`dc˚@df2-ϙG+|:nq1} IXI@aR 1N~nL9(kkQj$;m`AX|}ers, !11¼ @XRwqk3nOݿyg;fN19D">=4'ƽ?&:_ڴ&:ar۽s_S+ljD|ۤ7{atGX>tϻ_0º?{s+U0ݸ7;ι˄v_8XiI#utR8ey¨Ư7ϊ}G8g#V)cHX2V{|jɤ$zQ`9.LQd15&#ww%"b gI vt_ֆNt\ (Y0!DG17Q#xiϙ0MFK3r*$jJ&:KSKQϿrm,\@B66BߧvOt"""""""wrTmYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,Lt"&:{ޤILXXD"""""%"裏>DqYDDDD>wJEQww7n{øotwwOt""""R,2n7===}C7!DDDDd"(qGn[RYDШ"7ykK{uk%a~:T@Vu,,;26qq%έޖΆ&LLd2>Qaߤ9-P ===x?oaS#,.%Q>}ww?E7^!G8˺r=nYMvB, Y'n;;=tֱ+\~t'ܙEthfٛ TSlZ9_V3<9!w6#8.#^:n)g,,c*W9?bO?Gpޖ+ar:g<#xw~7NŐ77h3E/1 h(""""{yfƻٳ=0 0,Q$fgi`"hAܐݏ?o㩂͍Q()ct&˭xoi_g>̣_o%O<O-Oz?{d6蝮;](O<-'ufz{[9yuZ׎%;IV?YgO<1scݵ;ܺA~Y)$6IDAT;'huK)iSM'ӟbnv5-Y$Ħ~癐L:nj&}o^wOr9JBŮ$'S͏t)O^KQum?;N2w.֦0?!DDDDvվIKM1onH'==uۊYǾ(oK^du^.W.IO_Ƕ o]][nz6cۆ՞kh*bۆu}zc{o+mX8ԻWgH7)6(ސwys]:ɞ[\d=G8˟~NxgƷS>,PVdůW.յVsd]!u==\_Zjkk8sj{pU?aou-ms/l|V( 0zzZoKVR.~Zj,β)d"獊$-N̞ßl"e9(dS1NmMgGc̣qG&ݒs"{-{ۗ?/P[dzRv;~.^Ð9AL.e}f-'>mOw7κ]]5?&I_.vez-9QsޟȁymG̦#(¾0IuP›zLbX6J9P^DICrvEBvʙ,w7~l?]6k\mc>jk'1<>`LNjs=75`|_"?=g'Y+_{,G"Ì?<-˲w1/wׯЎPG ON]H~']_4v9pם8g;6B/#ɪ/EWw? ڹй便],+-|K^ m:88{`|i-]]0ryܓ̌whlYsb3p l ;сI n5𡿴u7rL4'Au Jj{o=Ǯ̂1ϿWF0w0ljSo-""""Czg8r| &`QU|[?.8i5p"MjG/DXgT5lqEl'$1ǥcT`⢩(pɝֆnD3wC CwNOA_Mgzؓk'? =|qe,z6g'ޟJXOsrO0{l{ٽgzo}{GN|c _7S]HZ\lόj:ƏKXͿze6c[NRH\F 1Py&M_D!"""" &""""""bAEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(q3\vmC)S&:[|v':jXP,""""""bA%"""""""8XP,""""""bA%"""""""8XDG]]]\zk׮aD3 `ʔ)L:__߉GDDDDdL}v':IWWox衇塇g}FWW===DDD(yjWC@$@N4WNt8"""""cJv˵k&: 1Yd4졇z g JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,LtwĬu;8}񼔛F1!Q/  """"""Jff(CuSv%rYl} =|'|'||+lqP \R]'2Y(@Hfr O㊊|5$`.3Ã1DB8G8"tPs‚HabIz̸@nyLDԸf`ZEDDDAsO&η{ƹn#, a։9܆%Ol:C2j]OnVg6ȃmtft`=]ٿg{fOLEM擏c6_BL6lq#l>gh(A't!(,;&-5'8}0YᇁV@ W3u .*-l_aGc߽x{sfyP7-#HZFH~^\w$1͒Ea4V9 h9["y[0K)UB n=AO2eD1a]FLLD!""""2fgqYDDDDDDĂg JEDDDDDD,(qYdg}6aL> 0&: 1YdM2cBtuu=?%""""'%"clԩ|gttt<0-ϽԩS':1 D7]]]\zk׮aD3 `ʔ)L:__߉GDDDDdL)q"""""""8XP,""""""bA%"""""""8XP,""""""bA%"""""""8XP,""""""bgvD """"""w)SLtvOt"""""""w+uYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(q3顳.zzz&:L4 ___l6&ݝm_pv&M][X""""""2zzz2+"p7\O?pnRkz졇4͉ĹG-""""""I&ݵ])[YDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,Lt""""""w4r_ihvO;':֬ӱ_3Ot(c n=A\v >aܠ7zDqOygF<\.L2j g':{?}P5!9%""""""8wDpia)q1s?>YDDDDDDĂg JEDDDDDD,(qYDDDDDDĂg JEDDDDDD,(q3̞ܿ531hW:~k>+O]GwKwSfQ)~_P:;wca_XWǥP9JEDDDDDɔ_opYYGÿK֧YϧǤ|"ėb[K>_|5sO_|o;8?{WcwX ˿w&%˷PWmqaQZ wz?L;yvUǧ h-6@D6`>pc!JEDDDDDgL=EW̞<}yl,'i3kWC}OÿW}ǝ^jXXm.qgWrGo7)}뿫πt_HS)W~gdÕz)qGl:GsOE֟; 8ßNs7y+V~#z8|勤<PRQZ\c,-"""""2.V'0tsEO8pC~_fZ;|󭸰EXSqq:^}}ߣjE^?UC805ppppppp@sT^W TDa VU*t:E n7r3v5<<<^/677nTբjam pJ(QV3 ya0DfIENDB`django-import-export-4.0.9/docs/_static/images/export-button.png000066400000000000000000000137211463433610200250060ustar00rootroot00000000000000PNG  IHDR+v iCCPICC ProfileHTSϽ!B5&H'ZFHB%@##02X * bA@ 6,03oY'[;YfIl( M%pȇ؜L#44 6nh߲WpyP4O )G$UWfaE12 ·?cӜ0˟gr"˜SIlIӲ9|iVB@nii\#lOOKj&Hk|)Ϟe^LQ*{yR%s=EJ!^) CXɟ$_s2qse{Hq%Ŋc^wäL}%)x%=ق9L aJbIt~si9%ݛ'=;{~~1_33F:=)eyJ{RCT_i<3;\7 y J0:ǀ l ɚ>3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hbeXIfMM*i&P֠+ASCIIScreenshot 43 Screenshot 214 1  /IDATxgK9bNgD* @0gEsVĀDT11}vvgfvtWWWWuu!AS2xZ `P2 F|Ti0eƀAb `ˌTSA(Ca|\vM߿/ϟ?ϟ?˟?–I2d9sJ"E$>>^T"eʔ{ɋ/ӧOb'r… Kٲe}QpoRr> *HBBT\9f;w$.S/_^5k扌5S(֖-[ԩS[NoחN:EY`EY02 ׬WYfMRvc+ٳgcIfW6V* 2$`JFNzk" q{ rVyqkMpezʉ0,|f=)oyܩb莵5U8L‘,:9^XD %F &D .^sb%-9*UJH  E@MѢEC}f -%d1g|xUfݻwСCx2uTR3fӧOeҲeKu6![ng$nrTY6V޽jٳgK̙+^ ȗ/_dذajW;d66(+V'ϟ?}|Aay9œ/_>2eJ=z$˖-S2, RM[?ڬ&1cH޼yB{ԝI;w'NHݤIݻw2wD8}!dx=W,NT%fժU2m4ڵlذA:t YdI‹(P@uMΟ?NttE rݺurE^K:vPu׮]JlCz)˗/K*˝;?^fΜ) D@uDaÉ f PaÆbu5xb[h!ݻwW3JZUVjCYBѯ_?~\m[ڴi#7oV#FPr7o|R5o\)+WSYU=zЮ]TF+1h /!ޱ@5k֔ڵk z6m{4q$3pAG#Gȅ 1 GUu)υ18@Aba1%TNUW^7n… ͛7j[}rJ)]ɓxJ ҥKRqTbB+X,ZH &#G*%xu0KwOX;2ȟ?Rs(&N\MtB(:{ c}bf[;3vH0]bL>]E 2g+C!sζ7&;H3.GvZL( fҭxL" bn' jG{Dd &؉5J):PB[YA~#BL0а t;=FڸJNY k¥tJv2rZ^yn%juGS$0!Aj78iK#v)! NFvbڋHX{b$? |Q,N/k_"O f;ZM}Q,:1űN`'uA㖒Ne_)g鱬\|;!6rA,y` ^QPxR"9`,bj\[(`sn:R*" JB'ߛR%23%20see%20import_workflow.txt%0A%0Aparticipant%20Resource%0Aparticipant%20Field%0Aparticipant%20Widget%0Aparticipant%20tablib.Dataset%0A%0AResource-%3EResource%3A%22%22export(queryset%3DNone%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Resource%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22before_export(queryset%3DNone%2C%20%5C*%5C*kwargs)%22%22%0A%0Anote%20over%20Resource%3A%20A%20Queryset%20instance%20can%20be%20passed%20into%20export().%5CnIf%20no%20Queryset%20is%20passed%2C%20get_queryset()%20is%20called.%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22get_queryset()%22%22%0Aactivate%20Resource%20%23lightblue%0AResource%3C--Resource%3A%22%22Queryset%22%22%0Adeactivate%20Resource%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22filter_export(queryset%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Resource%20%23lightblue%0AResource%3C--Resource%3A%22%22Queryset%22%22%0Adeactivate%20Resource%0A%0Aloop%20%23pink%20each%20row%20in%20Queryset%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22export_resource(instance)%22%22%0Aactivate%20Resource%20%23lightblue%0A%0Aloop%20%23green%20each%20field%20in%20export%20field%20list%0AResource-%3EResource%3A%22%22export_field(field%2C%20instance)%22%22%0Aactivate%20Resource%20%23lightpink%0AResource-%3EField%3A%22%22export(instance)%22%22%0Aactivate%20Field%20%23lightblue%0Anote%20over%20Field%3A%20An%20optional%20callable%20can%20be%20defined%20instead%20of%20export().%5Cn%20See%20'dehydrate'%20methods%20in%20docs.%0AField-%3EField%3A%22%22get_value(instance)%22%22%0Aactivate%20Field%20%23lightpink%0Anote%20over%20Field%3A%20Get%20the%20field's%20value%20from%20the%20instance.%0AField%3C--Field%3A%22%22%3C%3Cvalue%3E%3E%22%22%0AField-%3EWidget%3A%22%22render(value)%22%22%0Aactivate%20Widget%0Anote%20over%20Widget%3A%20Format%20field%20value%20into%20a%5Cnstring%20or%20value%20as%20required.%0AField%3C--Widget%3A%22%22%3C%3Cvalue%3E%3E%0Adeactivate%20Widget%0Adeactivate%20Field%0AResource%3C--Field%3A%22%22%3C%3Cvalue%3E%3E%22%22%0Adeactivate%20Field%0Adeactivate%20Resource%0Aend%0Adeactivate%20Resource%0A%0AResource-%3Etablib.Dataset%3A%22%22append()%22%22%0Aend%0A%0AResource%3C--Resource%3A%22%22%3C%3CDataset%3E%3E%22%22%0Adeactivate%20Resource%0A%0A%0AResourceFieldWidgettablib.Datasetexport(queryset=None, **kwargs)before_export(queryset=None, **kwargs)A Queryset instance can be passed into export().If no Queryset is passed, get_queryset() is called.get_queryset()Querysetfilter_export(queryset, **kwargs)Querysetexport_resource(instance)export_field(field, instance)export(instance)An optional callable can be defined instead of export(). See 'dehydrate' methods in docs.get_value(instance)Get the field's value from the instance.<<value>>render(value)Format field value into astring or value as required.<<value>><<value>>append()<<Dataset>>loop[each row in Queryset]loop[each field in export field list]django-import-export-4.0.9/docs/_static/images/import-button.png000066400000000000000000000136371463433610200250050ustar00rootroot00000000000000PNG  IHDR,+ iCCPICC ProfileHTSϽ!B5&H'ZFHB%@##02X * bA@ 6,03oY'[;YfIl( M%pȇ؜L#44 6nh߲WpyP4O )G$UWfaE12 ·?cӜ0˟gr"˜SIlIӲ9|iVB@nii\#lOOKj&Hk|)Ϟe^LQ*{yR%s=EJ!^) CXɟ$_s2qse{Hq%Ŋc^wäL}%)x%=ق9L aJbIt~si9%ݛ'=;{~~1_33F:=)eyJ{RCT_i<3;\7 y J0:ǀ l ɚ>3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hbeXIfMM*i&PҠ,ASCIIScreenshot\a 44 Screenshot 210 1 IDATxg9gQψ"*f#b"~Q?bń09{^֙۹mmOOuWWWuu%7%E &TXVDU@UX"9`HhXEs"VVadE P*ݻ'W\wӧOǏ/3c,Y$o޼RdIILL5jH Ν;3سs0'$$H|DRbT7 iqիrAyLR$%%IcX8p@nݺs]?T\YZn'ꊴi&9qğ3qqңG0J1H1UF^ͧ"}YVZiXAIܹX+WZ+2uo߾͛:KYR%Dd޾}[-Zz?k,ɞ=z/d'9r:l 1?b,^8<;3ؚb2dTZ55jT;ٹs9sFh5?=x@.]*?ɾ2oƍ *6aߵk.d}v9v옊1޼y#sIVr&%#:U$n,PEjѢ>|8TUǎCiL>]svӧO9{)ѫW/%5kv2`(;v(qگ_?߿,[L,Y,Jg̘!L<ݔ0Ƃ)j֬:ułhV]vҷo_5!XY֬Y^zҡC1bR]ǏJ)=2(:u7*ѣGK9dܹsm۶JAY 5vX]6(%[~b%V͛)Vɓ'%WO\Y9,9s~t|{;yt:%ewsץZj.K.JPzՏ Ო:u*+.NV$W\U>hQd|kJXj~޽2~xu,R=/_|nmp(_͚5cΝN:Rxqə3lݺUQ`$װaCe" , iLζp᰼n4tP={dݡ9HΊSf| VKNlpqSfΜ)]vU#&-n J$MNSlٲY$Co2e7 k3fܥHD=(i ϖ-ZE(N(nScM%l޽ë'H1Ճ [FlP7"C}33u9W IT=wn$L-[j||M6 Y6n^SQ?}Chx֝Wx0aW}Oq.,7ZtTT!QV1rP,}rr`ͧ׭['lkժ947 Vh/^TAcBt +IKV֪lٲו0V"L/_:.EpP6mHoy::quyS̏VGmC}&Hᮁɓj4D09!ly3;p({";h+.Gp²zj -; B֤ya|6Rzv;Ѻ1cԩSU;8SY!"L.p d+z-b2 ᫳*J:wd4}3MCzB, /yoyH<v4J&5EyXuӋ0ZvT:şt!/y-?rHǭD(:bR.A pEBwh?=X,##= \h+;x%'i>^Jq__( sxT&M33L& `$sB5 +yȫH4̡ L7^hX! D~ VdhVw\N8;mbD'yZceAdr\%23%20sequencediagram.org%0A%0Aparticipant%20Resource%0Aparticipant%20Result%0Aparticipant%20RowResult%0Aparticipant%20InstanceLoader%0Aparticipant%20Field%0Aparticipant%20Widget%0A%0AResource-%3EResource%3A%22%22import_data(data%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Resource%0AResource-%3EResult%3A%22%22__init__()%22%22%0Aactivate%20Result%0AResource%3C--Result%3A%22%22Result%22%22%0Adeactivate%20Result%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22before_import(dataset%2C%20%5C*%5C*kwargs)%22%22%0A%0Aloop%20%23pink%20each%20row%20in%20dataset%0AResource-%3EResource%3A%22%22import_row(row%2C%20instance_loader%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Resource%20%23lightblue%0AResource-%3ERowResult%3A%22%22__init__()%22%22%0Aactivate%20RowResult%0AResource%3C--RowResult%3A%22%22RowResult%22%22%0Adeactivate%20RowResult%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22before_import_row(row%2C%20%5C*%5C*kwargs)%22%22%0A%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22get_or_init_instance(instance_loader%2C%20%5Cn%20%20%20%20row)%22%22%0Aactivate%20Resource%20%23lightgrey%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22get_instance(instance_loader%2C%20row)%22%22%0Aactivate%20Resource%20%23lightgreen%0AResource-%3EInstanceLoader%3A%22%22get_instance(row)%22%22%0Aactivate%20InstanceLoader%0Anote%20over%20InstanceLoader%3A%20Existing%20Instance%20is%20returned%20if%20exists%2C%5Cn%20otherwise%20a%20new%20Instance%20is%20created.%0A%0AResource%3C--InstanceLoader%3A%22%22Instance%22%22%0Adeactivate%20InstanceLoader%0AResource--%3EResource%3A%22%22Instance%22%22%0Adeactivate%20Resource%0AResource--%3EResource%3A%22%22Instance%2C%20bool%22%22%0Adeactivate%20Resource%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22after_init_instance(instance%2C%20new%2C%20row%20%5Cn%20%20%20%5C*%5C*kwargs)%22%22%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22for_delete(row%2C%20instance)%22%22%0Aactivate%20Resource%20%23lightgrey%0Anote%20over%20Resource%3A%20If%20True%2C%20row%20is%20deleted.%0AResource--%3EResource%3A%22%22bool%22%22%0A%0Adeactivate%20Resource%0A%0AResource-%3EResource%3A%22%22import_instance(instance%2C%20row%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Resource%20%23lightgrey%0A%0Aloop%20%23green%20each%20field%20in%20row%0AResource-%3EField%3A%22%22save(instance%2C%20row%2C%20is_m2m%2C%20%5C*%5C*kwargs)%22%22%0Anote%20over%20Field%3A%20save%20logic%20determines%20the%20correct%20value%5Cnand%20sets%20attribute%20on%20instance.%0AField-%3EField%3A%22%22clean(row%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Field%0AField-%3EWidget%3A%22%22clean(value%2C%20row%2C%20%5C*%5C*kwargs)%22%22%0Aactivate%20Widget%0AField%3C--Widget%3A%22%22value%22%22%0Adeactivate%20Widget%0Adeactivate%20Field%0Aend%0A%0Adeactivate%20Resource%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22skip_row(instance%2C%20original%2C%20row%2C%20%5Cn%20%20%20%20import_validation_errors)%22%22%0Aactivate%20Resource%20%23lightgrey%0Anote%20over%20Resource%3A%20If%20True%2C%20row%20is%20skipped.%0AResource--%3EResource%3A%22%22bool%22%22%0Adeactivate%20Resource%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22validate_instance(instance%2C%20%5Cn%20%20%20import_validation_errors)%22%22%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22save_instance(instance%2C%20row%2C%20new%2C%20%5Cn%20%20%20%20%5C*%5C*kwargs)%22%22%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22save_m2m(instance%2C%20row%2C%20%5C*%5C*kwargs)%22%22%0A%0AResource-%3EResource%3A%3Cbackground%3A%23yellow%3E%22%22after_import_row(row%2C%20row_result%2C%20%5Cn%20%20%20%20%5C*%5C*kwargs)%22%22%0A%0A%0AResource--%3EResource%3A%22%22RowResult%22%22%0Adeactivate%20Resource%0Aend%0A%0AResource%3C--Resource%3A%22%22Result%22%22%0Adeactivate%20Resource%0AResourceResultRowResultInstanceLoaderFieldWidgetimport_data(data, **kwargs)__init__()Resultbefore_import(dataset, **kwargs)import_row(row, instance_loader, **kwargs)__init__()RowResultbefore_import_row(row, **kwargs)get_or_init_instance(instance_loader,     row)get_instance(instance_loader, row)get_instance(row)Existing Instance is returned if exists, otherwise a new Instance is created.InstanceInstanceInstance, boolafter_init_instance(instance, new, row    **kwargs)for_delete(row, instance)If True, row is deleted.boolimport_instance(instance, row, **kwargs)save(instance, row, is_m2m, **kwargs)save logic determines the correct valueand sets attribute on instance.clean(row, **kwargs)clean(value, row, **kwargs)valueskip_row(instance, original, row,     import_validation_errors)If True, row is skipped.boolvalidate_instance(instance,    import_validation_errors)save_instance(instance, row, new,     **kwargs)save_m2m(instance, row, **kwargs)after_import_row(row, row_result,     **kwargs)RowResultResultloop[each row in dataset]loop[each field in row]django-import-export-4.0.9/docs/_static/images/non-field-specific-validation-error.png000066400000000000000000000720761463433610200311010ustar00rootroot00000000000000PNG  IHDR[ iCCPICC ProfileHTSϽ!B5&H'ZFHB%@##02X * bA@ 6,03oY'[;YfIl( M%pȇ؜L#44 6nh߲WpyP4O )G$UWfaE12 ·?cӜ0˟gr"˜SIlIӲ9|iVB@nii\#lOOKj&Hk|)Ϟe^LQ*{yR%s=EJ!^) CXɟ$_s2qse{Hq%Ŋc^wäL}%)x%=ق9L aJbIt~si9%ݛ'=;{~~1_33F:=)eyJ{RCT_i<3;\7 y J0:ǀ l ɚ>3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hVeXIfMM*iDASCIIScreenshotNiTXtXML:com.adobe.xmp 200 903 Screenshot ͛@IDATxxFoӤM4mm}eff I1 ~sx2:C#FW6$" " " " " " @F{e^D@D@D@D@D@D r " " " " " "`RU D@D@D@D@D@D@CU)" " " " " " 9,j 4Xt{=k?<?Ficǎ-:|N")SsVv'OK7C=dwuM4)ozj~fHD@D@D@D@D͋ps۷~ߖ]vY[lrntR3(.W]uU.ߚ5kN;A9Cã &GmW\q=6<؃>{m6u]g/|~+b'tRHK/d / ׽{5X#5y 5M(@᧟~jGqD_|1DsA>SdrСCssi5i$-Zzgz}Qv޽>Q0>}\Ǎg7_Ay,{|kV'z!PrxgpYg 3p~pYw)o|=ƽ͛ۊ+h[n-_LQzet-6b K/mO0{F^l}]q믁o e[o՞|܃c=6vnS3J/{w{7B= B9ny^/;O<Zh:b[(wyǮ6(OXwy6\sYUl. @(J9l׮].9>;V "!}0tyW?v)u\sM%(tÏGyZnmGu1+B?wol7߄kDߤB:sn9An3L/"~5(%(~gϞvwەW^Ecsֽ)S 5," \ ҷ~۞}٠x‹|jl# n_pa%.s'!|BBi/>x;v ?tv(u/Bn=e?H$%^߬n?c.Jʈ?րV҉lvj+RHw=ܰ ʉwqz3W o0^zin7p#G[n16:q!":CBP\1$|3WPj wiŏMIbLټeave7AE>p䟧 P0[ #9f7W]uUó?fP\Pp9e6ke (?_|qp/½C=%5Cfr\XSO#k\|M#(P;(1Dr%e}$4QҎpKrl{ۅӤP.ębZ,rp J0" #(n(\cMPgMdE?6qs[6ީĹ3?(`p4w\X:hРMgiG3e5(m=EPy9oVԴ:&SR@-G_ pfR5U%3#tL"/>U ʼXsFZ6tӠؠ̡+(4%c4xKy (>4!̪"(l^IwilN 3됍ϕ  /3q(\x•~탉0ʍo S)<(N LYoYLVANʚ{nH(2Og]l~';W:;C&tCD@D@D@D@JDCfD0EĤAqb 3m0Ƭϖ5lj7$0y^b L4^H<90eN.WޘQd]^w-EIOX'3](8߽u֏ɴqzŕlC/fq$nfPP(CMy17ć0(fFmڴ &ALUC>c (=mV~=v gmц=s/4k s߿*ڮOJR(Z9\ve-\`F i6lwy6pRQG_.wy>1ϡ(/ʾ×^zᄁ9tP{ꩧlܸqEgy& $]tEbX{ZJVie\˵Lj;޳xy'VYmai/O>dx'{lj> (Z9իO#}l9޽{3{}76`2e][[la]v?>S#?HmreLC ~ iB`6(.wqvaVV]:餓UN;doF(x^r%6i$~_ux4{;yw.'N GmwQ|wͻJNFz)Sw/]q曡 N8y\VaA~(cdžh ={CORyoIw)+cմ,}O+ '䗶 xgCMxŔ%R{y 'z8wM.ƅo&RX6JݦJy&Pa@e%g xhcc&2PyR~a;蠃B9wq;K^G_<ﻷ_7tS(:}Yg7ޝ#6H!8?'E+iNigx|WSws :tu]O>jczʕˋ/8|?>@~7|!6mڄڟ\ҹF1r-#i _dEGEEtx#l*B:u" 8y[fe?:3 s̑{L6dБs ϲXf#Lf- S:Y~sO??(Ә36sۄ r ni(~e %-s9FGIS(ӓ;/KR/\rICѡ #(7ˍ|g%^Ñ1zpƨN&^-\믿C=sF=9~M6 '^8tq:.NZli;w6 pfzG'c=wޠ\JwsO>9(޽BJ.'^W{uQGsOeӝq!CzH\q9SûR@γޥuZE %͊6J!#b?.Y?lB߆ 3Ǐ.V{XދP'ne}҆?-J++xO(TP\2DI=Eh?1 .JN3+ k>škCfmBw׮]{錧#%!1:K[7oV-&=wtPFXb*_= E@DNDd]vfۨYVDavmEH::pŽfv½Xsc^) 2RT*6|A׸=} B8w_Iu$%:[Q^)!h$5^Yԙ ׅҁYFEՊH=vlM 7PjUDLV=#3\9+G4\\?pfqCGAUHS(@P?)S!f½!CL{aO:_.Eu\sͿN?qUr]P"%#wZo*H ;V4Vԑ dQ D S="Q,i@}fMu4hT)O)^lv%+DG~vPѾG y,,RCxGJ@kXۿw)x(/Y8-uYzO/YvY?L\'&f%~ xݤݦF?!xys/V;?x| {ӆyg"9O4(>wVhc펗Wde˹D@U^i\,+Q{7D E}3Ҁ)'瘲!2b}.Z \pbYä>acBZI#Q#硚' ,@B -f^{+f(CLYg0 f֭39ycJ3YI{6>&e KBpb9 *GfIgغ/<#z96~MOfً w͏㳝9If q3cI،aP &f̪3B}$+8G)^+]߬bV)GI0;'n f *W\qlf`bޥbkZn'xeE'똯,)d#;v A]u1Y<8/ L˃g~N!K-T8/Ooыg˅*/&m,`逸X;ſ|aD;E· }}ͣJf!7l z?[G+E+4|41UCX?_<މtݻ"` J =o@gZk;7Č@$:SH&MwOW4L~{7y+D8cf.1?$-.#iN*(=r?']bEgsY&Iֻɻa.]ʟ󸋧kұJ֙x'4#]!4I~ULthPYzBϊM!}KM7HrjY]{B~eWl{?'/KǬvS}7(R(  {1Sʣ'70-|eӾ}M˿w9_*/$˞{HMSBuCH*iΙ4'a_Xlj駟W.}t(" uIhfg 3)n}.3kt$~0ƺ}ǹ#Vܱv?yXPRY8 ?xŅƙQT>CFQtO'gvbEdk3" 2rJÅ4t??Xb:1ʬ3BY~i(Bװ`rHdFgY/&AJ)/0SP[.>WEP4QF1&oCYRBt{ ^>(JK5yaA;CDI8_t>YzYFܱ&<,/y#+,fKݕ]2v^H нm6[5ZIWIwYk U6NByϒ]jVQx]DZu* L+= aq.OVyJgu&,޷юSwQ6|gm` nnqz<~E@D>hWT hvb6&̶`RA$ŒofwD l14tAFAu3O<1<\ w(D~BG>fh $,6 i\Z{ޡcYKHt`3z&܏ 3EVdb6[DÇ;+IIȇ%3|R(T>C6GKt0Eesމ ra=LQ..J?"MzPx4ŅatlŸ_?g3_;E6 \6ш|Gމ[o51J3oXծ$5μk@ 1%*3: Щ3:~y#?6? oR%66"7N~cUˢPXiϲ?~i2gV;#*ioxݦg} ndc|70-|Pj|@vӶg~dW2Ϊ;= ,. f+(@I↾f[ioWqk\6 ~u&м$ _o,E5fB|4QV!+ f*9+MCENĈ5_VIG4xϙ M>Ɲ @A]“GPrl~X1IGw &s>YYvntI,G|x|=/䎺&?.a@vE<.?yw]y ®y(3΋k곇M0bv,.%33ck~/#tyR0 +8lss`&ՁUf(tv5K[=ǥPYӓՎ0Ȁ$P" ,xs~+Vޓ?U߅ɸrH^/1S= Ygn=PgQi;{ R'~]އhc0(" II"Ǝi 4Ig.n>O$%ǯ&ŅI'qV<ܴsLtɏ*R Aɷ>ߴ4|CN>w~?+Gf3i,)>e%>tT:PW`fiD:w:i,u3:XɰvݢD(txy2`äzt4M-ib,B^߯NYs^=ye2  sŬ,W\d}~iB"2HL>S&ar.u5Ť+b‘( (_84L|-Ky\UQhѰW )OV: mrB4V!iq|NV>S}:°furҗU)tŦw+Kϐd]zB3if?P*|TSYZ:&'-fI:eQLq7).de<. IUY<@[xᅃrt9V[mekV.R$a^z駟wM6j٦nx≕*%yg}k׮m7pQHǎy7\q'suɶv[[|ý7|zsּyI/O^cpQV|wٖ\rIr-I&`Ww9qG믿~.*g~ۜsΙᇇ?ڵkW/b{2,;[h Ƈwvm/q;3lvZN8|yoؗ_~ipr}彽/oŐ6`%:Sw-:<ڶmk~{jR*u]gkEWuyLe l:%w41''[֭CK;c3+/VOߏM6V^yp&@U7V^G۶bp^v }C|{v)~wN;ͺtb~z6S?L>A'k1{{2gѾJJ0'qЮh' 7gy[d[BI^ئO~B{Mv8^=_gϞǷN;T;~x}ٻ뗹#c yr>y?=3fzX0n9/*SO%7Ӟ|>}VSɰp_[y"l:GIkik2Yv%oOΩ7|92I?>㬳ΚEuB}}_`E?"  \wŽ?+7>ߔ;3d%d޸|EQ駟€[{۬0`C{B?~}B.!,;]w].ߠRBRI2%|xZqo~|<8H]ȲyYm|0̠REsB~M ݢo.,Ŕ)S̿}xOˣ1k >?g}opn 1gȳ/ |Z5_(A2b4/2rQG4[ sF?r4\%tfKƱ2˄S>̶:>JGeJhᖑ/<6lJc }%J1ĕbŕ^z)t|xCS AȪ( :!)\\d*Y2oMB:V 33皔{zwHw0X1״|/2Q(\I  /X`IFs:OKk joJ94;ߕW^i?.H{Hǎ~٪H)R>{ܴU'K|ЧK  B10HXHOD4i kp#LI~Y+Ό(gw*O$,뛗&J]8묳'͂ $I?ս}3PGG`V $[oĿ:iyt=+,fWg`'-XM#RH(/as[4BBipStPQ5D#+:.묳NP* ,@)7 !yO9Ab׾ 樌M{|>lA{iL("7.]tQJ ##tGI:Y>#Vq ?7af4r\ *R $<y(Q)8 ǕCPiVXa0J’T 5q5D)OME{\E?~wX$ꖇ<ca@vkxԊr(4 /0yšӏ t(!|P y:kqr|< aʂ6kxG6ї I3V_ǬxE9>6We++̴"98&mh^3f5K%f1xJ} x}gF$M|_}LFw07a=TE9,Ė4"{gˎbf/ib˿*TM:exQή1=6i#aW7/Gp$.|\cbÇ!y%O;3/7k1 ^tiT|E_m xXqڌs&Fe 3 J ͗O5u{4I+x=O9+kQsR #s?,ޥR1o((|4x_=m_\#åe6 aYU:?|7ڟ|a<>ڰ!ZW(/hu0uQԵw0a׫͞<:ogU%,1ʮX16t<G1}6m}u08 B1~=_>2mf,{bReLT!ܧ_5YGYoPmQc~Jwb-L=NC`QWcdǚ #(1W_@d]Y|_SlkrN@1l(LKL^SwFG,ze-#yN[B')o:L3BI G4x)?FyA dw?1+@HQE!x\“B~Q©qqF{iΏX1le{^\kw]9.'3tyoikL_d@Li0-K<[[q.Q.``ݫ){n "quq=eiM|68 GhX;_gc![jhP6lAe߶*w.W4N,2;oN~|ϑBl| L׊1{=(ǘ%Y'w_c<|a&eq?b&K]䩘ojiB1L~aRopP,8Bu &1,Ec9]J#}Nv rYP|7qɺ%OW)}mFlg)INM'U~DʁF-HvċI.cޘFnN{Em ڈTa6fL+V>Lؓ I7@uaPfPV}C櫴1NmUNalK'IDATlMd-S0b$=:ˤ.D:8SiRҁ>E{^竧%9L^muJWQ+tR KDXE`*eDUCiR|R䳱Qr1c\B)_g6(q˛8>cyckG3ՑN\u믿MB -Tgю?>s9wvmY^luםM &TrҡC[l϶%X6|Jϓ/n.ڵkkS矶+:uѮ6/nm۶=oڷoouرJ+9]7}]3f6,ĞN;7>n?Jֳg7g) SN9%(Gu. o|Wxncw5mzM:(n4Ћ'UW]e\qun:k8wuW}/Jϊ8 ųu9(^zɠӔ%YqO<9+=Z'OYg裏‘vO^zɖ[n9短M6vpZme1Ko9 HQʿ#Gڶntyҷop-y0Ǡyj^JuKD@D "Pv!V2ХÊkZKnmLOaCc2oP-FiJ/]weݻw/EP0]~jY.]^JuKD@D "P5FC=.`3zunla3CvJ(O%vDg5*$}tt0*N'FƟyx1B蠠"w}}a*:Fˆ5 ?㏇1Xul:th߀ep+$Q҆j\:w\?+y仟*= ]U<% io4_̅ +RݟY&<eĈAy9fUAaB0r֭[8ͧŅ|%g~WG֬YkF O0S†P(3ϻsk\=h'] 4 2dU7RYCc`[o5(XDǬ";c 3Cx9TJyg} y gqEw0Z80`@P~)ս|w?_}-UzN +ޯyJJBUސicZ鸰69}atRӹn=`T892L/3&dvM6)h&tpN;~% #<2}1}l o|w!4183*]3+rW:Y嘷J"~鵌ҳAfczm>$cABkݿϺlY$Lp?󽣘2;;笧mv{/y仟jc~t"Et84ӫR ;q3ls}ID@DGIdڸ`be0z /~*XdBhtSR0D@D@%w}[y?k6nߥ0Obn0vtlؐ@hfBl[TK9ğ `tAْK.`C((lЀb۫W/۷oQTuOY14F~Bf 㫢<M+~& `~MnscEiwAD@L*Uُ<ԌH9t6ꓷm_bdmMEe^:yND@jPE@D@D@D)1(=;R뎵b'P?h(" " " " " "PVUq(1" " " " " "P?w*" " " " " eE@aY#" " " " " C@apW" " " " " "PVUq(1" " " " " "P?w*" " " " " eEy10`@1 2Jf6g.9ND@D@D!֭[j2RyN  ,Jf6g/=PD@D@DYiC-9[D@D@D@D@D@JH@a a*(h6ԒSE@D@D@D@D@DJ@aC-9[D@D@D@D@D@JH@a a*(h6ԒSE@D@D@D@D@DJ@a\ V1uJXwQM;V"<*&M*yصnE@D@D@D@D4xfh&f/_l9}BcsͲ:6ۦ;{c܆awִUkbu},?8*&O9?ÚlyA)눳µG62[v: pz{y*9.zsM_cKP'ﱑ5iZ=_eW.\TTЗa/DiCk϶ÇXu-Zڐg{ in֦]uy1$+&QD@D@D@D@DrXW[>+j숷_ =;.z+R?<[p0sb< ҫX{7m6|kFkI>t\aMa60MF5oCd.Bpnu." " " " 83Y#hgbŔ$R*I"Sn7"vpw6஫RMJs1_~n13O9y$}ߢV= kGc'DhS~NS dݥKEſ ,Z$2gE4M7`f$?a6i3dW JS?.YOi*aO ]XF1i sXdNqskÍi'/Pw鮜LcrUTT)7޴^x1C# _f)}1&NEvikÆ܈@ мQr&䖫R9} 96[q͗ Z_v|NtC۶vgI?r/G" " " " "4;#Ɛ|y{|21žz=k;[gߚ56)կڅ?h}}ֶu+{\Ͼ]vOؗ>ݺl;yx׿#ٮnsvɣoeO󮭺آ65EW;M~(]Y6!Rv9Hhs}q>זo+ϑ xhv-:wk;kl##%uVʇ@^'1J42+-AA?v֞۹m]!Tc8?2Y+϶^}Uí[NvUW-8뮷}6Ȗ_ppyQ#9a[;09gv7بqC÷U.S* sֵYVK:E [R{I{O4Nl6_VYtg׮I=,I\eECX92 /|gmM671ZH9I;dn}Pc=v Oygyg[7D@D@D@D@D1rXRGZt,[ofᄋfhnۣaRZ@"/mjr˅Gnj>tUv:K/dqhbYf ׎i8~/;ql^=mŅö2J3M`fcv>+R7kV ьQx?-ҧϿD3u#K.@۷ihnݼQ4k*+ l>_6GlU`—&( e/XPD[ktY4'" " " " vnr>N`#"o9;b֧~1E{9_drkd̕0%#{l}ݶDžٺOhm[Y;kΉj}49leU,V淰䖵.ڷ#J 'LKE@D@D@D@D@&TCs64(]\h\\24?MiBO.΄FRKњFG%jsoXmrf0)[D9 J{ȴe֬YS6zTۘXAiC:pΠ=f`ꎙm?Ѭ_ocΦ\<~q;Z+?TM]?_{=$W{G]5ZOwoyG6mhæ0.KN͵-6a`!y<Ãn}6i&w4c"x壏٠ԓg†3e6;2 ?[0&941.Mv]&(ăi-3xo0lT&Z qhs {)HD@D@D@D@D@{LgIAR]vcG;rUaM݀H< </Mu˖Q8\d7G;1.(.&^vgn.8wdUv3LK-enYpD|;rc5=ϼN5!!k)t/ .>pp?A,$7(G yt.{G{FiO۠k]@"$ <Ӹo~$9ɬG7ڵ$pK`siasobnp)a1=gl ?w?.JW͂i>{)o_|\]xW@zU+ؔZ|6-ߥKU@UV1Pf47|!.E+bH,vb9k>!vu?dԟ{ Ő[r'" " " "H9l xTd;kwRmYPE@D@D@D@DArؠ$v=OfS(ڭ AI& 尾K@@rX$@}rX%E@D@D@D@D@D H9,BPD@D@D@D@D@D H9P" " " " " "PA!( " " " " " "Pw (~(RˠoR)ePJ7)]_D@D@D@D@D@ʀ2(%AD@D@D@D@D@ꛀ./" " " " " e@@a " " " " " M@a}2 AI& 尾K@@rX$@}rX%E@D@D@D@D@D 4 ҡ$##|E-" " " " " B@a!" " " " " H@a=W" " " " " "P.KI(" " " " " "P#|E-" " " " " B@a!" " " " " HsLP&/IENDB`django-import-export-4.0.9/docs/_static/images/screenshots/000077500000000000000000000000001463433610200240025ustar00rootroot00000000000000django-import-export-4.0.9/docs/_static/images/screenshots/confirm-import.png000066400000000000000000015460761463433610200275000ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT( Hx@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u M웙)(ۿWVڵZTR"hQiUŒ}9;30{,sU|f7jX7oܲ)kL[CoK֫Jۙ|t[]NrxYoB(k;u{Fh~v,szaݲί.,Ya܍2vJQU<6]ѕu\7RN[@5Ftu-=v}AwMK=N`RlէY$ox襦>mowtA*~rE?rvbGhP Ssz[,G哷zVEKN#(z:م*RɌrs>eջ#7^* VZ6,Se6wЛ:װkrEA>u:s@޹QQ9H@8`r&V?q|1]?Yߙ*n?W ף6?j7П܇L#      p( R yqNHU=^UQRk;NsA a՛T A쒮@TXTo3ogɔoubAupC/O0xaUoeHDMUAT@#붋G+TוGܲX_W؟bS}[Q`OoWUJR+<W&K<'ZVP׽}-j` tBWoסmG&6ـ>ku^"ߪsf>Ae_@zKˍꡄS[xsʔ#K J[o*!ڸ'X zGU >@@@@@@CMcx{;d P;|z!௢oNzI"P7Lk ut98Y#tuM L]Yff@깪k7&uŋ!MOd8ԛDzBMUE{wiݸ >G?HmbGHPmly渌va|[F9U;̎+(:OXI^eGfq@˙!j%]{)|le%slrۍ$ 0{Kn@\VsW Y?6V@TEZ#/~]T%D]_*ߏ}'      @Z3שzv./]W+펉w.8y!@i&#}<3nQ,A3NlqVߞ)ϑًWI^~9wWc0=o#p;[|Ճzv{aaW^Wl)\6DFN-㲤ǹEKߖVANː'1>o&Mbcqi7+ڜlY\yE5lej]>6GꝙWD+[U(?SU*ykBdů]Eq #BTB6^ 9S /u&[5 W>&1GY7`.WN*JPՇosmqgUzpUBԵqO*Uۮߏ}'       P[qQqcb?Uط?Gv/|XJDXH@ |eWQtJ9jؚލĭWHLDQsgdYuffIk꿣^ #>"PY*YSAu^»/ Cٽ.}?NLYT?^4sne9_Dth QUC:]fP3yY0)ߧTecTpk++wS \7}|(Y٥h ~Fhտ|z@mq 1+smg˅mKGAx ʂם)Tc`C4͕nʃ ;QumK9ʮߠ~?b?Fg /       @m 4o@CXUp;!&RbI8*gK?u6wuaY=Vax>b%,?u|5SsJQ]Wb?9('\졋7@@@@@@@Е]&͕}sQ=[?4>U@YA#U@Vw $}OEɹ'N--i˼ek$irٺV{W0>ZQ^qn W5.[T@%2iNOTU}Vq;:— dO9ASG쒈u7h3RU&Uy|6?Rf*:km-U:eHƅuPjQ^P]oCGږn˪p5ɕG.MDꁃ%W22*ȣJ_KhP=[ \CJT., w/ȋ7l7젺>]Ew GJ 1uk@Au<}.i[<j+:\v؎m-TEPwQ~S8 uۋU&^X @&g[ף'' SeZY=qiSڪ{= zX GU}h4          wGnV@P=P<ݯ&>^*Ut/XbT mj_K֕ό61cy8u!ơ*z_)S.Tդup+O-քݬ׬mJnfAowtGKܻ \_r~_Ҳ2K1H@8`_)C.iG}7Y9od}!uВLкH{= zX!Gu}'         "vBӶ+ lm0rHm$D|{TrT-!sW.5l &r䲓٭ADǬ_)Th^nO^s1Vocvq|FFy6qI2ڑ'&'JvU[5ʑW]!ߴv!          @ Fz bے& N͈+m".<_^ykMcuTxe=ކ e~           P:>Fܑ^qui5z`60*Om4( ]= wVo;+8wQAY+CeY%y%ӣCat\::Ęt[ @@@@@@@@@@Z 9+#v'kjxiS9Bb\w8-t9|ʝrLb\^5-NQH#          @eQ2Qî >V&w֗Tߖg?}փ=M[^ԝ0xnV^l @@@@@@@@@@@ 80=xbSAuzpػdP=uC[n _ulҦI*9|eY]W]!          Pb#dWS ٻe}}$+&;v; q*~D\Dx 6"+/Y9|90@@@@@@@@@@z#w[N'Azs9Q@@@@@@@@@@@ EE/otQQFE$f@@@@@@@@@@@z"- UQ+ Փ4@@@@@@@@@@@jX &"L,#TwĮJTad6          'p=o#bw9D קsE@@@@@@@@@@jZ .*BfzWnJ42C@@@@@@@@@@꓀+2D. קsE@@@@@@@@@@jZ 62Lf#(*>}5#           P?tEYsG[՝.JTWD@@@@@@@@@@QQ}qExTm6* k6           ]Q}хAuC |TTD@@@@@@@@@@T;Zܑq⣢f           @WTwGxtʩ>Uau            EE/sG'*Dl632@@@@@@@@@@@/+Ϛ;Jʨnw:fQQJ B@@@@@@@@@@0 .BP{@@@@@@@@@@@:>kHDa]sEᾪo           Y 6*\f-8l #          g-p8NҍՕe<           POb$9}x#BV}>^@@@@@@@@@@@03ˮi#^#l@@@@@@@@@@1$H8\N)[.' @@@@@@@@@@@tE$D|>A+2@@@@@@@@@@@ UQ=\]mM&@@@@@@@@@@@03ۦT           Eq1.=I\;^$           @tP=9uxCbkץJ[c           @Mm@@@@@@@@@@@|1Sn9uJzu<          {]Q=EUTwGtTw           @5bdm FmTT(@@@@@@@@@@@z.:- UQv]            PEhIɜ)TwĮJT"&@@@@@@@@@@@Dcc$%}#bw9D sc           T] !.FӓۡR>Ud$           @ Wd8]vTT@@@@@@@@@@@@| (*]no           Y@ՓUEu ;]NR'^@@@@@@@@@@@|ldWGNUQfzU           Pb$%=0rHv@@@@@@@@@@@ ǪzZ#=p;GEꣲ@@@@@@@@@@@> A TS[.Tau            $ڴ .vz@@@@@@@@@@@ :"]D~>@@@@@@@@@@@A$qGzv#"@8qz+7#         uAg$+-\F qƐ ˾ٕo''{ouaJСfZ\.:4n/uOeLK)Y(3:(gwK":#P3_;T /@&~Q$^g.A?R~@_833';          p( i?'*Tv]œc&^AL|0 5._,&ko29(³fM>[wk+Y{˘(-P2[NvMbGɩ'1{ [[vg+Pw/8ݙgu8@@@@@@@@@!TOQ]q:z*up y̝K3s?q}˕_$~6UFМg5x?r[;%g^Fvn^}G>'cAP\5@@@@@@@@@XTHwGn:^T?ict0xegj۴U.윜2yF#u [3vK룛KKq_LVhU;wh*7 /_"KG6nsO 862wgc~mdcn`M(A/)ό|˜/kA}U[cUZF~J\rQG4hٟ# K?)ڴ6ʫmrj6 VV]'~su8Р>e>0mow?S[XgU;wSw! Tts^QUۨ -)ƽU~koҢY3c#ƾ)W2Ehؘ_zٓ%G6m"Rbcbdbjټe9&22BZ7L4^ñ~FYNveOn(1Amy$&KAdr٥~*k XL223eێe{YKCV^ii!&:Z6l$K͛I|8e]>0 OIC@@@@@@@@@tE[UTW\[.Js+Vq :x9oO9Iezf +ߩoɦ_Bc7ޗ?Z}!O"_v;bovm[ڷW>s""z ~չ$ǛWz~VԲV @@@@@@@@@JAݥs6%ʝ頺 nE-/?_xzPYeM0{\tfVtr]ڎoB :\^ӁLJg+Kq?/1c^[,XczY*,C@@@@@@@@@z1$H8T1k]ItPɞw5o}EE#5Mt.!:@eŚ0OV#%#Bz"yf4ٰe:k^yS溒!&c .VyXB Y 8c}ƍ{}̛/}0ٜ cꗫ1-|y>Bf2\oHL?n,؝)}fZ1          ,iJ.6Ջ>e w2'o,7<_U-(ÞxXt@n0UdVUoo1&˸*EgO~Ӭ}J z.*H5?8pQ`5ӦQF^/߰e\ޣ(`Zoy:{.Tu)_M-{[}>\푧j 'BIp~JUNC&e6y~+f~ߍ՘ׁ{cXf9A"#         P5#>Sܑ^qu.z5TV֕_|2CW Ů-V^1>Q!/KmHZ7X/^^Ϗ_1QrӏiT>}E='Y@ͅj©09sjK/:_sYsػ|,ݜhB]3l߽_+*RẒϽI߽1qˍu֊֠؉~^jddP}=c"z9 ׭&lkc cж;Kx z^zy.oܺc:D%.&̦-[d+cdvv 4 ["wzAc6ˊUK{OITDweXC )c^~6}rhmr҉'~5[> cn0ͨ/mVWMoPr9OPݤ`@@@@@@@@@j Ⱥ$qExĮTTTK¿*}1+[+7ii׺11~.w[_SU%{=?B~m1m C5N>Tj֠5nђn Au]]A}./ $N9蚗'qW_>~C"Ì.:Um|}qcδ ݔ-n$kgLrm5ckP}&zhqBXn*n٣\OA5n=-=.*6o<7-wʏs~~EI`]tƍ_tc_ĀhP}Gڮ5n [;yIpB.+{;~Ic'Ky@nX6q˜d_oX6weђƴ5^97DP/'         ACUmtUoc5D ڕ5Tkn֠'cKKzխӯW091F/3ӁT?S k>q6UoO4ʠF-[o 66~6gynƕz:p| Y:|c [=zӁ\~~YqeAu&6O^}|xo9Wն&;9{GC嵖͏oyjRcL!_~ZT{Tw2~WYW~|sRew&}$_ O=K6..,Z\lGzJ͌o[И&^.9+@@@@@@@@@8`ђ>Sw?HpDGFxz^ؘ$ ]ՠzZo<ԧc%kR}*[pUK]htOzo,XgeC;1dj3溊&/n oߕftVs߷?[:\EĽZ#7?1ȵ9Ԍ kaO<(!uV ۚX{c,'=$j|E-&*Rt|p2vgEMDK^JTd?eyikxݩgL|a=er{- 쫩2˃JxXug咱@@@@@@@@@&*go[lNR'0vM_s\zngc<[ ㈋&jgYv1HAfMʗod›i|MNޱFs_~;MNќdsN쪃:^Q;U @uݏIrd[E~Y^q27;.!?Wjխ6Ϛ'8Flkc wh#Swˍ=);R ^([Azv4oXLz<22dz@Fff03A5))21e{XX2Yc]@|~Mҩ*GFDK>;?7eٰi1         Ԫ*#bw: _A/9O}־rO![ەu T`\#* uiVȞ2=I5E6LF>'5Q&}1ȵ9Ԍ 1y iox{?T׶&;֠zǫ\*:M?]Cºnz~ B7]}%ˍi} ycQ>tv rb{2G`WeM+ke]^'W*u^u\t9-۶Ӄgu$\1?{ >J%W_)sxOV<:`U }䉧dM!         @p q16uxC*+v]L]A# L]%sO{g1'OQ9HAu^o[b練ߐ~eλ].y+ { /g}*Ho OzPBCnk׭ƕN>f[jlؼͿON= Qn9?wo2BΰQGt(dTc>k;JƁ8/oW۴՘mM|w 냻HS͐gGm֓ 6OxSs^?xлMrU;\_ \%}ͧj>~,ZWe\_WtWF;c=n6̝/}8٘ Q؇-{3vj4Wi GGEg4{3L          @`*Q LP=0;ɠ9NWy|~ּ{rmtCTǾx?la!!ҰAjFerTS^P]o[WDו1~6f?wtsc:O`Ͽ O>/C%@ڑMȀ>]|Lp &RP]T~W4E;wʠF5ĶmVX>/?OVM1zlXo.99`y6׭(}5U{?O@@@@@@@@@@|ldw ;l*h#PAu߫/9OٽCo}tedH:Aup#ݼib.9 ϋU>ru@T{tNjЦyjeUPwU5p[ޚ(VO ?P1.TE_|?aX[ul۩wz#-^Q=EWuM 5qA XTՕ+ǖ{*9٪ٴY?Rչr۾s Qw[DT{v = @@@@@@@@@*P9a*Wo73Do=ИVXa7G OO2?z=pnБcjc5fM$X_e~8c١/Mu<.W/{Fg*߹kEW5)2Ϛdb;$_pѤܼ\}b+5=9Z#|yz'i0Qrrs խJL#         P@B\$';+C}TTDEJ8 SoݱKisk*ٓG9uZW~ց J־:xuV*vxUE֩u?;'s ᰋmGJjt>Ԍ9ԄEG䍛K+;q}ɠ* Ztxd,"ꡑ-P_Դ4-^3`@@@@@@@@@z-)i3"N]m#5(P^Pw@@@@@@@@@@ ī)'+6UZ7[.Ti  ^=?F#         p zVAu˩Rkq#uNz$         "-)3SUT٨^+]rƙ'hzp֜"         HJzRaPչ+@@@@@@@@@@@!iIիP@@@@@@@@@@@1*!*.v]4@@@@@@@@@@@Hi3"6]vA           ՓuP=2D.:|"          -)IGP=hE           FP=#I\nq8TT7e@@@@@@@@@@@@|6ènw:fQQJ B@@@@@@@@@@0Im!ν           Pu]Q=9gDa]ӮK7_7H@@@@@@@@@@@,)+#NC|6A|Cp           @ucUP=#Iqjsիx@@@@@@@@@@@> 3"vT7          TWOW.ڜzuQ          gIIOw[.]n           @zJZxUEuC|>A           ` FKPAuClAuS @@@@@@@@@@@tP=%}#pxA#2@@@@@@@@@@@H >.F֥WԿUV֮K7_Q@@@@@@@@@@@\@Փw,P"A           PR >6Zg'#6Cl*4b@@@@@@@@@@@ XUQ=C\bw;UJ]ϧZ8]mf#11   deeIXXX        Iouʼn wíʩ:Azs9Q@ٳGxC@@@@@@@@]m"6C|R@Pp T_7Tߐ-         -`գbs9fS5Uu_]:e`ujp,  @@@@@@@@@|9vM @@@ T>@@@@@@@@@*8 ˮ6s@ =        T&pemnTW^@@ PQ         @%-UP&vz%^F@:7         P@ۊ[vz^E@s         ӵBrJz%^F@s         |>i*"BᲩ6x @0mf|&&&"         P1]wUTǟN^R R"EEuյ]׺"?!׮ RDDN@:92ܛ7M9S̜y]~w$J؄Xr @          PBVP=闠UTcY ڵkgP@@FF*Wi#        @6gvZ #!Ċ]   D@@@@@@@@@ QS#T~GE@H3g&^F@@@@@@@@ JTիF@t+#c         PAeKBD)VlAAپvZIP/@@2@@@@@@@@@*!zXG(1R!^%*7 e"@PLX9)        TAVC;Jb#cWG-! @GJ         @Uh=4[kkEu ի@@G"        @huF{IL!1V5uzz- Jz        X%VHqx.p  Bz v#        GZ(q +Eՙ  @ d؎        x <$N2ACսuXC@\],"        AZno+R,TTb.@ի@@@@@@@@@ lVC:H|bA Oz{1 z@IDAT       @K+X'Ibc=TT?:FB@ @P:V<1V\X|'tk׮5ّ<=B@ 6@@@@@@@@@ IْP3AbbAj@@o!        Z :NSk'#T2;w}IZ$%%% A`޽2o<ٳgmV7o^W8pZJo.kiҥK3>|X߁ J-*?wArr         P)4jHGSQ#EիjE˗ڵkMH]onRNСY>K,~\,..Nj1a2A (!3gʎ;@>&=z:@C@@@@@@@@P槷Ĕxǚ|p U׭[XI?^mٲEPZ֭%==ky̝;Wv-ӧO/-;+V… d4ho[he˖ŋT[w%i1g@, UX7AFFƍW@@@@@@@@@Kӎxʩx^EZ6li~&Ы7xֻwoiذjkW[m۶ξ\}ϸ8SN7h891=kӊƫ{o˖-СCRF sNmj5k֔$yի'1uZ~&~g3'=·ouo=^_{fυQ m+PP~c:BZs6,uCXERzT>        Q&ח_~Y233MTU*~z={aoР4Hb `7lP{Ytf[m۶~ Pϛ7τG4Uڛ6m/M6mݻw7CYg%|ZSÇ/ݽ!t~V/ߦ?l`gaѯ_?Y` ۻױj5;7)Sm͛7Ν;;1v'o^"ٟj__Xm5-Z8/2lR:uk=\KAzlߦ/Ä}CCоt}4sm )J|c2u|\yyXF*ZzE?        E ''յصDTP]O4< 9 kUpڒ%K~صCҦM_+Ru]v ;54nf ½ kZ[s}+V… Kq߇qlX U~y5/ԮzmΜ9n:{ħf͚֭+׊N;4!b} X >:|2xO.[l1;䓥^zf>FZ]ϻfGCʽ{v*T i{=VV[ i={e/hnzNtu?ʡC漡*k']v̝;9VVc||1*ԹثW/oB|fΜ)͞ qmLUT13f̐[a9hTsM5ݵk٧sC纎K7MG~ Q.@P=C@@@@@@@@5ESRR^EuUଆkP[^oZ\O8n߾m۶D7ܭt.]?6c 6LS;^ +ŕ8nӥm܇:١>}xhh_Ci]w߇ޛ5do7}6ol6I=rPtW}tLiH{РAfYhskN;8g.``W}p,V֢E 9ͧ۾zk8mԩ&3,qH @AuئM32VOi}ڴiڀ*2\' գ0&@@@@@@@@F gff:*WQ]5h"Ѡ }t֊M4N(?+f2h$ûZ \jBāsZ|޼y͛KΝeŊpBo }@osA@j=}ݻ7*|ϫy k2'ZSO=̬O?HuM0T׊+sRk֭ya½?rE՗.]u]/1 ' ZI^Yd&4         D@NNjvXU2n? Kk[۷oڻ̧h`8==NJ{1uOi@A!C8o }ݟT?t|Gra3;ӧ{1iZvsO:$iܸӾݨz|Auk'֊ZY]Vgk`~$;v kNi$soח}z]B(+ٸq9_~Rnݰ|f̘!fյJVK֦MСY"T_z|77lPzm |_!m9Y:DA(~8 @@@@@@@@J ??յzQQQծH^+@kpֿSY`)Sd׮]0y5$!!T Ժ/ڃ]{ŊpBp e򩧞*5kִwy} 0@RSS$4ѣ8w=Auɜ9seW_6mU}8~޽ QsMKի':u2]Ϟ?5!@e ^YD@@@@@@@@;vdffյyuqE}qm3[nu*@k`9&&&ag6ѵC.]Yfo^/0}{ݥQF^!^w%h{DaÆ*nc nWQ]+ᇦ|RRy9_z3(c{]U>tW^o׮wqT;w :8Eu YDA}4 @@@@@@@@LlU*vM222_p'J&ML_w(uұcGsdM+kqwĉf$P|iZpᅲKM6o<NOO7A|w_]v;õEP]g9U]%^mPߜiP^y||hy 6wP^kUp=W5|~tG*k^Cͱ˗wߦ]M~A=Gt{.@hS˜@@@@@@@@@5m-<*T_f Y+ٳԮ];; $׶n:3gYS,?V… eʕvwS.__;x]P}Paݻw˧~d]}Qڷ5\]XXh6izZ-PZ(쯢Vח رC6nhf4Ap,gΜ)7o6kǫʾΉ ؗT/tp-UP=ӪӧO7#Ѫz2|oeժUfVJB=Çˏ?(۶m3_HvTO?颴jJj֬i^KUV-x<>@ ^@@@@@@@@رcEsTi kU+H:t<; jV MvVR׊vn`nFD+Rk|׮]zA@^h}yA_^nݺ>}P{޳c7>t: ߻w鞐`eT׋-^X-[fϗ&5m= RUw5ĮnmPwhKצo=iHj޷6ZI>ܗ24!wX=ȴiD+k= ksWu}iӦHCLzrb@@@@@@@@byyy&yRW>[vP:Ӑk׮]%..\4gg.o^ڶmk}W&Ȋvf}+Ç?r܇ [n-;vtwqT't8ݻW e{YbmF5oPzFW;mZy^+ЗUP=9~wb% W_ҥKS|R^=/߿,kSN1٭SN|"e!@P,T9'        TE|"ZUTĵZVO+\Fal޽[~GSIZ;AdޭA_;YdggAt_-6l0Æ 3=PӪVև 7 uCgMtgkB֪jNvS:x/Lkm.G{Oz=9۵ Mໟu@ #}?k.qСrg{w` @@@@@@@@*@NN)PS-<]T`50:         ˓tx<CU/e˖9ow[Ơsݺu`P[l)Aǰ P}ݳ'^vGsfG1        n\TYTwTeas۵kז͛VT֬Y#۷oСCTovݻw1&&&Jjjԭ[Wի؏ #@PݡA #       XZQ=##C:@$@P=̱o'~솑<AHjr.@@@@@@@@z 䘊vlV/&3kךhcA@j$@Pve3f)bJΝ;eڴie֭$͚5,ѣ3wrJBVN8ԩ@cоׯŋ{U=4h@4i"z2l۶md֬Y޲e0:tIRN`@c^jL>]6m$j/={ݻkI<(&Lpί5]vκZ0Yg@@@@@@@@_\'NEu_@@AuF5s9W5j̞=[~m9t萳ݽТE ꫝ_{5Ytr˖-oDo 0I1!&&Ƅ/"'vrm[o%xN]t=oڵ]guw<{Ȓ5obcce̘1t        @5Р8TTF@Cm;_~r饗ګ7Yf}qqqҫW/iݺ}v;w,Yr*^;=GBggϞZjjEx&$~Deu1;'֭+ڵ3wuj:~6 _ܹq3;I4@@@@@@@@ BV֤BPݟ@@KzMurw{TH5jWXߥKkKŧM&oM5jd*;@שּׁ,N:fY999w^g\ vn/ &do;V\3fn?nWͧ14~-8]F!}qY@@@@@@@@@ @^^Zz(1# @ ^v4Au~uIEۘj[oUeʔ)ήgyFR6~ZJz)V"MUGi{DgV'eήTE7YCW_}tz@v        )E`$&@@z T/^z׮]MP=h~~˝w)m۶u}|jر7ay lhwޑI&9{ΝuUݵy5pުU+ge˖лrE٫%w]gt؇        J@3<ƍ Sz(1# @ ^v4A .@N;5j,Y􉍍{Ϋ;w4q{^*WK۷ooN {?Ƿ^zɕW^iM]M6Y VU_b陚jk]o^CfTG>        %--MLG)v@y+((0\v.!p=@@T/P+-Z:W_}Uf̘a4o\ᅠum&3BK>S|rsLyͲo@7 < ĉs9Rj֬i}zMv8z8JA@@@@@@@$<TOII1b; T{e7JTjAwЃ` [< ͚5 uJg;#&M2Z\֬Y#?YwymYUn=Uߠz8ny|"       @NNdeeUG{ DJ ##ÜqƑ:e?Oe ?RN5-&&FƌcѢEdy~aiڴjaݺu裏:nvi߾Y'        PT4AuD}E 0  Au/T3<#$ `ʔ)2~x / qqq2|;v' 86m$ӟn7tf        @9 ɋ/(JHH06Nr\@ }$ QwTV1/0a|%))I{9?w7baʕu=H˖-:Au@@@@@@@@ +רQC<OVT/M$ T#ؕ-~뭷JǎÆx/45j$=Y~uI׮]>9s$??NPaa@@@@@@@@4עڵkKqq1A x\@*A?T8p\tEaA?nٹs߶m[;n3 }/ +"3g4]cbbdo #H@@@@@@@@͕tIIIzY!s^@Z#<+[PN:;`"K,QF9]993~Z-[fkժ%_$!!hAC޽ti׮qNH/29䓝s        @( gffJbb*>:<+Om pJק &ÇzO'xB֬Y{ᇥiӦ)SdСCv-G9/߿~,A77\`@@@@@@@@999AE>lF@JT/Ar*cP=66V*޽א믿.ӧOwnZ.g]v%=ΫfϞ-/>|37Tsvmo>sΝ;ˍ7h        @(Ό7tLNN#TT~@#?*[P=>>^SOO?]RSS~I}Yh-&&F|AIOOw _~sN;M֭l߶m|'g!i`Ot±qe]&}1c+        7Au-XTTDPݏ@@/^YlAZ^|E',U5j$2޲eK ;K8A+Ϛ5k6lha͛7;KJ&|A_2yd&&&J:uf͚rw{c@@@@@@@@رc%33S4n@@?T5j̙3G޽/"0`@~Z!}„ ;@{g;֠޽{塇;w8njSb;@@@@@@@@ɢY   @`a< ?9ù+C qζ|ryꩧz\\<3˔)SL.]_wʶm~;9餓c?OYh8p Z {2x`le2uT%KϞ=MYf%>{we…RXXh TD@@@@@@@$kr3III&oAkG؎ @ޝ5nܸ\*N PP7m$֭3a *PoSC[n-[{QQԯ__ի'V/Ϧ7[5v9        PƎ+ZQZz%{ @_zWC+z|\@@@@@@@@h3յ(Ç Gb<  }գ0G@@@@@@@jҤIINNzU{ AqT@@@@@@@@Q 77WMPPQ=cB@ ]ϣ+Ah~: @@@@@@@@ 4)IIIKP=cB@ ]ϣ^D  %4a          ɑ,*QXF@ T>@@@@@@@@@@Dꙙ&#TTgV  !b7        Tk"y%##CQL& d`2N>oz[J&r!R\\zrjfgs-۝'vl%;,l](Μtڮ&Xc9lM@-5 erf6X`}/m8|j%'Y};(oidIKfҰNm9x,[Q(󗭒?Sډ>g(v|`ٝ'!1|jYbm$zsĎmITW;E[yNYn|d=[w<}-|}uGNmyӆ{>yyA3Sy"9^v_Cw+[v얥k6Z|w:I% #9K]=aYy='}֭"g[?@`/Ù |% zPv"        NE5jʮRQ ;{=LN}` :d+KݣOw>x9ңCKg= A_hϐ]ڛKٻ绐*S}.N}.~V;E&>v?u.hɛ.2}Q^&qr-|z& ՚X/${+J*ɳs6ǡjӑ`A0QG>OoV_gחg~6sRy Ѩch~?r^rpՏjjכ*fi%2ݾ^ D%iE۞}M?hɠzDrs~.ge_[ۏ$o,`xwu7KW]̧{N;4O'W߹sO%qWlT/G         @͕tIIIzinD+ֺΖW>½k9RAuYn},8ۿ4Au|}}k&7XPݷG䬾]Kc='2UuC9{#s ZIW wa+         ` hP=33S&*2a|>v"p-W=o;A*wٚou ʫV}mKo|FWSe7K䙷>4˾?_ol޳w߾ ?Zߑo/|z<yskfx4W>֝O_*-RA5xsTwsV.tu^ww)2I\ WLNJ ZKw҇Hc }\w)\[w_&(w9 LPݿ [@@@@@@@@@[ ''G222n٠N-wզ Wʪ={GYdqzw+TɗUdPq-L8[dz~6êwVQF o_X}o:o~b's[d55Ndɛ.5 俟 8 ?sҤ~UybcbL g^tHՏ4u@Auw }kUnm|EVl1˥w/ˁz$zwd_w 9u֊0K8o ݼ֏v.O[2Au.lE@@@@@@@@TXƍ'M6dzsSzC#j٫7,aYVAzI`wS9f2jYZ]nTz9Y`w@IDAToW3!z{ ?m,{WO]䚳Z cޙ옔f_r. ׭" Sz"_< k9E>~z?%{ϣ LPݿ [@@@@@@@@@[`ر)TFPݖ &<}%Y}?O,*qh h Abk9w?ԠaHkh}4k/݊ Ct3nU;ڹ׍F*Pz|Ly ?DFϕJ6*yXjo ~q۬6nnDPXL#9^To7+n @@@@@@@@x0>=R jkbvsv[Vyi{P]ATתYM[/Xc?ޕKVVhEu kTe]ƛ!~hojT>֠Fr{ TOoXW;c8*s;f4?N\\V$O6A6y_9s;FHjJ s4/ӎe.[2Au.lE@@@@@@@@l\Ȑ$%n^}zIht+#k:TvvZ TvG{>Pe55uc#PuUY!~ws8յ ?fyBe+֠=~8.*-&/3\.]bFr9ƒl~҄i]T;,B/<\pJOi۬Yg>Bs%yerdS\>ֹ>1+n @@@@@@@@LE9l[ f׎|##]1\N:yK^}aG]k{ߜ&O:lzde%#=;cZ˪}Ԭd6TwW e<]Rk&ˡ2bfZAp3oMi~I!RҘ%5MO,k7m :?^2LN>Szɹc:o0oEFH:*"֠c޹gL,i m7Ok(g"V]"o/̺>ۇ:,~nVqF_9o`OLH$zߟ5@չV&PsB,9Noh_v>0k5VڠzL#9^v>"]t3f|ȗQ2ISs_P]4O4}yWvwYNO,*Ȃ~7(RsNu^}T>@@@@@@@@@@Dꙙ$M 4o&7@]v jPۓM e+w_voAkT`d8-Zƚ)&ms8յoVu/E*"`>?;V}[囥?9z7?4/)8;}ڸie5ҁ8@Cu{=]//Wo 7۵R]AHFr9=IKN4/iYˁjה{r__}_f}Hs7~ˠNpޜ4S9yɹ`_> a         '&·棣RڑoTNB]8ČOZNm9&H##,ݭsGXI&V[>,r2KMw?*ڍ&O<\GȾZI^+j˱έ>{[e ~wn؃U}tda͚q/+ _|z/9Ckq?=1?1,[wR}WKM+ N֠^K+_XٳwtO;Wo!a ֒qt+yڽݯo'}VӾY"ol۬wF>oݫV߱PFX6HFrwZ~XA&N4'M#9\nY~3 {N5ʙ}8}YDŽi_Wh\sV5b?        Tw\TYYYX0#4 kI{ eźr  ,@Z)EIRluV}/(myjח+;eͦ~C^Riws9zdUxգg>1@@@@@@@@N!&[KP=:B@( E         @T 䘊)))f|գ11(@&4         D@nnT/.. DAz @@@@@@@@P@͚5D3:Q DAz@@@@@@@@K@+7N6m*IIIOEzD@Qz4>Ƅ        "PTT$iz<Ɓ +@P=z #C@@@@@@@@˓4T#Q  @4 T@@@@@@@@@ rrr$++Kㅠz4<ƀ Q/@P=D@@@@@@@@ (**qIFF$&&Tg@@ TD"        @KZZ$%%O*d$.ZPP`\;=، Aj         P4g)))f+3d  P+K"        @ɑ,*W`@@BW(?G@@@@@@@@J ALT*W@@bW?WG@@@@@@@@(**_|Q222$!!AGbt  %գA0 @@@@@@@@Zz5PQ=jC@ 5      UهMl*顄^)EzARAQSAt*RC!tHpsνw>'9u; @ JϷ\ `;h9-@:0J*M_{59rduNv<3g҃%?8 X˫@ ZώfMԂ ^^i"ҀG- 0kɤI3:C9v{uA @ 5 {6|pkjj¢z׬5 @@^/?S/ҋ~ܫW/ѣGE'?#6ڨ5>ve{me/ 5$V뮻N>d@v '؆nXWg;Ϟ|I>}ǪϪE_v]wo&_EM[ouk{v'袋lOxsO{}ƾoYg29bYf\t}>;i<,(eeVVmҦnjZ8Tګo*OK-us[Dy~n5lQŎw]/T:tp _lg:VjiX hz!nOrܹƏoJqڊ+z5fU9w{hO^YVą@ @91bտH!@hOՋ-a,gq v^{{f?m;s& (afmf} 0SPD>l[=w?/kƍg +`i+2(AʤI|^e1+,Y"0F[m]vYկ~%X~:zJ^>ܶUlmTWm'Pkhy]ܖig-َ$T#K?b:%푏eUg)"juc?iܝwޙ|"Kn wGo_֘V؞xe,mL: @ |yd; .^B~)C !P؂;찃_ER}'uKym;OZvƌ*bnm4k'z0׿eݻwW^RzizHXM2VWe6:hUWm{9slV% +ymoe/PBn۪fWm'ehy]Vig-َ$TWOǸNG>qWWM̪չUK3/,sG^ҳ~=zSOc=N;ɉSkhrlOڋW1OyV+Ϥ@ @K3ΰ\ յ[@WBb )˂>S$X5kmvZVKVgoȚ ڌD[8FYmELږt7PU"To)+O+ ի,d{YT{~ Ol뭷njЖc"^z=^$@nݺ[mU z!wkI$-wyJ+}0f|ٌRYCorSN_fϞm -iJW_5}HqYJݻ%v=}'&z]^ڶBoccc =>o-߿z.|WC'x_G}Ō_F?U0:ji}Q=iT_ţ-3^ziOD)(XJ}om//Çڰʷ ԊK:W >Y񩎨d1}~71c>+h̛6m/ʃKCyߨp! ă c|W);%h%f8$TI)+[yNmR{mM[ }~9k<9>Vyu?_qW}Ԏ5Kgmּ.K2Ry[o?^oY?ꨣ*{cʲ6'DO?t %: ܭ:^h)tOzx㍦\uNHW*G-[lQ>/2ډ'*wg?p >m H&q^t*Oy=D$PnUYO vɎ8∐do~+3%cA65mzF1ZX-_H9@84oԼ'8ʱ6m9xm{h|ݙ 2 @ @.@2w;oYsg DzA ?&P]$ږpHc}IL˲bVIn\\%P=/ W~ kQmYrZ/j%9v2Xe9%K/E:Wϋ 7n\bYqŷUsVS~-_ *7Zmb]BTU4'_p%2 \T [S>;蠃|'aQ`ZBv9 5pBNW G/cך<5DA⍯Kӗ g%k!xmkK,"ĮWrMK|z/BzʷF+9 H7'an%~>/6Jq|-;!\Vwx$ieiq5mE$)'o,ǒ{,%jumw>$|__ P=뮻J4v^H^mX Pj}c-zy}//%\ږݯ$T/o VXU oy$Մ~W]b ֯8}G}t¦r?aO?k+*딇zׯpxv!X.χaΟUxjƣq7%L듯߿)Jr:Nv\IB 2g IuS@.O41> /ĥ^Vi/j,I$$ ‰p.m _5\߷ЗBu->P[y=%\1*?dЄ|ΫES[~D;ukU{yZ!rLVNG<#'[Wq` |z'LBk!rIچε (l-WCZOg wBk6ꪫMM7ݔ Y<~ݳ/s=9O&cE2u_hL >%qTO>\d XL}j4(:|霾[-[P)+oHU!Zy+]w/ϼmae_6<|W[R{D}k[ӂ}mEn|;6h ??!WuO>WJ;oyH$5I@e]#To9xzqQ}wc ufqԩ[',Ϙ"4z=Wo;uɲE'NdRp?4w(Yq @`~RlIwqNvaͧ~אּ5?ov"V[_ f[dMd$'(j ͛WYeǽlV& ,~^&ל wK 3ljNW.qďq/5'%Q8Aj\ܣ)\p*/=3އrs4ٺu'pL·"qm9IJRw)ɸo+'kVbĊ_`żm N'mRۓ߸PY܂$ʻ9Q}9v|$~Y,I&%iME Ē^xN8g-}+!,)~G ݂$?x^Dj~0+OߤxncBr=o,W'W xw&Os"q^sxSx5O m [xѼAs* NE eҼ7>WJ;oyu-ivRC\T>Gj^2En ;3辪NgfSykL)oZ\TDDeTj_v_^coenuY-,ݟ[l.vqYc@[i'QOYs iNZ[J|M{.o2i֘QW6Ҍ |?/ ;eʔ?o?_H%ʅ_<D _wuJ!~,ܛ.~+QY[T۴}+ϛ'g?S,{ǓA&ቄ9kzyKH[ZBoZAw z뭉?],TUP&Lh᭖ШEH "+DvbQG0jm!JJmO~YOm~@ /Ӄ8q'wG$q/2$$"qkTZ8?K}E΂zZ >ꨣknSvC?[YO+mE+[dXMD~ʪvdzuyevPtӂgy:Wx(Yx\BJN}Gcg.Kʛ_랲Oy"' ȫU[za,NX/5O=$nYVo}r}.=y|-4yO,W\UxSdYN+x[O:YʊVd*~=.~j7ߟ.uOC,$*R݉{z]\wT˛"g,@"{.-P]Q~+ QB>ö%Ҷq;JN^ާ(8ϤY"iT _K0WdyUGܷ/ )#ыA}nA6PFq'("ACsП-N !~1sm!+mDměl9xZb[}}' ]!rr|Q>+mkOE!̇Ź"\Tj_v_^8_s,qu\[i>Vd_~yn햴jYKoZJ׊㬾RɅ~y 6HRk̨TV ~jU*_'ugrC @ &z"6 BbȽ>7 .`Y @+`~Rl;AtM>kFQ~h9lk={4qs//KSo[u‚xv2g?+?N_s+h\pOT/99 ~ X k v}gݻw7g}n6;o߾~G~O9׭[7[lVώ#x׿eҟ{1oN\cNPD{guN?tc5bbC=.݉mȐ!~Y7գVZ;y"u/Y72;A9A>bhɜh͓oNiNnG}weĒv!S<0á9>\?EizㄯI jm?إ^991z /몿j=N9,>:NxuM\cFZ>W+/]}ŗKO9sV9UyJH9V6#"ߏ8?"rObOɩ rꗮEvjלFCޣSO}RJ㰮cƿXViƹb>Pr7Bc[/9o-qEUŭ1^n-g~ox+vy@<λ)>f֯p_1',2p@ODyGZq|46/c4GZ#qZٹcE5fT*GSMiwU+wgy6(g1 @ @Tcƌ>}4#թ @c!] P/B ,H`_ʟ+:(/ڏWzqMroq"&N74g_rV9NP_ O;4/ ׾fau?/Lճ믿>-Ɋ窉h["%`.wF2Y G|ߨ^yAt^VcCJY"CgD|B<:H>yoK^kQW_asOC~+mh/!ZB/m+ꂿR$v+rarMZj ,JVݕ\N$LR?VDWj{V(J~*,hP.iAljN:ɜHm-߯uq^OqZ'N_ hҫvJSh"7sXhRD[Q[_I3VB*?_X"L-SzW^%eۏgV)ɷek[/BOVdy=Z>aԚ֊7="8| T٠V,c^}@ @ e#GFkhh@N @ TEP]V%v4e\.+K/tLʴF/R_籀}ȾȲ) 5H녰,>3^#CQ=&#z{+׻woo:J[t%6V<[߿!J G^E,:N/k:rd_"Y]U z b_J",aOLd^Icwqva>Z h$^B:Yso6JTrP~,TGMdWV_ f/KpkE򗶭%(׹oe]L '*9 _b"@tRӵZFQBuYc-wlƉ"E1K[T8Yȯ8c"mo/ 5rR-Cm52c=Cy@]|~i͑e}D~ }8'Xh~Su[+<9kUv J>Sr>>[B\~{߻ۗ9sz~VU uBu1"/'q;z/~ D!fT+?s$~^kgIď}bz嗗\-N`\v$3<39g( /0CrWDq*?X",~"[]Dyh~ b$늞yO_<.! #łp:6Kʓ"ʿ֍:՞OՖUO.K Y}[}+iiZUscE4,o%4⵲^u'NP뙣oTs12*>믿~jvkQjq权i繇 3< @ 8z=9#@͏Q?vyY0!T|P% ) @ @ ~r_zov_s, @H TOP 1 u-/+ahF%BEFWy,yڴi!XO<"V:l="8PR]Tx6hYR9 @ @.c&Eb䜀f@"+ teO-}gQn&馛nj#FHԉY5'^2_kjj2'[,o~96f:u]uUk /9ֳgO,̜E8nС5 +{o{ ׻wos"[~aY5ga6~;sBX;Ndr^rn7'HXkƍ37Os1v뭷E]Ԝb׾ÀP˜x2 [mY6g{qXgSO[p=z}W-k"9%W嫺>nߓu-HV^{msy[i++>Sq?7gY\8kYzp<!J[|}Z+9֎Nn6իW8i[T{q"rs"s_2S⑧zW̉NYŧ4u;0s[n7;|goE欚OB$OJ-,ˣ>op }K/H#Ui; //T0|ps"~ܷ?{ԇRh~ƁBX1 Y6'cYCCr)%}9!E0ӱߜݜ(,F'u\Cj+>9x2i PSq_ivmmC}h߆ f*ЮusVݓE-UNJ#8vi؛/E;j>~TlK./Y)~ߛ2êO\)>-dL愚_kl_a5wQ;͉C_Zd<.?s8ԗfuYT|-Ze|ʛ|uV O'$DpVk^j !g~AH%Ш݊\,T|[q+S+-jriBuqa,!"-@4Bz/kOpEW|gg:UP)!{ ^~(1 4 CʷΔױ_W9VrZXET Ojcy|Yg937OUSW9ݯV֟+?#^|Eݻ{Nj޶>I"_ Ӝ9׿_GgU@L_i~PFJNiC"Zcҩ4ӵ[䲌[Z$9jҼ ՜Q0V^eV?m%TRG/+ìSu_fO?׽~t&Zkn@L5NɸV__т9q;*aBB*>*N;-\Jm$"_Kg|>mϬX[i|~q˪?_"BsE'cWD?^k6S^ZoRkԻzPk V@ h_BԦM-Ҷ̙E'ڙKi"j8H<_$,EM?_~ٯՊrB %0ӋzYUECyT~:B{уnHzRo]W@bdQuVy].oK(|HiKWV ǯZH(ɚ"TUM9ب Z8`-\6}tTj)OUJ˾.a |6d[_hjmW2 @Mghv]ǯ6w`9#P>^ @0l֧O2dH @F`Μ9>ݻ[$@ @ @@Əo,AN t"?xMt 3Ju{Ξ~evxͺ7|ZӨp @ @ @ @$T3f566Zn ljMgxvCO;o-:b}{lk@ړEbz$a~fɹ^y-;^|62v7?'ׇ_i "TO9@ @ @ @ @̝;׮J5jz=?̬VZ~\%/ _|v͝'sOMqkv O3B4* @ @ @ @  &ѣo߾ЀE/T띏؅QCʕm^t+ ϝl{|aWFbbs`^yiGFs @ @ @ @ 0i$6l 8К&}ea͎,׿mJֽ[7~%uخ6r|%8 %?)E ~sɹz O/B4* @ @ @ @ YT5j_`Ǟ5п < 99sgO){ۮ'ċS0K^sS߰?}l[cm'~ٿz6_-4 [uػWp>38~R'-i3W̲AM}m粋 OK%io ﱜ_ZxA@S~ěǞn l?yg!53ڛش3bna``?9*4f##B @ @ @ @H!0qD3f_mpf՛S}i:>N~{ni+/1&Nlw{i}k|%;kpm]sڛo'r]l+n>.=6]6Y}p*zy6ÏJ*vv;|'~mv57r!֯q^e)inK#MW_ֳGKC@oxݏ칟У[/ا%k#-k.CP|j{ٳmqmo@p۬*WjϸPbZ$k}H " ':$Cv@ @ @ @ @ ?FmǢz-7oXzQn'i;OwK\a޽PW/gTH '~p}Ioc"z/I  _|Y'R)ӹeǎۮeC@ 7)WZjU϶-RW ;Ϸ0ZԴKN̦x.^֭cC}u#ΚlޞNl{aChN˟/ _X뀅W@ @ @ @ @)Sí zpwڵw>xVljr\NG6jlܹZ/nnNĨmS/O[nݶ+R"UEh!\qU{OϿ[C7rmEFثoe7{/7  T%0u3v-W T_?ӆXǞs=TtۻM>t_sc7wnkOZpaNS/A, _qw@ @ @ @ @N}? @ @ @ @ L0Fmֽ{w,WSn{߽þRgNDcvV_E#vľ¸$s?Ko;Xn8,w.t+R~X.$l~7${omoOλyzθ H \!gJ"6` gkS/nǜse<,,;vvzϞ6TF, d;[  @ @ @ @@"0~x;vǺuPZ&|!hem7.n?La ^I; # z+-Y3U~RcaP}|dSn}Mi[R.[~?h [|a5WB7y7+qBz  #B?^w9 5'g7@ @ @ @ @8qޯ_?3gBj5i33'^z8?r|GgNOwkfS؞=gسvh[&k&aGem)T/Ϸ>grRO85~ku?v͆/08y{ Өwz@ @ @ @ t5'OaÆYSSճ\eOn%ѻlf{hm^kvF.0u~Ry%Mm)T?kg^݁߱q#ٓ.x7hC{ ;I\=Pi8>3;sP=o$V To4@ @ @ @ @] lر^>{lkhv#B?\u-0ɒ V7~VIz?ۇ:yp ,,9ko>`[`PծǃvMw'ޭ͙;\8%TҶqoa,5_ٶ}x_p@/P=gw^[ƍl!@ '<Ԧz$=~Fɹz=OЍ{smڹGQ5xƫ-glR|t^ g뮴-2l=gק u!o8:W@ @ @ @ @mN`6fӧpg@.[8e#vДG@yakSз~D#\#'p??O>c{ѧՄk,B۝7j%o{I_nwhemm"8 VǗ_{l;qU{^jǟ}fM}zۥ?s?]iM}#5~\{⥩zP=oD3D^ @ @ @ @ .M`ҤI6rHkllgzɗ^O{3Rdm-b}/Kr]6՗]49Nyl/?Kv"5l%[Y=}K' n%[Eozߟ^eɱ=i={N[3C4ֿm֊9-+oY7Lztngۯ4[@(Os?1;]{W|snZ/?x3z93+c@|鍷gYl~7qc\=.ozB^-B @ @ @ @],5ʚƺzWPZ8A:3Ꝺt7@ @ @ @ @ǏB~谨^NBNT  Fza( @ @ @ @&Nh#G4 ձI 9m!TC Y T%}A @ @ @ @EP}رֻwo%Ջ"Iyw;JfWHف tEۦgϞm|}gܹs&!b @ @ @ @#Э[7ٳ/1u=RYPĤg0`@ֹ4i9ҳlhhf:-#HA^ @'ԃ3fVbM@ @ @ @ @޽{wGEc$.Ç[SSPVn ggUg8hРj޸@ @ @ @ v%0sLނ .خvN?t5jBV @k&q$4 @ @ @ @@s6fkllnݺBb  @@X#TWȁ#B| @ @ @ @ P,yΝ;׮JoQw#%@ FG8 @ @ @ @XՋ9a=z^ Vb @3kJ9pD#!@ @ @ @%P&MaÆz1X L +z> @ @ @ @(BbxʢQ_~XT/)@ 5B|%8"TǑ @ @ @ @@^ ω'ژ1cw>gV%ÓX @OI~!pD^ Ob @ @ @ @(Bb8?FmǢz1H N YHG8 @ @ @ @X)Sí z~@@W vP=GBC @ @ @ Kz1<'OsZS7u1Bbx  @ 0?P1ՋI, @ @ @ @@^ +ƌc744t\z1K, @8,z>~ @ @ @ @hՋ,755!T/)@ U TW#4 @ @ @ @@@^ &ѣѺwq-4;&@ ќ?P@ @ @ @ P,A?~;cݺuC^ Vb @3`"ZL"T/#@ @ @ @ K}P1<'N-̙P@@g&DE^ Gb @ @ @ @(bxN<ن fMMMXT/)@ 0-ÑX @ @ @ O1@IDAT@%>>rH$@&Ŕ2Bb8  @ @ @ @@s„ 6vX/T={54;WLĂ@@qÒy^1 @ @ @ @X胊9~x3fzP@@g&D(B{}~I{ioǟ~Z fA,޺#ҟst0σ w't$/Qx/ a2ְկlB]n<*??: ??|o^D}4޿6&лWOP[ilͯ-mtH @ @ @ CyҤI6rHkllgq(bp  @bJ˞M>&OֻfsStYzm7\vt>t.ˁ @ @ @ *'NsbQ@@g&D2SegnbnX |N`o|VN>& @ @ @ %>EQFYSSɖzՋK, t^LD)/S~%I7!@evd];|r@ @ @ @_胊){z~|ՋJ, tbLD)/K~Oo~6!@ezaeW8 @ @ @ AŔĉmȑ&:ՋaJ, trLD)/K~WYM  :vĞWi@ ?{WUtPJi3 8P"  Te"doDYND" m)eCWmߗ$MҤ&&&{ι>^>~y  @ @ Г 3;IP}̘1QRRvhE¸D 3T?ϾX X26*&@ @ @ @, $+Ϙ1#4 D 3Tn{&B6J'Y @ @ @ Г򟝆>}zեA"AY@v o @`98o95&@ @ @ @( TYI/^V @YhafWP0z!@ ܹ12 @ @ @' ԞNZk AIa|A8+ s @ @ @ О|P{:;3gΌ())TZ @@_ ZOzaB@Tscd @ @ @hO@>=>}zTWWGiiiEQcfx]3W @W<f9oÝ/ T_ @ @ @AOLIOUUUQQQv( @^.A0]AW3 zzϛ#"@ @ @ @@G::kFYYYZYP}fj @ƆxbQÂtFdFz@=fV+.?ŋ sz!@@;8E @ @ @, TIuuuQZZ!^W @!p/_l,rͽ9蜀yUꛌY,Xa)'@@ F# @ @ @T/())TϟT @g Lyx' jubg6+w?t<¬߯8vsj[T:_]A/vp7ɷ t~Z @R @ @ @=I@>01uԨ(**XOr}t1Vo6̚f[r7:>;CZ`e՟=/.og^/}#-qCK3OQ˷}k ښJ˺+kAN wLu @ @ @Lc1thllT_.'^/NSFm6yqWo1vrv @@W ?m]zcHyixEv ۾1{mMeTr#⍷ @@'; : @ @ @z|Pa&"YQ&***RA(C=E`e2o藓_$7hoA5ΗuWP}}kAN wLu @ @ @LĴiӢ.JJJ2˪7]F/ޖr+3ǩkưqլmx=zڏs_ @@'; : @ @ @z|Pa&>jkkcVTiWg{3}en<Q5bjԮ1<N1;*b!Q7jX(jϊ7y/=SQZ?쬹1lo_+CPD+Q`e}qOFqQqlm=Y?1W_uw⫯+s߈E2ѫ KN:4Ϸrؤ&yvWP}fc @csR @ @ @=M@>(IN9sfTVVFyyzGH TpQ\z>W:8~-kz~ʟz(54,s~UƑcQÇ6;wEWS/NFqomp頸|Ǘvt@;l;«;.T>"y/Վп_Z4V^I{ni  @k^~뉘СόQTiIvҒq_kJMK[N.zꅴ8+[/>\F0{^5m,ofwh'ڨ]A;.^˂m ˊG_%FgE =g吏ޟ (ʑŨW^}-^=7VҀ@k>c]&޶3 @ @ @A!-TP}ʟ`oJxw``&dǓQrJI =kWL%?Mq;>GkG-*Z';YG @KzBP}bsFc?Vӗ{~~|8[4xWˮNˆ~;)Y>nMWTϷ}AtEԖm]AؘU+Igc]م:s/?N},\`햱'=36s?Ϧk?1 ŋ>ǟyŖUN_bZLGŒ$~o5>*{JvI~Nn,{Y҃dɘG{zljɸN[;|_pz|sq1J$m_5˔58iq|3/81*׈yo\~}LeڷUpQ?O|dtL3o5Nm}j^IMYs'ZC!?cMǑ_%+;>PK^ͶiT-xA @ @ @+E@>0SN(--~ߊq-TP}ޟVY/vgbHyi O m7 nQg3iL˿M> #k[n+:8&@xb"{|Xyh $''!;%>vEW/Y3+Ȟy8]{z|M_;w.3wb߳&go\+AtZi]Am~ttf7Z+yvO˻j>ߴ:LL |Z^7+8L}ɳdFͼ J.ϼzj,<{س+ yY-;$Xnes~'$tk9U?=׎?;)p}hzS3AH]}qy|Zٸ9>w$~'^LH^Bij6f$Կ),S>c\EA[}_ձ%Nhj*zAuG @ @ @$ T3fL 4(՗ZCO'Oj_qQqU9"֩|&b`q!=qܸk}jeÄ+ZnZiT/80G$ᓖۊe?  @z~f3ZR+&+_nӢ(WӬlAQT Y76ޱsmpδx%-+dkgLӒ}16Gr[x| ΝkcoEMWTϷ}ktv߃hgZ]A}T3Ⱥ[oaB~\w=WcԈUc*iz{irm#n|wse2x?gPmelɧd/\۽qٗdwZ'\8{ﲧѠ칯_(Spoij/NOeDZx8UQՆE葑.+2'f\2tp&$}F Tov xn޲-{UMV6$j2VeJ~rҹˬU_O|T-jFEJ>Tm]u˔A @ @ @(|PaLM^QQYXqX TO3ww?%+2/f}~s/A]wC1;lډ픞jTYvnIZ"k3' @[8vسW$;fBֿ=͂zAr?kNgϣϊ?!F \A<۾qTo\߈Uű6\?>y`fBKVoTO*xPfe_:i]TO%dƝC*r 6IǾ;#Yf~ gW}Vtrkއjc/$cO'm=i6 @ @ @U{5g̘Gr+=7KcE᪃㷇|/{j8kƟsmA&tQ8ٹgj<\,ZiV!sѺkA;mT_c-+ά:X^Z#nɆՓ:_F=GָG;|l1lG_rU<¬Yx?l>Ot].4oD[AY oa dGBI1[|/m'GzL?<,OW^ON롧/j?G τyded{ckV7oZЪWO 'c/ͼyyGrɶK7o-~ş'\89=ڏۇ)Q9rf*e^8hz8ݛEgGeVyg\6#{*3VP=p{XA&v  @ @ @ @`ALVTT(~ٯ~Acc;tW\{+U~6^czgǣϾ ?٬E .;dw7c̪:TeM=C+ -~11ޝ ُԬ /wg_ [}:=ڿşH;Ն51%_7 ۾5:AbﮠvpsȺ4 Opi3+uܯއkřoչ:\#s//n/V|3_.=#\sgk&c_zA۩;Y=TOɊPn;:g2]Ԡz2$ĝ- ^'dk-c 㿟icO},.Ts_;sݷ٤ջ~w&О|sHwҹ?nZƿ?_{k/peڿ{&5 ~uh'ک]yz`,ʼhw8f߱饟{yv|}ߣ;Q#VՖ~΋^domq܏}b=Xn?IߝslSW=kb|O6~ESG8!g^qӓ7J{%buMՓ׬Lɏ~_lᒗM}iVԎ-tPWD2W网~N]6t ϼJ% '+S][^PK⇠z  @ @ @ P0F}}}ŠAc?]ySj_Gcϭ5#gV\?J$Ʉ۰!c_fUd鯧˯1fjqC]sf%qQ&A\py<7{nz.ӗ>;|ᓙUl" އcuwdfƒ{, v4ҋA=B+O>ߌH^:+# gA|g\DWDm6TpJ*9`緷Iv=Ɓ]BWobbSP?MS9Ndz]ӠzV>'7iz̷|" 2gTZQ\pb:tp:}O<7~ӠzrGsZs/7ŧ/͙7@|o-*?1kz [{9 9t^Ni o r/%4+?cۛF[To @ @ @ " TƘ8qbTVUEiiierVT_ L'ZVOBـx\L8}omllQ\sQsIX= \eHfBmm_s*;K^Z5q^ߍ?fzduD_MCM{~i=~~fȒeǺ^Yb!NV;ʡiɞǜJ4nf <λN\Ri<^OxZL~ɪM;(~ytf%/9nfLVwg5{v_P=+7 @ @ @R@>0zee <8;º8nzbՓbyć}qzmIhg;~9>\Fj8uupfMOe|G8 @@ ܴVLNFc5?PLӝi§b->n.Θ/\Ň2/S-\8[m?$ʬ1,}|ˠz[h =vUbP[nT'U7e4s'57/5l'WGG# kgl |O<(^@*JѠzZ㮼!ΙteFv/x!1p@d7rԘ[rMɽ|Y퓞oag]H]hQ|;|K?qչZ5ql߱>]*S1Ϋ&~^ZniMe֩Jg*C2^O_ۮ%\K⇠z  @ @ @ P0+WUWGyyy8;ژ[xZmcm6MWJoBCcc\KWm*5G_$gV:lm/{<ܒ0INLhk2 vlqKǗkVɒ5UZzZS|7ωE /.!%KVGg$'OC< igST-XjT/nؘy#A\m$!Cϼ8n\.N[ZuAT @ @ @ @@A .i?n^TOJ;隬 Ӡjc4 *;[sWZCK;wދ9o._Q:(&aBn^/ٯ҇g.4p@n6h]/ou;qQ@9`緷Ik ,N:`KOLϬ}rճA~cG֮KgcaQ|7Ҳ==;}\_MM:7Y+z˭鸒ՓU韤Kc첓 ?t?YG\)AMό̷Oλ_Yow!xfTW4 'X_Ү&R1 @ @ @B@>&N(zaHBvTy㨽>+"ێ[oGh״i4Gw:&>2:{Τ+cܕ7e-I#LA%\~}y#A$ ;e^PsO;,>IBIxZP}OI sc}5"Y<ٞx'+cEB&slǝ?1][oaZ;TbuWad[ۺ38[SQF @ @ @ + .JJJ+U/ @@/ ZAѫǵ646+? n_{LZjJԣW7\|ZZ֘gcnu|11@vRvv[ 'u2* /LJj*|dtۉO>?nCdzR~?-7T|^lz׿)qnKWVP}ʸǥ|g13~1k^GߦѠzg pW~Z wdR?zrP~qW9-F @ @ @$2i=ztƀBP=W= @\ha&/;!֪"A:$H7VPs$.9}?V;[x鹕TO.ty0w_L&.y]: 'XkAz˛N˭'Փo ۤZ1 @ @ @?IB'Mښ e/D 3}5m8xx8Wŝ{*IvqeεVp]#3}_p ' \[n'G:,1d`:K8wU~{A$Ӹ_ãc2C&2XAToor7d'Փ tMFk @ @ @W򟩆4yrDIIzz @r_'l~KQ5r2o^ǜyo,si72AnYiqng^?Wtg$:XeHE<ҬƏiJ, _~αQƒqzi';Q{7=> qMfnq4gnlב͚win xo͞zl?ifCμ(|7"ncSf8hzݖ{J^D4aq}&\\T재t+8 n?'J2o_w=K]3[3 kmnkZ'fը(c[=G24> @ @ @ @ uެ'M(--MLJkWBYwV­ ?*A0]yan@$!uꪢrjQ\\}x9mۺtQ 'ŋ" 8xj@|:5rUj @ @ @ @@*Hĉ*w <f z53gT @ @ @ Ю|P<>9n̊%CPt* @}Uhaf^P0z!@g Te%s뙃3* @ @ @hW@>]L555Q  wXNE @ x- Q/LQ#s홃3* @ @ @hW@>]lhhSDuuuwHM% @ x-G@P0z!@g ^}x\s=spFE @ @ @ 3+WgVT/++"+wXNE @ x- Q/LՇ.]0qbDIIIeZYQt* @}Uhaf^P0z!@g T ?gΨ @ @ @ @]vy:|rQYQŠVSD 3q =Sd`6鬞98"@ @ @ @vƘ/A0A8)0p@cʯz @ @ @j''M3+744DQ&+bwV­ ?*A0]yan@/hG_{۩ @ @ @TeEmmm[Q0z!@z̰zaB@(*wy=spFE @ @ @ ᓓ&ONWT/++nEөHUyA8+p A;;FF @ @ @ڶ̙&DMuu *-~=7ޙR 2F2.k!k֍ T@PG @ @ @ꅙqGmmmEA  7gA&@ 92B @ @ @& ޚJ&Lՙ+**b=wEuAO @@d֞O:6,:zÝd  b+ @ @ @[@P030iҤ5ztEqO^Q]0 @ lI~YGA&@ ܹ12 @ @ @' ޞNύ0!]Q= YQtj @}U Tu\AMwP_0kM &ZN @ @ @ @@OT/̬$A(ϬhbA°ـz~u\A];= ^k,G`ʘ#Si @ @ @ꅙqGmMM 4(/^V @Y To+;7ܚ&@rvz8do/ @ @ @  3+'Nʪ(--"A°ـz~u\AwKbE݀hC`C7X  @ @ @ @' fv&$Ak1wZ @ 8xoqV1 @ @ @tAPzUuuGcczaXBflZP=Y:vGPskƻ&&@@ -7dvQg @ @ @ @zafjQ4XI7 0 S/ @@O7Lz:vGP=_Wx{,X() @`ry2!V  @ @ @ @ 3++Š!  k/7Y gG׃;w'㹗g &eEEEOmd?Ox~ٹhiْsKeFoI }dGKO$\Z%Sbd?7ewכw~s{'}.O:H&.7)kd'.m~rflQ#SPluc ]9v @ @ @RA0!ꢤ$Њq  ЋkA&9ABk @ @ @ @& &M<9F1`TU @@/謣z~Z @ @ @ @V@P=φ8iRĠLP=Lz=/L Xa=oE°$@IDATـ嬣z~Z @ @ @ @V@P0ZkŀBP0z!@z@6`-DgsԚ @ @ @ @{644̙36JJJ' kAf;( @ @ @ @T/ӣ:JKK(3[a.L/ Xa0!(^O @ @ @ @F@P0Q[[zaHBvlڋttQP=?G  @ @ @ @ + gv̙32' kAf;( @ @ @ @T/3ҠzEEE444DQ&X K6$VO @ x>0!(^O @ @ @ @F@P0SLHEEEa  Лk/7YGA&@ @ @ @(za<+ T/ @@oW_}5/^~י @ @ @ @ Yz4ϲjǾԩS6JKKSϢ֓8zl  x>)7ߌ{/JJJ҇ @ @ @ @+.YϟY i1f̘4hP @`9EܹsVU j @ @ @ @]&]M=ã]vi+**"T   @k8w}7}c=4]^P/~ 3 )ANqL @ @ @ @@6mZT謀zg'@ @ @ @ @ קA֭>贀z4 @ @ @ @ @ L6-# [QM%@VL@P}ܴ"@ @ @ @ @$A1cDIIIzVT;sN  @T_A8 @ @ @ @ 3f̈(--zz7I#  @ @ @ @v>}zեA"A>_@P=C= @ @ @ @ лzvE vw @@!  @ @ @ @z@}}}Z1`T3 @ RG @ @ @ @B9sfFIIz/cDtz @ @ @ @^%0}(**֓P'͆ @ @ @ @ @-DғzUUUTTTr   @ @ @ @ @}Xs5,(޾ @+  @ @ @ @ @`9IP.JKK8՗4 @> @ @ @ @h[!.򨩩A!@| = @ @ @ @&0~ʢȊ!)#@4Toa @ @ @ @ L4)FC EmjW"}L.u @ @ @ @ 0!܊Y  @  @ @ @ @"&L555QRRE+T @#   @ @ @ @Ə̊VT @@;Ĥ @ @ @ @}T1&OG2+ρ&@:) I0  @ @ @ @s&MJ(^oI `=i6H< @ @ @ @ @}ƍ(//+}V}w, @`% \|F2 @ @ @ @4yrzYYY>XFKzzo]F @ @ @ @@!O514 U @@T @ @ @ @_`Q[[Ezz @zzcwH @ @ @ @@~&N̊xb+ǩ5 ,G @ @ @ @4iR=:ʢ؊PjKA2 @ @ @ @?aBzT/*BjGA3 @ @ @ @H굵QYQ}ł+ƨ ЗlW @ @ @ @VD`Q[S ~ 6 @@T[n  @ @ @ @ĉ*JKKHPZ @}M@P͸%@ @ @ @ @zee <8; > ޜc @ @ @ @:'^U](9>  @( g= @ @ @ @ qGҠzҮ(VoL]]w֬Y%>/ @@;Ĥ @ @ @ @}X`BzeeWTXQ: AN`J @ @ @ @@?aBEIIIzVT7MtF@P3Z @ @ @ @ c1z(--z__ @&Ӏ @ @ @ @>$'Mښ  w @  f @ @ @ @$^YY w @ 0 @ @ @ @qǘ1cb}d& z @ @ @ @ ЫbQSS%%%z P0AQ @ @ @ @^*0qҤ(**֓u֬Yp>' X @>, އ'߭ @ @ @ @ \$>qĨ򴾠rT @z_t/^8=и#u]785jT_ @ @ @ @@`QWWe3K[Q3kU |2jGUĈab@KoϽyb†vٿ_qlX#F:([>?^zݸ偗^͔զ돌5*ڬ0ތfM~Ŏ  @@TS7x7Gl[p @ @ @ @IP&J3AbALTiI8pFh/'Ox01z]?N/iNriNNVi\…w<2JO75=Du$@Q@PzUW\ofzxaÆew%%%ꫧ_Wb6J`U%'tR\s5f׎iӦ5+s@ @ @ @ @' 444)S:܏zfi~qO6*潹 '>8{G~E-Ozq%HWkoYAlxY  @@t9fǹ{.w޹O^8*&@ @ @ @ qի3+EQQ՗Gm>_L$D>{{Q9|,O=:m㼃7eE߯9?+˞{y{ӳ ?+i2>aC ÒsvΚp+gߘr @" ^ؙ^Ѡz2u]7?2dHaͽ566g^{mao桻< @ @ @ @T`I1jԨ4ӘYa(iI6fJY>5o$~@YS?>7.jA%;:럌+oy&Wo~4Qe8ykg^~;@Cc5#˛՛|Ó񻛟iV2~bZ' o7։~O^hAȍ;=rt  @@ 6z2uY'.^zROKKK 7 @ @ @ @],0~„r+/[n_PjI; |7ݒ~&֭+~qc6ˬ?w> o/ȕ%;#>|v{̪MzG}Fd9Əϼ3wZPT5Cza'k'tRz۔gώ{,Mo28蠃b]vY\ @ @ @ @#0aĨtp+33ޚ}8¿b㏭?sz;͒뭹JO%;NgȜfeكoR{ma{So9+HP};lVkֻ csv @@tdkAm&NuԴ?_}nil#]wsO[<>fuG}4x'W^ Ĉ#*/CJK6vb߫"ح׋z-}-J)ڊ``!*J 8{9/r;|8;;ߝwwv7Ԫodбv=z[ov>hXrfPOQv.:&Cu]JZvwDpwAֶm[;#؁ @ @ @ @ n 4z}mQ'ߘi=5-ֳۖ8!'skd7MB;I.+wnV\oμ=WŅV=QYYw|E P% TeE#?s6dȐJH4oZ ꪄBk6!\36޹%Kuεl҆jݺuNckп*h^hѢn)?v饗&b,]Y|7ߟP駟nK[MB|Inĉv'A֫W#!; @ @ @ @1?iիELW+w:Gn{ {qh?[˺sax֮Y_U/>]s{QڸP٤ N&jGy6♯P=H[uO`@@#P=4Wٳ*Q^x5k BuY"wC~F_`;Lgj֬e5]7ߴ3<3!kF쥗^ q^G.H1m4wJ;aS Zg19SjXϞ=ꫯN8pM2%!L3]_y啄s1bvm $?؁ @ @ @ @F :B;͛7/׏^zj1}lnhּ_߉y"}f`n4.T"Rx~mq;?#x @i TO'\sI*|N'TOU)_.\ڵKܕaÆ6~x+VewÃ%6tS? [c^xaPu^l YO>dT7m=ںvwyx= GZu vsڇFaտ$_{_dBo%!Q]/C[.- @@KP矷.(jղ~;TX-EuXV7dP\rpgmiw6[&MO>1Yj>}zB޽{_)GM?lРA a'|M81!u= F:x6iҤ ZkvI'%Ļ1-~&*MsB @ @ @ T!2ٶm"zzYY }0hԩaktrܶ #.>!"as2`3n|׾4 }2cQ:y}{sJz?".TW'@@@z~A.BŋۑGiOD.]l̘1aǝ,zִix/&8$(~(X &O<$LfmfÂ١%b޼ys{gzal,~zVwaw's=zk6ZhQhQOw!l0 @ @ @ @U<^PP`5j@ycQ\ <ۣ׺Q7oy/oXH'^-5/"o0y.9vKۢKjv_FB^8'3x'kTVVnxV #T %P=-# %*òVY:u)%KJsα#8" O&TS &Qy;lG%oawCGy$!*.?c^yز~G:2 Y?<߻ck++w\$k겪.רQ# Vu e7ߴ3<3LH.1; @ @ @ @=zu֭pĢz6u`e/.@Tnײ]uVָA1Gלmбq/M?W'M;buKf=P]﷾_'` BhJLKAwlɄݻwI|})'y2'qweپp uwlx㍦Nd|M72 Yg{0`]v1NJ+l]wD{(確>:.K/ۣx @ @ @ @ cdže\rʕXTOwk֨nnV;3Y*vP^v($}/= yVv?HXr}۟B6[iVMsq`K'TS}'x|bq,?ʷ w>j}6} P% Te.P}7n6lU*P*ae/裏vBz~¼,|v~}7qڴicO>d/O&z|yV]%7on?M2g8YWC ʪsm5 @ @ @ @bƏobQ=Cx&ve`-ӎga}]=jJtmfoҲDx_ißV"I:޹{@|>9͞zsfG)k~뭷FᲞzˮ*vѢEQSN@ @ @ @ T-޾}{\ݶlmժY=cgߙm>,]DWP}&F-#R=l[e.PvP׻dMՎvo Gh@@OΑ-Z$j׮m-[:^{eݻwgZP}̙&q'y2oٲeˬiӦQ6lclIw}ˣzB^>f%qBa&zޜ2/i ܺo"+幔qֲiԮa5kT]nsn/-bH @j&P=״P]gs7$N6lmf%N3f$oFag<#쫯vyglѢEQ '` 'P]]+qWk֬-\0ڿ ">]|Q\mnk~{ @ @ @ @7no Z`ݻڪ' Y?Z *Lz~/~yK~w$#F֭[Gcy6u(Llv[v-:t8O6B|_?U֯MVSO?*p@ @ @ @ *@`رPaÆVXXP \sN 2@^FA.}5YK]zl-.]?`~xmȑ aw%]:d.zxbիW 1עE {z̙3܎mڵe @ @ @ @ P Ȣ8֯_?Ԥ`Q 6N  TύWA:K6xLMW'{_?! 8ЦLvgq} an'Gy}嗮v}/<ڗgС#$iqadA@ @ @ @ Pu ء 4! Tm3 @ Kճe"TWuyꪫ?X&MbݻL;~xkKK-1zVJ) [ηr5J&!C؁/矟=3R"@ @ @ @ *E`ر־}Pj*C^.?' @@i T/ y!pv%$eO}I'UӧO70a%bx߾}Ck+,\dnݺ}ݗn's@ @ @ @ T,Ǐ 4BWS@Vu @@ @ @ @ @ 'XNLBjժ!TOX@ P6@ @ @ @ @ gQ~3" i @ @ @ @3fu FXTOX@ P6@ @ @ @ @ ѣG[ΝnݺVzuꙀ@N @ @ @ @ رcC 4+W"TOX@ E|'Wy@ @ @ @BUVeN^@ F`֦M_>cl؅ @I 85/'Id8f @ @ @ @`5@ Rt$ ۷G^%>' @@85/'e?"?@ @ @ @ ԩSgMWCR3fu9Xª \y:C`jP@DI~Bp@ @ @ @Cz~8R ѣG[NnݺVfM [@ BTdr G/RC @ @ @ z T_|)9rm Zjի^!@ȕB\%OP=9B!@ @ @ @X3!z۶ְaC+,,D^y/5g@@ TIH) @ @ @ Bp8ޮ}{_Z  "P=Ƌ @ @ @ ^W/_Jz njU Bt5  @"@$?z~8R  @ @ @ @!P=?)YTo7hEu- @HGz::!TϞ)!@ @ @ @X~j>buo Us BR@Kz(A @ @ @ 81@%"j*u֦M+((ZjBJt9@VP=?) @ @ @ @(,,FYn TVBu @Dz&B#Tώ @ @ @ @{ T{8sC@BmZݺuf͚իΥL!@(-%z" @ @ @ @XY6|ujժP]^:U mϟ۟C׶v7 Q^є _z @ @ @ @BrpB!PXXh:t`maQ\ZN PDiۤO%ۻ) aFznRF  @ @r6@IDAT @  uY 5ڶmkqjVmU #+xꭏofԩ]J_9!@B>LdjB6t)!<6u\Y{ǜZH$Ό @ @ @ >W[Jz$I9rmׯ@c;(,\eW|X>H~a{[mcIO[|\F {SJ rM`ؤ3%_&ԱM6 aڙ9ogbi,s7aȹOv@ɨP=wf @ @ @ @`@Rr$0lpԩ ,&ձk3v%d[u $sYl̋FE֣mԹm< .[>77>r5t2*4/kdUGJasgF hFw}f8m73f̰#F-3ոqcܹm6ZkœT}afm|"s=g'N 瞶;$e믿 7`?c1pi4l0[x5kzaKlٶpBkݺQt=J3 A<}@*QANuY' gΜ6l.¸}چnz!ϓIXzu M[> :Ԗ/_Fx֪UI7~Wlʔ)VXXzٮjݺuKw;~Ѕj;v Лl \Ƿ~k%k4ib~z/mܸqa#Đ)߷W;c?u?T]gڵ_dۖ'|wl„ al`~x/# L}fw}7mU~+ϒ(?xԮ]D馛y= {mڴiQvk/d%va:!o/F` T=b Mqk}Tu=+Lo-]}NQs]L.w|w3%oL:zy7oc i&g;\vҮ ǟ~g߾]Y'8ߥ[X.P}uܪJ@B:o˰cK%?6v־eK.;~mW?L{n[n;BuG- KkWg?]ġQ` ˚?Yu'{Bܙ#{7xÍEDnh={`1s%Hkذ <شLJ^zœX{8 N9 ~Zli]tQ?G/< xy._q)r}ٶbŊ0o>!>t>c% w=PS_w~wy0\pOW^smyhe]>PH e5AbȔ1c[mU"4 aҤIQ`$s';k~0ɏSsMB:䜟~ "y 4(9s̱k/*_zݻw~y$*H6\߅1c+G M7<\<iBW_,s{GB*!Q/SO=ov 'DI2$gI("&U}>l!~8|%fCN:)0yS=4wYn%ԽXu]XmENs[D6YǐPc- [T֡=+]dARX2w5SGdΖn:aߘ6}ݦtne}[c?~to{IHw2VC:RfU%!4nߖsh Xi.~Z[Q{͏P=o()@'w ?6=ii7~DBX;e5"TOF%03#GP$>hؼyP}K@V:=seg?l\M>Z:u IgqFhΥO>KQ>箻: @|}^y%ي+P.aQ}*:t\W,jZEH^}ܕPw~߰iӦdC}Hig޽ ϵ}UH(]ӈ_l~;֑tbzjJR&ʺ JNҧ(ޯOwT$H?'?ΝSY|*OJ1￷+WCY2s}_+u9'KJ_uB5=[\/,Bn1)ɜ{t-˨#>Kw+~l71BI5Y93.M|.ϣ>j,.˖->,aڴ/jÿWEVN,&U( ȷ=,xyi쵴SzS_C ORnp2y=رc}@S>s*[h\/[i*ur붹~{Nw]}߿KҧJV_r(_} ..~[2VJqrÕ_'E&{g}Wg=K#ՠt濛jlsnMm8go[MoQNJ5h 霬0u` @%K= z OkF[6jW?(OzhO lݶ-8If%v]:wnk d՗¾}M, : :uDzu> pR4fA7oWrYe]ٷ3tu9Lf[E Y0.8ohs/F 4-)-#w կsy߇SJrQ<,?. ~+ UIXMIBώhQ*Jzj6Ĕ?Q@%ԙ:u=Ѡ^4x$UykO}FhѢzz|PWKKkP7󯓋rGuۍ>=* @Uѣ+qe㮬Bxy?MN;k2_RYT;VqKctqDžM␳2ꣵn:7iYi "5ƨrɵ}C@)oc~%$믇0NtB\ێJ{~*tǹ/W X>S{_~ اϚ휬Bԉ/_Z/'IE_oa=PX[N?tWT- ϙ4>K{cYlsIum\|m< ,\0̶{۾9UҝGTHVq}>'TVs<g+nSLϑt<.oGPOgPjDiE ٝ}_.].Eߖ[D,|Ji"4]vSN9%O5gV:DIq[lv݉{]ڵk\2ygsque%CJ&2J-{^~(&\yI׆E'L8,/鹢}S~&/+LR $38szU}z b訧Ͽ s4WZP5' E"n[[-tKOXj~0|;ڥd=%8ж) կ?l_z 2m~} bē6gAeKq 4;|nN==6EQwvLa Ңswn6pVeg؇ PU[lO>M-Jt?/o+ WY5[rT0_گ遯xnbHG)*rc}vSA얇_/gMHJ'Mi$z3hKEB, ezHRj>R 裏- $?^i+Q={nĥ F|򉹏qK]\:0 2^~%TfBu~@D@eIC%o &Wх) >8wacqzkd*n5&I]q ]xyޖ}C(g:>PQۇoǎ{^ݾ^s5 J^Ҟ,.9qeyKՕژ1cݵZ.2oU&Zh'뮻2)Qe:~.5%T>>zjg:2,uYzw}.UYդ4M|dW]v֣G(:y؏&yp .*"JyR| eOG*vM|spgY_^-w[IC A$vK7ޏ> &Dﺲށӕ~yLY"n- 2_ˆk>U:|/B|-T ȲZrU?] I:4VrdErY!K% S?,Bu~@D@XG'{vElMȻꪫLK eY? O)j6Jw}xwZes*ɕ}Cg:>W+"۱.lJUkFTBҴ]COs/WWvjR?Cp\'sqo~ J/˃P]TG2]T!L}Y1OR周 -qzJsG(.t./ :63qϧ\OdI[0K̚'+ۥ|tD+=7ݻ3ĕ-tl68nUۮJ(/͚x'Lv]N@?~RhuL%I!TJ @H`ȑ֡CP{!B,/S7d}2}VX8 r*B)̲|msLC6:j֦Z߷T'_ L|w v܎key?`}lJZf$Xf߸s[|ѹƅޡUS[NoCytnrիU;mnf[hϿ[n7vD>@K>fkۨkNE\߇X!Kc_zƽ^XΥ !~*zЪfa60}2 `w~e͟Pp;s"9B` TMgӇ9-.0-ap[ ?u@>"fYk?40*ʂB:Wsal!@^2eJx2|n* ;#mmM8"T$AdS9_LrHdY,{%UPm/ #?t=]-Mȇ1΢4Zrxwz+8noR KvT_w_ez;'?.~1ji&A; M4q%oU{0Mr,P}m1YXLӵ<>zj^M]̞=p"u LڸڦswԩS䚠zYN%GnR˥>l|s}>][ogif$s ~\>~yϒջ@O.2 -*+mȇ1Ω4eۯ WHwߎwzWYlYhI"%<>ygU,.h5!G.ʎ9;رcC, a@?zk(6V;lVm?~Y'ntgDBc}DOE;q͛77eڵﲽ6Q Y"P=%?ٜGT_tBxZC zD&/}&_&goϿyH& J.c+T?o~~~x_ѮiEή\1b}s_3Wt}*~*=+sY2JsuymߘP[W^Y׊Nq'ZX s7 KۏoVttb;SʕyJP4*w6mڄezrV ^j ŹB֔PX:jSf$Bo^^ЋQPm6S#܏ ջ. ,?WViv{٦뵷"{=CO_g]¶wY.GVe=]6^7{έ9_ gss.=\8(5Th)<K-II7?(>]veQ}|qtX=>? 7de`ug0.T D`nͷT(DVeOu.\~; 2YTwH@@$WhpK_\[òs].ID~W*VI7L_ q]?qpʑD KvT_Ҽkqx󹊏&!?cƌh0]w #V4IGu9BoQ3~Teds,/B<>ٶ|N*ƱELr2ĵW_}5&˒JMW H̟>IzjsL?VWf=kۨJJaMmNY>;?#m;F^4(a_?Fxi=oև_&}}kմX % <35\s%<=B\ce'B?]eP]'dU A_g$ տbcG_̵+CK_'},9#?ODJʌn0^{e;9uڠA\TV֭['@@'[G=3:)\xyX]5Kl("|!eH}) 9%:I'd#^iG> ןUVdV{.}{K=ݻw(҇~YӊNz%PmGSwd,皊m-2J'DAzGM/g}L9~ wuהV;vog.w"ds=|ck⋞r{hQg F&1DZE.k&Oy$>}z8D?ont mZ CɓmҤIaT::FC}Ogb(+M1~x?Kv~)SGqi%3◓]ε," js kkeSuYYDmʔ)vF_ߒrueygs*}7ߘo\c17ps~pano.]]c?~=#?.Y~aPU+M:5OitVǷ8sF`"%t?ǢzW笛?F7]} D/\(Fq}޶VbׄP]b,vsia/T?maxVֳU߾^A[J{>s.%PL/-^(Kv 8!@ 5aΰ|M6{r 9|6E|!eïftngWpH6 ď+i\6 wa>_^QEJA^ hI TO>Al zpY9UH"P'o,P]Հa3BqE"xom]qurK|GP ]|šO7`Nn8^/!@|ΦCvF>Ѿk{w<]pڭ[7]b+Vrgۊr}D_u:Пσ>hof%KZ9D[mUdD^}TNM71-۲Ϫ @ewzh[p6>R)gmJKIz-ZI$Nfm쨣2$n,mGWygUťf~\>|6"FY^wuC0ٳg.O 6Hn_~ILön0/z駟WboO%z>t<>sѩg|6NvM2dH?~k]΄ql(ҥKE? Mp.yt/ȥ&fˀYGJL*tG?|<rS->9RPPZW~G)oL.,KMP"`p2W_}EiBʎWPOYE9sjvyEwl{feSqe}Y5qҍ㏑%M4oڮ~껗e~PKXUvGs+WZ!wܺmZ s+^<-9,#G/t0b8!!?Mi$FֲIxо9js_vr;\K{<BwfP4JA^ !#j#;gYb-l\( U~|ˣt|]Ad=׽{ТK_'DVTDXm۶5݋ҥzjѤ\7`Pݑd @/lOsB@1b}a@Ӹ}ڇ#zo/qS_,"3,gy/(JT~}|ALiOeW|⚉~ǚEߧM>ylĉap-KsߚWT#S{=ӱ4)lѢEau A} \R?0LRzǝH&^ʻ\քPY$Z+M#u}|^3E*LTNC"SY+?d(ǹty rJ86_Wٚ$e]ފ-뷈LYD+ ikf5=!Sqm>W 4B߁}tW_}ud^dh@l8ﺲm˝g׮]vt9cTa']N<OIٮ*"z҆#T/-9A 9iA`"_zrNQ/m~G`_x5_&EDv+ rkB~ul΂ ``v3sB;ܮuߠ ;Ux~XM ?n}6VvS;>@HO`u :{eذcbϾU{noMcqN?kۢI ^[KѪPcG+ fXB!P6> -[,H0zu:Kjee w"wP_6]9,c|@GK]0נX5*ZJczC[@%ev+E}>}} t;0}tk֬]r%Q|2(nu %S}]KOK$ib9Y^v/Uwi_|ETpt]NW>_!_8+FhJHCc$Ok/VLԏuii eY9MBJ . VKW0A㿷[Dg ^y{w#:qAxq$Ŗ x*еlVr}x5&Mǐ}e A&0;aI&]jb_yI׆ŹsoeA}4qs]#]f˧<T5 2 PQWCK6~5m%Qsoo_N; Z:t~ez?}~q]}ǾP]tgkM7A@$ 93YV ᭷%W\a* yT @dYIGvڹhsϙ˵h† >r㲜ugqPn,oJ+J:믿n?9t!/q,J !GY#5Yfq#&H[\Yۇo;ڗHDGZk-R岖DꚔ IwFrKǑljnwv,Ba_'P=Np.[k~\>Rqo%vS~,N<8|n?r9ڷ/r>{Ut1I-?&iٰ⃜xq0It({;H5L}߫\zVNtIJg[G,bQUg>=#_OvpR%}Z}Lyҫ~Q,Xշ:u$oBٕ:[sJ9ss_Wo\sS%\j}9MWI4kҤm7!u͕[\9ֿj@J8RݸKoan~63q7p~}ǭk,ONyZ4)A|;&JyUGz h,iSg̵`". "ό7 7ڮ9hQ|ϭ7=B0[sx;~_~g /^Gkbh"ToNvzme|ivC/ڪs7qunY֚0aBx"]9MXR>)NV.Mfɏw~_!TWI2Sl%V~ڕ7l0裏]}(.ߚ}dWCuH$չ>R)Cߎu/pBG\veU_( vlO‡o9Pb-?.~fDB~駴Y$^K.s_/__%+H?Ow~qGmݺ;S|ƿy⿳)SLcjg{l$T]U/x̟HiE\>m*|{F>~yڬ϶ߓVU,qg+A*LaNWq:[q;V@WS\Se[_`U;xw6W~i.om7&]8 B|[7;lʳ:~6&q~~}ߪw'_<ۗ_.iץ)zY% hi4azIFQ]jϾ;%?׶Dqω׎ G7F>VB| P]e+3.66*P]]ƿ`pjajՃ?VH?|m{ne+T_ p}eQVM%._K(-}$2 O:,Im ~S@FWɜoDK3K. /#. k#KrzܪSd̹.(Cu]^(__c E@s}ѣ' H&ŗw}gbV[KPk?s;3K|\t~,vQ%{nܱm[4>'L(ژ`w]v %;o]~Y*b'PP}>tZ^dqP>jja`uOq#0SrX_d Y Õ6l3;㢂|+n|>*O΍*]=9g~\>Rq&&=6iҤW}']g:~.˷z+|l oN=Tw[%"Mdr9$V;oc׳Aj`Pt/˿y3x6/VpeI%j#Cqzì{__vO,sIOL>gVg>=#_8?Ǖ}#=YGazG\֔ * jۺNMY*۷oB^~dr4"3Q z_r-CѿQܥm*UǪjJw .4 5A_NF~%c_˛j7Uxp"[W{AMvqvMm8~~VV^~|x/-Qy!T_]d) 8:B-aB彶䷢k8[A9F>=ڤ(^;aom.;}f_!$<y@IDATKD~ɽ_ ?8ж) *P]H8DpBwnEb++?;{Ֆ ;N$A@v^~{>kGήxalؑ{m"eQs=,WnyѠp%?Ww>d_ϙ4C>nN5҃fP= HY$A$@ @冀>I &u!X/7̢"R#:}tגYG}L9sfW"}.(UƭΝk/E/Ze˖i!UX%?~wGil[}%qw\]3j |*X{fO P HKjAesmw- 7o<|Q-[W5X<Ʊr-x:q"Cl$TAEuFWٹb7֮:h?gڬ쟷ہH4od@|W3sImQ=3-{|;=/A'C˦1vt}r 0Guqݖ9Nbomgm{u&?<dvaEK~aOno}uhݕgqj+4YU%-5;^.[Jzj6@ @*+Y=\,]H@@y @<\@ȞBY6|u hőPcY-9oQRTTTĆ&]DP -*"((RT{Myw&q\K.9r#;;3;#k֗=O`\RTWwe3܉ ;cA@%O> GzA@@@@@@@Tw# `VTPVT7 &@P=7Tߊ        z7 %4~$$$+{s  P@ф @@@@@@@@La"F dddI$**JO V@@5՝JP9        GzA@ ˄%>.NAu  @^09:7zA@@@@@@@tZ#Y@EUP=&&FBCCu9Au3;  mSho}!        J]DdX'@%` X|er˗(@@@@@@@@J֪͊\b) $BPXN37  Mq@@@@@@@pAu8 J ==]fΜ)qqq@P  `Au{CP=o#j        @ T/ GzA@@@@@@@Tw# `HNNx cEu   @nsӱAu        zc9j3fHttwPs;E@+E 22J[[N B@@@@@@@c{s.>}Jzzx ]@ݚV,-Pc! . .Auh        \OzC`ɒ *Af @p ̕ ;65       8Ws= ӊ!!!y;  TG):6       A³J!0e aEuϘv@ /[       E/@P/dILL@&^A@WTw*Au8        8GsԩSꡡFP+  AdWNP=^F@@@@@@@ Tw/{%**JBBBXQ;F@T/Z6ճP       E'@PrP+T/]! +;GsEZ:bؼum+9 #'@@@@@@#@P%wSLDTOMM cse"%%EDFf  xAu;Au8 AuGT>@@@@@@{sHNN ___@O@(^՝3՝H/}TwT"@PSfD@@@@@O ɳϽB`ڴi+AAAEP Ks擠s酠 S{Ls      =ywWL:U$==+@Au'Au8 AuGT>@@@@@@{sP+IHHdddTw2}" @ $Gz!{2'     xAuO}:2PALIIM##3_ @@g Tw$Au8 AuGvٴn1/硦m3d{y%6!TY 9jbI*WUJ֨s' n  P?~LOK_|2   -@PŹ^q:uƊ zqm@"@P)⬠c([51^d΃Jю^JYjn76$aS39w[/޺Ў y 3eܨzފd﫟W7mk֮) 7uݷB$8$Y+6'o~P.^(-[g^z:kSO;!$_/\*z WbEv\Ƙ@@R@^VV-[#̖,SB֪,MZ!ah6   YgTP=11QtG'@@;gTcٷTӖwJ:QLY(k}NePܹsۣeos;yMK1aS3qօvȬe3tByuz/ҿZ:53jO2נ8'1Qʔ+m>Nns⬠iezh2x?wnUòp"=Jba`@@<ԧ86Qman`PtNbl@@@ ^T\8 ԧO.111$~~~BP84 N NWս}CNΙ?wTϿdho>TvpdyY4lw#rҹr ~Ulck?==CX({vObclU,W%JD7|uYANOvl3ύz?|G񕸳?3{)w6|   fo?mDۛ6ПafM<4yzh%˔>:SK^,JM6   TЉ]&}}} L@@TwT*Fw7Cm9P{㇎=)(!^6hTкٍz7dM>? PΟ 1vv9QG/۞>/\()RҥKz=@)]@⬠3ge}R\i)YdwuPɬI% 0@?c,Q0IjuΞ=;JphDV(ZֱڪO j#@@&2K^ċIݛܙs2{r9X٭*s   @! T/dp.WRJer2SRRp"#3_il@y>P64iqxx?9E}^a妝Q;{p5|5.'t>ɑ]u^o]J&n8;>w,4&Y~9xDhXTtYJ-e50"oq{KQU<Ժ> yIkߩOG)k'"۶n4]^liy3rݷYi:8~@%ߛW28aݳ2o|7u9)fu!I..^*~Mje׎#Au6n|pT]Ok\W]:Q# B9tT?ա{MbtpݖG9Z1F֯`$GھzA,^W}5i߫ბcx{g~3 <>   vQgb#[[j?ʂKt=(1 rb@@@ Wzzs-~3iW&V+on.ꀏzPg˫/~W[$: {a5Ve{ر_@Xؼ5A٪=dN\}jsǴgon֢|9竬UZOYϟ;/>߾SHۇ#A)?,Q.ںE<ŋ}dƭV妃eu+!2Su2f g_~;(8P$ TW^:ueȨA3U,dފz5x7?(ʧP3/=m*uOɫ]^tۍSd릿jÉrNU/sI[[, ~^y^U*n{l[yy`/)v@@@ oKrkEf6kٱ_FD{R~M(D@@@8+ӦMX ҙVT/3!x@FF9S.g'17˫A{ns ]Tj;YpzֻFz1T_*XO*NnMOW~ZKkxc㞛Z]n/Sޟf>ѻn5y@yc}tVRNU9v"8AuTUoNTRIRq˦uԩlh{]Ou|Jj^_C!e 숒2qAs*10YJ}\ktu綝+DM[֠Zѻ5QRkczj:^طMZРܩd̻ԯ-?+o[Ǐ߭x~ys12>*'^~cg|"ꡄe`tN@ʔ+#~]'{ӝyrY/>~5b*Z:lOmti/ jwn  9 9tLu+DiشgN䀘l(Mf= @@@(l-ٽ HhhՋso 'yfOftucH0Z@UAu܏/lޮR#)~ii꣩zU{H|||d$R8vRnFy=Ho3-1V3V/$jw7m+$s'}ڨ\4j{T{#m[JN֙505\ھX^i]g鯑\A-,fxÁƃ*R}M)={`OSyZ>;   `[`eۓvEr<3䬋rM5MGrF9   *@PP$''KŊ%88X-Ab> #w-9x@ҚQd Цvu3{2w~]luB|}Mm]-*Fr yt<0(@z(%d>s /F:T6E>w.6y}:OVT)'^5rqQ+/@+F_SU׳س]\lYQ=W2TmUЫ˜3U kPWuݯH}+o,}_=B7Qs=cQسday]BAi8  ]?|Hs_)&vCz  @@@w  '$$弽z;xٰ혜kH <IBT$VZKJp[I~pP|[A F`ܚeVGJʜu+匌l~\WtnYGN,??|h{[$nK%e Ѭ]^&ӧOgeOOt8Z*> FFhF 5jԾz{ 6yeVM7ln{^oi:e~͏u}iyu s?Ywg@@ [7HZ|e;-]{/?}Vn {2(ݾ_kSZVКQnGTU0<0(0%|>U&@=A;}ߓσIA^Ͻ,~h|AIYvD\mEuu~/VT ICidxnJߪeP߰r], 4ՉYf'ϑ-V ;tuEPd$gNٓ= 3lO8Pm_l#ts-uYVs2FPnN%$xE@@`v}?֍no<gCY{Sn?@?{@Yp   @T/v.Z$EXQ=OP]u'AJs&^8\p [澫供sx_s\v ;RYaU|XՆOt7>Fzm`='ɖ9Юꏤ^4zo~*;-5/>TLhLnmtlXYƍ*˕~vGaEʛz͝/[Ak@ӝm2C[^ٖ+9KJs%6_eOkmUpee_J0iSOz|ľO ZmoIc&KgSju2HXX↓3suPaEsQ3MfbCy].Aul  k.yzmr#yː^sZg2   ABR!0aDP?sOyL{֠2?<+L9-kTӴuiYU[tXՋ#.PA:*o+Eɻ]ZѠm-FP]/#>z 1vZo-_V^}egv5;]2w,Xt}Y#JRrEy!&}yIa׻:iB[AkvWŖ:u%BF \oԤr@G= 9ydAuFj?֬+^^2)e 1IMMeϠ^R5ǡyD:n>vuP}ge}Z5.^Y7iѿ}Pe`F+_6UzݼatkC| T@@ xi YkW';m'IYB@@@ [zas.4~JHH+3ٖA2sl;]_>\~뵑kǖ;'\_7˩D/$7\SF|,fWkm9yAtDTKb²WyՏnuVVcs9ٱlwJ^Hr_>T+U]@V0LSVv],`|bϡ9IMK7HtYq/"m-*Tp`j&%/)h-? UAʱVk^CfHu(!MZe}riQukׯikl iOtiM#TQEWWTxhY0c. Ͱ>1MFK-3xhN:_5>")@\$!9vcO=d8TB_o_~IUPƖHfU[}Fy\0V}u)iݸtpnmq{ZN]9xV?u *!Je9>VuԁuhGAu;RAK2r`AYՏ=)ovyG+/_{ZoY5Bjѻ` G09s:pDnk\_|,jO^l>e<1%$,\ ZTіj}%j};u!֯#5Fbcby0e I ߢ\g-{ ꠻wY:u [>ЬESJ')A@@ W&?TnϦJQkdi_)W*PvklgϜzL#¤}vRA}ox\xUAK/M׭\t;ʨ_uIqS{[63Vo eʕ1,X'-}/|A>u 8vB5VW[xpyݣr2|T\.@@] ķz/G=pm'[7#Sџ2NvN*_{E@@@"6*g&O( 6RbFaX"%%E_=22/mT-"#:irY1t<(_*HTG‚/l}ɼ[6VҬ.Be}0 ~ڦԩZZW7s(3 K ɟpy%d׉GmjƇO$?n H'k27݇%.2DZ6O7|UUW4e@u{O5zvu;Itx\k|"Ǧ[&v~Hj7;d7ea<ĤWYn7;bI"ՌOml#M2h{y@P=`9T/젺ƲE?i_G5\4elY͕gQ))u:VuO}E|}} 6 i;s[Ak;SRt\-[7_|+'TWoR aT]a?_{IhPs+HP]u:zX#=fjꕫyWW~ ~eƳ/=-nasr}P>~Ĕ|_fW {^܀@CP=yyň5I'{{tHn|Jy 3:!㡫]Js yu!.SeP> JP j8+>hٳc\]S/dQ$6ХoekRn5iR>rSҿp]d룭ՉfI*X^L[AC){k7o] -?uɬIé ~+~9mg[9Gwm2ᓉexDZFw4luTZ|*11RtI]o2Y_HhxvU[iIe%r!9U*A%b<0jC?~_Wy;uqeW_s1Uכ]iyu2"呶-*Nsy땡⛕z~'-W?ϡd >2Z(Yj1#7Jqndy=y|29y>gPoL>  !{>=~vgPIHX-wߘGF@@@9W,'ŠLu~;딗5˚޴ʥd3T#e/`Ը txN6{~ 嚄Q+о?s QұE}5DxZ@ЈĔe;Lhi(Q"Br+ 2CgRdN{HِHf>_yTm?{OIpW=mF=vi?d2h{s!^4MTѵS'FX=(8PJ)!*~9s)AukYv#Oz,ckeVn-I왳zu`PNmsuGuػL2Q3T{tgNѾR>*2ׇ"L( 2Caa>  O@p,!Q>! @@@w ˜d&ՃYQ=TWAsv%g{RH>*A"oݨ<|gU>E]܏)ПJxbQ?3'sZ!}cˠ*2S+o*W[1:S5m|Dc0jkV,!_X5@%?VvWa_M{r\Ha* XӡūĕH[({c5GIcB>cފݒ?-V0w-͚uc{חRs;,ꎶF~ Wv}w5(ߠ5aSY̯uk<:}ꌱ~#d|xȤ|0=#^jsΓ1~˞Nn<)+Gvƕ^@@@@@@w NX@+AA-UˠzpѹU ᏃrB>v'Bd]V+D M6MXORFYyr15]W `jb~UcxĢ^|d|Э>5nn'=o2Yg ?yN]uKۦ785>#nE!u;[xgoAtUVD|2u{|Xmts HZ/k,ꎶ7; f Au(H[n_+ׯ{p$׎d(G@@@@@A3܉{KJx /yOJ^AuS3_k:_-4+w_d,Nv}Qig2C׶ԫVZ,$c_\Ǵ!g[)@IDAT*LRW+X!Twc_za-G%5=30oy^70/z6@puP#g~r})W2s&[w_o> ':}?awˠM䕠zAԲ!݄ 7hM9~֭9Bs9s͝"     Tܹ]#0~5VT 4VTϋޠȠ ݩf;*+ߙ\ҦiEi'k|DR9&L:Z>g+y])g_euמ{5edΓrEsf7E\m>sbl~\= 6՛dU /ʠ%>QΜjm5 Dy}ܿdz7JtY۟n*9zꂮgTwT/ \fճpX`jU?(6o]W:_+ _ɮw%<"\*U$T7^o|XTW}]=$}4AaۤZjWm㊚.     Hzh@'N QQld˼ ( {.[c{*K[ce dK$(\vyy5F.Iߢ I~X\#P[n+֍3Y!9&jU! j5u/e+eJϩVC'm72V7 P$ Gk#4=>8*ѽn'ݪm}?S'v<#޽ePz4# 7hMԚ:~֭9Bs9s͝"     Tܹ]#4~^Q]ս%35*X)))addkzq^+zӹ *)G_ˢHi 稵:+Xmo  A&        @ T/:{\<TP=>>^BS5͖A'3ʶurBLժedjʖ {7۪:64fU] DsYNAu6;w }xɜdm~T@J\LWowm @ $%{O@txɪ,O_vWO(o|:Ș7ŊueĴכ%/>XEWg}o~A:w[c=T8~luyws%RaR-!¢]@X}-#e.#Ah|([Q_J@?Я=]2wgI[$"_M;YꎶyQ; ہdGv Q@@@@@@@ MzQs!0aDHPPx r{e;{JJ*E='AN['Gˇ`Պw֩`fyaqvٴ=3|gVFWwKj*zUK˲rUIhiygNflPL{V yXO`UK$Zu}_n3[EkV*!6J‚s P'~X?Gu? B{算K6GO^q7+:R ͚-ߺth{sG!\TS        P s*-aaaF9zQ3󒚚!Y2P}JZZ4ڞ2*H^*<@ʖ1oWvTp)]'j!       @T/g9SLDTOMM cs'NX@@@ ;Ǒ^@@@@@@@@9՝H/%!!Aח W@@ '9䯜z@*ur>Ǚ[Qvįp Wd     @ T/\oVM&$^^^Ջs  AuG3Tw#8&?@]>C@@@@p/5:uIzz:A+J@pAuTw#8&?@]>C@@@@p/5P+IHHdddT;@@W Tw0Au8ҋcAkkC@^3@@@@@ ^h|dT 7e3l0@P9qǂք g!    %@Pݽ\SNXQAuVT;@@B dqǂք g!    %@Pݽ\*(fXQʟS@\,@P9՝H//]$~~92^/G,'{lZ({j*Yj\ه`ٽc<S(7WKTURFǜO/^ *|\~7! /WW'_SjMԬ]S*}q| ף|(6 jYis=@@@PN CbԿ M>]bbb$((H; @ KsT_2w=tLy&yڸM֮ZoM%hve TR|dײ᷍J-կFnn@n!&r,_򽕋=AAbufʸQ%0_P弩nҮpCF`w:5ܥ۪_~^Z>@@1C\k/J-䙗{oA/uvJ% So9*R_UTYMnotxy9?.ϖmzo*kv)yt?+>Mu=w}Ћ#E5@PU߷J)!UkU&-P@@@p;n7% PiӦIBBT'# @Tw~,vЃjNi@\ݗ?ʂ)jYsI0C^&wzJi<5M>g6w'4,Df-cQ֨AR{ܯo$dz/ҿXU ش>xX\6n(L~uԵ}:Gs̓#?յ-qypi{c}vX~=G8{N6/ߛVP)݊*t7g(YBZ*p=_=(o~=}z|w*}" t&ʶ-;lV }Ilb"   PTՋJWT7KPN4  KWս}CNΙ?wTӡ=5HldYٲq|k9w>\gHk"GE6*y]¯>/-$4D^{U]Fg3dጅg^$&>LX3 "9Gwu-h6-hZ9_Z_m$I j6-};'O뾂Ca{F׿{9}> |MIMضS?(=b^*JWE%d>\`׀Pɞ߯/_0}!  LhGRr{6,IH:Hx0Ec@@@)@PݙHrrTTI:@@v QAuurH/QTrEˋ:PCnl_ Rj%5})o2}3|;rLQ2=m4VAuuG5?""%dD r j+p{E.SAMVշusr`0NF+w2]2}+fIPPKcGƊ9˱3%񺊚''6'{%ҿFOH+:oUuRsUeK ;:g*!A0~Ϩy{o3ge}g>ࣨ(^R( *ł@@ t H/WAz wA@P)*E EPzw M߄ysgv73ߨ͌H1}}/ qΞ{g/Hn%ާ] (@ P',_i-;lTݹLjd P(@ P@< 0\?>|}}p|.30`Nw(@9y|PbϝwyW0;YP=q֭؄_mw=*u*i(gv0b0ަl߃ǐ |4.f.nXf_~U>qڜ1sF4j~X[Wve1sf,5r\P7X3En:`bG#z#Y`hL\mђE?u8\e-Qz93uVWa}kP]B][to 6éѡqGܾ sFNfT7r [7m 9[{wj]rs2"{>zBƍboߨ/_%tLexW1h܀3ܐ!=5m{P/1fW969WTz3T$_6 =1vRj(sf]xr ͛zc)f?Gӧ]pE:6j?1h$:Wؾݜ}IcΐK||{8z1X?W>|M;ㆎ>:jg."8~ +n7}ާ>,1rha'k~:|(@ ď.£GCens3fj"c#(@ P(@ P Toqn/ ̙3rBԡQ@x$oCN9ҾBϪA')',΁zi/nz' 2e7 Isw>| 9qFtT^Wrq.dh+z\~OoNC1GhHI:F>/G.D"^x)0fxAu9sޭT"򨠲TP>v9O}YVW - RX YY:-Ge렺%-ʇwi(ZթRaz<]A ^Ǐǖ[< KeacC-FV EeR}[;cL^TRߕ5#ޞQ]Q=GjL[2Y/k <==ph!}^ؽ_<~ ^}\x#+;|Gsx˅A΢mT-~[-1T6zLϙ>G.\CB,0tbhux92- +뙖y}# 7g_o[I#Co xT]W6ןrkUg73G֠ÇѰbci>$D=)`zJY)O0X~x4}i} _xWm|\ T0Ѧ '!:gxAum:Z&'& ]snQ#̊C{7oh&5Tٗ&2czl6DV={]*Fw>mnN9#!uunXb\#|* xt7l\9z}ӴqCT=SD0nNRY?A#e'3/UL?]ɣB9TWYu&3'ϠMvJ베tyzsFnN>V!S^о0i,@U<*"еiuCChкfxN P(@ PW㕛K!ѢETR1}GUft "Cx<ur٨ [#~Z`n_|i*,FmE P-=i!6m y?sHc~'ڻmAuG*oɵ+708.wsO.Z!}tz'  xܦW:i#/WhseضqȂ.[k?._TR_`@z7HOHun`7W( DT7Bmҕ?Fm2zA]QgO0*?~ flw] [FL0u6|y?̘Q@od5Y_ [Zغ۷`r,7ʼk`ht]eFQ@[KMd7T!A*~.uӕfϊ!:TE$T|DUkjR5`|0b Kz:Z4Ҷ6 2YcT>cDa٘;u"A^ r쿣!C 1/.ja伯۲N3g-MA3,޺~[=t G8\T yATգDžȜjT$_;&5n޸}ZյYdM}n^~ϔܸ$&Nͺ7.ک' й(U6*+5 PM۱dJ}?wp=\<{Y,(@ P(@ P AApI`ܹGԩSYQ=g+~^l{T2EByQpW7>zZ}&*p]5C J P?&0}G;yfE£mڜ5qLZ9 6?G-X C?nvyGaPݑJ2.{}=~ޱt%s^P}ҟF_j*zC .-5+h7m 5ՄL*p&uàNU&tSTWs6k4G#(>w<̜zdω:לT|ðr7}_uqC&fOٓv "9KtjӵU+GTj2GN Oy.q>xC*7+N_v G|JvOаE=[_+BV@欙R|mɗZUW[z=X*k G22u4,TL>. od0OhvlT1Ο`m2dzȎo?xUJTT'IE8c}X9gAE0QP_*V\kUg7s&AB2ȵ-xTգ+7g_oV'VΪ w2ow1IU?'$`~ETtᒾICn'bȺ13=bڍf6TRf1"74Th#CF}î^J́z#(@xسmo$ wi|ޭBpRЬspq(@ P(@ P >TOmn+)̟?H6.ƠzMH(/kFlX+6〉)Ct^hY5JThgu3/8[cH,/@t;j3me^͐ݜHl]>3H%mqT=9v!vo }JZ O1vQ}0j4ܻs=[ V@j_ k`/yX8m9|7*/bHױzNZ?[D \ cKz!'jR:0zxFMcm6ipl2hٓ l Zx]v TKԙAm{cǖȨsin+*#Q *7UEv[x>ҨխI<>ZCGѺ~n4f6gLîKiե%*(fQi0n_U׶6]]]U6?>,Mr>`_؀|\|՘ԯv7oomPZU]6(S~NC ` 5Tn۰^<}TVa| -GƷߏգ+7g_obeV,֟yNƴ:# O 7X?g}nߺ柴P7g*}RA`񙵋͸$79̀΅߰bc\8wAK泛s]o P@ =yú[Fcu7oXեq?}#r2]8M P(@ Px. ?vn4 HEu???xzzzT쵿aϿG;ҤvGrN(/YǶfㄪZ+ToԥO?9{ K7cU- @L>\<}_P"R UmP?yGC,sdJ뉾cj8-GAu-Z%'FL 2Y/k?naΑ VoNFs %ާC_le^K;:CDPc= !."`V7OF;r~dˬ>ӣN ˾){~߃+T7]ԯ O\063&Ν9ʡOD`v=O-@W/Z~ <֠zmQ涬#csάo\Ӡzġf~eP=ܬ۬I1g<%EȔ%<߻1E%.7?fAx1oٞ<bgU)ܲ }:ţGtuȒ=R =z7}8i1RL\E1եTa9*.ʇЃ Ð 9U@qwǨݤ~V?58%zذv#V-]o.kUg7f:D$]x5#:<6 B+w#>(W*M2WnμfUT-9kft/|., Q 3Ԯ:Mk+>9TGu& Au 7tjw[DQ_bX/z̹ 2ʡ/xY#=ΘMM/uG\1-r*N]Ui|l{X}λī/bCfLz{#2ӗx8Oc|dgϠU#T=\6{56fgAuH%h7LN;Q}&~9v!2ߙ$n C[ n܆}H _c `  n x3@Bs k?n >/8?^HW[h%?:|޽\5|֍Pa s]kQ~wj9;1|u 5!(FATerPߺy mT8n'hY5Qu o<ݼq *Bqsaܜo4r %@IDAT2\oڶ1>[@nƐ zAʥͮ<"M4 ! G%.Kuj ˟__M\ǭAui9+Tf@Ъ^[;| RkhnJ:AϚpr9-,P*&i+*vyu\9zۺi>)CCf_usT6f sEnz}^hpu8~8Ҥ¤v?,[ۛv.Zkg/Qy~q(' qB6U8~dPg74(@ P(@ P >TOmn+ H  Gv/_DO \mR 1m{6WӸ9-ы6֌٨"ajQck7UUa>i/=˞1zVwU߾/-m ]T÷^!qKUӪ(6uV%5*q_9ƴ*`ov:f_[W@W?}٭YŒ(WO\CCYt 4#15{$F_ p4-RGf(@8'Foܿ>=C%wMna8$lj,ۘ[ʝb|(:~R 4*[vW1fz&妠JB*b2gP]#zMyuuկ_m~ЦWvǡ}[z'`FW!~o%ubJ2FlXYcwQO~5 xh.( AN@*V7GWa 3/^Fr )UTaǖ h"ǭǸ 6l2hۭ\z]W.FDa$aK ]0h֫zsfFxг箞M} F75kUVΆS9;pO%?/mn"tMP=ܜuY?QO9r]t~G%n=xbw39yw% /}PƵh^%sRn9m8M;.6쭗!_P;DR 3,~~q([7‚^y-/~^f{@7 t[|hݳ|NP(@ PSN ,AuOOOThv9ڄ~^LZ)?WΜjCf{f2U;vU}u=T@cH˚Ȗ1nnP}1w]mH~Fz/YĦz9HZo7Tuc_QBT?!wo^ͦ}P]zujP=rkt{v́j9Pxn)[:uӟ5Y=sEk~?Ke>SߨAuk0@t}tT8ѐ*yrdɐ.^ѳ]6Җ~?&>T3'9` K۪~&=[*SMCP<۬%gpS90s" @se95793 KՎM:k6<0 w$I 3%U˩w*[6nՕťggv $[qT'ѻ!k~7C \kǫomvHuh?wmZn̑>s̉e&T*1 FTA>una#*E欙̯!e,Y2l$*g͖'¼i!e۴67ǝT y&UrsPUOZkYfetUo< ?]ɣ=?,_JDQ/x?Įm?}+9-#B6t[6hե򨠿\[fp8Au sk^żZ*x[pW!ޒ9B|>sf/ױCcUtRjYu>[]< r}ȾY0Ҫ'}/W7ëэzF8?~ 2qo85JדT,o:.f2@eUP:%sf>ޯUQ7}m>Mbq^/9s(6hy_yg2~|(@ ğcāFz U~T,8ɼVЧJ4 P(@ P`Pyn? ̞=͖A𴕛fA232|jlw\%o7nNUM e CwГ><16>dSoV\Q+MqǟB:c5pK"*\Y=>q߱S8Ohro]ˬ >nɏG=+ȮB~:葓mϘo Q2n!%tPU}䄮k,JN\]u}P5fP(V+ƠהI⊊^E\9pٶThF>YIR737#hG;n/huO^ꛏߊC'~("Ac}a_'uzH"!߉TvpבE` vyGsAh=?TOGAues%^Hb=2#e0u(jKL9 [+FeRW*20r>#=}R>fp;>_Au\]Ǯg7H_u{Kʨ\1sQ!fk%RP]eiX2P7 0PPec_{2px3 ~n:#.ڸn9>ܮ1T7Ӧҹ1/W=q$}SD}ZG`O~ {jQ zvn^h*K3G۱oۻcͦGԧ-}qtn2ѰE]ޯ ĕlrY]!F&wO?.Ϳpn7ȍI7WyF϶*Mԍ@E8M P)04uAWWD"D؍t? P(@ P@B`P=! Kb0*{xx0 1o 6=lvV'@9*L1\u~֡82dSf'uiǭ?}$8ؿY5fvj<;Aͫ~ypgoZ]TxUdUY^*[kP}o{1ysGmVMtڍ CJx#otT/W7rF8R S>fL *NҁxY;^@eeT'_?h+i(lJY RTp&'3w_͋B*b<~]'.ғQmk#cZOc z3e5 `A9XYA='ⴺ^|%Ztk`KϚ$ ;n`<4&> ޚ%?a;p]sk2W,>p|M$>e=Zf, ^_օiHtP}X|tuWP~54U^ ?>ut,D;e/""A®Rm^TR:oO NXr3lt|nh5iV/[oͺ_萯.=*he~uȖXRm1?P>\i&ud]9[zV]Pwn@UO_eSZRe%gLoغV.QMWZ7Ru`di%7u1Pwoߣ7a JT9qMeiϒ= jԯ2?6Cn~ݶ[kUc:?vMGCZɎRWZɺTee(TUsG>7j측㵛0ls=Rm_de\g.~QTHN'9 p6ߌCo%mzX_/r=Y5{VTSjUՉޯ]6oykݺldθޤI-:5S>zՖ}Dy$G۸!$Z 4*% DoP!P߈ Opb vt-O*=ƈ|)SUH^n fҤMc6_]oRp(9%3Vı6J mvNP(@ P ,pܹsﯟH.XQ=gڷfW6}]Jq1tGN׫Β^xFkQPWD< LQhTͮH,[KӪm̾o =Z*wf>>wg }ʜ7x9ۜvы֙mAB}OU\w4TCDsd5?IHXnam w箾tl\ב6}ZU:y|TWL/r[7U|eHG{gTޯN[\>8zz1"SLڈα9+7\9uFۓ!{la*hشɵQ\CkђESTF P_~%<~3z°<ͅ(@ P(@ P ! 0 ,0g̙SMP$12{~ѷI 7UQ˸xGcvbT?t\ʭ;7'*wkO+Dic$hfU-q1 kPA b *YU0餪z!atz2P]1:aM_iKB/*~97eL+(@ oٷIX5s ZQv ࡞U=Z|n#ki#ۆVuJP=NJ睇p M,}ZauNP E MW?lÝE^_'!eXЯe'o+r23n vyc1yeP=&jaaP= [b&5k@lbvƸ(@ P ](@ P(@ P(@ zb8<$ }}}TI%3JeHkYG]g!Inϖ cŁΠfW]da㫂)u{ pY==1bsrkδ9{:Z 6[ CߦUl*۟xg >g._$PUM"WFN^6fmDF310w2r Rmƣo@*(P2. O0l.{P"[zr·?cͶ'|27ټBna vyDsAhӝAp`mei&%Y48(@ <aQbxB@TUf(@ P(@ P(@TL)=s"gΜ:#Y1e $O"$䉮J.aX6ƕڋT"w,2%fif/^Eu͟_+gN#\ăBNTTOX*KZFކ $8vzl}X~Շ]_1V=_AsZFڌwm5{>.T=u.]e["s,ۏcΗ`DZ4G(@ $ |PhZ]}}htb熺m1 qJ}|Y]^o8?'1<$MК5 6~"P@w}=<0 P(@ P(@ Pq"zrIX`Μ9'OΠzdϻ?t{\hXrJ?qbr3VAVK9O,۴ Ao6Q,W\W,{!ZN;[#Λ}/mZ98q٧GET7u[ ޲oTtʫOC~/w7d˘VUBk4֠0xJs^JuqhXT!!ش,Zgn[:~ݮ.rfϤqFP]VSj u}A|}`(@"A~A˱q}Z}yBHxÀz5?;mn)R`͒\}u#U TX;A.on(# " ;@a(@ P(@ P(@ P(@ PMAF 'R`www],գpeMV+fի1W7J Py h37m/|C`ckoEiyW&ui7ɍU-[2D!wf\v g/ڬT]fј`P=XteP=΢(@ P(@ P(@ P(@ P Twrn0 ̐ GKW m m&k24Pe2t3WwOR&epTDC+jR8v}/ UW ^ |hүrcǯADc_u~µF3Auiݍ fGi^MҘOL07쨚{0nTi PS`?96P"g]Yߦ-7UO[qW!) nSH >z OZ?xJ}P=;hTR0$v(@ P(@ P(@ P(@ P T7jn(HEfP='^nۏKW,*E ]Awrw|_a!\}ǜ/ ۰q.wj`1FuoO !3e\zCڹ}2^Fǯ[x#L OT;E*p*Ep{޸sTΟ+fHnp CZwF U-}끣$&tjLi!x&n) i>>pssCT7`J P`P=<3=/(@ P(@ P(@ P(@ P nT[_= L BΜ9"E ՓS(cvÚ(@ P(@ P(@ P(@'@HHfΚ???JAwyD(@ ąQeP9\ (@ P(@ P(@ P(@ P`P9\  3www Ap(@ XU# ܎KR(@ P(@ P(@ P(|՝o5&]'GxxxhՓ#(@ P  G*n G(@ P(@ P(@ P(@ ī͍%AA@jUQ]TgE$py(@ RAX>]Au8r-(@ P(@ P(@ P(@ 8GAu8r-0$wTwuueP݀+(@ POAdΠz؛(@ P(@ P(@ P(@`P=n}%YgRbP=i~-(@ P1`P=r(@ P(@ P(@ P(@ PG k֬g*@*N...H3(@' k$vc¥)@ P(@ P(@ P(@ Psq#BC xLdϞiҤUa 0͟(@'ι69+Z(@ P(@ P(@ P(@ P+넵p!4c|}} _)@ P@D Gy G݊=)@ P(@ P(@ P(@ P{ޘ[HZ3TRE:+'ϣ(@ P  " ;@a(@ P(@ P(@ P(@ PMAF 'RAAS===YQ=c(@ PN`P9 ;Ǒk(@ P(@ P(@ P(@ P9 ;Ǒkl 0;gc P(@ T@g<Ab .G P(@ PㅙIBG9tEɓ3=(@ 0C8ŜT_\t PNimvc>X^8G݁#ؑ6}Zɗ/˃RqRˊek G9pu6|ٱ^0l`++S>DzUѴ]ъ>iTQ6kl\pUȢMoGׯvg5^%ɶK'M P($uN\S:+Q x(@ P# GNw?#0gΝ)RP_gP?s⸣(@ lۼ}:] QC'׭\'NҡjW>ToFjXuk{.je^gcgV7C O6#gO,\7.{/ b"(@ P@bM2w -7l(@ P(@ ?hfwMBLq&ث23M4^1ݬò T8 ׻xᥰ-oC@`F߻{ޫ Ƿ\=t7{(@ P(f[][B.)k[~;b=x^F P(@ P1c'ϟ___pqq5$pޝt%P(TwɏYi@ H2?(Ak -׮\o@UU%m 2ov(ZOa ^BJ }uчԬç+2+2Q5ycNl[k۽ V)m.y P(@ P ,F/}t:5RJi9kqozCey(@ P(@ C+4Ź̦)c fHи`,PX>ټ̗ JU+z3eͬy,f rƵ*;I:s;`ckyFUi$ya6{a@@ P(@D"0{bu>-;lޝ{׸{S&v t(@ P(@ P Tgpn. ̙3rBԩ2O9(@ 0[T㋇E]#_ldA!Xb~Y o1LD5>m\Ő9S0>^3Slc>YeP+y8w֭)}ݻր܄PjZOaTT2M DzUi`&ptoEWT`X6aصu~-T [5Bym#ӱm4^X~z>{J@]2^VUV^KǍtŸSf*ycIL t)?4j>nvzk뮭T=^c't[dPZYȹjkW̉t^:H$O<ԧrP!&MgLeS͠Nm~}Zunt=--(@ PA`hױxfE9ƟW Ȟ@ P(@ P@ADpy J@pwwW"]z:= P9+y)zTt= =Ft^284iȂꋂo?n]fQqE~㺨@z裊ѣ`H]NZ?`U)7q$ʰq& >DwxtI=ò ߿wKTӎ[7B͆5xr !U BQc,QPи#nzvczzy`wQm !  J (Nqww B).P(Rb!|3r\.{vgggw{gߝ /w7 ܀ʖY݂YV?tnMU+AutQV8St} VE;kQӱ}om iEESI5麠zʥx^7SRixfPumr)&!] 1![E>!ߨߟn>C X nRU}= _)@ P(:[D PW1zzsպf]!^H6inL,WG(ƾ>m**~WOY P(@ $ .aeZ_"Mێn|Bv P(@ PET(7wf+WDƌ"E aP=Eg/H\E`>i#m=|_%MnuF?`s+/7 mŸc_uv٠$U[ (@ |>O 8ChDp?(7%Nd律2nL%mTG3L02\n`]EdxAO^IUnC KO5̟x kDxdqS+n="CUdD)x)d%_V/>@C~VevmDIXPKnr3gDUQfE&òsP{xaܜ1[Хiw\piu͑N=CU6wM邀ٓgѧeU/^AF!rJjw8u4rj}{x{3zHQ>>-~hG*ןꔮ躊|p"ܱpGڸU5w̙p|l{:R(@ P ! ?[rCq5S7{[srʜ-3d@8UjòkP]A]l9uj>##C1o~0VjUW*.2mGЯ8} )xBœީnUZkwnl'oQϘK7.Q]{E&l*+eГ<'yn<3aڐza:u/~?wOϽF\(@ P@B8)n;s:͑l. p7_}f P(@ P%T6e Ȝ93鲢za˄Qؤ"u55L㼵z.m xc3@tP}C|/nw $wrЖc2cj3TAuyD~V372ՊT_4gO\-SZP_zAV3nݳ{†忊?~ͰzF8+-ޭ@?KmwtgyPXPݰT5~ktNH@Ve?נѵYЗ:e.wMa_Q|^w UjUBpE/+Bu]w ZBw7F .K&<_j}%.C,# f+,y2'hTŻ3׫z3G=ì7T7RTO~ yDO7 yaL P(@&p=L8GU&2!7>MyìwFRfʡp(@ P(' ;wdɒzTsF;dF}A0{i_z0*ʍ^66%g(@ | ˛:NZ/ZV.*h115hnƎAuc*oDP]gO#QD-#}A< gӊꀇ+*#'W',yd9ydqS>Z;T{j qMXUnͫD8}L @<tNgyjǶT׍2wD-@ 2->F)1F!wtdy5KQ}Zwm-eN$2gĒ-DObTuMkm6jg.gOa칲4xEMF|bQA}JߣsZp}(QkWcjYO=߹~ZpV)RoƒAuS-T׻p(@ P Of QU3*(17Cjl(@ P(@ XPAu bsW ^ȓ^nnnprrbP=*WҭhA%.PD>duK"q^T߈_̞a4j25ثc3nLm>OKO^1˶@eɐ: VDcԠ;TՍDAuyTE0}x_ "eNuAk~ǎ{` F$uRƶuDe S; 0σ&Dt); 8>`.X‹ k2eJ㊨ʤ=5kzgTH8z.y+`ɠt=p2lmlQ-~hGb+.6ŒAu)ȉ(@ P 竞hgkk~c (z6l_(' P(@ P@|`P=>\CBX|92g TaP=H:OGlؠՐ'kCuyEi`ou0t+SbV7Y37cؒ8wjK"fn=v:9##}t)s6,]7Ea_tMW9DȞ(@ Į\|vV(f>@Pp-I.{(`cd}Mv o3-ש jˋ O0wn\O-џ<ҦBjsZ}]Լۇ0 G) ],TCޭ@#?}ûOR3 i{;O]zzSUe0]yN*@WbjVY=۴s~S2Û 8%Ta(Stme-{#$K(n<=wx bp1ŹeFGOxAc}BjF8B40nΘh] }^x- tkz#akrgbdp3w 7R=]t|:%7 d?ݪ_lMdPs(@ PV/pxX% ?)wh߰d#g;sE֜upk5(@ P(@ z| <$Ġzdv`Z¹w rDUjժN"˕2PXI`x!Ӡ<~[ 7G?yJ[T~sєH6"B: P@૫=3FEӐ+aW:~6Q+*Rys猕)R&sœ>M ^|-< J-'tȧ~av94TM,T}x!v4AuٸeNܴWՋ-,9lz;kckpi͑C ."*VfP]$ k3(@ P`Qſߪ[[#XuSڥQQω(@ P(TOWǒ{{{؊" GpUgO_zmXYAuѶ&쓪񏞿!UdCN !&] P.gn[CiڎsGbyѤw*#sCݧvm4>[@4q"d#~ȉbG >@i+QW8WVd<|3Wy@e .ܸ!76yNu*G~_ E?ݤT7u{ݘ1yeP=&ja1WP}yu΂NZݑ^'s\9wM]dկmvᐸՋulu/QQ<5 }Z/0Ddr:-ؿ}X[x}!AV֞?e06̆j"<\ZaEoqx{KD ۖ5+ފ' ,Qsm6CO{wտ3j[`->2 /C[E뮭 :?QQÛLd^\bBrn]'T[] ?|j:q0d>Q+W_ዔ*V]Z@ZOHTh*+VͫD$ιa֏4{~ /,X=7X|omC6/U]sϘ(@ P(n^uK U)#dH' P(@ P@|`P=].*;;;L#~Ѫ~:W#&uargHjȓ%A3W'QT]:>&A'"ha6Fv*n$>ϴ~AUbݞ CQL$wrs,'9ͬ;lo&R;F=8+r }W;B*֓hǺ,ٺ_-wSſB[y:M^[~PAc0àz ЌlbD/PH2) Nzo\ 'g'd_lx~:sʊAAA.$Ʀ1Wӈ@s2gݪx,nz*oAn{񴭸,ai{q} P(@ XJ@VW/!\SWFK(@ P(@ DGAh/"Xj2f'''VTkʪpnW7Y Hf6πVpn+kj1(wbX{*$~MYEaB]2Y>vnѠ)QB'[uK[r1o6$fKbUոoa#+"`eW<{BFօ}Zpj- 桛6 ˶R~ԭ¼ yzT A4ryٯ~ZR\^Al=|JEExdc"D Pq'T?Ȱ$CM 7a } Ǣ"_Wn2gOjh}W.Ib n+bƧq˷K7JTSdTL*ЫШv5oFۭT?kqy_?/)@ P(@ P(@ PL`PTAnOC+VKSm>ɰK.ݿ_K}'veDcec3=;+'Yi-ccjCePu7? ~rװ[T=qģMseAb(@ XH 6|6{5A[4 h-Z]?nQ>h#T7&cM ~F/ )k܋P(@ P(@ P(@ XXAu sw ^3g=\k{Z T\km3?C1$6&uEP@Cyaݢ:sw꒶l,[}ĹwEp?y[^mdm\(@ fP}߾S'#}h'ܠLA)Z^y~;vVOS)exT7u{b0àz Ќl 6H!_Wb܅14Alg_@Iĉ :wJ P(@ P(@ P(p%-rJ6)v 5cZl[Eakv+ڈ F%r\߼{ONN"h_.Ο>?СTAw?fQ!> RpVu߹ZۏM*2g(@ PT?x ١NwyвJ1'[v)S`FFcē>JBa zZM^43 & AaSL Z[{XT]4nD!`{|P(@ P(@ P(@ ?5}*,Y2\Ͻ'/b] Ȍ& MT oAUe\Qj#K4).r=gĝGOuѸw߸߭pmR2!Ziweysz71@ P͠[\F/2 Ư؆{s N'I1d4 ~ &ƌ+1Q aMB P(@ P(@ P(@ P@ 0ws=<<䄏"g̠zX;_0O{"ېD?Th^WA?/x_E0T߸$wz˰ &sM˷q#.{tծ P)oyq`@'Ew0i?3{6p/cڝOЮzI5?sw꒚O %fG 4W?.WX`P=XteP=(@ P(@ P(@ P(@ P [;L*ΔA(\0C펞i"ޢrQT,A߸ ˃X8V:jp< Bvo1N/޼Iy6U`⍢z;:-AuS7(42(taP= HB P(@ P(@ P(@ PT5wd%pww z4.y~=|> ]ʐFN#ak!d&aƘn$6Z?r)0ǧadc[Ol=t /^LM+Ƈ7}hM[a :~^U(&Wg'|%#ZV.dfR@ <Ao$Cr4&(}߇tmLi\#SӰV5;sF͓GUh ds<_+׭^M^(3 G+ GU(@ P(@ P(@ P(@ X\Aus \@ս`ggΔcp'/7Hdk#i)+lmlb06G^AVM.B)s!A))cD{܀ S&y}tvƠztˠz6\C P(@ P(@ P(@ PT9pdQUV!SLppp@QA{yf(@ IAu@2nGB P(@ P(@ P(@ PyT7#GW\̙3(Π:(@ P #jգn(@ P(@ P(@ P(@ XDAu0s'V$ 꺊'fP݊=O(@ 0CP1 (@ P(@ P(@ P(@ ĩqϝ'@d͚I$ (@ P01eP<(@ P(@ P(@ P(@0nGB)իWvvv mA P"zT"àzFA P(@ P(@ P(@ PT5d+W;`ccbO~}u8...x,(@ X ǑP(@ P(@ P(@ P(`Q( d$]3eggg :(@ P #jգn(@ P(@ P(@ P(@ XDAu0s'V$,YQ5Vty(@ LAފA"\(@ P(@ P(@ P(@ P .TK};! Ƞz̙[[[02ω(@ 0nNQ(@ P(@ P(@ P(@ P0q(Xf <<<`ggǠ:(@ P * GE)> Gn(@ P(@ P(@ P(@ XNAuYsO!wTwtt +[eYR(`}ږAO(@ P(@ P(@ P(@ P Tk#HX~~Ȑ!'OºG1ŧS:tX< PXAu\|yP(@ P(@ P(@ P(@ҥKgܚ0YprrbEu.P(@pT& G)@ P(@ P(@ P(@ PUc[R__xxx6YQ c﫣']DM(@ P(@ P(@ P(@ WAuzr4 Ƞ'DET[(@ D&zdBQ[ϠzԜ؋(@ P(@ P(@ P(@0ngzH81sy(@ TAnǠ(@ P(@ P(@ P(@ P[֟{Oxp˔ aP=]b(@ P`P< ǑP(@ P(@ P(@ P(`Q(X*nnH,T(@ 'zx2kgP=z^M P(@ P(@ P(@ P@ 0dELprrǏTϘ(@ 0]1T7V P(@ P(@ P(@ PFAq^Tgi#2(@)O>`P<2Ƿ&1pܤ?MϟOIڿ^}N׊J P(@ P(@ P)yxW`'ggVTGF P@|`PK"s̰S;aEس(@ $s!T7#GaP r{ XNAuYsO(@ P(@ P(@ Xyyֱ#G-[3I$cQ)@ PH@ b2nG Mꖳ(@ P(@ P(@ PNխcG 88~~0;(@$y&q( `PTAnO 0n9k(@ P(@ P(@`P:;:dP H81G͑)@ PH( J2nG Mꖳ(@ P(@ P(@ PNխcO`$Ic#S(T7dP<AuSs*Ξ<+UTz6ڌ,ٳz&3LݻwH4 #$M$?"O<ȜӤfP$>nL P(?~D`$J((@ P(@ D.zFA o2xxxΎA±(@ P-yOh+Mx?xJմ2v>oȂwNvZaQk~~jh>Qqpt@TվkdR5a:; oht$MTiR"M4(P[r5OصYw\>E-N7_G*F/FÍ^6nWpIs W9Pwʖ9'^<zeлj5iIZ+1(@ Pd08>D vAίRHR(@ P"`P=2!@|FT4!b7`)@ P>-T8pܸvQnTiml=M+du[`،"`\[ǙS zРdV7 /[?XyDu9ZǠ݇0ߨHO'QD(Pj 7Fwk]V&*cFsݚ=2|$oֿ *T/^jgPݪ.7O(@ P@O@ÕZ?;ءVp2O=9G P(@ P-S&899eP=a_s(@ Pf`P b&EϟGGNs(v?ip p7eFt-ݔ"_j}QwZnڕؼU)Zݪ{H46}/DNH2<'Q*`,hSZ͑;;h~T77'{#x7o޼{L}x \S uG Md,W_q?){rO\~ZUO>-RQlL[9'/ ;{;q9jW+}Q RuXgy^=7uvÇ]\]*M0xn])!M4ak0M{7U0nLm(@ P ]`ܵ8~:&@o Ng}$y @ P(@ P@pp0-_www16O(@ 0nJs=޽w30YP=C0vlڋ;r'gG-[jm"[mSWT%wu3F/ E=+bd0OcB=;"qĪB #neP՘Ӡkl?",'dNMntM zdxjlZϞ<Ȑq:Uд}$JHkl&Au9 ԰MGٴ]UAm{{{j,qP)/Wwk7#ݴj qSKLZ0A16\!ϻQO]&m*,[W.\Ql"UTh߫-J/`nG9~ o:?[Twp [!=c ~}:mj*yl[-=j6T5is&/k5+)ç?!?=wGyp}=>$B|US:sT(^7N;6EQ|#ܡw;'gAYr9V({/0g ]8)@ P(&~?=w!r32eNGD P(@ PV)U^vt, = @IDAT*\f#*G7wR(` |besճ}%]SLJH 㺨GT_?|2Pu M#f{@Ϳo08 7zD5-i8uAbHϟM6B3L9! Ӡzڕ_uzxy`urv0sllY5LJJ*[5:Au9ֶ 1m 5luѦ[+m/?#iҤt`j߽}  +fN? բ~Hx e @7zJ5+Yen.]E]~ +ӆg̿'rrk^~H[LѰUcgq!w8z$i>MVt r\9~)n oJ06jlT>z|ra6?z[wm-1F (@ PM@ûHB Qyx]LU*3,恌zAk~lM7seQP}/w-x#zZWQEZL RZtkVégJmZ([|=L4G-_}S[Ǚ e}N>3gY*ʠz~bTc+?4l9k%ɳjMkm6Ul٘/Q^5|e6\7ڬn4vrL ˪]vWC[$?FXwhT]tQ 0H믛5~.+oKJxr~P].Pv.-'Wro݅վkT(:k m򁝽Z'?ĆD PH ~hS_qgd^уGz&Phs_(߹yG: v%ZN=5[놐62# 1>BU>]R߳֠:LvoK<}e4B :2B B>!P N ackeZ(@ PMу'k:T=W/U7˕k}JuF P(@ PT8|.;XQ=_l(@ Xqf/:*ebƅ 0=zVP]Y箪]7PK#g/1Dp>ATVG>|!~Bĉո?ugOxPEUm_l¡]D$x=dwM{eFo?]F.^<k֪L?_ qA{4.]=JU׍hQ?{̓ V6T9^_xaʢppt۽Zō7 ّM Vx/>Wq]rOxrY]Vb;``V8&}'çօ7~P])9rg׶3GB3@l- +7bre*V10cLl](o'n:ꦃ2ݼhup+w'Cmdus9(WW_t_EjqLd͞E͛6a$5/+OgNŏle'qX}9fmj.>gōƏGv5P(@ S.aeZ_"MێOz|Bv P(@ PET(7wfK}};;;ȿz]N̕[jv"tѻaGѡEۧܟwi̍"ʼn^XO~~@ܒD ӗq]$NdB*XGxMؾT7 #y& .w.pMR8'/bD i,9<Üԙ?c׈W.܀#{DLi=݈SSJ꿬_ }'U}duYu=t]3Qs]t Wz mϠFfFzELGrwɪ"#~޽F׌?~R˓N =P3|"{.vr9AuM]ϥpM劀m!_d{xrD[v1?Tj^~8i_-7%օ7~P]V9}n椨<޿@r W_~;hvm_A<91mdo^ fO-X=^j^?h|ddZQy\i䴟PXA'wT& o7L_R1`baь%XljT EoxU!^3.8Q(@ g;uKQsx{xf5]z@+,(@ P(@ PAApx I`N:TAuy49kՁe͙YU2AxA?m9HUAW zd~բ^(Z6$yY\%~ɹ**+厞?cNѦwc|? <^e 횳20,]cH<E_1 /ݸ3 =|!`*վ&u\Xp/WC'x>-ۺu6:zMTer7XBm kPL1  ʰ ];'wF 7~Pihھv YuMvjT3&r\Kf-U3WdRX/o$t&]RUʾ?FeU?]P]VۗUCOP.'M>H!A(r9+R1u{j`Р:5 /SR$?#|6Z?g(@ P#gHV92 w_~kn?(@ P(@ XRAuKjs_ ]@MtȘ1#YQ=*9x}T>}VBɼ9"ϠzD@ P1tPg>lv~C#SnoT7#'QWaV<ܠ8{ƎΪh׺k 4NEhg#)%l; a8q+Wu[Vý[ھpL.޹wLikHTQ`  8 T߰wъR\?>wDkUjWFث3k/q>BӪU<pҤIz]v"`ׂ&U;woE+q3BeICMM+s2'ٌ5Z(_, 5 P(@ S;7a971|ڑu#JEPie*R(@ PTA8 ;ccP={Ú@|dP]t,Ɠo[˫-dԠ;c,TgٓH8zH_8sVlWDfKj~e8* 7Y%mHsB~Ӈ/ĵK7QbjVj7);ÒHQR8c,oU]3KU~)2Jأg,o7]!1ƩW(p&]~uP}p8v踺6se׻j2,.Y42\id)A{>#HeA}Q GmTz(YN8~TO]2_ɩ%gϔzl9yvL\T؇^V*YARyG%1uGt>ھ|XP]Ub %o5n-^~`P] (@ P@<x'ԿH@/W$71_SZOOE P(@ PV$]lE/YOOO899zT)QxbfT.͊(@ @A?/^% 2kƴ=0FL }Q S~%.`2E"_c˚[6-/F笶ߍmvva,ދ?ӥ70X|z@O>yqpJw b4)u?:;KV!QDXw-drsL O2 v=x@/SL;}{̉(Q89appu tݴ3%[28^\C5-25#xe;b eaRu @>5K.[OQjY5[AIZ?90XP]н /S¢Kv:i|7Ӎ7 +J~(@ P#zLOz<~ֽnPwC<.[![.x~V<< P(@ PխJ<-%j*EAVTD^?-&wkQ[m,.+Ӟt=klJ y@Zא,K. ģ/U5TR痙3LLk&*=S%]HT*G_`nǑ2y#e&g\ اgʐ:ՍW P+`ɠm}%fT|MOBzw>EЇ`ni\EiD5hn'E#JKmX+l; AslaGpmL6_ouYFe(]7Ye}ƽx%dE5 MoʍU;h;f(._/z'g'l_n/Xp0mtav>FѰU]75L 럯9A7 r|9ը_T9W >|vk(n^Wn]vǕ WST&*6'U /5[AuS 27@ίr`c3}oZ^P}ۆ6z`ڴߠe}`\ 8@ P(OUO7]EӴa p-<|V?$wI )@ P(@ Pq"zs X`Ŋ*`Ǡz$RAI]bʪ"ڢvoѴbQvtn?|k2x[@ 'vE?EHI{O-GeQT,YZRTn`#]Hh70ev;8ٵkoe^Q*DHr;JBRLd-vYwJ$QBQGvﷻ?{13ٵ{>.XNkWz6)fc@ C ]壝S۴5rQIIjwq !y5 )Uﯭ]i5#/+hURoz͌_oҿ*)Wˮ?[uQ,=NmfWFgg敠zn-Ƞz?|=gXO<+/Co./OT,ΟeZ]--G ftHOO_ڿiT@֗]]dUfziC%($J|uoWys[z]-=[9niΤ4q޶eV&,YSg뻗[Eޛ/sܸBTm?z\:7V&Nxu3lL-2cBFe}w7Z ~לgҴUs[ . Iվ ~ ^m3^LP=9e kS1C{n-P@UWKc7c2Mh*}ɃZM?I% _|ج&_Aug,Tklq ^E^TWۡigꯪGVTBPݤ`@@6^gf|bc:Y폛K›c߰Vl    P ScEDTT&DP]~Y3]i}drB9rߖW('T-5Q[ 4- R3Ι@Zȹ=}w:i\)WX>d|R!s=̠O<5Y5`X}Z AuCW@@wP?z{k)M KɽY@@@p't78 ,DEuGneP= 3}KSa!W:hk꽷jr+>.-չVmHWYmFg룭UÒgq]珼 Z[;G3*e2eԩO{~3̒s_-_ { sK/ӧ7qg%KsK '|}|)sg$WW>]J4/{vJ1C]߸~(}Ե.SJʆի@y%mU;gMת/Yn~*ܥE7ZI߂OW[wF{P&!'i3/ǵOܼI{jrmcͪ/dܥ=^Oz=di7vܶKL+?|j .v|@Z=||U!Uʧ|&FM7筜Ur/m4f| >'}U3nW%%6n mg{p/iPKӱY9}ʌz)i\)Zh6_=   U!CdV(*~=   ;Tw9%UQ=**757AZi=:sP}㛥SVc>.''A@ՠB*lU|람j^j\lE&/nrsM]}Ay~bsUecm?1Q?eRDp-Ԗow5Jtl& jU1Ǫ/HsR!ACJ*Q`Ap@2cSFʁuy )xPUMW\rK+U@~;xDԧjJEˇi!۵0{ęsݖAugǛazl qUP.٥;sRL: Z;ztQgG#V~F(W\Psyrvcra9JJꕵpx\_>rVQ1UJԾΖY>W:9nAN)Pͣlx\]ܼw֗ټOze  n/9tLRSRdP???oN@@@3{}O ))I* r5|u3W3[,7AuU|n]o';HȬ:m/,/ˠ A<BP $Tyg 8oꑯy$@! x׫Bb      A=fs"`S nT.|85g 2x;Kd~o/orzrmo˅k3GM>Nid何7F7^kn+Im72Rڸj뫚c-WT[v-պbTUu@;o9|B.JfTN2mQ}|1-7Aug啠z^Բ!Մ=yp6hOgvyWy1c       Ѣ/9 ̟?_H_&YA_FjUlzG^*WZ>Q9sS~/& gǑyuG?7losGڬmdӏTn3@aoP +.wC}V:qFvjo#T[zw6+ 9 gPrJt{]9D6߾y/u/dզiJdْf?˕gɿ3>y2xcvznl'nۅMd1bǮ-[꬟qF`M(aHlXy%TX{׫lqhD@@@@@\ @PL-AAANPjAo+û"W7"SfjZ嫟wmh$nV+Vokרt8zRNkb|ˍeD3[Om|?wԮ.O=DԬQ_N|jUWKazuxc{2prwU{sRV@".Au}G}QKﰩy%->SH}L7'ɴe붾oc,Ύ?.0@̳AkO~:@ȵ5@@@@@@\ T%A 11Q=eP]U ;%|ixv}T[jj ޲am vRRTtkvzLXlFyKs};skӆ:ry-h$g_0YK/Xez]Uyc3s;sP5_vV@rϠeˮ}IT*oF'| أֻT 8".O>,QJs\ O,Ύ7' A<BP @@@@@@@@=.ϗ(QAu*;p-tA7kW˱zv"˔}U=WIɟvZ SϽCwՓbQU97/{>VFXIٰjTƗWXBը,^Ncޓs/?KŔT=rY{5{< 7T16yEp@ ~@9x{Cdҽ$Fr>=IKOBeƐGwZ,NRbnXnj+]"XT(=$i9tj^ˠjpv lT&@@@@@@@(pN ʼn~TTDPǻ\MY6)h7ʵ-Ϊ>rع+͊տ^nlf--mkyU W,[إU=)&5Ǝ}%m16%8_& lE^ETԭ)Z7b< ,n\Y7Ѫq.VrenNv Uʥ˗%O_br9%U}{vA홃ΎyPvTwɁ.@        A@ *'''KŊ% @|}}z7K3*]\׬S7"*. ?,XI>g5å{ۤF\9U`o'd͖rE>b۶q]Vedꍲ}oF -7Uт $BcziFv~nNMMg/eS&F-9!R~=pD.ZTtѪGka|u k]ce@ wg.A>~_.w=b2?OwLObnmfzgˬ[+co+C,7o ג1fDX! lT&@@@@@@@(pN@V{սVUҏ<%$_B:E?z}ᒤKAzsuYΞ(N-)Zxq_ /YB;24}ҵǵc*Ɨz5\}a%=ϧ OngXse/Au6        @ T/xsXTPݨCPhn@\!@P"],        qd D\ AuCW@@ 䢉z.       .@P=߉9 … %&&F{нR@@ NY %n*       AB@X`DEEI@@xyyW5s  'yTw#        kƑYP*+V`: @@ 99LPA(!       @T/fARR% ԯ|.@&@P=onGT,6       AEQ@ccc% @zQ\ Tk8 ƑY@@@@@@@@5],(4YhDGGAu  #QʹA       '@P9g$%%ILL=s  Aug%~ł5@@@@@@@(|8%`PIOO'^n/W !@P5],        qd UQ=::Zn d'@P=;;nEO@@@@@@@oqptl̂       8'F+D*[ɰ 0pb݆       Y|erP.\(DP? y0pGs0@@@@@@@pmslLzP=88XKK A0w  (}Au82        FkC`޼y+*EP݀@'@PݞLTϝ@@@@@@@@ /{QQ=((~@"@P=/jYTj@@@@@@@(<gϑ@RRH@@+VE6sU  J$GfA@@@@@@@Tw# `$&&J\\7AuW@@Au{2OP=w^F@@@@@@@ y+Kjj*Au{ p  [ݟm"       @T/wZt%""B^to3W  Mqd@@@@@@@pAu82 AuyE@E <<]N<Wm@@@@@@@(Ջ I ))IzJJxkK!Km6@(DTwΏ        Zd6%66V}aaa-@@-N>AunAu        ZOfC !!A"+V"[@IzNBTw̉^        P0 ƙxlTIKK#9+E@ Tϫ8l!       @ T/\^TEQQ$Ջ-@@]#JP5̂        GfA/Q>/-n4#G s@@!7Au82        FkC`)ATT7PxE@ m'       A7%?{Ɗ~TT" @6Pؕ'kݔqƠ꬟G]evq      (@P9tHOO9sJDDT/r B@W Tw(Au82AkO:{<=w3D@@@@@pr'8 & sHLtkAu///Er   ]KP5BPAugM@@@ Ozs'PBBDV(AAAT/z+B@ Tw ,[+'@cS- lާuf⯍coȺ;t1}>VCO_h׵DVtȱ:-LX$|pϿS]gH\X}]ѯKmu72\qW{2  8&n k6%r,&կ"Ml$!MD/@@@ Pzbs(/UTJSQ#: N Tw쪠ɡ?mֶ4yNVkY4r` +UV7]EFP=ْ<{CgxMdBCood3vc"7ֻ!tЙ^?BnIdq3J 8   U/B_#gZ%*.f;;@@@(,%q GGGKTWNEz.@pAuPGPݻ |lIP5ϝf1_(}ZJ 잢x}}Tfq!>ԫh#e?Њ  !0E7[˄;5? oӷ%1}DXH~s"   'ybc6dy}AuJD@2 TS)W [|<36YFP}݆r_'&ORQJ;fTdN t E@@<L>]YLꣾ'Vʩ̶rJ5剧{f gTWL=E>`>[JA^lCIϓ X+!G:&UwL`ٔo%Ȣ9ҵ̹..^)%KKfȄ&ɖ˅>Q2pXuc-9r舼3ilt]mut}9MV@@@@^vg"eY[:/V~-+ϠWzK rn@@@$D;=[$((깣7 xAuyWի\}Tt30bJ2SP}Q,Xo\GgQo fۥ cE2xt)o@^cEixҶ{ TZYJT&z,gN?+Ul"x غSTyҋRa,7n,꣥vV}yS>Zj ?B*WdTW)c3k@Sy~_ɗ2vF>%ۜXٹmZi߭є3''-ŋˊOyu|c:z5/7mƊoq_ye(7r?zmp>]}a@@U@\6˒r9Enkr<>;ﰌ֥o;C6@@@ ^£f'$HttUF@IDAT|G'!!CZJ ^bZܽhଋf;q!f +T9c fD47(O9[;*gkв>uo]c̴3ifXXZ `?tkmp]-Qcg6Xk5zp_pXTbi 3P 6y[DbLȝAu/(@ P@B>v&] "M7ߢ_euc;(@ P(@ P ATOPn, /akk YfA$~yzI_ç;;o`.*&Ҫ& J(@){?n=;kprymya8{,D%٦?T1u{caPݘJ+.у'0h6d vEta؈'łIatRƢ)Np˞E,X;#K MnT)xt1d%K.kr&F2~mվGƵ9.=bm:SO{k̠ y#R$|q݅|V/Yn )Z((Z@ Tu׷yhޱnGN_ިT̉ٺZ?TL\ σevY]NƪQ ga؁([ \(@ PS`_ jFv{{{9 ' P(@ P@b`P=1\CRVAu;QQ=$$A.8 x.Hu˖9ZU5BᎨ9wvW~pn|_,lʱ'*n6<.y|)z]^T Mhg*Eѭg&lA,~P; Azk˜@Bկ}E7Qh^tS.Vlcaac<^\7CՍļ->h=9Ձț]QU# o^ rjۻ҅kTK6MjT/sVUUVn=o↲v} =i4/TA 퉳1Aw` jzݪ 3T{6jAOTKk88:|t"jWSEUI}tmFD nF1j 5l7Xkb; V ߿/+{2dΠW/]EdžaUrcP@ (@ P@| =p\$PӀ[(gu΅Þag(@ P(@ $ $Evvvt]3u"4Eмڲ)Z_O{`(M[^[ad&9Jȁv5}O#UyaC8n٢9QcB31UAo i˜@B}6új co~kش}7_B-h m;o+@5q]8KmoO)fGCTn\)(cy#%xzpS+P&/ 3iC{ rM~ /jKAumFVe_~]n" {;5DmqQe?lTO:0DLW3n P(@ P n^6h+n/vEnj)i^-|.S(@ P>Ꞔ;M>>*0i*twQ(˔rS>:cjG nQӦ5%'/b?V<ʊ qeH؅?.딖ɑL  ϟΓ|K;uoQrlf4ƎAuc*1oK 8OēnRX@3/`fugSG5?oN;ݲg^I]XT{j p5R u[Tnz-YCx͐CQ1rU=rE2iӱyퟰܶL2i{āC괩Es^B/~6 _*x.o;WٓgѣUo͸9cPx cž(@ P@RxU+. +=clE?hg6R(@ PPA殒'\]Sm i3e7eܔc4^`.fLޣg8ung˜c:SoV&PJ !G_? ?{G.5h/TbޖAuyTgE0^]2XBc_-kv<9/-6ڎM+kD 4/gLt7bH I=!']\Tִs} ȠGOK+Rq1n_`'8sR{n(n`y}ۢkx Dzw 릹c=qE*[3}[Tܞ<?ʠQ-#o7l:6삫P >~uthI9vQk˼cLTg?>t`.n7شO{ YrVMp4)FXVoƴ3 )ѭywܾyZ7DF:ط}Ӏΰw7?wNJQ\]SM9)߉ zB.RcJFQ|X}}LߌO}hԛR{֯딖z@pHV:;b:`nfJae۪Aͫh.7m{0on'X9~%¯R-6(`}Ԯc;|" ?<^y%UUJ0Ə۠u=fPmҨZ \NSQhmYͻ ,\ ;=c0n!]*lPy\3J ij@(B\\{rB)=}sA!a7VZUzݢޫ\S@]`&$oZ0[}>J`j\|E4sWow jOi ȅnрh`P=H蒐A w_~w L?S1Iwv˄!W+*zSFTe0]y/]ㅸNV)-`ƽX#ѭ7:gEq6g Ƞ1/j}Ѵ6ST^GU >z(Zmpdм}Nwj?~M6W7gDaO} "2T.'9܇eau692JcȸAj>_}nX kþ^l\{ОCe-k +-7Π(@ P(@$$a,]ZQ}'5sjˑ7+ mk (@ P(@O)羓72;;V GqM.7X ӗջ;M1cOHU͎D%aVájT;u)ԺFKSLps}D_T,e'-,bAeGkAR>/2ڵ([8%|P]_*St5s᪨t$[TGD6Q }q ^G{E)k[ v1{Cx*Ƀ^3pcqÜ G;gFo}S2vP7An/njĠzl>&!r7VσōyI?. ݩVˊV(y!ì: [r^؇O kQ[ G5u%' 覻7cEeςޣªQk hþWcY= n\=s7BEZV[pVAuàz>{סLҰ|i}qӪ?f갵Ņx'.=~P]n8*׬H¸y7x.[.*o.߈?}Å3T_Y]VI76:7%)=a޶n{1Kz |V`?Զc0\(@ P@xb~PS:ߡbV8yʧɩ6ș?f?T (@ P(@ P T'Xl<<=UEuTT`p)2eP] o|8ڿIUU-"|=JNue ?~%/p BvV(/Rꢧ™MʔX<5d ,~Me[j5)iS՛we*un($8p"JPP.xcUX?.ÓyDշB9Q5$4Dz TI,X|d\bYE3@VM4UT\y`,EH+@^v WQN٢<ɪ?D Ŀgg{IwԼDdvpLtsB~6.6V)lA,~Pm>E g8sJGq,AP= cAغ~7Q_|?sP<$D%?_";z X?ӯ/Au9?}ă{nK"ztnX=şkAu &?N|*3'.TUuc,]v=)|P]5~6>|0puwoE=S:m$*u}00"nn99am:mjL?YܲfP݀ (@ P@fH[:3s3ߋn*Ts(@ P(@ $&$Twww̠zTՔrSe?'45ˢRڲaƊUYҥƸ?JKU]r( Nٻl;|vQ2ݹN9!p4}_sn;U!o] O^!t֭^y_>%eGƕKc5x.Rٲ`XZr> -ռ)u*Td]Vj.I?.Ô&zToW (M{~1m9g ӱZ6TZ --RhNk(')kƝ*gIZ[ذGTeCJqL#~,.' P >CPg>_luӨ:ekf/]0zԯ`@!oBETO Al3 6Q{\r@1%4b = qCnտNUֵWտ]0(}Hl `@/*AAavvhڮ΃~E 6SK^XC:k9,PO\=l9_Z~P=kbAXTAu#C)$$O>sVFtNauNO@?;oߊ  C.*.&?6n):moM\VϘ9;LUl1K4 r0lИagt2ܺ U`P-$9 (@ P(KY]apP0RKlΰOD P(@ PH 'ƫc666*ˠzWӔrSezc&zKvZrcWn?+ |V~V\n2.CܺꥇE ^"=/mTxx`k5ZCro?rsVoӺ7zFsVmg~Q՛U?.ӟ,cows3sȒ]3rn` H}qI}ʊo_7*-2;6h [0c~rmhd]M=H*7,,S|xúg>qby~_[߼4W3dHӟ::E H_GyW(y5Ctu^ ӽ?'m(ff,;ծeҖbʭZ~P}1}_ں::~t 5#r87YP=.Ay.nũ+Dp b:ϠzLŌgPݸ [c./OJ̷ ԙ7 vy}N,ZTȚ#+4 4+cM|(@ P(@ P(@ P:u|ikC-k\H-Z0G.q,rZ7.ھVlX  1fYKu +R6VZ'2xFY ?V}6h}{֯o Ԗgd_uOuGyb\ {`58z7hFSa7*NjC~\ >{_e[9U/Ykz". ču;6kA>^~&uvcIW# 5hCqbO";(@ P(@ P(@ P,T,/: xxz"k֬RGɊQ\]̕*_,,i;v[=Pys5G fM9VfQ,v7X:<ƹ2[vImo& b2¿"?Z hZgApH(!iBONy2cTv4C=qsOo&:sYy\3{$>[dmi1%}j,~n mAn/NjĠzl cPЃK(@ P(@ P(@ P(@ |Z??BEΰȈ15 ;z>, غu" (E]z5XQ $F/sDðY/{7Xaom6 g͜^~_M{ uI5xlxyA7~waes[Z߳`Z>J1#|V>~Q2eoj&WuWAt𥳐*5o~CR3v(U6 (~3tvȃf&tW4Gl>fj{;/KU~tUV˛tv;h"5S:x'n7W?.Wu{cz "ʠz$8\E P(@ P(@ P(@ P@ 0a 7`-ff"5+aɉ߹sGS"9"!jGgc(+m\s[mLT䨎[W1i~kF~h^ ZVM'SWnaFz!7)u*~jy|ӎZcoePhM\^~C.ֺ,-ܰߡVL߬g:Ă FJMTWo0N\۳M2h[T)n\G $KZ޾qmoݚtac޼WmVl14P"!޼ B^f;q-a"މR [F{EAgbN .|P=ۇ_tTTT܇k)@ P(@ P(@ P(@ PHX֛{KpqqQ-Ddգye0z||etY2MҪM1cm7C[D!JkȪi.5΅bݐBT$È[`gmYY%CT+/WkȪ e$rk*uEmڲy5>B/8$CZ0xG1dȺv"T< Pʶ zگE 8uB洩TE!VghS;8q&m;WnUrUaOLi py6i3VB|l B},wC?= վ@ |Zoհc s+8ZwsДn N4CΞ{NK,A֬YaeeNLUMLzu8NNNx,(@ $cMsT7#G(@ P(@ P(@ P(@ P4 ƑP@'www888(@ P 2#Ӊ:գoŞ(@ P(@ P(@ P(@ Ŀo=$Y;=00YdL)@ Pq9Z8G P(@ P(@ P(@ P>@ƌ?ιg $AK=BBB`&롉2naasx(@ |*M#Ϡi9 נurՏA (@ P(@ P(@ P@R`P=\IGbC9`ii UqP(T7aP4AT q(@ P(@ P(@ PH 'H!!! ;TOgA P@| 0naMQT{A 2wA@ P(@ P(@ P(@!z<#WWW fbJL Xb< P?1Au8r`P= ]#P(@ P(@ P(@ P q08"iH ^I,(@@IDAT PGMˠi9 q}0WA.(@ P(@ P(@ P(8TOׁGt={vڪbP=\[ (@ P$i`T7#G<`XXZDHu̡% *'P9(@ P(dHOG P(@ P':TϚ5+lll`nn%Q(T71UP}xxllQiUMYx{Lۼv>oAgOaJݱoVwrzjȝ/ 'xVR(tv͌mE[̙8W99,,"1 >u=^77(@ P(2!zwoGл N焼rj*q{(@ P(3cL $$˖-T (@ PNAuD^MT8xn^Z\\m߬ Ni#ϕ_@?~y 6ϟ>7zಲzPAMm}rKaTߔkbϘ^3lf0yT˚]+aem-'JטH P(@ L@ / ? nlF׳(@ P(TToŘՓyQ(`:McAu5cdP4/1 ߺ~ =Z./KeJgO[ }{8|P]4m-;5W>Q}ٺ7Μ8ucP] (@ P(@d+3{Oi]o;x jwC1?!:)@ P(@ P 0 F̙PQa,TLKLWB P'yGP]YotX4z euAcǖ\Zvn 4o^73bҹn] +K4g'RHa`~֢A3\(@ P(]);u:'  )Rj6aƽjlQEumg(@ P(@ PZAO}& WWWٱzR< PGAuӸWP]]J%cF4AuyOs8C4`nnftL6~ZTv::6 yܲaYFCց^˰w:S#_`P㠺2nT(ŝ6z6l'zHH((;{;˘Vza"Xxꕺ3e@ԩ"e,{}\M#gT%wff^Kg'խ {m1K p%% +Wc9cP/#(0oIV{2M/@-kwoߩƂX(ܨ1-,,PhS+dqu5'IjH!-|™ )mػ=TV-"xbm:tXhޱ Ş{UP/t-޾saǔd(@ P(@d/0a,g׌7G? @؃Kn|[d͜@ P(@ PCAqxIG`DEu{{{VTO:gB P@| 0n]Ss&] SCpP00`\WQ /XcB_aZ/VG ں/_cHqw9gC;KQI %PMMmg/ {āSUWl T}W/^@qtiʠaP~gZ|\]Ys'=ʽ^XJ3Ttl^qdc0udZ5slbGu7l߼NPJ5+jA6}rnѰU5P(@ P]@c@_.e*z-%~&ֵJ4ڏ(@ P(@`P=Ź, V gggڲzR<7 PL'i,#uHlc7- .{668Ȃ7M\nR fs ]sWպMߪyY]V SPd5/$<h5UBZeWncҐ9j]˼:D_@뀛n"o=c}ܾqO- 5ST?+pZz)SZwUe^7ܼ|6Fh?]F- *4Ƴ ӗ]Vꈶ,[ sssՅAuà_x,AwXY4ij:~7Tx!Vke̜3}XaUuo-AbG ܸ:撙U]vxos"OY866ڶ/a~}"ڱϩ{;m;9ӲvܽuEK٣պ2(@ P(N;y|AQ<("4oYoQ/в[È(@ P( '(7w -^ wwwٱz2V8`7ǟq=u]Vl[*'zLѷ} p n[h 4 ;4UU͍UT7-\6]51e\39gŪY?.!~q&렚{ 遪uyM kk{z\}`W#GmǭQtq:B/ /rߕ:5l7Xu=q(@ PHG?# TDB9#4u΅Þag(@ P(@ $ $OO߯ x$As-x$(@ Ӽ;.{V ?V(_tApșh7BUW/^ahq ^MP|رiVnͅNZ pvV,k?pھ蟐=S͎2h]\|R:'jPðucjiܜ1(R0{8M1jt.X 9 q&59m{ xn,YwēI{DT[jՇ*D5NUCA C2.o4 [n;*wxm 8C P(@ ${Woc9ʡA[qȧk h;J]RӼZ.\(@ P(@ |? ;w{x60cP= _i(@ P&`P4 TgɣHa}cI Ni >8}윚w˞%“zz$ubyPN9 p5R u[Tnz-LߡSXK4K+U,K~P}òe0CU%e`1yvlZUTFό^#:`px'~9;dr/˘o^ŐczBO>x"hڹ^4. ȠAcݪYȞ+]OM*g7lUmaEuw>2U3dJ=f{b2XY[N=}FuE |p|kV\5}{$29gjM\*{ƒKUU;#eʔz{lp (]ggL077bP] (@ P(@9Y<% ~m{)XFwCl: r7xm8O P(@ PHBHN [[[{vsՓR(;c~ ݈?A*9Wh W/Det3޳>SZJm3w'ΞYe}˚x[TA]B@7܈cg;:0:Ҫ%1o?f GTsZmАPt ?{UT_ *릈wT3~ŗ6^eV?{Q>6J{\'#_;ifL=CݴݚwmѨuC` 8@ P(@ $sy'|Lp@irj9?w2(@ P(@ P0Iع$,*ԘG&e,1]  (@ PRߟ}Au}?|=&nv29w9lTIUuFe<^<n?@*PE5]l߸k6ie9?VÙ Ƞt­:&-,nY y&u?eU9<~[U;O>->xZ?4FTf[~3g,pp4 ?oP}uo-߽5䲺|?9;iaWMRj^hR9޾y kam:jyp^{ (@ P@ؿ0.\ ̓}=p^3yж@ P(@ P J};) Ƞ;DE`ՓE9Q(`ZM㙐Auy7Vσ8i"%=T{y}ׂ)*DDP,(`ADAAv "Dz$wgw]res\.}?vggfgs{!ͩΗsjEKP6HAW,]U}G%:6ޗ9MY;J3OoۼC}~Z7Iz~̎o*h%ʠ~~5^ʹ9Gwΰ1jS}=d\ZPh+%:&Zr?ȑ8{=jL;Y׭߸qϦd̏ #P>!POP]u92[dM}74VToնG!SWG72 yeYCiФ f?T́G@@@@ [džˮ5HknĪHY2q{S;i3t=     ՃaC( ̔T4  Aus\TW^0o̝g M5CV-^NDdgVzEOWKlU'*UAE|aRZri}U!ދZ^m,?D!҂Vk۶^^Yl\zHڷҰs޳7c/ѷpcNExD@@lj/5 |Tlf".V#nۚm*!   LՃi6K(dggKRr蜆c X#A@B^L0+>QRI]^|1S6]{nD\5Z dUrp!09Fr]R;qgߞ2WtV'fd/K?]E2NO|]1zY`1x۳ϩch-RW*zX}d<@5Q'i9e웙쭉#B*gQic5|3I>xCٳk\xx\|S%)5^v+7kz{P n;:G%n֩J^^+*H|P׽V7ͩj-cVo:x\c_џC@(@@@ 6nY <bEwEN     ՃaC( dzR$$$=}c^&g7v9rB!      Pz9423%DP] zPOC@` n,T7Ǒ^Dzwx/aվ7ׯ߿!3 @@@@@@`  BI K$qJ˽  @ T7ǖ9BPAuEoH      A`JYY.QQQXQ=f{A@2 n+AusEQbXn_{cKVʴP%AMw(UW-Z鸢?08@@@@@@@ T/ǓЃN@rƏDH!tĀ@@ 3#q>+(BPCz@@@@@@@ ,0PZ#im- AP\@N9q@@@@@@@0G9M@Փ$::Z"""`xD@ Tw']9AuH       e+@Pl} ̔ $^;F@_V A&         ~r XV?^RSS%**zM1w e!@PU8        #@PGzA&#III#E,f; a 8 Q}@@@@@@@ n)=V\IΖd+;G@{UJ5q@@@@@@@*@P=\̔t5VT7TgE 0" )@PO H/        `Aus JT #n@p'@Pݝwս6       A%`Ze "QQQ+s  Au_Tw@@@@@@@NACO XQ=XQ=66V, +sG  `AusD H/        `Aus@vNԩSG*W, c G`0 @x}>Auh        T7ߔ+@fVH\\+Ww  TTzK,       Vz`Z degKjjDEEŸ]VT9@@O~hNPGzA@@@@@@@sH/efJz||<+PxD@J ^{nEM@@@@@@@({eo*@AA0A%66+s  AumKP_ @@@@@@@@ T?sBK ''GխVXzA0"A` Ƃ J'<H/        `Ausq$--MXQ݆#  PAt>^ WN@@W9#       \'ן)S$11QXQ=;B@ n*Aus@@@@@@@ n# `P+P\ۘyD@N;ީ_V:~q}?       %@P=擻9'N TKa;ۊ5a@NAus H/        `Aus@nnKttDDDT  NƻryQ@@@@@@@Vz{+H{ʗA5_@@@@@+@P=\-rssnݺoz9w ~ TDs8 Au=Kz/F      Xo*.111&CιC@S'T7Ǒ^ (_|1Z@@@@@AzsZ2m4IMM(= %@PI8 AufeP,KE{~ZV6 *u76IeΔR~]V^<ݫ7WB)@@2(((kU#t   P8qIllX,VT=@@Au.ޖTx"ٵ}FˍYKCYY|ӦC 6ڱoyy|9f!=a=UnݯfOq#3$:_pInx'1xϓ?SiuuIUۯF;.>Nf,4r5)Azy쪞uo#G e0|KoɱǼM _z h  ࣀ h,_JCUFUixiҼmSIc4C@@@-=WLɓ'KbbTREbKA0QlݺU`cA@ ,@Pݜ7+Jd[Zr4e2gǺ΀7+X/DT>rkol]Ƽ1O fi}^g^wѹ.j9]Iku3fyTRx;FPLJ嗵a2zyޙ^ {m{r!ˤ'ʭ/kC޶{Ѯrm&fTz h  zrdϿl%wD)D@@@d T?Y\7TԊꩩϊ: +@PϲIgGN_0r`UfNS֮Y+_%~BlGd&ٹ}.WpqS+x? u|'\ٵ}2w<8-]*)ޮyٽs\{5^Mg(Gqj'?|.Q$%9WoQ.K+0ziG@0C`iuW5jU+Z\? Uk/ _;W>/vU̸$}    `AuSI$==]t+iJ޹Q]i(kIJSd릭[dw:6W^(a|ou.jRO%ղ{!`5Hi#w[uo`'`?L:B@p#ӣj5/=(rVG˯(F@@@ oC[ 77W$!!=Jk=28{N xSʨ;vs~-c,=7Ʌڏ=QACHrŹ,jZkJjU.>V.Bi޶;l:/=do1hl\vOo!NDzHN9mjerT3uݽ~ҡn//m,Q~ui5~ިMUmW9 KGtكOS w&ʆuDݯN9ڻ\q}{ɘd Eզ^uty7q̞2Wd©E~M;Y~,uҁ|*9ˮyu_5c@@L^~bĔZ؋=[ɜI?B7INS&cS@@@ (Y`ʔ):/VU,Fz9 ]r2?uV}CsZ]# 1tjvf~&^kotj5y}+g62e%vΨ,MdXf~l]Ǡz#DK=R @ T7gn(3E8\jo: ̹8\|r[EX8H;rް]]NOmAub_`=ntbד=M9rVDt8Pg7% ;^Me[@۱7zF;۱ؾژWVb-{ ?ҥ $&/o)X3|L^ ~βN-WQ z-S{'ϑ,Ƨc8<&6Zs*\.s?3NOKd$O|R6>wciKZ]]ιW_|dl?k.yɷ7cswAk?.ܯWVܾ?ff!;?_ssF9A=jh?nDth+]';SԦVFɯsZVST{O63ǎo,*]R%gg9&F*_-_-s+_Ο$ @O{s?`zxjU$gNDEGsۯҫ}ѪmK}ݍ. ?Z$m[Ջ^NRmwKeTqWZYꢃ;so n]3'͒ѯ۞y)򋱢,e s7ZxW_J sO$kV/wAԛlQM_N>"}{Is.Y)o*w^5ѓn%}gרu@IDATK@@/vn-/[\8߼N^Ji~'TlD!    d.Ql+T/mbigsɜ%_lrao|a&U1ޛK @QLlY]o%ݨre.+ګ9S`T>we%<<\}R"""t>ݽOwErݭך:nXFʱcEm+duF?t=[KpV-_0TT8,,Lޝ6J*϶f;?_Mi"G6kNo~93QCld=ҾE8=X?xO=7i|O9U8)Jk˪uI_zf>VrS;M%+vmOWW;+EUWF$ l_zS>U7s@:dѩM]fSe7tj~~VIA8$$ښjWU?FLxCCrgˎNݏ/6|TZEgWrŵ%ʠ~?+^zmv;q0%կhv~TAު*ȯ\nv#?~^-ݩv{+dԹb1>is'VT^8rɗ2B;:.tXRuyT/swn~𳯴<  ?K)3.z=U%np7dWԿ!    ՃaC( JFFDGGE0GEԣjoKY/k,nݩuȠA#j;jps{s}@B]93\Au5ȄkW2X,.{ #?uN1uɭnK. ~G~s"o?aFcZ\#"#d~2g>ry ׍"Ow"Aop^".h=ɗO>}jҪKš| g'ksdҸ)/7n N g^y-]p˶-Ao裇!nnxcP]kzzXT߾ur`AQ+4mkv[a1`wm{ާz=St-S H|Bc3~ol,1޵Wi{gᛮ b;+;S*(Bi2r=zL6 8 {w]P{u5.[}u_6\rgIJz^IVןGo޸ >f   |H oGixinfh:o.[;ߨ>xX6X@:j'g^H>h̚wԱer5[^l&/=1BlPwIJ,*h?[״Z{FaBW~ꌯAYgd]ع׉c'IΨO-p /xdJ%lBz v 89sU_IkQfWAuJ7"SZJTP.ޣowVŚ~A _-_%Z]r?_g^.,1ڶzGeXRP}_Ȍi3{";s.dC+;V4m~4+)uK4;+m69  fcKwqkgMWt(uRշ@F+_,7uhei   iM#)S$11QXQDҩդg6*q1.-gy}GoKP] *T[6@*Ausf:Au 鉑ʾ$<"\1>FzdďM x1Zxy/z?nۛGR794J{Ͻ+\~bmǖrYʸa䔚zs#흱㕀}ɲN%)$YHO TPȪ`7_8(_^^io;5 Ӣm 9WVE⌕j綰ASz_0T>`A@GO1c)5j֐!.!N[9ݫb%ӢO> E-,,L{yS[׏}usT{}^O/ @@8v[10 T:9x},;G$MEbP @ T7grTW#]oG@Z'wY&LL>^DDFxu\$X`^Gz={^ɡFr1y/_}Xa_sm7 ^M믑Gvnp∰f!DQ?VoȤqS f..*U G3#dJ4=6ZK.$r}|yyyrŭYȂ5>/ :! *ݮy]U ֫uϧ:Ux4:¶9U$UkdyP]~'r7/yѝZZP7wAusxxx>og   |x;^9Fҹ7Яѿ8P@@@2 ^&tZ&N(:l)0`غuNס4,c+T.;>i_U=AF |)[)9 @H T7g:TW5CTw R~In[ mnz*9#ʩOѡt[gt.>VG~NV.RL-u앰f!KQ?VꎁaJ3چףc/xAλRkLz?~=EyȢBϏwT_2 7XK.Ƕs`F?nWʳCxѮr}ۘc< {v܈L=]7{敧+/ ]?nqow@@ QC'کŝCj ^pQFU}3pѺ#   HZA 77W%::Z"""4j0#xd5VU++o{$F ަ9ケĠ@ n2w=Jl*|]fǠ]乞S塧([U_dzW_W~ϧ$[v],mja">\.s?Wz\bu^1h=+7Zy^n;$YHm;C랞!9OZZFө=CջP~eWs$&6N/ "ͬ6K>k֩)#wZ[yղUNꎮK{ˏ(}gΜ< {kz3|J՝}2Syml[/9tӃ҂ >Ogz   |k2fn;v叒]VaDJ7'Ɨ;J3OoۼC}~Z7Iz~̎oA'{>-W|]wNRm,qs TP]]3sdLɚ/XQUrƹgȑGd_+^O*>~^^=qǾ)r Wݾ[ZJJz2c{Wه`VP]u8ey69Åt2uT?tz:^Jt~\pr`A%9v}\Ue~1;Λ/C4<ӽj#"/%wѫOp҂ QϾ   Ş^|lھ[w+/7>*R}L9uGNrZ .Hk@@@L n"&]!`dzR$$$jeEh.WXW <m7w]"eyPV07g@moj -?@Ѡzm7q YЩt3VF%?*Eʠw-r|aRZri}'yKuI.7š<6X _0Tv\R%yn9?؊J|43@̠Z_'exSkjKtx°{ni׼ޣowVM-;;ݧ 7X_*i2fh{QCߑYgۏwUϑK W4Ͻ:^ ͫg)FW9*EU?/6R򥴠W|ϗ   j/5t|T7 dX>yۦr   $@P=fZQ=9%EhYQY=^ V{6-^+[v8cUFs% l~o*AYWacOw5+:ޛP @( T7gV }jl}oRW@3euFUڨU>@V,\% .h$׵i*kw/|EhkubFg]$T.A@1jkaB_Q1ogޚtDopM7V3|;k{enMsb-Wwg|bѹᬏdߞ}Sƛ/iztM~xNm[/Kk"7ԄmK96:pf?v\SH.wHoѫ٥ua@|r{n~JKcێm;Cgzиce4Eb;.bګϜ4[*'ȴ&ۛzr7#۶l7]'iokK'%5#UޙX?uwla/Ww{\b}q#2KtLZ<ζڻ{Tʟ9E>_[= N3|W-[{ÇK+nrGm?l#  @Y qȚg|*&K%Ċ ڋ9@@@@ ,0P))'0F@R媋-qeH\{pS %82o7jޛ#v@͙d挦x/VkݵWah^:[ Z6RšBy*ޱu5 qRNbv_6]>"E$ry0lvҫרYCTbʐ^<$[6oظXeZtiɵdh;u號++ZuT@V|/zoE@P n{Pݜ@&Y8;bn/>M@@@@@BGz%wYYn|2{blżDGEJzS%XaS-e^UCނW!AusEwg|b6aOB~ PQWQfD@@@@@_F\ H񒘘(111)][Q )!| Z,Da Er$Ͼr4Y @@@@@.@P=\0VdHZjDAu*8Apn @ n#AusEQ}bXnOB~ PQWQfD@@@@@_F zRRDGGKDDAuTA@ L n#T9@P_A#Pb      Xj/0.3S222$22zO7w fT7CQ9       T7Ǒ^PVUrƏT"@D'J!^5@@@@@@@@ pg͕*@vN$%%ILLX,[0֭[p a1@͙|8        #@PGzA@ Hzvv$%'K\\F!s@(Ez)@&!@@@@@@@@ E*LIOOXcEucIuVT@sϭ" }+Ҍz@@@@@@@@ T?\<TP=55UbzXXAcn @L n(Aus@@@@@@@ n# V0ARRR$**:O @@(^zF@@@@@@@@ T5WƊ)Ɗ걱bXXQbL;w TG߶`@@@@@@@NA? srN:Rre)0VX[0֭[p a1@͙|8        #@PGzA&%)))NJ6@@9[Q@@@@@@@^zs%-%YQb?w >TE.P(B@@@@@@@&@Ps)Ɗsm! %n#        9q@AA0A%66yZ  TD:K7       NzହRA8cEu*#^LuV=CsiX@*Aus&9       T7Ǒ^ 7N$..m(<" % T/Is=&       A7 K gxzllX,VTX" /}Q+ކzqJ@@@@@@@@ T?y\942$5%Ecb$<,zhN3w f T7Gs֭tD/        j2@LIKKhT  ƛ3սѢ.       A&-)Ɗ񒟟s~#ɫWKD]v6ZwU,wl&K F'8/s:@@@@@@@@4@@NNILX tE/M'ւ[?$=IF"uS>߬W;]nBn&y@O'n#        9qlYYzEuTXJ_Q}>)UKbڦ-J&|~^YrMM<9 u@@ >1G9       T7Ǒ^ zZZ+T߽<6bػ^cuH=FU]_m;~<}OkcvG`SQ@$s H/        `AusLIKMh pT?/GOmpyMrFd]릭t9gV6d/f 7ZE@@e8        #@PGzA&-I#}P}褏dwlc[/hw; 9Ev?`S5>V^qZ-^A0oŨ e-s H/        `Aus@ '%IBBXVAIWǛ@:6T9v\a6{(cyYԶC5  @Y ]8        #@PGzA&VTONI8)(((T_::#[}x陧K;[8R_i0qzn= -sD H/        `AusLI9TWe#x^`;vn{j˳I8y{Rd.[2ai~YҭMS2_*G;@(+^#KPGzA@@@@@@@sH/ԊIIzE7ϗ~׏=^-ss1EgS%.V^qԪ^^A0_h e%sd H/        `Aus@fVKTT.rZQ]3cfʏ0й}Z.c:)Vzlt%{/;|Q  O%n#        9q@AA/#R,*?tDϮ=PoqQr$fu}ڍb\6dWvlu#@@x}b,Aus@@@@@@@ n# VdHZjDAu:*oڶK5U9Vzjz}<{2%'>\3{۫ʼ9 u@@ >1G9       T7Ǒ^ L1G9       T7Ǒ^PVcaSJZZDEEyTW ߙH_ڵow\sgdټs|-R/̓`(Q@)s H/        `Ausɓ%%%Ebbbb,|n)06IwVk<5[^S!*u{)r{*;w`Q@+s H/"uj_WW牧NC@@@@@@< T/ϳ؃M@EUP=99Y< G]{)FUP7^)2BjWb?A0O 9q>{&HP3'j!      Pc(+u֕X=<ꁺ`:  O<*A}8빀A@*5+|G@@@@@@39Q OTP===]bbb$,,L{*G=@͙z8 + AuϜ      @y ^gjiӦIjjDEET b< +PP`M{cȰJ\X,av]T7g H/}TLgNB@@@@@@< T/ϳ؃Q`ĉ&FfŠ8I @_>Z?RVmyNex'@P;/w [=쯟U^WIy7ƍ      7սѢ. L'_1>s,3|y^' xiIf@V~}^r5V-WIHM&7  e.B^ʑ ?Z1Qҽ'IHtyB@@@NA%uCU 77W$!!=dZ{oWWk?~Jm $R~!޷:cv@F Au@:8Vv8hb.=~ˎAsۻ3AuW*ޗEP=,~lnV|Rtqɕ5\sOv:.+'aa63>d4/4CP=&!U )8#箶:ż9dBV⺐РyB| GuTWg#W61[jyV4T_.Ye_ Z]ࢹK$hz^װeiںwrĠ)äZٱ     3g$Fw4i̻(6˥?xKj6b    Z,Yfdt)1W< l^#˔ߙ7/^zy9}:|㶜xU~y{^W"^a< rRuY9u\*n?ȜA(on4qL:/YloҤvԞ ϟ@R-(;wL+e/G5./Yc;w\zS? 3'e]t'h 9|bqZlb;ߔڟ|AusPI]27:;;E'+ ZtiMH#G55z&@N'O3)s&ɚ=Kxhq9ɐ1dϙ=VܸvCn\)޾!EMco(G -GVɜ5sTMGJ@@@ eFmkolQjX/^}q15|F/ Uc@@@HbI R OTPɉzL#e&˼.M+m^6<1vAvA?OyC'VJkeٖef4!3u>o\4BTFפIR7ɃGȌ[dˁ#ٍG,hPY r;+@Sy*,͘|٭q#vqN#Z;SQR ꆧOO)n`REz*D9ɱڨZ(+9fTg6j!GІm@уre}M?YNlA0gk{%]TR{ټ~ą/t%Gw47L>WN;c=M[_M!#[od&ǟA}]b QۭEfnCP5ٵu 9L{ĵ3u{2aQo5yy{J~Xb/fˮm鿿/ 5>0W;nݸ% *WЫEsj*U*viѱ4lZYgUvvW00P{Fom˗7zWH }zG!A@@bkOcDHv߲GYhۏIf@@@$ DaL 6uIzN]bn5Q^AkC%`R y 95fT]U9OTY LSfήgi#O|H7av%CS !/bT{EyH^)lTN̞٨B]P] 99sOA*2}jӖZ q= }ᄍn+IW O3*uʖ,>_7 呾T3e@ }LE23m$}~X.O4F<+IF}GWw1GQirROZ?WIUJ$|=`ua9i]2:Br$'FP}fnѷZ_.QX>uTߺa ٨?] Ow|WN~y' R>X_^yWNZl^ZyK24ܢkC)ZA6flPAk5}5q\ZϿ[MQacJa8 f*qO / ? kxCդ‡^^6RRnRNԪ,2gԕgNoHc|Xm՗eP]-zA>m/\<%_ۨm 2g]ZJ 0|`j|Ҷ4h^_ϫu\5VԨW\G˶oˏ[Ÿv5Mt;Gh>   \rCu[hTIV_n=}fYTeB@@@ TC 0iNz,r~ ڰ3Vi]EU0\U#wvGT7uB7-JzHցmJ'7=}<7PR^oڪs7;evk"sd1/ZMT]MSu#U47f@ $Kt@IDAToK1^FUj7>Xytב׌ez]Ft2SjQZ r~Ao43.TWAi#ɉ#Q%%}|  z4u-4ϒK 9}Ÿ9CM:[7n;ߔڟ|hE]+'ijҏJЪ ӛv˪tg: Ȍq3OR?~,OcOtk%=AE Hl,>m>iIU}@["}:{u>#zY1 HoTˠGzwxy{>ڼ^VNY0Yo~=iT7n-Y-8y1쩳1SF>瞪װJ}>uNjr@@@ 1ufF񀗌"MZ3n.$UTv]3#   Փ9EtEu]Ď b>YiR|>Qo`VAp{Ճ7(+g, 7dYoUv6: pY}xu[վқ/ICы,wg@9rڮg͙ݺyLPUUt5nRU22bXN[\njWkݍ{i#qfc^mTON1CP=hQXAuunɘSEӺJx2 ~5nnӱ S oʜ uCZO/=xjٻʝCFuԇ!]&ȍ7EURz齍Plnں1nLAu=ȼi:֮"uչM=1nrUU6\fˠ3%on]/X)' )v tPzKJWxW[˼_Zzj?5޵߫})>k M1O;C.]'Nƍw7 ;$F06"   'Y1kegwDKWԿ0!   'QR%KSݩUm-gҹl=Z)3ϛf;mկSF9{>#TU7˓[,Tڰ |v^$go }T>g%xe~ZOb_ӢMm7E=U$_+IH7;t?T 1}W$g m3Fe, q'W'fP]qC`r}t%s''hVnjj޵,>kͪIۃ{KЗKEN%Z\] [F$7'POQU(OdzA3mz hTE.ęnhpK+_/,T~[R9;Gێ  _`r1P@>j]| f,3nDW+Ս]?-[65W[OZ m'F7iH1݀eTOQƕmYbყ,_ϤKDT=>Db%*m^]7k;JT]H ɶe d_Md5{~yRӪrqt)zۉ 1m1ȘtȀ$gN[L1E=z$YgKfGzwqrĠ)äZŴ` g̜Q|VAu$ -7ToNj?` _t%껷!+o?#kZAP$+   dliaM嬟eA|LQʦM"   L?S~.\(:cqzjL: ؓ0 \*5LfGPrϨgred50>e[MkW=|RD=-Þ[Δ*O>o9 bنy@-A+o "1f#sxiKًE ig<%9awˠzB|k|u[7`2qyRա03F?ʝC|I/NePe59O\2mZU6K j%}Z"rfI6#g\gQS.+ҰMTP{n])R!0'zfz쩳YzNZҲs T-;.B/4=X]'գLb   Ƶ[RBҼk(nWi& Gَ   $Ax)]`-nnnFG'1 o_ëlvԕB~vmTթjNq 7}cn4Ռ:s**yAoWAG>>kɖ)^>毗=O(?AA3 E{zEZV/NF}~znj2N[ާGI^_[xTZ$UP]z mHgaT >gOg+SJvg4J7MGΓ?)5έPQm,fjk<TPNz;Td"!q=;ʠnC:MjKN ;XP}v===Цg5"Uz~KCGa   QAv =G/~%gNӫO),^-   $AX h"TO>j*0? ^gn52ByokœtUXYpܮDAiu[P}2$py_IFU$EFUQ 6ɑ) o][rdΠ]qؾ^N[/;;9˼-$G:i;6H.\׻%G+y0,8FvT7[ٽYe@H̠~oil;("‡A#굣֓FSuiSq?Y{~D|ͼ2͝cz<Т%)ꏍ!'XNAoNᕸ=:o!i\-CezWSue0SOJt@ʥkRRIeSٺa hޮ:sqO܆ zv};h+Vѽd`raR2,kns~4mDra h[_*>pRwI.nkrl^exNZ>O//&rdm&"߬ 3g%.՛u$ ٭ڜ=uV>V5ܸy'tܸvCTj׷hg|~jQr5yZE6K{ܾezanu=CҼC3yks@M G"n`@@I@=mDIr H(VqpJ9}f0O F   I"@P=I9 蠺j )#>695bjU@Jb X٫'Fz@Z?Q~DײH,WC[2P#L?tZ9zeHY{H@R36V #zI,t;Agd/)]]I^ߓ,j|z+w^LPRy@@@6U0`ʰ9C'0#n*zO>0gB@@@ 9 TONE:mQv}l5*B7UNre ~̴(W2c-'U݇}7ns*QA->W^17}cYi|`^fTмVDUUA@)̨2¨FFvwbyU2>BPS^@/[.W.ή1m_tk"96V[ɭ߾+s.?ՔTvӤnjYݾLͯ Qf+ 7C?c/G4#w@9yn7xJOɐ)>?-Y^z|P=y!wԟGoޑzڰ"h4[|gu",,` .(s c+_1*}Cl "&#=IFwʽM=M^^2g,6.6˄!_ سZ9w朴d#{˻o ԻTUj?дڧrҥoHG-۾.>>QArZ`ZF^j^p~i39! ,NFbH   6 uꂬ9yjDߩz@@@HՓ(p)I@U_8W0KtiӈF8=Q¨ aITH=He?yb]* p!FlFH+[T` .p#mq1ߩIzoqT;qъ!a[}ߒP#f%[&Qau'`T<7oSIZ7WgCBP>"Rk b8rlwN~Olu      ϳAy8&&K.___quu%A@)@P>BP>BP= T͉V      <՟ܓŋ[ISr:Q`i48@P|bAu8        G}%"*;wn(yo  Tm       $A$a $"yt&@ϥ" @-^#       R)Q@MzJe @*@P>H/        `q@XX,[L|||Օ:o @@(ކzF@@@@@@@@ t1KNU" @B'D} g       <{~ 8%,r 2SºScJNH,9 JO> nGzA@@@@@@@T# `7Oݝ&^@@Ǥc6[@@@@@@@_zs$>>>*NƥSQݱƟE@xTZTU        ?3zBQQÃ)t,@AuT#        }Ǒ^PO> K-@@[ۢ{@@@@@@@NzYs$AuwzXX8 %\@@@ }H/        `qLs___qww W@@ &1ؾVD@@@@@@@ ӥK'NNNTTwj@@ >yMX       N)S pH/        `qLsWҦ'&^@@Go-E[@@@@@@@Hl-L&0/(Hɓ[QE@/3g Md|       8Yl.5I%KNsE$   @$XQ4% @@@@@@@@ yf8 Λ+렺S' }rY <5?$lv&a7        `Gw Vcot*+FEOT- &@P=6!۶T͉V        4Փƙ8@iJ*3\) Wz|#n       <[֟< ʝ[ɉzb@-@P>H/        `qLTPKҧO/aaaM0"  TN&n ͋        חO@UT-S@@ *u{Q@@@@@@@AgQS@7H?MNK,9 JO> nGzA@@@@@@@T# `*{yM(" 1 TImm%       $A7%8op*;s  @bQ @@@@@@@AgFρSӧO%x|777I:TO%! }Ǔ}@@@@@@@#@P> `FPɉ:o @@ 6 ٶmNB@@@@@@@ 4qTPKҦM+...gR@AYGPڃ%@@@@@@@x՟?GOys_RNMP= /W !@P>H/        `q@XXϟ/>>>JP  `Au[boCP=v#Z        @ TO:kA%nnn$NO)9]:A4  (~>}@@@@@@@#@P>P ʝ[5 Au  @,cq3Auh       I"@P=I9 ???IgTT7JSQ݁ƞKE@x T'\Ga1 }ՎGO {ޯGypU8q      | TǏO~*#nFPٙz"@AuAu8ҋHB֎LAHGZ4@@@@@]~{  [\]] @@ TT#TO{zB 4@@@@@[c?Wo@QQ=]tDEu# 4Qq }TO #4Փƙ      c Tw/,r 2SºSca#A۱' $?Ǖ}酠zB*$Aq(      {z Λ'NEu# DUq }TO #4Փƙ      c Tw/0/(H|||UnczD@&@P>JP>sPGH4cdrgRO8-kxNsx GZуe@@K@=9IrI|8g   pnȹD(>FEu*'5# @  nWP}Ӫr qKV7$?~;)w j6,ioˠuXXl\l^YN<-?,ٲHyBnw"]?ߟO/eRXAr񔢯KjmqYФ8zR2f(ybq]!kز4Nwnߑ?֗Ժ[+#./٦юw^#o_U⬊tώ2}PuSؙlѿV@D@@d&{]?KlKR$}FdvƜ   "y `?U`)ҥh @RAucL g/铪\QOp7?څ=$S 1gc0UH}̀quӶhO|r>sOgnOkns$UɼRbĸcr F~U7.ApBձY&8vmq.0\oN.A;~sR7V,_;E@ ,'nҮO3O')Ey"D@@@ A ,"@`Tw7*\^>;A0r AOhtAuTeg1}/9OKpgĠzT}T(z;Tsvv!=eml9}[u>u7s;'8,3XU%^xy']`%:Ӱn:9P~5;We~  .Շʖ3\J? }G?=2K$CIqJ@@@D#l3w;mV! 8Au bՙȕMz o+ӤD G\TAoVm#בhɖ#ޕGOug"T1eUP]!eYCQa$K,0>T.T8XVTOu$&ƹDק΅  OSdB2g$Fw.Ӵ:dl۰K/-٤i   TWgN7'QWk54tms3TgtY2\'\iDßMfZ>~^=s)SiSǏu'V<|HW~xzI4[ݗK/z\X\9=ټ{r&u:oTWUŦݯ_.W/_ٳPulAu e>W/_;J՞Ǿ\xY-j-Dk7$sL-g6}3H}kUD@@e 6j[[^e /.]d^VAv,    Փåx nnnoNF G-?LPp"  ?`o>oydTzx>MK/F:؂aOds^ }׼G:)UT8r63q1]M3SϕSa2pr1nL!#[mc6S޹+*اc9zKP]qk+kW߳ΐ鋦؁r] 7$˂KZrHtm=iaT˕ʅd͒u: bHq̛lcS_IT -`Ze:sȷ6KWzQ*%C j#plrٷkܸ~SSR=J&#մ;sμ9kҴMc)Y-W^ߺ[+#sfl G7ηnܒCt0^}=[>?uEޯV| qu:V]ZX]]P2~X1,gJEe||LMԢc3ݸV~9!3˾u;@\@VC)_\} uv:Q)B}~5UѿV|xE@HczM>Sz!YoY]I>    <τ`iTOͥ! }A|GEW fœ!Sz :؂ɮrdץ^UX25{=@%*ա_0oWa~mF=ߐ:ͪ1c@_%kUäTR2`lhwn^\0Au#okYn x2jm9brxd|׫Aٓ+uw폫mԌ O/FcAU/ra(>gToXZH.7nfjs7tkSN;vKFNfܬ/~yLܹ%%uԖuо_=m߅ jȪEkRbUQm ϵ=XeP=>**[W_W-E(o_8L nhqYc,HM>*][ռçR3u~Y jZVÏe疑娩~7ڛVTYI:(&^@@C?ߒZMDyN_o4oҾ/Y,vD@@@ '8K-=<v7S<^9uVއoyU]U S'+oáIUW5/?sI[tm(E_+hƌ"x]DUoΞ3z^;W*y[HOTCP]Uɟ̜8KjV7RtDP}7 9U[o[]A25Q~IޫJ '4׌#˕~UMIoܰoZ٨"yQQIߑ yae*zKZݪ}¸)bԀ,5 @@+7dXKk4$e+7鬒,+j+@@@HjI-R%KSݩC@TcbUi#ɉ#6l]KJ ߹*;z4u-5y?U}YrI*WbUAN7']+gTN-# ӛv˪tg: )Z:\^}17piq;ӢmZGZtlFP=Aٓ+ᐉu =o~kx n̘)M4bYQ]yl SO6kXSuSLu˾*V0f6(5j@nl=կ1SFQZ~MPVi"oޖԐU_+kx|nUM K: o!OàqÆ-zY?râ* jJztlTW#*zy)XATmK7qfF񀗌"MZɫoE׌   $A$` *{{{Tw@@NXAuuv7ݒ1 us%sLģ ~5nnӱ SW[~Q3a^uHkZ-{\sH]t 7UI% 6®itUm]U]`7wM*Ow}Z2hy9!:ЕM+kԯ&m{!nCPڕ4h]NkUPCkWI,dѦj_>|$`|ޕPg<~YYoFQ~_U}'ڠ!rcmTץn_QF4@^Hm-l0 h"K笑[ސ:VK.^S=/b;$ۣ0f 1ےeޒ:F{ݓ)KP=rP=*ju_>?ҷS `veɷ ].޿@y>#m?">N '?lbT?qth9Ѯ[qdΚ9vo#+BVߎ61yL0߮lT?viWmG,aW7^4R/1Xܣk8[ju?MB#1 5.]uׯ>'*}A$V 6DHԪ,zw I  QK24}ju7,Qt|LQr8'@@@ %'ŋ[t;M  g"{M5*ߖT.c 78dʒA3_:}xE{g<I]xyvϒM*ZMȻ%?"s'.92K ](=d]3q oߺ-wHo߼m}ztq1\$ $DzB7)hHs!K$}O2ͲemYF'.];Y6*W`TF%]>G?g"rfI6#'g\gQS.+ҰM-@"գkϝ(K&TT>b0zLm N % %a7('*#Uic߿w_X?~,sf^zJ ԂˢK=Zj9ҦgcYΨ*{ իT8TOxTL[4 K5ߡI'9qy5FoNitAuUf:|:U#N˦MTd&MhZnpU# $o!ˍkkyQ~}fX   @R TOjqTEuqww7;OzJq@,@P= ^Am- UAs|ޑǴ2qL&J𔥒:noy?EUY߼fܹ*mLMx oXQΟ iQFVabSW"_MGP]uYrY)X|8!!/eYp -N0SP}dѲmvɐ),_{QNn0 1.IW]O]e_wN8-MUjVRɮeHaz~RXA=GZ@@QAvFߞ# Fဈ3'Ճ4~֏ ^c@@@ h!!!:^^@A8ECRUgȥs2~mitBҺZ?z踬2BjZ fjv W.]M* dMFv''':sqO܆ ҠeFyzu>^#e;#qgr_4JM\9dI!cϯ]?"'$|uU*V`WͨGȹ3$k2jQ-XU-K@޺o^A1CB4~:mJQr wYN#bSP}nQU?oIW^*?Dϫ ܭ۽_fNJiS)U8*@@B`dj}E^- -7:{KЗO[O:kn@@@AgϱSE[TP)q&@Au&eP]3t'/2V_|vޮ*])+>_*>pRwI./5ۡ*U*iмTJ"/^ŁKuuu\sɬe3Eß!2p~f*2g [d?R"wi]_ǿާƓ |UrCΞKY,޿QҤucs_ͨt zyfz$]9̛,=2ny#.8\qMy72Y%7079;1յ__ 9}@[WEulvqrM 1)ơKſ4׫&oWJ2e$5K_<`l?67 \ Y2o^,hTTVe)jQj߽mF[=OkɎW@@/I1I_ H%uj9 Y8s~ʜ}I8C@@@ 0Cͅ& kxH*'5O]&o/fTЋYfk^JTԵ l>V|,+-Go}(z9wҡ@r,}7-?|E,?IդCҬ.ΗpuDU|3qo%d76+͔+ߒjV5E$QEvEZi=zs!I{ZM>^ r  1ZTf4{Q{:,njzHhTRQTXTseϟ{ p5#+#}'U>J PUwsZ#\]0C:~۽ORGpm8UU *8mcFz>q޿9VM>su>;(Zt+nuϮr Q! ISkwUĔ5>YÕEǙ{a}+<"L_ \*@@Jw~9~F*U 15# s@@@ T/3M@͊ꁁսm xAukۃ\%zaOw cM[xwdic 6ɯ*p.@@@@@JDzsRHIIڵkKٲeO4  Tƒ5"2Sn1L[8ƭKg*-8@@@@@@t T/K@}%K$..N{0@V Auk酠Auw9 ^<Μ@@@@@[?Wo@ZZHHHl6e)znǑ  ~?ƕ5"Rn1lٶɭKg%/>իʕ]! 6(Ay !!      TIJL@EUP=::Z8tpb@(-խ)8 Auw r<#@Px9      AuzU [oL  cխP8        X#@PGzAPAx !n@Cz0LP`4G@@@@@@@ T(/@FF,]Tbcc%((? E ^DTK@@@@@@@(Q%}P`ѢE'b٨s%! խ%n#        5խqL4 *Hff&Au  @^)v5       xVg}TEX M?W E ^Tm@@@@@@@(9%gϙ}S 55U%((H_(MJ̛f  k8        X#@PGzAHII8w@@ ?鸾VD@@@@@@@ T1gU;}ɒ%%aaagR@pG;zg%~ւ5@@@@@@@(y%?/^ᒑ!6#MH̛f  k8        X#@PGzAXpNj l6& @@%S Ek@@@@@@@Auһ s  PEQ} A&lA@@@@@@@ ^r7-Z$qqq"eʔoN3W V TF5       TƑ^0RRRf͚,M# y TKp ΋        YwHMM̙3@@ +=Au.lE@@@@@@@ ^2w/^,FEuߝf @ n&Auk@@@@@@@ n# ` 111M#  T/Hȵki       xVz=#g-5kzzz2ś ?4+@kt7zA@@@@@@@ G#S %%E%88X 5  S X󏓜2{7 w@@@@@@@@ P{kO ))I%$$Dl6Aub@(AŠ9oOPݹ [@@@@@@@@d;g]DT S͕! Uխ$n#        5խqLUQ=:&F$33 w@@ /yn;Ay@@@@@@@<+@Pݳ$濠zV&`4@XsTƑ^@@@@@@@@8 @%aTT7Q '@P=?Tw݊        y7 %(/5\- AzМBP @@@@@@@@='ALI^@"##%$$Dʖ-+}p$@V5խq@@@@@@@F5Ȑd`#nsk   T/Hȵ]s       Aq,#QQQ,gR@(Ae?zv^!       @ T/Y{f͚RlY7\ xB5խq@@@@@@@F5Ȑ $66Vs[  TwE6 6       AL!,QQQ"6MlMN̛f  k8        X#@PGzA@ HzRRDEGKXXF!ν  @P wTwf        P,ՋPQR~4\* QzrFP=/@@@@@@@@D(?'AT#@PKB@[JPGzA@@@@@@@k[H/( YpHPPAun @@(܆zFpM~]khQ-6YԓwtS~qՌ|Uޣ}u.@@@@@U * FEzhhl6*։d  P|խ&n#wB=xRޣ=iE      [zn @RrԨQCʗ//Fu[ӡZ@@]~?qW0x8 Auw r<xAuo Ƃ     @ ^{@BbHXXս{ xAukf5BP{$@Pݛf      P9c-$$6cTTbt  խ8 Auw r<xAuo Ƃ     @ ^{5*SQݻ! Tf&[H/ݽ+ Mսi6      Oz3F`BP*{T12@&Aukڠӧ\rZҕ+.ҝ?lz1zhLWʵoW=EɔG/.o ?h<=h Ȕ"h08@(aLM{_ȾþTzבmo %ٲ=zP,ncY-f!Rr|۳'OٓۯcxG ;[>]Q>6^ӝ햛$C tS-'Y iK$Өrע 0Qy5|{ʩN߇U }q@~?`:Ve˲ Kݷ;)*U[gWZ_w@,}MMf\sŴqT%j.]mW}_Oݟ?LF Y.LCP#@pP@5gRfzpHHWVAfm%W\,e ߇^Pg{T2j{k:L]rE9t/nwW0u_{rc䟓d;z6mUU踨lՋV%xul/@퉠OW}-Fo~q{f~#sٶ^;9;O<ɥ?mlۼWꞺ?3b,Y#;OhuOK8nW_{.   PT,76Vw_lo>w\x0:a)_1@@@չV !1QbcbO02F0 Auk&Au5j5Ȑq}lNJP)Kި* *g?ʔᛟ׍Ztnn    %-@Pg`Tz@@խQTP]ۮv][8AL91&*W0»6}dTкU-%##C*T CF ؚҵU=0gA?=fUW{.+J,PXUBOU*|g79z$+|{@/i{<'-?In$Ө|íFɓ~9iRT4HUb)JP]Uo>eTdTWcR|gKin]Vmխl'+qa+8~B}TvT:R!GwkyK@^/.Mxvrud'erI ,( d֘   Abt>/$1FEp9s }~ƹ@@p[ۄqubhܽsalAA3urqar-iۛ$Pi䇯JMz\5n7#!f1–枬գɰ }KfPFуu r﮽U 9ֺr WM|-ֽ1Q__;ncz[wRB;..Isȗ~%sul{s_a&DV/Y#:l?UygEҩV(zw>kbUH{~Wי:/M^M7 k\-*Q1f]y״^7T5 ^Z$;@89{`/ƺ]A_~̌lפ1kat7+-3Iﮗ}j  /P? /۷(K"\qtM]T7^8UӧNz8;}Ǐw~OzQIL >X9vhixu\P ޮz ;s\3==]/y>j*~ѥ##J / ۶'# `QNmޣM'# I`YDT!o!ZcY}$:FiDƊ   }xrHNN^l30x6AP"C~R`=x %/'́A:kL{jI?#+FȰ}j\PP}iϳ⚛{e1/ 3}G3QT]-C=,Qq_G>4QNĮJiN>V\PA7WW].(XZY&#pԠ1%󖿤ZR e+SPz=/*$BjfT.S/?*C&*.ro{՟}Z^oo1<~Xixey]uwgǪPW_vicg[tڨjڼߪT͢8e]{}I i^gOjTOdUZݾyrmWJLHG(w}wM-*p RZ>r\zՅz]}$aF&̪ 6yzρ۲⺀ Z\ ?sJHhpYgO+pJk!H>/,.vB**L{pA4 6 P|7ʨh]mwZ3mjP]_>KwyOFFo}*pdP}QSeFRL3ACUV]Y.E?OT.4w'n+:,aY8|7 y.}{,Tw5ɫ$(8H :pHm.Cmr^W>ˮTZ{ԩ[[W?+Q6YUu{@A=w\/6lUs#ˌiz8AGmk%hHU^2c]ΠzQɪTasEJ\C_PZ}1QD{<4+AŒޣ5_@@R$pp_2v4=V7&ͮu:N;4nvڎ   A|.qqqfTTO7vKPgC@M;TP]U=>Q~>OJ*ʪ yՏ>&MuhzC8U}eϟuСHGoJum6eղ/\FEU}WazsYYM߸ólTW֭oqBy-*/ϘwtGdP-#G{?Rz3㟗7Vd=nV4B CBeˌ@YWns%QcN)5sFx{ A} zp3'XF}B"̓ wlYwUFuy~\gMzA^[UU#ݥCcP]̝$u/<B | / dQe[-Þ"77)^zLxaYNs׻ˑG!}/L~Q,}Mv}Nc[q 'I) {xpIycNw_~'C7y2Twg u ?\^*T j.ٱyg9}~-y!%+įT/̘ +U@@~̝@Qu^A./?PyɞRn^w[escZQz=啲/Ft561-k/>eUuUu=g+. %~ F3y^'?3iit]# =2i~UK}xz\*ԯBy--5u/?m!ԓ:=DUU-/-yQbk:mWFW꟭\jQE\s.(Oκf&M/8_7q P{{Pӏku f>cTo2uXkFCríF6AuUsQ Ï#?&78Wg T|pi|O0bTWUxU\Cۍݪپ_v]g\ז/rՏ=&}:fzjl ~qNʢ[= Twg u gq `Pq%^1Tw&@@ֿ,OztW;:ϳO6S:,,   xAuoKIII-!!! r-  ְz2FoeezJ6-ϊo5U /*UzK-[7nP

#qcZR 9 $.m% ,Vc yz JP}ˋdK)4=ez# ޫ4]()q/{oG_Th_ύ.ݎANtNy߳z'KwjlCajLjl9%ubOWT;mթW[z0zF8T\QRʺ6tؘ3^ܪ2 z\T-^)CJAuwɪzQ0ASN.=.ǎNi/9jݕzakʈ@(M_oo$KE]\'?wOy{h'D٘   Ab4~#QQ!TTB@@ՋL@Oɒg->^彷w^gP)mƘߋkoB:K79y3:Sz O\Q_>\AV.|yβd*&+};e}2ixVzȸ%*NǾ|T3t js*IڬJNB,N̪޼%Ca>WQ] >HT5K_mWpd|r_j1.}iֺ^?uvꞻϐUs%>ʨ2Ѩ6Ҽm3?"rvi ?9`|w ~Cr^MZbI󪚺WPݝy*^9v%OeyʫD=HbΡJP0c&:@@l}=oz?ziݩY&F@@@D;'aUQ=:&FtF><\ X#@P/\H22mՋ1jX^;ylG[+*ϋ?GR_ذ޺݌/˯?!Ftn&fm4nZ۴EOKsU #*Yt5v{gJ(Au3^Bʖ+$o]J̾T~SFMwxOdŇ$I@AI/NKXU7/?{^T)b&ݟעƮ_J>ݬtϑ7L1}ՠ! sk~ܪ+W=U䠺 ߢ ~GeGJZ} \/OLXQlPAuj AVVŨ.aF>ڜBWT'nc@z'm zWciqNǼo04듭?ic6"   BZ@IDATPՋS/._L; TwGTWgnLJ ]M^s=ǠKߕW}(ed+#%l֊d5dN?>1uT^YNsZxhI?#?nt.&y %5osc.g/%Ϋ;E\vLyinA%Ŭpv 'UeiUaZ-KI{͍%==]ZJ[-?#]*ayz▜M\zJP]]2eȊuˤ\r.z܅T}m["F02jhٸ397$ʪƊꁇv.HۜUTWP7YF a>^TwgOM)6F˧Ƨ4 pΫ5W>]\95    ia7DUQ=*p*s  P4EsyTqyW.|S>\!1R4}~~L5רn};H%Rst(< }Ϣj=|LmxM ߋ PnA=x[c1\g/GG4?}1~p!Ѷ@)P$\&憣G-T澾ˎm;^z2}Tssk&/L~Qo{iɋ[36~W_Tw O3SKIիը&ɫ\n:#<8+%mNyRbD&F@@@D;'aD }TT@@8gP]3>9GܗmA#cϕGiu~I6폲{nӕ}dIr P߿4iӹD>xY־_ڟE۰RxUm=FTÌir~'0BO~WͱR MFE*r7h1+Moݦ{nrO`j3sƊymC?% 0~VKHh,Y•}S'U9ٗ'KhX/6lϽۨ1+U6riioTeTweq ?5V^uYÞ0JEo.U*g۟ >yVE5ˬ3$|ǬI/k|t^5x}./m&G3wٿl6+>m yktmwj48Ǩ2>>^8ΕcP]7ҫ<Z򐴺̓z_jۤ`eW^*^g?ZQj߻_o:ŨlѨp︨߫uXG@|Oůveu]7K@@@ ^T&y)[TYz@@r֐gP]g/16yg:_UTFRn>uZ۴U]^WQ3Ku\_X*_mξǺHu: ʹ%dUǵodf@Uk?t;r۬5­ӍZber˱iּ5"$jPɓҫ]o]m[]gjUtEu%2t(x{T5=a4Я՗}{~J2e]6+t?FVVW`WꪫdqݫL_d̫ nSQAi ^K4>r,L/@퉠I *,ߢms}DDm}I@Rf^n.:w-F`C`ߓA{nTby=r $26?D9/y'ЁC~xhB=PjhU]-O:?I1x3i )o$-WyRǪ-mUjveD_>z~'- z ң_wˍ_Jd`98@@8s&C!/7ʭw5@۾I}UʜR炚 U!  Jr dddHRrW х {d1,@Eqը{mI˪^ rʢ9勏Q.eεlU;ʕ++^!=3pjH7gϋ 5ܝ:z5MUWRzU6Y6jP]]߁}eWߛukF('!_JCA>]ۥ|N5U{<-W6JW6DP/0O+ym[~/=cT_}}.gj{9j }p|هxԶǞ*75mV wl!Cz?&~kit2jʓF0&{r^ =mJU~Auհ(۶yGԃΖR6L:^9gK2maIPp\RFS&6" >% ;x( #n.M$wcA@@@{l0_HKKh]Q]eh¬r   QZT:rua-3[Sa'Ȏ-vg #~]lx 9~}_@rGj+G>*Mћ}ڱByQls66I6*|jSFui۱2wwQUA*uw{K]˂)۩ttzՊoW+ˌS+?zUnNWak{]=ھ#OӃg7jd͒ DFɼ/j~7Cۛƫ{߮t\Os.!N-|=5@noy[&yV._\}=9rn7|0irǍz=?g%d>Yݢ7UqVt^吺:qlAoh2;.aFAU_5^:{vE'/7~+lTQWZԧt4~.^X&8A.bntw}?>oXm8e|jI^uޯ:f_{@@ .Ycg+Rm    @Pf1@JJԮ][GPݗfkA@ T֪5݋{a9fCBr,',^Q9|D~ںCT]>U`9&>i7OEXZՎV])P'UHʕJ:YTA{a#&*ȬB޶*,a}F@\͡f*K۫p.Аzceqq8e}3O*j<RlptTy!Q*Uȧ'w{B w~9~F*U 15#S$@@@lD \P]d G;@o̿խJz)֞8 sB )ku@@@@@Gz8sHKK ElFeLo|`4@XsTƑ^DvzX-SɊC ߳#     PՋߜ3zttg}6Auߝo @, n $Auk酠Auw9I7cA@@@@@ T/}sƈ[ %%Ejժ%zս{ xAuk&5"Rʰeۦb=OV~GhM@@@@@ ^ѷTP=>>^BBB$ @|su  `Au .[H/ݽ+ Mսi6      Oz3FtR ;U @I5APGzA@@@@@@@k[H/-8 FEu  @^)v5       xVg}$22R*T @@ +=Au.lE@@@@@@@ ^2wTEX N3W V TF5       TƑ^0RSS%>>^&QV= y,0@pGT/G"       խ7GHII8 \= *@PUT߇        PՋכd0=\ X%@PI8        X#@PGzAXxKFF،zY`   ('E_'^t;D@@@@@@@[oJ-pBTlv@@(܆zF@@@@@@@@ ^|֜?̊aaacʹJ@pWYTƑ^@@@@@@@@8 E$..NBBBL2TT7a %@P=/m'^8/Z#       g{֗O %%Ej֬)@Pn@ +@PbTwV@@@@@@@(%Y}W 55UWT3gTݩ@@*HTƑ^@@@@@@@@8 ŋ%22R¨n@Oz~:#-@@@@@@@@=oK@UT!_" ;;{,A!       @ T/9`%h"Y-X yl0@P~b}@PGzA@@@@@@@k[H/)))/HP݄;  Ad t,QF@@@@@@@<#PzutL@ZZHHHl6~zp  P3`?N 椩d@@@@@@@@b RRSSuP=""B222|sy  `'a~ :h@@@@@@@@B57BUQ=66V$33:  PA\OP5'Z!       @T/g?))):/f3 yl0@P~b}@PGzA@@@@@@@k[H/#*NEuS  @>).)       x\lj9 z͚5%((H_9r@@ oT؆       %%@P9/ /h e Au_i @, n 'Auk@@@@@@@ n# 222$--MuPfT@@  ^k D+@@@@@@@(YG@͊ꁁgR@(Ae?zv^!       @ T/Y{)))Rvm)[T@@խA%n#        5խq@FF,YD$((:  AuW nCP`#Z        @ T/>kiii#!!!bĖi,ti6  (~?> n#        5խqzttk  @ rq7Auh       "@PX9 HZ$44T_5Au?|.@&@Phn9"S        PKRs KHHAu_e @, n 'Auk@@@@@@@ n# 222dҥ+AAAչ-@@WTp@@@@@@@OzYs&HHH#*61\% #@PT?k       AF[IRF )_dmMH̛f  k8ҋH{a˶M[:\#@ x?‰>@@@@@@,@P4cFD0*{1&@> Auk酠Auw9_Ls      yvO$&%Ill8=L  SխN8 Auw rT:@@@@@@s FEp*{>@@[3խqx /3u"     ? Tڭ̔ JddRQj`C@ nͼTƑ^{TwWE4׉     ,@Pݟgk@rr322f3=qIr kd [H/ݽ+"@P_fD@@@@@ ϳϵ{B`'aaaTT0}" TfN [H/ݽ/PlҢ]3 pwX^q7]WqJre 7WIؾ47 ^g# q&C)p~@@@ /;(@zhhl6*Z@@[3VZ]Y[ɷMN$8t 8 Z{#MšX^0ߋ̫?SO a>vH!]KYz}R?W*=b&נdJT:j#5Ͷ|MO[wȏ[R~A}X6Ф6riiߩz}//ׄ  Pr*}\+U(.#M$Knp@@@<f((11F DElFE"yN@@ ~?qPS-~ߣ{nfu^}eQ3Hs7bKp ]:tioRP{nWye|G#d{Kt[O]PF|A c판uGzzś˓cg2g΁u/<_TV%[8x   O^3)YvlթIpH΂ꮶy4y5e޼R\M=+AA˲r~a$00P&!Ǎ7]'ƒ!jX*hBQ%ftmCYP ۽OGOQW\QTZػ߲啙ύnrx5潻{L| Qɓ'E9>bk8=A;wK6jNϭnr1{2#qӧ5DUwu9ys:kTsXw~טJjRByCF@@ )eoQi'W\wIN?)cON?3<[=[c^    PՋ@BbFnfg{I`  MOqA:1r޹Oa_AA3uF(PFҴMP&}޴EWt%&=bn7_~vQ3a]sOwQd؄w%3~iKdRJFhxoAuWC0+-sSdeߞz#K.?"Tt^G|%,Kֈvn.卟K6:~w5i×Dc 6wSP8+.z\8i۱f{_9W~) gZ_n-iپEc:~wi<4wSz֟_GIYwjhl69tt'ґD z/ AED TR XP`WTz.νqd7u 9;wf>w7'$yxx[U W^YT%;BKžIhaV1iߵz!gfM#Vm'6,O XR_tRҩgG=PX]0   S`3EI~ba6}#HPXt@@@pAuz**~FE#@P  ARAÍGEזCJlL͟GjT:+#6woBWYauF ߼ʠ.cEo[Z̼]K9VnĞ4m_ϼ u[VÚ)SiR[>^J獳Y3emVi\K6H!AeuHZ!¸餈m\.111gڽF^mJѿOu$v2?޹#GПkF_Wfrm)XL&ϟx)^/O'q흷O<}G]lnr<6o^ͧ=3} TO_xOw}|ux4L+  PG}#k<+MԱcdz[ͤl26۱@@@g Tw8su"ޒ#gN>\ d\z UT:ll\>?,zjuտ_U D ㏧_[KokТX9=*JajjyGHĴezT+OyZ&;n)+eLlS '^{wS>2k5Նo׊mo Q6O>4||~9s,)޽i&Ze_8xjzҢo?P>pD6,hmʵ?5SJAubۗ˪wU{}u;Vj۷mr%ѨD蓏H|\|^ٸr>ah231W2W!mJ媕DS3ꪭzpUy}W$rv«k]J1w*jGN8-9_HھPN4t2QUӋաqsJ{T7D`H O>>qF9dwqÓnL."  ^ .S _%/Ԯhnƚ_Z/"X   @& T$Xu[( `*[ G@ TOT2+FG}G DW~|2W/_a&_=ǰNeOUG6|d<'9r䐱`j^rTy݊+l\F*Lovl)kn;x6,`+hm/xn7{!jO97Ș#7o4X22~XP\2*pyK2 Va׮~ 3j2>S)MAuնe.*L*@VkT^{Xjl+ B**m9YN>2O6qTxYfˠt7[Iˎ-Ԍ0: _Ge‡v[2c,ٴjw~^/]o0V&7.SJΟXSP]յн#Kj4ㆁ,K@@H_ EM:[ޖ'}Ttkn@@@pAurs07TA@ɓ''%" @gϴwfU.\.cJ̛H>x(T[~2R"P/Nv*"v32dtQ7-@F =2';`&U:Sz *>9d>a$+k\iZ-2{zyҼ];v{}Gӣȃ?IA$ [QxQӤT.RȪpU; W._^o)xܲkrĨ*Oj:w&G {sQU7بM| R9*X*j񉧼ʋ5_W),V̱ܤU:7zu&56ѦwH(5ڼrUg,꽇 jXN+6?M^zN׻$@@@ |:rޫ7$ =?]Ξ<~„   @v Fsp%UQ=(8XtH4\  dAuǰffP]~EV铽Td* o[l5C ^?Z4k__*V-D}?{??̕SF}WfH>-ѲE5V_U' Zdluc;Sm)#/bEPG͎ wm7nEȢC' o'ƗQb]uLZUr~V 7- -!nGV^Nb;Sm)Xm< i{='Aa}Fw$U}rA 1RZMw^KKYK>e8-AM6ˌq ޛ4?c Ǧ+u-JN-$Os͒Cu[pePkrw~Y)*ɍ-?E2Vh[TeӨxR;|Lry:kͶeݲ2g҇z:;qwvg)V}lDHl{e{ҙ^2L7MoP]VnCGu5Qئ=cy}'9۷M+ʐtIX  M9cwUOS}(9WmYF@@@՝ͱ\] ..N%4$[TwQ@@ 3L;pfP]U14d>~-\"{LBI!;di/dzWSW`m28~;}AԬ [65/|'o5oWg#~y|mI zϞVu)a'/~֟=; ]I*Jz0srA%U]`ႲdBsj)`*/)>>}T5];vu3ϖ+7%lQI_'DUGX&}4Aw.N[m*W$&ҷۺUzU^:xS'NK϶%+>]_Uէ&wXo^աUxeyRB2vh=#ˠ?c$u[&w~//  dP`ח?^y!5D}\Ttj;    dAخ(ꁁ-9s椢+2ׄ  Ogx@IDATkˠZygنz\RP}w|k=æo_3Wʏ;5;m2%gO1CJJ̤OV^w`-?䬠:V(YBJ2n蓏ίv i /)~~mr_,u_#-kn\8A;,_}C,j߬t^8|2zn|*Ri  CEk68~%?sꌾ[Aj_dѿC' 6-StwSmvOio ǫKH #.RXN}R~7PUF67fSgWrEɑ#4oLW/ZuoY:0^BZwn՗g,ꪟ iмIK'"Oܾm\weWq 둳etP_WR"D@j5aj_;݆?z+Ϫ{ %s&}(l6Ix*.ڼ,JE*/j6'ٮV}hiTEocQXFU-+ѫmEfǭiR7헞)lm媪߸~?((e;|?^@@ȨGOMV]RT,    gQ\I *:ZGg FPӓzv$ @AunjAu8 AgTE4׉     ,@PݝGkw@\\,\Hˋ@\ScƕcEC2a߁wv835roOtneZWw~*!     .,@P݅KzQQW<<<%A@@ "Gz!A Tw:@@@@@@s!-ŋyJQa#ޘ2@ Xz@2KO#KP1        GzA$)GEu   @rՓI6꩷%       dA7%%!!!%ƥSQݽƟE@tTO]@a       dA,.* "BBTTw1@@JP1        GzA@ E$ @|}}@HA(܆zF@@@@@@@@ Tw5GrhT3*ʼn^NN,; JO> GzA@@@@@@@Tw# ``M("  TON'ފ        3ߘ#%000!AEu~@#@P==jI!Ԅ5        uճΞ#%KtEuɑ#Auf @)@P1H/        qL/pOOO&^@@{ɤm=Ay@@@@@@@2Wzһ ,]TWTX@@ *f=Au.E@@@@@@@ 5u/_.GEuf @)@P1H/        qLzpp0Au  @JSJvs       8Gs9,YDuP=&&F<);]>A4  (~>qc@@@@@@@#@P1I`&ޒ3gN&^@@{ɤm=Ay@@@@@@@2Wzһ ,[LG<<<[+F@ TOm@@@@@@@FzָsTXtɓGPse  (ꎑ49:7zA@@@@@@@2&Phьu `%*Ta@!` X8iXerL.4E@@@@@@@2M,Hұ ,^XVN4*  -'옎@@@@@@@p@Ru ] I`ҥ,*NEu   @2ՓI&i)       dAL'n&奯nr@@ nfkTX       Y%@P=9+ ˗/ \r AuWi @*@P1H/        q@\\,[LtPÃ:o @@ %) n;A9 @@@@@@@#@P9}TPTQ=gΜgR@HAYGPڃ%@@@@@@@ZY]O`rK\/W  @P1H/        q@\\XBBCCˋ:o @@ 5Sr)@@@@@@@'@Py=-[&#oL e\@@@ cH/        qzPPk7@@S E3@@@@@@@pAu0s7Xx(QB|}}UTwR@@ }x/EXF@@@@@@@ TP=,,L|||S(sM  P$GzA@@@@@@@Tw# dʕ"^^^y[   TOو        <γH!d ___𠢺{ ;W  Tk       dA-[&/_>'Z  @fTw*Au8        8Fc"TT7 $'@P=9o#z+Z"       @ T|c^K.0aUNhp.  1qsþ{v,gș~κ&u:M      lx.xb &o9W8C!  '9rpk@@@\Ck#W}/^,-ճp&  ];fdT߶KxzKj==4nU[m[A}-{۫/Uem^d\\loșSg%0$PyaytVbWQYxOa@pqy+Vם­[eք:p /=9s&K5xܾ}[j"zvL>b#enzn(t_A}TrRPL+!ы猕ʕ1mrګ+~Fǁ@@p1L^n9{꼾@R걒Rɋ']1   ]a$tR]Q_bcc g\@@ { Tw̸8*>a,9i}R$5 ~a6f~`d۳1 Xo޼)ϑO7}f>K6M˦U=}̠qݗ;MvNmf^!\ F=R_9j6_x23z)^#^^θKP>9+*>%o$6voS;M;Vʔ%n    YsEˑlK^mND@@@ ՝!J` ~~~TTwb@@ Mgcf=sxJHխ%LA'ɿOZ]Oۖz!Bd'rƿz_&-yw m٩J_sJ_z-~?hnFPLˠz/ݛgsEΞ9'׮\3+'V~Ƽ4sȟq& /&5v+~F @@p3W;WShAyvE4_쓟w?=-ɛ?\5   ]a$*TN¹  @ Ɍ:" KQ]$W\6OM{z Z)sILLJ/='lV =tT즷1$gΜf_M*%%K/3N\1Ђ Mx'7XiՄG A3FJg'>>^P5guޖ;wnh[   GO!s)(_&r/aՖrJuۘA@@@ gp|WXd렺txNI,; JO>Ȭ:J՟ڮ&ڠW?$O>?W0"\<8T@>>с@@yczƣks%6&V#v5*ZpJAϿrKOI ̫,:bf#oePj7- -fޮµ+7JbU}ZgLTP}˺RaMsX6zjz7U W\Uգ]1z/˪5Glr_'<ʽke⵺]g?#z[mXmN.~1zbV*m p7ۿ5-vճZj&^-)WdiEƵ7'~MKP]*ثi*#)Ν[6|0mb|}ջ7W<~2y$i2P9jl`!A9f@MF-J>o$o4"KW^F62~mi۠{tG|9핍+7 `gK%O^rTym]V, ;1۷iǶvߨgjkʠC'#j5!A荑,b|f//ӯ?*ow(W\T?AAnWi]\5f:p^pCF DFHG^ںbhZs4a8yT3*p*IݠjtiY$@Lh7__nްU45*7~1$Fu{AgT}N]F:֝[zRx6*[1ǴZ*#[K~]X]4    _ uFnj"F7ߖ'}Ttkn@@@pAurs07X!TwA@@ c3g;K.wg {xI1]@tPML}HG)PTͯ_O^{,!%ydW?H"l7s&˥i5 _Um]U]O`7wLT:jl]MVkPBj]ׯ^.-}[ŘOwH SsٲN6\"ͫ[ZRZ񚹕z=#RL)`匪Ԯjpl AuUiz/o ԫ<_o捗Gkny8=jX.F׾9sQsߕ1?H>-ѲE5V_UW8ipdP}='!Dez M!\[ՋOvz[~VkӤhVTeo,Wsˊϝ9gHrI]+_7^Սjjiۥ0b+j؍^m(o}rFU8[M#VAx*wl^T7)ԴhYb=?t`_Ξ>gJݗXn9z 2MBEzչz̝W>vRK|/FL .H#t[u6>ռbOÏ_?_jrψ   7w$+tHRek]Njz]7nm @@@pAus@0I c8  qCCf1gwf5z?X~n/_zJuh޼~Sw+qqҡW )TijNYhsֲbz^yҴ]=9}0Co[Z,5 G7,3G(@L4f'b^P_ʸ! e%rV~B'TW3"o ۛRT?AѶRQ-4+ K|Aߒ&_o[Շ!ޝuԖ}‚vi ?{AZMyQ8sצPyܹe÷kK=mR3jju 7G]===LGzjRZe OpψՅ   Lf_J?NFUA    dA,a.*oTq^PGr%]t,@pAuX:#̔˗H9 K6/WPrHχ{~$#e^06|;TYA-#k<+' ,BE ɽ(ˠ+?O%9  ҅R\i Օw^J>Z\    =+@P:N< z``x{{KΜ9 gq@@  Tw`8+vݢ-֝IN2nR4-}r+:rB lݵDX!+CfOTOj[BS^!_ɀ7ܒBR/TYb7g]㎺|eϮ{$8Ѳkn.A?nѫ4yO5sңM/x8bp2T?VSp8oYv+s'۴N*PA'%5AueݲF]Sj5a^V3SFNm?m-UOU[Wcqz+q'W[%}C쩳蓏=\3b  (dGtG|H:}jv.Q,/&w   Y)@P=+9 I…"^^^]m@qufP]?O1 W|&mءU-/% ۷n˯{*>lZ_6BS̕_ͫ|hM%d?LT8CUTW GfGm!+WfW"֑`9^F~gSڠwrɑ#n,+>% _AUljC "fFjVTEMjGuE_Q+ /iew2xDBxU\U5M/zQϴh~TW}2]5og<^X߲t2?t?uj!;qqұI'9u~ZD1PoB}7A.13  stj O%~=,KOSl/%OU4B@@@՝1I *:ZGèf9|W jS,Pnf!eURUVջ1nVVVuג[ }\U{ӂ i! }>&^ﯫJڶK~\Ѡadpeߦܹs)ɧ0J2lCc y+OݑG'#7oLysOɰ CHN:5>ߛ,wn1S硪ʕW@@H*0c|f[z'+1qF4j41!   g\u7( ?bxQ@@ ;QAIc'GJHw%{r#ȾcoKyQU.;#ׯ0o)=UZj6~Q1Um^ejͧu:I!z/T?w朴NwzώF&V>f|fպ~Y:դ]5^`h)\i֒em>)O߬1nmެyO1Ee9+4iXZvzUWiCϖ΍Pvnfv@,'ߺhFߍ LMͯ/]Wj=&u艧g/Hm>C{Iխ¹EsżM+XAZRBKק4cim.㆗B }E+juJB73//aTu_%M3j e%{H"ҬuSݨUHݴ߱#ʬ ֿ !O ,.U$Ut?#&^@@@ m=)#7ɟG[WTHRgֳ   @v Fsp%&FEu#T ]it@auTP1gUErzKEՙzf+ps'FN}4AŒlVOoge#OUX^_.5W>] =5签/9yZnW@|\3YF@@ gNؘX)P8W:5   N $h6*">FPӓی<  n:{PdY Z+W :/[89g!0t      pOT'GTIppxyyTGƍD@,  Gzj,c9@s5qpHird@@@@@@g Tw8suzQQW?#ޘEN  Ǽ;Ƒ^g=@P=o)@PRy@@@@@@{M6bovŋK޼y%ިNP= Y.@P1C@P1"RrNcw`ӎ9YqN?#Yɑ@@@@@@-@P""#%88X! c;Ƒc酠zF3*-5G@@@@@k#fwȨ( ///0N}8?@rq@@@@@@@pAu8 &bTT W@@ 9~A[@=W3@IDAT@@@@@@2_zsI@@RQ}+E@Tψ} ߵ`@@@@@@@^z֏gZ:gTT#. Xv @?8}@P1        GzA$0 ???*PxE@ NTO-@@@@@@@@ g1Gp/ uEu___𠢺{ ?W  TOj@@@@@@@:Ygϑ]S "2RBGrxzTwa@@IP1        GzA$ "BBCC[<XxE@ To-ӢE[@@@@@@@l-L&%FEu^@HAڃ-!       @V T*yR< @|}}œ:\ 8Rc4 ;Ƒ^@@@@@@@@1H/""#uEuT𠢺 W@@Au{2i[OP=m^F@@@@@@@ ~**~FEX@@ *f=Au.E@@@@@@@ 5uDDHhHx{{K9 Pse  (ꎑ$GzA@@@@@@@Tw# ` g>>i"% BT)HG.HU!!!U( vQ,f!yܼMH;cvvΝ;M?6   @zӓrY5       A'A%44T K#F@ TϪݻ@@@@@@@Fz޸WЊ%88XRRR@@[ս#IP;        GzA#Te~VZ=^^ 凳@@YO5?o;fD@@@@@@@'P\9uFO ZQbE  :  ;`?N2~1A@@@@@@@rO,HY!+QQQos  ' Z~-:`k@@@@@@@@T -"q&RhQ!^ @2!@P=HhBP=H4A@@@@@@@\ k$''ܸ8+GPw@< !oNP;        GzAX`TTTT/RAuW@@ =dm9Ay@@@@@@@rVz{HHH.L-* @@ ճfnPX       y&@P=ٱ $''ˢE$22R 9@@ {w@@@@@@@#@P;-` @kWW`,0@pgTϾ["       {ߔ F5^R% 1 # @&g_        s\%^N:  Tޚ-+       ,0_РzTTJB/]@rDwX {Ǒ^@@@@@@@@;սH/@rr,^X"""ߟ:  Qp6       AܳfOC`)AAAGEq9J@D'z%~΂9@@@@@@@{yo ,X@¤DBPݷN/G 9!@P;սH/        ql!!!!TTQxE@2 NTϼ-@@@@@@@@ 1{(X%) X~:@TOsT#        w{Ǒ^$22RBCCn d$@P=#̯#y+Z"       @ TycPpvEbŊLPz@< ޹m `3ųgq<C|W~~@@@@@Rz^o_Xp HrrYt`,  ~뀠wE$־m?Y@_y^@@@@@|]a/͛'QQQAu???} \|սs{Ǒ^{z TT@Cq%     @ T[{vE`wz9"@ Q%Gz!5@PSAG.yb     y+@P=oٻ ̟?_"##%00P .LEu; x[wD {Ǒ^{z TT@Cq%     @ T[{ -RP!w9"@AuT#T #A<1J@@@@@ ME9{,Au; x[wD {Ǒ^{z x#?˷_|k O5ct\gΜ"Uo*QE^,Cg$dߞ} 4Ŋf7?ZZ*_YY77񽾽b\qR庫2u3D#@!I>,Ρ=-    GzAXpIpp0m^@@gu [y/{emZ ݲ}WMu$ 2]֛@mnwޜA|6.ٽ')Q\^2P%00e[_ %]H_3&0(Pb.XL5+6-:Qjz<)y9 ?v\=´Iix ۳` {-A>堗lX(!!.2FzcX2KJ]R*jmzʏ;w}9Vj_oY Ң}LO 3LhJo85)R$UGj$OK^35 _ 䩀ӷ]6o&?ln+UTr -ߋ9   TS沀VT'@.b9y O<]9`UR>U)dgep'%%3ewأ4kyf52skRyR>H|-'S8/3!d"b XҜo,_gT_ f{5JJ3YH~!bV57\#Qҵ)VXz\ײN.tpԣm/aǏfhf5Oqn~EBd9riK3K'hecA>!OO B@>e8ٽ2癀@yzp{ s^<   y.@P=O1Ktt Gc$cA@\9T/T~s$z껾%cNw^zA1 %vzi$w?xh0m_o7늗,nBveu_ wJ,yL^9rY^R|9O!2l|jb ;Wyc@u/՟6D> 9^ϲ $Y(sg~=E\d>tluyLxf~@iZ/LJTם:SDz=T%xE@<X>Lr_ix_o!_~YRvߐe U-ϰTS-ϼVN0eY}CP=bdMZ  $<<\8>zA8v@ȔAL1]QNuw׸Cs_5Au}Rt +dwA hкE%J~HDtk ]P}dHԀ}5=oGF A̍sƚ+6-3rԿfgf9|𰹉TR\7̑%K?_4oy[{VyO3K.-#\ZlA>+Wh%N쓳gϚ1)]Q]o,_L`E?i'O[qX*EV6:[ЁC,i}l~DVY gdkF'kN'M[77%IF7.};rUM=xeo\:Au]6drCwlˣ\gTkT)Z)ɥs7H,57u?>}\zu4{{~#*Upۿrg2@f,}eӪk\t2I^|eDjA.AvƼA@@@ 28yDT 5>9@@T{;yy=hve@r BAɲ~&prI!ARۤvPsUqgO/}>p\jٱ53u_{ 5:/W u%2%`o?)uI)+Hx.d.O>77nmp 6hHn:]Q}%?+A>߇r ,p o,UVѿ:>;ԕ֝[etlfFobhH;9rOsSO:]=en6s,d{.iTkvX.} E?2ziѡڱkdK̢S_oѱz׎>?cpҾR庫\fʚ%o@̊71SemtI]u=oQ0d{ !}FȧU7&8: 1L zu2n*H*O?~˖TV:fZ+oM0vA˚sܨe .;3^>~`P4η<5{Cqu7HNk?  @?h3a߇7?U7 >bWU!m#   '󄝝VT`0>|94@Au8z;~֣Ȥf3g ɡ2`l7hˀ/T_Z6SmT{VyãEX9mHq;eUuh]~5=UI쮇nυ^Vj7^(~No1Ǚ_/ԾZAu mcV~qR5a&Ios'>'w{z u^qj+mj?kE+";o:5b"+KR|.צVv^ӡ8~fm5?iDSqy+fwV[~ͪ\Zkvm_1돧c=x-y]f^+k0h.7q/_}ļ584dy߱OK*ud^]ړzl轏'ʹW^}5F͠|-OTM juEs˜7~4h $kn]ߚM[7N::G5_m*kw*+LW;:N4nyo!kL% V̉^[4 }GKO+ЮRovsV>րs89 fH&їGA֖uۘ V:i%z-n17a>g/8^>;YJ* qjPGfM~]~^uroz h䞇!c=;OΗVyL74V:  F,¸;uuYzAuOo{_^3L77z$Y7$]ڥݮc]ECz=W^yeԫsPWرgk7zJç zV0_n5}8u~t,\>f,O8|37V4xQs#MJ^nzO=z{{o@`lٸUbgę.{oZ~~" @8r/yd3juueFK&Oq @@@김. @bb[ z:, d[z\6̩V>:V~ܑZUer=7:^P2K>NN2u9.\X~|p1Ҥ]jRpќUe6+@VTNO껆iӺ-ܙ Cǯu80u4Y-yHnJΓ'kdo1ݹwIJ:e8_ '׷Q:_qcEoѧ ) oŋwID,Ǐw|؟jiUy\P\.Y74aR;ͼsP]mݨNΟOwi绵aqZtLx-)u'E8O cI̴fфYcU ;1 9&dx{xVA^~Zn:i@@@\ hP=::]js  Aus*u䨌vh< _&ʔ4N/RQ*_ig;e}]$rE3ϤB2`lwG'_f?kSsZm] ;:`&SY kPSeD 7k@ڞ^+k_Ci VAd?Syǻ sn >sNz"Jk{@,]c{DgR3`,L   ,0_пw.\P*Udb_hQ!+g@@ ڜ oJM_b{Y(S\T_=YkS>* /|cYҬ}}mf.f"/$!A"EȨYʘ~}[u7W* {z< ?T`Ӯ@Au| e9sVw_~':E]%`ׂ~8[Q=v)VNpΈ9 Ͳ727nyϗy% pzYh}9xzr79&, ?*]M8dӆu}L3LA'zvmg;#To`/rtOeȗȡ#R e'K6vP]ظ|Ia併[X\VFP=0(ܨߏN\ v0Z*Ժ_viuYOht_S{iآ+&>Zn6s/5߿-z=篍sr ;??񓦒IxҮk[]5~mǓAd5^IjOϯ{@_|HtV\(w{x']}ҹwMX   @ Turv HTT ߉ @@;սAueEò뷨)>rwA7&&ȷ郫Ҭã}$uhM^-n޶ {tF^)[.w=|4}94loR1|MCWwAVTwQٳՂcy+WZϝzd7bRIiIeD#>>}z jv339_ھS'NyLWy@owI': k;9wiߨY6{*<^$YOwhqiӥifɛ2ut+4_TrN?Qe3%q<)uI)(UB3mVΫzFcZ FXU?sV7_'5yX*sYޛ]풞.|=4nhxT8b_fHh.Cx?gxݠ۾]5gB?c[kVO{ {z}]P]o3tz5Ѫ:-Yh.\TS_FAu ϙ#~d:q*zOKfb7KCzw(vPiҩWjXc_i  ?9 O7iԛӎNodaդa:i@@@< 'ԇ4nWTקT͡! w{17 7h.RXZݲj:sçSCί~0#*WL <ڛ w{eɽI6uqۺrO;;dDl):؏-"#01%wAkrYۦYnெl}-O?C{>'۶l7Z8Iú{oSñ鵵;e?oX`6AB; Dӆu#&YAIxth.2!` RfS,8WuYzjK.%#&=3AuOYOw-m[ɱmZZjyzF_ iAuת؞5ߢVKs1]yvZm'LmjzM{ ;γz}]P]O굵~8*Ԕ>C{ʞhA~Pyn265^P]oDc= gAphu-8n.3Av(=ڦޘZ^ g:@KӉu|~^ns2un@@@\ @$$$e]&Es  AuOSύiL9niJej˛S:Z?Yr*\Hƽ1T-]}YtU~IegqvR\ii9{ ~qط}|qEcWwA a3uyӖ[eDa]]ŧ_ʠN%KH:mL^ ׺Ϭ/55BڥhLnUT|ELDCަU~\{2ՙ7p=沷Eѹt ֚ߍsq̙ q{<\!G77}O{_՛s;p $vlƧg|Jo;W,X)3'fަ={uTv1beab𗄷/}G.#7zO/no ZAu 7iZW7333D@+&Z7\-ؾ_mp{.E@@@E oH@޾h"~OP#M6F@#@P;::ޖk7p砺H5hyyy3Zg><| L.K_bBv3ʮo~&9~hۛU w( K_s;^CIR庫E{TwN3Q^{cҷc?U'[Jέv5juAoHΏu5ag=zM_qK̪a]]vR(uI)yu4 u ?]O.?y;̄'|YY^.+ų݆|!e+U1.͘dMVؾ,ZxgJsZ8vU!J:%]YY%z-ֺ~h%kݴz6~YڢhiP}pǟ>! 0ѷ!&+UoN{|6q!Rjλ} +ǏVO{ k\.Hډ[k8M'u~gȶq9?@ۥTVykw>a`ԪY ~{#Z?ںcڼWPo}/R^QQmLm ^@@ ? ;ZasOܺ^;U[m[ˬIw{Ьs[{m7̒JUN>Qʝr jk#fUuԫ4m<`SUYۤ 2Jb.]^AM3Wj_|E֭|,qn70G_UbsR%Dv8YvyOp>ߘ p.V.\-3^ie'kACN0=$ymfV텾L|iֹw'iܪ&ߞm{[OZOg-q {T?|y<;j˾wiߨYTQz]yr􆅡=35 ƺ귘yna"Sk?'׷/wյ>#?1?Z4h^UzAu;XRÞ~n,NP]orЛtr}{& Ξ" @~gfhttz/>V澺ЬJt!?cB@@( sD@4TT}Tj:E@_ Au_gϜusP]]yw&^+mRH9mU\zN̼؇XD)nb|׎EO l+WU2f.dO]Zk=KM]:?qFN>m?X}рkeQre;e9ןAu9bRNvon]% v3m ^]q+P| gnٸTlנJpHc[w3OJN?)WLƟܹkAx Ԯk[NDծGۤu#%g[?V#%mX^aӎM:oͫ54v0uȟ4F=a=u᎛\$qf:=.mvtiP}fɛ?]q]Py.ccY_>tU. 3sT6:OKLYd'eZHewlI~wlбg~ߝ+g܌x OJI΅ެb۪*z#~)+2׈OZ_{0}ݾ{^`ݤ=9_ kX?ICVTO/8tyFAO7oa;6>MHzAu'&W^yi] v(K-3ׁqvwgsyE++YhofMrAu[W@ȏg&~ȟRT}ZO)*̟ RCu>mP]-4RїThyҪvu0lŊQ=+EqiBN_4}e=o.e;M 861y&Dhy\.jjZPX11ytV,eԳc̲'J*l;oU[ic#*쥯9Vohd2 6N; tPYrn-:Үr[eaVO_nʪc:S15@IDAT=kBჇ*q_.4kLAUQ~IR^r)j|ޤAm Y,3՜ӶMPΈ?+fJ̙3?+A40zc5l\jɖY9ұ<ώM~`ƣ˔-QsιS湊~|>Q=[7(uI)S}KS+w4hZKߒWN3jݹ9&/}ê@RYPVi*ur :tlkSrQSduR:yWՋןcާ :n|.o2mt3VE sٍ{-W>a|.TjFzJ-\.\|?G\rҸeCiQ{Ac}h%2;*hw~)ӼNkk]?ZUݶ憊WCL/}hH2 @+74L9ScL}^OYH;eNۇ|,i{3_Z+OEeϷ6_x|X2sc݁V8r!Yl$-;F657D8?٦EM?Zcv5"*GXS jy{N<֮tޝzr{,D@|%eiu^qﮑ\6    $@P=MЂp/+Goz8$ x&@P3?{koXyTNXa+WR4Δճ3J 7  "?kA?o2?Q+lIãGKR%eL5uIѠNZTdlZ]ޤp`tss)ׂ~cIJ:%a*1cֹH,]P*Wo]*'\unsۖ2sfxzSޜ)﬎Sk`o Br}טO3k?c6  7Z]왳RL A @@@(@P=?t1 HT 2w|6; Au0w^rC ־mܸ&x&O?Ч dWvQ+2HWd_?T     T3ܸ8P/^\Ru@սs{Ǒ^DN[̭]~r/W 'k?;@      ^@ bbc%<<\,  Atizh@n}-~JV!䠀A*F@@@@( sD v\@EaS@%9սH/"W_uK2~{/w~9}<HJJ o'GGΜ9#RrݍH=帀q0v     P A*PQ=@|HwN&Au8 AuO = pqT8D@@@@[y}K %%E͓0 o^@rJwd {Ǒ^@@@@@@@@;սH/qqq&lUTONN?+bY`   ,'ٟ'};D@@@@@@@ T)=lsHddSQ`_ = dVzf2nGP=c"       @ T]oqzPPQQO9G  TT0u{q@@@@@@@Au8 @LlDK@`.T +  Adzּh       9+@P=g} ̉H ?@@ ճnn TX       y%@P=ٯ Ν+VE9{,}Ds\  =ޱ$GzA@@@@@@@T# ` I0 BTTYxE@ MVTϊm@@@@@@@@ 04XSQ^.@.@P=f Ne        WJ###%ت~Yz9.@AuXT#        w{Ǒ^HdDH"E0"  TOO&k g͋        s֗ ܹsbJ(~~~ %# @VgU}{]X       y#@P=o٫ jPbE d{92@AuHT#        w{Ǒ^zp 6   @zӓrY5       A'0'&F?GgSAt6  x: GzA@@@@@@@T# ` jE%8$6   @F3:ꙷ%       A7fK &6V8 h@@ ճf*!       .P\\';DWRRR$.>^$00P-*}ls\  5;`?N<#=녭@@@@@@@@# 27.N"#"$ T@@.$`Ʌ2^η2nZ@@@@@@@@ R7Ʈ} WXQH"}s  AuOS'GzA@@@@@@@T# ` ̉h)Z(AuW@@ #d~A[@@@@@@@r^z#,q! ΩH@@ۖ9 @@@@@@@@ 9`%07.N*V('~)֔ X~:@TOsT#        w{Ǒ^Pϝ;W*V$:  pjꙄ       A\af'H`NLDEEIUQ*NEt9T@ȦAl¥ٌz"       @ TS~vT@+^P!>x9$@AuT#        w{Ǒ^Pd7Oߟ:  Qp6       AܳfOC ƪnUT ???*Q" '=;-As!       @ Ts|K`n\TPA/.)VukOH,? Ƃ *'޹{Ǒ^@@@@@@@@;սH/1.TTQxE@2 NTϼ-@@@@@@@@ 1{(XsJDDuTT/X矣E@lTMAa       A*0'&F"!!!TTsa! {w@@@@@@@#@P; Hy&AAATT@@2#@P=3JnCPF@@@@@@@@ {`řzUQ=99YzJ~:t`l0@P~?u@P;        GzA=gDFFJpp0m^@@gu3oEˌꖌxy{Ǽ.hsv {D@@@@@@ 5{* .+^0N;G TDܶY0@n}-x~ok_^.3@@@@@@ȼA[̟?TT … T m@@` T'Gzsۯ]v"     ,|s9/  "@.v9սH/={*3a-      Iz~:ME9{,Au_8 AuT#T `T؇      'l0_XpIpp0}r   սcLP;BPkoOP=c"      秳X|A@+T1  @T3Au8 AuO f=A}X  C %%E&K" s   A1|*0|6A3gΈ?RX 姳X@@@;ׁ떿/Kіe8]훿2m#vLw?mr7g ?|᧎[5"}-x~?H\iYۦUqL3UwF<\v   dZ@[.7l6,UTr -h   @n T-iSP$**JH" ʉ8@@ ճo缥O{4}Pj6y7ͿGj:|~Rtڰp'%%3ewѱG{ufI]%$G󑓟ׂ-2GO}Qn&7H&dPAM3Wz r_^ @@2%76'w}@<=G]B@@@Jz^ɳ__X`K``Tq! {2' wսsS/vP}wd .JP}pa\'xCPA A yX  >*?m|ksteʕT7OzoRd*pX   A1,hꡡLP=?,Ɔ CwCNude+~JbE[z],q3ə3g̱]ᆏ|fZ}fj)[6n5 y_GvAu,,D@@2iLsʔAK1b#^V6ټ֝ҨM]:f@@@ky}ؿ hE v9@AuTP]Gww;Izn٠r'$D(]B s' V@uo-QG"#]f` ҹSrq+^_f{ofI$Ɂ}$\t>xD<,Qm:]IIIr!i)S}؅&ב̘J)-eʖp@@|P`ތ%̑DnL:$/>s"I-"fr 4    ,@P=ٝ $$$zHH9V?7A|s* xRvP=p9}_}A3.H8o 'M6ɇ?N: &? r,=y|q=황jCe~V^jo_bY0JeJx 3RR?T3xl\I)"SMN#};3'4\(k;=N>K7zT*G:*nmu|V/}{e}-5אwV_mzo %5yevܙָ>7wk++T,/ o( ׷ZcL@߼FKg~]~Gcd  AS /'F.!G*qY̋]RTMx   @Tvv.T׈:Au> xGwThQuds왳Rd ͪ2 Ǭe7UcVGN`S9%C oR1/ ЧZ$ۥi`3Р+JTOeX;Zuz\ti-}3 ^ӡ8~fBBeVpbRnի_]nj [ʔѯڋ3|=u]t_ߓ ҆O)лN _@@@9Ҹm]Gef]njUݶc!   -@P=ٟ hP=::Z͡T3! =&4DPېeu;f7v<ѫˀ3 fYִ"BqG>돧k2Z]+ԮGskͼ~$4!տ~߯!}ZuTqc&TO;e6Uc]J2=a-V7%=}zAu޻}_}SEjm.ٳg|X9y%v(UTYarHH TT?tJ.ص {Ѵuc:@/d_-+  4#L6ݠUmNu'Ocnו/< @@@m-|Y@,\P*U$RhQ* @@;սSAu%wXqf-41Ǐ'jh;@ݜVGer`!)\=Ąpu=^k!MEfZ4glٰMYӧaz{ڴn,7j mx'Aٯ%&D=a8 rE+/$&}4m Yxy6 +R+usP]?{_}A܍BӘdM&L>ػ(-'tH"= M(*ذRTޤ{ ]) BS *P@E4 Bxsnu$dS̝;ߙ]̛2w8V*Z]k][ɫVܹB]v3ֳf"k~ˈޣdʹc:xٺh^Au@@HIMXbU<>@L_QrkcHNuc|@@@Uzr3p)Z Ts! {DRut9'2,Y3K%w\f1u@ޘ</lv,>/lX+;>V '}ur2_7@z+jZu5 $4/IF]NAuН:i?q8oc.rpA)2rp9^by2q+x0U|7LnVpwnti ';/rLk^毜#Ałt㗚铧ceMt7<@@Ҍ~%kG޼mx .Q$cg绽#WYfdϑݱ۴T*yoaӄV.TuyBu3dҲcs3cirɝ',/,vx -: 7nH.΋5mnJQ&r5hװKEްuiڶ=]{k}IæuU*UZ};-%e}ЍtYH`sP}?K&]vK%m; y)5#>yF:[-G\^j4څ   Aag>*!+W`ɜ93Au= xYw@#fɹ?K 饇{e:ʓLϛD}*^8ƃ Jf*boVӪ䋏?©|eДb? ;{>oP+Ҳfkl.XHF>Ri9| 6?ܯ<&|{;z2(s0 ۳_@฻|n>e! kw۾}2%3v]TjZu]zxֿAWz;9y4}޴]ci*2Tw=  kiW{J^C?y=,s~jD@@@ '#6J(Yf1~gU Xj:@Tx:HL;>`|R}ΪA87H>XKNƿ9H2d}e-Vemk2X$oټ=ο ՠyphcqQ:tI::s^6Jכ3vh}*][v^ @P=hNxnCNOeeN{}2A6~(O5m٩mV'tlE?(--Nvwê2kl9T,L6TG?&ݚ /գ@@Ҙq!vI1U8M:_~;x>]x   @TOvvaaaRxqɖ-9J>|94@Au8&gP?er(wu 2,/T@:n%Yf?V]^0z&~yRy٤E>~w X49g˸#oP]jk:?f.ume{%SLRD0sWQ]M5][shwy娏yj#nMc'z5T fy]6tkӭjT3*6Ҵ$Ye5[W[L% 1d"M4+|]&Ym ք#2#L#8%M^nn6ZVjZ(=Z2댚1B.c}_g;dX#q1MT{y@՚ˀѺa%ʝ[NRF%GH]{ڥ'Zj*;:ZtW6G tR;fNeY}ri_^0@@M@qܸ~Cr) I,c[e   Ag>*Ճ$ >z9,@Auw$@R]ׂy+*0Cmغ4m8ʰvB9X|-ZT2g,\@E?% @RAu!qd+"GVN.KG$׮e?,vkK*e(      x]I` `ɞ=;# =A8X@r}-x~Xk׋@@@@@@ݲ0 ܼySV\)  Rd%@Hsսs {Ǒ)P2g/w~I}Ay@@@@@@@Vz'b )TSQ=~@"@P=!j!݄9        rSΞ=VT $B@ Uqd+        qd+˖-bŊ셩 Xj8 @F§ '܎5@@@@@@@@սoӶ@XX-ZTd"2d /@< R}mD@@@@@@@H>g҆͞@HH.RDf*~~~i(@@ 1ߺ` @@@@@@@R^zʟF[5^dϞ]"""h@@ ){Gw        xGw VT/(rM6   @Lc|7       $AeiO`EoP]JLM R`,  ;Au8@@@@@@@Au8lZQpa+  At<_FPs+z"       @ TOzc-^,E̙3z:- $@zܬBP @@@@@@@@ =;A7oJ%RP!ɚ5d̘Q@@սIP;l@@@@@@@#@P;lP  ,VPϏ:  A<[n;z֛^        @ ϟ?iwHcT/\dɒE2d@P=@ `9b;:b@@@@@@@H1 )Fώ}T`ERX1ɘ1#Au= xYX'lߦm@@@@@@@@/ k6Yٲe???*Q" @b'Fu g       A?BBC`#GiUXitR`,  ;Au8@@@@@@@Au8lEK``SQF@Mzl:/#=@@@@@@@@ '1{H[CB$((H2g,~֡SQ=m@ @P=hnV!Y        bSE$Ȫ@Eu= xYw@ {Ǒ        w{Ǒ 7oޔ%KJB$[lTT@"D@IDAT@< R}mD@@@@@@@H>g҆͞@hh [#""JLMN,5 Ƃ *OsT#[A@@@@@@@T#[AXp?m^@@Ǧ2[@@@@@@@^z%d-[6z:- $DzBԢCP= s@@@@@@@@ ={MEKP`dɚUҧKGP7O3G  Mqd+"eJ=l ?ߙlJ%_rA@ &_     @ߌ5M`E,Yd?Q @ +w A^+ A[l1V@@@@@ '9{m!!hUT7nPQݷO7G  Eqd+{ TO #JoX@@@@@ ѷBCC`B-[6IGEu> xGw {ǑTO5@P= p+ TcE@@@@_zGXxn~~TT! 7{CQd+*Ak_ %W, )-)G@@@@|I/M%5hP=88Xo N c@@-@P;燊qd+{ TO #JoX@@@@@ ѷ.Z$AA%KI!Au> xC7Ep[rq&/?Z;^"ҥK=]vM2eʔjF?%SLRڋf\ _?}q| !pMa22oG   }r`)$"YA:@n!9YުSJlYZV/sPvnٸd֣֟~|m9/>%e+ پS>hطd¤ns<' ^_$o@:n'&,fƑ7^iڶqcZ \N=a5hYO ):arx*7 Y% g.6k?]#YG˺d׻ȕKBdrGsOHBv s&55[WFSgeϮ=o>oR8}`hcrR$mV'n}.ٺcEfnykhVB~zoٙ=q AܔH2CR75kNo ݤ xYRg*x./_5@H Nٶ9y\ΛKJWR*zF H@@@!@P=XtET/\Xg.0?MK.! C8y+>ql9v82pZby/dL3zI<9b/r̞0W>c::Mk;f-Woc}]edHSAd%s̲fJɐ1Þ7 ?a{+{"C' 6AO7]ͬoVtlNhJ7Ĵ_Zr|mFfTk"t _RnFOzSA]7V-20wݗ~-*w] ;ﺯLY0)J'OˆUͼ*JE,7o-[+a_9 aF>.#z2wr{=څ~O>wgo%u{n;f7UkV.:{mYn$VɫҺKK֥S]cvc  Prp߯n7%kf0KG   i^zVT/(%e`6 '@P;4)ҧnKN9i+vPdܠrcQSP]h̝'xuXO!/l?cNM:f00V=|thY_n*MaiSAZ׈__&%Jpcjs}(cy5tTWOAC'G8x4]r3n+=֐6_sOztduzej_=#zzȠq`ٻK$AmC=;(5u' @H"%Vɷw͟GR< o7?8 ArʞD`   _zX.Z$յAشX Xսs$EP]G`^5d̔@ egjZCs>.oWLAu j@0>o}1.L(cZ42'T/\aTy]iѱY-[n*m낔 'G3\"5|2@feVPנ6 y z6 =RΟ`*Za?9[LA1ɧ~&2eˣO>֖waMGxDO/fQ[ԇ|$M1o 3{YR#K6.Ǻld5J:i/y9XܽclcAuE&b}Da2 I c2e\ysI$SL= ,ͼcRIU2&@@@Hi)}ؿ ,֊ @}r<  4սTAu/<*6{@= :{^.uQyrZG6- hк꣯HDD̝Sz .AłYf14Ư5|1.挅zSzWVK Lrxd ?j zN\[DM9}iUy5b~v횴A9.2fgYUNj8V=qiSR}{e95kVr{ʕ+r)53\5eSy+~IXǥ>qܴ g4}{0ZynVh?tḯ| 8> VϞ>k95)hcsz5 q.l]P]@.h*ks֭eOٷ{|hE7f9ؠg}.5|n?;|~wSU@_gTy't26m ټ(c {;6w\TpKŎnܸ!VܟsX^*z@\+9M|2`3Gq8>\v|y?thUp@B.omX hPq:Z4]GM.e+kxհd6}{}X5Xd^|n5- }b}s)}O(M|l?fhrFbߨ>NKO4A>~sD7187V[y]sCLo(_1L gGy=9}ht k*?[AZwn)o-{[֭`k4=\(UL;g|u8}\sE6~(SGN7781j7ú ҹGɑ3MD,u/`_~yW m&keV1~H{Af;u47Z-+1 f:ʓlf@@oBט?]/dț {j/Et{@@@RDzS"KHBL13 Au= xOw,T/Y*2e,u[Vs,wY}Wcߗljߵ[\B>8lU{Gv˘\@,WrT+/.>e<#&0} iw.wXCJ Aۿ]"&ǞzT6.;ʔC=93ΔMV7 GµZkPq5^֬lx0kct 9¬]by2qP-z FYF[sc]VUVukm# r\nSP}} ZOf$&^VsnG+Ozc|\ ;k}ʂ gABeg.o4aumߜhrjHW[>Z SGMֽ}:S-װ~ 4HMdI h}Q\mok7Vsvoku|1#{3+z}7.7n[mue7w 9knYe=/W砺 \=/ʓRM+vTO *Ϙ? '9}ŧd]7O5ޣuo99w? 3Gk^gQFѧm?ٷgjWyCO>4ڵб1A VOt\;sz|ϕ'ub٣#o@@}Z\'_|Lj5vG~=.E>I:R|nuqf"   cU\P^HhYOdj2]x  TwIwBlX*]Ҽk(-d]fӿA H`BrgC?6˪5$ϼ Z)L[G?Ȣfx +iNȤuRZuo(~Dٺc8fZMwa9V89&qڡH{VVEfV{˘W Ο+u^6z+h?eڍk V Xkxץ[?DòW΍R5[+k̩3J\UxXr)묪~?fshwyùU:y@ׯfn"IY8sݵ:ݴq=뷨+7w .P(L_u5TAV=^ 3ҍ!+Ohcv~8mPkeޔ7YU׭f$:'?'jKxY7xkT27Qv7} ZM؜m2*RTOȹ=! I pԟ2T*K*}]XfEn1@@@ åH"q@-@P=фfIT14l[K=_㘂]&>֎nHO8zT` pa'Yո/<*6{Igrzپɔ)\hw K5=_}x[ !A~M`6/QYd#}=եPYS +vŸhKMMشnҲױ |ǥ>ψGC 46)f{XUė.^LXOVKFߦu<+O6m&0c^MoGޠ~% wiT[נol1v((}آYr{eqe&̑ 6|O0CZ7&m;:H;r3QxB`nka&o%ӢU9~l\dV[HMGKʹ>M`#W~#mߘy_GGϷ|!SFLqJ}FrY0ey}D[ *^LVv|,O |ݦȟ27@z+djZu5n6T.acVyƪF[ͪ\@[z6 J귨';4u=xw _1hܹiUpOQ`>pLTO XǦc{h@_otXvAÇ~6uۙCԷ\nzĹ+?;䳸y2mTw9g?y?z6<"ky=ilAu?d U%犠z4Rf  lYykm$D= 9yw   Azj8 W+W`Ufrb9@HZMʠpef%J5${omTA7o~h~ś̜:-^ Ew+!Ŋ f3h_fȘAF/c{MΞV==eK[Ew'.\6A^ZiL!q+@Ҽutl/Odܠ mj"+eѬ_zP]+keb {.<*s}QRV:a"BږL35ŪN8%F0;(NH:Ya7n8/Be) `|\~ݺQ&r5\װKϙ[%xB&f?B+̬w\ony%KV5hwmU̩3;O.Y^9~q]ݾ1?|#4l=ګV(כV-T\nWoY)ʹ!݇@6m 0Ӯ?`s\/53OЊ玵ĥ]7{{_ITp զ7T|isK`"n kP]+kw +zݴvH?Ǎ4Ư5R9AT]ҿc Q7,̙4Ϫ4ӧ J]sPݓ,tl=WU @ڱ7ȿTJW2Ɓ 8A weC|QY   @2 TO&hvf%00NLsTTO3E@ TO\:{ Rr+_g_~"Ơdw2w}X괬fz\tE'7ereew_!m4 ;_GN~3FwbbHHPKr #di޲k&KAupz7m5$fkeNy5Pd9e˜9ZwX=mUkU.{J)Ŭs*KfvׁJ7,«_Oj`rS׫&{EVU@͒5˲%tn$~w77/ܷ6]ѭES5]+X ;^ykγ'p騼Tm|7榍MKfE2$UKepWkmq;a$X+;zk5)mv޽v:):~=hS!yPz#3+ʋ^%?Ĺ󴻠MCe"ųC͍ZM]oywfՓ;6}Ѻv[9z<#2|P3v>PE+lԵ؂?Rքeos,jmXO)(~SgmD }zB|]wA^R&\TF @M2ql:-!]rF*6Fv   @lcaߙiPH"Yz  iPwNzr5@>,yI!#AY=sCg\yryȾ2A x9jI}wRb~Ӈ! l:WTO @^VMyMun;3@@@d *MI%[lx A" @b'Fu#{;`1 -X$-C3U>t7IZAԩX6bUF/(݆&ڎ5eN&y*2_ʍ7da{iخVԍ.^vy%::Mk;/6A˗.[LV(˜lz{U'm?z=-V޵[ϡ兗 xT*0tdT P|\~]jԯ.zq;~Y:72kXyL?BҪ ?̪$m@dƕWXofe2d,OEu ײLnܸ! Z՗f.cݩ0 ۏmzm5qjnԭm%GțB-eo.7WoY)V ]}+)P(,^Y}ѬYx뮰֍ ~FM5+W_|mfi\ iv:)'0Mn;HW[ԓN{dCwT}.F2e݌}L7~Gfv:stOGyT+}?/;.-&@H]'[72{*#-ؾ_q@ )yW+;E@@@UHՋ-j i+dm@Hսs+]]dhw;T%mGeyVet?iұ\)̈́],"ZeuʅsM߲ﵻ;hj\AullYdٻK%kΫ;m/9˪|`B~GѪ9Ư5m=2 h@ s9P֎ө 'K{K;Oώ5i֘ܵ 6ʬ s̢+HP 3G:mt>:/G[}UjY"3V@C#Sl3<}YiYucUə;X,YĸʅN:v{rG/?n0yk ͪ[ռFVetå\]W 07[P=ڊ aTOL\u>:\uݰT>޼f+S}϶͗;/bʹTwޮlc砺~2G򀌝5:ʺn]㔙է.{ߌٵrj#޷YǘÓ 1w(%V%+[^+_}ϯ},T/VbsXj*ҥ'ߜ@v3ߨ>'o(뿿ћ@,w9T׾v{Ξ9ZN{űId՝ȠU meŒ!OoqTwvhj=ݠo>:?Au`3}CҫUCg?wD^ZM< '\v]T7 $++\kquϨ7CڱWB^_a(]T: ja   Gz|@˖-`ɖ-Tی  {HΠo'Lo893Y|S\+?\9)^*XYUw'mLk} :Ym*-xig}P}Dd5fL&-40}Yju_1հ[9&֧9QYj_ ,vUٹU,] w;$eYԬ}Siв$ WuKV01a|)+CVi kS mO8%̩3>}zyqMS[\^4]hއ.j/׮j" g.C?E*AOJ7D?jR p}A_ wY \ZFHʹ:H;aʕ+6ʹvɛ/ E*RP~9pz& ;S-lwl%Xuykf]&t^w?pU17V|fp:f;ٺa`u6 7/}'Ĝ{byNYOJЖ#Wߢo=1PP!ve𩦛Vnޡ2|5~iU$;]_oFwXMm ]SP]WJ 5ڼ{@'Mk`ΛYs.~e\}Dϑ3Bk׮96ߠ[؎>Q~vV36O:Ĝخ_G~9'  ]7"dLrԟf/xZdȘQY{+V `?(+؇ЉU=hp332~7K*Q ,u年[OW+pL]8Ū,~Nw(%mhe2֍Z9GgZ!q֛7t6;D.ݶ6X-T4(U.]:YϻL3IA]=ڞ-O2hU7TYY 謫9ZlA՝j~a.4w|Yqld*? ;>af'$+8@o,ϙοϺaUw>5Kߊv&tl{b ˮGC@$Ђ3G-[St~b̒+nʵJi   &l0_ЊAAA@Eu_8 $Au{+>y\91ҾXYc5mUVҪ_l[K.;.}:2R3RH>|]&Ym ք#(2U;yL'@]Pb _>yZ& "{v\w=uA黭Ǔ[RwA`²~V`@CZ:l6oӪ7/uׯ_%Dä:7 Tx4~vODO+|:T߷gZjWfVR~Le_*zl4|Ъ\ʺzc损3V>3Z)uشVBoN_`CgoIf+(ږ/\!!֓mUVwn :MjKԵO|lyMSY7}OsڴJVaW 4prֻUnz1iѱaÞio}.sVbyiӭ |XV}cG+=`Տ> 4G':5bݜsTƞ4B4ܿfh9YoTXh}PE+>n9LI+6^/#fj}/foҼ ]- ^_dg[AŭMo.Л {oY7E;6l}. <SQrsLe?Ϯz ZtleZq^m'?|}zgޙV'ܰNJ1Uuvw󚐱9W;ҿTSK̹_4 1@,cfFBGl?{6ѐ/<e>o@@@H SY` $|r)Z;氨KgcA@$ Voս3[ъΞVX=k,'o.Ѱ:- wZXCG~;"2t 6_ {n=i9gz5M?iU!>MՓ1]z\CZ?u,=^js%9ihݪ ݻ!Ϥ޾b} n݈\"ȣ2͵ju[ZZ+gɚŹK_Tt1vvWRHA7K;KZE_o}B~B9N-5~fׁV#r[WyCVFn-ẓ7 7溏Ĝ+,w= M@quC ɝ7+cb<   +@Pw-G2aaa,ٳgzʜ AuTQHΠ/ے/9 JMn#3BE^2of::Mk{T,O @@@@rb-rJ)\TO犡! @* AP;lE{!0udWr(9 1 1+@@@@@/@P=f@l+V0AѧY%8C@I\B-'HΠ/ے/I@V,OZ1    -i|sI/tR)0BBr)4%=tT^PE A"UDQ#"H!"E+*t*U <;wܥ%wܖٙ o"#E- Auדs@(A8RH7ö Zu+>q@ lݴM~~ra)UTQYT,7~YrW_4 @@@@(rՋܐ`7ͨ@PNJ! T7g H-{Tϯ #%Eih+     P ޜ+zܹs%""BV(Q={ !@PQl@IDAT E8R        #@PGjA&(QQQ'^^^m0" ;~4       Vk} ̛7OϨ(Ջ-@@@ s+COO@@ *<=B@@@@@@@ ^\r#=o| @96Gsj@@@@@@@@ W]uU*l … %""B|}} eXA@IH98dsAQ        . rb.Pϟ/aaabZb%X`NB[@(|bCs*@@@@@@@@{j46@%"**:  Alrxz(       "@P@H1HLLJ*5Ab4t@&@P=on"Qm@@@@@@@(Lꅩϵ=Q@###jTQO  `Aus8 H-        `Aus%"-p%m DzN/CP={#J        @ T/8kT<%baF1@#@P=?z%~ق5@@@@@@@(|?bbŊRT)I5fX;u ;mA@%'q@@@@@@@0G9ԂM :&F$ m(" Y TJ'܊        z7 K &6VW,FיQx?E@<TS;@a       AB*0':ZQCǘn! %n#        9q@jj'$Hpp3:  9Qʾ A(       '@PହRAcFTw:A0w ڂ JO̹H-        `Aus9s$""BQ݆+  Atr~zέ(        zcPbXQx ?E@TϋZsg6a       A³ʞ)#aagJ //9 @ n&Aus@@@@@@@ n# `-b Au   smrszn(        ja/n1f̨(̨^n  {3GgTw¾Ԭ~s^N9vlxbAm O{ozƨ @@@@@@h T/ZEk_ ..N*x1-D@ nT7ǑZD :hia؂EUt"     8 ܆#E :&FϨ 3s@@x T7g H-{Tϯ 绋Auw ځ     ]Ewh{ zDD3'%'TwaU  N 8R A+"@P]Fv      EWz;Zs%"<\7Au&Z $@Pݜ n#T=@P=.e$h      Ptݱ)+!bZbTwaU  N 8R A+"@P]Fv      EWz;Z1*"AAABP=V! ; T7g4H-SRR%%9Y}zZ0-[6n1-FԻ((~u,[\*U$kRLm7Mš2@@ Y 5U{;x.   @ճ(P3I@@Y/ĕ R@@ /|T/bmWK拥ٳdMzOv8h 8 Zkqݱz Mw䴓Oگɡ#*KkI㖍Zͪ0S>HϬ6U*居dΔ]f%gaaW>ߴckeo+3'ΒIMN~{Tx7y`]f׬۞yv   PT0/7?-_Fj\_EOJ\@@@ @P82},H9_P]]zAs-@(6Lҍj~iH,Ňʲ2&2JeY/6~96n|S{;(uheNkۯb̩3iw>cRԾ°od>f2NW"bNViL:PX9QZ#nT?z,_BP=eƄwd7:&ǽ .HZ8%}6C"SU@8nF$%%龨7םG+_}Fl{it*;`a΂bX°꣦n16s~TxtoKO_y`GVA[vsO\sWK29{ޛNQ8  }@|yneed^RҷKWW!-7c@@@ ^#=I 55U%88XV8'0}A@T7UAuպ]}*¶V4~X)9 * ˕//^H@LRRRtX_ [(w>cTH%2Jd'0YALJvku?w^"II̙/]D~z]ͼ}^= pZA=5նʉc'l2R+c,_ϰ,ގ,~f!1d~mꛯȲ?KVA^/0\XAs&-A@@ L ab&}'?*U;ݵϝ='#%98rtAt@@@@08h㈍p#`9=t@ nA*arwX7R]P=%9E>YFd9u~~@ԩ4lyxp=qly})#a 6CȥWWT{?VlAn-^'e(k2ܥY1F:7a;v7fYjQ!JҲ#Rh_Xg&7}#eJ!i+6~XRz` _t@WJ{d#TP-\.'O/e_=P;R]/[=yisXYXr'8luW[@ȁR{v}0@v}t`CeHW-]-FgRW3fQA='"  NOѿ Jw!_VH7߈Yѝ@[@@@Ab}&޸?d .\ 11vMUu O 'EhlyGyctl$*qۆYcTR]2Jʲُe =f\xƕ-0|U-k#@hZQY0]|J_Jw'3,YR}jc3VmA˴5 ]ۍYfO0IP}7#^֬"oMˁcRZtyo{{3  ^IrO;eoA0t>־crӝc'   -@PŹ ̉(!M@@8"odu#kz<UPUkպ|Tp$,*X<{ןX6}Mjw5SZZnZlaDOonA 8$o4Mܷ\ws {YVr.Z>#j%zj~^n鰨0E,ڶ°y `S;ɉc'D;$x1E+ qOIP  t7vú q'6K?CcfdT 9ySMZ8gG##.\5 ۖ5WFz2f/cӧN˽  ?w_ ;Z#>ia،Au̯~muGz_dH)[ܺSf5mDwsޛT1Bjrw؏ t_{õ2zv89#QN<-\Kc;dQ]x{{ۏT2Bo;^V{gJNsj}fAKc?{\ܪo&OfGAu[o2@o|>ۡ&[k˘i$>rh=3 ͸sZj#!  >7풙u:\oL"le{xuҡΊ@@@ ^\IHHXV=ѝ椺S h@P|b}ઠj݉c'e܋SE2ptO)[n֍;e L;Kz=_~.ߜwM+~d^S?8W,@F .f[Wg +`%G &w6!f<ս'/ߏ$nf6fVQu' (qЩvϴv]6Э*q?l|}~8m|)z6nVyzk¬q֬W ׻'NjT>z1*>)fڿ?_~"a2kL+?mvuP}qG_0ӌy}IP33ZǞOK, ~Ԣ-u9[;a?  !ͧ˒1ϿU"*:m聓+,,   Auw)*+!EPSF~  Cʠjᆵ$ab5"LE?z YmN}YF/*:6:ooطO~>}??zxș/㧤 m庛j3c=o9Ҭf!FPgtJcƃ]1s_G8.bQT%_xyitVjC9Ϝ>g>k5r.צSk W_cɼ9 =Ԇ-fHWvθ$̚+ $ݯ*~~CG=4y.c_w~D}ƓǾ<^X\qap~622K'\z;?U_¢d t:>f'U,bO nS@@ظw$ u 5ⴡ'j֮*]wZ   AZA`NtDFF1 T/N@@ _g?Auu) ~lDNNH-?ﰷ/:"uj;{Nv#jNϷZԔV ?VnȺ/6]&n*!!WgwI;mP]UӲct=f5qXE+dؘi[k{|P}!F?opvZqJ3%Z~GTwvRVAk|ԹI܌Kr(^liYL^.^𘣝[6>/^4[P=|,W~쪠z$޶ݳOϢfS)铎0'A?w˕K+ʦ;߶/do1F: xE@@=yHX'!/=䟱; Ny]EF@@@P ;`TT"cM@@$@DP]*'O%cw,İLRz}xپi^ⴓ_$7UԳ,ٳk}NiѾk١ټa̙8OPVWlT:P^2Pn\ %zfuwΐpcgG_H6=vϴv])#otđn}eHEږʈ xfTqݬjT5/έ;EmҶ +6*(n~;ZCnsK&1CɶۍP:e}\r>trjFM{l4   .\_ו&?ఝ.} WOsX   AR/" f|/Auq: T7Q "Z@Z1trѧi.L>+*%c*>޹G)|ň^Qm\48҄UgGKrR y9QS}7Hg[ZN/Gן~+6wT~ߵ[z4ON:T&zj,YZyXvi#AIII·vAcɼ9 Y,%K+ ͮ }ds/F4Ի/T\-*3~9q섴iNnծtys"zCv"  Vß 'Z7הN}/=C:JkyFTٛe+kTUjy_WyKꌗR,[(ݴU!lG~e$aEl;&E]k\'מ8gԬUVgRXA9A^y^4{0{JT?|thIa.36B=8[7XDoTwN@@J`ƘXv^^0\mLqyk;oצ Re.?,   AZA 6.N*V(JTc3KS h@P|b}PAI2rhtOT)yxpgM?M}#3 1ct@ȡcR;EF"媵AjqI@ +KP]xXd&|[??F eC+J`Pɶ+ɔ{~X9s 6XO%HpXp"uv V@@p[ITK~Ok[$z_kht@@@@0>D fTO  `AusL 2ZCzd{Ε ?OՌwտU*U ^g˿*>lR?ץV.m{vP^}2zdvx;} %v3woA7bw&+*<7vlЯE{Ԕr7f۽oGˢźܽ5fo,aak$=QSceAB݄ƌMu7^'ϝu_}' cu`_#la欂'O 꾕*SJZj\KÃjp./{ c]fUV,^)SNǮJQNP [6ns.}֣߰vTwJ@@F 99EF$ǏmjȽ@'qȎͿܙOS{(Ur@@@s `@LlXQ\_jC@ nΠtP];1>[h%㷗xx3L`ծFVudI΋흮}'Cm=itȽ@^Jo,~dY-i?hJB{pOd:FP])ݳϘ{8W\z0j  "C.o,YR^8:RA9c?]~Fa=%'Aۦ1S/Zaz1R{eeە镠z&v   j€)#fe|RI1B춥a!?@@@I;m9n̨Ȍ0@\/@Pcΐ}{Hk+Iβq*:uTm.ڔRLPsԬ_|.QΞ~̫\KMy}ruh+>-z׻}:$v|z]ϰ.U5\%G:">+}hN/pO+c5f䉇ó!uU}^^}ai[kpqa0|lݴM.^-)-۶]u[Irr<٥^bcuVA_g<9]~̶2og^)Q>fV3t[`+5))Ig&ʪ%w{DTHwnN=P+%nyVI^frD>s9u?x@Q.Cz ,5.oEeu_& ɱ#ӕPSnܻc!uuRVmO{oCb@@"(wYBm_    ;TwQ "r: ,̨)K?@@5+nNk2ג*'3FX]˕/#*~myŋrErRvMZ0~IdFȸT :' dB,j|uTN# Fۂܔ_mV ĀRqL(xI5Wf,4Ä:@@p5_HrR-_Z¢F@@@$@P= ;ȗ@\\3[zjj4d`&R [OM+p90#hvzZrcMYr#i      T7ǑZ ̞3G"""$ m(" Y TJ'܊Y mJL>:1a5nuW,iMO+     AuwUT,X !!! 3Ձ  Ppͱ&n#t°=<*'E@@@@@p.@Pݹ GȋܹsVUJ(AP=/ K9MPGjYeضcC^+h?W7Hs@@@@@@=WLD???"L@@LhT7ǑZ _Aw2@@@@@(Ջr7oQ=00P 0*@p'Aus@@@@@@@ n# `X`K@@3PxE@ NΏTϹ%@@@@@@@@]oQ=,,zvz  Tl       AZYsΕ(TOJJKS h@P|b}@PGjA@@@@@@@sH-%22Rۛ W@@Aug2OP=w^F@@@@@@@ Tw/?KXXXVX,Ջ-@@@ s+!^ŷxTȁS  `Aus< H-        `Aus@\\j"TctW`0 @ IZ^g"        \uUUFMsIP GPt@ITY9fY        @ ) h.Slc%22Ջ͈Q@ȷ-`?NGWg#       & SQDGGKxDXU‹չ%@@g'sD)@@@@@@@(U@JJ$$&HXXA1@%@P=_| )XA@@@@@@@7 @;9Ԃ       T7ǑZ DDQ݆+  Atr~zέ(        zcP|RSS%!!A?_wՋS@ȣA@\h ???&n./! ' T7gT H-{Tϯ #pYe @@@@@@(@P(mvgظX *;mC@ n8T7ǑZ _AGA!     EQzQ5"AAABPݝ! {T7gH-{Tϯ #pYe @@@@@@(@P(mvg5zXXHjJ*Auw,چ !@Pݜq n#T=@P=e-XC@@@@@A8jٝ%,RP]Ӓj,``4@?sT7ǑZ0#ݲe)ih#o\v~RRѾljjI$UkVU϶<pfZzIP=+! gǔ)]83w@@@" @P M,R"~GDPH E@ nYAR9!V?i޶aӝ&nҝhѮmGA5~-?ݠ;VA]鎛fdgV,FS/?*;LǭV޿޿0v̙חY"~Vy_~3-k.s^)#UjT1UDծjGZȅ U˰3wLM=Dn (  M@ӿrG9|~l2R*Ұ}T:VW@@@F  ___#2t@\'@P[Lҍj~iH,Ňʲ2&2JeY/6~96nDν;cZٷ/Z!SMode+dΟrRȕyw\;0(@P!s&/9ퟷt{iXLe3dG=Wzn(  өf߶qE?Q¢g'   %@P乮' %88XV0'4}B@s銠W /yծY9N؂;1Cˁ5/cPo/KWƶMDՌ~cWf"ػg;rLuS-)a..w {NO2uoJz\wmU[^*vҶs]Yv 83u{(䅼Xp  @H~ZY#ۨ4?n}E, FRe7G@@p+n54 H\\G렺ETwA0w ڂ JO̹\TW-P]|J8l(Au,Ez k܌IJJ}Ͽ9Gc.rEA]yq ڂ]y]y/}{ٷKɒ%3ocx1Suo^;EƞF@@@@A"񜠺[B@w nh*ZwˣO5qМ?%>#AtFNv Z7'qU.O=I7,/AupVAg5Ӎ!~a9_ %gTQ 8vB|xNq!BTV,q^[b/,Tm/ߊyCbQd1/~u?w0qgf:6/˞_qQޫruiF@( ˆo7?QΝ='#%90rtAt@@@@08xh%>>>]8D@ TϿzD0`b;m`{q}L.",[#|^Μ:k??֩4lyxOO@@ 4UjFH|e$'%K2A2pLOcfctW.(ztݸ[NauԁF =~?cDd ~\/>;F1fmҪcS1Vr.֫?d8?A#&G|gSpFxj젺 :*f~cX)UTY3oG uΔޥO'iьEvV'ݳOvzAΜ@K U8liU0o 0g~&1V*mDjl?98~{ao.w&ﭹu[tgֈɢfw<ݣ<ѱuLɣ# pqe!՘A޶X WD=(O>a/  d'~u= ;c}ڷ^#O?DgTrZ q.U5\z6 Ox>ּCr_]znV/~*ѓ۷~P7ǾCKvm庛k؏sGA;(]Zu}2xjՑ;o+%dɒv+iC؍ ?\2f3%FlܢOkծtys*uԢfnXSZjlrٺi>SdQ=yyk4dWP/Ot|\nf]6ȼ=tuU2)f.[~5mPV ׹~EUۘu]DF7k坅 6=eϯ{}g]}TVI&]pAjIT}x5) | 9~X< *S_l3ી |xI}3a+Wһj֪){AZ?FϲƲzioСuuy   d'p w. ^:O9{:Pz̟Dv"   b.b%+` f`nA &  @:~>IǑ WՏFȯv붵Rn{;O<#zuh>ú<5;fɡGD2fK0竽ߐ'N.>~9d?ANpᢨYU޶hJ7rt׳5{GA`T1[Z4CBC #?կZ=uD`riZ2nKFt7jxQiۢf۩O{cr,NxOޝ4;]Ѳ5сKT,T=utVWT>f4R.m}vp~1i/k~^ϴ^ҷ(+*m{|<?v<ٸ~Sd1RK3j6ӧNK=۹u~;ZwvfaW; jvQP}ibJ}cZIޗyunڠ}0x@tu\-߭Y/ׇ,u/jW'"~V?fTZ|A@(7풙5AGcI-_N:zY1#   P hdFb0t@L nu'q/N.=l2΂[7Yo$2_,G_~i~swx7 t)<RYOR1 ~ߔG5H_ZͶf]`WJT߻gtk]RY7_/ _oӡ6d(Ы\do~W'gX}S l'NjTe%7bX:z->"uݙٿtx^vn%7Z[L1#w". W Z]igl1DV#ME"*"oK{P^TӏLݍՒ6wdS:ஊ{tNje 2a,OT6wT2ȸ{¥{ckyGE2m{Le  N{YB}Q9II'GWYX@@@p0 %<"\~V*Ō4@\#@PWWU 7$ Vg2WTgABVS6zt /x籎ͤN[[$Ƭ"O,>2r2$)B["/#gO7eYFW4ʞ@u:c>pq2omeu¬N NCG䭑f=ɣmr/嗟V$~lPu$iZa}JYӝhlL0ǎ5./?}MTA]yq䠌6o3Ы zB-]gW}Yod2\LMd3/l~u%W;sjө!1AW1,G{YX@$' VMY(?np'MvTwBlyG;W[NusgcktzԺ|z,MXeAt^@}Az6itS9ﰌ/^gseg wuҫssr2ou1;w6*hQ}kqo+}1S|wMUǟ$mZJޣ ""2EDdAETl [AW@.8 "Ҧ{NMHiR6Mmss󹗾zɯڥ뤜Q9Uy@SOTxWg^kG>?Z6Ev 08T(};tP=N' .tv]ճrTΠzeKOj]UHp1vӰҤU]޹3XN8#  W8r8S7&;Rq o俭Y]c˛@@@ #4/0*.-QQQՃb35@0G9gߧN-&O#ҔJC X|_._$|X$uZq]}]~4hZWZwj.tn!,-&/b ʠIQ1eƋqWW()hkP}'_*߯%/TO~j غSR*_SY?z}z n={jmгt~OAuUnmjE6~^A=`7߂껶풁O _29|Gd;-x>_\lIU8K=:V1m|9|ՠ׈)䆺ҏYU[e{˧&,F߹XV?iYC)XN8#  WH0|:~grW;= 4S<6f#   ~ GlN-bŊI'T$@@ +ճwXYc_++^+P=ު䃷>*c Kڦ7?k>6*^~X>:ZW}qSRH!BhIJLu>qصՔhMSڗtlUMq;!<*X{/Em\pQ]{kE.eV7 tϣOoZpZF畈G%$$Hm%))IGNj) ƨXڷty,Ook@^k+#?7OP5϶w< Uut^rG2`XfbJ])}v ޚ'E vڟ(-ޣg&{R|iy9:_p+Yu\Չ/AuIg֨ƿ^7z ӫV焻  \I`ؓ-5n*y~ Ik][#   ~a$!$`)UݽŨHP=.>SE@ TϜG+λnlˇ Au_yҴOoeٺZqˢ+WPWG/}?,o}.}FTZuk8 OAk_C [sVNuNP=y+[eس#4yj*ZW;oPIHOz']u["ǽj)v:+*vׁ^V2WzEeΚ={.]'M~]o~u )W'W_6hW_ VUAyxdƸRt k}ݱ7x0/Y0{T^/C2TwadĔsPF̟$y"]CuPd6:2o|M[nKPu@@5fD;Mώ-E/S&87+pͯ9    Om  .eJKDDJ9pՙ# dIz\3x1Q&%GŻίV܃<-CN.*O a"SWa~yue0{5GMJN͝M _[oltW>9jÊ a<5z/=uճFPv/_Lx}DMgb֝2{RJ`[:BCUVʢΗ/S7Ի:>t|Se[vᄄj#%~;$W]}9J\݃36=$}<%ϝוUzj ~?%Y \5r8Үq{9s(U\~Dy JY yjj>߮e%:x'ɋcRjCf:6#A9ƽ%+ծ@@@rRzNs``?Tƫ̜@@Tp3F|yRbkAuݕʇo6-H¿ =; DF]Z4c|;}s%FE#'di˗~R@];Yɰ@V/,;JnTV^o A +3ʊ+5}]mK˅dgیի /^@$d̠qiXxP^m)U7ykۺ¸jd˂usS㍐Sݟ'N{]W\/E_es>C=KG;u-sݣ:ֻ<е?+!#A(NR=N>٨_U1Iybؙr_ jTZ|C@u$?UN?){٪iLdSIkʅ:G@@ t1JP,Y"ŋw#/+@@ nj",O_T7^YkdB*WYVnTq ~~Q{4o{G<] Au$~Mi"= g_P]tٞ.n7;6y+dkK$aNgQU_?HUN[P]5:9]tH;=Qug=Auե X'QL*7ֽA-!#A =Lt]]Ca`9'7@@|Pk_}x-obw.4    $@P=c E頺mz0\U *@P^͒CK;8,1jn7t@LcTկk>쐳sڬrUiRdk!}M>ZX]vݦRRiη x ?v\:;}r_6iN0a}vf9F5ŋi!XԼL'7E-*smm^+FxEHD&11Q~C6ۨ}6MniXW:>Aʔ/ܜGU{rP#5jUAWL ӕui+tKowˢYSUWbJs#PRwv{x\Tٓ_٭D扔z:j hWMJU/}Q!}:ď>BmNaE\LvCu$Wfz{HUg1ye%ӍjW+/۸$=| ٸn=ܬ+^Mu_ YA@@9"kJuTޘ(Q!z@@@Az \Lϓ2˸>9z0]] "@PV&m/'3FX=OT*\@TX%iP롂'*B*_o~U \Ug/W^,Y왳WPߥϡ}1='fPA(bQi&JM)>v晽=鹳uT()bܗK|Me%,*L6#n5I X ] Ƃ J'q@@@@@@@0G9SxeQM];YxD@ Tn/@@@@@@@."EdW@H GTTۀI# /΀59E-m[c=lA@@@@@@@/@1xWAAuUM]l,4eg?tU  -s=        &ԯ„^{H،JP #  M7߶T͋        ճחCOdb&pRTT{# }Ҝ6#       @TvN%o)'aybH%HW  9Aus@@@@@@@ n# (yKyGGn&#@@@@@@@@ [g+/@zzX6,C`  Au4'        #s@%<.0X-VA| $@PH8        #@PGzA)yb J%X; X \ƀ >q:Aq$       /@P|Sz mR+Hxt@@ 3*~;@@@@@@@+@Pݿޜ-JVI"bQՍRTTk @@ ճq@@@@@@@0G9S%,:\lJP #  M7߶T͋        ճחCOtJe䩨z3F@9Au/0lF@@@@@@@ #4'ay&d*fj  `Aus H/        `Aus@F%<:BX,՝0<" {m;Au߼h]j wfÞ{wfC9ץrnu`OC1[@@@@@@ S7X44yRVO6@,A@@O̹H/"Z[~ܳ?j@@@@@@ ((NQvmbdf Aus)Aus酠zVY uaT      -@P=}e,1ySwAw 1 [9qYgU00'ׅQ!     A>. mTY1bAuz@-@Pq8 Aճ*T¨@@@@@@[z`_F5XŒ:sd  wT7Ǒ^g U0+>~L9r>wwH{oOwtn3dZ)P(_Aqnr綮+o.['sΓ$ͮb%ɐ l2mvsMme֝2Kz_q<_~U=;"8yipg w`O@@@ k*>k"9WE扐vR{F@@@rJzNs`(ߤE'-*uf^  `Aus0#nY婗I͹~ԋ3h}2fx9TT_4{,Lzw**9#NOU럺`.WZ?/ۓP TNHM,yHլ&Xv.A@@+ ,JvmN7+\ix-oG+ώz\RwG@@@oF͉BD\*Q RUǒl,4w`t5  (^sdGP],Xa?=G\QW.\%f-D=:zSP]䉓Rp!>eW!òy+d᫋=KG;` TOGM!\~mO>m@@P#2i,MPpy~lG]$(mR?ofiݩk+   A?Tl^M£#b3;2IDAT/t  dAusT+FWq]Ѡ 2uɟW/VcXO@[Թ[_p/ϻ]SP}{nOCF.r"XVf-[جÑ,ǎ /H$,<i<,IIIRTq ϝzub7:o3Pq8Y9{ԟ`RHagս^4ـ  +ղouxuzy9wYϧ j@@@,@P.7FFPf^AL@*@P=)ǛT/S$\W8ONRJi{#!l`9}u|(Qmi֦"r.s'/ޫ+?7 f䗽a2QF]zy|2`t;y!gPf١H c^P/O7nys=ݣnB{u` g5_ eߏ_ϠZTHL2ҦýҨzgk5yetN9u/f- Jg{I#iٷ{,Hvmەju7^+zw*RmғG0ZK=Ht|WGKk*ɔp^]6](^c^-Y /R^}o|ϖk!yHs 9/@@@ =?]LREi-DwmғyfD/)YXO"  ALOHdTXi@@ T7ڙTXQeK%)1IczՕR JAUߑ/?*1Oqʵf 0Ѯ}]{~WKK2E] AsF%[$mtc%*haFivOS)RPD {u剃]:ϬVwi]WVmNzI pVL1MTpoK;˃H{LoQ!nN6%~b%k+^p{s~CүrKo&qoN4*rߜzfnL  tv]b\s+cfȻks|Efw7}z|y  )c@x1Q7Ytnq~C&zU~UvlD@@@-]@EEUT7>+z_q Y eBAv{M>~w}}j_#]|0Հ Ky덍}J7Iro_Zo* U RZ<ԬSMo~̟]vT&8S?ѯTk+RP]euD']$%JU<|yR=yD\5B=غSM <%A;!!AOyJv]__MʨΪrI.|1nm74?ƵxTK'{HێmMu5=->*aaaFP}5es7-^D., wJf >dT rӼ>uYV;|Q%plarw{ۤB\yjqokSk*wR*U(?= oxGWW;ݭ>Փ  OɈ~8yc>{~ٴ;ߴU\A7rl<3TW=5a}"U[UOv$e+Ǟ~Xj־t[ؓ߼O2_j.ߨaMj2aԽf~v;#_E]mԻIN%3ƽCj 檺ԑl/:6zqRp!վ>=?e4ٸnU|RQݗέIrM5e􌑮]plt_ҡyG}OTN&/y8w3g/o~ZW5aV@@@ |_f[(pQD|ƛK>5c;   ~ WnN]KxtX,VA~͙  @PD ѝo Q<2`to)X',mCǕ߾ߵGNZ7._B/}ll++q2Ir_*_@]QUXɐuF#m`"tk!m;'Ju'?doAu6O}Z^pCfmUJG_ ʖWvn}oNһc_9`T}2|P]^݃^Cu5STU?'4jqJ̥ӥD|ߖ~/_'j^gmoN[8Y*_SY>uΕG@@l-O,XGL^FsN]L")hv:}[v2vxdrW-[/&J[T:aSJBd٦7R=^RHa/-EW[)>*7ի-&7g\YdQ=Rm|xLkAUH_*gȥFK^_*K^KKI'=8=~ޢ`ls<"  @` |{HVA>:T{Oz]%yN^۱@@@ T6  ͯ1*Gnӵ`7"3 kH@@ E' TW\4}|{=l"w5>g{3<[QJ? 5FTO7V6nuK6$$+%[?)yRO(sbwAC-)h}?q'U8]/Jw?iKBB.$W̒蘼A^P]M/_}CTP-`~Y~ʧ\~$#l; '˛|%RQ;݃꣦Zu1 T\U~^Q.8&[62?~89 yzl߼=q=iѦ}Oݧ͙}   8Ggx)o|o俭Y]c˛@@@ #4*/fFE L @L n?*@>b HtĐi@|z}Ųzt^'y#Պ&j7uߥAӺҺSsqצs fnn7y\[PM'ΏŽ-C]Ⓚꃟ"_}Cl6Qq{˟r\~bU [UV r{ݠ {swT2`Bycv+`mVP}{nޕ#>kB b%cVkUq[|gbYeA*kX槲qFebGGE㗳/N|J )$^H-II2p“Χ>v68M x Z_)~_vrYڪ2inJeuO<Үնcd {s6~>Y`^oгq(-ޣTis[[IJJ=.Y&?Mj˰/˜id5ruew[\>j%#A.eV7UjdޔplG@@K`ؓԟKJ~=~nRr۱@@@ T8 v ͍#%,,̘U7%Ҥ `,  x}b}௠%䳍[ = R4/STm8xL2ۨnNEWEҡtq^ ~YT\n[n g3!)h}zFșgPB{utmOӻvOztAO9>>1] oM.!*;{U Ȓ Ӽv|+zA5+:{Cy/rCZ2rZJ^$o\I-oZ*}:>!GnaF;5 \Lv_ޖ   S?9W Hz%,:[g^Pѣ:-Z4دC@\"s.?eYrP|:yZM]tQybpo˛F]--h+9׃{5tGMJN͝M _[oltW31Q6.P%VK{=&m;ߗ (|z[wگ;{^^7T{䶦 d]i )OSxjГƩn䉊՟rU -Y;TG>7Z}]oRAν.U?e yo_0, a'*\uU佅}SFLMo?3ٲkZQչvH;zT=QaaώлGM!ש魩f%ުwtW͖eK9.#S:L TNƿ>NIέdnJo4Մy  -]b:=jIgJ5o _YURV J{FQ]<)15÷?UE[Ֆqet{w6u`24ˢ߹6=\gQ< =`y%߰G]Yɜ@f_oF^;X)(ոҰmRRy9s,y}>xXD2kLQTT/]R)xsFGns?w^V-Y#W j־NC^Y nk@Zm!ʔ{5KֺT?~<9yl6i~Uz)R$V,\~^:>:wxTo۱gV6]{} U66vxtgq*˔\W2TWX$+ԇV1*զTY].\ [?&+ /(Y~䍎":  U )!OO66Uӧew?k̩vה8    TOO}.PEu 5ܦ?bTLIjWA,[X@ ,:;S*1+ᥳȎ/R*m6/aaQ r 6٪v2tٽ~~Q{4o{n3!:͎/w3jKvTW~ g.Sy(xUA0{/SܵЯeɩg̠:{K* O2I>Wv &OmvYl`nwHO)W^[<O=!;}Ҧck'8Q;}a?v&,,LT(#7׿I|PWv KJJU Ȳy8˔/-/yAJ+YO-.mp{@4_}yec_ՕU~iU|E6$EOf{dѬũ*FbNmٽM2RWm?yaj5Cˠ;nIVUyghsAqpMLL%ʆu_yKúRڸV%SxD@@#/Gd͂ہC7&JTH^:@@@@ W1@E#nK5ճcǴw"Eɝ  @.9o tM8rϿ̙s'O:K T\˔Ac/KD]ʖ/5{.S(U=&哪Vi܉ƻmRD4$5UKlX׬3ϹS.r92x܋A*?寿r̷li}fl@@@\#pĨ~xsRb,_J-.<f @@@ 5 3[YR:nUAuS|u 9%xD@@9W"Ѓ̒^!-o?\{>"l)@@@@@@T2%Jj=ڞT3#Hj0@P>1> n#T=@P=y`Ӕz:8B@@@@@@@ T;9' b!U\/1bUUu*gj  `AuSe*#I/        `@*TT7Ñ>p [S"b"jԓUXG@@Au.nLPW2#       @6 'tjR#nEBP=n  T= @@@@@@@rJzNs`kuD#0X,Ճ:3/@0Q9q@@@@@@@0G9S@E5fTTPQ #  M7߶oo@@@@@@@FUZdct@h 8ZmՍFNzh@2#@P=3jiq:@@@@@@@@EI9#A,wϵ)V{R'ė! Y΀59ɚ1kp4        `Ys@{kHTOLL4gq8ׄ  >1زw9         `@&B PAu{H[bTw x MƷ}5       dAͨnz@| 3졢G6"       @ԫBEA)p!_& ϯ* fR  `Aus<7T7^@@@@@@@@MqS'~;%,_,l$-ɁC,cA@%s8        #@PGzA ))IF Hg8<{||Z\5@@ x}beزw9         `@&B vW^cb TTxT, @@o>19       T7Ǒ^PWmx/ %*VE,չ9@@ѽ3*E;@@@@@@@Au(sPp82hPGE,FPJP==sD@, T"oٳ@@@@@@@0A^&B .!+[m#NP;@A+eA 1@@@@@@@$@POМ&$ &U$9Y, Ɂ4x=@cA@9ލtD/        ⚙ ] t}~*TW-NRnV@4^sEH/        `Aus Rm!b Q7Vsg  W ~E 5زwC@@@@@@@@8 @ T5o3Hx"TT+@@0 Aus@@@@@@@ n# kmbjՍX%!!XMIS||Flll 1  sn/n4#zA@@@@@@@L5 -pҢOk䱊5ܦbThuP=PX(Wq  S'N=n!5@F@@@@@@@ST7ՓBK (n1/2D=GE,b5~uS0[@]f ImRc: DƄ@N ϕ      @fgVH~NbUF5uc䔜:A&# {eϖ|iN[ T\رg߮6_M#s%      @g'xp8?п;z@6jF{Ȫ˅ ԦYXbccfL @B['\/n4#z y-Poa@@\0E6!     Bָfb @PA1s˲VKxpjFUu#Ɩ S4n%ƃ >1 n#Uޯ {}er@\ɍ׀1#     J: jˤe-]F%uS7teu*,'[RvljM,`@2-Lӥ:p Sy$UTdAueJs$+l?WJ13@@@@@vzTTKLHN6F|e2aT؍ v#n)uc L*n,* aÈ 0@@@x}bMžMtD/!/P+\7,x+&@@@@@@ WZi'D TQ5abbUAuP7U-Fu3mG*JW 9 @@]F׿z82@ʵR=ʓ %n{Jwni_N}KbbT(q*PҜJJ6ggr_o4Nj6Cyl?W'Ǚ@@r*Hr-g@@@XV*ah ଢ2xP}pG%<%jQauU2݈j{}%[_m*}:<&Ů.jq89cǎ)RD? @i^s r_!-hbfagzzoM"dsn]R*7hTOj֩q:G|·{o?&+  K˭ oIs}UQ)lhgZK2%Ymy/:lox j5r93m^k]wi6|@M{k.qLٯ3r`Q굪e/|J#^J..ulsl ݮguc ,Y+ _]O'JCs%8  @P->%ǏċRp\4`   %@P=7͘@RRl)Cf-}Iab RWUutQ_71 PXWIENDB`django-import-export-4.0.9/docs/_static/images/screenshots/export-form.png000066400000000000000000011405451463433610200270040ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT(:iB@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u|Ug7({yl׎`ADAPAETDi bA@)J4% {΄LM !߹33g3̮_'^+ ,{?ThCmEGBV|t[]Nx7!OM'ū]g9GYaX7Մe7+LV~ZT:Ǧ+2CC &xšTU^W?L=.ǹzӶr츫z;8O?sl[(Af.x襪_gUEuwGX;:ATL9آ5\RJT~A֬h-Ώz'w+ v!O/z:?Y*RxS>N+R@Mifz&wȻװcréEA~ў{bGEbL0`˘p:|FX{]]tɮ:')gJpzᆨ?p+Q g0?      L:Ԭ+<8|t^CIvUEcUUC8A@}6AYaQoVt="ezDBLq&|=S>M-V)T'x}0~OsF'.Bl ~z#/C,ʔߊW&++yc ?/?&w]~t` lsAѫ֥;߇+{"V2Gn?;(~:Vw˱;жlPq 5ԆN QWǽ?p+Q}'      @262{fyn¢mZ!௢/kr$uԛ_1ªzB >]VG7/CN)0+o&*xu,]UXoVJWT9gxb#ġt$C:*K+HEUpWW6e9,zF{˶eKG5+^xNş=l.nb aj T/W잷賤}nMzgk\U}TU7}9 Cak#n(& L0hMu;7CnQz/J?N[$uu~p+Q}'      @#KTXx`;Ƌ*pGKɯe@@Hߥl%^K(G՛9.13eⷳeeweEAuRoԿ3.3ajcd1Po9TNe‚4852=S29E6XɑnU_+]z_6pJt<~@a4L7_Qxsuk6zkj]>1G2mq+"̍+KU(?CU*EȘ_>j}/D:!s@IէTjM(}T\isxу߀\E)g*EUVγgpzpBqO,z}WG8s      T@R\xkL'|]s%c{‡h˘HDE-` j'jnS$T~ثnJ/r$e+d &~zrKֻeȔdsȽbqv ״ϖ+NzBяSd֊Ħ|SRí-PP]X=4o:})}}GWm1BC:HjkT¶ܮ9ت]̔ Z ꁯx0ኂם-_yy!!&3o6+w}zYvsG& QW׽X2yUt=`C_>@@@@@@@hRDGq2Up6 wJB$ѓ. p TXyuU>H[6[eU'/KWoH#g/P>ad%.,S 16ZUTeTT;bS^}%qm٬*꺲qWUe=FLMw0AWGQl(u,zqХ[%9^ I¹Uz\EgFC2I֥Vw}FXvYOј.+~xRy6 QW׽O2z#c܇|"      %+etM!!'/OrvEU"qbu _ÄVatUOԓa} s6R^۝gySUo1E٭f~ Fﶾ?M?ܘ4Rd;e~uJ<9.)v=jJ֮oZpa}pȤ9*];k 7D]]kTG1`Ck@@@@@@@@@V 1.Zf-8-A`TA6 UWAmm4c2-RwXnW!Ցgnl.=Au=]Em @,0ecPAu}|ym0xX] -P_1Qt2m_C؎Gz*eMp#RduU&X,p0h`fșGz M+~AF-յpCyz^\:`Ck@@@@@@@@@V@WT5o=p;fՃ"SyUT+"j!ؠޗm !Lx֛é Au=}r&5]i}x_zʫߧ m~=ƨ:]Gs^ÒGׁܾK*ky#A@ aOΒPߍ+c~ u.;ߴdqr%!'ֳ.ʄ^异VQc}D@@@@@@@@@ T9oxc"VUhvyU e,e7JJޠǾCU)a^MW2H٦Cm]\z9Eԉ Vlv|zrEՖ'Ύu7KӔ<^f}ͯ y@o#-Q!HLUҳ~@m5ϖ٬^\t92;smxQ_Q'?khڟbth]U/}C;O-Ff/4wa J50'*stl]n85ۿ+yD*|\XD K6xRWu`؍S7.\v<}6P\nVoR( (o4ޏ:!{+kT]z(ߏsZσi@@@@@@@@@0sF'+vwTqkhqǺrE^V [ҧ6sT.}#JªWlqaPFUQ6;M^gc3          HsF'^UTw8QQճ!7e12in9M\vvld;IueOUϕWl]!ߴv!          @ $Fɬyz bWۓ铡oؽAMKCm")zxbA<2(t[#w_!z&'wD@@@@@@@@@@*HA1í+MTzq01OrNLQZqY͵^CLܭ١3Fʜ#dVL+Be]M) N          T@blV]1;^Mf[iJng/W~LPZr[娺챋Ηye$)GY[@@@@@@@@@@*Ho|v]P]lN~",<19Yw X w;'CNmVJzESwEɇs$7zE۰@@@@@@@@@@BHYƈ'+6T9&XKw8䛅FzoA ]Ggc=p;GEE~@@@@@@@@@@@!௨S}4@@@@@@@@@@@BHO\vmCgd @@@@@@@@@@@>s(FeQ_O@@@+^@IDAT@@@@@@@@cd1GP=dE6@@@@@@@@@@@01q餢)           @XѪ(FE$@@@@@@@@@@@( wWnAu @@@@@@@@@@@tP}ܑ≋.6}-@@@@@@@@@@@j@b\̚;Z\1q:sG@@@@@@@@@@*++Ϛ7Zqjwbkӡ3++           @-HNJ⍉[UT{F@@@@@@@@@@DOOW.ڧzȲ@@@@@@@@@@@ $'&TqǺrO9t?i           ,+HOp#"           ɉ2KUTVAuClvAuS @@@@@@@@@@@z qzᶩ            EI *3U\1;^$           @X:>]bwuAu@@@@@@@@@@@ $'KZ yŦ6AZS          TF 9QUTϚ!؜:NP2l          z]Q}u$^@@@@@@@@@@@J $%Ȋ⍏0*ۨ^IQ6G@@@@@@@@@@j@ z0nWEt.>           @ɉ2{cTPa*NP=LL6C@@@@@@@@@@INL!*NP@@@@@@@@@@@ |ILwWnJɖ           *2cb#鲫:           @ɉ**{bsj6:%["          fTOS*t9UJzm8w@@@@@@@@@@@ɉ2kb?A#          PR 9IUTϘnTT;b٨^w_lλ?ϲSakcb4iT_{x1䙱%/?~,!xB{ʊ5ed?f 5 ~yni          @zZ4Ea]ӦCg_[A웠NBL~uDE]oLlzQG)G6ndٸe\}O?ٹ\DiA_hvm'6;BNj\'.[l\lفMA ɚu%͓Rz;toIO6@@@@@@@@@*A+#NC|6A`e +u`=N1>)2fGvK{n+.<˿H+<AKKqR[S0 y-Gm ,^׸qTq!        ɉ**h8NuՃ3~DrJ:ᕭjFI@bFdfmG6+Sʵd¿UkuNh*7 /w,gX~k%rq&}do1|ھ8~|1}7C|ݜ4~ʪ*#+[#`Ei%go+GPe\U]X\hRd)V͚ImZJ:t*iŶI u H^*vpl?TT3Nl?,{Nf:RUop3}?,K[m;Pz5FdlH xǷn%X;Ŧ|jsܱTwȒeǵj) דX;%kmE/}tJc* Y?Y~9h G7;R6)4~ c^G:\t4j~ނE7n6e@@@@@@@@@27&BnUQ#^>YTսS>YwЗߖoTطdUxWߕK;Zk|<B%JpKQo(o~E9'&w&ϦZW \i QA|#[6eһ]n%=364wsmGJu8$>6g_imkU+3[X90TyuˍǙ ֿ}e;uH}c6'w |F~WauC /-:˜/GC$3{{Uepu{KO9V-3N98t^~s#^VJLt RXi?C_]rR79zf֭27J߱ :/*x2ywԃ#{-/9A:_{u>F${8Ab+|ykV @@@@@@@@@AeW=l8\TAu]xՁZ޽rD.4r@2]\W"c77(:\VӁڇ#͜[Vv=yVv<=|ddf[ׇZ4mx칊61ַj~8a5pʯ>Oܪ|yM_{ f5~Tמ {\y6x8m12zTzd Ъ1T]='?6u=\6c}DWְC.9Tc>C6o=H>-.&Z$3=3ڿ:#..nWa?KƾZ j'ӜO4mWipxa@/90~] ]h.`Yd1o68Au=Wa_~'^eRUֶ*;%:\>zPiߦ1TB>YkY/>蠽nk于_~/#i=;oYNh[ϗcʊUnh5C:]^1eb]nJ93e;wLJ Rwey1 ԳPcT?/)믺B?LsO]}A{7ldֱgF6Ja2r8omYNjW`ńIO  @@@@@@@@@YҕYz bTT/̺T.vTkNWY/77@Jl߅gag,asoGt\7kzr\}*7Wi|I2ϋu!Y^3@өdfoWcL{oj57xQje#0^f&ۃ%T8wvYyϿp;-s'韕9m+c[ԭo/ׇL^U|}.G^;dM=JՃnwb]X}b,s?\G&~)_M-Mɐ7?L_߯clܨ? ßl>J1ިϐ>W1 ,]. @@@@@@@@@z qzᶩTZ*֪Һ3pJϟ!vUmYv O)7('X~geť0%g,Ax]=ƍ㗟1Гs9p{#ϊjԡK.v'Km0 oVַgB\r-:[UVwTc;UwD?,3Owx梹-_q6sye&bccDݬ۰\B Oz|vu]vQ\?5o<=|]WT}etѡ8[3䂛z+ZeݖkoLsm6ckP}CCWn$Ƿ'G4j`d4yrz:p| YNkZ^~!c nՠ6㔵@qEAuXI^j><0hw3zVw>}{֬ak䌓ږ өE?RPN7gC߫Nc_7'ke֠%d¤?2h֐=Sj-%{mޚ.?-Ƿn%ݻj,[*?pc:Ƕ8Z~j֭27@X@P=@@@@@@@@@?ɉ9C~By{c_xܘlơ5°G hox萺WmU|wAc +"j|y-!.V>xiwѢpd;뢠$.6ry~˒SUu\­mSo.2!qϣ%;{{~z"7_n2BU~ovdS{=2te~9t3+<         @$iY3S  _A}K98fGR|8%s=`7'S^{<7Y|UNs'se`&.9TPszyMe EWszH֮ԓ_/:K7Հɵ7֥Mz=Ylơխ6͜+=3Jlc wh{#TշgJ-/vù =\'M7Ҽ<ԫ4jPv~ZY +;;TYPO:2TkͺBzEyoJ938M>kII#O gCemuBKO?K^1MP`@@@@@@@@@]@WT_*cbw: r2~c=ٵ[n.9w,XW~>_k7ߍ%^ާƴwŅg唼|]uuӺ=C݌wz)ߏ-^Fo2ӕO<K{VC릾=Ҭ鷩Ĩq%(Ҩ^7I2 {}Ll1̵9،C 1iiP7xw/7 mU|wAW&yyFUO>$:t~Сtur@n?w)rZW;I떅dzKs#^kו]UQQ=N          PZ %)AVOo|QQ]֦Cg]PV@Ucc06+ywypd1GqygSmOy`AzwQny^xU>0 ].u rAw{Ȯ{mʛՓ}V]j =]YXe+߰dMEƧOuԺQy|;ɭWw4燼||TW4?pc%_֭lښnsmtǃ8ؠzc?;ȪuVw'PP]U偮ÖON'Fak=iG&Sɜ!(7]ylH~CMp0~VaqʛVY ss=Ҭ-GƼ}ww/6` ~|5q}7>ѥW |FUN/\}ťo.'}"3fb}!5,:$P,|u oZ9ԓ ߛf@@@@@@@@@HVA4TU`ʠ'2+8rXp_5je{rт CW&q!Hۖ7/U}ҾMKR\_ʈ>0+衪Gium[F >Joh2<wf]y։~(&uffuqYjᾁŪ>اZ0a6YnºUugw3}6dl /\\-*"BI]M~kQܿz?Tuet{j̛7ӌG=%Ę֕/G;{Z¿~D?\L;QCUa*=Um֠z]TEa^6p5_jl'w lK0/:OSart\W}_r1o  #'G֮ >}<#t'M\~PavsW}Ni~dS"ѿ7oQ_=.:tU5}c&~U=ktza?(` @@@@@@@@@j@rb̞!TwĮrՃ:{c=;]>%D40tezPq1FIq3͠kU?鰷a}JSo_N%Zz*1*p~depdgS78XK/f! k?Tzdzپj:d?ˍ*){ym_dq﫲Z~2Tv?=\^$7m"O<5$slٺM~XCքDCԫWzŇȏEoyˬc&Uxf+klf&@@@@@@@@@@@rb̜.X]]z1rf^{QE\wFrnz1ƇJmr9ɭWw6..77O9G^lؼ:=Nvz^oT8d3qR[cu73qzv.svR/9IwZ.>t[f1s:bɋu!W\|y<\A+}Qd?=0;_%=ݨnߪg߈cl\6q;UEtzf,]J*s~+ǿ \[3^: q'7WNkݭ4"|Rbz|z-uuoSgz{h,?KSۮ^N>wƇܫt* ׏?Q{äEȹg^ݻe3hqr%'So/(~F#=ڶ6a їܖy@@@@@@@@@(HIJTqG{vzM9T0~JQY7n٦y5ex*!NX_~]cWr Z{sUadTEVҴU{Onλ]pEW޴%]efM8+6pα6Ua{;Iqƽr:%mRzϗU\f$ב8U>Sb۶t`X~Կ:L_! @@@@@@@@@8UP}etqFӥA@@@@@@@@@@@0Yq餢)           @XIztFE$@@@@@@@@@@@0*g;+] :           @zZ4Ea]ӦCg_dK@@@@@@@@@@@,+UEuWGNl6@@@@@@@@@@@ $'zV=p; W@@@@@@@@@@@,+eNoLݪGP6;           PY#>]7wʙ39@@@@ n#I %x@ @@@@@@@@@BHKzbzOY=}Cx @0^z         +I/Vnz#6! ~8XA@@@@@@@@J nkS~[E}Vu+;^:vH@@2OEzp         Bř$1=ID|CX @0ՙ         @hJrFw,sssC{@@ro͙ 0E@@@@@@@@J#`)dUTc:AJ3@9#c         prJRdK)%V;Jc xB}擠z@&6" @Td.        B gp[I,qR#^)*7 "@P\X9)        TBJrq+#@@ Zգ%y@@@@@@@@@ ʕjZQ'BE?@8|oǑ         p| 4?$gT8SQz- Iz        DZ@3Jbz$$II\@@ A0@F@@k4@IDAT@@@@@@@ n+ I/%%ՙ  @0d؎         4;$WK1AuXC@\],"        ! hmՓŗ/R"TTa.@8G@@@@@@@@l#I %>@?3@@@@@@@@@YA)'>+1r Տ="        H3HRZ%Ƌ/Ί[K<Мn3777\  @##        Œ3(W&I\B ~On@B T^@@@@@@@@@h6$[E|M'  /@P߃5@@@@@@@@@ @'HrFw<յe޽.iiil^{9sȮ]e˖ҤI ˊ+d֭{n4СLdܹuԑM P+!        1)yۚ꾸8-^Y+/]TV^mBzvKLLիK6m̧ϊXpb 2h ZP O>]mקwf3ݷo昆 J.]g@ AF@@@@@@@@@TɯZKrZM>*k֬ 㬤'(7i&Ci999鷿VfϞ-;w sٳ̗|ٲe2|955UsGrŲ`%##CjԨ!'`yd f.~s  @%Me^zn5@@@@@@@@@$15QrqWQ~@oZLW֭ ڭGRN{Ta֭[K˖-}0i$ٵky`Ȑ!eV\_$j{lm9sLYvai߾4iď(i1ATRr[         u̓HRdlj+UEݻwG}J͝u]7l`kN:9}v(ȑc>9?ɓe۶m楅JRRRD#b RzHv"         / 7T{TAu_V׹q5Ix%ͲVH߳gVzJ؛7o[999e]+8p׳gO󙐐 իW/u^ 'Gr:fgmZq>xu=6md<(UT1OoS3gZ8]>vY$&&:Zqkv[k:Ocmܸ̉bs z/'j-} ϴsLǣz^]HOO7 ,u!"1)@P=& B@@@@@@@@q$;;L5Zk׮3gڵk;@A(v:uᅲEjnZZl9sL8xhAZA~ Y~ֹsgs>uYګ>5L>dȐR"Jg6 Gf8 쾏SO=U͛guZ;m۶O?5ۚ4i"۷wϫcrN:O<ѼD`o?Rmu֕M:/24kLڵk =F_t` ]t1y>;dg4Ȅ@s4l\[C}R显zoӰޓ~Y:>  ~G@@@@@@@@cE //յصD+UP]YiX\G.\(?CЮmڴ-ZZ?7رdee9]]ݯaw T7 O}h(_Cښx-[&/}+ǹ?sssM`,TհS޽{nYfɚ5kRnHZrۼZٽW^w{]M'NTj<9D+k^o7t |"@ T'@@@@@@@@@ V ^zRZ5TAuE4i_V+ikX\?AZPVנ;c8/ҩڭc WZUʕ+Ek J;!4j5]F ѰV Vv駛O Z裏$Pp=uTٴi)"5k4P ~kUv=U )éiP]/Z[m5,צvjdrq:Uǒ%Knsp#ԓ^ZfϞ휿qfPSbݝvmEsA]5 -i?9pڴiyf=<a;v0tn\qiΑ@st c1<@@@@@@@@|Sd<--UTWe j5Lu ܁֭[K˖-Kuz~ Aw/?0`E?ûհrBBB;p_>]}ٳ>u}i@YCvJgÆ fSÆ K.f9XZwϫ>:&Nk`Z4ݿ?4to[j%'pO E_0GRQ>A$Zu\+kkڴxSm__=56ydvg:$i}pslh}A4>ewO>N{ 5ĢAX|* @@@@@@@@bQ@NUTWt wA[;}t֊I(+3f0h$ûZ \kBGrZ|Μ9&MHeٲe2|o }@{P>oΝjx^C?묳eĉVׯ07ȏ?hT96aS _+kޮ,IBSN `G+h" t|qx''th%ymgn{: Kci0@@@@@@@@eYիgA7jeyiP{MZQ]+kJ ݕZ>@̏fP}۶marmCn̲ڵke̙fs%77% WO?1}V+7q#z!10         Ĭ~;v)䭹JTw? y k}Nu O4 hGT׀_-<Vݾvg)vRv["=VT={ڵk~ZjI^.! _~[{ꩧJ5"6mh8ZT*Z-][-M6fCE3rJ;w9oCuԑ=zc8ZA>Hvnx~;:Hg c04@@@@@@@@)T׊ŕz0y@[޽zf9\[~ر&R$%%vZzP޶+b/[Lϟ×N:I7nlr~jժ.Ow>}HFFFаaCҥ8w=A5kȬYeBW_2eU}$h?cٹs>;灚ޗԬYSڵkg=A@jlCcE'        mѣGKvvhP] ^A_XXhV50-77|FcNh ,=l̙"vС4j Tk|禯Vcܹԭ[/$Au}Z9{Ϟ=, 0U7md*8Є !k(\>Tg0x`[=[Cϗ˗Muo|}Y»uYB݇O?w){Yv]}hG khnpݻ&VU U>yUTcuVZRN]m۶ɺuLl~%eÆ z={U91o<ٝ cZUԩf$Z{b=4|Xl Z)^[gYTT$K,-[/$;uQ7o.UV5CJOO7yc(9@@@@@@@@@2 =Z47Au͞V_ͳ`5p` N_^6n<[>^5ܺuV;Lnhvaa p+:v~5$;;}{޳c7>t: ߳g鞔dT׋-X@/^l臎ϗ%5m= RUw5ĮnmPwlKצo=iXj޷6ZI>җ24!wX=Ȕ)SD+k= ksWu}AHCMzrb@@@@@@@@dcƌ1m͓jRYm޼TDҡ\;v( N7 j]v9tuҲeK/4alV4(7[7's2ЕBDr3x+~H۶m]ew9## +;-x{W};nWV# s8"ؠ4pm4l}U5l=K=VǢUy:7&V[$sL]I6mý'=3МoӰ xDSz45Ev῱kM^ƣ        !g kT OWzy Vsj`xʔ)&Я.(~MfϞm*~84h߭[7'ʾJbѶ  =K{E}yMe]&:t8        ǔյft1AcEw6lDjiiiү_տc1U'O\Ӫi _gV@ @P=J6'p|e>sZe˖e>J 迕zgǰaägϞ:         3fdff#2_`,^عDWAu5kd޼y~t}4kLrssCǰ p T/g4H>g+@P=,@@@@@@@@盠zժUzJ[OU&M4ZJn*qqqҦM }۷w!;w4cLNN QԬY3@GCQ'=T?">F@@@@@@@zVVJII Auf  Lz0#NP y\        )g*ۅ}VZ$( pV^m>ssscix@#T~'r3`)O.۷o7}SRRO>fY:˴irBBvi/膵kʂ D>Oj׮-חݻes`~lٲEf̘!oM6 VZ'|T^=yŊ2uTY~Dڵt\SOv&Lpί5UVκ        .|'NEu   WW$z C=dBJҥs״iS>| kgq=So sR\\s/ř: #@W믿zN=NۡCVV-ЩLx='|R~mJI'$k$->>^FIW        ToԨ$''*F@nhu ZG!iU/h{r֭[M]w%u5ޠc=&#G41̔n)+WVSլYS:*uw̽z2Ku6T6@@@@@@@@ >ԯ__F$~ ^z=hu&M7xtku ƍ/4l0ٳ }k{ƌfBBt]rrrLt Ϟ=[.\ rwj~;=Fk׮ҲeKIOOh"9s׾B15jHVL]۬Y33~˛oiڵiYO5!        Hʔ* A@RlC@,7 #oe>~w͓{ι:g]7nlիW+T˓={8?|9ӝu{A[jQF vN:I?ګ3ИꫯPM_wv        @1cHÆ zhFA، T/9kNSjݺucR< v2RSS{;X̵ӦSl8#P;33Sn6iw_+s*?x ILLti#F8zÇKrrͻw^yGeڵή[oTE7xǬ!+R:udw IP=( ;@@@@@@@@""ZQ2#D ﹻ{'|T\5gwN۶m[ / 3f0>Onƀwo[jHYfy-:Zi߾+Ȕ)S̺W͛7w[Xx +CWKUܹ\uUP C@@@@@@@@ @qq;VLF؏ ǵA{TQ?^O^*ժU{֯_? u7o&wZ]O{r嗛咒x߾}YoѢkV"U՗-[fzfdd*v5I#}@@@@@@@@B HÆ %%%E42%}撫W6= 7AuS?k.Kp{ʃ>(7n4۵effwaĐq$o=c=&K.5gΖ,k@]+7 0^ 9qDy~#FUuzHAH        L@#cƌ1A4Ӎz0-# q/@P;>h 9쳣~1<; h]CVּ;S5j{o|fV>ຶUVC=d-"-[t-,\Pz)=܇w/55jz(!       D"'7>v*GrSA@S ++˜^zyTWw}W&Lg{H~yWG}TWt]CV'F2モ#G:w}ҠAg=š5kptMҺuk3Au@@@@@@@@ Рzvv kf&+W @@B TsX;+*tR=oQڴic􆾟|I$Q<?Syל=h%ZFlᇥvzwtO41TwX@@@@@@@@(gbyEVIIIcթXZγ# @/>,lNJ߿_z!=(~Jjjԧ7UVsז"YVDkcǎÃϚ5K 1TwX@@@@@@@@͵hƪZjRRRBP̹ գ;ʳ> c1cΝ;;oo߾2tPwnMonlRno>?uC^K/5"1~x>}'#GD3AHD        -|̔4*G  @ [A;wŵ=#ٮ իW/uзy衇Px\.\(9#gq*O<,^ج_WIJJr[Аw!zZj%7|;# _r%r)8f@@@@@@@@pTΖdgU|, wPE'V\ @"'(Oydܹf@>OZ999f]~mVn{ueȐ!N@ O~XVZp| O?T^{5g}РArg;z-y_|Y,Aȟ'\p@@@@@@@@h.'++A|،  ^7WP}2~xg| .Yׅ5kзn+B:w_z%:uOz ;v0wm;v9s RTTdj>G`,Au=Ǎ7({5k߾\{f        رcMATTT~@8G ݻw"NOOw۸q oa:u@xRRG4(~O]w}ԭ[WWME?5_J222?;#}-..N.t _|7^u{K5[l>H>q!$ w 15C9>/ٳ߅XA@@@@@@@@ lР)X\\LP=@@?~QYq͚5Ç5OȒ%K̺ofiٲekEu\Z\ڼ+Ry',U5~AToڴ>y@g̘U{ 6;i/wo215oȤIΛ,իWUm淏@@@@@@@@GlTTTw밌  7E#ޤIH&N(o3>}E]Z˓s:>l4hYpoٷosL :Tt 'L |z3<_1QٳT߾}{C4?jԨRـ        -`WT̊f]2|" A9wylܸ ҪU+S5]+r-{nsZjɽ+Z ,e׿%}߿Z s2`jeʕ2ydꫯ&&&J׮]MQF.]*=YMHH0>{뭷dS TD@@@@@@@&or3)))&oAG؎ T[~kW^ .;z4~zYfyN:5nO?5yfٴi k_C5k WdqhP]iiiRZB@@@@@@@8F-ZQZ1. TA7?W T?        Ě1cLEu-XTTDP=A@ {ϤGDP9?        @e(((Kjj*+~@@|k,z,?Ɔ        i> ĖAz15@@@@@@@@*@^^4jՋW˽  @T/X>+AX~: @@@@@@@@ 4-)))OP=cB@ [ϣ"F|ryͥ$''Wĥ        Ǥ1c$33}>Ac)2h@P@@@@@@@@@7AUJqq1Ac2d@` @@@@@@@@@ЊYYY*%%%Տ'Ȁ@@W89D@@@@@@@@cL //TTOKK3#YiXB3GKb,  p T?>         ;Au*GDF'@83G@@@@@@@@pToԨ$''TT'~@8S@@@@@@@@!ǎ+ 4ILL!؅ Au         \X $;;}>A\A@~ L@@@@@@@@@B 3F6lh Cs@:s@@@@@@@@''7D!N  %@Eu         \XƎ+YYYLP=8{@@_b         H@6l()))Wb@ֶBsG|u@@?~         ~I3f }XA@J T/m@@@@@@@@@-'7e@@ AP:C@@@@@@@@D4mqqqBEuf  Fz v#        q-P\\,?deeIRRT?и~m۩ N!ҹu3i]_<(t_fdYiӷ[<֝_;];j"'4n(?X eU=;_|X> +-6:{Nٲcϻ"gh6{Q&֕'(kIx:Yr|x^;zOJ|)rΩ#؎ϿAVn2}H',Y)-[0\6GzRʐdulkֳZy[RϾ^Ѯ4iPGv+|>'dHvFb>O4k]{dӶh:swT0sE ߃V$k6lDirF dA9JH; a'         TTR*8)np a޽BK4_t#M7X\<~굉2yN׻.?GiG!s|һCk~ɮ=}ޅ55e_vX)2a\g x]` 5(Ąx 9ާIõ y{иeekYWRmI8Ԫ.yï0;u}grÛ4-_v؂5}Ӿ'L\t_+~ v:ser]ɎHMxs} |o,[޽눖N\?6;߱Z֚{Nxo5~SP{R/CH+C#ڇ         @AAԫWOUf{T/ÜHIJAn׏/+U?TArJVS[%ϛu{9&TpthAu{͏doMqFwth!TP"L+ϕs9C +~(ZQZӠO6wn/G_`:YukțYv~ܟy}%w;XP y~zUE}-fVO*KpKUv_K_e~ Gj@4sq?+gdo?Ok.oՁG߇V]̧{Nxmdw;wokqWlT/G         %/FE>ڈVuL)ܽo9ZAuZm/KP˻ӠMOh޾޾mzu+q._4T׍rz\紒x@iUM]"||$M+Q7؁I ̟/ujؽWrsFZ6{ rZ>j eh4uiCҶi~Wk!jXn+2Mʺw/b57FNf=SUfKV-#_e0R9)]Fu g.[#2A.lE@@@@@@@@l gggKrrDEu[&>T.*. kHyr<}ST/p{Z'V[w;AĄxUA_+k"yҕu߰3W$g@IDATzɹ}LP|=Byמ}Vs ~{ף(rJGY}̩ }Ͽ),^i_|rm|9XT ֝hvoVPpM9^vܸ~my:|r3/y_k.{SS\&2Ew~{(ٽwz$לs9Wmr v;y^qk^&؅         -'YYYTTA"]=]~)C?岢pۧ9oE+ziww=RP>B^sTtBSݰEn*&8,k~Tbۗ7:`/=c-w[o kv GҢ(}1aA'oԯUyoU^w8orth4u`Auw }kUnm׏/+ 7;iYy`Au/|o_w 9w֊0↋}w.O[#2A.lE@@@@@@@@TDƎ+ 4TzsӺʥ{#j+mg<̬MP4;awnְVW _9իJ=FSv EEᓬ{1n"|}997ǜBu{@uA}C^e J?uo[ H CvB4GbtM袼Ty㓯rYKP.4p|5/TV@@@@@@@@@(((0A4+Z,m0rɪ[SYAaȳ\&2.{ /`X k5{Ͳg13yk/Paj@sR/o}w~C~ݻn8Aᗞ%=ڵ0zwefpjJn`s|Ѯ L? f[sֶzfqf9 k^یo#|~|yw\yʼvz͏/;T?h=A:qy2IIYN;yuK4#_@>]jP@ClTqX;ϹI.Ջj۴ad~͠#P44cV ᫝ݨg+~-Nhj^kou>{ UdrZsg5Zs7g22'.]_ж{> ڑ^qk^&؅         -`WTOMMGP݆ yUvС*{[4\?vj3R9ރ rvV]o\᷒o [2{ZQ]v}dGCZ}w^-qq>YfK7]8Pvjcֵ:KW9-D+Py zk{o$]o_{Of2>캏@oj?W>ҠFs{ TϬSCF;crof,?N\\]/8A~:ݿ,sB37*p}iD_\pFe]؊        %)))OP݆ `!?HZd.+H|nWF W=2TvvZ Te瞽-jT ֍*x=ٵgV ;5m)g1[wGkȣ\}:8Lg׏fY.0["7`|#[51pk\W*٧v+my{,[5 >|g_hJݕ-Y)w ސuwjJBuU~i_ʑՏ4 5=ڵᗞe6OP~N*Ts9Գo%z vH˜wrRsSs$H|5/TV@@@@@@@@@=z4j0>O͑ۇ ouot/lߵǽo.r2۞zmL~J4C٥<[4-P;>TW''42فne@?&7ZO;T\kmRiҠNKVTc\BkpmPrͯn@mvεCWgCQqW3zpp]φtGjl~„).!N*Tsy|L?lWωS}H9K,;˺䦧^=OtH|5/TV@@@@@@@@@3f&EVap_읱YXXhqca8reC9e-^;?d~+tpfӣ/+/v.P,蠺VFU}RZ% I+k+: ey~i)US`q~ؿYMVP=e/)D+PqwA2Ҫ]8Y~sarILߝ .|wgs^G4 G44o.Y/MHT:^sݩsd;ǣs~y;~{!9Ѭa]yD+ 'a?t./[#2A.lE@@@@@@@@lg}Vխ+UPQf " o||pRl][7pdUN\.ujyYjY2^5hoz7з9zm@K֨&n$&ějȗ='4]%k]VfyfCï:jsƾ@O^hgο|zkʩN[.lꑱ~vg=\[mR' h7Pŀ.;.;[mnԔ W+͉yKW>.4ym\pFe]؊        O?4lhիX98*0>8I>4f un+7\0`<Iwx?Of/pVһ֭;wJT֠ާ;iwE\uo a瞽_ gjVE[;XNCsE+h㮫Ui]eJ愮bWΓ+.wz@iU[`[uC% jry̲#\[5_[F[跏+kP=Z{^|sk>g49zaES_LW#;)xPrzVݚ͗n}/`ȝyKq-LP= @@@@@@@@@QF"&x[d7]n,]]{jJ?𭆙/0_,rwoC&f]Cȟ}P,_#KזN'46M2cD7kg=B5Ŀg`ÔM~w;G(V%Y0S=9h֮!#o#͕?5& Y=;HDVT\,yٰuYg{63_f?K3fT/ȐS::J~NjX~խ$%>,{$}ZzM5-h=ݿ:4GGe1wR\TkͭGK7;='//tm!7,dz+Ђ~7(Zsb;$J}         ճ%%%E Z1\nvݰE :G_ /2#1!^nLڦ-Ђ}ɢHZÍ࿟p T׾g˃ל/?9AuAmmBO:Q.٭{oeGyIYjצGy5ځ@C}; x=_WEZޮ@_֠zL9^x??4Kj컠޿WlPC@@@@@@@@3fdff ߚVXsG|Ttڽf ~fhB_sܷ2AJw86l3>Z}}2q7B.dՓ7cyϪ]{2ۉz?J JZW[unnۂ-k(uv8xP.9NC >U~ݻY 4o2E.H\ _JFgl޾oH_)ukT3}.{ /l8Yz-d~eמ}~ӕkܺh0~'T.c1KyiAV>>)s)ywuhg{vaM-Z=݃VdV$f~+ZMpIܦќˡ~o. y Œ#qa ~~^5٫7L"zh=ApBG@@@@@@@@] ??իV*VQmi]eٚ r(KUFzyѠjJXoUm_=z[~ZDٸuZ9`h@VY\)YAؙO@@@@@@@@bS@+geeIjjTĨ@@ `(         yyyzZZA|L @bIz,= Ƃ        (KJJz,>%Ƅ 1%@P=A@@@@@@@@РzF$99ٌz >$ %@P=A@@@@@@@@ cǎ HJJ$&&RQ=A@X O1!        @KAAdgg#+q  @ Tg@@@@@@@@@ 6ƌ# 64AX IJAX~: @@@@@@@@bA //O7n,BP=c@@ "     }GQu}?BzK IRlQTTE"b{QavPT&HH` *4ޫ@ HOy8ݰlw${g̝]{@@(CL?~H@@A2@ʑArt*        q$**Jp#d&ytΝfKWj@@t7gC@@@@@@@@%wyCBB {l@@ :D@@@@@@@@r%0fzkL@Tzsr@@@@@@@@(T5Auz9iL@Vzsv@@@@@@@@nL0aH w/f ^"@PKn@@@@@@@@@*ᠢ)& ^#@PknA@@@@@@@@/7nT^]%++' ^$@P݋nSA@@@@@@@@;vDGGKHHս1)@:^wK        xccc% ,MsܹsNWiZ@Nc@@@@@@@@@Pcƌ*JA  S:O@@@@@@@@@ o>~xQ*@@T牀        /0rH^ gffTϟ  y          hE5kJHHwWT4= @;wis@@@@@@@@@oHIIhxs xAu/ @@@@@@@@G`ڴi'AAA+,g\@@@x@@@@@@@@_ 11Q$00P|||V@@:@@@@@@@@@ $SQ=44T222v@@<@@@@@@@@@RRR$**JBBB?[@@l<@@@@@@@@@zll,A؊ Tϱ        x6m$$$zzz8ZG9/ %dX        d $&&J||Au  @A b;        +AAAp8O@  ^#@@@@@@@@@HJJ2A0$~z?z@(A(1@@@@@@@@Ng^fM ,kG@ T/@@@@@@@@@HLL4APpճ 7  *         @III+TzVlE@Au         @TOHH3{@:@@@@@@@@@ "111$BP=06! *@Eu         @,&p8@@ [:@@@@@@@@@  [V@@<@@@@@@@@@v/ b;  :O@@@@@@@@@ oL>}I@@A؂ Tϱ        xHNNX !,g4++y΋ _ʔ-T}591        kP=&&FBCC͌ @(ޔ[>q~vLg u,MzѼ        @bbԪUKT?\1 X`dk_nW@z=m7/tiȭ)TKT:@@@@@@@@@ G@$>>>BP=Ǧޮ4`| I=>BUUjTm"1U+  P+V2*9{ۺi;;Y~t8}}/EaY#-JT:@@@@@@@@@ [ 33S}YT/Wț3o/U/qlD@TvP}gdKx )iм{3AuO*C@@@@@@@@rM&qqq,94y>H&|67tv @S'PA,obܦY.Ai=@@@@@@@@HNN(,94{wo$IK%Ja(!Z|}|D|"YeAFEbUr[ R4꿯(&tQ{nt[WԅKT:@@@@@@@@@ G@+׬YSBCCÒwqⵛaA&WbN;[ꗝDᣲ|V{q5DfNYf=.Ϫ+ 5cau:ٕz@:"ArFH9aTpk-;nDJj&11$U4 Zc6mSslݕ*ιǝQ\cn?O@T9sx8|fE ~_ON~ߩ}>2(U+7' t'2 v'N(g+RV-]+@@@@@@@@@III/f_zVr w XC/Cx﫥exۜaFMdzC2%$0@A~w]us-uS{y?G1ܭcvU-ߑCrzdkmV֧9Cbq]L?x_}N?K3ϧD%}]l,W4sS¡6ktiQ/Nz^|5*clٵW^+Yk3 ev}ֈ{]~I?စXMO 1n#<"{漧 B rwHFz@@@@@@@@(@bbIXX 2|Ry{7֖Gn^Yaػtaz; J>$t |L8:*{GE'3dNpū!퀿t]yvuymf= qaKW;-ZH߯e>v-ϔ;_"[wJPHymA"V=IJy>wP ՋUCӠ}޿~P+O7o^3        7v%::ZBBBt'~6Ofvӥ ϱT+IFfto\pV]q׬! 5ȊeGlo;AuZvt5ٰ} Α;o }(Kn6>fҸVl޹G>yL zt@ؚR&-]ޝt W I5?t6uE&ueWs۸cXO4g7A_;ɀߕ,?*w2\]~c7"B{n cp~(k5^MO1. g[_~|Pn4پ}~#""r{nټyTp~sᎌ8u'9ݻW9mbŊ%AAA쾆=jΡo=>|XG+χ]#ׯ7;묜q8 ;vL_R%5cy=huʕ+KLL|څ        \`ԩognЧ&̔E7#|Td/kɟ/+ֹs]x䖫FO7+]:*^ߴNM޷ ZlݝjR9<;t2U*{o ~4Le) 9v<]n|jnp4kt@%27;VW?kתZ=]:g#Yl)VZrVZg?-w>, _ n{#}`v tT/Z)RN磏>?lҢE {Dͧ9 Yfr-$ֻ>~õi[o =(_3gank_9|7p [qĈ&X^zu>|&3Ϙޟ|I{E+C7|>w``52m4!i\ꡏ… ? 6ksNǏa8@@@@@@@@S" G#SoG04a/kgY n\V]yY^.k/ni/[o~SF?kQzvl-ڵ1_;Z;I(x2Wn&:2!E]az k{ݪ꺊!0!JOQ E69s O>l ȑ#eժUyN^zr~s?}í6mڸYx3-6ЪU+͛vk?/6ljժO?mv{+>n86׮]~AtZCG7onC;˗/ѣGy]t4h4nm?gk=zmۺmg@@@@@@@@0b\\bTTMIr=b +7v ֳmu>nLGkQJiݤluf8Mqp+w2kb~qjy1qܷҹM3e^·A{{N3D: @ L\xlK[vJnb6yx^At]ѭo#i#kW[wVNyySӜn޼Y+mf}?,zHHoРJZU\[*UDZ׶vZyD: e7i|ʕ+믿6б:tnݺi״T׃yg*kVZZh:uuiym^xA[ʋ/(G1ձcGs]zB/5?d6]w%ִiS;M_        G 11QD!G!ϽajyiZN9eеCdʜeٕ*u{n'TT+E2᳹9Qڶ8^:Z\[mhՙ f='Ob ]4'Oݞ=&wW\(].jagurW~riTeonnP~VwSa(/ =qj+ykܴ]*I;oDCԄv5^s(ՋUc kpzƌ2wn{,&>l0fx˖-ver]Cu0={UĎfyԩSoQ.k7l0m&حzK+Bӷ~i@^V]C)Sm'+ްaCBP6 ?cRrekyt^ufV_hw]ڷw߬Vx /={ǝ2e&U䵚< @@@@@@@@| $%%②AP=۷anwT=W>KDrwo4Yo#ӝc| Tx4>u-vjc/[fUͭ]=NLuB^1By6ky޽{~ZZ|fÚVjZ^߽{jڶm&']G@@@@@@@^2^d]P+%,X"cg~'YV$sW*ϫ]{eЫ}WJڽ7JP@{Ƚ#3@1wjT/2+8>wX)v(Zi6qVkӤ  ]ijb6kרo[{9ٸqTP5^l2y7 3OHttL@@@@@@@@| hȄTOOO3]K`o||p BZI<3>%a̐CVsY1mn&#vaP2e:IVt\(({^ՙ f ##L@1=#Ts?|S}Hzq" %>ٚQHﳳ+3m(‚~Fg'8_2J2vmm"3R=rIR+XdUn.uCIw;xIjkԨ!O=3F-ZdֵoTTw /Ⱥuw߰av޵kWm2|߶m~{е*?SFe]tNr>gVk޽ץ͵KfS\j/L[| [cTǰ0\OTb#        @9HLL4@?!^,|kt4Jn$Ce@IDATE Nmag1 jA3Sս2agѱ3NY Dz[7#?-[czΓu[o}u]ۚX@(n_p\pۺ.̚Ll٭{sZ 3q<=C~}Yu#B [AXIPHe8$;dذa⹯ k5r }wfQC둑֦b=}|Ex~y~^xX        HNNX Yꅿn&>^6:ySkiײ c&yrG{^%7m/{,]EZ g1>iY?l- 5P:ՋUC tN*eТyrwس駟dfҲeK{[I;=c{nSU|ӣ5c /!CH_uZ7<~Sս8AY&NhΫU|!UN3ĺz^ l@@@@@@@@N-A0SXz1Vs ֳDFIlJR1,z1.i V/+Kp`<ǻnjv /<$u }OA 3;;S1}TowTpcU,~ _@?ȴsoHJ5(\ՋUcV,eСroyp֭[E C=$UVu;Vͺnݺ%\bcǎ+W:ߟUJ\\~~|'f5$wޑ~۴i#z["34>j(sݮ/>}ȹkw%?9U||Y_+"W6\cƌE^z\oV߻wȋ/hm={? Һuk A@@@@@@@(ZQf͚&9㾕, $8 ^&@PnHTf͒ٳg=5xM&VbE9Mo@jip瞓ӧuMŋMZ / ִiSiҤ _^C̶ݻKM_-\Pƍg5}W ?#ϗ?[ׯoz˜J*OUwa˚{-QFD׀}Ӯ];j]]UW]%;wA@@@@@@@(&j&LP|ܷR%ARD Hw߬Տ9"=h[[߾}UV˵jZ\[UuÇ_-[䵛h]]tۘuɫ*ϫyJߒ[oɲe72@NG]׊8RJ-Cd߾}zժU==HۻwlZ0M:p"/>EC*UT]$ W-& ^#@PknA@@@@@@@@/HNNX !,g\@@@x@@@@@@@@[@#'Nh 1 @@T牀        /kI͚5%00 $[@@*@@@@@@@@@ HLLx !^@@*@@@@@@@@@̔TT 7[@@9@@@@@@@@@OӦM8 AEuOHC@\jG@@@@@@@@NHNN(,'@p          [@+׬YSBCCe@@AuO*C@@@@@@@@r$>>^JzV+{ @@]',!        %..N¨e@@AuO*C@@@@@@@@v%::ZBBB@@ #@P0JA@@@@@@@@Y %%CCC%33Sz7\@@@x@@@@@@@@_`ԩ/Tw8T2؊ @K@@@@@@@@(VE~1E@"^t3         xi$..N{+GFFzA@W`߾} {s ++KСCrAxq83D8%88X>      DIHH@!\ 2꧌XӖ-[ѣ' @9@@@@@@@T$%%ꡡAPT sL@o T.+VcǎjUu!*T '4 y0;@A@}:rp~Y]zug׮kD@@@@@@@JJDEEor%  p BܓpK!u iOk~4o~i @ff k`]4u}+m֤I*G@@@@@@$ccc I  pZ T۟&W6Ԑԃ ս13@tT*>|L[:u$""te@@@@@@@ L6MLP] N:_/MױsN3HosA@Xw|}|r9zPR׊VH]Y!@^Au?i4ӨQ#q8#׌      P 11QMIT/7)# @ T/]žmϞ=apkHza Pխ:NʕK{@@@@@@(@rrƚ"^,FvB@Iw5kȑ#o~4gPQ;BNwǏ SN#      @9HJJ2A06JP8 e'@P;ŋŪ<}||쐺U n! PuÇo iڴiYO#      Њ5k֔"^(5! i-@P;oof&vQ  Y!(LPzm][l,"      )hꡡfTTĬ@@{pT?~Tw  [mzս^23@@@@@@pHJJXѠ:mXB@< TR+ -`  ^ 4vA@@@@@@r!A 0zmL@RzY}n+!~~~n}}}:}>>>y- @zzzk>ꏵ]_QQn A@@@@@@ h %"eg@8{]&Y!/`5nԭG۱@@@@@@W@[hrrǛ ! T;>,!>1K@@@@@@(խ~~~ՋN  p T;NP; B_z>lE@@@@@@+(k!^~#3G@R ^E8T7֣) ((!cnlL"      'Q@[%..ND[ ays4>y @@AAuk~JA;z       +AAAp8đl4;wDFFzӴ  ս[Au QQ;BN7m۶ [AtrzzzV3E@@@@@@ h$]111j.z\ b'7gn[4h g=@RxGDcǎ@&       HLLZjIpp%  ` deeIz1ϧD5p~5bT/Z)rF33رI\\ԩSm/녫Z;&_۷k(NZ5ߑF,#|fUnowl t@@@@@@@?&Yx 2Y _{Gm y+CnX(Ayh+_k~4P?l=Zu8jժ%!!5svP_~>mQ7_T388`>(dgמѣGJ Tw8fז-[>        }f͚E 5CPnB@S<(r;@zy‚dՖ#7u8S-NhΪWi3HT;<222dʕfO}R4Ӹqcʖ-[ȑ#f}DDNҝU4Ջ=C%=n%6ͤgǜj: "|ՌKCtJ4/LPݓJٯs >Z}k~P~;u։2vQٳ߿_֭+oafÇe׮]r1RDFFO湃 1ݻW#!!!RjUH.CܺW]u9Onݤ_~n[(54 @lbe]fk… @ vڦr챮:>.":t=MA@@@@@@cIIIodz7z@lF* fek#4#s2ʠ[Ru>ٱggd:_ #%J 6h^ .^Ե:%+h T0`ݨQ#}[n7xT תZ1PO8`!VT/R 9UAuP#;v0騨(4h Agg2p b6 ~Zm]kpݪm+Uz- w?o߾x];aS]UV ]ĸO @95nݺfnfKfS^CֳgO;a'x¬:t\|ŦoR k{E?$'+!u*u~HkvmZ5] \Cut=6}(?Ͻb       P4Tע~F wyeӮG iR=H4$_ݷZd<ݷT ˩T׊~>&Th t~xD8wROҫHS02A]}'˶=RXuOg>*:?D#u7T&[avm%I z!`TVtG_k׮-Jڵk'۷s=mergn΅Yf&L`Hhp[+lkgmҝ Mh^xsW/rS\Z_6DzTkK.Zmiiif?6;SVZe*K fY{9ium7t Uc kwmZQ=ZQ}׊ݻw7۴i#Æ 3ܿkՊZ^r7 ે>/ {qse( 뿧ksTBf      ԩS%>>|&L8YA˓ggZI\܄$s/tݢo9*m?7nU,V|:נ=ى 6A@}<ݷd~ǥ pjX%Sٻԍn_KW\#g0˹ꑡ&_;=^;%ہX@8Tߕz@9Mװ Rsv^Фs}{7vfuArx=&U/&},9Y͵zIYGQ;խP/lP]akPaÆ2rHeѪZ[SO=%[+Wt CksOѣrWl6.ʕ+KRR]:®oi=,,*;@oV8뱴Zz^ͺ@*mٲe+t3((u 4m]A TT?EMm۶ ZI5~=3y~3^A+~]w{hz믿{1':u6UKو^))n]OWF&      M&qqq&g\Wz7ʌFҽ9z<]z=;Q22͚4svq9t<_:ij4pV݊;a@ >I&-w7JpBSktmLq~ˇ;CmJ뽜Md=׵ Ϊko:{W޳*tT/Z)bTV(6>`ToԨQAu=͛ZQ\R֠V?*Tʏ= WR%ߠ~huVw3uY/j~~/_|aipצl:_f6ժU35nu+L_] "g襤T>Ǡ%K UQ]y 75 r7oO  Nca8g6P#qҫW/3Au- @@@@@@@%!!A0f?pNVP}-̔OU^lui%?_1+6n''r[עaWoǜߨ_궮A dңZڟG@el9NZqh!k<K0JPΏ6{F&ɎPA=K|'?-o^sm$cf~',,fV1=ΠW̒kE5kHÆ 7Y:ĉsO?#FHVN_wM7ɞ={/'xөS'ԐV>p 8Ponh(cǎxS5;vw(]W}ڸq$99N[oڴkԧ7UյN64@#PA{O΋O ;~}ڔ鳭mOa`P'8+TfPCW?lP]Uq}EBC'\K.$6[fOʻg}rxVV[>Z=cW~a\qO<U[P6m +XPonQ9/^UKW===JKK]5wM7dO?{0W-?`]v5*&Mryf]tqg}noV6Ʈ_~|rSSA`'lsq`P]UT)=^]t*N=T7L>ݍ6DoZ/ p ヒ =BO~ ^tzg@P=.-3@@@@@@@ zAAAd漡clEﺤu.>81깷7?:Z]{G'VZm_Ϙc i- .{4:϶7>jNx!쏇i{E'R &?> C.V3n(+VݲpH|@gw?FNvvp5ܮ'κq[ k}NTOU~֯z*޾)pٳ_6UVp6ȽWγ~WhO>֩S'G5?GvrK;Cwަ믿 Zյ^k֭~* VUP]=n;MvWj59p ;Zn\hS駟u `t=]nzN;ze~w]~޼y&L0݌VS?>lQGezs po &'.}'&jb_㪢y뮻[o{j ~n:ȠЇ5݄^u|SOU:[omzB/ چ^W@@@@@@hcƌbtUke?b{Ya.|*Y*sF锓mw^W[_t9pѽ{_ {y{"1.91fӝs~ḽ{lbf OmSoD)ƒk?wP~ 4 }Jםqmt~ߺEEs#7P=e೎ ;G7 WW)[0^>JP:ju Ǜa=;3mʔ)q+d :vwɓ'Mk1c>ocKKK'0UM}Wenxئ _0GGnQ{)t?gU==6dxvoҪl \~⺂fU-ɱ-x&'NߦNj 阪n4P:tmnZ>~%JnA]G:{4:#<]?6c0_@7{w3'5lu&D> (2@@@@@@r/yMVV+GPZn>6B> ?ju_A?1ϿW1ֹM1'D%lH3WxܖE*O6lxrib?D1?mykҿ@hp1l?.R?roa'ҼT,XκiW]_􇄻x㓩v:qn_&}7hc{lo_do~:=!$`P]k}pߩLTOExx vUa|֬YbΝ]`DS{ܹ`SequicoK,q~{견fΜi.ПSMWXa?Cx+|tCz&dZu7 @ 4Wc2|L+?􄒱?/tR V=m۶u!tH!uqp8 Bf̘aO|P=J+=Uz 8m@@@@@@+XTW s\|eZ >7>齩쌹];9YIop2`.+t\kդ |Xes/t.߅mS:ٚnUTWp @C CzzpA!      yyӮQQl -Jz`P]!*ToH@& յ[ڕ"      JFbp'CE? ԱA:}P]%^MD6Cwd+Vp}a꽏@@@@@@HU@F\ʲt#"# @ 8zz Xzb"      @Kʬ2#A4Ms(5 ԧANX>z֭MںY@Xf5߿_|f+      Ծyyy6==݅҃ؠzVܝ)U@U=.LULAu.vmk @@@@@@+%%V\\lّꑠAf  |7α:u-X222R'8NJ^!H6l2[buz        $T/,,tYWT2gvԩSc}A@,@Pq?l~:tX/$-r& @%QEu_U}…* tҥ@@@@@@@oFWxzʄl -Qzu>3Wq6+򸠜S8=_ºau/+ @}UUP}ɒ%zbH^>c       @D*D*gggLc)k  @s xGVg+;%T3@9 oDAu,XNgϞm4@@@@@@@YݭCVNPD@ `IXAuhEEEAP/ u$@P`-        4x ,++,"kLA_@@@@@@@@@@@P$]A|k׮[zK@@'@P @@@@@@@@H,0fdM,;;ۭHP=K@@*5;v        @ t֭VvzqqeeeYVzK8_@HYht6f@@@@@@@@F"@>Q^^n=ZFFAS% $-i9W@@@@@@@@HE`رVTTdٖFETX@ZA95        $/Xnnu***'Oǚ  Rԑ@@@@@@@@@ YUT/,,vQQ=Y4C@-@Pe?g        U 7Ί-##í)^QfAH  >IΉ@@@@@@@@@ 3Ɗ}TTog TOEu@@@@@@@@@ v>hyyyCP]/ TOz @@@@@@@@Z]P]vV^^nizEc:}`i4  H?p         FmŦzZZA\,E@s         U 999իb9  *s         ƎkEEEe[zb." չ@@@@@@@@@ƌc=zLkժAX PQk@@@@@@@@H,0n8WQ]vfꉹX PQk@@@@@@@@J`񖛛k999TT   u        $PEꉙX *@PW ϟСCJ,A***l/|h@z۪U,333m[LX7sl $      @رcG.zjK*bWjRc# @<|Oq[|W3=\2euFx {7쫯+WnC0DZ9p-9jkcMfguI'T#@@@@@@hcƌbWM6՛ǰr  PRf>CNAܶ\P}6~:r)'ve;R Poݎ1zK/M+~G׫!#&\)5\c=X%wJ& gǪƺα6/O< 駟ng}v]7F@@@@@@ <YYY#՛Pq@/%q99sfFжݶaAdw|]wBjw 8MaTm#pUf׿հ/\g˖-:0233]/7kylr2}43gtAn um{a؆$ ʁky'ML2c]WXcMP/hv      lƍ۷wy v91@-%Y0a-X` AΖ[nid\o{Y֭mvY-fSefmֆ^]hON;d;w'QpA+Pehcꫯ%\✎ dL @aF"uDM>uem\Q[ou:7tڙ 3H#@}uxkAQ@@@@@@3f kέDP=܊%   ._msε^zYǎC!]t[;B[jw]7m45k򞟟n3f̰V^moC6mbѢEn^ZZĮs_dnnZ^l>#|;޽{.C߫3gth㟴:V\\]v[۝wU>;;;!RXV\idNxun:G5]Zk!+++IfX7qTսSN} 6Xok 222m۶뭣9m/_I}~u]i uvPŏTx}O4ɍ*kL{]fvLW~6N{c}6=@o®mϹstNU@' /HUs^8xL ~c?Zɦ|=UDIwsώ6x~|/=#\mgFw}׿b7J?q_ dO?[WManLʂ lȐ!nZc^{:b-ca^$~;9)žᄏ]tEf?ȑn}}:]u<"R\u#Fs [>c^o߾zu?+?7՞yuv?o#8nǮgo9"7c/ ,pcsEoj >SMz433q>v]uU~W#<+߷o2?4X=wI#o@M7[nnۇ^.Ӵzz      49B)FP !F@ ^5?^u wq0³]w~536Л~{#o ]e+L?) .z.su܇zU+(tUb$}`([_}kܹ5/ ||]>(`c%TW`:6XK7TTWꫯv|(ݟWpl jQ|P]h[fXoU?Ц辺SN9UF @߉W^yŽM>,1Dv k_wk[x&ץ:USd>4]UP=v~,ݦcVmÚb-?ꨣ|U5'{#7]=g@;qu3ܠK}\eCAm~7߸g6UU+Mko5L?zp}l݇jUZZWu#pX׀A~߸1|_YT_4^ +ϖ+Юj;Cקo>wŅu]7|U47Ufy[M>G|\lV{*r]-ZҵC~Tjnjj|huq@#/5}w»^zkn*{kt~خYZnmPq6oJP]߅=/PWY[0y쪶jv;V-Q;w螤޺hn?\ŋW]})? &` kkmkr-& 5!;]cp-us֭[7w3~'i);U};sO&+;;/@@@@@@&%kUAD}Mj, 4AP1kTWWUS}q>#V޽{E:U=Cz O~m4 i 5*VU_.h^s\POz M>,7o[ީUVvj/~7;^i2w ʮ\4V ++kގ+C:С?>sajzH?/}.X |H[IW]VVؚy}o_in[<GW kD7oՃL|t5_弼l|tqXO>SN9ŭ \F7oguzsaxRXVPSjUMP`N=zs^U`SC 3*C~z2e)Фj2;\/AM7=/AaAE&歩e*Y 15QH%?S8p= j]TYUboϠnHO]WMO(PpW}MעnLPb5uv$C9MC讧 kح6TuW2U Z2eض~~!mmw[M?^ /5MtI # `7H%^:m׿w}z ;ԭ򗿘>۾i*q;Rc[-^w}0ϝۅ^ho{¯ϧ녽V5.kz-& X6r'~7Ş}~'i"6[7$h5lA      R@fLPQB@&@PHnP]_ڷoA>s0`࣪[r瞦W5tpWU2H5XV!H!`^_WiCfvnUVe e{ѪŪޫBjqQTUÚXk+샪+֒ 2S}]ִ5_X7h*> yUWjn_|h|U=Y7({+ᄈ\{+[¾'OU+my ;v{)uPPPnp uitvcYﶚ~6M0()um . qd8tnPVXaC qѵob58_aG3VQSN /c⻾}tѭ[7{ꩧ^c3#XUαb;} ]S9bOk[}&0= #D2@@@@@@$Wq,=] 7\@@m8}vj>luh56ӎJJJ*U<in;Wm\Tl^{ -j_jaX嗵+D~* Jdmڴi٪`(;E]d[++XjjUKB?}m;fmɄykjJvrL@/_UWVeSO=&Md'tn6wҹʵ_VA9scjaפKuc~RΝ;a!D_7xB q]>BZ2e,}仭Aה/]^]$Tj }]Er *tnZFߏb+'=㯿DN'Yf ͻ1?>C;3ذv̪M4~sT׍0 FL5na矏VǏ=w]3r1cFtVZYϞ=mvp7; @@@@@@<`*򖕕8EU4&֘F  IӻT 2ϼAuCUUvԩ]mۺ**LӺ 9To\oMaI|ܿCwq.ŕh%#FBz~?#VXXXi뮻.ZZaUW 6>h:hJS|_RU{UURםvpe Fvanת+k[7Cƍgmz)8Z0Tފ>kLZXSh_~w@{]>q '2}n O4l$Z/K^^Sx)Ν}~U ˵qM.M$ow}*+nVSN!NU}S0zȐ!m`(/> .TS%ZUϫ s9`j#^STN&ǻ Ҝ{*+.v%|7(છ-M7Qi_G}]+~nPUU5UjUk~ 8->cW9kD`>c;ܮcǩk㸺0 ֺWU_'x}.H4?pjZN2_XP]۫ t3  >*X~M.bSH3ख+CmkjJVV{U>XZ!HUg^j +O {l㠐9`6ի |vN]evgnnЯ+Ԝn}HW TW`=^{kq8=#tm\)^F1(EUGۿ/X+~-z qU=g={ڭjs] >ES7wzn_ݟ^2([jR8}.ڕ6\&XαbX븺@ui=(y {*3i$[}{0@@@@@@.Eqq+ZתU+M}@? ԽA7#>}$.)d+C=d [0QMSw}F+G7{ٸ} Aj NC*Au%h„ ~7ךZҟALva6c ;_v UkS_mz߿)l+㪢*[ժdܺuk޽[_?AX}fFiO=Ҽ)b{!qͻKN.vӺU_^j 'ujP=tLCajUWK|EU8 ~ G7^7=wfr-;ͯf(\ u)z:G]/oޯ^~ha2_꺁Hߧjo| [*ammSXks鵘hhnpN:$hsW|5="33M{Pp=@@@@@@hwM MO&G# @TZ=Hc :dV б2vnݪPH6~մ CW_})h"V]u%A w}wS-\Wx1XV=U4`'/0` ?'7;zU`mL}5U7ڵ?jjJ1C7,^ح`c !>`Ȑ! ɓ'@DULM7$ 6̽=O_`GalĽިno~Sim'#5]/mֽ!z2ץX#,u0D 1¦ /zƒZNM+MԴ>/~l5/ Qx6/`+Y=ko} FvmOXڟa!n-MKT J _`dMP@vĉk;glX8okmv5oֱcG{0  箱oܓQXZ |M3Gthr^@@@@@@hj DyI"hZјN Xc  'M:h,AiӦٱT]v6dW5[7x-ݻ FWb?:0TSh\U]Y2e[С Cw pBÊZCu3"귎~*·s=j_|agy 뽂 +*k^{ (CUAum#ZϞ=]X?//g7O?jbj xW+UllܸqL}Sߗ^zR8/Ϡj]wv][|.WZ座 ynZc +?@/2^QQ֮;}!]^O {\`\䂚^dK>a#,gXP]5Uu- [%_݅ kj C[mV ) cǏ7_]6>~}r 7UҥK`Ix\zz Q VFֲ` + `){gYu,TSqިB>}'矿ޚʫ[[G33zеpfnPSd]s k]FN8Kݴ~k<38#\Փ.vtd7QP]U|y)djj ?+XUUX-6ݾ}{N8-?낥 1bzf!>`Wu]wƶ`8W|5-x {G]w/Xj}Tv?UQٛB>ۑZ&YfnJ5jTtUu[9?CtGq&-Z>r״orիĬkķcF47\>c\%~GoV t9Ә7xl}T]ZuK[qM7PTR.>Dmlm=چ VngAߵ э0DW zZص8uH 2#?ISsq_Z UO9s}U|Z V #ٖX':G\ɌݍezGlH_7(Dd4~\}t!P3w\? =C_A׈C)~z"      TFF &Tl<՛O@h0 F**Жo zVSMBUV5sW-6ग़GxLoWH[npm][x kav4_̙n E[00`uM&֭['}x]&|v}$?~ӘΟ?ߍ\\2}: uܚ9m[`Dت~_< <ؽ馛Vk]]K,1rss{Z}/Jn<R%\i@@@@@@+; A}[oN0yd{3o߾6l0M@@@@@@@Jeee.^^^NEJ:A@T¬)@PE{?i~`xW-X ao4heff&\       2aEEEӸ+y9B5 4:{/=[notxG쮻r[wyx@\?/^lmtMqa&T-/nM>U7V]vuUwm7;ck       @(5UTζ[QzF9q@AF7$t@P`ʕ6k,kylPGb       МJF‚ʲ֭ZToN˹  @TW        G`DIYVfTo>˙  @ T;[        C`diD*k֬zV@Rz]o@@@@@@@@heee=7ײ՛Ðr  PZ#        @S(9UTwA4*7  Pޘ#         @PPr"WYCPi'G@ ^@@@@@@@@+*,Lkݦ A<@Gz8s@@@@@@@@hoYYYFP%=G@ ^_@@@@@@@@H}V^^NP$F@ ^ @@@@@@@@*XNNUTTToH@@>ק6B@@@@@@@@(0 HZ1ٳ]wμyLc}A@,@P>        I TE{Gɯηw]=zf/޽v^tg];ͭ4Ͽ9x;-[zmy̎]QtEKWY/z @ TOB@@@@@@@@@FXazv^pdEW{mS kw[.Si VUP]Unֽ˯EvѰw.,6^QaD'֔Wأ|k+Wg3 @ "D@@@@@@@@j TDȣF\ΦzU^evDŽ3PUsU7헅+k_o{mۦvokQOD׍ lOnyHнonֹCxȧ΋ GLVuY 4;nH9!@@@@@@@@e2TωTT///Hz=RGٳgΜy7RvnĆ]x}{4y7}o"6$?fFW GL,Z.`Et Q &@H(@P=! @@@@@@@@@>bYNNիaZ|ԳSmKVz%xVqWlk#еS ot}M)?GT:}a"'6g޲TEo׿-^@#@P uhuo 4Ygc        Ԃ-//ٻ(nz R@El\X{AE(R)vT"(((ދW@Dzo;n6$@6gΜ9s3yB/7LMtr]MOG9>/4 TY5^NAP=P6 E T/ڦҔ)SI:հa2%8_}Oy6.ZwWmNRzf,@@@@@@@@@ffիxy^QT6R|MlLi̿5]JrKc>]-qsIƠA}]T_:n*T7=7])4䝟GP=@ ^$MD6l6nܨ5kꦛn*њ֮]ݻs.2jժD<[֌6c"wJk6t>w4 4uM8O:0xaN{0S+iww:q1Q_1Kw?7Sy͵&_16 AȾ]vՆ Tvm=%ZggSsKܥEnޞ8@@@@@@@@㕒$* x۩i_[~*4'k/ciET7/?;Mjtޛ,҇_.sB";kf-E @FzdH K/v?/*z3rzB@@@@@@@@zjj*AפXD{x_7EfȖ;^wxȑӾSC\NmOAXgCjcS7oUǾ_jgr6. @ ^,OzSHWd^˲5JZ^}ȧuw&+^ @@@@@@@@H3fիgyyy8[$-pv9wȌeȺz:ÝRK93ަf.קV 8/=,UB]l]=$5={1s5wi1>#o毵}G9i@ӂ35ߊ1@J}[&˗kӦMZԩD]Vݻwo.SVJfͧ9RJ=98'>]/'&YD @@@@@@@@HTFFMP7ZXJVڑMrdVj*%/d<, E):ʣsrNnGIa, g)>eM>]&;O͚5S^lwʕ+d5nXþ/ّ]Ճaљ/rSTݝBow^&81        8q)55U NFAGϕ@@ T;W\PƏ_HOOa՗.]>}c+WV߾}U\z!|nn>=ƽg i$M6-h|NӦMաC{ժUٳݯU/Փ wYC=?^z%c*s=:/]T}}+WV߾}4&pTo3AύͧǸ~0O}?sMcr'A        @AAFRRR !~X _؄"O 0޽{w[|ԩv&n ݺuSnnLm۶2e O> UTѕW^t-_\cƌю;y ~W#͛5qD-[?m?xŊ߿l/X'pmϝ;W|$SsΪ|u3z36ƣTo=tAF vӰ[ tPM?Au       L>O#GRzZ|!~0`  u_T7rS=nѢڴi^E4e;3PfsL>G}dns9T7OvEȕֵy_t}QuQ֭[m|X7U^?`w۵k /Ⱦ{gg}nF}m<ڣG??~_%VvY}-xE@@@@@@@&T7Mh   \լAu3ʕ+ջwo6Og>#n8ֳvZf |ToԨ:u4nLf͚6<41͚+W{=lB7nT?6LulwS>p3׬Yc7UAVKTo{F:N<6>|zm@@@@@@@@`6|-h=T?X*@ |s؞oV9Ω\|@SG͚>s7.Fz'Ӛ{TҥKeܹ~z?wyl;0޲eKnƍ8jT{.&~Zi4љ܎GѬ>w?#CMG@@@@@@@FJBBS\# .X Xo_yi'C^R8@B ز0hu*ME̹pJEGyu(Rz~ $JT7+ܼyz)m߾.؄ė-[?W 7[Jdx6v ؛ -## z5W:T/՟<ݮ֥ES˧3sTLo{W6uM9OϾk|(Ap.!       YDG:u*))ɾ%>'y EJ8Ӿ?c}5W;qLT&w_@"Z`-1rCtpP߾Yz^ؼi#wU2O=p']a_z~ T9}*̙_.899Y'tKT>|YgM66n;&޹sg{ [n#C@@@@@@@*0'c1&:՝TT/e椠>\>o_|L2^}~SWNKT/DB p fh9'T$CFz~T9}{ 1B_uEM݄cbb+>IhlfҰalρ [JJZW" 赛cP3tH?4![/kAuņ       l&'z 0]7BMJyX};#w]" oٷqvV?NrK(kм[3Ap*s{a^ziAݺu͇gyFիWwǚm߁ k5/"]uULc۷6l`2quJg֒%Kti٧U݃a%} pV1.̙yzfB^ct!j>        P|>=Z&GP747/_7?=T;s zK"s  Y69ȔzuA}%)kм[/Ap*ӷ7Au_U ph3!Dgu8NkOӁ ZJӎ;쵛4iFRJ6T'hӦM\k]5doÛyBĻ?~qAu3)^<64[Yl9iW{ @@@@@@@@ w*:x^7sb]6#EG׭e mg昹Fx-^ZeىG^YRrV٨ J?SZew @8ANӌ꜓څyF+Q?nus^~8۠yY/j] S O4IӦMsT_lA7ׯoT7Zx ]'M_vGOM>]'NgϞJIIqCET7=˫?>[7tz7&#       QTvmU\YNuSQrS%@ `}FM7?f*'& L?W߿ـw^CeNפAz:tS m޾RGhi'3 ѾNiaBV]^P|7JO\'8mrX@IDATVXhzz$%~R==}+kϵܾ;/?Olo20Ωm{vhyfcϳz}@(p'x-4i9k|UI9ϫ)jyL')v[]yyj<TZծcbbuͶ9ձcǠ; v:hoӚ7ҥG򜐺/t"%N},A Ny @@@@@@@@ >bRSSDEWS1gp ,]tj#|?7+iT:BӖGP,𪕴vB1Nٻ ~6=;EȔzJsFoAX'goRX3׫u@v ޶Do|{}p+\D3Mn^z3{W_ N9Vw??>tXd6ySvd鑗kMakVE׬Ce=?E^ dC0֭[gC5kִaHx۷o׆ e=]b~ޠYKTZT%Ow2RVo}JQն+5yN9, jv\;t{V:NPI:٩~XGPeFW54ޞV0;ow:ģɼ7y=^]~I:~]-_^fꍛ ӻh -h}SaD_ FkKc?F>ey6oH>_>Y?vժgcS`{Y4z~%!^B0WX\̏=T/;&F-OARNi        *0lp9MECP}oSaqSIw*کdi_n(mP?z%:1T7ZI*hΚ}{ j>jVU/[5}ƭpLݿhfpAXybذOn'7tjLO]ta4@C] 7lQ#Tk7-:zKnׂkl_aS*Avz;i)K)RyVjʜ]$eMe1K⾚y@@@@@@@@"Ad=Z)))JLL߼Mfy]qӗWPm42rBL~SM%߳ ݮO;^\q 7>2U[Nn{5 >V)I^sN8*Bg@ X`?ex:<)}g1UMtu2H܇_+V+J PN'y |wR4S*@1mV2;_ӟ d*fqW[ݣM ';!gK3%        DQlP=ɩ7ifk/ݡ]n<(wїkUv?>&F#xy՝b]J4 =C}`][7J>{mw;\k6mR;O#oHKSU~#0TYSܱ.NkUKNqR0~ܑ:zSh#|tmгbBeUro0Ҫ2  7v!3&w>[@@@@@@@@B SzzcdZw S zݶinߡ*I @`=\<7_Py~~Vh״Y?+߬:Ws6~S֍zYFIK*x@@@@@@@@8 t%CPoJol|Kc?FڿS3ڹj7ޣ>4M)~%teܘE\w9_-87a3}f f-f۠NjM[9jW(wLw:4k}  Ϡ;a^Ut]̶YNMkb}2k^9M&Ao/\K i         p9RNEdSQ;zw!rc:u;`}LZmFN|6Ug_m_eQCRuC*і%wzVj|T}>E2a ۠oP5/0n ub=z} w?4n{ @3nIf{k %P1鵵yپ='wm/%6znVv+9+4|͜f-!6V=_ձT7A??, LLTt]nsrٷmg{njUl1yrTu^ۓ "A`hŖש|73?i|>qXbO|0Oп^`ǛU);^U3HKZ4o`P(A`z         #lEuTwǞg$H tk7eNcCU9+7^LW_pvf ֬ujgN IeS[딆v,Au3 }#4̏g6v*ŸtdoYN\9! O=^w=߆C ^࿿>̨s{Ss4vtO Y왦:-O\%idDr Zbu$%o t=T/a/d/@@@@@@@@@\LP===]INEuSzܣ2ٻr5-_G_ _ëVǩ,/7S-TߴubcUf5*K`B"X| [-)jz~I.FP$ZE@@@@@@@@CQ`ȑSl昊o@J$@PD\ > S񳐥X        U` שJ*9}TT/+(# /@PǼ 8_#Pf&T:_K3        ^75UIIINz AzEKFtɓ qƑN|c~_Sv^ &-;ܫ6'GQQnh=`M@@@@@@@@6|RzS0r6`s/X  IMxw5}tdOT0`{]` K/akxW_09S"       szm(!!A111"ϙ@6W{ТxA}jP g;ԯ~5K,[4՗|Z)#MW+        @ |>5Jiiwz6V -@P_ܫ=zN;4͞=[jҤ:vv۷+;;[*zAlٲEyyy2dV\xӞn5VTEu˗Wjj^U|ߺuVZM6'OkԨ#8^'܏7,@ t3ɓ'kԩvc=f?{NfW`UzUxgl|5?ީS'pw ?PhPc;#toqqq:uۧI;vhd> ԩv۴ic7c 7㮾j5oܞb?rjذa4>'#  ,#1^z8թ; ȾO/Nqyw)fF!       @ffh -^8;m?~SyZtA^zIsεZCz!|nn>=ƝyAN]         @ ⋦xɯ, Aa,@"Czd܇=b…8p֢E *zGken 1wnQjl;zuq)>>^g֔)SoǛ ڛ@nMs=WGu֮]9sh֬YLwLlAueG}d*ț {oܸnsJTo=tAF 6Ν{KV=[;OPE       Tq)55U x<8HZ7AH@O*#_ŚJ)))oᄈ^zـv;*mP?dz>?C0`} o^gq{4}]}駶Cjڴm/[V7;&TTG_mts<0nBs5jx5j+?~N=TXhT|P/j{iNѬ_|"       .`"&^n]1%w! @ T/[VN7U{O?_-[T֭cq &ls]/]qv̌34zh۾;srrl,j<ToР~a_ԏV^zQCl?j`ɃmψRc?]>ƇT       D@ffׯDT~X Ar{\7|Çqm۶ե^ꞓo۷o aV8Aƍ_}ݺu0?tuc&nf3Qm߿~748jTk/aB跾v_1:~96>~z         @ |>M0Aiii"AHS @"JzDݎBٸqtRf͚[nqGrP_~Zdbbb/T9ra|T.8h]z\:/̑W3zy{lyzm#ŋn||{9[tժUS߾} ħgϞAUϓ5`cf'77W{/iEq?+۝`>8AK⥁7]U"f.Wω)NU=v]UC MLP8!       &`.&_SJAHC@"Nzݒ=Zr_*U :ߙ8qOnwo6~=d͟?ߞ/W9uzqqq|] 7ܠs9'piuVuM999:cTT7Mk7ǺtghByN{bC@@@@@@@*&ST(7u" @ T/?=]yҥ"רQ#uԩS-[޽{ぁ{O| ';v .ޯ_?-Ym,Au7A| |׮]Uvmo~|>_pkѢڴic% _^_~*Wf͚kI9oᠺn:ƅ9S:?OL {,.CMG@@@@@@@"Yl222 #n6@q.|]no^gqFq=zOf߾}UjU}z7m۶믿֏??~5QϞ=}x뭷ھTP:uԠAW =J-[~ТEuj֬Ν;KT7.SVl;P>xؠMe]Χ] @@@@@@@@ 233n+TTĒ@@ G=1+ף>۷+&&F?])S1W\q.;+y=UD[n T7a^{-J*β 4tP͙3';z=?p{ofx J7iD;vt m=[tPݜ,:_;~l};)Ǿna        @ ;c <&%%B[QܵX  "PVvS~SN9y{\yTU7xvNN~m-X@&ߎW_}eN8A[VݺuuڵZJ]|AwN>~ Em4JwsBHSKPsw"        @?~ &CP4 !@P=2^Ś5klʕ+yIg٦»w_of7jΝ2իp ԛ-::zәzZr{4`@^qgbT       D)!T7#6^fdi  p( ^:AC^͗>>PRI9ֵMZm         @ +'%%TR@@ Gai"+vd)2I&Qz%yÉ @@@@@@@@` 3FJHHPTT6# A!@P},ӷ9a)<@zi(nuZ7VK'ԣ>6@@@@@@@@#z)>>^^zŹu@KzysH(pYN`=@;sWuq1%JVRPM$E@@@@@@@]`رzrr a  #r0auOr^ki<@+K7&Ά        PƏ%%%QQ>V !@P<ԹfE0˲QA,z       JPo+@@"@P)։        %0fիW)pZL^vת5@@)@P@js-@@@@@@@@P|| WěȚ@@ T?\ @@@@@@@@*q㔚y<b@88C@@@@@@@@&0vXTT|>AvY/ xޜ+"        @0ҔZ@(5@@@@@@@@@" dffڠzrr]IDXz]NZ^#im}WQ{R(Rĺ]T_Q,  &]QlX(RPH{3 7=(߳3gΙ9Y^B@AuJ"Ϙ1C233^zҤI%HKKӧˮ]/389eҥ+\s:JڰaAk7 dzJRRqܺu=zT〈IXX){Pi7iԨCy^C^auǥKJ֭N?        P&'NZj܇.z EM6 n;]+!r1Gփ< [~Y/#D˶=/]Z3S-[k^4|?j(SI]5}K:udݲpB;waxmkUo X׭[WD+GFF|[I*zmJvZ ͚53k{JFWm6mFOZ\+k^RRRtOWnT?B乾T.       ƌ#VP=444ENܺ|伖T׵=ZJ^>Ar6@ ʠzVVtyq?|Թ{+״gAfT_رc_5 Jⱱfwޑy{ݫ/nP>Nj/(7npyWn5wPsҺuknL>]kӧM6nknKLt=kH[nҰaCBmAu"mīZ4ln7wPUVҥK 4H֯_otmݦN*}޽UVpP6mS'|"vW/NP]O2~x_Pss9}Yhq'C@@@@@@@N8+c5mUX!{;f7<, V?$Ki75[TmꕠzYs]@lNeP}}7Z;6Bw z(NI%mս>wt:O; ܯٿ+sƩ //uHn0cfϞ-&L0{׀ѣGM4S-7AzI=LQA̻[墋.rZ]ڻی3/0]b0izt1޶ڼ]^vmfXq:y۶mj~J]>'Ё       p1Vx zakwPN\P}; `^yξ{@1|ڟ&RItxT"-Ϭ,!A~'lkee͖C`ZU-+EIQRF 㵣zUw妃\]C}رl؞"L*¥fp 8^c; e"p*LKf/i~?;F~ca~Nx[v=G$#3&qU^D 4/@P݅QN77я֡C˝fff wJJhȸa{ 7iDxC_pұcGsLCVצ\套^kך kfT}z@@4mf^c۵k'wAuƮ heww*ZM^[߾}F Od{{ӖWP]Rذai >'w_Y[87.!mO0vl^zq8z'C68̹et!'\v4SޜJ_7zs{#מo7ȤY=rh`[ͪy{ ]zPv'yީ!/tm*yՏedIwi|δ1Du@IDATd!vgkGD91& @) bl>[ es8wP]0} Tvc/Oh Ynh5ÇTg=jիVS[DD运vmm!^@@@@@@@@'&LX RTT/PT&>ʖCh~cUe;d᪽)tljCP`x_~)}sպu:"l_6UTP 8ОAx /<1> ꫯzӝcǎɃ>hZQ}ʔ)ߛvt}K!CrP}ofSMzRY8 ={4m^@@@@@@@@+0~x r4YYYBEAJHy3FPg:#)9Av=Փ+`FF>y+#ns[rU>ǩ{<|II;ysi^?'-'9[MjWK6ؙk壟6ٻcF0_f3 @"P;Iח~lmϪ*=hhuTyչfc1S:mě9AEY] B*E9C23婷0qٝzI,+A⨝9۷[U}套^,WȬYLW.]UVf{ذal23_7y)))ңGg kvB5lmwqo޽4}!y'ѣrg#rUN,iݰ3f! *?__B0{@t0vK:9i16Mٰakذt=+oڴIo~|W`O4yd̮ u֙O=$$x~BAI 6 [Wn>y+V+TםrP]{5 RRΧ}kp_M6oy4zY"##M6k-Zd3>UICOLY|}9s@@@@@@@@&0L!PzԹ4ۡcͪv,2][WnSlZrEug+۝~;~_eWriϷ.~_Z!r+1=xr$4u^/ϼ _+XSF4gՊf+Z<& pR~lJ^o;o=Y3r~n%.2uHBtMitowD¬D?m13ט?ь,3,!&L?ҞnqK ac;$rhnΧk_r*Qz &w]Qf"͈>@T ?\YauwB]Z<* 7:AtԊg7-6u~PdU^?9,XsK:YH16L_IIIyW$8r>3Oͮ59r,]nBZ[P]o z4z-Y<.f4]O)zkzۏrzdյ:!C$5'SV-ʽKTWGyDrj֬t}9}/IEu޴z]        )=f$&&J!^~AAu Q&|ޕ'WOfow?ϩ, Y5g1iz{WX9t|f"o:JhFfGȺHܽ.(^zܭG5\3_.c*/XO2p 4@8A׭}[o^J 9#M$W>w''b't}T/ɟ㮶ݼys VSתڴy=ѣG=룇/_.H[ڵMY+xoذAbz>}9s䧟~2U5zFF7[6m}gMUtLםwi7nh5{}'%\"7|9U꼆ϯ*S=n/DFFڇ/0Ǵ⾆j//:uꘇ({V'.@@@@@@@(SVC5ZRTT/(lP}¸?iهnj jL^x~yE-g(RF<\ٺ'RVjfU 𵧙M;S!;}-Tw76ʲrAIN9ꌿutm#hrHOx T[ 8Ac'|M3ugnWM$G˹[$O;nƹ%oNX/Ջ 7lEY8/JӪ6 {r|`OٳǸWZՄO^G V\)*T0GzQk^{4l/2       2KX )grp%!-&&5'haoZ>Y=WՑkϋ-RN!2s$$۝&o?_yvf˓`V +Xn[vr3^(/Z69} D?z,zhT>o-ߖv6@Dd\vMru hO^)To+3dG+Ͷgz`ypA7.ńc@rr6_ЂzajvP]o۶[)FOc]n@@@@@@@ʣcMEuTJtTm G+p&[UwKYgl֡sl-%!&gdαgUՕ@ٵ?MOKo<oݰt 9+Ou4SQ2E;e+<= ׬n渃W7: !ϑ?/ϕm{s*ɀ4qXu] *α֦M+Ĺavs/ \d՟,XݚK<%=4Vud#曾?gjszZ~z#}bwPs畠zqԘ*?t萩rV-jP]+J&.        P4(aVE +@PwT/`s8Z9ڭ[$5=pVUwQA2 U k};s_IL[/NU+a'Gkfh|6ɸ/:р|(d_ly*1QtQ=[{WT_UC}3^zJ[ Y5nܚxvWyJPbG[@+޽͵!u{]U]UT +       ;cHbB?Aޡ՛ׯ$PB-],ώ^,G3ۑry*Z9}{Kʴ];WgUj+$#͓CG9s;/^\UGfcWzw6*FI;IQ^6@JD[W25\$w\v(ow=˔קX=~>fAo$*,P xzI{h!: !         pZ 7NjԐS̏|;r=<(OjZ-ܣrM߬esw(w լnw{j0oW``*엷.J{6wِ y~kģ﵇ϑ$kZu}UY}ּmh}jG}֕W@r p mdd %^,kxW +Ao*jE9/Kv g1?{]}}eۇגwNT Eb(        c5'V9e]p0NNl _dff.k!+AAR%:8p|NZADzdˮ3u0`c @>G3e#+$8Hjt~Aw'`@@@@@@@@8Q@+׈0&~"=  AuO@@@@@@@@@njV=,wi.Zk  T@@@@@@@@_`VTp*OQ@@ G:          @cƎ$ 2G@@*=        #-{Obcc%$$Dz>`B@T|         y deeɸ%1!AA8 T;@@@@@@@@_@qqq,(  @Eu@@@@@@@@@F#5k֔aq@P*}@.ڬO!       @VV=IHH i@@.@Ps{;,+u87Au_Zs0@@@@@@@@%..NBBBLd[ڹsYDLLkٯ  .@Pt+pBYvyBC=3:S>^)wgIzsHA"5MM?'^0@@@@@@@@h$}ܸqW>|s  T/=Z/UVN:j[@ߛs皮QFk;3K2ca1y\fry@@@@@@@@ =f$%%IUQ]?枠zd @@]zݻ۷OW.+ߋ=ۺu̜9\}R~SxKfP=+3eN}>^on@JIz)ATO [o~#M$aԍWeɞV,JC@@@@@@@(zUQ=44T|||^tBf  &@P|yՏ9"_"##M$''˺u$""BjԨa>fȾ;}sΝ}vrRRۇ=^/<a|jժIJsLSq R?!3ϘZjM8ڨW<Yxp9#sLns_;::ZB& .L CUVO㱭OIIݻ=;\ k;a3W ځ t[+~PVY!?pucFw        E;n$$$:TT/C@@ ^ڶm+ڵ3oF~wk֬\x!|GN}NUqwX>A֭y+Vȷ~5p]V b듣zͳ:T_rkWgKDv}m֭kc~?p_2yd3+6mژm]c``gq0g$\tE揅͛76~wmׇ &˗/7}&^vmL_eٲexpտ SMЧO4_Z }dmAie别a        @F# VEpSz A&ުU+ҥs#2h S ];6l(>GSw}gt݌ѝaq wٌh_~Y22r*v#G4uW^)]w=ͼj8\v1 CBB15ޭ[7g]'v,Y"#F0*-[?ovV*z2$:dݻtKe5l4SOI ̾~J8;w4{ԐO?Q9ޞcAk/>@9?:*sWf٧w^?y        P7aɂRQv E@Xz~ TvZ?l?ҠAkINNի3<5=sL{Lׯo׮W{RPP_~Ǜxoܸ cǎ=a/SL1slZ'pAuLMM]v C׆TfHуZI ?_/ϐ3r p]l~(A&#       ,- *gee  +8@8m﷾믿ӧ}J5܇M5pjx^AuĮֽK͡oQ.R9pyng2tP{nׂ&MLk$22=lkutֿ\'"{zA{/>W_ Ҳɦ-2`5r$1        ExwhILL]QP@@Ĝp Tjo '-%\"7|  hkP[Vkת 7 ]v9;~9Ƚk]whX=Vǎ .7lїNfͤk׮fȋ/(7n@6lת:PVA+_ qO4S]Cw.{̗Aȹ?Germ|z.v@@@@@@@@B L:UrVqr[Qw@@@ T?EELY/"[xҧOsM6r]w_%+:w߾}]y4 u֙k$%%Wo_4̮4h :t0C&xkzzJ%gP3K/ۖ%N<*iVʣ:Ǿ+C^{ۘ_\C@@@@@@@ #0i$SQ=$$DoP XaN  عs _,ח{/^,#G4n%%%ﮔZ\kvi'O,?V4xm eĉO?=={VVA_  w4=.S|=H}̵M`ϯ}ٓz~>C@@@@@@@LI͚5%88XaW%  p2 ;gYCCC^0W;KݺuSO=%{J*W1}tͮk׮mTK/Oo^̙#ƍ34ox~;gϖ &!~' ߾}/ Ϡ !utl̷}ًz@D@@@@@@@‰.  `o LÆ 塇ڷl2S=;;:<)z-Y`nJ۶m;4˗˰a$++l^[7,\p޸qf;((H=^/2`ѰAuuQuI˖-%))5ʘgeO  Ou23s       V@ ;ƚTT/@@ ^NYf"ׯsJjjk媫riРAb4i"gu {-_-JP}׮]ҷo_3WiF4h`*GFFI&ɏ?h+T {~1$7o3_QQQf_=ܧnGGGK֭%>>^+:ozi5M?I=5f/=.i+]ϣ; I4'ׯ{T_        @ZQ]#aaa@UЪOX~A^@PAub QEޔ6m*]v㴒Ey_rM7y.JP]߿ ;:ѵjo)/{GnEt/huuoMWVMV^mf͒>3Ϙi\vP_/T)JK./+;$]@@@@@@@@Z4f͚&! M@@8]w^k5j8ucƌ~T*>| 7ʴiL>kBA6l;Sڶmksի'x 7xVO> r:^(]v ݻwK>}P=^jOgPVxOOO :ѣ˜9s*گF5\# uBKNN6pBsn{j_}/'#GˁW_5wzGkbI;of^O.o'eX!,/g E r>>Ћ        ĉ%))IߟzTA@rT+ᔔ+W,V/LKMM}PzhhhPݧҙ&Uޚٿ=h0Mh(^WX1p\ wm V^ys_}Tωc        @^SLx 1*%E?  ?|+ ǰ]2E>_!fPR}}\Ջy !       ɓMP=""B~Z7p  P(b:mT/:+[$5=[vL>[hK]O:@B|קO̩@@@@@@@@H@+'$$HXXdggT?{n@)@PpiͰ釭g 2eoh?|rTBV @@@@@@@@x'N4Aps+n&,? Xy/X   nTOMWӦM^zlDE+irHlWj  1}^F"       'OxѠ:=hA@ TB/e%a,}V_|}E4\!       L@5k֔ s"*̓  pT? dno)Pφmg        PԩSF"BPQ, @ʗA~@@@@@@@@(_YYY2eIJJ2Au A@(’@@@@@@@@@\ hPݮOP\;,@ʥAr(@@@@@@@@(G'NڵkK@@T/Go KA@+@P7 @@@@@@@@^ ++KM&DPV w5"        @Y L2E%$$D|||'je&[}@(k~?)w#        @yHkԨ!f;@@\T/o@@@@@@@@@r,0qDUUT/oKC@Y_r,먙(5δ>FŷbK M@@@@@@@@@Փ$$$D|}}$@ |uS巨q\^G;E ^4/F#PO*V)4&!       @VV AAAK.??_&aA%9s ׿/53׎ﻡD\qq s}ygΒ5bv~yy"/]7(YV8]kqVAu_Zs0@@@@@@@8]&M$j-|^7~㎽22{*ѠU%ԗ.h.!AClL7$#39[=;KLHg @t=avpAld}5ٴs,]E.iPzԯ?r|+|o$M>} tƌi^R^=iҤIPʬY$..NnF (ҹ݃{\Ym/\P֮]+ҡC/:S>^)wgIzFN/R\OsB;@@@@@@@@)S$66V vig"U1SIumGٺ'\Jt3K2ca1yfryb} @@@@@@@@VTOHHp*{59";]%g֌vX}݇LVZmZ}Tϻe $ӪbzErV#x8Al⻲p{9_i{_K:ۚ {S)?}{} *H=J*-̀ߧOٽ{Y9*>O [Y+3eNʲ"@ΫSY\"       cɓ'KRR*6_"ly ܴCxcG%" ZHjr(,߰]Gh^wKp`W %c. pʠU3䖜f;q YMk4@@@@@@@@ԩSMP=<<\4gc׏t ,bEFu׿rsohAf+-ʪx-;̀} A"*Eէ@IDAT~L'lk%"œcZ[=;eUen{^oLV?V;Fj칃!V3hYؠzq AS4U[5~ P;/y%hk9Rbk ܞ5o͗Eϐ^oT.bWOLqNMGLr/dlVͻC%z/OvͧӸCφo߾&`l26l{s1//#G]Jf9;sL"Zj׮-w} sԩsx„ 2{l{'cƌիWWy___iݺz+u4h`^=x'IVo7qgkc޽9UPAniٲǏuyӳ;v49w\slԨQct-H_DZ;Y_5VP3X{\~NA}_Yw?]N X!V @@@@@@@@K@3/IIIAu-`HP=ow?I>g+\= cI_?W9GH3kʁGdUM|]WonG[kH?)? nZ!iYѯ=v_VYy‚\+\_%:B\YϩB{;.=_& ojU=jUcFS}מ۰f|?+P-wP' 1EVҮq|+Ġ'\liTl޹WTv?`/K?QjUu@Nփ+e[&q@st 4}&S >QD["}v YzN>IsLlUYnrYj{%q"T/")^ؠ,3g4{I&tR>|{ Tе~dXxkZU]rSerAuw~Ĉ`Nԇ b*{UZU~ig:Z=]+wq©5Я']5 wM5jq8%%E  w{~b=HrN?wP]d3n /Оz«T~Xw'wʱ |"C~NP|:@@@@@@@@KFPW')?-^ jiݰ_ -YذNz1譗9*/^{ [!dVͪ4;f=F/O j?.:~?dL%۞~CҬv嚶g]][Vey0ns[֐;:Uw?$6Q4n;_'']oAm": pWgNl?f1ّ(J-(꧅H&R*!B-YBe-Kƾcaf;ܙ;c!^={9yo͝}>^CRP#V6/ 3x]G뛝u7l#LکZԲiX+fg 8;N~,'b>k/,]VeeV5toxx0gȳַ{ܰs ;Y v5!E+0`DFFt/2SL2vZ^jz6w^zرce֬Yfi֬u֙j6l0ڵk'W_}vG;4T޼ysKL ʌ3ٱ~lٲE^}UIII1_7n,\yh|̙3Vqѣ&vVrJTtt4h@¼VY7ohAu裏:z@o0ȩA[9y3&CSN=R娫Au @@@@@@@@%0n8IHH0ɶG:U_.%DOޝ(7m7K=OTO9v\~~dȬr+供y\j1=is}횚٪bț/./϶kV4>hv;S9/?_$1׍w&޸v5yeC3&kPz8yѪT/irwߡw@Xxҋ$3JJCμd؂Nĝ&%C=vӵebw@g)MMݬ5V=ksGN;^΢ ^38%/A$px~XʕK.&n?={gy|mw1Yg u!        crLD-cU*L-s)6`k:+;8x,klؾ[MֿG*Ws+HP}_[a8k]ݹ$g׮?͉_97WWwϖi3j;sA34bRGg[?0`Yn'-)^]{=j_TXUu>T RxQ!gU`Nxٸwװ*IM;q,ȿDTw#/zwۻyz|Ցm~ uiɈ/fu4UYs'ʷeVO~G{)],9pNq ;}nKO{iii&UbѣG 5ptյ5iZڴjҵ$aݻwK@@tUʗ/o<:߸q k&Me˓7 K'&luץwj_? &L02]vuu}e k֭[%((H/nh՛z:~uκ_L9=IP6        ` ?q 3E 2^MA9r-5lZLN4~'VgsG3flcqmdwȸo9ǟk\oo|9o Ts1+ -tqdgϺk\5nջ}ԯ^ɞSP0z,ʬxqҿw*ŕ]kގӇm=![qZxtgeV5t3DNxsZXvgSm N9oxqtor ;߹lT/brիKNDZH .]Z^|Em6۷9֠A̛CVT+bR^bEnNhpGΝCcrrt컯ݯ[nqoݰuo}Z|޿HZ ^9vP雞AHr yfqٸxH)35$U8]3Ta@@@@@@@[`ĉ-Vk*_e̟1갹cV(][hpĖ*&񦊺{ `/PP}T3^ҴnD ҧ2{jy}\#p knw?I=f**:-AB˯C~XJv;`w{<[;$+tP]릫#O5c$s6 _7E~4 ꅝo_GQ;ssT5kJ6m^ רQCz!O:,裏D+T =z0SRRwޑg;WTTԩSG4hys`nux }챧zӧK/$6l@^`6h :TuϠ{jY_sj aJ )y>5,Xqr@/TB.        `z\\AںK  22Ŋ:}mV%Df%L إ,k<3gV徣A-8+h{7YVnj TOycW94Pʭs0G:/hQxZ oڙYR_%[v3khU)70YS76#5U?A8ؾ瀬X/ tW]*g8Wɠ.h ^{namާ?W 2dHS2ؾ79-A8I>w w[lqv I/_|ֻ46wCRv=nҥ2dӥ5ϩRKu WTIuTye޼yrJ9rv;MO>hwmz{RNAu=VH[bb񘔔$Rxqر>`n5"_bY_ ?sxϥ˷Z7=&V6_ZWly\/iҔ̛NySսЅ       ȸq\r&V;\ε XW?{OV־( _;YuQ22Ns_pxeV:|IJ ξV" !Vjz\{7G;k^]"gXe;.kEP}"UrWD+_j0qoūẹ;ڸ/eβnNns?-g/r{ݕҦft cpz vOvlH ?k.ur@2kkv@k>CGR@tS̸ !~gg~ꅝoN\>vT/[7_To۶ԭ[7sʨQLNA%JHՎ͛7K~̱ JVvnѣG˜9s̸5(eY`o֯ yOy{͜ҽ{w3~"=TcǎYfa/:O+8yto|3n}y&PEQ'ǃhpfw~T9jsk_ @@@@@@@@мB z+h=ka/./n'V%شtIBg̖I'+jUq 2W)%f-_vָ~MiK}SH1ye Yns[Pw'M۝1^#Z]ʆ1Ǫ~v/-duO2wpW?'?jVLV%zxV?za;'*A) _^򷶦MJfͲ]I2o)7idɒ\]C[N:ftBػw<쳦zѢEW_=y9-}172r{={3 {kܲm6 NKP}gP]/ mҵOvH]NNI'sԾIP='@@@@@@@@9rJHHɘPQ=w0=7*[Ր06 ?ƭ}aEdd,#Ǭ-愙ӒUaeo5Z-V[@)S>pbV{$V|e2:{jǘQe>THgf` nfywZ!3 zA O/}$\%4KG5JhU~@-0.*ҾۅHIƉ {eXr]}XpxaҠf)]RvKKW;=u@a{,: C uA*OlCCC 䥗^2cL]_#/,V[֠keEɩY_p$GROHWu't>i=?tdC?       \kPƄb~ [K^O:4/7eꗿ2jF!@  jTc+ YQjU[n0|G>f?jp7I*]QO5AD^ j`[fk5nWufPN6=]Au]/\!}C<.i|e5yubߨ8 hXK\kܽ}ݙ>{ +8$#(~r<-]z7Ynu~"Ko)T/|'C'A< ! e KWRE5jd~hƍ矋[P]$$$HZXbϟ/0֭+m۶5@>zh64? ''g|+Bʔ)#>}h8\[[n1ۅ o߾T?r$j͚5jժ Ϝ9Sou˝wl:|pY`9iʼn_eӦ*5_9U7vPރ:b@{y-Jw~z8@@@@@@@@ Z@+Z-v# X3!3.Mf`*¶\\q*wdةJ|Y+~Lv,3C 1ً-YQ,sWOH啇k1nΗI[=5X}EDi?X1ξòq9x8ńe2t.:138VhhU;R|*KeG{Os65g?ɚ;<*kx^{K=NN p~Gd5}hpB_Q?k7uwWF~sWַig=xXϘ(@keʏɷ-kKf;Eag[0t6j*4hh[*v+W*_tMނ:q2n8sǩPDyGLr=y쩹UT1k׮~۩ os?VXQ{1z^{ л=A5k֘C~~ҥ Lk@^sjvPr|Ga'&/˭ylA'NY8|Tv;hU:?!EtknECC<*/[/_k{ItHg߽!;d(:PzɖuiTi:O>"qlFȻcӃ+%"%80 TϏ֙ۻwoٹsƊn-YDf̘![lqBAAAҤI!C̲;w39GΰUA߉'ʕ+KZrn?^~G ѻIII2i$S]3VM5wgdgcIMM5p}. 64k5gɺu.ҵ } y3kj'OE9:Zjc"7 8j}vأQ-?L5 gxm'zz_ +~?vYC@@@@@@@ zLQQxEΑdYas5֐jV1myraOݗp3 @/Z/Yۻw6%Jx~ t)YGx8}=Ob$888V߻w GDDHE^z5|fWwsmy紖Je}$кW7!@@@@@@@@BǒB~!\}u7ʞQ^Z1AA@< ~'v.;^ @T'@@@@@@@@@4>rHP3z^A@Au         @GD)bUTJSQ=w." TT=        J@b}}}   y         9 ddd1c$..NL@@Al!        FX㬊E*{C@p Twk        d9j-[V"""Uaղ;{=Ξ=gF@|>B/         ` cP*(<"  TMc         #GJ||BEu  ) (i_4@@@@@@@@ #FHUQ=,,8q@p;l P ㄈǂ< ZڏY9        p njh)Rߗg S<ȐiӦIzzTTIW'e˖7|#111rK@@@v|,X\M˗.<j裏5ի'{oi~<ѣyS  y w39TAuC{rrW 녴:-ZTi ۷o7k{&V?r䈩iw{<͛e߾}B|tt{ѝΣ׹i&)YYwj>-[JvM5U;wJZ)^կx:[AuuJOǴGO#ׯԮC~fzC%c+VֵYOKi1(*%VHV6[zR=` uf@@@@@@@.PG490'(іS D.@.0;ȜS8n^zZU}Μ9{m˗/x@JtR2dԩԬYlg &ݭB r}0?{9{rHeG@@@@@@@ H@3"ebZO,/  ^035+Aӧ_|a.s&ȠAL_TеpiMzJY;TA退VP뭷Lx':K*%}qϣӵxNש֭[g[ZzZ [?,yVÇ/,vwy(Q z&ML޾>@4LM_W vmtUK@ܭIIIQ*ﯼm To{*}~*M^=q9        2MEuTT] B)5h"s 0s6e]&ZL2vZ^jZq[;@^^=KP}ر2k,3_4kLBCCeݺu ̱vW_m 7o\.Sy}…2c uKz&<4ꫯJJJ޸qc3gңGyjj+W]mРhy>o<රkAuuZɷ~+M뮻Neٲe駟:|M脂:/RM=s:{?Tի&e{QW5u=8         ` jUTOKO'{@8AS y kEj kxZ+\ W\YtbȞ={L[+k{gD?ksT L(^3aqC5n85jdϣ۷:uc)S_mv;v(jղСCefUVҰaCnhP}ԩ~ҦMy k>+QQQf_[&dowkAu/}_Uʣ>O8Q{s:W{V_K k|=Ao,>]\RYOɂ?W Au @@@@@@@#FHB|)OP  p*:s V֊G5Ak \k;]Au kp\YܹseԨQ[k(];@נw-ҵkW)_Y+DDD:~ƍ&PM4-[:Cz%x=f_5~ &:HڵͶ\ 3V6 4Įavw jݺ\s5fG;wAzToQO.Yi4g߽' =F@@@@@@@B9rJHH)sjV y.]ׂ AsŷyիKN ?]AҥKˋ/m&}54h w}vTߵi8J*+V(և|oU߹sg3#99Ywn׃ƎkuoK%M5v\ WZ^[޽}Lݕzaku7}3r_yIN9!L=.{)XlJ`4qw I)Nƌ=@A@@@@@@@X11cFF/O@ @P=HgqH^RfMiӦGtkԨ!=W裏JzzTPAzaƹy ;#ׯv(Sh}gnux }챧zӧ㥗^ 6H`` { Z 2u\ k{O/ˣ$^GqgPRlf5v argġOM9& Vfeճ       -c$44T:/O@"@P=/Jgo;޲eK ѐt% СԮ];Yt 2k5v kssT WTIuTye޼yrJ9rv;MO>hwmz{RNAu=VH[bb񘔔d-^tTO0` 5"_bY| :;NP5Ϡ3ˍ;,ߚ!O=&} ?d@W+)iξ/"ͅ>@@@@@@@.T#FյTP <0} +/vPW=!"o j'oy}>>&^dlu}RN}:fݻW}YSqhѢꫯ}>׼ٳg˘1c{GlӶmqsT'^Plhyp<:5 mҵOvH]NN_V\W= A@@@@@@@.0,d9/7O@/@P=fgr.HETy'K^x#gӧTcҫW/ZMW^ kӠwuרՓdfnե]vfuU;fΡҖy칹Շ*/6Co;i9jP^oذA^z%3FI_#/,VT/h XQvmm7y%{P]kX}B?ry䴬^g"N@@@@@@@.@7=ZbHHT |rr+2eȎ;dpm͛7[nl6}vSuȑ#f5kJժU%<<\4?sL;4ef?22T3~Wٴi3V7za/_ܤM}̩A/{FWʋ=-Jw~z8@@@@@@@@ȐFIB|[Au!~ x  ;i@aVA5nW)^reP{Kn-@-gϞ-ƍ`SӯOzG$"" <UT1k׮~۩ os?VXQ{1竛^saw گY: 7'|b?o>v:lA^9SZO՟*,?ewyz:A@@@@@@@0aƚꚓ!~x  O;{-;w4ru mɒ%2c ٲe &Mu bܹT^lk]oРwĉrJ|}}MVZ9q`w}}HƏ/?| ѻIII2i$S]ŋjZMY+؃RSSK.4lPz6 gn:CZ)]7 <3ydYB~0@IDAThcժU3ъs5l;6\߳gOѯ䮻qJ=XVe>ϝcs1Eq%  pA T_~<J 민#'e"+~[Ӛ~ҵi _Ӹ0K!       V@#T0<k_N.@ΔA3%y@t YCVX}t4ټh?>rk- Y!u       cǎK"ELAu[G@@ 9Ѝ紀~wVVO9nSNc"O\VM @` SI.        hP=11QBBBW;4l  {wVcAQ4\!       n +0yd n@8NȐ-ɫ$-*k5@ ">>VV`c"CZa0 c.       q$!!A)be|~-+5C5(4)ˬeaI/< ; {S@@@@@@@@8)0~xILL IE6noR|8EŤg뛜ha=~"mm("uo#xVص F~ 9OR$"4/Fa慝 {S@@@@@@@@8)0vXIHHp*d}kwȧ>uTj,'uz &Oھ[>Ԫ!MjWOJ6@ [>Z:wS]Υ~A6 4/|oLPݛ }         @ +O6i$PyycټCz8ͣzp~ SJMUV\O9vYUMvP{$806,ekTJ /8A%k7K?*_})lм]/Auo*!        '&Nhaaa!>Vzgkǎ""##XWR_is-EwHdXO76+RvHvmiV&?&Z!m5c*ǗJqe$48YXeKάX[:^51k$m#GRTTbKFI^; Hcfn|bPۗ# Y8Aw&+sX+>Rҋdֲ晿H++U [v{o -)%"]ty v)/5 M@@@@@@@@@1c$11Q4CP݋ӵ!X9a{mS|3ƽ1':]_'{Tir |lsTOEݮYۧsL74o +`ۣz庚UX2^^Rɇ-?-x,a]m(= @I߬{O6Xn(fSwIZF-T˅H\ѪrC>^ܥ7,u|uMW;㮆װ)fBKure>yoڏw/U\:4' Oz!]CA< 1@@@@@@@@.hzhh(ASf|gXKK;;Y7ҭoNڪ6~*bmw\;4ܽU} Gp@V)W]Р^SQVSϩEʾCjdhUϭYg {s1@ <\%sTh\Fd?•2́GZ\'^^Y [b2[sW֙3æ}2 0A7A1@@@@@@@@.(qIBBs{G~|>o3kt5sCℲV YfdXp|եruWT|lg݈("UtVqאJۮa‡kt}H(=g@ lK^-c=uZnskR6Rִo`=JHPL7ofgovs/\l&WU7{l޹O~ZZh?Aη,#A_sRRRdʔ)sN/W?A}IIIrA9(Jt"       cǎrIppZE}t9wa"22_O9q]M8kOTpދ&fȯ_åJ|YyѪn7;%jvmmctt=0`|,XR%ϛ.o)_\tE100W~~S%Ιk֬1E~͒uÉ~|HKKÇˁIŊϙȅ        yǛaaaNP=Fp;2s1w\nT.-1렉y>WĪL3; Tߗ|D:>YR\~uUL=&O ,pƹU9ָVUiu}- q@8sl;'l_c(5jVOז&^æoȬΪՂ?ds7ze9xX~c3T/|glT/O޽{Oyƨ(֭,Yc J޽WڵK4-AAA+Um gX7uVѠzAlp\$        )&Nhr)Z|kf |xܥ w7ys:lAw#+vfǻժUsNw-{ ջvj*;k}f뛰zsC.\(Zm^vX=!uW]?.d+@@@@@@@@3'~dgm\-M,3q57Olޞ|?AuwXPvgrPu///M-,8HXA7\%~W:N@\`̲D!6*K9q2{Km2/I;c6Um)A2۶W|!l4A~Tϛe˖-+}v۶mѣG˺uW.;w6B3gT\YBBBLP\ߐdWTנѣG?zهyD@@@@@@@ƍ'ʕ3Au-cU^,رÜ=22,^E?X0C5pmlؾGYڴlL(}6B,s~h+ND~35~]$?ZUp(iVLo%띍@ A?I]2'[K}޼C Σ >ޣG}AE{HP 9u^CL]~)RD|M=#V*!yrDϠ E3Ŋ3wz-[Lx/^^{mE5!u=./jfՏ;&ԩS'/S        p ;V%88XA\^{8#4x>;tTؾt8Q2NdKr6k0V(nֻܪz=<4hw2{{Xk#x۲SVnf˰m%*G; gN OK#_ f{r+6luJ+-_l]]Mi^-6Aw. v%Uյ޽{ $٧Owme٢UµFyϞ=Mߍ7(-Z0#Gh"IOOMr:{ׄ֝~MN*{qDEEI˖-v׷d0ҳ ȡCUjU5^jRVL7        .0a ̥X*?80vR3a13[|ZZUf;.?ڢBv2He~yfT9jUя [ Eaf7&̔_Vl}\Q)g@ AX'oOjk5xFP=/JA@@@@@@@(VT79͸TσV0oZ2Ndܓs_+|sCKck)ekvPJXڟ,?Vڶc]wP]v!04/A$ߥJYߐӯRwP]CZjs oڴIϬAg}V/0dYtk׮\}ugġCǵjJ6lhT:u٭_i>$FsP{+t嶱d+W/.}>nUWu~D)|KI֠za{=i: ,)&{N>c 9zJ k0\;^R%֭#ٳe̘1fxN:Y姟~2zʕ+^zɾ}̇s {kڿ{nIHHgyc֭[%((([0cPY@E@@@@@@@8mǏ8Ѡ:XRl޽/̠)WsC%=ddCeg[ceֲզ?8 @F=o }f_XQy牓S}š5Eże|4YLTQiӤU5k}ͤZg?zf/2oOX*G}7Օ"v7 gQ`.IH5W$A% }5gZ7SbKFrM7fξ2y2zS^FxdYJq?hv ;Y(uAzҩS'SQ\ǻ7|z^)!u k%Kd޽s֭[; TV{8p[nSFP0zE@@@@@@@M@ʕ3us؆{ddI>"~>V@Ė_fa*VhXH/Lnٕ/Q4L"BFO@Rhqٹ ~yv~~NFP=?Zg~l^}GQ}+$ $!(DTz,"Ul B * V "H&@)<gM6I~9sΙl>>,-Zo 땺5auOeh}Q>%|?tRy<оCJ\:Ջ        @(̙3^z"Vned" T]\sj~+|*[y>ZT:๧s?/[cIIIuZj%zZj/AҊ1@@@@@@@@$VA3f`4 D1  P{㷃111ObT7>3,M}C=d]xᅦ{. i         hPݮOPX1  @ ݿ'3pBIII1@ݻwڽ{̝;WZl) 64c뎍 Hw#~Y@@@@@@@ҠA U;G@RT/IjOFEm۶ɐ!C]/4>vX?LW޽MX]w&N(?k5ȑ#e׮]&GΝ;oիK6m$((9VAt8        PV\y7%11dYUy  P{>AuywO?5HժUs=W4ib ͱZjSO=%fQFɁ~-iӦkh]״ڶm+_?4vZߩS'ܹs SN9EZŽ5>7o^9        Pf̘!b2)>V$ϛw֭r"##鲸@vX8:: +xﭟ젺NIIEniܸۘUVɸqn;5}:U|dffapӧBjBTOV_|uY        W@3-TW%^y7w H1-x8k,IHH sG  p<UVz=ϛn~֭r"##鲸@ի@@@@@@@@@DoHbbQQDb B@*/@P         L2TT *a@@@K        -:i$KpHT/  T@@@@@@@@(F %5U%$8X|a@@:         @$ު.999[Q(  pOI9#         P&O,1*\QXr  PWX /C        PR'M2MP Y͛g֭rySZ@?ϟ,kIدGݫAu_?E@@@@@@@f '&&JUQ=;'7?, @Cw쉩}t ^X@@@@@@@@ LҠz\TVMrss P}N Rzzl_~L>ݹh};zh-{nG8sDyHVeU?I]_s}Y@@@@@@@@ hEz&yyyՏ6# @ ^ȑ#eڵn}}gWGB=^}-Ok#}囕cU 2`W        @HIMz>VZh2 <.@x;jUVxbɑ-ZH>}LٰaٳG"##WJIl۶͜nݺHJJ,\МW^):222d˖-Z >&&F""" o(u5<$̢{4+uAff+~kYns,!*>n        x$'aTTg! TQ˘={|f?lg}V4t^X3g̝;W4m7w%H6mdذaSNҹsg{ypɓe͚5nq={ 8p@eɒ%묡!͛-b9Qk>3%kdYAu`yQs y $뫃47_]~ݔaÆIttٶh5s;hnc믿~SkP}2zh_Z5yǤFf_hcNJkP}ƍSOCu1Ap{۷T=߹ssEDD\.zÇC?~AǕ-mrZ+r}{ "       I@qqq@?AV@89O{iZ9]jn W^)]tx@/u5w_ߣaj{kT/dƌ_jʞ޽[yg5d O8 g{ ksS6Y?RmLwOmW;ջ'. pl1;w?]=F@@@@@@@*@Jj$''K@@T(OD@*@PZotuM:tӪ 0a(yg!;OgƂ $--t5dasmnZv *kP}ڴiW_;wի*Zuu]$%调Ꝟs_W }y2_G*KFE}o+{q7%3.9Twa@@@@@@@2* AAA+3@@ {C(ƍ'˗/7N9Y ƍ_U^|E}5W\as{]n1Շ.ׯ@0awl tRT5u풶-ZH>}]󹎳Wq@is o=Kv9:sԍҺ1Cpy㣇7a@@@@@@@iVǸ8 19'{P}Pwp3}\O!ɴ*wk+ilvi=Ї       xF$^= 3JPݛ׆ ^!@P+C'ȻoԨmoUV`ygM 0`?s䮻Ο?_Nj\_aÆItt<{gw^T>}|嗦_C둑"_{E.^A;a{P=$XYѐ59[~AcVjNȒV@Ep @@@@@@@VTS1ԪnT.@^(<^Oi_W_ŋnנko/8Tsmzvs /X|T[Zli+<]8AQAu#o tBڧt;ʒEeN|$>8󳲲inAM6Vbצ~Xj׮m5};fGr%\.U5|fiժ4YvP:E3ylyzVc;?}z~@@@@@@@@o͕)SJ||h?1@BW<1c /̱;C;<ΡC>O뫅F)qF5j:t ;33???Yj,\P>l/TΔ3Fu=}ýsNdÆ ziAu6m|Wx5uҠAsN M(>""-[&&L0k}-A#<u^2@%z$3ӭН>JPP        ^,jUT*|UI1ϛ 7= @T'{# K@@3F Z]̙3G>sC\s\qf[᯾EdsȵvhgiuaI'N(?O?aڻwo9묳ƔΝ+o?.~ ;~ƒ:2ѰzYhY;z~{@@@@@@@@ 6yH%TOkD@yyqor8He@q40O=իWѣͅl*}ZU][ƍt,Xٵ¤sΦALw׮]cǎg5k kn͚5뮻N>SoM^z>j5{O8k@]kH>m꩕+cǎm۶|>}<-[ZqA:Z`9l?O! pi;(@C$ʹ[Ei        H u$Xq '7m=^g>{2T/Z_6{nQQQMsIo'33Sva5k֔N5J_*j2kHY[iHש^f-%wk$П         @Ef1jEkT?IOo'KWo4g n$]IO;;۝T95g@ xl⪟"w=έϛwJ~sʭ/wTB_U8#l1eyk\y 9IDAT q !       $TI*SQ$@桒 5cnjWɷa[92`ö]8!쳁 pR~/3V]@l&rΟ[w+k7JJkە{g~*_t$l^='@nȁN3r'/:gJs Z5=(GBEƒ}$8@L%u        "FE<נzDX\}Ah$1Q.MEb PT_r<2*֑t+Nyz {R hX^,W%u        @9s [ ^̳t 7}o(fF{ keڟX/)3IդySzj8hٚj6ٙ񑨈p95)VՋ.rܻ|l۽OȔ[3RZ,!AV|$՗$3z59˺-;dinn3n-IU: P@DLDwW.jXws=זcݲeɕ:5$v +iм_OQՋXU(3QAq        PYMf*A OKK^sqK6nf+eӎvk2%",ĭޙy%VH0r^+/ptɋos愇ˈ#şW)T}qe3Ϋ.?n@,<>}lسlGٛMsuJDp>ݱ>&S8uHn5ΖͿS0vQKGa7n%ޚ'+6D?ԧ%EK{#ѝ/` :!         P%99Y@SQ_TKЪvgz5{-Ou;so=4#O.lL}nbrIS?NO@rrs@y5(He?BHn17%דgk! l{^rjD/*JwdGhXo;zqlٵ1:5#E4;IKIPH A@@@@@@@@*-0}tSQ=<<\r"Ջup 'Ԗ(tV?/iɷQ`بHr:( :Im̒lܾY#2,Tβrh[5M3qFm|>zIzi#YկkJnjm-;LPh\ڴrkT&wӒbui/MϚoL2Yv z-̆ 2nξnd[=.vvSK~n߹MsY|S ]+93F7ΖOL4k~ja믐Ƌv@ؾOJ3ϹHOѪZ=]ۣt6p> Yijh@뇬BYam޿o8ݮAw-A21@@@@@@@@i$99ճǪ^M+MP]Ox[8՟S)0INfpI}_fLmO7*֪wJqi-!:J^{C?p˸Dkk;_(i|ko@s=5n˸GnJZ7kX?vq.S ~=6}]/6Bq@@ʏes c՛ȝgw+u呉AtԊ?o\OT[O[iT/|BʰAP hLA@@@@@@@@*%0c !^w 7}o(nJO[;շ5MU9^S/ˁC?FfuC^\sL)Ikg׵K[~/3?[hۮsNM.6Q.<3uCCa|wZqBZ]@J.pgEKK|A=|ԩqrޔn@r3[@Excvw w~Y^ E9         POnժU\+LEb ?ݫޠ^eثq鏯%/>prc&˦My`_ϭ;S5>%Y~y֎;F0 E{ */Xʞ*A|nTi㯝{w+5pqu8t[[g @gPpvk?3\ȩnr.[2/|҃J\8׍;y]v;Aw=Gi VT|o~Y3}Hp7s+m815#=% m}\F )C{1vqS?׷!Tu{{5WAkHS_e?>5U{gQ6@J.p[@~-ܦ lcLa‹995rzwv'ڻ"@ eS qO;Wم7*ùRf2[G\?ĺ[[3^?\_Tp)R?!}2畲f6u]z/AR`|gxbٿQtt$''K'2++6m:uSO=U/'W2{Iq Ϸt#       H@ 2wEEbə*/) *s:cr):kϳl}nۯKl'Sf!1zhBjװJMqvǤw^lJxH 7y/ѐ~gϞE[pW 2Bc +rdLJu?1@.lrq9"       ^ gΜ) !^̃W*3\*iݬaqìXeWqDO/1o|/n!F厫.qO狗KƁncV9Vtee#@{lhHrL-ۼnޱGi]_ [89VIG&ΒrDmuWƭrХU > z#g. ؛Ms$ S<?͑E}x]կg/)so]e*s[6I:_,oqoZB ^ 4t޼y2k,oժDEEɮ]dڵfx&Mo߾ YÇMP}رXMͶ>Ν; /4lTNC3ɊCYI]_s}Xա!       V@Kjɤ$T!mO[oݕaZhD5mO;iU͓Ls}%i=$JHtXec9; VTP/&@'V|Vd5 )M+ҜziNm۶ɰaU_g!wuB}2m4:A[oU?|p^rP\p^09rkyZi+߬̕{dO۬{E_i        @eР]Qߟze~ xkɏ?hU$Y_7d7 Ϝ9ӄ>}E]$\s[`_~Nva1cƸuܹӭFfVZ;7n)SȺu.+7||ע5L?qD1!SO?d}Nq _wur)СCM_׮]=zvڙлkСtl?GȒ%Kέڼys[D_|!~O;4nax ӟy^kEDr + ]m} tKE&.V#7HB|        @eLʛo)!AT@8Տ;qOl2S\_ VߵkVN'$'|R>[z)MP]_t k; YZQf͚v ȑ#Mrhq k{W9rEƍUV`7nW Zݵy _q&po1^rUqҿ?N\.m kw5?b_zuQ72_X]'=~~r)-#vucv?n        @1cKHH)g5oS`4@Pޟx_~)ӧO7xeڌ 4hq ޤIѠ̵O<Ęݻw9@ |< mӦM2zh4o۷o/~_O?}[(Z\uޟi5HݓE+/ZH~gsT5u_+ku/biذl߾T9_p92zڵ;kP];4}饗JFL?::Z4 vzzZZ,X۶mk*oذA͛'urmk>#DCH׊ꭕٵ*ZjO?mu?ٳgi,šT2lA>2 g<,9RM]ן       TJͩhP^znz| KRخˇ~hL,gЊs1S;`QXPoɓ'9r?3 dҤI|j[h!z/I;pl۶XkuT|~8wyn|l#       @РzRR6W]! 1 ~ 1RZ\kk TB/鲲dݺu!4iﯾ,սʷk+*ъ잚Qצ &?{Ωn:\~ht5U5MhUvOM^ZLwW^ytBӦMs:w,Z=Ӫ붫ԩ#ɵz˖-SN z܃5~md_f zWRQVQ vZnx)Kf:]ns        T:y̚5 AJ!@8ՏYs޼y ֮];ѣG _jXiK.^xR :T'͛7Kpp 6^v @~h6lDGG5auO#FuV࿤M+?HJJJgĜvirYg/ˆTr{PJӘ#5~Ys31@Z?Z}ۇd#n}Al!       @e†*Sze} 3nj/l ik;S/9&jvVUDYJT_l &Y_oi[%z2'N(?>fsܧ~Z6l`G%k֬sdf]y]?+KP>.P=1o=һu]N۽{|w&<۷ݻ;K՟=uAir6IU1[k_O@'e𷳝}O Ʌ>@@@@@@@\3f̐X09r7  pc塇2UZ \EN /4SSS7ӴRw׮]ٻw 8/mP}߾}uo6,g6C^93 L;pfHyӧO/ҬH]/_nЀOHLLLFCE9P/X#uX$G*kk'dA+^Td A|8       C@+'$$Hxx8+#.@@x T?[رrJVU߿yiU u*v2:th.r`qL_5dРAk\S]5{ k馛䢋.9u:VAuЮڵ[Zl霳SNe4(Ks܃V|L5 k퐺?0+K^]O&߄}@@@@@@@|Z0))I4CsG  pccTץ* E1~-m jܹS|}}駟(g5|a)׬Yc?c擡ĉ姟~2]_~\{Mp~ȑ&&G6dzMp~ڵf_+iFի';vQVXᶖkP}˖-?40Z}\zojcǎn7i&S^*?Ԯ][wg;c{!jMA+00PILL49s|`vn9묳v^^,^ kE}mٲe¼nkU|5__9ڵaWS̫VV|dfuG @@@@@@@мffP#AJX @8ՏpI>b͚5W^R~}g؟iAr?:֮U5U]njtZJƍgBNgFI߾}?ket ە~. ߚAu#W_%K x~,Z]]*NluzTE14vš/"gܹs孷rquoAˇT9.폆̒E/WA        T3gzxxhn @.\(wvk ~Za}۶m&ާOw/D::(Yuowth'omsd{ r7 @@@@@@@SN$Ѡ:+c@@X T?- o޼2l*5 װziZff k༰йw%~~~Rzu94nWQ]$''!CΝ;%>> hu'U5.W9MSϭ>RV-s%95Bš> Ǘ4,Yq;H_".T@@@@@@@@ %`WT+ԣb@@d T?YWُ=.x@ׯdeeJ:t ݺusQaxKebJv +7AuD@@@@@@@*i$11QBBBLCyϳJ@@OM8iii`VN W zH✱l/k5t +OsX,Rǰuj't -1<#K!       'O ==]%88X|}}{@*A *e8pTM hD_iȶ[a9sٲqgh?zQ>l [!u       Tvӧ#AĹ?@(Ar1Xb\Rl"d*'$$ȩj2J.13[<9xH$p+ VM @` SI݇jad,       TP3gJllQQ>C.@NA 8IV^kY.*\jp       TA@O@8bR(VX/Ozy       U`ڴilg5ob7]ׂ Au~@@@@@@@@@钔$AHw@/  pcHPs:@@@@@@@@0iiiW^[QzB@+#@@@@@@@@@4'ժU\d: TU!s         P.^/>^$//z4 UBzx$        C %5U 2>VZ=[n5kFFFY@(A1@@@@@@@@$'aTTJ{E@ T/3@@@@@@@@@jN$IIIdnUs  Pc*        Tz<ArI OޓFՑ;n~mOǻ:!AuW*!        guP=ĨMP,IjFY3 GO_._ոmV.α~[U-[cg.v540@**R!$y&0s2s֬j| fʖ@iw8*Am#4+^]dQ/W xm@+NHPݕ m         YqK\\PQ,Kk>V2t:15yYojDl]ciLZ5swtfubm+>>ҲAmJ ,碇5m2g,>֦ԋ𾉖Œ~߰ML:SWH+Y۬ @(o~9??}/OE xbVa        H4IWTFEuFM./αE \byyNQ䵯"æ/PkQ,.999:$z.0tiDE  g $N%[wJ:^.JQE=՜ R @@@@@@@@8+0aH`PB6#sv߯'3(pyqUРzJLJѓ~^}h.Ud#N/j E7 W fPM;eФVDUHYgҺboe~*}KfVw%\"{q7h^~#        &L(1FEPʢzn"ǖ XTWW%oL+8RQ{#9;$C|#t#hvXaVv|JFH1aZMX~L7kwvZv<*C}G[mZ5m67^-[#S*陙Ռ[]ȿvo~jCW/W/w\:4op #?8i6ফdϫ۱\b\}]M/Ja 229?w68gnT&N.a6%,#9pDzZLDA>9?rR>ij  zhߐDЭs|PW46.Rٸ̷bU[˷B3^`^z5PV         P&%"2RŇ3\^cWP] NrcP/]5;?F%ܗ} اCӾo=az_+K-zAGN~!N:yntCUi~oh (S$ۨ&WAϖ!3,¡6X]*jTQ_ @U`ètE_4}nCb8pzLb0} j!5 4?h[92[[EdcR),D>zN󠧌\>2~yjZIi+!߯hSU5ς%/Fb=ѝޕ˸3Nc-AdewW'il_ԃ=&}%7J ]wn?7?!^.A@@@@@@@@ʜ IQQ=3+z~ XTt`Z_6remW+?G>[kWT2xێJuv0Fp%+/~XU{@׫73Om27~tlP!aPk*}Zԫ%O^_ߺ2nfT~q(y.㟒p^WjT wРݦR)#o.AunC%e/ ɠmWA_,w|cԊ >a`׶ruӋvQ &/X&}~TՊv¼tHU53}]fK(Yo8zR>E?ltyDE[7PC=-j)$6T'ϳv Vjr&|خS*_h}${֘jEU(]-F5`GX(?ݬկƵrek{3ΆՊtS+Yԇ3dcV'JFh98%̓T/0O#/m =TʇXAb8CV>\tT u{LU5]UOWSv߈a'˖=׿%>b|EqZ6jxkBT/         @8qDEGKPPTg8*sl߮^6c/_kU+wU<}a{^9r$?6n3q **m..\aFGFL}G]A2R݃tEa`T_r|[wX"K`{oW]Y9~uKM~+ `]f\SGjGU:1եAHirA8aJ^]3duƉrrLU\OJvh :mg6l]b_M 7F=l=Ms~^%E@m@\*}xicwHa>%'u}P۟ *F@@@@@@@@(kTP=*J$;;3\^cwPse͖]Ǔ:H5mW+gkT!p-6FWSc(LPA%dyg{i٠և֊*rޙ('>j1Ƹ˗?)~Uk媨hkU ~+ @ce޲sX ׵_8l !ɫV_THF7z}Î}Ҹ/6=DWG6Gʫd}=$O_/χߨa>HdT/D BPh        eJ@UT1YSQ=JzfU),DF?uWGn گ*`JRcgP]S)T=fDk&*檛6f'?* ?;X 85*V0Oc;,毖ZK bɞt[p@9½zi=o_Z&~nH&O_\>߳ \WbAZ6YjT@^qdOZ.7O!{@IN ;j/B6/TP- 6㼕vx'sPtC@@@@@@@@2+0>!Ab +z?I;i;JPk~e7ȜWYM}B:ldmXTw]||yV5/ho䷿M6dT5w sDU7[5KLJi]f\s&n65Ygʏkz޷ԍamWmQ[lZIF|׵uSݨ:7},[j~R;jՋb`MߕLټ߾oGO8tR1,ء (} gdfI!oP}lMa=օ2Ks~U"[W;I:E=]'^P1#        @Y*GEIHh(ݹ*,Br%MW q˟βuwձęuqU\Auqd;_Xzwhi;}B}_6remb*Tt>[T>os׉.opܔʗ? fݻifW+g,מ  ›O&ʮG\hE-s^-ߜq_W*&#z]]`6||tsJg+X(Zt۵-A|޿1gQ{^yuZ")Ag ;6V쪞 3_/ kEIVv,7Bg.?ԍv;x,/n!߯KzfV+!oO>3c=(꼿*æcQBzMVQ)_U4߼]R!$H!>\N'Th+K9n+Auԇ3eǁni٠۩_{;Y׫)OAoWP(*{NuoUPfD=?uU~qԢl>z0/(u 60~ݍ{y}LZذMW?.a=([/w!/jx5^aꅕ8@@@@@@@@( 9F4q$ 72bY2L0Ϲ AlsNvf~-α&dž #?m׎ΣczC[M;Bt]8_Cqx|De9y:UǪ6R;/*uuszC7T;,Yg*mב_cݸs0ۡXQU֓SӭA-F SU:ONKSUUݾM\>T[E1㟒p5wPˋ(ه\UŷdJU i3sF]$w4VЍRIFn??d?bsݥߍmzHuwM:_xO=0}P](`z        eN ;;[&&&J\lAuHa3宽cz&^2#1g_,xv5AU![K b\.;^-Y1]4;Ie.mآ 1tjY} <_RφQ;zjsP]iߚ8WVoe^WA.ݻSgpatuy%ϾYM&)Wx^Uwoy:@A9Tw8Q>8H^3*W/:Wa N`n41\ >nT(ƹJISvḘ*6ny$~>{frk"-#S3Q?b<4+ƷRzQw>ݕ        UiӦIttgH&;A?[|Z9 =[.;Xc_Fdޝ]%tVWTJC$JEҬN 0┅64kUY>Z%ҶY]\QUs^F\-ytq_]JXjdr,XV uޝ,33eڢd rn~j u:@ڜVU_??_.+nLϼGʫ|ݺGf.]mOUoza{ըo]f\^Eֶ;ϳV.16c򇕲{@V}C+ t8 YigHEЛvP/QN?9S=cZ<-Eݢ+㨇ߔYʿ)o^z5PV]Ǐ/GuՓ;՗N         @RRԮ][wz]th7h`txXU,*YY)α9_IQU[U=Z>6VT?y秾GFyssA-1B ?Lu mWש*k ,ܭD b<@gBU*J .l#HI˰4l]Q+d)9Ah~^9։5k&wӜ9sd߾}*Vo\/;qm         d93fH\\Tw^eQ`͖]Q=\*:_)"J+! j๹,[nrIFt~e 梾I=w^ x 4wTWsUR8qdff|ϡ~Wt7='cF@@@@@@@@$UνQOuVٰs>xT=)}%Z%QY..ucki.( ս.5|r/!oRQ-[J^t ^O?uڋ/(~u 1BwoȨQdϞ=PңGiӦ?2e+7n,55.ӧO@_Ԙݻww?#fZWCZ*,V;+        PAuUQn! 6@@^%j*=zJy-]v!=vXWTVM8`nT*箖]ʼytEtWUXt__q饗ꐻnP}۶moTP9         ̙3%66VTF:# yTK T߼yCm۶ 6loV=k[nźbjTO^~?d0RsVZI֭u{ѢEo~f͚nzjQaޓ* zC}n䢋.,Yv,YDN>U߯Q*«EUX^?27_6@@@@@@@@2eIpp،˙K^Gr ̨%<<@@]xKTW!nkQOj6oG;J.]}jeΝ;XAvjW_Kzusv^hB^ߺunkР},^Xoj誏Z6n(s* Wuٳ嫯қwqiܥ_ $۷oסaÆ9S3o=22R^~e@@@@@@@@ L6MT֤B 8#A2@ gAf|guoUW^ye{޼y2k,}O< O>)uԱƵ_gVZ7|嗢EU~?d̘1Uܾutզ*z%ꜜ,_Ǥ         p.UQ=66VOlBP\ZC@ 6p7>\_g"="ׯ_os7Ku?3>P5J\o?___~ ,?\K2dݖWP=--Mm&'NsaqW_}vmTw8 @@@@@@@@:uNj*(@ 3^jUy ׬YsݥC._ver}~f]U]W}$))I6m$y΁z4@@@@@@@@(Fe0z12 w{5ꫯ5uɈ#t߮] 7#G_- ׯAGF)GUWU]-M!^@@@@@@@@JJ ''Gf̘!QQQBP@[ս~&~iy'WJwҿKU{Ϟ=]vK~ts6 ˖-ӧiݺ }%x         %)0}tT l$<<@(%Zl&Nr!\kN0Zy]^/;Wؠ СC%00<~_ez\A]Y^U`gA@@@@@@@@('OxQAuG!^ME@2!@Pݻosacƌ?C_\Vw~zӝ>>>:]\9'9P~ Tâo갽yΓ'OܹS7 ;e_ccczU٨>͛7p        NfEN6l" .d7ӧ4nX6l(*uVQUɓ={Jvk/nv̯_a~AF=ںukQpŋUP}ܸqo>111QQQRNݶvZWZrrڮ; @@@@@@@@L"qqq$TT睁 '@P=?!/lP]ZU $###ϋG Wؠ;߷ZjY]W\)G6װ0:t^_p|gW^yE"##mV@@@@@@@@pHJJ5kꂈ>>>՝F@;xK/$hQ]6n(gϖpi۶tA΄Yl>rH]oeƌ^{MWE`۶mo޽{~U~ĉdeef???]A}sIvv\{r-Y?|z%3~q6lvmڴ:@@@@@@@@\ L:UWT y[6Q    @PB!99Y9Cf+ r!JVzAT}sQLHOOW@@@@@@@@>}DFFꂉTTϓ  Yg-XC@@@@@@@@\ 111]І  J6@@@@@@@@@)Sf͚:)c9kדd  `Tm        [ ))I%00P7~`/  PիW/rF@@@@@@@@@<6mHPPl6=c  %սF0 @@@@@@@@:SzXXdgg{oP ׽w eV`|Rf\8        #*JHHTNj  TM        [ ))ICCCuGV9! Xzs6@_'@@@@@@@@ʶԩS%&&FTPe# ݄        YTYh*ٷ  TwW~         PTӧKttT/@ $@P@\tF@@@@@@@@2&-ӦMxTl{E@BT/         @PAuA2uX@(ABq        !$] A2tT@(Aە"{g#rhOΖtҜלG}}MUGX16lg6~μWn߮6孶[ˉTj}$DVr~~@@@@@@@@oΖ3fH\\T|@@;{}1g#we#H$ Sy=D/ #v'T>(&5*JX+vi<@@@@@@@@{M&111dN4 ()) #V EIJ3eîL#%y*.EFXh?iGyRdT        @T$]գ%44TCPМ eE9 k[M~Ҥz2        PBIIIRV- g ^B  u/ {(٨zZR!zI[3>        PT EX@(ս64k*gc<.'W\ =aald ;б       x@vv̜9Sbcc% !& ^)@P{nkmyN($>S;ġ-F9~x;l# \73E7VۙT˙jqf|p}RKʅƈETs^Ua6 A         W$$$HTUĐ^q[ xAu;kgw]N7fտ|!luهFTS&>1}&)kW5*' rӀ        y!˗:Auf ^.@P7(-#G-M5_l|ٻqWbEUDFFJTTT\Y7ױ4@VVdffÇeݲgٲe=zTO&εQ5|S ϻzh@@@@@@@@( $&&FBBB^*@{ꞿkf宦*Z7kLOPP+WN >{ eUP]OzzȊ+jA^pW^\N֤z{p        &NX U~ǘ x\goAzȒUyⴄȏs!vI͚5uHݬB՝<T7+֭[oէՍOɩ\'mrdsЀ       xR`|BCCC@@ {m|:]N8L$$0GV-)lMUI] ;PyF^AuUe]W\B*Ք4mz`h@@@@@@@@<(0>!Abc%00P|{^pj@8O{F }'~Զjx\ z4O%[iws98&w' @@@@@@@@'Nh FP݃S# y"@Pݳ7*z߾}u(] {^sqIfqV=o꽯%        a *%aTi@IDATaa2 cNÓ @>x&Tg#{K.ľa 333uuj3%P.*#w\        gTE Q'@@< ٛAp^(u,VO$0u A K;pe*^1Gz]z|l        7NJP9 ={9~M7IzzCTe,^X  n۷K.YhD@@@@@@@{ zTRQ\ ARa$ꪪُc'Oԏ6_uuP1/7xTW(ɓ'uPرc@5Jjժݠرc%S΃PBv5`@@@@@@@@<,0aK@@ =|C8= xAu#wÇ;t[@FPmqUP=,G         rrr$q$ \) ~aon'#u[Ff3+w'48P~Y-߈  P|>)]oTwKz)uM3{衇DU_ TϒiyF]$$&w rhg@@@@@@@@s*211Qbc%l6꿭"oO+F\Gn>},Yܭ_*U6'~@(m> \7۝+{;p[;wt[_~yrQ9tDEEIpppη]N=$$Dƍ'*U quر-ҴXsE\GP@@@@@@@TW@ɷ=幏gJjF5^fTLWe򂟭j卤׶mlsG>  P|>)M*cǤO>&駟JhhD~wyu[' ƌ#ԓժU]Jj/ZL"&L8۴ic٩ A,g{;TC        A RfM?~d<5j:~ҚrhPGV m?GM/9ҬNtwMns  PJ|>)%{l5jCOZQsu}IŊuB z^A#G?/[nQ!o(jѢW#(ߩ|Mi޼Vzؤɍ?5~6wAُ       ʄ$N$pzFfgq>k~~>}]ZѺmӮ$-3W ~ B ZE@Ii(}*,m_uw*X*wߕ&MuUa}z_-[uSN:}-жc2qDy7K^t k֬ϣ 3=~͛7O5jUU?wZ~ȀNz?@@@@@@@@C`bbDEEIPP6Rvs6k~Gz\'.8%O.GNЁJՊaV[AWT  P|>)is_ZAÇ'OH]9}׮]2p@ʒ믿ޡҺu^Ax@6mڤ7n=zTW^ytM:>^FIտs ^(OQh/ޯ_??~ÓGm溏*2x`YdS} ѐ!CQFVr7z=t5v}رgPi۶\~R~\awׂaUP]U?j](CT?*sD@@@@@@@DTP=66V8TT1z!s"c[_,'5w[4uh+Aq OJJֽq tWsASNÇt"t9Ν;[U`\W^+VMU}oذo^ڴi#͍<|yuTW!u3nA7/*vz`@'vYE@@@@@@@(e 4yLLɢ:Lm`vҾźةdyzt9pէBH;TTj+ Aq OJJֽq]W﷪tj4~iСCzJ^|EԩTW_ԇ+W… erϪ_zdРA*;/󱥵=ofݟ[tB@@@@@@@<.`TT1*fsf%/ݺۚQ{H bu۶乏gJJz'j%bՃYmY!V5A@II?)TR9 ##U`ݝeȐ!`/ұcG+޿vNNl߾],Y"sΕǏ}ݻw|gd1{n]y>y᭷ޒ-ZftjNP=/M@@@@@@@@(R|y1<ڌЌSGdr1*Bdȃ=%Z%ݶ|V8GWAvhW. +q  PR|>))YM*+>%>%* nVO5͊'yT|uVyܸqRҙoTٳ~WUYnT O>q^98\III2~sUMS T7]nqX?7t vhc@@@@@@@@ &HLLnNoׁ#G3tj$5*UU+Y?_`W+7_V `Ѣ/ OJC9sL\b|&uTgȀ%~1{E֫WOF%ׯ~XԳ-[U~뭠ZTqW_-*z_5lPFa.=*OWwuz ?@*Wlv7>zh} Au@@@@@@@@&L( 6c.+W?;YeW°^\ѯn[Y_!WJ6 @@|RZҮ33Au㊹ω[P]UEU^Wռkժ3|p={^gDUP]Nٻw~2TU|oժDFFʾ}$!!A-ZP!nݺuV֬Y#=;OG.]84Tw`@@@@@@@7r1FEsWT7x/e%~m"y3lyeܗfN&IZ4mB])! @i ]'iqLs?IxB~~~֏6k^˂ ֻUziӧ>|X-ZjztE^zyВ%Kxf iK&M_0T9yuСW_9L~2rHqh+}?XGEu>6@@@@@@@@P'M9_Qݼ1W27׶ۮ\JIGM=Y}=vԙ#`@J]'Np©KSiWAzcT        :bTT6RڌzN~fgfɊpԋm{?.RR>*1ޣVc>+b7 OJӿKr/E;6{JJJYJr2lPԨT+A0 (Rvq}Ï~Tze)Y'|Rv%'N iZT/{        @q L>]rAuͽurw!}@@4|Rڹϕ8UN䮨OR塇!t3nVTm[-wӼy<6tngԨQz yR@@@@@@@*)SAAA:c1o!A0o@O<>H\"i9FmyJAu`gH'{ @@@@@@@@HJJ5kJ``ՋS@@?)@Pݳu‚3AuYHz~ ; zf۝CEuΊ       V`ԩzhhdeeT/,$! @ {=I%@}Jl%?T=* 9R۬p.xVt .i        PӧOH z [3< G{F"Ae5?>iճ { L        y!*xPaI(D@'Yzz*YsOlu#<ⲢUmݬ{ZJ[@}VW۪Ԩ^w!       2eԬYSUĖc,d2+T/_FE@ T/Yq_PGf( T/;Q/>z>޳zzvzG @ @ @ضǍlVP}r C~Uucd~*+ҊVLYM=s_E^C ~z~ݺuogpa @ @ @ @ҊQ[[݂9B- cλtUcƌXxqGjzKoqО!@ @ @ @Z4>uԨ\_PP}h  @@@P}h⦵bu_T[7cŒ:Jχ O#>kWRPk.,j'Nd{*36Zw3j @ @ @ @H! ,ƨ 7 @A}+팸Ƶq#Icm\摸DH?ccڴi ov{Kl.~Fڮ8 8cclF @ @ @ @"42hmmlC.Kl?CV3yF7R~{o(P?e/{YiU7́A+nݺK/Θ7Ą#ۻ~^RꃲX.B @ @ @@TWTO;ӕCku&-nt3c{.n8wn]w;ZZZr&N m4ց՗,Y<@--L^;M?":o!l:,^ʨ] @ @ @ @ @{{{L>PdRP} @O@P}x-t7m\U=zU_NJ% v859ͱJd36nQM}@: @ @ @ @A -^x KVVV K K @۷Y{m|&o;b#vC{cwŲn|5cώJi;?j}{,> %/&L]w;MuMbuc絖+?v @ @ @ @ GSSSTWWG& Aa,nguYٰzϻ3&woOw# @ >.A @ @ @ @v-0o޼hmmsd:::rs=Ş1qh<)Xw?ܑYWxGXf(7z`e2q->\⽧] i,]2. {7׸;EOekω$@#T@P}."@ @ @ @ @dƍSQ?cGpMvtƬn2i8']tu^^{S״~iP]zʱC۳9^{l&CF_`G @ @ @ @@Qi??VP?_=-Z&uHA @ @ @ @ ̙3'Z[[# g2Aپ\_^Ϙ}uuɩ'DZ =޳plA8@F^\F @ @ @ @@Ikkkշ$W&܋.^y]CsZUWŒǍw=X3>[!5 @(T  @ @ @ @(J`ܹ1f7=ƗOxs˓VWg*{ un8Ջ}^jpA @ @ @ @cԩQUUeeesH_ӭ;}CqMwm?v,TO/+Wy+ku#O<\k2; @` x @ @ @ @-0o޼\ETߒnͻWO<VqՍww>\{0]ǁSf1϶d @, >ף @ @ @ @ P D}}}֪_цwx~{Ƅ>]lp 7tTA>[:FFhYiI @ @ @ @ ՛շp̘gzSRϛ{MmLT^{K?3~漋cŪ5kl^.nជ6j6 0Gz4 @ @ @ @J"0wܘ:uj.d+%#7ghm7̈́8鍇=w4/PU}0ʏ6T-=i ^շוs @ @ @ @ @{{{FUUU o>2^D6wue:kz' @` ЅX @ @ @ @L`֬YՑI2*o'9>w1Z*Nzxcq=>[_ @* >RWs @ @ @ @ P*iP!ƍlVP}s|Ǒq{51k")kۭy1cbS3~V8?>[!5 @(T  @ @ @ @(J I[P}sϛgm.޷0.XxiVWƞ1ee>q/T?A_jµ7l; s>ۆ'@#Y@P}$g#@ @ @ @ @3ڢ陠z:_&IoP#9:::rO>}')L&]98z#invSW fPpM4ι߫/- i @Q ^E+lf!@ @ @ @ PZ]v٥fNE 'И֗XWxG{Օ5 ?12q=^7yN.qޕ;___s]z#5/ާױMӊn[lcdAҬziB @ @ @ mՋsm93Z[[27𬪬]wH+߻Xav6|l/JO @ @ @ @B;fw^GuuuTTTPk @ەv\n @ @ @ @Af1khin$I " ok  @ @ @ @\4UUUQ^^.>Fl㪹g @ @ @ @S`F[[L:5***޵ @W@P}];wN @ @ @ @f1󢹹9*++շ=+ @#A@P}$g @ @ @ @ @`[ ̚=;:2Ldm[^pswtt䆜|f@O&ۄդ @ @ @ @4>k֬hhlS  @Tvf&@ @ @ @ @`dhk֨I*'%UT) @m) -uM @ @ @ @HHQG¢z @` o[_ @ @ @ @ } d8oΜhjjJA{9= 0X%: @ @ @ @lmIEzMMMd2շׅt @ + @ @ @ @ } ̚=;LǏz;نӣtttn3ۇm @`  @ @ @ @KmhjjZ% 0G[ @ @ @ @[9kV477Geeed*oi @ @ @ @ @6/0-uuu*oY @zAu @ @ @ @lZ;Λ3'룦FEMS9CxV@PY - @ @ @ @%0{\P6f#׻8T:::r>%@Ta @ @ @ @ ;cFDmm8@C@P @ @ @ @ C`y*D&QQ& @OA>Y$@ @ @ @ @@AmhnjSV&^ @lB@P}0 @ @ @ @ @mmUUT @lY@P}Fz @ @ @ @ 0fΚMIEweѽR6{d,!@ @ @ @ @` ̞=;GMMM `v @(Tŋ  @ @ @ @@̙깠z&zt"@F^~O @ @ @ @@?ҠzKKK&;a  0G @ @ @ @ EmmUUU1\P}b: @^@P}Կ @ @ @ @ YfECccTWWG&T߂ @T& @ @ @ @ @fA7n\dYAs9KAuo @ @ @ @lA -/  @ @ @ @ @؂hz&v$i-.z]#@lJM8N @ @ @ @3ӊ Q[W7 @?Q҇ @ @ @ @,6sfFeeeAEn @@Ť @ @ @ @T;fw^GuuuTTT(}3xl @ғ @ @ @ @'fcUIP='&@* >P1  @ @ @ @mϏ\ErA @nf @ @ @ @K=O!> @[) p @ @ @ @ 0*lb=$ Pzф& @ @ @ @ @` ̟??:2Ldm8= pZ B>x @ @ @ @ @`i$= 766F]]]!@ս @ @ @ @ y6mZ: oY @ @ @ @ @؂@Tomm(++ A-9MPQ{ @ @ @ @fqDsssTVV o } twgnuٵ(Ll|arׂd! @ @ @ @V`ܹ555If-])7FBw(}^#h|Cۇ{30AyM @ @ @ @?~DŽ [P}kku#?&NhSk;;,f{oOo'  @ ]X^^dž_}wQ>,;jz_* @ @ @ @ @Yzsssթ,˖[wCA?^]]ICz1g̾_G|]u?65 @@;+7W^W_:9&l᷍:oQlм}p|}:F @ @ @ @hoo7nYzZ~mM~↻ݚv= V_s9+CߣA"0Al;N[< ޷5bŎRq @ @ @ @ Q[[+7Ʋö5/9WS&M%OtWk+-]'N(o!9 @`T3~O}^Slм}ݯz_* @ @ @ @ @Y uuuMՙ$o ؆wkpFH-q//)^ǼŹkƿyp.㸚xeqߣO>׾doSp.mu]}<O<<+Nj[۫;<'LǦ4ybSLS(߰}3y+o#2e}w˯='O;2iz?d<&?vw}Abo{tNOzܖ& @ @ @ @9s5&k@IDATҠz&T\z_C^{pa?Jv~U_ߣ>^sso9wUq .g_ j|ⅻN=ؒ8cE蒥cƘ =G4z87eV8ֳǾ6h6 C莋oA<椵w͞ZXtf1jrcN1 vx^nú O9:wqF?mrϳⒸG{I<?Bo~WtM؏@҅ @ @ @ @Q-^[[+w-hAۤu[ JT_ly*OoIo=Bǿt,.뫑j/xNs_#@a"б8*ݜ.u4g&:֞ΎO<Ź?!2͹|Y Uڹ<&O=ֆAbotC< O( @ @ @ @s΍1cƨwBZ)Ύ5'h=9^+^IMo ǯX&Hle};7OǓOkn;\UcC=} ?E\.⭇|K!;ˮ_x }5 @` ,\vG]qb'Ưy_-/I|֗Nʱ1K%{nojo↻N&}bϖ$$_uwsH ;T  @ @ @ @::ujTUU%NշYjj*# xc7TO̿9w_Ga?ml='>>x|'gLo3/*~) HVQQr 4 @`X zǒeoό促8]-|ЙsC=NyǑnMر1iB]O/q ;0V4շ @ @ @ @FyrꢫKP?˯9kd7}+'+^_ܵ2e1GuR6+gUm\| .]_6w%1pmN_@/ݾ?k{W?Ҫit{#^ΏvD3{_o\O%!W$a O-qnpϠz nECP}+ !@ @ @ @ @`T ,X 룶VE|σ79t|MuT3:e\Rտ_ſ}pZh|3zVR9)~]Wusi9c)i-Q>fL>v @` \uxpn5+{,[GCϏ=+]4*2'EE?C~+s|G]󇿸$.N=>v8pgocK ;5T @ @ @ @6zSSz1 ҧ㮇}8q뽅0]~4ҭAwvvX&?}^O}?7%.MWWǘMsk?,׍֏=N8zڝ$>w=]@6?зPm"|C)8gP2=AyM @ @ @ @;wnL:5TLw '-֕FC3ͱ"~W~+׬-,Ӕ;ƓOŔvkɟrO\_ٮ񞍗>9w!muPG4rg;~Ϗ;|4Ɩǂ?j꧝BؽgP>:noOx @ @ @ @ Mۣ5<ɉ o;%OzTV/ܫi_;'&,+EPCߝ x27NŹ?!^.NryD3pb863mT_~Ǟ-}ӟ1흯:(yr?eߔkSE;z=ǒ X3^^t'@ @ @ @ @` ̟??:2n8].b~lŪx_K51K' 5/v`nl}\uӝ'-N*짍~lInjݛw͝Ok׭Tv;yrw8pϩ} ؾeP=YLJ7t8|$oH?/͍׾d?,+T/v|aҭho! @ @ @ @*yƍlVQ}3[3f_T1i|]^\?='9}B_|s[ c[w)>Ec*|O|sLa|csLYƄwf#W&%ɹl; ^y}P=Bs :mTO^?;>&vkZ܁ :cE{LI~GG|cUݏ#&O,LǧZ=pgPI!hҙ65kĺur6 @ @ @ @J,*R2ʓltiE樭nAvueㄯKWխ"XğN*.[׹4읆ڐ;II|ízoy_Ǹ{uk<)Ɩ>뺺 o1kc.V[eℸE@dzaݛķ?B_ ڮD,\E=_,]2?vgcgOO}f węs䋟|1a_;t=bZX+o=~9fTMI?._zFVU'yMB-W~ c/TpnWRa7>__;-I"w~y>gw6lJۡ_;/r_{;w+ױ\xu1wW憽Ż^sfHkRvqO1+> dI&~-/̝0^ }AJm_R_ti]691o @ @ @ @l+lJCwvvƚ5kraK>o޼hjjʅUT'h;W57+VSZ-RS&Tz#/(;#v/짍2^{kt%~bq+jlLsNPoQtu%Hc֘1}WLxɧcŪ5yo|Mv%iq1z @Z6:,]3)@;{{@67&ŋsB꛶r @ @ @ @` abM4)˷EG ,ƨ]lEN@P4˖-UV1~ @ @ @ @j4ϲf͚\zC};Ϗ֜e&TnWӍ @& ^'x"o^O @ @ @ @/>f̘ipϐ*7G'@' ?-;[< @ @ @ @AXtiZˠ]s$^=O!>W3 @%}-6(^ @ @ @ @T/3---QYY)^< @ X yGA&@ @ @ @(zi<ϟMMMQ]]L&2VK3K>$VO @ |Ra:CQP4f!@ @ @ @(zi$= 766F]]]nBA]@p|[輣zqF @ @ @ @V@P41mڴM(^W @#X T/n9M @ @ @ PZAxA֨T/Y @,X yGA&@ @ @ @(zl6.hnnJAI@|ZP; h4 @ @ @ @@iKMIP&2a5  0kAV9(^ @ @ @ @T/ٳcʔ)1~N*g4Sf|I4f!@xtzijjjTT/  @hՋ[zqF @ @ @ @V@P4gkl62Iz4Sf|I4f!@xtzi\Ed2*, @HՋ[弣zqF @ @ @ @V@P4m3gFsSSTUWǘ2AҰzqwT/h @ @ @ @ sF[[DuUUdKj @`d ւŭsQP8G  @ @ @ @J+ ^ϙfESRQ.oEeQo'ѽvs5zvwdsgesl*VDɱω+w&4 @ @ @2AϞ=;GMMM)T/ Y @ ^*uP}ccŗǯ.*֮,a&C`lEy列;^wh4L& @ @ @ =ffUT"IaUN1`+͂(^ ;Ci&,iH 㒿]?Q//>򮣄Ʀ7 @ @ @rA,AToiiڤzgWziXBd|[PϜ˘ˋ{ C=4>S @ @ @ @`f%fEKssTUUŘrAҰzqw57bh[Qqо{. @ @ @ @pT/*̚5+:2ziXBd|ZPU;vPm79o]  @ @ @ @T/4ƍl6+^V @#Y T/nTߌXXM`miFJ @ @ @ ziӊMMQ[[݂a5  0kAV98AWXfmq7o4TFJ @ @ @ zigE3AtLV.ԥ%`+Y @|>)0!8Ahi, ?@o]  @ @ @ @T/̴zCCթ^R @#] EV:(^ۇN @ @ @y͜QYYPEҸzqwT/C@P}X'wI @ @ @RA1󢾾>"Ջw5 0kA:(^ۇN @ @ @ſl̚=;Z* g2AY@t|ZP; h! }$@ @ @ @ziiP!\P4f!@F@>`-^*;w|4,d#0b @ @ @ @(A gԩSBPA،@>`-~;vP%xtueq(z,D @ @ @zl6fw^477Geezf @F@>`-^j;~?kuwFt'@ @ @ @C( ^YgGCCCTWWG&Lwf̒0 , @@>oΐw+TZ4aT'n @ @ @ @`i$}֬Y Ջw5 0k_+nT?򕫋y P@P}` @ @ @ @!T/ hmmzRR]EҰzqw'~.zzEq7o4 Lw @ @ @ 0OQKj @`$ ւŭrqGbҧy P@P}` @ @ @ @!T/?ysDSSSTVV Oj @`4ւŭvq/Eݼ( >@0  @ @ @ @ -ޔTTL&ziXBd|ZPU;vP<7; @ @ @BAϚ=;LǏz;J3uifJi @xO7Lg;vPO>xi,) O( @ @ @ @0T/"͜MMMQ[[ziHBt|[`OwFt'@ @ @ @C( ^fEsssTVVF&REҸzqwQ9-y|qq7_5UǴy qEqCDWWW0pT @ @ @ @@紥^3ڢ9^WW'@zq`_',]Io{]Gs.5k=3Wq-w^/Q[]=X,Tk{_}";>uFt,~/<ڸkn˖"Ž7W^;ڰkϹs%S[|}8^q|]+^W|ѹol^yQ#)o3ȗcR~%4 @ @ @ئvwwysD}}}Ԩ^< @ X y_Ǘx_[pg}5mٴe!>_O/,woy 8佟'zz CJWPd&"@ @ @ @\@P4ijgkiL*r4, Xt"@A ;+ QX9Oo׭wŒˢ%~؋^;Nm<[|[կMK؊giI±_ױ <nէϜx(oPmyE }Cw=p5^TT?[g5kCUP}P] @ @ @% ^_a3fDKKK֪^P @lF E TqGxwژV?0f2fO*OLBw5A"qq/{(/zN|]o$t-w_NkàzO*N)toP0`Y_h玾ǝ?ATZW'@ @ @ @T֦.X 37M  @`@>`-^;"8AÎ?5\UoWgޟ}EϙLkQ|@_3:cVO olI;ƟVn+w/k֮˟ i:Ǣ',ٰq/}} C @ @ @ ziΝ^]]cƌT/ Y @,X yO5k}on'x_ӽx=*V^Bg|F[Q ˿φӛ0^6~NuNP @ @ @ @`KSN(++T/ Y @,X yODggWq7v)~ӯFgk?ӕm/G_h -z<<1ʓo>S?i 3;Vom5TP> @ @ @ 0Tꥑ7o^z]]]t%9Lwf̒0 , @@>oΐwǬ])>~<0#/.Tc[W\/' ɓvWd8W*|qu7|P=}OƑ/;0wi-zY]crmA @ @ @ @a ^EX`AGmm!5  0k_+n-[kcs)O*_{+W_KMF}EP}lp`Ūǯ|gz0vgr};/٫]Mu_wrl)0!8yw;q~{|(ʟʽf^̷UP}oTh29˒t{}+9{/Ӿ- ۧ_Sk˯KOyeWoꙆ @ @ @ @& ^̎lnnfAŰ8yZP}]Ty[?a@qY\oNv[g^?)}Isv;wڟ6;T؉xڋqi@ :R'y{ї^,x,gg[{/1sA @ @ @Lz1VToZQc0j @( kAv9w,SP}f#?s6^'/x[ߞ]ws~c_y[_sg}??Oė>{ߠ?g?}㛿Gv:6'(fbfL`x\ c_?#7?O53IO'0h?}qWI_ܧN[ork{~M_xӟpoµG7?3z}Ʃx>-y*y]ٽ'Ϗ>v/]=jvEXB @ @ @Lz1{f3ҠŘ8yMѹcJaHG?t:|S_P>JMG?ʸn['_?sۗ?}IGOsw|i韆]s{YiX7~v @ @ @nA'-฽QVcnn.'w5 p򀵠d;->;կL+?ڬmuZY;?x1Ҡ_q.>vϽ;xKaWڹNc/>|wɟxie?w~4/~[0=$joϻ= ܿҨ CWPvڿ"S5C/[׼vvxѳ_˼?ЇwvSkћR @ @ @ @7~Dߏt:YP=GկW p@T_s2s3V٭jC{qWLޟN< ɫIwsss!^Y @#.'QP}2G_`G/y @ @ @'?~?Ο?v;*f @ 'QP}2G_uxK;  @ @ @ @L@Pf3j$I`)fbfL`x\ z1f^GyOz2 @ @ @ @Ak8%Ah4ꇢ4(@tz(>/pmk?LzB @ @ @ @ T/ z8uTjlBAb\Ba<`->&玂9=ݺs?6  @ @ @ @L@P;NT՘ Ab\Ba<`->&玂9='W` @ @ @ @Dž jERT  @@򀵠d; Oh 4j @ @ @ @@& ^A؈vZ-$QQV @GY X O˹dFO@rKA=! @ @ @ sbqq1N8@PV @GY X O˹dFO-ss?1  @ @ @ @L@PVToZh4TT/, @Qւt(>/pLm'A=! @ @ @ s677DR&LeL],yIO @ x?0!wT/,+$m @ @ @F@PCzncaaAEC+HJ XCɶ=wT臆l ?4vS @ @ @ @AOAZ;󱴴z]P}rR3 @eւv(> A>yJ @ @ @ szш~0>(fbfL`x\ z1fnAOG @ @ @TZΝNiP=IASIE XCvfffՋa5  p򀵠d;>A/?}'{x @1x` @ @ @ @T/Fss3h4ҥKŰ8yZP}]__do4ӯxw>#t%@ @ @ @nz1۱z]EbHBu<`->NvP|O<Ο8&[fg?5Go] @ @ @ @iT/fҊfSPN @eւv`ӧ~c뿾qM`_߼ @ @ @ @" ^NlllJTxb$᧘%0 i @`r'37#?{Mm(f1f!W~ viu @ @ @VAbvEӉT/, @Qn]oFP=}4ko_z.N \%pl|W>1\H* @ @ @ @.pd@IDAT" ^NrTHDPV @GY X O˹ Ow;wx>@!ffIf"GLٽwwב˿"]&jcD?z~?ʿgi+u"@ @ @ @nz1[՗baaa j @( kAv9wAVa4 @ @ @ @QT/fGӊf`2&x<&Ae|'@nbsGAb9 @2kAv;wTh @ @ @ @bՋ\[_V$I$᧘%0 i @`r'3䎂x @ @ @ @AHZ,-/G^&T  @n's4 @ @ @ @XAb,z1f!@@TlsGA&@ @ @ @(V@P4j: j @( kAv9wTh @ @ @ @b'qܹh6QT''5 P<`->n玂9M @ @ @ Pz1aE氢zV$ITT/, @Qւr(> @ @ @ @ 㹶'OǏ`Xa= ?L],yIO @ x?0!wT/, @ @ @ @]]fz]EbHBu<`&QP}2G  @ @ @ @T/sum-ZVT*HS^Y @#,'QP}2G  @ @ @ @T/LaEFz1f!@@Tl?ĥKbaa!;6dF @ @ @ @(@ ͳ|,x# S 8{\,..FVSQ  @ TlsOMVwr @ @ @ @(YH,ǏUYP>#ӴLAi BO9/^;LUbLB @ @ @ pxz:mxՙ3n^< @# I7I'cff&{!=vE @ @ @ @@4O|"]"-3ٳYE3I'4(zq|>ߟMZTDMix݇ @ @ @ @KGPxbw}ٯ[[o͂՟[yj6cZc,P2 i`ӴH{{7^f#@ @ @ @ wR?ȞghQDP}F @@& 9_>Ū @ @ @ @O0<=77STbvvJ9Z4Z^ER&@" ~-}  @ @ @ @(z\\R}Ge<LH@P@\: @ @ @ @ PBjVQ= 'z π% @T?  @ @ @ @N +_tIPt'  @  @ @ @ @J&pۍvqlvVPdo @!f @ @ @ @X[[V$zvb  @C   @ @ @ @J$՗baa!zR  @C 0 @ @ @ @J#VT_n6^`0T/[( phACH @ @ @ @@ItTP=]r2Li`ӴH8 @ @ @ @-VT_Zzh* @N @ @ @ @F tWWDR:>K+ @@Eug @ @ @ @#A=QVcnn.Gi"@*; @ @ @ @[z[Փ$TߛK  @ಀ@ @ @ @ @[[[UTTͥ 3@ @ @ @ @q^/N>sss!>NK; @`(c@ @ @ @ @~?>vT*A @_pE @ @ @ @lFZ$I" ?uYnK%d/  @ @ @ @ FӠr4DP @T @ @ @ @ z8uTjBPG 0N@P}v @ @ @ @.;NT՘ A'@ %ҁ @ @ @ @ pBZT*%> N@@PX @ @ @ @ PJhQ"IKy ,8t&@ @ @ @ @[[['N` ^3` @; @ @ @ @H+Zh4*n-8 "@ @ @ @ @DtRdNeӴ~Ai BO @ @ @ @zncaaAETZ  @՝ @ @ @ @-N?|,--E^TߛJ  @ W @ @ @ @M`{{; 7 :ެ{`7K%@~ @ @ @ @,pܹt:Փ$Tw0 @ i'@ @ @ @ @yEz.^` @ @ @ @ @؈vj5;zy @T߯~ @ @ @ @UJ̌zYu @T߿ @ @ @ @S`ss3h4ҥK<VMD@P Z @ @ @ @ PFX\\zz5 @T? @ @ @ @K l6˵VKL" > @ @ @ @A`cc#VVVŋ# ?ӴpAi BO @ @ @ @ztb~~>fggGsi%@; @ @ @ @'f3j$I">L; @@Eug @ @ @ @677B}A\Z  @*; @ @ @ @'VToZQc0NPQ @ @ @ @ @h^F1<`F~2H @ @ @ @-f3Ҡ> VOS@P}P @ @ @ @ PZ4J%3PQG  @ WJ? @ @ @ @(VPގV177e< LH@P@\: @ @ @ @ P2~[[[tz$%;KB@Ph @ @ @ @ P*4WTT/[, p(ACD @ @ @ @@z^>}:BPDo @og$ @ @ @ @G_nGRT?[n @@E( @ @ @ @,f3j$I` Mnx @ ~ @ @ @ @ @`o4՗hdB @ @ @ @zqԩjYGA^Z  @*; @ @ @ @#;NT՘ A1`  @*; @ @ @ @[Dž jERTߛJ  @ W @ @ @ @MFsTj$!GZ@Pj  @ @ @ @Q`m}=N<Ǐz2~nv<{]. @ @ @ @ @ 议Fٌzz' @`(m @ @ @ @X][VJ%!N @`  @ @ @ @^LaEFzO @`_b҉ @ @ @ @ 8{\,..FVSQ  @ Lw @ @ @ @J'Ê~?az}0M `ӴH8 @ @ @ @-3gnG^WQ}4V @eAu' @ @ @ @Ϟ*jHDE\Z  @*; @ @ @ @']]VjT 3@ @ @ @ @ghQDP}4V @@*  @ @ @ @ @`Z4F\tIE\Z  @ @ @ @ @ Ũj18. @Aug @ @ @ @YE,$*N뮻2; @ @ @ @"vԇ/^$[ @kկ @ @ @ @7vj|TA  @uׁJ @ @ @ @biy9j$I"~ @o q @ @ @ @AXXX~/~/ @]wAq @ @ @ @W ՗ͨ1 կqIU@P}W7  @ @ @ @ #pۍ槂dVN lG @~r / @ @ @ @A`5FCEt @" [ @ @ @ @JN'*JvWEp\ @vTM= @ @ @ @\ ~l,..FZTw: @ci&@ @ @ @ @~?ףj0$zO @TN @ @ @ @X /--| ,X: OA}BF @ @ @ @@itsss=NH@P@\: @ @ @ @ P2~gFՊJ"^\ @ꇄ3 @ @ @ @RTH$3M, @@*9 @ @ @ @ @i$}mm-^gB @ @ @ @8FӉڰ꣹ @TTw @ @ @ @ 0N Z333 @TTw @ @ @ @ @ߏEٌJ"7 @A+ @ @ @ @ @wXQ9^"IwCr p  @ @ @ @ pzK+ @@Eug @ @ @ @666j5;&>L; @@Eug @ @ @ @z^|JPQ @ @ @ @ @8ͬzшK. NPQ @ @ @ @ @hX\\zh* @N @ @ @ @F ՛ͦh& @+W,\ @ @ @ @ @`7XYYɂ/^d0fY~/ d'@ @ @ @ @e^N'cvvVP @T' @ @ @ @ lmmEٌjI@X? 0^@P} @ @ @ @[`ss3 /,,DT/qz @`?Q҇ @ @ @ @2 [V e> NO@P}Nz @ @ @ @ P^^F i, @@*9 @ @ @ @ @hh6UTm ; @ @ @ @-WVVRdUT 3@ @ @ @ @iX^^jsss!>L @ PQ9 @ @ @ @ @~?dA$IB, $ @ @ @ @ @`@T+ JPQ @ @ @ @ @8^OT 0PQ1 @ @ @ @ @~?Ο?v;*TZ @WկX"@ @ @ @ @n[[[l6ZF$ :ެ{`7K%@~ @ @ @ @H#iP}yy9FF"d @L @ @ @ @@z^:u*jZf!^#' >NH; @ @ @ @eHN'j̄zO @c@ @ @ @ @@~\p!ZVT*AK'@ ~,]  @ @ @ @(Fj$<MH@P@\: @ @ @ @ PBX\\'N`0T/d @ӝ @ @ @ @ [V4 KLJ@PPl @ @ @ @ P"t:QTU'òiZ 4g!@R' @ @ @ @F zh۱h* @N @ @ @ @Hk?>^ M pE@P+ @ @ @ @&FHno=A% @{ x?K} @ @ @ @\8w\t:HI; @qㄴ @ @ @ @ Pvz^T/a~ @`sҋ @ @ @ @ lllDݎjǎSQG  @ WJ? @ @ @ @*bee%cffFP  @ JO @ @ @ @)UTo4q%Ar&@" ~-}  @ @ @ @(v,..F^WQ  @  @ @ @ @%VTo6v%@&TDX @ @ @ @ +++YPŋ iZ 4g!@R' @ @ @ @F zt:1??꣹ @՝ @ @ @ @X[[V$80 @՝ @ @ @ @XMKK~_P}4V @ @ @ @ @ ՗ͨ1 ǁi'@  @ @ @ @ @`n7 =aZ}0zȃ*zm @x' @ @ @ @ @iE7*(X= _AJG @ @ @ @@YtRd*$X7 oA}SH @ @ @ @@ A=QVcnn.Kx,8&@ @ @ @ @\~?ףj0$z @T?1 @ @ @ @I /--| i8܌"@ @ @ @ @<gXYY9Al @Og, @ @ @ @G]ٳjR > @AbB @ @ @ @X[_V$I$g+6MY @Ts@ @ @ @ @HZ,-/G^:  ; @ @ @ @-pۍNaEaIuGsi%@  @ @ @ @ @`@ToZQgffǁi'@  @ @ @ @ @`o~gϝfJEP}o*- @+W,\ @ @ @ @ @`7zsXQVE$* @jA5\ @ @ @ @ @F8yd?~< `ͻ#vf @`w'K @ @ @ @\f39 @Qt @ @ @ @ @ bum-ZVT*H *; @1c4 @ @ @ @ Pz3n?  @} I' @ @ @ @J*0 sZME&@( ~@0  @ @ @ @(zT+H4)Mnx @ ~ @ @ @ @ @`Μvz]ETZ  @՝ @ @ @ @X?{6^"IGsi%@  @ @ @ @ @`@wu5ZfWqlfFP}v @ @ @ @ @F vnGu~>AXZ  @s@ @ @ @ @kkVTo4q%Gsi%@; @ @ @ @''VŌ㸴 @՝ @ @ @ @议fճz>L; @஻ @ @ @ @ @ToQVTx钠.Fn @T @ @ @ @ pۍvqlvVP!7 @ _+ @ @ @ @X[[V$u> @nT  @ @ @ @\#՗baa!5: @vT- @ @ @ @\%VT_n6^`0T% @`WA]Y$@ @ @ @ @n7 7aZ}:`S F5 @ @ @ @ @մR oq .(n @ @ @ @ @*jt:T*]կqIM@P}7 @ @ @ @ pY`0ٳj5BP @T @ @ @ @R X[_vàz$>OK@P}_L: @ @ @ @ PbX^^* ,X: OA}BF @ @ @ @@iz^>}:BP  @DK_ @ @ @ @&nRX/ p8AùE @ @ @ @@ylFZ$I" ?Ӵ|Ai BO @ @ @ @-FӠr4^Z @@ @ @ @ @^/N:Z-(>K+ @@Eug @ @ @ @cҠzӉj333!>L3 @@Eug @ @ @ @{ pBZT*{Si!@\Tb @ @ @ @ lllDݎZI{ @կpM @ @ @ @bqq1N8@PF"w @ _ @ @ @ @H+Zh4*_; @`7AT#@ @ @ @ @ν-7nd^`IA/'xv#̾h Q;MPVHp~# JnzZ~+A~ z@IDAT=E @ @ @ @? lۘfquueqM8$ ~H @ @ @ @^_~dEQk  @)(C @ @ @ @@OOOh4"ۥ"B4O @ @ @ @b>GTϲLPK  @ @ @ @ %D(ջ  @ @ @ @ @1"铉\ @Au=@ @ @ @ @.v"Az=A.0u @z @ @ @ @(۹T  @& @ @ @ @t <==x<(LTR'@4& @ @ @ @ 4˲TogR%@ Z"@ @ @ @ @!X,o"wCkM}/ pL1 @ @ @ @xn1c0Ņ @t w  @ @ @ @ ceyGe7 @Fv @ @ @ @ >~uuUU NO" ~= @ @ @ @,LTNQEu-r38; piNv @ @ @ @ vG!ۥ!B4O @ @ @ @,h&[ @ @ @ @ @MP}XDo4QK ` @ @ @ @ @@@3A)#󸼼 A0% @@#`> @ @ @ @ @q1>eq. @N @ @ @ @ @@@TcŅz;* @Du=@ @ @ @ @.v[\^^z: @`'`6 @ @ @ @ @qׯ1͢ R!@ Z"@ @ @ @ @!(2<,"wCkM}/ pL1 @ @ @ @h"MP:FўDP]g @:;  @ @ @ @H^`Ưpo!|K @ջ  @ @ @ @H] LTR&@LT @ @ @ @8.Pux͢MT,wV @moss @ @ @ @,1Nc0ħ At @oT @ @ @ @HE`^:<,SyI]@Pv$@ @ @ @ @ UTL*TO;% W{  @ @ @ @HA~]QEu-CwF @ 5?w @ @ @ @ Y.gP9mK؂`i- @@#D @ @ @ @ @]`LTLLToR%@ @ @ @ @ ,WMToR%@ @ @ @ @ "Pulnoc<Gqyy-`J @FDu}@ @ @ @ @UUzt]P=2A\* @Au@ @ @ @ @v&>Lb0Ņz;* @Du=@ @ @ @ @.2E\^^ wa @ @ @ @ @ TUۘNՏS @^_-\ @ @ @ @ @zdyGeջϡ&^8&䘌u @ @ @ @D4z(bO"3 @@ @ @ @ @$/p\|>nnw @S@P @ @ @ @h4]P 'O ~- @ @ @ @$+PUUEYՓ'@T?f @ @ @ @X&0,3Q=pd @LA3l'@ @ @ @ @ 9f_|ϟ?GջGRHOo!@' @ @ @ @*ʲ(LToR%@ @ @ @ @ N#m5QK ` @ @ @ @ @@rDhdz2 @`/`F @ @ @ @ @q.q CՏS @^_-\ @ @ @ @ @fՋD"ۥCkM}/ pL1 @ @ @ @xMf(DuMA8E@P%{ @ @ @ @HY)&KP=LTO8M@P4' @ @ @ @HW~?Q=铠z @JG @ @ @ @@6E z6s @ ne' @ @ @ @i <<<'Fx~~TO 8G@P-{  @ @ @ @HQ)qEaz  @盹 @ @ @ @eY ؝+EϽ @ @ @ @ pbT[d.B4O @ @ @ @m qqq!ΥJT @ @ @ @x||,#ȲLP L ` @ @ @ @ @@>~uuUU s @LT @ @ @ @h&O("TS'@ @ @ @ @ .nAhߘu-٪ ۷ @O @ @ @ @ @ m(2i @' e @ @ @ @ 4Ab~o`z @JG @ @ @ @@<2Sg&@T?f @ @ @ @*c>Y 'KA@P hn!@ @ @ @ @ )&D A @oT @ @ @ @HH`o!ЃwT @os' @ @ @ @ׯ1͢  @A @ @ @ @g(2<,"wt`A4 @~ @ @ @ @ p\7AFǽT @{Au@ @ @ @ @vvk FAv/U @z @ @ @ @MP}>GBPL ` @ @ @ @ @qt~_P8  @U@P @ @ @ @ l6pY~ @{A5\ @ @ @ @ @g/D]ׂ?Y!@(  @ @ @ @ gft:hdqM8$ ~H @ @ @ @^b>G/fk @O~ @ @ @ @,nc6Օ7 @!k @ @ @ @xhf5&IE!1 @d @ @ @ @) <==(l^? Gz~  x? @ @ @ @h|MP=2Av.U @ @ @ @ @ @@ՋTR'@4& @ @ @ @ l6<ӧO&s @ @ @ @ @m, ջ  @& @ @ @ @ <<<'Fx~~ToR%@ @ @ @ @ %80Q K  @ @ @ @ .LT/RPI * j @ @ @ @cX߾}}m|5A @1'd @ @ @ @ @E`|>` % %N @ @ @ @@:&בydY&zC8? - md @ @ @ @i dWWWQUz @)(C @ @ @ @@D벌(kA  @Os @ @ @ @tn(To]ZH`i- @@#D @ @ @ @ @]`LTLLToR%@ @ @ @ @ ,WMToR%@ @ @ @ @ "Pulnoc<Gqyy-`J @FDu}@ @ @ @ @UUzt]P=2A\* @Au@ @ @ @ @v&>Lb0Ņz;* @Du=@ @ @ @ @.2E\^^ wa @ @ @ @ @ TUۘNՏS @^_-\ @ @ @ @ @zdyGeջϡ&^8&䘌u @ @ @ @D4z(bO"3 @@ @ @ @ @$/p\|>nnw @S@P @ @ @ @h4]P 'O ~- @ @ @ @$+PUUEYՓ'@T?f @ @ @ @X&0,3Q=pd @LA3l'@ @ @ @ @ 9f_|ϟ?GջGRHOo!@' @ @ @ @*ʲ(LToR%@ @ @ @ @ N#m5QK ` @ @ @ @ @@rDhdz2 @`/`F @ @ @ @ @q.q CՏS @^_-\ @ @ @ @ @fՋD"ۥCkM}/ pL1 @ @ @ @xMf(DuMA8E@P%{ @ @ @ @HY`s{>#2Sng'@NT?. @ @ @ @XV1-y|m''@NT?U> @ @ @ @RY.c6E>D&j87 p9Z @ @ @ @ jr7Q}4)63 @ e7 @ @ @ @ l62p85 @ o @ @ @ @XVzwZ @-oQs @ @ @ @) 4AlngA @oT @ @ @ @HGft >]\蝔x[G @ @ @ @@*:&בydY&ʃwN @os' @ @ @ @idWWWQUz)  @" WK @ @ @ @@ D벌(kA3 @M@P @ @ @ @r?i]ZHHOo!@' @ @ @ @fdhdz;* @E@P]' @ @ @ @ @]`Z|>~hz* @Du=@ @ @ @ @cs{8<ToS"@4& @ @ @ @*֛M̦Y R!@ @ @ @ @ <>>~Ņz;* @Du=@ @ @ @ @.v[\^^z: @`'`6 @ @ @ @ @qׯ1͢ R!@ Z"@ @ @ @ @!(2<,"wCkM}/ pL1 @ @ @ @h"MP:FўDP]g @:;  @ @ @ @H^`Ưpo!|K @ջ  @ @ @ @H]  @ @ @ @RnX,b0DTO8]@Pt+;  @ @ @ @HSa?Q}4zm @9hK @ @ @ @@OOO1( Slg&@T? @ @ @ @%LT/RP= @_T+z%@ @ @ @ @ X,o"wtpA4 @~ @ @ @ @ .nc>`0 Av.U @ @ @ @ @ @@ceyGe]` @ @ @ @ @AJPK ` @ @ @ @ @@@3Q}:FQQ׵z: @Du=@ @ @ @ @vvFlVoV޾~md @ @ @ @i << @ @ @ @Rh&?==uy!b'83 pY\6 @ @ @ @ @UU|TϲLP=p\ @ o@s  @ @ @ @I 4A?&_\\'xD @ @ @ @@B6~ A @oT;  @ @ @ @ TU_~l~_Pȝw;? @ @ @ @; <>>FYydYY| } @}@ @ @ @ @M$ ___h4oT?B k @ @ @ @ l_c87 { @LT @ @ @ @h<<^` @ @ @ @ @ TU{LǩT @ @ @ @ @ pH`\F ȲDCH @  @ @ @ @? 7K|9݄}~~+`g  @OX%@ @ @ @ @*ʲ(LT  @mm:j @ @ @ @X1NG1Q]W @:;  @ @ @ @H^fnh42Q=n@$ ~M @ @ @ @$*Pux]\$d 'A? @ @ @ @X1<#2A? 𓀠O$ @ @ @ @ O&quuUU  @A( @ @ @ @ @3Q,(ZP; @Y, @ @ @ @ @_7e 7.^.>C @ @ @ @ @$j&O&QF&c p@@P% @ @ @ @|'\b>G߯K @!AC* @ @ @ @ "Pulnoc<Gqyy꺃 ! L @ @ @ @@UUzt]P=2A;  @Ob @ @ @ @d2`  @' e @ @ @ @ ,X,RP=.pp @,Al&@ @ @ @ @ 1bs{4zbq  @7 m @ @ @ @$#lb2DeYdN/B4O @ @ @ @ 4z(bQP  @`/  @ @ @ @ .p\|>nn\ @ @ @ @ @t:|Tz]` @ @ @ @ @ TUwwQe}AT* @WAW W @ @ @ @8$MT/wՇadYf!$k @տpM @ @ @ @֛M|%>nzV>?o{A @a'] @ @ @ @ @jeYFQ& @6A65 @ @ @ @DN#ہ+ @M!:7IDAT@ @ @ @ @$/p\t7Q}4|7 @NT?& @ @ @ @:nb<p84Q=>pl @LA3l'@ @ @ @ @ 9fUUEKIA#= h @ @ @ @ &fYEaz;* @E@P]' @ @ @ @ @])&KP=LToR%@ @ @ @ @ %py|IP L ` @ @ @ @ @@vb zz;* @Du=@ @ @ @ @.Dhς]` @ @ @ @ @b<GQ&S @^u @ @ @ @eY 3 @^_-\ @ @ @ @ @},}P۷oջϡ&^8&䘌u @ @ @ @lۘ1 BP]c @ջ  @ @ @ @H]1ʲ<#2A  @nAn#; @ @ @ @H[aTn'@NT?E @ @ @ @Rh&O("TO8M@P4' @ @ @ @HW`hGHOo!@' @ @ @ @'qQTuez;* @@P] @ @ @ @ @Kd2GD.1u @ yՓo @ @ @ @uwy奠z @`/  @ @ @ @ p\l61M g?z}|E?o  @v'> @ @ @ @h$ ...յ @K@PKH @ @ @ @e,~]e\|TO8A@P$[ @ @ @ @HVtӏKAd  @O @ @ @ @46ML'ydYY|$ A4 @~ @ @ @ @ p\7븾bXDdՏ @Au}@ @ @ @ @vjDv&U @+ @ @ @ @X.1M#3Q5 @k&@ @ @ @ @UU.ʲ~B"@T?b @ @ @ @ ,Wi ȲDl\ @ dH @ @ @ @ l6K|s4ֳzW\}' @?x? @ @ @ @I`ZEYQ ұ@8 ~ @ @ @ @X1MWMT% @!k @ @ @ @xXDWW @mT @ @ @ @ Pux`LP=Vpt @TAS#@ @ @ @ @ Uz>*F\=j#87 pVv @ @ @ @ v/dz] @YgqL @ @ @ @@*ʲճ,3Q=pd @LA3l'@ @ @ ۹synsEN;DXZi%J4"I(JՄH ٛ!ci0ƨĨ/M%*tF/isgzٶ3fO{>gvf9sy͏ @@Ο?'Oۂꝫ &@- o27 @ @ @ @ 1X;0ʲT[. p ׀ @ @ @ @:%p8~xFȲLPSo @5 _ @ @ @ @ cUU wh-FAks @ @ @ @h:|U-ޙP @կ΍ @ @ @ @tD`cc#Vv͒:mZ Xv\ @F: @ @ @ @ @d .ıbaa!d/ @Au5@ @ @ @ @)/ +է&@訮 @ @ @ @ @AK(z{s!@ @ @ @ @-PUU\x1NY^G  @O&%@ @ @ @ @@T?vX G(RP]I @ O2N @ @ @ @@666Ɠ7F׋Tz=X? 0 H.!@ @ @ @ @UUť˗bmm-A=A @ nJ @ @ @ @)p8vXFȲ,:mkn  x?Q @ @ @ @[_x!?sY'7 @@#  @ @ @ @ 0Y`F>( @A,|"@ @ @ @ @nvb-FQEnH @TZg @ @ @ @Xcuu5A习EE@P} @ @ @ @ pQ}m-"2կ ,N @ @ @ @ @y/ѣGCtXtz @`/'{8O @ @ @ @&~ȑX\\"0 @է '@ @ @ @ @gѣ1*A @է @ @ @ @n <# cNGHڴB4O @ @ @ @& |s|->( @@P]  @ @ @ @ @`@;GwTQeO3DhtTW @ @ @ @[qP}jȳ\P}o.# @Au@ @ @ @ @MGRP=Te Օ @ @ @ @& |Q=ꓹ @ @ @ @ @& TU˷b؋,"CP}1 @@#: @ @ @ @ @d?}"AYYd- @$  @ @ @ @ @]qQΕ)d-?"vHL~2( @ @ @ @V޴~dz+ @tAF @ @ @ @ @+o<a/~9zz @`A\B @ @ @ @@gշrM7NGDڴB4O @ @ @ @& D燑)ꓹ @ @ @ @ @ (Fe"V:O3Nt^@GΗ @ @ @ @ˍQS7Nǔ{tX@=A H.!@ @ @ @ @r2 \GN @ * @ @ @ @+^euQ` @3B @ @ @ @N uoKA z( @`G@P]% @ @ @ @ @``YQ=RQ}Q @j @ @ @ @SN(zQdyD O2LTW @ @ @ @"3ћKA^o|S  @6770 @ @ @ @ @`wr>ET۵9Ex8A @ @ @ @ u6z ȳ<2T @ğ @ @ @ @xw| z)^%\?+ @x?) @ @ @ @\%~׹#E-~ @]weq @ @ @ @ l G)bU?/ @`A=`&@ @ @ @ @w <ճLP]e @ O2N @ @ @ @@n\e z~ @`A\B @ @ @ @@n|M180 @@P]  @ @ @ @ @`{RG(2]u:sÛ-//s= d'@ @ @ @ @@H 󈬅՟x^9rĞ @Z!` @ @ @ @X/a}Ao @mTon  @ @ @ @m8}m[G+RCu۸GDL@Peb: @ @ @ @NT><4(sAm  @Toߞ @ @ @ @8ad;uc[^^^=L؏h @ @ @ @. ymzQPn3hy @ @ @ @ V3Cȋ"M,'G2#_ ؏HB' @ @ @ @{;A2uUjbPEZ @iO '@ @ @ @ @gAa"<TzAX? 0]@P}+ @ @ @ @ ~U.'@fTE5 @ @ @ @tYE("n Xv\ @F: @ @ @ @ @d3>^EDTe  @ @ @ @ 0EGq:zV O2LTW @ @ @ @"tTF/RVz=:9~> @{ x?Ky @ @ @ @MAAe S* 0E@P} a @ @ @ @:/p.{zR/ @tAF @ @ @ @ @g#?1"ˢN:wA@P}$ @ @ @ @ Y!z<"Tl5X8 0T.$@ @ @ @ @UUŹC({)|u,ڴB4O @ @ @ @& {/M7<շ'%@:. | @ @ @ @ MASH=T* @/ @ @ @ @L*n~OFoqE7]uT f Օ @ @ @ @& {1XDBuVT f  @ @ @ @ @]q)~꽈<2BTW  @ @ @ @,p7uS[HAQ='#@4: @ @ @ @L81XF/SJ]P}Q @@TW @ @ @ @,p{wT/yD[G+v:?@C\F  @ @ @ @^eMC_{#ћGVgYd꯲4] @  @ @ @ @xTU_w/#T_%g @TM @ @ @ @@pK6"KauA @-To& @ @ @ @~2o娌#:+Wmx:KKKm @~ͷt @ @ @ @& TU_73~YMGu,  @ :{$ @ @ @ @ +O_7}Q"^)>*6$  @+ ~}= @ @ @ @v 4ǿ"+u]-3+ @Mm s!@ @ @ @ @My⟾QSP=e#Kiʕ+Nj Ocii 1 @@x?Q @ @ @ @xq(W4 H գJzjTm猎S  @mc @ @ @ @ ԩmz⯾ "l w3.޽°b @`r5 @ @ @ @}ǿO|(z?uSOGNN]P_VHRAW*~ @ @ @ @^+UUE5P<D>("kiWʪ?dO>ds5x.KKK @~z @ @ @ @^hznꩫzJ͏z:Ӻ/lO @@;ĉ @ @ @ @'<_/F1G:g)~'6^5~N7뫞,v @@+bL @ @ @ @$P)x2Z/DO))ƚzIoZ ?Tonnñ5Rc @~ @ @ @ @@!~e Q&hꢞnqfuotY; ;AVlI @W x? G @ @ @ @:!\ǿ/}:ߏGoXF 7hMSOO)ބ} uLد|8p$ FTUyj?csss~ @v~ @ @ @ @(񢾷}%Ϳ#+( 7W.M`ӏPz^.IENDB`django-import-export-4.0.9/docs/_static/images/screenshots/export-selected-action.png000066400000000000000000016251111463433610200311010ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT(Qz@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u|TUgzڤ"E@E Y;쮮m /ޒ%dsnɤOB!wen9{&}l0MTS$p6VRMe6nMI7 }g*m;Ԯlyy(tB}Be4Ɵ;2BT1?j Vv}a[>4_/ߐfVlez,͆sW[@=/FؿluS8l5׽3/o9oɊj_WqNe8Է׼{U^ Aos,Xѕ^V\R>;}y?$WX@.!xX~4?s'      ۚ25➚R=s4 pϾ?:U4@#havΰY_.V]:We)$i+?JY z:11lz~p1t$?x;n*Sk*tF+-9X=o-'-_ KnGunQw,qkۤs˾)uVZIDX!jʂ]7o+6Zck,oȥ+_hgKΦ{kky]-پ`_nգ5Jc .vKú~oz_ȨK۞I]B 񬇕r]܏Q?cy}D@@@@@@`[c.Yke3ڵp4U+N;gOgfr] PQ]fnhw-[b PAu6qB$4wF1QTѦM5mH>3832HONԄ#O1r"^F_e3l+SkeK.?qz?*3(juk"[VPݞC,QȹD2>5^B̥2in[>=KR%_\•BRyM_?}}6=&YƛEsckq͉b=ggt#QK@`έ6/^`~[+=H5K-Me~B|j.n;.!xV~عG]9 @@@@@@h($8N֭ߨe }ґ8K7V TҢ9:Q׫iy&S5wʲ>~'+-X\k6#[s/UVyXwW?zB O)_/z-=+ngPxKCTVskۭ|oVWB(3^Bj& 1U6]ҶfP}W锽VOżU!nK]^2Φrxt,n1/ o^7{J*އpώ&@|˜jxp ׶5=T¶n9֪{T X5Nڣg?5꿱 .P4rreT*YX>ut? .s       4mZ():?S;<teлeZZГ. MX~ q~ԮU˄'PXX߄U̔OS^Ol9"\~1id%l@zr>ܩz2^&8qsVAu[2S[ ؞<]?fW/ޱջ٠O-ZFVZSXZ˕\ZUߚA S܆*3!dhʪw Kt oQ@j*?i*Gm,YJߤ[OY^ }4m[CC{NݠyGIJ慶j۾ש1+T (K@`WD&.ҭoԒ|Q }V鴽KC1-+zBze^6Z[Ku Q7Գn/.U51s'       PRVܤ5 *XW1CC/2Ui7+@r (@qq4\uF߳Q;Rs.f+kZbV{owά$>B8ynGzmTkЮk W_$X[qF\X~oiRBkyki(׶fPݞ yytޔd_lP7u2/_]ۖTRAhv{{S _BxJ2A6̼p0U0|k]):n6شJ Q ty<գ5Kc /m;a_?#AVyܿV)>PN]`t+寫,=Ny9d̤d\3gEYZ~ G]h?cy         @)I0y|^B&dKP=V=ӯ|PC+j "]jZXb}2,WڸP:gidU?nvݮv_ N5a.)n\'Pau/6T#t -}ϭK TOV_5:Lmꕋ%m_:Kݾe_dhZN\'jh^{tn -{ng6ҿ?j}Xp_>@@@@@@@@@ 2\qx MN09m>2yST)a^]i>{4iVVڶ>OHXCEsLxӗ.r9,VN>Z]uTiSI{3jNM.]bm, yRXG(Pv}(r68ϫk*=m 3z­0\ljZoԱ>;2 v/Q5[G-u+;K{Vz6+>/ę )Ϸ /l3suSɯPKU,9$m1EZox% ?yS #L/l噏|s5/s0/U$oR /i,?gv인dFt,F j{?5s},#         T4\8}6"+W۠zvhQ` njn[iZc,TiSq8j\ĺ٠O]ٸԄ*BnC6oZڣ"oPVϊ}!#-qS߾XaMthQiIJߤuηoXӋ1᫴nL)yy!|rψ gC< u]G}A@@@@@@@@@*T0y~y|^6իjd{n^:qElUi[]6}ZIu{stmTT\Y#          T 3#Myco*B՛e#          "WU %Nn"^/L          4S4eɟU8zc?i           ZVTR TTx Z           T䛊I&vT谀           Pk'7N8y.3z           P*yYr{^*           @lP={Xťqۂr'T           2S7N8LP! @@@@@@@@@@@L7).kS7Ǔ           @sLEu_nz"@@@@@@@@@@@6SeFx)p@@@@@@@@@@@ dz ĕݦz^}B܅G@@@@@@@@@@@fzrV?hܦ:A:b2 @@@@@@@@@@@@LOSNXydry0@@@@@@@@@@@.2#MyY'zz9           i9cK6AuAu @@@@@@@@@@@ dHcꦹzD@@@@@@@@@@h6m*MP:Au>g:*X.c>8~5CrrPkvl eWٶWo;@@@@@@@@@@ ؠz z2R1e1BmnCnFϿFNd=uc o}'^|3BE y|dNfˮݺr;GyO&~_i߭֒          T2MP=?K<~b-T߱}[Gwl8-_ +k4mظSܡ}uq{g_q{wiB9i4kx[uz1/^SB%{fU 1|?UT6Amצcc~8=ze <0Xpvґ})~Ovܮ2S~F*?Uv>=Ut͘3W~M8֠;Ks}?LIϽ2̵W^v뾋ڴndm,,\s,\VgV-KNJOK} !*-Y\MfZMA@ c^wmZ;۷m¢"|,Z          4[Q=;orMEu˥zKm,V)^g*VU:hgϼGnv,3Oqq}C==}]wJ4Amow]~~~{.Wzjr6D?1մg>}[B&P\Tey O拏.;ZnN&[UОt+~Vp_`_¤~U=ft7N?uh:eumFַO}zss}MGvׅ瞥2Ϙ_xż}~-gz4ǟl+mH.WJ~ j֜lg U^+Ll6/7њv @@@@@@@@@hNP}XR5z;n2?6zRyuPiPttCGol uU+V ȣ[;!;G/۷n2R_/XZRV~p08 MVXwÕuGz=? ѽ|uޗk~DEE"j7Am8֠-7\xw4&~c+Vok#yA@t?;W]za\TI#~AvVUPݾ8r w}cF|%1OgVo~UXaqL7         4iLS 8'/KdnOvOZ2Ww#R g}-9kׯK|_fvmZ9Ӄ v!{BkbuޱHHد?~Z8-]ڷIGbٷqc.x9le[oNj-XxRJ{mۧ/>v2a/xNQN۷ˏܩ䤒jKW?Yf8޻:pȘONԠGGE#k4xJ-\L͜m8znK^XrxT_6bӦu+|C?Sٿw9{,U{k?>S_ϿUh}Sii4oHʂkL]v92Ά]RIn֌?g)%%YvE=ʾi~ʏ2          M]VTR TT7m1l1蠺 /[Wm[+1!7/ȳ96=f䃑}zȺ]خm+} Ϳ1$': m+N_{P}7~[{ KuҪ'~jM=pw N8g=/n9-%WޭZ;lEWk+Q/<1MwI│Y} ^cnБl/]34lw "s1G(}oِg^[*7-G/X(|eR#Uş|%_0."w} p-ZLs7T+lB|\@Yo2%;{F=,^G?vvi{8O-s/T/=}AKJ_nC'hi[C1oj۷oj8῝{Ǖ h*,,0}BgM?n]Y0ҥoMAx2Ó@lY䋯@@@@@@@@@hNP=oqm6zD}գ+vJ=Ja r$jW1!*Ck]:ۯAM{>}IHKq sz"}/>l4 ^(~c}MuVǺp1G޽"+VYnH_(+?*^S_r.9$g_t3o~PadlO|P=72}/\^m&O?ܚa!2@@@@@@@@@@ dfin^|&KEZw?R+=-R9=+CRϮ|Q~MsڮM+gM?o/@g sDգC|uZöpP}{Fwi0|,/&pAw ]SAt3Auq{g{~rWޭݺ(}:vKA#[~CTՎ }U}*2%nn[GUYٺ M9/zsRkzDNwc C5׮]edžۍ?^p}Uv]>5m8أn!+5u4,Csc.wd_u -T+r{0>׭ߠϼٽѭ}/r:sο.g9{&nȋ6n:]mظA|{r;4oyl*vh޵Sɋ}z?{%%T?nA5ζp?[4'{neSFMzt7״vIi}v/6V@@@@@@@@@@*n*S\/צ |3>x:c>J#Tz}g_;H3hc C5ޡ]k}죑}~?-͏K|Ood=;@oj6^]y'=m;ʛ=oZ?Wz/I/tA.?z˚n$˽֌kTs:?M׳/-t#;XWG/D_~SϿ^{:˓~Q/frr0G/yqnׂm>hҠ] Ze*?U[pz]>A[t`9f/xT7@@@@@@@@@@mMVT1~^굹T?#t絗9/X^p.>@}N9ٜj2M69뱄T/_.fmO~_O;yUXX̊]㲭}c+ѴTSq`I  8{l[>[~]wq2c.$l}0j{,;rGڷn7ݧdSY۶G{]?YlkƵ 鎛oR7@c݃"?YcG po,r~87׃%_$8Sta8l~HtSn3'gya}g3"f)4s3s@@@@@@@@@@ 2#MsVU\jSQDr٫'LI>A' ;/V)F#z#뱄Tt"ǻg%aaKy'׮_Ӻ"c[յo:%&̝#F9UϞ=pm |IpIxٶUgnWDo\]|Ɖ|Iz bȝζ&7iz,vܖc wqyJop!Ztzwܑwi4n@@ڵu Vn^IED=t ,2!!Oڵ"s^*YhQYP>ÝsO4I&Hޜϝ&|n/񶾛Cx yI:Cm3f2sߔ          D2MP=SJv0Aon}!oO=~ m}^ڶR;_g ÛKzsO|i6mf+tߣGLS}jU&&eS5c`rU>evroAW9qbzQ"!>^7Om[n#}UZ?! G K/אGhu7N~no[R҇һtYW^rlU~ҫo K_,?@@@@@@@@@@m] 3=M9ycO zS}6{5^n/F:?Pqԡ>[ieٕ.=go}I}6bwKSRknsgUveGW FV s?lS_f__ ˜T$/өW^N?9xVYϙH>ˬ}NW#r*G=w^3}r,&zж`ܩp]Ӯj͟@-\sVOxCjJN:X:}jj췲Aھ{:\۵kW[aQ~6] X[f]y;KXXo -22L<>YNNOU; ۪/iA         4qi˒?)NǤC=O36-36Lx S кv-\u?[۫]LLvi ȞjW+vǭ,[yۚf_*=-U\~kյ:tRFs_͍^¢ZQM{ ,x˜A@@@@@@@@@ELT+_r> o7sF@@@@@@@@@@@):c*R2šmsԚ!           P{T6&yMJz           LOUN8yEE            HSN^VIPQqFd           @@f fɟQ8,!          ^ 盠z0 #Sg>: @@@@@@@@@@@ HӜܱ qvT=##@@@@@@@@@@@z 'sKTT           PkT˒?9NGPz           pYxTTȰ           P' SQ=wSQrQQN B@@@@@@@@@@pyYwXy6@@@@@@@@@@@.`+g~@J\nO^}Bu           YsLEu_0 ףEP9?\;           &%R@LWLP}sQ          4g[Q=;orMEPzs~ v@@@@@@@@@@@`sʱ s\7           @sLOSN^~y|^ g>           @lE,RMEuGPz           LOU#EP=           @lP='oq\fX&7AuӕU{@p         U x\^j*qr{]r{<իb  P"@P'@@@@@@@@Z#=xmPVիb  TA@@@@@@@@@ACz+J>Cիb  P"@P'@@@@@@@@Zr0SQ2]իb  P"@P'@@@@@@@@Z= LT=dZC~O8֪U?8GD@*Iae         мJǙz\IPUoA7# @h߾s.-D@@@@@@@@@ ؠ' _/-]T@@ To7B@@@@@@@@F!st`cHk[ѣQq  ~W 7{#        @'@0Nnm:Ao0=@@~ׯ'!        @p?9 #zȴtK,qNg'Atw8@AuZ@@@@@@@@@IP8 F(@h՛]@@@@@@@@@`s<.u+ o)@@ To7KC@@@@@@@@zȣCN<^d[QݥbQQt@A&wK @@@@@@@@^SQV %^nSM]*ofD@"@PI@@@@@@@@@IPXyn.*oIpF@m[}8{@@@@@@@@h<:q&{*Toz}FQmJ轆"4 `]{TbW:VP,TA7ωnvM6KB{N.sEg}F@@@@@@@@-R:T*Y os@@` ,v@@@@@@@@LջXJ4FE";l@AbA@@@@@@@@(ifyW,milk AbpZ@(Ջa@@@@@@@@@8 J)eu2UZxA*ľ  @ ^t#k[b[vmܼLRV9ըjWRS !        @ nM:J/ciշzH*b/vcϟ۴i1O@@#@P}8vJiX7aӚe[:[]-t        G %+JW(mRF o{ ;AwҶnͲ}dS~n[6kiֶIkRR?ǩ         J)en+zRSQ=!SF@,@P}܍g?ELOhuC\lKKh=,        PP.Lr YYYbŊV|1w [&Olk֬͛[ƍ u%ue7n?VXak׮4I۶mt˖-6ekf͚֤Iq!I 4ЊR=qgиDVh`Gz"h?fi~e .re3?mI&v efmo,On Oh~Wspu#,5T߼y}G_vaӆ + '_`MOn ӧΰ93X2ec+)-oڞI287,J=g{^籠\2>D[q{^^Ppm޴ɚlfZv}@@@@@@ d؁GvuSPQZQ}6|RWPoVJkժ{}On3fp+UuQ^ -B_}\2lN:k8 l̘1nz>|zjScǎX2{r;>g6ma]t=/j˙3g/r\UZZhaejL 'zv@ 4hrS%h4w}7ݤlx[]nWvUnn;%l[]F?o4u4һݬbU8]Uμf:MW\Dw^P +H+a?QP ǻN?BqMmL3/Y:$#\'! 8.~>1}KB֩vW&sx2+YOG|f \`VcN*}MGYySmK}+n z j\zq8      &5:tlZ+}}IڢEBFի@):X͚5 j-[͛mρ?֬Y|1{Ӫ&_#rՑ@ׯ_o.p9Oq{^Ԗ&M :=7nF4zXN(Փwbn\i|}mڔekգUko{wlCbw?ߞa;{BGP8fmosYr6'9UаY^7mACq :k5o^v OlNS^svn:̔sa܏ p(a$㸴߽R7smܰ{m\\'wvaTOq\ɺou=Snf{ ds8s"Sm$CAd|ܷ罠 >     hRҭt2%*vZ裏BM6ִis (ҥKxUHm~צu(DC8ّrܸqrJ>֭.]:.Nq11 A\y7y$-\bCۭ^'yǶrͶΊ*$ &TZo}&|UT^hېvVY v =}vZVrEWznr Z7rC-)ؽWoo-v'^{̟?&#\Daq\ڧyȾ=}D %pK[{YB c Ǖ&A8֑{HQ_ێ"{(Y\vJ٘zIr9@@@@@-cQFr%*j'Nt*UC=4 _ZZu6nhVrU[~Z_d@X˫JkZg2erʦySRRrl[׭[綩J彩|r[bYf? iSvю;u*UʪTc 'sg*G_M'|˖-s7orʹu1LǬ *XٲeCDW(ZjZ&ڀ_9[nێx-#y5ѿ."[˫cEͿ֒ZTi~1l^*Vγۉ2ڵO@b)@P=9%k{læ5 mf&vĞWYzr~*SuI/o'w|m!BOP]YjaAU]{U99?muυVBժ[+,Ԛz֯[oKZjo굫}0z\d5h\2F0oMdڳo<kqױcլS;Jq/m͛[rev1?G f-]ԅ{fzߞeXjU7e{!U?ZаY4ܛ޶!_wOz]rqVXADc۞ fymrȾVV'ˏr15c0BY]ϫWZ^ݿi-^ضlr\ ZgS-~w)^*f{?JzIbD -KMߨOwF7>oQTUOxWu=O g}y]f-Ъysݐ?Dž޲C.{ܛ9ϯ]0+eY=^].#I #     PRRl+[ff˙*P .I&sUFP7SXbk֬iofuZli͛7MWz.߀@*u _ے%Kܸ- zaÇxTc1>8"tkY;v`G醃qԩS]>U[n>37qƶ{׫} {챇De VZ֤IPG]vv}žk\H˨!`}qiσ!i:ʅ ips8 "ckL1D6uLz ์v:7\/  ELwD^.^HJR׳~j{oa{]cug)XA1ou!yΞyL3zu/ZےKlӯ7'Ej vEkt;= m6ڀ'^ٟ`N䴘!ruxVS' =Fn{#_zS{rB z~wN1ܳYvڰuWUWp[{C 'r? 33Ϲl;KvgPa1Oәu៻Nf3M;*bvMz:cx0kj_}9o7|rϖva+3߱o7vʅ'Nן~cz :@d#Mӱz{ۙ]qw9;k~EGVPW߳ ·}{+PP=[~t\nk:tu=SQo8&7|ZMIGُ^~G]LĠ^CܴG>lͽ{Az۰uWvξLwわ@ϼjFB^7>2F1|ZpQ7K6˻Bri=쐣:q,?^/ yWp]Mozg{\9ho["gy5`}6ve=^!\6c/5u OQȎPg/m 4mWKSE9:_j/>{` ̪wV_WVٍmbל~/ڧóo-8sU!A+]^;I'_ׯd_`{[fmNr<󫿒.[P]@ @m=J&}Щq:Ls1ĄBC@@@@(if*vߑWUxmƌ1gmժkv@⋰`O~vAI^WP]PiqB՚\p?Ekԩ^wق †74E>3P/ѣGO>&#yi?>sSXM_Ϡ ^ <"@q 34m~{9VVlkM G-yTo5_7=vo-r),+X]mw;(l\S:T*Lo}94~*h e]b]=<4ZS>vYDž:^z1zXf[g[G`0Kf]њYzhը{?Ƽ36bn\`W(>ntdP]N/; w<~#|w?J᷂9k{q{g_jzA[ BֺF T_W^ N~n[Cƽw{Ϧ|ڪ=#Q7s%wΥ]_}#>BVQ=#yp|Ӻ5uQUy?9_?>w}'zqc O^q!hxڇlYq*ޖq,n:[*#QZlCÚ/|ս׻χ6_} v ʀ޿n96*d7Jﴚukf_z_Qu4cyZ?O'mkN{wU;o Z!}A.}D˨%_[S煻M_]6VP]nQRJve&`3t#s۟54@@@@@J@zJ 7j׮m*Ur9TBA?Īwfܬe˖ 'Nڭ*T0UY;wZ*h+`xWt6lLժUMa{UR^?<;@z=m磏>r\v횣τ lٲenstUV GlVUvw޼y!5:toP]R{Wպe֯jҒ:(X7- ]:fͲ͛7zV:|CoԨtg*Եx5vZw~+Ӱ-UqX*kx1]_~-_\*+Wv۔U4]ֵ_jHk@ TO 0諰.aGuըVYU\mVAڟfeWyܣBg.6Yv`֓vT9XjZ~kL(MV_zrWLiSI}Q wu+5?zZ`|}\t{XvUt䛣lѼWuy*FDn[ҫ&^ޫ"[r:̟gړw'z=ڣ: >=`/5w??Mί5;}Eys{j9~1maWל>)w0J;tl>D^yxy_VUM׬qi>K)`NjD>&5ZP][wx!W:n_oy\݉R?X+_onS~q-F@@@@@ RʆyUd|o,%.µ~(8xt S+h-8nٲ5on8VZ땏I )ݥK avZhŋ:h⩨f~c㪴֤Ic=ܰCyۗ\iƍsA}]oG}tEb +[ xQMT^~S}!ry.sG9+]Chiv7Zu/haZ^H˞^HݫlBꚧaͽ6g/x _xaۼ{]JxxkOjo-j!`| )zdн*fs:33y3otU!*`ne?~qwuvpy?}Gq]Ykd >ڮ_G//WHUJYXAuU<7cG+ΰ<=~eʯ^зE՗{.;J) W0=ʇCZ{J/_7ku쪯j]mwq^爞%u9{>׉C3c W:赣$}/ò.>27k:53o'\\"+eknv}D~j~^{u?JzI},ȣ46mh}**>4>[tmD^8<Iク?Nv-xCÚyw]vTY^| ksܰxPɓ'E7nl{͙3ǦM+߂ǡ -c|p{キQ^WGqƍ6ztUپsΑ?n0F*sJ[Trۻ*o]]vd2UW ˼u(NՓs6"2jeW8 n1VUR2_!u/.<}*qjOf; Nva:Ԃ`[^<\A 2]w 6{mK +\`so>U_tmwȾvc7~ L|Uƫ*ͪ wv^'xY\點5Uy(_ΆV dwNPcw)x`߂!j׮O {A#UY^ Gn_**+9ւ \&WSLJ GXpM4ɍnڴi&rϋ*ڢE>*VcT߯$8!xuX)#@b$@P=9'cWl֢V~lF9 *>젖g; 4lqVض I^eo UTS~z[ͺ5IQS8j7|AG膃aqӴhmƴ^[ݤ9 t۲yEGBԮ ;!n8hL+7pacT9/wVW_XAuU> ЪzwuP|`V^f{w4͛CiCƫS@XutY;U<]ʣOn_?{qC7k'_]=9-P> Ci +7F3M{ѯ0y]7yB v}ޖyTPZ{y`P=TOdUy{sEךU5zZ{驁Â1⇝u7nDWVvo ͧw=>-5-\D!     PRc\!oK|P=x2UGauPu:P$?)xbXA>:D >!o$9S`}ǎFb~莭zv(!Xr;qD믿b|UZ5z,/Vꪒjjj GrZ^0sε)S`Hf͚֡CL^?*Gڵkڽt];ԂHsZ@ TOə6w}?+ox۽a㣍ں\mk 75~{fȮ~MXeXP}xY'<OP]AL25U>SO7zعלm3e7uw>pvop;} An<1i^mF{^AXZD>Ag?ӼK[es~=l?L=?7[ke}u<.Sڟ#     %J@GꪨU+:{PԩUѼ |gjժ&/W.]U ԚՃm"9slڴik/kԨQX5 !w*T6Cʕ+'%Bc0^A wer[:J?퓪Ы}<|^]j:.~Ufᄏ?x sA䜙EL?<u k]Vmu[,ʠzKO)XP=Ύ4PNswd0nx 0Mᣫ:u;3pTJ/uv'][5 .6svy's;ϋ,ԭ j͏/¹snJU*+c__7\[|uƣ*?qSzS?`UkT-ЪKPWAh? F;zֽ"+cWgz:3Py:*;TOzIc)ȣB :}sPkmO=+ryyqz-K.u~-y9Oڗ܂s0{}9yַ:׵SC ;IuC$^CC~lrhh|A(J$ :Iu :-EkSC&^Ǭ`U`lp*Q\lٲs@ZZc(-@^֬Yc*⡇`vZ/4WTAuס t0y s.X@b!@P=9AA76lZuR/^N\uUAGh=pM=17[ܴ~~Jm-vuF]v3o [VOs]֦~7F5&TM+Vf[Q}C쭗qLJ~>8f5|:]γ*>t#nT/oi&;3-^uÆ}:y]sUn^U~U?E]|uP}﷚ukx~P]UٟBњat˽ZC^vI=~!y^.dv{޿稨 ԣO uN8$^=sUVEl5?my}uV@͒c\"ǥ{c˖-^촋OͱFĺo&r܂s2vrku_m-hԾTOhyj-]2kX_y4j+{2kA+N;V^*CE%U|~4zoV ~~:/lٿ+us9-ƪ     !%* Ƕo4h_Ͱ~Y:x 5kf[[nj3ln*xGM6щյO8_~s6yd_ pYZ&jk~i}V G&>uMUlz<ͿVF#[, 6ؘ1c*+\Zkl4:бG6]ڎ Fbu:\@(j/Cӷ޴_}sߣR׊[ev}ecn( ~(ꪬB6dn3?ie;ε=93~wUy"Qowϟ{il TˬsBwoM^`7αXX<us_ yƟyyO;rl7BM!ق'7duTy3vV y]сG]^^}M+iAD|,10u1m]{.y~W]ES/8<5^:}6۰~>2vISvUW.)L܂^ カT]Cmˏnm֮CMUknPbdEuUZe0)lӾ.7*zNzIǐSg;KGksbWޫp8]z96"Ugb79OژTWG~z~"{O˾sB ﰟFFP]+JhɼnZ~ޫixɭaӆl⇭p{ǺWjZ"':IyO:v):԰-]YiݚؓMY(_YV;PWf+;P7UVgP}lҼ=5xqƳ<      #} O+SZs!k w}RJ9M0]t1%,X`}Ru ?FVVMf?헯Ox7Op^ϧիW' n8 Mm׮]FZ֫ UkZp*k`r=^լ]mpʕ_𽦩'W_}eK.uֶ;vVe_ԩStPha dTU„ nOTp]?ڟFB*ūu.5k?@AkڴUP 뇶X i @2'Owƕ׷ٖ}Ѷ 7nwQrU8?VAuB^svرcpM.h^:U;z}Gns>wze[d{UlFY{Aʭe=zv-١pz<)0ϓ2^H5BB콽=MT_dBU~ЫlQ\v'=^zrwe=CxƏ܍?3؞ [N!۽PE 1O>VZ{OGeJۛ^{xXw)CEKm`,;9Z̺NUm8w\ jW%Xs[O5P4Qn܂2kY/<}~7M*j-]renXAa-F_}d7OdPݿjr^ MBjAG\/п.=r[pwc^f-ֶ5k]}笹n}/c&4=D{d~!ZSM?No-x']_GqOd 1:yܽb^yVP=Yǣ}Lu[ժ=~t{i؍_CxWjz~Ou|]cֻ,5wlP!nl~ihz"_YV;YJI\dSOݞRL\>[j}S?MSGj5ٞ;E@@@@@TQMaՕ=-QAuK7o·B *pPK,;tTI]g1JFU"Vrջŋ]֟ǂVT}~ժU-333yG:f-7mk׮Q07/gS _n[Uҥ]6/̙3v>TZnSگcV] 5ꎷ%+<1uPP_M!7 j[M׀*)CAte:Ǜ*鵧ZJ#Jݺu5HC&@P=in?k~7׍դZM9.!ynzi58ЇdQu@NjըU~4F BvYҠk k-]iߡ =uO6ҫ Zd0[#qOUssѾWq-W֟-Ttg=ϻU򞗞*/,~b Sg ,`0+t怷lHY0d0y9* nʫ¹&]WS^i{tYaWZt9maȠyuvkխe}/cQյok z{7냡#x6k߱TW3[)b (xJo3UoԬaTי!Yk{! o^_|8^s k ׷'e{3ӯC!uW ˇvKԠolP۵U3w6͞gF?&4odP= 4n`϶ ޽oAxG\/v]\ i +`q=W:[U˦N4joC~Z"ǥFFǧ{}jթioo x~q۝ʧ+vL<>=1n֋nwuPkU-}Nv ʏkrIu7}޳uo⽖*sCs޷'|ݡɟ|5Rf50?:Њb $-6{Fe g:x9J}$:q_z^ͻuk=ݷi|wL֟xѰP|~MdYk=۞Ҡը]>^,U\κ ۯ- j8C /|}H7bU     X 7e'UDe|rWJv>rm׮*U5kք-ڲeKk޼7qD'CDzzmܸэ)hP=BVusLjecյ^а:ݮsޏ@פtlMvw v躠E`uKo؟G@@@@@v(Gm*%6WfUO+\X\9S`XիW۬Y\%i;_0?z~ ]PiUVW[.]i~k-rݻwU[ԴhMUVaxZ_^MlԨQQzUu]V:`FZQZ>86mU78_y(-Ȧ?h;ׯw/_~OP]RUg̘V^˫byƍ5m5O_N۪-2յзW)#s דC8~_^RW_s ٳgفEjT^tr<" unܼFOyY=?|BUl{.Ukθ;Zmi?_j*6p̀x 0 9uȰ{xj2W^2^Wy5 LSCaFMWcN;ڎ>{pv7J|-9f Xd B5V\\{5vps|Oƻ6=W1iZ6 w *>3S=;6!.WoϬy6ob궫vC/8)vykHJTGzv5k]ysYFo#{>(kCkDΣD?,aUwm`[|qG]~>mm5>x);.,p)03B?*)BxG\/=o;^yUCs<߲a}vg_oR8s]p\~ z\6t^xi5ִ8*}*f"IQovHֳ^ /QvXdYhο\{;_S^CxѽԬS Z?u&Zݗ~Q^D./D_'jg޷h >=oճ3o AVϯ )澽Fno56]o\q?moz޽Kzwf|~MdY5?zgu[u]ܖW`yom}LC@@@@@(Ĭ}UXSՋzGۦ@4~x׾T/c]o퇂_(S{Uװ*'c?@JAwnͲ}dS~n[6kiֶIk 䔯cՋ.kz97cg -0\“E?%a^yMzإ]%8vzD.ӟ@@@@@@Jy=VFWEi)Xt˗/o;wεQq jq0u?UO3ԩSf  QGAIWOs쿾 亵2iMîQr󖄉KYvFg~jzգ S"dƋwWiw]qeֹaֈ] {eof      @Uz_~3g9==Wm8յ ,S#]v6mď\ ;A;Y[3UʵmngJʰFVʮVt;LP};9 (0{{;.)Zb' |lڸN:TۚgkU+ 6(D._$F@@@@@@@*T,nP-Z䎻RJָqcSEڼylŊjZ*V 6Uln˔)c+WUZj:LG&@P}CE/~`#uh[{9>|cT;ֺ]w_<˨a]tʎxjWZccT oܫޠAȰ[T/Zւ %QzI<        nN[ {Con6m$:E@ ,@Pt,        ;@0TNt9T@ȿA        |TQkذ)SPQ}8b@SzP̆        ;@T{N:VlYKKK3;%# @nsa         -jo=5hPʖ-FT@@bTh@@@@@@@@@ P* ;իZRa@ @@@@@@@@@ n5tQ '@PK@@@@@@@@[ %+Fc 42eTϛ9@@`g 3}@@@@@@@@H4իWʖ-k)))k`{̷xb6mlͲ @@ A$@@@@@@@@@rnMFzt9 d TJ@@@@@@@@@(nf5q*}X́ $WAnjOX;          ALTOMMb_Q}tf@@ T/a'A@@@@@@@@BHJQ/5eJ.m:^vB=xV T`nQ*T@@@@@@@@@$ Y}gzr,%%VT'^/E @Ku[@@@@@@@@ؾ)6HSRJuV5@g}F@@@@@@@@%Rʆyׯo˗g;  c T߱{        H4weffZ2eR[; @(Ma@@@@@@@@@b%^E PQXv@Ab}z9@@@@@@@@(bԭ6r[eddXJJQQO G@/@P#@@@@@@@@N@G˗,Ew:2 (w3~"        @Q(~ᖙi QQ(D@JuY@@@@@@@@BP};6 ;A         S>íAVlYKKK+A `  @Nw7ZlLC@@@@@@@@vJUTpkذ T)@%@P=_\̌        ;@To^|y۲e Ap@@~PvXE@@@@@@@@@/Я_?SeddK@@"@@@@@@@@@-ЧO_ PQDm@ Ez0@@@@@@@@({ -[s͡! @! T/$HV        %V@AL+[T/gC@B ^h@@@@@@@@J@߾}~.BPg @ Qz!b*@@@@@@@@(}qA *XVVAy9(@(T@@@@@@@@@ z ,##önJPc @ Yz!:@@@@@@@@(q{v˗/-Ko-NGxb;>18 ;As         @>}BAu*EL  Tٯ@@@@@@@@PPaÆVL7+c: wK@@@@@@@@E@ouֵeZzzTI  s         _~)))cs1@ Ε        .зo_W *Uz\LE@5        %лwokԨA xTT2@@@@@@@@@b deeYAVL걩 l ͂!@@@@@@@@@ @~^zVlYKII^6cQ[xO .]`  @A0         a˗/T#   SzN         A޽{[FDa@Mzn:LC@@@@@@@@TtAT:W  A<        ;@VV 04h`K6թaoe]B轅"TAbAbφ"Aj REޑ^=ky\~dggfgg{$o̝דem>[Y)[HΝ?/X(.]Z`rKʪkd#f:KK@G-3V/_R*(".\\0›匉n^jl޵ߣn#Ο+6=R뱿\w,'g"WW~$5k;o&J\9ܹqٰm,۸Uv;d}\S ѻ_MvYDI5`}AU){S-I.,ߴMVaRrZ9)7#gksjܫ=z=z.l׺(W,_:-?Yn 0f>m=NGˆ{9&%D/'l]d9Xmӝjhposg&uu>KWȡcǽ^8D賐BuxXH$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@fDhIghWQ=HxJ }o|BfJJ P_o40=t*x/2sZ[HJט$ zY6MC~.'N1*cG[?͖ yTQ?iLsYb=v f=a{T~$L3Hϖw*ػg7NIY!cBB܋]$ݕo( E GOM/c~ΛKzuVLD8I0?Sfŋ չs౲nnokʖgIzHALm_O[aM&4|\w>kQHiIe=c#4|gg x ]Kp /}Y qAeR                  J9Tpo Ճ,3Ⱦ z)ۮDy֭[Bg4ז6mRvCG4%4+]I+T.2@UXmV%TO &`ZZf| қez|كՕ6mVnwmyd3 A}w'՜`c{W(Q?(Vy$و̮m qB]'_3[72v}Z }yt~b<˗+ hd|H:yXaV +,*o=ʣ};/+k$+X[ Ճg#HHHHHHHHHHHHHHHHH!CHѢE%&&Ճ7ר$Xkf.?ϱfy{4ze5L=ڸS}_I{`v-(鏿Vh{]_Bu{]ͤyS}o(Ȅ8=7˭uz}HCh_o 1D7DeV1P=sƌIU3<-oܜ3&Z7mqN }}J%֭B0uV~&Kgnղ .V2XtX|2E Jf |ªvg#'<*yF˫h`u |.}Yb|+ 4\K$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@걱Q] `#.^!R>tt~+^wjBTN]qlBL3WF}DN]A>097/\It|4g@$whO:#1їv~ۏn JnP]4I5(^oܦOenӥK'};+˗Tywx}p$F[#& -zb_O[k.Q(xks<7*A9&]E._ f,=A.wIW'7:z\7rz)T`pLZ,\Mx6˲Wa`BC'2ƅJ{0Vhm江X_6qJ9M3 \tI & Y*5#4-j7eos@>_{+6 [;ҩrF!Ftum)TzMҼ~u'B#oٽ_.\оay/w*eTG?sKPz3NЭ_(gϝy6Օ).I3VDC^p~lqUpͿ戉f]$Z}ڗPt;o~+@1P=Kd;䖚խ3[Yv6 Hbuɸiumb} + 4\K$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@@||ԋB&gsX{N>A̫:A;R}iW]bҥM|Oe¬PdZEh8xc[ mn'6΅Obj\U-דeʍ*-/?|:\ U-'5Sy-y~f0lǾC*D$|Y*LT2 }*/|Q*P|Kɯ: x79q4օr:(O?dʘA1|}YnsFTx"PX~?/QU??}yxG$}t}̧ߘGy) ]?/L{ǤL BkW4;sa. hC bŊI,Y$C k0޶ H_}LbT ! :2223LE6 D ??uUtU`drh6DV 8QBu K7'gR$_nyNP-?\SLz /v]K ^yL%iXC:7kzLlzRʈp vYpKPjļb6yegDhs[#EބYDCJQSP2uα^ղҫ]s=k:cIe_$ΘaƄ1~l u%kcc|B98Xi8)Tw\                 ,ŋWBSxPnb|-fZ^,N{oUEz]}<dG}MQvK 0'w"L{طkCzZ0-֓aoM&O_th:Xd~dhm;a/uS@xDgM^+{fz~rß|ÅH&8Z<ߩZ}>q\7Vg//̲W1)N_^ip%=iٸ+^X?c|\̚'ZX:]IJQyԙ֦CkW4;sa. hCUcbb<%ta$lݫHQnray/=Zί m(I-Aid+IΘhյs% +|1yחtۨ:8b"Lo z *|3EؠҁPN_zY>#^>|Ǎ:s'3‰\G)?Ѳq#5 qBCmʓSEu9rsȠ;IT4əsUFda<*mk.G_a#햠x6c"@U] kN+ȳm&3 Þ%,Lo dt&rSʂ$<˗Buܞ:#u*Vwjuј5>)|t;s<7m~ve ֶ9Xi8)Tw\                 >)R!T6tQ]qU:yEcU4qbrVwzS篐A?L3FEטH ӭF_9~R:5yѣ}' qV㼯w{@-[\uOg je.כd+_~Drq?;"-? bbW%xt~+^;nq5馠qLy"{̆hfy *~^B+A>.X[L_zs9qꌾ<͝=FZV0h?o5OЖcwz|I^@L5vcUXfN7^.^Dk`=SZW,)TF$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$p@\\/^\fn޲Tgvu5K|1%C f~]˕T!^Nl)7KJIEC'!?[f{KDP"Sgz[A=h[ p(%ϕ<.9Eϴ7N).u[v)v"KNCp<jo{UzUTv}r͵Uȟ3:qSPti~ݠy.DJP빮l NUɒ9ayGר D8Ω-X[LէoRE~d505h(c]>e':!47ރ!4O'/ԭRV^lܬ;}`+ An>OZW4_[ }a @+Yd 2P)1:]|魪ʇC{_Oy+74~dʘA^hLjW*m9%Kg X5~ %NoBuԭZ:Vx\-Buh?-F5DEnb#zk˫VB[!A߳H[˻n J3D7רx>k'O#& "@-P7#R@P-nv.9g&`cRfƂp7zdH*|_ɼV {>^bccP=]tGa?HHH"{o3                 0tP)Rg̘Bȸ- @$P=F$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ D)S&P=@$@$@$(T[ $#/ʰaäXbEz2 HHH P=,vHHHHHHHHHHHHHHHHH YK"E$K,.]:Iwɰd鉗ݻW<&   %@zHHHHHHHHHHHHHHHHHRH҇111{ޒ $ Փ:OI$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$I%Q=E5vHHH Y Pyr                 @BX%TO>0z i" @P=y$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@Mŋ_Hb$sBzd/HHH BP!7             TLm6ٵk۷O/ǎSϝ;'.\HW.]:T@IDATYJܹ%o޼R`A)Z]JgΝ;{ʡCSNɓ'ҥK)R\_-XG˕+T߭x5 Gj IHHB%@zy< 3gdŊj*Yf&zժUkUQ}#nl2Yr@NKy]wu)SMb=쌍@ʕJ*RZm]MC Q0zü(    P:R6H$@$@$@$@$@$@$@$@$@$@$@$@iK,իWY)+U$5jP"Hŋ9!n }4,n.HRW^]M0JA+QQQ#q '@FA$@$@$@$@$@$@$@$@$@$@$@$@$e޼y2|9{,xթSG֭+K8p@/Y`>}:Y@,Yv__7+<&7p,͛7 SIbń $@$@$@$  j$@$@$@$@$@$@$@$@$@$@$@$@$@֯_/sli@AmR|iܹnݺ<-ϕ*T Orڰa_I|yHR.(Bt 6L .,Yft #GbHHH"s/            Hi,Y"3f̐={(X4nXWUOw)@rǬd *믿>#Y=|`܂PŋuIHH& }U @,X 9r$Ԧx|ȝ;zRv>5m49|pX#@R… :t(7$|n6UK-;DT/^DvDui$@$@$@$ ,t} w}             AQSr9s攦M-:}ʕ۔bɕ+4i҄b ;) VgsGƍ'EP=jiP jF1+ |z!ɜ9P=hK$@$@$ P?HHHHHHHHHHHH!pBAdb X jJjժe 8M U-ZHEOx)@Μ9%SLΝGXf͚ai;5 0JRBKKE "n/$@$@$@ O$@$@$@$@$@$@$@$@$@$@$@$@$@@5bYfj,K*U$;vtupʉ/Ø Ҭ뤈 [;ԩSeڴiyn z8wjkcԨQRdIɒ%d̘Bvy=$@$@$@P}Z<~:tH;&OV+s!yUz;.X,>>^LO҃>( iSLy'C QK=+qUAWq1          DX~ 6,G@K.RB.>4]k׮R|пDGRD oݺU>37ֶ·3X%:u[/zv4/K,**JS/Qm۶m2p@}<өS'aj۷ˆ d^Ţ<ոqc_yܹ8 9}={(/w<_u_|Jew k0)}__ 8D1XrJ郑s/         H_VH=_ lpFTG_,rmXXEFzjۼ6   WP FF.]*qqqyXoW"j:`=xرCEd@4DGІ @:+l[6% ձi×oQ&jkCzqop}0$@$@$@$@$@$@$@$@$@$@&?S&Nh#ŐN`]k^6]tHYKBu"=^Æ %::ZM:UMG&MT4uCD_)A3ځp ֭kFVAf"j/Ї*U(30!ֆkûG=*Պ2Df>t5+,-Z^.)}j*2d3gΘQQQCtue…f9&(tY۷Ozo_&V34iR {qޖO0AX=>J.-r2CŋHцG;z=qℹ2"cglٲ(DWW=4(pct+/P"]*8V>|߱NK:&T`b-Gll0z9H   4DBuwo6ׯ[˗.]K9QށbDp%"X|DSClC:I٠&5qHHHHHHHHHHJ~Pblki- D7NV\9֭G/UP ͛eРAH G/0<|\'ի'{څߖcǎbS Rg%Gry뭷cO=#3"9'A}t)Pi1?P {N!8p)0mzr&6B ϫ5_{5 Ƙvک+8~;ɓ'hlK،CxS:Dm۶RZ5[(7}mnmCgɭLm@^T)&#;!  p"3̚׆/4O_.ͷ`)T$iC:=` $@$@$@$@$@$@$@$@$@$@ :T6n轂 %ĐLa:NP=CRx1֛7o@Buo֪U+U*FyUfDx *&ꈬ#}Hn7] (ڴi#իWWy&Lro_ aP?"Ϳ뮻䦛nRY>) *0~'78oe*na6%_W]lRe ~k"ϒb9&aJɒ%OzZ^3 @PL f1O6l(#P ,݇Y0,h j9A<DK~Ν[+BXfMD_f"Tw>>|X] f*V:νb پ}ܹS}{,rilՃ endm!0hÃOpe;vxX\pak}ܼn\{o <ZdbX_'Pyl٢?xki3<˙:6OUqƪ>",^X֬Y# >6319}@G0~2T&         '%A|!uI`5 6H||GnvTK5,X:o?쳒/_>jm/x'vxG~]ҀtH#U̙j̯yS"xΏXRKL>ݱ[kkfx=V 'aqF<i{^|ytxot]a7~#Zo|\?S]w}x1X׀ɓ'ٳUZdž:^Վ_eX}[ŋKϞ=jN3p@dZ0Ğ#1B~y}$@$@$@!P=d L4I~g3^Pq3åXNhٲe>afͤA^lP;cV1c^ fbF=#Hk[t][<4h:B;g̙2qDf+T ?i޶u?Px >[v`7oV^q6K37@ͷu{N>X>|K 3TˍbL%l^bdxP>exx3۶mkF"VF1zhP[=X~sΜ97ߨxbpqspHHHHHHHHHR_|QE g)j.ólD6[TW{= ;x&nj (Ây5D:HځT"4|':w<[gVYk3ckCS]m$b@,)}W0ѠW^}!hA@PD,H/k3xw{ykthf̘[_~bVx!xh]m趼m6mR>5^Վz}sB`>K\{j>vԨQJI;k#  pꮡT a0(ՆȽ*iv̒@ Zl(V` >/g}"}z-٥KsF7̾m:p,_afV>䓂/ 3!G@-O<*f2FU-~XbYu͎p÷i>@ Up~~fq:<<'؅;wV˯\ ~X9Æ D^ >z8Ƹ@:$@$@$@$@$@$@$@$@$@$RTOg޽0}֬YJV" Yv Bu"qʉ~A1XW"c%RA[=69m#˨XAnnce U qtd]_@k|{|&8?^0!cnHHH\#@k(UCxPh XKDxbk uU0숼HVUdekvP=ŗ~YORTN)Wd˖MEyy⥗^Ro/VM={#ŵ^kF@`F<0v~ 뮻NE6_~M<췎;=]L<ȵ>Ųm֭*uU<#{tt3,Y>8њ5k׈:ETcV{O$@$@$@$@$@$@$@$@$@)D:(MA! 'L ;vʕ+xw'<-[VSk TtMdBtzb!<9Nڣg~w$>ڬIr</!> TGq?@:xbZE֚oMӿ4KGx٪U+0D[*UtR>m]B͍6t[޶foڴZ[wkt+/:1b%x7 K*l\Z/xdXyУ8gW;ilرO3BWB@B  @%pEqtxV]CXJ䡋S,:οO\hk_hYT)kԨf`JݺuDx#F0E?DV`8/D֨ ޽{wApa!CTv]֤IBݞ={Y۷oOLG/=z0|lF*:X.+V01b|)mfj׻pP}*ˆ(I(a;p\y|_~GVVt>cY@aYR,A Qߺ.}V7jH節] ,& Yƍ"a}<NjCH0xektdu}ꭑX "$o |XGVG0jNBuD"{<#}5bvm bD}z/_Uuou/;_8[g͙3jg: W<`)?;c;d}#67myחPV+6 *0٭v Xc!TO5J}FzJ7 8rӲ:9*HxEμdݶݒ1CzigQC=މ NTBσ/>*Dx'M/Nu @`X*Q_BiD +Dw#µ6.Tyy֬Y b?Y`K`W_}e!dҥ`A~v>Iک+?e-ZDf[G׳o}4|] W۾3C"rMw ކ znvWyAqDѶeYll[oUyZW,q`5PwϞ=[Us[ϋqm?_ԶcHHHHHHHHHR 0K ˴Pܰgf<ZJF%TtS3Yf̘`Q8XyL`w}~H[Ťۧ׬YSZn!X*?~uoðݻ=uo=*:п\Ɋ4[& ]ޑ٭qaMx_`fgΜMJa6%_oBuB111jq?Վ/w}X?; eB`>K\[j>K,"w5A}/WʌkFk uJ2&HHH ) _:Er5?skgރ2dLYyZ|߹?7Uf.,S'( ;Qq'K`9~-(u]RBN-DƗ"=cu^ZATRE]kֆhlrf$Ν;'juXuv>X_ßZS?xėG Gjf.c@ " ؇ζ ,XDzC:ʭ$ RX]qB{:L'ª܅~-]u:V??մ0A+V$w ݾQ>bZttTqJGѺh˾E *ŋW]_vz1>Bu]~p^VnzoV+XB n%k9c/hHjW2  p@R տiLsu٤^yDrDtI C=ީ;Qq?*:B\ENg[nCۅ;w:u8 P0B_fc6{Y|yUl/sfC̫{;S TI ի':t n}J9@̫gݫ ~~/)alI~^Qp"Ev-߶ &`V?8k.x߫&c9뮻Nw.p7`xܧOXB}U <0fgHHHHHHHHHR 7/0a/]ϗ`uBX[A:O: @U >?Xyu…"^~3gz4:ݻw75Adv[]ۖL& > ݙS{|cu38tܸqb enhlKB^l䌨Ǐ7pßj.T9 aWWaB`>KaT$VYdLFT8g|j^roұ)gU\% @RHJŋ_x2ҵy#i~/ C=ީo;Q ޾}ϵzfɭKA 8P>iҤ`ƹ6P*TRvnw۶mjyC}~D;{t^biΧ}Gyƌ "YD`ؾ}fWXrL[߾}hѢj7mۅxлl2V_@m85˷>_ժUU&O[nUqNk]v DH<>?`?It?%         BA+y˴ξk2!kleΜ9H*W,;vTEډ 12 RBt'8 m-JP@дiSAuCʹay9 p2fЩҧuEŊS+3=ށpN ߂`[ݎ-*H A0G}WSXe@`/7VZ(,hé]ky:>!>+X=ٺnPڱ6c5 W_}QaS(㳄s"<-ƎaRQ=噁c%zFեr:\*whgIl<y!  pHJ [=.tѓm< UhN^ ,T̼$ :AOeʔQ_BQuyb2 6*TG9$fϋ4ׯZ!9S#yPo1Oڂ倇u 1ζBu}~֟ Z7t6mb& uG"TH|ɲa9}t@R BuLjؗP!zzDg.T:YF$@$@$@$@$@$@$@$@$@)#CH$H-㙹|i6l(͛7Sqѿ.3P-vH`쫇XBM'9S^xq=Bu?wofY@fzQ 햽Irfk.GkM68nsaaD|1M$@$xI)Tp̯2gzI.4\Nu|m>ߋر>pĘ vјؕ[ϭ{ Th~;h@F2'!Fp ҩS'Yt쐶uU$t#vUE*iB/mb`ڴ i2ͪ:[o%yl@TW^y, v BuD.]_@m85o}Mܹs3d].O*}@AD0P=c- &ׯaÆK⵸HK.ѧOi# ;Cu@z#tR$SL xgyfJ|я&=,YRԥPt~{\4B ]nQڷet1> (e.%J"od[e%c!3o]k3uL0X,F֗&u.gr)Uzj{arI}үK 󩖷Mdrgr[Hd-1*G_> uw5LD IH? ۏJ0.㸣g=Ș>̒p~"M+<~yg䙳]rXƧzzjvow&v;$& PVdGI~[Oz)k Az "nkh…7nܨ]yB#8B y"XP=ח"FG6tH*fv8kOnݤf͚^ %{I\dӦMly饗D澿f^z5\ٶP\rof'GҧOuff@m8_vtKeB'N\=@RR%5͛WECQ[DFDzBTBu{_nv,4ij.Tg          HEiĈjTtYBǎU`OC+M,L#\t!豚5jvdϞ]P=!#3+e?*훙N[vɞCG͢ז2$GglD=Z-o㔀VM=wS#k)zw} >k|!R|Jb֣۳O$@$J'|[AR0efGp|4Uר(O|. q^,u/Zj$3s;-ZH&MnbȐ!dUW4Cҋ=">*իW]{vkDpmZ  kEjmEsϙ3u~bp^~˷>'3gΨkNׯ{ؾ}{*?_ &=zT^x/0njvz8Ƹ@z$@$@$@$@$@$@$@$@$@$,\PƏҺ@V>曓 ſ>uܸq/B'кu~&YoE :>Ȥ93mu-}\̘>/G.KԯVVƍ*_*On-wׇKC,ѧ}sQP]7-$j\[* +ٮӧK/w׿N\SL=(J*gծy0$@$@> <^\0ʸσvQO-⾓[vJfCt9n5*6_N[Ugqij/^׾(6nS 5Vب&K1keɆ-C*TxܡP=H`>رCECU}YA`//OCc!*}ꩧš6m*sOM;ַ`Bpc\שSG:wط`33ӮOҥ=D9CqEb#GʼyTu-KmPGRjU;wsN&v}o} %w}rwXl̙88V^8t]Sc-ޟ8p@Mc]n7V}c9 4xČP\mڴD>(liP F1+x /|z!lN` Tϖ-ҽPi1/:18Gu'*s&#$:wսV:@2e`^ɑ{n&O)eܫQP*QZR2"ϓ=Fs9Z3gkCjYyf߶9(5:f%   "A1yrgw?,OJ]@3q1XuŸoU^CXdɛ3YIY}ٯnI=63`$"mv:1qK$@$@$@$@$@$@$@$@$@+Tb4/g:}n[HS,)h~.o7 @IDAT3X(K7n5k}L;)V [#'˂H(ӻ]3rBkKVo)/ l2H@ǣdfH~n Ջ-#z:LS;ƏgM;JԕHFum?[.Cv5D 1=.̶ C=l4 !|f]o gCL?Evz8;k,5{]qA5j̞=[ᆱϝ;'EҤIVto{cBm=\zWf̘!cǎ5j۟P^n|f|D~'bŊ(Nsout<mA7 ,/; cW_2|pCR 1y tD5kwCҿBǃS87?K)kcbb(TGqɌkj=J*d-f{mvѺ-ƈIfq&F5}cl\׉FF]mH}d/wXdwQTkǟ4I%4QAb+{oX@E(*btETAZ; 3nvl6$3g|g*h6էq<+qg+Muֹ'|rݴ,rC޽` +VzcG}T;(5P󲊆k?CwvmҦM3eW >Gv63[k[Zt'xB4mwP=Ѷ5ow^tEңG[%^'OlfJEGԩԼ',z=[;^^4%&&F.29蠃Jg/໎]`E꫻hv Au퇎~Eww4k6\_Ḷt$qt\{?(z+3sߨOЧ&]}o̘1z+82    $Iՙ;wnM:,%}g! 4b+U5\_sh׮~^>V6jKLL4FQ+ ~vxn=D9/#yg8>!QNŁ*gG'ˠ~ryr8(`Wl^Eկ=9nן~/O}_H3|dmz6ME:@LIVneGm岃^^Rz-w]Hm!]}Sm x~ Tu{#嘈ODG}~EhwqҬY3IJJrViz墡iӦ9uuү_?e:5#Uk:Fa˗_~)G//N3-e _$&LvxۼQL&~/Gwi:jn{/9U5AlyjΫNuG~{r%B#_VO9Qs5̑5;X VP+$FaQ A>V폀{}q0KWIX%:w wG;awwP=}HMyрn|[٤I6[o%SNu/hiذU[;t_~妮{cz8}22=Fcב5mu5L۫W/-Q>wі]G;ܫʜKH(YŻ{ҷo_Yt_~Dd;cݺuZCOi&ag}V-ZtQoоS%s[L++"Ǣ7S 2=HG UC ~T>S^}UkJ* /8_b     PSU:hKՔc8<䤓N98gqMϭlտ""i:q{I6OxaÆ5T/x妗k=6HT[PYjY-#cbcO1OYG$:jn?Oi̺CM[w^jW3 ^=Tאˀ''-r7ΝşmBnO(F2U";־Wz>כ8 vk:ѣ_5SO@źҥKTIVV.K573לPߪUR#6z>yO (=+sn+w]5Ofŵ\q>!pBs~oל)zG dС<駟6b%նTq7m{naunu ^H2f3[ZPݮ8m^@@@@@(|w58&1{?c6ҵ^SwPo뙯YʾxϪYGS,дiSH"tDL3hmzX+2 kfGX_o0}|nŕͲ@ZF+mڥӎ$Yq i4ǥqn˵gcRA9K;iټu#?2qٷ/}KU+G@߫wnt;Jߪ}LMP=s xWpt͐~uLP]c yhheMMJ'zF8U|>lv˅'Rj::%-;eнW'{/@Xs$6k ;>wB Q@JV^-<ӇlK} ʒ%K.RKg     .0sL:u̚Ur  E`}\233%11A~}nG?} O2Q_ov^Ci( A`Q@yY`:F޽s΢#eoD>M;~ftu     ^;w᥮۷oo:u:uThۡ6>}hx١6U `__pUAR3f8WQQʬA:t`$7E{uT fꩩRh NP:5﷍S%I}wr4w-۶:k|kuIzu%)!tt4k6HAA4w?WPNm6[Lz1ѥ+HGoϿR h\/l  ^@odZaDKCs% }0"u@J`ڵOʶmuD]vɊ+w 6o. GVz}鵥 BM}IokL߳֯_/7n4ז^_ZOr0@111XGNKK}´~/5kLES^ //SRRLgQIDzD: !#D @ы&LիW_8{0zB(pAa/m"       ?aÆIffhP)k@ TK @j h`]Gu뚑:A"       @uРznnǛ.3zu9s6>"C:InFwv @d TB@@@@@@@@@ 2t#FH-$11Q℠zdz ,@P=O]C@@@@@@@@*(,,ÇKNN GEETB@@ G)         PTGT%^# @5 ^ N]D@@@@@@@@*˓VZI\\TS@@T.g~"        @Uȑ#%;;[ WI`  PWsF@@@@@@@@@r.(QQQUdB{#Vk@@#        T0@222$99tz9@Hz[@@@@@@@@6/deeIBB3Ajs( TAg         P]$''G%::ZW3G?@@W=;F@@@@@@@@j PXX(|Q=>>z58gt@"@z        -0tPΖ$bD>[t@"BzD:        ,0|pi޼IQQA>Wt @"Dz        +#geeIJJ #GYc  Q#t@@@@@@@@@aÆINNǛEYêER? E٠/  |u        .'ْʈS@( Ε        бG)LP?k@@Z0        1b HaaDY"_jAg  OOɰ@@@@@@@@(x%''G4AuN  iM4.@@@@@@@@@ "Փ G  PmWSEG@@@@@@@@@*ْ(111;zzzz%Ӱ;@@M }X        Inn$$$Htt4Au. @@,e @@@@@@@@jä)))RPP@P_? -@Pl#j         @1b4o\Qv_ = *@P=P)!        @m333 F@o         P*&/QEV$5k֘GR  bs         @^^HBBTHJ  P#        @ÇLILL(Q@jAZ~p         PaLP=55U )F@k%        !#geeIrrT/Ë  T"@@@@@@@@@J3AS1JI]fazzz! ~a1         G`ذa)TgDu. @@  Q@@@@@@@@jsss%>>80z8x@Dz JA@@@@@@@@*#1BZh!'kq# @"        BB>|䘠zTTAZxp  A         N@걱k# @Ճ&c@@@@@@@@eyyyҪU+s  P>sc+@@@@@@@@2rHΖxs  AP@@@@@@@@j%33S%**JIfӝH}A@Z,@P|@@@@@@@@H[h!)))>A2٨ ]zm8~@@@@@@@@(K //OZl)III*AX @5(**̑]ױu$#jtUwN      5];! q<}k:uH999(BP:= @%V}Qsg˫<1A༨       Tݐ@Vzb{| YYYOP}/ S  g.q0RHx,_f-yHlL\г[] u{_;$Ke       Nԥm@| TҡCJvv$%%ITT#_ȎZnrɉd-#;s@@ T_vDsJ9s;B>WG}'?,ۏ|蚠 u{_;$Ke       Nԥm@| TÇK%--MwoK~A&srX? OAf5k7ʄdM7ĞQ=F1APhl      ! T@(Ar9Inn$$$Htt4AuGDEg\^UF#iD:6ɒؘh:|ⱬKa©:uJn9xt[wP=NxO_3R5Q`@r~^6RoY J; u/$icYLyu0Yq$בD;2dfӎWɛwWoPKuֹ'{>Om,r};MP=X1#      @Cd{@ {aÆSRRtEյ$_2n̲x9 ]x\7"3eWt_Z4'_7o./xf?@JޟyhX]4ާ3E垞thg; ֈ3Zf\{SL^!Qω'BAPKpsՃ6      .@P=tCZ@@ Xy1b4o\Qݓ\Gޑ]fedyE+ZKs<7kgi`λ;:9e5yK%c=}ߖrǛY_AΫl ɉҼA$LYAult  @;֘ 2n[.F#2oA}>C~lNTu;"Au(,B@@@@@@ T+/# SOꙙ֣1]ˉ:HVcnkۼw$y_.iYCn6ԱtmZIG~#YCy:a~} K׮wp1GtF2?d?Y?ƒ} ?cL T@8OLcW)[4{O J]lg^[\g@5,Kǯ>SZ4紡7\GaunoYWQc$_.ϷeW @Mz!CƤ@@@@*A\jj+C]iXO:(kG=3C9U-deN`Q7l X7>a7q5xdQE  @P=0h hBi[hFT/4Pvkkbp g+^$8]řװXw-X opֵiD g^GKpپk,)ﺲؘyڳ%cO/Рz(sv @ ͼCV3ףSʅXgHaQz JmK3u;h_fQętd96ӴLcyBawP]` E]oLkx/ފ %_N*N&1zE     ^R:)Nȱ2~l{ $@P=32$55zH!A@87>/?̜Wfu!Ndzݺ}hl.2뽃ns,$UPzPTC,aN-$-zi@@@@r DRP}eM㌽GvKr|"б?yW1c)mwֹGTu$O&NkpX qc ::ߜu:$9mr!Qn2y=KxAꡝ QEf$''KFTS8pd,VܛXt)ݽܞ.~@=q|7e9={dٯesWIMJ7x} 2giqx^c~@,+4U4-s7gzLs4 @ lٹN wFKF!wA̅M;_~oGZ{tin7M}2k,t>s6G %C^P0:@IDATՃ*R~U%_)Mj_P < l*hr\56 hkRUu{AA` aR`Y    @DRPwFɴyKRq+*-ח]jVߔ/}A6Vq;lLLI{Yfdu{= !@P=0`@Tז驣/X"IOM2RnMG]n0-E&'뮾u!SDa,"A[ 5W`ݲvHo`}&ԉ `C>TF]|`k2BY|l޼o}V @ 1g{u 1m纒.sʽUVK+nѽ=۷m*5--]h-u:)˶{{ ViӦɒ%K7>ãR WdggKVVtE5kVC@@@@?k!Gsbr=́ݸE| "@P=4tD INIaD(@jAr9p Z/f 58pcٶa:,D(@r\x#:z6XG:dǖX{nOo17˗PD[wqһwo N!   TAKPite΁}-ٰe3 @ T |=ɑ'0zhl @z-8bXv.)7OLt󥬚7άӑl[l)͛7  HllĔؖ { $??_֯_/+V+W… YҬ]/p%ִ~|py]{eΜ9=CۛKT޺iGήkQDe:?-[LfϞ-&Muh׮x|rR@@@@\g.A wu쒇ߔM[u@z?CGbb z=@jAZr9̰ (_&Qr4uI}݂d&ץK+u14AuՖ _5XڵKo.SN5OFsd#U>cJZZ\}ҢE s;n=/km0vֹ^|_6o,'pyM3    @X[]q\vʑv-JIM@J ^~f%;+K=z=@jAZr9̰~.k5URVʏ>cB={4~Ґ= {1k0]GXװŋeܸquz'[2JҪyݩԱV~o,Iv~Ӿx׳_㮯p:{_jtRy;~i֬4    ] c&N9KV=f ]Oc}9@w6<˘[Kӗ?ϐQ+wݷdIgM}<53{5 "@P=A IHH0y5 $saX@&%vy#9Hf|l۰H:w쌤!uT  auY}ڴi\?W:sl=UȎu$I2qD9#䬳2ArZѽռ:6r^i^5=j(Dž^XnY    @ DRP=;3MwY٧]"v[?D*=''&HfݴX䶗du2&@"Czha+qqqCdk@-k˙8!2ְK{UO{$uN! TG͛7KKAB+E:C=#ׯ;Ìv`WtiծK[g 4Վz+VO?- 4W,C@@@@ ,gЯ'ɈqxtTXgF}.::@ ,bOPl Izm:kE |2iX_PٵsFɪ?J׮]SN'vHKp(SgΜ)40iܮxtw bCkF=*{Nbbb<=mio2UzҦ nh+oje    E ?L# W{:?XpYR|mxP=*1SAH_\꞊g,uckucdٚeUe= @ T ~f0,Pe!gh; e5k֘Cim@@  ^a4T }](O9?.;38C5jdk!#@ T֭?XI)IQDͺ^x ہrU+}͛F|ԳznW`~寮r=~[LWK,C@@@@ ,TQ2mޒAQAǹj&yzgNן}j,[a\{o AAL?/AIFl"^~OD@Z"@Ph3,?W =icn_, =C$cl` Q1礠F(WAu;L^}uW2զ:i]FPݗ$@@@@-@P=pQ=@~}vfgdSy&@"Kzhc#IֈQ=4NF@ @P6e1\oZAuk_AlW{1/HP}2ŐΧP9:Z䚓y^_ӧOŋ˺uN:r9Hrrrػ]Ag`v쫢ѣM'mڴN:U.]{;v>LvQڶm[펁#   A"=Gry.AuϾ'o  P)Cc'tP'X\Vk=#4jH^}ղ;k;3gJJJR^=.+Ips%ډ+{yյ;xnOۯv#e- nW*Z̞_={7n^,YbP^Ҿ}{ѣGiuz7m4{1iذDzf ^k\7hޯ|muVH4iܹTg93e˖6sPNSzӃ;L.*MdZo{MgN9ݻwdt^    &TWE+ו)ȱp*"y뿲a˶m~y#߷:͑.?YR|m=Ѹ^]ycybw@"@zh'aҬY3[YT͓@@T'9oF222䬳ΊQQx%ʕ+.+tMҫWҪ.~gy衇Lnf9#ѝ|P~ә/oԻ5WGנ}n믿.z]wezT/X|3Lb|=dP]׹]m4A1cƘ ܭ[v~'={taq@^K{{te.\(olٲ!v̈́+su}x>55&o?،o}|??Ӣׇׅ>k׮VCgU0~^]]J$?#3BZ}fr%^s7o+ )^LP@HSP`ooH{:B;dnyO]u#ڥݻ< iiiUX{3k2{ZwP}ժU裏:!nA]ߧEoȚ}:̰,>|@k j?נYJl+O<^t}oiGSHw u{w[U=Aܜ}ʃQN+S}!  D@UlO_z}^2(}s3k5̘TC=V2o?./QCG+3W$<5D_ kֈ/pVq:ԤϤx_F}4 @ T7h>$A8@jAumf/s1rſ#рX#mۖŽ+rPNM^PAuUEYCܲոP?quСJfE Æ 3Ν;0Cގz ?2nܸׄ>&7ŎTϗD9ݛ[M NڬsPݡsӺ{{s}?ck[GN@5ǻuVq=e˖f7vsOk{~c wP]ox;v领8 '"^z%ٹsyL}1/ٳSat:uy䭷r{zzƍMSL1hTyMHީN4vQI zz3@P K@@@j@Uk.G o]]:`@ɲFTAoY@@ T^~N`T{' sEkꫯV?|9ꨣJAGiӦrG%vA Ȭ111Uy՞. :Zc=ܨA #kP]եhP]CZ4ګW/3 _t`;OVyP]|Do0haÆ̦Uwfh=NA~[vKtʣU?&F9G kX7 ykK/uFudx唻l߾]4gzS!b^_ڼn4ۿ͗{KƠm r />^u1cI<ssÆ k.3Zy%11:~n\7i@F.:u$\rh>_Aulwy'3lOk]u.noS֫4|rs uԟ_*:¼s|2Рz0mzOoYzkͣ8}݌A_~em/..wmV5h<; ,/07,Tb@@@ TgCD?+!onĈdK@MիְҢE<:#mꈛ] W>[{6s(TGՐ| Zf쑌5A*-,;x!Ky 5i 䋆֮]ka[^W|A•+W8^{=}kKOPW{ۮW 8_J=g`FTOK ~^o^5; s 2y.z~_4j|Oke^|yk, _z0O?=z-sMo  ,:W7(@&L>۹Tׯ]?u4u.zz3oQ+ݎW F?3ݻG=݆ԩS ]ĝ.!eӦ'vС?g=Lk폾EWM%'O69.ug^173k(C=\SN޽{$@@@+@PƞZ @ vrlƚl ZsbD<@jAs5!Q-~2e }uE2Di@%:wА>9k,yߺTeza֭4`A dtS닆Gu; iL5#th:{ifpT=rj/K 9۷9Q; ֢? @yAwԨQfn3d;|3Ϙ󮡻 x4~5\#W46-q~=Ż|'fdT#wٌ^콭=!cڳ~ X:Vk [7ڇnݺUW]eF[ۯ&M2Go#O8Qw>cq^p* KvՄ6+=*fں ]KDB Z ]|ŢסTꫯX{o\t+עz+:ꮎڭO5jQ@ѳgOQ˻kʻ|f4`}jXZ3^Gjzcx^s]?[JۗT+7h ]NyDuzcz c/}?mݺ]~kHVSOٳgo7uYm9.iNZ1i/y?PpJMyzյ m>ԟѰ:8=^w{[uΜ9U|翖P7Eo &7_U=Wm>ԧ̛7^TUF馛!BiA{K/TjUܠ?Ch &]:zӟFRȻ|w2bμޜeTwX@@@k@"Vzh]+ׁ/Cdk@իIvaeis̙&a҂jEG(vZ~?Cw5 .@#54}tl۶IX^#=dUu_#j@UV>Ӑ=Т5h/_%--\چwkG[zё{9iwk8]*:ǧO.`}iEhvs{{ZJ;Խzrofzw]IUzsssMD:-[9Lе=*|y{nīQl7#){^ڵs/6Ls!.w\*n_ZP]I#>S{-#x`VO?F W&z={%V}עQv z+T]$F=.@i^v\: '\}rDG߶m{Ǵ~kWtc;54h`@޼jX>h0Ν+~NӛHIqOρ^3=w}٭Hf@TZP}>N٤vu3%M#|y3y[vZ&pO?g荐syyq,ћb.RSO9ͼ}MMgB?wHGAɾIIM+}_oh]՛xsSP+fMގ?xs>Ho>_yOހ~FPקh?X%n   P˱!DA`:mIOP=4OF@Z @Pzd hxJC4&|DGY}wЌ hTÃ)+kFp Bk`y2c 3iiunjoxj`VB`]O_O8Hk?wy&df𥬠m~Pl"H76EbMXblDcILWFE#5b&VlRs[ݻ{w/\ޝsΙ]f/֣zqǕ|%hW 1A X@nΔτ{ m8p=zt߻wQq) !DN^]Ws9'kALRm!;we 8_NMk-s^VXaG &ؘ1c즛n ިas=77HׇU]xᅆ7W7~?gyT}CyÐf̘/b+[7P)X+; 퇵l2{x,##FC9c{IWIOd|sgډ{rvmY3ˬv&`|}uK>ߏA(+P2ioBO<1CҢ{~50i)mx{t|7!6d ]xN]ű;>SBE@D@D@D@D@D@+ kD@D@2 kk]w-MMy V^e*T-+_J<0"\؂a۞={aP\xDd3k֬(Q%-<7"2G.+$!R"ޅ=g"rm>z]RX1y<} =Ĥ~ FP'< /i eVr P/yEXE[ƆwN~AI_Bwyx%6mZs{Dnҟ/6$h#K@Cp}1d>uj~/ψ#E4g 1xLE .V=BXyIaGqDrz>Y۬n09hCk¤Oq"su-# ƞ =L#T۷o,܍6«!l0î-F%?e_r0>;OFcSgtz~BѧkS׵$a]9]Gun<~ǹW`x_ƻr9F[w}& T /o|s8Oo06x_wuQF3~ϤgdŁ{7rW\YBuC}4ƽ(q?;'(|]C86{g-g7nNbq|Brw"+``bVڦLbOL|Buͯ'B\ƘC5akf4Ƒ11&T/xu<i'O>dk/PQ-0J{NG8 aUW]s (O?=FĈ"Puk9Bu?o]BXW_͈r `}ZmBućCğz̵z2#vo]KlޏW CkҟBT_|1s_FG{z&.bc%3#T~&6`xm71 l9l&t+tqZN]~obf\۷z+鴓&Mʬ.m0oX/Rſ͟>OcڛoV~ !X{'\=/݈g ׄS&X[L~({YHB|˵+&0([h,}*ڊ4f7յ4T27%MH^N7VFPCܓ m>}amQϛU+tXl{73CPa?J)!v1#Xg߇hd0_^xᅙd#Fѧ<_]{A'|p xcE܋駟axǣh>C(8jԨlV qk Xų0׽Z͐'o '|  \'>2jxG1}I1bGH>,Ώ'"?n馌Wwi{|" s'x"d=U ~hb#+Br|}![ouV3ay>8qbf cskږ^z wh:c>#Kښ5kflM.9)T;|T=C\EӮ>+YVgboDA *[ne&sR&sTf+M}&/͟>WcC]wԓbM R?L䱢>[m2glxo޼yGעEN\5LVg^ +w#G,X]T!CB69-T/xTw҈3&m0Q{GvL89qvƌT9$V񪱢WsM{-7իgUnh?d21ꪫjDž3ɀ|Iǎ3I͟)Ú>IFb-P2 &3G rtsc~G2cLS:ɵ1QzdW^y%KcH@Bت&N@BZ[]ûK.)zy8[D@D@DHް[w}w+rfwp+BRl2J Oܷzk?C p>CL<,u@^PF?Xkz7Cx;FTO5V<@\_=3YBu="eI)xp@s)eu!u#axvAxL@Z<+2asp5 2l& VDs7]+oLryI F)Lf)-Ioc18Qj3&0{P}? DBu/14Bc|WB`1BZ!>=? qWr?>7c?f}M}#3iƌA oڐ/>h c\1 {lᓻ69'ڷ,{e R7m4xU8F\>="r1a(<>#B9sfWGYdž`&֡C*N>m{)Fȅ [s5K/-b{T-U2hHX 2g=zׇxœ6[o\gm״y,DḦ́cW16p@;3~ 1:?fK4.o <s#L|=*l˭#Ľ;d'ce7=<6 Ľ1{("݇3x!Ǹ?ƙm>0Sn~`E/|fB'|5?YB`wH,x F:,C[_F_=>{ zItE@+TͰ4q4!c1mڴЇ"f{94Ed%eB+nWA`BZx!1,)/~]~^qXzm>=V F51F] C~o>߲a!;r>#60&7PxO:Ӈ X;cos Ƙ+7(8c ^/~+01׸`L^'X*eY #|6]W2ɋ( j"3c@IDATJX݂$Xu^j</bҥK"ӧOw*A<|s^-$x !}/&N_'^Bu(D@D@D@D@D@D@; { D@D@" k;$T/rT n#`\țƟ~!V[mXl Slxų(WϷz+đag x7-WH|v@4ظƅ1`ē3mԚBGd M9N&Tw/BuReē_xA2@DW]uU( Q7/{Ĉ:aWNXN]$;חu8v: L Bc< ǥxFN;,B;q+,oD"=hpbY'ʓ.Dg>f.ID:dVF煇GuSHsqͤ&0UVvc+a\}ԗPxwru2^pc6kPs2UC򹕛IoL=q~Fz<E>ބ{Per~6\pNLw = Wf04s_u+?ߡ;ˋ߹Gbd/" " " " " "X HX[V%" "А H^^렷8]$$T/rT n#6,1 iOsw^{!eʔ)!+"v0nc>x׎sh!&nUW57.N'TunZPŃ*VGϴ)k ݣ:({ W׈#^C<^D`|pF'mֳq>=I֙!dxƈc8O~9MDq9&α:e$gϞA(|6 a}b㏇dxsk,50xLp\pAƫ67t)Q-񒋰C-RBuzQG/9ǏD|QA8=dȐ6΄ et1ԋ6 Cp7hРp~.&-x 0 u^w{ rAFxܣ3}.J7ژBc&1o߾6y |8]tE!R)'P8<{!2ϸpcRc[na2a1W<}}m馛j;]Ӟkl'ϗ&X=P>}sOƘ{MV~ʟs+:ԗP NJEaBO62(ED/G|/'5bdL7z[/۱1WU쐫^Nz=^&Azg ߋLzg3)' ?'}17Gnc=<*lR@#G X1}s&q |0?yb:{߿~^p=>Q|K'9`o_=s4f7յ4T27&2nlP<-" " "P$To*D.cZhQ^!{YEhDB¹_?c5gYED'T'MSXЋ(!v}-ΰgcΌ  } k8gdAwRcɈߺ:^BۻH!u/\T\}믿> =̷x=D5\3x=\ﳱ'Vo2}WAAs$ 1Ku!#/X=3dNk^\N-_O{gZ&Ćv&[ǻ+oÛ`i!g7K8D񌍐=mЁ5Q'Vv͏G}{ !w:y=X3⧟~z җVT^@NJs `b<ߝIKu8!Clc#k<*d`Ώge#?.;gˊx\-TVչ'q p_vjnժU{Sn}X{8._}1D~zY:s~xBr@}.+Rq x>9o\#M6E_E-O %:(E*@-ҫ֒\)7Q=q:y'~ St(" " " i4c32xNF$\іxU{%97xEL[zpv„ {0G"։C bQB:x7o29xlM\dGD|Zo~U|j?â즇g،j ?nj-as.P-| !^?K1Īm]m2iA(k.*xcxFd ><#S:+Î3&ǀC)4o"[辉\BE=ZkgO0i/k*1 /\r=:AxWE =ۇ0|7<(l +cz>Gs0=QBHI{ENVnn#|,;׆hz"TOe /xxƄ E-F!#9xu8/㈕i:uj7n\B|G} <j|aef˭c E|Pqs,Jc= [gKږ6hl*3{]xx_iF|O>1c>NyoDp䣘0O+,,Q[& zu^D@D`(}բe=MɻݻgIpJ5h $To ܘ;d:6"h+g\qnh:Ӯp͞-|5yANjw=.D̎=_r]J^wO?Ϭ}N CXO16dl#2%>eR97*~j+3كܹs4ExSG`9D0j/'5X@kE͟7y.\R~Gm۶ y;'~*Fćt xŤۇS1/]8}&z1FD@D@D@D@D@D@D@DR$TI#" " {xR^[o P񴯮DD@D@DH^O`UlUQ3jx_9߃ ^7sWE"E@ wqǼtA:BBug#T?3 8QRKُK%TGS" " " " " " " " I@BE@D@D 7 ss)&LVA"PBb)@UP__&k& Y٘ ˣ:X~C4<蓭 T'X H^tU& zn.ņ`r<PXrJ'" " "P$TڦׅW@NPB#H^TU& za>2ze͚5P6XH~ u'p3l hڴz_~kxT't5T{w?u:EٳGuw$񺞺?'ޮ|ڧvZi8 g [/:]1ǹK+<s~UD@D@D@D@D@D@D@D@D$T4Q'" " PvFR̛7Faݺu38ʣz>R  @n 2=[I>~metO" "PUB9svҤIv7RWU7?-n<} xŤe?˟/M:܏ݻ*\D@D@D@D@D@D@D@D>H^TU& za>6̺tb-[ $/jFj+%G*ZD@D@DNNؔI{M[i_mVֿ TE.NwK,Pč5*X hiqz|P}̘1裏ZԸkj;nz衡O>ٸƖ㴾_LO[mm=3kUTy" " " " " " " " "y(BD@D@ꍀuG;6;w6mڄ$T;OWIC2so϶?o:{+m ^ %1 t$"  k#ZǛĉm-ze_@ـ՚ 'va>[jx ͑J=WM0sIgձ $Tϋ!CXϞ=UV!EaS"j& z5\5מ,~fBN[h?v}?#|m 74ú թO>aduU~Xz#RmzJˉ2=-f[mfO=mFa(Y-t.ӖyW(]8?쳶馛^{Uhʼn@E H^Q*LD@D@" zQ&B޽{wkٲeXXB!" " "  H u'0kg㓝m2ޞC{.RQ݋/4tiAu!~hCsc~\괤mVsk_|agqF?VXa'F擯Bo7O9رc." " " " " " " " ' ző@"ʛwwquSB R' zGͱޘU%g?}>|M}-Zfq>5 R@Ng϶gy^{-u EIfD.mK/t"ryT&:->tPHN'N4<>L<~_RMuO@BuX$T/nݺuVZgXSE@D@D@UȺz%/'ͫq%h>x>ycTС-ee ufD@D@p&MO>$_LnkMf òKv/eK5)_~;a_?|[vR%?DžE8m_l8;m4 //bBꪫG8x^mE@D@D@D@D@D@D@D@D`aP}aP9D@D@D N {aɶ~sO|)asM6̈́F:/|t~</ W" " " " " " "@ H@Fh$T/yov֭lxo$y1⺀JPn *RňT~T z'.s8., x]ha~LF8#_|;7gͱ0?&N]&˦D@D@D@D@D@D@D`QP}Q/" "P$T/Շ b=z-ZwP<-" " " HX'" " "p3q )B_.Hul=,]{Z :;OD,j/E@D@СCG6mڄC^OWA#E@D@D@;c ]Tqi.)EJ~SqülR,O3opt?G&" " " " " "  %" "  H^^O>|uZn-Tnj! zSD@D@D`q!:Ti8iX4Ǣw/s`9؍0-u_oXѢ'>}X1, / :dP=GGxTҥꥂSz% z\D@D@Da@bQG䊹} M̙%8G|N 9LC~\&}~?wK.dnj?ϘHk.I@BI[$T/'~֣G T]H[U >H#" " " e@x, Hqؔ40G8s +0/Ï2HW<_crXZN^ʓ  s@6 ճyz4d޽h"[PTJ/" " "Pu$T&40E]0BSξs.xfϞĨօ->x?g?D&i\dʖiȄ(ӳO8"U70??5k#qS/LC8/e>k}'C&" " " " " " E@B"rE@D@D ? )&fСA޶m _Ջ4" " " UM@Bn~]"$P?Ec=m>#8EN'/r!#m.r%=aqy=a#e?N.:r)E\¾?{x}@=P|96o<۾RU@c& zyG]Z֭{1 " " " U@@B*hd]@#AA Gӕu S=%cCtJ>ߧXq!qU$},%IiΟ`!c*=|lѝqDZ~B|l| t8E@D@D@D@D@D@D..;oޏofشiڴlfWhiڷJꄕN(Əo}Y.]!\N2z饗[o ;Sm$:,g(`Ȑ!M6!%#Tj# zWD@D@D`Q]8Ufl֬Y!nē#ǞA<@)gμe{~-t~u~W+m1 ?xd\$y9?f|[2$(Ty${䕯&ڌYAehY6]3[[?h i2P(t*uVZi%;cbD@Ꟁ1FޣGsSE@D@D@UȺDE "兔a(bT_G8{<g[bk4Ymn2 <7.v}n͖\F]zجΤ&F i85j=Ch:taƍƏI>˳4U3uT;⊙ ( . ísֲe˰*Ut" " " P4^J-" " " pq) u D G={v6mZ>k֬ (:FZBs]dE! O#xAŭ?:e?>r?Ɯf͚eKx1~V/!(ǮQOO8;}~e" " " " " " "PIZ>u;7Me6e7&Lܢnn6|g_3l^ؖomOlY֯v>}m㴹;8;6馛ÿ}Ȑ!/V[=L 3(fGBij] 뎖Æ ݻ:%T;OWIC2E@D@D@`Њ>=p{<"uģ'O%(!?"$}laXT MIC6)4`8Dn:%w1Խm۶aIRix<.VǿJXBu{Zvvְގm66!~bC{@?ޡqSlmײz|!uYN2N=쐴{nN\Bu}2{$ڗYf\E/?lٳh"+-;Ƴ\wF1<F-đTé$&M >VZi%ҥK+pv\}K< +aM81\̙3}lF_m84kCK/m>qS`DG:u;Mձ@uu?+U"Tw8P2\U@#& ze9V4"" " " dD D R<~^Njnw!" %X2yY _>Ejr{. K" " " " " "Pu4 &ˢroִgUoo_i :l޶F+D~?go|<9PFէvZH¿/,鼟~!T+N 7ȑ# qrl-|֡C88xzС'5h;c!ꫯnrH,AL[ow6xc [xdžg<̬|A=ztQ׮]m}5;z^7lj8DuQi"u@8τv5}\A;򗿴*#mĈq߃8>j,IʣsDwbM GX|X.-<" " " " " "P;j-kϾ9NMYvYUQۿ_.|eU?rL;2ݴYv>kFk,˷뮻ƍ/IqQvB|e F̿? &SN1lctPL鮸8SSO=5$ǣ9_+l~ax[o c ;8xrj?!xu׵M74L/z)B'PѣGv6d*J~ڧ~ᄊ:dkGD@%"R!CdL$T/RT! +AZejRD@D@D@꓀;9/u|ԏy1K"}fCq!>D@DM{7|<$)^rYr%CIܟbIv!" " " " " "PQ&[׮=r-Cֲ-isnqAk)?_}Maޠ1x\!*~W_xN'֭[Ϳbo{キGem/bC<yE]SM<>vmֳ}'/4tygO>s޳Xm~_>bX+%+q< .;j۶nk/>xT=|ICL*{ҍP{ỏ{&D@D@D@ +ӤAZe@D @ȓ.ps'Md+v N[ p2dƋ-Z 0O:1FǾ- " " " " " "P+j-kshg$^՟{{Rvƾ}W6p#@"bmƬYֲySv=m ;ff}3`߯aMجn߈|M{w#  x+ky.kQ.Tσwu;$O8\YC[oe^{mӧ~a?tu: sOxpYgY۶mQF2%o&L;fW]U@%ËEsbܗ8TH'D@D@D@D@D@D@*O ZKox%.kγKkʚ5]ުigkN>ljC!*]ZVsٿn{-nomLJ{#_ۇX;V[mI^WYe;,Yq1_}a6h 馛8c<{`2Y? u ˴vN տK;>hTx:jhK"οӒ;xsMBFÒ҉w͒嚷fʟ UbC=x9١C;3ԥ5C$|IRWa:֓?gy[g.CD@D@D@D@D@DM8߯0W㯦zȈӻ6Zcyj1{iu/kt\rOo#9{wfErꔅGu>x`< Jt+a9~b7xHz-B>7ް뮻.+ qQ&Nj }iNp_  8^wfD&"P=F[@׮].Wht$TL6i2"" " "PD/ \11# g[D;Bczf(F/'y䑶va!|K^>yݽn;^}ҋ/ڶvۭ~NA?y _FvKaa/kp bLڄc Ysm|i}ڶZ2xNo|ctS)qL[o]c"<-"gxvx'/#ƻ6ƿޫWp7x84gqFa:,v3Zk9yqIJĊ+h'xb&M1;g5>a={ u|gvqÝ~uQ!˽^8k߾}7o<O2%ՇPsL#t4i1GQc,ׯ_r2CD*TJ7j]R&D@D@D@ +Ӥ AZeRԕ}?yy1/Rx1/{NR,Ǣ pH}Q~@ns/-6p.z*5}ZVmuEow^SVN4gTz{ K=?-Om}21 k_10? T^@}U:[o؏ 2!Pm±jvS"t3fL3!|^}Ճl⭷x2's~SPgx(7C< @%yɳɷ~;8 :|!F {؀0ly;d6|sy3|'vWkF?׭[7_) !nVhՇPO:餌Yo-tWرcC5Znm뮻n\w5~ :^emE@@ިdr۬SNW.M PU@$ zeUJI.}"D.c~gcЋR6:e=,3dB0]pᅙycr&g?˄/݉'1^d`Y޽tI.{6-nKAɋ'B#+̙3m7߄yB6ضK<|cP}ƌڇMwRv&/Ƌzhó4/I^¦E݃>hxI:W^ye71M[).$T/޷X:s3 HH|1}''^x 7d <gyfljywxC=4 my~r 7|^ڱc)xl^/㎸Ȭ>3SחP}ԨQCey秉& `!hl]w  S@"Pm7*zrKNkӶp >~^xzWB&l\-~pרvx f *꥖ù#d,OL^rݕL2w[2]ve3O.fJ+ىDʋ 5p]&}[C^Pw>B3uI=B~.%'.|7k: [oB\1}ILpⵊy_Z?|߆hy`g}<(oqA΋E[mi1yZMڄcz6G &gHq<G} l1{.C&;3j9F=@z54BpDS|mc /_o eĻ8o3Ŕz|BRˡbl- 3Gu#|G=~Seߋ'̷^j^D@D@D@D@D@D0jZvPXcu5ٲsU珬ƳM̤!lWlß{[rg8 y:܆wթ'D@@{E)oI#K^?BW 2U4F$x_U]N>^ E)VBe_z3B"D~wB$KK#T\DH^yA޽{z]j < Q6=z)E1F~xv^*vxFXP,kX]ΝK^rC,qcsYgD\h;,,~dyr\BpdaD&WWBBuI}K_n󟃐xm̘jw%G?#TyAc[49'++b*j냹L@(Or!gut6B<&:쬸RQ1Pc'uwQT_?T Mz RJ+VDlAQ@EP:T M,_A(E ҤW{nv7I=ϳ;wnߔ3hSk)iyIHHHHH'm1ί%L0 xM 77nx)9gDxY @F$@7{ipd-$@$@$@ةO6?i*ѺA K.mZO8K[?~3`rxuM=T$եV3({ڵ#''Vznz>ׯ_ox`|;`j?!>G\?ani^li$@$@$@$@$@$@6ٚ_v6  X~7~ə3d38uKiXHHH%@7<@D.'Ouz$0o4$a+t   o@l ' ackG:*TGl-nςyTGÇӎ@\Æ GSOɿPXs%T2t˗ϧC oz|֯_/}aQLXvpb< s]獎Gu ЪxNȻy^-j'Ǝ5izˤ@Bԃc Nb١ԭ[קK_|!Ol׮BƎGxGߗO>D.by9NLo8nBiwu\s>A)ÇKHnAnݺۄ{Qoi5k֔;w6k2t#PZj&+qguխ"mփ2nCT a=TBD7woQnk ߷J\H[f^wtgw<㘆g -쥗_{J~W^y~>m#O?d#Twƌ1LW^q@:5A-T }N8_.<Ȁs3믿6W<$ K $TGq9yx8VZ2Bk?… uqC_^/ֱ  ꤑ G ڄc^ϯGHHH D{{vR\Bu >   GBuovi?: ݻի[ D@@yrB'y 0ַon(KN{8ޭwaH?nC~[E qgyFv8knFꫲ-pW3nu=g S~!ַZBu704EB5vwu͛~: M|a6܋J9v b\b#/Pi3`X *N88a'r7 xI ڄc^ϯy/X dTv~3%JS5aG$@$@$P.z %/"sc A D!)Alh6_reir]ǻ&Dp0b)°-3x 񿿸|ҤIK7ԁ?)([RK={ѣ&OvW;w|FȎ8laC ۶p7vx]];:ڵkIA_5\ls_ǓU}Rn]:68^={tOj9}o?X]C}6mڿlJd;x?G\o[Jr2ݿX !үx\/(}gvDHGƱ~8agM">?(} o6b7F4 OP }Գ#F q?:msO ?q<ҢECQ;B DZ zf\ @ZW3?ޜyPB=#1sGb6n7@G c`lq, ^a䡑 @z'7{ qަ{-s>A7k1 om0Go-"7KL_M65bo4,X@fϞmV+Ud4]boAohի'͚5ܹsk$p~6'ZN$@HXm:Qh>Եipoԩ#y浛0P3c\V/*Nus=}6kc/$@$@$p~ D״'@hU01t ս&HHH2 ս٥^-uW fv!nj ݈Tn2Vuݿ>_Bضm[h @ !gR1r!B~#Z^ٻwy ݽj'X=MuCꁫz:iNI='= [w2ve>}Ce^7 օk3ߣ}s'g $XI]/![ Ty `" #(Kѥ}c]$@$p<4c y\^z饠Pev~YyIJ oM]W_}%|>l<B(y#:Iiv;8bF$@^hcSyC=d<^pw*;-6mg[.X~;&z~-pvHHh1 7}nb[Je}vRY (Ti:^C1G0Y-1>A Vi9DEƪȱ./Xǫmxm0Y4Z!͋:M$c`b ҥ;h36@Ylm Czv q+VN@/̫` %T7 []'*H Mx,K wa|pŘRr|I$6q(~ ";`t a䣑 @z'1` 2,:!F9o ;x(жGƍ(xj6ltްk{ҥx[c=zn!Enԋr '% })ԱGĸ u=뼙~+Я}[)Z8omR V^%yգzrkp!m1ϞfOIHH Is޸]jQk¬HHH Pݛ]@.UT1"aLTbԘK0B;5u2 _˧~v  8`!y S:<qpFE5eH3mOR/Fc2{>N'$$ȏ?UK)C vi޽{9s̙3u,C CMT H;-Ga]@eUy gI\[ԣ:7aIkG^u  ՑF$@ȁ\lY$B@͝;W{=T|yܹsl&s(K6$M6*M 3梙V>NprGwI lZ/$@$.H2k( _z୚+WtpEIǎ`>iƪ??!8/[#Xy `m7HNM8Z߽ v5 řq% ս&HHH2 ս٥^\E"*IMo1h(E<} {L*Ud2i$.5r5I#F6=xQ 4jVZP&9'(켵kזmۺQ!?Vx%^mi&;*Gu{ȧWHH 0 YMgĩ\>8ܸnHH 5b?p 9L@ !u\l:K0\h$@$ ؂nv{1/EIy]ާO s nݺlѣwo\CN0{L_te׮]X HH ^e{Xȑ#eݺun7F\+a]gٲe2Xm8QS.Tq=}6kc/$@$@$p~ D״O K'uS5aG$@$@$P.z ?ʕ+ !IP]f^- ¯XLм*&.]j:2L2E.\hb0/@= |[ok[laƿ#TDƸqLrC=$/+NׯvKJZxP۰a 8PW%=(  GK1~ S:H;پ}ė,ظy$@gE֯7bLD`"\wnEY"$ sJ ԩã.,؃YuV|5yzܽ{ijX=&H2xj֬) H"%Xf :~3._7,W]u sCF%oˀ{9n`ZU1DptU  8o~K0wXbF-[6 ս̺HHH2& սٯ^F"F ӺW=VtRj*3yaӁ-Zo!իWOZnIIs̑3gxڂƍˢErڵ3a=\KIG8o|j[m""TK2øˇ`@{&믗뮻΄1@Bu<4߫W/l$@$R^e/yPayyQ/^,'NDH+W.,o޼>䮹ZGv5E ڄc^ϯޒ !m^RIqgl)fX ¢$@$@$@$ սa@!#-n 3%Zwj:eAPb+޽{Mt;zjy(x3#ڂnxgB.]a(Sa8:$?9./x.;Lޮ'|01v#k:0p-E!Tt/ H2`x;vY}mٳg@^?x3ƔxLFS=xSG[lP=h8\{:b"*|f͚cŋ?llض\rW0<>0{Ln߾TR?$@$j^e7:i7׾PV E.q`}#%؆-FRӮ[@ Ǽ_KW;%  D 7ČIx<8ugМս̺HHH2 ս٥^Q;l5x4 iLf3f̐~$˗O^z%Td >p@Yb5jkזmjK{?xt^OVn|P=o޼ҫW/ɾ`t:uH6mdܹa CMt+$@$NآN `aKF!t:^D zTO'$H sC/^xĘt\cP^TkLF㾒F$@idamm_\wuI5GrAC%\$"˗Ν;̇HP+OL=Pob0`[c=&*UrwZn-3~O8~c&Nh›  v gy/GFua_U p.-o Z_ ֮U@ Ǽ_KG]%  F 7=q$)^g7c`^Sf}$@$@$@N(TOpB2e!ǟ*L8cYI_.wq {Q*'Il5we]`fOPBuܷoNkeBoFf͚.IPBn>{ Tɞ'lٲ>D2,rgH!&C C<BQ,Q:{uq4 H1皒ٹqLazK\o I꺄gulk,@$@i >tPXߗޔ\t!I=۷owFgNщ8Bu\9+aߎ@2{I$@$@@oxI>Km|LN$^Rf]$@$@$@R(TO~aÆ f ϶Gu4_}h u1 :XC55\{% cPoNQ0Fl3Ե$$$<e"Tym32Tp T'>{zZdai  v^.]Zr:osU(TO r%r˵uKqR0oɖ5ݼ_Z|WOkW,^"R?O3ٱsQټ|t,swW/,%ͰcYqv< \QrCu',[K~_?$@$@$ P.z BuLBT& IÔ@tϟ)G_Je N_fM\qr뭷^3g̜9]%KV)͏u؂n{c   l6{2o<B[vM+mK8O. ,(={tۥBu$b{V[nq=J=m֬Y$Ƒ @%.7IMRq y<0!%:pCבa,Kֵ=,5ac<4MRB?!nEPFNU`Ǔ/zlq?84 9%0C>,y7ə3< ´GH4kE$@K.5GIxH«Gܶm <>lp]PN{5_ґ޴iSiٲ%|.긗8#`m\!н{w3&`I Ցg̘1z1108 c:{^83%Pvzb_pX \7om[s=Q.fɕ+]Zhy=v5J$@$@@ox BuhObw\V1{r7v,q\EԫZ0dck6W&,]{WTyMuG~AkOӐ_F;ly%=sHa]7=O Ć qz#NI!Wu<4 Hoz)~M6RN1@IDAT;M ڷoexM߷o([nmɁgO>Bu QѣeϞΛMm$ {kҤvmv @x=(eNuS> *ZjG#_JY)-]S hy=v8;L$@$@@oxcN,i#39 ~e/Ly]iM#{2)xQv;ffoug.̫뇏cov< յܜedߜI3Bu% &@zh>z=瘠pDE&%~!nqj+WLBux1bDM >^˖-k&=Yd|Wf"ֿ27n,~2d_ģVVhQ|q& dČ8c޿wi:Mޮ>}&q`8ƞywի?l5|6mY=#®d~ h$@$Zo:mVA([8,pE]HǺ ю^]XUvZ "%QڶGuy, il5OO)_9u5umA:0w0͋\YyѾm"E$@@ΝMoqׯyD?qTqlݺu˺z qaZK SNYusG}dVk?367o\+f'=&/_>y饗0aKA~^h$@$^e}5'YyF}#7͛׈1/rGPnۋSPi׮C ڄc^ϯ=͞ #m^S Փ!hJr}IrAD}a)^06|y.#֗\9_X3Mea2d=~.=~Jv;3R(/# YՍLP}keD[ $@$@$(Tf'{=f#Ćg* c D5&@L&"we֑Qm߾l;^ q& On~/cHH :[e#NúT9l!(DB::G,  -.P?bi(}C~P Zu^j0O<}y%:8UxOW=p!_a!{6A^ @=ю;d֭f}$ez1gmٲEvmqqqRP!he;O  HM8ZF:-$@$@$pD'Nd&Sp1ֳ v#bvOP}?ELV/,TQd>/$o[P}ޣPn_ @TPݛ@UU]%LP"7xц@74   sOyB 87⑮]ͣe}W:Ĭzz΋t[xeA|XjڎGȯX}q/畞X꺞X!  u/4/ҐD(t=Cj&_$@$@$@$@$@$@6ضm׾@ȏ+vʍ [.U|c7.7T[r?t\ڼN  IBxN<Bu4>lRQ$zR7$E$@$@珀]l!E<rMG*DPNh>mK2 Ѿ-,G=ȯ(屮y~]#'矞W狮# f0=?qنx=a,9ieuv# v6&     @ w{5 @#m^qKIǣz\\cP=J c]/c?Y鮇hZ,U_HSѪGRCh-gףzyMZ(0 XC*ȣui9]} M85!H$@$@x$N,Ŋ9sңzrfm&dK#g!_-ڔ\$jj;*2WW,g,_iLIrv7_>w6ϝ&#tzaɗ;G&nPM$IHH Pݛ]ʁ4o8  TKJ!qj%Ħr(\BaT|nVNkԃ~OE(F9 Y=6huk=zWHWxHazxB9|`zΛ~ 5&Y;X1 %mAA2aҤIFxT7`TVem۶ NTQ3EgRBiöiw=P_$?t n7PMt@v=PE $@zH}a<k7ɣ+k1KDd% D սH#k!  h (ğ;  ťZOŤHz:>HW|Hh 8 HWQE֫e>AߋsK?,A^)ލ A З M$@$@JyÑ @(D*U*B|XװVīw>ey5ο} '=p;?A 8o|k_\HHHHHH6HHH~lӚESʒ-kslFyg_rTNY䩻I*/nQyߒgwv%_nѽˣ &NRaHHBP=$96*f$  @QFUH (*&Wa84;qu! Gպ6}TxmO:P6P>kZ'|J?e矞kzcݎù|0ԅ0m %m1ί㍭ D'hz/O2Eʔ)c G0 +[ԩ\Й-9 跆ꕐK|XՕɬ9˷LGd.ڕ 郦*sGZ\AՉ;L\ygwjekeա0HH2$ ս٭H#k!  h' kĤ*,ELEHSq9ⱮyQ*n e͚Ք8ͫh\ȇ<? =xE~zy}^"N˨]+K      sO ڄc_;[$  hz'$$Hҥ%GfnBΗ+,'CGNȞdͦrxTWH0FbgY2ރdòy硔Tü$@$@$@g@7Y `BR,񱅧Ñn h:~"Vջ^2*7O??cJ=p~>uyN#     8M8̱$@$@G 7ӦMx1s{M d8{K9 GB$@$@$H@đޏU|j3UQRU8 # aemC><##} ??z',wv?=wczaiG aIHHHHH/hq~olHH : D{yԩF+WDQ΀{w {j ۶mnpB J1+ ={Öipd-$@$@$@ biQ@UQƺ Ut|>[xGuj~v>뱠NJk<}B#     H{M8w G$@$@@oxGQdɒ8LP5eG$@$@$P@7Y @hPC 5]Q =PSzeּl8f~90$@$@$@$@$@$@i@ 8AHH  hBBř39{M d({;9 GB$@$@$:'O4tQU<m!SOXE*\z4]P-zza' ? '<2]+KՄHHHHHH'hq~|mlHH Z Dyԩ/clBu >   GBuovmۼ D%… GvSUK$@$FPَPL2)T'K D ս{Ñ @P=Z<HHX3NK>}t)QHlQ=^n "@Wd{U!           JգjQ=v77HH P=;ԩS2m4)]gʔBdI   h!@W{BuH           NG~V #@zd!TWYfP=2,M$@$@$ (Tj/SIC$@$@$@$@$@$@$@$@$@$@$@IBj  8w(TuBB+WNe&GƒIHH^h ս"zHHHHHHHHHHHH : P[M$@$@g})1c*UJBԳdI   ("@W;BuH           NG~V #@zdM&#2eL9Yޖ޶mo+fm$@$@$@$J\b'A            P=HHH (TOE IPDgb)TO=O$  {)T$!           $@ztwn5 ;G:!!Aʖ-+9s4QO&  {)T$!           $@ztwn5 'w^ɜ9ʕ+x& @ PXB^ti1g @b (TiDP=z,K$@$@$@$@$@$@$@$@$@$@$@$@zZ:VQVWEkǏ#GOlllzg.YfMψ#gɀ$SLҳgOi֬YA xNB#=uꔼ{RdIGyU.Ȟ͓K2{ue˖Mʔ)#+VMJeB&Ю];Yb:uСC3sH  #|zF  x퍘n2g]i^D}7ҫW/MNw5;wE1cH h?#hoi2P3 *]}ڴi2bS즛nT^{$a mpXxx !,X!ާ dd-vKQ%..N@|Y @$@W;5 W-            LBwϷP>}O?$Më-R裏dUT1`BH9xG{-T_ptă D*ʕ+]Oe˖w}b oѣfl1P=ؿϰ   D #xXTR#YdGp4 @4PݫLW$Y D' ~wdӶq2G%g ꛷햻!*5OFw (T-B Y?zHxի\kvEHG{ A!P/2Ejz-Z$O=YGm۶nHoڴ_x!w0eF{ 7txx<>DBuxp8qѢE ٱcKn !k`BH9`?_}<ꪫoUzn#I; #xȩL2!x,_dUz[B0oy6   $r5}zjl|X6l ~&-[lsw5ܼ+CJrdҤ3/3g4y!.Q[.T`r뭷,իWQF4 yɒ%KX\ Tzj`ݻݸ?\rm\!(Tl?zxGƓIHH^#T?{9~TRZU+7nժ2}7Rb~{4WvHH= 5ɳ~gLuG9sf5A͊c4WHVɑ]& ׺ȍ ':7oܹ;.amVD=A˥C&駟@n ޵k|&RJ2v@قm#zҔ")Q0ge!2f%[2o!      tO`̘e˖+8h_dڕ ܬ <*ǎw_^']Ƨ@6/ɟc6z3RVMHH w?A.WLt>+O6ov/eҠQAJ87߸kڶmkIΕMP~Q#coڴx_jr#<hx[&πaÆI'矻wǎ뼡O1ĩYfҧO/Xy뭷/)O={4"i$ ;v̔㏍t?P d 4x_%۷7/^ܹV6D+W4q7nXT"۷o ʒ%KBuo6i= n 9"@9Pbu#RA.al^+%DлwX5j+nݺɂ px47D(C]M6:uܹsݾ3ƈ\M˲ej&#M6vZQbŌxA޻wo7M45jǏ#<3r-~Dl Fl" yxjW,7?:~WoU~pA?'y=zU][H1/(_/SJ-ço~|B W-Z$<'"E|aB*d2՘DC^kxYxn&>!}P*˵ (@ P(@ P 9 >s$ <8\\sp.8v,J(,<|!}dZN>"}-A8<=AAE~EG_U! pult\|J[ܟSdq?!Iaal(@ O}Z bYeuBL9ސxhhTuh۶-mUY"C{͛xsNtE_z%̙3G5[ ƍ3Bׯ}bz_|QҾcǎj즡{OV!uoooo^ T6mRךXjժZ\]ߏTa„ ;wyk 6 pFr /+6ˇCC (@ ؁Fdcw"l[P7J?U!E=RDH[o+rbWF*E31&6 o@brg.bش8-^--B|1SUek}g<֞D8Sx^]}"X.a]H]C(C(5aˁh V X,pMOLʀp }JX*(/PLqIv?h\;o>Ci/Oe&9DaO \AM^XS(@ Pr"]9ط(2!RD(15ov+WnIW/ .# Sf\]P}߾cE߽fU<ʕKgN|/Ӫ#ڴi$B?/ ~yyM헆*aTP&,鿊vÚ5]ϙ[7nV܈dulG ;AU~~^X֣WG1Y1&Q7f]Ln.)ߖ7g|~U]puU~ѪׂJ|oY k}k!A/^5ZP=1)V Ļ/U+ĦFsW͵Ο(@ P(@ d^o -gDKVׂ2[ЪUVAwdT;w7,?)>CDD 4YYW2,2|ni)ZLY][d|⺋,*fGaϞ#1MWPZ&UI~i?S'' ?\?ּWغzxJUؖ!3g6d\pW\Q` d\έXb(\8PSN>2-/CEcȊ/^T} a^|ׯ҂%KpOѠ7n܀ {*TH]sO Ҏ}'^s`:pSԃOP@V#߫6ʦɊ{^ɊƹH(@  us ?;.oAJa~QRw!O7a￶S(*LWE ϗqvF5Di Ӡ 0aYr֮! "eQ>" ahp]r~ſg0qq*S>%5U̵E_*Y!mAu_*FZL"v5ᕦi2C,nhDZ ًu.h]@8G!qlٯWmyxPmS8Ǭ@nǖ8^.WW&pqvTssm B P(@ Pȅ 5h Gt>/FrzcOPe5?/9iULr~~x6xrjV˗#N.WU }/@MCYM\TU;uӧ/IիE:LEUA?\2^gppQQLY~ș+ "_ZYйo.d $.VbxoErG PjU~ժM*v?=DO5R@~`P=?ݍ4ѣGCy- u܍OS>WR +;.]GGG_Ɯy PF 0nfp(VT͓)@ PՍ[~ׯbJƨL?.^i%ғhd~-Dޢeh.UgT_iL9헣r@^58ET9Oԏ?s5,~Ay߸z3=t`ԥdI}\/>{1^?V NNbʲz߫UԶ03J3(2xg܊O^.}_Lz~b,b:#czKA?ҿOcG8~>-*úP!~mИyfymxPeCNM P(@ P@.;xZfG=7;O}E/(@ %z%3ħC=Ġz=9(@;`PݨmlP[uBFO? .Nnz-AuO|(Z>_=Q+J&Ϩ"MeNaVEX:O+Wz›ϕW|]oV&CVӷJRr*z݄ӗ?B{( ьAo߯=cȪ?Y/Bi+,>g s˰Q=/e!<TWeIoKHF!E^KtnVk' P(@ PN`'kbDxԽi~*"Wy~FZO_SO6mu]w`ٲ Z_kA`߾c]"=ku?\ƽ^gu0bD1|Æo >cGfk};!".L skd: )/2e{BB4y7n2.AP@>`P=ޘ|9^za۶mܜ0d>2?b=ngxXSg;(@ zRJJ ϘP9ɑ(@ ؉Fhcǘ՟ޏFq\Z0X}B? &M.#z?mŴ2ypO|^+c[VPm7U]".;Uӿ~xUe[ٲ5*Z~J1|о˵ (@ P(@ P Z;U]cbn0ati=SnTN8P5  Z50mu]w/^KWtTOLLBzը [[xqiaQ޴w@@`P@ܦ|2I-.?&$$.jL|2|;˗/cĉؽ{7N>*.\X|ZP9^ڴioωQȫyK'!&gggmh PAAuAf'J%de񈾚>Q/^J/J)2-`e [VT_9-METb_ Ii^oJf2֤V'*k_ *fT ߡ2UNgT7 佯Щj}2kW V+f:T_o~šBz&]Dz0e!ӦlCywssm(@ P(@ P𷥠 ذadPb-ޯ_㙆;w͛U/KPbpL`fgQk9sKK}<G@VVQU_'')9m?Zdr)1ku'1eam@ʜUG1c&Z=V]n"b9Y zUyٞ۠zD o|fM8h#["C-g/߂ D5"9 1q(@ PSD1"+^XvuBZ ː {jKŊڪ}G!;w ˪?^UWUgۻXnMQN|(0i?~dEuI..?3ڙ;(PT/p(@ 0~RRR0cLB:2wK(@ K'`˩_Vd 4-Y7r'z66tyPCI?$nswPS֟["ղ⃂T֘M8yᦺƵۦ3j].ܳ |#N_,.rlj7k&GQBa|ԩ*<Oҷѳb_nV-)vߍޣW1tP.7 C2*.w _S} שXQǯʹfuѣU95^v|1/ݦdVTN)@ P(@ PVkAӦ-WеkKNΗu͂TO@=^k7h]^ФI_ZuTQȑ3|g*eFƍի1 ga(@ ϽL(@ P3f 88HŶC;A{awJ$H P([[k}i֖7}N ݱù-O,(󠺜QH |U6LBrش/+zǐnjA]!Ei6]KDtmyQ:4)Sb昍Z>Cz[x5}܂q;>s#zTX}pjQ. c'$~)+G6®W0xNgUQJQu6+E>?;} )H * O`PT(@ P(p'۷egʻeh5T׮^wrL\Ђ*|ǎCU\ &WM/xXի':(@ P 0OnA PoTӧ#dIxyy1KϔT $aѴPx5+Hw={PyH ? (n3ף[]j3k3jh|x7Z'm>+z{Z~>>-AuK*yi36dd栺 fqM°Iel\ٿ`կLD#IT3]kW V+_nwQ" \Y{}Ύ߫UPL{;c*HuR#Jx_nAmR =- ?oW\1eWw#xID.?GC2<3`WYeᏩV¿ܝ1ClhӾq)Q=Әnۼ~ItkYVAu?(@ P(@ P hAU`v__/,]<=^d5>kwT:4KS1xkhܼx.s(V|[ЂZ[oMׯ6mZ8|VڄEV}u P@`P=N(p 0n pxꢤ:+sOfJ(}^6k3r_/4-Nu"P[T\mӽg|~^M As[[:TflP񧖃rfOtĐi#.Nk VP]^{ŃU}<\psdT/S}?d QCxIV8ib*E0QP/FPY\)$r2ddiP]>:fAr!prrebKҿ(I,ɠ(@ P(@ -1>~B̘:cƵ^̙+y~}69~l4:wKwDNϠNJ(Q0=)SbδBQݺDue3]%ԨQklgP(Tg7ӡ(@ w vKeP=44"Ƞzn9/\?U0; Xia9,[.ӏ׷m4|0I ͠ fv1Wbn][<W׷bk̠%Tj]GAzشWƱsP^; l!*sw][6fTetYU|KrҬ^^.=Gqoӎ(Y4-AuyG؃]Nk71 =Aux-B7n%ǔۻr_Mbzg"x]EOߴ>;]Svwzۦ+hasABZ21lVCxۇ5;ΫmQ}'ʦ}0|n6Y=:|Eþc6NmG}ڴ1|(@ P(@ FCOTtYI{fCeO>]#!!S\Ѿ}ct>C٦Ư\꣎3`@G<\Ccʍ YwUA]в#Xjjɹ޺W_m^7ݥ5NYxCVVij@\gܹh5vNr2`w"Jaaӧ/ܰnD='̩|ԩ H +…yF _ (@ P 0gB P?TF!8zn8}f/8$uo"LVY7JWHXsu={ {k]tݪQ.LmW!\,UTOHL3iէH a%6F5fCdwWTUٱA([20C񃽽G![9| t`PæUcr 2mRInƪe0VXfQL}Mu~VT WM_zIT\>ˆJa~KW2 Bc`0ۿ1 Do{͓Xv!^ۺlgWS;y+q5&NWի.< r"T,?0'e˸\pR+Ύsx^ !*Yb-wI"Ŀ]IIxP<<%?U䝯nPYtewD8k6}RgM{} [g:`L?u1.e|bz:f5nzg)@ P(@ P(pn܈3ϼx)3e ϙ cƤwT%=O((@ P0n9mBBBŊ깡_6YT}MVÞz:6}X}LT:ѪQދDB>L ..fݣŠVh*T zhGmTpuU̓ZP}΃"BeQyP@#gzkj@R:Ҫ{՘>/45@g|1.R{Llz>^j|n(*e :IsȠzrŸ(-sĘEtxE^'E|b@.(@ P(@ P(ƌ9s~SD*QBu8p\i\4_'H P(=u^3(@ Pn 0n (c7CO@2d^!'GN*vQTIluEUG>ObxBs#-ʥJhظ\ӆcLvfaz}W(@ ةQܒʸ-kCo\b?`Ӣڴ3M=418R4E$?\NhV* s~l;xtL궎7;p.7T%)DUV_lhWJyY\RQpuDP[ԝE P(@ P(@ / hjXeK}Gt_.A P-QݐսYQ=7'-ⲒAEx މI?נvY˴Mm ok+28lF\uWO_Amg0O;j+7gl@ ,զ33I>NeUEc܂5:UQ P./_GӐ*g}+ u^v?v]Pc{Ca?oOrr 'fTu~<04C gIIu@\#bħ8AmOnQVMws<\*>yFVROo P(@ P(@ X]Pƍp?-_>T? uVG r(p 0~`^(@ P 0[ 9kɊ9>yri.}UP}H֨V&Tz}닙8)*E~Z7 /d]Vb7]ܺқ׮7{Bmg W+!z%!1 +*&]>^bT) 36(@ \ymahV:ߡWX"r[>ݯp]iC[-E+B D="]4nxyXaP=hTN!))Zګ֞WGGL s(@ P(@ P(@ Pȏ ǻ9Q'm3fPAu/QQ=%%"˚M 1Ӛz};8s=ʬ=ȷ<g֖׍Π At(+o?t\Q{C]IC"`k154nx}"yXaP=h٠S(@ P(@ P(@ P>`P> P@`Pݶ2cLUQj$+gyR33^kǠA0|ܥO[1Sl=1r2+mf;zrl}HmPaRNd$Rr)T czUMP]A6_[k)"d@ POi d3_gO7 u,\1HLܡ /]Q/`t^5^8q>R}*DN-vnAʹk8 ƽGnZ h PZNWqjY =zZOËOV +6y#LW:o}iP:֟Auk2l(@ P(@ P(@ Pȉ9Qb P.zȩ ;TSƻą+^n2qym=mfmlAgU2=|/rU-;4=u_mٜ_~AXj뚿lۦssKNDWo(Q\g/q2K6W(@ P k;TN/Ң~utmƉ@#}_UVn܃o~C[wFI&Au[ǫiH@ P(@ P(@ P( ,K.ȮiE 9i P@`Pݶ7mtHNNfE8?~]2bKezBh Vu\֙z7RmYuv̼t-=<[aHtŋP2C%Z[#g-ʄ 9%kw*-_iEfNkwDy+CO6OB PY ɠH$|BuK 6?vz-*a@׻_Sm..\<R,@/ziPA z,aP" )@ P(@ P(@ Pr(z؍(@< 0Gf̘AA#+g⿰@UOIVt*z ؠ'/AuyLy쌋+unj-Au?rJ~4.NNptp@|RYOOrTOHLBSs+NI Y]>Qj.P\W PF r8}{yote6#}5&OAJj :e9u֏5;W RAEŧq[Ǜ< +ˮ﫲Ɲ(@ P(@ P(@ P(E6R(`QFN*;ŶC;:Si{K] kG+ y{Znk;40EwZǐbq JHPM}Oy6DY,m ș hVlONrП[aO!!CbCzF*ԟq)@ Pڣ3h'|^ "ڋby@[ۆ֩mF&):t2OILJF qy<'=vZTuœ1?Ty (@ P(@ P(@ P@>{nJB(@ PABY&aaaekխ@:yM?o[Z9xޟ0_e:FV+*?v"-2dzF*}=F5?T!;ԺqX.e_gG',Z+T/BTRnfǐrZtwӬ ZCZ"~>Uq{C'^vƕ158t kEbW)5r!p-RgG7h]<0; D|n1wix6\rML]vVڵx 'enшbEP```.Fkf3(@ P(@ P(@ P  [bPݒ (@ Py`P=onڨ ;T`֫Z~e$#קq9 quȀ|JJ*|PDey#Y-^Vz#.(Y̟ԍ(@ c#/_7%Wu|nNƠznˠzV:G P(@ P(@ P(ꖄT6 P@Tϛ6j.Y*s̊ _)@ Pխ亙A\q(@ P(@ P(@ P&*:W(@ P6 0n4T(Šqr4(@ P QwAu$y P(@ P(@ P(` [ [Ra(@ P o M%+ RSST`J P 0nM& V)@ P(@ P(@ PLT7T$J P]Au FF"vP]ASm;3֓G(@ Pv?0 %P(@ P(@ P(@`P}gPݒ (@ Py`P=onڨizp0YQ]C+(@ PJAtrAh/(@ P(@ P(@ P@F3m-(7榍6 YQ]+(@ P"\73k2(@ P(@ P(@ P0`PC_eP] (@ Pf-`m1s&0n_d Pr'zg;(@ P(@ P(@ P j}/_cP P ?%%g@Xh(EPAsr$(@ P"~e>.G P(@ P(@ P(`~AuUR`P6ydɒ3qr4(@ P ~e7<(@ P(@ P(@ P [pL=evA세(s{{s={6J. 033(@ P1nq4(@ P(@ P(@ Pw{ iנzJj*)x <=_ʮNbppp@'jY PFZ` tdPH](@V@bmh P(@ P(@ P(`~O}A+/v)7_BXV|?Q"zj?XnNq(p/CHH<<<ib1$O{ -K P|b&8((@ P(@ P(@ P^-82}1}T$Ք[yTJ(BFePdɒVfPHa(@R@2nGS(@ P(@ P(@{{ ܸSѧ>'GGtAuS S@AFߗٳgTRTfPha(@N@Zmh P(@ P(@ P(`~O}[AçΛM_gPBY&W P(H~{#xAuy< P;@ vkT͏)@ P(@ P(@ P [pL=evn\VSyj90SRPbiۮ)2n(#E7Xp!BCC!T7RǢ(@ P~ĠmAu8(@ P(@ P(@ ػǴSfwFP}5[Twlcpvr~i g"a(@ {{a-3g VT7ǣ(@ P~ĠmAu8(@ P(@ P(@ ػǴSfwtP=55=k7P_ : WukOծi g"a(@ {{a-7oAjIl9A0[9(@#MՍqQ(@ P(@ P(@ P [pL=evN9!K4Z?V힬DtD )d&H@ P@o}KdEPx{{Ѹ<(@ P >HgeP6?(@ P(@ P(@ P.`o1;TX!XZ`6>ާ=J)d6U8A PDo}[Νphn0G P}'Aun-q4(@ P(@ P(@ Pw-d/);TӻDx ,zI֨c5k~Zx:> 7(@ P oٳVT7ǣ(@ P~ĠmAu8(@ P(@ P(@ ػǴSfwdP}l`P@IDAT(|w5V ԧB1P&^M(J PHoykRSS`+Սp(@ !m (@ P(@ P(@ P-8CT_zKDQH7]ڶ_K+TַYQ] (@  {{a? {{{#%%"jIl9^N`r(@ Py`P=/jcTO(@ P(@ P(@ P@-8՝}=o|6=7a \(@$`o75fBxx8dP!}<(@ Pȓjy1Sp(@ P(@ P(@ P AkaΪ;@xUܿ3\6_)@ P VQˋAuqy< POՍ ȣP(@ P(@ P(@{ؽ?/^#&} ^flخz)̟?AAAbEuqy< POՍ ȣP(@ P(@ P(@{ؽ G8&U*/5K쥫3nW1<_k$x0;I*xE8؄E7mL ~ޞ>P0ZVT aPhX(@WAuc-8((@ P(@ P(@ P^-8v(@ H{{a]3g"""TP=)) b1$O{xޖp,(@ P0LAuc(TPҥK8y$bbb :88joooDg"Er5>tOLB^t/S'Xn;zF⡹:̠5}/l[E8底gnv)j ͼ3d )vh\-nqY`Nʖ ijTш{ą2(@ P(@ P[pAu+_l(@ A{{a4 ///2n0G P}'1͛Q|yȏ Auӊ깝VQ]oݺ(ڈ:q4mѯZjFN3M 6 wx-5?~!V/Ƶ+xd}#Xy٧'{{a[mf66?nX ;Owޭ5"J4嬂:`  )<(@ P(@ P2[pA _ܤ(@ {{a4ٳUP[Auy< P;ՍFշoߎʕ+U;Z|S '$$`Ϟ=Q1nQM_]GNGՄGt%mr%YT$gomqЉvj)B!N0gp.tp1T-758.\$z!\P5ܻ7cչcl-Ck8MUe~6T.8]a_߼_4~U>n9_~<$ \͎>r}\4ߊOP940a jq5&V6\rE y1EX~iߤ;Zs4ƍ8#ק-nm'㚸rJ(GuYQͭzxkjuɿ,6;WFfmrc={Ryشi=4ﳥ{<6ndT&m)[ y{jEHbV&A 6.ADM[lI$&%c/k!N7Z7R~F9=tOLO/g.^Uph!Ӯ\(@ P(@ Pn [pAu~S0Zxܹ Ѻ<(@ PVwFJ,*j2nKP]9NUʓDy޽R1nQdg"EU[mzJifWnĊ?I{xVEor\sc΃_z^YRix`rQ=I3.*DarmkPmT(8V]MgGG--s5`s7&+iMu=l6sZe妽:iXf!V`uX3JcR}^xEt(,^l8gGML*[ED+Yk+@s>Gu…ZG噾VѺ!j 4;u]S{OZ+8;m+ ħ z<Ѿql-.d͊޲\՗a!~l k׷wcΪfe{1~S|jџtlR.|Y.T?J?XxP}ß8ZڴveҴF\(@ P(@ P(@t{ 1~F P[~hWTȊF x(@ w sK۷+V46s;cR7;ǹWmއKyl(uV˟%.JQ2{=6>dE;`hVsiSu*زzq^[2حS3A?yYD b_Y_ a\#4VNjkP]~-BгZD~+PTzy+iѬ}WC&~~- D13{{JM97A^iPY~]E< ڄ<ħ3ά.ӯi9OEY~zE~]9vױCy;9< rU-784<Wxf\o-.Fnv?ysYZ*ap疖v(@ P(@ Pv+Au{ӼN PO~H{{dɒc0n0E P})1AugKީжQ-}sxB}WBj;cU6sْ"BDzʾWU_= P.䍽G`3PVՄU;ZY1 ^/ZlZY(C2*+8t,$ڬNtj ȥKxˆ:yެj4妨!AK @5 ][VזO[./^;_/C~C> u~2=N~˱~-*?o!/9sb8g DmT-o NTS^g.]E!.!Q;x0ŽNPpor}cƊyvA} U|/Qԫ&ku8:8*SsuF|h\(@ P(@ P [pAu;"%S=F<Ƽy$F X(@ ܗ s[߿<ۘ+7(wQb)}JRr :^~QW5c5c:V<jh wn<2WV.м,e{HVrwU?BJ"%E<v3k<&+e(u?2Q[.3Ǿ"\Ae>T\DmWdV U [8nذ簶Z֯U?UGKV%_f_r9 r]#y@2q{-vl5?W;-Bv[}ʂ[ퟪgmwsƠ:Wn܋߶կC~*W'T_~fW?fq?=T bDEum.1M}iio'i/RbiSn CriV H 띸B P(@ P(@;vK(@{&`o7AuȒ0n0G P}'1Au?{EՅFzBFҔ߆QAi6PD T ( (Ҥ @H#4{nmrw6ɚotUuIo(+V+4u]nemmrUnU*|{?pQq L~CS\ٸxn|C3آNC "BNC7c*Dzv`r^y{!Zm_bճ>x<\زV_Chmz](:93',ޠv}K[j}ڳ~ȹ(υd0i:n 2aye˰+uՕ1{, ~*xCqX (%-MKN_N]Gf9KVn~s K9+ZR~>7OUJ~eu}‚E ZXP=-#C\ L٥|;S_q@ @ -`i1~`- @$,-,YB+W&[[[BPԺ RAu\VՍwfuQ>Cy!q\5}ge R?ޫvMUuȊޟUY-V Y"LjW_̩7ј ) 9ޫ˥iKr /s4X\_z>P]Vff7s贲(ٝesc+|Sv*cESGT $*Щˑt+1Sg.TWs~υu;ӏS~ԤVl}kE Aum]9&~9g:-Wi۔y%&_./vpVn_YZSF5岹~?TmZ)爿W9Q忚A稟Pɷ G܈E>v-cUqB栗?b @@I ڵ>wK/;S`l +п:~<(D^{߼y398)yu(mK Ҿ~? @A&˗/#2#9٥Lb|dOT1G@7@ ܽEW/SzVv\[+[$»9!F)#^|;mOS!M [RP]?@Xj̹+k+7:Z[_'Qɡ,yшWW~CtiGb^Z~u=FՃ(wPK~}J`bfK):x&2MyMMkU!;M\qIXS7;AsmUvGt^s{? s^K{Kw3Ti{ZE[OU0炂0N|z@~A[Nb0ehs $>]τ $$і'Cg(:.A=&팽(Oz?燶 !@ ` hѢEӲeKz l p͛GW\w9r$*+ Lڃ|q %`i7LʑtWXeT7%1Ƃ 3kh՜ʤ|4ӓ:={GP4HĠX` qRN;.:W:-Z4oQzuC̘`뎣hԆڊ %5Ϡunـz7+]'Ϋ' x*T+=j߼F3O^j=sq1BJ7Qj\#+Bd٫Q4_aSGD23m_HN5pCƜ1A>/9ߴ?\}އZ3炂|౉4lJʹzf WFgXAg?oQוfP]=1u+\}/ޓunLy"9!@ @ `3kC lɒ%TR%rtt}T7lnU:v>\Y;+ңփy"8j@0H l5>8ͻ :O6VJ:bȂy}fAuV z#Vn4q *O:pRgA/lΓ1q cQ&meoe?^IiٟPA+3Ϡq/&mC[kRuj\6A]۪}GWӅk7uڠ:36G1[]ƼN^02}STREzm<5ભ[nZH }m|ql|tD圝s#n?SJZCF1Ax2/Ȱm\O\\.CehƐ1q)y~ny-O[2221UPzt-&Y^PAV-;-̹ܰT5漌 1yؙYY4j/t!2qCvEXzls_'˗E9!Au>t/xA!nOJnrryI}O)$#LWמlNO߭=k_`k8 O~Err(n26G_S%QTv.JSfBN`~UĀTjc;99ӵ=]e^s~.qqmfn6\ -ave!w[&VN֭XQ'%&ҍD2cʠ:?\zS scؠzI[x-Y]?]{k6!OthJϵxDg~?T(F\CqJ}=(9~oDPob&ډ 7g<-otާ1p;owWCYƄK:?g~p @ @E XZpY'@0P^obp0 AuGG,QNI<FEEA}|MX:doK?xʹmG%AŰT~ճwRgߎUcF47^z^*E_g?8qB9w`ʻ0s qXCj*IާYVrA{ _~ʻ76ʃx^'Xw{թT;qmNrvutD^Y-{T]oܡ"}JNv2n<IspKrn:UMT]w?زWKOpР1elPKq8-eP\R*G^zwm\mР:Х7i2٦(AucK@T׿9F/؊^I>(:\oH!O9MsVn^TS+Z@ @ d XZpy@@zpXh+92 T׿Qi:r.Nݠn5}oߧ'hϠ3uμ }3(Tg]Q ?EP=/3Ҹy*U֤At:sYӆ]G 4sCk3ꑽ]O;8r*]2}ԤV3G/\/jtm*鵉S:9\H@Ѿ1xl+[yz!Uhs~z\o/G>~#W󹝸|MgW+oP5@ۣT!s۴yT eǛi_uLmWruͶe)x/Du*QZ:pM ģR=?*֨ueS<=@;B)~8 RiO?QVVW0Sd 8O|Ƥs?oTCyQHJ$$:QICsU6PoP-HTQOk25q^0gT;CStoP7vEv&"xeNϷVmLǎcLNnrsR|RGNN!EGGg sihE#^;q1>}@DɻTY羣^  @DB8ޤ;ȋ9_#;+ZIKyԲ͗h웲Fwv;?;"~wޒwDjO"ov!mP:qA"ӼTVOIɾАrJUuTRWP@f/>Z^{9޻@ @ J5c/*/Onnna vR\Rv7 TYxfi_uO6B)R3 pn$EݓMM>N>\TN_vrG֥ԾLG"ނ~|?&SLz}Nu6nlub ^ <8< @ @ @0sK k۷oUVɪ=EڴiC;w6i's^(hVm7]233՞SLuuf X0%^㏲  s\隨˚{*=ۼl"C%z]2SHuY EǥVsev:K;.󌕸 JE!u+Sdc{,:@%"_wQ\QD{CYWƞ]Ec t5 (GJ!'c-t>c+n5P_uiN}ٿ oF>6w6nl>:zQno.H @ @ @,-8f/O ҥK?AժUidkkb&MpT0a<!H/'s *!HdK{ak`YO@PamP+M~Nn?M3~>Mw26OX|ON_Sq]lhHS|+uYRZFlDT>1iL߽XnڄWѺW+l}hzɄzP@> 7v!Cծ*K4b6+":!4n@j T֚V1&?#iW3-.< @ @ @K k7n gddgj׮M}!;;;g޽{iŊ&ٓ6mӦ W.~Ν0:Onnnm\\\FP]2  `zԗ{=DTAy +#rqAYUgmWhʲkRۆv?/Ҋ.)kqMOzmjާ0̻'RfVve~.͠P9VaA_gF:pՃ3ߔEYفyvo.`=&@(}O7f'ÇȻ\v3xcrB2yհ6nle<"^}Jik @ @ @$K k DE yzzATGk:q͚5Kn UT W3k׮Pyyyɠ~cRs@~ƌE|G)ؐ~٦Hwʪd%BrMgffy{{~B0oߖg/y7q5zey>׋/RBB6y^JOO'7OXm\Tn] .]JGT X0^p!kĿWQQaC{O؅GѸj6Qm}Ҳ[Q*ʌ~|;T 5i7EL͸RO$zwe( I'mRˋN_N;Mi@jjfR2D:~1No4[0sѽ[R @dP=]|kcwPRj5箋ο+!Խ}\ڸ;B =Ivڠz1 @ @ @J5@s0CC 2r5OC@ijZ-Zs=X{~!q)CGԯ]npecrcǎ]SYnQեU<(3.m=E߭Y9j\k~ N64ePcz7]ɮ^ƚ&ـ*gdN/wc+L'.7  w ;BOsFT- 5(9yS͆TCT_O}rڈWJauH|ՍYGՋOi!-`  @ @ @&`i|n\R>E7oN=z(ӅG90ΕӫT"C޺u+%%%ɱGE>>>r\a\6lyΕيoߞj׮-?N7o'簽~KWd -[Rpp0]~ۧV;_Aus޼yt*U7oҡC+󾽼d[mPWp{*WLNNN-Yl"ۗի'/A!6% X S_[zaڠzami{E:H9Dw2uu˭,Mفq$sڗg8tn%^\Y߽}0|"D]_P#g spOpZ: +t9*'xz3 Pzaݏ$w >uPqӨϸ8*O=im=MgW_٥l7g+nӵ,iX*9 66[GՋ*wCZG @ @ @J 6ƍӣ[n2H]ٳgq7nLM׬OݩE:4i tܹsհx׮]M6:m8vZN?u͘1CC}(9cr jW^J6 :RvZp!߿_j۶-qtAus5km/shh(K6mDׯ  : \@P@(4,F^o @'k^pQꍪ.=kkc)-#KZgNV.XQg=WN12FEj5Dչ͸;Խ*^ NΠ/S9Fq˵f -MB}zO鱐'3 _Nb`z97E5.WGINd+nzJGl0mWu?6oVZj{eGA,OڠΝ;ir}޽aE>?TY-}6 $믿U?~xj4qD/+gBP8j<zגoX' ^˟oۚ ~TIV XVGѲҊ+sC!jG-t쏤`97*O6nDvI[y֡ -N='nҸEGuMܘqpբ{#eۻݳ'׭NJ.9/x Oʖ}0=Lݒ|?Q v*tLqPJv+8zCVhW߅};V{6$?ѫǷV6W* E*ii!&@ @ @ D҂cW!j<ԤI%|>\=11RRR[nحZ^xAg?yQF"{^ӊ+j^6U˝~\ ڠ:9*{^ӷ~K.\ ~r2"' wЁ}ټuro߾T^=9Mcǎ\EwZL2Ew, 0X S_T7Reee /!)nĥRF]"rhocHWq]}EXe}x5ѝ,$[z9!n@@)w2)V X[{Y4M/l|vյş/? @ @ @\,-8V/K߶m[ҥK89TԠ'h֬Y >|}}鑑doo/y6+r6@kڹNPCVo}nԫW/tӦM~z9?|p(*wBPr<zב+Wt7ݽ{AuSc<@>MsMKi9@ @ @ P+8!mWNov.e\{.βʪ<5~I9s_y Wq}zxxP>}dsґ#Gd>_~IrQT/^$76';չO?D۷orsshY&rLc nB05 ~Q>OdT70Ƃ @@P4f( @ @ @%`i1sxspep4Wx2etnU?#5|rڹs$z*q7o*CS^AuUy}}}jժr9΁tyvvv͛7m[gAy%Į>5<<\yŪUh֭r7n,\AΝʗ/O>1T:XS^du#^5fK{ak7j-^˔))1 @ꦹ4Ӝ F @ @ @( K kaz˕+G{+Whj\po* 9rΝӍǏW]pAV~*M+Wtph|ʕjsecpp s\56,,:t"C^^^չرce%uqƑNU !]^ozrPo.'M @xT75?` @ @ @@q%MTgodڵl"_GGGUu֍x^%K|ښ{1j߾=}X۶mK]tNw۷WmP;9s6l@ZN\v>ooo~\8_Э[de?0WeS\\1rHMLt{쑻4hURE=!@mC3@{Aud8@@AAus 8@ @ @ XTTչѣeuѽriiizj'xBVGW+WФIdP? v `1w.Z$orpp7ow5nHV*mDv`@)z1  @ @ @(Ŧ3%Khj[/// \I… $qn秶_37]z;&~Guֽ_@8Ջ9pBOO5AP @ n! @ @ @ 3@Pd/FJJgϞ|wM'~,iȐ!YfK/˘  n0 &Gq(N Xpq @ @ @039{,񿨨(JHH (reuWzu5M6ݝVJ7.C~!X]jߟVVVlj Xpq @ @ @0/zh @2T/uʢ/yŷDO@,HAu 8U@ @ @ fr!p `QwDEQQёʔ)q7 @ %\e# @ @ @KAu8@ Ս -"___ruuzb2nHd?vt@.z @ @ @0NAu PՋ'l  '''TTa @_Am @ @ @(KB @P ·-Xˈ樨^Z@ `[@ @ @ R@PбK@xՍ{  @QQՍDo@,EAuK8O@ @ @ s-p$ `9Z߽{~\ՋO Xtq @ @ @0:( @T7z/ZH՝DE,*#wҴ>>ُA ^t3 @ @ @@P8? GA7>yWT9dA 1Q@ @ @ @% B nEYbg˔1ߊƝ&zC  nzS@ @ @ -z.X @(IՍ]t@TG̸  N **J'3H @ @ @@샭 @P8%KPHHۓq7 @ %\e# @ @ @KAu8@ Ս˖-՝)33Au8 K@P2 @ @ @%y]  X]+V999q @ n)W @ @ @ @P|,GAu5WT@P8F @Ts @ @ @y nG@%q{ҥ"T殘Ҵ3'F @x>1#@ @ @ @E@Ph^h @0).YޞlllT7!@-*!@ @ @ `^@e nu^|9)SAu8 K@Pݼrtt4]t?,_eR;:mrOeliH݇b{ɕ*6n+݈M[+x!@ @ @z`  p?T7Nyٲe2BYYYlj X{Ϟ=KTwss#'''A|9SFF%%%Q||.cxu۹ U+OU*y:\7 z!EëP~*  @ @L\)))}5~bzbccJ qeG_9ƍkA `">1qqPϏExSQ|g!]&˗7f̠tMމܜ joJ:>wq3;H\݅.- עz7'GdkD5[P؆mJ܉1s;_:7F˕q@ @ @x)?tAJNN zѣGi޽tEyKxxxPJ' ___C-qɒ%2] Ɓ7 @yO1Aʕ#[[[YMJXУ:"QFq_%N偮]AASy+xk7Sx<մխ\Q(JP]ыUAuD8@@ @ @f+`.A۷ӪU{jaiӆ:w\ '~?]^()A`֭zjʯ-W߿?U\) CAue( 8οgT7!@"ĪW.?NڊE=b: O>M-[,06L=s)tr$m?r4dfU`'T7i`<6T-x{)`T_*]eA @ @0{s/V ԥK?AժUiДΘI&Qxx O0Ν;ircmҤ ۷СCқ7'|" @!q!!!8"n'zC `E޵kթSԐ:`q&S ѱcǨiӦhU}h=rchzr4ch/uY>t6ZP֎˹ңBr Դ ƚV RQ9X%uՉTQywU:w5bnfnT3؏U:T?r ˦^bJ716\L$;;ӠNT=(# ^[mN+'ޓ(:6Sف*xKSk D?\RJ&"oOjP-\17&&~=F?ʻP_y ᘫ;r|eC q.ED׻yΈW&/w,|=*Seo/q MAOzw:]}4k%s C_zZկӎ K7J- f ^$Zw;>ۈ@O=+秆 @ @ P@ioܸAO&vԧOK+V ~={6յҦoR۷\kΜ9޽;hBٌG@!-dM|C+VT O"nbd @'y^}?GT˙mǏ q0m +`T?> +_E[qJʊ<ֈ^}ͯҵGA\];QsVZկNC_zR]v3.XK7cuqM/]PP1s(!9;ݰZ0}z'r?soP5FY??{^YY9J?4SoIl=@y?ًnIO5IZM:1:67'GzԸf^>i˞<7zuiHTł_u<8qp[ϵa֩s^a8j/tvjyT~{O^ תC)A9>utZN^ݙ s~n=ܖ _"}hSJ;EׯOo~ySLի'a XA_\]̟<254 A08@ y>+yϓT_!l &q+bjӰN3M6⏜emm()NeN ?])M}Ԫ!L+u~PA|:AʽJ'J#u=n.NIm1.l*;+Bv ?su[04~:: BiQgecωJXu{3F/z*x >p;T` @ @ (͠:9!!C 8akJjs~oojZns9sH}ܸqk׮[r rQǎ-RšKRxxx;+SNi ɲrÇe[ۀ]vjt?%6::Ǝ+>ġ|ޏRK.N_hh(ӓy7҆ X܆4]p,Y"<ԬY\]р|1A$ՍTW*en'zC `EFPM~G r'|P" HNe}8'K Rlb2wZ $nP"n[}YFQ]wYLWu%^s蚃JmP-HV>(⸔v?}ѯ+qewJ*>t'==xJ hs]Zr^\ qQf_9'/G6>'7Օ.T+ďo W[j2>׸Y*D/F_!mr_"披~P] XYSq7?SHqM݄+ߊϹv><.7chP;a:h@};>&wv:v ?~K{;IS-7MM]J܈}%q/_SfTW$@ @ @6mN}m sǫmXgϞ+(4Eu'OLqq9*n'yDDD}v3q&cРA:}~Y ڻz֭O?~LڊO՟&N(+sNڟ4iiӦԳgOcD@].!rY7 @"y^CQ͚5K:1G1/:W,z2%A׫8Pµ̕*S24@CWնMu+&Koum'a :ajne 2FGEkvڜ\|w*4o>%uյMYB7cuGArY?>kkfqpe?|<_Q*hoXd DrY?^_ܔ0FTk@w f|0z:xϙEvk\9;M<k{7W_;v^æ3WM\yoړO{+4Ѧh/Au3 @ @ `@i7l@7nG٭[76s59{:Bv{ԢE fYٛ+|s{„ :xaܹjXk׮ԦM6T_v\ s ?;ڠիW髯9!z.\HڶmK\)'mPC\ tO9R^tlڴ֯.P5`iPq`ժ>P c8t @ ne[|9 `)5)#~rl&R@ @''T@PRVTLKziNuиR\;;~ȫAIu7K6ZTЩ|t%9Bs?z] 1Fq rcO_MVV3Ιz/+is_М^hw"+6 8JJ;Q[߫H,~1tb(9PFN^4e*(S-kFj[Mw_ޔ.]Z4'|a_ꅵRށʻȦW"t;Ey i{~xqH?TW)0@ 3gN(8A@noMͣ#ʳ@TPAD}: {ޏ<3}cOᜌ+Rj*X@ A aodV@yV 7\Msի p\}|r(*Ρxm;v,eT:t(qu 0@:=l01vZZrSr4R| o۶8ǭ[nTZ5e31Y|FW_ѝ;wd}uڠ:Wӧ/shr6f1bVYGsr\ϮhMAqǀru5CP= +@P=oh}^D~E:v`kQ3unAu+݆({)ETN_ȭ5k.^jal8=jx^q^|c`\Œ2\7KKSOT7B1>N_Ù-+?؜W~F}Wwl\:4E;onCUJ2NP3!4+FU;MO}̚>LQo.V~oF:a! @ ,Ç֥Kׯ_.%v @V5]\*," srFέsTV-p,WVyԍx9i|[X,Zȃ 즮S&'SЧzP=x!4 }ʋyyϺi6L~2:z>RxA[ӌUhJ jvv ,*- ev VW'*zk%Auun%Ҹ:ir3}NrA6R_kO]I"@4wg'ynVԟ_oPVQWÏȩ0tT kFJy1eۋ@]'nK @ٳgi̙?OA #0m4@aFVͨ/Cy[ 76l]5lؐڴic,m\;ݠc_~h8?s%_relg0,,/WkJ^sMh>>>FAugv}-YjԨAoMVӟ}\knYY&L۷ +k׎4@*eg!!!$Au<5 @ O 95\1hE͞hf'zToGИy7xsAuwqRPs(z/F3>ܻVHڼߤ5; 'ULKF&{;]~.Q&w{Eg5n./(MTr]TWVh/a*PT$մpx-Wvp{4KmK2T5sj`e!4>[kQ&Dng& _oX\?,?z.L䯽P* AuC ~ДteGTC0=7X49:yǕ8z,& @ @ @ +Tp6.]> g9͑&>WWWrss6ܲT?~8M2En?iWq}zyyQe_:$=ZnLi(f t9qeT_`رCT^VTTP74887"3._,Ci\n޼)hҤ j*a;@BAFjҥw2;9Ls&%/wrq,ÑYv]GfJ҈}uMv@؞~P㍖mЉWN}Ylۛ!TrDT>{9Z=AԫJo@~_)u~]P0>1.E +s*u7:sXL ym*fBl٧dzlԇj?mN;rW:N9 s֝*-K~CN+?-ߴG%KsygLxm𫃨YJ&Û<]7t/OfeTL_A/ʿxoƌ7MSAYr7:5MRfo݆]x*` @ @! w?/й"3 s+;:dyѮ]d:u9xY1Tj_|סCeG>]V\)ٓ*Vn$R^T_lml]Rz򺳳 s@IDAT%dl_ޠrijBu5pã~23TqR a40 O`枾t9с5&-k+ O]Dk^kl?.677Y"nN%!>ge4<q|ʧolm?rVT]7>4vzdkcKDlWg9?vhM[]!&쮎,7ݧ,eVTYTNwn>p~ZN ?vvPr̂cE~&xߤfyzuC+@\-E!z\P}t*`ZgT}D Wlu+4!~>"7w]$}fKCg3AeTR6O$owW96W}'4}5m~ISІez|TP7=?/=[z}Q_/꣋d3w%p-ZxԫT=Giɿ7ޕN+x @ @ fPӧOC{ΰr8 FoߖUy0:Wj={М9s>2 v}]sXYY|РAˁ8y$M4IO?Cp:Wk~J9|!|n۷ua _MFUTO#֨QC9dUjntʱ>K @ J &XhݿAq>MeւzW]_1YMy=Nv/fǢJh*.42_ KtP=LT@^j^U,` x <ɠ:W1zJTVS{- [d4k0/Tj/ps8o??~V6Y  eph>)Tq{M=jGl+&k&/f}QɼyJʬ#sU:ntEʲvyfA$brFFv<q $*Up3Tgӗ)U*,fHluJA~%`,$~LT>Obs˓0s#cԯ33Ty&?lnZ>| oĚ3W/(nu[yAlm/nptS9_χnLה  @ @ : W Jp4W7oʐMdtß}jhn۶Mn,J޼\Psunr{___*U\Ɵrܸ _^'{]v<)LAE>֋/ڠ:/Xlm޼Yx͚5e+sxC"E,;$΁z>Vm{뭷duGM硿+9rDڼy ?gٰ6cQ  nٙ^p!mD(?3-N^J,1 p8jP)ID_!X(f6ԓlsm X ;uA2Aa-i-ܱsh͝%K7E slWꝇMU+gT__XAO*@|MxR{)7d:͕ھPժ7/> sY_C|½T>uqqk/zâ5k :Тaƕ!8DK6K)&$Y&܁iCyY>%-CF~ޞ4e@tc>{Alm\z`s[XJNk+sЛߦͨ>v 7rN_ F|8`JTT}R'Q*@Pݲ;|w *gr%t' 'k9.ޢ>ڠ:\I Q7袨&.XBD%XV|@[@QRX䨆vjQt79]UAqh!*#.-vJ"(d·̥hM=\l x7n%5 ><ED\R2s:"JT,4Tuqt WTϩ{r"cIVPߤ@ / <ɠ؅khUOHu7tZ,]G)iq!/RH^d5hn:>zյygɓ www٭o ?:W8ҥ a޼ϑ7c(Q\ !l7gdzus;>yk"?P,1_k_)_el?|2xQA"q苊cq׭qG[[9,8kއߨױZsu*CJ\a[1/w@ @ @D /;vп+>'ggg*WkӦ-::8ƕsn 4Fѐ!Cgu\M6Ν;i֭UŹCT իCƕy\gV>g!ގ3 &h\kժUG+?jՊ*ÇZn- :d0o͚5rmڵSNx1 g1bghEAifXdEy]&;ܗ\R@n9x.K]W`Uu2W!0t/&U}is_?kVfѐɯ2ȕ(&FDۛ<[^'jD϶Te8~XvI='ӈY]?lXVt톺W^U/~YFGTxA>DN &0ZԩL=Z W;N` 8DOwD;Edg@>FxYZ#udmt+Hw]D?/[iP֗oOI͍`ܙZzcLtX}A, B8Fo*RJH]y|a27%o$]|Y~gG}}oV /^,o7GqaH'`lTePviΛNpo筦$!}ڱ>s)N^j6<.;^j^Ӡۛi,UuPyBBo2qn LM+!ӪV' 3\&{&/US7sX@ @ @xjZP4s\A믿9GQhh3Y䖖/_N۷rXM4Ox"""Ǝ+4`'| @Pݲs7V9z&3Vn?W{tnZxYu>;cE[QP?y+jⱷ6Gm.gc{/6?ы2+jש8:"\_Ӎ UȹCZ;jeI򄯗'SIT篹lV@}UQe7Y J+O}q"7Ӡζ" F^RVT`ߤƖ^W*Q1ET~#O_X @I 2$I_eܒu1Kgk-w=G Ewq(¿CVЁ M"-T#D}k7!mP {ݹ2kdМwՐr}tj m1F:uQ@ @ @ `=rΝϸs…ex.r~D}͕bW6lK.ё#Gd{>Ξ={RŊy ꖡ*9#,-\CT{}T| u>\O Jۿ.]Q&}CEO8.4bϺim|*vj<|>߼;: BwSj"O¼i꫶inTWsժbāv ޚ-T-aze;%>4}PweԀC]MxnRYЄ%k/|njTp @^G݈Ez?}|Կ[E/Ӡ_Yt$oWeS=qeu6n9@P=hWToΰ_UJ>rݔ4  @ @ @ T' ))IVMߵkW;w}17Z)E UZ:ucǎ,!@1 n (88F zfCgV}~?Lh&-SW>Dz5/$ߣCir6 Sgs-ӫ %Q*ٲˮy¯\Sk_MGyu*Ŀ{ф+7}}жcT\"ZFAuK PǯqG$7/7y3AŒN$ #p-M^TŸyf;\=M\g"JNԡ75}"B DݴܼE=.-^4 @ @ @ @ n_7>}4?\8>>8 .]Z<go.UլYS=`8@0@PT${%("߷VѶ#g.nCUJ9OL.ӅV]Jn*;UIPHb2u Pk=y^Un~XF]*Dت-b>eAc(:.^w@,񁬶v\UogatӠzվډ,5 ~2}r%/F [/qCd rh]A;gw/cL HBwͦ+7ű 7_ؼVoZcj\+yzZ稜Yw*宮NhhnGvTϮC @ @ @ n  d_AiXpJx}Ѵr{:/@wRIzOWS3qWT?ġܺfܜٰx]h?hB5ˆ_/lPf5|LPQo.j?e~O?؜W~F1%,ϕco%O;L`1z2]i@yE`枾t95&-i/K͵At^ W QSi~c?HJTt{@r0Orp @ @ @x T Oz-;/&???rqqAEGQ.۰Ma<Y;w:%P:7G Դ4v[s*hONj5r^T_eTNNs\wg'rq*H~=iHִ)/-+9 4mECrUB4m`7"xcd K} U|u [`$,>B؛bGG޳-F*O7]u$Owo%tr{ eЯgPڠ+Aa@ @ @ @-ö 37e+רO ..eL;q%&zKib~Hb2+W~Td;僦,.78IQz*J%h;m*KIa6{+q`o剋Q1яe5ʄny=sN@ch8kժHڼc@^xAu]utJsW>ݲ~f{OiԡS~@kvd'oBJ7~ o-h'ٜAP=`@ @ @ X,ń mճMf (44TSRRhF=ry&n]vImɮ@#*O˛ժ$ i{JU VæAG՝hwR U(IT畉t7I\t'MEtۡQ-и'._OPڠ N!5]I牙[^oX#nA8c${+0_]ϯquP1@ <Π:w{ϭsUW7oݾ#k_ty&6{WDgj~in/wy$OA @ @ @OO¡B@@PݲS9| !GGGCPQKu{lqڢJ)t^gBG? U9\߇VlGac_/+߾Lc殤g#&-SW>o܀jyjM5e[ Mc"dApmln\Hż=D%t=e o?r[s//ʢj|jZm>p~ZN7w߷3Trj`Z^gh@iPIazL@+3><{|ОB2jfv 3蓉2G{{+~OxC7R}:q?mP`Aa@ @ @ @"-  #6uٳg@999b٨d< i{6mU"L΍}5ոy3tJ\PEӦ͹{4Gk9WKrrJs.@ż<(^T~apvBN ȅ]E;U6M_E^Uk}tU~lEU&ϱީImu,95HBGϠ[Iwc*ZC+f]xTiU|e9!@؞~o߽ u1ޢCuAiut< @|cU6/gB2TܯE&Ж(rѸڠ:t{1z6 @ @ @EAu]1 @ [g+]YT'777Jj_^93mzU}jQH/3ge!p'*`Gf.~$<O_.j\͖*K4l PNy'SJEegdQY2X㒿Ť Bs]v4`Z`T:S)oHwс5+mrzCMsAhgjѲe\ev7>K_;tG|#cAUO+@RRiДt&2.Ko)1 [ٝfa!Y@B@ @ @ @@Wu` , % ;qE@rqq!.zT+Gh( bVT./z~_}'(VL7Ewޓr\>ӷ>āiC~"JehLו.ЙZ~;h9MPoauڙ؄DCwd8=7qev_VlPzU({\TqO2ZWÍk/$5D܆]]:TB u^;1dotl\IStծ95=MtRQez@$׭hOs, 7DwQ$Ghȯ38I#XF|IE;F|"\9ݍQ;V{h7-a]X}A,  @ @ @ rb0@@TSfQ:wBP=CWrnA;v ""Mkc\KRՙ\ 2y31ƋJّzgXJpq2,FTKq2KS>J~=yDjjES0JrwwQIh_).69Bi4 d] n}Ovl9:g}c3ճ @ @ @롈1 @@P={^gqEurquEEuSk4e){Ua22\~e~䌨{B%)NStr8_ PA!@ @ @ @> <[vf͢RQQ2|ΣgiܕYz>lm铎ͨnRYN ]A !@ @ @ 31 <J&O̝ܿK~~~D?yvkwU[ ݕ>܂f+ @MAvF| @ @ @ TG@OAӴ4=g se[q A7(I} Soazrsv̟O  `1 @ @ @ Tl diёTϒ:A `[Ǔ @ @ @@ +) XꖽfQhh(#n% @ZT3 @ @ @ #z98@s~hܹD숊9Ė XlQ0  @ @ @ -ZԪ2Vud!@  nى=gؐ},R߭]X꫈ @S'h*Q @ @ @MD[+9? I={6A{bK@D@ X[_z^(ƃ @ @ @%`m1|f]o<[@v̰0 !gQQ]TGEu1 @OAu})H@ @ @ k>_W:7 䦀]omA rAu[[[x ?9x#MG@ @ @Uڂc|Z_x vuZZ͝7TScA oT4}1  @ @ @Vk 5k}yC@n XazL66670ƃ @ 9i8b@ @ @ `kJ  gϙCNEuKC=l @>x#MG@ @ @Uڂc|Z_x vuجYH...7.ƃ @  yi8b@ @ @ `kJ  g͞MAAAĎ6bpTT[A T4}1  @ @ @Vk 5k}yC@n X3(HTTwuuEEuq1 @SAu}+H@ @ @ k>_W:7 䦀]oi}};o3*뉋 @ȿsnF> @ @ X!@ 7zCo9sȠF6"~_X2`a[@OQi8b@ @ @ `kJ  g̜I₊zb<@W#F @ @ @*`m1|ftoQ @ @ @ X[p,7?_;y$-[,ӗZթYfJ@&`mzY((0m 1 @ThѢaiV '@ @ @򉀵r{ٳ3}Ԯ]:ui _{j_8p@xzCS5g#gggTc<@r*zN匷i @ @ @ȞZ^ @Cڮ70ӎ6k.664 @0'9/i7 @ @ @-8{LA]oA`rSRSTA T4}1  @ @ @Vk 5k}yC@n X3(8(zc<@S#F @ @ @*`m1|ftoQ @ @ @ X[p Y+rSڮ7Aurss4x ?9x#MG@ @ @Uڂc|Z_x v5WT $>zc<@F)""nݺe_&/6(. .D*ӐnE[}-.K!_o*`kG@ @ @k =׬傧 @ȑ]o)f չو`L?UQQQrO|! @0'9/{o;wbbbCމigg'&auR8%%͛MOhwު dwd!~zsT:j&GMי| )y1%5VlO/\sWӭ$x}Pn*O>  @ @ @  X[pq|_xJ ]zCW<1,O.`, &>gT78~y##@duviii*|/_X;[#gН{䠶"?XT(zFǘYjк34sfkhZu6 R`_u^2ywg'i*؄Dh-d6q&g-C @ @ 3k ZԱ @zC6k(0ƃ @ )CJ "{{{jTWY=j?~OccceeJ*eu'OT{ޯSA;8Q]i}T~FU_Nn=(KϖՍri"ml2Ǭ6D(`. @ @ (mWG@xrv,WP3w,:$<) @ȗsZ~#mTtiR.lճ{JEu'%%ɓ'f͚7 Nk+AEuos-).v\KT.ėč;BTڇG @ @ @ X[pL @O]oy83{  "GT!X K9z~P988R ܜ4S '''ӑ#Gjժ9oc.;jXLg%*P BؗҥXJAE(7"kq 2}eZ,OKrj3`P@C _;)]`[u@1ǵEu +DlB"=yqqTDe(uQ=Ru'2|؛r=M+33I%&%w'*N5JSAtϱ WR :r2]I>ܨ * @ @ @Z-8k: X"`mXvѢE OډS2@ @P]ao>|ʗ/O|QAuyAuRJJ =z*Vh}|fTwo{FF;TPO}rh;e&NjvnNE<7RV}K Z*H:: |]Í&,0y/)Cr:OuQ %yZSDݴ >S~?̧7E$ћ/jใ:l`{rsYTjF8?fjuWj|:{I]LhېT~F4DԭB]D  @ @ `-5kyyB, KLM,YBĎ a @P JF&j궶TT f7k[LdWWNk/]OێQ,FeC|$<:7MU#"iǑpKGEs %έsJUT|=H\9m'.Kb"W'G6-+`K+6]] RJG/ӱ +7~&~T/Zȝj/NJn:ƺhb[QT@Q )M'#Շ -?giP>}aWi='njc @ @򻀵|-> @zXf1-ZDdʑr{:**Jgn @~#TlRQ][g(ڠzrũSZٔet'wkEC|FAu#`/(գ@IDATa;Q"H&H^d }fK<NU?lQupeEFAu^eCQ|ӌϻE&ЇiѸz9zrIKb 9`gGCan@i?iehMe}&bi?jM] zoa[b/Misf*oO/=[^7g6Z:fT7 J+rW1 0@ @ @|S &`m8AruuC '1Ƃ @ ? Y4%L8*+c4޿}tƽ]ilũ eTQ}17ZMAU"=[Axs[\UYKfR4UKj?~pOMPd4H#f.eE.^~Ѿ_BWZUחYF׎'oM+742hO%nX@ @ @ X|^#x KzR/ϟOŋ'ggg AuS!C M@r8iJA_=JPMTO}"PbR2ݾsWK]'Ω=zlm5n:olѲ蹫rOgNdJ~Neuʗh]4-OnaZeEOԮ=KmTS畉ɿoN*4WLPtAR~X @OV`ҤIt wj# m57YA X[pL 8zCoCz c<@RHCPչ%`Qz-j]n%ݑ˪?L;7Ws{iˡt_/8꼿sVҡ䮕}q=f%UM UMgvʺ"+zJЩ"~_4C5we)+V;FS]>}[ӂ;InZQ\}3o>JL@ @!cO2ձcG3탕 d}]:zh;]~ d +! X[pLמSC ATP;ȕV߇4FBeP쓢8TOL=VOT_o`/rw MX^ Qs:pm?zVݼlR힯N_^W:5TNx8p_߼׎JAP=@ @ @-8kƚ @]o3d٢EϏ<<<#P3N2]& R!7Qq!ӑV8L]} :Gbvڴ?7&ҭcEl9׾ѳrN <)0p|ݞ.7Zgv Sw][8}QnGPݜJF\)g"ӝ$mPݴo%m8@YG;kHGUT?.YzߒCy->XMrũ2qu|O*ѱɤV*@_u}lkw^OMk'cJzM s7oрK)]}nϾSiʰ*& @ @ @Rڂcz @GdWT "WWWTTQD Zm;rV (c-Nu+֢jSA{e peGMKMfRxT~ɧdl`ˡ R )+0@y^I99c:v2X M\/m>d/~dzt{s;DPݜJF|f޸IMY oAve\ez:d#7e[_RכH{.MhB)+A' רNL34\*?.F(9䫒(Ui×G5Uhb/ˈJkPYӴ6yB|]r!Zn5}LjEEtnV| Ѳy8ѵy}⢡J=l(}%DEu @ @ -8kb  @]o([Dž RHH)EwAi }f- \ +}- kC3N4.āwnr@xAurUi~֕EӒfi;TL78^L* )4!*ĉTlٜ طyk sP)5d$Ik-.oT6?I2Qɼkh=Eۓl*D򵻏҆}'Ex7 ݧ/jIJ>#D0Mh e+2_@5m[,Jx8x})y=ܔPē {ʻ4tG &~#-<<(ݪ|9Cŋ[W[t^ y.] fLs5r!q$[|b%ϡz=":"n>]z<%"l @ @ @-8ks X*`mzn?o< !sAuS!|a>\j+|eX_ЄeUJoAokGCf"m\r`TAJeЙWVÍ&שּׁzdvpW8԰Z*#WlP1+Ko m:xRYdXXOQiG +֝B7,5JI3@90 (OMJtp߰9!NM].R uiZ;m#Ҕm _G9ޗ {_EN[}A, eoqx/!B'A@ "H`X)EPSl(v" қ (* HEz %;fMn`q߹̙sf cUU7CcNe~f jv… |Nُ      p|-8.ޝH \YQ=44zN?RaJWȳXWTɾg]F5ʮ߬AuՠmuRE9jY-a|층TW>(ی-beac>@7+×vssU'Csؚx 멻K[q!)*?Qi(?a9vbI>aO;0Z2~MP=fF iIIIr  nsTOMMǏKrrHŝ]m      Pׂc%}@B~M3f$$$HppPQ=[=Zxk;7+jlxp\Pʨ|&K7l4#n.wԩ*gnJ^f,\jͣV"B%Daټk_j=cK\rW:|8֛f2Y۬ x^`2j jJCBeod)jQ?5=xsμ<TϋZ1ل@@@@@@|-8k?7 | O;VWT T&ǷGL}l+;S=LzT"aسu[Q[TO>zB3š|\I~NM>({Aʤ?[Ԫ,-o%V+ O`m2lIgCOhHszZ2~7vWZȨh;2ǹz˽7IjWZ̕G47Tww5iV^HsB      5tD@cO4~xP*w YzvM겎rkg+ɰ:HjL5wI^K7nwF`kXʗȌM7ط/~Rt1)WB*'HrPޅu@|}88¹LGQOph/T DJwhK؈JR7}Y7u7V$!/>$@G~1c$11QSRRx ̷w^=<**ʝi<29Kd/YshlerƀU4[X^A_W=}ύu]*g.e  nߍ*Ko4}JWȳ؛XGT5._ՀgJ V+TPsU=+n;vґ<4BZ      ` Zp׬[  M~4ѣL2$FNz6[zO'%#6ʞ[v.=_y~R7aP_ݨz~i=~:W|,n<}6E6L5[wu7K?~|;qhc@ gPlJt`8}F_PF<7i޺˺V7֖{_~?Gf,Zun-1E(GJ㺟=xBP=hNB@@@@@@\ﯹԠ# 7<w~qI\\QȔzqc).ouK 8ҌLEdؤVe})Μzsj AI/&3CTWA3gSUQ!>PDuq?k^l{,`m pq3>o&7q;TwszqNG@#6/^iRr;%˳Auw[azМ 4'(4!     ,k1_sAG@<&kox DcǎApI3cst|,^*MF%ؔ4ٺ>OW7;wG).EP][q!B\Iy:n#SvO{P'ceQ)^-*XV~fʂ՛ϟmf; @ gPQ??k2xx_P?6'/}1I;bV=OV7{Pyy$cx!- -       Zp\n@O r3Q%44T9cL6%ynӫKӺդm[͗*m蟬 ebOTF\`VauL,!w&ɶ־%Nw[۬ \|˻ˮ^AV-sigv?WlOEV%Ԭ^tү2g^8% | O=Z]>}6Eak;?trU^:I,:}CU_tjՏ<-A؇dZWagZ"KfG sX}k-8vcڼ2yz= 7]gg˩g%4 N )WSINGKbQַd ;A]h$ ]x!$      d)k1_@M~4رc%..NTPUX,Z#?-X!;'gY(0@KnN*: kW"lp23٤Y2{z(#^yib]p|B0&8=yʚdt0j}3XN3}ʜ%2kZ]Q\B1zd6 p ')iB>Ct+-Ouh.1GeͺB9Q+ϓgΒ>5G֣㭉rBP=Xt兴lp؅      x-ǧ@𸀯i@TOLLӑy޺$%'NI?#^LbG_fxCR㢪FȰ\\ݹ/=_42L"Bs?G@g%H/bL *tw|nFP=7ZY兴m؃      xʹ7#W py ;(%66V%(MPݓ̅ IꞹGfA@@@@@|Uׂct@R N3 j7Nʔ)~Fpf.@O Tm482       5_}s R~ {@@'@P3<,      Zp|u#\J_}֣GeJ``T.! Rgn+/yƑY@@@@@@_3F'd„ ʑ'u @=sky!3̂     xW\7 71BJ*%rΨwXܛҳݫ'̆ Qz      y g:" gy}Ihh(ݣd4 Au_\'      #@P{g ;ݻ_.'@@M@@@@@@2^vC8@ m:l¨%@@Wʝ:@@@@@@s/8@ {}99jHHHNH@%tV@@@@@@Cw@wGFE43ܛҳݫ'̆ Qz      y g:" gy:T$44Q2@|Ei@@@@@@ =3A#G!!!GEu8  @P2׈      w T Au󰯿8 d4 Au_\#      %@Pݻg ݻC   ?a2@|Cog@@@@@@o MwsA鯇8zXXzoEu.  J(I@@@@@@p"@P M AuG!bb$$$D{h@@=oʌ       \ۃ6+URE_DZϞ=+NBCC3P`A N 믿y/d @ [s_: x/ I`޽H~r9       77oO^w)"\_b~vڙ.z&@L崣U,e՝2ш \ ~5@@@@@@8EW/]t&gJ>}dڴiz_z>@PxW&&ݍUP.iiid4 Au_\#      %@P=렺S*~ɓ'%$$DO. s ,otV_.X7o,[+V,) ˲TS$%%E*ǏcyY^Wש%GիWK…E_|o.rK(Cٍ;q(گAY\R#uށM>@Tw]UTP{*h@>pD@@@@@@L P{ij ֩Mԭqo!3fSL0!@t۶me˖-R`A9sjw=^GW&MҠA,f1k,8pڵaWttԯ__{LAl[)^XsiӦ,+WUA]-浚}2>vQ:t蠛3K,)~ԫ ZTFҫW/]V7fkیDŽi׮vmFo6iD1^~eyd͚5:zL:U-t,  a$|P]DP=OF# T%"      etzT?v온@R^zu0`Ecݪa̘1BnѢ8p@W}p O6-}WN裏dɺzTɝ-wqxJdȐ!< [nu]eTW}Um^U8w0'|+ ]tUVٛ3+}r>fŊu%7:t!x? 蔽TVKPCZ^u{8@FxW.SRRpȑ_p.taMRl2edY蒍.v ʳoͦk_e+V+'ouJታ?t <˚ڕUֶV.qCmp[KSO=5k&=zr}ʕjQ|AR)RDT{QIvǎŞ|I] ݜ̝ɓ:nV111Ժ-[JZ$**JVX!_~xo^:uV=O/7|\s5o>uT)PSfPlTP+T?\иqL;<"R{þZoLGy2@|@ 6 GFF*dՋQ,ڥaTUzW^陯%t\퓚&o "i_8կPyC xF(ؠ 4^?F^&\j|?w57HοbdMI֯ 7sܽ(an=2GUEib߮]tP]M)Ҳׅ+͹61w) 'q|1N֠ȰXڷZX٭<lޕDW/=,>O7l+cf.yZR)V` 2g+H@y/^,?%̰g~IVTUgJrr=zTj֬7ջ|MnT-^#+7{~L[5m8L     xLR:&vxOv=( Jח]P}di̧aJ| g LJ/dB,XP^}Uiܸ٤͛'/^رtگ*?z[Z9vIRaԗ"ުU+ҥu^ϟf̘}S8WaA{X{9q̠ Au .]ZD$'@@{M;wTPA= {EܞYQ]htIYnԯ_?kBBe]xnrRtqk[ k8yrW48'3     %pX a]WJ)V*B>Oo>Tx#{P]U:Wa7۾}L6M&Mw ?cQ{b.9x-[VF9sQ}B*LEwh"QŵVXa;vL}zuxggu0=))In]URWճZTuU}]-7| W^] `6xAuna$11*:IP=OF# TΛ`R fH=_ǧ^H2gΜ+Wu]ᬦ/X!̲Z_xv_qѰjٸ#I9&, ȕo)2p,I>v\*,8H^ gΦȚd妝O2?4ꯃG5eo9}&EDF8+/AYӿPuվԪX&ގGӯ;ԨR /`شCTCOHH} %H~kRU=Pz{囶=$͊ 1oe$eqĚ_U}Q>AoWN,-aqϯ幵|v9y欞<,Cj+}Nsl1daP$**ţ#ΟO>V@@@@@&`q^[{s9qROuM2/dn9lRyemwϢ-wԽZ H>7     +pGM+/~0Viz5r5gqfY0EVmn~ԯYjse)~99::ZWYcƍ>@IDATC馎;JdO^xAW]i[npB-22R5j$ **2y^Ꚏ9"*U!C8eậ_~RvmjCU@]- p_|q2c31@r ]n|6,Qf!5A@~O%Kf UW^)~V>&/ rת]՜ŌYKՌ<~_[̜)͚5+b3ǎ+};HÆ3P,ݵkWSP7ߴBxNEu5'e˖UQ:uu_*3X?WՅE \fݻaC 2eHQQ(.d4 AuK.J5kzyʕ~Ft߮mJOFб-f2f]>%[`ZJ/2K_T\-$f QwڶC~^_گjtcI%#pӒAu\W)+&ͥcҬ^sJ}੿ˏ_3TꞛɵUt3gSDxT+gN'WnF`m?VitMEk[8 8> 8}F| I5>蠖zUm꯭{'fX_EV(d@@@@@< MAuu9##/g 9] ܹSz)7nԧҾ}{ԩSRUp\UWK4IEUW˵^+C/U W^ӿ%8cP}ҥK=vں}5^׭KYP}ȑ2h =Eҽ{wzݠRzdd 3B%Jp8СC嫯mԩSuzAuSGwTP=>>^y2@|@wdŕ+'UܾZZ>xb D+=jP͎w| ǾYi zz 5ƦhUep rWk8ȏTߑᮽ yfֶZQ?'wڳ _Vgce Gl`UWy 8> ~Ij)*ϴUa}?|>9?"     Mۂ* OHZvGكzZyrr }mlٲV_?oU{ttVX]>ٽ{58.駟1~Qiڴz믿^Tepٲe3Fvڥ7WUoZj"_ 0>c =_ujժɡCDU7oЂ:O>DVT7%xDMz  \&ׯ?<۳馛tp&ND͛_Kuv`???y`A` [Jl=RWۃj;EUutU5e֬YҫW/kw˖-k׮vnV~Wy뭷uŤAuo̙UҰaCQc>4~Iy$))axǎC݊jW :Ǿ{ R}ۥXGI{wK} G39$$DԿM'@@{M&~_\ 9s*C|"3fe~ FNeh46NpOFTnjl{Ϟ|GP}˘CPs}Um4 mPmFj%cvOs{w[Օ|츃}|\Iج|>ُ:   p9 ]tT|A֭[}؉ pqڷo/+Wgl;^[ NNsF`8ܯn>BQ |T+Bʕ+vmfvx;D2tPPӾ4*'6mPw-<Аq6m|7~XZj%U qlݺU&NCǎA?Sw{)wyg9To- *Th_N8~9r$0_۵k'3U5|un\s|@Y{wgRT)п'Twϓ xsij9vFWAd߫r;yWm^('NwDt ~}*-{}.lLqۥM~=>T/U8*ө>xH"B%4W;'cC~,[/}d;HjX ߫дdWQ=r5g^*8> w֣O+G8|Lf,\)-^+{[+A *ėd?&   B5*ݢ96i$.CŬ†# \TWvyKKzUpTAK}':$wuB#G):uJmۦ KLLLǫ*L@K^ EJ,bN@R Tw kQvJEu( L_?@j6?Fb&.JP>#dd=R%֓R00Vm{@:@NK/IӦM/ڱ9 %@Pݽ/Q$gGRYi_`<Ƈ(>Dq!Z4ցU~/AW+//#!!!TTwU唓IVck}4^!V+AfSt@AaF) #z=*ny4ww'LҷzŊE?y93]VW.W*~!$UestJ٤[տ:6TUEje䵇[衮]P]UKy$QU%PA)Y8R8fV[5njA,;a]P]=,X))K>pHp5޿ڡ+gTw5E2|7A3gS;_ɱ%#bB)I15f~=c     'hʮ=ԬYӽI  -1bշ -ۂ`3?5\ dE  AsL>vܺJz{ ;޺ۊ~b;5^]d\uU:^\RTX=/Xr5kFyꢏq%NJUNWl{QѺQ}2\y2I2Ӣ|\IVAu5ɊM;䍡SEksԯve]N+vY_ 4*(~oZR,*\>頺k_~+6naڡԬPF\>ϝA/&]I9</"g?`&g2|acI*ݍE%?O<"     )8p@1)RD ϰ  AuWС TTϚ{P=24D>|WĔ*ua,\ d17f' >*p1ߪv1ťo6\4ww&Lҷ-[Lʕ+':Yt֯_YJ>5u˚gSRep I}E#:Uk(8tacmx#!*W%{OܯG7ݨNǽDY 2g2z.}*mԕ2:ncڟKeda_+At۫C&˲Mzo/z\= GEDUir47~^rE޵~ėH-.۸MYTDg 񨊑 i#N+?/4T$q9|*ɨb|ơ1DwhS$.Q^!H|9c??#7?۶ۡc-ɌWZwgAuw; .B]nuobbbf|T@]-fP]USߵk(QB/0yPUlPY%Wn4*̧G] fB{C~s      ad@r%@P=W\:=Z%((Hz&"džTWGT$"dVKȍ5r}1yqgT n)S\~^ P}ɘ*=:Cl"PdT_v3{]Q.XPt\^}βFH}iJb6Ι@Q`2'tR"\bP3># W/=4ly?/rzBRplO:g ;A]h$%BGՕCCC'1թ6j|h㺒zxx_KVmwFNsjԇSksԫzK     !@P73W ]ݻcǎ7TTO,UL{,GU?bCbDIdX߾ {NOĘbzS cAkaT=cT]~jR9sT+dYn $TQnw>krfRbݖUP]+'iZTՇ[H+bאɲ|v/W= Z){[}vn#eKglu`AGɰE]=zj}"#*jΞU[vO{u_zKLOvN6Enئ7ma|kU 1F0ZFY>DAuw;L Ue}頹:!u4ͪ*^X1*0<-!bs~/8i0P*.@@@@@@G$c?~.r8Fzz]Qsg 5ZG? \8{oZzz~Upƪ/td@ڡԬPFTЯC/.yEc ie%榔+)>Jo; ׭RN'uҳ]S+ܮUp7b = 3 5W]nU# ! Ac|-[s_<}V ϶ឭٲKz "W}ܥ ˃'eك& A<1ߗ{4~'VߦT~? B @@@@@$@P=  AuUE8!cnŢ4sƠzM:ݲ{td*ĢjQWlNL}~T&FZˬū哉3&VIVSz~~uxyֶZIIM.=U1cP5ZU]ZVΜM6sL[j8S , 9 ;Ucub .QUUtr]>'wߪ**h9#g\TwAuw[az      n Tw IzجAcƌDTOII%Jnꪪe1csƠzml⎝G a/?tzo$:  o=ew{jyu8y=1`k[̕FW#n.f>cPo>>~Q vcDJ-:,T*%HRRY)Y$R5 d!0wXvhӽ;)1Cu*"#*:UUit_V0\v<$Ad+$0ud؏svnkU}/ˢUz{pRpϾbg;~ܮTϭ@@@@@@@] 2@ TϽ}ѣL2$8A1çZ9f g߶'cP}4/`둾氩x}` 3' _|̃Vs圱/7E2|f7y흙~#lzqgu[ұYC\ϲ;@ ]UvY/&<\nٲKz h UdVJb~^Um=0Pƿdߦag;:<TC@@@@@@@-n1@< T5hܸq'GPݒbT/W|Թu=sל1>ףiWOwv?rrmʉgt{HbLcSRSe%5-MSA]wsW?̶wkD_sm@)<\j_cP] xr孱bpxU-޾_!FU]UYgAp] &*3^ yN nn)h|RnOf&s׿bAuwǛ呠z^      TwG MzQcǎApI3~ XA;+Uf{s9qR/"=^9>#ddn|@3Vd߶tx5gҫ}sl~oZzֶ1Lӭ\l AJVn4JHqdHʞeZ{fkfIIKVbW:n+nVo7rsth}C/oްo?Fn׽ܞ?@@@@@@@ ~3@ =T%44TTDz+^Bա9hfpJ$s=~WcjֶZ:Ƶ[I婾#Rm$˾CGkV1@꣺vcӶ WgZ5^C&[<O/X4*yͥT(]w~hsST{kRV@@~G-ͮ.7ty)#o~k|z-#{Pyz      y g:" gyGaaazz t@vvK\"xv}ԾU ެ^u kgK/^_iXS_I5Crqjʟt8S3~]JbzBߺgKURkH"c'%~5[wY\N^ߝz;cmFF|>~g2^N>7WZyyۭA[jW  @TsTYn>j%JfyB/٬DKPJ6+}6NJέ%xakSg76{P֤yX!4       [c0 y '6kرc%..NTPK+zֽ.ymҠz Y9 gU7.}!竞y?K: SC\gݴ3I^F˻FH=XdT=(Oim͆+^lnJXpZZ~[TԮ"X [ GG;tlV$ϡ-S#Cl|nS5DN=+Ad+$0MI'Ɲ{ ?sVm٩g ;A]h$]@@@@@@@=d $`]L'UA}+(2o} {8xN[ce=*>#2BWƖw K;Etod5rI>b{ߍZΗv_Ȫf/?Y!"^/qCDVk;55Mz (ڔQ˶dwȆ{夭{Q >WJk,+ 8|*IRNA$2x&p/e==?)'C~~^rEvq:mbnYtlP&H~YJ&ztw5Q.V   ;8\d9!HU <񨊈 J_m=hgUP%7^X/Т ʍ\!?L6מCH2<̼q"   `AuK@Ur63AuAPPP>-W! qrtV*`?xX+yK\ r ˾C`j3DKZJ4:Z]1 (mfPY @P_VR΋n`EP=-"      խP@ W*n̨EP:  @uEF@@@@@@-@Ph ? 54 fO~~mVz0rE@ Ts      3nj#Xz_^^.f͒lQC% HKE@@@@@@To i Jzx=c qt:pB[7@_ @@@@@@0>*99_@@ @BRMEUP=33Skb  -`潛u@@@@@@@ S;AuB# Aj/mڴ8zmJC@7{      GUA@nU[MTx@@KxJcMi      @?_#9@Nz2{lHP=tKZ" 7ƗCl8Z/!     CnAu{\% @Tyڴi-qqqp8Q=}x<1ڴ5ZA(  _F u@@@@@@0Ou7?!@\nV3??_%!!# ]x/҅w'TϏ      3>7 Q @v{\M5wY$##C\.Aud@@D7w7TϏ      3>7 Q @v{\&3gԃR^^.-^Xe<`o x>oH (Q@@@@@@.nj)0T7$xE@ |=o/VSTw8ի 0t5mCP=-"     T[pCT/O>KGOtcolW]EGe  p,a1"n5.! @0"TϏ      3>7Tg2o)UcïV-<2x:-5R}{]y,c@c)` M&t:%22խ?@hz@[@@@@@݂cƽɰ1RZVR'ʐ ϪIC @C/999+խ?@hz@[@@@@@݂cƽ~R^~sy:.p`Bh-kSa @C1}t}Fx)ӾNApi V |b&Auk@@@@@݂cƻ0Gs5B9O}AuCW@$` f̙..խƥ?@h@|.%@@@@@@ -8f|No#mWt~*g^>_}k=E굲@ yP3T@Wzx5      `wRP}_aW_u%*2R&".g'A$@hv{ްzHM&999zPTbA/pA[@@ ꡨU!^i      @v :3x٭OL{K˔D{ oAz9ҧ{JP ;@ݞ7|x<+QQQ 7~?@hTo Gk@@@@@@v 5CeN{HQq\)*)vV2z5nO5H؁ aIFf8Nq8խ?@hzխS8       `WJP}+Ȃekes}YeoeNMrkT @#2I32$!!A [ L  [3խq@@@@@@v 59}\9fG\c~_(cW߾rM32BP  DnVQ=%խ?@hzխS8       `WBPعܵ}zJO5or=~aIMNq#YJP݋U@F$` fbn ZZꃄӟ񀕜\`银  @8ѫlKP҂5@@@@@@3rTfIoȊS&SGKטt0Qݤ`@ yꡙfTW|<3[K  4[3խq@@@@@@v }O|sJGߙ  4"=oX=4&Ñխ?@hrխR8       `W#d?A>Y*nrwJEEݴ]ߌ fQ6AuCW@$` +F=L2EtJttTR@@I TfXVP}׮]yf9p r8:ak?9v%555T[V n%]q ̬      ,`رtٺ,.gc7dezmWNjT  \nVGyyM,YYU MR5z46lݻwKRR\.:2;z dQ!uJaaݻWZh!9994?&uPbEwF9S<3ЋϖdmBk6 ׵6.I׮gTutSգ##%IDATfS_ef%V@@@@@@ dǎeP}rX.K:mö2Yzm$@ yPA s<խ?@hrխR*qF$Dja5Z ot:m۶\\r촃<|ssWf*xtn]e_Cݘ^OK:H>ٹtY⊍U52_at_eA      PCncT1~Eourɶ]{ CսXGh,v{ްz\&DFGGT@@i Tf\/_\I=%%E[T7ꁞ YK={O<@zՃOZ2K<Լ4yϾ*ujPݸȴDoЅҺE+W_at_ea@@@@@@@;VArh?xXb_4pύ~ gDfxdҤ)uTK  YnVL2E(9խ/@hխVK,:ԃ3{ƌ*~!Ynt-n~mA~s\~:⇭p޼9~fvNk_=eͦU:U9rQ[ *     ;VAu?n'n=;/w\s[ozN MT _ Qw*7]|L헀~DvȄQ%)>,c@c)` &O =p8[ L  [3V՗-[&]t1B7BLeʕr)QoS[P=1):H"kc?3ߊjwPP&q~NYaHm%U Ɵvɦv˶rJhuKN0Y2o72ͮx>V+{ ɋo,%k7V?O̓Se7yչoٹG#}?;dL5+j/ %Bo'䄬V6wU٧]Ӻ?k㒤9hlJFjk^**w5Oqq-w"*sx4cVm&O=fQrb_KxA@@@@@ tǎUP=% _nVIFf\.kfTR@@I TfXXB:w,gTP]fAuꥥj*ڵ5nq/!ңsG;oylhV}2^2Uf)3]:+~"P mWv"hmlX 㨟|8MYa,)mW릟ws~$者j\F W#p+w2&mٶUx-~v__$cmA_@\Or˯w\VAFObVi<2ھ*{e2wRmF _ ䷕!9A@3z.jpfy+_zSyo*pC/:[tDz?GD/;>v_:2]rdz3vgFU+e[V)I2OW賦,/w??G Ǿ vY2dGKATȽL3`mt宖s#_Nh/ϏNҵu%??GNjo?Oka^aC/vizoȪ̺Ϗ$-]eN}Yڗ~Y@@@@@[pz8w m@Mn)*WQݭͨg1Z4yu+99^@@%~yUzP=!.Vƿ^=5)Aq0jL͖}չ2T&S"R\Z*ptVKJKFhA.m2HۨikAܷ'1r٧۾VgcoToFUV}n_%x:yCI:ʰKzi_DYҫ+waqWK3V:2UG-ti^};ȭfԷjõvjP vNjƹw@@@@@|-8f|E Q @v{\&y'K֭%11Q* F-@Auk5Ճw,,ڬ'REX?[ͨhP]~'zuwBr|n-i5O4,y 6>E¯ctYPf3?xX`V*>|ٹwotdLfQ3{/jVO囻/ k-_X^v֩2wwm/ֿӂb{3˕]7Պ{OeBWn2)U;^U32j`?}}OJ˔s@@@%wɋ/=\ |֡@~ƍ'7n$G-u֡*`Azr YnVUIvr1ո MS5JPAu&m5ztj+w^ݧ*>΁eǞ굅+غs<8i8h.3MW+`)+~bzrm'BbUP_5Z5'F\ULyj\~3ޕkd/^~]]gA̜dmnB1om w_/.0>}uxU'f'_A%,f˦wۻ[#7   0-Z$#Gyr #FC! @ 6LVZ8L!Hn1T@ݞ7Iyy%QM #@IDATxUJzz H"*ҋ(X`C,GE*"H/K!$$RannHo|N;͚|s꾘MW^GQ @(g㔖qO=vDVVQ޼yS=qXw5;v*WL666dmm-V_~vo_FF2v~*>ͤ;r7}>F]֢SҨuㇷ W产Zԥg[ק WoӖT9,P.;y&DVqjR?s=!6=F؛ 岃ؙrAu?Hu*C&Υ)w2>./ m<#=XʎJQܭDu+}FuhGil'#?m?Ew3_<Ę~LZz ;;ZL(iJ*i(9lY$ Xٳ)4$\\\2<"āz  P>3_C8kv#^Y 7/cT7&<›.KqrVE'`37y5.:y*9qvs+SzUhhbTf;yHݗ M}++mJQuZ2FN\mT1u1E_ϼ酯CV=Oo}D]WBק\fWPַc௝rC4cj !#g/6O6EGYI6^׫M_)BdC/ѸyTOGIw2o@iW{azkqԏo#wGu @ @ @L>c wK{w!=8> "'''ӰBP8@8phҽ4@jp8F@IWOZ֘(/:C'Euh[kx< AuC*y_z 0Tc!v{.#`)wSڭ~F]>sF~L]U_̬ r;;*פ},ٰ[T߫oTNT\UȇLTZTb;͈iޟ;h*?' j|fzz~AHOP!oev%y\)5-cQ~re]b~e1KP7L}zC 4_&떗0xͲyyxHm8+47<~jQm]?у v?7iaU4y_?'<ЛPܭDeh(t-a}3鯆A0@ @ @0Q҂c@K{a:o|YQI!PQ=as9~PǔBFDʪ"yGkj.*[ġ::}Sצbb,SQչ"0Qd{`&r~fL 1#nH%G09խōwϔ:cǨJ*y?G#.Gѱauرl:q iՖ,juGfڈjwiF|c$O;{Q3 4Yz!n)+}L|m3WP% =>Ѡ 4˦4d\ʸn_~^H3|,DB{Ow. ƅvъv<ӰrY@ @ @,-8f`@@澠̡Аrptys6gܜcur 7^B'S._re}za, Ջȅa@ENQ@g@,cD҄aObjAuC*y_g_qrʑ3J'O,AVx1ujTZHTĞ3= _k7i7Ջ7~hwy{԰JuYbl<^N_ ;ۊ}={:S{"tgЇ3~3W=צuiRS5;5یm&RLA>ԬfyiC)֛Թن{hߩ r_AkNy=m=|J.;QsMiN+)w֯ͅ"՘%N]tp,,җsN4x}WьxL!z8ϩB裙+zǩIr2s&:q(zx^{X @ @ S҂cZ>  `Q~wFdE'EH ЅG8&s9V^AvƽBDӱ1Y[ge 4pӹL("W&. x {N׸sǎCv0 HΎm<=n'_W[1<]t/mccM!~^b_dokKQ8dVqʕ.{OX1Wtsv$/7W1\Zw6GT1ğ\dt^~hKs2j|׈gz;` oߴdmeMMExqbʜT.l`_.հs47NǧݎV#Eڙ3gۛty?#RQ=!!_NjL+~OWV~/ +] {žcFXCquu~|WVHru&w|*)y>kk+9Ch*~}F]@ @ @,-8f:`@@I澖sΥQQŅT ؜rse:;R]E/< E*_lN4s1苅TmT7"z6:v=sVlO7!t&9omeE6'Ry-(ۑjU\/"RL-u2!(tWʝ E{ii:D,\ReD> t'"W=قVn?SpǦDj"~Y}[+jY35O+Ц'tS|]PEQ} hD֝.ފ;zY8Q7lɭyԶpeV~1O>Uw{JE]~]+^یM+6IME`nMC:7{2 )M4߸qԪJH]y8ΓTj%9vX$5!Y*~K9C @ @@ XZp_++!@%Go͛7EIDE.7X s' cʳjvp@'JߓI;]7sԿ}#9נ$pƯt-vyԽYm6\i~?E 4k::Wn(ƽ:/p8y &UԵSn5i肨tau56@LIgif-s&?2yscT^ފZԪH#.7O{5~[_ k nkSh68~L@ \IVѮ< @ @ @+`0@@ |T #gQQ=MDP=as9?BR5vnNmWQ l=t._n*I=El庛eu䲟+}FQ?}-zp֒*2oߴ"]2/e^Z"9ooӰr٫?o?{}<7YZ.~z"%ӝ>{88Εo@2i|q3@v6?a4-UJ@?Hܼ>nμe$JAuSky*f=~fk!@ @ @r'`i1}-w  SoӎǚAҥՕ222PQ='`s9c箢g.o=۞V).?~&/4:sVR6ʆ~6EQCHT7z AP=hiP  @ @ @ r@C@, ՃCBٙb֨p߱?ѽ4ՙ~x)KRslL˜Au~" )wCzR@u) zm)˝fWWي~[ AOwe7t'5yҩ),B#.7:R4r^%IT,u6ǎC4wvu+[SZY/ٰoګ{w[1y1PjsQT@[ Mp"d (|O}XO7GfgJ'/]%{[`epPڠ ,+T%T @ @ @ [K k> P ~܈fϦAuA_*bo&ٗ|]e?wUhLP99U\h[}VUNh?g" v6lYI\ \zi@+S\u%7oT׆}:`3S^O[R[ҍ*j;̋S$JT7vyGP=bi] @ @ @ wr0Չ'ѣd%O;v${{{S+QQQ~z ]]; `i~wWT/]]\PQ=7д2=^2 }E7v?75X#cWS൹2WP]>΍kR66}x桝SUeц wWM0~ZB?]uh꺜ω{uNMS32ԭ]Q.b{r'qޚ4Seި#@\ ۏԱauرr^v'nM_Iys3jWjST7ayʦ)~ 6A @ @ (`iX|_0&ňgRiMu]GҔ%c'TqR>W4?+pUG#wgG.Bn% !~)-u2 󺷿[Fb+Qղ4SS9>u{e^岹Ety~@y|| 9S\+fڛ}tr@\ >==~Foµ9_?*8z_ )˝{_x6nj/WؿH=,A @ @ 7%T܎;[_ePߟFx$cjժEMSPx̘1t5y?<ըQC  OoOdyF7GGG A_݁2y9m"SmQ*hα9uGyͲFZz~? .d]j'm|^5nzSbھ⯉ ġv$s<;x|N3Er1)5=b87h^ңūuڨ WYOsOT?#\<=?_vovsApUT7෭(rNTO7b`*3#<E'gkES uy]u;^<_l!_;!Oȼm*4Ksٞor蔜*Px * @ @ @(.+쿯)TreX"mV)nA .Ў;I͉ WoS/##ΛGa VV"5+ƙ͹'ƺza(.ucpطzB m3~n򸕊JO\CO_4᪎ SZ⣙fߏ_KzȟM?njvAJe߮a+ @ @ @@QXa}8/nA= P,ŋ)88XVTTϥ0޸E ){+G:6U 6xcyf٦vzLA>ԬfyS!lyE;w]qe`?/аSI]p+79&QFѽ{dEt8o+WL/ F+}9>aW뭷M9>*L]t1ڞS GGGcᆾoLفq@:kvvvoҥy8?(4bRWVܾ}>C␛z^m+Z:9Μ9C~-ku0DK{ak+'''94x%N`ѳtb ]D?/ T)4ĝ3NtTRa"-Ǎ~ @ @ @EC҂c5%9|i{n?WڠÉ:y>r9ФIfƂ;w v/Pvz0҂ V*Au>G>W픚J#GAt=ZYg%쟛z^l9 Jovc+Wum$J@ X s_::T70ƃ @ nKZؿH3Y`@ @ @ Xa}M gTPvll,%''SJJf)b,ΕӕJjc1Õƹ8W>^ 4GGG:yQC1T/ܹsWhhD.\Uc+VH]tT&Sf駟_zu Au},C%MAuӮŋ)((݉on_6y{+&~  sy @ @ @ X~uO8;;ӠA\rRrtP۾}\,Ae˖і-[9;V8322dT 1Z~Ŋay v@ n| i @ n! @ @ @ "$P+s_}={VZN}:y C>>:qF=zPf|q EDDPZZ߿+'|BnnnroR|y:u܄!!J|,]49;;#J @Ts @ @ @@(AuY`8@/_ۋsP=##fΜI6xښL5jPǠ:uh=nݚ4h@cƌTWy0PMK,Au⟥V"~ߴ!ۛPaށ1 @ȧC7@ @ @ @ T;v,ɰٻᆱ֮]K۶mu}PPу?.+t[YY՝dݻϓ'OVigfϞ-;::ĉ7vvW^-υuܸq޽{Ν;)%%E*UCBB6üc4@ O n @ @ @@T7:B-zdH '-AuN!@?(F @ @ @ `@Au(X@(`M^x1#YYY!n'zC `I[ƹB @ @ @pT/\,SAuӮEdPՕ222nPA0.4zC `>W|  @ @ @^A} PCCCٙ߿i @% n W@ @ @ %zѺ8@ MΑ2"i iA `ޟn @ @ @ 7/ CAu-ZD!!!AuTT7!Ow@IDAT@-B4!@ @ @ PT/B@#ieʔ!MDo@,@Au 8E@ @ @ 1Ջ@E(k8Y3$WP_d #fFp <K5A @ @ @ ^ԯJxb Au+++ω Xrq @ @ @(:k# @PݴkAu-q7 @ zѾʱt9JHH !3/M痗ŮmKKћs0v\lXS/@tq߻LtNw勒+ХZxCqn&x i] @ @@@Pd^W mM>TlY#MDo@,DA{O:ETwww'ggg6au󔖖FIIIt-z%==>329/Vޖ>Uv"r5m;|J_PvgiZUfKS٠7 89S@, ;[cIMK^Oi "/7u3/p/5&؞guvP~2LgsWR{65y9 *JSnK18I+K.6>C[t);"7? @BT/>..8$ڈе<ؼr8/eP׷H]~fw:&[aA WlGWoy8zPN7.Uc:wg',vyXMtMWTG<\ў+k'}f?3PѝTWyѐ鱪e7=|}|=jn0Oҳ 5Qf @ @ @P`1, @ ճŦŋSHH9::BVdK2bGm X~ 5mܽ{+yzzAu%9zSbb"խ[7CmXY|+ȓ}~<{4cv'{iL"$_|(Jp-vUK7hwK(YT3ytuMN]J7伳]-pE iϱstf+ϓSngkN>;y8$/(v~r#UV<"K>.TVڜ!I)c)"÷n'A1k<4 nF92&?66>#xyP*eȱnutɛ(f,P|ֽwsrAr>/ڠz4^:32_ {SU\ R CS^·7GD~e~}w|o\< <sWū7肨̟!^s&yװa~C~G,V BM<2}4:xڅמ#?O7uq;mNX}Rj;CǙ6>1^ " +^?|=\L/ _V(;8||e)ەG?j!L @ @ !@8 nUzxx,Y[:]~-\S:P~e>M7eWn4/ɑ@xWq〶zA|zMC*lh&LchκJ]GЄ\Ǒ;4+MǼw#cSO4wC]“-S㚔[DǪ}3a'/vkIcfȕ_V;< 6)V o*ݤ[Hw'NTJ<fȢ=o9?{h >x'ubgD]Sҝ'N{wj` @ @@@PX^64 sHe(44A[' @$zѼ*UTS75TU?z(ծ]hQT硸q,nhPgzf d",PuWfgj#3 8Mմ{289gLmݯt5A!]ZPg@橰Vd'*fT  '6xSIn*:xޚm|T/O.L~·'7O[N w骨H,K\;{Dnmmldxd&FRP[׌Ǫw6T]w\4Ȭ+>&ǙsqsΨdtmVwj&i/YUmLԧ]#ug:EVlY=X]  @ @ *PTꩢI||c.* s +(..ڶmK+V4 0!Ξ=BDPIDEu<  @Ph^d3~tdtfqCWմ)M$´927Ҹ=d =GiegRԨZ9x?t"Eͬh Eɯ";@Lnl?Hߨr6ԮA5]P]?ʁa"Y}Z:&W:簾Ӧՠߺnپd̛YQ]=1D^! ß%_@*C_6FBu+*3WnE`$N#_F=4U秝mEuWsQY-sΞm>oﶍ6 :NCy{)/Wgq|ȏ_$~]u0Kݦy__/g?&@ @ @](i˖-k.y&B!!!N[S{Q9 ((,#""P|;y$]hwww2ecbb}y s_tq PicX[nK4z~@ ny(00ȡ n'zC `͋|\rTT?vժUhQqTAm?sh]QԽpaO˯}_.9<D9@⵴ u{`miuLnw҈ҕ7a{8OOK{x8չ_ٖ s#y T*3{8Ө]| =s] 24'kXVԡQ uY"}vywR:~\gIB^n'Sq38=ár1TԨ& Uo0_Ͽ9uͬ^!ğxcR\<\ VϗN^~H>a0}Au_OT+s埽«enSG?^lCN-c&?O7 ~(; n.!}f^ѷ}czZv  @ @ b(S0Qܹs)C^'E׭[eUXڷo 2TyXQgI܇T+V9[nۧfTfMv]xqqq2~ٲee昔s8GwCo۶,Y+ɓ… 2矫Ǣ̤mܸnܸAM4 !PT7bBCCbp4MDo@,@AyTϼ.}a #mH5/A݊ʁSejR<ӧhQ?n 6z X`iO(h`ԽE]u973:(nX0m{8y9G֩;N}[? +6E[e%?ʠ:Ɖ?ܝh̊ꦞ~P}x01S1!)E ō|EbjꮎնʌyYǓ_d%?'*<3fo>({ZՍ=o+qt\4]OHIwўcg)^fyn &DT[ꋛM>|pɂ?Ӳve;M]  @ ɓ'iڴi6jӦ u'8e;6BYNJg/4'0Yw G.PAD?~<%'g~"kXX 6Lp\zġvS?eTP|SQtLJJ˗Ӟ={6Yg6>h ]vahvY:brJS]*F˗E1f "+ifАrqqAEu( K@Ph^i3)Au;QYWy5IJT}~ji!~}sl:>Ԋcп 5tգ6(* 5evjnNԸz9uYY.Ӵ{o'jTaGT?*L94 #eSG?sY 꾴3ƞwnjMe=mB kj {>b:uX>x~)7}Z֭t귒2tzogqݳVTv0?M7S>j~‚?hǑdR2oogKI'.T)4&@ @ w۷o^{-}#Fd!@ p#Gd͛7Sm(T\'7779r$|$ ڍUU|LL %$$+qi>]rEVѮr{ZZ={V;<<su09j+~ѣLbhU ( E.[mg(n42z}<[N )r}aɐm~/k?gQ:u;i]_ȿ1uO2p,eG.Jzuӣ o=t&-\]jr6겡ykMXxׯ2AinPʽ,xy[7 Tu>JFvo2an-s2f @ N>Mf=|_mG-]v6a e0:8 (T9l9$k->opȾvL"9 /\kҥ_WN{6z;}hʕtu|׺ PϞ=eXƍ:w,01OݻwVZyj*ڴii[lI 8~BT J* ^FZ"҂UlpE@tH'w&NȚ=~N}f;XwsLy̲_|ɱ;ls 2cF7W7P{LZ+<ݷ={J˖ٿ^fҤI2goa,X:ԇ&z[ &^TD-E  㻾!m{Ç;}vz!3f[%ŪVLC kzzzփ^Cb}^umm`Q $ ]z 29SLyUТ3@`P]C-˜7mpֶ3@~*$ NPS>qy-䆋v'3> Wأ2knr5gD7n--;;pGұeT_z 攔r-)VP>蕷dڍfDX}Р{{I9WWdYib1IlIB {Yjr5_Vƾ OGCe.>t+^Y^?/M0@@@@ z=_z%TFe8|+Hko4b խ[Wnl رcBŁ6kLzWiZ`aTO㏏z]Nkժe*p`P=crjvX;?A>}HӦMs2ϐ7n-h{zYZ\v~և4h PÇյO>)Vϩɭjg/cuJ*m[}%~A:HΝt;|t5;;aLzd~c5k4HBE,Y@<"@P=:O4Ar"o)?3ɹ ZZWq3nܰU<|DX^L=+ׂ kek_usNJ&e^7Oꃶ۞!__ߠz|ɒ*낷=.ry>Ri*y4g~8A:jg TNo۽O\ΓoTۺ;a CIRq7q#X}A¾~yXz>}z=JEyi5dK!Ov݅y TׅF|ӯfʘoVt}2     3>k,SuZ [j%ݻwH3##C~1[[~sq7l r:z=m^rV^?sQF&wkWsuVԩc֯Z jl k OÆ uOH_}hnAp/W;[\ xeb1ZۍJۡ!M7ߜk}짟~/_^&[ dvhfM7$'N Twd̙f9ڵk'UΝ+/64쯡u>ת^z]j^C ʏ=Z]6ǡͷznAu]Vsi&ye:\M4p_zd7\?*UIE/heUni}hcb|?_^{k'zY&rSt\[Auþjos)fY՗[ޚ!W<ߕ.QdY#Ͼ+y >=vrg}sV~fg}>g~`6\P ߳O;Ek߮qV2 +ECn Ya Wo&ZKlm= WY}[$FP=Ҧ'}w͝Ƞ>Lכ>WZ5HN %K0_[ߢ7ey(mf_CǨ{zJMItbvtگ6׎WivgҮyC{W@@@@@HfP]kqmՀwmƍ㏛յMPo߾}2rHٹs#HٲYŀ4ahm^x\z ?3bu;fyߠom>?}YZou{UV#96^vNAu>4={lӅ:Ԅs37+vǮAN:9>lk6a#Fw  uukE;TOR]_ׯ/yh=!!A{lTׇ'auZwm\ xT롴8a#dm@A<TC%Opѯ?K.&M _D5:OPI%EC{ bkU+޻z VZt[dvZ+f]/Z}^cy X^M23O"Lg\i?]Z=X 7^P@U#[eULǢլT)_ uHS>%|xٴ]|.Iy+fk7p* Ƞn|!_]doyߋL`)in%>6#aoj_1XE?([wuW.o    % [;CN9lcǎ4@ҥo4|C*с~7xLpV6|pSZC z?>>,w'l}u֕fL>5U| 3f0AH<;Bի緔j5wŊi`ǎ揽$j'/h} !R/\ver,׾Lϙ3,!s k ^cffzk+t4S>`wE0| cuϯ2nx0MPP Au_  @C@*E͛g\?bZAΤ`Aulyr:Ժ2ǥ~A@@@@oDVSת+7ζ  >YT)o)f2hۮVF]Fۻw 6,vl25jեKi߾ kxYĆMOZ5^kkfoP=c ivX;pzVJn nw\϶hB.rSw^$Au7< >jsqe?lC8+ׇ>x'8 jGSs+(ꫲxb)ikm@}ꑙN8QRКfp'k# GI?hJ57Z-aVDv29Q{43S?*/3S52NLf˪gNq[e^|,^oVo^/Mը7/g"c>Y䡾ևiVyG\oVIT^^W^V},]oVn(7_T 5"V h1iP3Tб-YI%-V߃^y˩޲~-ֻdmg养wpEVطijZ9ۡVPտՒTQw"-<tŊKL5uS}Z8ǣ:]q{u0 Vyc_ҷӹ2պdI\A^gVVI^z ;<*ۃVP:Ank0ڒvmʻ_ɪ v}}@Hm_Fgj/Nq kX    5 Ϧj]vx'O-Z[yȑvl4AZ}ѢE2zhXΝCAW 7kLzm ە;oq7nam./ߠzt# ]3W?\yPC=$VwիT"ʕsjv2-[=w?(uDч$޽[|ASyҫWjW. z.{V3ugM:MifWnm;v0+ T4==]jXW6ArnL,sWϭet:֒%cuJ˅GaZyytIbF^e [%Je$ZEPƿzn}:O{X>jzf4H?fP-Qܞ+     Pd 3~zyꩧen}5~}oX+PY,s" |OשS'Ytf:SiYop:ƍmڴnݺ~,\Pƌc&=ajժСC:ϗ+o~#A>}*O>ǪaÇ#ݶoTiZ_+k뮻Lx?4SP]ϡKie˛0e||)hf#nKGvO`*xPu :zA9  d $:}:^ύ~eWUCk^{nZM]?{  @ iwNs9M '@@@@@ 3й~F[D ׿3-Z 7d}[o%~>bĈC|eRkW_}LTbV{}”3lV1}tꫯTߠz}Q;,ǦAj [2D[-nCΝ;lΒ뮻έM~c k%rǬW=uXe];TJZ}^V~DԩS3m^Aιk֬) VE7bT̓@@գ$k|߾}~hoP]*N?j eʔ1=j /3vjO5l0L@@@@@"#PAuEȐx}r5hv]~2tY:t` =ة5C0X 6̄/4J:JP]{ge:(^z\xf+N Grlv9a`Au]7Tݸqc۷oN]{z^ǵsNч>ޛՇ򽝜V7ˎ;Vϟo]ʴiLzm5j`Au .@J`cڶmiP]Zy>޵ 6M? ?sdWV1TqR8)n=FP=2OF@T k ^?4ӦAw2@%ĘXϿ7ʺaoFrHD}    D@a>wڸmJ.]*Ptߦ*:Rʪ˖-7?fXF 0@*Wl3g kӪmڴ1㭰ۼypݾ!r` j 5qƙ{Z"Y`5k:t?|ZX+cs:akTJ?>| z^~ Vh0ԖWP]ywDϛznfp^zb>QFAHN}Ѕ>LMq p>h~j0@t }{{5qDIJNx!狽C@( ']@G͗JJbRzetN)e@@@@@,PAuO?uҤI&&|5kȒ%Kdڵ2=z38ׁ7|uB ҲeK]=z,S)tB[n5Uv4jȄusΕu5~ajP]/O+VyAuݐD;SP]?7kլYSiG s9%D+![nE6l8rH4sa>}QnPCnQ,okEH߳E9ZTOOO7ץU5_F kH~PQݐ )Au?}8-33q6 xA2Lj      @t DCP]Z5[CǎH+kN:wm9 ;V.\m=A׿EɾM/Sw=۽Q󚟠0c /N*ڷzu$f:-!q A^zIM_}L>}&0Le !y k^ 4T3!p7 Tzjvm,x 'oqa3)ܠ _5Kf #DANVTOM"!!!JKw&'! @?ܐ@@@@@@@ Txݺu[o-#j2UjNG<,uĭ+ofݕ+W.W{u?|۝py.]}km۶Z jժ+7ovƁAu(c ##F}Q?& ݻW^xGƍJZ\[~=<`fX?u?5|nzM|!u؛6m*}[ZÇm׭[WkTR!`^111Q"ҥKMu}4^T)ȤIdΜ9~^-|~Ӏ^ڏT߷o 6̄7/"K~BͷO<'@P=2qSյT @@ T/#D@@@@@@ )nhUM6֭[M`]}kj<j>vmm(QB*U$Z:;wu5Pe-[&֦w}'SN5O7 j0[࿞PϯkBGv2av} ADӊz:h (3:yn=d`}HP=o3@@ T#      PT/ߤVovV*v[z=Z8`׏?x}@Gf;~IKKs$'k# {$s      DAsBv!#FLA"*Tm۶ڵk93G8 EOzT+O$|&AP=|OD@Tȉ0@@@@@@"'d,ZHN*{q^x\r%2@ TC_ӥfjYAu7z  a"      EO8x̙3G6o,=J*IrrԪUTY?{@ CzdTOJJ8)QA8Y@ `QZ5/.Lj      Q @P= N 9ꑝqǛbcc GF  ^9'      #@P=z{ LI4IRSSE%k" {ds      DA(9 Gv'KRRKLLN@IDATeȺtwm`z D. @@@@@@'@P=^, WHĉ%)9YLGdM@Auh@@@@@@( E']AAN%--MJYխTT@@ սp9F@@@@@@Kzt@#;TOMMx+^X1q6 xA2Lj      @t T xCz933S&񆤤:Tߒ5@@C=t9T@@@@@@Dzv@S#;㭊)VERJILL #dm@Au/e@@@@@@ ]烽AAtQ-[V*eȺtwm`z D. @@@@@@'@P=^, #S?aHBB#dm@AuwδNo      5jժy {ts Q"@P=1aDIMMuzd ^Sk;/!     xCk{(@KzdcjUT/]4#dm@_n_>Hs[@@@@@@o x-85o]- @txLz ILLRJQQM\B@+@Pݝsi8       UǸ+F(Lp:==ꙙcr{#G,=E@;|#      ^Zpk^9n@ ǎ'5k֔*K  P4s^ GzA@@@@@*׼zs )n[O6M11TTw@@ TwA;     xUk1yJ@ Sk7ܶXՏ=*1YDҟ]z$ n TwG3?Hs@@@@@@ kT^n_Kw'I:u[o 젺VOW_{1|mL޽q~˅3Gkך.K.-ٺ׊͚56= n5p?sLٹs}A7b@ ~m -(qqqRD n =h ͝#@@@@@@Zp,dPO>ҴilҢE7ސy9-m&AuCf[Coܹs< 2$rnMvz _{numq; P^{6ԩS%%%E%&& EO;4?Hs@@@@@@ kTkk޼y2~xsiFu%WP]7Ußz)ٸq棏>*eʔqe7_ɦMLEs /_^4L!`-}ѣ۲e˚ :u?rtu?waX$%%Ibł6*k7o,*TvD@ $_L2H{?|P oٲlȌ#  T)      /X4_+XQ <ؕ 3n>3fmW7n;OP6oߦ38C*'Ln7/Ȅ Ldɒ2p@ILL={M;vN:ٛr^u?}w&Z8[h;Yn*ziLP>8i]wEe;Fg!@| xF>y\\+4NP=O2@@ Tw 9BzA@@@@@(HǢZ4իU&Cu 'ާOiڴ+$Ԡ… eر&8؇=ެY3իؓ$M5{'rԮ]TСtٖ,YDF~jҰaCg=-xUzN5ym@ ^{O<0Au6 m$c@Auwh ͝#@@@@@@Zp,VP]cƌ1YFov %!駟~Z֯_oyJJJ+$ի套^2s {& b Eֶm[+7`R?v옔*UJn6B;-qFygEgۛE_|a=`S] u w/^\z!)[.JC"ҴiS{PÇ7jժɐ!CL䣏>2N'jPO kH]q'Tm`M9]7&̶eرfznݤM6ٖa _ȯOnkiӦIrry8*66zn`C@T;A4       @A x-8 25#-Z/\ʔ)ۢgZB rWH&MZ4y+Æ 3ЪZ]>X[l5ҥo T}H@h`Vr kС*\s3;FmO?m^}wtw3vZ9r=l 2ȇo&E333eԩxTTϓ@@ݹ4w^@@@@@@ RkhVAu C+WιҶlRzskkڵk;jeؕ+W:Z[ /ZHFmvsҡCho֬,JP=AIbbbd3SP}ꫯ]'5joP. . *6l'xL'  oɔjT+(QzR@@'@PݝK!?Hs@@@@@@ kTӧ4mԹ4OK,i*{ٝ#ժU]`/W^ye[ mռK._~tS[g'^R%{TR"%KW^qOMMu}֭['K+Au_!@D x۶RNn Ih ͝#@@@@@@Zp, >\4b yG~d;3WP}Ν2b9v옹x}IRRR8 NnAu]aԩwߙu7n,} ڏ[ v4DcS|ذa& {OK3ڵkPv{}ҥK3l)m5jȠABKPNofj&>>cDҟȌHa]@@5Pi~_헐|jX~+|QѪvՇZjs˓?6=׬VI\rvl. B`wOX^K[;)L,Y-H$G'VB9XYJ-J۰{@@@@@Zp rf/2P|As/^>>ȌvQ:ud klٲK N^Au;#3g4۪W~f/-ZT{VvZj2tlkHÇ=v{}PǏyՂU_ly@j'|9[j%ݻw7}^x<(z-͚53GnAcͲڵ/YO8 #G4׎}G|~L  7ib '''FPMaB@")@PݝiP_f$&&k쯘oP]? 7n45X9tNbUy+-OORl as]~sw<=3YbjMʝ]IRqy-|@@@@@^ }-?'_ U~E]d*wo;˩tkך/XO(-*v-HÆ ,Yb:A ?CuPj֬)~Tߺu<쳦 ~iIFL]Ν;ׄuޕW^)ߠ4{l6mY_@0`S>u?5I&ҠA`p_|a:Γ]T7 @BߎBص&3227x*U/Aic'@@0iVRPƚjTVUdC CpX'{-#'9j]VjըLk@CG#[wg}b^ОHR ,2     Dׂcn_բQ?)zZ[+nE}笣o1T4(qmիWA9+>}?,5jps%y k`^[^yf8c7%h _49pFU1'N2E{wJ{ "TׅWZ%/'kVN:r뭷:U AbpUZ 2>>MPmaC@"'@PݝSisJ?}cAuߊc~ sAѯkٲe~9!T?!̮od 2bN=/l%Z7vCx?_ʬ+=ami߼H/-{ %勹KpFu䮫;     GܾsѧN*6l[Ui뽴 ̘1C>S\C'|=+Wnׯ_E>,#Fp*ptMw^yd۶mҸqC%%%߯3g;c%''``n2|p+W]ularGʕ+k/]CΓ~wm ziFufiݱz睪gy\o>6l_%ث8˗/75t?۶m+zn۷o~،vEڷoor^}U㝅@)uq߼[j hI깒1@!Ui3_#!uZC~X?֯*M6o7'dHz V.k6{JJeyRL.t ǬXk]]iZhu?vaU_q=*i+87~Nټxj'I\@E[v5zÒlU7kK%w%񿬥(6lKX6AV:IUi[ov_f̪) 6tf@t+,]#OMԙ奻JV]ⵛRIik+cuiekZNvϹױ_ͻdE 3w>tpFy:a'7m:?jE0+䅷t`Uvb[ rx9rљ{k`|% _tƩVAu93     P$sZ(8(@\ ̷$&&4CPmaC@"'@PݝSi/ US"T}snP}U|ؘwe?rݡΔ+W_iUFn{Ԫ[+gwTXVYUozrhh\[2 ==V?p}bhnmjT'npW/%J5 yV;9ŜyZ!~e}δ`kT1rTͭz'OT:MZڙTS=0uyf9v?&/Z+hZôDyOggps:`@@@@@ x-8"{ap` (.ҙzjj.]:=5ߖ-[Gf$@@#@Pg?HZM]΍E5~#V])){q*ws^ڜ~3[_wk%i5deފuղxt9Y|)pU웟ۣVҩucd${3JEܦR̪μ.rso5[q\C-GɂL/35󲵦;hEtBN*ycZ}<}X; 0T+a%[]k.N#{ ȯ7K[&JJ3,ڛ6(F91     PdsZ080@\ LWSL4p0NԱ=)U+߷X6˷fr-M(fodv;Qa5{4W }/βͬ`M}+J`ݼ=[Ў @ Ήu%KH ݷ;Gn/TT igZm^{oVo.}Oɪ}j$WNf>:NTU</NAӚX!=/5ÁkڝaoIQ|m֦AeLp>}3?{5l0%ˈ~;b&鏿ʸg9sW('OUv^?t D3 ?3~ǕƧ8 lڱGg[*;z4{Xр.:T@ebHA+ǫհ ݵ*_rir~zuzN     i;Tܾ5  o䌌 Y)S(,QBnA5ov&-^RyyzY^ǰޗKˆP4WEvXkm`{'ΞH$# q`?HQQ۝#wpg(geBֱ~;1yoVVI%2Z>6w [͢U˗\oYo~j=pЌl=MWabLw#i_͑نE#] )kU@V>{OyLм|3IP}-2̪oCw]}zTz{=v̬_ta=pj$`^     PsZѻ"8"@ 75 oJRR$$$TJk:lܾ]VŊyZϤ[P}`KMzULaxm޹[n}r3!050Ŝ_}'I$# q`?HկTWy:{м>cU"OD8$lu[wX(tXX:,?-]T׉c?V>תAYocqֻ u"VG|*kίTENI&j%JRxxW ٶgYLOT]Ol3)0IP}ˮrsO,nl=0SsT[`PgIs䴪ιtY~_KB5̹hY?MU,7_G]/[GL@@@S`Ŋk\۶mK.uf"XQFɚ5krܨ!yG%6ֿ`I+0ׂcn_jv@B MfKLa^OC|eFCµ++#dӯ/eK]j^io}lg~nAug!SJr2oݯ>TQVX 0%cˡ[&# P$sZ HĪy{{ i(1#.X!YTnפV>/aKJ" |'dq't<Ͷτ#^-JEyG{vEJORZr3e}WXN^gwvɃfW׉U+Y? gVo]{$sڧ&| P95֢v w={}^@@@Buݻwܑ2D8E /Bɜe:- }@^{9y7$--M4TEV+ڛ%ޞ9G?6yEkuߊTزA0@",@PݝiWP.I0#GDj{9ҸnnMuߕbpINqTXVVqmg5#(^}[VmfQB3?_9KyKeur:`} ,iS|Yyiu~uLKkר"UM$ |qn6VN*+mƃ8xصz/2VT)׍ػ_57خJUixtLD@@Q`ժU|q9Hr] 'V`ر~7a!CPQ=G!fsܳ (pծ@P=/k;mc?)sUZ6-d?du2T؜d@Tw$AAЃw0U6mNd岥{|R${YmBWLNd:C+ktmAu6˟oK:4Y1cn9+ ^ Yv4՟{s|hs"G~TmYK/Ty:ynO8ar't,|xNY W.4>^[ݥDD?|J>UǵȀV*ϭO-wi g<Ҡ7>p+aϜ{:4{`IɚI2[Giuj3jP=sݷ~e;WrN*U]@@@@@"-׊! ot!jՒ8)f}c|_VsF-[^Q{S*$;6Zr^\(0rT:-o5"q{VȞ s H 䎮r=AuܥkeϜ媔+#Y/cm۽O6CVnjƋr dvYVV]q[~. WnZQ]g 7']5?.^)iӏV=rUϴkū̸VGy~av3#Gh^w^;Ie%t*OMjViP];zrݩnm[9ՕjV\6Њ?N62e*W'oJbpPꑜY V oi?Z7#w] k@nr1     EZk1鋃C@%pfʔ)zҥرcNI.}5|=o,_w>AlO"\~3>S#9l1@",@PݝiT_ b֟p> Yt4h |+ y;Z==٪>Kߖ\ĕ n6>E2+z8ޗWe'K[nGګ`uJnLN _f"3~ \UU(+m*t杒\M)Ar ~5hrM~=Tߴc3Ms巑 #Ŭ{oRݙjP=s&<5I8ݪJjrhw+@@@@@ׂcn_+ K^{ʹi$11Q1dx.nXmT 7,~jUTtfGKP]wKNt] ^ Ιvŋ0ETϴ kaÆ˽TO>)YմG'[$'Ŗ0iH{OKW]Oq{3?gjnKɫ SpXų?H껍edUỞ`j(M驟un_tƩrd[čvfvy/oLʶAkZ_ˡ#=3-?6[?p_[uj#ŭcm/     EOk1+#B@}p[P+TxbV_3QN, k%[㡚/.DGNX[`#hf9{lΊ  d?HӪu֕X+$fPU|QT~U:;ԨT,ժ~ V֙|Nزhpߦ3f(_.Bv;Ū̹ufrb?{}x δK:]z_w5 ?yʶĪt]t^>RT3=#G/3u2kol)&-ה>1V*W:+G?t}ͅrfZθ@~]2Yr69xu ӊժQmg=z"    MܾV4 @w~]=ɓ'KZLPoSno-lb?2#O* 7un+m3@uTU?AcP=->Y@AuwΜZJ*U$e˖ ΝacWT߻wرCjͭӼ2M{?c^lȡ{?  9HWuö]f?+[~GڴӪiBw~HCiU_e^O*'W g{mEr:wX׎>u ['@@@@@^ }{s@No-!iii'%J V/f"1+Bw=ê,AH-@(9n;wJbbSU ۯy̦Tj7n+|^3@@@@@@ x-8w _pLM8Q%>>z.¯G߳{tJkv4LK29QY EsP=c3@<"@Pݝ]mݺU8 *T0_Txq ;vL/vRJIժU9hzA@@@@@pMkɠ#@o}'hP=)Iʔ)#7TEx%^~X)[V(JG_sGsP=cs@< @Pݝ\Pٕ=ϙ91 s GzA@@@@@*׼zs )n[OЊIIPPQ=DkINK*?(_&c?)ǎeX\y}p?)V,FGy~G&WLk4޵{` a@,@Pݝi8       UǸ+F(Lpz &#!wRU"KʼnV$_aس/=DEآW=CTwLA;     xUqDIJN5Au7 @AuwN+H/      WWt@0~mqKZZ*[%թ60?{wŵqFp'kBKݍʥr~Jn]_Z([pI !=gNvclCM?MFΜ9= Y?" @ n͜i8       `W5ҹo@ uP=55UTP=88  O`D@IDAT5s_YH/      ]J@Sn7v:2jhIIIHPJ]B@+@Pݚ/Ҭq@@@@@@v kv}s )`V[g)zttQQj`C@'@Pݚ9/Ҭq@@@@@@v kv}s )`V[gegKBBIT/K999zy/p.  `Auk(4k@@@@@݂c]_7 @} ֙#GJJJ8*[K  0[3E5     UnK\Kw2pjp@@ gdVv RSQjaC@'@Pݚ)ϿH@@@@@@>_9sdYuK~/ @8߰zFdfJCEuq@Auk5''ǚ@@@@@@-[}gP}ݺu2iҤj;v(} @4굟5z$&&Jtt4kOə  `'6Auk@@@@@Au< @ T:;;;TEu)A*^[֞ 01vLo  @-i*a       tihY @׊@@jUxsD%**J7jA@[ Tj l픥2#}ҿ>UYݪ{'VA㪮!_]Z6h!#T_~iri9'By쨖+>:Y,6> 9b ]Wzڍ)[w0zseo^\T)Q&=^a~h*Hӽk7      > T@@0Ta)'NTюի (PR {I1pI,AAx;~3fVMuA gB,jZKАCV]aLz!|law]ɨdn8mt߿/=5].;=]Ԩ[,dh8SSs[LM^SftkoiWϖWZ.>%ܮJ Fks_     Au_8@/@PFյ;vIttʬQQ:,! h/{Kflc}ϑoF̫ wZ%5Hڵ ߗ9ePzDzU۲t^yY[4 OJ55{9IdxqK[P} ʖί9? ~U^мZz>^ݗ+l-GeҬ-n-R=A/W5 @@@@@2Q T*@PRw?^%>>^JJJ{-ְH6m%Mc$v{WG" Vl<&bC  `@;e%=%u!}^_!KmVx_ WR}{Xh[AtV!W/07 czVHTS=鱻7{5Gpy펣qlOݒ'O'[w j+瞘blW>XkȂ6cZ8"C>ʯ;Kd\Y'rVIK t^ٝWZ9<6*̨GUbْk9'AuUeņ}cozޫGH'5vɱ,[wj5/_o?_lHy.&GF,)7 $*"DZ4c:70Omܿ7tp{tlas]lSŒ"ZZH2፽yrSSD.ٛz+7Cyׁn4tټc_/=A}WƤרSf/ߥ^߹r X7b@@@@@ Tom! 7} ]Q=55Ubbb^ʥk7˷Γm; cubsۥ֧K.y^΋0YA@J3M{ztA?}Vm!},X9xۅ~_gvG.HP2&r*[P=:R"$QYv*\v_:T}}w0l,ց'?Jm\Ц*/+K(m˷1*/(+48X{P:Kd LWV!D7fʊ{SE?]fW\tRAgo꛶WQ}li]aቓVە<:(㾼i׻Ci]Op>^L睘*W Z!;.$nUz<*7h(Rz }ww>ÜDm**$x3n׹ -@Pݷ7n1HU/-[AϗMOBST`_V3_]wvܿ|}OsWN4 @uTf|>e9G ڈٸ_澞_ٰIe}}mo!ru߲Kdؗo6{_,3+C+Uu[/2=uy[uϵD$U'ut5{#G<K/iմsAQ{mo;TߙU]j+O<1v~[Tu'\p~ T_xr۞G?46׭FMW\_klEGUBs[)ҭ 协K Qҋ~@BW2_?7j𾘔h0S~p6l#    A@AƏ >Nߘ1c$--Mbcc$j*KvisO%sV)䂓HdxY(jڂ2l7f.>SNf@ePݩŠ=;\vCr=ڬ4LP26> wI /0o`o~\^(- z|zsWZ.>blPJnYK>EH;d4vLյ)TdOAdy욳];܃}{#o$ʨb?^VT/2BC=Uxl_A5naTߞrL?)i_Ԗc{p#pMfQ:$/=5]ʴdBZw_YlingU{ }EWtwԾhy8/<)Cݬ;d-y1fnW2g.ylg{+osrS{'x+_;q,Uoku{JŤר?iz"Lk`yޒ7Y@@@@@A9 ~$@P3}$%% ~8ʽyFe~]y's~crʘe$߻Zi$p {D#@/2>kZyb#kB^2}55hze*gmP.59!ؼ?;(ӗsN X{mwi\V]]5O_mԃ7lTzTV]>A_hj63$/,^>TyrŝC\woڕosjHdզ\yPU/,߽Mc#8o^D,]WtxtɈ7*oWg*uw_In:,|\t]/aaK|*Y9X+b㻵b^ ziԿz{cwg5u]5}5)uOǦF{ mirYmV@@@@@A6 &@Pݷ0aTVzg֯egS|Wt\^{O'_pP`UF^Yy,XAUŜm?_wU*f$*隳|޴MUx̕pi8N霡-hvVne=F]SǕҢj& $<4T6@L./^]*ˉ=˯ZyR"oö]yn)*vI%yc):o澞_'XyA'}͏Jt. ?6|z/w~Ul\n|zQm{Cˣ#Be=Wq[3׺MQKUrguAߟcVW"ؼ$ʭw0} Wׁ걏WCkҰm sZ&FIr({=̑ʼ^FHu9yr۫  FJId?r`åM6I.,(_MʿF/>%]P쾬ٜ+wJzݡFop`@@@@h;7 ^C@Gos1zhIOOTRyx2cOf Q7]+*`*_蘞('togrI~kzbmWЋս@򪉵AT?G~J/>-u[8嗙Kwxzcԃ:=h0g.yluB1-^n$5CC*:zTƧK+L_]>jѺ_Wu!;޲qܣJp-zxg&Q+6IU=:W͠@@@ ,[N~߱*;SsΩce @DYjca矿U)XW%XzOCG@ 6M("5l4.FU,UA{s德>RUU{TP“6 w6FxbVt]W?mjCl#@N*[,эǼ--cZרOO3CX䖗e]*$#B`T_ wJ#BCExN-U>YFs z3%!ظ_ap{eL_lƾo{/o,LJn+TypT 8v>oMzASt6;gܯ]]P=Y}O׫~ÿUS[:䍻)nZwW2~S$/vh}Wt5p~B~׎09O+6AV+7Spu#ČC >1*8'Kǿ7B4Юxz8 7jN|j$_}y2s?+;=tޞu@@@2?/jَJ֮LK*9.@ڧeU^~w$::6D 01j@Gos5vXIKK( zuRe+fPֳ]F:8FKUAuqNjف3ei~pجPUk#yci VuGw_2P`hFyS[6 O:Z= 2kZ4{yNלcn .2!}'Iq?7w?k6J g=rDG˸?O7xsOy"s|[Ltlw锖¨;f.Yָ"Au_踆kVes/z Tv.pSsPU N+ }HP_PIkeepZŽU7A*׋&6C5 _w>CUQ5r}A娈 5cG"~cSdAl%5 {Qq\oǫ6}Vǣ/$ʼke>z,,s0tp;{e*O_]~Yf.٩>A-\벇m]=&9[MߗGکzq73d$kw=ૉkT_{#'H#Lz,uy]]?,b$6@@@ +7ʈ_W1`@O9㌊W{@!knc]'aaeg^ec pn0 &@Pݷ 3fdddHdd*tLPp6Sfo ȃU.*ṖƵ)w]|3lTͱ]۪f@~զm;U4XҽM^_zPMrsnUI(Z7ڼIdR, kT_zYX>?X,+6=7slYા/c8_mꁤ?{/(+b۞?UI1=}cO֦ٿk'Bwp@@@@hxeT@8}7nQQ=&&F {ɯ3di(NnG܊zwSf  U Ij6o2cS&RZVw0ow~Xᱪb? l[+Mj逆}O;= W=YHTTqB}^i%o=m/gKҫ2ŔE'ɕg61ݦMycԃʆ}BCCj6tU?:"T50WQ υ}_]>7۟-l@C : _~):5ջz`Hw342cj,j)\9^1#    4 a@Yo3aILLAEPo$U%Oj ͌6V~S,`ӻCz\cߛrz>g:ylgtؽmr 阖 Z'Ki*ц @}8Y{~ܸwVv58OpKmMNH̵^Ȓ;wToв!O%N1>]>gyBcH&4o)[w5ڹ}=H-VS 9bP]_V- 廅E"]U'"}ctj& j#ͣDlΕ_kĺ˷6Iƹ!?^Z_aapUI ޟ_de?A`5ԧ51}O#O\b]y펣Ort<9uXU{b8;Պ7ʏEHyfhOUM^W˶]ꓔyJ V;I|FJtٴs74R?C,( c=tKC嗻.,'l_I+=ИKDX'ju]l`D9i^]tW:,לFjn     7~@7͈BP [e *3LSt8O/V/]˯Gw 9[;c ~5Y:XKLTڧ u/!eڲ@F̸C6A?Kx&y݉f_AtS?5{Zx׌dҼlkV[ OQlVBB܃꾞~TXU \Au}z˓ Z UsgP]yIŇ'CKre )r?C5 :8\nɕENcG" [uX/\)\,3"gYAZ9k[ʳw `G:֧ȏ-Zj¥{#Ynʄ'oQR-?7Au_/l[ݶ6~e3wL(z7X^H/^٭{ U"^N[tl~pMZqXsQioՆzGw疾=Au}M6jz}C/?LUm];+Aml|Ch'On=w<5r,Yf$6BSU;m\;-o2M3;V{\kVesk13O9O "]BeլaN*pU/ =uVk}a!:1F>t$1N!Ow?XխbyoS'm[)"Əy*֕߾y̒kKg<<澲iםVOqo"zVeBc#d`$*?a:i[$gсh~ Fo,Y"<ǣC矔Ɣ(a"zM'OoU^M¡EݭM#$6ڳ1˝U0[:`MʄkeoVtuu4rDK#75 _yqgPű/yjjn= [wQА8 KҬQYxDZF\h<|?N6+ %p$gs!7s@8UC<'}{SF~@㜛=YW/֫e~eٯ{PNkBPhbMP]w7,6GTz%_wO(A}q\eQV&)VRTe>\+ַWsF1jE5Dq@t7"kCԵaHHO(xӮHGTX]NhUye{w.^YGjU&zrv0 {?R    O16dO7mɽ! O}qAXPUh<٠i\P8@uic[k$6m51C3'30MoLb$U` ٦E8yfҢqoۮ}7bciE`%>&Zn~1K6mP%"\jalϋc?s C(cG/d}%-^e}拥cZDϛ}aam mL9Aoaszi-VS 7b[Vz%_w>xn OuĘ@@@@@@?<0 @AuVWTOMM!*NP:b\pٝߣYXCTؽxao"d?\P} ߤ嗨pyt?Gǣ^:{GM%22zSZ!wmMT^f`nry믌A~S:>I:J>2wǃ_|GmQ꺒`y҇*bm^$:)6       T`  4PM1czLLZ_lܾ0-Er%gѝ2̶ c~&sW3q<:dnlf-3vnԍ{qAuFI?      *@P_gq! P6:JP7NF@;Tj [%I?      =s޹k@Nocƌ6mHXXT͒@@&խhVI      `Ow@ ^{k)}v$^{KD@ Tj [%I?      =s޹k@NoǏ *Qo]Z{6A0k= @|=TJ~@@@@@@{ Ts ԝA[H'''KLLA{r& DUMP*IA@@@@@)@Pݞ]# Pw}3fnZ  `VM2Au$@@@@@Au{;w @ TZ%**Jo 6 n$TJ~@@@@@@{ Ts ԝA[;N8qv$^{KD@ Tj [%I?      =Ts  DE@LƎ u#@P*gVI      `Ow@E +;[$..NJT l0@?u@P*IA@@@@@)@Pݞ]# @d))))p8(8@@~[OP*IA@@@@@)@Pݞ]# @ʒT 5h*1N@7VTJ~@@@@@@{ Ts  (#23%UUTzLD@ n?Au$@@@@@Au{;w  PRR"FDz LcD@ nTJ~@@@@@@{ Ts  (FPݡ*;N R[OPGzA@@@@@*@Pݮ3}# @ʒUQ=&&Fz2N@@˖-sGN TD@@@@@l$@PFͭ" @@ dggKBbDGGK?WTH]  ZoKP7?F@@@@@.@P@] sHT ߊ@@NNq?m       # zZZ8TEb>a@_5s@PGzA@@@@@*@Pݮ3}# @̔TP2q@O5խq@@@@@@:7 @VV$%'KTTTc  Pխ'n#      v nי@@ PFzRƊ$(8@@[cOPGzA@@@@@*@Pݮ3}# @))p8zLD@ n=Auk@@@@@Au< "0"3SRTZğO̟f  58       `Wvy@E`$*ʤ1N@_TƑ^@@@@@@ Ts  (#GJzz޷QQ=Pfq" @ T5     Uxs  ? HQ(QQQ&y Auk5     U]gF@@p:-iAAAa# ԯAuk [H/      ]uo@TOJJH %(8@@[cOPGzA@@@@@*@Pݮ3}# @̔ #(8@@~[OPGzA@@@@@*@Pݮ3}# @ 8N5JRSSEoz cD@z nTƑ^@@@@@@ Ts  (Yْ$QQQ$A%j`,  xb뀠5     U]gF@@Б,IJNa z cD@z n ?Auk@@@@@Au< "0"3S%ZUTW%թ(8@@[cOPGzA@@@@@*@Pݮ3}# @zjjDzpp0A@8Ɖ '@P#T߾}_^rssEPz&뜘IIIf͚keMƸ#C N {Wo./Y#쐭IXhۿ1=䃯&}ܻnfn     @} T  @NSFmo6U[q@0>իeǎ/CBCC1zV!uI^^ٳG6m*~R?;[kDW2N{d•zXHyƚvwDx}UKLd4sHbFrl6Peeg㮯x}lw}ذmOkeAci-ʐAh4     @} T/y x'*F )MxwoEs@OjVEs:fILL!*tKMbcܴi*n^vUOXk*Tj\4/D]/p F74JvA'):zlcƭ0wbO锖`n_p/,4&<7|Q&\f @@@@,5_@'- '%*CP~@j(@P`U4:>oW @D5auP:HTTTw^*dҥrG״#^W̕b"-YYf/_g^o:WCCcKRQn$e>'}nܾk?EWYoU婬ۻc2Y&LPIo\]0B@@@@@rꕻ@YY*}[ef Aukٳk׮.zP~[E]aʂ gϞ5Eד+yr\6vʂU5՛R[IV /}y2sZٺ{,&qIWm?lx4>WSʨbjjn=y/d =%*";c_a|6ey*)-*6:!g^u@AIVKuܪzϚ̵@@@@@@HzMCE@[ ̔TUQ=&&|p  Pc5&ϗ.]H j꠺TAb)R Jn*kPȣ?*뾄 _9HRʖ?)ߪs _Z5չ *MP]UXT-Km6NnX^s[!o6IVoߵ_qtq߻KUm׊/qmʭ,zt0[_H/aarc|{ٵn+L9mggnuR+/;lQaIT8]!+/^S<]N;±vTXl./A\2S%2AZ ÿl̍K^ᯅs7iinɇ_M.54;.:U:JRvu@@@@@ l1V@ތ=Z%::v{p  P;s+AEIΝ=TwUUw]qۗv*O\?X2Tpfʄ}WzS*xmloBЗFZ^%Fi+?g]xU\uEBBM#R oL wmt5ڨnǿΔ&Uo[?YNvDFHNҴQ,\IdKkTbj&AuC*+6n5rttc? VtN 'V;wyz0DQƾȇy۫6Ev/}oT߽]Jm굵cٷ?_xVI]{S4]a KN9ڸ _nF|a4o"SkG']fW̵y2+     @ T c  `;#FHZZ8*na@ٻ(Ϧo6 $JU {~Ŋkz``'HH@ `C *{M69g2Ȕ3g|p? Y@AV$f͒.]쑊fߕn"wqoDݽC#}axu\`l~Hu\VUFZAd]Q|gk}+?NgnCW5B֎jVTߋޮ=(9񐮢McZk_o:tN7g [ǎE=bt'k$ZѡU#CYY>eǬ ?)7{UuYˊ?Wժ> 8h9.yC>KWXřwx C]^| |#پbnϴi!A`6O^5YU \([w4oxK 6> OSk1 UOzQ/< x2>eyEPf;/$TAΙmK g[c+̘//crc~bG"$W;6jWL~`kC X5 hHP=XptHm7&ϖSf%f n 6^2z$Z'M.<`I}խTN     7Tf{@@Yv@@0 Au{{ &[5TS7~K4g!3zg}2cM<[VT8X\_g2srU~lٶSnߡ~f/T;}zINn:ՓCLc$7s^oc̑A~o5Hϭ"P?e9V;Aq4UP @\}]U\|_xx'2c_Z yU)<ݧRurJC?^RQ<.:ZwB*mT?SE__@;}3HTmQ+@@j7o[59cN @W^EU{Q]hZ,m~@@`oϗ9!0  T=T R^9F~.o 4ϕ״CuAG~*,_'K9ƶiTVÀ]FZ.8`Y ¯^~_:賢*rDž'aڛ"jmܽVk'<^k:"koP]Wߺcu.++ë0k$1=;%'H{s!nJ@@"0a;klگ_?klA@뤸Ƌ~7+ TfA@M`ĈFE)S m3  !%nc`/MTo,pHbItlj+-.Z}rSCeֵ|iRʼ^FuZݱQU6Y݃Fm:'+o|4N<7\Uv5tJwq\|)נzU[e]6⹹>ңcuխ4$ 57C}~ Asd6~_r뉻F@qofS7ouz;3##{[mDP~25w'<зޏo?/#??wӅ:M[;"#*UkѐzXk 0\{Qr!]M;`=1QQ/W#!{t=:W?Y}s,(Ye}t}2X&v U~VE^U,M`Pw    A0< (((#^ZZ*rҝ `,  |bs@P^3}kd50u<(׿͐dO\yVVTH[v|=o&h,]֯rْӮU/LUqf\'     p2 8J ??_%..N&f@@!V=TܹDK,M5{lҥKCjs;?8cٶsut$٬e޸U=OߠG?N|f7{ϿVEvozyșR    A00 (,, qY+&d!ք\@I,iwP}̙F\#Td+Kg͚%]v=6 TXD_8u[?A!P n$w^tUeT_o~t\t߲_]P}~C+7^(mRLUaW TEn*AuOeO5yںdT?C(sWs~U ~/-S_9X8$7\~jo?1O^};⺹1:7}꛷'u.]il3%#2Z2VcV@@@@@0 fp@@q#F0ꉉF{a@AUzޱcGVc;TsMPɳZw]t%\yYUq:\mvD@@@@MzE@ ꙙxD7; ~@@MV v,X -Z$z}YQ}ƍfi߾}N[ɪ wNN6@flVcAxܱu ~QFq$ >!b<պuEV%>.5D}WoHꏘMI2T{Ξ^~Yz:7lަ^d̳v~Zi,A\ץ1溮c     A`9@سFP=!!A=M  Tg@ڵk%55ժn͟\bu5III1O`WYPſXXl`xy%&*      4Aj  @}F!:CPG@ TgQ\Rn*WEFFoPLl"֭xiݺ=7M/a%UAᷥTU\쪦/      Pwu%  :#6M1 \@J=ӵ'zdfem۶kHݼ+П:~уoݽK\rVrJdD16@@@@@@qS^! E@gp$==]t'::u  8[=󿧂^A^*$y$es9s     A T#U`_XX(FP]z5XF@LDp?       ; @@ tPݬEP='! @ TgH/      S;uo@|СDGG Ap5Ɖ M*@P~8       TNy@Aȑ#%++K60k@\=S@PGzA@@@@@*@Pݩ3}# @JFFnq\*WK( X(cA@-{8       TNy@A@GuP===]!Tc  Ф'n#      N ԙ@@ \}o zD@& n=Au{@@@@@pAu< "v%""B1N@h2TǑ^@@@@@@ Tws  ^WF%?TYc  8       TNy@E@$>>^\.e' 4Au{ H/      S;uo@BIMMf͚Iyy9Ap8Ɖ M'@P{8       TNy@E@WT̔*ˤ1N@hZTǑ^@@@@@@ Tws  .#Fl1?TYPSMYWyE@IDAT=6&J1ާ?3֣##nnbL,'Ͷws,k\6})7sN͕Sf˘ߊM9[']򔚿+^/ `j?wʵrìrwv]VM#}i5xU       @#"F%@@ ZJtP=55Ubcc%R#""7UopɎ;DtPUV!u;TH_kИBn,yiֽ~x1ֶӟrGJ#{Zʓ?_finʣמ'uHufk7H̷Rwm Z8ϻ*5Dbr       @ :T233,.3IE )@P=4eҤI(mTSAu3^Q됺ڵK֭['6m:]4J9ffw-[Y+טrPlRS\;vcWz6H&aogXcj9~cm+ ۦ42A!^Sq@@@@@@@p+zBBPQ=\gq# @ ToT:_N:6? ͊:m63gӧRBE%2i"k;JǴֶ^h  cpEȈhc[NC]1\^Q{:ܔfζyo=zIpI׊^%\gz}X"      ζ >\RSS%>>^.38@@I7)0at]bbb 71fX}Ν2c 9UY׽SZہ+Uw*YKd杳Iv≋ mKjR2[gr{~6DwtU۰yRYb$'z#QJjP`lٸY"sۢYtN}NxAO+ c8\6&],Ju+-hlqK'5zq3 3G^'>mRYXJ6n.mRyPis_/e.+n0w;EXX@@@@@@@S //{TEuqPo! `   OBQ8qtMuAAⲲ2)--b9CFlPH(#uTDYr W GǩR-t]}%eJǪX'KN:\.9-]#\P/4K]k6l{^Y_$>6ɃzLNyF6dyz TUL_*~OQUnb,VP+=:V2JMr @@@@@@@ 3*NjQtRGl*W%>@@(T`KU@vE+™k:z8S^~ow%g?{G#kqDF\W١֩]x8kc[m`u~PǎIwlôV]RkNlؼM&^$6^qj9胬dkZi/mRI ~m,[:C%;U}~U#מk}*_.?o޶IฃmRk]geeǮ27el۹RiYGV[Q HCH?zsR[P]['O+WKoP}37߳do 8C?X]˽Wie@@@@@@@`r ̌ sEtA`89@ @P=4gyԩҥK=RQ}֬Yr*ؠꐵOapRK?zy)/e9W4kLo~r{R/1{/?S^tP߷O&;Tm|h#d]x٪ursyy=Ux\%0{)1>kk\;W$oUQY^A#ez[;Tw3 >'/{-ٸu5u\qZV敗F}gL7 _2IobD%O? 6 SV@@@@@@@Pss%++Kqq"3 .@PvhAPB7ĭ}g}ל#=:fa12ui}έhUӎצJotrҡw}(Wq<93eƟF3TkU&_bV~H.]a4i$os<0:_德ޗ ZTwfj޵4UP)HsT礦M[cS.3/DDr,;vʭ/5]~A1/|kämg@@@@@@@=!0dPP{>@@` IPb^ %^/q1~OY }Q2bUoN~zcҜE־#G}ivM+Z%iU>?_V釮>G'S^,NWY܏kLAw]^rl%xjټmlQn!fηTw~78lXʵOё2*_`2kϵ"g$9 T>^""ۉK_  w Ty%^1/u`*B辳L㴹.ߠ?Nw?۴-;.!-*~vlt Qffwd[T۶N;lpq]zʸ)s\zu.5YZj4lB^Յ>T}5EPIHsT9)ɒsϥg;Xg?!o}< |2^>iuNF@= =jC+5 ToҼl._^qJj}+nǧ?M?g>qm]ݷ/Lוrj7vz!U|˼^vacEvjzlݱSw/m[7}+U_yuDW/R[EP=LT29“嘞mse?IdER-Qt]#  ϟ/vn裏N:CCh"zK/^\uEJ*  4geeGUT9ꍩϵ@@ ,T :G+z 䄃YvV󺳎{v G`$k\pE*ֶx_73˾mc;fzE>Jf-.1쉠_Gn(kLzek^n;s,k;h`Ȏ%+߃9/j_ɸ:[zeml߹K\R&͔k7!^#ɉ}l        )qqqEP!  MPb^3lZaQ]5*IWToޕ6[1W޸ ibw}o6[?;eo.3A~Pz J=UuzO՟)B~6g+W|dk"ڶ;Hz}{w\oOTD~M>#;Gvu^Wv*,Eȟbg(^XZ'wZ(Яwu}RmzeDc]{}rg2Ok}W%tɱYA@@@@@@@Ctqݢ퉊 <@pAМjҘAu}[^̗+V[%'".#/[g>@=h}]V^|?y_SPAuߥ+<_`WCE\>?Yr?ܔG+O?R5ٺ} ~*_jA_f̗'j]#F5|gJUսSˣXnዷ^"9ZZT"tg%ϯ{0Auq8>#zΑAu=zKV\~JoiZf/^.|#ƃ#g/G|҂߃PņoPe?YK2JgtzIakc>``@@@@@@@x,)  ,9SL.]!U;7d:ԿtX}֬Yr6F?_& Pv)ߩg}kRuH;~rpl}z_gȠEGK׫"ڧOVh7cb$6&JojAuݱY KW4PE(ߎoz}}337lP]wnψiTc)7)9J?9 oV/<,t%JTݬ#       `OP]wBP N 3Hǎ%Z ڵKΝ6Ao&+}cM/;C\yKUQ{ۭ*>tC`y~=rc6\*# 3T/ )[.9pnX}6Ϻx FGUbMr͓\YQکVCItuX:g7   6NB@@@@@@@@ Jjj4kL ;hU@hAq        8F@WT̔*;fֹQ@JzP|        1bdggKllq.UV< X(cA@-@@@@@@@@@f|ʒD*LQ@@B:O         P>rHIKKCPz*  ` @@@@@@@@J'$$JWհk*y  :#        ÇlAuEP@MzmBG@@@@@@@@ =Au? ? Mzݜh        (((,qIEu> 9 Uz]h        NϗN}o@A[t @@@@@@NM6b?  @1¨ eeeC`N (1^8@@@@@@:< "PTT$x.8@@ì5<ر#8@@@@@@n@u]Q=##zOC@ n\TǑ^@@@@@@ Tws  .cKKKUPTǑ^@@@@@@ Tws  .#F Au*ˬ1N@hRTǑ^@@@@@@ Tws  .:#6*1N@h2TǑ^@@@@@@ '? ^TT$v%::Z16@ LAu{@@@@@pAu<  zP"@@iOPGzA@@@@@*@Pݩ3}# @蠺YQ=**zLD@ n=Au{@@@@@pAu< "/:th!.8@@IOPGzA@@@@@*@Pݩ3}# @8x^9rdeeFP=f1" @ Tg H/      S;uo@B-.K\j  `,  |bs@PGzA@@@@@*@Pݩ3}# @8HKBB1d0s@T=q@@@@@@՝:7 @~~o^!Tc  d'n#      N ԙ@@ \tP=;;[nDDDAp9Ɖ M&@Pz8       TNy@AʨQ$33S60k@\=S@PGzA@@@@@*@Pݩ3}# @J Nj墢zLD@ n=Au{@@@@@pAu< "04/Oڵk'IIIR*J'JX@@@ Ğ瀠=     8USgF@p2D222PQ=\&q" @ TOW^-K.͛7~SmP}󜄄r˖-szص|twlLyLJ=T5n;_);KK%!_qtI)P 9n‰     @T`  @5CLџt@@0A ʚ5kYfƛQQQ V7\Tl"6l-ZHNNNp7.S_E%4F_ёc̑S4ߓ.wk/(N8G'cp\mB;vI\lbEyd6Um4zrrDGGfX!uKWUߵk[Ψr&^AuO~è"Oz0[UPwrۅ'xTu>ޯTo@@@@@UzD4@@T //{TEuǡzNG@p n,TߥSNvoEج۶m9s!Rnh{3[-eʼ%־^]KVֶ^SگS7,Y!3}.(ҽ^ccPۧo`pݮ*yeWm=G2{T9     ꎙjn@T%++K<t6 4Au{O2Ew.111b].WCfX}Ν2c 9ʡuOLyUnDݽRUP}& K2ʾmxM[dҜŲr&ٱTR<ݮ 座dδ˿ֶj޽Ozkioزm_SF#pj-$u)K+)#    4AƳJ  @C 3*NjPQ!  ntT>}tM6ݥ*]\\,=7{ 6Āw?*D=&byU'LRt\ڦ4s۵hx^ X<<>V9OnIdV@xz ^_zRs67~mR]P=Uii*52EZ2UxKN5Bځu] c&Rπ[@rAfTW9\#p7ѻ[@%%cT^߰ewcZk{79NYK|"}GQmfKdS(RUg9,gXyVN=O=弓 `DPR"-dgL6KRf]33~{rYC?[J-DjkzYF?0sg~2 lY&swhgy)g3խYk/ѷ53m/ pcמ-8}/Y-lZOyLnl4 F֩=/dFsyy; iq?*h+O=J~~jsQ*1Z9E**OWk^!؞BjS_0تUx~TW?pTsO7R$w@ eög 'oOl3}y|' CA 4},+l*a3D3Sz]оPڰEF]ci     @  ͕v%ꭲf@Auk56{L_8~j}|w\8_?>!rو#ܻbjSSeiԃP ǚWۥU۾Ҽv^*P.+ukIpP}CO-ۋݠOW3晛Η7ޠz5pko6WuLy_B~2ˬ@?tE/;Thj9ء~pP9_sڹz;}}V[ G{MB|W֍>Խ.T#o@@@@@ CK  @kzPݡ>jmkmVOJMB@+ E8Қ?{O5u'~,?,]hn8z} 2zܻF3s؞Ձ'A ~x V6s9ftW-isSFP=&A _+S7[|5[םw(c >gPt,ZAUJ*tWB[ʜk`P}ux5EoToלU-y`aWMSm~_TƶZ{ %kq    @D ,_\^{F~'駟h."K/$WnOFۯMq\ufDBP]'T& 3s?!'kn)][/4 ?Gɷf?u\Δ1>+5ɇjT[WG qKn)/:?|H9WjULG//XN~lz' Cs>4~)r}c3wZyrBmf-Z} ϔsIɊ(GE͙ @@@@@5OB@Z"0.+K|{~-Q@Auk;AKvUZPZiɦTUU,Y" hIWm~O[U{O**̹q-)QvjivJ$\sv"%*Ƃl*ԫz^>b<`TCA5m{_bS;=n+kfVK7^Iz_vک/*te[qq]{/qW'5Vқ_ԟ6J]U-~ƭ[c;?d     F  -VSRRQ܆ 6 n͂[T_h&W!(ӚG/^,f!j: WNp7x*Z;R#%& ƂmYojWTW[ỡ eD[J7/̎RRpP]qůtGRsWtɩٳy)\jU?h.s1[NȨ⌍2@@@@@B(@P=t X -bFEu P@o֬AuUO>j ֪D/[,b_Y"?srL8xg_Ӯ8y&π*5{rLj,Yεh-0=o\ta޽sk=iB뙛o%k7#c^ܓ؃?i׼v#5f5CH.=lvo>_WPxR[&͜/Y}g?Pw=kĀ^rE#̱|.,Y?7O y͒?.5tu_ԣMms'w(/vy3_ ~h?Uu=3^WkyZW*#WUTVJ.\3";lj_aC@@@@h{#O  PY%99Y\.!/5# [ XT_rtY՛[U]w![n^XQzQR&x閔 *n-LhWR:z\q9t۵w@WK-ivvCe_6KVAztJw|      n%g  A*{+iiUz- CE@ nAu(߶m-LR7>5rPWTWׯ_/:u      m'@Py  TOIIx!DA@{ TfQmڴIJKK%))I<DGGmnPJJJJPnt͚I       e-#@@ $㲲$33STI!!S@[65nʨ~ >@@@@@@ ~kˆ@@CK񒖖&6   @#iƥP՛1"     DA^< ͕Q#UIVA:fN,V  k8       `Wv]y  "999*G2AHX9ƈ *@P~8       `Wv]y "0.+K222ĭUTJSQ=Rq" @ Tƞ5     U]Wy# @zZZzTTAHY8Ɖ '@P{8       `Wv]y  e DFP=V1" @ Tf [H/      ]u7 D@VQݧUTwp8) 8@@[cOPGzA@@@@@*@Pݮ+ϼ@@ RrrsgϞ(ZuG j0@P|b{@PGzA@@@@@*@Pݮ+ϼ@@ R㡢z,D@ n?Auk@@@@@Aun㡢z,D@ n?Auk@@@@@Auj @UX/Z czn@@@@@@ u7 Dĉ%33SWVVZiF,iU  {?G@@@@@@@@} IFFKLL A}@.@PoG@@@@@@@@} % T@@@@@@@@@׃ 7U@@@:o         и&G 7U@@:         /<=z-^:KRg! @S)JA@@@@@@@@; T M d*"        MTP=33SN.@EuL@.@PVD@@@@@@@@ &MTq\+0c@hAf@@@@@@@@l%@222 n7" @@@@@@@@@@F*nTT!ng  B-6@@@@@@@@@^^[bccm" @kF{@@@@@@@@@`2ydIOOIP}_p TƑ^@@@@@@@@@`((('.K8-K,V  @@@@@@@@@aIWATzzC {q@"          I^v 7U@@         >TP=##C\.DEE A}q@:         а)SHZZ8N Sq@ ^k         Pĉ%==]n8*ׇ9@@ Pz         ,:tj{q@+@PG         @&^8#  TOs         @@~~dddO:յ X#@@|R׃#@@@@@@@@@ X //O%!!8#  TO%|mڴIV^-;vLѬ$&&֭[1        vPɓ'KJJx<v!? 4MzӜڣE;tau UVVJIIl߾]TPo߾1f=s ̟dźͲn6EI]:$HrĠ^rʡ'@@@@@@@@hI/-SBqAP' FOZ{7o,*,NS%**J`s㪪*)//A]nYJm̍m' 7sk5@@@@@@@@Z#0aTW^@A\~A$))IbccEUSWAu#Q޽[ X9䐦vѦ >%l3M\sv@@@@@@@@=Ar Ozxӥ_~rz`EبeeetR9cM()k'Z؎G9nAʌ˛_ϖ*-|ol(ѩq'         L8QNzt>ڟFz?kMR\K:z]Z>0S\θz ek7o;-bc@@@@@@@@m$33S%**z۰@dzgϖAILLTW!Uh[+j .C=4&E2q{riGNU_r>S3嘃U7:獃/>UbSOfSHʨӏӆ|斋OjwE9hwns<7v*صjJn{>Om)4Ϗ{蕅ֵzJ$yK$.6| dYF\KJ?+&?~Dڙ2y6#*Wvylj檪"]Z{pP]UX>x4yw7_$}}cv@@@@@@@@B#0.+K|{ -^GW`-s.@?ζ5=1e@F^;JdU]]m=ny:}ʗ˄Og>IN=@XWsΘݶ}x]N/3kʼnRT?$*φ        ZlUQ=%E<^/CKM  TϕcPE+<^[ԯrUۚ[ɟvϔF[VFyMrǧg.\)NHmR ī6-7+w M;乂Odem\}0[spP]uYyO)+m܏%k7K$/sy        @%##CN*Κ@@`?  hjFX#VdH,YD nB޾/Wu)*n&'hG3D.8:        @[ zJJKLL   @ Tϵ[t$%%Ibb^Mݨܪ{QQ}ǎRXX( ωjKQ޸U KĻjM.o*,rrzZwfU+ݓ1z͹w}gVC=.1Al        m+0.+K233“֞! @ Tυ+**6fUu#n|k/2ꪚ{ұc'C#XP=4OW@@@@@@@@ "KZZ8N*7v  `o*T^\\WVx<]S A*xII^I=!!A92\wf       #+)))rDwZp>ApZ Ƃ JO=P7oެHR7fe8]vflA         28999**6@"  TOs 坩?=cxd*G1N@h7VTJ~@@@@@@{ T3k@j?^rIllTc  Юխ'n$       nug   ~_rrs%=-Mⵠ  @@}[OP*IA@@@@@)@Pݞά@@ R $55UCP=Rq" @ TʞU     S=םY# @I޽%66VGʪ1N@hWVTJ~@@@@@@{ T3k@/'Otq:#a# AuրU     S=םY# @%CN'NX@@@ UAu$@@@@@Au{;F@HPtTOMM׫z$cD@v n?Au$@@@@@Au{;F@H˓^zևLP=RVq" @ TU     S=םY# @zFF\.ꑲr@MUխ@@@@@@@"A˔)S$--MN'AHX4ƈ /@Pݪ5 n$       nug  )'Ntqp8) 8@@[eOP*IA@@@@@)@Pݞά@@ R $99Y:t #e' Au [%I?      =sݙ5 D&^ꑲh@WUխ@@@@@@@"E ??_222tCvheիii5  (~>= n$       nug  )yyy. TTEc  оխ}P_t8#      Nzl@h>ydIIICPu܍ v nJ&~?PuCϖᨖ(-n|A@@@@@AP ?  I&Au+~_Zz]F,|ւ  @?X&XTW?7˽$Y9N+Z4Xg_2VCQ}JzZoQWMɭ'~!];DݱYs?]=i=^V>Z7.W_٦Y#{]QHCZ'-XY$M>T{6(x]15:7jXgp    DAZ/F v4i$''㡢" @mﻬ liyn-NIXC>tWUPKTmڋה@qɮJ/QU|`w*l|q>yeRGmX1zpϩn?tHX|0cdTTVpW%o. [K)QAgn;X yu7hG:Pqo?\(,üS3yzpPW&kmxAK1Wi/__ʪfQ7#8s|Zpc+)̮,~:sD|*7tqir6?c:78BRWE:˿80ѱQR^Ye^ojP}ByT{_gjUu{'}Z&~kOoV'=MzHgw*\?CC=8|sߙp;z/c{xVO/Ѫ|hpމUǿ5?Zk_LѾxqcE+9AP}zK-'ʵ6'     #s5 E`ĉ+++Qm4y`@?XXT?ź!ަrPC^4U-\ʂAu_7&BEz5ղBcN.yC$AnlAu荓Z{UE5ZQ}KQR\BUXli7v_hUǾĸ,X>t*cU5U^}1Qz{UZQzdpo%[a~Mf;%A?N:NQ^u=ouŨ]i͘T**$oT7)ufў{*j[度T/+:9V[Q{yvu}B]Y{'kߕ.(fL"oȞ0=,[`_uz[4TWi\ZݣO} U^k@@@@@ "G1h@@^^dddH||T3Q@hAhmPZTq2gMY +dRXE޻#{ :DD]JpP=I ?8 Z67U?veFSQ~0Qx-X|unJA۞ 6i^?T%}>WHW`~R/{tYaɟ.d޷fc8y_)r=oc?qx~b_Tyf_;Dꓤtϵ`_Q[/3:go:|P=; o.%L~Xռ; ?56L>|pWWjw̑]{*;In~qxv?\:\pRMum-QoyG{3za=%s nP9Hv@@@@@ Ơ@@6rCng  R- 6|9Zp-%#o~P#k+R|ǿgEN:u`:s ?yL RFSyD ҿyv>*R\`P}WE\f}gd1"r>ZJn{trɿthSb\wT Tf[S'x۰LݱqJr~|F,V8^uC̰z8_xq#EA{#nh^ :Tuk8kk踟%*̟nGO긾,,yޅݪY}e5@}gʦ=hTϿklYXor}ƂMK+Zv|"  J`Ŋu2n82bDmE@6xwe͚ >OUT=jw 6'PD0  `||TT3E@hA`mPԿ E,N'TUWϜJF[޸)0TƖK`olOTWSk~ʡ=S"eβmzb{cJ|\mzua2ᙙzW`P}M2`yMMFYKmY HZG$ˍӻnMPc~y2e9E>|`I[^(_g^ 촁zp ngńDOMΒu[J.ך3ᓕ25zs U:-^ GnN}6"Pu      @ T5c  `'T7]7:tȫWętuNӍ:kJfV>/~owƯ$9yO?" y{ZK~)a\U<_o Tn~ny]Z8lfKzHU {Cޮ׆J  \ H{I69f$M2!Y7~N9s zĿZ>8ٵkSKٱDl, [_PXbvҭ۵ fE^YzXc+_.~* jmߠzmu`Aun溟g|a %^P+oܼH*2Cg}p+7uqL=oʂyFT0\1NGm'T?Eݯ׿Q,]z'obY~B>e6o@MYϴ׼.v`P^reWVW]A䚎٫ް/mgq)>=IgUW-Ynh7ߠf} f'sZj-_e-SwٰS6C-lKýQBmՉ`sY:$euGY[_UtLb5?fW,75W۠zMǬ/2~ckII]i|OxoPoߊ> sxO>[+FwłΒ'4-=BT{99{kNf3qK$g@@@@@ ƨ@@):nVT">@@knA<{n텻:N2#޳C3GUn܎lÖrke]V߾+mSeӶ*p^v<0NQ2/ۇ^ׁ/lTk7}?il 1ϓ{ 綗HU]/ >j: 7ɓu撬+077wmuJP} gyC$[R??M&lR~um7#`zVy7_f.MT!6*ʂxMzdޝ*S7a}ze/Eƣ.,+     @X Tic  i۶DGG AuL;7  ^=s rsٲ({xHz`PBj#6+_޿P1^Q{gJ⁃R3y{𭌝Smݷ6ɃoirLVֶ^ѕ|1/Ch-WV~{md5oWm.6}%+, UOܥ[ߺz}rA-|Okwȍ/Wþvt6N9ڿMMǼ`V#``V)VJ/j h}%]n-f_{6|N{TLoL[>A=_]j+z|^$x4M͐SK>O[#嚳*~1wemS˛fWjoQLRVm!QFP^k? 6@@@@@ vSƀ@@1^5jdffJll,Au<7  ^+> u@i2gEOO%\Tb^Pݾm;ߺ֪2xTdɚ ;ob|jgUB6Z]zƝQUxQA!PtE^Y5B[6 >}dovmGIn=3RUWO/VDVƣu})E@@@@ Tws  #Gtqݪ]jiHC'֐f  ]ρ}A|g<uoF9[TPA}U@@@@@Sa:q @ #:& Tws  P;+?۾*^,wE˟L* kg,wFc $      4 f*  P@AAiF㍣+@b  +@PW6(UU*$lR,]#zMRIk[ENWARRX@@@@@@A4@A,q!F@xޠmA-u΢ٺ%;vGʮ"zUcE1%W*qѺzjyi      P )  O^=Z222$66>b  :{t0uΧϚ,*Nԟ:΂      7YaL  )#*Dn T&@P29 ]a6 kǹ       /  PS|INN$)U]jiguqAPO@Oj{n}:      (@P}U @\IOOCEgZ@KvTK~@@@@@@g Tws  .yy!RzD@z n=Au$@@@@@pAug;w "0$'G2TE*ˤ1N@_vTK~@@@@@@g Tws  2t0IIIx*ä1F@vAu$@@@@@pAug;w "o=J6kHX@@@ Į瀠]     8S3睻F@pxoCEp4Ɖ +@P.vI      LΜw@E Pz||\.*1N@?vTK~@@@@@@g Tws  .9.qnDFDTc  P'n$       y@@ \HffEP=\q" @} TK]     8S3睻F@p˓tUQ=!!AJJJ.8@@eOP.IA@@@@@)@Pݙ]# @KrJKe' ԧAu %I?      3;s޹k@\Tw.8@@eOP.IA@@@@@)@Pݙ]# @zffxTE2q@O]풤@@@@@@՝95 Ȑ8".8@@eOP.IA@@@@@)@Pݙ]# @IjZnq\e' ԟAu{MG{z@@@@@@ ji" a%ꩩ(^zXE@z0񛎵녳@@@@@@*_ԙ@@ \tEtx 8 TKzh        QUExq\TTw3-# @5W         8|INN$)U]jiH l0@|?9@@@@@@@@@ Jzzx<*(  P&@P'@@@@@@@@.'+.Ք8 PQg@@@@@@@@B`HNd TTŠ  !@Eu@@@@@@@@@rR:lH||<+  P.@P܂5@@@@@@@@@"|#Qս^Tz X}s]@L'ɰ@@@@@@@@(xoCEu @@ (@@@@@@@@,PXX(eAuN~w@MzhNjղh"ټy_R_r$%%IVVlٲ:6fR>quN9B2Z5͕V3Ȣke){֥٤Ɵ2E_j-w]rJɉ%Wm};a,XF\'vIƉgդ;A@@@@@@@ >ܨv%22Cn@!@PXܹsE5jde ԰른Xm&6m2p?~xOUX/, ;~Ir|5Sy󳒛˵gw?I^ܱȀoH<[^.ҠΑ3msQHQIj>i$ILL&MH j:nC?z goذAl"={ zmݤ{w].-?cm*W=Ŗպܦ*ַMmiJ}_;ftGN9 [}V=vq)}woɳþpEȱ=:Z۬        @hFICEh N 0Y:t nGFFV;nޙYQ]w!gϖ>}gQq\}X0oA-GxQr=m;V3[em$$kEWTu}Vy>݌SZBvT| }PP/S)/#      8H@WTOOOtn@j'@Pv~uu1C.Fӿd ޽[O.~xڗ':m\z T(GBLA@=|?iĉK.euH6AuD3f!0ogT.g7$Ż)协Z_qJz~hpz9툮֡Erᣯ[`kw߾Pg.g~^PZ{ҧvm u';w[ ?9˺JƉrϥY'F0A]屁}g`M8       { $++KLAu @@ Uɓ'KΝ6nVU9st޽,nݱK;V8^]ST޵ןSV!;^Z>6 Ttgc6uF.zTdQ}{]q]5{Tݺbw?i XW&zdmp ~ ;E+:E'˱=:#/<ƘjT/Y["#"dU}vBP=@@@@@@@ȑ#%==]nQpz 9@&@PaNӃc'̐~59 P;f#?ٺz#׈Vg JydɚF/RN)9;E6m!^$įQm¬rF2]h>ȃ%ezi[cPUCFd'7YWB*xgDlxKg57[w4QXo4o.>+R[K^Т|sEd'֎6-/3kTpk,֭[ü=zdV6^UuT#qKՑ^!;ۧ;/>xcVt|3#0~Pty}6o8dsOwr=ӎ4_RWG#?Mm+fPܩCܔ;/:ŪLnm1˴FwjJ?*d>weV'8v[z7F0nH޾og [EW{Zc/%~咦^"0w>It]/Q܍Zoɳþ0V8AV@@@@@@@@R]Q=##C<ߎNPR*  eM[gHG/t w]r 5 d eΒіMZ-o{$7+n+{m+hvg [637\(eWQYn+l3T! ː'9׺R\R"R nyji`mˠ/{TD|tY(AcKw[ua]岓Fɰ@@@@@@@ AlA@(@PaN4Irٚ!G EGKޣJ\Luo޶Cf,\.WUA]Mپs9Nz;N jk0YjڼqsC>6I{˅͕>A6A'TZ^SmSmE;g頷,y%_=zmP=3!ZJd9MiUͅ)'  8Q`Μ9oN8A:묠m8 o^{5Y`Au\sILLLm8  ԅ#$==]tPu!L  ToS+XsPtD'Z+w]|ӽ߾`A\yCYg<u7>N~< (WYo{;R.]em?%g?SZNhnMP'JWX㾿v>_jؗg.Z.5g;۵ Nl|d t+O;R"#"- V@@@vmArwmA@}+0`>}zЋ7Nヶ    `gggKll5?@7)ujP}rC5)=;dc|oP]j+yK[7^ʝ0vcEWol3䍏Sms%0=sGLVꮨ7],2Z[}蕽xtP|e\c=:2Rc=؏O7Yb䎋Nzt͕cKwȕgKN &ɺWU˧fϘ*ϒI/boﳷB`.M >@@@ϗ!Cc9FN>m8 o,/A$ZM@@@`_ ꅅ&nwJ  @ ToSԠ?L֤9_#<γ+>c2ykOo-{tmer7Gˬˍ6vgR{кybTҶvYyyӔv+  oyqėָWwnDڥE_kֵo9D9Wc;0^]C=+;wɼE?O)+ok>4IѰ       @ȑ#%++h ׈@@Il;1^rd*w_rx~]Lv]u}c#TVݧZ]'[ %)4UoL5jRz`h\W6Aks#FʼeQ۠RUYfM+_jf?m.c(ZǮk/n7Ba(5O3V[CbxDƉƺ1[Y>0rq        @h:nVT"@@;1r ~@<~9ֶk6R6MA?  K 骢EEo.0>aB,_ѸDgnPڪy֋[*/ #N/ ZaIɓ9m~KZ&>V@@@@@@@@ji۶DGG Ah Azǎ%RUf_~ePMRUw[)))1ҭ[tU~=AN9Jy Ս7PZ5MykW*DBU^r..m^Ŀɿs? Y~vtEE~]޺W\_Z_\ݱ~7JgUx[.v} 4(Z[(y_b]6F;dV{#d,^:AKcb䱁gKCl#       @QFIffTa@Pz,sҩS'#BFX&!YeYaYfIkUSRO+0B9_c+hOO-ڮlŮg?9K plLlܺ8nwP]wZ2|o^_GŎkeĐ џInxEeP]>\yڑ.1ܺ}K?+n ;M:eXs:ݏd}cJY&        D`ȑ.n ]/Hu} X] ? TW'7N*ڵ3~UA"U{Μ9 .>w*nTy Vt0 C{mٺcq^I+5Zf.ZnoZЁ[6lf飯Z_}2eEM{]ۛ~c~*oXڟO^~[/-G~%?MmUOh ee22c2Δ~L_LkT^rPHJ Q$)ި~pt9΢_FP 3d~/ 4MAj^=Ik[T}owgʪ D]?_} ,        \@gDtP=--M.8 ToٳI&dTS7+T,KcVT߼ylذA:tPnhWQQ>5ѡI}m+t '7mdkg(o޶CqqqDK+ צ9[zq_'J#5.EW}/        @hҦM7N @@oܸQܤXU͐Yu@]/fP]WS_|jJ7n\G@@@@@@@@=:%n(3 T_z8@@@@@@@@%+Twִs  P\@@@@@@@@p%;;T- 5`,  ~s        (((,(8 T@@@@@@@@@˓Դ4qrWq@@<         @p\TOMDzՃsq@:         P.GJKK Wq@@<=       Zj[~@@#{z.V/mHw`bِf  l3=       9mƹ_@7\]Q=5U< TTc  P?fU;]vծF@@@@@p@llG@@Nndee } ԻAu{=     8U <9o@@! JС"n[zC1Ɔ  B=@PGzA@@@@@*@Pݩ3}# @8x^ϗ̌ SAuEP=&1" @ Tǟ=     8USgF@pAT(2q@O=q@@@@@@՝:7 Ζh2i@W=q@@@@@@՝:7 C%##C6*ì1F@wLAu{@@@@@pAu< "/vrT- il0@|?9 n#      N ԙ@@ t$=//ORC&3@@^OPGzA@@@@@*@Pݩ3}# @ ɑ,WUIu*1N@?TǑ^@@@@@@ Tws  .:!nT .8@@cOPGzA@@@@@*@Pݩ3}# @8x^:lFP=f1" @ Tg H/      S;uo@UQ=]UTEEp8Ɖ '@P{8       TNy@E /?_%))IJUuWZ 5`,  ~bs@PGzA@@@@@*@Pݩ3}# @Jzzx<*ˤ1N@_TǑ^@@@@@@ Tws  .yy!{K 2s@M=q@@@@@@՝:7 P.8@@~OPGzA@@@@@*@Pݩ3}# @8a$%%E㩨@@3q@@@@@@՝:7 @~~T^W\*^ڐO!cA@-{8       TNy@E!C$33S<e' ԯAu{ H/      S;uo@Cr.8@@cOPGzA@@@@@*@Pݩ3}# @JFzĹAP=\&q" @ TǞ=     8USgF@p#⎋Ap6Ɖ )@P ]V,Y"[nRUg9 l޼yuN˶w>ggLk{i2src;6&Jn=+uݿcio_%%!^ytNiw     >}0XE@@n^9*79bH  3!uT_p[N5j$G\Cz)Vm۶ɦMYf W_΢b,\~9ɱ;T:k6]-_varQݭWFf7##kcvu5ÿvgj&O?®c4N;.8kWPzRo.4aܹHb%>6FT o/1NIx@@@@@ Tos@@-/))/TT@@ ^Q(-E$E}Q2R\T7z8/_.YYYF`=6,}7/QWAyV˨C]:e&^XoA+ clR>q"yqע_Ћ~eXqx7+N-gjngN_f#%.&ڮ~Q\qtmr׿o<* 8+yD@@@@s˝! !kTT7ФKU,KX4#@&a  %V+v/z&M$::ڨfX=ꐺ ]6pq{y)j-KZ&{;*R75o9x9ֶA+ʠ>~:z؁歉+UHk%}t uVN)|>jY!aT͕꽻;.:)hO?u|.}5XG@@@@'@Pys# @x zffxTE5}@C=v'L :tm}+WwfEuT߱c̞=[zUny< =\z¡'Au?k#XEC?[Y8\yjok;VM#{c1QQ2k|գo@x%1>?^ ~ q    8N㦜F@0#'*@E0@ ^=v'O,xĈRw_TEW6wӧKk>=g o8I{euk6nE+Esr.rptcsfxܱzEwY)3.7th-['./pEϛ\nVqHƉҳC4Il^veA]EF%+X}%\r^wRϞ{ЍHk)Ʋm.:?M]twiB7>e-ơN'k5TvF]cʴK^6nn<Sh.zz-UŰo˧LXeAu~zIM~5;f|u     @ TS^:G@j-ꩩh$^kR:@@]=3lwP}̙ҹsgj굩[U۞;^t5k_ȗb=:IkoiYXU3k )\`u`㢣剫Jm.7oGHnjs 2~EA_&:_\Ju`Juwvam}J?-8ٶszʎuGKz((˴y*u~E:gϮʂSמηk_78 |EA~$O#pCu͹~5밍     P֗@@ ixDgqV@@` nTIO˫u5o֋޾}Fq?9㈃P~fN)7n?w~/XV|z=;do3 7=?f-4 hJhTqly=qrXli8Af,X.3?UV >0;|Xe@@@@@` Tg\@ITT#'! 3vg͚%:ufyDΧV(\u9*2B} uQ3nP+v;uHoM[J`P]W~sc4U_\tIUU]/8S뒓ŵke{΢0w`yO ?|꺁-7~V'SF7[U0'?OKnH<5 4UUT7O8艓.2ص[z6׺;.><,K$v`l%0~?7D{i.#ש Z`l=^Z!AO\x!Bի;@@@@@}+@P}zs5@@zjx^]<# 33qԽM/ R^tv zcFL9M9<+B^t?cl9*;֡nsuˌ+Tl+ԿpӅ$1>]+.a/>YhQc=g?_ڤ=]X /*Y 08`cwq x:GKJ#MWM[o{ߣߛ_.*kTaP}"SCgM|ߘtO6eW.?9ȃ6A·߅@@@@@' 3A@j,+YYYb~oz)9@"@Pݞ&n_Ȱo+kUUKWUwRbm!]*{|nW2i"c3JU>:cDͥǞj4q^bIkܬ>k4y3+ nW'>#4Uw 'ʑ3Y~! =XUu|:Au~,qBQվ}z+1KZ5M;^F`P}أ'&Ok%\c0ۥ;O^MAYWȠ!].m΋ʪի;~f@@Ss㎓O?=h"[_]-ZTEuᎧzJfA`0O}q?  P*)))v'!?, u*@P^8^{}Yr٩~AIs[ڭEKC GGFJcךC>}uu*]΋N#U%v^`P]czʨ'Xo}oUT L<3l)m.y|U=Mr yv+<'0vU7lyB qv.PRQP}r+rzYnV/l"J7n6cC:UTⷿ$_CF_\K`P+o9x9>-VC?Ԡz&_wIeǮ>.}v;fpYWU%J؟RϺ HYnq}*ʶe3CMnP]n6~,i+4nugEWt!+ nL#Jόm{}VVQzE $QUc%Y#Au   p H?-}O<1X!c{O,)ok]ZAz!*Wþ S  ~.0rHIKK3^"7 6TQuAP!ZEFD\.Iq^8}͓䍻W"X'n0xUOiXJq]_{;y\+Α~&AudjfdLH&Z(gs9rYG~VTmye7yInZP˱:MgWTeEbc5/Lۤ5G=:lu voz&zvuq]-͝UʾC]e?59'n     AY+F 'UM&n#y3F@# ~hBPZn7zuݗ}w]n{~uMVWA9#gXlTn>wެuN&͢U7J\qޢBOLPVl(G9T5/FUn`'XP]72~L;o9o׵u.TΗ^{PAT/MwZ0wjT9oAu@@@@@ V`@@ L"n[N8v(S[(9 `,  Ğ.:uhíH6#SZZjYdtH{^yK໅39H|7>=/I: 렴~f+xдjTk}e4O>NAƝuyYu ܒ?+M%2lݯלhE*XUkT{l޷Ei)K~Ͻҳj[Nͅrs>.6@F.XP]WKdV8nUYCcxs$]+z#n    AY* (7:!II9 "0e@AyUE0GEEtXH6C/^Xtr$]=jlתjںbK]*>̹ #gԧ΂:DP;2o/3Tc&;M@טW>7vTx=du;wUi:>d4 \Aud"}hm<'c>MkT}6gG}!BփmCtԳ?{Um{,W WT7-\A_/M Zg [     a#@P=l" @ H6m$11 /F@ TUvuvIllAʲeB.r@^f߇߳qNC/=x9Vϼ̜8vIWXת)RURټcqLtha^8+S>VV׍tU3" ݮx$Ǫ&JjT~*c~n=X(Kn^yúdzȉ=V"Ǻvʱ]c3_TasaMa}]=~ˎ"uF';KV3̘)+oT+՗t=|L,㲮v{ɏK7?3۹z0Zq~_^wI{/H\0dlw@@@@@: ^gt "YYYt:ˋNꑺalBf) &' vW\)M6zM}+ڵKmf|ӞGn/:Lpu*oTIkٷ_H&)p$]= WoEzMCSoaun`r9CQܶs]lTOkֱָ& v oQcֿ!ə -RC~5@@@@@! $ӧs[ʋPQ=V  @H TgY@%--ͪnϪFn~g j6l&M:GS zӔ$MZsѕ,_+jUus̓epN!     A^>  0i$̔DL@j'@Pv~vu7obIMM%jT/--={Haar-a@H M[5v-+GILtT@@@@@P +@@ LblԨ‘#`  PA*ՠ.fe{nHYUtRID3d-/b]1U.~占     @Tb  㑤$*G[@@FkUi W@. ЀYJ$"w&٪h)<     @ Tԕg  .'O,1nzD@z n=Au{@@@@@T3g  @ Hff$''SQ=! @hTgH/      @ Tԕg  eee2m4IOOEP=1" @ Tg H/      @ Tԕg  .SN5IIIzše4x`@?TǑ^@@@@@@H +ϼ@@ \&N(YYYz,D@ n=Au{@@@@@Tꑺ@Erˢ1N@_TǑ^@@@@@@H +ϼ@@ \&M$t:%::p@O=q@@@@@@ RG3o@Ζ". 8@@cOPGzA@@@@@"Uz= n#      *@P=RWy# @L2zJv];6oqOL''CagLU_8pI۴C_HLNJbcCaGC ;P       @ ɑLG$ZzA- 4꡹?$''KjjԣzuGC~A),,"۷ou8*"!uGٱڦ'$qb.;m5Ȟ/cP]yNYɞU5mܥƯ227n< P~g "       P:nyu N  Cs gϞ-ݺu8+P#t 8p@,X wܑtuy|yO~i2G8p%xYbѼSVkZ\ oߵG[R~-%HQ!=Rӕ|~_0X3Z7K^{QAuٹg1ͅERTO'9UrLlqǙͬ W"?Y-:TߴQtJ-|wvU6Nv&y?3 ^[|3K{Ǟi͓l.?7U0OIWIj8{࠱Lmdmr*ek7NcU]7ڤ w6>}!       @p]Q=%:AP=W@@!//]v#C KKKD.\( ͉Axt@~DLT{K+rg̔gΕoa[7m,]~5k|صN ˖V|ie띉|?U7$*c0O oغCZwyJ{@`֩qg53NTSoȤg[]649g.yeU׸֧CřV;s-;g_edmo:wZ|R)SݴW$U=wNP#       @zh ,@P=4Μ9ҥKj U-Z${͉6AuUɲeGQ@:uVm{ߪcl"yVo|ei晛/VM+k./=ws=iҶ.쨯6 tVT߶s´J̎ڦ]{$Tm m;oث*nvտ^<:]'5wm8D泣r?U}        PM\]Q==]\IITT@@  @P|]jT׽p4U+?.]-^U]FK:cy(HyCؕ/3V[ײZ5@bcs; cu)6:Z=xDE9s5 4R;zZKvfxFYq]tT}H)8,g~UroJ* @U⟳l_e*YжqR{Z6Rސce` ?[Qݯ~ㆳȰcvT4ߛ-dƭ;h[ Tz0;        P#\ʒߦNE@"QzhܹssuRQ}ҫWМxCٷ_x :whu7zZ6G?WtpXo,\!Ox#םkDY68.&Fv*ʺĔKG=Gvmr?&:Y5z#;[]w`9m@x;_ț3Xܭ7߭4'ncUMRX$7=] :nn]~eV1\>*f:A}OMwXpe֬qlwPyT4}:jԗ"rg̔7gd}u/18Z]V        @t IKK)BP|4D@H +OP|]jTҳo=>AmnK1*{'[*OQ'kxDU9ii]΋GX5zU=7=G߭Tn|@o-NJi$_ru * 溒C=ۺUq[`Pꑃ_l={˚M[O_jKr93lsNo*OtX_.l&\H#8,^W5v@@@@@@@@^%Tw8իGC@X꡹ץ6Au2/IbB"?|xq.&*Z^{u`\70v ]4:hgͦmrSK<8:N`Pa˹?gTc*773t,~9y.]{ڃ7HTUկxo;0}iA} Wu_tT: GO?\} sԏIζ}@QYPGk    l2ytȐ!2rȠm ptyYí: ]ߊr@@S@%!!AbbbۉK_  0T/_uՇC辫ؤde)ߠ[3+|۴}w-ms^6UܭgKw\4B:6w^S} {<'JJ.<-ʿt|ev.0}ۘĞ!U&Au~_t׵_vՃ#p׏:E~\wYUJz}4'    _}xAz7 @رceA_Hbbb6\D@@#KPn\C@)@P=4וzՠ*PuƇ D֬w=^ i8ٷ~Q>ٰuuӲ8䭀1|0ܧջuos3A1 Lm$/1ּ,)-}^Jկ[۴čcvqC%UTQ_:07WBt.YiһCdnf^>rko3/W<^>DuRg`%qgj\4ֺ5(v@@@Xb7U4Aɰa*9@zxe͚5>]WT`H  ,UY H||i2hP̗[ .iAbc.ϵn?>9:ׯS; 80mWPޱgJNY3B(tDo]Aum_ʛ_h H{wKw| @]@A@@@@@@@j Kzz8N_uw2@@ IZcG3r5>[;ֱbfS]J??q<9f:Tjw8)QǨ+l?yںϖErSg~?O:5q>s''3=6=9oٍ\7jv\X_.>xM(}Czp/ҲI1N׷VCo[vu{V߅E{'Ɏƹ(/S%ʂkmh @@@@@@@IzF\Yբ DA\}r47M[a䜓KTO򛟫Þ~|/AVvt?-ۭ&x|ĉ2O'Qa¢b5͘)JJvtn#w_6: ˵:{#d\K,^j\vK_/X!N|Ǻ/.&xnvn#4eOtdnfJA>戴KlL,\0ںȚ]AuݡESjI)fɒg7Ko:,]pv@@@@@@@@sr$++KUEuURՖ! DA\zTԩDc lOiigɒ%ҫW#s꺚/&{暨djHvp?}ӅѢ6Β5/*2_(^lJG?רnޤxcտ~tfQu:z9K_"'}0Bh~vIll]Aʲe& _~dn׵uĔKNU }_l"OT OPSamN&4[wMW1K.6@Z7V݃[ O/ZZaej#9K$6&nuYq~mzrѩKv7l!3jňXz`IL+Ū^kB._._+u΋O*_+a;ʿ:+GK븺;;vkxFٯ{swݨr eۮ垱g5GEyKٰmHIv&ȁЭ:l] A@@@@@@@9[UTOLL*rHE\\D@D[tRIMM!&[YY?fE]vIaatر&Dl۝{ʖ]x$'&H&)vlM[esaQɼNUQϩɶKQU/QXi" q5¶^ټcqzyd_*!DO*kn6&mO =@@@@@@@@@ 2~dff墢zp*" y@@@@@@@@@SNAE\\E@;        T%0i$hUq@:         \@%!!A*  @Eu@@@@@@@@@*ɓ'ՓzU`\G@;        :u墢zp*" y@@@@@@@@@&  !,C@@@@@@@@*4idggAqu X}\@LO*<         P.PPP YYY 111y1@@W%u@@@@@@@@t)S)z@ ^-@@@@@@@@@ &OlՓTׁ# @uWG6         %eee#e`  P=s        D@AATOJJ2*^JBi5  h~>=@@@@@@@@@ ҋ&I$y  Au@@@@@@@@@*G}D%>.^^@@          DL&L`TTw:KP=@@C=/hOo      i-[)3_@@ l^'#:QP`PZƂ @d =o:      DyH[q &Lᶀ@kw#     D@|||Dϟ# .#m%66Vb z1>@,Au{@@@@@Tꑺ@AʄH|\Tuc  PY8       #u7 @~~g!2 j0@|b{@PGzA@@@@@"UzAu{@@@@@Tꑺ@E '7G. 8@@۳q@@@@@@ RG3o@dzę(*1N@?TǑ^@@@@@@H +ϼ@@ ^L,(n[mQQa# ԳAu{=     DAH]y "*{<(p@O=q@@@@@@ RG3o@|iݺ4J]aQPAu{@@@@@Tꑺ@E //ϨJRo)e' ԟAu{ H/      @ Tԕg  .%u$&&JT4e' ԣAu{ H/      @ Tԕg  .yvᠢz,D@ n=Au{@@@@@Tꑺ@E 77W22zii)ApY8Ɖ '@P oݺU֭['w2Ƭfޓd|Yf5=$?X"퐦)ItL;wfpNҷCu; m^3fϗE6#<{H.M؏>~Xḷ[v7vdω     *@P=\Wq# @'# CP=Ry" T?r;;"j*ٶm4jH\.~fu:ٳgܹS6m*Pkٺ_.Ȇ;\tX=u39S )Pnyvu¡ʨ{[+刍ץ qxumA}vein|HM6D@@@@8Տ"6B@@ /?O222t 甧s X]' FOjw^:zjIKK_JF0oTTս^_7Ǹa2FZ{}HϘhzv8Q7Tͭ7˴O7'Ι㣹CP^g$u;=svF;^|UVmj$:.6@@@@@/@PD@@&yyy.ɢ8kG[@H,AySSS%66֨fX??ШޣGvqTM{0uU-w_:jFPݢ8lE+Ώ;9ghTW6A՛[3R_ ʩti@@@@@-@PT4D@E@WTwr[FP^V" @X TgwұcGW頺oEج{KJkM/*'?>QP#O)4E̹R/)!AuSOꇛ43AۋeJQvȬ:@@@@@GzT@@999=TT@@ b۳v̙#ݺu8+p8heeeFUR9p,X@z}D}Ms^'OxzDvֱɏK7?3圓 ],7mu˖"i8I2[5MQپkذ<m3$>6:;i-\A={ܳWZ4NnDY71n3>دl^n% VnW}ZIMٲȘݯֻȰ]g;q%5ߛy+~1ݶs1捓oLIMNk/lwtY~1ʀmsSҵ ݉Kw+q%XR?,]#<R\Ni$EuRc h]~8z٧ƣ).iּik.Y#.@29>]E{q?P"M8Z73-  ><5=7Ku׬Wʿ4-~{W|;_qZ딞CK;i=@@@@@ To ˴@@IzF$%% fi ԕAu{dϟ?_v*1*쪫zm:t%* pB޽=,qr-l/3N@nmݾyDynQY?z]ʻ3s]}ha]|iUUкus^yHuHwS++Cv-䥷>.7vtN75f豲iNtC:ezeߚ+åwCf/ w>:*3k:h ug 'Z>P~lÂ\{R޾[zjl=՜*tHLPaɩt=֫'+Bomr#~,|RNFrӹC WMT  `ӿ=@G릍SU~&~7eo_0h-ϻɲqK0`unԼZv@@@@@ To ˴@@JVV?To0KD@@#kwP}ѢEҥKj {U(V;홹}jwVM]gUQ=SU9PGxz?| .^UewS.=uծA9o˲u>wRVxZ_ TlskTוunuX~m`P=!.֪ZnXQP]_;f~:p+ϔlUmw{dڧ:l_ I=;] 4qelӁ~ٿ2n*?PQYAi~/~klDk\]{>Q     @SB@Z@&L iiit:%V2x@8Q&^{G])}EW6UM^W9[:魛5Vʷ`AJ-N2կKn 9dNJ뭶A\>qїWFn*:cwy T׍t;;+k;vYꝜ;/3^Z/4*/TͭxZ41GèwA?;dܲXYR3?=DN8 tU E5?9Cz LΙ*sB_~lw;-u+WjTկj^C_~Wtrss7o"N-z sԸiyIv̒;Գ-wX6m$ WnEkל%1~EP}rX}[*9%{KJu5Og    4D qU 4{OA@L=v/^,;wf^ޜ9W >]i:۷c: y9Fs}uN6OOHf-<m7j/{h;x{i':LyuSUPݷy ^6RUN!ǧ:w)Ulsl6rì/ڸUMk.ݲӍqN+ nrL WR_3ݒP },_vk]rĉr1]wgKoa Vro*jWԻuppzE}հ8:u2WG6Au]OVu5y ^i,hP]WQV[sx1uB(>o䍙f?Jr|8Uw_$_([b|FdȽ{Tt{j[ S9w]aV4'9%^a vX]x%$e&>֯wJ?Iq9s-8\SF:USZu:f6YHo/#~X +ǿ^V.>PN;ulLkyàAURDt;^|:5f12>qu- Vc;?@(*u3mjҁߪ>}aj0&*J&ٜ5ϳ|i^xO峹KC#دzMP}ފ_oX(GMo.-kv s{ԿF UVt蠮Erpň0C\.4KInب_hC@@ ,_\^~`Md2|m pt{9YzuՅ3z!#Ri#. t6 DW!0qx<XL@j'@Pv~M ?-?"Vo-;rJNrݨsUu7>{Qс]Au]}[W6;.+*dTtPT!Sқ5𶄸X9wp?Z꺑pZ4NgtW>+JJ zy/@@@gϖ[o5cƌqmE@+p5… >>3o9 Q!0 @M ??_3ҍ_u-tj0@|b{@PǪz)N`_HuFMc[+qϊQAi,ޱUTῌ޳zsu9O   Xr06p@:th&\C8[ҧ0]wEEJy; 4tIϓ q%Dqg@IDAT }ՙ Zz q).&FNݱNW#ߪM˵lj`Arߖ[}^0)K-th]=܂+ GO[y oܶSnzfuG XRW'#~3Sdö$^lU`тV5\*nOLPf/*Ȯ=r67ޢq~z=.y?{tu75Up}BܾK]*ɉ8|e~eA%rCX;jzqפ7f17Գp`5N~5Yau k?<^U9{r_ѕt(7>/-3/uTO̧}(_-<~ PkgDGYVP}zjǨJg|unreϾƹXU5?wugoήsd`)ЋDײvW],uU,bDD !@zH!7@&3Mr'{{{?w9!چ ,]Y5V5g6t^_~C>ҾO8"4&wj륓GϯZ]֧ؕƖ-TObʘXdY[?G[rsp @ @]@PϠ @ۻ\njƦg շ7> @`7Ѐ;:p@W˧Zt;<>ga|WB) SeSξ\no~15ULgƷnUڻ՟8Ns_-MBmbon@xZ)eͪB/1bhk<1wa/_P|aq;0t4+z ]i'-5b>  @ @ o3k\ @ БTǗƨQ"ü %[d*oMY:li*wz(L)MmkR|xvnINx۱NAT9- c_[u YiX,]|{vi:5k+]Oln/TNAt/uУV9lp^]3YYz%S>Q|7 _}D:g*8dIǿ5r/nUӳw\:6&ߡK_rO8rAץ&dJikP}kSX=}aaSsWO?w5b 3Ԗ],{篫R͞fw7l\U/gvsKؾO @ @l \paVQ}hnn^!/Nl mC|&@^RKyg>`!LBoanFP=}3ibԩ}ָ ;H5vXťz}w K# g>߹wji_emrq_נzڗ?m̌Ύiq)H/.}ko3,ޢN]Na^vC5ZH}l-ޚAtg͎/]r]*)h/mmAt)~{ʛ_{}ō-1b>  @ @ o3k\ @"pN;Z 92Al)AȖ;O0!T_U1cFlr U}WU:*=5Y ;-R+0*GWMAW9Vnu 46Ļ^tkcihsY$64^ko.g}ƕNZbIo<0~ޥJJKPE3>7^w)j͚*)}A^65RG/\|mq3>Sw-mw]9g7-=\T_}䮇 R=ş=E0#|lvcZG;{y1۱ƳVķ1?LK)OGW¥ ӗ!N?) :P[ۗ =ƍX}3*ǟ;{Ovw3uv_\pJ>gK}yu_^)ӷ>8+"}Q:z'޽1=ͭ @ @ @`;TN'ְ @F /QFŀ,ˊ o7Sk  @T/l3gΌaÆEkkkzz˒~P)VT_dI,X ƍחfٹ ֏YpSG m-oNVi/Y| ᾴBsrsc}?)Ӓťu@cVzfkPw|u3UNO?S@]U~CriSHOMӜ͒ Ņ캾/Ujޢ­RUMm%WļOlij!}{}mxbs5 @ @ۉv2Al]tQ3:mT P.AH; .#GCύ<R jgώC Jeˑ+gR`󃳞3濭0IsN } @ @ @Ox=c @@u\p---*Wǔ% +rSs΍{.  Tooo˗ǢE9v[M͊^^/U7^?jPN"@ @ @6* Q"' @@*y饗N6h.CEm6nLAԖ+Xކԋ*VUojjRI>osZ\rß㹕6؃ixCL5b8@ @ @l \|Ņz  V*E`q3yycEZq3bX>,8*67VJw @ @؊[ۭ @ pǘcb@ˀՂꛀ @3߂q  @ @ @Zիu捛/\rIyd477G.SQL~ @N@PLj#1CP̜~ @L@PrȨZA2qIl;A Q+ @ @ @jT֙7n @uYV' c/^G @ @ @U@PZg޸  @"/})vqhnjO3[*`4B$'y @ @ @@ W7 _RP}Ĉ1pXzz8$@zy @ @ @@ W7 _/N;!_&N?  @m' ^{A8j @ @ P:M>;ڢ\gTR*i6HOQ+ @ @ @jT֙7n @W;6|GP̜~ @L@P|x x  @J+_JUTς*Y @`7W @ @ @T]μq @A#s4E.\># mkk΃ @ @ @ @ P;0&jj"W[+wA !@ @ @ @ @:;;c痏da|VU=YI} @ x? @ @ @ @ @gu˪zX @ @ @ @ @= |k\}m!z^ @= @ @ @ @A#F4>jztfKlC*nur7$@6"d#@ @ @ @ @ P#_1&4F& UD @6* Q"' @ @ @ @ P8.jj&R)uի0| @`7r @ @ @ @-˫vڦgӟl$AJ }!@ @ @ @ @zU㢾aIy{r {  @ @ @ @ г@ ޳ @Au @ @ @ @zQgAG{=p9DX+' @ @ @ @= :h|VQ>jj"ຊ={9JPQ3@ @ @ @ @:hBT\&59Ax9LT  @ @ @ @ @`#uE>T߈ @Au @ @ @ @6"P|m>:?l5[9s >|V @6$dC2 @ @ @ @ @`G]KC{( @Ts @ @ @ @fчNȥY)uիi0v @Wbr @ @ @ @U,05.jrz? NR@PPN#@ @ @ @ @jFvb5gAU(8 [AJ9 @ @ @ @jQ; DG{ 7 {A[9 @ @ @ @{ؤki|.ڜzu>FME@P/Z%@ @ @ @ @Ƽ6 ȂYH=jzgT X%͆ @IIe?s΍YfŒ%K"rًn51vhkkՕsWƼEK&{: 46TN6'&+O8=|XaW^GY||ެvow @ @ @ @69#W_r ͋T9rd444dk":נzGGGg+Wٳ#wq^]}]qDF~ARBӧ w% 0i\3g-tsЀѧNښ^w{݈  @ @ @ @ =lRl\> rtl @^B@P%P*`םw!CD]]]z b TU}ձhѢXtimbw ƕk:1uם{}Ͷ>0U3ڳy;{ŞwSw{jO 9 @ @ @ @$an`}kk%+ @ oHf[bTwמ++bqArǟO~* i怘8jD,}nELt+V*ipVy7J*yeKɷdەlo @ @ @ @-)vA+շ  @D@P2'n=#Re2hSBUXx+_)MmkN?O39bҾ3 ^s/)ߑqWN+*sscGcv!F lLX|EaBVf>җ^>u{@S @ @ @ @Z ,>%"$AJ }!@|}ݣ6UA)BTO)f͚x_4 3|63OyK5aK{g.tlIc⌓+mM̜=ʘ=c߾<Ԝ®w?55]OAY)v۟6dA3~1yݎeԘSߊKwZ>* n ſ6bO]_酋J5|7  @ @ @ @:b=Z Y'Wa @@{ŴOcԩݪonP=0>Vnxݟ^DŽ87_Iҿ|u"vAYM?9'N? 58 ov f_hϯ,ﺒT~ë㾙OwshVX5=mP}sNZdYw]67tm};@ @ @ @&qo ڢ*W+ )ꛢ審Ơ) o<0\7mF)cF]GƳVĝ͊E˖爃C/mw wR~^n/ߛ,^Zlmn1#vGJϭ w=Am;O?؜OS;qt,Z\ǒV}oC\ڶB @ @ @V]߰[4 n,5yիA0n @꽷ښgs=1eʔ-RQ}ڴi>l^_WqӽK~ꤣ╻/mv%Js.+UZ4jx HHm<9oQ/.5ߤ17*>wʱ嚛)39}~!{xu+q {TܶSKY9{^|{WW5~TǗηB @ @ @FpQzQQc&@" wn5=?^B> UK;ʸ^3xbېWj}?i'R~aqi'/Z<-V_g򩸬\&> w*^/O?Qo>|P_GZ(;u4g~BNA @ @ @"qoYP=_OP&P  @MT4-}U5տU5]\<-M\|EzRjm  @ f̘{n]=_Mi= ls9'fΜ{r݋pl @ Pxz/#_Whz`5Al9TA޾Kx7&MPZ~U7ٟ]C]w.So+.ҩ<8p/o7λ^?~< eW9/8 @T{ˉ'zj8H[W}o=nq @([#*gyAr k+sJ15.҄Co{}iV}z~BiXd;:s.+TQzM=hjJKJT/ŹRۧx~+WᎸW*n*^u⹕JizqeձӰkbIc} @ @~##c=x9 @8MSE38#6x @ zM[Y @% ^YAGgϋSIiB467>1tPi_ו,~(3b8GOgS'o{ׄQYP}i.SΠǟ8ҽ?x.mWq {*n*^? aѧN.  @ @ @ @K td'GԵ4D>K_^ @ /XTZ5Փraz9O[6^SO1#ʒ+ɹ #HGv @ @ @ @ƿiJԷ6E6 dal$AJ }!@|57n)=G8$ִǬ\ sWwno+.R_ggD<8kG(/gP=5ڵjyڞ2fdMqYz5'-LJKom?g_zmmYk$[4;Ss ۿ~Bоp_ @ @ @ @*Ԭzc #Tp  @ lk\[dO.~ePZ}IL?Y;t/E9}֋V_ߞ*c7N>dȷ~YzgĪ5k+wPf.TU6۠涝+n?Pj/Ξ}ĩxcq' @ @ @ @j.^|>^ς @T%V>)SB,~6'ޑO O6-w߭SXw=c; }AW~|]i 5~Ta?窸' # }=]lh5q ƍwNe+/.|ǿfx+ښnl @ @ @ @U`YEAQ[[dQuAj}譀zoyӧO!CDkkkz_v)VT_dI,Z(&Ouw,|dcjzKce-M \'/:Z4PIm*]4X3vʂE @ @ @ @ xQҐ 3G] T0ܹscȑŐzsc=O/i)S5ٳgG[[[!'@ @ @ @ @`7u-QS/ @J@PWL䤧z*-[)AjvjgŅvvym27%@ @ @ @ _&G |]MVP]E:MlEA Jϟ˗//\ېzVŪ vA%"O @ @ @ @}UTolmG>/: @* ^3o @ @ @ @V`BTWT/VMrޜ9s >/9 l1Z  @ @ @ @ L5yA} 赀zH @ @ @ @@ tttƨBO,*i6HO< @ @ @ @Y`{Ezς=9JTz?O @ @ @ @F&eAA͑BA9zA @ @ @ @ Ѓ@GGGL9~ߨ55Y5TU]E"@dy iM+ @ @ @&0|j @ B).ޯOg  @m P X__tܼV\M @ @ Pu:M,>> ECP?L> @V6oV\y  @ @ @zOt "W\NPK @ T/$Q+ @ @ @jT֙7n @ *TT/ @T/zyB @ @VAjy&@@GGGL}~QגճYN]P?L> @V@PuGlkÀzyB @ @VAjy&@*]#-oeAzϛ @ ^IT/V @ @ @* ^3o @@%ߍ󮽠PQ=_aA8j @ @ P:MӿDmSmj[jUg%u~ܹURb'|A8j @ @ P:MT@GGG?NsfF>|TO+-bi?JGOIy\PTQ=SEJ8}#@*C@P< ^G @ @ @U@PZg޸  @J׳>~[D> geiܪUյJܹs hkk @ !T/V @ @ @* ^3o @@% ̞to\S>u5)YA>sY`TXZ)3 @@QIQb>7 @ @ @jT'L}IDAT  @Jʦ0g}F\suQQ+t1>qAJ2}!@*Q@P<"^G @ @ @U@PZg޸  @J1O|^USϖ|^\STԉ/ @r3[*>x'cٲe1~S/=.^K}ߝf=]w}{Y$Nb՚5?铎cGiϱekvit  @ @ @@T @@5tttD3y$ 5K;gYV{ӮYΝ[K[[[IG @~RAYf… 5 Φ_+ԛ%Ӳ& /_<,YCcW_ W~H}]jzSs~~c'vm̌`<ĜX{qyxZƍ],=';ݛ~1gѳS'g|lo.s @ @Wjt؎RP}5.gQTTM=Eq:_Yv'r*.bvTO3qz 92糗'-} 8{BP=+iYzM|ԥ,~Ѻ@z kbzR|o'麫߯5.72|垥ެF9 @ @  ? R&s.eߎgsYN=0Becg'bŊy Pv @/OsTbРA1xਫ+TSVpO)SUիWŋg=[P{*[PgYEi_Q}qڷ(+z|*R5_w4i\YE%kTT  @ @ @ U @`H9k~+rYQ, Kc)%KAtq%,s-t @~R`ժUih]+wqGL4) Aj~3 9cƌqX!E{G?R/muR_[G}N ?6^[)>vB45ԿX5( g|l5s; @ @l R/,qUP,OAPώfUsY^Ȭ/~̘8zBE Q"A' @.O`lj+{1uHA2S5 )>`ޛ1ڭwwN S++mퟧݵ5ٯbɱ*&sYOO5<&f? /^\5㱘xY\&1#v^˜ֿ{?Ǔ=̺5)V9 ceє='; n&-/bkǟN-MTև29 !c#+3>;acЀqqߟ̼F]6w; u>ݟƜuAYU3O>.:F @ @rt)83f=gƴgD]cmֆԋtN*ԳϴS}[̯vQHA˜9s > @+շy4  @R~&eq2{q?n!:jzm>j!tBO!ޙdr8i= |)8IENDB`django-import-export-4.0.9/docs/_static/images/screenshots/import-complete.png000066400000000000000000015517611463433610200276500ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT(6@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u|TUgzڤ"E@E Y;쮮m /ޒ%dsnɤOB!wen9{&}l0MTS$p6VRMe6nMI7 }g*m;Ԯlyy(tB}Be4Ɵ;2BT1?j Vv}a[>4_/ߐfVlez,͆sW[@=/FؿluS8l5׽3/o9oɊj_WqNe8Է׼{U^ Aos,Xѕ^V\R>;}y?$WX@.!xX~4?s'      ۚ25➚R=s4 pϾ?:U4@#havΰY_.V]:We)$i+?JY z:11lz~p1t$?x;n*Sk*tF+-9X=o-'-_ KnGunQw,qkۤs˾)uVZIDX!jʂ]7o+6Zck,oȥ+_hgKΦ{kky]-پ`_nգ5Jc .vKú~oz_ȨK۞I]B 񬇕r]܏Q?cy}D@@@@@@`[c.Yke3ڵp4U+N;gOgfr] PQ]fnhw-[b PAu6qB$4wF1QTѦM5mH>3832HONԄ#O1r"^F_e3l+SkeK.?qz?*3(juk"[VPݞC,QȹD2>5^B̥2in[>=KR%_\•BRyM_?}}6=&YƛEsckq͉b=ggt#QK@`έ6/^`~[+=H5K-Me~B|j.n;.!xV~عG]9 @@@@@@h($8N֭ߨe }ґ8K7V TҢ9:Q׫iy&S5wʲ>~'+-X\k6#[s/UVyXwW?zB O)_/z-=+ngPxKCTVskۭ|oVWB(3^Bj& 1U6]ҶfP}W锽VOżU!nK]^2Φrxt,n1/ o^7{J*އpώ&@|˜jxp ׶5=T¶n9֪{T X5Nڣg?5꿱 .P4rreT*YX>ut? .s       4mZ():?S;<teлeZZГ. MX~ q~ԮU˄'PXX߄U̔OS^Ol9"\~1id%l@zr>ܩz2^&8qsVAu[2S[ ؞<]?fW/ޱջ٠O-ZFVZSXZ˕\ZUߚA S܆*3!dhʪw Kt oQ@j*?i*Gm,YJߤ[OY^ }4m[CC{NݠyGIJ慶j۾ש1+T (K@`WD&.ҭoԒ|Q }V鴽KC1-+zBze^6Z[Ku Q7Գn/.U51s'       PRVܤ5 *XW1CC/2Ui7+@r (@qq4\uF߳Q;Rs.f+kZbV{owά$>B8ynGzmTkЮk W_$X[qF\X~oiRBkyki(׶fPݞ yytޔd_lP7u2/_]ۖTRAhv{{S _BxJ2A6̼p0U0|k]):n6شJ Q ty<գ5Kc /m;a_?#AVyܿV)>PN]`t+寫,=Ny9d̤d\3gEYZ~ G]h?cy         @)I0y|^B&dKP=V=ӯ|PC+j "]jZXb}2,WڸP:gidU?nvݮv_ N5a.)n\'Pau/6T#t -}ϭK TOV_5:Lmꕋ%m_:Kݾe_dhZN\'jh^{tn -{ng6ҿ?j}Xp_>@@@@@@@@@ 2\qx MN09m>2yST)a^]i>{4iVVڶ>OHXCEsLxӗ.r9,VN>Z]uTiSI{3jNM.]bm, yRXG(Pv}(r68ϫk*=m 3z­0\ljZoԱ>;2 v/Q5[G-u+;K{Vz6+>/ę )Ϸ /l3suSɯPKU,9$m1EZox% ?yS #L/l噏|s5/s0/U$oR /i,?gv인dFt,F j{?5s},#         T4\8}6"+W۠zvhQ` njn[iZc,TiSq8j\ĺ٠O]ٸԄ*BnC6oZڣ"oPVϊ}!#-qS߾XaMthQiIJߤuηoXӋ1᫴nL)yy!|rψ gC< u]G}A@@@@@@@@@*T0y~y|^6իjd{n^:qElUi[]6}ZIu{stmTT\Y#          T 3#Myco*B՛e#          "WU %Nn"^/L          4S4eɟU8zc?i           ZVTR TTx Z           T䛊I&vT谀           Pk'7N8y.3z           P*yYr{^*           @lP={Xťqۂr'T           2S7N8LP! @@@@@@@@@@@L7).kS7Ǔ           @sLEu_nz"@@@@@@@@@@@6SeFx)p@@@@@@@@@@@ dz ĕݦz^}B܅G@@@@@@@@@@@fzrV?hܦ:A:b2 @@@@@@@@@@@@LOSNXydry0@@@@@@@@@@@.2#MyY'zz9           i9cK6AuAu @@@@@@@@@@@ dHcꦹzD@@@@@@@@@@h6m*MP:Au>g:*X.c>8~5CrrPkvl eWٶWo;@@@@@@@@@@ ؠz z2R1e1BmnCnFϿFNd=uc o}'^|3BE y|dNfˮݺr;GyO&~_i߭֒          T2MP=?K<~b-T߱}[Gwl8-_ +k4mظSܡ}uq{g_q{wiB9i4kx[uz1/^SB%{fU 1|?UT6Amצcc~8=ze <0Xpvґ})~Ovܮ2S~F*?Uv>=Ut͘3W~M8֠;Ks}?LIϽ2̵W^v뾋ڴndm,,\s,\VgV-KNJOK} !*-Y\MfZMA@ c^wmZ;۷m¢"|,Z          4[Q=;orMEu˥zKm,V)^g*VU:hgϼGnv,3Oqq}C==}]wJ4Amow]~~~{.Wzjr6D?1մg>}[B&P\Tey O拏.;ZnN&[UОt+~Vp_`_¤~U=ft7N?uh:eumFַO}zss}MGvׅ瞥2Ϙ_xż}~-gz4ǟl+mH.WJ~ j֜lg U^+Ll6/7њv @@@@@@@@@hNP}XR5z;n2?6zRyuPiPttCGol uU+V ȣ[;!;G/۷n2R_/XZRV~p08 MVXwÕuGz=? ѽ|uޗk~DEE"j7Am8֠-7\xw4&~c+Vok#yA@t?;W]za\TI#~AvVUPݾ8r w}cF|%1OgVo~UXaqL7         4iLS 8'/KdnOvOZ2Ww#R g}-9kׯK|_fvmZ9Ӄ v!{BkbuޱHHد?~Z8-]ڷIGbٷqc.x9le[oNj-XxRJ{mۧ/>v2a/xNQN۷ˏܩ䤒jKW?Yf8޻:pȘONԠGGE#k4xJ-\L͜m8znK^XrxT_6bӦu+|C?Sٿw9{,U{k?>S_ϿUh}Sii4oHʂkL]v92Ά]RIn֌?g)%%YvE=ʾi~ʏ2          M]VTR TT7m1l1蠺 /[Wm[+1!7/ȳ96=f䃑}zȺ]خm+} Ϳ1$': m+N_{P}7~[{ KuҪ'~jM=pw N8g=/n9-%WޭZ;lEWk+Q/<1MwI│Y} ^cnБl/]34lw "s1G(}oِg^[*7-G/X(|eR#Uş|%_0."w} p-ZLs7T+lB|\@Yo2%;{F=,^G?vvi{8O-s/T/=}AKJ_nC'hi[C1oj۷oj8῝{Ǖ h*,,0}BgM?n]Y0ҥoMAx2Ó@lY䋯@@@@@@@@@hNP=oqm6zD}գ+vJ=Ja r$jW1!*Ck]:ۯAM{>}IHKq sz"}/>l4 ^(~c}MuVǺp1G޽"+VYnH_(+?*^S_r.9$g_t3o~PadlO|P=72}/\^m&O?ܚa!2@@@@@@@@@@ dfin^|&KEZw?R+=-R9=+CRϮ|Q~MsڮM+gM?o/@g sDգC|uZöpP}{Fwi0|,/&pAw ]SAt3Auq{g{~rWޭݺ(}:vKA#[~CTՎ }U}*2%nn[GUYٺ M9/zsRkzDNwc C5׮]edžۍ?^p}Uv]>5m8أn!+5u4,Csc.wd_u -T+r{0>׭ߠϼٽѭ}/r:sο.g9{&nȋ6n:]mظA|{r;4oyl*vh޵Sɋ}z?{%%T?nA5ζp?[4'{neSFMzt7״vIi}v/6V@@@@@@@@@@*n*S\/צ |3>x:c>J#Tz}g_;H3hc C5ޡ]k}죑}~?-͏K|Ood=;@oj6^]y'=m;ʛ=oZ?Wz/I/tA.?z˚n$˽֌kTs:?M׳/-t#;XWG/D_~SϿ^{:˓~Q/frr0G/yqnׂm>hҠ] Ze*?U[pz]>A[t`9f/xT7@@@@@@@@@@mMVT1~^굹T?#t絗9/X^p.>@}N9ٜj2M69뱄T/_.fmO~_O;yUXX̊]㲭}c+ѴTSq`I  8{l[>[~]wq2c.$l}0j{,;rGڷn7ݧdSY۶G{]?YlkƵ 鎛oR7@c݃"?YcG po,r~87׃%_$8Sta8l~HtSn3'gya}g3"f)4s3s@@@@@@@@@@ 2#MsVU\jSQDr٫'LI>A' ;/V)F#z#뱄Tt"ǻg%aaKy'׮_Ӻ"c[յo:%&̝#F9UϞ=pm |IpIxٶUgnWDo\]|Ɖ|Iz bȝζ&7iz,vܖc wqyJop!Ztzwܑwi4n@@ڵu Vn^IED=t ,2!!Oڵ"s^*YhQYP>ÝsO4I&Hޜϝ&|n/񶾛Cx yI:Cm3f2sߔ          D2MP=SJv0Aon}!oO=~ m}^ڶR;_g ÛKzsO|i6mf+tߣGLS}jU&&eS5c`rU>evroAW9qbzQ"!>^7Om[n#}UZ?! G K/אGhu7N~no[R҇һtYW^rlU~ҫo K_,?@@@@@@@@@@m] 3=M9ycO zS}6{5^n/F:?Pqԡ>[ieٕ.=go}I}6bwKSRknsgUveGW FV s?lS_f__ ˜T$/өW^N?9xVYϙH>ˬ}NW#r*G=w^3}r,&zж`ܩp]Ӯj͟@-\sVOxCjJN:X:}jj췲Aھ{:\۵kW[aQ~6] X[f]y;KXXo -22L<>YNNOU; ۪/iA         4qi˒?)NǤC=O36-36Lx S кv-\u?[۫]LLvi ȞjW+vǭ,[yۚf_*=-U\~kյ:tRFs_͍^¢ZQM{ ,x˜A@@@@@@@@@ELT+_r> o7sF@@@@@@@@@@@):c*R2šmsԚ!           P{T6&yMJz           LOUN8yEE            HSN^VIPQqFd           @@f fɟQ8,!          ^ 盠z0 #Sg>: @@@@@@@@@@@ HӜܱ qvT=##@@@@@@@@@@@z 'sKTT           PkT˒?9NGPz           pYxTTȰ           P' SQ=wSQrQQN B@@@@@@@@@@pyYwXy6@@@@@@@@@@@.`+g~@J\nO^}Bu           YsLEu_0 ףEP9?\;           &%R@LWLP}sQ          4g[Q=;orMEPzs~ v@@@@@@@@@@@`sʱ s\7           @sLOSN^~y|^ g>           @lE,RMEuGPz           LOU#EP=           @lP='oq\fX&7AuӕU{@p         U x\^j*qr{]r{<իb  P"@P'@@@@@@@@Z#=xmPVիb  TA@@@@@@@@@ACz+J>Cիb  P"@P'@@@@@@@@Zr0SQ2]իb  P"@P'@@@@@@@@Z= LT=dZC~O8֪U?8GD@*Iae         мJǙz\IPUoA7# @h߾s.-D@@@@@@@@@ ؠ' _/-]T@@ To7B@@@@@@@@F!st`cHk[ѣQq  ~W 7{#        @'@0Nnm:Ao0=@@~ׯ'!        @p?9 #zȴtK,qNg'Atw8@AuZ@@@@@@@@@IP8 F(@h՛]@@@@@@@@@`s<.u+ o)@@ To7KC@@@@@@@@zȣCN<^d[QݥbQQt@A&wK @@@@@@@@^SQV %^nSM]*ofD@"@PI@@@@@@@@@IPXyn.*oIpF@m[}8{@@@@@@@@h<:q&{*TozޙTq73:cɒe(KɮdPV$$-DKDʾ/enȖ}{3o5ʻ|ι%  P~/L$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$p K5%4CݤPn#  P~ J$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$bPP=TDSl4X1 P $                A$֒i$($X(TaaHHH:2l ?ujJh0 C@4@l P=#.Ğ#^G_7/Ƥ 5}~ɑ (@\ 4hl*U!GQǘ$   CB\C e߉r%sTА)1[[D&g !(Uז4H`pBÞ ܃(T{'/f˭.U" 45% aRLL$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$`XII$`O1ef   TLB3o^ gwyTaLE&8G03 k TPF} TO^*ӧר1W \rE6m$.]"EHZ~j-rA9w\|Y&KV[n͛@l٤@E$@>#@Z H}rK''EI])VgAٻc=tL҆3/=-!iBރ2yRH|8>.^L'G9*O5/QxT=?w$0߼yKXbʔzפ2cMh?c7PcN^ !|vx:.vˠ][w%Mh< lݼ|կE37PBR$6}j۾11_F_=ycOFX @$ VSQ}߾}r%RPW[HHd̘Q/:ǻC`׮]{nUYppԫW1h8kH}ryTVMaGL]& ,Pyr->Nm'u6z:k =UN;%yF-m=$0ez@IDAT2eTR&K!]^&vWq%ҹsaFOTx})ƒC')O>Ei^jƫo/<&A@b*ٹeپGm|d)PQ߸Ld}nj OQBӧ*1J'K2/"!L_8 GQx>zhJ|Y;}hQZB$O<)Z!/^+UB΄ۆ߿_mۦåf͚I:YٳGva)2eEJ1KxB$@^DEE^~5wC e㾟}Rq$&om }.5h1u}<}̛6_qZ+dv ۤ}TRlj9pަ[k]ȾT<{j zBu!Y\ A#6]??/ߗl-bݞUSUͮWo~6V~9t\)oE&!o<#*?8_)y_6gH)R az/B>CgUO] -p?;s {pr;oa|z&^K:n5cHHHHHHHHHHwARf `ÝT'T_~?~2fɒE z!>q@bŊ-C +V)RD'%KȥKaÆ./m86իW%::Z muJܰa;vLay衇$V1MNj/HH Pw{y܊JC KxHB)T^{";I ,vզ.[.U2 sِ/sΓcK&|J]gq>G(*:WއCB剧ϜK*ț9[f6}e>̪ƏzkA)%ȿ/frɋ_ʫ/5HV,\.sE甆/4 edkTxLd/%SL:IƸ$Q_G+LSxF&U~rqQoJꗯtPs۟InؼFPM8l̜4K7NZjw/AWQZ}g$@$@$@$@$@$@$@$@$@$@.)XEI.T`RP˲xbH֞ ޅԩS*<-[֒'Eɺ!?1Y.[LΟ?:uԑ4i8Bu01 $IB$x~TqW@,ʃ#K;W<>T]cd&uW,qya6k}XˑP]s [{!}jU#l>l\K KfXoɏɵ< [RNV޸ $g/!M* 0"dJP߅~)2MJzC 5GVZ{9vM.se`: z媜:qJ_.YrdQms&tTçOy$ܨ <} Z+G;d˙gKx-9r@ȓ:ڑSr5c0s7kp>wd̜QUy^掠 s֭k/˓!{nVֱq'u^:Ү{Kc:^sef9y +WA  t!KÆ AΝҍ ~/[8z…*uss?V*[nUb{s~KE/]T%͟?rhYB%Vfá?BFX\ҡkRL 9y줌j]N ^AL 횪kqҪΫmpLaX:By4{E=;*a֟k( NM Ѷn\fL) wЏvƉTwTz9*ѹ::Hûq*τo&/P"&ZʱmgC4:e䏲 V[J Auf^\1iK g?rz†Rx.Z!n+sZ\4XOտ16#GHﵳȭ 0.it;ug6<[Km6pqokeI1BBѪ嚭TWn% q7ꁿ+j?ssl'Jfvkƕ_PT(-e) unR,qbvO&ϜWlo66/OMzsęU/& E0aܓy tu,1gwhb>WFtUZtW]-kTw.ԃ}`W _|*wSRs xc23OuFvĬ2k,黟&4`e!!$[3c_zե/ g iƜY"9{%IA/5%tn^duXS}߱-4vyRVKF $Hfpv*:/ZHaB Wtgl׮]{nI/. 'WXa%͈˔)#QQQ(xْH9!/۶mKǵgv|QuHTxs9 Uכ7n(G5Y;#TwTٽrE:=Ο?__=Bn;Ў]!ݑ ذci)T$x$wfZ %Q!Aa/[i9|z6=:S5=ҵ,e >#%ֱ\{đPOF( +_>QaW|m2&zճh(F zerr[Wt}LMC^_ZmzY ,OP'6nqJd:C 3g:j*VaM5s'xBQ 8iX1B9ڴΒIIͧCݴj;6F-͙2W@c-{c{ߕRiAD a=.%Gt?) /ԗ"̾Yk?QBuxj Flln_WQU ȟ8lx%ȳDN>6Vlys0c#6G* "xtMԡ./uSo,U /ə'JXglUl>iol0_"G=j̿QN3Xcb->vd||GOŶmJT/i5V-YHJ=&@l$Kf39pO~a3 % (l6\S:Fa?TNܶTdejٮ#ͺ|O_c>e]'Buxz͏ muqb^(W%'6~`A3I6f 6%voJWxX}7I`#ós:wגS~#T?\XegF7;V$@$@$@$@$@$@$@$@$@$@$!!2k\ɑ#dȐASP,Yb%'mq4 imyy Y]P!4,,".^nk7KNeСCo0xІ(YY0 B޼yL2 !<W\Wa1UVə3gMGFF:… *ss{s]% 9 }3@+wW[&8\j=dMO]:nx\R\AZ'ixR/"GS (ZEzxP]@?mETMM ڂ9m6cDfiB'Z֠f.B//Y [ Umn!;}Y)S^N'PŻ(lFP_# 9r*oiپG|+UN 3%2Ih؝m*^fO /}V Z@ Yͤx⪌e D?X@5HO/l)ϑ;t|ڀnXAF DK#zaGKSM+I(;܉(ywRuqcنURJJb a~y*I׆1ֲ򾊟87٬HV=C1sG zF~>ZMexC/W}iӪyo9yy\ 5[-۞A8I7ʼBQ%-X~o <_ Ox;BnO#&Ҷa{&F1xw_Qh9|gp3Gaէf&a{xZ"E±CM77zw?C#9pҢJ*Y1hHe&Hs);wnyGԹ#Q5"ڄA0 ? "5k(%b|P-jIll`sƣJh|8^iV@)U:<[lc=S8bH HnoxUztE\ 1̏0Bh z*qjiV> Y“5xמ6;Hrs=Q  ?"@ocj>wǻX}ӁRXKE(PRh ]WyTOV~X~G|+_lxI涗QK\t:KR]>,UjUVfgvomx~OER^5%*[7oˁ"#X>ossD?a::Pݑ_oQUݡkR'չ#:R4Ī!dɓ?e"MfqшMvL;]嚾veQSeU865*N8eGm'u<6Lm|I}inz[@۞P*O1D=ԉUz zϮȫ!H,y@H_{73 T&ciGsNyX꺵@~zҦ*B}{di-BrFD` ް_\E5|ҹٱW^7ٵnm_zM 5 vﴑ;fӶN{;j'm O0gHg(?AXNqT{qfq`‹M3M&bVxNgvZZvg]-q>q䄴JK:צ<^!ϔ%[pG$jn7 qc 1 LLٍ7q: ^xJ̙h^;Mc}'&ϖWxyfK b;_F<;nh%݁5hG彁 .գT}G1C'6 ̑PfOQ{"TOu uo(m;Mhz Fc獖Hc-iϜlkX\1Yv{6lyj{c^z`X}_6$ E9$ܱ4ja_4[u< Q}Jqqqۣ#` Vd̘G,]T.\`)biJ4ip-F#e۶m?˗WE5jԐtY sիKddO>Ν[yYMѣGe!QRbU蝱rED=CpdΜYJ,ǞBu{F$pP7#u.Y ;#VwV j?Yre*j.OSRVBrBu8۶TyQx겒atIMye墕oc!!Wߐju +qBo"5 0 /d)Hr筄IsXi8_ կ^*G x%ym`/9A g_$+1zldlFfуǤso8nBS3ߑPݱvs-LX;t\idȘA/+E -j"Ϝgwt\앩ü%Twy7!TPVGu\Mo[oE2Wn<6虊)6ޗ={Z&ڒPݓ=ۚ#69y#Qxac=d ݘמk-98Df[Cze[p^L ;N.ltZ>x̜8K5Y uޢB}_K8㻿W쾡`[rHHHHHHHHHH<'%::Z T; XU㰘ut̙3,;6lؠ2mt$mspM6Srgxg*/7oT.-mڦ4mĶV׿MF (*^_Dȏt:S>fU^%ѷJrw$Tww,Uxojl{LT[U:Mfegݿ+I #f~+9rgEuƸ8 fk8>Rꑒ<&>Qf}8ͺXyTf5ZiYKhjӀί׮ u^L{/<}!?2r-cCsb09uWGuODI =)ߓ-F&W^u եꞎnGOzȊ+dϋshg=q79l^Jk~ Pݝgo~"y}߇o~ڈ|uޢmqm$5 ,X&"SGOS瓌 lʰg:bx2ߨw5OZo#~ Z=;%V]GosT:>nNk|DI1O1_a<W-Y-z|=XF?.^$꼪6 =}JM?Z϶;TpRBu{HOLJ~~vWP<)P=[l2jpY{2`B#"3Gʘ9#%8T6eI[Bu o ͕:6s\rM ) & D96 '7?(O<%=Nl4 =P76P67wTx1y7+yiaiCe16O/ޕG>b|֭[uO_ ՓcrJxůPe9x xx%7w^9{z i(bJ%]t J>XxB$@ @/&yy܊Kg&XUzP`<[c Oihi1NJV_Ҫ/~vk]7$Mƫ7 ?\XoVK_Vy>.] o&?,hPWg^\nTK^NG9}':`7mPCԥ_Dfi֞1d)*,f=}Z _8/jӚ2q*K[Qz,_ oel52'TgA%~P1ɘ99{>VHxې%H:J챓j=ZXAKVj{Hd20_r95%?NN{٭.ꞌnAtx)73{ksGˎ2=zc\Յ1}z3%|R7X%vtxM7_ncHWuPB(! ?_XI1 bFx熗n{qsfq3ғ9mt|u- fO@9vdΖYmP-p{R&譏-ަwdn>;:u<9=\҆›D0o =GPAREb7LT|3xbd?K9<dV߉QFPgcv7s|c|/=o y 1^^N-=6b61sGJY9kγ._N`&D l,iJ⍗䙗VE֒|~Zb Χ]U}pw݊F$@$@$@$@$@$@$@$@$@$@ 3!T4U ExyqX!`O<)n$'uxT'agϞ] .(:=CcccVGumG2ehsϓmFyڵk[umg0p(ʕ+*y4i_oPرCI*@x3,![=t"v`sCJnGGs 6 ԇA>A1 0xwvS뼸OY|#? 0~\c#J\pJ# PghUZ(d%h sUu{ȡS&Y`#[s-J)::TJplٰML#t}U7! "|CDUbiy놿dB+, MΣIZT92fZcQ6K҆>IۜCU᥼͔s,6bsg 1ql5!ڼ)Ttu9+TƛxAGZf1*4ol"kӭo\GslŢEA*]Y?Wk 8+TGZWf:⻸~zRx`NmE:`.}*yi ZDv{q߮*VZ8y2xN}Qڂ 'K׳`_f@IDATY6/\hl5yl$k[h$X乖ԹVOb~ mP}ΨyJ =)4ũJ~9sFyDBF"2eHpC Oӗ.]ZX1)R [nc[%}?HUBu[( e7l+ÜwBD$s922"V$}VX /vΝ~`a AބPYn[yxw|%Twfysm1oDa#coKQUT̙3kl6v:'P{O[ɒ%ոkIH(T;eɢ-q؝re**@6A0YisPO*Oس'>!Ol?hKyM7ϛjsFkN߳]oGo)Q9ѹ? o\!6Ĵw.X_bͧ}iBH^[ϑ礄(x4k{ofۼOk9{匉3UP! < +hAɞ|G^]fɋ>޼qb=SK'8l@L S*~ִmiڦLOJXƵm!v<._l?l%4,ԒLoޡ4Κ7Q]{ W$m3ƕU#C̉:|(ݶZuM"X{{yoXn[:$dxroS2’3_NO2 }782l1 =)yͬu{Fa?'l|On#~,{0M:t^Bu9u6l0Ĕ-axn%NjiA:&Q-t8VMթX꼪y6j:6>TXR?.ؙ-ڭC{k{׽6tC?FJ0l9>ݼI%)&6bZ sg̀$@$@$@$@$@$@$@$@$@$@$=_9b7{ n|@$o=\MV gk{vEٻw$ q@jA:I.j/75k[~?~\_?|?uZaaƍ2oڂ?BljUAW(Yݻw[yG~x,ϟ?sڌ4lŊj׭{N)&DߘcS93070qO'owx-2'7hիC;64h۷oڕ Xa~k=`-ւB2~\1Y ficˤo'+OTkVsx(aU/Hڰ}[֫@\;id|cNb#cO<&͟xY%eQnxuiwt.?,МkGOwkW 𭻼؞ݹ=JuswM6z'^Sٞ{2tY%AënAcޙ'b]Ң+4Byc\-j762< VC_Daym/foox˃CW//\as[-}s$]tJrstwiK0.^\*r%ڔͺeyl4 /'ƪdΖX3f4W乿[scݽ73͚3I^s]9wuݚ?Wƴ$@$@$@$@$@$@$@$@$@$@IPLCИo^C_/_hYr"n{Ba}-bue0xƂfIHGBuL8~xl>0[nH.U|P`.@JD4D79Y%/.$@wޢNwUMC}.4*J   ,L" ѣfp?o^3@7zw M%,Hg<}6Ra$@$@$@$@$@$@$@$@$@$@$pP}ȹ'O P};ݱcٳYd;G:yQٺu(ݶ<$)ķk  )7q$?rr\yY5&MpD琬K%0 (ykT|tHaqӥOJI,Ν@)^_].\/6JdddʔI2gۓ_Ɠ !@\^l/F [ QQQ.[C֒ MMڬHHHHHHHHHHHHHHHHH^%%O<Z=ޟ:su-$@$@$@ fWIHHHHHHHHHHHHHHHH&$A2𨮅6Jf$  P~?2H$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$)`xT1G+8zT* ZڡeHHHHHHHHHHHHHHHHHH 0>P~̙S҆IPPPE,HHH uP=u'{C$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$q2mt#aaiU%5K%  H(TO. @p@9Wrm$88}N ܳ(Tg '                 T1|˗OBBB(TY =HB{pd                 N .@Y QQQJ]VH$@$@$pOP.6HHHHHHHHHHHHHHHHH I=_r-aaa P{V9111v1HHH|MBu_f$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@@`|5W #""T(TO #> >BIHHHHHHHHHHHHHHHHR1|˗ƀ!   DEEV~l=L$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@%J(~QݷHX: $OB1 K .@](ZIFZ#Gws   "C~5,l  9bzڴi% =S'    9 HHHHHHHHHHHHHHHHHH15j@!CP1.Ɛ @ 9HHHHHHHHHHHHHHHHHH1`exTϓ'DDDУcT!   ;(TÂg$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$`K Hdȹ-*:po0% ni$@$@$@$FHHHHHHHHHHHHHHHHH3 QQQW#Ɛ 5 zx8                 &(s,\rIxx=z   '@[H$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$rQ}J!qqqpf   {H$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@)ABgKtt@G I$@$@$pOP.6HHHHHHHHHHHHHHHHH.0{T :   {࠱$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@w@H@1[$,,LWIw +"   LE~5d#                 <>[ͫꁁߗ3&  p.bb                 @!T3j!nݢP>. P=Gnf                 HF%9spG?! P,HHHHHHHHHHHHHHHHH U1bɓG Q=U6;G$@$@${# !                H.yUB[nQǚ]#   սŐ ZGGGKXXQjG#   ս R#G\yTP} 0X՜_Lf-$@$@$@1 gIHHHHHHHHHHHHHHHH"0bP՝BD$@$@$@;  $GByJhhJJc< }OB~  @A}ђ+W. P= `"   PHHHHHHHHHHHHHHHHHQFIttPcHHHyWQtQB$&U) Xi* J. E  * (( JQDz^ef_K%/ɹI;$p                 M`ĈRxq%Tϒ% qHHHQ>@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@IR$k֬B?Z,'   # HHHHHHHHHHHHHHHHHH;9rHdd$QHHHP HHHHHHHHHHHHHHHHHH@||/^\g.q0w^uI.$@$@$@$ABu!                 1B գUC$@$@$@ P sHHHHHHHHHHHHHHHHHHJ ..NJ*ňV(L /2                 P=66V 3e$N    ?(T$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@@BB|#ٲe ՓjWU*+6mJJآryErE#7ש]VYVRTq9w|g,Ot4UMe~-L/;([0K 9 ̞ȕ#lXKeL/,wԯ!E Hܹiٸm,ߴUv;d}\S+ _Lu9GJƵ`ފ }AU5Z!+6o5vd6fԫZ^QQ#sG>&'?jϡ^ ,._. ^AJ+$O-Y7@ZqVc'Ne=?{q9&%F/'n]d9ذmӝjhpo劖 j:%+б^J/e W|"YHO<,$                 3zTTDUFT)j0w+-<߱R~ 5W~^άbrm~ gV}CSᚫ}/ΘeDrmUʤ9=X(p؉LcYb=v-g2{wWeRLf,nl:!&gE q/_5Y'aJ(_ưf(V RlK+(}͛a,O͖\Pgײ~no+-WW(%Ϟ/Z/@ZrVÚ?LhbϮ}֢d9&ysۗ=[;jo]ƞ'-D/+120Nbe_}QKIHHHHHHHHHHHHHHHHH >>^)"sV)T'g*?"j5plZYn ՟LլdmΗ=ȣ~nK8iVVn?!VY~ *6+]N0~偻Ff|%̙3ez|ٽ6mWmwwmL2Ά>['dNr +*f}F]^scuOżG:?)[IBge5> O$Vx<,۸UWQ[O؅UJ7iQ߾c~-M, W4όG d,Ç%JHtt4#{o]Ej^$ϳfy{4zyZSh6Tߗp^?]io˾o |/0^חP^n3iٰ'O [#7牎y\t~YJuP=)LէyrJ21R6^AvBHJUD]^./\08 Qƨ)(vsKTnVK-(o=޼'OJiIWʗBu}ٳ'tyr >;*'O7jyuCG)ceϚm;% v8Xi8)Tw\                 $&&5@撑}Pa"[oV>`DYqcS'b;qJr_2/8RS^r%Fv?,OOqBoGΨJq0Ǻ}V# 7~ 榠0}6mLk hΫMn~cALTOJlP=Lէ qkhٶJcbdeoBu=ʭu/}_(7]=Ox\ (|aXa~R}+ 4\K$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@ pE9r+VLrȡ4׌oӤt=Јmվ'lpBR!nXյP;o k8un! G\tSW+>[Ru+KqBDn`9{wkMcOͬo~O6eJEkGM6"P=9Lէ} qOCn]I_t?8&]җ} ՟hw\u#n`|B~C|?s.M/XbᜦPݙ sIHHHHHHHHHHHHHHHHH@WBhC k2~C*1Car9L)Yjcp#S^uղ1ң卪|seҜ+PdZEh8xc$nNPG uK)Tݩ\W;_N6tR4YI:\ ߯^Qzwj&Kon Jc a؎}GC\[zfu2e2N*<* *B0uV'Toq5`gLIpL2&җ =9r- 'An"ͯZw&roۤ=+Vi ՝0HHHHHHHHHHHHHHHHH4aÆIll@P][Tu1oy*zUzЄ2kDP=QG}d8T.U #7)^HiJ%nj zT)SBhG;PNmv2*1F{ˏHTd6w6'R+6m*jOk*+/KN>>+Yr|6+ 4\K$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@#GP]}؈rrGMKaE ˢ~q5хʏPQK-(_fɬ$Y~KFTx"PXC?/QU??}~IL}_G<vn9%B47l+dYNȃz:ߨhBgإ('^?zBds囶U:_Β':JI#<%s\pNS̅$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ >\bbb${9sf 5o,/?"Qʋ fu5RE6 D ?'9~괵JQ}rh1DV 8QBu؝jI7'R`>yKѧ*[~T+#o_')]/5[N%(p|d)-QY567jvA77*W3Q8\HH?'6T\Lfh`NT\n ﹩ʞm}IǤP*c-5I&ubbjo 7ˬ@}1I,{>RN9kmk:`m㊕sBug.%                 M`Ĉ*ztt\0G\4Lv޽ ݑ>]Uԗ]ˣ~Q*v~Idrcw"ׯr_Z((8)-TG eD$9.!butJ խl!ۏ*KH9|Yџ2@#C}0G$2EȨY ~|es$k*rW̹jw#Z2D0DfJ=/۸Uh-H%(E=՘P]e>6qRc5)3 ^%,Lo dTrc3\wgc'&H IWy/ۅ=}zU˩;5gz`Dw͟ODf"><_\onm+Vi ՝0HHHHHHHHHHHHHHHHH4>H(nգ z&FT`ͯZjDMD>,2NUyތ+ew3w~Є뒵f9T;k. X?)aOgIBu\U䩯;8#5+T]8~<(mD$RzS _첯 g/>$yH븟]^SU1x%xt#^;nq%馠qLy";+ q-l-TZ'FRE 'W~}\Bu_9qꌾ<͗+ZV0h0/3Жcwz|IS8 ~19E|*_N7AZ`/Xϔ+ oi սa> \"'%K9@/ǀBlQUAc{)_Do!fp9wYww5K}._/kGѥ JeJf/7%E3guS(4˭v9FY eBɠ;c'Nɴ?w)vⅤHC ?ǽ߽J/Zʮv~tnP*=}|7{C-78A7ʝjB$\+Uٲ:|y@ߨsڂZ}yV)SBGVC;z  '$Tǹ4jJG,-nrfSt?~@P__ݺUMkKERC~@sq?ʲňްf%?pt5I,%mxո붠41@t{S*fw9j ~#x;" bf>mbߟ||ς8&ŪI`m,/{ϝSn2˂՛[j P=ɭuuIy@Uu39RHHHHHHHHHHHHHHHHHH@dĈRD %T0FocROM P}˟ߗ]Wt)B9Z?sLҹY#cK"x-FD_g>q mZa>c'WuO%Ӎ(ؾ챻oPP9}ƻPgVmY!ejX{yGyD捥 uԞS?C"5zUKLֻ'JpjvL9tG< VuW :΅H^&'Nh;/uk#u*#w6yrH7%_7ש*VW½lL=t^AƵ"r'&Ps>t X=aö2sjA4$csX˫ ,XY w$-^c $ٴ92X/͌>?P! dtÇWB9sJP=<܊!폝8)//\Hȗ+ZM4ș=R.v?{{YzL̖U9&r{ȝ4K Iqp/(TbOHHHHHHHHHHHHHHHHH“"H9BO @P=nB$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$TDh? 6S$@$@$@DBp @8>|)TxPw}"  +`gHHHHHHHHHHHHHHHHH%KH; &K$@$@$@EB :2@IDAT @x@#GJb${5kVFT[ސ # O$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@B !!A%66V #""(T~ / ްg$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@A`ĈRxq%Tϒ% q[    p&@z8HHHHHHHHHHHHHHHHH IR$k֬Bz8HHH P$                HE 2rHH S^$@$@$@iif$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@B >>^/.ٳghXIݫJ8K f @P=eyl$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@i$#FPBhy =doIHHR$                HSTR;K$@$@$(TOU<9 @ zllgʔIQ= 4vHHH u Pyv                 & ~HlلB_ @P=LnA$@$@$@$@$@$@$@$@$@$@$@$@e۶mk.ٷo߿_;;wN.\>u/-""B$G/_>)P)RDJ(ClٳsN޽r!ԩSrIxbZ4g| >?~?=ƥ;v(˜uA9|->5;9sf%~Ε+ɓG ,bŊIR'#cLjO   0'@z vHHHHHHHHHHHH(DݸqlڴI6oެDiRm!V/[TPA4q֭S?(!qt$ÿʗ/fkj̢eP X+*tv5w+>>^M ȝ;Bz@   P=y< 3gdʕzjYv0&zեf͚*o8uѭ/_.ViiZfVZb_VZTVMjԨvcrwj5hFTOwE$@$@$: ]GIHHHHHHHHHHHH @}ҥf͚ _x*UvJZd '=p_e)JbZj F)z ~2ccc%22R`D |   (Tψ5HHHHHHHHHHHHH|8x̟?_,X gϞ]aOzI `ȟ) .ӧOJxȞ=ԭ[7U c믿6 ~T@8#O'111ˆ   b5             G6ly ERJҨQ#6% SK!0mŋ2rH)VȑC"""f[$@$@$@CB 5K.~MֺٓHH"ҤIUVG$|_{&!&qJNIhѢjk<Ճ!G -(T dLgΫ&            Xp/rȑ6Ü@|[nu놴3gÇCz6^Rʿ-ZСC!t뭷ʵ^RlNK,)Qjz = `HHHHHHHHHHHHH m@"q\e J2i$1 @ަM)P+S`L7пͭ䅤2ʕ+K֭]Srcƌ2eH%SL͝aGHHH–a{k1            ;SNs]ء%иqciٲ+'Et9sIn ڍAmUn~*=n8Q=gΜr HHH = @(\RƏ/gϞ El3 KՓUV):sL鋀5a9}tī! Y t*^DGG3zH   dP= {#5k#PjUС@O%Z9& 5cǎ嘕q\W>Kwd˖K fC R 4%  (TWO$@$@$@$@$@$@$@$@$@$@$@$@Xh 21ڵk'^{5+4}*`Tbrk*Z O#YfU}=w=z4$ u IQL)S?^".N( > " ֨Qdڵ,RtU"""zTP2la uąr-r{uƌ2sL<7vUK.An;1f)]dϞ]dBzz    P>So-?~\:$ǎӧOٕs ?`|,y/j{… i}UÇ+A H"*8 @lذAF#yHF УG\rPJ WHJb@ +={JR<ξuVO%<橞~頿Ä',i0O "BG>:lHHHHHHHHHH 0SNsV9 4[l*XM!̝޷Y#-xw9qG1"#TΜ9U{BAО@ TU5_|8WArXWv֊V|o3g7n,-[ )S:`c f5ܹsr)3ߞ*F$ۆ9]W1`,e"vh[:~c d۷o7ʬYExI&ҰaC%P7.W z۳gJomWxkO?U%ew k0%}__ 8D1XO>* =zT[@@`yQٯY׽Y)GcoøKOp x`?hé]ky:Ȯ]db hR7v>Cw6c#ؤIԵHi:>K8'&rђN1{|^)TO:KI$@$@$AP?ĉ64ޢ1d͚U} vy<'S`e:"t"\s|(TOz(;> dD 6,SŊ'Qu߾}MU/ٗnAZhay="W^]:wl{K\RƌH|8vvZ_h ߵ9 u~Cm>-[6ӤOef[ 'D~eð轥J;I+Z2.7o6@cǴiėPaoӾf{}~ٳg۳䎗hqwРAjR0&NJ/ k>69[<`>Kɹ|,|BuP==m^ +(TwG#˖-8<,sm?V5 yJ          !'O6CbH'a.Fyz!d\`A%.DP!;5nXTތ3d̙*4mTES>D4Afd_~EjV*! }V;# bjm6{߯{߿_l-CdCYBnݺuRҧvޭ"#{hL8sY)9DWM0A-ZdcB}ʬebKv"jSLI9iyeLtcVrI޼yyɒ%>nѠÎO8àYP: _~e /j*TPq.gcB&VВN+q*#'#$  @(Twfx,UR%ѣ5K8p,F$GyU.ŗM9-Z(v>Sҟ `JHHHHHHHHHH;%ƶ湝b@}Cd+V|УȗP*VA(AXy˖-2tP]XBMVX^`Y]wiFBoʱctԩ?3;wn9r䈼N'|RS ο뮻:ujNB(/có> <6au9Knne}ѢE՚֯`dcLN?|뭷ɓfsna6%kl!sԫWOkލҭvx3ޱcGQ֭[ 6!Tuv T/S`b NBuwfk{L=y޶Rٯ_?/xaE{PBuO }0y          F!6m^_bH]O0ՊuY.]La V>AP)qh-[TMC7k׮\{QϟoVuL}CP{<p#C=dW"}Wt37LOСԪUKy0Ƚ)A7vyr7,Dg]?DL}7pB70 ثխ[Wڶm &ЧͭҭvxY#ٳGML:uꔾW7ty *U\C;oNEY T+ V`%LjP=9/HHH i(TO7oGK 0˺?n `E{PBuO }0y          {=ٷo .C2}BqѣegΓ'WE;2XR(-\|̕pJkŋ]f5rI`S+:8q<ޞz…瞳wq?}ʱSL^UVM5zȐ!%İ Fp/mD>G0:~1V4x饗$gΜj&e8Y ~ dٳj")㈿6T>~I9sf%/Wԃܭҭv̱wܡСC3m])Va*㯉`>Kʈ$I(KVg *?x$@$@$@AO2-0y̙fCx@a>„a9/DkfP X+_|R@:u 26Z0Sa[tt"M]6qXP/x96mYJ*BdfϞݜnV q+WeΝ7c>Ǘ`Msg?d],W~}dm!0hÃOpe;vxX\X1YCT֍ka/mݜ78BK.U^X^ +j8Ͽ?xki3<˙:6UI&>",YD֮]+ >6319}@G0~2T&         '%A|!u_I`57J||Gn6[UK5,X:o?3R`Ajm/x'vxG~]ҠAtH#Ulj/yS"xΏXJK̚5˱[kkfx=V 'aqF<n{^R%txot]a7~#Z믿|\?c]w}x1X׀SܹsUZ&wt+?\}Vw%K^z՜jg2I`>KI=Gz?BuQc:HHHMBd#h`ʔ)2}t3Wq3åXNh>a-QF^lP;cVq^ fbFsVim˖-8sCY^h6̞=[&Olʕ7#-۶0y{UbknP}˖-+ӆc3ƽu^蹽npၔ7`A~fcQ)^4`MK ۂ jG,ozǎH$!(Ǝ{X6oΛ7O+U^1~ @Z# /h":Eex7|;C9aĭQ!sbX0BuHg{Bgx 6`|-zslBum5c :AO&W뮻<x?8h`ӿn{qn/\ Xbo[_~bVxg!xh]m趼m7oV>5^Վz}]s%g?|s1c(&mP4HHH5R5YT"BڵK0K5飄s1Wڵ LϲcUN P  +2{N4;7|ӬnXzzK}Xd뭷KQzbŊ3gN]b zDG䉾}?ѷ%K&Ξ=բf͚f TxaxPF _Q!/^_<|WT Ieֈ2Sn]BwD-H x dh;P:$C|5?D^{SWsoCq펝tt˷uv"zu]'ŊݻՒևc >v~ ZE6_~M<췎;=]|y<ȵ>Ųm֭*uU<#{TT3.]>8:u׈:ETcV{O$@$@$@$@$@$@$@$@$@iD:(MA! 'M$]vUxw'=TPASk TtMdBtzb!<9Nڣg~w$>ڬIr<O!> TGq?@:xbZE֚oMӿ4Kxٮ];0D[jtR>m]B͍6t[޶fo֬Z[wkt+/:1b%x7 ˔)l޼yZ/xdXyoУ8gW;믿X~8]Q & $@$@iŋ Z9pV]CL$&O,:οO\hk_hYT)k׮f`J> ƒ 5j)} ]$Ty!bF%Gd\)ni>|p]5mT-PW^fVΝ7mwϞ=/:[| K.j*=dYrKm0SDŏ>؆@k֬QF@NBi ކ}tϣmx(k5,;vpZ ˒b BmDu;DnлjkB,vCi&+@Xb|,vÃ0|I1' @Z%hxWJ%e`!I޽̙3eƌCWZ!qn I={:A}bwkgɭsv Iз "Bty-$@$@OS=8ԉi)wT|#;P=8^Fa*p,^uUK+X" z bYRJ/}" D l}Evz(΋xx Qp 8_sC!a`̺m_[;Ź%`^ET7x\ ϭR}D`] jj۟PH0@G~, 6m%KL<'x'6;QI~GaV!2 >mZtXxRJ6 _X!҄Evz(΋hs]9[Ϳ 3!˕+g#f6AuHN,X@.kݺ 6+t=+"ٙ3gt>'R myIכP#"yttZmnw)zbV9:M z0\[z>K."w5A}ɏ VoK'#er1z%P>   HI-~Rvq+I:{乵mA>y޲CnSUz_!]OyI'D ;Qq'K`99(6o\*W RõGyģ5k"1h×jժ]`PmB°^씗Ĺs[mX?1n 6p3\+xCR e,A"ABٶ7… (_/qx(J%G68w(|Ν;Ut]Br [Hx8n5Ptdk={"u|!>>k0D.9|v1~hg㞅jl C$@$@$@$@$@$@$@$@$@iL<9]%eV:⋦`FP<!ܳg`U<ǷsK0v۶m+uER6mJ{BulOafD?f7o6WEyw xw}NIC8߽E_Fra]|BixxwjknHrjXM+WksûцnV(5jY-**JM8J[h] F[nce_"sj%K[NJK :Vnذa(/+] =7|#z@zdYrΘ ZyҰƕ(|곌HH$B']Y6鋗7O4i/]ϗ`uBX[A:O : @U >?XyuѢE"^~ٳg{4:? "cz޶/g2_dVΜz޳gO+CЮY8wǏ+W,sFfc^zRlfc%gD?~V;V^v:΁wU@Y %&:&`~'0zyPJ6kKfUqS$@$@)A % z2@vX$WhF۷O0;_(\ȭgܺ_5ÑM fk 5Bu,eymۦ7GcG%u9|:wp4gܸq E۷믿nv%XxP%Ǵ_J(vCٶ]˗/xj%w PF!T 1{֭?Ή{mk.GՇo^g:Q=c'$@$@$@$@$@$@$@$@$@$^ (`%Psٗ_~q]0bcc̀-̛7OIժUk׮*"6ޡU;Q F!~_2R]PDGMwʼnʐH5k&ón"0 "/S,Y:uJߴ8&&FcdȐ!t[xopM@nזuNWF̠RģW+)2[W}ɕڗVi+IdnԮ5O/ڧSZΉU>L*C0? ܺ<=xDRϟ+T-SB23Qgdӎ}t'-#;$@$@$J))T_qd)W|D`w+4ON^)T̼ :AO˗W_BQuyR2 6*TG9$eϋ60`ZHF"P1s0 F$W_}eR p1A31^"c,mۅ֭?An@m(__CvLʕ+*DԩSeƍrE@Lհ/:&BX#':Ϡ]1uHHHHHHHHH*ܒ @z"a9rdz$^zp}Z&?XѰ1W0X7d2I)SFfͪw[l Kg)Hmsҥ%22R] >NJ7GJzfnwJJվ.ClcaE쑲xڨ)!=E&]*;2Fi~]MseQ]f7ڬ4mx9Nc'O*҇ί'5JɀU'&+6o96E*5n-9.9 | 9r9eH7kPS7o$Yp; /$ۏN4.㸣MdɔMdO'DPUmkZ8/:|`^k''9snZ6mpÇKrСI~aUV#[#mP2h Au\+"Tk,g}֜ ކ;Tm`>O<9sFuSNҰaCF / 0Ν; Vq~Q?L4I夔Pѣϛxq#PGU C1/#         F`ѢE2a„m7ڵkw}ߜt|r SǏ(H ڷoT@1}IV[DoxN{dʼKT>^dTkfɔYJ/\O֨ v|&FU*YL+(-%!׹Ԯ\sSETr% ˿$kRW*/'+ޮ3Ed;^-姿VW5fHH'6Gynu>+Y7[YNf.G&f.g*0Vܸƈnem*d 5R a!u:Y_!b'xܡP=H`>رCECUyA`? .MCwu@IDATc!*}'š5k&Z ivUBpkѢzIlfb`ڵ)Wh_[`?g2B@ !q6zh?zIPmSWBsN2 |֭D6m!T߸q 8мKnvs[˘͞=[P' ]Z`j1z o,'         FTڝ ]CЧ-\»cr0 FOi' 0̙S^(Ttฟd f ^>/\0'xYw"e5KӼAMּd͒<"no#'.EC#nOgʔ߯Da[T{.7պJzsū%e.-~kIB6wa%"YhߗM6v,8+ǏWVdKO?џPmcӆ{8qΒm-b'%̽ յPc2 &h0`+VL:nǯuwYJ 1+}֬YfnFpHs م- 7+WTܞ @:QRiZJH@pӿӺinI Cp볔دJJCΈ~` t,۴լ5NS8uH(ӧS _\"zrꃉEYk씾ÿ5Y@s pt"+ƍ3g1{ms9GN;4{D>vM7T4T, 7 r=*?9VsO䫯rӻ;8g\"ٳg˫T׷zjJgsn#ux$mk0A]$}*o&sJ37 ME݈z-?wT{{ #    M>s^Sю \cnݺ@=?sѿogy=+WH|,\T)¶vEdũ2q,۳7^(-<+=S4g{@kى|qCq{I3ڣr)G];9kVﭾv{ uv#3ΠGv F~ Po j$KF"U iPN!@৅Cd>\y{)>.Iҫ?3}y&Y~$'ˀx2qJ/ǛEi'Y}'MaSתs\LYq{TV_|N'R8/i>{:]Ni޼߼y믿^:vhws^qO4˒G)]9 yW~NjP?'͖U;cu'FaQ A7?^{zJa 9WH8%6w G:awwP=i @ qKk_---5 |[Y~}뮻Lt:o߾}?tOXSf_*\s^;+>xuKݺuͱkc ~uAn Ӟvi:Z >3ڲk=aoT ȺڼWuEz쩃>VHON6֬Y}8){5 /?޴}=`[6Tcћ) }ՐtGzs}Aiu) o5}5}~ /8_4@@@@@߫hKUc8<jԨ!~L=K65U2=WW8+<q{I6O !CLEu͟h!5E/\Vn{@58Cꤥ]+֘12̪[5JAS CF;?ӎrfUKͨ;^f {Uv7g>7%bE5$aynXel߻udL}mٛrjr]q@BdP]~x]ٶsVYh9qGE'nGifϝWJzO'<Tuy6&X`#pjӦ\qմ]MT_'@V˜0wWP]k3۵Am?]qM#km ?^V.?C&jO_Xyc!amz~V袋 f뱫VAgip;r駟%unwc ܆ؽp]۾A}L[ [o] ~VMw7\~DQT=)Bf1t-nX~27x?Bѽ{ws󎻺.K$t4@@@@@ 扰+>p\w}5OZp2k+KҺIz}_,m#1^:䓥SNFe_СCMd!^qɌwȖ{.?CZr䝑cd;0ޕUT_z ~iX+M^IL[qJj =N0P={wO_DOY_QAuݮa Vxv+qvX+gUUvN3A}{++4xl^@BdPis'LrYۭwZ̍Ism&/m_{3|9'i]ڙa%]?APwo'aĉ2fXwW^Vn޼պpBdҤIVDֻNY}D^z;=Ͻ+K%Ḵ/|f5x֋k+ N>]4ح!Ԓh#GofOZSO=U /6׋ΗS^'ޛ,r<\г`_sZ*rZQ]+x =1ȕ;$6\y ǵޖq}2VvĂ MM9 }S cM}_yG{s=gYOѧKoqM S}?|ꩧެcKSu9 뵥wk5x}"nnzȨQhQAu$u    TD-?Vk׮tmה[|+m/޳*54h|/QI=WVT0EoՋ{j<'|s֕kk*WhZ;e|2nnzh+3-Рv :vTfrK$YaZܞ-]4{8 „v;SkL`\k7TudԫmeVCQ6ש)}z]iFY/}eϒ5.=|I|@BdPʤ9 >E<ߝ}rgf7^(3dUryfZ{Q)^-g;w^o %9APwVZhضm̛7TժU3Aի>"YfK4мn:OWt8R-^OSSSMT6 :޽+V0Ax j^-iS]rk׮-jՒ8#vo'%9eyᾶ#嫡oE.ԩS'#:z~md~Xύ0zHtA(S+W?CVV~E>B¿ h"gƙ     @M&̘Qpf7 #"кuk9C]vY+kjҤI2s` D5}ts} Tرm۶~ @^^dddHbby:9A |g.\.+VYfJ\yڑօ:ebyO/?S8 gʐ~>1rh,+$x4}7V}y2k evhlLHpfr9Uga_q '._^&&H;ȅ'vjnW3V -JɬWKIj̞+ @6\-{w5Kz!>qa^ʪ^غ'<9IcۤMv{=3n $*2⩛k;+ bzXtE(3^?pV֭r!Dƍ?VZNC@@@@]DRuZ2KjºPW2ehx֬Y@:t UV-=IN\_ߙ9@6m̓fh{.cR!CLP=55UBK\5u}*kIKZl޶CXZۭVԯY]Z/zrՓnGg ӾYf~_aYs"ץ3ǑVo߸eT hbWL@r/72ZYJJ3.lz0ZE(+իW3<#۶m k]X߼y {Pv]wI7y@@@@@ hkܹ2o͛JQ`zff$''[+9 ":# PWɡ \@?x@[FG"C@@@@޽{eŢau-NfSDՌP%-2111KRRԬYSj׮- >Zwݲl2O~zoǎ}v (ku זB"\_7B5Y֭ 6kK/mœ. #@*UVQ{aÆ%:V&bveNjG`g@Dzv@ `}رceʕ޿;09MtD@@@@@@'0d SQݟR%NP|@Au4@(Z-EZGWn*u$$$g@@@@@@@ʋsrr$>>2˙+\fwg^r-@Szt @@@@@@@@C@+:T7n,RjU!熽@@( ']C@@@@@@@@2ϗ<6Ae~V@zQA@@@@@@@@(c `  P."        @ A$UVez*8 L         P2l0ʒxeq& ?         Pyyy!#1VP\@(}>9[D@@@@@@@@#~Izz$'''^~{ e$@P,        _~Y233%!!3ArsQ@(+e%v@@@@@@@@@Jvv$&&JllT//gD@2 ^fl@@@@@@@@ʁ@~~ >TT'^ Q @P= N        Q-0x`ʒ$zT-v@BzTv@@@@@@@@X //O5j$5jԐTsŮ! @Tn         @ hELIIIzԞ%v @JzTv@@@@@@@@P`Ȑ!-fbi? E`_@@@|u        -+YYYJE TJ@@@@@@@@@ haÆIzz$''TO@@A !        j)))/1Vz}e5 XYɳ]@'2LG@@@@@@@@ >C DoP D@m@@@@@@@@@ *գ⌰  PnSŎ"        @) Rvk4#=N="6lFq׾б3 (/̅˥!-s񃌛V A/}m/!      @$GRu# [o@IFF~]ػw>ӭyFys.roߏgA.?3 (&Lu뽻{HDg$C]>T4@@@@@@AHn@| TT))))TTz JA [w ٸusWvޥ3^P.k Ra      DRz$uY7 v t!C$;;["1VY.\VZe6V+vՋ% @ fP}%Ԡ/k;+ bzXtE@@@@@@T #+A@ (Aq[Ze54A$?(_B?1 QhްEnye 㢓1/_Qn= ݶzsiUOJgo<_jWOvhQ2g7wEPYW%Qc@@@@@@Ez(z, @^j%RJ*0^T2b$g3F.zTONtصgx7:\~J;w>+N9B {iiUn%?0 YKɷu#=y]$eNӵ?r~g,XJ=JUYoI/2㷞wݮ3Xy {ԣz;+-A      $@P=$>F@DK,+999 ? O{<1sAuyF}iH:4͔*}f-Z!cZfÄ[9A ۺժIzJ쿕ڝ{ #/K3ܠުV\ߵo{WI=H刌 }?W $){Ojf&LA_bFo:之eo~<{K&rEQ_A5k]Wl ɉҨv }fӑ'eh #zQcI>7wM+ܥZկ]pz>:T$@@@@@@Ar@| TDAP=P_Ε8qԩ⌻}|6a3ǩGGs앿YVX9jflyוR35I~>_^;gލg/'XUmv^@C A={u vm <}3-wF/I;P3g囉3+\,9??H6lf&.FՃ?      *@P=TAG@ xuu:NCg:}f8)v>3_.[APgں3gZٹ{ԠV rב@%?A D@$[^9;N?qoݱK Cgk]b}7qlcNm -w;6A`@@@@@@"PAf 'hWXn,st'Xseޒtbqլ.M7pM fpLhO{Y ͫ8X1>w\{9\^E]s=Īb#~_l |9 7<hP=sv@2dP?-6uݥYz~_ɤ9 |X7P0V.t֡7\cѰAPYW%Qc@@@@@@E|4l!h냝[dt7㳭'sf3Oߑs\xbg_`2moǨ ^pkVawq8+1WON4y] C;  ƍ%11Qb3Ջܻ/_vSkp-(G|=I>i~3au շlD_k޸ Z9˞+ @ Td|AtIMM$OP=Np'cdܴv w^|ow]LhNֈw"53Y.O B罈3o;$|AP @TCdϻЏ̸Xʼ$|4vO<Ү{vܳGWJUf={CjUW_sIVi2k 3;>7D @@@@@@*MA ?~k姩 +zS׻M.tnk&﷾g.f_ɦm;yVRtnsUttď۳k$nXG:4϶J4]#eN@ Zv&z INN6?/~8hDy+śדm*'fʱJ5S&ӎԤ{ '={f{fVhdկmO67RϬW[^PϽ.@N`57فx_7yb2mRnH䎢VGO/+=,i oزM|:cn&Z_~Og٢O(ٳPwVA       a#su\wvqZflU㯫twP$Ǩ++8 j(_]boھ8TV C;&AzjuKW!/&xM+.[S#E''f뮾5) հz8[(`] W`Ǯ=zfHm,LV5 u`6FP=-"PrWo3 PC;?@ENy4 T$se&w^5kSWC Ԋ?-Z6..NTRfȆ@ o>T~7hs=U_W[jeS9]v޼ye\vmIVmwWiw5-yvP^u}5_tX䡆[nuTi֬1Z?@@@@AEKPQ=۲qvg@ ^so8h)XwEkޕ|;!-UWHfa@@Au?0LF ӧOwB UO걱a@*@~~ k`]iP]m۶!,[LV\i~yQHw{ވa/Sע~o{a /\Є4h # i    AKPc<{^  P*Kά0pdefJT׿RQ, Dz%9f l޼T kP+vu~J c]a}ǎ{^ӦMFEgΜi4i@dW5nVࣟ=.<py}W]ł [nm,m    [ )-{4[dt7t{ jGbFT_i۴-e0vשuuP4a\yvl^@Dzh'BZJjzh, @z%8b hoƌ& sɨ_Kq*Z|3@ y׿'7T͒@@T$',U -\ee OwT/S@ZItVX6!t>}tٽ{vjW_EͳZ|ajRZ5i۶2 @@@@Tꃿ CcAu~F4|i '@PDf9p 4ܒ%@@ TD'C-5 mڴI48?;nVREvv !P5|7ըQÄ)nݺvOs`v}5=3g~ǎ}i    DD ̖V=N$>ً=o5ߣs1#?2e"dPsg^ O %KV( @TL 8P%11}-Cm$WZeOKK e5, Mz(YԩSM;v9 vH]_퐺Tw@ T{o&MdjʩnW5nV⣟=׫:} WYzOwY {衇%!    h ?MԾ}r Ȋu?Hz"AИ[3IIITT͓@@T'C,u;,w ݮnڡu*)b ļ{dڴi&`J͚5}YqAu1HEh ksaSܫZ|fۯ>{[n5! &Ȯ]!9kڴ{ҤI3"ko'N:ӊ/4xq뭷:פO?T-[K wUN>dS{4OA.}rWDɾwqE~k<=p  Q @P=0`@iذT^][y4 T$G5 JzzwyRjnAT/?=Eo䥗^r6|K޽q@$w߰w?hQFɢELkݬY3`,'t=]WpQxs.~|猉SkF:ukvĦ/86k5ᅲO>D>Ňb&ooU;z4?3YryK.f8A@@@(lA@LOZ s\uut;N:Pgz2g@ 9o])##]'PfZK,gn.5yaiA3fZWP=SN>}8kuֲ~z@onuQz_ DcP2iJJ⋥NFP    @ uP;_5-]T>y2kDZ7^d:oTvDhl M   P:^u9:@| T~KUQ]*G?@ש3f 2i {=sL ׀V7}7.9 ZOҠA9"6Z&Au UR3bu\#qT`ʔ))hPn~n޼yvtꪫjZ[+/mǎ?L>#D6;Xƽi^[Qnt ۸gryT{n3g1U}K+7jH -Ugn3zsހMFR~ ۷=z6_AP-͛\7'Ll/Æ ތuQrWg4k.Yth^oPGR\ +V0OKϩz?@uڵfk6O DrJkVZQnFA_{5 Uw evi1==ܼAP[q@@@.@Pa@ ߢ}IRRKNɒ  PcV w $mV!Hw ۯvh=UE8@r hxXXM#5tTPހ<_鹹&}s/ƍ3!AINN.T:7#~pUDCu5k>4t]"TPW^|:uL5pF)G6oViӦw"uafZס&oǍ jP}رr;7ӧȠzݹ+裏.kahz] oU@}h_ҥK!n}vM-;z3T8q|Dzn:{{r{LGtIGoHGUDG_ל~jRכU[s~yuSGiGtg)ݺu   @ ^!O+ C;A4AdhMy4 T$kP2; Ckcǎr{ 6j˙)3CNPmъڪW4A h5H_n Mz. MKhmJwգ _ )ōmhHY+OۡlՎa{j/*pmG7kYq/TS*zjZ[CzLgu}݅Ϛ5wV XFNz7iq.7w\xQnt\?'35ܳgOΞ=[^~e3OOD`o{uIsվ.s_qdWöTZV%W?4Dnݺ=cXQ|f7ԧב=O0ۜϐ:}|jSo<=f{«Z>C1T/~~:tG3Tw0   PQW3q!DA>_ X"'K# @% ^~N=cN6~4TTp[Cy|YS;<5~9瘰 }G?ȥ^*waǛa~lw ;A/>L:S3(M =M2[ha/RvRv(jT/@,Y"7p +jym $־y:nus:^T[r 5kzt]`]wu&kw=kXG"pByͮ~rgm0s~]뱜p Ҷm[8Z)NI'$\p4`ŋ{ӟϾn33RTP=_X_ofoW\ӧhmZ]y/YXG 0@&L`FFȮ]"{}զ*3_ ͕=:SN1U?_CfzS ⹶kBo YbUֵ=泦^#?Ϣb_Y>-~f Vۋ̙3`7   YzE> @ T ť|~y4 T$kFSʙZAS.29c}y44.ԪU+ԠLqAK.ktA~IM]]3f% =fT+kX޽{=fm_| 'yt(;CW{z) 6Q#P 4h|iuߣ+/iv1c8?gr>a2)뢋.B^F 1by:. Hqk޼y"E%믿J͒W^yUiohvwxw9 kHZv]+'&&:h/aqڵkMpg񻻟~|f~^5i&jכ ׯl۵kgBVauPںL߻vӧ 6 VGޡz^|ECސnU[a@@@*@PY @ vvdfdH*6a4  ~6H^*mve׮]r]w6i@+wjff;t`ZZQCv;TiHI2,<#ͰUfKZTW븆5Ӽys ? h[EvI=rӰ6R43"AfP&@D"޴iS7lwvkffieJףF2馛LPݽ> k5uaѣG{퀫{47D"OE[n>ؽ{`}SL?#/6lhnp{ lkp[O\)͠z8,F~67+7Q؟zinx=nCuϗŵYh5!v//mTݻu|5{w颟?͛eر~t_K_15]SoԛQ5Auo@@@*AxV9&@h ghҿM$ZYa4 T.}5ܣ!mli{?0Ï=xGwȓN:I.h"jxPV^Z70]UeѾvEuvnknv+v[o6md4,)=kF:ud*W{tv(jT/S†@ D"~AjS7t)'𻽞w}ש&Ns]{2w\iݺ[dO>Tf։@HyvHǍ'fjܹqf37y/7ipmZy^ɾVj~TޤAu:cqޟg(j˖-M\>иqc3{nu&իWw6z zӂA}])aD?_iH]s:ӊ _zcܵuN0A `T7 |>2j T (({Įg? 6슊vJSԿz 끨" ޑ=sd'!f>d>3M|   e\z? @ i,QQ]κnݺ[Q=5@a6  Pt_խ듢M4n)7|cx@2Z~}[VnT]pUuTt_1nQꙂjcƌ'|wٳm-07GAutP~7OǏYfL^xIj*SnSMUٔ@ @.4aw!(U}PoӇct?K/TTWPVդS?餓lΜ9~GWVhCusqǙvY]wr!z~t~L(죂tc9z%] y7gϞK~ҽ{wgGvMo$QXR资$|+|]D;ߗk׮]t1}o}1}OAN;<3տ;ׯ_At^'>G?|2ue_}Rjս<   eYzY> @i ۙ=F{|UVurmr2ڵ EIo  Or7,>3 nݺߦBy|r@;@΢ELq5U/U´p&]\}ei8~؉'nC-pGPj~tӾo%+hT{޼yIǍgάߪH?\UMWvB6mGch^ _v]KzTU{MK}`hd„ .XI{{]hv0`S_-IIգW {B'k-}ڍByxa o$bŊEX+7i']u^ie k _7O&Ч&M^鸳~Tef{Æ,eFP=|fF@@(@JA΀D6C]P\9*  ,T-2iG_y֮];7hr@Qm7 W7 3yx栺vЇÏ~~nz׮o%Ό33f׮]| b!OPMIjz TyaU)SOu^.0ڕޔ+;.ѸިMH]0\ N@J2j?ܹvmp~NZ^nSznS]>s㏃к'w[]̿.[p>ݶ2&YCm}N;-i9yz3LTe,Y\f{~G7#Tw |C@@( @JAN-ZDE{2TT͓@@ KI^p)[ж^{gWtGuTʬ SQ=e)0pAlٲLM\5l0X$QUa`S~cMi1-0}tnU8 MU}U} ;[WToժU zxX nWvb-Ү7ߝ^z%ބuU'N *5HwP݇o ֧u{6Q[QFnxSnWUnM]_~MkM6"%T",S_op>|;p<8" 赅YfP^o4hQl?{Tr kz3~SӸBw2Qϳwy|hj+~s7n 蹧7z뭷j;SOEP=Uq@@@(@P,U @ T 0Z4or*V$'k# @[o/d۶ma?٤Iܨ}5WX᪌jN;d_@ TaV7-KAT/b!@O"00Qa vcǎ#!тU!pPGj(5u\˥N{LAh5=po샴$ptO?YGM+l4SboyieԩS|EyT(^p _BΙvz葴e:ɷj7E\jpUN~T߿MH|S\pvU\ԪWnzzqM_z%7z[.]pO @i ۙQ&MZ*U,*  $9s\{ut{OjgunXA/vTR!"_﷏>mCQK-TTg?-MJp.MRP=\1+4Uo @Psα3fd<"T8$TWq WᠺjSgiO8ܣЪ﫜k~)dڮ*?3II([ /(P+_jw;\kxڴinln ;j>\;1cUW_\ZV+h^*\,5n;FWxU֛N8;ݰVA(,T޿9B!mܠ #Gɓ'kHz7У~Tߟ#|'X5<9裓`1tP\wk׶=U9ۗ_~g[T-[P]u^ӛ.ϟog-rpIoQ(^մ^oޭ_>uHnݺv' g/p5kfzڵsr/}I\ԩ5t9|R!  ue s| Qznge{BIsdm@A{UٲO>n̹K3;tfp8l;WUUeQR+N0 \tEUpz.Ms +|5\-b. >.nJ4@ .cƌq3逸j{np+XT׸Z xT\ttӴBxBÏ?xЏ{キ *:~xo*ӂ * nzs%\bsUUu]VZ>eEau5U>Cp8x&[xx-ʰ=PR7.lSl!>U2%T6sVǍ6]k~i秛7/*t3-[ׄz[AGoTr-[P]I6==i>p~T_ot?OUenIE/u?z)ߑj3)1@@@, T/KgcATLzDk= y6 @z=Çgi{G֝馛\KnjSh[K,q*Į7?}gA38#)0*)\0[om pRz.Ms xUAUms||2](=4t b$7b֛ :|Nף5m8a-_.ٚN9唴op+[H ҭz<~k\oxS+ΠkQepSu;U^>ĉFxB￿ Gqo$P{Uε7)jso^tI֨Q 덒ʮM>첋zc2Tu}AtmPnuQּy}ϰB wN>Qsyڵ[GO'~tѸM6Gǔ~Z'T:E/oz!#9w=Xs@@@(@P,U @ T OԧھAYretRc8NPC oOE7|MzAp(]}8 AuUwvpKM7Md6m)m)^  ] ٦ۦ#d_ƿ)-[j#    A\Y@ ~UP(62ޑz> D @P=?QʨҪܘ:d!) mEx귫p]IT7UpQMǹ9Z8}TP}sa ߔK/ƎkիW!CdvzwJ jOiǂ,^>ӰggZ.4 Ϝ9uCPk    PKBm  ,S+ ~YkܸURenDe@@ c}9bAuz1!- U?3+c9&1CقVݴiӤ텃Bv3iq4    Pz^qn@@ YzGatr"iyT/ " @,s,Cyyyiꪰa WQF~헵~WZ TWX;5|:M M/p8loyYRg@@@@\* ^zk >TKUzXa@@ A4(LB GT1 }49:yp0=[P}ʕ"[nҤFnqB~~u}X<:tM#)a#   APO@ TC 6mXJo   <@ z$-="@<#޸q35<et߁L.WtteZ.ٳgmi    "@P==E@hՋ榵֯_o#G-Z^tKD@ TPKL`ܸqvZQOz}Uu=96 R/?]k֬1UT>Q75j-(Oe ˄/p8`iLˤNsq]T$t@@@@ ^ @v}65w֬Y3ѽrn6RI'Vl @ "듂( 4i-^ؽ6//!uNA˗HpG @ХU'H T_jV͚5mʸcƌ1꩗R:-2֋bZi~x_N;v8    &@Ph@3lr)޴iSV[&X@.@P=8ϟoSN5kԨQcsÁ>@\| A%K@{˖-N:7իM߽q%8{n2_~*Wlm]ꪌ#  z\@IDAT  PlՋ@(@P=#Mf 2ZnmUVuT/ ! @s%]e*U1\a]v2#|@قꪬb [r$;f nڴi6o˶ik: g    *@P=WAG@ o=ޚ7o hT2<" Y|8IA-D+ V^݅'}X=[P=ڽ7@/)ҥK]ؼFֶmY_~1NWpT|S}pP!u.͝;TaÆ֤IU     @ СCݧWZeA'k# @ $sM@ɓ'vRJVZ5W]=??UUHRaA @fTW5+Ve˖ٚ5kJ iӦO֛rW\U;ZFt-N/pԐxxxpA ӭiBG@@@@Szq7 w)Ç[ƍEk#^P9C@ TKP`ѢE6sLk ).5mjժUՅٳg^ i8nMt}.Rx@@@@!}q @x T|z]Bc#'k# @ $sB@!%K*˗/wpAv>FOJGUR5d* . *^O Q]\s]ڵ'{'B@@@@ w  ^X f-[4HP=ه1@@`#0@@@@@@Yz1= i|:,&@`Ȑ!֢E ^+EPh,  #      9ou wElذFiM4qO~&^tOD@Tɉ0@@@@@@(EK`W@b#@P=S=bTV_zn q 1"      P Czn瞳-[TT͒@@ &cr9L@@@@@@JARt2@TTsdm@Ai@@@@@@#@P @ >s;C-ZX*UB VnCek֓@@ w^nH       P8bi@ !CUVg˗''k# @,s      .|7  y6l^Z5[nA8Y@ @P=gcD@@@@@@t T/]烽AA#qƖOE(Y@"@P=.gD@@@@@@T/==AAε*7k֌zn q ͱ"      P:^ Kzn{С֪U+T_vېhu7@]'      NzX@(8dkٲYŊ   q8#      Kz:  @<vn͚5*UXr  q8#      Kz:  @<v իWTύ@@ p9F@@@@@@JAdž ;V\ʗ/{ PvzUQy斟o;\.mCn]F6Ah= @rI      ­U2K_f]iVqV5WZԯtG֮]kg϶3f/uެY3kܸUP!K{gݼnݺv9&" {=2}V뀠zY @b$@P=F'CE@@@@@@ƠW;>0V^VJ G:v lv[]0?{MatMO>dy7gСC>ںv2L({ׯwU\9 (AhmaܛT>LA@6  @@@@@@@JSP)7&ۏ3&uu|x^2iF7nƶk]syn:{mћZҥ{챉j Xb]wu.٤IիWlEh樠zV;RQ=7OF@TI@@@@@@(e!fzǿ?G϶*U(ok֭*ٷsL:uSk׮ԉs1}i*Wkݺ%-m⻚;]-2* FZڵk<-Sضzj<9F l͚5֤Ik֬F߂__.yжʗ/g%=_폪֫W/i?Xjկ_|м~͖-[fOśBZA      G nuMҗ\k\mդZp'L[b?66/C:,:i2cz6t cvsOk߾}R;ݺ~Z8i&[oUV&MdoYƭ۩W+V؃>h[ni첋mV.D߻ >~߿}nrU}?g}Io}B=zp V2駟~ζv[S_7n\PVZrr^AuZ2UgW^.򋛭j$*\j5}ٲeO5jpa|"jP{/xb6TS^i ވ>*U$7D\ Ⱥ  O\Ң{zA@@@@@q mkgwmmv[}uvӲ oQцݸU,ąv3Z-lP݂J~GlIU \֭[pZjP[n'-0Bj5뮻./|ƵkVp\Axk׮mG6v+{i0h~&OB~wy c gPpU_n[sv'&-d뮻\[3>l~2::s׿HM?2ֱ]xᅶ6ٶtRܸ2~8X 17 (v[ǎݰ;<@;,@ q{)U$]6m"0}! @ i\Ң{zA@@@@@q mkϳ[Z*É _bGOxq]Y.KTS_lܣձn0/ӀO=͚5+".\ e>GALeVY^nTe[sSwDUg<׾|nqU4z9sm۶6e>蠃쨣r{^lڵ*W_Wǫ*xjS8ԨQn;lz,zj%zÉo/n㏷}*PPӧuzi;S> @D '0df2KzX@b(@P=.E      ۜlkR`{[c5{5`<@%OYWڑ7KMZi 6f̘v-ZpշT wm7;ӂyxN&)\^NSq`ӆ5_jveѣV_~ŴOw}{޽|U;1OII&jZ#<-obZaQoA+Z߾}ӚGkC= [A*++ȯ79(5 -Qm[lw*A@ʜAhN漐       [pls_[~ݖ^-춞ZߐDb+WKzJT\=Gc+9g/~gsno]n9U(&UV[?`Wk֬V?n3gt5aÆvק[M0a=n]vvpoUHW>z뭦毼 qVzu{뭷7p}\ve֦M7o>w߹儠z eVz4vs^H@@@@@@`s -8ﯭY|~;WTֵoSTKVg,5do߬ըZɍY^h=4S_P߮<}[(o=rH7n\Гׯ_ߍCG}u5X.<.j޾}{袋«$ C ]uUn=޽u 5뮻Uy]O]w}Q8q J{A|UgW_ k(7ʠѾ\Oa_ݾ[[vm&RJ֭[7{7(q{߹fUVuo¢z eNz4ts_H(@@@@@@`s -8VZ,϶j:W]MmDNi n=^xE v֡ؽUӮXĉ֭s̙z8Sl=pù_>}\?u1UZgm.B7fkM:u:Uf_bxv1Ǹn[`.vꩧRoog}vn4_'|-iB_s5ִiӍ6jW\q:~zw2w嗻\:?;~F-QAO5j؆uQ  9ќr!-@@@@@@[p4_3 z{7'ͳ ꪰ>6k*ېW\9ۯS=;㐖ָNB=]KS5r5UnժUj qv!\˗/wQı{v9oWX7_=??;<{ݬK.ڶmU?jժ9c=~I'^{/h|[n};n8Aץ*Ы}j?znriO^{55kաC ‹1e\ 2~ؑހYf{IP=2Z:B@*@P=3[.EsD      Pq k歴FgS]B-T:ֵ;5H P}/pr??W$N;vm7H.AuuR{ݭK.7}o& F^zStU_s}WPM쩧JZF# t׮]M/ȷoEWnj^f͍V>; x_u{WX>}6l07UVu J0ԩSݨZ~jMR wVn]7kP]anUV+_ z6mֿܸݨvU򿀾wq_=*~gV^m^{]f4hn` hoֺuka3f<^~n9-AjwAʕ+q}7od78겼ꪫmjXI,X`zc\.ҍ*:urU |CXF' -\]N>ds={~֭[`ӦM~:ޱcGW9\'MkѢ]yA׹Bj :_:r8o4Wz6lhp{>j'Nto;S +P?zi;e@ q{)g{7n~SQ=J]B@2+@P=S i(       _~M#G_|Q'}.]cuAdBAuP[lSOw="#F0_] ~.@^xԨQ:v ;{MLQFR~GχLn׮]/oaoVv5r=jӧOwo@XxF˄'^vqǙޠ@CFgv.C?޾A"± Oh@@@@@@܂c_㹮͛7/r T[: m񫯾2Ժwn kߚ6 /_|M_jURM6]f7߸VlҤ+2j*U= E*oIkשSڷo蝹gxy_s;w#8zmk֬1寻`hTu֙_}qgq>hGf͚޼}P]ˮX½1@U.]P*:@ߍB`ĊR]Qp D'ԕ4h]1 i1<2      @܂c_K~C~hذ W\9ybSzѢEϵk׶j)=|P*Uxws=ޕ+Wڂ \P\7Gerj3Q0_HC d]_guVVj+T/܉ei@(>r!-GzA@@@@@*L@6@^oDm=`@kT*$CP=jaC@2'@P=Sʅh@@@@@@܂c_3F؜q{uEV%/T@@, Tr!-GzA@@@@@*L@6@^oDm=p k^Z5[nգ?@({գ9\HƑ^@@@@@@ -8>9n@)Q[<5nlUVTT@@, Tׅyٌ3lٲea+W\vدwru-,      P2q 9[l@?@^oD} 7.Ks6D\_?$nX@Lz4q![͚5-??*VvauRxڵ|r[xթSZjA       @dq N! PFz#Өz-,?QQ}uգ?@({գ9Q_HS@}ԩ8qAOB Gio T_~K8>Ξ=Zl9      D!Xע8 @Y덨gE斗g'0! @ )B7|*׮]*U䪩/_>tRחY.\*wԩ]      @ -88El@?@^oD} dM6*UBգ?@(sգ9Q_H/}c_Q]A+Wڏ?hka)Mfju A׷&Mcp)/pjl>ZMj۶r)~vGo 4;/VXawmذ*Wl]w]47ߴ/"˭uq?qEꪫ*20yd{LЭ[7kN4# @@@?݁å^ u}kn\pn矷 &]'Du5kdj}իWڶ!Eu=)_]#Gjʶvٌ#P/_n<͝;uY95C]Q6;[oh:u# g]?KժU+u7iR_b3Ǣg G @zRz"Rzu} މ  @ @P=i icǎu7.!riRau@LK{ ǿM}ҙgilF~/oPO]svq9yntIIl=oz!5k+W^yFljsaRے%Kot<Ҿkz۴o k3qi38vyL_}U0:(O/2.X=R2   Q{{ݡ(4zm=)$O?~ӵ[t;7 Zꫯf͚%-SFgwM Scbmȑvܽ[3 zͰqvg[z5N2GquUD .>[F>0/Ǣg G @zhJқY&绢3[1@pգy"D}!o; }Qo8醠֭[n?޶nh{I﫞2)S څt7Ǎg72Auڦޔpemtc3?~8F7R- TOO}TZδ}۵kg_|7jڵkyقfԥkLtG4@@@(ekP^بy] ߐ5믿>Ҡzדr ĻpBW)X˵åY@o ѵpӧ'xIpf,9p^z%ITn]*GS`{ltG-nm0-Sq8cD@ W+u\4TOb@H RѨ/#;tTM=נ.⡖jAt˻kz? WRP%e˖q9gVWv_E\7&GF"Cod/5mKt67ݴkM}+hP}Ȑ!ՂGS75˯p7?4(lASx@@@@%Pk\wuP%\bm۶MXRkQ+d5)m+|%|DܩSڈ#lnׯ|^~2@iX`f05]]M2,0ɓM^0q`E]>?k̾Ӫ H֭>2C@([&D nia" @^o䄕f偪L~jTTO$@@`#iB|\ku 讯TիG+_m뭷v<_} <8:Mt3_~FsC}wZ@-|#Be5 AuUcZ= ;yM>`;#hx=جYq TO`@@@2'Pkzq^O ?ATp@o;p8yD4 ;k]ӵZ}Eܸ>٠aÆvdM~A]#~G8޽{[zh:j8_mukڇp_~8x@܂cQ_3#F@q{Qxk 8Zl|bճ{1@0< rlMTT}Gs˦.?ޞ|I j0vX7":t}gnYЍ (P?72T']tݻkMJ=z0LQ+HP]7boӦ}ٮ PbE뮻լYUEmƌַo_?<T(@@@@L ß=^\דkȔ)S졇 x㍦4Jߪ_ꪈFd]tG}uU I ?}GnvޠpLA~) ųm71[p,k1{p I n7a%cZƍ]>RJFP=@@/@PK4&/܎_z6l24iɰrJ7cuH⛂ Hv)t>C{,uACodj_|᪗k^ǎ nzhZAZئYfּysOܪyyyrԩSO?m|[WyUe~rN=T}7ڭqu9˯Gvwm7F GQoZjx    P r͡uY.2^z)uWϨtpVZvmQ@O]TϷ;GyMӵ̛o AYS~77k'x_Gc ݹ^CA[F`g@܂cQ_F@q{QߠE"(l A\@@ 3! i>LNPiFF*otFe]n믮VZi Kڗp[bp n:7[n1U|۷oo]tQx57>+?em{n}j*W]7RղXU   WJKP0zפua-ZdT?uTգsO;|!PZ^}UvѵD];5L5]cup ,d 8ƌV _ _GTW]awzeN>-nm0-q E}-@z#7VP]_PA}J=A $ TO(H',Nn)ǒ%Ko쳏NN p놄nZDчF*F tѡnΜ9 t~a8?S6lшnznxjUK&>.UKZ^{9A"   M^sKzR*\p5h nۂtAu{+1y3ϸtA~O?: 7oov0*}tI?:jT+Wvt A:ul?<ТE _x    Pz͡uӾgϞQ|`^zq]O 6hݺ]xF `4i=#pAϘ1Ϸ;] Af ̙V __G _cqQ53px z2j۴x ϳQ# yz#JeU'(ۼysqQ Yќڨ/TTpȼf͚v LnXȑ#?vk׮mzu}MG.b=z| WBWu{̅S;I .:d]uUIǥzZ즛nrիg?.wvN;>ճtJ F@@@@ r!|C7{uE4Rۇ~>M5jd]w]"-_܍_r%ֶm`^x lV֮]VՋz n[*j[n$= n"(ÇѣGhֵBdkWk}9ꨣ~wHƽ nз( -8=]8\@$EBʲҠI&VJSArƆ,˗_m   Nz:OBA?3:thptRҍsI[[Uv~ N87E(|#C=8ZM8m]wu6-|#TzK,1U7`}_Aꫯٛ|GWׯ_?X.|\ h*O6-嗛|T@@@@ rA3zxJ5ԦcƌqS%T/Ip)S졇fݺu?g&n:lŊڵԂkߙ~W%?iذ_G}Q[f[gwtT;>Ql7[p,kzp M n7~-dРA֤iSӧBTOoT@@  P44+\s3gt.\=K75o g٠A<<`[0MU]->OV,X\W^Vn]7[FGjP]멚*x[jP=QԪuGw 7va/s nW]W@@@+5U2{TLUЫV;mSVJ2^דt?ڡ\t LUhFu˻qـW\.W\ AuCt33-5QS>O?ِ!C_m뭷]f܇`4Ql7ML@HY?ﯕu/@(z# piٲUũp5ݚXFլ^zXm=g`g&zR믿v]R%馛0P믿֮]6~ior϶ZgMMoV9묳O􋅯i;wlw+^nvpZ-- E덢)_Kg{ΔӐ#ANIS*W{.Z&-\څU<֡:UPJ+_g7c֞WA~]"xս d ݧs[mFSAuUQթ?CP]گ_@oԩ㪀no?W1=cƌwyUIkƮ>3\xmɮSN9c?2<ڏk5j\x$l* k, [zK[LsR+ѻo ϛ7M9Cwۃzp Q:us9'm6|p7  裼uS   O k{=OMo!|Rd??o%Ky嗛%k-k׶[o5bnUW]e* M4qoy=ItՎ>F` (xqu]7k/TC3]3T N;*aj \sЪU+wVZ}H]6|2x|Z|)) E덢K_S,QQ]Q靂W`(D•֤^F%ywlZƷ+[+U+I%'ub_i=}iԠkD?կrAþ6>ݟmN@@ գ9Q_H2e bרQ#)-LHtO_n͟?? t}ic_rcuCa˜FGY8@@@@ЛO4h s=$16My q E}-Փq@X n76mʠ]Dy „ճx6SŞYNfzۢ]vBGk2${i`_oc\)`Eԫ?9j%w 4[&MK ?2 w:U(gc/~Tw;B G@L TF}!M XƍԞJS>Jת^0@@@@@@J@܂ckgO@N+YfOEM1e㰭S[pS w-kNo<=֍WP/QMb0_+/#&nUxߦ.MTUlAuglowGm׾tATVd@ TGT^Ҋ+L5*Aum…O~b4      A\X@ "@P J8h5oM`.k*{n[.:C0oƯXcډviAs#;7siG9w}ls $m:KWn 'P0 @VYy <8ڸrJ/ UիTB%u#      P T/kԲK ވx5 `7[TiqZ @ @ @ [p ߯3 @/S>oXz޼yTQQ==RP./cݞ+4rA5qOD!~TSĕyxp6u5G6d(U0+k]̤t]fT G>$79U?>mW^?< ޠq@yiqZ @ @ @ [p ߯3 @/S>oXzٲ;999!p&j\] 7LkQͧ.ޡ^clBdQ!A%Z-/:kЀOJP|j1uIj3[x.T ./⻎BO #0@HTADy<HK2:B @ @ X_$@ @ 9(88AĀK_U6?r6NER~=%)Z5ijzhT 0摟v]6ikNnj**'TTVկ?Ld҆ & @ MfiBg@ @ @ 3{ 5'&!@/@>oXtΜ9 #n̥UJ9d0I{!ZfهE4DcĞ}!@v!uN3fG @ @ ث>q 2󆵭͛G>>>鉊I-;3 u.5!t~}>.J^=%ӴߏXP;}3>d_ϫ6󠺚R/S-K @H3[TiqZ @ @ @ [p ߯3 @/S>oXۚ+#*%rQ s["r]u=j)tFS^I.Qy|x^PU>)sWhԽ'QlCP]` $y&d*t @ @ @ `o1|fI&@@* ksΞ=eP=::1Wfd5V_6_jV0)M7]}l,wi f[L)QfY?z?47ymZmgaSŨTjֈh^v><2d>zl c2& ^s*.@H[iqZ @ @ @ [p ߯3 @/S>oX:,,͍TO.pËfr)c:~=RDNu1].ݸՠ/ @,u48b- @ @ @^-8 )`o7m=w\'wwwrսQQX @iNAuR!:X  @ @ @W{ 5{}!@e k[ϙ3GӧOO[ @ ns?Yk @ @ @*`o1|ft7 L{amk@Sխ A T9Ҭ㈵@ @ @ {_g:^}ްuXX {yyU;Sko^*oc`Y@ `5խC?Yk @ @ @*`o1|ft7 L{am9s搿?qPխA &Ti.Hڰ@ @ @ {ȑ#]2vuq `#;T&Սybi@@Audխ㈵@ @ @ {@P^< bWP7o;iH @H%S  @ @ @@Ei0 j666ΝKAAA2z9$ @"i' @ @ @lGAu9@Սkk՝T7Ɖ!@,!@ @ @ `[@} nƣ 1~w9B 4lذxZix [@PY3g *zjl]xݏa]1@R(z  @ @ @ b3*kժE< Zzq{IwgggrssK:4gwww|ۿp]~fJs&z6󾆇)K, .K'׮][`O?qGGGi`)qe̘QVϜ9ۮ]&)gΜBޙÈ˗e|>6*ǍC9988o̙3tE/o< :*V(?8p׻o>zZ-X|Mݻ7eȐAcHd>|<\ٜW],Ns[NիSR(<<6mD[lQU̹rz2eԺzI۷oŋ5kR|de?xy ;Ϝ9CԥK9?((H3)\l\a*nc۸b9WR=<b/cJ<ѣ4}x ʙ3{mĈN}P۴u)Rf*/T 'T7'ѣG.կ_5jD3fo&{<392l^Auch֬YĿ8οT7扥!@$!@ @ @ `c 3㨨(v۷O]v뫭s:4449r$-ZHs5vb'eXp!qF>uTʞ=ɢ\]^bE:t=su>=z4,;l0Ztl_`j~LL UTIN-Z&Li#*\雫O^-"|>)Si}డ~iӦ&}P\>22RӲeK՗GJ9/]d>!\L?sE?ܿ:v(\ /.0=@ m nUӹ!2?~\Uϝ;7͜9Su}]۷ч̓FyB `GAuc/ $wwwrrrBEucX {@P2 @ @ @%"R?P[TLAC{psH/]f=҉Wk,6g˖Mu}䉪ԭ5rƏw۶mU(qEN:IZ6$njs8?Hֱ%j9׻}vիn߾=}jy~*Udۛ8ȝЬY3: /X@u`8WC*/V#\1w̘1YT 3f̐A{uԯ__.Rܮsz鄂F<;7 @ @ @ [PeY#;˰zBAu':Zn>TjjF#:W:5ph"9EV.^aeBߺuCώ|/\PZ.k׮Q dE҄ <goڴv-w%޽{2d-ܠ:Y2gά{PmV 2 \UO(ϕ͵ѣTRj;#߶mlWչ}% Ս:ʹĉM1cF^lYz뭷(}&1 ՍG~?|.FPݘ' @TC @ @ @ K7\46Vɼzݕf-DFW`lTH gɔv-L.ΪFT/d>|l\2}ٲ7yЂ\ו7nܠ"E #lԢE ϟ\~= /]~z0 ؞ ;1K, @ n'XrY}ŞCvp y dF:?zM7"ʚы{ȞXi/ @ @xAu>YK7җcZ *_"1Wk9?u/C'.6w7W1#U,_%e$9Au^V-z qp뇓'OR˖-eS۶m硫;ʶ?ܤ~YK7oޤuY )SX`~܉+s\rʳ\9r\Grć <~\]]2eʐ[uԑUfJK.Mpy7Ns\NhѣرCևڍխcǎi޽ >iÛoI\E vT7v.?4 @$'Nȫk]԰:yG^TT ͛vZgE0}Ͷ#t#ntTl*lz;D66#)ګR"qnXJt\.W!E+BVXZk@T"_~UGq\OiǑӴj:p"E۟i9oNvB])Zq<'GѤyg/#ghݪ{w({ rzڭ4wm?jԣqu7 by@ @ @Tcd#nVϑ5]'Gft5BMs T9Wm믿TˊyP駟h91 ?cEu*UP[>׮]+Ee &ЬY~H;w(W#<$7{VZx?dɢH" ߼y1uTʟ?]6wW6m\4mT[yޟIѠ5,/w<~ @@Py={6;pN\:z4`VĊ @>X ʫ9η $802)GcߥKٲe[wuh,5UulP\m*i];$[(OT--!pj6Z#R =;Y+E@Y6E==OwPOB]lCVnPzӆ"~oy}>_5sdf7~4 ]yMf 5mt.[G}1MζSjFw C @ @v,`+Au> #!u^gr/^&M])\0M4)nCaaaUFtw?{sg]dHoVEGwerww',ak׎:$'nW$O,H4Z CT댠zѾ tH`]R=n.]7;;:QߖQAg`yPwUԠĂ|=o?'_XT6jzSSNX @ @ `Tgs)FC꼝e'ObԪU+OW[_N7ޠm9l0PkWZB2e qh\?pV 4Hodp8q")RDdޯ_?Au=~X.l2Y9]ŋӈ#d9o^رcԡC___?Z9}q!J*QBݮnJw?;*w_y*9eqp<\σ<رC7yn>^MՍ7HO^ nKC `I޸qcc WT0Sb?w&;o4;}8 W'>K7졓WMdӤ&D΄۫9kctKG -\ T8h0$`$mhé9w5{dK ZeP.qTIcz$.4W rO5죥2Scz|bAu}qfN@ @ دL$V!bN>^F a7mԹOI&LժUK.DžK֎չytF|j }sмrTxqnm;(_|իWOk?<útBcƌAun[;w,{r_$%K:x _^Vyo6k5Fؗ>)88X>͛O/ZW]LD5amp?K5ǘXߤEt%"6']}$^ 0e΋HᝁBrP K#nߣGNՈq4eI}y5[~7"ޗM{RhqT\@P.c{bCԽخEܑL^;)L\-z]:yj=?^poЙK<J6G"ܧ3syMlSO6 e0N|.?uA{xH[ױs)R?ҋPw`_xt|;;9}B羶K>⢌&.0ۥ S6iGOU,NmޫMZZl);ͯݚQ:qbAu~ 8uQ3WUϜ>9JW:vVqAva\ϡg}cs$:&7Eܽ'F#3F?<|$-^"(xo^3gw8 @ @ `TS1y&խR<ߟ88`׿R64nܘwM&[/e|n݈Cp=i߾}Z#6mJgϖ햂\|&\K8޳gOڳgdI&r-<{Ʈs?!u///裏Aunܾ}e鿪mx&āZj~4cc+X'.}Dяpfd^#(4QF~x.B"tč҅f hSJpRWs՝|f=W3zzȀxv'q~Wnݯ⛃~؈\-WnVWܭHy!^4oU]ksBAuV2ESj<Ă|@ɿEZBjGoK6c?zsg4rt=\p/}ٗAow\~= /89u֮=.:yZ?}:-[<<<(_|"ybT6QFѿkWx ܿcǎ&C+W5y0sݻwsŊrx྅ VZQyeY/ ȑ#Զm[9n)38΁E8۴i#W?a|[r~|l=ʋ*T ?8رCV R_tiڵ bjx҆iӈ_pPՍybi@@Au<|?+pekյ#_MXڭd\5Xs!hS,+z]0y?oiRq>5Kѥ)w/HhŧC<8=x='TmmQ8HP}4$wz1͛n@ϸf}ed#T DZYhŨmZW2(+Eґs錮j8:T@\hPpꗅj_rd$d{mf-ɋnQTHW;sq%u^o^sp/^K-ށ⼟ =wHjPqq%B>uA`=;rHj׃G .0P'0}b>EUKFaj̓ͫYk6cw YRTA|誙?p %2@IDATбW?VmGT>I}ߘzz$9U|wfq^ <8:8R݊~tA\zAȮ]D#@ @ @.l=*aÆyꫯ{vŋiĈrEcǒ(nܸ!߼yS{ժU a 4Mm$((H]1O, @ n'oW`TηKq/S9icj4WUhQAI "#rprwyUE+pC% &~zk ˅nf'hP?tlDaۡS>p}HFr:6)+EwWj+s(u=j:N޹6T7GՂ{mM^8΃>TQ`C🝲]>x[e1B<6?:5QsItmS[֪ +&&F/Xc\I 9.zT |ن=4ez?7q]IGP 1=F sEmhY5RJN=z6ќVn/àӷ6' JiPwҌ՛:syg4!/1dyAoh;H|J% q~*K_|T[sWnkde~B1zT!@ @ ءN:WJ7nYfWΕ+͝;W=.ϻ PTT\a|QR@ǎ%Kqwj._< >< @P=姜+ A{bI@DAu<T0e1=q^1 1W~a |3Ru7ī]Xմ#E3VmTmZ8'lDUɭjWTx$UŻu7~&}:a4>mz=$ds]~Iߒmo;q>WWќ_mT߈PS~BY2x>e鿪dDPwTӰ)lF #|(}X,etWS2KT8-R/߽QuQr5<"ܣV"د Dy;:r8nx$f{m\XDIBy^P=9JT,^ ;HgT$_ @ @ nyеkWڽ݊ĝMHUT1b;X 'toۗ $^%S~@n"ETO' @NTmAV' M}*/PM[U@ܠzJKTOFvS=žY3ϟ},qqn?R_uj1pwQzT̙\NxN^"@&uo"ڸ5W3P\`TCbAoh;>YLX@G]<'|](r0?@ @ 3N/mJm-pq=թS'> ؏εTwߏS޽dɒVjGKߺu&L@pY?K,U˕+GP!{@Pؙ栺AucX {@P6ϲ='*+DnmhU"5.݈#fhȊ\`gjћS}ydQQ{*ZP}=4&}7= y,7Tw؅B+0fޤ~ѻTHF~~ZyAu^M{M{J*_| ;D}µy֔cbA<̃}G^o+6Irr)=.}P]Bg҉WeOjם_n œ[Q{մn1\ߦwJӶz6wӣDK7즩+6-_WI 7jC4[3^ǃ&SĂ}жkIQ{b. mCL# @ WBUVtDuh̄^}͛7Sn=͛S=탙 n\߼y">E,XW\!OOO62, @T7vNFB x4.F'qs]]/c!qg!FW`T͓dAujUMj$z++7 nAA\ޙ[Ý<ӑOLԿux}"̎GTDx9ϭ4mutxՇuj/ljfֱ1öCD#b,5^rڼ։+U{ Ȼukv~^9ٸU)Q@Mk#$5n丌S󸸞w~?ӣtF|U!h^FW[}='Tgo. I wJ7"j<ɻ(󞸻LT/+;p3.quFD}ҏ? a}C @Iܹs ,WT0`7N SNԩS=ʕ+S탙 n?G @#zEll,ΜIĎKBlR`r}+Wjl҆ <ޤf)t"8scQ8jӏ<>jAwaum`5@T 'Ѳ;׬kJfN6^,o5?A\󵎡6Ѣu;IVPr9Cqݮl\z(I FHP=5/r఺~P**[T$-Uz=?nVS|jzv`I /ݰؠ-FY2xPql^?'.\s,*T f h'>]L;ǯ~І\=\؀\A=Fi)7ص @ @ `_Bm 3fyzCTOglSn2gBCJJ暬]_2 wFF@i;ӥL'C~jSjI&/K2WT6:'.l^-mAuK*/^[!379}u튔?0luSVw4L z+7&ZUJ,ڲ&-]/F֭'gEy̏BԾ^A"nW?r:Ciw1TKFԣ|9eH+WyDT8|])sv!Qr=2|J|0..=_&om>ZȰ./E}~6ky]FR?'?Yr>z2l]~K-T5r\F꼓u\q˳ͣS8̯eȋOw9MVl˷ܑS/w܂⧭T烘ZuI o>ߑbrG@o񼏡yAϣ|^%.βn?)]oF @ @ WJAWtag!@  nDN6CTT%QQ=N.6Y,wl&m֜oܪV٨j)*쫦5 d͍.oiT8^@rM_.H|MWt111GRbRȹi^ӋRxj-|cz6'/tj`+WKPszgҍgU9;,Xv$ #/:՗*s=Iz֌&_s~.qp}f6\;V7AE3VoR]\yr"{N\$ C*;:8Rnlty[[D=Z3ϥ/S%$2:/n丌SB'fY~:;0x==UT.ɫPT3' I 31qQ'{jH>x#L:_nmhqzn BwߣrQyB}+Ydʒ((WVyɝdTU=HG(UλJsM< w~j%G -hن*{Q #[VRFhCt-I;'ՙ?[{uio:~]Uvwu9P,o}5q߻iMT,s/{|N޾@mޭ(_\ >m(LkӉ=LX@G=/17&}rdwKjQwi]#t#Y=r@T`j qy=~=i/M^W-{LfvhqSTqms~?{5I=ϵoW3d$4"]Z nZZ|.VnO%╯ł> ΋;#L\\ .ZiP$h# @ @ j j?= ;oDEuQQÃw |$ {V\Ʒe+}/<~"f<]ۖ!Weh*/*hC< \N"( pj϶1@HLEGYM'E1q`h.ϳ$rtF+JYÉ>8 [|bawرc9sfʐ!IPG0UT}6EDDPÏY{f$]w>̖)=8:&~G{@gu im>6-.^u:kR6syg!$-_G3kTVq^3z?wqȖ?[Ȋy>2}Mjz\\|  /rx^m(ZxG=Fi]P`#5~Ɗ1\-nݑw'>׫ŝB# @ @ `3̩@ nd \rO AzJ%ڔ:}pΎNԯu]YQQpn2 a>KNʿnU7^8fѳ4hRL&qѮnzW9oo_7I# E9ʣcBA꺚Mkj+et^3F tc Vwףh*/PN5v܍JR]a1 ұMqКURP&MIz"##ύԵvͦTj.]9rPLqẇ /`~DU)/;&ĿYWm; /oۥ kx @ @ `s)A n$O>ՓC[~7YT}S0}\hUTGmEpeyW4>0ηr֓GTN#ݳ AuwWWQE4(7;.BeU9mon ؛ջiNV=OL9r'k8DtoT,HF {єX|Cl<|+9;SvQmµryP7FՓpΝ;:ur-A޽{ze%6 @)9z6wJw c#rFRA@ @ @/ZA-AT7,>cHG.IxD%A/ȵp_w@pQ\ BA>Y6Y|UWT3'->v$^|1j[z#b| <=XTsIe4ӆX̓z{@ooTh^77cV,F WomjD8$Lf` >Fvvѷ.5|3O:N\HΆxiڭ4w6oԗC+}JN[B{O9PrE`ߢw!}P&+N{ݹeМ7ԐZUug˖ 5;Yym}4iٿjUZ]5յul9x~BkPԴ6bT WtK'l;t]؇th$͏#w&ٽ~=uFh׆EX?T7M15\+K_|T[rF_CZ` R|@w[_uNOPy*O49]G^>ȶbQݚQ^OLL,O=rjՍ.VSE @/I`SEq!nquq@\Y)_@Noᗴk, @ @ d ,.t XEA3rwYCIu>2Ux}.y_VP}`zHˏ3邨|Q+sع~{aOTkԹ[r%7W5eD{7Y@whioΎN.rѵrɉL|-ó:U5A*R%U_H L^T(؇voC9d/q@ l<;Gе< }E 9{owNPŠf&7a |+Rޱcן9c4mMo*V7vZZ󐜞EkAӏ'Fo#$ǀ @ @ @%u 6T7vLJ鉊I9z6|]u/_ѝg8jR*V%e9lpp\]sg&}PqtlD۳~19W44[yPf[7׹{{sc>ԶNe\Of@@<;ӥL}26FtKg>΍\}ωsrk~4..7Sw8m):vV.]^H FTO @ @ @ n CR$zB3gʊ n8rAiq^B%QlӠz hS_F} o>ygìZWٸU)2 /Af&G92gI_RFcbq)F!Ov- or,8H:JW#)~ax2h @j~003֔=s\/~O_&Wgg7S;wh~3e F֟GSe @ @ @ #ò 27miӧS(NNk0 =c3-gGB-3r>n)$)),'zAN#B)Fܾ~J.ϪWoRQdQ@0kUWN'7V"F܌"iv4Eƨ5(BTS R3οZ~7=|$w`Ű3j'?|5yZm-i=Wu'H8C@ @ @ @F< @ 'Li(00Au=Mq:EV3{7InԴ62gV:q6IU^87L5.GzQZwh٫hj]WZeib-ݰ[>ԠQz\Y2>sC|sЏ]i@@T:Qۺ-EWyOǶ严3p^$o7"%ZݳfKz1mk2T/]@@@@@@@+^@2 T/iԨQR+!AğꖋۙUk[ˮ35R[_6GFNeW3 \jL5,/JIԛ pMP@ɑ7^ntkA9ңP9x8_5Zs;'Tulќ^9a# @ <"[8[XzyoN?)=<-?ٽ7&]Ҿ|nnΚEEȹK݄Ʒd Wɺmu w KES@@@@@@E-  @P#F:nP \QY`yҽr Pa"uF0K1~Eg 絕G3^(|g6L&{3ѣzkP]?Rdv_qn Tp zP7?.pQ\-U_.Uߝ4.j\I] ^`2soPΩsy2u;w(~C$+;[C$+}>,kt?:v$V49^{uҼnmeC2ۙ2k]GNyeG&su{l=z3@ES@@@@@@@%@P$!# Auϭܵ6|$'KHHTwTTM;Jq@\( -Tw5N'>v˗بp)~Fey;'U-^UOȔ@W v3 P7{@eՍ1!A:Zofg@KF[@@@@@@F1$v@< #Gڵ%44TgNu  Auf@@@@@@@\)K A؎ =rr '&JddQ(;X 8 oTwTa@@@@@@S}T/I x.@Ps+w-UEII.!@p0"<      9eI ^@\VZ>\v?#aE3/U`  *       P%퇠zIBlG@s[k9BUTOL*b  *`čt2,#      @y S4>A؎ =rr*#)@p0",      9eI;!^@\ X{ރ@~~=Z$44T#  PA"<\m:z؜f      8 u~FPe ^ T/;_^^5JR%T/;'=@@W7|/ϯh      yT?@ vںz`` Au8  `ko|}n9b      C3?,T/I x.kxrرR^= ꞙ @|\|w/@@@@@u_ St+kP=/?_OKrsIjmRz*n6x~;hmc@ ;dҤI"ʑ 'AuN1Au     )K:eP}ͬ![wՊ<\`Mk:Ym|<<nmc@ 'L IIIoH7&wxA0o v p}b&Au{@@@@@U_ StG7KNn>KOo)=.?#^$ @*]oy*T$]k׮-zhv 3 @H%@@@@@@_9eI  pC'Kq ']o}^Ǝ+u֕0=4Au@N: ޝZ@@@@@u_ St3&kt:^.:3<"HvaQAT f6v 3 t@ս;ս7      3?,Am{C9eCs˓M7_ ea% @% ;OGqm0ydINNHPN]B@V|ww~F@@@@@|]ׂc%">~_匹P}|>c[AdS=$qB@ "Au     *CPSd׼nma_-_iV'ZE  $kv'zDD剟^Ϸ{'ތ7/  PeQ;އq @@@@@@J/k1OsTUQ=AHOԹ5=jOPݢ`@ O͘1c$55UTPϯw@(ΝA2Y[      AׂcTj<7OL5IMU#uz1$8X!U2AuSG@I׮7>7fEpv2 9qd@@@@@@W|-8VAG/[w7zlf|/Oi b% @% OǸq$%%EBCC% v3 |9qd@@@@@@W|-8VA[wӃ'ک nW[m<$e$yUzzdl@va;vԩSGBBBn~ׯ۽o3/wz3 }@@CIPGFA@@@@@|UׂcfSRRo2E] OmT7N'~~~Q%6*\KF@J*kvKEu@N>S82       znnp̒@ Tn_m^A>Ab؈ PY|z0qDIHHp*ۍx  pr TTǑQ@@@@@@_XEWn.B:4/vė={cuҝHx%//O.nBk?#'C.a6f@H_ްZUTOJJ"n7,! +@PݞsKPGFA@@@@@|UׂcT@%kvqI:utP=''Gx3yӛa &@P ٳG6o,uiW6DDD;:W^4.Z,o;(^w~eL!.kI_҂E aIcںoZ@@@@@|-8fBF5@IDATJ) @@C_fcǎT @@|V=<ׯ4wb \5yV7Twp:tH/ժUwvqS%Q~HX'5K`۶'w&M?Շ c_?=\0)s|U)?׋JP֪.jH}5^TJˎ5/}\iC@@@@*WW$LJ p2 p„ PdhhPQnaC@N= oذA.fPviyyyk1n۶M٩qP֪!OvDzԾ6*gɶ qs Q<53Y}^*UTh;of-? Ʒ%MWF+˙8@@@@@dAUs@8|z3~xT!n0! I'@PݞSjwP}ѢEzժU%((H] auOZ]?z߷o޲eKOOە&fl<wy{$v1j|-{d yrqfҬNB6(@i7N\+)@@@@@Aɡ"4vaSՓ%<<\ x  p TTQF*H+͊*~aYrm۶'걑ӭ<|DVo):sjd<cƹY~1\;4zP-Zq8$kV׭U]Ee5ާeҪaS+u^8_ gN-D~7~[v-=c%WUol(j_I ubRWz@@@@@#^=@V׮7r?~xIJJT  nPʰŋYf*MP]]JNN,]TZhQgY]< !4$&xj}sTٱoVܫMo9V{PXj5-Jj[?JPENukՐ{\Ng͕IkGV Nr) ;$بiTTw7 7;UH{;SuA :HoDys:W8R%(l`l9r6n d7؂A[vʳk֜5#o\4^eWU7.#Uau|s 7廿AU?#n^ n    M <׋w8b@_׮7zTK6}fTE|o5s'xbkPqϻQ0F8WUOfwwШ&zנ {jRӌe:Ja<nip7 |1BjvLiT_Ǜ+̕,!{s)#     P6_ T/^ x#kX;vXW b  "@P1b@]ǫ{[5H.onvMRFUٗ)r^~ެoqYze~գ"dZ!7VvTUqRUxEvte컜N=S~`1T a}[Ǫ b݇,qG0{3IfQgu:jX\P녧g4Mj}{ 5wa A@'kP>MSkϓ>32dنFu49tXцXo6q ?;KYeVZUڿ͑V3   O 4H6lPsV?-@Xz|'>N:e]Vl6"5_~@T׮7ITG70/kW*t\ uYQ|˞} sW5^jޜI?)YR3`۝FS'ͮw@]uԬf-;3.&J>z͓͜^TrTV uzzc(Orn s !U$PJ?zTW~[zA{h,Oa4ͫsl_ޞs]EԘ1n{*An7g%zݨ*Юj"  СCeE>o3~͓F5eUHWUP}ڜeT)Nۼk<>hURiP]>ۨ*>n5g&\Z6g7qlh3_ MPȒ[q mJR\^߫*mPݱ:{&O l_ҮaT2i0YwWC0^|N+x䭿@݄`N>IAuOw&A~F^MbswJ 6Au@@@@@L2 @ Oرcnݺ&np%Y[dڂ R`yKJv  69 ,=ڜ8_9{nYiKK:=Onݩ~oT/TWާ.NZ헜a-;i^z<0=P(#3K.̮.poRgHځ 0ϞW-mDF|;{1츿 R9ʁt9+7țZ%CdX 1STEӣU7z]o{ԕeCSݭ6e gFcU鵻:}?M[c(ӌrJ.jL~s_Y&9^).?ᛥjd[JoP;P7feT_2e}Ǎ綶FUWՕ     Pv_ Z gVSSS%44Tz }G.k᣹e:1N="B$5!BԊU+W›cʬŻa!vCb (0lW&D%m,nyH>jQ7].hSKygrm~Aگw*xwCTJ72&y} 4B=Ej^ިFttUVp /?qDZ}]AcWTw`@@@@(|t@@|zSgڛÇ$#V19*7Ri; *WW: x;+}T(A|B U7[<ye^Y{4'N~#mٲe:LBL}AuuW*ߴi?'AeF뗌9Ԛ*}k2oFG}R%(O̔s9v֙͜ joOI`rxIꇏdkY}ck^?(YG KUrǩ~bFꪏ Nj XZQ]WUǚUeǾ*;ꇌJF޾FIɌ'Au5:?KotJ_VuYq?vukՐ[U     NׂcvV:mZ# vaY9jԪUK$ȊT/5taٸ]&֤KiN]XoS\G@\ [W^9K=i]i {TwRuvׯ__AlZU*mPׇ[̋`NQµuΝeU|+̍rYʅmznRi6'U'IdXcvNL`Jjieꝧ?YX\P<48XF>{S_,+7#ǫ Yz^q1p1a-?̲< iY OG99N*5b"UeWn\Jp%g͑y =$ZP~TUGOS{}CGnid}mZWy~     ^ׂcvVzqz  {va>b$%%Ixx8=u O.9VX>%^zC=k_ddfKLDԌ vMKh! s`UotY%èwI*$5Z>0۫ǒFܕX]1WZV3;6B/d <+IqaF&BԊ , TT{2}NS㍰kAGT3D-3eÒgn ^D< {ۿth@PËYH[nTVM߁T+eUuRŮ4[NϐCYGT>۸6*6ln3S>32UDGGAf|5]tX[U..4_~T^UWwWI~涌,CBq+W?O.I9?d1j/=S.;Eycz㯪﫛bC%6͙1?/gnց>KmVɯ Vc35bBt qJ&@I+9u ?K4WV[%:&$/)\Z=y::KV c֋c;5֖];5Q7AsuVڨoЃ=@o@޽{%!!nǒKdU5m۶Illԟ@vnH/?T~z1a2[$80Z      !k1?_+s˜ lva6|$#" T/AؓU{a \uvf&AM[uA۪ӦG䩏ֻ.K9M*Tɓ.%ӭaT%ǻ4lUfw;ح3F8EN_8ЌY@v&Cyצ #P1]~^m"Dk]S{o}CUldt]uЃ9{n|[J`ņ]fנӓu=Q*Myk.̔U (sCd߾}&qqq%?!Z C ]vezl,#    \+NW@|zNAU(r1PQ]ǠzR\ x/Gd}2~9yT*o?Z"ÎW66諕Qrԩ!7ۏUn-ujyewA`O ӌG g9^9YySE&wAuBkRxn~kR]l~yyp#'VɯWYW}Ֆ@z` 3h$F%jgoX!ݨ/#?K$5~0ব*)EνzrM"MolTYe*ͱ8ս4p)FYY < iVU #.*奏֪m:r~;#     @yZp>_ܨ/Ѣ>ccB@d ݨQtP=ܨ'TT/A1^BS%vi"kYMUGْ~ Ȯ6{uCӰol6aRukɔUֶZFޗ%7Gee[m^qnTtT2e|;{zU-%ӈʗ372R;Rc0^t%v3 "P;f=o%g'6uLoz- yTb5͗g?o2W:սoYGeQ+ܧVHY*{eFKbi8f%or2     v Zp2}sNdyU7H˖-;7c֭[oG^zϐ@ g`a <<&޶qu9uM9E k噏[˧ԏWzb-#;=aϜ!բs,Y_4MՌ@ֺ%6ˮA[.##ڪ*/yX̸ieuO[.#+[Av)=qUNrzV?#kfHZǛ7Bav)mjǠA0CP hnT7@@@@@@**k|g*jq/s=W[? p mP:n<2eZ=yXV0]o}G+ڨ^kP])#3[cV\qFm5D~EuR!'n@]]Yz}PLz]jh̨=Z*rשz1V 4%,$\'/]`-.#noQ7FZ5&~NmX@(?6,;:ﹹ׭6ˑ*!⭟$ԑR7zxQM}nܙN25zo,eg+dub$'%IHhAPaǠz(`k*"]+%HަYj>^y{iV?kT[? UdqUQ9^HL 3ˀKex#a @@@@@@XE{nQ𜜂LTfͤGeĉrQ[nO?ݩMYU}5kEݦeꚁ vafIIIА#^2oIAusɿl1?3g$ʔ7 *˪D:i3gM[/`.sM/n㫆'O͗!yu%Dj*)^VukjA3/ݣ+]Wr F)#Xτ PTdܘ?<~C qU *?>^t,9|HTTT3媫r {Q_kU~ʔ)wo7V*W^yiSP\o>м joڴ\kժ%7t̚5KTx???yڨL]M~…:(@Zi9k.yt+BW7W1+wYۙSޭ[7ǡSUAwQ8!CT7xD _ް5JjՍVf1%{T2e|;{5ڝחN-2m*rwLmؼ<7_9սw\ҭ7\      [_ Uk˗/>H:uȣ>8TJ5j5oiӦ96-4iI=U~Ymձ~DžfiӦ*0@ӏcsl,ylZPw,*?h Ynz5C=W͠}tt2G;v(/׽zAAA|uzUe^YT{RT!zs"nJ}6T7n"^sP=R~uG*;fɴ˷H9}h;I׋lQ+jř-䞫HtDڗ%LoovӛՐok\[Ybm goo!ԏܼ|`?yӾ5ujE>AuoG~̏dqC均J|l^뭿e[ZA%*zӤ^bWUAƱIUzO0@\< _$sWaR_kwbg^Q}]}3u!A֒WRT{\V׍Auoc呠zY 7  k@@@@@@N4_ UkɓK3ΐ.]/rzu\gΜ)c?U]UWtU\'|RoS혘=*JJU=?Yfz~ҥ2}t7y*loUwߕ͛ &%%Yg%c3gUe\TWc:T-Z7qUuʞ={dz QUW^nTW+Ts9Gի'|W/>={-[ycevנƓG(|I׮7>*"FE\%;KjknO!=\[3OHk wUSWw'.:7.:T:ֺ*l*pVŏ|&9u5 7JA՛3d{ZYmA8s_I,=S+,~ʹFէL9WX!~^_Z5ݻއYU{ɒF[l7|S7WAtW#GܹsN:&Ǡ jM4l߾]ܦM֭fwjAuh>#kvaÇKJrHTT/AA֍ [IBwK-9y‚u5œ֫G/*:mtXCQў#{Jlg'ח9EbJV#HnŮͤICf@C막8SBQ} nN7EWUGY+!A23$ȸ)=fw$:gyf@!^ bVi@@@@@@N_ Uk F]J~磪gddÇ{>npOqAu5γ>kWM'NԫUr5zt g?7jǠ TX^Uew7n:Q]Uȉ9/"+u~7/|Ϟ=e˖z~׮]kyUE^U/h;hE?@d TOL7RQQn`O;p([vgINNK| q^2fau$"5bB {4dɖ]t {F@bɕ{K`T"!FRLW%︝F+򍴲5=@@@@@@**_UK};u$;w.@UX\U`Ae˖~Zj @IDATժ%*}v rÇ͎Au3@,*̮&@TW!uV/j:xʮڴi#ݺuMGO>)ʵeU~ p QUTm|Ӊ ,?? 'Au{iEf3`@@@@@@XE~*F_SvZ&w|.jhhSTڠ壏>}ՏdkqFUqW=z~,ZH7ׯǜ7d֭z1*_^eEǍ'oV^w^RP]uOdɒ%*:֠ ߿l۶MUޛ7zEQ׮7>Ì뇤cAu5VϷ{'ތ~)>ћ !@PE7Q@@@@@@|IׂcڡCgU/2mU qz1cM:t *ivjEi3} m/rJ4h#{( j99U^tM7əgi6U^G:U/mP=''G;*6m蠺 +tK1CPX4Ep]O'9|IMM~SQF\B@S=絢HY0       @E Zp?_[j 8:ݗ\r\veֲ97N/^W7|WA{P / f7Ȑ?Pnݪ׹ ;~z'$QUq5wyr5y w0@CxxU\{=ٸqn/$--M͛gͱ;v{M.U]aN*讞2TӅ^(W^y/mP]u4iz_Ѳk.iҤKNF_ް FֿO7)X  pR TVi< FA@@@@@(_ UTpU=ܜT8ZUV߿_g̘6O?m'L gSRRt\l"ߞ={̡]P]U[WUՔתUK4hשз @N=TӧT:v(]wՓ ʛ!vszcݴi^TW+>39sަm۶AzUA^׬YըQC}QQǤU^ԭ[7]aq]Y E> p2 Rݨ5ݝ,!FPϏ 'Au{kex#͞g(      !kZnnܹsKpT̒  'սs {ǑQ@@@@@@ ^W^۶m ZgddJ5k֔ʕ+⹆5^Z5^+TÇˤI?0 S~7n(7A8ݻ>Au.# ^!!!Nc v@@b T/&@@@@@@@ՋMWGٳg;mV*Z!^+YF6 Kbbbjfڴii&Yxbѣ}٧ wՋ5>|pOo5!^|Oz" T i"      CO0U̙{},GLg͛7N:9 x_gC%11QBBP3Oz# T)"      cOYj%--M4^zKjzL2)uԑ?"~#@PݳKAxHP3Nz# ?T9"      [}zp4 !@P9++KF%qqq/ŷ' Au?؜*      >"@PG. W=VE8zhhPQ3Nz# ?T9"      [}zp4 !@Pݳ<|QDDD1z1klH޾}0::ѻ3  PtE7      x&@P3?z# PQ;'y00*ga@_z6lA@@@@@@#@P2*  T/Hۆ .Vs*،  G@@@@@@:D{ MNxzxx8=7 AuҜ'      #@PwG ?Ջ;&#G z) $@Pݟ6      oTQ AuϮ#LP=̪%VzgCzُ̀@@ T/=@@@@@@@3@T/>C 9@@7}@8 @@@@@@(K%@|PgeT݊ꞝ&@@ T)#"      @va- 'Sgcƌ1CBBL2T'م7 xO`f0^xϔ@@@@@@@`@!@P3ѣGKRRK`` Au8  @P2      o T AuϮرcMEp9z(Au8  @P2      o T AuϮ%&&F¨%@@_˕<@@@@@@s-8@ ٵ֊qqq=c7 Auڜ+      !@P7G _=cƌ$T̔cِM̻  sCF@@@@@@@ T/@AuG-,AAA=7 Auʜ#      %@PݷG =ƍ8 q@Ao_唔Yn~Y-d0wtFEE;mO ?sVjK=:mNIMCG2%j @@@@@@T T/Bq]cǚz $++gF@ WyժUA+JXX =†5Sff޽{Eu1}+'6֤~tIɒ~дiX+V:]ެx$ ٱchP=&&F?ʔ)c<5wpfߖ-[LPZj^>b w#f@zV(oxF|;ϷmQ6ڸ]0rs )YgyoN1BeȓwI٠2f{ܝ.p [ <6=ǻ\S}@@@@@8/3_~Eϟ/0GiiԨ9)ه-Z$]xVre93+5jr(  ѣMP=<<_Au@ _o^y~MPJlٲ?E4?ZUj&M T^}xkP]ǭZ xs7'+&m[շǵVE'G-k5kw:LȀ1?PGP[{ٺQ ~      PgΜ)'N4pҺuky]Ac~+|5e[O.&Mjj{GjժUQi]DZcJ\\hP]g{Io@y z꙯ԠkE]Q]U+V-ZuS>gP]wzumI<(]9lLb<*K׶-RlݲSFNMmiLy+ef@@@@@@o BP}ڴi_8MZjݺunPNL){' 6kPWqƙ% /Dٿ[7ɳ>k ە@/{v5$#Au< ~ @P7/YaÆR\9'_/XIŋKf͊3IWP]wMMʵյ;eݲa.ɲ<WU%>{J}Jj.^I9ٟVKo\7,Tx_qޗ]<,ή`9x8Ӵ/TF355w:gU0]3Y֙i5:Cx(9Nemo>xԍ,LѣF{o=d9M0ǖO8(!Rr\ IBʗ\g%k7;'Ԑٰm,#ѕ#A3      P:J:cp~3Ngut|>*E?gөs^w~mssԻwn=(Ke"#>.[veuЧBfk<8p|ꩧ̘` rn*vr+Nj2 ݇h2v$&& &c=)+I  3{ҠAjFZƍO֡{4n~AuUmoq^PP} y]22,T^^x+>Y2nx\yACgYg4yκhgU#?,ig[^3:Jڜk CVsַ}]<u13:14YU÷\)ϫ4ThM?l9ӡUxϹe@@@@@(%T4裏 4ܬak{1wg{&Mr uk믿3 wRW!̣kٽ{J*Iv-R1cȆ jԨaos 0c,X`߮ 4߱cG[jIII_~٬DCr}Mw60uT2eY6ڶi͚52zh/͛j4kτAuϮzs=7 Au߼E.8 ٳܸ͹H7ިT?[p̄i#{gV OݟlzM xIYFmjټc,Z 1F⣫-;󫨾yG<]9:GƔ]f]`Lw iRyoN۰ҼamYߒܵAb?Yߙ ?[w_rE:ҸNԎU9=Sg-A_޴_CjTeڭ;meoR?ѬTוڦ^|uZ,g5)kY{UՍ@@@@@(}Oř.[L dv$< wJժU3?5-yu{AAuꫯ:~ǹv~="X:}os[]+WN<6os,EM:FϞ=BX9TKo߾&دI=ַ߲g*kP ٤߿׬Y3ܹsǠ p: T Qj2[=7 Au߼y'u䉻VT gqȀq9^ Fԣ4=.UkFii7rݸ惷AudM%G-{o?IjF9      @(ɠ3d„ .nX^Mp kڵkP~&7}tIO.OKttُ޵¸еqMۑf^+k%wҪ]vuYf~ɒ%?ʱcL ks4dƍͲVoѢ$Zķm&sΕEm/נ9dYp٬j38Cv)YV}W]5۵b}VL/,,LL/R~9@RݥQ9i?9e_ܡՋٲ>KPD@? ՟ZyR0x =.R^ pS=R|*mXm{ u/f^jϲN}$YDz̶ȝm[8t& Em)7:̟׮O>;S l7oy۾SOtS;^^Ỵ֙G;&3~ɹۮrd3u}@@@@@@ dP}ʔ)2uTzM7 uqWZ匣g:[o/u5kmӅO? wQZnF_Y uR|̛7ϬjӦht\RjZ+uV眛6U;ܚ|w2yrva{cAo81x*ptANK]qƉ7XO Zo`^d @Oa+c W:]GҶPA Yv߶SgtC2k?x'#/]zu:o}k~%\g5xwY:N06+bh[8+N0Z/\f/]#MW^PxٜۯHn4w ~n.Y$HΠzvuWyoTx@@@|O@Mk֬C_]ʕ+o6 @Xrpvz3 k5uߟgCf(*xשRPP޽{vu_xٵk[^ 8ӧ TEx:yry&gjz2]Z]gϞf}^|MS]Ch5y{ׯhEy ʿK=4p 2!&@PW\#XfM z' Au߼݃V\+uܻϹ`t yTn!o+7Ȃ4]R5|\>7g]]|nK;*zΠcuәyɋþrTw(A@@@g4Z3ʕymb" 5FS.Egͩ '%T*Z\.]ȅ^ɩz>:߷odddݻw̙&۲eKSPP]y駝Z=ifV/Q/ZȬJZ=6נu4,U}]sӢޤT+˫Y/nw.52)))/y"=֯_/h^Q_6nؓ!=tG38ygF@˒M{ʑX!ٝ>u%p0K$TW26IVCAu [?XSEݕ% )_VC%eO+rV~䖫ySM%6O7gB#i`6"I5|=c <ۿjTgǭHDhҷ[{g'3vʓ&Hځ g;,Jis^i,l3]LUQC    E?MpkuڲNoGZI\r%E&@@J2>m4/̅hӦtСE?oհ~ˌVo*jP}ҥG7\|IQh8}֭ly6V&''fנo0kr ku( w*5mTN&OlqS6f: 0@8`x㍢GL TkP=11QBBB̷}T̓ ԕMs;5ut[BT&;]&L3TPSOtՍ.7n*jYArf}+l3/}TOzM +Wή`]E4nO^!oj/VYrqg3Eg%Ŋ;)](h&3cuhUJJkSn5 "1     %TpuW<`>s֛t4L *vT_l 4_μVq}V\Yuf駲pBW_5]lޜ]5;ڵk%((Hz|cƌYfOT׎z~C'X~ɖ-[L^ŝ޽{W\qk׮(Ջƪ &du L?xHv &P*GIXpbD |OŦ[ZqRϾ= si16tk:_^}jYaYϱw\}qy퐠z^*%zAuHAUi\7{adf5NT6;UTvce{jܻ sM)GE k_,3lNC֖׊*ٛ|ܰ}<(g9yWtzfv p mf$iwzurvǞ}Ѣ=SY%GǴ|4+^QQݡ`@@@@@p wjtyMt涏Mv.2G%s1M7o.֐=\ԠVꩧPn|7]='##C4nWw O8QO`RzvP.6E /X@ b޽T^]^~eܾ}{|Q۷O}]ٱcںukؑVQiOgToJHH}o!^vɔ?Jv^rEiuN=غ[Σwd۞$GS:ǻItQ@\`^%mYDԓp[ v~/x&SX+{:3;e~v~N^Uzwi+5UrLa곗WG='Otݷ z߶YV5;qL0[5~5.rEJ/q7{ce͖gsgJ׶-{YEa o?IjF69Ƚ[KPIoΩRU[=AuC/@@@@@W$zZZUȷr_x9p2Hѵ V;w1œqAAuoڿV)OMM5kVX!~Y)=DDLJZ]ٓkP][o/]M?>sJ_ԠzffqTۦMJ/vQ^M6zzL  7NbbbbŊr1 ogJV]Ez׃ӟ~l޹ZdyF *CK)!8A3K+iO#G*؋z4hiz^*%N׷ᦌ1waZwbgsԺN/_.{nq:}n}v߯W nF-k*kz)7=cV'`unZ9?5׉a     +PA+W|\Zڶm,3Z}].ZȬ:u2޽{ UW*W>V8pl޼ٴ+;ڵk޽{K\\iq8ӥ^*7puhHfZ5sF8Acr׫C$us,]".,iɸTw7_4G_gҐY?T_l4nܸ8C> 끼9[0/]v F|#f]' /${0sյs~! Vopfvk/M%յdyi:ZkFi^t{\&yarĺ^M;]#-ɯz}}9Y2闹N5v9÷\l-gߵ7kVߵ=AuW!@@@@@@zjV' Gk*U޽{M_5Uӵ~fO:mᅴ & nv<-yյںV])66Qԩ~av ŨM84ǩ.uLC:G *nؐykP]M8QOnhx7Az իWmժUGy(NP]zwa*;Ѽ~駟ŋ\sMlӦt`(=cǎD2})Dg+ro_ ذM ̭tnjTU}2dٺ3iHO)ګv*:ľ:˟~|gSaykÿM~kM'kZɸg˼Lتdcw8}ufU| 姹Kj{%(osě}?\TA,O}iNC?Au-99Y*T`BU̪8Au_6u^C<VдuVy jk / zm@ ٕ=ziHEBX>13Ya22;-]\ ɡÙR%"LΈsP~a{ h=DC8W}dmv3S<7ݨw>,YIVoJ]iE+YV.g&HǿȚٟq-ģ`EHzY05̳jvٽ/zoXp9ixFՋkpsn!SR%"<:fz 2T`|:2yƉ6H;H,$*' {D纝̯X¼!VQU $+kTW)8{ɡ#wCyG/k] |M[aoz^BhDW0Qar5?lykvUtuk$z Z)MͲʹ^ӗnb^OaC;@@@@@(}TWU,m֬Y?j9CCCArM7RRRDCkZ\:&jJ.2۷N+ww!gw={̜9S}յ2ehhuJ:˖ͿVߵk9(~:i]Y?0`f^`M-_B<^z%d@ ^+>3-(aaaOD tlk;Hqyv` ]78P0Y%Y:]Ezq C͵=_ת惷ڋqؔٯUŲoS5ҭ.@h@u B9W\p OΦztF-XC oޙss2a_9MsJu\Zy꣉d]veʨO7=S\P=c]Z/\ʸf8e4e{qbu{XXN*G63{\dCi[5wܻۘ8tX|9dݑw[}iԡUm .KRv{.7f)9Wz̞ z!Jɞ={aƎoJ!uD/uFҖ-[WEF~t؎      |%n~m6ѠuFFK͚5rv⹆Tj$((977N@Źq.:{lOkP':Ӏ@$ lN[!ssWdwݚ؈zEv }NlsgɸgqQD\cB fuM"m72ω*?[&\-i@P`V&رc RӾoSZ-J       %)@P=Zf[TjUS!^\Y1$$DzU"ŮM&6mŋ*z=z>[g@NAuP!~˷N V8YhGTZ-zڴ#U|k3yV9+:|g:U*~fk |ύR/Dyޛ|#N.vk[¼T/f ݫS5}G>5`hݞvk/M%ż6?G] p.GEF'}ٛM ^:xθ}otueMop1_oߝ&1LYsr|g[O-[EleH&Ewzv*֝YoqֹVT3h1f.       AuN9##TM3gNm{},GLH=5o\:ud/ p{:fIHHѫL2TT/!_8U_{wɘz8^Vnfd8֕켂N}$YDzZ5;۶066=ֶliX{clݽG‚gz}ŗ)3t\,{WǹKǻItgskP(Of״?J y!_:awנHP8jA@@@@@@O{G_@'@Pxnv/GP)q{c&aMz:יGJֱ,:zUy.dfyNS}SҨvT/g4AbT ykTgY٘cf=rsj ;U=yԄ7rڹ?B6L54U)\ lؾKzgi$yͲ782m^Yn*,]#̬֫/<[p  +'3]_D2{fBLas}޳W4[/,bLM%{Vd7s{ʧ{_[=ﶓ".T/"@@@@@@@c2 E ^d2cƌ$T̔c֢|-vd㕵kF,AeʸIee3U[Y0s,lgw &8Z^OT)WNF=w1lJ-=󢆵ۯu6ȡGD/VTT!wvmoB % @4ạkP1̅+FiY֙gW3r|̲7dX`Ǟ}αը)e_cv;xۜef@_8Auw^שEJ/8h?5kGv^,<6Zgqy>s {츘|I1On       p T?. Pj{v)G-,AAAO9eg߻53kRӪyBC!K U5\+6J$OѾyږbod?y{8^Vn洹VU]|w߶iVM[ կV0]DB= LOU!$XWhUB-W;A?#F}l+gq=ݵcU?%^)Mٷ6|WIQFP]*Aj-Օޝ1Ǧrկ8,ύ;ۙA|Ed_LJXgNoWO,[c6~-R?޴]8.lYo=OEUv8hH㭰op {Q1f.       Au @4|pYSBBBLl*;4ϸ\[ 49oX:iK5n]*"+X]r*m:T{w͵{Zq]MwI)|9^Ymw=^1\YjFNYKzZI6Luֻ5rU]/k'Ъ~(9jUl|E3g,oՋkpHt{u8St&X7#YFX*G@>,ܟ/b#Kzth{n cYy,p<ƪ;\jڻ>U՗3bIJ>`ْ6kP]7xm",T/M@@@@@@@+ս  Izr5AXPdYj깈r ]@XFnR6?^eM!r| Ny,~2 fWCjZ֞I^[f?jpث̣6AD{ߍ`;}gנ N3jsonkTAk2inp;Pk}ڈ}B,#%)0}Hv!J"m]Q @\ռ!9KA9‚gzH٠2r$4AVoޞgaKo)T;-J@       xUW9 @B T/Sz͸8 -MP=_* o7ZK˖5abiko_%u~| +J8[Xgkᴱg^A0W:*g&HoDž7gu[kIDresIQmBtٰ}4UD+;k|4+( Ϩ,G}=k@JX`99R18#`3 ַ0M\3vo1JD&2W~DI'.9t$S"C%<|ލNVZ]|٠|[MϐiVcR!4X+G[\T1,ĭ"5Z%EXW,=%){deerD XOTҺ;g)g׌k?@ /q|&Aejd .W𝭖/E       Pd @&@Ph^9[ӊ걱NE8gYxv767%kW[Uq;DQ"w:td@Pix8d@@@@@@Ns@NK]a$11QlG*{Yjz^:BO@o=@8WG@@@@@@ ~]3@֧38v옌9Rbbb$$$Dʖ-+Ou=~?g$O!D]Ja Mzi      /@PG Pfee#$!>^z@@AsΞ_/wƔݒa֣*EHbID\:OB@ @@@@@@NAF +@P=_BmРzllKPPAB@Z__~N@@@@@@ ^"@{049Ylٲ=7 AuҜ'      #@PwG ?Ջdȑ/HE[@Hw.@@@@@@ d@|Dgb+!!! Ǭɳ!0 K*2 xS'Ѵ3      _8 Ջ4>|pYS@ՋIO@;`oo|yFE@@@@@/ }s !o7>49Y%ԪnT@JAu\SH#      *o1>_׿t@$5/!VP=00@JAu\SH#      *o1>_׿t@$7dQ'HPݛ Vw.-oyǑQ@@@@@@_: PzVE8zhhPQ Ow)oyǑQ@@@@@@_: PzG5jHDD*&oēyG_@8>*oyǑQ@@@@@@_: PzÆI\\QQ۸ Sw+oyǑQ@@@@@@_: PzÆxQkp*{[@@ T%482       5K@JR^oxzhr[ém\C@)@P;ו7Ҽ(      [p/F(I{McǎQ$&&FBCCM\B@+@P;ז7Ҽ(      [p/F(I{m#FzUQ=++K1oēyG_@8>*oyǑQ@@@@@@_: PzC q@JAu\WH#      *o1>_׿t@$Gi*J@@ս x  P{Fw@@@@@W k+V'֤I lF@N7{SI3      |S@Nc{K5b# {3 WzqFK      E xC^oxuaLEuT+  @^R):H+=@@@@@@ [p׎_{@8UzۮTOHH0zѣս x  P{Fw@@@@@W s %)o7m=49Y%88XT60! @ kiqd@@@@@@_-8ky#%fM f<@(}սsMy#;     |_9o@޶AXPdeeT60! @ kiqd@@@@@@_-8ky#VT'aaar1f<@(}սsMOi;w7_Z_Tɼ(KBjժENB LHbZ/$xY!{n_*?[faRv ӝ4/M&8ޚ9U2      [pd}E=  덂5uhrhP]+sÜ۷o7GFF02  PE*x#mڵk.X3((A@!KLIOO{J*U$))3)MGCzuǢNemͫc?f̲e=:~qlhޞ^}$8 G Lў>xDU`/ziGloe^slU+=׷uTo d8ۧK[9n\M[w&!2ECޘ _9E>ys8Z53j8:      'Q߂c|$^F@ o_aLv@JAu\RopBSIRJRlYjT=j VU?r䈤5*/3ِ8DW&Ϝ_xa^&Nr 1sW۷eg3v헔cjs+S׏HQBB-6oQ=$ƹgTw訬wlw#cٞed}/Za߬NQ6^/WN,.a!~/湵r.9u<,k% •>xq޻㹗SPJ+$E".O>V@@@@@O Zpӟy:0 W3f“= x  p T5i+W*UzQ[nUX=--MիWKjC^"a!eտd-zzѥbBqI(ZPos{|9ُsݠ;CUo<ߪ R۰5{/?I     @ Zpӟݕad@_{+7f,Q9y9O%۷ouF@.Au8{kJJ򤢺9gU2ցǏmUM?pmyC U.Zv6q}!%&@E ;] wɺv*TQUݜl{s0[h-PkɋٌuJP >_fJ/?.T5t3;CUl٩T+]N\E>;Z~MFykY8 d?> >#}4TҌ/eyc07 ʿq/Q93     y"k1O'A@|'/Kz\\{@@j 70y^TT7̙(mNy;bB1\af#ve T٩ce煪dhgw@ kJfm*w`J~Y}iհ]G yTeT~˱PR^yfTo&ֽvgAuuu,_e5uj`sT~}nTWa s]&ODa}?G^>V@@@@@O Zpӟy:0 WLJJҥKKhh@:ꞹ~# T_#Nk]" ̓c-0_>ѳGyUU'HS!r&weiPψy^nQ3dz1_FzDϯݶGz bvӏT{VUs]m4Ay+6J=uiHnWZ6gFH.\gAKG#n;砼]Ӻr sw[Չn߱:g5j|:KJLvd#@@@ 0`ٺuk~4fۇ pulܸQ dn&iѢ>D|-8|ù# ઀p~*^dI #APU9! T̥i3+;j/RP>꾌m~7P|d~6X9 |қݬ͙>f՛mP}2lBKqESm/7/X*c,5es旿V癋N\OWdzNsݠ2x{T9|B|[Qj~G@@@xGd_Up% p,^X^xӮ];yꩧa%,k1O@W|.K7.?~xIHHHP5  8>]v['?tw=sM70=Kc0`V|6kL^3oXn]!./{ȳF[Ptީ!q:& ;_ ܲ ;rRϫ"ꦟzwlرO^UV/Ժ[,Z y|RaB@@@@;_ y󵼻2 #k7<}ƌ#){zOo߾}z˨\py6;q黛:y_*jZ9;ƝdʼpҶi]/m-3 %sl(/j Wo 呂|*trw{G#H%m~#z5p%g,YzuѺ^թb-,i 3^2Ճe]m8E!0_>Izj=o{Q2ds?uKme=ԙXHuzh>"bS^ʽVo&!sWu^TvRAmlsZQqsܲ ^FGY='fvAgɎ[, m{奁ұ][d@@@@@<?_˓  \ezӗOUTOHHp*wC2Upf9q1aҺQ- hN-ɲхd`9g6QZo&J̿V s^5Ң?AvdͮR!mD\4THeQ]}ל^7[rdG@@@@@0Oy3׼ 9"@O^ox $%%IbbDDDPQUѳjs!:V_~\ }=n{P~QU=]n[EXݱ ; o \Πz|rI m uլ̸4ww{GLPݑJpxbZ^ /'ͱAu"4YesFkKp;s繕z5d\8Sg&۠j}znڼ,_07Ի^Ͷx>c     7kysU@K^oxꩢ~ƍ%JHXXAuWp7'=l)%eSn^Q3<ƍ4\ 莹s& \ΠM;t`Ԗt"cw6xݠ;:`Tr7TeJ``GgϞ 6go uA^V[l;s\1½njױSrKr %7uWl)Jm!Fyz9g+&wS߄2eF C 67g]2{֩*5MHbL!u~^RYugi5B+/϶k.;ipT$-(!F5KV됵ٯW;JɌ/I>"X efWbK53ͫQ oeSqux4[Wp9 }ז;)`eQ;Ȑ]**讞Ě@@@@@<?_˓  \ezӗoر: FuUhk}cczoر:P{$*ϟO楦]^#W$Jb GoUǽXø};XAPJ.zd9im'U-Qv5xݖQ5Hd x:Iov֩LW=hn\~vE]ɿY1c7'U֛MvyަR3!䭀4k@qdO{_1@y_{ >j(ILL㡢a3E+mԕom-d&sP]m,[/߸]/TTZԫ&[4TzmP}0@h$-d:Uwos/RP.3y?UrMͭef@y8@pIS}Fy*16r>Kc|jMiɺM}iB¬>C~uF?s 9fn F-6Մ_ g|S)bׁݗHI,VHc Ir|Cp     x@ׂc|' C  C_{CKv=z.iii՝7|UUt%rgd6LR|`n 5*>7Ac'φ[c/~~V䥯CG6۠9KdKuͮ"5V Xm \>'ːeO{t]j¡ .j%WؑQiQi=wƟdO3w7FY|43s`HsB      5tD@czcp;vJXX/{LYf-Fp3Au?!u M?5Cߪrz=b՗o!nqӺֲ9ݴy2sjsѮ;Em'?)S*bf oۅy@<Xc<,{QOkϟ/TGkX~}eLѲ7刨/U}J'Qw0 ,ҋn,7ծh'.s_vo/E#u3ONG&۠#s*?o9v@@@@@@5_ k z! I_{I;5OP/66 i>AuKz[>}͒7vOmÂj**ʲ_ jmEu<j_Aԓ|F @ \񒨰Bj۔J'[Tb]52*y^_dkLͻKFWk[F$۸] 㽹JP5K⍴K @@@@@@|ٳu 䍀QTR:~9;oLމ;۷Oo0ydZc51xZv4mo1`դ*͖(DP׿ȠsՏ4jd;erI9V,YU~7.۰]Υ[}mg\Zo̶y@,AA?!.]Y xʨƷ?Ȇ$(@?QOAuwwt$%M 46A@@@@@|-8k֥g@&k7< $%K` 0rb՝o{P^8ꡂ?~Dlg:"A']DP}|SF5יceފֲsy~Ym\_/R7/vP6@.@^ϞKn Pgƚmnۤ}5zd߫|Ž#$ 6Abz.liPhB@@@@@pYׂc|S xL^ox @cƌx ?)AK?g]LlQy>n;WYz5bkHV+T?utz7SStx[/w<,=$g2BmP]ϜMSF@)5c~k6|  ˠUYZԫ&[4txrSO#F]݁XHl;׿wCwmy4S%;_mno @s o9@ @@@@@@e_ O :" 1_{1 =Z#""$ȏTBIi:)aT=.% uq6R:nAuaIb-q۾W@vL֫۠}GR*_xa}͒keu_=.̮W@ eP?6n~6R.htV^P6> }3Qɸ" V=MV7'۠ۛc摠znԲniYMhA@@@@@p]ׂc|s xJ^oxGUTOHH09o 2N?4y.lϨf$3O-WXW* 㤟9 O\f-z &DMubnwY \~/cvQAWĮ- Gʣw@8bMw¯-Vnn'Ζy+6arCRXa9p,\Isn\۠Zv`zt4'8B@@@@@|O :  q_{i$TCTwAs-YzȭuRAuuX*c,;U! UoUmPxioرv,*l}HbYр pl- waaB;.L[BPorӺNP;}9{.M~Q]} H"Q]J2N]h$ ]x#$      d+k1>_ @L^oxr/*NE*_^+?/^);d2`*^X: ol2lHP {,c|9q]A7;lܲS//)}8獭&?i 9zXtt:IK?/_iٹT-UZN7}e2g:]QݜäjX|[C 6yDGOs}4V\=W$c~R2Vor Hޢ+*LQsQ1W[no 9rҕ7Ҝ @@@@@@K>% |UPTRb:RQ=%cr)gԋH\hhotI>rBTF<2<$;W:/.r>Fw W@鳲QH/dN  y}NvFP='Z却mX      pi3tWG>_:#g :(رc%..NBBB$(MPݓŒ WAu\VH#      *k1>_g: p%|'Ӎcƌ%K꠺Q' @JꞹGFA@@@@@|Uׂc|t@J O[YQ= @>ꞹGFA@@@@@|Uׂc|t@J O['%%I2e$00P{Z@@ iqd@@@@@@W|-8kL@uzz7NE9T.c! U+@P37<(      Zp|y#\I_{i1cH||7&Oĝۧ7rgE@<&@P3GFA@@@@@|Uׂc|t@J OZH Ixx' @Jꞹ=3      @LLO2Auܜ, TwB$%%Iҥ%44TDP=OF@ LP3     Au_7 O{*^dI !'[# T)"      eTT A_t?~$$$r${KD@ CSE@@@@@@K{Ʌ0@|J{{Ȑ!oCCCϏq5 Au_ʜ#      %@PݻG ݻÆŋKQa17g޷o0**ʳ3  K깄c3@@@@@@ȵA\ӱ!  k:ᐡC%>>^¨%[# T+y"      =սZp$ #@Pݽk=t0IHHg EEu<@|@\dN@@@@@@/ eA ]CHQQ=<\Jhh{sEuN@@ T)#"      co޸SWn/$rzY9ue NE%K[o{9/d@Au<\9dP]Q]:AK^K:  eطoO.8A@@@@@@Q۷U**LPz䪽2sl RJIqR~lyɫO_=jW)8o@ sLf '&&JQQ\ZAu;@@Є      y*AJX?y RFkٝKm3*>#ұcGz~ر2n8}TR%TBB Auv36m^װaCO_WsBo IOO''[# /T9"      ]ճ+vJhh̘1C'ϟ'N ^X5*s:}mٲEL2RHl_xxx9:uJΝ;'cm?k:O_MUT?v올YF ,(XuKPdzc9pCζ;y(ڞZjF :@Tw]UT0TTwϓ@@E@@@@@@23@eK/Y6qsRV9kٝ~[fΜ7n@te֭$fAmn6m*=|lw2qD?n!۾W̙3G(w[-5^x!Kv?-Zn[se˖"UTUA]M湚}2?vUt颛3Ջ+&ׁzW תUKz쩫L?9"_}|LLL;J3mجY3WxץW^vZ^W=L" v-  !C$BP]DP=OF@ SD@@@@@@2!~qQnUf͚2`GՕUèQD3O*ݺukINNU_N*U}ڴi[Vm?\&MGUԢE Q!ʕ+˷~<m6Gu[vAuWUsG WWJ]*?3zj,oly-ܢYbE] ~ӦMv]q^$/:d:zf9D%UA@o W1߿_WI8zh \?+]/m ( %K̶j C.X.6g?(PV묝:1     (@P]$*\ʒ%KOǯzKv駟eY|<䓺UVꫯڮv~ժUjR;t UVB c1*ܙyO<+TWc꠻YqVcPղw}rJTT\R;]\ܹtM)==]{,X@/'$$7,kז_ާI|uz.l`FeUB 7tSf_@+)@P=!CHP=OF@ yƍꑑA@@>Xf+y[s7aTUu{rtn#ֻT74h 3ժO>RNshTWTUm'޽nRciرү_?XH'p[|$V=*wuT߽/E=_6n+߼x栺m)yÇ AAAoM7d׾pBy饗t[׮]K.zU'˪]Ԥ[n ?Am3 @P;/B pVAszfEuQjj_^5ja.KGAזn>شCz~7)rP$X!}NSwcآٓmGF,r,l]wCw@@@@@@@ J2X{u,'#{?U'f ~UWXZ͌mP]U:Wa7I}c6mL8QR~RV-w)2ep#8gN  Q0uN&EZr.uqQl` A_~YWwt~ֿ߿_.]URWճTuU}]M7| ׬YS `6xAu.!CTRVIy5 Auȋ/U`s{;>FV?s挬ZJ:zg}uA㩧uT1D˦]DO9' R ]ԙuAwe@x/.`!?e6P׳skbI?)&͑?lkԼi|]ZPTǿxtdQ,iq FzGvgatglw*ܯ޲S6/GqBRdnk $2[3     R^rLŜ(+c>-#,_3eT\ixoaR/d|td|^dvTg駟oQ>ү_?ѣ%!!AW WJj믿R *{ɼy?noҪU+hkm7o,;v5k&zrjT[ի'{T(AA_0>b}{KD@ [U(R~Q*NP]UUu+;kl GAuu\]T+<%Ny n;t婻oR5t6mc~F8Ԣ~ ]=0qx6\ ϞK7k/RP|AkYͨzdvBbL!y9p,l9彡?ʮ)fcbza!}a?Z}נk ۷UݛVSJNoDu~[K9x~}G#׍X=wl1`N1N'Nc#e+m0     .\頺:đS+n[6- j1dteV[Hp qitM͕ꪺm&Ѻʺ>6m$:uM]v.]Ȋ+m/nͥw.K,"##qƒ曢*6ѣRreoiРA2l0֧OSzB*mp7|q2s#1@ @Pݽ4̸JHHHF䨂~^3K  ^xSaٲejͪk֬-7 dT]>Qz=tgC`|;,YP=ĨTjT̠6!UKޝ9Wˮ:|#B8[}oTIWӦ䕯˹}(RO' EZ֩WY9)[T3B }X<sk32OZV&~Z6/mFiٰ^ptYz._:Pc y&u}ֲb|:'u ef@@@@@@5o#1y}X=p3 SlLwPO9rRW$q,2{l}GfnN:^LnT{fK>; Yfcqö/O?ՍE HV".N@~sʖ  ս:Tv%kRկEO$[M72/1IBLAi=iTv؜Q _hTSeƟd_sst;)Sۙ>^0V6kGVRri٨eފ ֺJRT9*K)OX:HTwFwNUy8 *_ /۰MW)UBFo:pݖQ!XHf7yc$Ybe_XӢ)yc؏3;zj /a]zbQ},*l֗J/"_<gL}xD@@@@@K xKP]zvgNH]Ν;m۶PݘUӘ1c9))ITEM7$^N/^,/ӪU+jFj;(09>zh/u>@nFM>/TwP@TTW<?!U^zyF||4lGPݢ`cݻ` %KJQQ(.dk@y/_.*UvZY3괷mEusfY}>o'n:F̸ znRAא._/mN>#V+'/oa߶7YiQUnzmek}ngrTzo4e?o硦1\[)լ2WwFwndЏ_Ux(l;]5]5H9&Mh77k*Q2n*gϥo}mW9^ujTMoujcߗ_{Hjz^}{n%c2'O &ֺ=,"3*7$;='~u2      xSP]k>rt&՘w%=zM2 ۹sg֭[RUp\UW?Sβ;vu_|aKUC7dѢ;f/]TyM:utuw*$~}4#FZoֺukymm+GFF#tcT)S*f' _ SA 1n'dk@y zDh|9W}T5o~FXMcT8_篫RV.`CnflzYèyJJ }e5L2V_ۙ_| hVEr:s=gOF!)|oܸp?lոǎ-[9㎻jjРuV5jޝq]QP~ax^)4i"^{.򕘘ݠ*NϜ9SWhQ]zraQ.\o߾RZEzAuSG TSG/*G깷dK@!y g[ԯ.NRdT;VD9m; jzsk)rP]xËv7T0\*VWݮW+p64>ܥk}fXNGOw˶xi9a;iT4_fSAn q7<ǽ}_UU`kKwӸ<ؼ61IwSʹ4 /I52{rCM79 k'8uF^RUNFPb)yz?#Y([bs]$`k@@@|Q_~e˖lO]%(((>@C`Æ W_9=MNDƠ6i|]euOAu|IUutU5iΜ9ҳgOk}'>ٳg˻+gϞuYժUu@]}965k>Gw4x㍢=ràzjj<~ͻv*]tm *LK\nƂ r 7d^EP=  _ ޕRw7~'BTTwϓ@@{E&TWarUQ]UVSj-s̨cA&(HT'WIV7zr"A7$la-~Ռ *դDzr䩠o 3*c$uȲ[u$K4eMzjGk_5F\M{<,awϟ_RzzvȰ~,1_NU8ie7cTW}>9]82ȳFF_MOܧ   / tYVZ`ܹ\XyUygqz:tݻ;Jo +yrjHp JU!3fYUtRlYymS-D4x`PmKͫ*#7oP]w%?[2y6mL0n@{塇mJrrR_g\m&ǏסǏA /{!~{1T{' 򤪞Bɓ'ьLzر4ll{Tձծ][o@wu .ŋ dk@JtydMϨ$q?*8kCP;AA_*֭BfkRW7+?cG*JſmwN1W|\J~[N 6L{[sTW'|gK=eNIE%x~ҘQAlU>W=TokU>&:RY o73*+}jEآvό+e9z>xCsU&HAeܜ$i"GUO5*/\x1g;~lΨOxH~9|>9xfxSObbMҲA k@@@|U`РA:HPP^D@PaFt6*͚5sօu CTWadYl4kXM wrw**>bSd\\\\_ө HlllWUU\}>e^LigRrg|TX1c"WZ{W`СvFEu(@as݁]JҮ TϙMPbP]?{jjV+J `rg)XAu ?&u_kȟȹ4kuzX˹IPsee֮TE^{Ȑ]q7u=e㍠z_8^n˨T ]S~5u }#k+OP@IDATZ:A?-4B7j/C+.TksF"-+wh@V.-F\M7n^`T?{.M:8uZFP7 QU7A@@@@@K x{P'E>2%hk&-[P@I{Wca Q4g`ڼSo?(P\u7TNʨ}s*RR}@ˮ֔(PQ\Ǯ͛ܤcsǷsvnhlT|Auf05jŶ݊ꩧȁǬ/%}/Vm/["F>~k}0tur5ٻ(5_B &Io(!`k.M顊bG*{齥s&dwlK;>3g9; Y| WO5a_2yӾf}\/J 9{}Zyp29圅V/.5{c?z~t纵7B90#<^V}dheaDc]zqk%V7g1?doT;>'}3@rMƘj$Kbg@@@@@.@Pf#cTe>yJ*2i$ PKaA@Aug*5JUEp*6hrd;]>\&uS FwDzuF@q( z1JmyCUJ@/0򟾲%g ]w_erMzmx<;_|ot'$LT>vBzSyS[aMAًۓfXOq5婻ZێAkMw!++[>ͨVT7@ .j IS5뿗lra]$<4hvG{Wm7tr=[A7k1A^s۫xd^Vޟ:Sut5zQBT/ ((UwM߱/byO枎;5yҚ׮][~~~9FFYezjiԨQq:clߟvo{ڲ1uc={7F ެ歟RLNb(\l+Oou]qz7k繭"w^}}e䯍ӍU5m?w q|OW}+XoqDa\qTׯWGCyu>VxޜG@@@@@(Ay96Oگ_?i8wkF@@ T:;vTS@N^>s-frTwG> gJ$"o/Uc˹}Ki³pAsO[/f\{bsh>h"SR?\zqX9U䢋.*Tg|SǠ[䥑ӭch߼{SKkAu= Vʐ/~궞JKZߗ7'|wzHdh~^kJQ:62Ln>Ix4F]f]WʤYdsŗf=I3k퐲A2gv̒?fX>*Baꖋ>,kk{ۤnJW}mu wv*yׁn{ ?ƴ=[_o"U؟:5 vLRau@@@@@Lg~F@8Ջ7fTW'gt6^=]NYP]W]nlw8.b"XТBظ]o-ubc¥NrԨZƾCNߪG"UŦuSDow7ɱ8ʩLϐ;ʦ{$mTϩCT:@S5@ @Iߚ8C,Y˕jʯVc]Ρe T3%bW1a4tIP@s͚5#vAVUסeۊHZk;Xݫq7_׿IHpDMgQOed*^Ď#Kݷaw~\!:؟ Ɂב^ܬΜUhm7011xD@@@@@b T/&@@xj !!!RF1$^gIz.<RkwD:$rkEUtPJp[j&T{29~1{ VP$XU'riBf),>Y]oJ%I?ǭ>+5^7\Au@ഀwߗm5_ܭ50hpE6WҮz4?.=^!23I)n+?\ ߮>fɚ;8zv}MFAu7B>7qqqVUu3n>vX:3رC*U$хJNa(^8%+7?ٮ*cyM     Ay@ gQTIII`$ABK"AWU ]-}oo#W5c{ߡU ZUQBOiLWACcwV׶Tgfد%+;$Uj$Vvd ϐӡ0kR)Ue:f@{]G7ʈ7zջR)"b{S=7NOeTu'?,;tel MQmǠ>@:K]tȑ#Fe0NL}(E g;fTR0g%17q@@@@@)@Pp C@੡'N4*T/6R.G~+.6ZCe{oFk [VbIR^Vm)v1uk/k'mRHÆ/Y_P0sYa/7]ؿm>1o:p;NR->`+  ^#_eMޓZE١Ɋi1/6n8/4k1Kn1'N#/.m5'mSQ')k7۠&.A"pw]Y}Ϟ=F\?!u0ͪ:^B*0<"B ǹ2v{N6@@@@@@XՋ @< L<(s8*LPO۠z!];u3;uP7IaNHȎ}yg;l"ڶ0կsU)-v9pD*:n./YJ99x츹KUaAslEL,o>t,ެ~ux?a /#v F0+ߢA yZYe˿)?E#I]s7 J\X{cl.Os@|{qZ6%Ou9[y :hR7Wh' deesçvXmAuO[cz1V+Mq%ryin@uR C@@@@@4O Aub BPM+DG'z5cPJ6n޹W{o;t\+/ۘ[\ozR79NZ V{SgZm֗nZVlJg}f7(`mLUnwR%m}HldQUjRSw [}JzFtzi1.&y4 ~@P=ǶȰyگ(tTKr{噮7eYc}0I֧2>UCWZ!Fsɪ _˾CG׫ZͶAuO[cz1       T KzجA&L#IEuKJQ꺪Чɾ1>NR-}'V\DzOF2ed+qo]UGZs6 {*.mW]b3WW!T\0cEusx-:eyv8`TJ-&%YalT*i]gTtsuzQ       TT ]zlGJrrK@@Au[gAjq͇t-Mo1>U̓lz,XjF0?tu^+w+9j~I#cfavoW\7 Ҭ~|խNjshPYm@#+;YKz5yϮ6CZmQWD_n~JUt_GUm=0P&OӰgTtu X!^ 4       G=c0  ^,6kФI$!!ABBBϏ%b6^=].z1>>oOe~rFN"Obdxffe/|,Y>h'j"Vh#/cm+f%gnoKTVhXkC?\~Yڪo_ /p}84O[9鏧Ț;%H)7y> ĜO[aw۠HP8jA@@@@@@O{X@'@Pxn樉'AVe;υs-VRA( Uw .0*ʇOVN𭱒Ѯ70ٷ'3ޚIyM2gZykV{ǖM[ֶỤzJNU?7Jh yѻrll}d -_Q(YV/m tf@p3T̒!N2NRӰMiց}m3/~&b~+=}"~mPQsIQ       p T?G p Tꉉ&:NPϒ 7,/YEY)6ja-Uzc KZBk[v|9gv{KueqV{rNNnF ,SFƽMf|F; #>yt]XPR%6ڨonoڹW{/4{5)+ @)8Au}GKޛZ:jMWoߢD߫7ɐSzto{ڲ>wym7sK J^Vޟ:SrnΒR owKZ4!Js>pXOAVma^uy ƶc-c&14 g/^#oOašmmǠԓ;^cg@p3T8KYfqo>tLZh;vRY}p(o=r$T,gq2=Cp lꞎ&- Ab1@@@@@@< @(AbY&N( TTX\]F\9 j4Ǘ1}_+u;T2ir\U97?U=l]W>*B^{vatuT;uQ_z\ZgdJ}*GO4T2‹YY2FPR[䢚I& n1I;l!>l]w9xddKrQ2;=7'p_㋍ Vז *Ȝ%kevOM^ E+      xEW@" T/W:"#7DP=4`U?Q yKUjSuVѕ_UqݮYCZm>.ߘ&/.6U}cdhBU+ĘM~yx8k۬n6wbsSCݾwA!_Rsm./wh-eyXA(\`q2{S]+S:˕)]ڊ圅29ư;Z75+p ]+#dF12%Li 5؜fw {:铺HP $       W{@pK XՙNvɓjժ"BPݎ(F症Uþe@YNO*ʮ1 gIwsڅkT$=oB;EOѕuۮDJw,۰]&KVl q$Dl.)Uʛ㎽偷Xm|vVV :Unj&F/[w_&6T5DۢA k,+ E8trdf2EI?Bjp!yA}:J >&#-,[oTh76,o)~GfB\zt5QV       ^ad@$@PH\vUI&IrrT#n'tl*V Jw<,G)fT0'ٝTnRL3}rȽ99.Ab| ԋ@@7+ye|t?EY<_"^-"      7{C9@(Ay9Auz@@AuG @@G"l#       ~@%55UU&BP(rE@       Y ~yb@ ^-SL$юՋoH@!>ty      #ϑa AuNI$!!ABBBOrٔM̻̆  sCf@@@@@@@ ,lTttta]؏ n TwI7IAUJxxу(@@[@*Umf@@@@@@8c) { @ogjj\pj&L6@@FAuV@@@@@@@ ,I&~@ :,!!!/՝)ц ?"nRUӱC      Au8@A[fggԩS%11Q#A[2@|Hۧṫ      :wFP7^% @Ty„ $GEu8  `~s{)oO|      >$k1b @|24iITTTw^  {vT̏      Zp=ea睠zaBG@}_{ᾌ{=uED {dB@_0DPݳ+g~F@@@@@|]ׂc) ; b?  e9qDINNOUqoh2`+o@ IF }@@@@@@\ 'WK[{^A„؏ ~}zJRRDDDPQ=2z! ?F:Ϯ1@@@@@u_ ,T/L /k7ܗ)>e0ꅓ@1DPݳg~F@@@@@|]ׂc) ; b?  e9yd#.9 -^,`%ͳ  @?)ȝQ      +_ taT7%xD@s_{Ṙ ǏdAu???t$UuyxYוnimMq|9g=R.2  gSoxz„ $!!!RL*{@@ ?"ٹ%@@@@@@_{{IՏ8%}^%YY!By.Kv ~ۧ"55URRR$88X {@@ ?"ٹ%@@@@@@_{{I\>7p"Bd= 9[;S @\>'N4*K/G-~O3`D  MޟxGw@@@@@U_ ,|TPaqd6s)# $k7}n&O,qqqFEuo2 N@H%@@@@@@_{{Iw=(j֔KVv\ZtC$F@s\oxt ~P/@@O{&HP3?F#     .ks)>q_o KpPdo5%LѿwyTGB y k7}J&L )))FP=33Sr'd>w`yE@#@P8jycY      Pt_ :uɾCGbL|DW}ZyL$nJmZ/ %@@oxJrrK@@T?o |  Pz%cƌU%$$D{@@ T9%GfA@@@@@|UׂcJP6.$ M),[޷T)mwiT`@<>-uP=>^"""$;;@JAuSqd@@@@@@W|-8v.uޯ1R]`fy}-]\j+8@8O|O^5!A$''@JAuSqd@@@@@@W|-8v.g/^#Ne\rw_Lnb6BGOQng%nC* y$k7}jF% zn?Vx2+:`<  '=KP=ς5@@@@@@ ZpQ&u&sVJmfB JH]~YO[^JMEu@HoxԌ%,@(սs^ {ǑY@@@@@@_;|Txsۗ[ȃ^e'nQ p oQGKrrTT0! @ SJP;̂     xg/ 3Zuus%''GVoilɈ=l`MPT@|<7}q$..NBBB$00P{S@@T Ti=SA{ʶmѣWoԘpC R|"?:2Yiqe䑎Wo/7 %뫏|G{}q嗅eN{LϔبpgI̥;!{wb(ƳHS#    |-8vꏿ?Qt wNtø,2=r۵rEÚ:Au?@3_{ӓcƎD VAu!MaB@R)@P;L7m$퓨( ;%33S;&XIIIqgxNcQ`Ub@vưw̔+6eHꋽ:?&1BsC!FJ\M!eVB%XYW2vǑ%Lh.>Y*D<@Z>^AugJ! 6m0(M->,      gߵyc9~R'KBxڧLyѧsfr A؉ p o;n$&&v P#MaB@R)@P;A[jժ%!!!FPݶzQج'N5k%\Rih%cQ@sAox|رoy{@@ T9vP}ѢER~} R2F%u8at]|\tEř{f~4_v\qTOWlWVlatXYj&TB`8rL"SG8&W)/V~X?ȸZtngƴ=_SyAaOv\@#Ǎwd>& nȉS_!ZUʱ%emF_ϖGs:6E(Jir2=X ԜKA}n%05z{w Gжݔ<Vkc'NIzEJZ*['),ugTac*|+`UamPZ\Ey[d?n%<$X"e&Ǣ=P&sqz MizϐfIfܹ͖vu o}@ПT)VVqwv=P׾>UwaroT=A"Աeye7lvk{R!:j+_d]X]WsS/ga׭Zڬ:\Ydbw %ۯ&6lubA@@@@'kT/}W@|21cH|ժf zn@@ Ae˖Iz Au.Lr֝¯+V Q,_t >UvEswsJ :.E3jl(]. @4]#-T763KYu:\\!*B>zxԁ̑RAnzxq$k/w+䆩}}>4oT=Qf=iX-Avaˆիbÿ-9?D0zos≪>}ҹer]zf'ֶĊC;eVXP&fNn(ϡodx-;ZO4X*i{Xm]._Z_ MlڹkX6_Hzqu:nmw\!g>u V.޹<=dȽ1@DYSWewu9do ^_𻯽Tnj:|Byvz*5V >ёwU@@@@(e#^.`^ y!k7}RF%T0! @ Sʕ+nݺv=n[Uݜ;IP]Yy֕ŝ-:=7KnLmL9/,n\*3roڹݠmUM\t N륰7*\_Т۶*T2vUmgx#ns\t[[˕ kte'0sL}uxw\km=1hUNP}Î=Q.ϝ!O]EW7x'(LJ̾&vWowF)d?U®\!ԋqvݾ5j1?nlP]2[6;4. LiubtMSk@@@@(=#^z]^  #k7}ftP=11QBTP_I$maC@R'@P;wgq >J7wRUΔ2wsx:IU0u[JzgKHv-.Z#O .+IpYqܲڗT)֨6-g[.#ݚ>Uu킂aWXI*dǾ֜bKH@,tT Vj]hVKu0j%:,T*Dʽș:גרZI+ʚmZQ|*ܺJsz9zqN|y^lgnEu=fV_W*8dޣJl]P`{eqJZ_\ۚDZ:Vu'])&R>xnkztxWajͧ0m[@{s:vz{nBזaKIDATkZvH_]j+2]nhsd7a(Au}c͠ßfl{zկoZ_*ߎ7^tzĩ 㘴#2n8 i{L2?UOg`m;JߪOn0Ƶv5Tv3E߀j R7sx_/V7AK+#to>{*\`d漛`*aFWinେ0@@@@J  p^ oQzj~f>@(uսsJ {qO/tQ\Pn'>,0Bg{:(}HU87zSFҥevcOgH>i&[4l1޳m V؉Su~Bu vSdU`t(5d@v_觫G\t"m8UAbs-; ?_յav=CU`[Au|u 飛 z0Ǡ_+Wםm\֧6+FGȇw8I*˽)CwA^wڃ~+K6l睇 1ֶ^yc gf6ۍ'Ψuk;պc:?gr>k5תj򅵯MÕ[۬     @Auj@_{2fXRDFFJ6Auo 3 :9ս8'Au?Uy3=%t5usUHujA_0qậzz;]8]3˨P]#]`6 /ۘ&:d_!AA2ٞ+O.rEkXOu $ȯXC%TוM9?D'랾Ǡzk//w~͸T?rܼS}>9v"]#ټyCS4h(֭ÇbZn-ڵ+;e_ T嫝׎ p|G- FEuo2 N9ս8'A2e$ގSʻSfʟ+6Ao.13׿R`U(Au}L{:)vӺ \SKj'[K:_XRgeQ<ȗ`U'̚gnJ;ȥun(ɠʋN%bƶ1WѢAulW\]w?2g:+Po;v">ϡקP&Oouۓ~y6{d3=D?>Tٲk^S,   &ЧOYbE5k, );@믿_~N:?\`v"#W;@l o;3FE;|)@IDAT|UBH )* *M|X@HtB_A#=BHa&.&?3w;%,3ghv<ooo+:*  @dܽMWNPfv<`G2Tѣ&ٗңu<[úsETV-rpp {{{:$Φ,R6ea1i|#[E_bylvvB_>;qK>yQcg$-XC6o'3 _/z@\}l?Dک(OY\˖!fX 5Ba}]'sm/r}ï~=݁Zկnw+(*ZǓy_a/LY@)8oUB裁|/t6:V /_kڳ=nX=/ߴVOmկ =T#Lj:u)Fnv62pJȐ{ФzӴvan4r*&GU~chv%]~2UusC۝w*r)Dne).!IA߾Fc^\5>G+7͏=T^|mheɆݴzu)>Ƞ:W\~+B;_,6>IZNw221b*6?D~R_/9߾ٟ|ETOJ]OTM\ Rpum枏%?%N: <_| Jl*:?n\-:9מ4m$>wBЌמSTZ=`̻2fTrEe> nMjS/WM;Qo\uo)+OsuH7o~y6Svk)w+YNDŨߴV%zOguW}<7/hc9_nraWn/p\}ǐ"K_qcSVM s>qS=-;Sit^sET?'++s>@.-+;9:P- z 7u˟"|&򜻏M$Ƨ~\hGmՎ@ @ @t Zp A@@*sΥ0rssCEucpM#yH^簳"(˓6Q6ɒs߯{{ư͹!9U+h~e΁[P5 uPxSDfdnʹhTj 5k$QIAiߔ?z'NPZLuP:7JMv-[FT)it]*ן} t~ԸzhU<軷yk4p+LJV kC[#O["}|W붃aN~ -5ktBO լNjy뜚%:QJv3|,T(#gy es M8: `aP7&}-jeO KIi4xG:go@Z-c@ @ &`k1K~4u ؖ߰]hꚓÿ39r'#l7K-9WAA(q |^}W TW{֢-.GCg/STˆ @)PAu][2\nɹ oY/'O6.>8$pz|TOm zPL <z t]3,ukE^.: 1ЁӗDi绔)5Ciܰp;e#;Pj$L^`4jѨ]> i<3bk<9|b$vj!6@yɰ;C_m 4n1QEHӍFF5`_m)ziy35mU~;4B:scZנ[Ъ{i(e]WUTR?Ry:SY  @ @@V:_8+@eleΛGaaaLv\tA-.\AtNHNYK{N\AY[ `pB OJD$oJ.k׉8TQ @QտZ7m?r8RɶDg>]{eA˕(Fl-xSհc_ss9@1?H;wNPUH_H7nܠʕz428])#WT}=W7ξK~^nDtY uY'8{96^qRx/u R{`>]߽՟6@ @ @WւcZ}e @˙i"*S=4[2\nɹ _9mp@m%`QpF!*^NS)>Iʴ:0;JyᏙ_~R"دc3zцmOK7nZ`@WYRw9.Fye"x5Ut׊ʞarҫ=}jz޵D@~Чt/_CJwz:73nOXdZ#R Ю-fuep}5j.WCS 8HӚ?/zTCT҆ӥ z;q"sѾ yW65vU:VAv,| dž*WU{[^}՛k:]z-ijPP:OjFB?H@͛7)((HԕIԹTjT\9/h=Nio׽Eع\/lPfb2?x;+>ʾgF:}h (wCJm(}=;υájGTW՝8Q] ja3WRtaJ*  &ߴl9 j%U*ԜħrJvԦa ze}p sos>7\) \oE?nx9 _T7XJII!rss~SQAu399ßb@X`տhqwojC @ @l-8 ~fM@F[{ak0o|YQ]E~ A-.\ گ\UG} W $?8M%uuCg.ߟn=׾ 5\֪D/^Q1jܥL`@Whבs a @vɠ1?O'h]=<w+)v;GIi=݁Zկ&ߒpO tQeXq|X^osfEÁj}kĕ蕅~J?G/XgFϞVɷ9|>_zn$NGіC}\58~,tG 9U1>g7\ʖ쥕=ߍ%[3qyl+Ց[/ӿO3Q!:AusL\  G4zjj΍sƆԕ䛳xqqqA%uHCV.:_i@ @ r[ =߯ N `0 `) G"nIdp%*(^~9OoUwoMV l??:}2WJȩT^REx~v"6%Nj&ԋ]6s",ڠ:)_|NaZQup}g]bM|6Ti]z^Twr̩ kMmr߶TBTٯn[]T8/ɰ-` A$z%fGjW!1>7乴W^A&1S8xtu)#z'K܄3votBSmEus+s򈠺)jiM@ !ݴ~ycߔZu}.x4z@ @ @IւcZiz\ @ K_QXh(9;;(z– [r?uӼuR֍mC+AI/=MUunNkwD^.:} mpIת^َ4 _s~PP}Ɇݴzy A'uN^0:yqՀ\v=+dqnms4c6_~`=:dfeӻ߭yʉЦ~P?Fo2(9U ;=\m0y|c# `y)Q4kxHo59j:WO>'b(qWi}]]Mv}]|E{b4b"IT7w: +f`~fM @ @ @F Zp _3  ݛhT18\\\dA-.\ گճE5QW.g''Z0zZPCm\yb :q*LJtS)-=93%U9ĭ,ax2CT U_j)L]iz?xv/KXrW0LoS^M*ۆVFL_L7o]7fMQTdjx)O>޺Bi˰n-Aze}ls-[8Tk$C&UA?vF҂;}lOf|Z>ߨ~]a,^@E(SbhyD!{,@ <7D{?{TN=t5*AaS ?԰6nxOfd#FB ?H+!@ @ @~;!@DoXqyr/s#^_DP$̷]YNZ4ԭy}uےsD/hzPbEj;|g@nӖI8/79lHTurtPv8nJҧCSjR3BɦȳiߕdJP]6wN|FvkܰT34P-NѷlR۴AW?ѲU7ЮcgI/=MU-T7@={+w22X:~k:]~|w xa(zT̢SVr±?׾ =!ӚޣrPO(vl}®#^X14.h @ @ @0Nւcq szV\& 3nɆݴzz_tٺڟW\vʳj^阔F妣=U;"i;:j_V>#歑ؕNڠ1[.WvW227zm9s%%ݑO>Eko~WU֮p=QF59NȒܠqWN_&nT8swˁ 8r\ASfhpG ;0h?qi֚NMߓ| рz!僃] @ @ @ Zph(2OԷoOqvP՘cY&uIvsQ?Xܽ{ƌC9%H?p @iϧpRQQᭇN7lվq-zY -Kiw2ȎK_y͕w9߯4kɹJǩcͨNx-:}YTƾp.TMYrw)nhzA=N*W컴G\7R3e7M&We+tv;G߬D陙rIĵxَTQSw4}^'հyF>\Ǒϓ !\E ɩx;q{BH8,++ڠ:Jun-߬H'bMkUwtۖ cWKkAJ5.qxao  Ow|6' d=;yA5B8@|oY=^#KZz}8"n nA`  @ @ @ (vܦoq~O>AG}di8Xy СCeגT7n]~] /@ח@#YA}э?E~gfeT;x&'ߝJ[(=݁׭4GKΥD/(s ylpy7GfK﫟7Ҏ#gtv;Ut9p]aizո9$^HWkr_AjC Jxw"%N7Er17(#+b8whݠ:ګԥk4vo:}ԝbUD +IW녫kx ݫZn9n;Hvί$({&CUՁXT "=N:A5:mHJ/M[$n6ʖy_Sl?|FsyLJk'Z|rnXoO_26mW-#3ܿf @ @ @ PRl-8Vܿ_S%)n/r[UV%]F رS҂QQQsNkҺuk@Φ RXh(9H͊qNkK>s]vM6cposg D -*[f.K=q+ FOXG^2~Sfh`d/^tx&/^GC{xQLAu~~w@G-<[>hyHZ9o֍O:ϡq'#OY oq70zo 998PT~8X[=>cT7V*~{!@ @ @]ւcT/lխ(@if˖-`YQQHFPHaFy/(%Ub RV6^%Z0[]}S}M%tj{+\PըqPr0;#.ٰ:EiwԧKԮqM]Y᪹l 1SyJݚחAVG혔F9J?I/+.}4Ezf&-?|$O!'[6Mjzsu@ATK>u%$jѧCԌY=z>V]UU aϰ@_}g/ӄm<יծnkWNDň}+ߪ~5m7 [Dzzڴ<QA4ˣ|؀W NѾ,y7&hnsğNQԍms"?'yOJwҮdveɈwח|[}4w:Q!VT/V>]ivA @ @ [ ׌ gdd&%///L:RZZ9"gB.\ !s???Y}/GcМՓ(&&Ãs04o||lvww''Q4++K۷B sMbŊ+ 6J,# "77749v2e# R'cD EDDP*U̡3ceh7]9Ja})ǣP3ZrB=9auWqvaR`-~޼,g~L̕:)D G~RmjY޻z>O>\o c|C•7~^ %z'CW|_ᛕ ;0υza[?HȰ @ @ @$Zp_+VH2W^?vvv2=x`Vq~T;v,͞=.y-߿?(MF=wMPPPC|uգ~Sph„ {2i&^jժ?/C;mٲES&0VZJ|*;v3fE7%l8_@|۶mYf4i$\]t!  *`k7,y3{3,,AuKbR%pe/+;нU'8ED5XsL:}: UjUzWd^?3 +}m_Õ&Zt)ܹSnO>]V smׯ_Ok׮UGe3:؆J߰㛪3!v⎴YLۄ t!QV@ G{ ,-si9 @ @ @ P\+߯_hePJj߾=/_^VG߻w/;vLkԨ 2D}hXn]jٲ~UZj]iݺ5[[J^Zи{n9ڴi#W\G 7mڔ >6΍ԣG\i++ {I+WDZz5]tIw0& cU۵kGkצ2eЩS'''Au+@)I:ߐ.FPݒ˜T \OM?/:/pԵ998 PT,Y,0  @ @ @@q ZpW7o$Xs@+* G}D"RYkjբ^zIVoruuS#niaWv;O'/ЕxO2NP}ZpyX'@zU?H31 @ @ @:l-8Vܿ_S\-.-={&MRڠ# :yE9ւk?WTߵk-YD{eruн/^,8t_N 9j 9r s~̘1r}ĉ+oLP0cc w}7ױpÚ5khÆ r"[{aKApy#R| :-sIi9 @ @ @ P\+߯)ʎJMM[N}TJUXJ\q+O6M+uX$vrS Xm&q0S\rEETܹ3uM>r ׫W++}~7yTVN>-w!nHm@i@P7=ߟ+V$777MH@lIAu[8W@ @ @ X5YfDz`` ]rE/Al3g>|r= :ׯ)Au> 6ƍ)%%E=2ePiӦ4n8َʃ@ nޅ]| ]j'w͛Ҳ/j^-;1f @& n"A @ @ @& wP}'fFRσfׯ۷SbbDz'N vvvAuWWWgѢEgiqڕyj...4e|:|k׮:aNڵRSS}P]6qh;$$Dmׯz:t蠳7ؓkܸ1 <8~;&+;VݿrJںu O>^,es| ''''BP]2  PT7 mAuAu<1 @P.2N @ @ @V&PAuc8eC!ocƗ>YYYĿ7kHjHC^yIJJJ2@(~Uiٲe.vvvΉ ؊rq @ @ @խZH @vT7ZsP]舠y @- nW966.\@!wcfQxzz;: 3}!P(WbcHԻԬNBͣtͤdB^\VمG@ @ @J%!@D ne*UD n&FC `[e>}4qPKt\>Zc%33)!!8^Z5n_>[R塅WO1z}/;{kze#6cgtB4efߟB9o@*SGQnY @ @ @P| "Mdggӊ+(,,L:"n%FB `C[Ŏ#7doo/Au~%þhTnLJȐVbyZ 8Ս}:\U=C)))z!c(~)ŞFm:q:_xLGR1@m+h%)%f]O(ۃ>ڃʩmX @ @ @d ^2J_OsP=88D ؈ymF5jԐw`:ڊ=b:SSSɓԲeNS$T/f?IK4_ytmE=Z7VYt=m9tRkUSӺāQm}ѳ#j}ܲ~uٯ8l@ @ @ `[5B@@PݼkA+W&WWW9yb4 @6 u^]vQݺuL2jHΤ;:zzz:9ryzЃ <Ezmr)[|^;"hB']#5JI)2МsSF 2m:yJ_+,jW ۩OT玿ԥ%jܞt=m9tRD_~4MXnڊznLWV ޹(OO^ܯ޴Vehj߼VȐ8UtQ"N4~x/YC{Q( qE9A6$ka>|vrp/jjwo?O\M\Yf/q''G2\>8D~۬6W(M3VMO7 +Cj+2ɜo=ۙ6n}@R?}F?u[Y*y-\AAֿ.حyҭڇ̹0~GUwir1}%C6זS) @ @ P%ΟFQ ::t(Pl'TTÆ ;նk.ZdQSԩSG^w'''iԨQSh'*-#[N.O=j\ʦDJ!+}P4'JHN*Є{uswɆ]|n9yY}rsQ 2z/t\Nep;gdEt<VnP:5Kns5uS'/^ϩ_F+|[_@?r~P1aoʒ׵OȤ@YYrrnzUC$ = ͅ6@ @ @@I((^ǟr`QyPC=D˗ibccij0]vQ^~%kԸi|  QqS ,b Rr CsʓUREaE9wC18ijO6dP}ҤI(+Yg7o7oң>;.\۩w(Y":vV s㏫"~>U9,>ulRGnspUfXW9#G:cQDI[1WU_2WR?\s3^:_aP;+/_w]Ӧ o ꃺ^mvϵnʵ_T?~1Zg.w7])jRU(Kg?o:.Dh @ X_MΝh8x3eʳv@BԩS4s|ϥCO;!(zRR}gSx(,,^~e^|l2P;/*THڹ~_@ kM}֒iժUwoN*ᇹҠ 25jkGŋhDrJW񩧞R6|W|2wƠz nޥ+>%4$QQ=]IJMVύayTTojՠXeÜkYt;燓ʜGmdp]i7u2 @ kʖGlBN@ ر^|Odo;!(:W ռxzzȑ#+wf)UU111Hk?ի5Wc]\dx9-{sҝFѲZ8[PPWrss&CSй+a~xrttTr=u/t k\_6f ~mpz/^(_Wu%?AgCq{M?7!@ @ 0k,`X:q88(gϞs2mӦ u.A6(PAusȖCw|Mʕ ڝ>}_|Q?ϵb իGӚ5kƍ06mJ{!bN O0A6u]9xab^zIڵ|m۶f͚ѤId.]]97矧&Mht-ZD{i3T}|FFFzM|)v?>k{|ȁVYoоv97𒐐@cƌ;v$;fϞMQQQW_8ٿ Պ@FAu\.\sIuΎX͂ \  @:_ Ti j~^4烡F_ԣЇ? ؽ>Lz+hTPU4\וwŜU'Ag.Ǧ}(nXzG/0mp@2Nݠ׾X{f%3IuܠEЮgoVFSuǽąkg7mcꖸ t"*'msj<ެ8꺩 @ @ @(y^t2~+*44Ty^rC~ \+M>}:iVJJÇiΜ9:bI7nL ҩ4ͿU\1ET_~=]V[gRJ;797'Pڅ 25j7S7M t9 kԨ!oj| z-$''7߄PV-I?Ε̧NJVkqvv#FS(r8e|T'NcA{|/_>v?cX@P<9ܰ0$n%FC `#[FPKѶȜYA@_ Jco8P#4P_a-߸[ҺڟT6T$}u"enP:)9p̋7x9STs=IjR܆V#uc+uL&4s uܠzK4f/||8߰ZڦܺBYM~]ejAus=Wtԯ^7PWXևLN@ @ @@)(Πmdil޼9,وڽ;wN\ ?AW\g>૦??]lY]lY (2] ATez+^Pf 'nTDLe?ϯ&sN{Rzh>/ڌ_~IɕCs+'{lk͚5&0_,77 kݻ 6iut ۃoP]i5l]Ff *VրZA]W/^\4_!0c./<ӲaӍVvvAu}@~[n1ARti={rРAJo`zMff|2~L̚5˴e˖Z|tRLӗ7ZkXK uA#GVנV_A+qlP]7\tE7o,رCkYI i 111濑TT͓@@$T\}]lOPͤV52|GN Kct }~kƭfHD7iO1G捥ͭ""+DmuO>i}&䮮mI_Wyo{jlڹsZbm]FB3vB52VG5_oGܟVCzVUTy B *tjP];zlNz9++%[detmX?ݝ rgBFL׋!u+0m՗;,󶞳!F@@@@@(DTZe\ j;æMdfuF=`ۿ1Bvef=Rds, AkZvɕW^itgvbߠomڿ}YZou{իMX^C:C96~az}h8{Μ9 2d gg &nW 4`۷oTƿ ۄ feʔzH4YEu}@3Hk_+ڡzj7^N03 ?IAu }y4׸V+{EF9z+z)-0y6 x@zxd MMuA!kKWuC_#Vň`lUOntpjIITb֪nupi|*_kVU|ݖrrYCv^*V>;k,fnCCZbRۆ-nN{修uj"뮈u`p]s{s#iى~o#L=~kWS4ؠz(^h9p݊eJ8f]k?.]wvl@@@@@ @Az-bFwqqdGWiܷA\\ =kX\D?L8pVaСӧlyRV-3TYu]f4(5U^~(3f0ӾAP<;Bk׮JZ Z ܍wٲen5sNǞ`}C]_|QGE>}Wf*i۶9sڗ Vyf2װAuk, VPn / g&@ _eرeh률ꞿ@@ TM.\ha7f %7՗-[MiTbյR>dKg$Ua7w4=Z2]/Ӭ;~HB=1Z. yȰqdl8˥nL>cmt-[dXFP];]il؞^Q$Æ|f}Eܳ|u wri0P?-W* ΆiLK͛:+4     odVSת:W6la $?# \TQ7o5M4mWK]G+v|4JZ;aŊ/E;vVZqߠ58vx 3[k̆_U^u7clvi",Tܞ>mڴtT!]ʸ}vP] :\{rE9ݏ5J/^l=#f?􅃜z}h_Ç?~ofAu=^Ϩ ktQkҥK,Pŀ TtdUTח4CEWiY>4ݹE 5G󿱢:Gf-X.t6YǪH޷2eӊf~e{or< ά6~Y yߴUY}Ƽ%m>;(["VΪ$7wDJD9qaUN/U]Ӳd݋;:u\.j14fD]R+2쇮V$SlٞnUCz\%Y#ܯ*ؿ[Gmn%W(+uYUMH^q@@@@@Nu /XTVC !l2I25@}=1B֭[afhZ/YDFiuAZn*ƍK^L;ߠ]i;1cƘKd7ct#3> ^T߬ZO~X4T/_*U^޽L7kLnFg[#Au :<=/Igy衇LA&MHϞ=jgϞm2YP]s=g;OP=BB Hezh  'Y+# l͇[ VUכǮ77J照Bu#gr&]\C?t>-o;˵B_?Wv\n=cd۞}ߪޮ%cwn=~}dkAS? '/eqPν*úv?$#Ib2N[gN^@@@@@8u 2ayꩧ ^v}u5~oX+P]4MNN]o|9]e+6Yu>`6mr*7o\vj /oafzlg6m+V(C kbuf-s~C ۯȗV'3V K:/u} Z_&<]UP]ϡK{K6ahS^FPݖ7 9;nnB9?l`as*@['y)zn&]U ۿssTjz3Jo @@@@@@ J m sbŊip5mTn)[xz-oaÆj>x<f=jفCkf5C0Au-fu}>'LJJ2fӦM/ tkgTc ,Zܭ!nCΟ?lΓݻiӏ}A{^_=z0e`u V:h 7xkA4{2e̝;LTUv5^J*kaBy6 x@zd ߿TVכ zFFV[(Q Qg      ^(Ƞ?`/Bd@M:H֭xN,;hXe˖|Єۿ_vm&}YYfʕW^)ڵ3W_}ՄuoP=c,6l(}ͪ\v%ҁ>ggRCBBB յѣeѢE:ҥL:tצ^YP]jC۶mEzL۷o7C kU+>VA?_qVs&VK/;UM}NJUAU+|,YLkÇq-uw駟nf Uћ7onZa *wȵ25CAu >3>k3vVAumGn֪R 0)E+렡G}/md#xooVW#"iň}Au ?cׅ=K ]v'̂qnVْ%K-TOII1ץU5_rekH!a'@P=S2N崴4*  ^8#      %Au kl q?~<[ h޲eKСCvT=z/3t>}} NewenSN0c /*ڷzPt;]P]C={&MK6m<`ΌlF װ*UAz&=u}=h~ݶYP]O8Q~Gߦθ׵7yy /^XF#qqq#Ga)@P=ӢoM/u7@]'      N _^z-?2#""ZjVPj8z|Ǣ!Ç;45d2~wU*UJ.bԺÎ;pyǎUV3 ۷o7Ul $22RlQ(ǖX3 fEMU3vbb k} /`hذaZ^+Я_ /=nO _p7VA~!uY5j${kСCͶk֬)wurP/mXm] s1>/_n뵤Ad„ 2o,͓-[\r(ժU3UO5@ $**J+FP=4NF@/7!*V@@@@@@@ I`@<'@P=S>fXWdd$A(Y@"@P+gD@@@@@@ |Ϲ`O@#@P=:--MR&LdQG*ݒ5@@C=t9T@@@@@@Dzv@SC;SR$!!A%""B"NXCh]6A0w= @BI       ;/Z# A+j$}񒐘(#ydM@Auh@@@@@@0 F']AANcjժcUTJSQ=4NF@/TY@@@@@@/u>@oT      77k@ v>ƌ+VE8*F  ;`_n_n-J      o@ <yM'NȄ%>>^bbb&.}! @ ιF;     xUk1yJ@ Rk7ܶNII1AXzZZDXno$Ǻ  |>qGi8       Ux+F(H}pz1RJ۸ S;i8       Ux+F(H}pzԩT O;i8       Ux+F(H}pzҤIztt-Z O;i8       Ux+F(H}p:55UU&QQQRHn >SnH/      WWt@ ymɓ'qqqrqn >SnH/      WW?4裏Lf͚rYgf5?=kuڴi}viӦԮ];UX>o}"N*KEuq@ Auw+7q@@@@@@^ 5eJ=B$_ @IDATW\)}Y*UJV*ժUD|˲qL0AvޝE5W^]J(i`j] .Mv5{njҭ[l紑oV|MӬ|2tМVa9 ^IIIT?"c?@@ OsYbŊyZF@@@@@@  k>l۶Mʕ+'Cx{4iRPԯ__#ACVAu/.}u_~蟼 n͛'!!!Ab@ ,ymt\_,ӊǎFBϮXJP=EE@779BzA@@@@@OZ~+Ud*גz={YRF Dn vP]׮]ۯ˽{PڦW^ҰaCvyЊ#GPQ]uLqqq{޸q vP]f͒]vɅ^_AAk76OMM5߂%Ŋ#60! @ 9 i!      䧀ׂc|-?{Fe,Y"'NeY˰b3젺~!C2|wdf[3]^_[]~st>o=eIJJh 60! @ 9 i!      䧀ׂc| zm-\PƎk.͛K׮]]r FjSO=%6m2|ǤDl?O8!7o65^ti03B ߿_;f-Y0Z^#666JZA^sΝmٲe%!!A)n:U###:-[L2c2Bk7 Uɓ'ݏr8֭[H-=  Arj7rw#     ׂc|{M`rraT }2c ;}JÆ ]~`' /X없} vs9r58ar{y^?7/. xٻw :tߦMi߾)|`LkDھiӦe۶mיW]u O>]:Ӏn.pN#F@\ xF.yrlՓ͋KQ'# @@ݹF;GH/      )X8?_ zŊeȐ!\ry [5j; 6/ѣMp<{qҳgOgI^-2:nTTzRzuӧoPuҡCg[:l29rdKzVAϵ׳ɛ6Ar)ɱyjj a@P=G2  s4w^@@@@@@Skp~VPAu f2_r-\r5$Oˆ 6>IJJreT_fK&t!/X$66V~7EK/Ln/6!ǏKLL_2!D6mg}VzlժO_d̜9w}ЮuZk5kΝkQKѢE%KjS@ $} +'Ol~Ԡ:3b  (@P=P$o|#-oGZ      'Skp~VA]Ə/֡Gr9r Ts1m43g^M5w LLP]ס]vrWƍgqÇh&7AuƘ1cDC:%!!o[G%tסsҢE 3nР|`&/͸oP]U=vXYpۤnݺ~˙@"y1n WVͼ`@@K;A8Hs@@@@@@ ? kTT-[ֹ;&;w4֊nk׮mo޿l۶T[5jdO;СCMhbŊ2x`SنV +V_~,رjʌT}I@x$ِUP]CC qVq 5/ o)4nWT/VA,X -@PݝK!os      ^ [5j\JF~'ECŋ7}NFzŊ*kFŋ[h!;waKSP}+β qB~|Cy +WN>pY՗-[&>99Y~IٲeEϿn p2ymTQDFF Auu@ AuwNk8Hs@@@@@@ ? kC 'kXCޡL4tTי)))2|Γݻq~dT?.iiiRhQS^ЪU+رdTmʕeРAA?%nN>ogj&::7?@q퍄ҟCtú  kݡ̏i|ѯunV? ;vL]Zjt>a._e?VLIF}Z2xݒUf~U!?7ghS3ؾ[4ٍϕNGgA!yrgrϣh.nPKZ6oGvx<>9nͬCw֙nw^8`J 79/C;&|"Y7u(%k]nf hn      x-8ׂ9 zrS 2uO.lӦo^$(@wɒ%E+/}q%{ŜwߕYfUj׮-~~ϦwӦM%99^o;L]bE2dH~Gg9oq^^w0Ac… jU_by@j'|9?|֭_˾ EѫW/iܸY? =Z-ZdڶlR:u䬧##FkG>f9Au?&&@$ x󆛴wE F@PMaB@B)@Pݝ4 ]V 2=+rTכ3Z}AqӦMRjU5yE:{I>g7$/+o\*)TwP/ӿ"RqԭRI'ma\θr_f4۝rgSe۞JVw{bCli2zP/){_yY^xyuga#5 @@@@@%~0j(YxYE]ver.|߿yN8^nE3TSZE\:zR^=e˖`kE^39յϏ>H>s*UȀM? o۶M}YSKW?묳~&QϟoBຬsҢE 5CnҜ9sd"SwT.sO pgKݺuMQ3g4Aw]v%H.]tT~ @wG)T 111f D@ 7ƘVR/SDFFjTVU2zGo4h .Nz_(^vKD=׷ a !t~3Q1R.nxF`eX13?"{ߠESҦ!wG|`KUinj?F:;K̈́ : 3/?L_r?U49\M@@@@@\Zpk9Z4jSViom*~ *UA9K6mY?x\9c"H0Au kP^:S4ibC9vA`꺊_|E3 g2*y k'O]\9Dյի套^2dʙQvmNw 1 N>oAu-m&0! @ )uFڼyDO?jPݷznخ7d>,5x͚5m7'olURPtjHjX[D+չuJFˋ.Q#~ !`|nlݽϜڜ'/:ی׏~]%Ͼ5E{siy ϰBCVXC/|h챛Z鼌 h^u@@@@@.r+ѧL"7n[Ui보k f̘!~d!ZjًտSRRL~eYTѣ2l07l*^xAo. 6 :$j^BB 8Pge:̚5K}],11y=v{}z,C _|r5.*Zou[nPwo} wšt&YqPDDHْR 엵>:ڦmҰfi^Je9ѠZ;xfݝ{Hiť2V+/S9nH_~R M.AoX7,YT^KL,@'d9.Ͽ=Yv|f:0-]?p5R̺A4 *彯dtr23ڴʹ/Wڄ_`s\%d^A7+O~*vtjZAA>*{/~'3uk ]ZN2 nm-Z} _.j.?:&>ƯroKJj[/; |mi}> ]EZ;gdNsT{sjx_m;uĸZ;     @Zpk@pGk7Q6x”fqc  ALYr=iK.zUSkE;nWUA UFU׵uG3S?*Oe׵  9n#vjOwfڴ]ݠ|RlIoPHD)Vh5w{6sAjUjW./T6yTeσɎ}MgU+?:#Y΀ky;5[4=+2Xz3YE:|`,3UTܳ:x2ߝi]je{,s6IG=ytlT(Sœa:e[Q&qn 7,^:|*2Uk6]wMu+V N+pLJz/H~FbEi`Ϟ䇥e#ζJ7LS?yךyZݷRuc7GRFU{β&9ٍ,^<Ӥeȕ70/|of 붗Va5\mNp^kEGo$U+Bg@@@@@(<^ |\   'nKN5<>ª8owtn)7<Þt~.͹ֿ\V"eˑҫ۟Y-Aӫ ν< k&~|0 <{uPX~2G4̮CbEE|ÀV8yjXUۘ~?ppw6V`A?q5f\2+n0C5 F5˥ɦ6kGI6:ӌ     .;T*qZ[b  ^a[SSSJ*RDzB9jUۺMer=2++- c2YN$UwѠzG^sv\Ҩ3%ʡ ز@(l9nHQQ۝#w|]++*9z^*]<2npg[FYL ~]ъ:T(]B^;=ӁAGv:ɕtߐ]PqVFp2+nRWwę RT*^$}t#~zj`/;_fh۴\۲,na?_~lXyeör/ Ӫ0P}M+?ʚc1Nнe:rkM&hKu-溭;W޶^'T@@@@@ ׂcn?_+WG ^މ'7ߔ59?|s9Vνd)iU7LPV)b1gRDC]P}@+yvSHb촴hˮ=rۓcI wZ#/3Cfwrl~1 @! vF&RPVp{rUҰ^o54cIO+֚YŬϽwתKnvZ2tTY9*?._.] lmY?*7-# CeClӭ5onkWwR'TE[0/( k$3*Jjrvd)V4'r])]۾lT0ZjJBNٵ?VY/_K ״ Ϫi&C5FtM9xvU}BF@@@_~Y֮]=DF ,@SV~_=K+(Ɛ- =-<}p )Alԩ&'iiiBP=r֏riqϣ{_Ȭ˜5P=ݯ!̼A&NOsN'>#gZnly>K3ջe+gFY ز JVoy1>od% r ܌5Ͻ}< dT5`|7ﺾo!z};{ TN*_VFܑ9Y>oilhs3co w_Vί_=U}:W>~qN mu^Ͳς՛ˠ8sJJV1j:|kiz7e$zu&Z/#B'~HlK0   ߿,Y=̶=sLN7uf˙Cᅲ{'ۃ֭qٶa!^Zpk^v8v@`]m7qDZhP]_'7[neZ3k|M֕ʖW#Z ]+V<zǖ b\oy17 eҲQS g:u[v:ӊ` 6~zu*ԠriVH4ڹ.ϏoB}wŌ;&7>:Jtu^ TT{dρCr䯿D C+/5AgU:p,\^}\+W m,=1^>bڴiZOgSvݿeN'oَ9ҙ5Fu{I(,Y*+Ŋa@@@=zlذ!]ЇzB,@^ZRRR=.HZnm"e~kcG@ X}%vvEX9]|faodJ%.:Jv? ~[ z$# x@;'i^ ݲCmh +\LIgȖ]{/LA 嬊]MpnmyTMY-uQdņ-M~ٴs_Pm{örSM*2˝i7sz8yvcD+گڸM\ZB緙$eJnzmW2&ZN }۶.O:?T}oRZ&x_k}U;І     Ck1@@ ymI&I*U7-Z7SMjdweͦ٭,߁2 @! vFz&|n_(F|֯+ZDYUkSZmZ_onsTH䣹yg:0˴MLqT_W?6|J< icU/W*i~1el3oobf_&uԒ;˔1uy;:JA=pB:OCLJGp5Rm7     PsZa8@Ck76LMMjժITT)Rzv1QDp jYRY_-~N3/>NfP}ȷ|ljvb@Auwβ7ҼTJy/NJU冶I4Yg}NMlm7ԪYǗ7|C h'X!p{JZuБ2b?ŒA3FbI V2f m]Jr, 8U*_8:3`OR%>|{3SgȪMt"2Tl零'fBzrBʧi})AC/]m\20Y KÝ[IfOfL<<[N,;mӴ\qYR*.FXggcrCEg;ӌ     .~V@ 'Ol* |Fr%y_'~ρCerEfd3lgFs:ϜP-Cg@@ Tw}#Mu UAV KP]c&Aucu@Auwδ7Җ.]jRׯ 2_BP= w k^zx>ߘ3e9^̲y3sTk'4){2#k )O+֚d2\yQzHTiPQd3l;ݟ,+d$PoL~V@ymADP=/E5Nx9zԫh%›ӝOfP}O^l8r/YIƷmnw]@(9nHӪ5k֔H+fP+WuP]ψV9|/ǎNU>]9OdZ~/_~3iw>xɧbSAf/Z)MCpFR%iUng|Ywwt]Mdiurr]e#w{៊7@oqŏ2k ߲r%Mz&@ϧv&|j ٶgh x rӕgDqss wlOr@n4|7 ˟=2qֿQJ(g~nF_Zysg̪ _6KZܞw iߑ^{m]W\W1۝T6     Kk1A@ ymI&IjLP&ZۺuY<}rW)#7wT]lXSUdջ,yQ'  p Tw̹}#mR\9)Y_P="U+۷Ov)իWwOB/muQEjKb2R$y{Vy/-ѧ嵛OI;f*^*Nrs=hV?Y ;v<}ZauW% l?{8KZ>ezkpu C@@@@N~vg@ SSSjժ%Ŋ#Vp [ĂV1C;OUT2` U;gi(ߵk;UP;=ٴZM}ӦMRlYi}#     <~v[B@ %!1QMqA*g#}%|{{ ]]'&Yw/뭊:sP=c3@<"@Pݝ7Ҷm&2eʘ *ZՏ?.ݻwKLLTP@@@@@@ˏk :B@ xۧqDf}c:Al2iѸi1ew2ewbWH$vBQ;>,z$# x@;'9nٕ>lv4ؐ}TvUu}J @@@@@@Zp,ߙe@}p[^+'&%!5[:-(,-;HliRj\ya#)Zi3_奷?wڟ̠??:xS]zl3 @a F;     xUk1yJ@ Rk7ܶ3v$T׾ g#!rC 嚖5tF=piw2Fy9 # x@;'i8       Ux+F(H}pzVTOHظ8zMT~[He2<,,Z!?%ǏXT @?)R$B5+ʈn0G|ݢ&~Zڝo^VZ]+y=~F@0 Twr#GzA@@@@@*׼zs )n[7NV*#s!uZTT^bD+޸]vݟ·ia>Ug@N)nH/      WWk^9' @8 xZA=ehn  JVnH/      WWt@ yM봴4"U% GXU )L_  P(sZ#      ^Zpk^9n@ 5 QQQRX1n >SnH/      WWt@ ym1cJj$22۸ S;i8       Ux+F(H}p:--MR&LdQG*K_  Phsj#      ^Zpk^9n@ ǧHBBDGGKDDD7J[n5J7 &@PJnH/      WWt@ yMk?^%66tMPMaB@B)@Pݝʍ4w@@@@@ׂc<_q#>om=fXZXխTTw@@ Twr#GzA@@@@@*׼zs )n[kP=99Yz"E L  PsN#      ^Zpk^9n@ 7dĉ$HPM]B@B+@PݝSˍ4w@@@@@ׂc<_q#>om=֪dUT* L  PsN#      ^Zpk^9n@ ǧHʕdɒrªqH(mݺլDj(ݰ.  Auw(#      ^Zpk^9n@ ǎ'IIIKEuq@ Auw+7q@@@@@@^ +Vo֤I˲mB@N5}p?^E#Ω0! @ )-i      ׂc|~V,Γݻgׄe r^ 3v$[⨨6.! @ yݺu;       '*V.Ƞ嫯ֻN:rfۆ j~N8!&Nxz)Y@$@PݝMPGzA@@@@@*@PݫgF@ T:%%ciiiaO֥k#R@@< T#!    ?{EaKH ]X "l"ޱ\x*TR T; (RNhs&̰i&e߹3gf~g0A@r TeEr4;" ] $k $#@IDAT"@PWFD@@@@@@s{Xp& #@Pݵ:Ԩ.~~~TTw@@(s      xAu@76Ωii aaOP5NF@_ 5"      Y=k<8@ 8IM$ ?a7 Aug@@@@@@O I AuF:-=]TEHuʯ HXc\y{ϲm>MdxٯYkJپ}(&&ƴ@@*A'!@@@@@@@N  TAuט322~l^F[Go'}>Lڮg\}^ku-+M  P|?lq      չ@|ꮙՍ_n)|:F?n~n*iȰ_gXLk;٭sf 3JA@Iejs,@@@@@@չ@|ꮙzRRD9%ճ'>)jckW7M_R/Զqػ*gr T4D@JI%As@@@@@@[  Pi]*I*Տs-+6n ulo[i-GZGW3ڨfa2v=sY_l, ʢE[@ T2@@@@@@@[# P9]s9r[A^MArUݜ%kw_/AƪA.l|z\{a[u.sVv  PY|?,i      AuSO@*Ok֙ҰaC RPZ 0D.77O|,\jJ?J9ECk3 TO*K       )@Pݔ@ ^~ow/=[n#eVa\]k33Q  TO*Sc!       } @ Tw|ȑ aaa 嫩.嵴횾u_wik۲k<9h<|jSF5t֔>Ct#Z  @ r9      T@@*_]GuP=>>^"## G=[XdˁC'ARfݙ`(@*S']cرC֭['W?YܧZj,u@e9';},Z8 y=8'Vo!/Y#Y+Ƌ-:wM<$~3[șRef@@@@@@r^ @-@Pݵ 33S4h FGN];{sފ  P9|?eʕF7Ά͗ Hvv۷vi9 '77O^䪷u t3v{'sL_ҘR~eB\ZNWlߑa!R3:RԐ[&ё)aѿ\+ ح+{Zި_ɞ.#$(l_*6ܸ]6jֽS{ig-Ox9rqbd7۝; '듭C@@@@d<: *@P#7cƌD#CP G ɦ}Kx^A `nB]6\. GTwm.IIInk G LX1HfokwN㯖.ۭclUYM&M41^zfEuT?|,_\?vSEWUziɺ-2g:k9-I#spP\s~TT&Tq;ⵛe=u3 b{{?uYj%Kȵq&LPIoX{Up     Z: /@P5#GJllDGGκT/fegԊja%m>y䘪鯪پzurza# Hl޿njMOyŒdنBw9̧EzQ*Un̙ҲeK B~~~:1 ;vL-Z$:t(W_ӄ W[ˎ3EՏKoE7͛&חI%"4qw=埥kd{~9z,GjU*$iR֑!qS_M7M̾dзȬ%ߡ]qE_ulܾG6l-yju5%nMp{ցlYqG8NM; cHQri3f:|&jVHXH[v5ذMk[ J8cyrDZgvY $?NkmC+i8X}E[Q]N`FYm$TF$Jcwj vNٵqmukT3FTux9$Sj+ӉzC{x(AB9Fm>>֖u_&8E!s*X     ={|8;@SSk+'&&Jdd$B|V7s޼S6J:䢧Q@Sn@.mߢP#&ΔgY;m&Zf@w lٿܮjMo٭sׂ~~h&7^r9 l[?W/ՋRugϖ-ZH``T!uW:+9ŋKUՅՠ>#k{iBEMii$'/K}I {;;9T}ɕTuq]IޜԔe.:1ɚ-'C bj Ӭ%k䍌oh8Yf1)sw,kf-43j%GgSz+@紲6.Nm-5Lϫ䜖 d3-icծIrzϕ*>qBEPhzXٺgomr݅Ws m+iA۞{خj@]}_ڼ7Ng--~d{MD= bNGϾ$]jx+J􆲌]G,     xAuN @ 1BtZ(\dvwB/:`N}@tDsZ6m(;'#Z+A@I{fcQ=jaهFʎS!m'I2oz9`N7]|cՠϿ6V]KnLKeܓUuEZ2V     xAuN@ ^ՙѣGK\\DDDT/Rzs]CFUmG-f,X)L-*cN?[Ռ6K$^"@(PAU@!۝aغCح+낫AsW/| R͛'͚5K.֭]{袲Ozߪq'sL_ڮonYWC@u0++T躞dTI2~8Xt8]՚>!:4 1hˍ_~Y`5*t4}|1vC:^Ҥm+r׭\qN+k!?M͵'ԓwuH}WYyՙ; |VKǎȋ_|+6l嵻VechVӚ-;G7[5L֒?Tw~ٜԔl=x^ҡu= ~qM1-ִPoav=F q(b@@@@@* ^@G6F2ꑑ~*3yR1׶qZuGY,3Z}e%gˇT@fꓕ uD~G~U9q,RU  \ѡQO"%ΪNhvKU֪Ǯ}%,$DS ҼvһvԪާrzгAuxϕ,0vj:\ IbTݵ\S}]V対+۴KƋZ-^WΦ2SNn{Ϛ;Cr ,ѡuES} -kӇԜJוa<~ #>]oR?>z,ȫ뇧v"+[j̻XAP *hBPݕv#zX{c]|ƼcWj4RYΜN?M\LY7$-^Eo%l!UziJ۰^~[a\]ߩo{spM^-m.t1_Y"swUUU[sUu5{=UUPmUd|޼^a k6ZK7tÏUpmiSy?YnqjAA2ijPqIm7M$0 AB$@@@\?5k [KQ'O۷~[MQmY-b OJK.D۰|G5W 9] zDDA(Wl&ڢ9銆:<*;;+{Ayjhcq壟7T So].ztз[j%F@J~p|n=g}"1 ԧDY=L/è\3*Rz^-Xa 7}ۦ'ԭ=KmW֠KaPszUrNˆ9ɷˋ|G:u!ٜn|2sjysOjyirq39['L6?}ەr鍬es.æ329- 9rmSsW> /cx]Γ.jo-P6A[_LՃeC aҦ]O𱂇ԯ#}NjP]w)2v\OǙȰP}sC=L3'gl'   @[-ZTL"%a#x3䡇*Bz)ϞJw siXnBm$Mr5K= 8g:Ɣjvs Ỏ)'   9{B$Hы NmիWː!CJȎ;JΝKlF3\) Twm,233%%%EBCCUŸziN#,"4Dt[hX(R\PЙc]YQ:kg?c>t&kw_o"m4np2^_ŏE(onڷ0 QT߾gNQXWpyg?0Øغi=&Tw͌d%KP`SB/a̐1{ȱjcٶgLSNԈ0,O~Y@@@@@2UFρ@|Xk?bzddʃTw?gʍ%MuW}T?]<8 ^+dcOj63玕JnA#]D"Y=sa_zutPo1?)6oP2?*8wP6V!^J؅zre75 7*X=7Zs{Q龺]V^yѭ_7<߽^lU.*kTݩ=aGIbщG3]eb}~:}䨱WzЗTDPJNgڝ~6{{Ƕwi VX?|$իe-هE **vmTw<ײڏ ,]{tpg>nuo}i'2UuXݜ?qgAcsMգf[CWYl+;mځ@@@@@ I"b]QFIllDDDPQ,:87y2ٰ}wV WU560[YfuvMysfu*;ZFvo_Wʟ ^6I2B"v ֍ {y~/9춅K\v̅ɷN}NlݳW[E_ۮmԱG_OTYݭ¡;7]ݿȃ9P܌zxeRvY}[sT37 C)?LBWZվ6TZW]{emF5i5U)F[~t j뇎$Wn]TP]wz5>m(myG36{UEpّ_U]ۡE# ЕV7S![jVj˓ujX\ h5'? LO;?4e{IVJl:phm#b; sw\ޤ yy*(FS|#:.<9V޼q:[Fxˈ^*/ua 0'~mlM-_o7_5k,˻ɌEAu]gXavg?@@@@@<^' p TwmPuE0 +kKXa:K۷ӓ;귾U])77O;9z;Y'79~X6W .۠^ulzhcM;duf     xAuN@ >\RRRzh] gYNrNCjܖ'+7nc@;*:>׿9}JO}2ZojFzQ}^{+nTwu:o~uy{sJf͌q%tP}ҥҦM 젺FYz2{б#zh[[<r$jel9mogҕmk_~'Wm=1RnjP]w?zC^qlW⯩7Qٮ.vAuݡ+9Ik\*Vo{Յv?t`QZMdT?x-GY~n4ՌnBjXmD@@@@l=> )@Pݵq̔d @Uz X/3Zx͋l+#m72B ^lޕe[WXپE3+uUⵛ9Kdۉ3M{.a. eT?+w -͒by&cN^v,c&ɄY O]0}yK٣ғmPReϗFIΠqUyŊ^T8{|J:hX(?rLW0Uy+ MUoApl`F1q,QoZ:|[s$ϓ/Nn^WU-¨ޱui,طgqO?]&Y };k*Oy2r, qk'Onw,s?*(M:)|hOss?u_{Rw͒ϕ"t{szV@cs*<%=k֨Je^ɪ}@]֮j}^ ^h Aك_N}m+iW>ǾJjwHl^C5t Rg^cjʕ!o4yuނO}/RcoWoquvyy򍪬ox~g;a}MG 1gJk     -@PݳLJC856#G 3 NT/q2}J[uTgn؟}XzP|Y=U`{3}?>^ټn|]sشc /D@Zx^uPDO5G?ūu/qB?L )PAuHLғ{ 5*wK Mx/'nrߵ X6VˀUM/_.5jԐjժZU]?fEKVV4iҤ{O}ݩB*T15 ܹU߇Gpӧ'o2箫;絶;Q15Ixhpy+~/IW#ߑu@5BgBQ8vq}bo{=~*^鰽!Rft=ӓ.:"K,2ƺAY     na@$@PL\1GEEYꅈN{y=cVHbPio%Mla;ic}Ֆ'o*6UfZZզnj7H]hNxkϲjvcYWdL{NVa~˖BT 7u }'3O|]?@F"w x=}t~7IӤGtYִvkx](6ց1CPh޽{EMllUUf~v:'3oٲEbbbz՘K~{,+oWW#2B?[՛@@@@@@ ^@{e]%""T/APWW7] U\:lMuEJV"O`y5\SE̮YBZ(Z9ujLXV*>}tszzeܸMo?Y!Ib}y x@Gd~q՚Jt1l׿<~|T2o 9hӥuE&+8?EmJ:FݩW=w eW}g"^G8`TV_p4=5Kegg:{A/ 2x/      @qՋa= '@P5L#itDPϵ*n8ټ+"5\lb--CN`cμԧkl,?ekE~궯} 0ki?ʲ [lo)Ov4K&exCeLS060ݺ.0_Tc:%]~N]wQթѕtN#,^Twu9LPYi+ܹ3p6nYU]ԩC%u?uP>r uIOm,      )@P"u@#FHBB蠺TwBNqhd9ZhР iRVuKmg?c{Gئgteq-g/Y$?@t0;֧%Zmϑa̐,X_Q;UkuvҁoTeY*Wu<`!7L(Qj>@X`ߑpϫ@ռdPǏ5K}UQ}AZ67ϖ!?M WڍpXfMyOW:* A2`/ߛ/CzCBrVҦq_     *@P[GFfꮍHPuvKցl  uT8=̕;;lnnRؘ$Q#tΆ̏{׮%aŝ @PG=%P?̷8{PWw8Ah@@@@@@!@P @̀uG%&A8Au @@@@@@@@.@Pt @K%*A^^9RAb؀  έ      -@P9 "] tPݬHP5NF@_ 5"      Y=k<8@ 8gffJÆ %((Hf  #}dL@@@@@@0      @LL]2׋ xWCHRRDDDPQݫFE@*0/׆ttF@@@@@U:_y@E cPzxxQQ[D@0/ѣu      >-# .& &=}8?@zq@@@@@@Ws  -CRS%))IBCŏ  U)@P=H/      TՑ@@[%AUT\ϭ-' @LL\l\)A @K@@@@@@`s  R?6Vߓ+{.' Au׆k~     Au_~@tԴ4T܊6\. x@zFԯ__U&*CP놐F@ qw,X`TRQuP ;{:UՏ?.YYYFeV "ڝA[un]Z|ͩiJ:yC%`*DUl}v{v k.N_Fˆ{15pĠtTwv!     PHz!V  %& AEuN@YiWZ3r9{O !s|#BUBSցCr{P!Jz厬V֍^WZ  q3$ϝ;WZl)bWܲO:nՏ;&-6mڔ*?MHܖ eǙT5IzQJ2gzٱ=#5EHrҪaˆKZN7]Zh5y2%Z:|ֲ9Jn,(Svߜl׫9rygXsUv7Ȓ<515%)׭Qd{/GdXq)KP}Ͳnn9pԭes|s0~(qڞ߸ש{c5z,'q܏e@@@@@S{p^  @TIT###M 8#@P۸;pBiѢ됺+AuV͕^x~үZT䥯C*j;JO*gyQӰ_gʸH P;NjF˳j7<{:ygk{ϒ:?n9olбd!?O /27˻K Iu?k$֭)OvԩeZ[Ye.Vu#>)*\P>*,Tz>-lݽO/[v-I#TFC5ד~k_\X׿X筯 .rosT{DuLCgg:ZOn-'65jI桍Տϑ/N ;Վ_"M)L     7 T\@@tfa+TTE@ T/^/YD7onWMՠYU  P@FFTPuOeKޯҶ4j N IRT/] uF{ g+B׳O]ϳϹŶ,EjUkȒ[I1*Aֺft{mFg!s]GX>pw:l;DU3ס#ǎK7RTy?/1}0fXCWn\_<,s5=xveeRT5JلmۘG *(yWş(Aϕ7Uo+/h>~-8'Mnbl|dLagʂdGr9=l+]=R1OJ 8}Io|V ĘF=p6tV0k:5 ۈz넾ק_amk$Y      =}8?@u $ \? 8'@P9Z;tRi֬YTT7.*>z(~yRo s3e{y]yfg¿+7XiP2k]-ir1EHk/]a#ƺnJZ5?,~lU9l=qZ僇n.tȒu[UUݒ}:rTsL^j[RP=,8XRcv,asEP@ }B}i !qs/#mPU卡?C.7_r\a[kٜ?E՛??Y􌿟41"%V5 Qڰ   Pq u{_]m85V\).b:u$]v- e<\; x@ffHhh Auo5@T{ ѱW:0ݎ] *kOQ}I+=Jjb2gzc] ?rHP Qz}޻gKC}?}<9hTs=]~f ?N VJ_ISIA%|K9c4KSS>pS]YiXd=KOJ 1_uo׎  0bzddTA@@jǟ{{zю$۲ITXDHlhy\([}v;0mĠ1FetO4-P2ZFl"%p:p(I:@T ("2dBtі9K4in3>~.7ݜ?Kmsj5UQvsk"~'ƪ5+ip#o #-/#ok|ݯ_/֠z1<#)roרA+n?ő?'Z.>wzzƹ[-vaWS|T/g$E"~Ïg~_8/v~tɕo{ q o#{p-wcKwk T @ @WA2E(VTohhT@ @+ ] wWgPEK#?~6HjHmw=04w^cvuY1.$څzW'|mTEǿ/?%;Sr]_ϥa7BիV&b@y=ҝ'cV-GAT/3kSH9=]Bӿ7oؐ/݆ŷة #O,sױz iA4v]kz:j0lH}9T/c^gP=}q<0'Je!ؿpgLõq/?:9vwi@= ZoLMCM/;,$=- W~@q̋^ߛ׸sc[=}x޸ڶ!oʻ 7Dӈa{ T?翎{ڹm* 9fxMOu v @ @ O @3gFCCCl @t- ޵Ow:>{,L˳ےOV3gNL0Sv;Nק!%V :v\͞_bUS;\i{5v8\qӜeȟIg"m"О^=2\Awg5n{~>csBg__|Yo{_٩NYf TOr?nY17:9nj?zM|3 [΃#o|eo} @ @kA~<G3fdAAe9= @-o TOQ T_n]̛7hWWgly2ccE횁cg$~ܮws~S}Ҁ{6Ʃ/?,vZO>bӪ?}VTUV<'= NSo ?[.wڗ>1^߫aD㒫nPv˨a;>xj_6~&8|X|}o_κ1[p&<868wm.CxS{p}_n3ngA IX眔uQHokרɣŇΛ{x1ǫ^8IF'xCǼ0ÆE3O̪N_D?o<7-]ѡ:oܨ8Ǡ-^  @ @ PELI@ZQ1견z ? NtO@P{N[jUÆ wz`Nr՗/_/qmiJ'WEIXd5*_U=RϽv&Ҁzi5 ;7qS @ @ @}$ Gޖ M3fDCCCA4#M8 @T/:UVСC_4`l= ʕ+cɒ%Q[[Ç/̤B @ @ P0AQ MҠرc#MP}0ؑ ",WY}@R*WUF%W @ @ @@?  Pig֬Y1f̘Hs8*Sآ`[ջ @ @ @z/  @;@[[[̜93zZlRExM(za  @ @ @@ ʛ7 P,iP=WQBPX8  @T/zaB @ @(UAR]y&@E%v} AbY5$@T@P0q  @ @ @TKu͛(袋)mŰjHza@P0z!@ @ @zy @"0shhh(++ ֟/֟VX @T<q  @ @ @TKu͛(4njِՋa匑SA Q/ @ @ @RT/Օ7o @XZZZbܸqQ[[ YPXV8  @>T/ zaB @ @(UAR]y&@E 777GMMMzq @}& ^zA8 @ @ PꥺM@[[[\|6AbX5c$@\@P0K ^G @ @ @JU@PTW޼  @b>}z455Emmm^, g @@ ^P0z!@ @ @zy @"0s5jT 2$6l ^, g @@ ^P0z!@ @ @zy @"VTollzՋeь[A Q/ @ @ @RT/Օ7o @Xf̘͑VUП/֟VX @T<q  @ @ @TrRy @@KKK455ŠATTe| @@T/:Q/ @ @ @RT/Օ7o @]tQ=:Ջaь{A¬zaB @ @(UAR]y&@E`֬YYP>ڢ,IoOOa, @@*IaA8 @ @ PꥺM^͑Ջeጓ;A Q/ @ @ @RT/Օ7o @XrՋeь[A ӛ^ @ @ @JM`v+)/ @OMMMQSS PQV`  @>{׋  @ @ @JU+Օ7o @XZZZbرQ]]ŲpI@.`_|xg @ @ @ @3*޿ @ V @ @ @ @f͊QFE]]y?g- @ @ @ @)VTohhTcT @@TbL @ @ @ @'ӧرclC 0 @ s@ @ @ @ @ZZZ9BPk.W  @ @ @ @ @lI`ʔ)1z̘2A-NPQ3@ @ @ @ @&AѣcРA&5 @= @ @ @ @ؒ@ZQ}LCCņ շ: @@Eu @ @ @ @8iR4<TO[%i ]߲} m_oFlY-iA @ @ @ @@i LN+u*` @@wջ+ @ @ @ @*0ihnn@ER}̛趀z4$@ @ @ @ @6lSMQFEMMMTVVz >LL@Pg^Z @ @ @ @ PZmmm1ehjl$^VV&^Z @[# 5j!@ @ @ @ @Ҡѣ:***Ki͕:Ass @ @ @ @#0qҤ;vlTVV β) A蹗 @ @ @ @]-NQUU%/ @T/^ @ @ @ @qLG(++ ֟+֟VX @T @ @ @ @6/FҧLnj\!@d @ @ @ @t-0qҤhnnڤzRR]E\%@ @ @ @ @ @Ҡzccc$ArA-NPQ3@ @ @ @ @ Ŵ /T<+ @g՟G @ @ @ @M LJ*7$kkkLEM!9Gh/ ^?1X|ylذ!ۓQz1E7M a]>o]M5uzY>\8oM @ @ @!0e9rd9 I$m&`ۍ @P}{4>dȐl72> O+We˖eA=ܳ;o6m񥉿ֶ|X?xǸ{W_{vǦʛfnK[x_?.Ɲ/.XfmT qN<Ƹb}kk6 cGێ{q3׸ @ @ @ @@&M YGEq.Z(ҠQ*$l= %lMk֬ FTu]׬[o[5g o՛w&~sh&gsxraqkS/78k_rpw~{ba_:uqu>H3Xs<9wgyv5 @ @ @ @`L2%,OZOEmK @`Ty7ǠAbСQYYUSO깰zwGӟubɒ%bŊ8Cvi'i\P=oثaDFMT$g7T?y{.gVfGka @ @ @ @"8iR4&CE"_L'@q\s51~ɂ+\E4z#i7۴}.ۚo/?=F;++5GME`N2x9=θ߱>tnuUqQA{5Ħiuɟy{ >#}.o;BP| @ @ @ @K ͶL5jTֆk}saob ܚ- ]6x _5]m{|-iM׮[s\w޷1,wػid\?'-Yk֮ab\?`6;_ҧVeMs36{۪5k_OT?zM |:I{e{46,?a\ qǼy6GŘ;oj& y Gk^Ȣ%M|:6TO0'bcOC-B]i.јuOMsKWDc=QY1}l7_8Yˇ8H'n;ƖcW[s@|<쩨ÇN3Uխ @ @ @ @:ujTK*Y?oO"`i5H|>M7oTTTdA"~,nMw_>8C;A}O/B(;5q`:6e6Vc7wX}pmMA4l{0Ono?aBl.ޘ;w o9wTP= ˓vw왯Bϧ?D?$rةapsP'_O_x_?_|Y<Ηb@yyCc5' @ @ @ @ &NSQA莀zw[n%&LСzo*A\UٳgAmbi؛z; EI5MmՕw'۬+o_s ~{Uz[ՇƲ+wI摻&!/!T?x_4hNշu1lH1Wǥ\#xTӓ=yzTjMgD8>qqч @ @ @ @L6-^[[YI= @ջ髫{TO{I+Oh?wO*d?KN|Aaw~ i!q=aNĴϿ3?k&fƑqPXyo,_:w)>c㨃 @ @ @ @&OƆ}ǂ еz>}u[o}gTT3gNx}5ooIyCtwv3a8 oHw߿0w3\ƻNIУ=VAkz}R$opd%/Z">*Iyޓo+Asvb|dL09 W˓./[' i:HGϛi8;j->co2/Zt7ޫ)pIxwK8COӵq?nWwIP= &:d|sOz:>ؒeqޜRo^<א'_(>Ӌu6۽! @ @ @ @'M {* @[TP]T۠8`MV I(;ݞ^.%۲yHy~m~~/<8wG*~ :X:kH]mL;ӝsgYҤsP}W֤XtE6zZY=/{*INW{A-?ϊy >tpge+^}{l|t-5I+Y>;qчe=yzT?㣧a\N*OiW SI= [p}Z!~ߕdJ3/;ϵJ @ @ @JY`)ѐTTVAR~̝螀zw+A %Ӱmm) sUKlsW*V?Ꝟ{{'N;noz ߹+WL? Nղ_n5\P}[t_+3>Ƒ1ۿo7D_[|f7UQ=?dgq >O^+UI囵~/vqG:$A>= ģ/[:WMةƑφٟ:A~[zӆ?0|=v @ @;XeSm[V L~[`޼yI/O<6. @ @ L:5FQz]&"@zZg"Ѣ7AW_BV6;>/;>kn ~u[o>, vjq_</˿?7-M6TO3޶aC6}hmX[%˲s}eP}ͺ__|unw>~Liszb`¸vmTד˓/}P-_Y{_Ha#@ @[83;W_.H@ _~]O]q @U`YE,|9lC 0 @ >e1>r睞<\[u5U1jg9ms(Ф}("Ҋ{0a{W9ɟ}{V lP->rތz3k*:_<}P_rEGtluƪ]נXfm~zXO[#m|ڗA{5C @6'<|p?oMZQ _BT&\o#@`bĉ]N򨣎WU]q @U 755E]RQ}}kz]("@zY#Tߨ=Wzw|oS^8tqw!-M6T{" |[ cGwݛ 72x~q wGUWÈ8奇hH~zqypa֦}PG%>,N?vkPߝ<$.C>{KSq @ @ @$0qҤhjlSQC @@gA"XP}:lϠÏ?iO~B8s#ǚ"MiErzZ Amiz㳾vA,_9xbB/>f]_<g|籾5k>Vc??g?[z{ry|ƚxiǼ(ALS\sl}h1,,_:Nb| @ @ @ @R2eJ3&jjj"-rD? EA-IA3%ո,n_d?F9*߾';TO糭L6TOs﯎K%ocv96~KNxI%^ߜ~ӓE1G_򼽲5R_O,]]|yj 5~ݝ7/}~Nw_{#{-Z"Dzs" @ @ @(09  ' A-4{ǀq} 3&l6$5T̝;7|->쓅˓YX}koq?iP}Μ9qAmMWTO'x}Ǘ&Cp|\=;_q m {~"l~3+sP{sA4ͩgߗvfJKZ]TOOzCɿ۝;eȠ8G_At'.7} ?M0"򎓓{.;G @ @ @JV`ILP=ET/G  @ wWjb=,^Jy&~Mwŏ~uEg:^;;[N$g~=UN|g}is b ;\|aqګ^#wp|cbB{]>m]._蛎/\Ox~j=6>{kӝW;o_og*ǹ&eȺ_|wo+~|Ƶ~{ħN?sk}^MO_O1OUKZ?w8#|]O>|=τsGŻN::Ԟ;vC_NH=/֮[_qsOw8ı/?*+t @ @ @VT=:UT@ @# C;˒J=n˗/%KC=.[:-YTjcGV/L-]kv0-K*}%*;q톴RKVk"9lo4 @ @ @ П&MQU1zZc!@z\Xtik3jԨ|U\H=tj .v-vi-: @ @ @ @@:mZ婩<  @շԇP+uuu1`l4= &ՓW\UR4hP  @ @ @ @@[[[L:5: AZB%@B@P/ԻieEeAswuWs0^  @ @ @ @@`̙1f̘H+WTTNS @DKtM @ @ @ @n VӐ(iA^~'@ @ @ @ @` mmmqEESSSTUU oe @@& A @ @ @ @ @@3gΌ(ېl]߲} m_oFlY-iA @ @ @ @@ 4>f̘ Ky0s @݄Ҍ @ @ @ @hiiqEmmmf ^ @Tﮔv @ @ @ @@Tonn(//AR}̛趀z4$@ @ @ @ @/ƨT/g  @T 4 @ @ @ @ PRӧO2KjM*Abs @ @ @ @%$0s5jT 2$6l ^Bko @V o% @ @ @ @(zccc׫^2n @@{f @ @ @ @J@`ƌUUUl˒Ӽj  |9 @ @ @ @ @@--- RQk*W  @=  @ @ @ @ؼ@Z;.ѣGG]]\!@<+ = @ @ @ @lJ`֬YYP>ڢ,IoTþ:'Wޗ؜'q @ @ @ @.hnn4^VV& @lI@P}KB @ @ @ @ Puuu0? =A9iE @ @ @ @@ L>=& z> fNtW@PR @ @ @ @ P---1vبrAR}̛辀zjs쪍k @ @ @6'nm @@`ƌYEhmmTkb @@?-Tαw @ @ @TR]y&@E`֬Y1jԨSQX8  @ޭÚ5kzׁ  @ @ @JZo @.VTohhT e| @@T/ZQ/ @ @ @RT/Օ7o @XOcǎ͂ׯ ֟/֟VX @T<q  @ @ @TKu͛(hnnꨨT/3N @ c/^G @ @ @JU@PTW޼  @b9sf444DMMM ' wꅱT/^ @ @ @* ^+o @@̘1# 4(Ջeጓ;A Q/ @ @ @RT/Օ7o @XҊꍍQWW6lT/3N @ c/^G @ @ @JU@PTW޼  @bhiiɂِ˒4xAB>9T/^ @ @ @* ^+o @@̘1#" ^,f @@ _P0z!@ @ @zy @"ǎm*' gꅡT/^ @ @ @* <͛ П f͊1cDMMMTVVz^1c#@zaAP0z!@ @ @zy @ 3gΌ,^VV&^ g @@ _P0z!@ @ @zy @"s+**Ջeጓ;A Q/ @ @ @RT/Օ7o @XZZZbwT/U3N @O /^G @ @ @JU@PTW޼  @bhkk.("&^ f @@ f   @ @ @@ ʛ7 P,3gΌ(ېli`i5H|>)s ^G @ @ @JU@PTW޼  @bH#iP}̘1Q__ YPV  @>T/ zaB @ @(UAR]y&@E%ƍِՋe匓3A Q/ @ @ @RT/Օ7o @XҠzsssDyyy' gꅡT/^ @ @ @* ^+o @@1_~nT/U3F @ q  @ @ @TKu͛(I&ECT2Ջeጓ;A Q/ @ @ @RT/Օ7o @XL#GdžzنdOOa, @@*IaA8 @ @ PꥺMɓ!TT/E3N @o 㿭Oߞxbيs$X;q qٵīV]Yq|)5gC͖?x뎎;{$y=!_m3gu5UO'@ @ @\@P  @^`551\P}_q$@z- k¬BgϞ&LPM7WU]{~<>_;yP]|:޴۰gN @ @ @E) ^f @@ L4):KhMjApz:H+f{'GSb]URO+^pMuHee8;~s<`ݢyİ{cVimb?c=s7w:F=sǞk @ @(^A];#'@JC`)ѐTTVKc͒荀zoA9s>M*~vgkn˯ꪫM'4L~{K̟_UٹO73VYiP#EZq]ߙڡ 9'$y_n1zx|'gmSA>WEe-C @ @ @Ջ{N#G(WQ}_p3$@z/ {ôA8+o4նAq]u]ݓgn\ugNXxi|af7&>Wӝm/.cg΃b΃AQvoX1`__6y/?\W?C @ @z񮝑 @!0i䬢zTO+%NlgA  @- |En5TS-^2W:/,zr %ò6ҘУ~ueeL9ѱꖻ'{/~|O~ֻssNG$9~ q}r;7m @ @8c}?~k_ر$>8l"RT/7w @ҠzSSS%׷ â# зT/zY쩸E1{¸iXlEf/;hxI/νkke#vom7wp5F/􍯊;.IO߹ì &9W>u976.(eAR^}s'@A`I1BP  @T/zaKk[[Lo7ޜ{Oe#=s>x3;対u/#+ۙܜ;O8d|SA3^8'ӹr_sT}r @ @\ ,=\7+GSv9#8"^WtE, ^ʫo @@1L2%F}!?we? \? @'y{x %˳&:}A75kߞkׯ_wEyߝaxg6suEIGoy ǹuy\?a|]GsPN>:>.~rw{?C @ @z񮝑 @!09  آziY @T^[alnW9)7xNo+V=Hې'ޖ+o?#㕇M;כ6:4O5\2>Yv#o用̟{bS??8V>&;W9`@gfmYWw OQ%+V'XrUv. O9QUYoc @ @(^A];#'@JC >!".^n @@/{VAv[{{Auq/36_n=d>ow^Mӎˎo篥AO$ؾ!n@+bCtۻqd|f?x~Nj=>,h%W܇?icvg,Ercނg԰<5v @ @ @T/3z @`8iR4<TOg+㯹 @T%3o{O΅{:Okkk3wg}z6oVHwŲ;WZ|םEZI};\KTg&iO_]ꫫb}ku8G8>;zt׫. @T/fgiH,}}Mu/=$n#@ @ @v$\iG @v 6ibԨQQSSezw5 @` A? TiUCr|Xxq70ƽ,^T<ؓtʨ$ >b]+,>4**Vz:7"viPVέYܿ#g1:vR9T/^ @ @ @* ^+o @@1)S1c.z11 @}* ^~A8 @ @ PꥺMI9jIIuՋeጓ;A Q/ @ @ @RT/Օ7o @XҠzccc?{Eq!!&l EHXP,.Yvw;=QQ! SQ9wwvdN.{NygړbׂQQQe' 4Auk [H/      @ Tԙ@@ n=Z\.ma# 4Auk5     DAHy@E`VQݥUTFEp8Ɖ  '@P{8       #uo@ܼ>0i@^5s@PGzA@@@@@"Uz< "ZEu-6-^J'JX@@@ Ě瀠5     DAHy@E#$33Se' 4Auk [H/      @ Tԙ@@ \ƌ#iii6e' 4Auk [H/      @ Tԙ@@ \ v]5jDP=\&q" @ Tƞ5     DAHy@E ??_%..N1N@h8TƑ^@@@@@@H 3}# @՝NTTTTc  pխ'n#      *@P=RgF@p3fᠢzLD@ nhMo      i-[[~@@P].A5  *`_M\/      {]< "PPP zP\lJ7L| Ya, DO"{{@@@@@@@@Y ??_$..N LF @tp         P@QQ\.bq@@:         _P'$$&  Au@@@@@@@@@!C*++ (  @Pg@@@@@@@@I ??_;NMKWtґ@/*ׂإcQAۇM?}-+5;8JVjsnBsI|l:K7S_I/ʆzc\䥻zkf6QfC?M.?xs;Wꭞ=>SݏMKHo%ݨo#}By-)0=7Ifv]VxrڞS׹uh       @cƌуNSnشpNe'v2@@6ZG-[DSSS%66Vi٨(} /Zu~z=ޢE#w3Տ}tFZ$/Mj7?].=Ji W=kyڦȓ7_*MUwvz,_YbG\~MR0qyWutN3Jl:       +0zhTW;W @BDzL0f̘! $111Vi^ ?-^RR"v^zU{NCMX+o>x$%8j=lNǓYV*5U?%^jTe@˫M{W"㿟!'wcz{:Բy0O̞#j?[G꾹       @ AН&F $@P=fXL":tݮ=+jؚQQ]+/޽{vn(~ߓjSXB,[+ sd^q=}$WB-LKP|r]{Udʜ%\t9;<T?'[C@@@@@@J@233.]9vi-{9N_ 0qk7Ux{^};+d=2{Yq^}Ӻ˞e2yzRBmlΝhl.٩Uo$-1T߶T-\.>KrCڤq3߬+; +7lȺ%Kfݺ$%C4? o,!s~_#6ko&3S%Ukuj0%c^]Oh ٩-$KwS h+Vx{y|i͓dCC|4kjQη-\9e6}T7oj^6na;Kt&ٶTk,]^QHuϽڳ6oZtLs,{yWKgɩLy.ڸ       X-0fIMMAEuq@N9E\)=Bwp/s^}fM廯8s"=Nm3^ZjUUyߊ[] 3P ڸoտ@^`qXqh_{UV>X\UVb%K6fS|W/g7}K<{qBN{Z?]*/O0otu}F ?Y&l9+U2Z6wBG}ϵ         .Ůt GAМYfINꥢ… {!y㞁.y=ߠz!xOooP}ϳOgW_*Qx,]I{JA{_mGGs].2Z}:`~+svBу>Tac_]hjc{RGN.}*~Į΋Vo0{ցҭK߮L/LBw_qlM+T\xhE{1᭏W* ?FaS/<< e-[dӻuɳC/Z)|b;)r'ro m#7<# jW'gh?}ƣkl        `@AAdggAriJ +`A X,A-ꎠz͐'t̖{uSm7Wz'_:h*Oxen>TWv@}m[?>O/f[r[fq _RUnWH~ɱZF7)3UtʜR ޷#hgխ3#|e?m:̓~Ϡ0:  }o߽hj~ wv7BQR{.Z׎j6-x^QϬzsU܏m^h8pW}WTܫkЫ Qs@@@@@@@ϗ,hh!APO@8tT?8/ǵ0'hמ}~KY803S363O!QQGvYfgLF2ٻcnܻu=WGV+>bڮj.Kv['/=Szz%;mz7N֪?2"}_P]3bEP=kÎO@@@#'0|pYjUT՟|I; 1Mqү_?m8  rzB@ 2S5rsfE}ۊ /?E)q1uCv\s Aɳ+E_l,!Vo_,_/rw'+w8[&UטR;VYKW˓d mvZ͊gPݷRo ۟^Γu[KMGn62dܤizsu,CzcyxP9v^Tl3bEP=kO@@@@@@@R`ȑ#%n.}! Q)@P=4~/4˜[KNo[Tϙ0E>k@@@@@@@UQ=-MN'.@@( JP`P{1'H7m!-eVV ޸dt$':mUբ\Vy}.fU 3gF~bo=4DR}?]1sxJDy[Jviǿe6mlQ-oVw,߰k۫{幇.UgEVAJz$s|x6         ɑ,{t GAМSTر4M J?uY*++8+**DYht޽.]9@/o܊zE[,\췦ߠPկEUnլܳO8T5]$=/޻8MZ&5\_,ڧaetoq<#57o;^=l,'nD:g/Zգ@@@@@@@ T&o(IMM.111BPX@@[zh̙3SNzH=**JTPv .=z{`YVm\ŊdyBٶkѵg١oP]5Zyz^!fN UQk/ЫǾ@hWrgΒF`ꪏyuLΧ^|՟nT6lnlzUTW;6;Y| [N{Lyk%[ ۫B{2} MU+9xv@-s^%ޢW7>#5Ȟ|#l1 .3`~Ru{Ү];K+%KlP}xUFlWV{u:,Y;SGu\/==:jEU^] ?g'ri;jb.Yi;:_mYF *zG~;EZ7W@@@@@@@"W`ȑ$w  ^ #t&55լnԍϚcr!#_^Zl)M6t#        &D%KEu @@ (5L*ߵk^YphՌVmPB\ZZWROHH sG\@@@@@@@@˓4;6z-! `   OBQPշl٢H we|VA-ZPI݀@@@@@@@@T'77WEpBP=@d0s@T5խq@@@@@@ RGs  .ҦMׇLP=\fq" @ T5     DAHy@E@ճnKTTTc  `խ'n#      *@P=RgF@pp2n8z8cD@ nTƑ^@@@@@@H 3}# @HffNjfzLD@ n=Auk@@@@@T:7 @QQJ&MzLD@ n=Auk@@@@@T:7 !N2i@V5խq@@@@@@ RGs  .%6VV2O,f  5Auk@@@@@T#}# ./@EP,Ƈ !@Pݚy n#      *@P=RgF@pPǎ+iiip8ä1F@hxAuk@@@@@T:7 1c-6-^J'JX@@@ Ě砾[n5kݻE}lqry:-t&YM\Dq$ʊ [eڢzcl޾Kbe:fM9a\Yb~~lhu.'VhpoDd_Y$7qם_8@@@@@z ^ot X"0zhQꖰ  խXBI& hXxg\JKKeǎ,ŭ_;P. V ;鲳| =3[&M淯 ?Mz{yx~ۇ,7>ң\Zq2$9PQOtWNӨ?1.2uDm*cKΣ7{jY=%I inmӥsv5F@@@@tp  FEuAP='! @hTfʕ+%55Ul|`ZjTWjB !1_^Sa|^۬i,0[xylU5ؘh-[k]62팅Χ{ s\}yjY羔 2D )^Q鍊CЧtlmn     :Cg.   P@AAdffn׳=ھ'zj_,W|mgK1YA@@@@3@J ??_%..NTJ}  Au VO6M:t蠿k;L ݻW/^,'pBm9WseîL3|Ai?3}?m+V2Ȣpʻ z糒o|C=nū7޲ß''wieAzs@@@@@Rr  `@aa^QtJEET@@h n͌ZT9stU7nlm6[[YYWUW_˴PyGuH4uryuJОNi(:]{ WhUWm,[Jdqk-PTe8zɚMt>n=V:eZ( pmޣ۹$!>[NVn(]{IJRthÜƇߚ>z}Qm(ޡu/Bjj~٦[t6Պ6VwjN3wIKfr|,xRۚd9O9;rE})5ϳWeo-0=Nzp8'6R{~Jo^0-j`z9nwB9N{Yk     AИF T'0fIMMAE؏ x TԨAsJ.]$Z j*LP]UP\ Ο?_=غ:¯E+j=QygoL:j'RSط˲u*<[T,>$+6lold4] -&GT QFMr-`{sL ?HY=;aaO23'SfZyկ/M:Pڧj_km~0=w9R6^ُ\{~}8 wwb ~=sdy+:/geڢJ +ϕS Pu@^c467I?_ho- Pzׄc     GPR  @TEuEPv *@Pݚ:`ܹW5`n-Fyf}) 'ݳ :$b>O mTȮ( } J㏿ar\㳉V\Upc Gk/#4n${ U-vV8aU1/DUSnIr:dwy8܂o4U+*q".\0xLsti+_ulP]hadmfU4GPm.իb     C{~  PPP zP]i_J,Bi6  (XT OUO7*??V¹Y<ꪒvoyKYDo[Q_㾑-3OW;e̥e=A,nn{ՍzZt{ʵh4_OOL2Z6ZлTmjm*XCcFkQr]%ERUT8mdslQohRZ%5ȫgםWW$nw>7Pswfz0/MMnЦFO0wdj./ylP} O̾]-e}z2Qם<{yW,yXPye_<9O&XA@@@@hX @@%++K$Z!TI  խy/\P:uT/Ս鑟7Jt(y2bFg8^M<ؿ@o.-El1*߯ۺ]<{;VTW/~#_d7Ǝ[+;56ӺUUXdܥqbՍyr`C֯(?].FPj?Ʒkw[.<'O\32ۼDzdFIˤDy}z>+5Xk/:DZҴeEբ*?{es˂ʘUαy@@@@@ ޠ\@QH\.v HF@t<խqT,?2Z*+ 3|@s&Aul<:|,[Y?4As oP?_+n7#{sTJ_/ٵGn93\W6v?P.6N6na onmnȼR^ᖇ+닷~zi0dP]]FQ=Z^mX n| E:xIt}խTN     @ T9aD  @aaTOHH~ӻ8# U TJެ3>q mMyݏdMv\L mi>+7RLۯ)_0/Ɉh5VT{mfjrS׽볖h&=Qin+}|=m6A\,>d$߬fgnL:f2dP]Uֿ#,oAKA9Z<*߫NlQ6j)]S{ 7 Au_@@@x7eʕv~?/1aA[`ҥ2|p7yYgɅ^ d<; !C*OEp5ƈ  *@P~8^rVîi^AKV=ӻo3,O|Lgx|+~:Y~ (Wי>@IDATg|ϊm>igWmc_Ɉ SͰ 2eO<WzY)blK G2hFyͱg廮Է NrL:w+g(=Ii܍!'   @} vm2嫺7|J쪎Sʃ>Z ,@P=g{G@p׃NS.Ap5ƈ  *@P~8R"gL:>C68 [!'   @} f͚jW}Q*W+˗K^^ݻs9~pH ɳϽ# @8Tz8cD@ nTƱ_ɿժ3U=D= /\Ayvi)2OOQUP]-,^Q_2t&yݏ~_U>6V[ڻmEPиTq2ÖzJ˫c&C _.mS[͎TP}C}wk^Kΐ{uҷ}54;cEU}fQf.M%;IJTa@@@@i!== @T{y(@@aBiV|ټP{/+{ag4]iA]co9ĮƦOռӪQ|29fk+ ϏJjIr:w^.Mjߺw޲2/u 85,K},_lP}VY~hw/IuUѫ͑ؽWoX q؂5TAz_KM 1C=}%.\W==E? WJAuCo՛ժҥܬDE{AUWi,'vʖ9? ݗ^BXX\a\{I2` Bٰm_hyV{ֳ[7׷XUY~mӞa 23FO0ǒ2Y\Ik      @hTy`  @Un[$++Klڿk%:kt. ~~'Tر4*3?[ n]X,ZH:uT?+|g9W?{?»j`o$%8F6=//͛:E=Aߖ׬uj6TWώ޾^c쮂ҾAuU3Bv>uDnQi\2 d6]! 5XO̒|cQau@ˤD7 ޼8$Ǥ0ψY]/tl{m@@@@@ @\@P@ՍڿTf  խ{ ,*Qa,*$TTX}…ҹstUoThcQs^*CC^5UpWx嚾'>=j? x+_ɯVTy-{VU~?C|7뫝wȒWTW'0{gwՆۥiBVU_ 5пqoo G2BO&Y%{?hu,!k;d2eGu㠪ߣ}'     @ To   @ Ҷm[ k0  [XTWU۵k2~@dɒ /[Y>ޜ U/5ZYvAuk@@@@@Tꑺ@E @IIIR^^NEpY8Ɖ  n=Auk@@@@@Tꑺ@EPZfdHbbDQQ=\q" @0[OPGzA@@@@@"Uz9@@@@@@@@@ 䫊ꙙHJz`*" y@@@@@@@@@y#zC**  @Eu@@@@@@@@@ @EE)b%66V  s        T/vP\N$hAuFPz.  y@@@@@@@@@*) CP=0W@@*         5 ˓\%^@@%@Eu@@@@@@@@@z-#GxSq@/@P}{         ?B.6Mla <  :#        "*^PP YYp8t<  @ k2        D<ɑDVRD 5 T         *t:ŮգG@@kD@@@@@@@@X-#Gl'OG@: T@@@@@@@@@ ZEDlTTg)# @         qҲeKIII ºBBI X(cA@%@@@@@@@@@ @^~dggᠢz`*" y@@@@@@@@@t:%>>^lZS**  @Eu@@@@@@@@@yy*'%%QQ+.# y@@@@@@@@@***dQ!TT+  ~-C@@@@@@@@ AuVQvMKWks%" @u|>N         @;#FAEu @@6kD@@@@@@@@db̬ lTT䇁# @)X֭['˖-[eA6Cn]6㞔ɑf͚lyy̱ܳkռfN}o6n[^%{$%O ;W:@@@@@@@ѣGvDGGTc  4A-Z$*3&&FauRW[*.---[Am]!OOv)K+ :ENѩ\In~qy4YLH?kVw:ˎ]{sZ6k뷫'͔ 3+}TDǥm|3Y~y_#:73ybxt}Qг$6&^e{' qg⫦7hM;f6#       @$77W$**zրD@0  ~zQA ׿>ભAu-ZvݲfQAM}F5xmղtۥ^<+h2[ w`A~]vݫMfsyᖋ}.]"όD䠪?pfEzu}x}W~}qw>gsO( Z|SW+:e2dp7k3yE@@@@@@@3f^Q=))Iش*e$CdBd! |>1)Bjgԩ,iii+ aVUU}R.))m۶I=jEP۽2kv*cx$Y*Չ O<;S=T9汱A%ko7j>מu~DJk_ hBT_ApkYƇߙ-?|Zü;}k'wB_]wM'/2Au/@@@@@@@)bᠢzH A@ K3ai߾v=]琺13 ܹS,X }1.޲r7*Nԯ 9X땠yƭWEY}go̗}5^rǸnq h?8L}3^.[u       -CjY  A\ɓ'K.]$..Nf;*FX}Ϟ=2{l9YsE+{wTyޡ}JҵdU 9ä{;~97S{ɼkdz9-8*1;Q6} YU:߰eYZ)WҒ-k[]P}מޕk֙Z*w#2۩iɉej~)kn,H)'Ζ;def-u}Jwok9nnv1ybyf'qJ]F>rysGyK׮J$%.M$eسmMꞫO?^:W/_(r-PP}R2on{O8Uf39S?Qe@@@@@@@@ F-zPLlZ"j0@P|> Ν;KVZUH`cqyys̑#<24'1g ?sgTXUPop6O۱:>)2_|+ϖssAnX{c|*gI7-h컩9 Xn{I{eWrþxf>gմMfsy $^ n3z<}۠S/'?2qyz8] ?({gsS!;.//)7o/ujSG@?l(E޺J:/e o?[P a=Թ.Y2uj/^r3 zW*/T?}@@@@@@@dcJvvʢTTǁ# @mFDzP)s1U,#ZR?B + *=q柲z&Wo)'C͛gݬhYQhƪڗǂe^A3&7ݹ{8YFV-RkUKI;vh<TT xyAڜҫ.AuՉMReUR;VM#֬z}ﱲsM:Zje/) |K׬__nBB栶([էti%+5/~-l1x%ώgP=^seEz+?skU?%6/Տ}>W^yk~FtiAc浜MnجTW f        .0f=,`$y0@@ӧO;KEyIn݂4ڽCog@sl~0;1 m꠺ѷ ?;SPT9汱TWoW!cTV*ԮD|Jwbӯ,т1^vݫ9uڗԦ7hճ6ߠ/2BO]{WvU {Տg@:fǾA);        NS/ ΃  @P ]-gFH?^x@jA'+q_o~a*M<~_Dy}U{cיڏڨ{G?v뤌ս}۩1XҒv렭۩jj`O 0ڞLм毢/Y7ngg2HYy~6;.:U6OՋQy.Ooަ߫*jSg/6X~ߠ={Gc=2t`Ge7 W-DE{O߬?Z%f[yB1q^2n8[[T%qbeDG9Ϡ۬:x%f;ϝ˟|KO5j&Q_(^٥~2L ٷw:_݁~VUݭTmcd7O˗Kn<$9Wj0M'mmd7KW7 u=jC@@@`С2{?$&&lE_~Enր2d~p@@UT͕x}Cu AY DjP7dŔ2ȕgW}|@o9#,L&ZW$7{VS#:xܭM/y QUÍeFƮZTv+-+]w ҽ˼^ݎoP.6A>iy[`W[g63;T e z%z}WWa~ckP]ݷqvjl~|34ngJO\s^ꪟG|(,\wyVҳCZPSa͒h=^242Y S@@@|MYNUTG%V0/#Fd߾}p@@EUAXnz(cB@ Ra&RꣾE?tNtT=8LRvy8=MR A?z6rb*M q>/B~3N9Ҹ/sT7ovڸEX+]"Y"er^]sO4۩. 6$)ԣ:}Qox44c傓#;5T       Zvرc%''G/T5 @@ RGbPB[k˓u%[Eknc,VmVUs~PA!+4`LEuJ몿Wn"Fҝj&Q^y{g xd6nlze.+3ϝҳ|کϠG?!#>|$y iZ~nʿ7ӫTߩU_yq^>6&<^vrykd^٩.pwd뎝>wx 5ővi#9<6v^'՟UQ=-١_"n       5*nTT!n +  ,@P=4W7󗯕{g.H.yscϝm[?TRBI}է.X&O}d#E{@jfS;T4{<;fRduKmOՕ!([?x&%T(~˱]ۘ3A ﱲt~wټ)+7獝}+9}iFWT7{TTWMF||4aGkў] WϺ \pBO'ikяھڂvkT       eEEEҺukꖱ CsuUPCUV_ʠ**\̟?_uv ]={lL=n<$9Ww os4o"TWAi=.N,锛_:Ka|n. q1LW[Cc׽~Q0kMAuu @%.&*gP] jU=hE*;wUT߳L|پseTj)osxcW#۹̶ {([xs@AuU-]yjƖ'-jwɆ-+īj5֛T7xE@@@@@@@n7N\.T?xRz@@H ^^շA]sI]M[ɂknbeWyUTW7ZJW^KN>5T7)A@@@@@@@cJvvʢZ(GIBf#2K@@@`OBQ1ciFUAV+ . ?^k.Fm W%wV\56 U'gc/kթ>~GM;۴*֟M)>W."*x]}tkoM/yTMO~T7z=_۩*FzȀ^]%6&@WGW<{ Ue{]mP9GGl;/ }׏/Z!y!g1]ZjGvߐӵ6mCUJ4M24ү_[y_Kn |*oiAETǩU#@C5? 2nzyosjjΞB~Q<UpTsfyM$?FrZ6$VW        *YYY G@@N`,X iiiWS7*۴uԇdǨuV)))+u鋶 Tptt͕QV]6)ݹ[$91v7YKV,폱ۥZR-~E湾˝0벣Ѽa6ټmHVZUP{XvKNYsмqJȏjC@@@@@@@ XEEEҪU+ILLԇ@P=X+" @Tͥڼy0!u㵦ڌfi޼4jTY>@C V[o,ןOd5Z@{e*Ƙnd9!        @ zNNv$Azc@8TJPmCAr*wii^I=99YY$ hYv}f5go$1M4B@@@@@@@@vtJ||>^>q3 4A@@@@@@@@@ rIrr2p2 AzyK@@@@@@@@ 7ndff 6+@@@ Ճϛ#        @A$qb4n`@Ox@@@@@@@@@FQAuFP=0W@@<         @MFEuAP&,# J<         @`ѣG.TTU@@:         P@QQJBBDEET   y@@@@@@@@@cƌ+'%%Iyy9A\\E@3        $P\\,p8^@@%@Eu@@@@@@@@@ MP=0W@@[        =zA2Uh:G,X/ T'd8        > @IDATT INN$$$HLL Au @@&5 q@@@@@@@@"]@2nf#G@lD @@@@@@@@l|T̔dq#q`  PQ         D-C***G@@vkTS+ñv\G@@@@@@@  @˓}Au5$V0L| Ua, DOYњ@@@@@@ Eڊ3_@7|UQ=3SIITTc  #`Ϳ:8ݻw\܍      =& @^~񹍊꡾b@.@Pݚ% n#      *`"u@e )9R222nKllTcl  խY8       #u7 햂Bq9m6ApX8ƈ  n?Auk@@@@@Tꑺ@E@333%!!Abbb1N@Auk [H/      @ Tԕg  .#$77Wbcc ˢ1N@Auk [H/      @ Tԕg  n[ G)sa# ]5K@PGzA@@@@@"UzXTƑ^@@@@@@H +ϼ@@ \1B\.8*ˢ1N@Auk [H/      @ Tԕg  .#GfQQ=\q" @[cOPGzA@@@@@"UzXVAʤTl"钛[ l?=3Qubc!^LXߏGkw~oYLH2G(sܭMvt*Z_"wZl{ɽ㺛ǡۼU~'`aͥl&1ѡ0C8<<9nD@@@@A:q@hpBi!EE @@ [hVU@}ٲe}UR2Z 0jkPݭշ8׬Y#999z`ݚ[erSoPg*=z_ =C7o犾6keK}lW׋Tx դZMQR<2LjV(ԟP4cL     *@PP]Y @^~^Q]kVEd̐ X,@@S'&AXT9s^I=--Mbccj*nk;XRWTU{JII^Ym .ll.Qkk'ןsDW~I7VP i$yjfڧ 0:@@@@@!76 ]@].8eZHu7@0,A)SHnAuϊuQQ]w) ,={ֵzm_/3=ʴE+ձljh9}(~1U5am_'+(?X$Sz8՚Ωڣ;M>*ItEaX3V @@@@8@@'.S$:&!L@, n XT6mtE۴`l*n#gϖݻHW ~S[dNc6}w~hK,]7ol![C Jem{O4NqHN&rX,JXJ~vN8R;ZMnw$^!ZE}mkNs;wK.ȑs\jTW_l,Y^6i*TAk٬Jz }vsIJLZ 1[Egȯ&< 'W/@vcrIKNԏg-Y-S[6V_nPkSyk`_eѪg'U;՞N9ml*V>     @   H@2“*CE@Z\C@4<Vg͚%;wۗ*= @krL mϙ3Gvj빗 ?s;zՐcCZ6٤RvWܢqܯ2=ʵN?晗fWyrߎ bYļ4smVsX7Qn|Xh9^jT_q2W}0U}? N]Þ+;v86Ζ/?]Ty~2kjy")/;]xRϣ8@@@@@! @+ꙙ$  ~-fܹsSN^gUuoC{0Au5&ɲa6Uaǯ>[vJwО׌faսzUnP5LD2Ǽ~VnҭMy6/xhە'<[SP}Ry53:jղ+]"/et-g&Cp<6hsNIys`;j,9 5y     !$@P=  ~TElq88 q @ q.НTW}'^}`l{u{ôߛǎx1W%ɜ%kd55Wty$6&96@ٳ:kvİsđPY{e/itp'Ɋuøj +~+f-2C ?;k7n^c^QodeG{P4oԣ:Dž_"LilՉ@AuwTyͪ7o{xWJw6@3/=.r٩7;vjT߽L~mUż[/Ao}o/ןWoOj| siIݗǞϬC#טy4;g@@@@@ ܒ0 @@K _UTGRսd8@@ ^ LOT#X-lP+ΐ˪ %9U:}~b[?>w7h{w+CVm*_9^m|K~Ct䮋uٙ|<:#ô=s++w 8ٸ<.)A'?KWԎ~KE9oh{)G}mkThm od9s+A@iʕ{0va~q/PTT;   X$kɲe˪ͦÇKlllmE7 8~",`"ـ# *~zȑ!v]wCu Auk5LP]ƷK׸9AO'͔/~>Љij"[Kwʰm<'kфRd=Uq|7rEWV+ymSVߓݴpƎ#G;g7U mߦ{wmcZ׺ݮ}Q਎^[T49_srJN^cQ,*eUxtWz}= A@@@"kV̙oFq^`r]w%\"7|s6\D G3w@u-r:%A /TUc|  t,Auk}{ vPEZ䯒-lO=^2S!Uo9DSmضciq(YZp+=Qlg7Eqq(^zh Tٱ{~OF);en쩷\˗Zl*^o懿zcSAvͥ&[\ӍKwP=[tm2߶?F}o%+'_KP݊;   X$;ʕ+MGx qCG`ɒ%R6m}O>9P!#z< رc%++KB~LL A0X3 A nTѷ O7n8wD`vLbQ]Ǿ;8cyN*].=yk|iV+^+6O% >M? m[To@9|xگRUAWe_NO~aMf3Z[<a@@@@@ r0@@@QQnZB>A*<@@ Tjr gZ4dP}!;;/_eKn]{[4N*m|O4cw^I@UBR;FUa.Ыlز]~}ڭժ}P*mwzғ{9uk˜ag'{v6_}\rQP {^}4KKǩ~`sUAu{\$I#m;7ޕͥ;sQZ/TT]k+Gsp     AZ x >?n8q\>T@/@PݿK]TX7dP]6ģ㻋 _6[F|:Qۯ}ZrfvT{_WVm(1$o'1Qy4g}5Yl#\:<1[SvYyoeGu̕\|~(ܥB}*S Wh`]5|AjJAF~9(WGThʻƭVUYMdi,Y^Uܿ_^lwuAuwz7g@@@@@ r0@@رc%;;[vش,B۪ `A@@Od};t ZV?jpdS՟r-,̟?_:vx ]5= TW?ٹg9W(o"w m]תgjl OnQQq[Mϟij^R'?Q^1!=%Iv4IMTWqz䧙 Vϟgx^];oĞF3 GkԎrgYTWUuge6 T;     !#@P=d  UTFճ$)2AP '@@ozduP}ܹz\ԣ?*>o<ԩӁt4tP]Mp5OEUAnSod9K=?m ׸o~j'd6J)*M.ScJxܳaJ]ll<( J.XfogQ]*B)s^y,#QAozavٵg~٪ѝZK~nP#e Gz]TW y     A %`  @@"iժ$&&"  BPݚ꠺zަM4w^Ypaտc"C n1{] ßY 7k"Gvȑ{f^ݦjsjem1%c\q+g{yvo-m;wy]SOI=66s*y]*:UVfC'ϒ'g 9uy\۝-wʿVKv-3o뮭߰3P6m+ϫ >M߯ʴ>ccidILSm;v-Dc]A}795UJL{m7X{wm߲E{v֕lGfsScyr @@@@@a73 ʎ?^NmQZ~"=  QխYn*Pi&0a㵦4ꪚ5kqzU@@@@@ Tj@@ F-.KBCiu  Auk꠺պudǎ&C5^^^.RRRPn֬5"\z?L@@@@XŠt X,0vXdjj‘-;@8[TW#3*ܹShmCƬvJ X$@P"HA@@@@  -*;NIJJzh/C@P nJWPݚ ԇ 3̮,9-      PuѢ-  cƌ1>QQ׀wD@0 n͂TƑ^@@@@@@H0O: @QQ\.INNz/C@ n:TƑ^@@@@@@H +ϼ@@ ***dܸq)z8,cD@ Tf [H/      @ Tԕg  .zP=))InشzE( X(cA@%k8       #u7 Q$''GTPfTc  <TƑ^@@@@@@H +ϼ@@ \z,D@ TƟ5     DAH]y "0zhq\b%::p@'@P{8       #u7 @QQJBBDEETc  <TƑ^@@@@@@H +ϼ@@ \ƌWTOJJrp@'@P{8       #u7 @qqdddᠢz,D@ TƟ5  ?{_WY4i#mҔ7((*{*\?*(M DWBiin9Cڴ7ͽ<~C @* ^+o @@[ZZexA⬁zqB @ @TAJ]y&@E3Έɓ'gA+VDUWJi5H|>)@P8z!@ @ @Tzy @"0shkkT/3N @`Ջc/^G @ @ @*U@PRW޼  @r8묳%룪JP\8  @T/zqB @ @TAJ]y&@E3̂CNArY8$@N@P8q  @ @ @R+u͛(zkkk466FWWz,q @' ^{A8 @ @ PꕺM̙3zSSS6$UJ+0 @ 8A8 @ @ PꕺMg---UT/U3N @`@Ջ_p,Noz!@ @ @4cVڔ͗ PViP}Qe|K @!`_|m~qzq7 @ @ @@ uM@ZAώ'F}}}ֆz91 @*PX_ N @ @ @ @@ tvvYgmmmYPJPDʰ @T/0 @ @ @ @JR ** PR%C @ @ @ @@ ̜936|󨭭 A\ C"@JO@PĈ @ @ @ @(o~&M!C  Pꥼ:F @ @ @ @@)uYQUUU]V +A (OJe% @ @ @ @RH#iP}ĉԔ QPWʘ @T/0 @ @ @ @JP`̙fECCC6:A\$C"@JK@Ph @ @ @ @(=4Q]]ꥷFFDz- @ @ @ @ PR6Z[[cȐ!%:Cz. @ @ @ @ P"ђJEY @JX@P @ @ @ @( i1~6lXt%֫$F Ji5H|>> @ @ @ @ @@SFKKK4667 @U  @ @ @ @[`iC }{JPQ{ @ @ @ @kIE&b2 @ PQ @ @ @ @k3fDsss444f*W @ ?oa @ @ @ @ȂIEΨJ]k8PJs  @5 |&  @ @ @ @ J)SbҤIب7 @`]EI @ @ @ @*YczCCCTUU^os'@M@P}ݜ"@ @ @ @ @rڧN֖AՂV0s @`]UJ; @ @ @ @*U`J{{L4)JPRMhiK @ @ @ @@% L6-ZMMMrJ+M` @  @ @ @ @T@GGGonVQfLm;fϞ<@̟??j_gذacƌYK+b֓scX=(N=y}\w^j?o[}$[!k㳇PKS>/%N  @|>/ 4>|hllu > X".\^sSOGs7>46k4^f=(t|G}Km^ߛya滳4(94%1kn7x ^wrR|o͛#НwVB;ŘշߝqA>v@6T/dwbebq @ @ @ @KD`ڴi1aĨ M D4 @T? +:`ջWT_~ Ӡŋ;{}.<%&–V~~۫w U7^~]-qgt-bKPVcT[ǤqI6=. @ @ @ @/'LȊOyA9C! ރdabyHE+rXlYr-WE՟7[S~?bv.s/-ƻx^k{nz'cCcr6~Ԑ]ؙ3ٸمy\;&mwDZzE1vf,T鮇Od[ZٺalMz|3qӽǃzXl ۼg7O}/K_7l2 re>xhyKv{^9`x, _zݭy.I5e~nj*\^7=$vߺ->ĩǞ+ Ny^SkX>aOy܇7k?ǗOm';5ՃV]խe]yq+wzi1~$_&H]|[ǒ$-sw/>|}^X#"]MFuC✸U_3bXfŬ9ϯޟzvN~nxc~\y!@ @ @ @ 0=Z TEH @KsnzTSРz+ҰmkM<&SǕbnZ|]ށ4t}<{!;h݆՗X_;ܸ>{ olȃ鵾I`s7V)YлiX홟TO~⤂muAz~rꟗO;^Pˮ3.{/O}wۦǵ _ԏgƃOg4ПF?%㾺wi}V؞e;4+{ߒT,;yC @ @ @@`jZQ}„hljRQ}=(CA\J ҏ/bUwMi|crz#񚷾$U?ѕnuC;l6ƭ??8+:r3patР)^-Y_Gq㮇.,_ Ą'>ߛ<#T?$nMģIe{$oz]%C5x#ul .XWrO^{ JU?u/Ϫoϛ.4^5gk"B| _[%>pk]ssi%t/5ܞXؓt ۴6$~[^/":vtc=xɸ]|mY|[ 4S>,lm6|YUp~uTɹv=BóWԯ} _c @ @ @ @wҤ@IDATC ɞ,G @% ^u 7Ķn/oe]Jr]+84؛fptZgl4w> F3/xg0h$<.;ސzZoK?[^j hi= OvT^z_ףb 84vڢ%2 wg;{I_:z2royK6δzqlRwغwP= {̾8fTpyatMUmw>=Y7<<&OH/|yS| __;ĭW_>6/1>vkg0; @ @ @ @`# ӣ9L@moE8 @Ks*5ƹ.f\|Uګ[4T{+>OR>㵻ooHP=M]]eI'U+,؝w\y3.OWI;zǟ^^WpV]G:-issmHT9 v5Tޖ} o| |9[Ӫuh~a!b͌GrcxCg\rM}ٵyo|N_sYlyq/ugvm=y=jsj?M[_[6;T_]¹!I@7x0 ! {kդn¥8) os @ @ @ @,Йd;utĤ֨Ki:AGziY%̳qwߒ?=1g4> COIf]iE@̊9Ƣ%Kceqeg+~wƏξ(ok~?oϊkͯۦ;>:;>3sGWs=u }|o?K*${Տ>p85wow'ؖӝ1u}ٹAqIl?q<_< ~,i[Ҋietې w?ǟBkuUul1qLl3i|mIQ3hP6ŵj-GG?;诠 }'MoJ*}!|k߻7>4~es @ @O~ݷW7?o W9[஻}Nu{]-o鳍 @(U4>a„Pzq @%# ^2Kc TԼq#v_̞7xٹvΥ1o}XA/Wq#v經Ο)~q }W#ob/ RAq`V{P6 tsz?IS݃%]ϼ闎<(qVGaU Wy}Q/xm]}bPuuvwuܴ-cF>{j<;6c#{6znHmW6JCi8?ƌұt8[e+Vd}\Ӄg0? @ @9昸[W\ }qꪫⓟd9ꨣӟtm\$@ @@ Lioɓ'Gmmz.q @% ^ZQzA(_pepqT]sZ~H{gx>غu\«o_>zXlTǍws~:gsB>xhyKv׼ T?Scʏ5}V^|yO-V6ZP>N|<>lom\g_vm0AgP}R ;{{x Vt,u$$ nǝ[cOϋ74&MF7=$m;c=iŵ{}O<=?3.ǟ:2 ՠ?? @i>ǔVT?F. {cʔ)}5yM}q @(ЙdV:O2dz).1 @' ^zk$L Cjk⵻oIG𫼚sw'}2@N;/nϣ+^f1i\Z5:] .=w(g=5/>iho}mQXbe|'g&㟓~>57&Ç_y_>l꽃oOy7\{^=O[L5B;rxczS+;ze㞤?iÅS91YNg m3﷣;koΆ:vt֟,<+ @ @ @i1a„U]6Y3$< 0P> |ϭĠz`w?ضP.cNumDcCL585|u)?˯+FzptZ; :>ӳG(ʃwT~^?cٹ߯#7Qo+o+?O 'Sz{:} V%OCO[Xdiv6o|(o=68Qu}qbA4lZCMF ۥ&ߝ~A\s=B%^m=oXӾҊi}m[gw{s 3 a~<: @ @ @/4>mڴ0qb46o_ @%# ^KYAÚ&^Y;]*~KYscΎT슣<\?xpDt{Gg]ܣJ{#O΍#kZ_x!U˸XTxOC^sS~=)TTO_tU竭>ƍ=t,]<=c+vP?w>n??F۸M G)&n:2?w-wg)?3bXǘBO]\ WWUԯ?75 dBO U;n>dlu?8p9ym_yA@?߰Em͠2zz!=OYse} ?|˜8}} nw_>62ޱoH8˓zzvAkI݂݇/? k @ @ @ @mmmѐTTO,*"x& P^ꥹ^iP}mAI%O낒/fKљYre;]vtկ\;pQհӠEKb=A4H 5Ӌ't7k4 oz=ٗ $կ;뽷AmnOdd{G:{sG{eK=zП׸_7xG*r 1B^  @ @ @ @Hs7g̈2d^#@S@P4o-"jkk /O*u]%TOW# tշ ,}%&[%?vkc=zj^|W A!얷o֓q=d\U< Ϯ˖_6oe8ݹG.s^ɗ g^Ov.X%U/\[Ǎ)~ʼnz{xmJ~mҪ^}S\vmgzPVEk6M-["f\|U\_PE; `Ɨ5Vݐ7+w6iK[/!tjo=)LeM_=(gc[4_>1gY=_;ή87~ɿos¨-_C{tٸo{`VӑVuO5 7įxy~[[/f:/nJsө_8z5"3>ұNbXcְ{kx @ @ @ @`'[ QSQ}{ Pꥹzwyg92 #~]+?Ϗs[ `OmZDn7Mó2+Vf3rX^ҐsPnH5< u.lÓ`^s0=yqͭǧ~hޤg?X+ ɷ}q_ݶ"?{XxiNX/\O&ɺN*M4}˖tT췃 @" .J @ @ @ @ PiEhll.AJ~3; n @ @ @ @+0s,Ԕ!T%iR+0 @  @ @ @ @} ◿hjlήNr =@ @ @ @ @ ݓc„ 1dJRQ}mb @/zſ @ @ @ @ Ї@WWWL1=^__}xDՋF(87 @ @ @Tرc+mK(IիҿzW)͠`VX @@e |R/87 @ @ @T)@P8z!@ @ @Tzy @ FҧuL'FcCcDU?ArX:c$@R@P8q  @ @ @R+u͛(֦z,q @/ ^5T/^ @ @ @* ^+o @@G֨A*' 0pűT/^ @ @ @* ^+o @@9tvvƌ3%mՂnH zq@P8z!@ @ @Tzy @">5 QUUz,q @' ^{A8 @ @ PꕺM@GGG?> id+ j  |RzqB @ @TAJ]y&@E`ԩM*ˢ' 0T/^ @ @ @* ^+o @@L6-Z'FsrI zqՋ @ @ @@ O:&@@zSS꥾XGzqAP8z!@ @ @Tzy @ 3f̈hhlȆz91 @* ^~A8 @ @ PꕺM@,VT\rI zqՋ @ @ @@ Wʛ7 P.SڧĤIԘ YP\V8  @T/zqB @ @TAJ]y&@E`<9JErY8$@N@P8q  @ @ @R+u͛(SFKkKGuuz,q @' ^{A8 @ @ PꕺM@{{{LjuuuQ]%^.f @ _P8z!@ @ @Tzy @"0mڴzScS\z,q @' ^{A8 @ @ PꕺM@h Q=HErY7$@P@P8q  @ @ @R+u͛(ӦFKKKTRQ\8  @T/zqB @ @TAJ]y&@E`ԩ1mRT_rz,q @' ^ ?Sdz>]]]~s}=MMM7:7dd.\,zfA CnpɌ GqC~^h32;>ǥ=a1oۭN_} @ @ @# >0JXWhuuuQSS#p @+ ^s̉ÇGccc7ӐzX".\NQQn}}hG @ @l|Ao @6mZL8!iGP}}%@*R@P8^M7ݔUR9rdfӠz!N?Ҫ˗/sfwiub;:?7 scInWǟ?\ycRU3xn_}WG @ @ @U@P}r{ @`Ҋ---]]- @Ջ:UAiP{EqzT_xqy睱{o7ݏ<_{TR3bhu]c cK⎇e1 o~Q76?W;&ϾK @ @ @@  ? RhooUAt*W @ T`¬bկabyHE +rXlYr-뮻%!~<̈Ɔ#sós<̂{eU;ʤωG̞[ǎIcG1#cPRvO3 gd/]=XczTMG.[І޷8GĂEKbȡu޾<:;.XP78o[}Ew}$H|7Kkip?Ĝ?T~NQ#ŽfgGy8y" w߆5G߶oդ4~´?%!NV1m& Kǝ?ݎr~ܞmC~lH߅>f^}p*Mj8/!@ @ @_@P= !SM(|nTM @! ^e.vPnۮG5 w&A4^83/^/8+_fwI˳KS|}' HcG /u kŢO>uD o/:H+is]_^נ> kS͟#^x>Yyuu @ @@!T0~ @KQ -9}hnnUQDW@P88₫o;zk_onUܓ߲u˸ضm|)bD~{lRQwqf^^~reqw~eNΏu'/✼QHS3?=+n$ ['dkUgM0}/lo_z -Ώ~.q^=?~y1ϴ74ä }a{IOivcOKRǼ+ @ @ Џk @@Ҡ .jjjՋ`  @%. ^Tpt)n|찬 y~;ǝv^1#>sd{O>uD5)hJײWnZZL @T>翐:K/4Ww9^B\sM|ssFGqD|賍*Y@PW  @r 'd#r~UWJi5H|>)@P}K;zG޺o~V.5 +o~s*I Fcݐxb/8W}ƫw*?. 1k T/F߽FPؙX|y;vޢp+ @ @駟?psh{qǩ>}ihm׿}5q@E W< Pi$}ZǴ8qb464FCT/53< @ՋOO='( GcGuyg?9;::ӭcF>θ)M0&b7Zz}׿;~=.υӱsHMS>{d_?b֜yY kl @ @ @`~  З@hkkSQ/$ @ջk}Ao͛ xk ϥ;ɷTo/o7?޲Oǹ'?$޽"ߝ+V̠eDWWljLoM qѧqW {7rxNA//LjƆdDS<ӱlŊ׊T]s^UpA ;)5#Ȩ\>>''ꝷO¡W @ @ @W @"OM*FCCCQQ @^Ybo,Lo`f܀zOVc+WOι4}k&9‗퐷M?<更ژpQvAs/OwlJuw>[נzzÆޟ5n[N8-1fm\ @ @ @' ^|uߙ_+|ڌJVa.o\xM`ڸ^Ż~|ai{$?jxOKw6BGiU.W;%K QCw7]&_ @ @ @G@P}8{  @ L:5ZZZQE> @Ջw}1z6lXzzVUOBEǜ9sb6+7B/>1'f] -AUI@}Ә8fdTS<iX?d#G<0{T +F+VvƓ$Mbܨa14 @ @  @#0mڴhm* @@E gًTOO?t477U !FӭTOϚ5+Fv @ @ @OxxO$ @hڞUTojjRQ}}%@*W@P8k_z:ٳgǢEbȑ A+W… cܹcƌ)ΤB @ @ P4AQ PtP3 Y*Y @KM@P8+Atd/!¬ UUR/x%@ @ @z .! @ tLȂiEΕ! . @`uSYsT_ @ @ @qՌ$)SbRhlj̦-^Io @TQl/IP$N @ @ @z`iJӧGhhh*` <(3A,zqB @ @TAJ]y&@E`ԩQ]]-^. g @ ^P8z!@ @ @Tzy @"&E]]]TW ˺' 0T/^ @ @ @* ^+o @@tLhhh+W^. g @ ^P8z!@ @ @Tzy @"},Fje݌@A Q/ @ @ @JTԕ7o @\;;vlgCJR X) @'yQ/ @ @ @JTԕ7o @\oǸq㢮.V\rI zqՋ @ @ @@ Wʛ7 P.iP9555pI zqՋ @ @ @@ Wʛ7 P.'pB3&^U]-^. g @ ^P8z!@ @ @Tzy @"pI'Ŧn ѕUՕl4xARZ c!@RO>T/^ @ @ @* ^+o @@AqСCcepI zqՋ @ @ @@ Wʛ7 P.wbQWWpI zqՋ @ @ @@ Wʛ7 P.wc̘1Ԕ +Ji&} ^G @ @ @*U@PRW޼  @r8䓣-?rI zqՋ @ @ @@ Wʛ7 PiYE ArX9c$@T@P8q  @ @ @R+u͛(,2%jFuUz9,1 @+ ^A8 @ @ PꕺM@ZQ9jkzzq @( ^cqz  @ @ @@ ;Ҧl @--IE$>x`j Bڿ0n @ @ @J*u͛(TWUUUQUpH @!`_| :x: @ @ @ @+0~IQ3dPT JRꥻRFFz, @}UnIo$IBTQ@"MX +U\+((((,,M'-@BzϹ=d&$3~L=N%@ @ @ @U(cL#_Hz*VM/ @@* @ @ @ @ ~(\RM=r { @ @ @ @ оwl>aur  @ @ @ @ @@;c7 kz=N @@^t0 @ @ @ @5/0[F]>+$!|^P @@9 @ @ @ @lзR!R*a @@9 @ @ @ @lEo]jMRM$`4B^x @ @ @ @ оfouOʫ޾ @D@Pc@ @ @ @ @Ҡz) b4%޾ @Au @ @ @ @hjjL}TǪ&r ,' @ @ @ @ lؤz]J$z^ @TT  @ @ @ @ @Ջ"_ w0 @@P3@ @ @ @ @k\E|./ށ @Au @ @ @ @:(E\StpM={v~#G @>y3  @ @ @ @ ,c4> A(9 @ @ @ @ZbQ?.riE4; )AN19 @ @ @ @r QPB.Q ` @@'; 4 @ @ @ @jV`}G_T/*` @@g;+< @ @ @ @jU`{&FT+D&kA0n @ꝷr& @ @ @ @)0f QP\>rŜzm>FMh9 @ @ @ @Zr$? '!($ad&Aj }!@RO93gN̘1#,XK\.yKAŘ1cbĈkqu;;OPx}])pook^+(>c7[QbFw[L @ @ @&F]"IGP'@;O Ix9ϗ;AXjU,_rPMvFZ^P}L @ @ @71J"_,&au&  @zu'N}WT_W*AK?{6^ϯW%՗Gǧmq1nvRW*ơ{T[*_e8cI~Y~uk%AIvrEj"y>W_}ϫoY47 G~u @ @ @ @zHD=`( HN\ @[C@P:I&ՠz>;SuUTOxxy~sUѧT>ydM{W7ߵ5w>uT8Վ4^SAk|/|<%gfW,/7Y=k GloKWҰIb޻zZKM-WзOR~eVu^P"; @ @ @ Г[M 7TQ'݋9mՠzʠ~}cҘIuƸI ]:dC[}4οlmq{~ccF }( پV;dA,{Ϯ.?=Z`iR&Jv-6 .> ,͎}c&[ӝi[Ɣ^ygז Ϫw&o"8GKe'`/WV+ @ @ @ @=)mCDZl2_'UՓ';ѽ:riOzZs{cmY/էM'O\G6Y] o1ri4p.8Qo~~xy+?rr)'Io4he/ƙH?w-'׫W쫷ѿuٮ4@?<= V,aQ^oTOCgxH2qL% ?2f{Uʽ pC?5gZ;>*F \ ̟^s3 + @ @ @ @@ 4&ǽ( \!~  @V@P:NPy^T?ǎh1ɟe˯+9l8&ۇKt-m>¬*k紷{ xb>ޱ_xG\{s>UVV鋖.+eRw|vӟs.&>cl.]Lyl'NG AwU[WMc&O,߯+n//?uL=JB럎|R#;^[$y#UP=B @BϏn:~kw4mk[`q;/9vq @(Oz]K%Aj)}"@J@P#댠z3EWio43d廿1nxzyA?@\|m#6Joۻ>}e 'ͶGo4$.Xlyݙ4D[տxc'hfĹ!۷zP+n/~W/+Vq ^ ,-T_]: @'tRL'ȵգn-!x y}q駷{ @VrP}PȥգIPZ'J @TX'=T$~}ˠ&Æ>-YΏAF1zɇqN[;)OuM}3F{dys;V-\VM{|}b [v9ޕ{T?)0?or_G ?IIߑ|th_+]WױN @6E]>ƛ[(~gGTj}6o1z*.vG{9 @ @Z:`RO+իuAꙋ{"ެѓA|<M4|{w6J0?+֪C޽S||{+<0.S:VW+wϹ䚸z?d'W{Zkֳ^ϳ gV @ @ @ @hlll')\^P݆9yғAev ۮt`ʡ7#6#ۮ,_:\rƩpg?rFv`HǑX(-Fw5ޕ{TWcq{W;t'W7>>\P  @ @ @ @M bR/$acӌF,`U3:B.Iu> ғA_Ƴ/[Az(.ߒ x>9>vorſx.;ӎ[nm˯>:c-}Oŷ..?bȠ'>#*{y䋳䝻yj /Tʽ bO> =v+V[}$~{1+-8l @ @ @ @=$0}P/QP݆9wiP}뭷BR;%k]תU_=XL\l6bXy )]MKx<~뛲޳Q+G>Xv,]I+ƌYsce2Ǖeߝӏ޿ՠz_{T_=ٙnw]PC"' @ @ @ @A`AՋaQQ}=(kxK Wt>6۔C|>yq|dPꍍ~aiӦN;Toի q%״}V+>z?_w[vOOzeɲq¹ECcsoſ},JXy.LZla$^*jP=md]^P=m7 +Յ5GkfoT_ @ @ @ @m% `RtRP݂9}=P7.JR9]A+W{MP{_uK6IzmfۭW~pM/NWsZS⇫U%Z㜇|>xtFJ߅ L5kkǹ١4@ͳVιqY!.ӝq}be-.O.q;R{mcZ:>s^$ˮIWީY;_8{vV%wm8gWs^)v̦q'; @ @ @ @Gƾ?>O~IT]PG݄9y?x :4 "UՓÑ~U*/X ͛' W†UZy jM1_9lPjXs-K'?4& )'xrt b፰}O= @ @ @ @m oIP=Ɏ䪰K/TQ} @;u4L>gΜ=ztVUR|﨡rTi53gƈ#!w @ @ @ @fq6JDNP3A蔀z6I/b,Z(  ե6*3r;n @ @ @ @.J"_*$UT @@  :*>wXxqΆ+TU߿ >\%  @ @ @ @B`lRQϠ>|kAT @Vku捛 @ @ @ @ KuD_ꕪڜ7{#G\˜KXo^7Z  @ @ @ @ vz> mEP U$|'@Ej @ @ @ @ @Z}B!bSyS{p{1Aubs >Y&@ @ @ @ @-!0n@]sPTUolll7ӣiq#@:#!  @ @ @ @u z( є a @@9 @ @ @ @pQX|46zm?FOtF@P3J!@ @ @ @ @&] B>rWcccS5Ul  x}9 @ @ @ @ @@پ\QX,D$_{9JT  @ @ @ @ @ mu$ՓzIP/  @ @ @ @ @t VT3O Ԙd:GϞ=|#G}݌ f^ @ @ @ @hGՓ]  @@9L @ @ @ @@ LLiPk@t, ޱ3 @ @ @ @m CF!KE~脀z'B @ @ @ @@ 455և+#_ ` @@;MD @ @ @ @jP1&~pr RROKv6U X5͆ @' @ @ @ @/0n`RQ=OVToQ @k0| @ @ @ @: $TP  @@ # @ @ @ @vc#v>Q($Ӫ*# @ TǠ=i @ @ @FYkC6^ @@Q?>IH) Y @`TkǮj @ @ @Zu:M$>. "!&N  @ +P X˻ր  @ @ @jZo @jxQ?oի}AAq  @ @ @Vku捛-ȗ IEepc/=Z!@ @ @Ԫzμq @A1&}h( HIE$.&N  @ + = @ @ @@ 7 [&CbRT- @T|Aq  @ @ @Vku捛-[prz>єoճU\  ,I<  @ @ @@ 7 [Ҡzݠ>Q(" O @` wz8j @ @ P:M=^H*TT- @T|Aq  @ @ @Vku捛 V,G#JӊŤzo7}$@6zLz8j @ @ P:Mƞ7D$khhh Ul  x}=ρz8j @ @ P:MTUbsbOQ,1Iw:3y9s-GQGԈ'3+V螆B @ @ Puuu59n&@i<QXRʕ+{&I!K; 4 @>jջQ+ @ @ @ZPQVg޸  @jH 3qOR"'^S @TTG @ @ @jU@PVg޸  @jhllkr]Ήɧ䒠z^PM @*TITG @ @ @jU@PVg޸  @ ~]?B. yG @` wwV @ @ @* ^3o @@oό9}+#"bŊj9s1bD5uK_ @{&_P{B @ @UAZy&@]11}ӑG.ӊTW%#@'I̹z8j @ @ P:MT+'MR!z"^ @@w$wV @ @ @* ^3o @@5 ԯ8コԿ>rŴzDSS '%i܊+z5 bΜ9n1 @{Aq  @ @ @Vku捛f/ϊ>sx#_* H Gc=Aj2AT>Htz\M @ @uAZ&lz. wu# rs{z\PL_ @jTYTG @ @ @jU@PVg޸  @j>O|ZM.,$ԜST։/ @zջg.WP}ܹ /ĢE7b6Ssmz\ff8w%p(OZe1wЯOl4x@4X/'X!F }Jk׉hco$ ;Z;r]cC޲rߧƴݭK"Ӈ_A3fī GX,w6X,iH=]bű`6lX3qԧ ]Kƿa1i̦q^;%Tmk+1ƻļES6vvl1< tGi̚WxA=7hh}及o{wѺ{735}ŘQeV_{W˒r5<]o9IX?-;cXcʓq5n;,-+_}kѧ- qTUV5&ox({nVxXtYg{~  @ @ @@uAo]ݸ֫ԷRQI'Q$UTW: @ uwP= AѣGR2TOem+̙3A4^w?W|O>}I2~]ㄥWķ~yc_Lr5g @ @N@P}ٻ3 @ H5i>k.\(|RI=ԓ_HI $͵.] OO { @k#hT2eJ <8 R\M}JH=rʘ?~k۷=vu׎.-^+ GW( fx$AM7'_l>ء{;/W7W{OOtGO_k"b]Y&"N1_}|ϣ-?ud6rz皮5w~m0UZE;T>?d;q] a)OƅK>R}A9ՇT9^Lldcڐ+'$+K}9~Gl娨+ٯo|O<|,韯}pʦ @ @l` '@Ԯ@Z@񼋾z1 uIV'Ӏzr4Kz9~;G4}s-U XULN @ x}FVC=&M/$ӐzZM}]?)( ӰzGcwhϥw=TwoXg;ٍwO_|w/ Ͻژ{Gs4L*WaO?6 藝m<̋oק.3D#*ˏ~{K9|_om]ٌh#k",c7o7ߕ>[i4ʂE7y^;Oآi[-U}x!^1?Y"5[~t|İdOVT_*I8YmyK7M|un;ıI<œH]ӥr=R+ut!VlQΘYۅKCĄGy4/w`0vlKiϪ\6iHs#+㝓*g'Zybeg%-8ۻ|~}c|nꤢϔ׋˥g+Ox"q`|կ ZVAEI?bؠ娍bynиVy%7$TrX۴kH/_xU̞>˕ p҃][W~W; @ @ZPQgݘ  @ )tǙ>8'ĴGO1rzns\z$13'I= OЎM\3}26ٸ#ӠNeȑ#{GhS6YzgwէNZ*j] /ӠzCLmZq}_pŕޓ漏7ʶӕ'ٗQ;O?^lE|{EcdU٣oOw&rڡ;/ovGiCWrO\wC[Q2t?sOwĐAV.6*mZUT?f*W/m Zc5+J~@F7W{ƯoG9C''.1C[o1*:9}ĥ7ޙ]r)\#{&ܑɕ:+#oJS-<0>}ľIȺ?+Au/miPvzP^6$Ne6V̞tzJ(V?']cʓ/dw5\׾uw)+ @ @jT@PF'ް  @H3i']fΞgqÝbZ/P 'dTO+_M/I@=pWk^2IENDB`django-import-export-4.0.9/docs/_static/images/screenshots/import-form.png000066400000000000000000011331051463433610200267670ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT(7ٓeS@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u M웙)(ۿWVڵZTR"hQiUŒ}9;30{,sU|f7jX7oܲ)kL[CoK֫Jۙ|t[]NrxYoB(k;u{Fh~v,szaݲί.,Ya܍2vJQU<6]ѕu\7RN[@5Ftu-=v}AwMK=N`RlէY$ox襦>mowtA*~rE?rvbGhP Ssz[,G哷zVEKN#(z:م*RɌrs>eջ#7^* VZ6,Se6wЛ:װkrEA>u:s@޹QQ9H@8`r&V?q|1]?Yߙ*n?W ף6?j7П܇L#      p( R yqNHU=^UQRk;NsA a՛T A쒮@TXTo3ogɔoubAupC/O0xaUoeHDMUAT@#붋G+TוGܲX_W؟bS}[Q`OoWUJR+<W&K<'ZVP׽}-j` tBWoסmG&6ـ>ku^"ߪsf>Ae_@zKˍꡄS[xsʔ#K J[o*!ڸ'X zGU >@@@@@@CMcx{;d P;|z!௢oNzI"P7Lk ut98Y#tuM L]Yff@깪k7&uŋ!MOd8ԛDzBMUE{wiݸ >G?HmbGHPmly渌va|[F9U;̎+(:OXI^eGfq@˙!j%]{)|le%slrۍ$ 0{Kn@\VsW Y?6V@TEZ#/~]T%D]_*ߏ}'      @Z3שzv./]W+펉w.8y!@i&#}<3nQ,A3NlqVߞ)ϑًWI^~9wWc0=o#p;[|Ճzv{aaW^Wl)\6DFN-㲤ǹEKߖVANː'1>o&Mbcqi7+ڜlY\yE5lej]>6GꝙWD+[U(?SU*ykBdů]Eq #BTB6^ 9S /u&[5 W>&1GY7`.WN*JPՇosmqgUzpUBԵqO*Uۮߏ}'       P[qQqcb?Uط?Gv/|XJDXH@ |eWQtJ9jؚލĭWHLDQsgdYuffIk꿣^ #>"PY*YSAu^»/ Cٽ.}?NLYT?^4sne9_Dth QUC:]fP3yY0)ߧTecTpk++wS \7}|(Y٥h ~Fhտ|z@mq 1+smg˅mKGAx ʂם)Tc`C4͕nʃ ;QumK9ʮߠ~?b?Fg /       @m 4o@CXUp;!&RbI8*gK?u6wuaY=Vax>b%,?u|5SsJQ]Wb?9('\졋7@@@@@@@Е]&͕}sQ=[?4>U@YA#U@Vw $}OEɹ'N--i˼ek$irٺV{W0>ZQ^qn W5.[T@%2iNOTU}Vq;:— dO9ASG쒈u7h3RU&Uy|6?Rf*:km-U:eHƅuPjQ^P]oCGږn˪p5ɕG.MDꁃ%W22*ȣJ_KhP=[ \CJT., w/ȋ7l7젺>]Ew GJ 1uk@Au<}.i[<j+:\v؎m-TEPwQ~S8 uۋU&^X @&g[ף'' SeZY=qiSڪ{= zX GU}h4          wGnV@P=P<ݯ&>^*Ut/XbT mj_K֕ό61cy8u!ơ*z_)S.Tդup+O-քݬ׬mJnfAowtGKܻ \_r~_Ҳ2K1H@8`_)C.iG}7Y9od}!uВLкH{= zX!Gu}'         "vBӶ+ lm0rHm$D|{TrT-!sW.5l &r䲓٭ADǬ_)Th^nO^s1Vocvq|FFy6qI2ڑ'&'JvU[5ʑW]!ߴv!          @ Fz bے& N͈+m".<_^ykMcuTxe=ކ e~           P:>Fܑ^qui5z`60*Om4( ]= wVo;+8wQAY+CeY%y%ӣCat\::Ęt[ @@@@@@@@@@Z 9+#v'kjxiS9Bb\w8-t9|ʝrLb\^5-NQH#          @eQ2Qî >V&w֗Tߖg?}փ=M[^ԝ0xnV^l @@@@@@@@@@@ 80=xbSAuzpػdP=uC[n _ulҦI*9|eY]W]!          Pb#dWS ٻe}}$+&;v; q*~D\Dx 6"+/Y9|90@@@@@@@@@@z#w[N'Azs9Q@@@@@@@@@@@ EE/otQQFE$f@@@@@@@@@@@z"- UQ+ Փ4@@@@@@@@@@@jX &"L,#TwĮJTad6          'p=o#bw9D קsE@@@@@@@@@@jZ .*BfzWnJ42C@@@@@@@@@@꓀+2D. קsE@@@@@@@@@@jZ 62Lf#(*>}5#           P?tEYsG[՝.JTWD@@@@@@@@@@QQ}qExTm6* k6           ]Q}хAuC |TTD@@@@@@@@@@T;Zܑq⣢f           @WTwGxtʩ>Uau            EE/sG'*Dl632@@@@@@@@@@@/+Ϛ;Jʨnw:fQQJ B@@@@@@@@@@0 .BP{@@@@@@@@@@@:>kHDa]sEᾪo           Y 6*\f-8l #          g-p8NҍՕe<           POb$9}x#BV}>^@@@@@@@@@@@03ˮi#^#l@@@@@@@@@@1$H8\N)[.' @@@@@@@@@@@tE$D|>A+2@@@@@@@@@@@ UQ=\]mM&@@@@@@@@@@@03ۦT           Eq1.=I\;^$           @tP=9uxCbkץJ[c           @Mm@@@@@@@@@@@|1Sn9uJzu<          {]Q=EUTwGtTw           @5bdm FmTT(@@@@@@@@@@@z.:- UQv]            PEhIɜ)TwĮJT"&@@@@@@@@@@@Dcc$%}#bw9D sc           T] !.FӓۡR>Ud$           @ Wd8]vTT@@@@@@@@@@@@| (*]no           Y@ՓUEu ;]NR'^@@@@@@@@@@@|ldWGNUQfzU           Pb$%=0rHv@@@@@@@@@@@ ǪzZ#=p;GEꣲ@@@@@@@@@@@> A TS[.Tau            $ڴ .vz@@@@@@@@@@@ :"]D~>@@@@@@@@@@@A$qGzv#"@8qz+7#         uAg$+-\F qƐ ˾ٕo''{ouaJСfZ\.:4n/uOeLK)Y(3:(gwK":#P3_;T /@&~Q$^g.A?R~@_833';          p( i?'*Tv]œc&^AL|0 5._,&ko29(³fM>[wk+Y{˘(-P2[NvMbGɩ'1{ [[vg+Pw/8ݙgu8@@@@@@@@@!TOQ]q:z*up y̝K3s?q}˕_$~6UFМg5x?r[;%g^Fvn^}G>'cAP\5@@@@@@@@@XTHwGn:^T?ict0xegj۴U.윜2yF#u [3vK룛KKq_LVhU;wh*7 /_"KG6nsO 862wgc~mdcn`M(A/)ό|˜/kA}U[cUZF~J\rQG4hٟ# K?)ڴ6ʫmrj6 VV]'~su8Р>e>0mow?S[XgU;wSw! Tts^QUۨ -)ƽU~koҢY3c#ƾ)W2Ehؘ_zٓ%G6m"Rbcbdbjټe9&22BZ7L4^ñ~FYNveOn(1Amy$&KAdr٥~*k XL223eێe{YKCV^ii!&:Z6l$K͛I|8e]>0 OIC@@@@@@@@@tE[UTW\[.Js+Vq :x9oO9Iezf +ߩoɦ_Bc7ޗ?Z}!O"_v;bovm[ڷW>s""z ~չ$ǛWz~VԲV @@@@@@@@@JAݥs6%ʝ頺 nE-/?_xzPYeM0{\tfVtr]ڎoB :\^ӁLJg+Kq?/1c^[,XczY*,C@@@@@@@@@z1$H8T1k]ItPɞw5o}EE#5Mt.!:@eŚ0OV#%#Bz"yf4ٰe:k^yS溒!&c .VyXB Y 8c}ƍ{}̛/}0ٜ cꗫ1-|y>Bf2\oHL?n,؝)}fZ1          ,iJ.6Ջ>e w2'o,7<_U-(ÞxXt@n0UdVUoo1&˸*EgO~Ӭ}J z.*H5?8pQ`5ӦQF^/߰e\ޣ(`Zoy:{.Tu)_M-{[}>\푧j 'BIp~JUNC&e6y~+f~ߍ՘ׁ{cXf9A"#         P5#>Sܑ^qu.z5TV֕_|2CW Ů-V^1>Q!/KmHZ7X/^^Ϗ_1QrӏiT>}E='Y@ͅj©09sjK/:_sYsػ|,ݜhB]3l߽_+*RẒϽI߽1qˍu֊֠؉~^jddP}=c"z9 ׭&lkc cж;Kx z^zy.oܺc:D%.&̦-[d+cdvv 4 ["wzAc6ˊUK{OITDweXC )c^~6}rhmr҉'~5[> cn0ͨ/mVWMoPr9OPݤ`@@@@@@@@@j Ⱥ$qExĮTTTK¿*}1+[+7ii׺11~.w[_SU%{=?B~m1m C5N>Tj֠5nђn Au]]A}./ $N9蚗'qW_>~C"Ì.:Um|}qcδ ݔ-n$kgLrm5ckP}&zhqBXn*n٣\OA5n=-=.*6o<7-wʏs~~EI`]tƍ_tc_ĀhP}Gڮ5n [;yIpB.+{;~Ic'Ky@nX6q˜d_oX6weђƴ5^97DP/'         ACUmtUoc5D ڕ5Tkn֠'cKKzխӯW091F/3ӁT?S k>q6UoO4ʠF-[o 66~6gynƕz:p| Y:|c [=zӁ\~~YqeAu&6O^}|xo9Wն&;9{GC嵖͏oyjRcL!_~ZT{Tw2~WYW~|sRew&}$_ O=K6..,Z\lGzJ͌o[И&^.9+@@@@@@@@@8`ђ>Sw?HpDGFxz^ؘ$ ]ՠzZo<ԧc%kR}*[pUK]htOzo,XgeC;1dj3溊&/n oߕftVs߷?[:\EĽZ#7?1ȵ9Ԍ kaO<(!uV ۚX{c,'=$j|E-&*Rt|p2vgEMDK^JTd?eyikxݩgL|a=er{- 쫩2˃JxXug咱@@@@@@@@@&*go[lNR'0vM_s\zngc<[ ㈋&jgYv1HAfMʗod›i|MNޱFs_~;MNќdsN쪃:^Q;U @uݏIrd[E~Y^q27;.!?Wjխ6Ϛ'8Flkc wh#Swˍ=);R ^([Azv4oXLz<22dz@Fff03A5))21e{XX2Yc]@|~Mҩ*GFDK>;?7eٰi1         Ԫ*#bw: _A/9O}־rO![ەu T`\#* uiVȞ2=I5E6LF>'5Q&}1ȵ9Ԍ 1y iox{?T׶&;֠zǫ\*:M?]Cºnz~ B7]}%ˍi} ycQ>tv rb{2G`WeM+ke]^'W*u^u\t9-۶Ӄgu$\1?{ >J%W_)sxOV<:`U }䉧dM!         @p q16uxC*+v]L]A# L]%sO{g1'OQ9HAu^o[b練ߐ~eλ].y+ { /g}*Ho OzPBCnk׭ƕN>f[jlؼͿON= Qn9?wo2BΰQGt(dTc>k;JƁ8/oW۴՘mM|w 냻HS͐gGm֓ 6OxSs^?xлMrU;\_ \%}ͧj>~,ZWe\_WtWF;c=n6̝/}8٘ Q؇-{3vj4Wi GGEg4{3L          @`*Q LP=0;ɠ9NWy|~ּ{rmtCTǾx?la!!ҰAjFerTS^P]o[WDו1~6f?wtsc:O`Ͽ O>/C%@ڑMȀ>]|Lp &RP]T~W4E;wʠF5ĶmVX>/?OVM1zlXo.99`y6׭(}5U{?O@@@@@@@@@@|ldw ;l*h#PAu߫/9OٽCo}tedH:Aup#ݼib.9 ϋU>ru@T{tNjЦyjeUPwU5p[ޚ(VO ?P1.TE_|?aX[ul۩wz#-^Q=EWuM 5qA XTՕ+ǖ{*9٪ٴY?Rչr۾s Qw[DT{v = @@@@@@@@@*P9a*Wo73Do=ИVXa7G OO2?z=pnБcjc5fM$X_e~8c١/Mu<.W/{Fg*߹kEW5)2Ϛdb;$_pѤܼ\}b+5=9Z#|yz'i0Qrrs խJL#         P@B\$';+C}TTDEJ8 SoݱKisk*ٓG9uZW~ց J־:xuV*vxUE֩u?;'s ᰋmGJjt>Ԍ9ԄEG䍛K+;q}ɠ* Ztxd,"ꡑ-P_Դ4-^3`@@@@@@@@@z-)i3"N]m#5(P^Pw@@@@@@@@@@ ī)'+6UZ7[.Ti  ^=?F#         p zVAu˩Rkq#uNz$         "-)3SUT٨^+]rƙ'hzp֜"         HJzRaPչ+@@@@@@@@@@@!iIիP@@@@@@@@@@@1*!*.v]4@@@@@@@@@@@Hi3"6]vA           ՓuP=2D.:|"          -)IGP=hE           FP=#I\nq8TT7e@@@@@@@@@@@@|6ènw:fQQJ B@@@@@@@@@@0Im!ν           Pu]Q=9gDa]ӮK7_7H@@@@@@@@@@@,)+#NC|6A|Cp           @ucUP=#Iqjsիx@@@@@@@@@@@> 3"vT7          TWOW.ڜzuQ          gIIOw[.]n           @zJZxUEuC|>A           ` FKPAuClAuS @@@@@@@@@@@tP=%}#pxA#2@@@@@@@@@@@H >.F֥WԿUV֮K7_Q@@@@@@@@@@@\@Փw,P"A           PR >6Zg'#6Cl*4b@@@@@@@@@@@ XUQ=C\bw;UJ]ϧZ8]mf#11   deeIXXX        Iouʼn wíʩ:Azs9Q@ٳGxC@@@@@@@@]m"6C|R@Pp T_7Tߐ-         -`գbs9fS5Uu_]:e`ujp,  @@@@@@@@@|9vM @@@ T>@@@@@@@@@*8 ˮ6s@ =        T&pemnTW^@@ PQ         @%-UP&vz%^F@:7         P@ۊ[vz^E@s         ӵBrJz%^F@s         |>i*"BᲩ6x @0mf|&&&"         P1]wUTǟN^R R"EEuյ]׺"?!׮ RDDN@:92ܛ7M9S̜y]~w$J؄Xr @          PBVP=闠UTcY ڵkgP@@FF*Wi#        @6gvZ #!Ċ]   D@@@@@@@@@ QS#T~GE@H3g&^F@@@@@@@@ JTիF@t+#c         PAeKBD)VlAAپvZIP/@@2@@@@@@@@@*!zXG(1R!^%*7 e"@PLX9)        TAVC;Jb#cWG-! @GJ         @Uh=4[kkEu ի@@G"        @huF{IL!1V5uzz- Jz        X%VHqx.p  Bz v#        GZ(q +Eՙ  @ d؎        x <$N2ACսuXC@\],"        AZno+R,TTb.@ի@@@@@@@@@ lVC:H|bA Oz{1 z@IDAT       @K+X'Ibc=TT?:FB@ @P:V<1V\X|'tk׮5ّ<=B@ 6@@@@@@@@@ IْP3AbbAj@@o!        Z :NSk'#T2;w}IZ$%%% A`޽2o<ٳgmV7o^W8pZJo.kiҥK3>|X߁ J-*?wArr         P)4jHGSQ#EիjE˗ڵkMH]onRNСY>K,~\,..Nj1a2A (!3gʎ;@>&=z:@C@@@@@@@@P槷Ĕxǚ|p U׭[XI?^mٲEPZ֭%==ky̝;Wv-ӧO/-;+V… d4ho[he˖ŋT[w%i1g@, UX7AFFƍW@@@@@@@@@Kӎxʩx^EZ6li~&Ы7xֻwoiذjkW[m۶ξ\}ϸ8SN7h891=kӊƫ{o˖-СCRF sNmj5k֔$yի'1uZ~&~g3'=·ouo=^_{fυQ m+PP~c:BZs6,uCXERzT>        Q&ח_~Y233MTU*~z={aoР4Hb `7lP{Ytf[m۶~ Pϛ7τG4Uڛ6m/M6mݻw7CYg%|ZSÇ/ݽ!t~V/ߦ?l`gaѯ_?Y` ۻױj5;7)Sm͛7Ν;;1v'o^"ٟj__Xm5-Z8/2lR:uk=\KAzlߦ/Ä}CCоt}4sm )J|c2u|\yyXF*ZzE?        E ''յصDTP]O4< 9 kUpڒ%K~صCҦM_+Ru]v ;54nf ½ kZ[s}+V… Kq߇qlX U~y5/ԮzmΜ9n:{ħf͚֭+׊N;4!b} X >:|2xO.[l1;䓥^zf>FZ]ϻfGCʽ{v*T i{=VV[ i={e/hnzNtu?ʡC漡*k']v̝;9VVc||1*ԹثW/oB|fΜ)͞ qmLUT13f̐[a9hTsM5ݵk٧sC纎K7MG~ Q.@P=C@@@@@@@@5ESRR^EuUଆkP[^oZ\O8n߾m۶D7ܭt.]?6c 6LS;^ +ŕ8nӥm܇:١>}xhh_Ci]w߇ޛ5do7}6ol6I=rPtW}tLiH{РAfYhskN;8g.``W}p,V֢E 9ͧ۾zk8mԩ&3,qH @AuئM32VOi}ڴiڀ*2\' գ0&@@@@@@@@F gff:*WQ]5h"Ѡ }t֊M4N(?+f2h$ûZ \jBāsZ|޼y͛KΝeŊpBo }@osA@j=}ݻ7*|ϫy k2'ZSO=̬O?HuM0T׊+sRk֭ya½?rE՗.]u]/1 ' ZI^Yd&4         D@NNjvXU2n? Kk[۷oڻ̧h`8==NJ{1uOi@A!C8o }ݟT?t|Gra3;ӧ{1iZvsO:$iܸӾݨz|Auk'֊ZY]Vgk`~$;v kNi$soח}z]B(+ٸq9_~Rnݰ|f̘!fյJVK֦MСY"T_z|77lPzm |_!m9Y:DA(~8 @@@@@@@@J ??յzQQQծH^+@kpֿSY`)Sd׮]0y5$!!T Ժ/ڃ]{ŊpBp e򩧞*5kִwy} 0@RSS$4ѣ8w=Auɜ9seW_6mU}8~޽ QsMKի':u2]Ϟ?5!@e ^YD@@@@@@@@;vdffյyuqE}qm3[nu*@k`9&&&ag6ѵC.]Yfo^/0}{ݥQF^!^w%h{DaÆ*nc nWQ]+ᇦ|RRy9_z3(c{]U>tW^o׮wqT;w :8Eu YDA}4 @@@@@@@@LlU*vM222_p'J&ML_w(uұcGsdM+kqwĉf$P|iZpᅲKM6o<NOO7A|w_]v;õEP]g9U]%^mPߜiP^y||hy 6wP^kUp=W5|~tG*k^Cͱ˗wߦ]M~A=Gt{.@hS˜@@@@@@@@@5m-<*T_f Y+ٳԮ];; $׶n:3gYS,?V… eʕvwS.__;x]P}Paݻw˧~d]}Qڷ5\]XXh6izZ-PZ(쯢Vח رC6nhf4Ap,gΜ)7o6kǫʾΉ ؗT/tp-UP=ӪӧO7#Ѫz2|oeժUfVJB=Çˏ?(۶m3_HvTO?颴jJj֬i^KUV-x<>@ ^@@@@@@@@رcEsTi kU+H:t<; jV MvVR׊vn`nFD+Rk|׮]zA@^h}yA_^nݺ>}P{޳c7>t: ߻w鞐`eT׋-^X-[fϗ&5m= RUw5ĮnmPwhKצo=iHj޷6ZI>ܗ24!wX=ȴiD+k= ksWu}iӦHCLzrb@@@@@@@@byyy&yRW>[vP:Ӑk׮]%..\4gg.o^ڶmk}W&Ȋvf}+Ç?r܇ [n-;vtwqT't8ݻW e{YbmF5oPzFW;mZy^+ЗUP=9~wb% W_ҥKS|R^=/߿,kSN1٭SN|"e!@P,T9'        TE|"ZUTĵZVO+\Fal޽[~GSIZ;AdޭA_;YdggAt_-6l0Æ 3=PӪVև 7 uCgMtgkB֪jNvS:x/Lkm.G{Oz=9۵ Mໟu@ #}?k.qСrg{w` @@@@@@@@*@NN)PS-<]T`50:         ˓tx<CU/e˖9ow[Ơsݺu`P[l)Aǰ P}ݳ'^vGsfG1        n\TYTwTeas۵kז͛VT֬Y#۷oСCTovݻw1&&&Jjjԭ[Wի؏ #@PݡA #       XZQ=##C:@$@P=̱o'~솑<AHjr.@@@@@@@@z 䘊vlV/&3kךhcA@j$@Pve3f)bJΝ;eڴie֭$͚5,ѣ3wrJBVN8ԩ@cоׯŋ{U=4h@4i"z2l۶md֬Y޲e0:tIRN`@c^jL>]6m$j/={ݻkI<(&Lpί5]vκZ0Yg@@@@@@@@_\'NEu_@@AuF5s9W5j̞=[~m9t萳ݽТE ꫝ_{5Ytr˖-oDo 0I1!&&Ƅ/"'vrm[o%xN]t=oڵ]guw<{Ȓ5obcce̘1t        @5Р8TTF@Cm;_~r饗ګ7Yf}qqqҫW/iݺ}v;w,Yr*^;=GBggϞZjjEx&$~Deu1;'֭+ڵ3wuj:~6 _ܹq3;I4@@@@@@@@ BV֤BPݟ@@KzMurw{TH5jWXߥKkKŧM&oM5jd*;@שּׁ,N:fY999w^g\ vn/ &do;V\3fn?nWͧ14~-8]F!}qY@@@@@@@@@ @^^Zz(1# @ ^v4Au~uIEۘj[oUeʔ)ήgyFR6~ZJz)V"MUGi{DgV'eήTE7YCW_}tz@v        )E`$&@@z T/^z׮]MP=h~~˝w)m۶u}|jر7ay lhwޑI&9{ΝuUݵy5pުU+ge˖лrE٫%w]gt؇        J@3<ƍ Sz(1# @ ^v4A .@N;5j,Y􉍍{Ϋ;w4q{^*WK۷ooN {?Ƿ^zɕW^iM]M6Y VU_b陚jk]o^CfTG>        %--MLG)v@y+((0\v.!p=@@T/P+-Z:W_}Uf̘a4o\ᅠum&3BK>S|rsLyͲo@7 < ĉs9Rj֬i}zMv8z8JA@@@@@@@$<TOII1b; T{e7JTjAwЃ` [< ͚5 uJg;#&M2Z\֬Y#?YwymYUn=Uߠz8ny|"       @NNdeeUG{ DJ ##ÜqƑ:e?Oe ?RN5-&&FƌcѢEdy~aiڴjaݺu裏:nvi߾Y'        PT4AuD}E 0  Au/T3<#$ `ʔ)2~x / qqq2|;v' 86m$ӟn7tf        @9 ɋ/(JHH06Nr\@ }$ QwTV1/0a|%))I{9?w7baʕu=H˖-:Au@@@@@@@@ +רQC<OVT/M$ T#ؕ-~뭷JǎÆx/45j$=Y~uI׮]>9s$??NPaa@@@@@@@@4עڵkKqq1A x\@*A?T8p\tEaA?nٹs߶m[;n3 }/ +"3g4]cbbdo #H@@@@@@@@͕tIIIzY!s^@Z#<+[PN:;`"K,QF9]993~Z-[fkժ%_$!!hAC޽ti׮qNH/29䓝s        @( gffJbb*>:<+Om pJק &ÇzO'xB֬Y{ᇥiӦ)SdСCv-G9/߿~,A77\`@@@@@@@@999AE>lF@JT/Ar*cP=66V*޽א믿.ӧOwnZ.g]v%=ΫfϞ-/>|37Tsvmo>sΝ;ˍ7h        @(Ό7tLNN#TT~@#?*[P=>>^SOO?]RSS~I}Yh-&&F|AIOOw _~sN;M֭l߶m|'g!i`Ot±qe]&}1c+        7Au-XTTDPݏ@@/^YlAZ^|E',U5j$2޲eK ;K8A+Ϛ5k6lha͛7;KJ&|A_2yd&&&J:uf͚rw{c@@@@@@@@رc%33S4n@@?T5j̙3G޽/"0`@~Z!}„ ;@{g;֠޽{塇;w8njSb;@@@@@@@@ɢY   @`a< ?9ù+C qζ|ryꩧz\\<3˔)SL.]_wʶm~;9餓c?OYh8p Z {2x`le2uT%KϞ=MYf%>{we…RXXh TD@@@@@@@$kr3III&oAkG؎ @ޝ5nܸ\*N PP7m$֭3a *PoSC[n-[{QQԯ__ի'V/Ϧ7[5v9        PƎ+ZQZz%{ @_zWC+z|\@@@@@@@@h3յ(Ç Gb<  }գ0G@@@@@@@jҤIINNzU{ AqT@@@@@@@@Q 77WMPPQ=cB@ ]ϣ+Ah~: @@@@@@@@ 4)IIIKP=cB@ ]ϣ^D  %4a          ɑ,*QXF@ T>@@@@@@@@@@Dꙙ&#TTgV  !b7        Tk"y%##CQL& d`2N>oz[J&r!R\\zrjfgs-۝'vl%;,l](Μtڮ&Xc9lM@-5 erf6X`}/m8|j%'Y};(oidIKfҰNm9x,[Q(󗭒?Sډ>g(v|`ٝ'!1|jYbm$zsĎmITW;E[yNYn|d=[w<}-|}uGNmyӆ{>yyA3Sy"9^v_Cw+[v얥k6Z|w:I% #9K]=aYy='}֭"g[?@`/Ù |% zPv"        NE5jʮRQ ;{=LN}` :d+KݣOw>x9ңCKg= A_hϐ]ڛKٻ绐*S}.N}.~V;E&>v?u.hɛ.2}Q^&qr-|z& ՚X/${+J*ɳs6ǡjӑ`A0QG>OoV_gחg~6sRy Ѩch~?r^rpՏjjכ*fi%2ݾ^ D%iE۞}M?hɠzDrs~.ge_[ۏ$o,`xwu7KW]̧{N;4O'W߹sO%qWlT/G         @͕tIIIzinD+ֺΖW>½k9RAuYn},8ۿ4Au|}}k&7XPݷG䬾]Kc='2UuC9{#s ZIW wa+         ` hP=33S&*2a|>v"p-W=o;A*wٚou ʫV}mKo|FWSe7K䙷>4˾?_ol޳w߾ ?Zߑo/|z<yskfx4W>֝O_*-RA5xsTwsV.tu^ww)2I\ WLNJ ZKw҇Hc }\w)\[w_&(w9 LPݿ [@@@@@@@@@[ ''G222n٠N-wզ Wʪ={GYdqzw+TɗUdPq-L8[dz~6êwVQF o_X}o:o~b's[d55Ndɛ.5 俟 8 ?sҤ~UybcbL g^tHՏ4u@Auw }kUnm|EVl1˥w/ˁz$zwd_w 9u֊0K8o ݼ֏v.O[2Au.lE@@@@@@@@TXƍ'M6dzsSzC#j٫7,aYVAzI`wS9f2jYZ]nTz9Y`w@IDAToW3!z{ ?m,{WO]䚳Z cޙ옔f_r. ׭" Sz"_< k9E>~z?%{ϣ LPݿ [@@@@@@@@@[`ر)TFPݖ &<}%Y}?O,*qh h Abk9w?ԠaHkh}4k/݊ Ct3nU;ڹ׍F*Pz|Ly ?DFϕJ6*yXjo ~q۬6nnDPXL#9^To7+n @@@@@@@@x0>=R jkbvsv[Vyi{P]ATתYM[/Xc?ޕKVVhEu kTe]ƛ!~hojT>֠Fr{ TOoXW;c8*s;f4?N\\V$O6A6y_9s;FHjJ s4/ӎe.[2Au.lE@@@@@@@@l\Ȑ$%n^}zIht+#k:TvvZ TvG{>Pe55uc#PuUY!~ws8յ ?fyBe+֠=~8.*-&/3\.]bFr9ƒl~҄i]T;,B/<\pJOi۬Yg>Bs%yerdS\>ֹ>1+n @@@@@@@@LE9l[ f׎|##]1\N:yK^}aG]k{ߜ&O:lzde%#=;cZ˪}Ԭd6TwW e<]Rk&ˡ2bfZAp3oMi~I!RҘ%5MO,k7m :?^2LN>Szɹc:o0oEFH:*"֠c޹gL,i m7Ok(g"V]"o/̺>ۇ:,~nVqF_9o`OLH$zߟ5@չV&PsB,9Noh_v>0k5VڠzL#9^v>"]t3f|ȗQ2ISs_P]4O4}yWvwYNO,*Ȃ~7(RsNu^}T>@@@@@@@@@@Dꙙ$M 4o&7@]v jPۓM e+w_voAkT`d8-Zƚ)&ms8յoVu/E*"`>?;V}[囥?9z7?4/)8;}ڸie5ҁ8@Cu{=]//Wo 7۵R]AHFr9=IKN4/iYˁjה{r__}_f}Hs7~ˠNpޜ4S9yɹ`_> a         '&·棣RڑoTNB]8ČOZNm9&H##,ݭsGXI&V[>,r2KMw?*ڍ&O<\GȾZI^+j˱έ>{[e ~wn؃U}tda͚q/+ _|z/9Ckq?=1?1,[wR}WKM+ N֠^K+_XٳwtO;Wo!a ֒qt+yڽݯo'}VӾY"ol۬wF>oݫV߱PFX6HFrwZ~XA&N4'M#9\nY~3 {N5ʙ}8}YDŽi_Wh\sV5b?        Tw\TYYYX0#4 kI{ eźr  ,@Z)EIRluV}/(myjח+;eͦ~C^Riws9zdUxգg>1@@@@@@@@N!&[KP=:B@( E         @T 䘊)))f|գ11(@&4         D@nnT/.. DAz @@@@@@@@P@͚5D3:Q DAz@@@@@@@@K@+7N6m*IIIOEzD@Qz4>Ƅ        "PTT$iz<Ɓ +@P=z #C@@@@@@@@˓4T#Q  @4 T@@@@@@@@@ rrr$++Kㅠz4<ƀ Q/@P=D@@@@@@@@ (**qIFF$&&Tg@@ TD"        @KZZ$%%O*d$.ZPP`\;=، Aj         P4g)))f+3d  P+K"        @ɑ,*W`@@BW(?G@@@@@@@@J ALT*W@@bW?WG@@@@@@@@(**_|Q222$!!AGbt  %գA0 @@@@@@@@Zz5PQ=jC@ 5      |BB%$^EĆW(@@v@E ((RDts8f7!Cvʝ ϜA@@@ 9Rʔ)# t<[  碓]ٽ{yĐbMްa$%%),JNNSî8|䬜~Og7sHv~@@@@@@N ÇK $!!)c/@@d Tp[ZZZV+G[=dʕ{/}ҿ >+Z y,p1ԩRn];v ɇ @'4?nA 4c >vI>z>}*['#m۶5|Ϲp[ pݷPe='os#8<|75k?ٞl@@@@@@U@Z1..bU+=7֭[ܴ[  a;ڵM6eil߾}Ͳ7x .]Zf̘v*YϖCP{q3f4hg[ еXo߾t1$Y=>Vm4|w޽{=Ϸ@~xp6zOg#uv~D\?2w\?rXĮ V      @FaÆIŊ)  o]2m۶y,*SO=e 7o)Sn3]?4٦M9t.\؄ (];;~xIMM5ǡׯSZ  4/жsh_r<}UW]e Q^=0`@v9;3K;Ņy5jԐ/\U& 6,V({:-dvs$皠zdւ      @fZ;}ԨQR\9)Xy13Sc> yꑻN*{ɰN/^lk1999CZjɹk\_'ɗ/4i$öceѢErYgIbŲc:ݡGnڴislk%Pp7м@<@8qB5kfvQأGs}g|fiM7$+V0cAlQT,b =}[3;9sMP=kC@@@@@@ !CL2&b  ` T {/"\s%>&Pp7мۣf3Oj&L@4a}J$5A@C@@@@@@ ZQRJ+k [;}.?So[)Rkfb[zlٲTyX߾>WH||3&n:Y~TR<)**YFvmMe}5z͚5x6|-kCTlYQ>h^?;rH'/˙giVnt]7nM6u/=vGGT%&&g9ݷX)P3p_VwͳսOrk`r)]Mt}jժU+]Lԩ#o/|ݻW.]*%JjժyM+{-ZԼ_/.g^Zn-ǎFM_~3 ȰNv'==cYl9`/=\Lްar8=='zM6,ϤZ(s{;^k=fdɒRre6ؠ]dʕ?~*T3      L4I*T@P='f# Au" GܹsECvp魷*mڴ'9~\VZ%kwey}{WDCvӠV `t}^5|rw760p={ȫ*} Bi([nݼɓ'Ν;M׫Jx Lx{y{;n5_} 6̄3J*%:un= ?tM۷̘1LW E0qeIj:n8l3}?`/B+6h߾`ˡnd?}C9V=Wm۶_WXa-Z,裏L[;0Á~r}̹3f{wݵ^+~y}s';u?tX xb@@@@@@<+ObZ-G;%'@@GOljP]guA O.Y| D }kn? CQS-\KMMݴ 5pw_M=4wͽ~ z|iw5ҽ>|X._gyk>\y啢Fw*\v{ǰ+5di7 >C>>եK{Լ? y >7=ءt{M?s{tN5k?ߵ(hO^N/M>f}i~cwmfTPoԀ~<{;7ݽnk0]߳/^ om*w; oMuZ{8mOJ(Alܹͩn侚^YkX[nqn^VO{VPuN8bfAu U{3T'G@MM^<̜9Sz)77ytb@@@@@@<(O@֧=oTσ  T++TUV-ѐizDݙv(-66Vk ?PNCͿz5_o.YDL"7t{p %KBVp͛fBu^?TLv7=cuZ .01 Z!?Yz4ʼy$^j9kh~ iR2ds9A"Һukiذh^ԭ[ˡCOV|jV}iEx k]Xu , Yz5B i@-/|*jgx^zug`V4צRG$~3uu\+kwׯӴ򷆦m߾}&a3Yøv W'hРAfVתvd3ѫ{4 ;`*:̮ yڲeYDCw7 >&H7+*q=71h_5m4gVժנv԰8Vwsvǀvu;kSoy׮]48ڭ[7sЩS'6>cԿ@7k̬Go=zGf׷}>۷mcSѦZϫ^v.\={}=yg@G#qnnN?GoFpӧK$}>nݧ ƍ]7!ycO\r)%yYݟOi]7~in>?6=߯zsnKMvsWrS      @^4ih!BhNz^8v@JzPLau &ހ\iδã>z!;T믿J׮]M-[:lg0A:#( k@]o JYf^zɷ~kFݟq|}e@r:\u׿6AK7W3}裏:Au}=5kte6EsZ}]oy+噏      *ՓejVUtCC@rdM410]ر{g[}_tN+ ;̙̳V%ugc=xt+d3}w7:=+ [U_>Vehg{$mwy[ATy#W\qY^uf;v,]\pt_nW{PE=ev= 6:uDzO>ę8 z jߺ1™kU06ӭzU>˗/wXt5twjoO-2ӵRʭvڂ ܹsuׯmkoLBBmD]5 Ho1חϋCy;wZY_[kѣjÇE+U{,YD:w,ZM6#=zp*׃J5j fU4^kB0N'|?4׌FufrFd3=cWz*zZ7<8V[}yV-PEH@״]Q={}ZaD'Ez%'ҽ{w7'+GZw_uyw1f]Q]O]6nh}`j 'v h       ;hJJ(P@bbbzvD@<*@P=O|fd=\sjP]סp Xհݫ47GyB wC>Xeʔ)f1cDzjp 7iDC-Vc3۪L/$1zP{ Ն.By"O*UɓŪ/VcUX&?}tiܸ1„"J>}=loߵ(h^_%k}oJ|֯_?>a~f8kd5޾}{+~\D}Z89PP=&5; tן;ޢE 2dHƓJqf,'ꑸ޽{ٳ1e< VT ꨟ?7y7\~~@@@@@@@ sTIJJx"9=@@ T+ ` T׳|rdѢE`jv;W^G3}>&Z}RX1q5vmr뭷P{0^gf׃V/S{qa=gzsA2evf^BI&J~'yD+kQ Z_u+j1chUhww ^pn gt3 }ݢUmPk(©Twx/>Й͚53gG#qn]"ݜ|O{ )'WhURJ̙3}&{N='ꑸk7Gk$@wP^2o<}vgn<+      H *dQQݿs@@#@P=/wL6mpk"Two&:|p6 j@0/|LP1RAu k _zcV𵆮iӦɀnI~31יGmyECP'кיVlנVwWp_,ǎ39s'|"vvF=?Pp7<{y_%kS@0j(sXz5ف^װ^BNǥy=[D ̱FGz$Mkw@$`?Au[ תU+i;ufN#q-;zÏ}:up:ȑ#ry |XpD2?s3յz0_8b˗7 a̚5l_od} &4ț/_>)W.~ G2{:_P]o0eʸqg#n9Tm{-;ׯw>cҹZwwӛ~ig;k.3]9X@==!       )Au߯  AzOp7udUT&05o7 i5j;ԭhֵӥ{ѢEMWC!aM̘1Coƃ9Fo :Ԍit940|WlyN*o*PC=BP/L2%kҥm_>uJnyN-AuݵPM=zm.]{8;vk{fwuL y˻Gf g 4 ^dIw3u%OAu ѿ f:v OXl TXQZ G2^v ^zsWXaNl7ԫWOwN,XqZs:\K/;wܹXWZ%j7ݻ'z#\>}ث|wc:uy       &N(III&CAE|%p  A1W^-:tpC+d}RJS1[C~\njl_8b$꺟 po&_~m>|:q۷̜9L0E]$ 6ݻw 3lzl^A0hWݟG}LjJ5kfZZ.wqhPS󵺹#W\iixS1?f%~̝;ףbEn֭n7W_9a~{Vws{87uB6/_.~8 3w}c<MbJb@@@@@@&VreѼ6*+E@L%;k*4wkժK#TٳznWRJ%J%Ǐ7ժ5iH綾^2}}9Fw _wu"{ӻwLoL@\(kZ)W+w[=]Wvo{ǞjE^ k0嫯sVws{8ù6k_ӛ*4tjWz-_5nt~=)p0w_P]w@ꪁ@M<@.>eTׅ97 ݮ.S`@Au5kֈ~PoА> +\I&/ٚ7on}TכNǾ At} sEo@ !      g4kϴ A]5x֮];3Okn}h[γgVO?MΞU/ ^ ٲeԮ]W T7n؞O}3a8NY`*THkgwR1k_wkѢ kxMÛw^n0e˖-=H0ڵk%55Uf͚T2Z~ѢճMϏVsauw5l<QC'O6?â}5׊VkOVo4Ok 8kSPtS.\8C0^HCyrv@IDAT?Te2=O=|f4\`A]g>[uunu5յuL7x*zn`[oU/^l>*~_ 7o6[*Ur}E.]LWG?KCi@#vz-sL"oM?tYqHoE u57 iwW zgc=f vj>c@@@@@@@ 迩k#%%ߦ ыF@ou_ׯ_o˜zOT?3!h8Oj`/c;q ޽['V}s}Ky hiexCqmu7huEJ2e$&&&[ o4Vul۶MveUcs8'ύ8Nv];w={}ӧK3<u-wj݁`M}:&%%e?}      봸{=AS   s FP_8`UdIk3Kl,#0uTy̸>bذa?~ghp,}v?+vA@@@@@@ YUJll,A, AyFL4:١pmf'q#GH6mDnf͚ҴiSS˲edڴi:E2d!      '!O>^$ʪ #,AH>@$&.ҎÎ/ԱCďO"N sP`o-4H4h[gSoBعsxbٰahm%K4U=\СC(/       F5^bEILL4T@ȽV! 6|챃gVl+c# T͋  pr=*[l1ӧx'g'*      Y}z*U`ƀz8p@Q`dVp-ziy_W6KLhsCpAT        'Ah!MCv학?*_/\&p/UʗK˥KRŜy  cM{Wxl|W=Ej䯭;ds5ՙuk[>9?^!/}m/!        ɔ)SRJGP= Ei_ʱ'.^,-؏ d@N~:O>9q}n" xV }&Ki         &Ld)XDEEQQ?CYF:sjDn9LB@ r2.xmmϗ6 'Ki         R|y)RTк-;'qW%K$_thYذc%C,I{Lc@ɠ1xNeн=:n<}/Au_*LC@@@@@@@@Њ*UD*NBLt48&9#~ir~k6:J.'UʒUҼAu\G8$?-[-v}Kx)[4SY{Gt}3%$J YΫ>HBټ]VY+E JkTpkవkl[6n%}O.[噆 @NN%hi٨yd}ޗt7K6om fUL**f~9 6hAu         'JJJřQVYtNڤ۵t?J%(ӵ4g r?!XĭP N,_+Ͻ\kZsɆw:nowi}=[.o!v~v=xȌ7"Ouҙgtyn?hFϨ,O {gZUBҭܭFRYk%1=O6tsJ6IlL>Y#_𹬋9MXCLt~)R MKT\^^k(cF9*X%G5ӥHtZ61QֱaNymlYanz3W^ z^.f830 v.         @ ?^PBTTL[|t;NUyθek7ɖ{Y5!1eoU= ꓾/Y ס\иH wBwD}~TyWZ!YNr:^kf: W1'듺7}S$V i_TNmћ.jR[8N6n% %ǺIt [Oyh$ټs=5.&FJ/"0ӽ.ﱱFEW@@@@@@@@sZ;}RBIHH 0yEN/9G3ʀwr{٘|RLq9&.n&-T|YT.WR,k6m/..mIgZ$J*| e.j*7>*}FN%7QҮE#WߺCfM/?螎f ظw]x2WBᚙtFo] 嗉Mǧ'naUZwtyfɕʔ@j';嫅dʵETwy8BP=D0#        @4i '&&JI!7^8K.^pЙveVnc>+~=*5=w#TqmV&3\dՙްZ%yqpcUJ'ɠzdH%l- ?dY~3m\ۥHB=v\:>=_*% Y:>,-o; R Z5]k̈SeƭoxҺ>nh} mǞmhg;J0@P= h,        yJ@P=3?d˜n/Aj%suٱk=GV]|<ά/k!WZ: {T:n.]t3nfkw^'uRʛHկhH;ތ:2B:Q)puZSԬT֪J_Uʖ(i YfDk>ܸw9S9S\LAP֗)}7Ηޑ;wKB8yO`";cYT̺j^:[f/XjG {W*WQ}öcлfQxQܫw{2 Zw{8ٸ}#]LD 3?PP]!xwp Ь#:*JRʸjrQ[EMP_csU(#s=W@03͒֓FmFr[}@(sc~ n4wP.;vXo}t}.NC?        5DP=mN\\ֶ`?&Fm. yB\ԤlP];kuv;~u HbAٶk JLdϖV:qZ!yVnUZB*=uIK㭕\NcoMt{J7bFZβgI5/sƽo=ig@ < ?;CYb{\/5~|,?.[mxWUʃCSʹ2кQ)tqgNv8ApwVY@c@@@@@@@@S&Lʕ+%*jI 7^:[f/XI+k\#EvL(Au ?9b-Jt^"䅻RE ]eάoq-'<#~^uU}q?t^XP<~℩~z5Q^@>ٸwZ*%]1-}F~4)[ 䖀p߸f宫.2f+Q8Q.h\K/e݈O-^)7mX;3]c!OB}"        .0~xIII HU zNbL`{5u+W:^& '8C B(ό@Zwk +^T1.çeٝBU~[e/cV<wy.zrU AȲ55=oY&iYǴPG>H|:,¦rӥ\VGr1I('<<)jVI(hזh{]FHP=$         @HMM$( 8A.n۲gub rQ:SwtS3k?7?5>QҤfl.˕'{j>ek7+$h&5SjU'oig}bcdNܴc)_@ڶh$.nfTںXahpn1IڋΒsW' A=#f1qR@wx_f=C,IgyfmP,z ӭH*νd's_W z;궶4 $|2O{ΊB ]@@@@@@@@@ O L8 *$iVpY 5.Rh!I*S\zVwVv珕2 Kwjm)'Nrݳ3 װ oݵ׬C9_tt'X        DB`&hVGEHF ~L@ b#FɊ@@@@@@@@@48q$%%թ~pz8z, p T?],Dž        Рzʕ%..άꑒ=Mֳ]܅Ѵ9T._g@(@P=/u@@@@@@@@ &M+J|| A` yVz=8        !&bQQQՃp  qy@@@@@@@@@ S cbbg*F@%        d"0~xZ AL Au@@@@@@@@@@ZZLӭiӦRlYgK*UzRfM33 <_:{3`K~,Ykժ%ʕۏ        T)_)RD ~  @ ssE޽{Zi%_ ?:TŠRJꫯJRRRNA@@@@@@@@ dYD*  'G-ʠAsΉ쎄 n/^܄k׮^(        '0qDIII8(zzm.5 ݌%@@ {$AMJ:uF6o,}[GvGX[gq-ZѶmdҥ\rg@@@@@@@@r%99Y *DEpB@#{ƍs꺥4۷̚5p…eL<(~_^v%E uh fêŋ{lzRdI3-3M6o-ӧOXG}$˗#yƍͰnJ* }|2wOعsmPZ5? tw0Eɑ#G̺DoT>?>|ٞCC{u5lO?$ǏVZepڳgNfֿiz=;51 @@@@@@@8vɓB @Pt; dAȺf֭ҥKg$;w8t 55U|Mwe:v(s,g< kNҥe̘1RlY3-]O۶mžtzLsVl h}ȑN=TRү_?iܸ{>zC ( zZV.b_HbQz饗ʎ;i3g=m;we˖9F!+W:ӴVСCE=v=y޽{˕W^Lsd׽@@@@@@@@ 0i$TOLL4*PJzn:p;SLܴ[  a~?&/mlXHviӦɀܓ|r-ҳg Y>PP_nZ ~ԨQ¹=-{]w*r7|G^ aÆ~z#Yڵã[8vשS'qo=c}ǽ1+_1       {ORRRDQQQky\p  p p#]dNV_j&yf|M6uv`֬YҧOqs5+kUu y-էL"/36lLNZ]v}vg?,_J?j_5k8-ZT^X]^S[D Yp^o/\`A$>>L .Au{?ݯvP}ĉ+gO5drayڿzfZ8+e@@@@@@@#vEu-HP=t@"#@P=2!@k-Yr饗:4ަMٶm3~&aj x?_;5c )WP]իylJ˖-uԣy7΄N$w>Uծ]W\!vwwHuݻ|f\h]ڼk%q(n7 ww 7i$"vTWώ;]zYnss M Rׯ̜9әoWk$_g        yH`„ l "jq\[Q]>@@ {n#s6Cځ֪}[j%\rR.YDu,N>]*TL۳g\uUw^gڀz]^WT׀V޿'|Rڷo tTۮ]Į&^QF2j(3I+wՙO6ݗ /Єut2c 41cƘaѠAR3@$"To޼ 2g _p }oӛnV9~TR%>|H~^@@@@@@@@$0~x\(Pd9祳ϱ" @gB!mXZ5e*TO?Tz){ԩSq{׀{ F馛L%x/{ƍKE+k>ִiS}h)}ckuV|yW4lЄ5n ^頺^ m۶u^p2oϨY_iǩ˄6       nZQ .&&&ʉ'~`@"/@P=!qI:u=zT>yWȑ#\4;믿Loٲ 4^|E2e=*:tGy$u_z%gZM_~^sw jx֬Y&잞.?|~`Vqӧhqm:"TM^nJGŮr̂ڧo߾Ү];м V'צ_aAv>]\m۶M+&:jSxq3au Dzxb3]~رRbES^LPuֲsNgwfΜ)J2;we˖94<_n]g6jѢz^VhC@@@@@@@NGDPt< dAȺz5@38/YhE?\ʔ)#~=vM,YK4B_A… ޽{Ǜ`]ܙa 2'pw7"ݼ .ڳC~@j pw{o9"vA#GglNԼys'{bVގ^f<..E)Ҿ@@@@@@@@Nc &HʕMBQV%t[n5Shܴ[  a=B-=#W_96m*o[Ng :T>lgʕ+K.NYg貺puy;u$7p~bZ:ud̘1cO2 zV^,a)SH|4~W;JIÇͤ  6ȱc̰jvv~>}Dv ݵ^+k׮W-~cO3glWw1ٳwhywxZ˗/wh_-X5x{k̯V믿^Ogw!ݻw7O?-3fp?r7p8b݊)"]wlҜAɞ={5+Au]PrLaÆ!W{ckW@@@@@@@@ / h6Ezo&TKgcE@, T߅C~;fhp ^/p޽{]|ϟ_^}U9묳./РaÆyT6C4iRJ| qqqfҪUL%roˮ]СC_~r饗ɓ'K/1tRF SM\+ۧ~*eʔ1µcu7ՠofn8xU;.^=ouV        &Nh= 2 硓ϡ" @gR!mN*ە+W'`B哗_~TX g@AKǎe&˖-+;}̙#Z^ҥ3)cηrYNZsv=sٮ?{ݶVowWwϖ+WΝ;Y ~GѣҼysY.F@@@@@@@@<"+U$ZR 5T#'D@ TϺ%/S<SRRf͚Ovp>/YD.? ݩAr뭷ʹ1qϝuiur mѢErwzSMumkժe/n^u /_ܙ_|hnz Z] tEEEIݺuMEMړ=^N*&L 6xkhN:#Ywa,/^ 4mfoJ>3)Qeҥμw}Wj׮?9R~z}#1_{"       yA`&ET gcD@ŗ# ٳG6m$3wd+WN/]> ecGNص}#Gdբ+T A`Z8vǎ?C?nnNwCB0LҾeѪzzp|@@@@@@@@SY`ĉ SQT>; AfC         p hP]jgd@@ 5[B@@@@@@@@SO@+O4I*V(+O# @ Tap6        @ZZJJJ GEET? ; 'EIag         p hPݮCP:w* $' "        )#0~xZ AS洱  p2L}        ] --M&O,GP=0@rAq @@@@@@@@Ƚ$%QVMuV;EMž  @ OwpRi~Y$ADpgNsxfNO1'2&0 SQ**HP2|/wfw{vv;UOUWšC @ @ @ @$]BvY \|b# @:z !@ @ @ @  >VYe+++sQWF D`Ely^6쑚Fv :+*BҫJ@ @ @ @  ;udճڵkBҪJ@HDů?>:wmV9:- TϏ!@ @ @ @ eElĈ֡C[.Be9Z@X w8Cmݰ뚴R^3+m:m6ȻIg!BLT @ @ @ @ 7{:vheeeVV-<&ҕÞ9[7Cw8sTfm oVwr:  &PlwS=On|3ٶZGćxC/k㖈ؼK>gB @ @ @ @ ֦Mkܸ-^h2/x]`B{Vv{d ;·m݆:  &Pl޲'Fgj ,$'M3Q!  @ @ @ @QC֠A<%Bl@GBEo^;~g76\3XTh4}2#TD0@ @ @ @ @SNVn]X+V}ߛvhҤI&U%Q r$PL_~g}*dnaWwZX+IIg*/BLT @ @ @ @ 7Ç[ǎaÆxTK?~!@j Lk)ɡk`+W/.{ni[~RvNyZ//~5{DӴEVnоOe~@IDATQzwC B  @ @ @ @X 6:udJW %T{kb%cuo?cNvց;N[}%Xb]`֬Id-Ge/WDžABeNFpɑ{Xe3?a(Nun=7O+DKD.;O^x֭]KM|`#v:vQzeNߥA|-$)_ZF@@(i3ũb;ɿnt[tnv>[0'G]XzvqXF8 SS\4q,[أz>8P-β?%83k׮%UFvj F@m~֬Y + -IX6!"&ܹs˕N:M?o=+f=SO-"/~˥ރ5l06Y=hByX~+2fcHڸq㒺{RhjFi9hŪnÝ@1DѽٳsoY3 I\k^62WF~2Bl @ ek;vz꙾QVP(/z`osuwZL s/C/`/rwdm;x ӢΙ7\qCvd-_=Gsm/ P~s {bAwr:7Y9).;}m,ξ!jԿ<ٷ?OᢞֶiwP]GLc,U-[=P,F6$@~[clM´ivI?xիW>ɉ xꩧmߢ쓝u[΅KמZ[n\xy{KGԭ[tI,.mq Rh*IrbSXtvb62d֡C;7V$m%Yg5/+6@~&HD @ eís;L"T J>nv'VVmҶuoVo [=n޶=&Qͧd+7ml /p:} {TO>|K,^شiS]]q~s9%mkd^H|<3۲e\=O TRl?ts5R%Rq9#k]weqylQj&"TO;0{vw=8|Jn,k룏>jqWL4ɮj3g[s=y| tS)iKTbe-&~*L@;_FlG矟$iQ(2׼b>:BɖEe9h@ @}V3"T6J=3ڞ3NuwJwжX(Soώ?[`MsB6͚ '-Ye͌  P-;$VD&{y¤{ oBtXw kR嗳!i- W{P=i䷆P=?^qbϜ9ׯoI8餓P޽{Wb ^xFizx 3D^{^}Utu5EZzy|/CBY288Sm~s>_Wd*GeUG)R[,F_B\Q?tnԴ/iLII=&2]GPe9Z@ @<`mڴ t@+e_r[Za}Cx)76*MvlA[&۰*v~۹Mꭚ6.Lm[׫km5>T&TW|˧4 {|zhsw=b8Ç2lS=,TO>BgP= b V2R|>"f9"_u[s6iIkP=1/=߫3K薒8*罬/mkb)]8%@rII-y1etro@ @J_@( U)T`u`ss~UVVX!_mҥᤒiذaz;wy;묳=6|s~֭w&19s쫯ruQŹ*g嗷N:ߴV^zNMWT<5\c9U{5k㮺dו?7}/l2K}[V-,Tݪ\?=7k,rXI%Xqj': mb>ʟSկy2uTm۶+WXT;C8U6+ĵ]Bu!5CB&KZ?>U}w}缹-ͽX@=/s eu?$V7߸ er\=9 ]Wuϗ횤c$T{Ɩ-[dEL[>kDrJWW[ۗrjڿ_thժ;|*-f:~ qE -u@ Կ鞤RN˔KrA?Uy7m4\ fXE*6OVøXK_>Ilg{==WNEFu+=IgB3:8X|ԗ*꽁l   @ PLZY9z%/򤍛}kfGE?Ih߻ uJpA;?wti}n,$v_ Ovǧa4; 0؜y]P;Vr-! @dTP}/ci56xܳfϵSvkRp^|SWlfۭzߧ{{azvG{$@m%¹㓶Ud5d7n#Lavj]r%.Zn: .c9ƦLb/i2[߾}m˟Giovp wѶvr8 '}g (:{vM)~X%o80qp}ݻ+d,'3}=蠃 ̵]QI,_9{;nVmHa1'hwu6xc&w5~'VRUtՏDMH"&QڅE"]p֮]pP,ǩۧ~{1'Bkʕ[O=T.a os{zE_}ڹnu^:>S%*[|`A^~7L,oz[{]I+^{5>|%;v+js#F߅I|[޽SmrC! /I.NnkP]O*_ܴ߽۶n niR+INpM5 tG\t ر|Ge)9|=|v?naqovhLm:UNWO:6`;UagT^*g-.W{W]m1n_LuE{݇3&L:gu?s@CԪ_Lr[?xV8ʼ==NܭoVzӠQ{ ~<$}Q,~NSԎu0iM;ν#OZ^~ǔxă Փ/(  PR~尧/&c쨽[^NY{o7.yoe'OM zȅy1{Y{Ҁs|$V'MP=i$ qHnʚPq$FEWX}GV*Bu/G"}&\uYcg6őgy & ;nWݯ?VO=sOa\wu^UeKIdRąTD_?ل+q9[o턳>3ە$6EwJ+!O{qOlo Փ*, 2kpbF^~K7P~j]'l0 s}Q]mQZsD?I2ǽ8q_pnEs]jP}k{T$qu3*o\K>K'yס{O^=mx;B<3t3x$t~FeӎNпs>?j`Pn @ T͸6Oz%U`":%%¼htʽ@o[."Ľۓco|`_㣘lȾaJJ[{vQ~yPIJ+ʩcX"RrKP=I_ Jqg ӦvP]>ksP[xvtʁfG_ڍ#_tqgO;jMd-԰mvwԪM}K7CH8P]IӇgz>۰a*Λ8W%ro&TW:FzO=C{ɻm#?y(]B &Z8E^ aG!৏`%!݇vQG[:#*K,q3J`x+-.'<`IiGA-#Tu(azTGzZׇ| 4b-w/]JhBky p]upᇻ[y>Өdy!S &@^$9sC<-Ixf^dʯma؊L}<@J/Qzt>-IA]e[nh oh"Qջ׭y+Y<+Bvzdh?IM А\@Y_?T7Z'uLtlJ#ALYb,kO7=}uɓaf8W3T2 ivaիizUAkYT$m\81$iqUԸ:6=O<)w!~rwgYYۣBB')ijt>Lv=¦S}J_=a @ b$zjz}ֻX9eO;k\r3yzE&ީnkvH`5vЧl~ȃf4yX?ym Փ/Z!@z9>i;߸I^y"Uq6%6_z S̝jI}b]̾|J7B=/zͤQY`&K Փ/u깒/׏9C q1F4iCy[XWVjBu|aѱnV^q]"I*Qw]wu^z|AS4y⇰PS5r.]G=<{ KeQ;%TzUb[\N*g\RUB}ݷP=7,fPCbݰ?K8x$|W=)Θ1c(@˹=Oګŭ$0 QF[}̒ԭkv 'J%jGlx q]fiBhT|`v+f (ĥnz7Uݧ~1뀎7jOg5ϳʗqZ ܣ矰IX)岊rxq_}y.im c >l5~[=Pi0 꼏 Փ브}gm%$m1t\mXO׊y2i/>=I!g|{ӗ{Bqpy\;m0@ @@3v)'r>o9s 9]{6SumӦSzR}}gsl{mUa;nb V̔>ʻ٤%=Nk:DYǖ|Gm_+7k=|X #0cT[h+rZ-Oڸw\~;*ʸȗ썏xOlNm\i3Ͼec<x;GQnOhWRC_̚*XSG?ޖ Ps^xDek]"Gd/XuUNsTIoGn}hVJK*r,E9a1>Ɔ/(_yׇGYСC'J %b̙㼭3m{fmad?GTGbVŭ}9jȻ{X?K-QfUYܾ akfzYϫPm7jFxPN^{2_څqNjZ^t&̭%Kcq|M[I8X"L$, x,P]ށՏ4FΝ;x@C[L'Q}u :ڢ{YOf{̍Rc R?Iմ,rX5jTnI_=9~sg [Mp3-gowI4(^bۨyaq]GG\ƥDU-VwEt,AqI1]?B)dQz!ޓY:~&n;k{k ?Ck;@ @(RmnHBuBǜO> p3y^UO++5D^y.,:MkMyَ~5XM,vsO/ڈ#H B۰b?ދUz-rN*[\RxKpSݪNes櫮y6XC/24im&ַo mx =7o⇷rM" u;~x߿۵:-Z`6n8[\+Қ6m.[\?M{*| /T_eU:<8CǨ2gk^}g(lƌ&ϐ´?֏3 J+@jE^t%PQp=u,vh)ĭ$Cyt4N6mHo+uqJ-r:ڢ۱s`${駟ܵv=B[:)Kxz:볚q\Bu(@}_=f/sЀlKp6an5~|O^<'I|2.~FՒE'γt|qu(|5'uae{+ ExORg\Cv"j#S|^XzWԪU+@ @@u$);S3QkC P# Tjc^{o_P[&TgYyZEBuyyVd{/oo/o\N*_\R|Ք5 neQW\a|IȖɼ纍74v&B2ūuD>|K^,o~vM7]g1B"fgRu ꪲ}ER!7ͼyBhr%/fv_su J|{kLܺM{q o&ӴGv)Š!T~t?*QJ 6 5%|`y!bnit\(q_TN[LGQ}u '+v[>ueVy^2g.Tq# ss}~y],ϚV?:8^l.fbd]G6zO\5+i[,|uĽ' ;ꨣL9rg ҹ3Iڱ_Nܯ{g"-2+ @ *&0p Luu{£z'{@j>U[~̑ [ަwi'}*,LY^pMy^׍i{!^P&!U6ov|ƍ̯Vo\N*,e^:l0Slyg:|>3kW_}M8[o=;#3y1$vd^^=Sbŭ[ߎy{+0puxh ~x ֔-[,Wy2 p>j4q=|B> Q%4竭7J3f-'mq]G{:SݮFY5,*T/{B}zrVrXb|]{ ϟ>*#?OWIq2}pP[;cz^%zk` vygm[SU~>}6lݜW̬L>5jE?>jl{Byt۷OӯϘ1U_~N򍔤n F y*laAF.Bu·,nΜ9yU./kMLM6 aqB#F<8g[N;n}/U:Ҡx.i>5["hK/ZhK\P3lOq6I=1LݯE /~6pC6=^,}e}Wu\af+T/c*}-{W*mQǐK_x٬*ۢyؔ)SsB/S|ȥ~jwH=e$B*L(2/NX  ={L+>؎?ޅU$T=zN[Uߊ,Iݞnnݺu/ VMfVH/z|3+ ̸k'u_>Oj ,(Y:<+~T^S5;@R R*aas =9c3lOq6Ig ݲy bUfyԠ"U4K",[om~ K-|媼U}u sE}UG[~5@P΁K.K/@xB*C\:i?ԏcJ)2 V;؞{40O"UW]N;4?qPkHX=5< +`7tSGںV՞i %T YmI>5uxaFIҊG\ƅgU?qbgi1[>:ܓzQE=BdI ,O?/8蝜h]gԲ/hV#  @ P]$TBN4#B @@!PULM^7cߦVoynU}ևN D?5WbE UW]+B\Ub >@͚5yt )TP<$R}˸>~ioqQ+ym֬/Fo1i浼V[9:O>ĵI}U&T+kJ\B}lD,ic^z9a1cv-QEX $BÇĬ2Ky*[ 2QcǎN-cǎ \P]%D H()I p'I>&luu"%]"QĽl3h[!>+\,n_T-{+zgml<eڣiu=;t>-| kXGD$r]wMA}˒֏*W^<@ܹ裏:񢶭:s/l}{=t̅)V{Rm8,VDT Gڹ}kNќe:=\u]޴wx  ާ*ڹ-Q͛;ϻFH*` W^ m}qۢXǽ﫮җX-j:u[$RY}:M74M^~QekqqIqGvmwcD}{?Gh_.s/I@6mڸg = ^[U˶~p1cL٧&tEl:z4ΚJUP]aI= ~ŸҪ#=ɨQg7n/9>(VT^$q3q۱;z'vOq]wesBRA @wBo1ի&/ @5BV򰕋f֭ VZcoE^Ao߾\ D;1GI!ḬBu'! /aK%0͊8.']Ӷ_veN0=MXc {w+K.`P($bf孏i_ިQ#7Aݰ[> { TYG={W ײDUeIoO˨^^3š"xQL8_ӦNRԠ2K$ӧOKu^׭,p i&e# N_T-"RyEssT}ܔɋ>Z>Ot"L˵2jp N$1ıQ'yM뮏6s=gO?t 2yth}ӱJ$> N=Tѣ 4h[΋ NS}N>dh:a}ĕ74yjI\ {챇f-&㸜|J#{QY:uSj 8IH#d*O*/-WQՇgpzymNuyRÃ;|>,GlUh8Iv&4B^}CA ts4ci72]u6#ρ|w_|Nwb'9I폽JbVH$oNW߸F9O랫{(}]mBi%<7t_!ja+]0Oq-jż3q-&iǾMTG[T믛9Zsf}Xs i}$|qjq{>żA4#K}4*jI_b,zmo|=4;GYYNMZ?2G{k:Yωz&,mz>z>s=͒X]?qۢyVI]OD}:%x1ȫZkfdK.2 յ!{$҅g\/uznS[2eVӻErA @7a+һa}zu @ atz(ӝHuci*\yɖT9MO]icG;Y>ǞqjSN9s8!Xu0NI=BbK$dޭM66J$li%,D.R$[%@P-U%b$UV&UU!0hq+˧# 4H#,*Fːou?1iܰtmu٩f͚ss =9~u[X7w·m*ҫ B__[bE}h*s>ڢ(Vn%kذaAJr/f'IXׁ$J6b^CWW~v'?G_4h! Hz&VY5.8S>5Ke{og_ >չXOJQEo|1wܓ(ucǎu3)L^uo͊$[9 ێu{c1ӻ+} @ P|.DmS;@UAy-7;,e$ GT(v{n+e{{1hv[#j֛|lM7 >ni[kH&IJ*}jUiϓleYLX4fC&5\f3E]7 @ @@ 0puJͶW&){K( @AziC!JO>d7{mm]!%`,e==Kf#ǛRb8;y`zeb, xm#Nb'6N--i}G[\6UG9fؑ{ֱc|,uqy A_)v_MT]5jw}n g;oi&.b[ @ @M@B:8mtK( @%@z TB篽Z۩j[.Pd ؓX~ fƍ5X2vD)M6-ܹm9'b:eA@^UVDVem켋}G[Х^+[ Veيy A_K+v_MT]t{kYw" @ @O@3 Mi 4nݺBү7J@@5@^!@(y&L X۶mI&%_^ ;6wVĬZŪK(4 -[ @ @ @ @@ 0`@ر[qEPE @d T/  @ @ @ @@4xOyToР-\t=#+Cq @0='p#!@ @ @ @ 2ZiceeeV=#@@ T/"lv@ @ @ @ H r՝PV-蠃k׮: z>w_[mՂX_o^y kBup \(# @ @ @ @"-|:vhuE^,A O'Q뮻㏜3ݻm9_#Ϟ|ȑ#SN~1X˖-x,,}:,{饗+lm ֫b᫯2 uFWkoup`($ @ @ @ @oիgjղZSVInFVT  pVYe+++sC^ZCi @(A [)Qt˖-t?~Y>}m^=N:餀Gm/rG`ʺP=+  @ @ @ @K= ;u@k6K}s $%P=)qӧOO>$-={Zƍ0yڰꪫJ+dǏ7yZkћ_Wܼys[s5s>Z?|Mlڴi[M74L /`fml喳'2~A;vO?ݭ֥K`뮻n6h#^wqQټ5k̺wn:w}>kڴ{ TVXYg[c5nݺ>J0a}ᇦz[hjfkvBc5kc/:t};w]s56iҤ ;d?1+Y ^;ڞʬ6ۭ[r%_~1ՙ7=fۧ~꣹z]wuL لꪣcڗ_~ضi6p`Ly|ڧ秺T Ȳ9ssLNFMzf8ߺ>Ge Z}S3UV/RYTsrW]j۶ժUl @ @ @ j$ m#B߿Wcek@jꅭiʔ)>8񴏷\W^s9'X@!&'|2M.!oo_|a2 -v뭷o>8;}P-Ýwi^{}A/ %$Vܰp &/2/l 6tqSOug7C=Ԕp-n3KZhڵ D҄I/… ]JC>/9:Fbj/4vV;Sl6siy. Fm#؍7hgvV_-Ӿ }k_?vii}/^@l^xթS}?a[.R@  @ @ @Jk_9 K( @%Dza+"te{<,ta%dio~n5*?G-۷o_;餓ʅK|W vaNA޹^ %[yIQ*ʣ&;cKP'z"ym{QG ޢǨS 6 z!ۋv6;sm 6g\H0oq8 ou-ȃ$x" %Wgp_ꫯ$uMQ?QF:g*h9*3Gj?aWf[t}W9c׿ L袋Ҽvg4-f:thF@ @ @ @# g~eqq$BgO P [qQ]wUkߣkoQrˢ"VFc Ul&Q7 ꪫk2ͬZka-dkR^;(m@jJ 2'|[uSY& m-pԞ4$lj-KZIghk6m0Fx2-gjn]r%kyƌAry{?9Qu -wxVL.9chM'dҫ?O9FES?iHz.]L>@ @ @ @G39aZ<^Q"@JBVHT0]Y+aÇA>gΜ`]o JK-o^ >]zA͛;1$XpٛI8ڶm[dӧOwޏB+yVh$8>$P]Vi*]ռJ,1L\]Bsowy鿷[ 'xxzWwܹ ,PWk YzUwPc`] CV[ͅEᶨᄏ.HӭK6N3y2 5a=iN:$rZbMcl6(K/ dQ:WQOVx4pB̿[At[ Aݽ{<ūߑ0}]v)c @ @ @J<^תU^Q"@JBVH!L'̓/eVLj[T(-!a`r7&k<<4hn5zLr+REu4}/=蠃SO9F۠h`Aآfw6hYƎ={kaEiY @ @ @ j'ّGrPګ@ P T/l-E7w%Nt*b&{L^IԪ8QD>F-*^l7tS]믿>X W]uU[ax;,ZA9ۘOB?ör@`I^P=,Ŋ գ۟{9;|tM"W͛jiӦynܸq9nciozU?> ,zTT޽{w{9{z/.(`į:b-ʥ'~-` l`r_ ~U&[r >o7P]ݛuW=m=|$6`ի_u?.ia cZJzKW |50D^}U\H rP]Sy+咎=N: su4}eBuZl4%˥ V$TGMQ ,H .P=|V2)lSLq3;&ʗ QHe@ @ @ @Æ N:xT:` 0 [a sݓOF1cڵM{葖]T(}ڑGGJM7:׫WϞlҞz)5O>d'Vh %Tn-(mY"-P=_{キI-P8*WdFR4@!+V{I*TW F_~Χg}$<ŢBuy͋}:GW<'3 5jߨmi0Bcl!6XP]3H?sZkcDSe.ϟo~?tN| ]~ڵG}ԭK$-1fnfp ?[o_ʼn!_zgq7NS rAЋ/hM4 ֵP\sAvwgm:vosw\ѧQ^{7W[T./-^jH֬YӳgOg Bd!6{ .t3@̙3'^ƍ'[1Q'xz衾(wڴi_a4SB-jڴiO}<#Gt#H,@ @ @ @@Ic;:r@V+%HXH(!+ ? Pd!*ӧn:k+o{Gc %:u6y[T$]tF=:4*W_W &˳^yiBf͚9aGPP}ܸqx裏mybڦOoy=rGk meh -T~/OҪӰL na;3]*,c oovܭ[7;@Vmk!PT"kf> R% e $TW]vy["cy 7`V˒uQW\an,燋Os\`65@boo~sOq$x^6hO޽o9/]s5[::W'2UټP]|XGuO_@ @ @ @C@N#;wl+U T/$ (ꅭ`%=c]ٳg;?$m7'|و#e˖.,*"fYW 4ݛDs͘1exo[/-CeBuG2DN4)N;d_|q$Q T/WP@]vY$i=_{\iV$ՔT,h/X4"j.ApFggMڠY uل: ՟}p4XowU, lBueIBa*M|Tն5)$B( bAEQ)"V@z 6|AQ: zI2yg8'3I2)@ >d{=G25{UPVTѿߣzEG oKrssjC Ł+B~a{       @:u%իνL@@ T.mAu Wvڙkݞ={ʲe&M%v{O]E٧[/^,ZA_0=W+jY9Tm5|!|T={אVY]|wPYƎk*vujZgjX Au{gggKΝ?ק:t0rϾھAu:FyUGllLL~{]Zaٽ _?m{.ҥq=@s|k/L%}}D_Ϛg8955UN8s>yb+kZCҞ~HK/*zjkyJ{~4h/{Fy{ݾ47{FwOQ 0o|½rJM K.]vm馛E^e o\OFܺuͫl k_?ࣾp87Zhu@@@@@@@)WY! @U ^J_Pe˖fGʒh_h02eqFSXC111Rn@6- jPZrM;<<\K{tV! 65j+cj8Aץϑ݋z{Te-{ 40( dQ]z+} xׯ) 649P<視8J.{W/,,| 'y       V`ʔ)`h?GC@#PxrIAi?ӏ{9c mVƏ_%he8UVG}$|ז?^}        % dddHrr)BP$,@@ ~t<GcPz…ҧOS `W_|s.۷" ̚5V/rP:@@@@@@@@6m$$$ow8Տ;  A ~ЉƠtZZ;{gSNzUjUɷArӱ!        HOO7AH^ϯ^+q*]! @RNtb        @oN III`ÚUe}Fe{  R`כ5lP=֞={dE/88XjժU_~rڵw^IIIpA;vH^^.>ƍE?P~}էeeeɶmۤnݺOq:}nnDGGe˖tѱ+V75jxs%''GVZ%ڤI9N@@@@@@@@@IzDD8n^@@'S1cȒ%Kl&:VҢi_Ugj`cݻ?n/mڴ)iWdLC}͛7˜9sDvҳgOiٲ[o?`_Np:ҥK Ls{W4 Wl(@m4(###=w!ׯSիM]9!!Aiڴ|V@@@@@@@@H8Q|Im &TT@@J ^ PǏTZ!]+{;ؽqɢE9&H4h`:XUv֭[pVP𺞳.z SYw9O<Ӫ^.ݫTV4hUֵ*rWE]dwmڴIFek֬iu׮]f        TIJJgx8@   T/ݨ"3͛''O.57ߘjz,}7׽{|`ϣn0o W_S ꫯvy?}Ygңd2m4Vװ{q5ߧOٽ{&lA~Ie&ޮ];ݻ{sy;Xzflʕ믛jՓ#F@@@@@@@@@`bZhD1RQg@(Ez)@4.V {Lj׮udO?Tתz9kzHl"ZqoǴ/P^e]f*'|2c OA.]H׮]MVl_~4iD bܞ͛7A>>tPt?<T:         *yXy.@@RT@ްavir79+dԨQ;u$=z(rǏ Ojh=%++K|A3k;w 뢕5d~KnLg}&o4kLl\Kb?4\W޶m[        \ uDbAVz5 |@(]zFhP}o>S]K/-rlLU kH]˴idܹ'<ʏ?(VLٻw1ם;w  -[4s|M.HJ7g9sWP>ߌ7mԼU#       T '%%IT#^=n;W  ^ҷ-kPΝ;ݻU-~YgUK k^xA2Rװz K.]k׮Le        @5*I.!!ի=@@+X5/b+u˖-!>j(AAAҡCiݺ&{+WfP}2k,󏅡C1숎&@@@@@@@@T --Mt c &@P4T1bYFڶm++rŋرcMiA۷Knn[n]Ƹ+n%e# 0۶kNzu6<32?fG6u        @15'5k4G3tgffqXA@@_"hP}ԩ_ Æ Fy?/˗/7}Շ "VG-/3P ?T߽{ <؜ANG^g hz^dggˌ3?$>l9=i#       Tc ua@@ 09:Kӿk9sȨQ~m?7ά׮][w.7;w| ?=;{3rH{n7q=kSnAZl)v2a?> ?cժU~\~墁t7W6!u OiƊc G@@ T?؇P?l޼T&2iq.  PWϥ#        @IOKKx4 @ի#        @iRS%99Y"VIu*9$t>5Nb~p Uw͟_Wn9.MCV6ap.)1k|h,)ܗnTߟm~7ۍQSWT>gLO{{ TNs         P^tZjIUaݑo-.33Ϩ2Q=v_G~+>jo-`xmKpB{6f}8{]KʖqMO -wvk! #Mx|/T>q͗5³ Kշl/g6֓{v# p<[        G@ĉ TT/^)Yzv9k5h|mErm{ъ-2Ef=8!imUS5>h}Oq#dԀi˚wRRP=i-We?{7?Y|Pސ Lz5\.        Y`bZ$&&JXX)NEGk'-ϗΖ,EV kZc2wmٸw=iKs\1Az_̽j^o $~%ɕg'ܓ#7 ^'nS@@D%0        ȄTI*GEEQQQ]=ykW69)Fh5]4%8kHw/յC:JL_q]oP=?_dqF+_buyvF@ZTD@@@@@@@@r [AI'KllDDDPQ4O+aAZ*^U͵{ٺczb{k ĹTxh9W\ߠ3e,3~t?uCS=_|F&~TiVu/f uՏ[!        @% zUQrJ[uΒiNϨ~R<*;_xa‘[O\Ğ.s1;{_7$´%MTߠ=PLc\we~{Au % T/A@@@@@@@@@@ޜ0A$22=鏜%QU'}RեmVd嶫9.\s1ΰkcdъ-v_Y+*&׆;W\_$渻xE@T6 E@@@@@@@@r L>] Vp*9zerg,ײwi-7Ǵ^J㏑{=e]voP}\'{[ѨӞg'&_ZPs7o~r  ` T1@@@@@@@@@J2et:%88zI\wuo)NϲKRM?c~0 {T6o/)hZa$mֵȓ>q}AZ*=CjEs5IOw6 @J ^"         dddHJJKPPAST6_:[x'q S "eD%:)%eimkKdOx.*T<;In8]Ș 6zT`@bK         `Nj*GEEI^^A yS5m]LJ前L0v|A5U 0g`u25&=Diw1sS~y?{c̞~ciԀSKZ>gLϒ0 Q)@P\        T@FF$''KxxT/m5$aS;\˕] ;eNA/Q4g` vdS^٘,a. d#        /0m4IHH)7Տ[   ~?        SN5A5k"~P@Ao@@@@@@@@@Њꉉ)Տ#  ~(9        &e.aeff3** Xz5\:        $0uTIHH SQ= 2&! @u ^ݟ@@@@@@@@JРzJJTT/Mq@ի#         ԧO.t:%44T  y@@@@@@@@@\.L6MMPpT/@@@:O         PCBB(  @Eu@@@@@@@@@4 iҤ AҴG@,*          \.1c$%%IXXAA@ ZB@@@@@@@@ L6MtGx233͡8\q@@/^         ^Iנz||DEE1^D  E5@@@@@@@@ȐƍKDD&C@#@P ]         ՓtJPPT  O>@@@@@@@@@@r̙3%11Q`  TD9         PL"III!a@@ 091 @@@@@@@@i$66V%??z}r@TzRC@@@@@@@@*%**!@@ll@@@@@@@@~SNd 3ʪW%Ls:}FeT\@@ T7KG@@@@@@@@222$))Ij֬IEĘ ^z@@@@@@@@@v3$..N"##vPaÆ%\ C  p O9GB@@@@@@@@#K`&%.KVz=*]At78@Pޟ         % L]bcc%22a1 y@@@@@@@@@zBBAE@ ZB@@@@@@@@ L2ERRRLP=77Wo#v9. 'dG@@@@@@@@ 222$99Y%$$:  PA҄G@@@@@@@@.&qt:pT׏  T/݈         P&jP=.Nj֬).z~z@Dz JA@@@@@@@@,$22R W燁kG@,@@@@@@@@RS%ߠ*8z~U V *@@@@@@@@@dZQ=.N"^2  @Au@@@@@@@@@dԉ%99YD*(  @Eu@@@@@@@@@|I4IbcctJhhT/!@@@s        /r$-=]% ;s1 TI@@@@@@@@@JРz\\KHHAE@3        &0!5URRR$44ziX# p d%uzhP na}JБv)U|^n'        ULrII(aaaիt@+^O䢦{R6eb6        T?tiWu#ZAߍY F ѹ;cK@#R u]a2s\z{ѫ*|JYvIϋ:T+ğ }         @F$.>^"##M'A2>.W@@@@@@@@@P@ꉉⴂAAA ik|E&4РnnJyz]Y9nTwKT_CToyěmnΖ:hQѠyEwЇ        \.4y$$$HXXA>9yqg"vtйC ^2pyt»^Mb+JETB         P(jUTO*GDDᠢz!Mo[)#3 +{nѰN&.u@Y?&:J5 s6o!6e{_/rO.Mz˔8rrre隍 fNi#;h[%1W,[v Agɱr\|C]{˒U^=FMgܐ)zmJIJ1F,lؼMjE9%1fN:y4@8A~,~YnNl*_,ZfNt]7X+M6eeKnV:Wyshмۗz{`D@@@@@@@@KLLԪUK |k3uU SiljE8MWܶy۵&mwcdǞf2+|X{Ld-]e2oxrrdTug"C^ˉ%zʴ7Z'&'ӎ 䡛.He;>_jgsm/+>]lOqq6r%gJhH @ȗ|l^l ߾o亼#$Dy5IJ.n>j9.rknd}xJUdةfWuto29|&9aW#zz]Ev@GU~S&L ۶lNqҤI&@@@@@@@@8 'Ndd$o|bU5lv)-E7ĕ2}[vTd#'QvM'{gюP[^Q65m OZ"j7Qê"t l X;RI8, ?/쨄VS_Q˴/ޞcB9sNukFɛ,AAE{^.f=^XH4-6o1AntT0New*5'-[7~@@@@@@@@(Ĵ4ILL0S:BztGn*7OO~kًVYЭs|J`U%>[$JbcgcjgEud='k_|W8'ʭm޷_<ëzikU=`U]bWe)qxk ֕<מw8yxDM G\~ƉҪq"X2mwo.yWTS ;KꂢU+ѫhլLx൷d R =|xieڜ~ܩ˕/+?t'6'o-'Z?-+V{n"An2T/#!Xcͽ-zrrrLVXݻmk+         P1 QQQTT/ C޶ZI|#}$ :}/2/]v(oPݽ'^AvsNaoP]OM"̶?,SFLޏ؟ͬ^GLl)Gg#~d/~I63%4$ؽ &O8N\=-2zƧoK;(ka@@Ugn!}(y=mTEgLv-]Q6E[zauR/:ʞ߷Kl<i9ˁv7qcbbdE{n>}C)WdC:@@@@@@@@@ N&XްaCy<OȜY޽]vA_|QV(xԛ6m*,4i|u}ՠ;v5/k`r)r-ý|&"_;ܛ];T畠zy6K4fM)xM=˴4o '&&ʹ+n:3gyAr~M7y#;;[*ڵk@ze۶mVc  UĵOC'pDY_y|r>t?_uMTVP]w,~ƍk@Vn;dӦM溴.Za~ȑuٰa<3o>s]^x.F 'f2dř; ҦM߿i@@@@@@@@H8QN[yܻɟ|+3/e¦>xDG:̀g_<'W/ r8K YVVUu`mfh7ߘVj,        GTSh+TnV/6&H%_BLs//^Rb1տy{rFrAuq % ̠.I<{{wiȴx2}q_fhmJYi}Py RB=/Mu3^APhpwPC֩SGҷ˔)Se]&j~=G:K/5CZe^Ix {vu3۷ː!C駟.,]T^|E3tW˅^hڕTw8K/}au]z}]s=_o=5?f96        ##cbc%""B^{ݹ2_Iݒ.e{_ W q=3׭O"7; 9PVTߴi{ヲy{ٵfΜ)Yz\\^dcAG6J8]s kZ^+j~hx>gϞ-~9l]*ڵKnfG }M>@@@@@@@@X`ɒ"aaaLPV-_]J::OAq AArYד96ʥ}Lt{Vj $4$X:7k +8=O{LXhHdc lO._~Yv\uU$̙#SN5W\q 0y5nmwylݺTLz_[{z)Z|ĉU< M7d'wɤIy V4'sWFFb=`@@@@@@@@4$&;BEu?@Pה쀴V,Ν;e̘1w^[nqׯ knM:ud/Za70Çc9,?l2 QF-{O}]ӥx k{~0Gyo3Ȯ2D ?]\r 2ͼ+'yf뮻̱Z*--9Gyy{lgSO=5̽`spwHHŧ?,֯_?۷ ^ZyAAv9o˼y_4:t ޽[駟 05 ߳gO0ҥ;vߩi&s]/{6j>77{qɹkڵ~rge        ljzw@ZHz ʝw)veɠA̲>5\^UZ=ܮ#=dggWh]GuטUVEU5_UKKKgE-**w% $L4IΝکѵJA5fʕOT{]=zk֩D6 _y^e@@@@@@@@&M,ɿu1C@ha-|j8]w%7o$媚B\RSS~wޑ+V%..N=X9䓝:W^yE,Y"H[Γӧ˚5k/kl~k*?n>_{=/:Pz#FH|~z]'ps1Nuy{~(qӐz=W@@@@@@@@%*HEuO @H݌&V,V ;JPPPZPP zN|}H۾}aק}sLL 7Zm^=zέ}>b~~.iꚆiz        @3gJZZx<`U/߷=`  -'!        233%55U^u@@Au_*!        Z;}ْ(T! &oSb>         _̚5գLz_IKiN@P|         O.iiiA z@@fɩNP9        zdd$AVsט( AÂ򤠠@kqqq`@C $$D"""DF_cbb_4ǹ9       3f̐T  *72D@Kz븟-EEEc@㑤$s      LIOO0 $zn3E@ R;oII,YDUjCCC]6:X@@D߻?K?C߿>`BS       @fΜi*GEEIii)Az) )}.\R׏`~|Cf%;)c={ Yg@@@@@@h f͒zka@Z^z߃f'+V05tUя U5^XXh9fddHlllKO#      Њk-@@h[\/^,EEER\\,DŽbV {}w       *f̘!&źO?<''L'>՟\@@m Tm6YfhO qSQ?B!t+ JZZt6@@@@@@@Udff 391I@hI-_W\);w4gCCCMϮNPj7 @u5۵JFFFN#      ʒd 7a  v_`>k,AuW @`@]֯_};      ̙3MP=::"7! TPy?"^Yu@KP]c|9 @@@@@@pzJJDFFJyyTwhX@@| TҽvPTRzKΏ P6=Aڨ2@@@@@@A 33գt]a  T¬@ ^[@@@@@@@ ̜9SETTo# @3 ToF:WQ=((髽i @堺VO2}?v}FEc@@@@@@j+AtxlE@@@@@@+Auzpp0A{+9 4A撮y젺Wj/F@ j ߷        @ dffJ%$$dwʭsrr?{" #@Pq(vP]|J@AVx -PSPޮZi#w!      @SuΞ=[RSSTo d AuvP]ɥ#f5 6ƍ AtrzII2w׋      !%.BEr 2IMjA5~&أGի׾ ,!4w!V%,, d@@@@@@Z@yyhP=))ITo7# h[2/{K&!tW+u ^7ALyWO:$6K!G?ȟСCe޽2l0j=5朜CBB̵j]?)0^|Bщ&g#YD@@@@@@@@(ݺus5Z%u,% T7m \`gd}ZHI9 ҵ;%8(PvJ:O:!Au_*-gi̠ GGW{QdժU5^XΝ6׀38 _~>m]2O Dڐ]̃B=< i0`@C      $<<E$^m;u,e[jFI#*qx Ri w.T-[&yyyN2=~xDgP3.44ӧOرCʃ>h{ d@@x $)&L'RTbb@@@@@@W_}URRRT}=/"^Ď2⾒`K#/wy #A"o} ! ؆T}MT?CL}e_M#F#GrC꾮Y/@^z%y͵va2nܸNNEokn,#      $0ydI"MEn]zȰx`iZÑg3Aq, 4gP\.ypؽ׹!ggAk}|;,AAA~j'}UWɪUDCZW+** /Pv)=z'f#7o{Jǎ%..^ bܾ}l۶M"##SNISO?ݜgr{mn6׬ѣGŋ|Mlߴ}WRR"k׮0ڵkb\yYߺudjO>-ߋiuͱ+?F%p}Cv_Au=~UFۀ}Y@@@@@@@Y`i&#V^z wrP}=Pگ9凥畹Rbaa]}%ޢhv |;i5vO JC | RiU_dILL} r[lL:Ut~>묳3Ϭ!3f{';vp5tG zʭʕ+;]vItt}eVW K/TzewyO/6 ]w$$$xWc6vXO tMf?,:m`¹ku^^{56˺'lˊ+dʔ)2o<{ 44Twn*+p XB}`W@f߫kGu3BPݡ`@@@@@@0ֿ^g$_yז:GcxCub~VټPvK\Tti.(+,ꇈ/^++wɶ" ui#)}gzUw L7XgyB?uS߿Bٰ@P[A12C%62ksuAk޷?7_~ݴ/Tt{K幷~zZfRc+ob@ʥ\>X]m-#LmgS>J:%6!$`/9.]lS +-E%rd^gbӪ:Dײ;CPWkF'cJC ^ bv(j/6~W޽{6ʗ~zyMpӝa7o6A[adРA' fkQ-bւVa>}:蠃L\+>_|f[nd„ ~i%nBAz޾}{ iii>P5ۃ3]G4k7{|f )Z%K.3ϘWTT$ݦAoV k|ĉ&޷o_S]c е?yq:)+Z^嫱{=ǖ-[VJ֟;w|]w%ZeY[}|A.袋6^@@@@@@@4y$'kqgjT|3isKOːLvua֧kd'*h`sz1xmڶHn珲%ЫJhy$UzqIY:9Vi!UT{5g_Z \Oet c@rvo>HG8o:73/5\?`9n@cߙG{;Lw]P"7?3O6Zys0YuzCuTRi^;m۶ɦMLx:!z :k@h\AwOkp 5mj>+111M0w5}]v3^;*׬YckSN뤤$JMAupԀ=z;fW^Cv:!M }ݦ̘1rGeh8_/`7VP]CZU^{~Hkv7UwcGzW@@@@@@j/9W"z ~zrHyځfҲrU$?!3?Y#yݥ}>~[SxGg{J| ;&Tq6}Uu;/e@筕ix$Ƥg}"5(SyHjHֿ+ʺzI߫ܭzw{vӭ->I`9YU?a|{qׁBP`4ӗvt\K?㏗!Cx5jXB>`'5Zym/! 4=p`/%%%rмOSQSN1UsssM{̼e/kP]966V96 WkSzkne>^`ʕ+M4[р?_.\ӗkP]kӊkEѣG+s9#{,Wb_VתjVi_=ױYG!P۠%6S %      UiӦzokNpk*1r㈃%S3TCu#Α nɩV0n[)oUҾcѫ+>9wC jr$s~2gE8WPwV{sF*!VnS>Eb*GKavm!!  M"Ar#J#v[/muߙ/Op%kvU<k=t5ẁ! )--;_o;Ao>Au iuW53 AZlvWCksʵ#Fȑ#rqqy晢a:T6*}P 'pgff_|Q]ͪΝkSNuqf^6a;vmӭTzU}U]vkJ222 ?^n*ڵ,3~׮]OMkP_~l}wC5~ 7ivN… M%z]젺zvW_z?/X1GT/--5??g.g!Au@@@@@@ WG9n@90չwN/wY?g]J`uN;B:xd ?UA#U吴Xg.h'_]48A>YT?tѾJZKIXh.dtwʐD9tW) @ lϑ{Qw君Sd|eUN[;W~߻MOϓw'8Ȫ~{ e+m;䒇8zCwZ@k]Au;~kTjT?C'y٢U"{G8Yl@0V8ՊdСb5MkC2sL_>>k,h|;z{g~=VK&Z-Zdlmzpf꫽jZѠzT~wr}M{he4gSC5~כ=Uo&3vTk=t&ҥK3k7xz꩕\* qyP:@|퀺_F&      >򊩨asQQrP]vUP,걅ťvy|h9$\9D~Idq^uWʧ?lt@㾑͹?$(Pf8tA_7NVHߙuwP];i\ͼl:?!x'g]$#)ZzY=XAh|*ksW[>uRTRay$1&^uHJ\!xW_͋WY7n#1Gz}"[_TxKN9ӯ-ϫx{%}ͽ~su]&^Wolv(j/6~Wz޽ ֭[T׊L=ʐյViנP;MPcǎ_z%'o8Au]L/z<#ڼ^{1P6n̶kϞ=ݛeܹt;4[>sWi[oU?gTC5nǎ3?TW7s5Skև *7oO iX0_>0P#wE."3AuTT%xE@@@@@@^탽nt~}>dޒ23,%>Rqs85.5>Jq^9?o" #*w])~6 Z~jw뛉zPl@Q`ҼeVw+~k]^^f܏ vjE+}d앇9cozzxBdUUMY~X7tg"X ^fإAu W4/՟|ʰa$77W2223U5p>lRzhٮ~mɉ'hL~I>}Y~뭷$**f]+G{n vP]+?C2o,[SBe}B}{^^Ao>Au 3ݯ]QW\՟z*/k𨣎fW\)r<>>I/:pΜ9N@zܸq2hPC?|ٶm}rw;O=TԐV޵k5J6n ştIx{k~ ZQ\ǻWX_,s8nbvZ'LadffmT߿Y֊Ç7U!ޭ[7sެ~'S?44ԩT:4@ffZv8]_ew@?ezulC@@@@@@2u$[յH'k; d<0ghZaaKc3;9:Uvj7g^(-;Y J !numN\;a7WCz9,5Or:D̃u_ {Kee.Y:W>alھkؔ;vѡ^} 4@SՋO聯%DN@v;t947G߭74D;Dc]Ef;z=x7;h=}iݯrmZ׮^U\C&L{\ѣ~ fA+^uUí7cAf Z?/'0uE#Fpr)&UVZeBPVٳ.tͻw65"S>jO7W{G֭[';vMf=={wJL壏>GyĬ>Ne;ӤP4AtwS.H6oluVצ}u>]xr%eKvvw:>}8->. r0ןI'QfAt}}~{XOZ:@@@@@@@M&]$""ʖT6;+9.=-C1Y7s pOӷ%Pb+6}!A0cX",ZrwdUl۪nǦʅ'W+wrh2+c.#Gd `q^^Y$.@ZD)~K8"I.5.(1v$"[qA}sY~mΗk5c;cz=Кa Ե4#Z[1Ν;u 8_s5uVp,qqq?ʛo)Tv뭷M+N>tK8 9CE_}j_+>3y0u>v)fϞm;Nƌ^;<8pǛЦ^ϢEؿor?X~a|˥^*{;w ر^3ᢃj|?СC>5oյzlڴ5QzkTkc6?^%g_ŷȰ`p ofz;ٰ'8HutOYfWsiJ/~Wl  @ 4eP?˶kzrPrL7vBd˪q3L_XH:@;WWj~z`fTo1JP>jMTwWLz]+_vezmfAl gddx נu]g^\+j۾V}m2}6g*dw^9sA4>k,wJNk֐3eH:gzJ[ӿtK2n}`tuǨO#^ U+˗ܬ!ä$Lpi&>.YD^~e١kإK>|؁g_;k8qԩV]+sk\:ܴ?|p2 4m{i\kVi}G2n8yРA裏z ժZ^+ǻ駟npoyiu vjEqEFFJϞ=M?--zmy䥗^+WB9Am&L;,:ѣGJfC_H;zz>lk8:} pvwdAt{YU?GH      ɓ%5%E$*hHPUנ{KBwErI doIk9&"T.OկǽȩLѵJzD 렭ErÓˮ=>c\rZ.(,K r-ȭ|\CYDh/V"ݎJ?QOC_I484}E:VGT"Bd#$zze<_Ild5f{zCyZtTR ׾Bj 7%hM6۵kg+hWw> qoٲEvi*k[oYߣ+>yƍ>iN 1.**u9\9f=?}!$$6.:8@>;v9# v8]_e       К@c75 Jvܕ{B$KɏՂDG.pc+ @ ,!%e!֮'`vsgFΑ54äO8"JzS>^vFylU~kCwTujơvP]ÿLנP_5tH@DছnlU=`d}5+kqqsTT4@@@@@@@F)TOL4 > HeKn($",V'*--־xS\XZ${s:_l$Z1@=E}J8zI5M ݿ㻷TwkϲT 5!t;n^'? E lE@@@@@@)P^^.^yE$<<\BBB[ɬ@@97ve|VT ?:#@hR^~{LMs8*      4@YYL6MRSR$ To\b AuvP]v(^'Y!mYۡtݧ{1Lw ׎      @Рzbb؅'2t 999f:47 mSw;TNOC@t_v_AA*Ac@@@@@@j+0idIOO!^[9! @ f PDwWOw/ WV@@@@@@/2+"f *@P?Tt*k%u:>2+@ Atw8]u{{~~z[z@@@@@@hSMD z뽗@Iz3A4 ,0> iL'^GP#4DvH^ŢAu}/ׯ_̋        (//SJbRhGA/  yW\);w4OaT 4Oj0+@ 1wgݡuwP}Ϟ=RTT$hF@@@@@@8&M,iiiaeyAr   ՛߶mYF4_5 @MV3v :49       ДTOII-:i:?7 z윜K||k]g<  .^T_n#4UuW[& @Txw޼o5|       P/WOdN  ׊+V05Oct}T23@@Czm5sNC!FC@@@@@@ZdzUQ=""s,zk{@ZDzTϣMWT @# TT׀]D&&&Fzgp       @ L6MvjͳܪNPi9: &j_~1auiHHDEEꑑ&\׏! vPP ̟ݻwKqqԻwVK(Ώ      u>yNY@@@@@@@@@V&0k,ILLoEVt@@ To7KD@@@@@@@@z ̘1TT e'@hsT~?i\        @ffKXXT? * M*@PIy98        3g4գpO@hbM @@@@@@@@@ ̚5K$22nr  ,՛         @+Њ[=d  ՛!        @1czII[͟ ?  *'|          dffJZZIpp0A؊ T{@@@@@@@@I ++K%<<\v@@|          ̜9գz\lE@         PVTOIIH)//'^@@*=        T/iQQQf`V/~Jy9 ,'51@@@@@@@@ڶ̙3%99Y4NE# @-a         f4.PQ~+p  P[굕b        E>k,IJJp m;kF@: T@@@@@@@@@ IVVz@@A6=" @=]@@@@@@@@@M hPݮLPM}.@%@P^l        mH 33Sw.!!!BP x.@/@Pv        @YY̞=[RSST?o9W !@P19        YYY, V &Ow           @IנzRRDEEիb   `778G(        4@|||-33Su& o.@(//ⲽBCC%)cT o⫳"0h۱aGao@@@@@@@@F|P\5&( G'ʼw40 9堫XѺ1@@@@@@@@چ@YY꫒"zCn{~alٱK}LDyr87>]d8{u؛ -0y >oE&9 Wҵ%z)Gy R@@@@@@@@'0c IMM >~ݴM>f|`hPݺ P&QTFRRZ[GJ|g@- Lwl[ES.W_c&Ͽ,Z-' -;0c|~Eqx R@@@@@@@@'% +T?2 A\4у/_Y5לS\㪛Ƨfʪ 5FFw\"!A5sq @m;>//t7+$62YBC ל R@@@@@@@@'SRR$**X_y?W?ȵ5&"\irHzaM.ZUkio,/7l7ɩ?TvOj \3 S9eerɃ/ˎ\.;h99Yhhм3Au_*!        fΜ)iiixLgUVm% -[InlJȰcJ.`,YQ{8],a!N_C7D}@#МA*Nz {Bgy^}u]ihм~k!        -))ME܈۞-KntEE_ #>]u6y`;97?ʙGwuAٸUlV29.%kGI^kTgNڨ0nf\\dL굏l˗yRD:DJүG7ڻc/٢Us $]ڥU mrk%On/WeͲ-oH(98-Az$ü^w)ū;}zh:WϑW3pġ=$rZ.G直*}^_½޸Eo!1Qw4ևh ? 4gPɗ Y?$_jhBQSqkIrvة夶A_ 5XF@@@@@@@@vٳ%11Q"## {쿶5w\6n[Ӧ{/=KHmJ\r'_DVmR;Ș; {FJJü?z^}S>J'u'w$tGWrw=/%v+~&d>OM_~b8;q^cwy}GQ}&: ( bAEDQQ\kEE`Bh X^DzC $<gMdCo3gf|g٥tT_mwﵭɢBc*GOus؍[V~m׼u%~&}۵|r|Çn  L[skOUcL޻H?,wgd~vU ytH3ɝ.~N?nzL7CA=:~]'kcMq@:@@@@@@@@(G6A(ɴ{Xc)2R`_pԬR6>zʯ2bChk5=6㽪;nT۪n/ك;v'#۬~KgGAK_E5 rϪ/} !eJݛ'5ꘓ~[$lySi}C̓J%9-v|aRrEYuٞ=ԇβ@@@@@@@@@.ɢA@8A|n'_N/~ҦԺ^#9+g֎lxھζm/.=Ϭ~L nZ!iYѯiO}UvsOx4beuhձ*: ٪Z?nq*;~|Bg_mԪ#5ȲgrJ^wt 7YF4'P`TIbʢty3VT๏>5Nz@s:n旅%m=-yR7.gubg @ lʸ?vW~a~& yyhY2j/8o%N\t'Z$Үy#uVg/?v"{+ p@@@@@@@@(wvEuCPߑy:u5raúκ -YhNz 5䑛27@~[<ߡε}/X?Ϸ+0KM^w{soGX§=~= ljտБ#{_*/:Ǭ?*kyO9O>g|S5}[^yT@<߭W?٬Tycv%NGz SMRT &ӥWvql!oXi5{XD(T߲sxmdYsryߟgS_ط,KVo>kV[:ggR1,Gf3ַ{,Ys9hՋ.         PF!III!AAATTgNW׿gI*wG˲u͡WO_k;[P#$3+ɝ.6mDZ1[c4z.ҭ%r]seU7äu䙮umhE9~* Vsr_'939YcW|o,y͘AuEznK^Au ɐν?G)+G{g M>@_#QglTxW?Z5]!ǬϊHߕ#BCjz ٗ]|t E@c@@@@@@@@(WRvm @'̅˝!z9Dg(=ʢUe`Z9\QVms ZsU 9ʛq_JiY)g3WTjlݵl ҃;U;FTbF^Au O?֫UXUcMefg֕U*j7  P?)kw-u,^‚#%B>{%1l8} M;w'|5+os2Ef^ݤF 6wmT/@@@@@@@@@ 9TTV,k)Ke)6լ]W_".9Y/L#ݪާSDCY[T9ɗ;lm ի;&*#&lru SUzgߕf[b*2ۜqvC&׸$k\e?޹\Ҹk^Au ZY^+çu>JrOKMpO(+~X6k:]Wԕ%7SuvwѵS+k~Vxӣ3֩"_z ox1eVL"L]@@@@@@@@@.0zhCEMM};a<߲jv9luJ|r43S?TQw`E"B$*"ܩFۋTa'zkUqδnDIly[1o1kgWk/i k^;H?l6ըTQ>|N{a=qs[]*T,mLT^ío Tz_|=|#$2r|}ޟ|Au_WEQc@@@@@@@@(OZQ=!!/7}mҳg'<kVv&Y;fU߳,ZA8Uolu4:- +Kl4էS;^٘q.!No\UHQ_u3Ta{٦1VА`g6n!5;Amykzq1p&jlޱ[Z__̣kv}kg PVNdP]? #(\Is^n|ySgS_}S{!q*ü^Xv={+ p@@@@@@@@(w#FڵkzFFdYKYR(kA ;W>-}yeff?-f0e2b,=]IzIκV":A肂2{~Nya1[u"zӵzhiꪈcorE3  &3~0g}>kq2g}]&m/lkc2aN_.ۮja֋#Al۵י[*1|ko:}߇nqi eED{]ڷ8G\/{߁CVc=fܷ,>bڹ}Nu?\gGYI/@@@@@@@@@&*. 7;aMϨ#]],V%،Geb YxY*AqHW3ct\v%bCa_ʼ՟xw,[s5-Ez_ټӥMsrڭӿy|8aL5kaCþ)~?#¥fV%~?/\!j^[UffˤIιu`HZU>T {5Փ'nmk?կv @Y8AS&?WK}E!$ϐɯKV}I$Ւc2}!!9PsCփT3 wPAPh        J`Ȑ!/X6}`{xP`Y vM.+LvU־Hmwa{-oe\ZսQyfẇEKdXԬ\QXm>^1\}[%uDxk׸d4T{樺b'Ъʞo*zα+^TG2˟Ⱦ9ըT+a_#֫do@=eϋ ڮ}[O$3+| ugs?V}k3yVB:ԉ&[ʌydƭ^uu{+ P@@@@@@@@(5'ђi 6 %} %Үyc/uy#BC%,4X4KnA+7sǪjZ^X/WfjpmF]UqMި|k̷vک} tjӣC+ AjgSs<85Qkg}_& ٷUdT)EZ־ݫ+f!&v.k*]j!3K!9v;ogXUzmZ1Z/-"zm/|mH:}*V3]Ub'7vQ ?b~Wez@hU׹_tw?@JY`gDEp`T 3|9;. #G~~s7ַi?3v/(2eD?rsЇ> 1@@@@@@@@ʵI;ՋvXilٹ b2UU{U$00{:o۵WҏdHLTDE>^ kuq|gG O›Ɣ@@@@@@@@@DRd ;Vț%_vOˢ/}`P`<䢳Oi<@8w#        ʒÆIllDDDHHHT?'ٱuL!9*Wv Vc؀ &@PT\        @ff :T% T/NSX;v,u[vʺ;Z^$תjW?Y#OK@YT D@@@@@@@@r*A8 `}e# @!         P.Hڵ%$$z|p  Ph&c@@@@@@@@(G2t0ILL0s  Au?@@@@@@@@ʅC%..N"""$ @,]9At7  ?}        -!CH\|x<3z^lA@Au         @RR$99Y"VIu*V@@@@@@@@@@@4(VP=00zA`lG@{@@@@@@@@[ 33S . FP=o*          &bUTO*GFFJ@@sC@p TwkF@@@@@@@@r :Tjժ%*T,z@Vz=JϞ3# @$wz@@@@@@@@@[ e`IHHCEuW@@ ? @@@@@@@@@@ p@@@@@@@@(wC5AuUQ=33SzVYR VsA@'`2i$;JHH%K… %00Pڷo/&W)}\        @ |2h$%%㡢zr@@8%: nZZO<3]vjKc뮻Yf駟ʷ~k}}2d        PzC 3###% w+83 ,׿%;wi{Ì}ge۶m}9cڥT߰a|W-[vIˡ$]Q,07@@@@@@@@ /%1!A#"$(0@@QFi#`֫W/" 4mۚ1k֬Qj֬)]vFP};wYZje%#/8wY>Giޓ@@@@@@@@HRRDK ȲF]49@@SzzZw~O;E@P\       0CHUQ=**J=Zv111' # صkNP0j%7ACɁL%u=} ٳG6m$-Xb.ȑ#w^Yh >{5E]d*T}6o,ތ*jժ2|>t堻>תbrJٷoJ% 9eÆ slf?nFFԇVz}*U"s5޽[j׮maQId#        P*LIddيP9/\" aeXS+jP]3f0:nOMM?C233 ls9rqkL4IƍU.Rg[=gs뀸8馛Ax_y9hh7D:tחnݺ`?s:u  ]J=z ;FFk׮~]և = ҩS'/=ч4޸qTVͬ×bŊұcG #FV5Snݺ暴*ڵk.Lnv}/B9Dwҥ2e'DA} KVV"5Ts;M|װ/D_Vg}<l       'A))dei%(8zy\+ MzJj/;x@nڴ=v^ׯ_//ٿz& o޽;Lkf΀| ,ꮋbcVr3|X4,~!S!1&ܡn s]ڧAt !~޽{˦MD<}\+/_|L8t?#ҠA}zc=zAUnj*ݼ"       N`D3!)!^\0 VzaJvAu}R_~ hT1bL6߾}{vwC\s5ه^P(ZCE+WZ5h+V~m{ukN:t= 7nXx{ɒ%ys qWlرil—k_=        pL@+'$㑬,1@@$Tzj駟s2AAA&m+WP]+^޽s=WzQ8PP(_5kHhh _qRF܆yukH];ޤIo6T+SN9ӎ;v8Yfr]wqXrMd '8^@@@@@@@@ JICEu  @ *vPVZһwogW@;z߾}eʕyG캽Ar9νP}0`@ԙ3gCWy}| uToݺ|8m۶ɳ>k[h!]v5m,|&{{        kE8DEQQ7  Au_JoLIG)?P KE5jL:՜/JvHy뭷|_iׯ/>h7o{fM7$_~icAP=Wj:@@@@@@@@bH<x 3ǣzr@8[RAuTu{+6wPcǎҦMcϚ5KRFҥK.ҲeKw^yrgHϞ=sɭ4#'F-O7m,T0    @IDAT     @9ʒÆIllDDDHHHT/o.@| Si* D-O>TV벧L"~ԩjk{^+/~lnԨ<^C7m${6}ĩ^sZ1fKmu]lϯQAuWÆ 塇g- (_~ncQzAD'={\R6mjv.        P42dPIJLp+Y " @ͭ*^ψ#dڴi*U$͛7uʑ#GL`~3ۂ_+~lݺU{9g-ZH L *QFԩSM;&&F5k&_#s̑e˖mիW^z0(Giuzחs=yyYrJ&M}Vӧ[kSΝ:??k{%J1ۥTjZѣ٧eհG^uCQ- TL4Iƍ^0__t@@@@@@@@ʑ@jj)"эR@@ՋnW{j%r~OcU}9ȑ#~ 0X/dĉ&k]>Çe„ 2sLnuYҾ}{SEZM<==]4qr履~;֯J:쳥CC#/m۶ɳ>kбcGiӦM=#ϗݻخ .>ꫯՓcի+ZU^E(޽[wO@@@@@@@(/u3f$%%ArN@K_|Z<--M:$Z}z\ kE\sU*x"4 ns& }         qTIJJh*gɿ5rʯ?ڪAni#g$rz ޼]qUU=SjP֎-cTw(i '@I&pl{lg( ۜ B         pL@k3FT-ǟ{UR-]DU}ҵE+:|9dE쀞Jxh78& *] I*PA&zIթUM^W_aW n% }         qѣGzTTdffJ^:[[l1)X3x /[ٙK'R^{FtnNyuײm^6ͥEznar_jS?K)PvcXHk{WT_j޴C8$+E/Z%5%mټCV[6&֨,I5Hhp=U^@JQ$o,?-\.r٧̕$z6l%w6_-FbƘ| t          "0|pINN Tڱ{٦sֹK 3dڼ?.ת|tԷB, 'V@?&x_^d(f{ҷIFfϖPV-HBņreO\ݥ,umCWqM婁^t8}@b        k!^;_'t]xfy6zQD1*z"kA Ajתt5s3th5JQI۷k'+k-AVY!~}~ @[!s{~|zN?ψD>bɥԗGrG{6W=L~*vgd:[?[av]?]@@@@@@@@@\ 1B$""BL|gͭJKu T}#匤ZVLZɴBҮrg"WT,⧹qQ!2BkTAu!y{IVYkĄXs>oIΫ,O: @شw DFKz:?uDة~7yvƮoN{yDb)W5k(oX5M]&s5,+A        'T]KU;}<]$lbfS?n/gr4=pg흳5=׉'< mjy}7piXK^ۋjV5wboCRls࠳~EH+rZmOz]tճWs~ $/Yl Pe!5mfQ^ E}@@@@@@@@@< 9TTGTgNW7J6w\<9NGL_Uvw9ۋTO{@z19F& ɐ'+wvƹꣿMOlks~CR@(9Jʜݚ >Skt]?;UZjUZq/ eW?v\.ntnس_0{UAuwZA"         +ѣGKllx<*tZHrgc wP=@$_$j}G|#\mVr#^$E ]N^69-7Zۍ!^>z{ qդ^B iX;V9-QCh#@׏[g(Zq=EJz^}V$<\~#esnч>zyfΓalVJ.;I>~RN.RRxTٶ{r}¶ V         PzBBAu_n'V[WZ5-k1RcL1d8fgq^wZ讨냿)_͚\0ie\L=  @ hXݽhHFsfyϝ/kr<;V3Lݮuk৲bV c=䏿֚~6z (@@@@@@@@(#FڵkzFFdYKYزeNLLLOsd_yx]Yϭf9lꢕfU2O}|7sVԝ\I4=~[Z~YV223ƅg֑Gon P':d%>_ջtj1*?gl ֠{TЉNTw'@깠Ѕ        RSS%99Y%ʉTwdo޼]z?yo*8}杻gђu,ȝX`'34YagPt:`1/g=1HذUd-i{MuwHH>V@JNDՏd 5His~5 !ȴ=tV}8wPIAPh        J`ԨQ `2%^0v=Ipw0/*LۜPiY/GkAeOJQ+hQb7l%OT>:q9VR1ʴ_rVΫ@(YTp;\Pfg˝.L{@~GÝ͸ɿ/cis%悆9_-M}gs"4]@@@@@@@@@\ 9գ%ʏT/OL{QO.m.8lLYe f2nWz ub{%w첧%jʭW63Zv 'Y=ٮ wPG&R.V ~ ׮Uլk8ߘI2kJޣ]f?@JLD_Zs-} WFflYqkx"/[*9SѰo(Ջ>         Pzbbx<ɲr}X9ÃUU?j%/4o$w_ ,[+}Sv;ʧOqNְkT 7l[w:אtY P{ƽz86tiW_aWv;(=&Y3`@[=O &1WtoҴ"3eڕ=z\l۵Wf.\.6m:;X!^,"        @HMM5A(s}xɐV l׻m!W5=kliu͖5V覆;.ZAe6wְ#7])kF @ v\7-n;{v˙e3n7 C)MJS 4OϹ@@@@@@@@*0rHIHH SQԊ5%~{Z=BvrJ\M *C+1L􇇄gvƼ4KYrYUaAH֧~/{rYRE hf5;;YL?1GTͲK(U'Vl{DGݼ"mnf&ª=XCz7K|JBkar'm~2kJS>P̙T/kov^9P! Uyങ) >.K@@@@@@@@k׮-aaafExcٲC핽IP`P&+I`x43Sv/Z嶂*Q}7l;ԯZ1J*x B@NIGd=&^L  )uaNFP0ZegJwfZr۳u^(@nt e-@@@@@@@(+=zKDDXE <@@ T/&ωs}pѣG͟#GHFF~{q>vV@E׃Ǘ-ޏ6        p hgԨQlZȏv/ A'v>|X2OlZfAD {P߃0} v F@@@@@@@NO48G@_s:d*T0J(={ 2}z?5sM        P~RSSnݺ&APw@ ^ ꮤ!pJJp LcYY]w/ۺ!03]gA@@@@@@@"_*5j0y         PXTS +x@(w-ZZ+kUi{ hUu_yd6hEwtmo;v0sYo?լcX@@@@@@@@_4#@@ T/۷jP}޽l*TY3; ٳGytt kHA}vW==&==]n*|y* ~        2vXILL0; C@@| T/_] RJ/e{cOKK6pxQzD;n}jl޼<ܡO4kP]vwς       '" VP=22d6@@ ^;w5kJ./˘1cLΒƍ cI@Ç+Ww!uq\VQ+W.^F_>{zٸq ׭[.au ͇Vw54@@@@@@@@ ?!CJZL,+AP=?-! A6Эk>,;v쐄beܸq2qDYn]JiԨ nZիy5Kz:xweÆ {kfͤCfmԩr\ Æ sQd‹RQ]zv~u}?޴iTXQN;4ە5_E~*gyC*'rde       .2xx<*7C@ ^<'(۶mb=կ*=޽;jXwr 7S9&wt\wutRf۩S'y饗~A>nڴ ڵt_֬Y#ժU;f}ҵބ'1t'((|%?p}wܹseѢEZgmM`ڵk>0oݺKv#-_-Z0~edwe       @9ϑ#GdϞ=A k5nHTTyD 腩nIxM8sL`oOn ##zm۶yNV>Y]`3       @ JIĄ3lA4  p T/NMOO7+w^i׮9 \s5ҧOħ[dҤI3ϘXn޼3,Id ;ޤI9rd̾, C4 נ}̾^:F5OC<hHgϞʸVoo߾h%4e޼yH0~xS)}e˖In믗 .@6o,Æ ;ww}]Ms5}λf@@@@@@@°%66^@N~e_r5~!ъu) c~2vXрmnܹs[n1JS[ ZC+V h{hZzƍ&[fM\ϡf7""ٗ lbUV~.B (͠e&W2\]r #WO_zu}1́}OԩS{_~ry9{SO=eko)-[tkG3f>=7loTj &3w˗>Y=a        :t {on,O9g@@\zپ=A֭[P?3INNG2m4 To۶Wϟo*KkN3!.]y o-?&tڵvm'dYfҥK|$ꡕ_xIJJq^|:UuPLL·zȄsOGQ=fm/ҫW/y]p[͚5G}Ww? s~Uk^_~uѰzI'ޡCyrj*ԩ'|vZ̺ƌ=G͘UߙH!5k;}AC,VkԨ!*Uz coVkmyͫ_C*z"##sjժeם{.q       @yd /"xTT/@ %@PP\%>XõT`uKl~cSy[ԭ[ׄym!:.Eߝ;wαiٲe!{fwhi g_wذa+[Phޓ /2{QFyWn&y]T?x {1޽s.u]=qggQB9r#nW='{ W^mz|P =ע."@l?{kлk k0YkUv{w8yu;vh4Y!γJŋ}`}4~뭷zU>7o'|"ǏoNppjJxILL̾ss/{C .PVʟ>}f ˵]_ f>#Ͼf.@V~k^Ѯ];nC,        &b*D/  Tw(dCT8q 6kYCE]@aȞ={0V&2e jRi&ĺ]+kr&arʯz{Wg_OEÿҧOS|۶m_]/ÇwΙb*kI5`߰aC3gc dP]]nhK.Luƌ&87uz/]3sCݶާ(Auݿe֭& ^4E? IhpYO! ;}UWk}_~[~˗=cлm {K/Ʉ ý WjժyMި{nԯ_l֊M =<ǃ-_| ;|h^1.Xիl*\43Ϙ|mڴqe7fϞ<1 ݳ       .2x$&$H sw@p;e!:T4믿.۷/Au ju^8p[O\p7ahʿTw/k֬oT[ xg_ kV[۶mݧ5I& ZYCZX`#BZ^+kWZ]>44yAڵks=04wpR?׸qA8)Q`& vXkDQc(p`l_LH( E_{{\N̓ۙ|3ϝ݃;ޜ VUU}zae}Se &Z"u<~?c~N}~ Rlto#D}ddd?wo]>{iG}g*?n_7ḵ\҅ӗ.]>u ŷnUuu /):        YnNTT^V@֧Am頺*+T@i^}>[mo\w|]SU#>NMVZg=zd*̪`Yge]t[^׏S>} ǎko}1:|P=ѶhDaWs +`JתrIl=4hlkͣѾDZ1:Gm۶,-H{wmРA&v)w^{h}n޷n9n'Mߚ;t7vݨºq@RuΝr*+mO>U[Wx_=_]WWvEnAuY0|w| b}<>c:t_) 9>O⿹swڗI֜c馛\x_xꫯo΂F:kvСataܹv.}s>g~S`]7߿ޛ%t5U,׍$jF7ڨ)*Q 1v<g!uC!u{T]U |}зYzRx~7DKҥK]Hڇu~?6Է~zԟd˖-3US0Wwq?|Z®#/u=$;_/Σ}g|76^{ٝwTW]5U\n0TܹJ4W}D 5FE)C5۳>>6Ux袋M/ ݘ]nα̘1Î8y->9vg]WVVl2       @]!_-+-u2hTTkD  #@P=խ(AuAW_u{ 'ص^[UY\cUqVsnnP]Ojʓ&Mra_UUeh=r2s㮻~؍PkUKt:j*ϥ# %gnu9Ҷj!n㏷)SP%;)>ޫW{|U>\wM&{챇Av%Os\8餓_or["} 0xnL>ֺ׿6G+uL:^|E{'lnغ'_\}ƃ,7XT„ *oƌc!      4,o.} To،  [ Rj>+裏m /<LPw JjgoN Uy_4~xW\ے#slʹ˰)+ ISUhm{1w7nZ_oZg?s98q9j *[}X?nPQך*+ۥKSd[K06=vLP]sJ{Ӟr)vyE!?Jm?uƩ^#<2>|R`[O| -^zj1?v뻾TM[l[~7{K+뮻,p۷~ރ}C-rӧ!]wz~xz/hPS|m:}٧}O?mk={3&ctONN :3g 80:     b 6PIDAT  @PՋ]a57]>! u!iU -v| >/;;<ꨣt](L iK/do[׏`amu˳>.p̙3MU\.,0k߶#F&(*%3+JǯcR[ Awѭ J֚'>}ڦίڳ?!3fp7(Z*]+D}g{smTڟG} fdMKAh2|sG?GVT'tOoYϩk[lt3駟.UWxٷd45g;#fyOٳg:w+xW_'lK,1ݠ=蠃pUK #`C~7ܪ|IF6mڸ_Ǣ;t)&yM j{Nlw{٨Ҽ:5"fn9vN;daʕv1Ǹt*tS @@@@@@@a7A#ް#@@  @aFQWZ-TWV{qģ k?SLqAŋGw BsTxw }YjEՕMߟyp^ {+ض!:>UVp{}gYYY it )&٠ԿFemSmk֬iVP]V 7}T8XaVvr|Uv!YBc}KvOc}ۏx'L`cǎɓ' wGoPѷB_~VTT@G e7M/ 2ҷ.ۦMB>*TO>EB_|Vܠԫ% 'sT3g ikmo:{| +dG՘eV8}&DMȎ5Nujz}M 'j }냬+9~P@]M7(UasuoofUVwM. =~UWns#1]wS]w;ϯ9p@@@@@@@u UE ϒ ۋ  - iO@]Au֟}ЩVj Θ1Uԩ qcZsUYah +횧ꏭպvms/kAun?&P_vt4ܹsЮt})3^tBnv饗Jrjhyww7r)mܸqki| oG;qDwyڮ%?x;czymztHiii lkӚQSH^ay5}6~mWeuƇnjh!,k7}Bcǎ;|lαzNuӓ?UX@@@@@@@ T߶^|SU^z]#z@@*pq.T5_&1[,AtN>tあ 6Fp(tR}zDnWE5%… m&"[lHv~c'~YA^_ݸ?$^_} iZi5k=nYk=nXl*KۺܯEADm$}       P6axM*^"xH@HQU9XAΆ‘8TPiUW7G2񏉶>?V>=?.@@@@@@@@ذí, "l[Ñ  @+ J_KYEW 1V!c^TTJ7j>Tݯz~t?&@@@@@@@@u (e\߮MPu>  BEBҥKݟݻGF@6m?h8ئe,ZQ=>h6CǤ{Lǫe        RYi.W@P=*2  PAz`ZQBk׮+VܹsK.ӊCAʕ+m̙֩S'wfdd4)=˗*Z{Ѻo>x㷩ʻ:%KXn\$ @@@@@@@5556|+--l-@Gz=0[A[]h3ifS䅅g 4T|ժU G }e?&O Ə6mڸ}jYJC@@@@@@@ÆbWOYQ@@.sUy晪@w޽)ٴi\C.bu6W@}& ]zdӱNg۶m9֖<&       K@ fA^'??Aq4  %!/ e\X]u& $0c [|)*+;tݫ 뽠?-q)YYY Էı@@@@@@@hC*+rs-BPQu\ Uh1(B /\ЅwUYߩٸ=1 Xtwv\)xsC-@@@@@@@hꥥ.a)׼3 X:@@`# 4a+Vؒ%KltaaOnpצ2LC`} ҹnXh mTퟐg        !cVRRb.FP}C< ^5W5kք֟e˖~Quߦ-GZ|Ut=Jn̴9n[ۀW_z&NfI/ ?}M_=!AD*!         ڈnݺY^^sa{b uc.9@ۣ ' @!ύƽkϴvzs ';?1TOB         ]P=?^SSciAz׽&^ׄ@lȠzMM ã6O?lO;_p9 ͓[O#}         xt+++|*7慈ử;|zZ׎E  1@2ޔ/!O:5u%٠y/AD*!        ?TWW[qqwA4*@x)TQ:؛(ʴ>Ҿf-_6kz, ׹wi6wK^؎ 'ݬg.뜫 .Of_l\ۼCmf31'~>ݖXqt(WZm_̜cSg~kgϷ96d];5xNX@#!wzƽq{'轕1a;{/<1LX;};fY`kXIVY{K ~56hY:Au @@@@@@@@09rk(6TPAꗂCHO#c'~2#4>gyܪdsí]~nL_yړo1'+N=x7;h PPhpNAnrw?~,Y.Om![VfFe@@6ﵯLt( W̶55b3X1}Z W^v6:ѱl*;Ƈm5Vefj>G}ӧ͞g>}̘!a#ߝޟ1ZIv~6z#        )-PUUecA:6hI6DP]>{z_ s.>0ƾ]8?~enկc#_y;~x̺B6a'a7[[Sic7q,!ˮWEw98f @%Lr팝.[4i/ћ度ww7Nuh[`^9 FZ}. mu#;3:wh5m';?6@@@@@@@@@` 5UT/((Am G]7[9~*W=o:ֱٔ &>趙tJclڷ}ς|ivv.0cT{쁧7[zZm]*vI_δ3 i'f})w}u<\ڍSw^[tuO>ڭvۿ5^|g͚0;eq @c_x2NJ n.zqӰkp7Czm;n? iMM]_\i[;~R}[3ޛEtEΏqW7         r֭[7ϧzc^hP`r s _}0s8{Ԟ}}{7ڡ_?v=U@o;u)w͏؂&; ,ېgߴߚWmsu뉂wѲnLfz]ua] Οx_~{'Ǘ̵{Ƽlz/nng@5g[dg>jE?˧;5ܽL{.>l3ǺvU~>; 3s{F 6(d*wɵ~G۶ݴ#g+;s}8u](NU5AXe\XX<"?ISj誔~Ϸªku}kC|l% @.Y kʀvm_)jWtݖK4>>& ľGfos.<vGwڌ@c         ȑ#׬YciA$ڂ`M (ۖŝ=aC7nVrVFܠD~l[UOmHϟnYb7qOv>;½A WTٿ Cuv߯+S)W} mۊnu[۩ P[_|pEm1C3pK'V_ٷX~N >{V8~ޯ}nnګ?t]~uPn.DEΏ>GS[OzG@@@@@@@@ַ@UU[NNeN 7  o٭qrol m2##[i_#;϶*@KGE'c@8&2,wo07۰oO8Nsmk0nxd'bQz|~O=Udiͮotz@ ،ElV {OL_sW&}1îxpl8=DW*OKWEw±a,q`ߦ ';?҃]\og:s׬]k\{q|~{f{7Ou0򕷭w]sO* k¥U87hgrX->]9AQUe xTNl=Ӭs*_~&Su G ѠzHP9jA@@@@@@@@T5j mj2x7TP3^hN![l/nw._Ys?>6v۸؝^ڳ|Pp/ćt%aPANO6; -|3wMB~綦fm8s~O @3zZ;妇m銕@~R-aé=~]_xu{/9ي7k.v#6ow߼ ';?M]&T1#        @ zii[mm-A. Tu]{A_ ;vA#_7%v/vp] CgO{/;z~nfϳsv(?^rpo.Xl]22ltc߳6vѱ۵?V~TG[f0WmyP^k"WޯO9.ʯ-U>)  &.>?j~ 5,[q7Nq^zgkn9-m ';=q3To&@@@@@@@@@ e\P3xAu^W+ټ&1_\} ~XVTg<xrmr픃v#53gb&3Ӯ>0i[SޱXm?ɭпfdig {E6xK6]aWt[|`?;j6o h>.]΋vmVvAvo@gPʧ?sJ6n7{wnmc۔uOͲKr󎳒}X.: Ad;mAf1@@@@@@@@RJ`ԨQVRRb SQ/}4ވvqnph&wj}yW=W cyzZZL]v~c?>ۮy诶,r[ZP=7;+O:kksmV / 0XLL@V^cQ[|ۏ~ti΅׬]k~}n/g[U@!P9B(wCq6vZ߻1! ,n~jjkl/Z`K$݈uίqu#wױaۢfMRmSc kCcvބMb(        Ο \"a?YV? ~gP{ƨr# +SW-ݯljOi#: 7!         ^]]mݻw\2 \'\ +NUhsl]nM7r1᎚@P X E@@@@@@@@ p=]P=--zk T%}ּEApXF,VXMMu(w"7-Zܾ]6mKBiӘS̜<ˬMVfP1=ԛD@';/3#:OSZ\՛X@@@@@@@@HE}ELxp  4Mowo;        lL.]ļ?wUUm喖e/'' Bhr10@@@@@@@@#@>5556f+++lͧd& XTz9W@@@@@@@@hѣrss---jַ֔0G@ 1@@@@@@@@RI@tջwn " @7I         BUUU[X^^;k)s  <sc        喛kFP=u^{@)@PpLC@@@@@@@@cZiieggTOWD@'M@@@@@@@@@`9rY^^QQ}9=@h-.@@@@@@@@@`=zuڵkg7WC@ "@@@@@@@@6aUT/--*o¯3 -(@P1        lFrvUmMgJ5  Hp         2k۶-MV@@;\          @>f+..|S@A,!        ]Pjjj,-H&m,y@'Џ        |'cYyy)FP @hHzCBlG@@@@@@@@T # @7ΉQ         #G2͵ *# @c7Vq         UUUVQQa999NP=U/@/@PVD@@@@@@@@5j^PP`k׮%g M -"        @* TWW[n,??xp  tM7c        *zj,- tc8L@@@@@@@@#G T_fm:W,]6! EFaI@@@@@@@@@G PUUe喓c7^TT#@@ ,XNz*ڜ#        4G`ذaVܽZZZA 2@RKzjޜ-        4]`ֶm[!tBf  @ TOWE@@@@@@@@ zϷZMd< A{9c@@@@@@@@hJ+>iAZiXg͚垠h>{G@)@PP C@@@@@@@@Ŗ_P@E 8q@hA&q1@@@@@@@@RPrP+//lwTTOSF@ To@@@@@@@@@ jkkm֭[7͵,#Zg  4         @ذírzZZAy9Q@hAf1@@@@@@@@RD@AbɱL)s  A$        )!0***,++zJ$ $-@P=iBv        @MM 1JKK-;;&Zsj  Ђ[]!        &)0lp+..\KKKڠ35k;tX  A~9u@@@@@@@@hP@aÆYqTo  S @@@@@@@@@!!V^^nyAE:c;  @Pk@@@@@@@@Xꥥ   Au@@@@@@@@@~cVRRbb   A,XB@@@@@@@@ TKyyyFEDH! QQ @@@@@@@@@Æ]ZaajVw5k{򢢢w<3   `@@@@@@@@H P9tX~~>Ѕ  ^@@@@@@@@@ F`aVZZjٖl}\g@IDATx7tjH " *"V+"*{ޫU7Ŋ@ `ATخ6{ vMI6Ɇ|'̙sf|f ݠbkZ6mdf@b*  "Yw)(3 n -cq:˝;w5k,@gX5fٱcOGuϧtB@@@@@@@@ddHjJX ";=@tW>tfopkcb+Uӽپ}Oڵx>=;qFΗʵ!       ԀN?a$%%ITTY$^ش}+(`bW'[%U)96CeÞ%n3lN8Y@ޘp,YIBC{TxUսNTvڕ9#]ty8ysnDKђ8^N^U{;!Auo*f[h!=PL,gBP=oSC@@@@@@@1c$--M=7tm\Ö,|glX7Os/']ۥ:۞^VB'vl#מwDG4#YSf g_ػ"&Z3Uď3 9$9cmV@~ tP}'9ȣRV᧪ͫ:޹.ꏠ~кud풗' H߿_'44T6lhTm&+W 1ǔ]쭟VX!,'I7m$6l0_.1u:-[J&M$(H@}ٽ{XK/s|A),,}[        &9~DEEJ)mh`.5srp?DJP&hP"1n 9VȰɟ:ui۪`__XC󗯕#akFK&E/;s:;]ͫ:ۜ {S G6mlݺ4}'ʥ^j;G%:.$$D>yW~Mw~>˲~zP2p@ݻ,]T&N_;w믿9A~'VO(4wsKJFֹAh,@i۲p:1rJHi֨>Xy> }J3o+In^ر(s󬶃YHn*1^SU 6-{Iϗ$AR#PA~.LW%b-ߕ婬ۺS6n%ExIjoͫ:'x /_\^x7>}HNL?C ٱO?].b]ژ.'pXO[[nmzٳ˄?scJ׮]Eϟ/F׿uy%:sVP{|^xo^ e…_JNNCI-̺^^Vvo2ҊZ^ `?#SelXh6@@@@@@@@J;nɘĘ KݟrAuByt ]Zݫ6ng&~"[w9 cs`_h*RhU.\y_b> !yo~I_sE?rDӼvy&cٸcf nr{1{Ll7B 8MF=ӹ\O7tz]cbʚSYݪ_ӯh\dN#vilJe r dp;8.Vyq_inYXɟZg* rw)(*yn n Û؛.AQhsYUdчV&~4TAu qk`ECݻ;W_K~ ?駟vjHzLs z{.z!\sEz+W;ʭjvɓ'̙3ͦVC>,YD>N:ɬL>]>CyK޽]'իWPa醆}QsIIIU?d         ^ 33SZXY(!^[Ÿr_Au|}sz]l*>0z^V_ wnD~X\*ky'u!ghT4}w滲u޲Na{ȅ'wq룕柛=4c##$@U[P~)_v\ 2TאkPTYcU/kѰ'Z'Ս} '9+eܯJsåit sϋu[9t>rʱ_/em;Qlz#σιw><}[&Ělt3^z,+VsczygԠK/t#zo>5=c y̘oT- w!{9G?=]i3m4h]?,#G4M}]׷lTJ  r-յ}d͒w;        %1vnVj5.TW{G#mv4>[?2geK%(ʺl[Sɥopoy*Jbd ǚNcEb͗GnLs>h9]WN>~NS5%Ϫ2tfk~EX] "yo>Z!?7V.;۩TZ,ѫG)zU ><8$OiHbso-%Z5?Y@6Y"뉮8Yi=d[ډߍo5D"/_dJg<1C|i+gh~ݼCulzUǻ+V} k5ÇڵK.ɯj^x3梋.3VisOwKdz;m[6'n`~ݪ,p#cw}.vU &|:[s*-$833!Umh`{D `"A; h6:C3̵6:! vַp0*Ry$6vZ<1]~ًkEYWQ1vPI&rzb kUu],X`>`9묳t5~u]g`!^{qvCyT߸qdeeɲeCl9=_ {        Pc22$-5U"""$*HEr.Th;GcpraζϠ7^$muiҿ_mArǥgJ\L[oZ 3]\GN9$|loA͑iqV0瘺at eU>Zud]xʺ6{ y~kPݳ1+s+Er+SdNw]YMϠz'kAeիb0y?ۧ3(v4.9XA lݷF2_{u8*cjt˝2߈ae-UZs~13gf}Ev;MAwZ@!vPECtEɋ/h_9o.z|]\+@V^՗.]*#Fn/?Z9^?h]        )0n8iWp?glޘf&֩V6Kc\UzTXLP=''Gnv3QJ3L \/۷ )_eӧg|K^DRJm^@@@@@@@@S`[49"*p?>+:w\z2Ni֊=:>?.=;uTcGds[Sg`n8l PK .Rg]*ǚri>]ѵqU}?Is;|f  +ᦧo԰$r Wu3JTZ LP]Wn*#HuCo-&宻6mژ覓Gy*T׹h=zX3_dS_̙#cƌ1MeMey΂        @UzrJDGGKU̚h^(+(0FwsaKLI+`k%l{T7µVzTJmo+7 v579[7mNVU^ ?q쏠z84ν@~u^ҹmlYmi o cƬcUɒ?~x OZxvs[j Wԏ so Vv+dς/PAӿ^˥I|I|W$ 0p-c ի:I{HP J5U6>rH璿{)C qŋK/$tg@֋/( 40} *_e{l۶3a{{1sϒF՟~iYbT{yχj}w.n@@@@@@@@@S`LFT}=w\y566V{9g[o%))f@@@@@@@@OcE.]TTvRnu=JQR%ʁ|ύ-V^BBV<w_OKu=czIhötU{svg$D˰[/Ȓ7NyVqD벳SRXT,?Z!S?b?]Lm!\{˵Ou D+6jmYBF=S ̶Tt<9`;ͺ iRw΢2l'1C o*kE7>ZHf~mٕd=4WlܾiW\v+Semn9c^zo!~T+sYf_AI{AV-=l^6~[q ?eiZ==cUfh}E~&O8@$m@^;"ms Wu A̸_6o,ɢ],Y"ӧOK~#>>^#guYdX_S4{lS}}Ĉ_Ȕ)S̘~TEw=U'4MC 1Z~),,y,;[gy}Rd=0r_ls^g͚%|h`3kttTߵk 6̸vEnFg+        x [M1H 2b=< +l벒`nеP+nc7W3^^Pm"lhy4&z/dovD*8t]\yT֐xzDٓs-owm R{.z~qǿb޿ĭ"$Pvݹ:4?78;@SU3 dj}y0 tkUu6ݙ0U_A_%f E+ʯ|!oU񝁬 @ dͿKIcqkƮ[#uYn2M3 ן۬C:/ ǶEѿOVnv\נxW`zpWN}vJ2Auπz ^^p֭[M(iӦa,0cc/Y///yn@@@@@@@@O-8.3SRS% kB w:$쥫{Ǡ3soJ9Mۮu^5|tG2o^lף 9$  ~+mi'wZT>+2\](.ND~Y~ G$7:_܃]?JVى8 Z/OV0*R*ͻVWP]_Ys).1EٷOm^V7!@ |f3l' *,3l@2o2_ ?=<m=4!"ַR<0=,<[6{BϠzU{mJ@@@@@@@@@vv$''VTb}|'h0~O,{նeS_/Sukqf/sNsߐJhF %q.UBJY489ͼ%s 9VOnHqznh7FVYV\t~ǘ]O:ۺgDž/杻EWXT,rEUe4䫹^14d^w0Jm\4׵ohh$%K8gɮC$yy+/E׻*]H1aϴn/_+e~qYңC+gu5A+1Gv1AYT};Wf~oH['Uب+;w{qhp4 oR =p^*-/Yߺ%~?v~OcO{pnG2)Vus T]@@@@@@@@@^ deeI6m$,,zeZ^v Ym FFIZDi[CX:q5uְޓ&vVqA$>Ry=oi{YkiިaV%EV^NZRнMuzu:Bn\`^C+FE4V1>n8.FFGzva|AD>T+r.Ѣ/        7"+;eIKKp .`ZyԪl/ cNIML%KgV5V^nT"]u1s@@@@@@@@lIIIH bkSvM6 $pkoɪ[}:zۖMkKhHO P׭l@@@@@@@@@f4Ad1''^!}-Y<\$ );@A{9        Ԍ@VVnZ ׌;gs?(;HIiHҚ'u: /}Q        g Kdd An@@'>1 @@@@@@@@@QQL:URSS%<]vᜱiӦrGP*G+VH~~a:m&IIImժUrM7˕W^uEꫯ'|Rt;`'N(c'aZz-wӅC         pX ȐTzLL ;  @ T6*:Ç3f:/ ?ҦMϴi_ `뢕f̱kڮYv$''˘1c~+wy̟?TrVer 7H^^^S{Ǥ{Ar       9ˌ0tzL@jEz{R;5jesAyCnZ?|ܹ\Rf͚%_|ٗ&F2빹2p@9p4o\Sy}+bB:uތ*ӣ9RZje?tA̸-b W /X9]=נ}nݺ٫"       @ff G[5#d{  @@M'nϠ/RsmkIBB۵>駟6] FL}'rwߙG}T"""d˖-r嗛 W\ӧO#FM kuXT?,n#       "0z"TT?D@@Au/(dՃ*+RQ]* x≇\޽{w1]VI={h@].LCyk:t̝;WRRRv?>o}vvȥ^*+B bv2bѹfeeIbb=yTꮯ[΅        @=!iii!A]2@@JիWm~={4jH&O\9o߾]JW_}%˖-3h}MU+駒*G6mC_U;8y'ƌ3d>MyrWSQݖ@@@@@@@lIUQ=&&F طG @IDAT! @ Tp*TziKff.oǗֵ;wL>]~_ҰaCg`.F8Se]ZNsʺu믗rK=L?G]9^]_T%xE@@@@@@@[@7-$**JcPҔ `.  |> T]=^+T3g >Cr'rѹU+[>gÛo)٦G={:]8]vl޼Y b>|Pװ|xx7PWd̘1eNSNxc^w m?S;t        -1vnVz@.&  @P=¡sJw}} ܹS."BOHH#GJbbI &~i{gEԯ̟?_"""!c>cygߥKcj{„ fZe_~rw kUիW{bttji key]{@@@@@@@8 k&ڪ^`1$p ! @ T;R2&MKVҵkWYn̞=[Mfi'O?mڏ:(kcǎ&?ȋ/(;vx*w]֮]kN:6 _fω .        a#0&#CRSMǐP͝B@@Wml]+ZM" >\{={W K;<--rj nСCo߾Nו[nߢE ʒ 뫏s9ywAFqH8VgwPQ@@@@@@@lqId4*bv  &xTJ֦!򖢢"0a}v{BBr5j=?&~mIzz6y]O.?wUWԵeϞ=2VEG)Z}s5u]{        X l)&SCP=0B@͚5 Y1۪>߲eڵ7nl*u߾}a͛׹e^\9;?3Sm^ 4Hn&#{e@@@@@@@ZQ=9%x,..ur  Pի[rǷaaaԃͫ]M]_;|;dڵ興:VQׇ5??ߌWF@@@@@@@@!)ur1!@4vGJc4hHw 5R֭޽{'ꮡt]tcT/        @@ Պ-[JtLPQ=n A@@ wAu ԾH'^        ;V%<<X  pX TTVLw }%}Y        h%))I"##%,,L|O\ton墾rTzi/('|(rDEȓ7_,ANK+7 ԬOj׳Au}jנznnlnj@@@@@@@@L")iaՃ| h<9)1tOc# pk(vm#^AjnPݦ73 ^M7"       ~(**%55Uʽo%KL!48D:ٴ-[I}-ɵ$,Q%n+A q@j@'5\SA(g8ݵz%N? ӽm3g&@@@@@@@@j)-[-<$A\&},mmϐu0mv;GL{:}c[IX+**F@n>TpOPrn=VOw]T;@@@@@@@@4>n8i,fנgKs܎|ѩɐ{y>ᡡ؍IN[eVUF1  P|>N[]mTTqut]999TT1@@@@@@@@ Ȑt*[%ͯȰܳ2~djE˝>aBG@ ߢ9޼yLYaaaZGv0ۺ???_4tܹ @@@@@@@@.ATAbY %!&ZF*ijm<5{y=1r}*ArC@IuV˖-]vIxxp[^EuzRע"LT߿J\\m۶&̙@@@@@@@@|L $%%y QF|B2hӶs>dټs'.:JRi֨V`c TOKjݶmZ<}ٰaCSQ]+phx&^5o./nwmUP85@@@@@@@@f zUQ=**JAVXD ;KAa<0]Yrb^ sTӶjV?/ҤTlՏ.]j'XC- Wݾ"GC:weݶm[{ʂ        P72ƎSpkEu2n.w:ErMҼQi~]9{'ǀ*A"ZE@IM(WT~5f;^ZPgcdUJ k@}Ϟ=v}#        PcǍT  ^+uy$=)JQiI$,44ٻNAW)! @M +w >/_܄aaacGGGKDD\oM8p@g~+۴i#/oz!       +0&#CR)} }?_^K{Ӽ^|Y/,,GO+t[,\ѱ A0_ 5%瓚yv)k׮܃T#2&Idr.@@@@@@@@? $))Iʯns{_ɇϳ7{O0{ЗeNp7 6-:mE>  P|>IK?޽T1vzZI]eA@@@@@@@&mUT/** +S\ޥˣcߓ_vMQIm֝2ɲwOӄ2?WDX Ar؍ 5.'         PF#iiip+)ט_ rܤؓ#{ 7 E>  P|>Im΅        uQ`Ҳe˒zPAX`5%y@@W>*E?@@@@@@@@'N4###%*sE#VSҜ@|RC@@@@@@@@*%Z &^_\7 .@Pw+z"        @4i#ۀF@T}@@@@@@@@@> L @A@@@@@@@@@< jJMW*'~@[@@@@@@@@(C@+O "M2 OdFQdd.PP${N9Mۤ6Mqѻ>{gߵr]{%@(  @ @ @ @thoo7V3 @ @ @ @ P3>ƌ]]]`K AΞ @ @ @ @5HvTojj:;9 @pTNY  @ @ @ @XӧGKKKTVVsmջdgЇܾnFmK}l1ah76/|1x|v/.^aʊ;v\.n{Ѹ mv{Eæ-Xpk[6Uxg{m&@*  @T  @ @ @ @(@{{{477ǨQՑ񥏽'V9S.\!>~qwL]t *$vny_ IP}cO/4=S=vڶp™\My9!@C\@P}/#@ @ @ @ @(ds9'VP/?|B|?\UQ̳ C|= @ @ @ @E ̜93 EgggioQgN8*AcFŤ#NGzqqyWU7]a 㛟`l0.;c*^hԭ/~"|5q7ub{PG _\bl+V5CrY= @ @ @ @%:ujDTrꫲ}__&vɵ+4l1#d7d;z϶  0Շz4 @ @ @ @J"^[[+:OqEWŅk]<ꪫm?Zh3>[! @0T  @ @ @ @(J`ڴi1b;J LhdIxfU]z\Abǃ:!@C\@P}/#@ @ @ @ @h8qbTUUEYYDk*9(籸GgIV6@ՏRZȠ 7Vѕ/䈟uYV,VLCxq= @ @ @ @%9sfGmm*ڰɆ7>޾Ӷ1nzObƟp}Փ KP=_gK: @pT.+9  @ @ @ @XSdGFA51,vآ1i7MO C]qӝq92~Kbዋ ^x%q烏wZg[a @` h @ @ @ @D`ڴi1q4tu叒\AfϞt%q 3&;m;n$  dPGҠdL} @* y @ @ @ @ 0PUUUQ^^.*d\.:Y^(IGjrjgiy0Ջ}^1T @!* >Dc @ @ @ @ P2)SDÄ Q]]|ێꫠͷM6f߂LJ۵4zxt<>[o @PT+ @ @ @ @($FNAU~{;v.m2㲿Ō{i,~}|Ĉ8zVxH 0 Շ"{D @ @ @ @HvTu4ߢ1>&w=4+xjμm[o)Fm.qRh?AW½/p}ޓk>;'@CY@P}(g#@ @ @ @ @Z[z2^.V_nRfǘ={v|">[-Uw=<+Nh(_n ꅛpWƟpg+ @0XdH @ @ @ @@QΎ}|6#o _ko7κ11w;(rq_oOiϤgwE\ۖoЏ'mu+;IvzOv|_Xg[~ @`( l @ @ @ @Buhiit8;C"Z6$j"ّYĜ_P~nf /+e @ @ @ @ h;쨯ꨨAuIWr, @ @ @ @,Sڢ)A\~WpA^#@?Ao̘ @ @ @ @H QUUn @( >9 @ @ @ @ 0Z[cĉQQQ!>Eڙ9 @ @ @ @k_3>;RP}퓻 0Շ*z @ @ @ @֦hhhrk{iCNnoW  @kE@P} @ @ @ @!"DҧL &DmmmTCdq= מ  @ @ @ @Z[%j;TXVOAMAkl @ @ @ @@Tojj|PLP}(,g @֮5: @ @ @ @@ggg=uj466FeefO @I @ @ @ @@k~G555쨾.y @' >pD @ @ @ @)0-ƏG빮1et9}0M\ @a, >ߣ @ @ @ @ 'ɓ1jkk'1 @a/ > @ @ @ @X)S)*++#okGՀLT @ @ @ @ @&FS~G:;U @2Au @ @ @ @\+Ξ:5룦Ǝ+r 𪀠J @ @ @ @M- wT\>[uU7{ևܾ @=8 @ @ @ @ @`&M樭 :* @ @ @ @ @>;Q&rջ( @zTE% @ @ @ @ 'GSccTUWLj2A @`%+QM @ @ @ @W&FsssTWUENP zAiA @ @ @ @4Kb" @ @ @ @ 2__555Q6wTd!@X@P}/G'@ @ @ @ @O';A\Ύ}Rӈz=< @ @ @ @}HQQ}iGz4!@0x| @ @ @ @V+05*F VL @`  @ @ @ @V#0eʔh0!# e @@{ @ @ @ @ @`zCC5*:;;W* @ ս  @ @ @ @ dG Q[[]]]r =@ @ @ @ @LjmWI\>޵>zy6t @V&d @ @ @ @ @`dG7 @/}Q҆ @ @ @ @,:yrDeee`Gn @@Ĥ @ @ @ @T+>;룺:***BP}<6 wA[iI @ @ @ @)mmUz.T~oOLW@Pb @ @ @ @ 0f̘&LHwT///TnoK_@Pfz @ @ @ @ 0c-T^ki  @5T_C8 @ @ @ @q9DsssTVV U @@E @ @ @ @!.0cƌhllrj  |}@ @ @ @ @ $$>a„K  @@* vK.ŋǒ%Kq @ @ @ @X[eeeQQQWYYkVr|ͣ&}~Aa6 @@ɷ',X-Z}c- @ @ @ @%$PװIP%#RZOKKR7o^i웩#FH?j @ @ @ @E tvvFGGG,]4/^7r` ՋMl=hjj$$^$ @` tuuK:+FƄ1?D WT/r NH @ @ @ @-.\I:Y}ԨQ=!wiӦEsssRoG!;-nzLP/s?AyuM9s椗B+RO @ @ @ 0IX=x19Ǝq!{3fD}}}3&d/YO<37Ǝѵի9W>5^{Gu[LXe  @ 5Fou?ի @ @ @ @ $ϲxH,Gz՛.^`Y}GK~{g313Onj7^yg׮03.PΝ}s PJI7O̿ǐweR<:{NqUqC=g^Wݲ,l {bvCAT_F-TN @ @ @ @#>bĈxMɨӧOt#sm՗% ` ]z^KUIЏ+FV?z0o-~΅.{|wMl(+ @ tPkko.LĘHJ ͋۴92 6`O @ @ @ @yҧtMSQۣ9Ҏ}MvCOvEVq<>hq;v8aŅo|bx @@2謘`aa}h[v,Iؠy{sA7e}7Ӓ @ @ @ @` od9hhhT_/A?.-|k}?vL<¢W6gl1UWW` 7Hp=E>գ'͋|zo:}n% @ @ @ @T/̙3Ӡz]]]tչ|z4Cf,4`v~MK}+;/vt&m l~Abv 'ݦ3GAnL @ @ @ 0KSNHvT_7BKγBG>`7'eiUz<?8Y8lƻް]{?c7{+u[ {8~Es uYaDYY~7=*8+ʛ.u/l֧4^LP+{Nݑ/]_z:vce#cLոuI. l󵴼BUT$_xqg:s Vs8Wߣ+x)<}m/O}aw_qG!~ hP0A$sTKdb @ @ @ @a) ^evTT_}=>mfu[;(UP}qiwQa\>(wZh~/s u{[l:$<gВ7:6ۼ_cv5y_KXơ'ŬgFee\֩3{UҸȼvC,)Sǜ,)<+FS~ppT=f\~c:1~$vH~y䇭ǭ?V'>b|0{{T/y2>sꃪy(>d @ @ @ @^@P4o8qbTUU7:-T_WLVڬ2w Ov#_~ؕճ S/N3ޱ6|7oe|,|o΍^ EcwcL8;ńqϼHQQQ?>V  0CP}s 'N| 58䶴ǎ[ܫ?=ܴnLmMkc m/?ݏ+nk{S]g>g |U7HvMOvOO}ś2Ռx`|e.WM=f_l]@IDAT8gՋ_t YZP} uջ( @ @ @ @sA,̙3>jkk$8w-ĕ=g]GTDZ'8mS[ {Ί;zqYݷ0.i|Busѣ=<=^'8k=x*kat_4mxk˧>~)s"U)?8*_r57G%צ|˜qMw=tхk OϛVuۿ=[ւ>sT @ @ @ @` ?QQPg?t,1P^KR?}}z=3n.&.w]Ĉs'cwe5='⻧[=T&_GOc+*bqFpg "Vz{ޥgYZPn˷՗qN @ @ @ .K?mڴ8qbT_tiGi.(Yi} utvF׏ ~SR?uob 7ڠP s_X/-YN/5;uñP߽[w>U i";rwq.9_>d,/iޣǜu~!=^l>O^aPTeb9L @ @ @ @AҼۣ%<T_={>mQYQzvNBwfOgy?Z+EPГbֳsӡ73*ށmKnw>4+W/hņjS ͠Ym{ 'c}s79󍷧_shdìY]<VrtۿMyח/y(>`nD @ @ @ A> Ɍ31# K_hrm[ YaP]zrlP[S~ppZoP{s״oO_\w}iFfc I!O?#FMד Kk*GJ'}q uñ  ~ ͠z(}8{`K@_H~W~e_wEygM;߲B}z A! X ^.z7E @ @ @ @u. ^%>}zT5jTtsvT_?z0ob88{kHSɅGz6~qeO?.{c[/(mlg>2;'LS͸ F_XptZ/fNre11u5N'K+[K ή|eAw=G=mXofP={J~yxM/Esw?Kmcv|i]UEEOF㸍 =_֩3㱧Ջ_t YZP} uջ( @ @ @ @sA,AzSSSFWWX;::.Ѭ"cy!cE/k'6 ?1&_92:ñ]~d_̼4Ǎƒµwm|}ꦘ Fnn4&xdalj~V?֛{0z8`_0,?+::cߐ3*ǻ{NK}WZٌK[/;v&6$ůCzr^ld59'sTD @ @ @ @` f Ӡz]]]:WP>KbֳsW22 mWTOBGG }Qoغ%=o?M<]5+`H/ȇ鏛|a蓽*7UG|mK}VCk:;y>3Qߓ 9&]|m|c|f7rdw;3^Z$8GEX#s  cjk_Y_~}=ւ}](޻Z @ @ @ @u# ^ӧGccc$Au;4 ۝y;/-^WUEE&K?vzwc I!ٙWtW̞|$~$vܪ%Kc7;R>)$Az"ٵ6 v?:;/kwhOˎFh?Gʪ @z,KOe*cLոn_:E㸍V;;_Y=9?csƤ?]t2O嬃>G7LG_.^_,`-^f"@ @ @ @XgꥡO'Nt@;y/O͉/,1q&priH}DYYQk i< 5d8vq7`T*  @xq1Q{M~ -_ւQ[m( @ @ @ @u' ^}̙3c„ Q]]Ջw5 0zq 9 7rW|_yE5Wi5߲|}r=>oY۲ee֥/ߥoc8^^egnG=껍ԭbIⲱki1m宿ҽ[m{8핛z+谚Q51n솱[;mjzL @ @ @ VAW3f̘---iP=l>L! |>) p渮O=;7tEk#R $6ްT @ @ @ A@'AlGr;( @P־HW*g"O\psq7Uw㋟`4V. @ @ @ @M@P4+[lETTTziLB q,`-^Bg"~Л@}-5!@ @ @ @z+sN477GeezF @@T/n3ǁ_wqԩm{ A`Tmu;o߇֚ @ @ @ @A@P40cƌhllr4d&Ax(^ 2ǁ88kJF!}|{q>}h  @ @ @ 0Ջ_$'Luuu适ŻY[qyR#M^o~h=[) @ @ @ .KoyԤ ( @ւ-r8A]jqכs֠. @ @ @ @T/zToii(++ AҸYZPEՋs{T_?,  @ @ @ @@" ^3=hjjJAI@ ,`-^jg9~d @ @ @ @ T/5ArvT/ Q @,Ջ[QP8GAc̒ @ @ @$yLikѣ+z+fҌJi @xO7LFKi- > @ @ @ @@wAk^n<9֎kΨ' 0/ꙣzqz:% @ @ @HK>xy&7~ Ls @ @ @ K֖k;wvvF.^*Х% 0 ( @@>o9tP}3^\ri(( G( @ @ @ @ T/"5iR477GmmKCj @` dk_+n3ǁoǂE/7y S@P` @ @ @ @u( ^NwT\.gGҰYZPU:ϿMӜ @ @ @CANMQU]#Kj @`( dkAV9s^_82̛_&OA~iN @ @ @֡zi'FsssTWUENP4F!@@T/n3ǁs7y S@P` @ @ @ @u( ^SDc~G;qB(zq*S&OA~iN @ @ @֡zib|}}D`Q4k @@Ջ\WAxɧ) O0  @ @ @ @:T/ ~iP=; fB/}>)2s` ?㳟g/ ' ^ @ @ @ @` K՛6ҎAҰYZPU:W'SKػ2ټ)6pL<4cODGGg ` >V @ @ @ @@洺VZ[)bDy\'@dkA @ߗ-nE.| >nTi$ٱ%qC/7y_V]x㣶:{wN(ԯp>oeO~=gccҮs/1DY~O\z\N.7XzN?_ϴOG]_ K.rT,XR_zI9 F @ @ @֪zixL &Du>cr]4Cf,$VO @ |Ra2B8A|sϗ!`{:]6q=߷wFlyXӏzvi9 j?S><紨YQ8_Ug߅m㳟~їK/8 I[0ݳTQ>>+k|yЮ?=f}t)Y[AQ @ @ @uAON 1jԨtEAҸY[q{?: +'b݃?xnh7>63*_iq?^|mկ-cdEy۫ uI]'=SѦo܇Sנ>{=] ŽnB?2k5^Q/-~92f @ @ @ @(A '46FmmmzF л@Tݧ@swu%m7qB161؁||Hoo|ivs: bnVm_Gzr#'$\#I?u5f} :,W8__?6{ZSAu @ @ @ @?ZyIJP=i%r+W @@T/ 9tP Xװ8_H{?-jb o)I+*BՓ=gn]գmrr̗z[53eA? @ @ @ @ T/~:;;cJ[[475EU>Ջg5 0zq+9kZ&ę[N7qo\|q-wFGG mFP},Wŗ⧓Ή?^vrWzOz^?}o{4*G ;qem{P9!@ @ @ @֡zizCCCTUUEyyziXB e,`-^*g-mcEYYYsOnݏuT_ёџxwT{'y[4էS+GC?U?Lϧ^tyqƯsA @ @ @ KZ[cĉQQQ!^R @C] X ҙp grl8&>n^jbTeή8g|m'½G7(Ə-,LO~I< };/|:~fڞc +\Qs :  @ @ @ @`T/~%:;;쳣)*++Ջ'5 0zq9zw\.vzm'#GH//^$vad|m_{wx;nEpAQ?nlZ7+G^|P*hiTU Ż<"^ZrĤ㿕mw!G99)qlj:8zo!@ @ @ @z+DҧL &Dmmm:zF @@E:sNA7n|h|_^R_|@|5iI'&m>gqt+'T~=/XT8kP}1)'N ctoi;x$򿿊I=gny"yᲣzy[/ f  @ @ @ @T/Ljm羽Rݎa5  0zq9M _˵+Eca?9=.io^UZҺ1I{aasѶAwzm~ai;쇅q1ՓS~|Dixkki.3ι8-zUȸmY?}p @ @ @ @Z@P4˓՛:T/++T/ Q @,Ջ[q8? Գŷ۸{@=z'>~Åx8(gz[C?2j.v_3{Bs/=;\IX  @ @ @ @T/Likѣ+úzi\B a,`t-r8܂Z\>ś^maw8}]׻_Ɏ<;wښdHfj̛P߽pubuݫ O<='}OW=ٗ?1n1q~qI>]w{2>գ{\O׵"*+*ȯ*\sȧ29. kN[wM>t':d1qowM  @ @ @ @ ߬'GcccQ7 u @2;cP=܍m[OlL]ɇW,uMo60:<?6{<,Ty lӎ]Gww[ @ @ @ @)S)*++#obGޝ @ YZP@Fq8NN YSYm @ @ @ @` f'FS~G:;( @Pւŭt(^ރ_`¦y='j @ @ @ @@* ^+Ξ:5룦ƎœYZPՋs{ 4D͐ @ @ @HKFhkkK;;;#OwfҌJi @xO7LFKi+0nlc͌ @ @ @! ރcOΚ4)֎k# 0/왣zqz~qc7} @ @ @ @zi3gΌeA\Ύa5  0zq9 ! @ @ @ 0mڴtG1bziXB e,`-^*g9=ƌw @ @ @ @zi1qĨ2AҰYZPUՋs{ Tŕ?5C @ @ @ @ T/auuu!^V @CY X ʙzqz~ʑqMɃfH @ @ @y#̜93룶֎!5  0zq+9 YQO @ @ @ @ziɎꍍ4  0zq9 1,>헃fH @ @ @y#L6-&N՗.]QK3J`+Q @|>)0!sT/Q@.8eN @ @ @ @=8=ZZZ*XRG @`dk_+n3GA^?9WD͒ @ @ @AҼ f̘Q]]FvT/Q @!,Ջ[QP8GAc̒ @ @ @$yL>= 5*:;;Kj @`( dkAV9sT/QC@P}X'$@ @ @ @ziɎMMMQ[[]]]a5  0zq9 ! ~Y @ @ @ @D@P44^WW˧ջJ3tiFL`4  P'&#d4Tcv @ @ @ @zw5/O>=# Q}$@@E=sT/QC@P}X'$@ @ @ @ziIP}ĉQYYhGҸYZPE:~'OQbQc滺W,e^d͈%J:d* lxݪ -Hɪ;M9u;Ϣ3 @ @ @ABT_vT?<<TU @, X vKtPomſWt @ @ @ @/E@P}?'1NÇQCP}?V!@^2`-A/#ǿ_~m﬙e @ @ @xi껟Hqss0V @ X vKObk|=no6n ÿ?F%@ @ @ @:fYH4$~VYi @`w'+,+OO?_Wˡ-L[?:ǘϮ~< w}=zμ_I.ݿo)I߶ȋ})+?.ן9s,>uhq_UkwWߣVߎ[3~noǼ!@ @ @ @z ~^e zhۋww kn^:>wP}] @ @ @ @ Di>ZbAAZxˀntT @ @ @ @TߏgTFijTߏU @W, X vKGAM @ @ @ _A=<?`0F!; @*,ւ껝QP}7Gw @ @ @ @W@P}?1jE$:* @kXw;奣n&@ @ @ @د~ůoV?$I̺eGn7v[Gʜ @; eXտt @ @ @ @oHޞ>>=he~\BbAp2ꯢ^ @ @ @ @/Zz}_><oz. @ @ @ @ @6 A`<^7'@訮 @ @ @ @ Z 8~FCP}5uh1@IDAT @w @ @ @ @xH`<ޟwToZ$!F\@Ps  @ @ @ @ d޽7oD1ﰞӞ f @a'J @ @ @ @4~dYş @ut @ @ @ @ @ ,A4H :  @A @  @ @ @ @xyGvz VL& @ @ @ @ PQ(":NZ-+ZM @T% @ @ @ @|&PvTeYE! @dq @ @ @ @ &^^LiF@|!  @ @ @ @ iQۍQ+ @? @ @ @ @>h4Fg8 @TH5 @ @ @ @ Et:iTW @   @ @ @ @ PiZbz/ @ @ @ @ @6AhiFV A `  @: @ @ @ @<>~ j*# @{A{  @ @ @ @ e hZ$!F\@Ps  @ @ @ @ l6No߾(տ&r 𥀠> @ @ @ @ @eG`v[GLxH@P! @ @ @ @ p/puu(b2o^?;A?Rɗ> @ @ @ @ @4a]  @ ? @ @ @ @777v#2AuAF@P}%s @ @ @ @"n#H%[ @R: @ @ @ @ @zFQՓ$T_e  @ @ @ @ I`Q=2AMX  @ @ @ @ @.//c8Fqppz. @Au5@ @ @ @ @M4lFVTf  @ @ @ @ @zEGv빌 @tTW @ @ @ @$p}}N',Q}q @@): @ @ @ @ @zzT_d p/ ~o @ @ @ @EPӧOC s^ @`U2 @ @ @ @ @N`:h4f  I@P}q @ @ @ @.0͢G$z  @ꛍ @ @ @ @ @WWWQy.^r{ @`Am!@ @ @ @ @eG`YEQU.{'@T, @ @ @ @+0NAv@Hi%q[ @R: @ @ @ @ @zQuT_oe TW @ @ @ @X/PՏh,&꨾( @@Gu5@ @ @ @ @5eziT_f P 訮 @ @ @ @ Z f1A$IWs!@  @ @ @ @(ˎꇇ빌 @tTW @ @ @ @$0NÇQCP}q @\@Gue@ @ @ @ @yM h4ꫩ @-#@ @ @ @ @C,~iIDR_M|k`%{  @UOVɸN @ @ @ @2^{^ @lTd @ @ @ @ Lx}ZzK I@P}q @ @ @ @.PGQiZ-ի^OlTHd @ @ @ @<>~ zk  @G?T @ @ @ @*)0?ZHDGJVM @T @ @ @ @TPl2wś7owXO%9[ @R: @ @ @ @ @ziȲLGTF  @w* @ @ @ @Nb0Dшd>UG^F  @: @ @ @ @l8c0nuT`e Q]! @ @ @ @ @`@Qq~qN'Zꫩ @-#@ @ @ @ @CdT  @ ?Ν @ @ @ @TC wqtty WE@P}= @ @ @ @ Pzߏ,ˢ( A*= @ n @ @ @ @^xonyZxI{I @u@ @ @ @ @eGn7v[GTF  @w* @ @ @ @Ƨ1h,&꨾( @@Gu5@ @ @ @ @5EQ<:Niz=׀"@: @ @ @ @<&ќՓ$T_e p'  @ @ @ @ ^ wh6qxx(( @@Gu5@ @ @ @ @M'qG^T߄e P 訮 @ @ @ @ Z 󘜟`0F! @^@P; @ @ @ @<$p6Dۍ4M#IH롉uM}/ J*  @ @ @ @ QF΢Ee AuA 0 @ @ @ @8c4EkQ}R]GW @`F" @ @ @ @@T ΃ZMP` @[ B @ @ @ @@e>fZMP` @[I @ @ @ @@5v W xc%@ @ @ @ @t"2իXL<^@Pf @ @ @ @ @ZeG~/^c[ @`A]K @ @ @ @@.//xTS$6.No!@J' @ @ @ @iFh6qxx(( @@P]  @ @ @ @ @`l6~iF$ @tTW @ @ @ @X/puuE빌 @tTW @ @ @ @$PvT eYE! 8 @@Gu5@ @ @ @ @tToۋ<^7;*m @f' @ @ @ @ @WWW ^Z{ @`KA-L#@ @ @ @ @eP8@Gʖ @ o+e @ @ @ @U(;___G׋4M^z+  @G ?d @ @ @ @*&yfFz$%@ 4 @ @ @ @ P)2~xx(^ӷY @IObs @ @ @ @NÇ!^U @Os' @ @ @ @_ 󸹹pFCP @T߇5 @ @ @ @x,~iIDR_/iÂ`/4 @| @ @ @ @ ZA^v{1QP} @B@P]! @ @ @ @ @`t:GZLT_e  @ @ @ @ @2>"MӨj!0 @@Gu5@ @ @ @ @yǏc0DT_Me p/ ~o @ @ @ @pV+$Q!$ @ = @ @ @ @ft۷QD @T' @ @ @ @|W> n]  @ ? @ @ @ @b4EX\LmՋ'g @_ x>' @ @ @ @|W`:p8#տ3 @!AT\#@ @ @ @ @@;&ndY&0 @od @ @ @ @U^vy<^$At~  P x>Q @ @ @ @X/pqq(ʠz$빌 @ @ @ @ @6 ,;gY& 8 @Q] @ @ @ @ @`e H4tT_e  @ @ @ @ I`:q4ͨj @tTW @ @ @ @X/puunVP}=Q @j @ @ @ @De:o2N(tTW @ @ @ @X/PvT뙌 @-#@ @ @ @ @Cq||)bzhs]{.yK|Ju @ @ @ @ LFl6PP]a @6 o2N @ @ @ @@΢E$z  @ꛍ @ @ @ @ @ePۍ\P` @6(C @ @ @ @@ʎ~?,(ի\ Nl' Y @ @ @ @TWd<7AR!Ջ!No!@J' @ @ @ @Nˎnd멌 @U @ @ @ @ OOc4EXLQ}Q @j @ @ @ @kyt:H4z3D(tTW @ @ @ @X-yM&1 9'I" @N@P]% @ @ @ @ @`@Tvl6PP}=Q @j @ @ @ @N8>>z. 8 @Q] @ @ @ @ @`@19?`FCP}5 @w @ @ @ @xHl2niF$C s^ @`U2 @ @ @ @ @ E׋,$* A@P}a @ @ @ @*/p2h4ּꕯ @FAD& @ @ @ @ Pq2> "kz  @-շ@2 @ @ @ @ yhWlxL&@ @ @ @ @yGzՊ$ItT` 2 HAGN @ @ @ @@&x]y&y^ K: (< @ @ @ @Fߏ,tT_Oe p'  @ @ @ @ ^,A4HSuT_e  @ @ @ @ @8v[G V  @  @ @ @ @V Etj騾 @^@P; @ @ @ @<$0LAlQ=H⡉uM}/ J*  @ @ @ @ p'𓓓eꊂ 6J @ @ @ @ PezՊ$ItTr1; vNf @ @ @ @ P]i hij-;'@TV< @ @ @ @*p2p8ٌDPe` @ce. @ @ @ @U8=;zݎ[իXL=]tT_ՓDGj @OT{ @ @ @ @@T;T+ 4A @ @ @ @1 lᡠzuN  @ ?U} @ @ @ @TE,^iIWxI @ @ @ @@5NˠzGGG繠z5.  @]ws/ @ @ @ @U(;Ȳ,T¡# n~&@ @ @ @ @ &^6ՋmAt~  P x>Q @ @ @ @X/pZvTv#kuT_Oe p'  @ @ @ @ ^`|z(b뽌 @tTW @ @ @ @X#PELϣDQCP} ! @@): @ @ @ @ @j5A @*'d\'@ @ @ @ @@DI/^/DP]e @6o2L @ @ @ @@i>ZBP%$ I8 @ @ @ @U((4ZU'@6 o$2 @ @ @ @ y?~`FCPµ` @#e* @ @ @ @pV+$QU` @e2 @ @ @ @ft۷Qzk  @G ?t @ @ @ @*'PvT nuT0 $A' @ @ @ @ \]]h4Fu2o^ [ @R: @ @ @ @ @zt0tT_Oe p'  @ @ @ @ Z~ssn7,T_Me p/ ~o @ @ @ @^vy<^<4 =%@V x>Y%: @ @ @ @...b4ETODP]a @6 o2N @ @ @ @@ճ,Tz1? vNf @ @ @ @ P]i^Rs @`[Am#@ @ @ @ @4lFVTj!7 Vf @ @ @ @ PMEGv,&@# -s  @ @ @ @ut:ȲLG*= @T; @ @ @ @@Q WE@P}= @ @ @ @ P8>>^?}I1 [ @R: @ @ @ @ @zt(f 2JTW @ @ @ @$0͢G$&0 @ @ @ @ @ \]]-GGG繠z. @ @ @ @ @6 AdYEQo3NQ]  @ @ @ @ @`t:]bb2Oo͎ f} Yf#3 @ @ @ @U(:WR@P}K( @ @ @ @@T?>>F0Q` @JG @ @ @ @@"MӨ!^Jg @Q2 @ @ @ @ y,F"$zjv  @'?- @ @ @ @TJ /; WmxD @ @ @ @@i|!zWmxI @ @ @ @h  @ @ @ @^l6~iF$Kڰ K: (< @ @ @ @(#ePrZ6!b6Ô u'C,}j'1H8kWzH"q,~q/ @^@P]# @ @ @ @ @Y`ϟc47 7{ @LT @d>wX@IDAT @ @ @h"4^-` @ @ @ @ @ e_~(b0R!@< ?["@ @ @ @ @!r.>"I!Y#@( k @ @ @ @Xo6qqq?~j7a=vnE}3 pXa @ @ @ @K`ZEe $ ޤF @ @ @ @zEQ`0db @) @ @ @ @ y2Dxlz pIL6 @ @ @ @ Q&&IF#;MR@P` @ @ @ @ 9fgeYFKWIA= < @ @ @ @4 *ydYfz3* @I@P]' @ @ @ @ @Y`s}>"I՛T  @& @ @ @ @ ,W( @ @ @ @ @@j|7Q}<㣉\ @Au=@ @ @ @ @6fIF虨ƥNT @ @ @ @hXVzNӧO0 @ @ @ @ @@T&|T?`d 𓀠O @ @ @ @ @rp_Y @"  @ @ @ @E`^t64M#IA_|%@TAb @ @ @ @? tQO: @@D @ @ @ @<,ˢ*Al\ @ dH @ @ @ @ \-3^/&z;{7O @~|7 @ @ @ @x!'O&б@8 ~ @ @ @ @~XVX,b0WMT% @!k @ @ @ @x*61L"M!; @--@ @ @ @ @tZ,Xo61/Iw#8I@P$& @ @ @ @@TN1LPý @'BF @ @ @ @@g˸~/.pp @Uⲙ @ @ @ @ e("z @) p>F @ @ @ @@g֛MLH4$ڽ[ @Z> @ @ @ @ @q:^c:EeǽT @{Au@ @ @ @ @f2Evw#MToR%@ @ @ @ @ &PՋtTzm` @ @ @ @ @ e77y AT* @gAg W @ @ @ @8$MTwGQ$Ib!$k @pM @ @ @ @&...ǏQ&'rۭo&@ x>9b @ @ @ @ ,W<,3Q/ @՛t @ @ @ @ Z( @LT @A e @ @ @ @:/p\F>MT|7 @NT?& @ @ @ @:*PUU\d2hdzG  @W v @ @ @ @:'lAl7Q,Hv=) @}@ @ @ @ @f\]|>,LToR%@<  @ @ @ @4 << @LT @ @ @ @hnqyy0zz3* @Du=@ @ @ @ @6Dxm` @ @ @ @ @b2De&7S @u @ @ @ @y 73 @՟-\ @ @ @ @ @m\^^߿ڽm|5A @1'd @ @ @ @ @I`bpggg & &N @ @ @ @@#H4$TzC8? . nd @ @ @ @ϣ,KAn @d @ @ @ @]'EYEUU]ng'@NT?. @ @ @ @+nAxGHvi=q @}@ @ @ @ @f<꠺V @F @ @ @ @ @@@T`hz* @Du=@ @ @ @ @zCfH4~7) @j @ @ @ @ eX,A$IՏs @u @ @ @ @_՛T  @& @ @ @ @ l?z: @`'`6 @ @ @ @ @q,˗/1c0R!@< ?["@ @ @ @ @!<4$I"vCjM}/ pL1 @ @ @ @#uP}6x<ޓ  @@z 2 @ @ @ @nF{ Aη @M@PMH @ @ @ @ AbiF Aw @D6 @ @ @ @ a,ׯQE A @T @ @ @ @tR6yFHDNvC @T @ @ @ @tP>&IQUz{  @W v @ @ @ @:'POT/"㱉ꝻLo @ @ @ @b`d7VzO{Owo!@j' @ @ @ @6yLJxT  @ @ @ @8.PNKLȲLP8  @Y@P @ @ @ @ <<<8ʲd^m|5A @1'd @ @ @ @ @I&EA$I5 @M@PMH @ @ @ @ 5Q=2A7 @ d @ @ @ @|iƇLTn+89 pR @ @ @ @ Uv1 w8]@Pt+;  @ @ @ @~xNc8ٙzn @' {n>E @ @ @ @@w˸~/ޝ @T;z>K @ @ @ @@Y(b0p#@oo/ @ @ @ @ 7Ni$II{  @}@ @ @ @ @u$}^t6,Տ{ @ @ @ @ @We,&F̥J0Q] @ @ @ @ @ME.  @& @ @ @ @(2on" ǩT @ @ @ @ @ pH`&FHDCH @?  @ @ @ @/֛M\\\ǏMXO嶷[{;{L|r* @ @ @ @XVydYf_(%@4 7 @ @ @ @ @ b^GQ1 "ف+ @--@ @ @ @ @t^jb7Q}<n@$ ~M @ @ @ @tTdDc @T% @ @ @ @tN`nzY{R{Owo!@j' @ @ @ @|YLJxT  @ @ @ @h\_'FHDf.U @z @ @ @ @m*$& @}G  @ @ @ @8 PydY"@$ 7 @ @ @ @x!p\Ƽ(b8Ƈ3AB @- @ @ @ @~X1"MHDPo  @/_X @ @ @ @ @O:>ye)7 @P, @ @ @ @ @z,#˲JP @Y, @ @ @ @ @_We ׋.^.M @<  @ @ @ @^id㱉/t, @@D @ @ @ @U, UqI8$ ~H @ @ @ @uL&H4~ @@z 2 @ @ @ @(2֛M̋"z$'@NT?& @ @ @ @:,pl?QLPý @'BF @ @ @ @@gmCPm @k_e/ @ @ @ @](2|<zy  @T=7"@ @ @ @ @;yiIDR^`n- @@-D @ @ @ @ @@I,~q/ @^@P]# @ @ @ @ @Y`ϟc47 7{ @LT @ @ @ @h"4^-` @ @ @ @ @ e_~(b0R!@< ?["@ @ @ @ @!ۘ1"I!Y#@( k @ @ @ @dGTU%  @gA=#@ @ @ @ @D(b<+ @CT @ @ @ @ @Y.E b^=J_@,g @ @ @ @ v|&= @!k @ @ @ @xg%idY&1 @d @ @ @ @]xxxqe.^'At7 @| @ @ @ @ ,pss"z$\ @Au=@ @ @ @ @6&gY&ކNLT @ @ @ @h|iƇLToR%@ @ @ @ @ l۸p^OP L ` @ @ @ @ @@~x @ @ @ @ @@]yuPDf+U @^@P]# @ @ @ @ @Y_^^`0o4QK ` @ @ @ @ @@@=A!fYi~? @ @ @ @ @ʲX,z$ǹT @O: @ @ @ @uPggg\ @ @ @ @ @mCPMK 0Q] @ @ @ @ @@Y˗1 ՏS @՟-\ @ @ @ @ @}yiF$Tסo&V8&䘌u @ @ @ @Dԑ:>b<Iu @E@PH @ @ @ @ lsFz[ & &N @ @ @ @@b4M녠z;  @VAV" @ @ @ @@Y("z{  @WV @ @ @ @:)\.#GQ$Ibz'  @W f @ @ @ @:(l">~nzR^A= < @ @ @ @4 ,W<,3QJ $  @ @ @ @ ,Z( 춚J0Q] @ @ @ @ @Ejb7Q}<bL  @ @ @ @ p\dDT* @gAg W @ @ @ @8$lAl7Q,HvƷZ{+yK|rL: @ @ @ @qu<,3Q]S @NT?E @ @ @ @,OTF$]ng'@NT?. @ @ @ @+\i|ջ NN* ~} @ @ @ @tUj|pzW  @F^ @ @ @ @(Z#MThz  @ n @ @ @ @'lb2h=ջNL^@Pf>A @ @ @ @@~>$&w;- ;꿣3 @ @ @ @tIvտ?> w;+ {S @ @ @ @tGjyQp8ggݹNJ @ @ @ @]X1"MHDP+79  @T};$@ @ @ @ @:>ye)ލ @T;z>K @ @ @ @@<,ˢ*A.tg$@i @ @ @ @TO{: {~  P x> @ @ @ @hXէc՛T  @O: @ @ @ @*E F՛T  @& @ @ @ @4TUL&iToS"@& @ @ @ @(2֛M̋"z$ǹT @O: @ @ @ @uP}:p83Af.U @z @ @ @ @mWe\^^FToR'@& @ @ @ @(26QE AT* @gAg W @ @ @ @8$lb:F$I$uh[ %@ x>9&c @ @ @ @u$}^t6,$: " L @ @ @ @@X,1MTߍT7QhTo% @ @ @ @ A("{z  @O@ @ @ @ @ e77y Av @T @ @ @ @tP`&FHD# @T% @ @ @ @tN`E|1݄ڽޓ {~  P x> @ @ @ @hXVydYfz3* @I@P]' @ @ @ @ @Y`^GQ1 "m5QK ` @ @ @ @ @@rnx<6QJ 0Q]# @ @ @ @ @@UUq}s$FǩT @ @ @ @ @ pH`nzYաo&V8&䘌u @ @ @ @< *ydYf @" ~= @ @ @ @tY!SP=ILTr38; piNv @ @ @ @ ]D4MÇm''@NT?U> @ @ @ @*n2az=A6s @ ne' @ @ @ @OT(6pj @5Ѳ @ @ @ @. <<K @ @ @ @@noorT{$.BO @ @ @ @m,qvv&̥JT @ @ @ @h<#MHDP L ` @ @ @ @ @@>~~~eY 7s @LT @ @ @ @h'EYEUUm` @ @ @ @ @>>]Zjȿ*m @@v#; @ @ @ @d2q6*MTv;8= p)J @ @ @ @ e45jD.w @' d @ @ @ @*o4~/^pl @ @ @ @ @ e&yuP={{Owo!@j' @ @ @ @uP}:0ٙz3* @@P] @ @ @ @ @M`\qAPK ` @ @ @ @ @@@Yq}sEQqToR"@< |m'$ @ @ @ @ p@`t64M#IH7[{3z_L|r2 @ @ @ @vu$}Yl6lE$z , J @ @ @ @jDu@E/IDAT8U@PT) @ @ @ @rb^D:LgzW  @O @ @ @ @ e7ۛ<Az'&@^- j2 @ @ @ @ @cnzQh4$ILTw\ @7G @ @ @ @fǨ''[ @Z> @ @ @ @ @@j<#g&7S @u @ @ @ @u"~^ @ @ @ @ @Z~x<6QJ 0Q]# @ @ @ @ @@UUqss$FhD^* @F @ @ @ @ @@z2՛T  @!  @ @ @ @ ,py1l7 7{ @ @ @ @ @Zc2h4$ILToR&@ @ @ @ @Vȋ<4^'LT @ @ @ @hX.1_c8F/ToR&@& @ @ @ @ @@zOTgx,MToR&@ @ @ @ @l71h4[  @& @ @ @ @ ֫|TOD60u @o>}A @ @ @ @VU}PQP% @O?qxC @ @ @ @2y0_Y @"  @ @ @ @E`Yl64M#IA_|%@TAb @ @ @ @? Φq~~eY  @K @ @ @ @AydYUY ` pP@P E @ @ @ @K`\F^<ŤڽU}`&  @OO~ @ @ @ @/uLgQG_Y @, w @ @ @ @U`^b`/ *= @A_@%@ @ @ @ @L&i}qI8( ~" @ @ @ @eYfb^I{{Owo!@j' @ @ @ @uP}:0ٙz3* @@P] @ @ @ @ @M`\qAPK ` @ @ @ @ @@@Yq}sEQqToR"@< |m'$ @ @ @ @ p@`t64M#IH7[{3z_L|r2 @ @ @ @vu$}Yl6lE$z , J @ @ @ @jDu@8U@PT) @ @ @ @rb^D:LgzW  @O @ @ @ @ e7ۛ<Az'&@^- j2 @ @ @ @ @cnzQh4$ILTw\ @7G @ @ @ @fǨ''[ @Z> @ @ @ @ @@j<#g&7S @u @ @ @ @u"~^ @ @ @ @ @Z~x<6QJ 0Q]# @ @ @ @ @@UUqss$FhD^* @F @]mgYg}=sfAΜz>o1PҖ(ȅ hKjB$h1cHziB(Q^ҞYwi iafMo͙;]{C @ @ @~/=w՛& @BP] @ @ @ @ @_O8}tY;QP( @@P]  @ @ @ @ @`@ҥKq5'buu5,Q}0 @@P]  @ @ @ @ @`@NJy.>e  @ @ @ @ 0 裏3c>G p&@" @ @ @ @ @SNj>e  @ @ @ @ 0 }(^WG]ב:p&@訮 @ @ @ @ 0$f,nt }i?Ƿ&"@Ad ` @ @ @ @Yd?~kc>G4C`  @: @ @ @ @ <ñkkk6]_QA4 @`Xd @ @ @ @L[ӟt9s&<_ OXB@P} $ @ @ @ @ 0Yw#<>ϣ,Tl9X8 R#@ @ @ @ @`M,';U]ES,k&@N@PM @ @ @ @'NJA\P}z` @U _5/ @ @ @ @ 01|3qdꨞu]>\ @%4_!@ @ @ @ @`2Mmb^Ee!>ݷP @% d:_$@ @ @ @ @`"(gEdeRv$@^] @ @ @ @^mk^w&2"U=}؎i`c s!@:u@ @ @ @ @~?jYXF  @: @ @ @ @ @@םj^EV^F  @j @ @ @ @=M7r%ջnON @a @ @ @ @&/p>2H!<T|E @@ @ @ @ @{ QQTEtuTxAX> 0, >l @ @ @ @-prNԻ6]c"n  8 @ @ @ @ \^ޔޯe Օ @ @ @ @zy,M?:{%@ @ @ @ @m'ߜ+e :+ @ @ @ @ \cvl".ޯe Օ @ @ @ @h6n릨VgzYE>l' @'>F  @ @ @ @@4q[Z)+  @՗br @ @ @ @o,"O3'\ N,+  @ @ @ @o1f/By ؘv\ @ND @ @ @ @ @`oiݷD6HԻ_A @:Auu@ @ @ @ @~qs)yD'e  @ @ @ @ #EP*#uT2DQ]% @ @ @ @ @_`T?:\F  @" @ @ @ @ @ wY 7  @ @ @ @ @z,<,{  @[[[M" @ @ @ @ "gqSGW"/SHHa6]/r߁}$v`L!|  @ @ @ @ ٻoNQAuAT2L @ @ @ @\P" '_ @AAA"7 @ @ @ @ 0qsQȢLP}` @K  @ @ @ @I ;uT?6,C ؘv\ @ND @ @ @ @ @`o.~F6KA<"aGzjǏ# @}p>Gl"@ @ @ @ @P [ZGQ  4i @`  @ @ @ @8\5:H uT?\g @ @ @ @ @ pΦ"<T?D[g @A  @ @ @ @ pXΥz>_zGmlZߛ?g  @W#|r5Z%@ @ @ @ @`y"wA ?`Kx%@"|20 @ @ @ @*pbvtyQ)yo{:~C @e 8L@_'@ @ @ @ @/pۢ^we4MoP}E[ @!!! @ @ @ @L]">*3A @F @ @ @ @ @`=YuM.'@T_F= @ @ @ @LY}F}t%"m ؘv\ @ND @ @ @ @ @_-:e~ @ @ @ @ @.[Q=ճVP}0 @@P]  @ @ @ @ @`@>?6.mRViv;:x> @{ 8%s @ @ @ @ \HA,2G* 0 >d @ @ @ @ \LAXT/SJ]P}T6r @ @ @ @p1(,  @%՗@r  @ @ @ @h6n|k:2#/rAV @K /MF @ @ @ @&(4M\|QGYz>ld!60 @p>Q @ @ @ @xQ]7<wvv͌ @TxX> @ @ @ @RP}~l5R<@L^@P}% @ @ @ @idT(M몮z! @@TW @ @ @ @;b><..f  @ @ @ @ @۶q)~NA*"A @vU @ @ @ @.ژj%2,T2JHʀ @ @ @ @YU:g:s%@ @ @ @ @ 4M7ZKAQ= @: @ @ @ @.{eJ k%@$Aue@ @ @ @ @~uǢz1#TrJz%60 @`WD% @ @ @ @ @_ GQTYdY.e  @ @ @ @ @~.^ꙎC^  @" @ @ @ @ @O_~&Eu^{k!@<'  @ @ @ @ {_(Σ,hSR=rJWDl=p>1J @ @ @ @tvvvb,*&%ԗٷ1ݲr @`T'!@ @ @ @ @`do{?QQTnGg}vKbX$ @}p>7j"@ @ @ @ @ t %~FZGVgYdl'MwA}'@ @ @ @ @@4տ"~狟zRP=T?$g @A g @ @ @ @ 0v^||G"KauA @#T& @ @ @ @~,JYGmd/_n4t6664-s!@&,|2ͷt @ @ @ @zƓ[yGzQ}lAuK{  p' @ @ @ @ ^׿-"QOo$ p @ @ @ @S?U @ @ @ @hS,?_~kQ"lT^aX1 puWn @ @ @ @^O~[}]7:uSOWnN]P_VH\A+ @ @ @ @Rk>x|VDuSo Kʪ/dO?th\666F3'!@-|2z @ @ @ @~ G+QTW]7U=OU=}2?D @q8ĉ @ @ @ @yc_ERG:g).&tȾn , o  @Q8bL @ @ @ @h^s< F4Myjkkkk}~ @^\]|J @ @ @ @+K`gg'X,;[ߍ/k_h62zwGꢾֻ6Ihw n IENDB`django-import-export-4.0.9/docs/_static/images/screenshots/import-update-with-authors.png000066400000000000000000011443041463433610200317450ustar00rootroot00000000000000PNG  IHDR , ?iCCPICC ProfileHWXS[@h)H6B AŎ,*TD(v(XPPł]y+ߛ;Μ;NpDlTa8:ȏL'   +bFFXڿw7"mK_8́ x5W$(ͦ牤V%BXZSx&6qJ*8ːsӡj?ĎB@bZ1b|A|8Ī;fń*ld‡lĒhiGA~r},?M//)CWy`m\,~82_Ȍ& ͅ b:Dy~8EMARbX<>.H>&ʋljdrB"+@`@XST }}N8@ + !ƀ'D|;88x;r}noY3֡ fD/pjMӃq"@,Hapt0,Šk@%`7pep܅  "4D1F,; a HD#IH  2Y"eH%E!I<҉F"k*jZQDCXtNC "tZ֠$zv/ `ʘfc E`X&b%X9Vc-9_ź>#Ni8+8ù4|.w x~TA` bB9a4| Dъ$b&qq)q=q8@"Hv$/RC#֑vIJJJ;)]QzN {#a43ƥ-mukZZZ:5ghWit,u::u4psĒ#x;RW[G'=^^JF~t FjY2r;A,-FA"u t|2V35{ W7~Nצ3 z$Db٤䳩iif3YjV~scX-k-ZL\dhckŶ*gMf]c}͆hðɲYosuͰdڹ u"r%U3ꦽ=>߾CCC棓G}v7Glǭwh S8ek'['SӵԱcmΙ e"Vnbz^7sj -F$c);}y=3jqL8^)ޛ|L|8>5>||y|1m]̗~~bC~Y9Gf@\@e@ YA' +o \v-?-dNH[JhLhe00qXxt|U[ #@;bUHiQQUQODώ>C3]_ػqqxG'I$HjJ&%'oK0ä́.'ޘd5iƤ'gO>:Em gʁBJBΔ/N g Zeqr_|yy|/~YWZYZOW >KP)x1}VD=9J9)9BMamS;EvbQ4ikCrIMyZG]b-E0;*fhhi;sggqg6`99"sS3W4{~ ( ^XXVva–"âE XX\|s碍łK.Y[ Bciy闥ܥ~kůҖu,w]aqpō>+wi=^5~UjoLYsܹ|ZZڮuVRQyʯjOAylPpcOnmPcYS%ӭ[vm_ wVV[`:NR׻k˻w7oޣt/+|_ʾC`?hqPI01)9ųaۏ:}t1ʱc ;~qֻO]kj8zܙ32?uy/^lhwi?:\;.]j~s\+>WN^z;oݸusͮ[[=oJ/`?tv}Q̣_<})i3g=N=Gz{/??5~i_'w|ޛo߶DF(iNx ,ASCIIScreenshot pHYs%%IR$iTXtXML:com.adobe.xmp 1836 2986 Screenshot iDOT(w@IDATxTUv AFQI,PDDTQNCD@ZZvaY`=Ùs'vfvQo֩?>/TBQPPL(S*+ T$(TqE #m19@@@@@@@@@@@@@@@@@@@@@@|&`WhvTdGu}f                      LϏ<_BB?(_ڧB {\,?3_pBݯ^Be@@@@@@@@@@@@@@@@@@@@@@(klm6cB) _,ɯacrD .:VAA1!H"PP'(                      c"i Cb( RSS!T@\tX;"C?П T'JEE(8:Bu tkF(_@C(                       IW pg:5:8h@@@@@@@@@@@@@@@@@@@@@@@Y"hڑBu /Q@@@@@@@@@@@@@@@@@@@@@@6ZfDH]!THPգB( (BtDQ&EV 0c:_îSA@@@@@@@@@@@@@@@@@@@@@@|!BB@ P(                      `!%*VIQG1;@@@@@@@@@@@@@@@@@@@@@@|&IW`vT'򃣺0Q@@@@@@@@@@@@@@@@@@@@@@(>&P8cfL>CAg#hJ~GGug@@@@@@@@@@@@@@@@@@@@@@#VG0  `:C&ڑJRgW]:ώ                       rT_;#YOPP=3pC@ WP=:(Bu7p@@@@@@@@@@@@@@@@@@@@@@ FGu@P= d8                       @|L-]5BcB?Buwp @@@@@@@@@@@@@@@@@@@@@@ ⨾L H ia#hŽADװTp@@@@@@@@@@@@@@@@@@@@@@\PB5#)(*YGu@@@@@@@@@@@@@@@@@@@@@@#qё>?ПC&',BJz Tw @@@@@@@@@@@@@@@@@@@@@@<$ BeQhL8QCl                      @\L$-_=B(00R Պ\9GW?t㦟|1[ޕAn,j^lQ7TnјqTT]tMm41B7A@@@@@@@@@@@@@@@@@V⨾| @K*ތȖ'(&7EyE{.!V EST-zEUY,R}. L 0Ioo+rոDJga}+o֟ ]0.t@@@@@@@@@@@@@@@@@@A@ Ш0fGu5:+!GnHZw3Sqjĭ9)%\ڭb$O/wP](9%_>uzMy1Q9d%T_5BbB?ȟ?=ǝBum4cE ݸ^SgɺZ~m6:n6@N' y׀Yi}wjnOp`*uz<Xb?}8˝Bir^wxdT                  "QEq_Ns(!^#/:TD| @Jei4^ Y>8|i %uFQa{*F̋աNr=Q>gsTOoNI7; @ B-j-_)~}H3Ut7'*n}ڳrCI_n*o@@@@@@@@@@@@@@@@@2@[$U+U OhtM/43v@|L$-[5BbQ]9B UP\.zSBkTD/qR SdÃoQ㪗ddJbAhPs3;J,T Jg*]Kh㋠N8tQ @@@@@@@@@@@@@@@@@b"酇ѣQ`si߸yLKI h| ;GP=( TmzvJm] BӢ4qIqA&O`"U 2]Hfe)kl Nz]lӋ-{/fvsNx\ԽECa=kitY:9^1ʅDxhCq<.׌P f:C ׌KyP)G .|Kڔ%:NNVZZFFwA ר~*ݓ7n a%2#y?]wҵԲ~q91E͕Y9Pg v`NrF.խe[iSv}pZ[ .{q5դqaj2|9ۏU/K6z.'^VM'Jݓk6[KXQ+[@ϧj9x>lCʉMRVOQՒEוi ͗T巴q!<I=Pv8Fv8j?;|6=Q<erf_I-YK.-@άvۘf+3[Z8`ګGki`njDm*Q m.ӄ-U89T;vjl|MvEqܳ=E)s]<Cugg8!|}V TXWӏ7W[Lsgs Hl.cgYխB-~D:yBQחPlY=z?;Ǘp>LӒGoߏ j Os>zhpOt ~ψ#vy,c[.,ϫWpۺ<~}<17U=ғ\OL器+asUKkޱsҚ\6':y8~:ݚ/kERl1ܤ(V=zܴ6.ug+)7nҐYkq@\t$`G#սdBui:O\ k|l7Iִ\^#;d3QUo=cM7OS.NЃYGԼr5+Het)"v^*uoYN1ri.a]ؙ$ٟiPVt O{_"PbA~$Ҝ* [${I.%ApEDSTxu_n#pSXh˂SIF'D*UcVu$k'RYlޚ7z-",$d*MEG:lc4bkO,NoOoܠ=U;T! .ƾ%$PKˁ?eG6&E1!jW!V8T;rgBcmW8?W҃Kgi^\$~YVsOx>RbxzCͧY<.=/=Z_:uCթ#5 ?"ϟ~skYw+r~ئ/Z@erY5bu&i+R1iZ>mh.\j&}glzͲ9feuQ(uyqP ,>D9b( 8g/Xi'wɮZ+bv:ˢpf ǛI"wt 4U ʳJ>&~ sq{-=rS4C-}Gh_`rtDudߖHzye-)_x{U4wNJ *!AJ8-Yn? H\"m|,2@g r#E hg OcT(V'~$9n͟<4|Pu /q?Oɺ+ˉw? '?$}7%]x$mL:1OZ#߾:k嬬۠?sЃ cY)$pcϑs?9%wfORU~G3w_ٳD[$h |vXt%#~_?IK/Sr냧Xg \'ퟷGB_o6_5ҹIV0 y(5:XHh4dzeO[$٢oX#\<[T2O2eI($I@}"9Jq\N(&Ϥ)80NM//U|UueX-*=3l7I?|. v!&&?-S\)&`ܖOM@pJ M#+M5zE=s9 (vۼ43gq9$J2_ScNi?#'1/RysBm{ $c.?"CoQgX m/arj?%\䎑tdQ4*߷v Q?ֆL+13|dci3#           VUdyŇFgٝō#gAwUpk +h>gqw';L[đ?{vjQ(\]=ڳDwj H9@LY[H!ut.4E/iն3TG11:_%u23^fne={c=ޚOҖ ܾYm>nq;gBS,o?pV`I"q6r#; 3C.}clqDlOӱsjJ-B꤅KCUqni[28\"(?;\9Ȳt4jO+6rRO6zj/e;ᗈ%T3dSBun (ߗ]\,(N+%MqC \^V'SlApTev.aOJ?=D*>K6ϿUo- z$e݁w[2<|*:栉񦠉_}~Qsegp~'q"zs2~@krO9lhnSyq 8~$ )k2/tJu׏ "-U ,gtcj n=$$#i\<ߕ|s5P#kWd}YqVVidR|"f7nǮrÆ m8p_Vp7CNW[ԿetI1SW:C~7w=DgF3dz$m}]WԶ*?'lw8ťdpƶ5hq=9ӳU.ӽ,RWI+ѷkuu&RϨ|:~ Yt_DUKcָ?,,zT"&OGтORmak5.r)Ջ^K_QmW%m{媴3z ,|뗻BJ&Rma9e(QQ.W>^UŦ_ٳ,CwP]xNxn~ʍ[aj#gg`11Soa*jnu3x{w&s&T=ƭgaY%QVN^w|5AePjeӳ8ж7]ݨ/WYE/K.J+}4fFJ?_hF"By_UckiG_(gl-X/hޣݺk2ldTRŞq(ޯl.Fl ?s{Gs#b*TU~C0DP+^_|c 'O"țأ;W~mmӼ`JNهjeU5OjR=o[:/ ݙ1Bu9a~?n:O{P?^SHN5~ϖgsy>d$_n/8SZ+_o"7*D=/maq~BW/Vߌ˺8 :q"u1%8_Ð 0z1I">{<#$HșNWe8`N_(YTʨ =UYAtbFP]xΐ2@\t-[3B9 O\wBP !T/^'"89GȭʒDkt:^?sz"oY"ca}RG/B[>b [ױ͚hZ}y9nml2'.œv'no=vΥ\``0rr$[b{8(ws1i8.p%NÙ5J37+N_,g=;3' I ׃suj鮼3B3'}㏞ +5sr̘GTzeuy9LC~Wcu,`̧űˌzS-1/4 1{^ތ>̼8cP            o' "{QNns*cdjIxh X*X< Ep.RQ݂ԒSnћCV)ѽ)\ 䌴s-cQ_妾h :۵o vΩѴYnLF쟳MϘźԨn&TAG*Y' [rBj{]I ]'+1޲;.(Է~97q%7>g{+f'´v~?}jN뭠QW~˧Z"4Vv3wec\kɔ]@VoiDmzNeJKl-p{sTjcBQF7`w enFӔ^UasCs ;s%T/+J1>f]"J9!~x,N JgI\DZYRQhסE\H$ FuJu'ף0꾠}rnA6:zwRAFsz,s✥a%_xgh{o{I0"AReB}5՗]<+K@kvOq:M̍ǍKC[4Tz6=l=#_9&s}5#@g_03g9cKy^&Y6bg\F~: D'9gzD|H &@Ff#٢o/Jĵ[X87Bu#ÃD(ltBCqXrW窃cCAq71';;؆1|1M{J?u6>P]ܜEƝ!<.3_^csPϧPmzWsYnU\Jd=ke4)^}"u}F"6&Og֜? *$('zu H~ _C hn6[AiP}vzOM8,B̚=/OC\f?<% ȿSMYbX(if /߿_~A+i8 E-B'J=Yl,/}Ml\*\|8qQïYB)>&),JTG珡O_{t %W |}QrU\ ՗lv(WRgL~|/Q 8x ߳SaODԺ="^am9Ҭ++۲.%݇C'Ҁs9rp/rɕPx\|Qe2.H۟\qî~_wmsv=rM^ܘtY˾cb*@o48˽bqH0˖1\w>DzUu4'ZכCY29>L8uۺOy|a=tvוX^I NiWZԿ_iƚ5Cq9,~:sf/MJ#(HwG~w;]ʽcV (A4[GhykL &ؚ3rMBu}^Fե{^M >&FaQ]~ 6<Ү俜#´s@V lOf#dU%o굊'QuD*ˁ,/-(G% _g4nmKQ ;^'ۉ&K; *ڸL&c!, jn=w )8:hy'?@!(o zPA~Pn:ņ[LtWQ&xJIs[-3X@_C/Dܬbm`#3P7K=jnle؉eX/z"T@qcmcaT?*+JNKeMI<_/"% z*u]biOXKwڮ'S!GZ>{oFBKJ\UI P6Dќ]h{r>5lּx_c)|/;d9ȵMRf'܉;}% tyU/X{hw}ZT@+Q"Yh/{Uju;RI0iLv-0 G};9G(~]?<٨Q&; ʪ-.Urw*ޯTPYDT*RPM6s _m,\7*7_(ł욽z*VCfc سq[ "N9!:bw5jrvXL Ǫ"8DCWk{;sT|F7u2 oLe݄E>8{LemX+?S"jN~ix\ף҇# BuqQ-۰88 ۳[ܧ[ s'ՂXpf>]bBr6co;4K^8]OEG*8yf^gѬ?];gޣ6|=%ʢq8Ɏ7-,B}]Kvww tE-?ݖ EFb|jlg ]J݇\cޯ9\h\aw8xBwEdlt`qUעa'؉u"T]TZBsY5!Ƹ.h1dl,.Bz}HYWI+\}dMy]U',젮-qTgug?.D,髷SNsI[]^9?Z,O<|yt~x'2~X+Ŕ38ty'Wql[P:}T#5:4gۭw[(}W*+)W4?mXm6x 9e%2Sr$[~XħzSt6?i'dqQ>Ǣkg)E-j]k_ `.^+eϯˊ-+wh= lI~nY|lL"Lg;#"l/ ǕP3Gw 29I[Esq-ҐӻCgӿo`*@3.Fol9~,e}y3%Xk/tVKZ.ٴP3V2ZK>czU*/{_v;,6oUgAww4 ܩXJ%1q@s(v%TozZ72ZyGWe:|ꊵ]Sfݵ w-ʀ|m 'D*V9Zfa\N2},&¢rs^CCYű-BZr(2,5m,AO)QDxMʝ5 rnskwWX}x+~9c(mT,t:?ffKwĹ':8KO4lt!خ۲ܜ)o.J Ըe'Owj{ s@ ސ@_۟Oќ|tKc| pw܉.<N?1Ό{W]<5ܥdԥzwZ^R"JSKS D^dhJi8`s4mc.N7B),evz. m>V=/+AΧ"N7mI]棓Q~9~GvZpK>P]4Ȟ3>X eL$Y{2MqC>́ u9A^_lYY礓m16P=8ȟ] v_H7yI2 ե_ɯW?Bh[`)4C%k$(#7 uѼ8gP]ix-H}OSM1EZxR'{->7q=bi]!zzYZn;`=S2z6*d|T|qfrvY4˟cI*wO~ʓ=Nr,.þn?NBA3G;~ב3lGU]!%R6Ƥ˦%Tk`ꇯ=8`gx:6~_}F}b+q/@Z`ʕ_N{H0UzskE4{*ȱ 报}H'wRWgNѡĎ|Ps)Tt"e#UD}Q@IDAT"&,\ǢaaW;ޱvS"m}}d胔u&"~csOceK5m8B/C7ٵ[\u:΢dˋjx+b [;O^͝9vEtR 7;;17N Xdc(}0;@sݥ }S'첽݅K'Ʒ9aUPӷ~FtIyLT|'%G޴\;r oDQ|tK%}0';:ks]<N?1Ό{ \ dvLRˉ)Ի|9[M%0y3;q9^W>ZTK9y,텸KwZ)ۭ/j:^V7+}кl :}oF6vMX<9N#١ʼB)W)rGrEm:KOUBlk' iX:ɿ]L7}D9P,T%ԧm'907?b4bN{M]e8w>}*юF^dzjϧ*WϑSS1/-u\lW/}uoѐe%@׮1en{si?vP^W:{qtlnkYeӺ+/FM/p8:_/+ /+, RӾI^I:﫷 ~eߟ_}: 2"O1=Ůrtq1UPeTcoDnu'_r/:uX}<;t.kĜW<%lO@$c#C)Y/Bu稜Lz5v T0fi<g~u='@vinȹ %72%=\t-%Ʋ3}4H"q)R!ӆz3e?}$ez6P=ݦG:Iv_/Loz|E8^GBӟlߓefqsWcD.mQ @Ovw$`۬zrxvmqB;1Dev}ZܗBz!SI t@QB,?zE~n/u3bH㺵,ea9kX3^FliUm,(WEY܊e~HUP 'wB[>EJqwYѢ 6}0 vSsQݪ,v-@_H,YT2xҀ+1杛]嚒kK_}~҆8|Ӊ#q^/;mW˫שIϑܯ%C1ye^wם'_Z/.,sTSCxuj۰OT_y%@]iHPZR߉&?oy$?mWp$"Z2d՛+wU֜~Gѵs/+x0gӾ2"A|CwINAʽ[\uC|*Kw׻.k/Ao7}]O:"MTco͝}ԡ[Cm{+ o*Ճ(AꞏFf kKڢvs{~69#Y=Df&v]lr]Vd%WvrX^^#mBr;OzOhM]|ejP!Ao:uT/'7-sy$V+N6}A"ԕdd KML97"=R&<?D~ݮPdg8}8v;?G ^sl vD,Ĝvb]Sf=Vx'wOՎfב,}:.wQeҞ[,0n˾.MW2N_OG'gBu96g-}¥fP]Mނi͎}id;lyܹ4lO?HJnFWdC62ס*Y 1yP݆嘮5X4NgZLف$8@Nqd_t Tz$@B\enKyH0'93>Ұ.=yEO_>mBscNqzcА u{ /}╫>'~ ܐ>~Y~2ƟN'ݮ~r|~~>χZYH'Ώ@srU֘/k,y⠼q!Foߘ׼.ķx Y IX\iA 4|.BtK6j=嗮Gֻ44\W=DU/8^בc҃K)y _/K:_ӷܕK1R|@ |Uݾ89d7뽄\ut B,cA5ʝاr,PBuIM̂%͓X_}Z7Ѫ<;Z*>tvZަ-fzqs%YcCh{Q]S{նnE ;}%wOT{m<3a#|TP,Xx® ^I']ջșP]ڻRͲBz=KX եc0Ku%vW2KD"Qxq,<ۭz+h7^x:5}u`'ĺ-+ϱq3v4|ϣZ@q{m({hN6pNj'Oh㎁5oĆgn;.:E޵Vхds dogt|,\>MYP7\ EL-kשe3CSdw>όTz/U`>L.y ʪr dvT.n!Pҕ$k_XkæL_u 17QaZ^kܸ8稛2:Tt>ё',D73'l[bz>a1Ѭ~،8u}Y_g/XgG!]V% wuj[#_8|.JP#hI$uO~u/+<_Vv'Ey5_e|.$$; OԿs*Da qח|cG:&c#c>M s5"R85=`)ux^IX]of]rP=*<&e :[_N^Guq[^ٵ۲c٨* ꏞIdaagO~=P)B)k֭.[ϕ}3BQ˸[Ne/}]WBJ%7zɘdP]{r5&gBesKQaX n,/f5hN]uwX-h<Oty> ^k7yn̡Xe(> ʪWы#֟Vld?jEnu*U#ź۬c`t{azۮ]]_,MEYm!󨮭HV8ܸiohVęRUŗpr%TV3JʁXD&+tڕu:V<΄>k+zE3"fy#z1㵔H]*2vZk+uF^T ym3\Oԧ,kAz;9_>lӈ' M1`sҁ&>9ڎ s+~G~>/F%: _byv53n޼eƁ(>&R9:7pSmB"E"X?ŮrYǒD/P-b}qcFl^~ve%᪹|O0s]oِC-H}B uqv]__˰7 E=s Dsh ?]%~zE:>PmۘDL*əP]ʕx*9#"0cӊ}LkBgJwoѐv8ƂR$mҍ sK{oE犸KWZ}\wJxa*DM᠀LAje}aYu键/@'I~%隺ʗy<;{;~Uu&T<ԩ_?۹_/]ֺµi ޣE0&Urn35uI]x//-{-zZyldjJI?/UNږp3,|ܑI >]ӷ Yܿ:2b (giX^ o}M#ϟm\VّV]$Rf,`{tUB毤Y~⨾|P=(@]\3K..Rwd-kod7BuqN{l6%TpY`%hg.ں^os9^6 r[ mMXKwV;/%>֕c< [Ts@aX^hpP23y4u_bzDԙ95 _˓k)GzkCK/ȟ#F]]W;k蚃QP]1RꞖ3 եn36rYj\ 79]tk A0vf/LPJkќ?tcY\o_c'/'>竔]+Q vԎFo^1+NCi-M16AgOV8ЛShpM]T-/rcHHJaa2Z\ ݠKb7ދYlqnxQjT:fZxGZv/:twg~BtR2c~Éۮa"(Уr z vW}GOQ3~ұ -_;`ذ̧I<.V5o!ϭ{8ùk Eol\'kQJ%U]Ņˉpvu-c`eYg/.Rgol,cVZWң5X]TuaqY?z<}J5^z^zi@4 =??Y ]Bm>at;,Q 7皨<-K;Gm)Eû4WACgFIDm٘3}_XڰieHčr5.i,/Z@]T4_N%V}D'芋osYۺV+sDKS۶K0%7zZwKT^x:?K(lc_wӴ^۟Ek "t}<.oΫ j7;/X-s:e.es1uW}3IavR x,\M:d>]D!ł|A2:H~9w(w԰#ckBei ^GOҴߖzdͳX.9cx \ .y#TwN&s0wXP} ~wN?V TO5Gf KMvD(B,73g(kx@JOI(?-TwynR~ӝKP25`I:~`#ؗ9a.fz~9dje 7G;G "LJGآ4>cp,^e,IK9m$<{"ղ~jK q@K y c>_RBfu}n'p-eWƚ,=Xgwٜ,ztIO_p[;t\lfDu(Έ5G؅_& ArEC/k~^WlӲR>\u M웙)(ۿWVڵZTR"hQiUŒ}9;30{,sU|f7jX7oܲ)kL[CoK֫Jۙ|t[]NrxYoB(k;u{Fh~v,szaݲί.,Ya܍2vJQU<6]ѕu\7RN[@5Ftu-=v}AwMK=N`RlէY$ox襦>mowtA*~rE?rvbGhP Ssz[,G哷zVEKN#(z:م*RɌrs>eջ#7^* VZ6,Se6wЛ:װkrEA>u:s@޹QQ9H@8`r&V?q|1]?Yߙ*n?W ף6?j7П܇L#      p( R yqNHU=^UQRk;NsA a՛T A쒮@TXTo3ogɔoubAupC/O0xaUoeHDMUAT@#붋G+TוGܲX_W؟bS}[Q`OoWUJR+<W&K<'ZVP׽}-j` tBWoסmG&6ـ>ku^"ߪsf>Ae_@zKˍꡄS[xsʔ#K J[o*!ڸ'X zGU >@@@@@@CMcx{;d P;|z!௢oNzI"P7Lk ut98Y#tuM L]Yff@깪k7&uŋ!MOd8ԛDzBMUE{wiݸ >G?HmbGHPmly渌va|[F9U;̎+(:OXI^eGfq@˙!j%]{)|le%slrۍ$ 0{Kn@\VsW Y?6V@TEZ#/~]T%D]_*ߏ}'      @Z3שzv./]W+펉w.8y!@i&#}<3nQ,A3NlqVߞ)ϑًWI^~9wWc0=o#p;[|Ճzv{aaW^Wl)\6DFN-㲤ǹEKߖVANː'1>o&Mbcqi7+ڜlY\yE5lej]>6GꝙWD+[U(?SU*ykBdů]Eq #BTB6^ 9S /u&[5 W>&1GY7`.WN*JPՇosmqgUzpUBԵqO*Uۮߏ}'       P[qQqcb?Uط?Gv/|XJDXH@ |eWQtJ9jؚލĭWHLDQsgdYuffIk꿣^ #>"PY*YSAu^»/ Cٽ.}?NLYT?^4sne9_Dth QUC:]fP3yY0)ߧTecTpk++wS \7}|(Y٥h ~Fhտ|z@mq 1+smg˅mKGAx ʂם)Tc`C4͕nʃ ;QumK9ʮߠ~?b?Fg /       @m 4o@CXUp;!&RbI8*gK?u6wuaY=Vax>b%,?u|5SsJQ]Wb?9('\졋7@@@@@@@Е]&͕}sQ=[?4>U@YA#U@Vw $}OEɹ'N--i˼ek$irٺV{W0>ZQ^qn W5.[T@%2iNOTU}Vq;:— dO9ASG쒈u7h3RU&Uy|6?Rf*:km-U:eHƅuPjQ^P]oCGږn˪p5ɕG.MDꁃ%W22*ȣJ_KhP=[ \CJT., w/ȋ7l7젺>]Ew GJ 1uk@Au<}.i[<j+:\v؎m-TEPwQ~S8 uۋU&^X @&g[ף'' SeZY=qiSڪ{= zX GU}h4          wGnV@P=P<ݯ&>^*Ut/XbT mj_K֕ό61cy8u!ơ*z_)S.Tդup+O-քݬ׬mJnfAowtGKܻ \_r~_Ҳ2K1H@8`_)C.iG}7Y9od}!uВLкH{= zX!Gu}'         "vBӶ+ lm0rHm$D|{TrT-!sW.5l &r䲓٭ADǬ_)Th^nO^s1Vocvq|FFy6qI2ڑ'&'JvU[5ʑW]!ߴv!          @ Fz bے& N͈+m".<_^ykMcuTxe=ކ e~           P:>Fܑ^qui5z`60*Om4( ]= wVo;+8wQAY+CeY%y%ӣCat\::Ęt[ @@@@@@@@@@Z 9+#v'kjxiS9Bb\w8-t9|ʝrLb\^5-NQH#          @eQ2Qî >V&w֗Tߖg?}փ=M[^ԝ0xnV^l @@@@@@@@@@@ 80=xbSAuzpػdP=uC[n _ulҦI*9|eY]W]!          Pb#dWS ٻe}}$+&;v; q*~D\Dx 6"+/Y9|90@@@@@@@@@@z#w[N'Azs9Q@@@@@@@@@@@ EE/otQQFE$f@@@@@@@@@@@z"- UQ+ Փ4@@@@@@@@@@@jX &"L,#TwĮJTad6          'p=o#bw9D קsE@@@@@@@@@@jZ .*BfzWnJ42C@@@@@@@@@@꓀+2D. קsE@@@@@@@@@@jZ 62Lf#(*>}5#           P?tEYsG[՝.JTWD@@@@@@@@@@QQ}qExTm6* k6           ]Q}хAuC |TTD@@@@@@@@@@T;Zܑq⣢f           @WTwGxtʩ>Uau            EE/sG'*Dl632@@@@@@@@@@@/+Ϛ;Jʨnw:fQQJ B@@@@@@@@@@0 .BP{@@@@@@@@@@@:>kHDa]sEᾪo           Y 6*\f-8l #          g-p8NҍՕe<           POb$9}x#BV}>^@@@@@@@@@@@03ˮi#^#l@@@@@@@@@@1$H8\N)[.' @@@@@@@@@@@tE$D|>A+2@@@@@@@@@@@ UQ=\]mM&@@@@@@@@@@@03ۦT           Eq1.=I\;^$           @tP=9uxCbkץJ[c           @Mm@@@@@@@@@@@|1Sn9uJzu<          {]Q=EUTwGtTw           @5bdm FmTT(@@@@@@@@@@@z.:- UQv]            PEhIɜ)TwĮJT"&@@@@@@@@@@@Dcc$%}#bw9D sc           T] !.FӓۡR>Ud$           @ Wd8]vTT@@@@@@@@@@@@| (*]no           Y@ՓUEu ;]NR'^@@@@@@@@@@@|ldWGNUQfzU           Pb$%=0rHv@@@@@@@@@@@ ǪzZ#=p;GEꣲ@@@@@@@@@@@> A TS[.Tau            $ڴ .vz@@@@@@@@@@@ :"]D~>@@@@@@@@@@@A$qGzv#"@8qz+7#         uAg$+-\F qƐ ˾ٕo''{ouaJСfZ\.:4n/uOeLK)Y(3:(gwK":#P3_;T /@&~Q$^g.A?R~@_833';          p( i?'*Tv]œc&^AL|0 5._,&ko29(³fM>[wk+Y{˘(-P2[NvMbGɩ'1{ [[vg+Pw/8ݙgu8@@@@@@@@@!TOQ]q:z*up y̝K3s?q}˕_$~6UFМg5x?r[;%g^Fvn^}G>'cAP\5@@@@@@@@@XTHwGn:^T?ict0xegj۴U.윜2yF#u [3vK룛KKq_LVhU;wh*7 /_"KG6nsO 862wgc~mdcn`M(A/)ό|˜/kA}U[cUZF~J\rQG4hٟ# K?)ڴ6ʫmrj6 VV]'~su8Р>e>0mow?S[XgU;wSw! Tts^QUۨ -)ƽU~koҢY3c#ƾ)W2Ehؘ_zٓ%G6m"Rbcbdbjټe9&22BZ7L4^ñ~FYNveOn(1Amy$&KAdr٥~*k XL223eێe{YKCV^ii!&:Z6l$K͛I|8e]>0 OIC@@@@@@@@@tE[UTW\[.Js+Vq :x9oO9Iezf +ߩoɦ_Bc7ޗ?Z}!O"_v;bovm[ڷW>s""z ~չ$ǛWz~VԲV @@@@@@@@@JAݥs6%ʝ頺 nE-/?_xzPYeM0{\tfVtr]ڎoB :\^ӁLJg+Kq?/1c^[,XczY*,C@@@@@@@@@z1$H8T1k]ItPɞw5o}EE#5Mt.!:@eŚ0OV#%#Bz"yf4ٰe:k^yS溒!&c .VyXB Y 8c}ƍ{}̛/}0ٜ cꗫ1-|y>Bf2\oHL?n,؝)}fZ1          ,iJ.6Ջ>e w2'o,7<_U-(ÞxXt@n0UdVUoo1&˸*EgO~Ӭ}J z.*H5?8pQ`5ӦQF^/߰e\ޣ(`Zoy:{.Tu)_M-{[}>\푧j 'BIp~JUNC&e6y~+f~ߍ՘ׁ{cXf9A"#         P5#>Sܑ^qu.z5TV֕_|2CW Ů-V^1>Q!/KmHZ7X/^^Ϗ_1QrӏiT>}E='Y@ͅj©09sjK/:_sYsػ|,ݜhB]3l߽_+*RẒϽI߽1qˍu֊֠؉~^jddP}=c"z9 ׭&lkc cж;Kx z^zy.oܺc:D%.&̦-[d+cdvv 4 ["wzAc6ˊUK{OITDweXC )c^~6}rhmr҉'~5[> cn0ͨ/mVWMoPr9OPݤ`@@@@@@@@@j Ⱥ$qExĮTTTK¿*}1+[+7ii׺11~.w[_SU%{=?B~m1m C5N>Tj֠5nђn Au]]A}./ $N9蚗'qW_>~C"Ì.:Um|}qcδ ݔ-n$kgLrm5ckP}&zhqBXn*n٣\OA5n=-=.*6o<7-wʏs~~EI`]tƍ_tc_ĀhP}Gڮ5n [;yIpB.+{;~Ic'Ky@nX6q˜d_oX6weђƴ5^97DP/'         ACUmtUoc5D ڕ5Tkn֠'cKKzխӯW091F/3ӁT?S k>q6UoO4ʠF-[o 66~6gynƕz:p| Y:|c [=zӁ\~~YqeAu&6O^}|xo9Wն&;9{GC嵖͏oyjRcL!_~ZT{Tw2~WYW~|sRew&}$_ O=K6..,Z\lGzJ͌o[И&^.9+@@@@@@@@@8`ђ>Sw?HpDGFxz^ؘ$ ]ՠzZo<ԧc%kR}*[pUK]htOzo,XgeC;1dj3溊&/n oߕftVs߷?[:\EĽZ#7?1ȵ9Ԍ kaO<(!uV ۚX{c,'=$j|E-&*Rt|p2vgEMDK^JTd?eyikxݩgL|a=er{- 쫩2˃JxXug咱@@@@@@@@@&*go[lNR'0vM_s\zngc<[ ㈋&jgYv1HAfMʗod›i|MNޱFs_~;MNќdsN쪃:^Q;U @uݏIrd[E~Y^q27;.!?Wjխ6Ϛ'8Flkc wh#Swˍ=);R ^([Azv4oXLz<22dz@Fff03A5))21e{XX2Yc]@|~Mҩ*GFDK>;?7eٰi1         Ԫ*#bw: _A/9O}־rO![ەu T`\#* uiVȞ2=I5E6LF>'5Q&}1ȵ9Ԍ 1y iox{?T׶&;֠zǫ\*:M?]Cºnz~ B7]}%ˍi} ycQ>tv rb{2G`WeM+ke]^'W*u^u\t9-۶Ӄgu$\1?{ >J%W_)sxOV<:`U }䉧dM!         @p q16uxC*+v]L]A# L]%sO{g1'OQ9HAu^o[b練ߐ~eλ].y+ { /g}*Ho OzPBCnk׭ƕN>f[jlؼͿON= Qn9?wo2BΰQGt(dTc>k;JƁ8/oW۴՘mM|w 냻HS͐gGm֓ 6OxSs^?xлMrU;\_ \%}ͧj>~,ZWe\_WtWF;c=n6̝/}8٘ Q؇-{3vj4Wi GGEg4{3L          @`*Q LP=0;ɠ9NWy|~ּ{rmtCTǾx?la!!ҰAjFerTS^P]o[WDו1~6f?wtsc:O`Ͽ O>/C%@ڑMȀ>]|Lp &RP]T~W4E;wʠF5ĶmVX>/?OVM1zlXo.99`y6׭(}5U{?O@@@@@@@@@@|ldw ;l*h#PAu߫/9OٽCo}tedH:Aup#ݼib.9 ϋU>ru@T{tNjЦyjeUPwU5p[ޚ(VO ?P1.TE_|?aX[ul۩wz#-^Q=EWuM 5qA XTՕ+ǖ{*9٪ٴY?Rչr۾s Qw[DT{v = @@@@@@@@@*P9a*Wo73Do=ИVXa7G OO2?z=pnБcjc5fM$X_e~8c١/Mu<.W/{Fg*߹kEW5)2Ϛdb;$_pѤܼ\}b+5=9Z#|yz'i0Qrrs խJL#         P@B\$';+C}TTDEJ8 SoݱKisk*ٓG9uZW~ց J־:xuV*vxUE֩u?;'s ᰋmGJjt>Ԍ9ԄEG䍛K+;q}ɠ* Ztxd,"ꡑ-P_Դ4-^3`@@@@@@@@@z-)i3"N]m#5(P^Pw@@@@@@@@@@ ī)'+6UZ7[.Ti  ^=?F#         p zVAu˩Rkq#uNz$         "-)3SUT٨^+]rƙ'hzp֜"         HJzRaPչ+@@@@@@@@@@@!iIիP@@@@@@@@@@@1*!*.v]4@@@@@@@@@@@Hi3"6]vA           ՓuP=2D.:|"          -)IGP=hE           FP=#I\nq8TT7e@@@@@@@@@@@@|6ènw:fQQJ B@@@@@@@@@@0Im!ν           Pu]Q=9gDa]ӮK7_7H@@@@@@@@@@@,)+#NC|6A|Cp           @ucUP=#Iqjsիx@@@@@@@@@@@> 3"vT7          TWOW.ڜzuQ          gIIOw[.]n           @zJZxUEuC|>A           ` FKPAuClAuS @@@@@@@@@@@tP=%}#pxA#2@@@@@@@@@@@H >.F֥WԿUV֮K7_Q@@@@@@@@@@@\@Փw,P"A           PR >6Zg'#6Cl*4b@@@@@@@@@@@ XUQ=C\bw;UJ]ϧZ8]mf#11   deeIXXX        Iouʼn wíʩ:Azs9Q@ٳGxC@@@@@@@@]m"6C|R@Pp T_7Tߐ-         -`գbs9fS5Uu_]:e`ujp,  @@@@@@@@@|9vM @@@ T>@@@@@@@@@*8 ˮ6s@ =        T&pemnTW^@@ PQ         @%-UP&vz%^F@:7         P@ۊ[vz^E@s         ӵBrJz%^F@s         |>i*"BᲩ6x @0mf|&&&"         P1]wUTǟN^R R"EEuյ]׺"?!׮ RDDN@:92ܛ7M9S̜y]~w$J؄Xr @          PBVP=闠UTcY ڵkgP@@FF*Wi#        @6gvZ #!Ċ]   D@@@@@@@@@ QS#T~GE@H3g&^F@@@@@@@@ JTիF@t+#c         PAeKBD)VlAAپvZIP/@@2@@@@@@@@@*!zXG(1R!^%*7 e"@PLX9)        TAVC;Jb#cWG-! @GJ         @Uh=4[kkEu ի@@G"        @huF{IL!1V5uzz- Jz        X%VHqx.p  Bz v#        GZ(q +Eՙ  @ d؎        x <$N2ACսuXC@\],"        AZno+R,TTb.@ի@@@@@@@@@ lVC:H|bA Oz{1 z@IDAT       @K+X'Ibc=TT?:FB@ @P:V<1V\X|'tk׮5ّ<=B@ 6@@@@@@@@@ IْP3AbbAj@@o!        Z :NSk'#T2;w}IZ$%%% A`޽2o<ٳgmV7o^W8pZJo.kiҥK3>|X߁ J-*?wArr         P)4jHGSQ#EիjE˗ڵkMH]onRNСY>K,~\,..Nj1a2A (!3gʎ;@>&=z:@C@@@@@@@@P槷Ĕxǚ|p U׭[XI?^mٲEPZ֭%==ky̝;Wv-ӧO/-;+V… d4ho[he˖ŋT[w%i1g@, UX7AFFƍW@@@@@@@@@Kӎxʩx^EZ6li~&Ы7xֻwoiذjkW[m۶ξ\}ϸ8SN7h891=kӊƫ{o˖-СCRF sNmj5k֔$yի'1uZ~&~g3'=·ouo=^_{fυQ m+PP~c:BZs6,uCXERzT>        Q&ח_~Y233MTU*~z={aoР4Hb `7lP{Ytf[m۶~ Pϛ7τG4Uڛ6m/M6mݻw7CYg%|ZSÇ/ݽ!t~V/ߦ?l`gaѯ_?Y` ۻױj5;7)Sm͛7Ν;;1v'o^"ٟj__Xm5-Z8/2lR:uk=\KAzlߦ/Ä}CCоt}4sm )J|c2u|\yyXF*ZzE?        E ''յصDTP]O4< 9 kUpڒ%K~صCҦM_+Ru]v ;54nf ½ kZ[s}+V… Kq߇qlX U~y5/ԮzmΜ9n:{ħf͚֭+׊N;4!b} X >:|2xO.[l1;䓥^zf>FZ]ϻfGCʽ{v*T i{=VV[ i={e/hnzNtu?ʡC漡*k']v̝;9VVc||1*ԹثW/oB|fΜ)͞ qmLUT13f̐[a9hTsM5ݵk٧sC纎K7MG~ Q.@P=C@@@@@@@@5ESRR^EuUଆkP[^oZ\O8n߾m۶D7ܭt.]?6c 6LS;^ +ŕ8nӥm܇:١>}xhh_Ci]w߇ޛ5do7}6ol6I=rPtW}tLiH{РAfYhskN;8g.``W}p,V֢E 9ͧ۾zk8mԩ&3,qH @AuئM32VOi}ڴiڀ*2\' գ0&@@@@@@@@F gff:*WQ]5h"Ѡ }t֊M4N(?+f2h$ûZ \jBāsZ|޼y͛KΝeŊpBo }@osA@j=}ݻ7*|ϫy k2'ZSO=̬O?HuM0T׊+sRk֭ya½?rE՗.]u]/1 ' ZI^Yd&4         D@NNjvXU2n? Kk[۷oڻ̧h`8==NJ{1uOi@A!C8o }ݟT?t|Gra3;ӧ{1iZvsO:$iܸӾݨz|Auk'֊ZY]Vgk`~$;v kNi$soח}z]B(+ٸq9_~Rnݰ|f̘!fյJVK֦MСY"T_z|77lPzm |_!m9Y:DA(~8 @@@@@@@@J ??յzQQQծH^+@kpֿSY`)Sd׮]0y5$!!T Ժ/ڃ]{ŊpBp e򩧞*5kִwy} 0@RSS$4ѣ8w=Auɜ9seW_6mU}8~޽ QsMKի':u2]Ϟ?5!@e ^YD@@@@@@@@;vdffյyuqE}qm3[nu*@k`9&&&ag6ѵC.]Yfo^/0}{ݥQF^!^w%h{DaÆ*nc nWQ]+ᇦ|RRy9_z3(c{]U>tW^o׮wqT;w :8Eu YDA}4 @@@@@@@@LlU*vM222_p'J&ML_w(uұcGsdM+kqwĉf$P|iZpᅲKM6o<NOO7A|w_]v;õEP]g9U]%^mPߜiP^y||hy 6wP^kUp=W5|~tG*k^Cͱ˗wߦ]M~A=Gt{.@hS˜@@@@@@@@@5m-<*T_f Y+ٳԮ];; $׶n:3gYS,?V… eʕvwS.__;x]P}Paݻw˧~d]}Qڷ5\]XXh6izZ-PZ(쯢Vח رC6nhf4Ap,gΜ)7o6kǫʾΉ ؗT/tp-UP=ӪӧO7#Ѫz2|oeժUfVJB=Çˏ?(۶m3_HvTO?颴jJj֬i^KUV-x<>@ ^@@@@@@@@رcEsTi kU+H:t<; jV MvVR׊vn`nFD+Rk|׮]zA@^h}yA_^nݺ>}P{޳c7>t: ߻w鞐`eT׋-^X-[fϗ&5m= RUw5ĮnmPwhKצo=iHj޷6ZI>ܗ24!wX=ȴiD+k= ksWu}iӦHCLzrb@@@@@@@@byyy&yRW>[vP:Ӑk׮]%..\4gg.o^ڶmk}W&Ȋvf}+Ç?r܇ [n-;vtwqT't8ݻW e{YbmF5oPzFW;mZy^+ЗUP=9~wb% W_ҥKS|R^=/߿,kSN1٭SN|"e!@P,T9'        TE|"ZUTĵZVO+\Fal޽[~GSIZ;AdޭA_;YdggAt_-6l0Æ 3=PӪVև 7 uCgMtgkB֪jNvS:x/Lkm.G{Oz=9۵ Mໟu@ #}?k.qСrg{w` @@@@@@@@*@NN)PS-<]T`50:         ˓tx<CU/e˖9ow[Ơsݺu`P[l)Aǰ P}ݳ'^vGsfG1        n\TYTwTeas۵kז͛VT֬Y#۷oСCTovݻw1&&&Jjjԭ[Wի؏ #@PݡA #       XZQ=##C:@$@P=̱o'~솑<AHjr.@@@@@@@@z 䘊vlV/&3kךhcA@j$@Pve3f)bJΝ;eڴie֭$͚5,ѣ3wrJBVN8ԩ@cоׯŋ{U=4h@4i"z2l۶md֬Y޲e0:tIRN`@c^jL>]6m$j/={ݻkI<(&Lpί5]vκZ0Yg@@@@@@@@_\'NEu_@@AuF5s9W5j̞=[~m9t萳ݽТE ꫝ_{5Ytr˖-oDo 0I1!&&Ƅ/"'vrm[o%xN]t=oڵ]guw<{Ȓ5obcce̘1t        @5Р8TTF@Cm;_~r饗ګ7Yf}qqqҫW/iݺ}v;w,Yr*^;=GBggϞZjjEx&$~Deu1;'֭+ڵ3wuj:~6 _ܹq3;I4@@@@@@@@ BV֤BPݟ@@KzMurw{TH5jWXߥKkKŧM&oM5jd*;@שּׁ,N:fY999w^g\ vn/ &do;V\3fn?nWͧ14~-8]F!}qY@@@@@@@@@ @^^Zz(1# @ ^v4Au~uIEۘj[oUeʔ)ήgyFR6~ZJz)V"MUGi{DgV'eήTE7YCW_}tz@v        )E`$&@@z T/^z׮]MP=h~~˝w)m۶u}|jر7ay lhwޑI&9{ΝuUݵy5pުU+ge˖лrE٫%w]gt؇        J@3<ƍ Sz(1# @ ^v4A .@N;5j,Y􉍍{Ϋ;w4q{^*WK۷ooN {?Ƿ^zɕW^iM]M6Y VU_b陚jk]o^CfTG>        %--MLG)v@y+((0\v.!p=@@T/P+-Z:W_}Uf̘a4o\ᅠum&3BK>S|rsLyͲo@7 < ĉs9Rj֬i}zMv8z8JA@@@@@@@$<TOII1b; T{e7JTjAwЃ` [< ͚5 uJg;#&M2Z\֬Y#?YwymYUn=Uߠz8ny|"       @NNdeeUG{ DJ ##ÜqƑ:e?Oe ?RN5-&&FƌcѢEdy~aiڴjaݺu裏:nvi߾Y'        PT4AuD}E 0  Au/T3<#$ `ʔ)2~x / qqq2|;v' 86m$ӟn7tf        @9 ɋ/(JHH06Nr\@ }$ QwTV1/0a|%))I{9?w7baʕu=H˖-:Au@@@@@@@@ +רQC<OVT/M$ T#ؕ-~뭷JǎÆx/45j$=Y~uI׮]>9s$??NPaa@@@@@@@@4עڵkKqq1A x\@*A?T8p\tEaA?nٹs߶m[;n3 }/ +"3g4]cbbdo #H@@@@@@@@͕tIIIzY!s^@Z#<+[PN:;`"K,QF9]993~Z-[fkժ%_$!!hAC޽ti׮qNH/29䓝s        @( gffJbb*>:<+Om pJק &ÇzO'xB֬Y{ᇥiӦ)SdСCv-G9/߿~,A77\`@@@@@@@@999AE>lF@JT/Ar*cP=66V*޽א믿.ӧOwnZ.g]v%=ΫfϞ-/>|37Tsvmo>sΝ;ˍ7h        @(Ό7tLNN#TT~@#?*[P=>>^SOO?]RSS~I}Yh-&&F|AIOOw _~sN;M֭l߶m|'g!i`Ot±qe]&}1c+        7Au-XTTDPݏ@@/^YlAZ^|E',U5j$2޲eK ;K8A+Ϛ5k6lha͛7;KJ&|A_2yd&&&J:uf͚rw{c@@@@@@@@رc%33S4n@@?T5j̙3G޽/"0`@~Z!}„ ;@{g;֠޽{塇;w8njSb;@@@@@@@@ɢY   @`a< ?9ù+C qζ|ryꩧz\\<3˔)SL.]_wʶm~;9餓c?OYh8p Z {2x`le2uT%KϞ=MYf%>{we…RXXh TD@@@@@@@$kr3III&oAkG؎ @ޝ5nܸ\*N PP7m$֭3a *PoSC[n-[{QQԯ__ի'V/Ϧ7[5v9        PƎ+ZQZz%{ @_zWC+z|\@@@@@@@@h3յ(Ç Gb<  }գ0G@@@@@@@jҤIINNzU{ AqT@@@@@@@@Q 77WMPPQ=cB@ ]ϣ+Ah~: @@@@@@@@ 4)IIIKP=cB@ ]ϣ^D  %4a          ɑ,*QXF@ T>@@@@@@@@@@Dꙙ&#TTgV  !b7        Tk"y%##CQL& d`2N>oz[J&r!R\\zrjfgs-۝'vl%;,l](Μtڮ&Xc9lM@-5 erf6X`}/m8|j%'Y};(oidIKfҰNm9x,[Q(󗭒?Sډ>g(v|`ٝ'!1|jYbm$zsĎmITW;E[yNYn|d=[w<}-|}uGNmyӆ{>yyA3Sy"9^v_Cw+[v얥k6Z|w:I% #9K]=aYy='}֭"g[?@`/Ù |% zPv"        NE5jʮRQ ;{=LN}` :d+KݣOw>x9ңCKg= A_hϐ]ڛKٻ绐*S}.N}.~V;E&>v?u.hɛ.2}Q^&qr-|z& ՚X/${+J*ɳs6ǡjӑ`A0QG>OoV_gחg~6sRy Ѩch~?r^rpՏjjכ*fi%2ݾ^ D%iE۞}M?hɠzDrs~.ge_[ۏ$o,`xwu7KW]̧{N;4O'W߹sO%qWlT/G         @͕tIIIzinD+ֺΖW>½k9RAuYn},8ۿ4Au|}}k&7XPݷG䬾]Kc='2UuC9{#s ZIW wa+         ` hP=33S&*2a|>v"p-W=o;A*wٚou ʫV}mKo|FWSe7K䙷>4˾?_ol޳w߾ ?Zߑo/|z<yskfx4W>֝O_*-RA5xsTwsV.tu^ww)2I\ WLNJ ZKw҇Hc }\w)\[w_&(w9 LPݿ [@@@@@@@@@[ ''G222n٠N-wզ Wʪ={GYdqzw+TɗUdPq-L8[dz~6êwVQF o_X}o:o~b's[d55Ndɛ.5 俟 8 ?sҤ~UybcbL g^tHՏ4u@Auw }kUnm|EVl1˥w/ˁz$zwd_w 9u֊0K8o ݼ֏v.O[2Au.lE@@@@@@@@TXƍ'M6dzsSzC#j٫7,aYVAzI`wS9f2jYZ]nTz9Y`w@IDAToW3!z{ ?m,{WO]䚳Z cޙ옔f_r. ׭" Sz"_< k9E>~z?%{ϣ LPݿ [@@@@@@@@@[`ر)TFPݖ &<}%Y}?O,*qh h Abk9w?ԠaHkh}4k/݊ Ct3nU;ڹ׍F*Pz|Ly ?DFϕJ6*yXjo ~q۬6nnDPXL#9^To7+n @@@@@@@@x0>=R jkbvsv[Vyi{P]ATתYM[/Xc?ޕKVVhEu kTe]ƛ!~hojT>֠Fr{ TOoXW;c8*s;f4?N\\V$O6A6y_9s;FHjJ s4/ӎe.[2Au.lE@@@@@@@@l\Ȑ$%n^}zIht+#k:TvvZ TvG{>Pe55uc#PuUY!~ws8յ ?fyBe+֠=~8.*-&/3\.]bFr9ƒl~҄i]T;,B/<\pJOi۬Yg>Bs%yerdS\>ֹ>1+n @@@@@@@@LE9l[ f׎|##]1\N:yK^}aG]k{ߜ&O:lzde%#=;cZ˪}Ԭd6TwW e<]Rk&ˡ2bfZAp3oMi~I!RҘ%5MO,k7m :?^2LN>Szɹc:o0oEFH:*"֠c޹gL,i m7Ok(g"V]"o/̺>ۇ:,~nVqF_9o`OLH$zߟ5@չV&PsB,9Noh_v>0k5VڠzL#9^v>"]t3f|ȗQ2ISs_P]4O4}yWvwYNO,*Ȃ~7(RsNu^}T>@@@@@@@@@@Dꙙ$M 4o&7@]v jPۓM e+w_voAkT`d8-Zƚ)&ms8յoVu/E*"`>?;V}[囥?9z7?4/)8;}ڸie5ҁ8@Cu{=]//Wo 7۵R]AHFr9=IKN4/iYˁjה{r__}_f}Hs7~ˠNpޜ4S9yɹ`_> a         '&·棣RڑoTNB]8ČOZNm9&H##,ݭsGXI&V[>,r2KMw?*ڍ&O<\GȾZI^+j˱έ>{[e ~wn؃U}tda͚q/+ _|z/9Ckq?=1?1,[wR}WKM+ N֠^K+_XٳwtO;Wo!a ֒qt+yڽݯo'}VӾY"ol۬wF>oݫV߱PFX6HFrwZ~XA&N4'M#9\nY~3 {N5ʙ}8}YDŽi_Wh\sV5b?        Tw\TYYYX0#4 kI{ eźr  ,@Z)EIRluV}/(myjח+;eͦ~C^Riws9zdUxգg>1@@@@@@@@N!&[KP=:B@( E         @T 䘊)))f|գ11(@&4         D@nnT/.. DAz @@@@@@@@P@͚5D3:Q DAz@@@@@@@@K@+7N6m*IIIOEzD@Qz4>Ƅ        "PTT$iz<Ɓ +@P=z #C@@@@@@@@˓4T#Q  @4 T@@@@@@@@@ rrr$++Kㅠz4<ƀ Q/@P=D@@@@@@@@ (**qIFF$&&Tg@@ TD"        @KZZ$%%O*d$.ZPP`\;=، Aj         P4g)))f+3d  P+K"        @ɑ,*W`@@BW(?G@@@@@@@@J ALT*W@@bW?WG@@@@@@@@(**_|Q222$!!AGbt  %գA0 @@@@@@@@Zz5PQ=jC@ 5      UهMl*顄^)EzARAQSAt*RC!tHpsνw>'9u; @ JϷ\ `;h9-@:0J*M_{59rduNv<3g҃%?8 X˫@ ZώfMԂ ^^i"ҀG- 0kɤI3:C9v{uA @ 5 {6|pkjj¢z׬5 @@^/?S/ҋ~ܫW/ѣGE'?#6ڨ5>ve{me/ 5$V뮻N>d@v '؆nXWg;Ϟ|I>}ǪϪE_v]wo&_EM[ouk{v'袋lOxsO{}ƾoYg29bYf\t}>;i<,(eeVVmҦnjZ8Tګo*OK-us[Dy~n5lQŎw]/T:tp _lg:VjiX hz!nOrܹƏoJqڊ+z5fU9w{hO^YVą@ @91bտH!@hOՋ-a,gq v^{{f?m;s& (afmf} 0SPD>l[=w?/kƍg +`i+2(AʤI|^e1+,Y"0F[m]vYկ~%X~:zJ^>ܶUlmTWm'Pkhy]ܖig-َ$T#K?b:%푏eUg)"juc?iܝwޙ|"Kn wGo_֘V؞xe,mL: @ |yd; .^B~)C !P؂;찃_ER}'uKym;OZvƌ*bnm4k'z0׿eݻwW^RzizHXM2VWe6:hUWm{9slV% +ymoe/PBn۪fWm'ehy]Vig-َ$TWOǸNG>qWWM̪չUK3/,sG^ҳ~=zSOc=N;ɉSkhrlOڋW1OyV+Ϥ@ @K3ΰ\ յ[@WBb )˂>S$X5kmvZVKVgoȚ ڌD[8FYmELږt7PU"To)+O+ ի,d{YT{~ Ol뭷njЖc"^z=^$@nݺ[mU z!wkI$-wyJ+}0f|ٌRYCorSN_fϞm -iJW_5}HqYJݻ%v=}'&z]^ڶBoccc =>o-߿z.|WC'x_G}Ō_F?U0:ji}Q=iT_ţ-3^ziOD)(XJ}om//Çڰʷ ԊK:W >Y񩎨d1}~71c>+h̛6m/ʃKCyߨp! ă c|W);%h%f8$TI)+[yNmR{mM[ }~9k<9>Vyu?_qW}Ԏ5Kgmּ.K2Ry[o?^oY?ꨣ*{cʲ6'DO?t %: ܭ:^h)tOzx㍦\uNHW*G-[lQ>/2ډ'*wg?p >m H&q^t*Oy=D$PnUYO vɎ8∐do~+3%cA65mzF1ZX-_H9@84oԼ'8ʱ6m9xm{h|ݙ 2 @ @.@2w;oYsg DzA ?&P]$ږpHc}IL˲bVIn\\%P=/ W~ kQmYrZ/j%9v2Xe9%K/E:Wϋ 7n\bYqŷUsVS~-_ *7Zmb]BTU4'_p%2 \T [S>;蠃|'aQ`ZBv9 5pBNW G/cך<5DA⍯Kӗ g%k!xmkK,"ĮWrMK|z/BzʷF+9 H7'an%~>/6Jq|-;!\Vwx$ieiq5mE$)'o,ǒ{,%jumw>$|__ P=뮻J4v^H^mX Pj}c-zy}//%\ږݯ$T/o VXU oy$Մ~W]b ֯8}G}t¦r?aO?k+*딇zׯpxv!X.χaΟUxjƣq7%L듯߿)Jr:Nv\IB 2g IuS@.O41> /ĥ^Vi/j,I$$ ‰p.m _5\߷ЗBu->P[y=%\1*?dЄ|ΫES[~D;ukU{yZ!rLVNG<#'[Wq` |z'LBk!rIچε (l-WCZOg wBk6ꪫMM7ݔ Y<~ݳ/s=9O&cE2u_hL >%qTO>\d XL}j4(:|霾[-[P)+oHU!Zy+]w/ϼmae_6<|W[R{D}k[ӂ}mEn|;6h ??!WuO>WJ;oyH$5I@e]#To9xzqQ}wc ufqԩ[',Ϙ"4z=Wo;uɲE'NdRp?4w(Yq @`~RlIwqNvaͧ~אּ5?ov"V[_ f[dMd$'(j ͛WYeǽlV& ,~^&ל wK 3ljNW.qďq/5'%Q8Aj\ܣ)\p*/=3އrs4ٺu'pL·"qm9IJRw)ɸo+'kVbĊ_`żm N'mRۓ߸PY܂$ʻ9Q}9v|$~Y,I&%iME Ē^xN8g-}+!,)~G ݂$?x^Dj~0+OߤxncBr=o,W'W xw&Os"q^sxSx5O m [xѼAs* NE eҼ7>WJ;oyu-ivRC\T>Gj^2En ;3辪NgfSykL)oZ\TDDeTj_v_^coenuY-,ݟ[l.vqYc@[i'QOYs iNZ[J|M{.o2i֘QW6Ҍ |?/ ;eʔ?o?_H%ʅ_<D _wuJ!~,ܛ.~+QY[T۴}+ϛ'g?S,{ǓA&ቄ9kzyKH[ZBoZAw z뭉?],TUP&Lh᭖ШEH "+DvbQG0jm!JJmO~YOm~@ /Ӄ8q'wG$q/2$$"qkTZ8?K}E΂zZ >ꨣknSvC?[YO+mE+[dXMD~ʪvdzuyevPtӂgy:Wx(Yx\BJN}Gcg.Kʛ_랲Oy"' ȫU[za,NX/5O=$nYVo}r}.=y|-4yO,W\UxSdYN+x[O:YʊVd*~=.~j7ߟ.uOC,$*R݉{z]\wT˛"g,@"{.-P]Q~+ QB>ö%Ҷq;JN^ާ(8ϤY"iT _K0WdyUGܷ/ )#ыA}nA6PFq'("ACsП-N !~1sm!+mDměl9xZb[}}' ]!rr|Q>+mkOE!̇Ź"\Tj_v_^8_s,qu\[i>Vd_~yn햴jYKoZJ׊㬾RɅ~y 6HRk̨TV ~jU*_'ugrC @ &z"6 BbȽ>7 .`Y @+`~Rl;AtM>kFQ~h9lk={4qs//KSo[u‚xv2g?+?N_s+h\pOT/99 ~ X k v}gݻw7g}n6;o߾~G~O9׭[7[lVώ#x׿eҟ{1oN\cNPD{guN?tc5bbC=.݉mȐ!~Y7գVZ;y"u/Y72;A9A>bhɜh͓oNiNnG}weĒv!S<0á9>\?EizㄯI jm?إ^991z /몿j=N9,>:NxuM\cFZ>W+/]}ŗKO9sV9UyJH9V6#"ߏ8?"rObOɩ rꗮEvjלFCޣSO}RJ㰮cƿXViƹb>Pr7Bc[/9o-qEUŭ1^n-g~ox+vy@<λ)>f֯p_1',2p@ODyGZq|46/c4GZ#qZٹcE5fT*GSMiwU+wgy6(g1 @ @Tcƌ>}4#թ @c!] P/B ,H`_ʟ+:(/ڏWzqMroq"&N74g_rV9NP_ O;4/ ׾fau?/Lճ믿>-Ɋ窉h["%`.wF2Y G|ߨ^yAt^VcCJY"CgD|B<:H>yoK^kQW_asOC~+mh/!ZB/m+ꂿR$v+rarMZj ,JVݕ\N$LR?VDWj{V(J~*,hP.iAljN:ɜHm-߯uq^OqZ'N_ hҫvJSh"7sXhRD[Q[_I3VB*?_X"L-SzW^%eۏgV)ɷek[/BOVdy=Z>aԚ֊7="8| T٠V,c^}@ @ e#GFkhh@N @ TEP]V%v4e\.+K/tLʴF/R_籀}ȾȲ) 5H녰,>3^#CQ=&#z{+׻woo:J[t%6V<[߿!J G^E,:N/k:rd_"Y]U z b_J",aOLd^Icwqva>Z h$^B:Yso6JTrP~,TGMdWV_ f/KpkE򗶭%(׹oe]L '*9 _b"@tRӵZFQBuYc-wlƉ"E1K[T8Yȯ8c"mo/ 5rR-Cm52c=Cy@]|~i͑e}D~ }8'Xh~Su[+<9kUv J>Sr>>[B\~{߻ۗ9sz~VU uBu1"/'q;z/~ D!fT+?s$~^kgIď}bz嗗\-N`\v$3<39g( /0CrWDq*?X",~"[]Dyh~ b$늞yO_<.! #łp:6Kʓ"ʿ֍:՞OՖUO.K Y}[}+iiZUscE4,o%4⵲^u'NP뙣oTs12*>믿~jvkQjq权i繇 3< @ 8z=9#@͏Q?vyY0!T|P% ) @ @ ~r_zov_s, @H TOP 1 u-/+ahF%BEFWy,yڴi!XO<"V:l="8PR]Tx6hYR9 @ @.c&Eb䜀f@"+ teO-}gQn&馛nj#FHԉY5'^2_kjj2'[,o~96f:u]uUk /9ֳgO,̜E8nС5 +{o{ ׻wos"[~aY5ga6~;sBX;Ndr^rn7'HXkƍ37Os1v뭷E]Ԝb׾ÀP˜x2 [mY6g{qXgSO[p=z}W-k"9%W嫺>nߓu-HV^{msy[i++>Sq?7gY\8kYzp<!J[|}Z+9֎Nn6իW8i[T{q"rs"s_2S⑧zW̉NYŧ4u;0s[n7;|goE欚OB$OJ-,ˣ>op }K/H#Ui; //T0|ps"~ܷ?{ԇRh~ƁBX1 Y6'cYCCr)%}9!E0ӱߜݜ(,F'u\Cj+>9x2i PSq_ivmmC}h߆ f*ЮusVݓE-UNJ#8vi؛/E;j>~TlK./Y)~ߛ2êO\)>-dL愚_kl_a5wQ;͉C_Zd<.?s8ԗfuYT|-Ze|ʛ|uV O'$DpVk^j !g~AH%Ш݊\,T|[q+S+-jriBuqa,!"-@4Bz/kOpEW|gg:UP)!{ ^~(1 4 CʷΔױ_W9VrZXET Ojcy|Yg937OUSW9ݯV֟+?#^|Eݻ{Nj޶>I"_ Ӝ9׿_GgU@L_i~PFJNiC"Zcҩ4ӵ[䲌[Z$9jҼ ՜Q0V^eV?m%TRG/+ìSu_fO?׽~t&Zkn@L5NɸV__т9q;*aBB*>*N;-\Jm$"_Kg|>mϬX[i|~q˪?_"BsE'cWD?^k6S^ZoRkԻzPk V@ h_BԦM-Ҷ̙E'ڙKi"j8H<_$,EM?_~ٯՊrB %0ӋzYUECyT~:B{уnHzRo]W@bdQuVy].oK(|HiKWV ǯZH(ɚ"TUM9ب Z8`-\6}tTj)OUJ˾.a |6d[_hjmW2 @Mghv]ǯ6w`9#P>^ @0l֧O2dH @F`Μ9>ݻ[$@ @ @@Əo,AN t"?xMt 3Ju{Ξ~evxͺ7|ZӨp @ @ @ @$T3f566Zn ljMgxvCO;o-:b}{lk@ړEbz$a~fɹ^y-;^|62v7?'ׇ_i "TO9@ @ @ @ @̝;׮J5jz=?̬VZ~\%/ _|v͝'sOMqkv O3B4* @ @ @ @  &ѣo߾ЀE/T띏؅QCʕm^t+ ϝl{|aWFbbs`^yiGFs @ @ @ @ 0i$6l 8К&}ea͎,׿mJֽ[7~%uخ6r|%8 %?)E ~sɹz O/B4* @ @ @ @ YT5j_`Ǟ5п < 99sgO){ۮ'ċS0K^sS߰?}l[cm'~ٿz6_-4 [uػWp>38~R'-i3W̲AM}m粋 OK%io ﱜ_ZxA@S~ěǞn l?yg!53ڛش3bna``?9*4f##B @ @ @ @H!0qD3f_mpf՛S}i:>N~{ni+/1&Nlw{i}k|%;kpm]sڛo'r]l+n>.=6]6Y}p*zy6ÏJ*vv;|'~mv57r!֯q^e)inK#MW_ֳGKC@oxݏ칟У[/ا%k#-k.CP|j{ٳmqmo@p۬*WjϸPbZ$k}H " ':$Cv@ @ @ @ @ ?FmǢz-7oXzQn'i;OwK\a޽PW/gTH '~p}Ioc"z/I  _|Y'R)ӹeǎۮeC@ 7)WZjU϶-RW ;Ϸ0ZԴKN̦x.^֭cC}u#ΚlޞNl{aChN˟/ _X뀅W@ @ @ @ @)Sí zpwڵw>xVljr\NG6jlܹZ/nnNĨmS/O[nݶ+R"UEh!\qU{OϿ[C7rmEFثoe7{/7  T%0u3v-W T_?ӆXǞs=TtۻM>t_sc7wnkOZpaNS/A, _qw@ @ @ @ @N}? @ @ @ @ L0Fmֽ{w,WSn{߽þRgNDcvV_E#vľ¸$s?Ko;Xn8,w.t+R~X.$l~7${omoOλyzθ H \!gJ"6` gkS/nǜse<,,;vvzϞ6TF, d;[  @ @ @ @@"0~x;vǺuPZ&|!hem7.n?La ^I; # z+-Y3U~RcaP}|dSn}Mi[R.[~?h [|a5WB7y7+qBz  #B?^w9 5'g7@ @ @ @ @8qޯ_?3gBj5i33'^z8?r|GgNOwkfS؞=gسvh[&k&aGem)T/Ϸ>grRO85~ku?v͆/08y{ Өwz@ @ @ @ t5'OaÆYSSճ\eOn%ѻlf{hm^kvF.0u~Ry%Mm)T?kg^݁߱q#ٓ.x7hC{ ;I\=Pi8>3;sP=o$V To4@ @ @ @ @] lر^>{lkhv#B?\u-0ɒ V7~VIz?ۇ:yp ,,9ko>`[`PծǃvMw'ޭ͙;\8%TҶqoa,5_ٶ}x_p@/P=gw^[ƍl!@ '<Ԧz$=~Fɹz=OЍ{smڹGQ5xƫ-glR|t^ g뮴-2l=gק u!o8:W@ @ @ @ @mN`6fӧpg@.[8e#vДG@yakSз~D#\#'p??O>c{ѧՄk,B۝7j%o{I_nwhemm"8 VǗ_{l;qU{^jǟ}fM}zۥ?s?]iM}#5~\{⥩zP=oD3D^ @ @ @ @ .M`ҤI6rHkllgzɗ^O{3Rdm-b}/Kr]6՗]49Nyl/?Kv"5l%[Y=}K' n%[Eozߟ^eɱ=i={N[3C4ֿm֊9-+oY7Lztngۯ4[@(Os?1;]{W|snZ/?x3z93+c@|鍷gYl~7qc\=.ozB^-B @ @ @ @],5ʚƺzWPZ8A:3Ꝺt7@ @ @ @ @ǏB~谨^NBNT  Fza( @ @ @ @&Nh#G4 ձI 9m!TC Y T%}A @ @ @ @EP}رֻwo%Ջ"Iyw;JfWHف tEۦgϞm|}gܹs&!b @ @ @ @#Э[7ٳ/1u=RYPĤg0`@ֹ4i9ҳlhhf:-#HA^ @'ԃ3fVbM@ @ @ @ @޽{wGEc$.Ç[SSPVn ggUg8hРj޸@ @ @ @ v%0sLނ .خvN?t5jBV @k&q$4 @ @ @ @@s6fkllnݺBb  @@X#TWȁ#B| @ @ @ @ P,yΝ;׮JoQw#%@ FG8 @ @ @ @XՋ9a=z^ Vb @3kJ9pD#!@ @ @ @%P&MaÆz1X L +z> @ @ @ @(BbxʢQ_~XT/)@ 5B|%8"TǑ @ @ @ @@^ ω'ژ1cw>gV%ÓX @OI~!pD^ Ob @ @ @ @(Bb8?FmǢz1H N YHG8 @ @ @ @X)Sí z~@@W vP=GBC @ @ @ Kz1<'OsZS7u1Bbx  @ 0?P1ՋI, @ @ @ @@^ +ƌc744t\z1K, @8,z>~ @ @ @ @hՋ,755!T/)@ U TW#4 @ @ @ @@@^ &ѣѺwq-4;&@ ќ?P@ @ @ @ P,A?~;cݺuC^ Vb @3`"ZL"T/#@ @ @ @ K}P1<'N-̙P@@g&DE^ Gb @ @ @ @(bxN<ن fMMMXT/)@ 0-ÑX @ @ @ O1@IDAT@%>>rH$@&Ŕ2Bb8  @ @ @ @@s„ 6vX/T={54;WLĂ@@qÒy^1 @ @ @ @X胊9~x3fzP@@g&D(B{}~I{ioǟ~Z fA,S᜻yv^;#yg•M~~iy7/c kZ/ufK]tg> ?C8>pϋ?A- F-j(kjj2Roz1` Kh1ee O6s#@Nk]Y!@ @ @ @B}P1%5~x/Tׯz1\ NLh1e }I;fs#@@=#W\  @ @ @ U >R8q9$TǢz1L NNh1e O*|? b Pw6^ǎs W9 @ ?{WUtPJi3 8P"  Te"doDYND" m)eCWmߗ$MҤ&&&{ι>^>~y  @ @A$>f̘())I;za\Bb rg_,Mm][SqDg @ @ @ @@Ovg̘UUUQZZ A]@r a sz!@@%nb @ @ @ANCCCL>=ҠzQQzz @zpw7i܀^ fN @ @ @ @@O*̬$AT/ ^ @,A0+^G s{ @ @ @jOc֊z$@LzaB@Tscd @ @ @hO@>=khh3gFmmmwM- @ x-'@P0z!@ ܹ12 @ @ @' ԞNM>=41uySߙ+ @D 3sNB/i @ @ @P'&'AH;TU @@/ Z gw?z֫ =O@P͉ @ @ @ @#AQZ~Xs5,,|35 @@ccCcaA:rG2_R?s=qD 3+Th  @Avp"@ @ @ @@*$A(--T/^ @@しk6OZltNhڪ]AM,,\ְ @` @ @ @V|P qGMMMO г_Q|Mf{3~s-}bS!@]-Ϟ]3/ŗ>_Ͽ%a'۾ zmMeT|Cw @@'; : @ @ @z|Pa&b1z:th466 /u/E֩^#Ns6<8+sdFc; @VvP}kg.=14w";mژ= o[t~Z @S @ @ @=D@>0^SSVTzG!@"2 7~nnl4Ϸ}kc ښJ˺+>G @@'; : @ @ @z|Pa&bڴiQWW%%%iEe uazS[ToKF9DT5cXsԈ8GjVك|omD[S|Yw=}칯w~Z @S @ @ @=D@>0Q__1x`+w+Ͼ27yoJԌ\5jowXz'٘YtEZVUg7(-֎J~xvVQʷ!("@(2꿾Ƹ'86ⶇHիܻ~㕹oĢ Ն' ~lRhlpܩAdPaB6M]+0,E9zNyok';lm8cqc3+/~qT%WoY}B&̞l-o( T8!^jF TOk @ @ @t|PaLuuuՋ21A*/q]zĪ>sq?ȝ]q*}tL Vwx0w_STX%w<;_R002OI(`fn%$x߈F_⣵Aaei~s|׬# Х=!>{[9S1]+=qyM?v-Y<+qeWeCJ}Ç,| ee+> "j˶鮠rlzu*ˎj$v|ᳱv_YW繗 >.Z|˃onvֹ_Gng5ÆTŋcω/XL >9G8V%m/̚Zeʚzvukļ7ߎK.>\{2*8'>V:7'>W5{ق۬GD-ס/oF%/funCGzIuH @ @ @" TSFmmmFoE*>[]mϬ;~314WƆlcڨY3OM4j&H[Oʵ-_~ @@ s1 z=>y^V<4Uӓӓ퐝|Gv;+,]idO <㮿==>[[Ħ믝;ݙ;YVTϷ} h4鮠6?::jh ȼlxA]5 ^toZsq&~`&[-[|Q}&Yif^%og^]=5d=ڎV_HOy͂{N|Xx/Z?\4c \KP#@ @ @ @J* t}}}3& łc-TP^'5_կ8֪Tƌ >TY1ِ}8n5>a-7^oَ_N4 #ImEײ w03^xߙ -yA/~iQ+QiV(Wʹ8gZ K~ hw3&iIt#~{-qKV<>]cU51獷Ң+۾5:AbﮠW>*^[j}d]_C70ww}?xq֫1jĪAf4Ye= ֏=xyk6Α{7湲EUo3GCCc|2Q2D8Ksm;-Cs=whP}/~t)8SٗfX^P<(bjâvH^n]qCzh]3V:8>Y߅ g7;}O<7hro*myA^ 5A%?9eVVXtdK/'gmZ5Ӣd{teWFPv  @ @ @^@>0ӦMKWT,XP}y 'י;j3]y ٮ롘xÝmiDՈUvJO5 άJx;$-[ٙ -S:4z- ]̦E+s1]k'?'eVDSKV^ntǶٿJIG>Ⱦ4oֱ֯RsZ^ o[,ox]v~Ϭ_}2;x//{|;՟Wȵze'[Q; zuYʫruU3!fN n L'γgiϐl[ m8 v.oĪ}fv3%+ȷ 'v<(2onʹ쏮 'O{[MΌ!ej[cߝ ,rMw?볫>c+:5YC1?OK'Г6A4B @ @ @ uܪ3f̈ѣGGyyۃʞ{ҥ`ѢpC={t5Ϲ6 :(w3qKf5x.- 49h5㠝J[ ЖMҕmgV,/-ÇcIdC}IΎ/ic#@#Akx ~kd/*xaV ̬~< IǧL.voTϷ}JE@Qw7xV`ąi2sde줘v6#=z&\[z釧+''y^n#g¼GE2x=˱5 7-LVpOOhի'Փf^#d%T.oGCZ]TOB[}2/4v_|tMAl2tUko3.=]k+\ Ɏz  @ @ @ P0P&+WWW ws_U𠱱Њqӝ+*k/YݱidEԋg_YlVCvUz2~syfn g&@!ЕA^_GjȄ͗|Hӻ/w҆>_z$?gcjrsկm YwWPv;8_m}d]Wo:WqCy̷\ ]U9엗 g/[ {S.[๳ձ/=,؞ 'AdlG3n.{jP=hNɖvT̈́O>{@誠zrg^Ofkf yd|l1?fu<ǟy!s~W~ 'okҁ!! @ @ @D@> 1u3fLT_Y((i,Lׅ饻LmIz!wzO4v(ʕ,I^zM.XWԦ .NJ&adΚ%+?&m_3/~v6]m=lj`azƪCӐ{rѠo"@"ЕA;~*ι/nl];hO9$;ܟ~7w5[m2_wPm:QAXT缍w=0e^;_BϽ<;ƨjKAYF 8K۾k՞G,96֩J5w1'TOVw?#3/?q8ASA|=i1MkVZNZy?/6p˦Ͼ4+jGL:+s"ūHte?Uy:g^|%ÊՓxѩio-/kCPC @ @ @(|PA>bРAѿA󮼩Y/}꣱֋3s.ǟ%U^dBDmXyY搱/*fHfOs3j!93w(]saC.<=7=K*E|1;2QW3=;Tg|E @!ЕAӧ\s}7cۼ3?Lz>;kS/ɼ@uEZ6h8uoFՈUr}$/\u񕑄ճ[Ӡz}o+l of%0vۤW.\+v_KzC)w_2=׮iP= +_4=F[ y [O (k.81V:8'wtiP=#9-깗bOHVS̍z iBxɘ5w^lih:/jp7ѕ_z-~qH @ @ @*cL81*429g+/uE&lKy-'l@<{&?V(ݹ$F2$|qv&Z:U#v'?ނzvrzeP=^D;ԁ*}1~?-7TsԲUs̹⚛qٚK#M 磑[6l'vX/Vdd%dhP=ΏqWL2W#;sI|bgr<|ؐ8Nhj-gIⰳ.M^eg.\(cҥAc8 ._Rn)_L?/^P} ƴ&A2VU3biE΁'S/mW~ƒ mCPC @ @ @(|PAի<]ъtm-?H{P6+V1q+6]}ؚcn3+={nI$[_&H5Q;rx8}̥WK5_dɊ*-=w|VĢĐ%#3'!z)~sG{}-Y=1NL᮸ڳ}|2wY5ߕ<7L=n|:ĎN`S/O*N}vj }?vrI?ɪɪvqwJx?3~k 7 ''vώ_K%+xIixPA nq,/yϙ|2/ KN˼8$žl_3qKsmg_./Y-g\6#wWBY5*mrlμTБz6vg^7@FW~rickzk* @ @ @ @ _|7~|T/ '%tMVWi|Af 1lpY_}-Yi9 !n;Ŝ7Nį(uz!|Wqz{L38S7o\̃hgڮ?7:E˝mv0vۤ5Zi'{lϧUgV>iـxˠz~1#ckץuԳ1} iٞǞ>X\ӛjtߏŋrq,/Gȵп{GIt\ɊɪORWťW1mvdžptOzyygFY'ztu/ϬN;tVɼPґzOBݲh/ڹ$$GE]^lO--k1gxӎ?Θti ;)OI;eՓ:M ozC5iVT_YA >VL:'qZP=)?Ŗ*ٍN>/6`_JO͔O++vme\k>rѿ_5w^|e#oShPs\+?c;2)H=9޿#vH @ @ @ ARi4yr=:JKKc! @^.A0UkUJ_Z⍷iuHVA/.*Jhd%dq5kyo;|r$dʐq1baVa_^P=ix1}\'ՓAsK _OOŋrm+?xPZヌO]+Jwߏ-~ph 'kB< ^ͼ.OWՓ tgzr_R֓7mY- @ @ @d!ĉ&EmMM Ջ2A]@rT6_W<va,X(W$+z#Y=nqɏ>~w~d=;~\YS^:(~sO#Y:~֥ǿݛ=Lw$ޯ8Xefm{JP}LqչGqqq:/57ֶɿ]s QWFn3iO˕̠Wq{殝,Z8xuޛiyWջ3VP}y cAO'/;u/Z2 @ @ @A$^YY U/ @@o ZADcM?^+o#^xeN$aY\:*ݏ:3x\d' 2'얬~w/NێjlcpyYJzC)玳; 'u˓n=%/KVھ?τO ''wqwJeq/gced/6y)Ow==x:\+>cmՓ7[O\7^zz!;&@ @ @ @LҸc̘11`AD 3}9^6$~y>m [L$|~׿2Z+đ/XՓg-7ѓ#VT20ߥc;tzi/r{g1YAz!WtazW| 7oӓK&K @ @ @+ATCCCL<9jjjDP=R= @}Ahaf/~cm6]9bԷ}/qocμ79ߴm̬^Ӵ83/Dno3[ntv2"}iV|ǴV%W/?ب^cɸw=͝O먽s&{G8^37f;״cIf}=a~q}㟏?ݴY!g^fI ɱU m4nK=%/"s0z>t..*JWvOVxo ן%%ә߅6M5_jT\uQ1-wQ˞#Vn @ @ @ @@:oZ&Eeee~Q&tzr+L+\ Z wڿ07P^:uUQ9r(..NCɏ>\<ʜ6Cm]vȨʄǓ _jc* Nx5  @ @ @ @?I$}ĉQYUiD 3q =S`UO虃3* @ @ @hW@>]7~|EYfE̒!a:  @*A03/^G 32ߒpչ @ @ @+ .OO&A(Ջ;," g<f z@ͨq9 @ @ @+ .ON644)S:JJJ; <# ^G 3F><998"@ @ @ @vի3+EQQ;," g<f zÇu3gT @ @ @ Ю|P<>9qҤ5jT 2$3+5f^ +n% @Qzp sz!@@;Ç .:N @ @ @ @@O*̌0!܊!  <f zq㥧 @ @ @+ .OON81jjj$2a:  @*A03/^G 3*_ǟ3gT @ @ @ Ю|P<>9nɬ^QQaEHi~A8)PZ20ntVQ @ @ @ @@AtdcccL2%FeeeVTJ @@ ZzaB@81W=spFE @ @ @ ᓓ&MJ(^opPL+\ Z wڿ07#Я_q=p @ @ @z|Pafq㢶6˭^R @]hafXP0z!@g E;98"@ @ @ @vI'+EQHzT$@̼zaB@ozϝ##@ @ @ @@Amt :FTMKX#G\TSX* @ @ @ @MA۸㣶6J "A ͳz~~Z {! @ @ @ZToMe&N̊x➻ X'W  @kk'f _GlNwX1Asӊ @ @ @- ^4iR=:ʢ'.V  @6`$?ˬz~Z s{ @ @ @ToOOՋq:5  @* X :;(/X&@rJKmZN-  @ @ @ @' fVzmmmgVT_xzaXBflZP=Y:.y5#vmeL˩4 @ @ @DAʸ㣶& T/ ^ @, X 7YǕTŌnoZ @`9;mYǷSi @ @ @ꅙ'FeUUFQQzaXBflZP=Y:];%`n@k!0p@!{F  @ @ @ Г 3;zee <8 ê @7 dւrqeՓQ5ኘ[  І_b8 @ @ @zzaf(YQ:ˣQP0z!@z@6`-,g#q~5qwZ @}2u\}x3  @ @ @ @E@P035n^TOz,ʤ uaz  @ '&=d#\ٯo+o=,\ onifj+܏ @ @ @ ꅙ ɊꕕQ^QaEـcwճ;˳cS~2X'ph~zd?S\zlɹ2#EZTI>ӣ'k.)NFtkݲ;[d?}9d>ru'djmfϵ]_23-l;)mQ=jD|M>nl]QW @ @ @ @.T/ .JJJ^W @X ToT.&@ @ @ @mhݤɓcQZZ A]@rlZP=: 5 @ @ @ @@alhh&EmMM oϤ/NϿ 0 S/ @@O7Lz: S/ @ @ @ @T/ӣ*]QVT/ ^@IDAT @, X{.Y: 5 @ @ @ @@a Y__kV 0  c @ dւMtQP=?G  @ @ @ @ + gCCC̜93jkkDP=R= @}A To9jM @ @ @ PXAxN>=41 0 S/ @@O7Lz: S/ @ @ @ @T1'AH;TU @@/HDgsԚ @ @ @ @񬯯5\3  @ dւMrQP=?G  @ @ @ @ + ^$^WWQ\\q  ЋkA&9( @ @ @ @T߳!.򨩩AI@lZP=: 5 @ @ @ @@a 9uԨ(**zaXBflZP=Y: 5 @ @ @ @@a 9}=zt :4 ê @7 dւrQP=?G  @ @ @ @ + ^dEzaHBvlZP=: 5 @ @ @ @@a 9mڴâ̲ꍅ0dL`    @ @ @ @@a X__1x`+T/ @@oHLgsԚ @ @ @ @{&kϜ93*++\P=R= @}A To9jM @ @ @ PXAxΘ1# WTTDCCCe덅0dL`    @ @ @ @@a 8eʔ$^TT$^V @Y "]~uTQk @ @ @ @ 3zyyzaHBvlZP=~Wc1xׯ_~iM @ @ @ @I孷J,Zz]L:5jkk4,jl=C'͆ @||x$}-Lz!@ @ @ @ IeieȐ!+ޑQ__cƌAEqqqP @# ^hQ̝;7mUF @ @ @ eԓ >Jz"@ @ @ @ \ 'EӓaÆEQQQʎ:-^]]-i9  @>+ ^ةOovza{ @ @ @ @ $+WTTwݚSN1cƤAeLP+ Jw9 @`OKBo.\0?6 @ @ @ @]%P\\ HDR}A}c  @wFK] @ @ @ @ӣ:JKKU= @T @ @ @ @AiӦAGCCC[&@:' 9/  @ @ @ @{Ɋ555Q^^}#  @ wVL} @ @ @ @@}}}THo݊}~  @N wL @ @ @ @iӢ:] @`WM+ @ @ @ @@T3fL7mE3XAAӌ @ @ @ @>!>cƌ0`@w @@>iK @ @ @ @@ohhhӧG]]]T/**T @7 @ @ @ @[ gWT߿znwGB@P @ @ @ @ @7 Zk A<(z(uD @ @ @ @@/hhh3gFmmm9vK @@w.  @ @ @ @UӧO(--(jl=zl  x>9 @ @ @ @ @@I$= WUUEEEEZQPm/g @ @ @ @ @5\3Ҋ{9K @ @ @ @#ꢴ4CP}9`N @3@ @ @ @ @/())To @X#@ @ @ @ @@kǏLP,2 @@SA  @ @ @ @ IbԨQ1dȐh̬^Ԙٖ}%`g @@OZwQJ @ @ @ @ :˭E Оz{: @ @ @ @ @ bĉQSS%%%QO @`9r @ @ @ @>/0nɬ^QQaE>i@tH@PCL* @ @ @ @ Gc)1z(++zm @S @ @ @ @>'0iҤ4^YQ!2ƞ ֓fX @D @ @ @ @lܸ򞽢gշ' @V^iȑ+.C @ @ @ @-I'+EQQQ]Q]Pe @7 uo @ @ @ @B` QS]JK_qz!PAnA= @ @ @ @ƍQ:hP  @ 9v @ @ @ @'0aĨά^QQ/z~Z @}A@P/̲{$@ @ @ @ @ I&Ũѣ, @@_T+3>  @ @ @ @XQ&+A"+(v @@T;sN  @ @ @ @X1$^[[-^,bZ @}I@P/Ͷ{%@ @ @ @ @`Eƍ551hР׿ jC-A5 @ @ @ @ L81*4;O ڌ_ @ @ @ @:+0! WVAP @}O@P͹;&@ @ @ @ @sɊUQ^^S}q3 @ @ @ @7~|T/ '2itug͚^bR'@tH@PCL* @ @ @ @ Ї&$+WVFyE @T @ @ @ @I&D]]]oE>1p @@g;. @ @ @ @}M1&MG0`@O%@:- i2  @ @ @ @C 1qҤAzQQzJ iF @ @ @ @@Hꕕ1hР߿zy7J iH @ @ @ @@7~|3&  Gm @y  9 @ @ @ @Z!&M555QRR"ޫg @T/ @ @ @ @'M(--(jl=^g͚g{Ұ}x: @ @ @ @H"'Nʪ(//O /M @ O@ŋCo=AZwu3ΈQFu] @ @ @ @@ƍuuuQYQ=;cVՐg+vTE6(/V<韇|-,lXnF5b䪃bAEWߍ[x9LY]mȨY s^?|xn۱xq -_ۤ>Zxg^oYzA^?~7xcqƱnЬ @ @ @ @*kjj4T/..TDwXlވv?[qc۬ڡq36$'^n6韙Z}>[kV5-\!p1,|ؚ)?t_ss1O[I  ;W]uU\pog{6lXv7]RRz|%6hY^rpI'5\n^{6mZ2 @ @ @ @z@CCCL2%#w` gdèˬޑmޛ Ұzy뎈ÿ~WT_]t:T϶YqΌ./ ޾OgN^{Սri @ @ @ @YQ:zYYYYQ}ytlUTKB#ʗ #V<0;x\6 [ڛ_Z칗?=-6ļL?>,Y.?}nim;lP}ƍ~*+ꅝ 'XwuϏ!CvP[ccc}qoyva*n @ @ @ @H&NFJ=֋2ƞd3k֬t8{UZcxiMwn[ 5_qscᢆT/~zLɸgre?G+U掓G~=.x3o D]=4κQ3Y7<fe-˽/uP&돌|cWtϋqiT˝oӳ>)-Gtzam '#Ygu/+'!񼴴z#@ @ @ @ 'L(//򬿵y]5w- gbݺa_@zܯ_QLAg^#.{-6o;,ޚĩ?t\s=iV=&ձv<wڱf6o0kXP=Ga+ .OOTfmO\sرccΜMɪSNM?q7k馛o ~*֯__OnE]$ 43")3΁ 馛rʦky.Wa[oezIRR~~<                F)ɖE ҢzR9xmdG+Pw_VOC8*/,/u<=/%N햿+,)T?~\dkpsXqur45>  c[q3gJ>}  ԀkN _xD|߯ϕ.]Z  uԱL(鮺*yM/h5mTv+(,O=T@,rESW_}UƎeݥm۶~@o:Q^-\PvjzI&M2G@ d;nj7Nʕ+' E`5<+%_v7[.-lnG_ ۼsg'O-Ϗ]" ~nu տy,ZSe /]Fk·_Qa9vǎӪG4z @#@zl4\Me˖ 駟J%)T%NYF7B;wJǎrέ갚7|ѣG@… ˜9sq1b\R <7Ξ=[oBh &ݺu3!7uA,Ys QFon!$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@ٟ1cP=ҙIKn ս e !2͛7 *$'OXXOMMUat#%jժez ᯽Z_V'P~ գ-Ç+ 6b>}]6iذ>jժwϞ=xv>#)[}                8 0|X$&&Ңzӷ)x*Y佹%~EˍlR_ȱ49%_fS~Vڴ߲lsN7-(C^ܒ @P=UP}֬YһwBɓG,X`M*jQ]G5k*qcL͇zH͛':_wuRX1_׬YEҷo_> sҩS]… yW E2{イhѢ |ѢE? ]t `fZo޼艦SButnIHHHHHHHHHHHHHHH @&%% -]-T^$)e 1OyiRIȗK*_{r:܅5Jwձð:< :wNI^Nm=`9J{K~gOaq%P;<$@$@$@ c ٳGnvپ}{@!T"&LP~C0tKŝAcg}ߡCt޶m[ٷo ٳV/^,v2š%Kʌ3$gΜ*Z(BX|M]_%B<   O{(MNFwbbJ&TW;BTެY a9XMw~ɵ^_z%ۺg _~e tj^V-+P=eq4h T+lW^3gδ:e93U!П3gۑC$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$7&N,øchQݯs)oOrd1v c]={*%KYfɒ%KC[}Q5U[G@^oV|aU]ի˘1c!$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@qF`m P!-i5,&Y xbط1K2ն\\t?6ȏWf'TG'W H7lJh)T @|E *PN7> O=T J .ƍUV4h*7|qgVoٲEF)]w]@z0 x@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$?TҢzU_|ai}U%N)K *-Mdöɂ2́ik.*// $:BWn/歗KóOs9%'*_縧eU;vE[Ce]Ӡ&Y+f0  Ȗ(Tm կZׯ_D' Wy Upa;wn_8k֭֬[$ٳϚ5@wߵN0()>G9`ޓb]}նuuq/_>/ HHHHHHHHHHHHHHHH%%%E/sP=fPP^I.SPJ/Ge?VɯtIțKr!>*[w-; b-Tz뭲zu#FHڵ3\}dիWWiӳM6^_~,[LvmuY:ud`Buċu}Y:u.(QBve?3fH߾}%KΝ; /P|M;$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@G`ҤIRBIHHu-0lۖnA3SX   8&@zl+?3!J뭷. BQFIٲem{!+VkVZҾΡ6'''qN(BX>{L!,V\ݥm۶^'               'NTBB IZZqPD   ( P%@G T֭[ @rK*U?Jo3ԨQCF-[H-2kqn.z˼giҤI1=WT)9sf@QoFٰaC>MUVՇܒ !XTDIE8ld   P`3Pe3g+Xq16l}Cd}}; 7eŰ͚5gy>΀A"ET`AHHHHHHHHHHHHHHHH ~ ! T(T߶+'  ! 1Zf|_9ŊSbzyƝ}n W_d @\8qTPA Տ?.UbIHH"!@z$Լ`@:hР_<~L6-[tRk֬={:t(CX oݺ^@ Ǯ]LoS ><<9s@n:X_v72wҭ[ Ӥ={H&MԲLfOyd)_$$$H/HHH "GHHHHHHHHHHHHHHHHHĉ%%%E˧:eVxfm۶3h|f*B$@$@$(T祓 D`RbE)T-DHHHqHHHHHHHHHHHHHHHHHlO2E$111s ˔)s) "   G@c3 d-'OVB JZZ3%Pje!  OHHHHHHHHHHHHHHHHHHq$%%E Tϑ#J$@$@$@ @0ڢzbb"`1HHH@HHHHHHHHHHHHHHHHHH bŊ rEu\ %    HHHHHHHHHHHHHHHHHH KJ$3gN Ճc8 Т: 8q^`A9vJ$@$@$@6ʏ @<(SL<\&HH G[s.&             "oU߼Z `QB gJdIHHN/-t܏9]LM$@$@$@$@$@$@$@$@$@$@$@$@$@qH _|qxռd  H`„ RR%%TOMM-.BT, p|v@zl82             "@z|7H2KJJϟ_rMzVLHHHP=6)T GB$@$@$@$@$@$@$@$@$@$@$@$@$_(TՒ @V&0zhI*_^$GgdIHHN cÙBpd.$@$@$@$@$@$@$@$@$@$@$@$@$@EBo^- de TOJB IZZY2Yv   CBpP=6 @|P=WK$@Y,PAgdIHHN cÙBpd.$@$@$@$@$@$@$@$@$@$@$@$@$@EBo^- de#F '긎Zxf 2Sm,$@$@$@ Il\HHHHHHHHHHHHHU߼Z FzR$,HY"Yv   GBذP=6 @|P=WK$@YQ$%%Eճrm$@$@$@Lzl82             "~uռZ  F2fX)W$$$H Ȥ^* <+6^dO$@$@$@$@$@$@$@$@$@$@$@$@$@(Tf  E`1$ q2S)6>gYz _<FS dI#W=p5i_|UbVɝ+Ұmzr|F%|? g$@$@$@$@$@$@$@$@$@$@$@$@$@$@: @V Iѣ%|yILLTEP=̚KK;.ώ.GҵnZ[=̜bg72Γ+\؟9 dj#= [PrJz`ö]2xظ^ QgO˟>v~Ѧw;!nTP=|fLA$@$@$@$@$@$@$@$@$@$@$@$@$@ d#F)`YTLӢz˪ w؇,[J^~XqL;;[ՓꕒcC&- /-T2mc#EAF.Zy݊N(TSin:ns=W_^F|T"ERJR~})Z3J<6)SFə3gk=x⋂y{,CK/$;vP^ߡCaы/%J^>#;w իeܸq2IVK.o{\ht$@@}HՆ Š_] ;kܒ @8Bu2ҡpsox믐/MڞaD+46[q)Tw3c _~YA?-b7 =͛7ƍ#AdN&N~ݻ^@O2ǥ~Sou]Rn];sBE_Ŷvs[^=i۶ӛ$@@}ɠA oӦ\|ŮW֭[UXvϗ͛7?˳I&pfcwi?3裏w5s(Cއ~Ax饗7,蓵s߹ K.J q e}ܿä.O7qo0Y_~nVB B 9ܰa uW^yE}6->C=$*G *ŇH?-d8chyA}*UJEsHT0grdjr3@.\ zq֋ &0~ݻW~Q7:uR1xyO=,sˇZ֬g;' }v;klcNfGޡ+.6~/ {G*<gī"Y~P}:fԤ>zw3ۖy/u摕g,&#uŹ33ۘW9#N^i/F )#c-cux{ƭc!rH3-.;^bzlBdF$@$ N+#0\ԽM_ ͣMV^ ݨGz̘"|N%KTСC`˖-3g''<=Zy!<[f\Y s t *UHntpVg "5 a&111 }&-ZЇܒ d2%Pt5ހx@C -ڂُ KAat` ;?f%@>4رcʢ#ALnun.-諀{.`rV{esNjgGQ գoy>01q}̙3vͼdPW_V4bC~q=q.+ᾐbYioqժUi1~'sO=5ԱYV_{.lsp hxeuW8[ߑCÇ#rߺ8~i>/$XU,Pe˖LB6E&C3;7^3`cy0}-Σgf7x@30k±BĉuTՖ qW^fޡ: Y_F~CE猤^bq^;3;^!o FwX鍊nr$'/Dr{fs:m NgxƧx^ubhx],ev9~5 ߉f|bkE~̃HHN\ Az'-I+"C(ϸ/YTN*m8엵[w5dtTivQm9J`B>fQ?|Y:}Y-TXV󧧱35v[ˬsڴ]v? 9R*9)EȲ'8Gj69*>[*M!a:n!%UNHG\:  Ng׿n'rJsȗ?P|V,_7#[wci֪$$T158 Uhmz9(TwBȸ{*%#@b 헥xV|ήd/o U{ne=LM%^Y_' .͛'xn:?Yf dn%h|ׂe`{nєُ;~'y^BҎ;JvWaem%з-[Vӝa KKkHl )dIǏ>CaVZc!dtfc ߯>;د:{YT-c\n: 鲪 zES/~lUUWLLڇyQeԜM?{ʩk֫9ϫAдtR:u_ i1_ } p~iu|/ JvRIkԌq~p }^ NBz>c?y9}8ʂ_Lq"&Bjn37`ZNW^m,}2:/lZ %V@@VS]P\+o>o#y/U_sMK,Λ۹zE]Z<DY+WT7o^uE̦ӟt7bx뭷;<̜9S>s;&Yݗv<"yj<{G+_]vyw|_~nm)ҼHHN%qa0c*E ʂ[x=ߥ;0ݪUR78Xڇʾ*ή(OR qMoUSS>H`>w\ҧ} 9d3+ >;jlhYHGR ݮILX'όMeeӎݶ=-JK_Vm&}*{_εב/mqpm AzBBz%~/u&?z)pG~';mM&u9;TKg믂:~M4QKc},BuM[>"KPX/഻[ӭ^Z^uRiӝ"{[~l%\"e/r'b]mS<BFޞ^BX~PnsL6{g,PkP~^ty[1:t>T[/z$mzq3'* rr` Dkn6m/V^TR#dh' <^ IX+ vp)"By VV$y^N#d„ A~=_ ]v-K + `Bv ^aX+_4jHyUv;8¨Ν;QՃ# ۧl&;b ˫hj(~-ab &:V0֣Bm[٭}`T96X󺏘|s^u&QϞ=~a eZx5X}\~ch#H%Ź3{ꩧʕ+'?ɓ'Izm&.g6ǩxNyck>@`Dl:<Ǡ_^ys9ҥK;G2ڡ2c|0vDKz i"0r(P2Aa@jY}=R]}A i{ͥ0I;۵-O,BuTBco ]o {su]ߞF\<&)@)TOBYigY2 ,5+Б $Iu)~X&o4+#]_&:/TP?Z8et, 4-*9Ѧw/c C%Bu> u'%,c^?þy=m۶UB}*T0`N4q=yR?:J, Rn d%Y]Y?CU(ȅv}Q>MDH4xplծ];?ه)w}[Mn+IT|c7:)WKWXVԅuLgRݥ^jz)!eꑴd,WP,riBs] 6oQO;ekև[rP)"qJY$+?y; =_AE8QV]hCxm?}Td`m>b;|p_>XQ:&xhתU+{uܬH(.^h#H%Ź3۲e 8.ӂ``&y^ODUNxN;C0>o>ٰaJ8g>k~~1X"8B11 i$0jhINNV hQ=D I,WKC>_lT%!@@B%77KVf*k6sOr\:\ɢjߴ|Dz9%zre%e-,ר$tѾVP]ۓc[_u\Vl3̑SZ\vMn :,"PGcp.0{.?^C`KItt96E ->e-&+V[ukF vp) C+2vXuID <$(!µϖ-[ V{Lj?歷ޒ+V\wYgIJJ-ڑN #y}$lrqK\v'$#jB}ٞL>#?3b} g|f{f7ۘOwjuǃk#];>Y_ofF^$X}EGR/8̸]t 2.iE"}f270skI}9$t鳌=;W.d/2dv.Zn{X; u.]%}McC8-?:u켎ŋK/Qd}M UT.,J-3>#?x7b}5y;3gxf;6ۘ/#x7K3o87dx),"f}wDѦH%L,Ksgz}3#f_h^'ØVq~XNJNN#VbdC3hev_{4u^yw"yFOzHHta;r)cs"]F(A;0%Tױ9+YCm +- pO|7-vXb7ſɫ~f{5_S*uש\AYם?w$G[J*$ ?wfh KĊ!tXO{>IVm&NXZO5ڙD ,1apG4-ĒtP=rv|ah~|{hG~^&;&msӦM5kL`OGf:2x g_4BD4Ԩ|XYpW! oBuM[>KP},A$91.JOJ |kܸj ˼̏BW}%26uzk cADmUb\{zf͏( c-5QvR`,GvpN[$co䑕\(z1|0[}A1a%"8Lbd&?gZƘcm87fYDYY9lw~ׯ_/{sTn'sөS'e̴~uc, &aI~fz.]ZM2Wp2tq;>B`ϢaeĈ ^ϴ3ۋڞsXnʕJF2E:';H^Sq5}`Pc^f3~i/^f 潈Y_~]{N0zy3K#[Mt/4ً/(6lE pYy=˄ݞc; Ey@zHH3f'Z5Eb5E^w4ke|ɲr8>$ivtLz,~?'ryҥKG^7?~%tNBl\lY;LA. a%`Bo4mT7on[wEvp[$co²N(z1 DhhCp=1ޅ ®3bp?{JBPfYDYY9lwiyb,жm[9(߽c!&*#?8+]@P@ȷfY`Xsϕ:À*Yl6'}}1+XB`t+ٶ}Fzo̸̬o1N>+yz3z_nafޡnd6hދɘ(`I⼙,YD f{ 0@<\3>W$xK/YͶV c,w.}Ng{hi@5XÈE9 #0ܚo/Ѣz0Z'|uٺÎ] =]VðЭ[E!TE(v/L)TPoT\:=n6Uv"SHfry*vZsg {\ ~ gHPugIH Xl{@rJzEz|λvrSOXD*f\츶ukRgh9MNBh{B&P =0_A^2Y~GjfA >dGg21$w:7qӤI0g\c:PW>*UJtw!L?Kdf H SU_r5\Zѷ=ʢ0nSNx0:Kwf?K:꘠rpe\3e?PXJ3t, Np;zh?  ]"`ZMve#̶f/Beq޼yjCX^.~b 硇"Mz,~?-C_nA LGwŋUf<{k7Oaӂ,ςP~Sc  t8rѴff9ù>Z3~(z1j> +;＀v*ժ"믿,vmrE3VT}}ؚekkY9lwfʕ+Ihg:M_s]"EԄ#fy#Mt!C(Q01A53}[Zy輰 gdPf cǎŮr*J>cq0@^}ì5}$y^e ]L ްތ{Wv,{~9Ѧ^bq\ݰ"kvaXgϒ%Kh>sgB#:b|{4M4~zb9vճ?lwfff^c~pO d&cr),ӢzhteC*n;jP<١w8]Qdo>QM_Ho pm|[9QXvNcҺ[r̲W\iy{P dRb ٶgubu' S-Te¥>% RX؞oM7lXbrP4%d` OP=sLz8R͆!^dԹi&]za^;pStcWbV^=eO:^›L p=zPc&$$ DۗW_)s.$+z t㌇cOX`i:v"Dh.LZn}4>¢# \ G˴iBXQ.]{=&q?ZlԨQ?*o=yG^BX~PnsLb~tW^yE_jJ5jdGLYR1ϣدRtnD׉s,MA9tI~חBXK;Fo_s1F;ݸqd…~`uwp)➪ y_Yuymcѿモ &'aBIk':f' 0r:9Ryc9ʑf*CZyu=ftZ$P>}UW]m˟4i"]wmeL'6s<xfc r}qfWL@bKydhߋ՗wω6=I2s<C : ]f8p26?`!hT&LX Ց'ZmgËճW; ޯ=z>8O6'  SM` "e2ԑzCz>] ~CX;R$1A"t7?)i'fB/;Zde6oa.q_jO8\}..m|ltiu}  R]Q8b9WBvrU~!_z$*f3w?7Lv.4Ѧ7>sO;zaʒ~K5BM&N:&&3;_|/`qV $ҢQXPt>ABuI /1cD_| c p.O9BuP-@Jv!TVuqlN&@]ͥiӦl@矗͛ӟ`1 utGf͚ k ̰^3>Z(P@+q ,0FN VrP=\9&1{eU\{Uho/_3d!1cu3]we[uEvtIf~(zs̱b Lj20}au>?{yXSu9+kvyjw&hw?8'.̣!Һ+={38&W] OS D20ۅ۽tO3  TڵK/}s!⃋L'6, eL?ǧBVJiѢEpѢEo0\12~0س_{W_sW45Ŵ$@$@$p* F,1G=I̟>;|'lڦ ڋcS!=KLp sc>®rw4Dnitno„2I5.dxoFv2m?e U~Ȳھco S+[}ڭ;ǫYIedчܒ !p*O~w%JWÖ}x~GR>~az "9W21Ѧw-lZbBLh  C%#^$߲emETd&TN¡*B?n6lPnFعc3 py{gאC>QC$۴I_f |Сj }nbb"8X$0 (_>3g=O>aH⩢E *E~-Rd35$vF'vNp/:NycP}ƍjv!0ch5Ǧnybb_NXEN8]'X.mNjYNC:wl;r t?Nx_?ڊӽzR7ùDzO u,olk9ϫۚ}?ۿ|^?1+N` 83Y7*cfeϞtIH10Fd"aZP<>5YX{٥}+`,w$c,1}2ٶcğ>#?>#_~ Ubzʌ1gMfl<{~ΝUGD8RRRw}NYѾ1lMK,ΛYT ̎I+VLjԨ0>nZ3>~&qBu-|̭b|4 ,`#a .;%KTų{loGggj单P=V$ &02B&ZT!bVSN`stZrYykr/Z ԰썔@Vg_wRqR rygr+.ʖT 4Kg!ծ"vSVnjl ?S)Tǽ$UT8iHy,\nu.ZŲʚTևHJ[#oLLzL#ءP=h.I(TwBH%cL`uo?UM&^Bu̱dLq?mϺadɒ% U{Uf}Ax-2vXׯ-2?f ByH# Ģ/U`ܮ¡3Ϝ.:>`aΏi|  馛Y,͞=[QOV! A{)H>[3O?zG~ncs 0#F?!o߾b}01t " =p߸s,,*^}UF[/j_߆%],{u })MS"qcyxvjտv+N4ζI<#{Ww0!/Tp1s"knJfv^!d .8i\l[ncWvkLFf5g^q2mY^OF`B x0oFqͼ3_,ދDѦ9#X7fpU"qцb̦ϧ qP]:B t%x{t>˘мg=ۛܶf-H(Tӑ nX5ec2DO .]|h][]%M/F]'_k|HF:iCBu䉼.zܷ} ^)IE#Tɟʗ?8MKDp$55֫.ۮ U~Ti8tN[X%`LuN, Ouh)UIf' 'z}yRjҾ+iB {࠴nO3=&3'&]sa-*-&g}szJ.( ϯ&g+e^|JYe{@PѦ<À5G$"%tYz"%a4,ʤ<'|,VTI6B5^j2> 4HEPt8<,b ݜSx;>B *mVx evұcG;[ii.;BXOG$E_bĺuVֵ "Ϻu%q簒GnݺyF7L0w\:uvkfQ B1ip4h VOe~Z'F*턄;;Y gZuLBfr㈏v v-"<۞4ңG׏;v#&:H?H KvR4nX-c8ڃ=L\YB6, kdbvepۚyF[/fW &n͘1C-Zdvt!No֬Y@;ᡜ?{JT]97ꌛ]ڝz#b,RD DF cOҚe53[߱c6bWyAj-6T~533o>g;'>1F..P̶󄙇s?3H&#ψylϜal&`4H7d@IDAThп [iݺL7ۼ3,3⽈Y_k eLmz3zyכYw%c" ʋwh͛7Mτ89]ںxn6mW>q?Ļ-[FitYln}߳YV羳߉t|7c գǴ$@$@HPzDcҤsdk|-.@6g~#|&-W^ A|#V(]BvK83ғ>_VmIm7Hݪ)8:2p~Ol *S?^\Dz0 $T:]r!~:hrAMU#%wHHceړ+| VJ[tOﴯ|bnT_nozoJXG뙡r&&'{wR+zLzڼ5}jŐe6pP=' B B 1 @QfrrD 3 ="U,l 2IQYlH7lؠ?ٰQ"&[ʞ={K.]Wɘ0j}+»7 fXOzqzKy0}ǣґ d$wU0;&Aa%&2ё@v$Lx_u5 ֻok_dI0=[ ճۯC$@ٗ0hƃk =7'١5R7n;+7)n fX}ٲX|V9bޖhojw:uv|7ٶgΙK ˟{vҤY~B2.yeV#q.mPH!Uܛ-Vl'J;kV;풡ӿ?6mSB~zHM.]\ZgkonIH vIM;RΙO/Fj} So'v yZd΢e^~.MΖBphyǥPݛ CHHHHH]XYuX5&$@$@$@$p ps 3  - c˓ :#F)˚Mc3oض[-SXa)̰|rYKʕ@@TϋVTކ= xAuo9m n@@@@{06@{d`  n:  L3o#w3Z  =}_nsb?    'TY`  ,\Pbbb$$$D1  ͙8  $@PݓfGz~h    n| X`GDDHzz:AB@|G9sMPGzA@{l0TϏm@@@@-@P@ zllIFFAB@|G9sMPGzA@{l0TϏm@@@@-@P@ :30ڥn##-qD@"@P=/ZA4Y+}hz5j#ҌNGeNY/}ͭ[l\ak/MAoݺK/LjԈmo7{}c?^RR/JZեflϖma㽟ݦ?Gm./Z!UjT{_QT/ uΉg ?AA1@@@2 T[@X`Ĉ SQc! ' T7g6 OL?,UDKrܧ ?^q_|~͵I?~Jn1OӤ}?_#;h$ ֱ]رӶtS}ᆫ}ٰ)V_֭&W\Q]ڵMJ囥ao5j;w>ϣh:iРn7g·X4 sf7P ?>_)S9K.kIMr=ޕ jS: MN<и cp+AE{bt)cL@R8/rh լjkJ\8o>R :Guk@wDlώ'||¥r5W町M&Ҷckd7[?g/߼#!}9} ٺo}Ȩ)#us:PT/T^:Gcv'oKuG$44XXƼ;n   }wr@TP=!!A,*{ 2^@pAus kl߾W6Ux37ʒ%~aa_XA>X%;vҥKHf̙D]u۷ttwGOXwڽ}ҳg+~i 0^-*$=~TEirlރuCa_g'N|פI7ToѢevǻ6moT2e2X_`V^=_S]ɦeUyLmPDFvW {\WOh׹tHǺz@Z˹\=vܣ{}A;=)[ܪԑRA #@Wyl2th/llC@@@^ **/ZH*Wl @!Ÿ@@c3ͫ޷(Yf},[6ʜ ^6nf'ˮ]r31ǎqGکѣqxect98s jkuuupd׍?\k;A! 0;/\H3BngPU2]64Ls6T .&/ziK{:"u#kn9MH%KW'Ay>*.SӅ dϮ~۶5f!ٮzTY\rR9.k(-񍍬MjvP};dŒ$ZMhy n"] E=]O&R7ju~*OJa;#Q km*   .@PRa4Ӎ'/4a _sU  @! T7:AuW>Tpzʔwl okuAuWV3zc(g'W_lq$cU;eD_m=)ᆫ=rMTyeBP={}#c^/Urvy@Qk_QKx3 SeѲRFNz5q`Tը^a֟~M)# @^UT?r4ksu:uU7. 44بw~{vuU{䥲c^[;Vի4mzqG_YP=55Mޗ+VYKUu ^uU yGdp[Z { u5o ZX?&&-\oY?ھOkި5Ԗ!CzjoPג*_6UM5z%%n߾WkEi+zmuE7n\WƏ`屯 OS5*d|+aTb#śyVAJkAͫu./=tqCMWW_MO>A~]Q7X(~ku'MZ"s|+o^ (AuuK,YU] 7Y&3+gμU`{Qi^ p7[E{=z[˲d>/LZ,/^!ǎ/Q2Bn\:`Ko&`RliIZ>]&(kW,G[o㯻y2BօUW.}O:r㢞ޔy9sw9r~z     @Pf1 &.^X"IAsc?  yiACق*G;VnAT'G;Q >ћ2Ϟ=/=z"7o&N|FWvW;ijacobb"wFYߊ bw6LN8mf3fls_mUTW۶}NwX {4ϗ*g}%ҡC3c nC[Y-i*=mڋ7N ֭gWt|glݻtrnײAU319 ~„2oRx|tw^8 7]\y[ kxu5\ :yJj_QKxvA^c_/n *l25B^M4.y|`_}0} Y:o=r '|K>|#M[%Oö F0##W6RV}~J+ɴE%V^V蛌Օ~$)Q"E?NVUcK6"   n| XpEBt (. r8ㇾ㣬=p=$L'խW7@*T(-?Q-Tv>w?|gi롢#C )#t/)M\%!耺g]2U}zwFunסqU~/\=ү_rXΟ O6YZ<ꍪߵP=vU ^p7B6s{Ft*oTt,KG}!Aaæshѫݺzo1W,T3iU6- TWeӱc3y≋a<33TЭpQ7_ s~?d׮}}u7nAAs\R㧌FOU2T={3; =@w xzP}3#dW5GR)bi\ o۲Mzg;QOROnnH\jQ ٵc;   )@P0u@,߉TPrF~&\wKP,]A@V\qiP:}ַCz>М4} :HCu:̠ jQa?|N:uL[٨hP .nkB} Q#֨<ܶO;J֬`biTXEz5Xz.j^>t+&?A;IvufͮC{ԍ ?>JUx;1 S uTonLޖm,n=yn;<5샥[&ij5J T߿ {fl>1 M9N\ >xX7{X7)3*p*.ry '>CVʼdT?r1Ύa`LCBBClUuvGER[etznG~MR1Nٛ"~(Ξi;T/25v%êeHa å~j[vC ]//v$W3gWt^:<&Ӑ۟dCᣍ.7Ƶ\˄cFYc-uWLջ -p}ӧ7kd{ W/hIfbA@@@ p~@WTP=>>^BBBtnz.r#f!}DΜOGIp(QP)\VZBң{wJ _4-q{@*0sDs_sF wf֛)ddr[Jxۚz?_~ys+h{g'$L%<9~Wz;?*ݺ )͛7sˍ7xv߿Ӷۜ꪿oOɉu@zܸ:D:$}NAuUInz<*8ۧN6lt9p)SRV4¬pc^恇zAWBWs,/2Qo!m)KEzlA˗)QQ峌w1ۭyfuWP:˘2oPa"oѨ&Ξ`CԡBj~u 2@eYƓ Uu믧~-=AuglDfRr%yl@/5~zNT@}wI׾Hxц9}N'-7-bc2oZc/O Tq#,<|MsT0/Q_~C\-_V?wTϬ{.]%,nbTW~S%)i9Y   E(@P95 d`TwE,!܎.*/=RWWOY{L0@='},_vqs^^JgAw6fT͓{.]Z8(owSO 1TN~.r}79mk~iYPo~yV-*Tb [TWգU,q6y!mN_gϪOzl㉽͇/\|s>Hj1z kF>x@QՃCzRm7} >58P7A*RşSݖ.s(^!84w%S2F@=ˡLLųwKX(%"+AuT8]U44oLhyz5/t. 'S6"p <Ÿ>o얷Z"gwS$<<$Cَ   !P ))Ibzhh~0sKP]u(oVJGϥg&g΂x;rywۤ}~V 4/h{gc&L% ?@$^=V:Aÿ,#:&͚={nkuڗ}YPJ˖ΟZ{iHAiޕӗΩ1GFiDDYn)~ҵ0Rvm~Ex+V,kTT/!G?}Iշl);ҁc0WAsW3gcoBPmT[m|-̠za~FP=SDM-Avn,OHp 7Oײ~n$I-mOP*̫ uPď7adgwh7AW_z ޻kQiRB9mZDQނ+mbVP]Ue0߸]Wd?kԮqA6%jJn3!$&.ֿɷNOrᥗ&˧Or6v!  \/ݹ@KM`9RR%)Qd 2Ù#zZQlOv7߷TӺ<ѶڠmT/R~N]A_:,CgpU"d MAml՝}YA޽_ޤ_|1YrnײeQUKO>I >~Wzٯr )͛7l^Z!uob[W U3Bli:>|xoj0y;cmTWc^n[ȣ}x뇼TTWʼX1QRK\lUn>ѣKm= w ̬WU)]}uj_5>h>~iܸ9r,[:qmOP)7=Pz#jVĹW=־e8 P!ϟ7wKXxX^؜7W>:$u} ӕdTKX-*?~F*FEʬfqzgUa~`C$DL=N*UodgO# f.2~wY*ŋ'n.V@ +V^ 3ޡˢnˌ' y7@@@(EI@!4ky0*gTmT|~f_+nmHPm{c.OGʉTxqX&D]NB,׍llluB?'F嗲%V|I^9PznAF;ێWcji{پlsBNK W1\*K@cy P `-E}9NB*DyUzsvAJ{TFʄ Y st͠] g=~#PK`a|?rWKǟiǏojruMRNAuudɜ\mn#ݟjyU'Տ>*]Zu  FPtOe0cPG=jĄN+7tnE8,7v@\ /  ߓ)Ud\֙]PvRnMf9Tϑ `mq eĈDz^_T[u*Z2UMRcWfCzn}s^)_s]jPjGtn>pe!ۮ Ǹ3^Xg_'># f*u&DUPoѢR7^KwJꩇlʿ78 '0)'dڴ˫8OJZa<|)n|Wq=aATEyDU,`;+>Av]Nmm6*u[)̝[PSnr 4~O_2U"*˹WIreW[S3f^s*ji޺<1oC};r%?FVy%cуߒ~u75ֻ[xEAm<+{g,j%W7vlݺKo4yiРm?+   A y$FEp*JP׿ːդ 1/blöoT`v5zv:vN8za{7U"^WK]eReȌdnT%l€丟dG@b~2rev[YE(,{5*fǵOIdxT짽i"O_Kn_Q{G}CU 1-gө2 q5l (&˿Oݙm윮l#RǘTWgGD+&5j}[:WAT^-j[6M7՗2fFYSٵ+E2*w4uA\Uĉ:ޡC3G?WsXO:#}߾q㺺\/&-/Xf 5G_:fW0d pwnzl;ߣþ+3ߓ~ۢ>ٳ\JP]ͷ^d t=oDfvС )'>lh6/_J6T_oIrJ]%Z}ϙ3TTsR9s`C@/>] ӣKd ?eki՗ۆsNٮ~Ig8n%:te:o xc֫G꠺oSrǽΫm-Ϟ9GgW%eA+ա̕3V5jא43棎ݵWVZ>zwޗ`Gg 5~ymog>Gu!ڗlY4kZFE2d%z]~0K-Os"z j$Cڵw-+,i2:\zc7    >k΄ TITTh*iT&oۤU8'm˄ț}KD+#oH\[B*˟;ɶ*bRfY}[ȮX*\mT=oUHs/O(%{\%8 7wǨ*'?\nc2p/a8e!׋UU;׵  @ >S&z. Jt>hn#)@IDAT?qYm}NAuWd'(,T?|b 7ougxY*Tpg#V@@@(DꅈK  ̙3GÌg__M=M;KIT'sZsZt yZRGU詋G[֐fF0Ϻ`ַR#>\[m_%#?klU9+O_+^9˕R2?; `+\!FкoyַVRR}0Zt%v[V@ E)JQ?H&u+ȳ,U1w8-Q_WEJ?)˟ۏS,7A4nD)[bp8--C^>^>JP=?jYۘT¨>lĺ]Kf_Rś՟}ԩSϗu.`Z$}6kttUaݺ-[Rzn+7\_n19sEv19cYSٿrڦQ֮('+ˮ^=3K%?_#K|.jollE [dʔe/FcEU}~RWcNI9,O>hTo׭6m.: obW_?۩*Wں3FٛnzTltWt~u# DiTn! ? [2isF7Cԍ&u.Ͷ6*b.74 ڷKx ke{5Zqq[qq'16R*Ϲ{q{@Fl@TP]-l&^(_9ݟ:,Nݟ̟~>lЮ*g|2zX~z2b jÊ%fHxp2fԨU=nGo6rҫr5W:췾IKK?*ݣ7|-BZ rgΜ7ޯ?yNv{W՘/},Gj֥XbF*G^7+Uun+]^>kZ~,_,ϑu?2x ΌwޖK$2R 6~_[;^SSSedxJtPұG{ j)@PliYrdOt ΊYz_.}t>}{ًn\̫\¥"  xAu.3%..N¨gB^,'ԯ(սXqö_mZ?`'ƮOێuRD4m'KޫUv?m6JTTo{^iyjv/fkVM}ݶ)5e;@B8p*E8j_ʇEBr*|4NRV>!AŌJM$$!F=r9jfzA: A|9iRAuuuƍd߾CF$˗/bg ZfTVAmoջN<#{.U#F`*+ƣ*.j3}uvsuMYBX:`cAlo<;u{HTPLR\IwB}5ǎuCJr8]0KTWݾSvq9RW7]t>U\ڋbQU% h.RT׮~:~v;J*4igA9fTeWA *7L]ÌT7C>N;U*UDK||%F   p T䧘 D.9sꡡSQ=TWAsrcT={!ͺIhQ]^"xG8՛ K6?m{^=__kY7Yyg}Ps\vT݅TwY.@6  @Alb,@P݃'!   (XApY$6&("ŌQs0z2-TDˤeTO'Fb*ɲv:T0C1cWuqrK_t}XldL|Zk۫C;"eFLPʅfެO_UV|}jcxHڠtnVd"-;@7 \;Qau%wm|VINP؄ \{mg/ku@@@@ {$1D@-03)I$$8XY[PÒyc}+=[ԐW+3>TU;jWKnWvuegdۭoW5CWCdslXWR2_KmT1O4*};T ㆃϛKXhguF9#Xς PT˸15{\зk,J[*?;ټEò>!AWQچzV  ս}?Au>@@@@A7cDPfϖzxxQQ=O W?yH^;Ua5eQml'Ud@UQv<Sh[ם)kl,+/?r~߆7^հwr|luB6l;*y;|Y/6@T`<+ɩ'Ԋ+)N~VX'뷓KV[OP;Gs8zAz>253dҤ%zwH֭iļE@#e2z    J: "0g%/MA"eդ 1ki3GJeBdHHP1۶Gʓ z[`1;z}7ȷ(of헙F㝖0|7[Va=ס\W D?RA=4(@ʕ SF]/?l8`fo  @fP]q>?T'\fT4<" @>&%@Pݣ    d#@P=6#x@ҬY%3œFiy-9#؆tΨ2r|^]aϺL|Z owҺKԭ ZVe2fFs1F_@F[oW<_^\WVF3u)2a&s3 u /q>dɗ;l'2z[7~=,܃kz_q^T\mM-;> ]0Ò~7FR#D7bOKe{דFudkubSRmTO[;TϏZ6ճ@@@@@@MznBGT0zjZA&>۱eSX߻OKsm*ܭoS;˕ F|)K`\E-SuZQsNsi5^ߞ`ۖ]P]_C@^G>ZOe_+ŖA-)jَe@&;]"V4-o߼Tϫ ;wa+       At؇ I3$.6VX@A&'A/P#n OM^"\^|vU9}ʴ;4omTjaE$:sę 6-owWSee΋m٭g;\.Kme@/Mn,Wf~Uwxpśw&a2$иsɿǝ5aEܰޟ9^NOF. pAu8@@@@@@$@P=o@#\ .4]m[ kzh      +@Pw+GM@UT#aaajSQf" CNPGzA@@@@@@ [",03)Ib ͳ@@-a&n#       o Tj@o*GGKXx8սy"; O9q@@@@@@-5\- IfI||ˠ7&cG@T79      %@Pݷ曫EU ##C̝+QQQ"BP[gq# CMPGzA@@@@@@ ["*.̑X 6~~~սu27 O9q@@@@@@-5\- *-@Pݛ'# {LPGzA@@@@@@ [",03)I$007O$cG@ T7ǚ9      %@Pݷ曫EU ==]̝+DP['q# {MPGzA@@@@@@ [",0{ c JIIÉz  Aus杠9      %@Pݷ曫EU@EgϞ-ѕ+KXX :@&@Pj8       AuߚofII/FEu:սy2; G9'       !U"x JT'3  @ T79      %@Pݷ曫EU ==]Λ'111DP['q# {㝞@@@@@@!}jT@oH2*CCCϏ<@#@Pg8       AuߚofsHJDaTX0O=H˫'  o T7g H/       [}kZ@f͒ 7O$cG@ T7ǚ9      %@Pݷ曫EY`+AAAg\սy6; E9q@@@@@@-5\- 3$֨NEuoHƎ  n5Aus@@@@@@|Ko7Wx@FF̝7O$44:@+@Po8       Auߚof9szQQ===]z']PJJNdՓX@@73q@@@@@@-5\- 3fΔ8 ތ@@4/MWEPMМ@@@@@@.)tr1 %-h"<%= \ xAMA@@@@@@|So;WxuE)V ycF@HII'_5      AuߜwFdIHH`'Ș@@&n#       o Tj@oX`.iiiսy2; G9q@@@@@@-5\- -( 7O$cG@ T7ǚ9      %@Pݷ曫EY@UT!͓@@&n#       o Tj@o?$$$zjje']A0O Ƃ JO< n#       o Tj@oHNNx <@#@Pg8  $pد' g2܆    [9 @~.\(111"~~~ I;@5Aus@O IX#@P=?jA@@@pAuws>@ ,X@#""$==z~!i #@Pݜ&n#  I=i6K~G6     nq· _UQ=66V$##z~!i #@Pݜ&n#  I=i6K~G6     nq· _dT]ivV*}" @A zTh AKe&}:s    7 Tb o ,X@bbbDթ۟ \= (@PE\# @B^8i Ao@@@@z~-zv#ɋgآXTTᇢak9k7m:xqCx5 AV>sf/"Fztʒ# M[8%b'0QsĂB:t4w8{W>-xkвtinYs ,]޽}gnq\^VqD#ܢ;wFSo!T蜠<@ {JPrq2C.r6ZX3+ &Pݚ' }[f Tz׮c3>=Z52dEϠ[r \ٳaɓ% kW[[/Wcgg't9rN9H֮gu{O7oŊ>|ҥKE^^\`2ee T,#6Тl`'Gh\WY. dsps>a)} J˗oL;([6[mS'S? ~Bߦb)ȩäP^`$BuvnO*҇έ5jԵ_W,k:.?~4PFТ kPŔ*~P~ʔ՛~uZ;f pTD46Dn=LL j.'AiMĿ?phݺح ] T3@!$vB6qg^1h$eB9W g\/_v<" iOqԷK$oo7YV=~L _#$Gi]unF^~Ku=cyfVP=,:ˋ :2MpѣIvZuz|hCMګWoRg+R$7MkrH<Η&j_SӦUe^"iE&A+T)ڿ-Z0T3'9I O>y猥o *E27Tl=Y[wdKYZnL1z3A 6 9B3TE;>zEno)qDz8J6&c>   `.Z,[LyC9MBu̿Y{=bmW49Y=zJ<BWTbgY_~<9Rm<;wϟŘҒ6۪Ŋ̙ݩf^+b:}ÇhذNXu GL?PTS"w>RN[^R߽{/~yt%v4'X:۳3Yr>ThsN H.=nOtMsbʔIA{s#yzfb&ηP=$XD>|*߯ӧО_~6iiUPDmVܜ1G?Е+[x|˅"R%#_DA5m:ՔP}tΝ3JzdȐFާ̩ ޿(w9k*"!8|댝-XP9nחΜBn%Qw+8 -ܹ4} :t6YnmߥK}1,zpBuv<<GT>jpA-m>J:+c|F6mZY+ʂr:Jc:[c""T8|2m]X32-k:8oYƎ,usK+܍QʔIe5P}йa>97K$//WbݻHWmʕI8tˎf["T>7Z̑K.r8͚UFТ:Pw%hf=|D;;u#OumXP@0e)*_Ǎ[( gNo)._%О=Ge9a(>V3LDfZ%|n֭z#hߚy!ʸ_*ujUBgH(X g-Es&FUT<;7=h2Ѹ9c)\!"Bu~МEj6d'"4N K*h5͞[8lҥ itnPm^:ܜ P]9.Cf%A7ܠYuA[Bu^A ]s6m[>=y&A{!XKv22@@@@@@@ @ P$@`X8!Th@@bȭz'/:UE/ #zx*mBu \õkwe!i!9Βbg:[׮ Pǯ'N\ͣ ,~rN8r>Rj=R(p0NV;:>|Fl^Uӕ"AډJ)Y]Gmk ztAR@ZJ 2CCbf\/P-Xu $nT *BӴi}Y>Wf/z%*S+Y]YdF nٿQӦbg^\Ҳ ΋v)\A+T/_0 9 uz`J"^гڿ,c(>&~vժe.sۆc]tnvnwYT|g2}k*Bu;;;1ݩL}gj 4}ry3ӷgr|(kV yWH{̦DʺO΂Y6vll0_%#T?o2++G~ʁ9 q ,Y2AB-t~^+͛meFvrذy^UBsD%+^Usa&6vd5g]0"?F\OHJ 1G(Ti.wMOSL3M26?P}Llu n0? ~*ٌ>E&!0rJVgw_ZWoEBZgꌮXUsܧ6GUw4d .*^D@ hz\˟ϋ09^5˖_, )i@@ *BBBrc'988@޾©]UR-BBjm;|Z,_{Vg%w~~^rOIzi|_qKFQo4kcUvtZ`3CÆJn,L,$ k l9X:zڴ_ͪqEYd~8nm I[3|fHv<,Yl(Ѳ5ţ"TgA~Ŋ߅<,VBt]gh1ΟFydJ7^[.E2ɸV4ص0q&=;,TM.61wz}VOқx Xj%R ѨQ_ŴPݘ;PԮ[vGB<_YX3AgM:͏{ Wx;w&M"TgWY ,xwe|?<7-Gmz|h'#G 1#:?οn^aL7o)IErŮC+rʔh¡6mJmUǶP=yĢd%ܿx._BߒvbGLJV)WPH” ߽OgNwoG) =FQ-|»p0g.A@@@@@@ @]d. ,ZHz%˒V}'/ յ!C*hT\!rnkCOh z}}(}*}05gNw_[Ժd4KܸfMޢUrnubui4 BucT"fBJ Qa'W,hFh>xp{ \޽{Oev  ͌ ns{7o>Nϯh݅'MZ$E~z",~,YvRh߆+O(xݲe2֐Q:;27n?17\؉y|(Νj֬0X-5-mϘR,X'ӕk1:3f>zP)[V * gss W~E$i ;c8;SҤΆE"P}e|c vm؛Eq[|U\\|/Bxftν;PE+jvVV%WUZwmE.I]*]ZQVƟA)GsA.!ح~ݳPUeyEPȰfJW0fknJ65m R1]FU9yQ*      1MB&D%Kwnb&SIrc/  S-kX\8=w-Vl//ꫭ2e1]@v?s׿5%JV~E ĴPo>Z:)yTQG:MBu (DYbJU Zo&?RM̙+Y.U[egLW޾'^x`P}@AG@;hv0v~,@ٷ|J,,fP]P}p}?$ UQ"TgmbImDB{@´i) @@qΙTY@LP=H<  Q%Ꞟo.pT7­i-Nɒ8Q(w&wWąt]r`Y}[x|qU8[_(| *Q,#@I:9h%^,F5B7iՍQx 'vΖ͓tNafBx@9x_uNZbNf_cBu8Ѱ۷RڽeP] SI\vS>|ڜ"V>}ZܹJ {3dH-Փ ݠfJrjhРvp#زkt գ:P=$ ˔ 4Au!DLR' M6Izm۪P{qbͿ{g}K.(vi6C˗M͢adZͩA;DP]9/yHB .Bu0?gq%={Rol;yroz R#sb>Fz"pN-־{.QБ&]jN/*PiMRBuv>i(*QSwHGAً|GM4@!@(ʳ XmA}Xߑ      w @w#F`-#Q=pLI=]dT\a摁^~C%v\Z =V(\, TE q@L Տ]NCу-MeD B7UՍQx:GK395{r:%k*;V;xp{Z$صlҭQJԳgSu1]q9h,&X}a:,=1cf~G#}+W#x5cǺ [Guf$`71Ը<&vNđҤIa-Z&MҹΘџ i5dĔP=:?|(={RyOuΚ;vLJyfc=;s/V1z(DU'6iii͚\kwTWgd6[*%Ty:}BL, ׆\ƌ B9szkO)!bu^+/ں ^KFºC0wi3]xB L;Ft+ F<ֵۉ/Γہ "0U6,:יLZl޲S jܺ,nP=pBZ4w<ߊ%q~B:LғjqTҷ3|.O̅L"׌j;JĔP=`F -T|'{W;@+)qEϼXP/x'Yg@@@@@@@ @qBH "///wR8j.IhR@8p]l==x\-S4*.ׄP`!CҐkLJjDEbƪcغ[dB+~_?'Zl =|yjϢ-b^Sz]rNѾp|5]۾ky#[ygܢK/^8ԤNB(['r;:sL*y}:uC !$8w>й:;&<;G[!b9z!~ !#>7/R@k&Bqо}ޞNhh&?7t)}bZt)=mJpb<6Bu--%T9O4wˎ]#?oi{u4ϛ7PBuwbPb\X+T^heͪ{PvjڈiZ޽Dž]"wFd)GuW|vxê+KSCs]-QU^ hʕcX hɒm2ۚCL ՙAt]gs7H.\sd=|v\.E2ɸ9B;SdIzQd\=,7播-k a6kE> QE,)T7u_ᓕ*V5Bݺ5Rϯ+JԠNt esjrsT~i͛W GP[,=n|!" ;רѓވߡg YD$< II`Y+*L{.NǦrqWKЀY7a \ץZ[HxBOɧv[buoʧLezQTT;fPC4nǕSu:(3-kTb)mTk]Io9kg˺Yh6&"Z珧\y_ 0 :m;\fCQ1sb=tcծ]N<* u@@ ؄kٲe.'!T#lv}8zHڔ/ѪN^q7yfAk,~Or灚xOM'?_I[L/]EvMzgk4Ч&q|5 F 'F̧ڡf kWegqGY61&7p>=r 9ru+J[Q%QO\Ӊ g9BYY'/ݠ K0OD&n7Vi  `Im^D Srtzi|wyjn2@ csasǏğw~,A=k)D2Yp7b;],¼(CriUvtPD~HP HfPUCr׷/,Di4]vGݜ4 9I ϑkb 9 8l9 ,d68q:w-]9]+T׊6ϵP_&y6M>|.KG@@@@@@bIKJ4_H]֚`YkwC.'+@a1 7!\nG\u~[._R/tn@R'/. j >V#fgvm}J=xm'}{&\֕`(T,~ X![:ޡPIlFlѭ #ˀLXEkkϓ)#G ps8WT%s3Rڽ~%*_(u(*JBVچ_ ooߥtWL BԔ.Ur6GsfM'ZXJӊēgM+ `V.%/ 1bvS#ũ2A0s: ˕+DӧÇJ'[9C̈́] s,bg$YLXT!tO '-\VXЕE,d:-+kfhرr|_l!C~: Xݦ0z$rZI}3]rX|?Z:y?|۶}ʩ:7Ceۄ;vRʹ~Ģ,bנ'bWӧ/ 7LŢ`'k1)TL+T +TPD ]:{]SX0t60p`[!.6kP k]s${Uʕ۴yߴsMXM #2sJ\'Kpuꔧs-SGT~VpzΜޖw_EVu߇7pT w1  bQx[GxBupf~^"[T Im5:8zTK'<~Za\ݺ}wa;h?ct9NER S,T8l2m]MXԢcsJΞ:GSG҃{e޸c)OoԮݸz73 VDs WIA4V*CGQ5?Z 9Ty9BoJkooO3WݰKչNx=wvV6VX֥X>/67oo lK͹DEk-=+&L;zx1 |s -^PPNի9mmu!Ç܌ Be b,T~LuL/\Ӵ6VZuڴRMWԁ9Bb|ۺP~3["+Sltzչ†wtYH4l]mK\:.*0leH+8M5s[>-ގMBP/ :s[!082q0=fȐ9bRGa|^3?/Kgg"        TFh@@Guggg#;~{Z7Ycs#ESNم藆?B[@ooiC Ls fgm%2,޾.̠a='gTzB,.h zZmT>l,ڠofۭf}Bƪk'/ bAԤB91zɧZiULSđ|.E2Gɢ2`}! +7mZUm4L^M'!@La?}ϳ!g#ݮ" sP!1[cJ-QQ6ꑀf%J~~K뵒ίNN18ٔXhB}[H yk.]s;ڰI-vaa :S:s" /Fb %_^X8cJ,|ƪW._=y+hЩS U-mkj޼*@E]޽tkԢ p,R8qt/!U+O?XQM- s pQ޼y# ӐZunaXD=>]LVm]$H@#v>w >Ut1oв0k=[s?']E}.Zr%O g(]O| f5[]I~85kDϡyQ/H:%-޲P:iڲfy>?+O@yǔYeԼL@@@@@@@@nME`ѢE{Q/$ ;=됭&Xlмժ+ң)y '}-7ɦӉK?N ƃfRF2UR2Е!ܧjiU[%Q]&,Pw2o-aGSЕtPw!6M5oTM=Σgi?մJ.u*cCz,4T8 Qa^85<>/l9_bY=:7Fi Wi֡z(mk:s0\K|V\}8;iEM^RQ-9Oȱ5=DV6:<rUkrʤM&*\ K^oir#5 Bb7vcvK2d9vf#MyLDX7kp c0 SE5석%KPb6{k^zCw>OJ,M&yޗMě7퇢M7eH17^Bb+aKs_x|wqI"X=6sMn=xaEBb~F;g/Bɘ1}^F;d$QstC}ݻw9{f-] c#뺽=%ϯbk>|1=9g'vRgѸBt4-O-Immg^%L 漽]mk-@!zj @l@PPeʔIhvp1cn/%MyǑ<b3Wu!z)~%.^VPY+68k^*.{ 焥[v5O%Bm'ܱBvҐC"bٰ.fWcbtCz*q@SB0N\ŗR8 y7L_4w @@ um1xn~~}|0 '97eywc0; }YZ~oŚo>YzboԶNۏdzPTs+.ܸK&C;yCit5]+Tj}ȼBj@ R@@&7oҔ)Kiժ]Yz=5MCPݦ Te        `  TYBA@;{xx@npC1E7wvt ~S|Rs+KjWk!Bu,h9|zN7Q9)ũaջh!N%{ )bz>#R ZzT$G&TM!Rb7oV=G2DS zݻ'w9EXDn!ζ:TE        LBhA@,F`ѢE)S&)T# g/^;e6!Xt/vV4s}J BB>KWOM\43OZV"B0x#j\SD 1;u0F1"  `-Sys^Q_~+sOgi)m=t!>'8<< գZ_8?$Èj&Tu ǁICP=_>mdM "ooortt B59l^reUKQF'&D73׾:Ȳ8 5{ߦ}j5KK>JKoj1ziK{j6?!vֺwD}ujZpn/"nYIvOBdpb?2]ɑ2N.Ѓ݇J8}F/ܠ%o-S~)$HS Nޔ2}Bun3 KN}T&e0PZW)T귖^&G; #sWdN (+]uz.i89.[R!V{V"P=ЌTP$@8 TA@@@@g(vvfpT7cjer)^U J:^A@ A^'I>'EkO_&(s\շUiªNϳ\ܷ9)[Zz;yy׮VQx T0Bd d#BuwwJ4)}5fL;0P"n MTx~%I`R819$NH,`L~m0gЕ͖]m[4d=QpW*T*_6%I8}Wl$J&nRX?qV%BuNd>]AtYN/RBun4 v=K3V p@R<Ա,T01&WޫAz]()\/-ku4;jc0ϔ[#ގ%L@>~~3ӥODXRb(Tj}'5#Bu3 QBu3 PA@;g gggbm͜*i 08T-D#l*%)[|o}<=yJ*ehCt5{P(ݠMN ǐOˍFw.ݤkwYX](75T]ixE7?JqgkvEGKy2gT9…[Σ焋4ɓ+_rxlVS5ɢk#笢o$)hFl,u{[فSsK:9@@ <{@|FHh@EG箦nv|{6'/;r%[n dgFW4P 3mr~ ⯕#:ETjЌ̀dF̀"              `@Bu 8ZP; z$Gt?bY ^j7_oGJᒄ\ '(ɒ^O ϔ4#O̤ 8 ەI^I%Ҍ--M X)<}N/qTɜNdmط/^Sb8c&i!  `>7ދ0=I'2(9e, @@@@@@@@@@@@@LPXvTww'g8[fXNu`^ }mN).?s8}IW.e2է|""   ` T̤Anh@@@@@@@@@@@@@ ~P=~7F  LߟAg Gu[M Й4rZL`oOWyU@@@ @nP2 @"zo@lϟ)prss#'''J(An v4mG߽7zd.ԷiUj 2@@@ P23 e8EB5-*  $/OOrBu;;;mu2ߏtA0t)kPoJ1NvA@@* @niP2 @"zo@l ё&L-O&   3 T g-/ǯhA@ L2QD TDA@@ba e8EB5-* \<==Bu[H@@@ f @n[#Z_ T_т- $wwwrrr";;;,5 B0k @@@ 2V@@@@@@@@@@@@@|c  `X@3:7@P2!T G             @[&0Ϗ)pTpTDA@@b e8EB5-2{zzCn˓ -BupD+             k1ZU!!!`B mu"o%ex+-ZA }c%Q=I$dggGuQ @@@ (k5 Ǩ              5-2@ruudɒgnYk"`‡5   O,3oLCh@@@@@@@@@@@@@9ƣb  Lߟ<<<<;@P2!T G             @[&@@vb pTDA@@b e8EB5-2~~)]\\n-BupD+             k1ZU? %I:7@P2!T G             @[&(Q=$$z5 B0k @@@ 2V@@@@@@@@@@@@@|c  `͟O^^^ Gu[H@@@ @n[#Z_ T_т-\@:'In˓ -BupD+             k1Ze~ANNz }ҧO7CP=@4             qqj:199:qz18 P=j@!T? TQ- B>}^G)R"_@@@ xQ\գA@@@@@@@@@@@@'c  `͍$IB-^^3M[f^!T G             @[&/եP<;@P2!T G             @[&Bu///r?}Pݖ'}[3V@@@@@@@@@@@@@|c  `'9::R !TDA@@b e8EB5-2rϘBu[L@@@ f@n[#Z_ T_т-g;%MBBB TDA@@b e8Vr(d3;whՖX*8~ؾ8^ L~7@IDAT ,\         yGj,vTAgc?   ` T̬Anq[;ƶΖXk6alYE @@@T(P=JEe[;ƶΖXŋ7a, 2YلXqwpϲA@@@@@@@@V?E N..pTU   PJᗁP=|F-c[lgKu0:džmG3WSܳb{p~[&- 񋀟?y{{8c    z$(H#`Kb+IƁE uh1%N]wG!ǡP@@ 3.X@nnnD%"ch   !e8Bnq[;ƶΖXk6alYytAkwfr`3(]zwƘЌ2rTJTi]iӥUBN djzyQ lGu/Wn>yX?_>z8}q(h DfoɮmMO' TOȋu u]%VgU+J#i @@@ >@ iPٳ%88X<<<'  UΕAul7$0?AT&í[6_{ȣOU ;E߫ Wͺ7:j9}ʏKWv@yamcXc#g|9lM:.LE|-ֺTC@=mG-rWK&Cz#F4}$tGFBJ^Jk3+M9$"ozoA*OWRJSd5r%jMdoF@@@ 5GBH̙3%00Pú _N_lߩc1Re@HA l'zυޔ9s8(Au,Qjozރ3wO]&ʖFV;.ͺBE YMi/+_7{ރe=aɕ'Fz{)^iS|3$VoVT(hUB ^.V@f}.ke:.C@Yi%yÖʹ3e;՟5K٥n'o.k=3   A  H+VL|}c ATwU~  eΥSAu=ǞX6w^)ՠerEN<;zO^tqQIBl<`Y|vƒ7\?LV,٦G=O;lEiY\8Ar)GZAgJL^xR$}!˾A2KP=DLPGOHWZJt{ _rENth@*;]qN>j_9]꣏`A)\ ]9y<~R3Ǐ߱GꕫO %c[NW衣 )IR&h{R6/wD A 8%q|'fNS^?sꌜ9}V9OUK;]o;פ|Okg1qScMzR}@N8zJevox~wp'O鲟~,4QU^y@@@ W#*!%Jooo AuW YVz\ 몪l*e+gգnEɲdͲ cN||g<^rSdpndp){O_dߞ$1iz O7 ?v(U^ϑ)|δ}LT0UM*Wތٗ9e]*_P}_;%L[IU4nX[^_!Lۭ[$R.;сK۔={v#ҢCs 5Μ/61( igȞ{DOO 7',۾VNJ?dtUz]V u~=ʙ:YQmy3V_LBAu=^ϑWFM!6julM+Jˎ-^z+X:þX@ =\ '==σdP=u?-[6yn iݹije*}9֣77~ 'tM:#CFAԹ*w"ޱOKYx, ޫ*P진?~VD,1C ?$!rhYٻkYr闪y]}{c|÷+WWj^髿 3,Hy[1!GKۛ]w1ᣬG2otm#uj9\CԸMCi.}|f J Io/4𥳐e]y}PNǏPպSG+Kyw_0{>pmUVv eJ}ԨSTy?|]hוP>zmAu;O.iѱT(?|Bf1t=>xszW’LsbE%ԯ_nef.آY, 쳗GJܹ,f 0Um][v#&ߠ@̍j*'jETTWa'Wɿm;&`/\@R>øAz'1\J+~+cn>9%}3WrrIOغOsl& [ݾyȕ0)Ayj!=T߯2uR}6 #@z +efI}Waez{6w:z/+@@@LzQs @ ̘1CS d$OMG; 龢/s%phc!iՓ_;Tׁqm{͡#>^F|A .JN?t uuQ~)GPl2xr2>n>l;N<&,֬bTߧB: !J@P_|>t yg~}.d+CubƗt}vTO{=σH eʗw⥊K^b6L~¨bdmlS70qwwG|lǽ|,o~]1Ws6TO~z?KF~fh;>0YLAu{@ Fn9(ERO,s6&?CE p֍6@@@Tzrs0@̜9S%O<&CP=^?U3=}koLA٥sg{ą+eL=!үE-KJ1YzϪJZ d[ޑ#v: hҤmyaN)X蹇<Ԕn՝$NHΜ:'C{}n^sPG[ }ȠtL`;a͉t~(礶]&aڻ}NJPg~9_6-Nᣮɳ7H1+)z{g[19`U[WoڧCEsPpLå=۾N;h*֎Tޯ|YZ>{:AtH;z]d=RBY93M/fidׯ t~rMiJKǤϠ^f}0UWpxԇͪ{zy}@O>Ti_Ӟ/m$Mhl>Zg^rY=A*߹mTz^ '6s~$vLzb}r5@u#mJSoOfʺYoyG/T@r!+A.Y$i&# +m6sCݬr%*PBCKR]Үg̍iV ;۬zGRighC@@@ M)7CH$TTOeɆvt斪J+'^9ɺ?"gDqpCUl>`TmخPޘGЧdz1~Zz7}I* A<iT?pL^ZwXT[!ĄgLNScTw;Tףu>nXɲM%s777/Zukh/:?kZZ1/"O2hɞ# KuFre]"w,.\6Agk=nw$f-LcH "dGھe`)`s|=[Tfձ#?P׬n?l,Pdƒid=yn wL=NmuEoSVͬMlՇ{PvKΨ}3U .h@~G_1ʖVҽ鳏F)S9riTwI[Z >] $ 1M@j=o9PO=iTO]HƯZDz3ϙ'3m$bd fI=h|Ua毚'9SdM"}c՝І%09vAƲv/2g"ۇ咎Oq m   iwZ#@dd/^\<<<.좟~e%J' wWB䶮) \{]n,*Roꆑ/ B ӖEk&l.}̤4h흍3頺zVjL O,BܴuˣTZl^tE9XtV]Jw%d|'/uU>kQS<.Ck1qY-X^PM޵WtPRO]zuu_n0c1jW]wAl7գ՟Wk'{H>_\S7PcJ꺢wS4fֿէTEu+_7{3]_~iW6vZͬ)cCevX%s~)rrwAj6s iVY/߶}h}|=No/n?{<%Oӱ~Xڬ4xL   A@U \rQQU~WjwAU06) ;zR]UU*/CSm-Jf@L/Au}Va˖[U#̤4h흍3EP]ȇ;s^e&?j';pXjt˗O:M')D}Ȭ/fԀQ~)v'^"6.iVC @ DBynf2o7&؞98_,[jP3+}J)h@lҧ@>.ּ}p~ץe:4anR3[P]2a&aHdɂe'̹M5NKĂApݗk׮KcԯA&mlzՏ<";/mʛ}r aʕX 2x0n߾utm]ϚtҶYBE ϧ~tX}ϥUP}OsYPN3RP}zJ_+fgS.d_ ;á M@O/ϰȦu$hO   YRz4 tqٳgK@@Tw :xLޟ4ߡz!\*q ($\~ kyT51]翏@NiPڱT@L*AͻiJ-(uhKBJ)x ;SIz[Zv`CTgQ> U*9̀A-X)eȤ=U|geɼ2zQ `ϺJTҧ umްU|4j_'fv[цߤ͛&;lPw]Wv}.b_IwAroNTx4T yEfҹ[knp=!: O3"v^q^OWO=>.Ͻ0]fL4sWVo3Knʆ5?K2u:%TW |̚:OWoԦnzYPP}HSѯS=W7 QnݒHMmPQ=QF:;zrsRzj{=#r2v()UTWYTT4x?{z@ =~^I"'~m)W',[\:mC   X- f@2YLPWdرcf0~~~bP}UH}灣X|ehzmOɉsժHega*C{>e_,">9}fv:.g.TVOzE{ɾ#R(o.+V0T?*sS_Q m a/9㩠e?@F -T]PJVmiN򳎯K`!Վ<+GO3O )VO \ t{$6OP=1!֧UP]fluqfT׏|\*0N9$#O0ۦ_𱳥HmASel*pWIٓl}ymcס _-vE{N} ]G*u[=nZT(Y{ѕ#oyG7Kʓ?agAuޱIٳcPVFNL7řF>:޴O=^BU䃷?2F,T?ζ7oܔ毴S'N=&}2}RLue[}۹)߄ŹI[7c_PptiU35s8_[xW;hW'W·nk\Żea!s=Qdm')ѥy7s}SF>0TW.p"#7e<]e̡{i8.4^z@@@ @ 9ӧOŋG\TO@ u!?=+>jJN2jnLNݡ ;n;>]]7y\Vo) Լۤ[}@hyr;_[kþQ*>nuzz LZZV汵۾Pyg 3!Y3iٞrܟ@q5;܌%(d`n<_MA=: ap7] }Hޛ0媕IGۡgdezjT(qza{.f>١ ]@rKZu;>~yKLNW~kp}.ZTRၻ~".^6f'^"6n񻵲 b^w'MY|vܷFOx Z ł?jɂe'{H>ߡkd@A-vuq.d֠} ʉc'$o2훩&o^bF4~ՁЁ&}%T!Ĺ怘%:|E *C>o~guZzf>%TWI}sʴES̱]Mw)z&u[MJVo*r)& we/#qz]Y]W[WϚ5Ր⁲kn7++|׻T~~ 3Tϊ1`LHtqdׯimz TE }ӟe6nPkb]9ꆊ/,XP=9W)~')_n/\nߖ{8}ʝK}旗u+Tw*D#Y)z*_@kvn2y&dҩo+3@@@2Ap +3f̐`2FNE–X=?}2c 뮹<ࢪmlVRpT ҢFUb+O~,i=[U *O>|"NEw>됼m ,Oj?q nRc^e˻^u; 8raLNIOhIڧ*,g3)sQ짏z:ǽvOЍie˞奌d}Yyl޽߬}t{>zrnAu=߬E3c*Au׌/Ɵb>9K۷K{J^%,3zA{9Twa*jѳLNtѾ.qto]~ڳoyw˦]TնIFxgog0 N1!j/ʸ=TO }SzL;v^$/vBE ʈ)U|֪S]VҳݻrY3O>\4Tם',sU]OZ{Sޕ+EӃU+KO'W·SJX zrs2RP]ߩzF s7}>dl\"e?TT2ȊTe3Ou<_jS[|\blPQHUUM@^.޽m;ѯ͐09oxj%i1A9>;>S} (?)gl:'bB3!~V.RY6}Ԑ7I>VCv6SmNP=9jqIg}K%^-ȮEPٳmip;/]Q(Y2oS7[\lܳKw ErƶpSX2FcO˚eLsm$䮠]XWoezMJ.q+ܶK /۷pWnTkVӡ=[KUz<[zmNM{/H>]ׯK SUߧ}녦5[ȉc'ݲc8_AE KF/֠o iYP*^GK@P~N=q~$5TwXN?%M^jfڻ*jre[t>!m&709MWu*4Wgnlp;~\rUtVZvgGc}:otC쐻>1ך֓Bz{W'_zL<ҕMy€M'99W}؎7?2(7qН{YC>1"+_%A!A2qxd)cCev\dOϰԴ7eRO4)\L;*W0ˌϬ/ @ ԟ~n URiyU=9*„   @F cAHH 22TT5NP=O¿n:n*'IkJw3K+UZg9u4ۢSdTOMR+dש-DP: ىKK]줫{@nܸ!:\}ݥMV T;JU.ߠ:L+dFn?:pHŝM+wbBꩠä0g@R>=^ة^Ospv\}{ͪ JBu-\Qd唊FHGK/S̟B?q@@@#@P @f5khg}/֧YMcZȌ}PM$WKm!3ȯ;oVIrw[hCRe̤oVi[teAс}]Jҁ|T*$UQ&@Xwp<:X܇nݮG[*dpnR,O9Ru'o22Rw~mZwtY|V]Ku3GȉsL}P=#Փ*F;5i)cZٱ;lі::L`/]ϣ~6.q4+谑*a'_GΗ ÿ4m;ך3|f90    @' (+TwLVvf/<*5ʦqu/_8}F^&kcS#n;} p8ǵPWWTS[+߮ߢgN*S*% 3!-O:ޤMɞ߱?yӪ"{-_9|\\ŋ@@@@ TO["3$$$o޼)njJ!$|cǎ~~~ wL_$7XGzF~Zv6Sr]IW (̧GP}ƿdUK:ƭ`fX;W}nڹ_nFEY}g)WBׯf< @ ą+e\>ϻ5~1~ |vt{#Au'(h" ,If ;w.3Yeqnzd9X(^ 70>2%a@    Hz&X Rxq*'FP=ľ'V<f=)7f?s9:zDEԣu|tI.B*c 첖m+ݸ){mQry*}Bf7C  i'p'7nޒCQaO AfyҢ? Ŀ}:M\dS5dTOM;AA21taێ_ud*]OsQ#ڲM6Y_=.䖒eKJ2%O/O3ˁ@@@@$@P=I\tFHG3gJ``xyy*dJP=y 0vIBqڒ=c0/J5gsjKZ_~C"?=QA{;H~Y=+r=&tu[YU!yEKm{wWJ[  ݺGFYfNENOk 'pɗGF[qzJ3ߦRq?xt;jt{kɘ! 4'TwB@f ;w.3Y9\dRU _z2, yi/]Ϭ4'    !ɩ qHTϕ+DAD.;e+zU.S\W{DT%؛c$|ZSeQ ՑMSz)O KF?lƵ}Q '9x^)GTx=T%uH?h#g/m9!nV@ dP}o]͹ h[G*V(2ccYv?{^69d9Y`^kVMAnogrTOZm5@@@@@@HLzbBG(zPPHTw RMgs~K%cO5Tf/>j5WPeHwVUuk@ ,[uX] -O[J+,}Zf@ "v8?Wi\qC[R]"M(3`LF ?v˨M+0c 2rJK" vn{~zEJwy'+a       Ax`hFp&kFP݅KtMvlߗh*޼C8Mļʬ8~AWo[nTx VAog^ *g  i'HY{` l -76IDATU:%uᛵ[$|ZY'>.ζC!{6ٲɍq~SJbSӃHP$Tw.       @,@XDȰ(:NE$\&|6nr8[z.!E HNڣ k 3igc筐U[vv9$oka4EQo&hW+om WZ,74y-#fokQK Թ_IVTVmS^_^Ury{ښ 篝Q{Hn)'Ж T_̛>>o/o9sᒄ-Y'Th辻ϓgΦo j{JvIJ+ApX      #@P=@2Փq9vJ ._ln*^P+nn[mr+*JN$mn*m +}$ @Wݐgϛ@z~33g$gJO'E+a        AdhGH(YXb%9Tn 1@ȐSTOG      YKzֺޜ- YTA3gJMPM'Y&F@4 :SǑ       @ 7gdfTUTϞ=;A|1; Aq&:@@@@@@Au9[@ 3 DDDHɒ%%GBP=3_IƎ i&@P=u #{A@@@@@@%@P=k]oȬQQQ2{l B2n@H[MP=u       d-Yzs @f9s[2 ;v /#  @ :z8@@@@@@Zճl@*#:^X15AP=^Mƍ i&@P=u #{A@@@@@@%@P=k]oRD 6AP=3_MƎ i"@P=u #{A@@@@@@%@P=k]o:^xqwww!&cG@4 :SǑ       @ 7gdV(3gAz!7 A&:@@@@@@Au9[@ 3 J {{{3d  6SǙz8@@@@@@Zճl@,.EܹsKtBǎ3Hb,  ŷ:{c/       @(\p8Q@ N*CEL59@HLP=u       d-Yzs @f&AAA!nD&cG@4 &@@@@@@@@2P R}}}#CG@4  @@@@@@@@2@ttL>]ۛ 2`@HA@@@@@@@@@  %n*13??4,Ƃ YXz:        $0y *$F'@ճK@@@@@@@@HD |4SQ[ܨ@@!΋@@@@@@@@HX tT O//NP=a." BP         P /OOq#@@%@Eu^         @S$PUT[ne܊ k@@(\p#"        @ <<\g!" @ .8        . Nj*[ƭNkJG@ǎ3G; @@@@@@@@@ zpp7o"i$G@4 f@@@@@@@@2P  OOOɖ=;ALz6 A4P         )$X1777*2h@HSi@@@@@@@@@  LAɕ+DEETτא!# @ TOcp        N@WT/(>>>MP=]A i.@P=9         d2)oP]Mգ39HW  ^         @SuEzTE@bJ@@@@@@@@@:U/.#b-  @Eu^         @>mȑC'*@@@ PQ         @TTKpPxAX T畀        $,)ٳg'0k@@*@@@@@@@@@*!!!#Ga@TTu        /%ӦIPPxxxT5  m-C@@@@@@@@ K@@xyyEYj#^@dhG@@@@@@@@Dt$=,,LCBPW  ADX        Y^`Jh/^\UEuURY $*@P=Q":         @A RAuwwwY# ]@         dY(6}A,J@@ IՓEg@@@@@@@@Ȃz-nnnTTςN@(@P=`tG@@@@@@@@,'.EܹsK@,#] Ƃ ๿Fu39Xr4v*j~.A@@@@@@@@ (:u3aH H`eE\XC I 4/z#        @&AAA!nNE?m{{!N#Ia^,Zam܃Cef@O tcW9t~rG:e䅵HlŪIjJwv@ThC@@@@@@@@n L UQחYH._XkW{Dʅj84[]fEldNq;eЖOKӬaݧ*[ o;<ʡ-;%([*KGZ*?n /V3@@@@@@@@@h6}7]ya\qÕ ^'*I?AD .^-Wf47$S1TwB         p[ <<}TE(qS۫.}MPQ= - @FHˠzTT8Y\d~ZOJ̤4h흍9~l!        )0y *r!y|Ux让(@!Av#N0ʒdxmI]Hi<;/Aug*!        f͚%1Au77*ߦq>gT/PX>y$: ʴv#=%W^ysIP ]q9u ?]_*V8ms/g.ȅWKʅG8ۻRQ}߇kֶzrXWߐ}GN#'3[3H )Z v  @ \"ߡ~JˏD}3 O#'[QX(+ngAn{< -TOHu         Ȍ3LEu///ɖ-A^iT֩ TO: )yi£*ԅr[ҁEo%CmaҵTH#TRj3՗򧌝S'AcB/g./[}gjTWZȞ;y@%vh9pvrquݡ9{NYȡM/$Q!׮Kk7oϩc">sˎGڽ|V+`[}BJCD@@@@@@@@"2njH"-Au?s>KkvXEywl9qC{셒vu;VuY?lC]_&O_jO(q>HnEE^9sm]1WSԗHT"/{B5f&@Gc/ؘ¥¾%l?: 77N+{RhEcgɑg ٳK|yMQAn.4fO\2]@@@@@@@@@44}}}*MP=~zHт2BW?w Јo?vٗ~?-;޺SNu /ht|$d2~ jqws2AE%h{䄵NoӧY-ylq_P]įڍkSJ9`*%ʱ3笾;7q+[A;$tc*)hYy.]b~[s3T2sZ6?w-Ηͻfwuus&bTO;NA$@@@@@@@@Y_|||շ'ֿ;gĺ:(ާR0KWqg>YYUj_wGXEZUO ohMZ").:r$9{mi‚i7dME)XD>X,; WWL٤wV]7|'Xk?GOɨߋͪ dЩ,?tt,\'+ ^tdc򨛫Fti(Z}n݊>[mAno43Փ&         tE@^ Iriױ?4Va}GNJQ3LP!s6ד\1Iz֚VZ=ұγC{\RAQWe=sS2"BxeP}igu++F%A535/y}~y{g `Y^]ׇdq۹Ȫ{Mw/ԓ|$ zڙVDrX4**꛻Mho% @ @ @ @)( # Wh{#- =kKrUIʵg)'ŕykƉ\b6/y)%oX\_GRcw~ nt8#<8‽k+i?#=ji. 1*Tҵ7Ƿoc#c*qC/\xHk{eP}sח)ꛢf  @ @ @ @cI`YP}„ QL*o'v|{9+c꧲.;e_W9gDzG'7+?Xs?nq{'ʏ?;[W{c^yژqÒ~/}'uH+])Oݡ)>)O/+s/*kƍ9lT?}}'&.r:iϜ}BT'k㩤|z1uǦ:|?=BW4[U|Q ?x>Nv`uG5IُCgfn厸`[ʠno"e @ @ @ @,ؘgG+i; dwv1&>ܜtl`/ ~FSc}kO]eǙǼ,ȃO}|z7_]vqqMJ/}E߉q鹧Eԝ$!?P׿"&%^UqIMq)t=_86;"|ч88Vz2 ϋ=2ȸWo,{ŇN=|>0Cs,|/y}~&>b®Cn[^cq=˺'GaX̳$a}A]_&47 @ @ @ @ƔP(DTWQ}}eP}'/?pTnQN@_sU n~U\{:W$N}Ksly5:r^:rI=|mMtlIg;7MȦTO'f~_@gcdgO]O<&Nǔɓ޸lZ:>7V:Jy{c٪ _:COY~Q+Ʈ;L|CONF*72ꇿZ'6+^O6mGRǒ_KYﺕAt`sFo @ @ @ @I4WQ}`Kի{Ujn)/N*׶TTM礕?=rځJpYy3TTm/^'?zΓK]Iq%s祊ꥎYQ\i4sO͂߻{tk/ƣb\UU: 0M|yi3mK~3nX-;i=tKUg6:[TgyW, ~RC}s˲A]?MG)> $S @ @ @ @i DKKK A>~G~l#MK*ޘT7g~_7~!=[c};f؛{O{V?oNZ =bϯ<$>?uҬ\Uw[D<,:T^yteuqg-^ċ罽8ˋ?ܗ6Pcq{'^ToM~Z 8YkOgjcR.wAfW_P6rψ€O wEo?>ۭ%bՓ1ǿ?^Z{㎌k~p[|;#!5:4\~ mDCP}#L%@ @ @ @ @` ޞsU{VJ{}1.&5G4|x|(b YCͱɧ/+I}2yb׍Mӗ|4Wbd7YBl鏕qUSӄK6s/A2 @ @ @ @(KիC= @' q^f @ @ @ @ 0bwT{wLl&YB @ @ @ @(phkkZA1{ @f o @ @ @ @( #E/9--}B~9 @ @ @ @ @i$= Dccc6QP}h/# @L@P݃@ @ @ @ @bvl^F  @*{ @ @ @ @ 0@Tooo|>UUU!>a @ @ @ @ @ -P,cѢECS!@T_oE @ @ @ @͛mmmQ__\NE @*+5  @ @ @ @ @wwwL6-&M}}}!@T @ @ @ @Ҋ꭭ب@ @SG @ @ @ @Ϗ:sIY[%?; @ Ig @ @ @ @(mmm1a8'@ & >> @ @ @ @Hk/\0AP݃Ah!@ @ @ @ @`, ,X 766FX\^ۖ@O^ @TO< @ @ @ @^`ܹiP= e  @ @ @ @ @H #a'@*{ @ @ @ @ 0y󢭭-|7NEṌ @= @ @ @ @I+:::.G3NPQ3@ @ @ @ @ϟUToll^AṌ @TT  @ @ @ @ @`$ ĴiӢAE @R= @ @ @ @^ ^(o( @` L2e  @ @ @ @ ̛7/:::ڵk#חҾKK=  @ T @ @ @ @ @`phoovMMM @-,r쎂[ @ @ @ @n:;;%|r9A擳Q @` o5z7&@ @ @ @ @`;՛c„ Q,շ6  @( ݚ @ @ @ @B R(DCCC oM @[U@P}9 @ @ @ @ہ3\P=n.ImKɶԴ-m^ @1, >?|o @ @ @ @Q J+77GCc3c@ @ @ @ @3g͊f>a @g @ @ @ @C 9sbڴi磦&Շ2B= @ @ @ @ZX,FuIP= e N@Pݓ@ @ @ @ @ҠzsssEuu\F  @ @ @ @ @ /0c舚Aᩌ @ { @ @ @ @ 0@XsDkkk Me ^@P} @ @ @ @=;#G.\_r 6qkdnjjZ[p_ @@?A~N @ @ @ @ O wvvFsKK444dc @6TD @ @ @ @*f̜QTTOJ^ML@P}0} @ @ @ @X/[[[#իh @TE/ @ @ @ @Rbs΍B  @hGd @ @ @ @cY`fRQTT\.X~w @`ts2 @ @ @ @+9{vL:5&N}I\_rlK===vm  0 @ @ @ @ 0*fEPG%f 0# @ @ @ @fuvFkkkF.p~@IDATwU?5@B'#ՂǎM6TQDDi./5HHf&fKv$";sΙ3s3u$[l@[{{{v7ƍۀʭ @C#--Vg7\ZYԍ>rc].Z(I&mw @ @ @ @ LoiƆI2k   @P \piq#,rɇSO,js00AyM @ @ @ @HkϚ=;jkk*rG;`@SƧ X%I}[b)J-̾xdEC'6޵6+n;x=JG;s:{zO* @ @ @ @ Z5 W'jN}n⊬s-ozM_yQun}x(ĹWX;:?k*c1QŸeblueg¿] /pׯu 0;cO$nxI~?=¸Ua_=i .(ޓ6 @ @ @ @8}hjjjW}_uX2mV]z,p o{x_]8ʹξ s؃cm =*)vxkbFlxMw& .\>lcލ]}9.\=&] vYTuqeƘA~iA_XLA.v  @ @ @ @ Ѓ@YYEr*`T4򡜫{}0AO?&Cb򄱝M+o;N}7ľIuttd!z0ogجl$RX3pIߟ;}xzsQY^Sk0׳Jy&^]sft-ɗ :&EMUEq=Ų/^;MK&˖'mwMOq5ki0O?%(}N66 hqMwFI$y;2S?쳲/X>LXO>WE?ߠ` wհO @ @ @ @5f̜ IEXrk e|(zW<'nu(~U ѽ>ߝs^<G< cb|yɵq߯IB+҃\.yw+kb_Y8i :8vߦOw>Ls'Φ^qc9XbEQ$?9ºwH_}ۋƥϫ5Vűo|uλ& Ɵvn.ξ솢*?xxӞ/˂_qva/^vtg] "~s%o/`lװUggE<ɕ(.{/qBGȦH?Wߕ|m{(\ř+*'NeշB zRgw`/L4A`J @ @ @ @hmmɵQUU%* e|(z*Vgѣ} =Tgf{C*}y[-5s^@O=4.:g݋Ƥ?$f48",I5t)ۋ vUֿpG/uA4BREߠO¸?tۖc G ez>9|eY-7C= ^(U?ܿ/;b '޵b_C9~6b߮]?>$vM>on{5q]fA{}>)EA_4f8 @ @ @ @#N 755EuRQ}ʕ}C.ʹ:s.\usㄷrqO;3Zb|rQ^V-Z\V]e˳FOؤ~x߮-~ɵY{>Is қ1hLOio>*|6v`Tsq?:%% s;i= [UR 8滲SM+n;~`uXkP{5]Ǘ|ΊO.*͓fΓz `WWe⍯)WĘ꾟_$; -~lH}?-=gZ5=n9/bt_w?*sWG6_?Ţ.:5> Î:9 @ @ @ @%0s̨,+pP5AճWI5$(+_@ZyO{jK+q}Ss/, WU:O[zZe< qwn{lf$uAR5>͍Gz&목?lRqj* ]]{{̿9: C[\tq_YeAc|u} T w=h=륢$W권m&NSjctTI\>sKr5.V\_QU1yEmrQ?vث=?L>#~&ϯ?(/=}1˳?~{l_g^K?1qB_ם-fq5>^c3 @ @ @ @&0# ѣ#ϫ 0k_yNxOuPqO;0yV[w?tdOږ3K_Ύu \&xc8N|G>;u-㔓q33}nw Ujۧy_};kcWӊ{8u8{ TAz,ν↮+گ('!c3F8  ̾H]4]׵io,iSIEz ߱6}o+¯~w=XF뗎_뗛NIF{~FaGP}МB @ @ @ @H+74Duuut$ŬUT뿉+Vd6]̻zƕK?V܆r /_IGƔ[{Щgd][m>6~czc[㝃JiyjCTj~.Z\⋑}}b׭??(k*,f|~&酦A?^~Cew5Ͽ8*;/߮ibySWvo\T@cE햞W'O%!{/ [[U9K}`{lV?\|{נ`blT'a @ @ @ @X--z ǫ-Z\O+[S83ˮ/4MCڥp-Ɓܱpt tDZ5׸e( @ @ @ @#Reƌhnnl*\r'kѨ7Ciϝq҄xaًqfǟY]y}\uU3Q%+\?c}v?=cڬ'ſL*cHwtNQhWlVieTg㮼+Ak}|{ wS,>Ku+o'N^a-ǎ{ aǓJiE~,VՕd"Έg>_8?|=aVƣO=ShTO>qcOvv^;MO6zퟜ׸G aJ|胲 ?gMS&o_ ɳJ:(̞uaXASkt '_}gΟ_ߛ5l|>_H>[ӭ,ã~q _/ҶAη9 @ @ @ @ БdK[g͊ڨ$#&Ǔ_2Mvݹ*}x bw&iMϡ{zэ #wV 5.΢n8u [54$~w:ť7ޙ٘_c}K:l?wmy-"O'}vߛ{^\s}kڰMqoҮqmƌs/]#(5*^L*ŗO?,O~&m9.{P}w^+e @ @ @ @#U`޼yQ__UT/M $ MHѿ8ʛ&':4\hӥ|=o]TB_cv]=mQI%u0󯌋#0EZY~=_}s'/{+@yk,8{ ^\usEFzRd|Ŋw?ko%]/# YmW(Ӷ[N~KKGEq1yl ߝ,]>\u?=nX.KMCljBQ w=h==wR8s&Vi5M!YP~] Xμڸ_eT˦qo;FWU]/O>WW}ǘ-}C|H:E_ۏWUOJS9nO/^3|y\qYy/)g;ޖ}ʉ݅=0ve( @ @ @ @#R-MeIoAux>v'4=ntU4MǏЌC9׀.0wVOCǯ5y%%ru ̧uzj1k XߜTB% wnij4$[^? MM| w`}>Z*6>lĠ_Hx-ĘC @`@/{E Jel= T @ @ @ @4|]`A455EyyH{7`|=ܹMSǿ1vˬ?O?;=V6^Aٹs @ @ @ @G`޼y"בls]=8nܸ`$_6}~;uQ%ol\r @ @ @ @ @IOQSS]\P}xmDO<$~u&FuNx7g  @ @ @ @:ujTUUeTwWو垸GǟǞ^GVbI}V:G@P?J @ @ @ @ 0ҠzsssTVVFIII  @~   @ @ @ @F@> Fccc  @ p @ @ @ @F9s)"˩> &@, >`2' @ @ @ @ 0͛1vTar  @uT_4 @ @ @ @ 0ҊꍍQSSzK:9 @ @ @ @"0whnnlŹzdžvƍ!ݖ{!@F~N @ @ @ @@ڢ)Fz "@F @ @ @ @ Ћ@Z;}QWWՂX"@ v @ @ @ @ УzMMM%GDٕǍ݁ @Ջ= @ @ @ @ @ٳ9Ҡz.T ]@Pc @ @ @ @ tVTT/qDY@Pg @ @ @ @3gN455Eeee5JEN?  @kT_v @ @ @ @hkk)SDEEE{1 @} % @ @ @ @.0wܬzMMM\RP}O- ޷ @ @ @ @lGmmmTWW>_'@+ _) @ @ @ @iEAX7 0pA9 @ @ @ @%0gΜ2eJT_bE:mC"hoongܸqm @` o @ @ @ @K-"JKK7ܠzVc @`&M4Ws) @ @ @ @l<͋\.'<:wJ/p} @ @ @ @6TsfAѣGG>p`+ @hoo쭘 @ @ @ @ ::::f 0Gӷv @ @ @ @#֖kjj$џk pI _W8 @ @ @ @Fܹs!Ҡ#-n @`@2 @ @ @ @(էLUT/% @T @ @ @ @,󣾾>*++,G;` @:S @ @ @ @1|>͛YP= o @: 3  @ @ @ @!iPziiyI B@P}xN%@ @ @ @ @`DŴiӢ,G#H @`t> @ @ @ @@> DSSS o @T:K3 @ @ @ @ i ̛7/2r\:mCZ ؆4  {@ @ @ @ @ 4^__555@A{!@d^ @ @ @ @.SNlz^z  @*{ @ @ @ @ Ї@Tonn()) A>t @TT @ @ @ @ @`|>.\Q^^.v*= @- @ @ @ @ @'hHUUUTT I @zW  @ @ @ @XS`fkkL<9ƌI\G9k{]Y'=h%@ @ @ @ @@@ˌ*wIM@P7} @ @ @ @1sf466Fyyyս @>M @ @ @ @IEG藀z "@ @ @ @ @` tttĬٳ6TTe @T  @ @ @ @8,^TTK ؆4  {@ @ @ @ @N>=ZEީ @V { @ @ @ @ л@YYEr*Υ w @ @ @ @} ̘ QQYJJOPQ;@ @ @ @ @DSSSTVTDNPw, @T@P{@ @ @ @ @f̜ IEXrs%@{ @ @ @ @ З@kkkL(QQ/. @Au @ @ @ @h1#s9Ohoo&M @ @ @ @zHMMMQTT_rzF @EE @ @ @ @ hjlUZ* @@7An   @ @ @ @ M`̙QW_ջ8$@!  @ @ @ @ Huu1zE: @= @ @ @ @]Ҋ Q]]]l @zTE# @ @ @ @ [Z?A1;   P$" @ @ @ @XC`FZQ.kjTT_CG @AP4 @ @ @ @ @@ˌY]p @zTIE @ @ @ @V tttDYQ[[QVV_#G;4fm/Xߙxg cj*Z @`x~2ޮF @ @ @ @%cfkk456FETr ۳Ή|tvjpX5p_oٝ<[Q[_`} '@['-z @ @ @ @lliP.***=?x kx~Em9돒1 @p d8] @ @ @ @Q`zKKL2%?O,." n1.k:=m=QRlOA~SH O e @ @ @ @(|ΚQ^^{P+㋿mŖhlj}v_6XQ4iBwDUf DX @`8~2ʮA @ @ @ @,05ꢲ2r\::qu}cW옵=OSƌrB@w*f< ~O @ @ @ @,FgΜuQ]]-Ǡ y\Y#^xϛ^XbVI+)/-o|ضaBۺs @)kn @ @ @ @6--UIE/8uޟֺ5M2q-w$$ot`7A :j  @ @ @ @ҠzcccT&AzGw|g|ŊºTi;.6++.8e9tM{:lu=[W9 @K'Kּ @ @ @ @l |>f͞ Q^^fP=]O~{A\pE_mђΏ=[3*bc m#r#@֗O֗y  @ @ @ @TZ IErEX2Cbϝ#_) @pI @ @ @ @@GGG̚=;jkkꝋ<⏗_y<=^/y~Yy c'&#%c @pj @ @ @ @@kkkTN*%wgq_SNء6k{Eqǒ_(8~LeBc;`}&@]'N @ @ @ @ldOMMMQ]]"ڟzh[Q mO/^[T߬4|l?;`Q2N k @ @ @ @ 1 ̟??VsUT΅ k @I!@ @ @ @ @`$ ̙3'^YYb蹎dې@6^ @T' @ @ @ @.SL())TK/ @@P;@ @ @ @ @ΝUT+W  w @ @ @ @ ̟??jkkZEީ @V { @ @ @ @ л@ZQaxj[+K&>}lvI& ] @ @ @ @9sbʔ)YP}ŊH i K7^ @T  @ @ @ @[-"JKK&3# ~ @ @ @ @7o^444Deeer9A @ս @ @ @ @]`ܹYP}ё{KT @ @ @ @ @wzcccTWWGGGz\z  @ @ @ @ @%֖kjj$Iޞ]SۆEXkAS@IDAT @ @ @ @L`ܹiP]Eu/ @@2 @ @ @ @-էL噃#ux @?Q2 @ @ @ @*VP?~GeeeH}跀z $@ @ @ @ @` 7o^477gA\.'>K&@( >@0  @ @ @ @qiPzii{,ɜ@ @ @ @ @hkkiӦEYYYo @  @ @ @ @|>,XMMMQ^^.>2U @T  @ @ @ @͛ QYY\.rɶ!-=Omېn˽ @#X@P}?|K'@ @ @ @ @O4룦&/' @HTo @ @ @ @ З@[[[L:5}'@F @ @ @ @ Ї@Tonn()) A>t @ս @ @ @ @X@> Fccc J @`j { @ @ @ @I`Μ9UUUTT I @zW  @ @ @ @XS`޼yQ[[cǎA5 @Ջ= @ @ @ @ @@ZQ1jjjTT ГzO* @ @ @ @ Z`ܹYc.)ޱkoonS^raj\'E ۓK=>Ueq_%\\qӴV7pܟEKs/0tcqo;pG=Y8F oֲ @ @ @ @2hjjѣGJKCGoxkȓ3F|qϽ?;\E9tܡ_~7vߡpί[sEC @M\@P}G @ @ @ @ ,TWO8"vۦ0gO<c+~1$[Z# wn?u],)}jQ|-1݃&;?;છ6`V4 o @ @ @ @zMMM%4/1 ۳ N>CbZĬm_]Z-^eeS'#kNjK]bm-j&@&X- @ @ @ @!={v477GTrپy]φqUz%k jϾ?ji7`׶ o @ @ @ @ΊՂ}}^qL_~EKW05j*+K_!" @ >% @ @ @ @ 0(9sDSSSTVVƨQTTMO/l.N]㽝RԷ!: @&- @ @ @ @A Ŕ)S"JJJ{(ӿx|?ӭ#n끸;{۟6pW cs/x+^\?tQ`V4 o @ @ @ @ܹs555rJADm*zz<?ڵ+ΠБtiY;1 o @ @ @ @GmmmTWW_Ѻ-Ǜ5}[]i_w[pޟce>_P zھkKϵ @" >Ru @ @ @ @ iEAu5$v7˦ǎSꓴ0_9~pO{n,}~Y]w^Xb|]֘@؄7ki @ @ @ @ 9sbʔ)YP}ŊH!y&ioof:Զ!qM3*Nx~ݶ.gP_Z"eN @U@P}c}r @ @ @ @hkk樨RA*%\,ʕnVV]UG㮇7`#F oֲ @ @ @ @23gF]}}TVVF.` /N~_n9>Y|_}O۷?|T\u}ԙqTzrF6UAMZ @ @ @ @C%0# ѣ# G)^ǎِy_.$ rP}k+,#![" @ @ @ @H+74DuuuTMe[y(.xEQ]Y;4!{JJ1oR?A3/Wc ) oO @ @ @ @ --z:_.Iw>Y9۳O% @ @ @ @ 0(iEQQ/~J-ǯXvqg_+W拦0vt GII.^xeE~جWk{݇=w)j[AZ=}[׵u1ؔ7km @ @ @ @ @ˌt*@,2j*"H~CǓ, Mym;#@E@P}cyR @ @ @ @B#Zg͊ڨT)k @F, @ @ @ @,cfkk456FET%UՇ! o| @ @ @ @ 0iP.***TP}x]7Ƨ  @ @ @ @N--1eʔ(++TNx"@6^Aٹs @ @ @ @ֿ@>Y1?+ @ @ @ @ @)05ꢲ2r\:m}^psgxj@O5 ^ I  @ @ @ @DH̙3>U o"2 @' lL @ @ @ @!0%*TWQ}xVAOAkn @ @ @ @64IPDP}Sx@_Akv @ @ @ @6n|>fώ(//T߸'@K@P}] @ @ @ @U%ސTT\. 7 0|gJ @ @ @ @l3[[c1f̘H*:mCZJ{{{v;'ڶ!ݖ{!@F~N @ @ @ @@Zf̈VQ_b @#^@P}Ŀ @ @ @ @C`̙Kƪn @w @ @ @ @ LoiƤzMMS%@T& @ @ @ @ @`1k쨭*N Z@P}= @ @ @ @$ښի|>rIz/U[{{{vOm{nu  @EE @ @ @ @ ӧGSSSTWW @@=h"@ @ @ @ @@YUUUTTbc Уg#;{Vhv 6+iv۴Ŕ@BK$!%@{IH. $7!^Q٥\kL w.;g֚]Ҍ_^<)<}$F @ @ @ @t'&R.`>;2v @/ @ @ @ @ jHխ  @@oAFF @ @ @ @ m(*J߸Տ?l)'@6޽{Ɇy% @ @ @ @ &055[P(DF.V!@T7u @ @ @ @V$0>1Ѯ'+R3ȴz_ @ @ @ @ 4^Vتo~^P}f @T0} @ @ @ @z j_P @@3 @ @ @ @ C`rr2FFG#G$=t @BP" @ @ @ @ @@w4>2CCCh4ջs%@E@ @ @ @ @iEr9b4MA^  @ @ @ @ @zAthJ7{sH۾Hf @|?YNF; @ @ @ @ LGFX*nQ @V" %c @ @ @ @ȲDjrmճ̝X "@ @ @ @ @ f3v100] M\@P}VF @ @ @ @ =FSSQTbTODP={  @ Vx @ @ @ @&0;;Y[K^@P}f @ @ @ @ @ [z=o!wo @4 @ @ @ @2!h4bQV# g⭛$ nAu @ @ @ @wr(ˑ#IHm#Yl# BX @ @ @ @X^ A(J큂{!@- @ @ @ @tm۶( 큂ݽ @TT @ @ @ @ C j=t @TT @ @ @ @ @ш={DR\.'< pd 4ߏ[7'0wTnw$Iߑ9 ԂEx  @ @ @ @6tT( Z}SA?|kqGy oN@P}u^F @ @ @ @ =-[DT_}qWű[Jz+n޷/Zl_ߍmzN V3^_s֢G6Em='κGQ{R7T_JE @ @ @ @+JJ%;Kc_N˯F+nw2ۆ϶s |1ueα pG 8q5g/ԓeQupޟ;?8'?cݗOg?l7t[KPP})m @ @ @ @8 033Z-r\1iUߟ>0m 'xׇ?ڤ!⨁θxG:ǧSA]7?{r{lslFP?yĩ_ ^fgAcm'K=6 @ @ @ @.zj5TT_KHUW=xNgx{7\*=cNW<'޸룝?}1:slFPf< x#9^z=gT_JE @ @ @ @ ݻwHEA^ /qӾ}=wz언Qsg|WHN_o%?.⸻l{u⢱=?ZLM|1Q]cl]㨁wLG yv%}+>bo~sZ/Ի+}g]bnwiJ=4`#}?9 @ @ @ @ @`ڵ+jZA$IջOx{?GGvv[b+?bm8~lw߼ COx܃{>_/<5|BueW'>^yumagS__OxBS7g3A='Ɖխ7'@ (Ќf|7DžWڻb_EOwTli}[_ڶkD^jI**<5]n?ܒtql /u۠zϿAP}P @ @ @ @ YVcӦM*w[ igq-txJ<>ޭwK rAK9'.u.^r S1|ף݋'TkoyN\s/:x3~ x;lc-o}~|[?m{rgx_svq*ySNټscyQ`ߜQ1짾־kNx`[G?ݜ~&=W'U[+|w)qpP}/*W f8 @ @ @ @166B}V?/.;84j䷭\P}i>pctb8ݹ_=/۝\|@u^b|\/nwL\at⧷Kw!@ %{&^l3^'.xj?'KޱݶXgű[J1/?8NA߹v׀ @ @ @ @2%033Ӯ^*b~~^P}%o}=#v}h6?S(~GէKϝѾw_ӯya[k&[c똴k^O1mOx~ᱥ?t p\~ί}>qnVMO+[edas.[+y/gßmVQ0m8N4T_aGP} hN!@ @ @ @ @ Ssss1<<bQEռ48oiޟ-{B>^۪f>1wDPUz| ;| 7>oa-VoxXԗ1z\X6:6-6ϛ x5gMnXԗ/ca@ů֞p/ɸʫ#":-||ߌ}}?߈8>k{?:{w8͝wN{x\v5={v_P}b @ @ @ @ 5z\T_ϋkG]g{Q|vt LCyi8/q7-\~E?_'#w|/}kJ{#cS_߲t @qKk^ÛOSOEmk=y_cOic]_N{K",ybwYݑ꼌&@ @ @ @ @ {166۷/fkH GZlш~qQ|أ6T֫7ts5m=U^7rKlm;^U]莯}o qy1i?xGs~& p o}/Or+޶;ξ8?^֟vY:? T_+~%iO& @ @ @ @RzjVNLP 7x~x܃4D׽;nn%O;"}n_ymVƛosZ|[p~Aep'a̠-y;a3fax?}|&>g#w°E?Oy{/`A&<T_% @ @ @ @dN`vv6rHDP KQg_869^ع_[z],ߜ_mP9D<i?L{|;?\879Qt'}.26 ͷrG]jc߸i{9isl,_fP=,J?ɏx@)^nl _xǭe_;3Oy<6 [evvEװ#4 @ @ @ @ )vP}hh(\]^׿n~#n.iPﳽO;ݟs/3!'ūq7>/^;ι5Oу~w[gqGo׿iq]6.VG㜋?-B&㒟]nϵJ݋Gk7Vc3[SCG/3~^[q_j7O~$sۭψ[[co[fm_|13ӿo /Yz\t ;k@s  @ @ @ @H+W*(l6ջFoX4lU< _۪{ Xԗ}FꗶB/jo:*Ľ[I+iohXcc8+NcxR왿>~gψɏwT+V[?- =<5%茵CG/Yy187k2W_wCӣl[!|^>;cŋqD|/<6|KW_.ů􄃃zOMP}-j!@ @ @ @ @ KzT/Ji+128?}!'u !W\9gaoOyj=ƞ{| ߌBg7~N{1jm?h7ŦM}K7? _v< ǯ4d~S+~eW{ףbK1=4 @_/n9^yM>Ϥ''-c  @ @ @ @Ț@ZA}nn.FGG#@zV @T_5 @ @ @ @Ȑ@ш٨jzZ\P=C T  @ Y @ @ @ @dG /TTTΫ7S @`ks @ @ @ @Y}Au$@% .>' @ @ @ @ p'h4{V @;H@Pt @ @ @ @Q.#G$4[F FzH|? @ @ @ @ @IO꣣Q*՗Ch [ @ @ @ @.Pc۶mQ(ջ{%@n  @ @ @ @ @@Tj磯/{&@n  @ @ @ @ @`yF{J\NP}y*= @, @ @ @ @ @`)(B!$QQ})$m @ְO @ @ @ @ LNM֭[clUXO_ wg @`iOvJ @ @ @ @(Q,UT_@ M@P> @ @ @ @DLLNFR\.I DEu C@Pn @ @ @ @2/c|<*RIE̯ @Wd @ @ @ @h6s׮BzFׁi @T_% @ @ @ @dN`jjT/*7HZFRHoó @' @ @ @ @ cGT(*wK/ n% @ @ @ @ @ΝB!$QQ;^ @ @ @ @ @z OLD\|>6 OPQ @ @ @ @ @@wQV#?8zw, @T@P: @ @ @ @ @@w(*J߸ջOC/ @ H @ @ @ @#@`jj*GP\Q @@3M @ @ @ @ OL+Iq+ H۾'dh'@ @ @ @ @Hj5Տ7  @C& ~Ȩ݈ @ @ @ @#T`xT+MG{ @!T?nE @ @ @ @)099##IA#-zh @ Rn7#@ @ @ @ @H##144FCP|8 @ @ @ @8Ҋrh6G @!T?nH @ @ @ @&c|<ʷGOZiF FzH|? @ @ @ @ ]`">2RIETz  @խ @ @ @ @tZ\=PE^z  @*[ @ @ @ @"l6cj|>!L @ PQ: @ @ @ @ @F#&Z`+$\z @խ @ @ @ @tH###188ݹ @TT @ @ @ @ K`xz/, @T@Eu @ @ @ @ 4ڹ3*Jr9A @G @ @ @ @&bdd$|$II-5p .y%@d9 @ @ @ @H#铓12:bM"ne @zM @ @ @ @@vGVBz_ @= @ @ @ @ @ iPRDTTz0} @`+@2 @ @ @ @ 4عkWr] &NJ@P}U\ @ @ @ @ AVErzP$ITT0e @`3 @ @ @ @ LNM֭[clUXOm#)mY @T @ @ @ @'&\.GXTQ;^ @~Au+ @ @ @ @&&'RD.5TE^z  @*[ @ @ @ @!c|<*RIEEx@IDATV  @m- @ @ @ @,/l6c]1<<BAE @G @ @ @ @Abzш^o.5p .y%@d9 @ @ @ @/pQVX,nQ @V" %c @ @ @ @Ȳ\'Y^ NL@P}eNF @ @ @ @ ]vE|>6mTR0s @`+2 @ @ @ @ TB0o @`+2 @ @ @ @l ̴+JT20k @`52 @ @ @ @, pEճ̙X͜A @ @ @ @@ҊrYP=[l  @GϹ @ @ @ @dA`zz:A}Elmi`mx @ : @ @ @ @ @@wzZ-_P;^ @5@ @ @ @ @^Q.#G$ @TT @ @ @ @ ]`ffTF!ޝK/ @@Euk @ @ @ @ҊJ%b4MA^`  @*[ @ @ @ @.PAR^ACn @@oOzA @ @ @ @@fff\.GTWQ=k  @ 0 @ @ @ @2+"˵ TTR0q @`+2 @ @ @ @, btt4| zW9 @T_ @ @ @ @dLhljvP=IA%@ 4 @ @ @ @ )4PQ_P=Sod  @5 I @ @ @ @dH^c`` 3MXI @ @ @ @_hݻZF.Tr3$@A;B5 @ @ @ @3 F\|>IDlmi‚`mx @ : @ @ @ @ @i$= FTjT_K @- n! @ @ @ @ @@^m۶EPhT 5@ @ @ @ @iPVE>T 5@ @ @ @ @Fٳ'*Jr9A @G @ @ @ @ZFP$ITT_ I @`A5 @ @ @ @ @1<<[lf)~{"- @= @ @ @ @ @iEJRIE8&@,% 6 @ @ @ @Z\ݘʪ7t=A< X @ @ @ @ p[zj5TT-c @RKh#@ @ @ @ @~vݻcdd$ŢAXJ!@ @ @ @ @ ssszTFI+H `mx @ : @ @ @ @ @@w]vEV4$zw. @Auk @ @ @ @*EA^X  @ @ @ @ @ LOOGZ|>6mRQ;^ @5@ @ @ @ @^z=bpp0{'@n  @ @ @ @ @LzTyA\z  @*[ @ @ @ @%077Q,UT n @ @ @ @ @@ZQ\. wgK8 ~ @ @ @ @vP}߾}4[RW w_ @`9ON @ @ @ @z=jZ FA% KH? @ @ @ @Y$z @{A @ @ @ @@&ҠH ETr0{ @`%+Q2 @ @ @ @, G(l6ճ̝Xʜ"@ @ @ @ @ ;ǣ|kP=UHZiFHoó @' @ @ @ @ LGFX*ޝJ/ @`@ @ @ @ @Q"˵K/ @@Euk @ @ @ @]fLÑc`` ջ"@*[ @ @ @ @X^hTT+lՓ$T_K @`@ @ @ @ @iP}dd$_P;^ @ @ @ @ @z T n @ @ @ @ @`yFS;wFR\.'< @A @ @ @ @ TD>$I"i6A% @r,' @ @ @ @i$}rr2FFGX,Iխ  @@A@  @ @ @ @ȼjQhUToTWQ=+ S@P' @ @ @ @d\ W*ȷ}}}_O@@P}H @ @ @ @ YF;wr\NP=+  @U ` @ @ @ @2(0ު^nUT/ $\LR@P}` @ @ @ @ 9ɩغukl޼9 Im$A6<  ~b @ @ @ @ @D(*wK/ n% @ @ @ @ @dT*rK/ @@Euk @ @ @ @=vGUQT*J7 @-@ @ @ @ @fܵ+P(< @A @ @ @ @ T;^lUTo4ͥ6A% @r,' @ @ @ @N߱#jE-  @JWd  @ @ @ @Yڹ]QP(D$*gy1; 2A9E @ @ @ @@v'&R.`>ճ̜XJ#@ @ @ @ @ ;ǣZF~p0A.&@V# -c  @ @ @ @Ȣd[KRϫE` @We4 @ @ @ @Q(OE-3&@V/ z3g @ @ @ @ -vEvP=ITT7[ @`-kQs @ @ @ @YHj5ճ͕XܜE @ @ @ @@vvGR/Wo @Z*< @ @ @ @"099##IAx$@. v;g @ @ @ @ 4>2CCCh4ճ͒XzK @ @ @ @@Ҋrh6YxHO@P}}~&@ @ @ @ @/c|<ʷ&zs#M[l# BX @ @ @ @.0VTbzw* @V @ @ @ @ OLDV\.zw/ @խ @ @ @ @th61sg G>T n @ @ @ @ @`yFSSQTbTODP}y.= @V @ @ @ @ hzzw. @խ @ @ @ @}A^Z  @-- @ @ @ @,/h4bQV# /O p@@P= @ @ @ @,%0;;r9|$II-5p .y%@d9 @ @ @ @H#iP}tt4JRDP @T @ @ @ @ ضm[ z @z/! @ @ @ @d] jY_OTId @ @ @ @h4gϞT*3LX* %@ @ @ @ @ QVP(D$*gr4 *AUqL @ @ @ @@fggcxx8lfSP=k  @U p @ @ @ @2'VTT*Q*TT7a @`Mkbs @ @ @ @Z\=UV/ކg!@RO @ @ @ @tQVchhHETz  @խ @ @ @ @,/N߽{wDXT_J @ { @ @ @ @XJ`nnT/Jh4"iכK <\m`K}  @|?YNF; @ @ @ @ ڵ+jZA$I-  @@/A^B  @ @ @ @ȺBEb(` @Wd @ @ @ @j|>6mڤzv @+T_q @ @ @ @dU^X F__zVy @+T_ @ @ @ @dS`ff]QT*z6Y @T_ @ @ @ @dQ`nn.X,` @Wo  @ @ @ @%VT/˂zfKG@P}=z%@ @ @ @ @ 166۷/fkHHoó @' @ @ @ @ j188ݹ @խ @ @ @ @r|>$T 5@ @ @ @ @333P4 A\z  @*[ @ @ @ @%VTT*Q,l OPQ @ @ @ @ @@wzJVov? Zow#@z ~ @ @ @ @-033r9Ҡ^ fOP@P}P @ @ @ @ Y4>66\mzf @+T_q @ @ @ @dQ >77c`` ճ̙X &@ @ @ @ @ cF#fggVIgl . A59 @ @ @ @L Az&KI@P}MlN"@ @ @ @ @ Cz=o!o @nL @ @ @ @F#vj5r! pGA @ @ @ @Y`vv6rH$fkHHoó @' @ @ @ @H#iP}tt4JR{^z @mAu  @ @ @ @zl۶- B{zw/ @խ @ @ @ @HZ-|z0 @խ @ @ @ @,/h4bϞ=QT" /O p@@P= @ @ @ @,%0>>VPP(D$*/ p  @ @ @ @ p{ɩغukl޼9 I~k;|L,-.Z  @ @ @ @ 0>1r9Ţ (~ @ wG @ @ @ @ɨT*"inU @zM @ @ @ @@vGUQT*X "@ @ @ @ @ f3vQ(TT:0m{[N:EB8}@`Cd#w {׶5Xs)f ]|5  @gN @ @ @ @@6>&e.^'A4 @~ @ @ @ @ ,ufDf*U @N @ @ @ @ @@f?Q}0D$&7s @LT @ @ @ @hXV1-gY|  @& @ @ @ @4 \/1"#ToR%@ @ @ @ @:DpOOO&7s @ @ @ @ @6M|b0DD6.u @ @ @ @ @ @@rOTՓD60u @_Ga @ @ @ @ @:>"MT$~ @A8|!@ @ @ @ @/e̦BP!  @ @ @ @ @? O&eY$I" @_!@ @ @ @ @VuP}<(RP_ @X"@ @ @ @ @wDIQDQUw6.  @X$@ @ @ @ @ \/Q'^/&zwp!@ _ @ @ @ @ >G> @A( @ @ @ @ r|iWMT% @!k @ @ @ @x*6771"˲ AuAhToR&@ @ @ @ @eYzt]P=IANw @' d @ @ @ @8~\\\w8Q@PD( @ @ @ @r".//;N% ~ @ @ @ @tL,t:4M;x+F @ @ @ @@g֛MȲ,$}[ @Z> @ @ @ @ @q:^c~nzR>n{A  @OX%@ @ @ @ @*&e.^'A4 @~ @ @ @ @ ,ufDf*U @N @ @ @ @ @@cz̥J0Q] @ @ @ @ @Mn?Q=˲რz: @Du=@ @ @ @ @fv"~z=Af.U @z @ @ @ @m0  @& @ @ @ @4 <>>h4Gߏ AuAhToR'@ @ @ @ @QEdYIw!hTo7 @ @ @ @n WWWQz  @SOQ @ @ @ @. էiyUU w8M@P4' @ @ @ @vՇ!٥ի!BO @ @ @ @(&7[ @ @ @ @ @uP}XD&7{ @LT @ @ @ @h'?>>d2,2 @ @ @ @ @ʲz$ǹT @: @ @ @ @uP\ @ @ @ @ @mqyymZ @ڀ @ @ @ @ʲ/_l64MՏS @^_,\ @ @ @ @ @CEYE$Tϡo&V. pL1 @ @ @ @#uP}2p8ܓ  @@z 2 @ @ @ @n { Aη @M@PMH @ @ @ @ A|YE Aw @D6 @ @ @ @ a,ׯ1N#MSA @ge+ @ @ @ @l $1Q] @YgqL @ @ @ @@b4oUU w8S@PL0  @ @ @ @@=Q}:p84QsO߁  @W M @ @ @ @tH>yi?u^  @}@ @ @ @ @fv,LToR%@<  @ @ @ @g%qy.~J " b @ @ @ @ApeYFKW6՚ [ @1'd @ @ @ @ @Y6yA$I5 @M@PMH @ @ @ @ =Q=sA7 @ d @ @ @ @lYŇLTn+89 pR @ @ @ @ Uv"~z=A6s @ ne' @ @ @ @OT$6pj @As%@ @ @ @ @1"sջL/ ~; @ @ @ @@=Q( An=v%@?s/ @ @ @ @]b-jyO{OOo!@j' @ @ @ @6yToR%@ @ @ @ @ O&eY$I"N0Q] @ @ @ @ @Y`U㸺,՛T  @& @ @ @ @ 'EyGUUm` @ @ @ @ @(Tw&z|* @v'Fv @ @ @ @ mU=Q}<|84Qۭ @JG @ @ @ @@WUHtO`zW;  @O @ @ @ @ TUFeY\^^z  @ @ @ @ @n e&fiwA$IջNKF@P5j!@ @ @ @ @KuP}<Gߏ A.=|g%@^' :7w @ @ @ @ 2E\^^ w;) O{  @ @ @ @ eN; T8_ @ @ @ @ 7ǑeY$II  @}@ @ @ @ @u$}^x2<Տ{ @ @ @ @ @e&F̥J0Q] @ @ @ @ @MOvA^'N0Q] @ @ @ @ @@Yqs{EQDǩT @// @ @ @ @ pH`^&HDCH @  @ @ @ @ 7S|1݄}~v+`og/ @vJ @*S@IDAT @ @ @UEy7  @MM:j @ @ @ @X1N#MHv &  @@z 2 @ @ @ @^.c>MT|7 @NT?& @ @ @ @:*PUUh4``zG  @3 @ @ @ @ l6}P=MT/2]zzO `i- @@-D @ @ @ @ @Yf繉T @gAu@ @ @ @ @f~`0$ILToR%@ @ @ @ @ &\bZϲ  @LT @ @ @ @h^.c6EG"ތJ @ @ @ @Vu0LToR%@ @ @ @ @ l64`0m\ @Au=@ @ @ @ @6j'm` @k @ @ @ @ @uP}6EIP% @?pB @ @ @ @_˘MŅ/B @? + @ @ @ @~X1L"˲HDP'_  @Bb @ @ @ @?xWWWQ: @@D @ @ @ @ꓢ<ϣ*Al\ @ dH @ @ @ @^.OP^LviB<?A @ @ @ @ @U=Q}<|84Q  @P, @ @ @ @ @;j<4ݯK @!AC* @ @ @ @ ,PUUlnnb4Eeqyy꺃 " L @ @ @ @@ʲf4z$'@NT?& @ @ @ @:,d?QBPý @'BF @ @ @ @@gmqyym'@T?G^ @ @ @ @&Pe|%fYi*޵p^ @uss @ @ @ @xxx("˲H$jyO{OOo!@j' @ @ @ @HzTL&1Տ{ @ @ @ @ @6>`QPK ` @ @ @ @ @@@TeYzToS&@ @ @ @ @ p\,kLHTP8  @E@P @ @ @ @ l6`I~ @{A5\ @ @ @ @ @WFoEUUY!@( o @ @ @ @Y>Nc83 @CT @ @ @ @ @E>yi_Lvcի_ 3  @ @ @ @ @~n1Dq|'@T?b @ @ @ @/_x<<5 @AS!@ @ @ @ @p8,#٥׫"BO @ @ @ @nooc>GTODPK  @ @ @ @ &D<۰  @ @ @ @ @www1"˲჉\ @Au=@ @ @ @ @6v"~z=A60u @z @ @ @ @0՛T  @& @ @ @ @ <>>h4Gߏ AuAhToR'@ @ @ @ @QEdYIw!hTo7 @ @ @ @n WWWQz  @SOQ @ @ @ @. էiyUU w8M@P4' @ @ @ @vՇ!٥ի!BO @ @ @ @(&7[ @ @ @ @ @uP}XD&7{ @LT @ @ @ @h'?>>d2,2 @ @ @ @ @ʲz$ǹT @: @ @ @ @uP\ @ @ @ @ @mqyymZ @ڀ @ @ @ @ʲ/_l64MՏS @^_,\ @ @ @ @ @CEYE$Tϡo&V. pL1 @ @ @ @#uP}2p8ܓ  @@z 2 @ @ @ @n { Aη @M@PMH @ @ @ @ A|YE Aw @D6 @ @ @ @ a,ׯ1N#MSA @ge+ @ @ @ @X.Q $1Q] @YgqL @ @ @ @@֛M|)>~nzR>A==  @ @ @ @4 ,W("<7QJ ,  @ @ @ @ ,Zc:F춚J0Q] @ @ @ @ @Eznp84QJ 0Q]# @ @ @ @ @@UUqs{(ǩT @// @ @ @ @ pH`nzYաo&V. pL1 @ @ @ @x:fYyn @" ~= @ @ @ @tY`ss> "Iջ N& ~] @ @ @ @tW`ZŴ(eTn+89 pR @ @ @ @ U2fYd~$]m&@T?G^ @ @ @ @(ZMTdz  @ @ @ @ @ l64`0k'&@T? @ @ @ @tK`Z'Ibz @T{ @ @ @ @@Tf&{zTwV @uss @ @ @ @^.c6FߏyNJV@Pr#@ @ @ @ @+:ƓIdYIw;' zA۹ @ @ @ @nxWWWQz7S @D@P蹗 @ @ @ @.'EyGUU]xH3An @ @ @ @e קMvi=[==  @ @ @ @4 qáT @gAu@ @ @ @ @fj<4o4QK ` @ @ @ @ @@@UUhYe7) @j @ @ @ @ e&fiwA$IՏs @u @ @ @ @x<~\ @ @ @ @ @X,qyy)ކNLT @ @ @ @8.Pelnnb:FǩT @// @ @ @ @ pH`x<,"IHƷZ{+y8&䘌u @ @ @ @Dԑz$<ߓ  @@z 2 @ @ @ @^.c>`7Q}7RDw @U@P @ @ @ @:.PէidzTx?8> p H @ @ @ @ Y,64M; N% ~ @ @ @ @tP`^&HD# @g  f; @ @ @ @Xo6ӧcT I'A4 @~ @ @ @ @ ,\(Df*U @N @ @ @ @ @@jtiFjz* @Du=@ @ @ @ @2D+e @^Du@ @ @ @ @UUmF &R!@X"@ @ @ @ @!f绉eYFKW6՚ [ @1'd @ @ @ @ @Yf繉Ꚃ p)J @ @ @ @ eA$1Q @i9E @ @ @ @@wճ,>w8U@PT) @ @ @ @vb~?zzW  @O @ @ @ @n 'xzzTf85 p9Z @ @ @ @ EF繉]lg&@T? @ @ @ @tK^z @D@P蹗 @ @ @ @.bտ}I  @}@ @ @ @ @fv<~\\\7s @ @ @ @ @(Ȳ,$ToS'@ @ @ @ @ ,p_]]EY\ @ @ @ @ @4<  @& @ @ @ @4 l}P}87&z|* @v'Fv @ @ @ @ m("꠺'@NT?6 @ @ @ @:+PEi70Q @JG @ @ @ @@ ꏏ1L"˲ A.v3 @g e3 @ @ @ @(2b>Iwx+B @ @ @ @@/..;xD @ @ @ @@mqyyzJ^@Pv$@ @ @ @ @/Pe|%fYi*NH7 @ @ @ @QEdYIDR>`i- @@-D @ @ @ @ @@I$~q/ @^@P]# @ @ @ @ @Y`ϟc07 7{ @LT @ @ @ @h<,^-` @ @ @ @ @ e_~ti R!@X"@ @ @ @ @!f1 "I!Y#@|/ k @ @ @ @*(~JPW"+ @ @ @ @ @? էi C pH@P5 @ @ @ @|>4MnzR~+A~ =|#@ @ @ @ @6fY\]]3 @CT @ @ @ @ @Y˗Ǒ繠 @" ~= @ @ @ @tYqTQe$z@[ @Z> @ @ @ @ @@mI7s @ @ @ @ @繠z: @0Q] @ @ @ @ @Y.fYdY>|0QK  @ @ @ @ &ncXDߏ^'N0Q] @ @ @ @ @Y~?Q}8ӓz3* @Du=@ @ @ @ @6F繉mX @ZDu}@ @ @ @ @fzzQL @A W @ @ @ @8$pwwbT[$sh[ K~rL: @ @ @ @mqqq!1 @mmB @ @ @ @t]`^x2,"IA7 @Fv @ @ @ @ mUT*ʲTv;8= p)J @ @ @ @ ez("JP @i9E @ @ @ @@w(T]ZzO`i- @@-D @ @ @ @ @Y`UOT#MToR%@<  @ @ @ @4 ,W瑦~^ @ @ @ @ @MFȲ,.//CPL P  @ @ @ @ p\,Xo61N 'I"~K ,  @ @ @ @ ,PqToR%@ @ @ @ @ &p\bKA6,u @@-`> @ @ @ @ @q,css44T?NBxTpE @ @ @ @C&qdYIDR>6՚ [ @1'd @ @ @ @ @ O&DP]g @Z[  @ @ @ @r<껑&w# @D6 @ @ @ @ q:>N#{z  @O@ @ @ @ @ e7QEi*Npp @,Al&@ @ @ @ @Db7Q}0D$&w8S@PL0  @ @ @ @zO>ǏMXO=) @}@ @ @ @ @fjEQD&7S @u @ @ @ @VuLH4V՛T  @& @ @ @ @\/1MT&X) @&k @ @ @ @*nnoc4`00Q8  @E@P @ @ @ @ l6}P=MT/2]z:J%@ x?9&c @ @ @ @^_l6zm''@NT?U> @ @ @ @*p\l6ߏDPm @9hK @ @ @ @@Vu0LTb83 py^v @ @ @ @ =fF 3Q{  @盹 @ @ @ @n ,WD}P=ILTwZ @5Qs @ @ @ @],DoOO]zJN@Pun"@ @ @ @ @;e̦BP;I  @ V} @ @ @ @tE`^x2,"Icb$I_XrtU奺w/²1f1{ ? ^ċ5 Y ɝUY]}By@ G$d#.OXٮ"g3#zչ8_vCG[-4QK ` @ @ @ @ @@@<= tBPL P  @ @ @ @ Y ˲8Y.c6F'I"K X@P]' @ @ @ @ @Z޽{qxxnիT  @& @ @ @ @ ͛7鄠z: @0Q] @ @ @ @ @`@e[ol6^'J D@Pw @ @ @ @X'p޽L&1 "IHn˺&}/ I&  @ @ @ @ QFˠa @) @ @ @ @ xqF Õz[ P' ^'N @ @ @ @@ʠ|>`iz;  @ZAZ"  @ @ @ @h@eկ~5iz=A @T @ @ @ @4RΝ;1b8F$&7 l,&@ @ @ @ @݋xW"sA- @T  @ @ @ @4N>Nc<޸ӷa @_͇ @ @ @ @hݻwc>G[:)ƪ维A]: BO @ @ @ @b6ޞT @: @ @ @ @oVh4TLBx" ; @ @ @ @*>#˲Hzn˺&}/ I&  @ @ @ @ X1ϣ 'I"1 @uuB @ @ @ @4]݉HP` @v9YE @ @ @ @@sܹ,AZ-՛ vNl+ u @ @ @ @4U,GMm&@TJ @ @ @ @)pDxl&@." ~-k  @ @ @ @hc?FMl{&@.. ~q3 @ @ @ @ @YDd"ެc[ @=%@ @ @ @ @ w܉UPѣGk6.K^ @R> @ @ @ @ @@YnիT  @z @ @ @ @u݋d $TS'@ @ @ @ @ P-pUP}oo/,TR%@ @ @ @ @ P'PNTN1"sA:0u @z @ @ @ @gggx<^-Lz^˭ ]o#@<YA @ @ @ @@޽$ʠ'@T2 @ @ @ @+PՏ LTol+8 R @ @ @ @ Dr0At:Tob'3 p!A qYL @ @ @ @@,{|>_Փ$ToX. /# @ @ @ @4J ;Qn 7mx!Ab! @ @ @ @$pvv7oތN :x[%@^\@P| @ @ @ @@e[ol6^'?r;$@ E @ @ @ @f{d2`ID]ڰ .{!@J' @ @ @ @HzT?<dDwQMTQ#@ @ @ @ @@ILz &  @@z 2 @ @ @ @XĴ>MTo|7 @Tߊ" @ @ @ @*y޾1MToh6 pAA YN @ @ @ @@*>*&gYI^wIAlNý @}@ @ @ @ @j߾u+fYF#իT  @u @ @ @ @0$1QK ` @ @ @ @ @@8Ihz: @Du=@ @ @ @ @j[EfWc @JAu}@ @ @ @ @j㓓q^ͥJT @ @ @ @X.q}?a&q @ @ @ @ @ǫꫠz^Nx ڵk0 @ @ @ @ @`@Tf1*&?:?T_c @Ag8B @ @ @ @n-1NGTN @W @ @ @ @O$c0D$+ @9AH\ @ @ @ @ @3eP "2AgtBX# % @ @ @ @<%PNT?Lb4EOxKX+ E @ @ @ @'pk;AbR;Fl- @x>y/ @ @ @ @xNผ~pDt\ @T_ @ @ @ @X|>^jS8 @ Sq @ @ @ @a1Qnz5* @Du=@ @ @ @ @:2>NcP4TS'@ @ @ @ @ Y ˲8};&Iz=AT* @'O,#@ @ @ @ @:E1Q}RLT$\#@<-  @ @ @ @x^dׯǕ+W"/&'yz~˻"}3 ^zW  @ @ @ @ 8&IF#E7 @J@PJG @ @ @ @''1NER+ @55@ @ @ @ @4^bbx<6QJ@P}+& @ @ @ @h@qzvp84Q}` @/f9 @ @ @ @X.eY$Ez=%A]: BO @ @ @ @~֭f1LTR%@<T  @ @ @ @~<'\ @ @ @ @ @ܹ> j ׁ @LT @ @ @ @8;;z5* @Du=@ @ @ @ @:w&8??TS'@ @ @ @ @ P-pߏhdz5* @ీN @ @ @ @ @@@9Q}2W3 @? @ @ @ @ܹGGGG"ɋ׺/ ˒ @&'d\'@ @ @ @ @cn k  @@z: @ @ @ @Mw^L& $z  @zAz#+ @ @ @ @hݻwWAȲLP` @6(YC @ @ @ @@ʉ4FQy.fw @`;A휬"@ @ @ @ @gggx<^!$EZ=%A]: BO @ @ @ @~~3c<Gg&Ws @ @ @ @ @/Aȋ  @ @ @ @ @ @@@qzt5Q}0DTR"@5 @ @ @ @6 dY2iA)\~E}# P-G @ @ @ @eP ~mAu-ATR'@ @ @ @ @"nEӉvKP` @[ YB @ @ @ @@c,ۧ1NE#fq @`{A$@ @ @ @ @2b0D$k(v4  P x> @ @ @ @,PFO'qxx(")T B( @ @ @ @Nj&W3 @? @ @ @ @ELgR!FxZ@Pi  @ @ @ @ @eqvL&z  F@P} K @ @ @ @xJ`q\LTNc8F$&?e- @`Z  @ @ @ @ rׯǕWD9a=ɋ{x# @g<< @ @ @ @<'p||$F㑉@X# % @ @ @ @<%prr4zꪉOxKX' N5 @ @ @ @<X/V㱉OX#@lTlB @ @ @ @<۱pb @) @ @ @ @ xrT/'gY7% @uuB @ @ @ @4]V̦G+ Aw @D @ @ @ @ p?؏pI~} @` A-,!@ @ @ @ @1Nb0D'@Tߊ" @ @ @ @,X,b6Eߏ4Top+: R @ @ @ @ TDhٹMm&@TJ @ @ @ @)<]LTof5 p!A qYL @ @ @ @@Oc2Ie @ @ @ @ @ l>[6L\X@Pd>@ @ @ @ @@ELgnvK  @ @ @ @8Ya HDPQo @  @ @ @ @ 88<ȲLPAgo @   @ @ @ @ rd2hy 7mxaAA @ @ @ @"X,b2}T/k.K^ @R> @ @ @ @ @@Ix<2.^JT @ @ @ @8>9|^oRPL ` @ @ @ @ @frߏ`ND\* @: @ @ @ @,rtTO)\~E}# P-G @ @ @ @eP ~mAu-ATR'@ @ @ @ @"nEӉvKP` @[ YB @ @ @ @@c,ۧ1NE#fq @`{A$@ @ @ @ @2b0D$k(v4  P x> @ @ @ @,PFO'qxx(")T B( @ @ @ @Nj&W3 @? @ @ @ @ELgR!FxZ@Pi  @ @ @ @ @eqvL&z  F@P} K @ @ @ @xJ`q\LTNc8F$&?e- @`Z  @ @ @ @ rׯǕWD9a=ɋ{x# @g<< @ @ @ @<'p||$F㑉@X# % @ @ @ @<%prr4zꪉOxKX' N5 @ @ @ @<X/V㱉OX#@lTlB @ @ @ @<۱pb @) @ @ @ @ xrT/'gY7% @uuB @ @ @ @4]V̦G+ Aw @D @ @ @ @ p?؏pI~} @` A-,!@ @ @ @ @1Nb0D'@Tߊ" @ @ @ @,X,b6Eߏ4Top+: R @ @ @ @ T2i 8??7Q` @[YI @ @ @ @@3~>;3n&@.$ ~!.  @ @ @ @hvZ x풃 .{!@J' @ @ @ @+j8??Aj/U @ @ @ @ @ @@@Tߏnv[PK  @ @ @ @ P#/~1^z2 @@P] @ @ @ @ @F~⻾b8F^$y̥$: @ @ @ @XzI?qNT׾:W_}ՙ @vBN @ @ @ @ @`^Kθ[#@vI@P}Ný @ @ @ @ }FiMT3rO @ ؁ @ @ @ @vNf1QJ#Mw {w& @ @ @ @xwtۮ  @ @ @ @ xs8.gYVTlA} @@:!u @ @ @ @.*ޏVy7!T7 @ @ @ @f OEgnYn'@TF @ @ @ @,>+H[i$,]ۥp/ @@)D @ @ @ @ @Zjz݊(W{ @ @ @ @ @j'/&A$TR&@ @ @ @ @#"ϊzeyg.]vRח @6 x>$: @ @ @ @ QջWzzqIP]g @jk  @ @ @ @hEPJTo)uA7 @^@P  @ @ @ @->?1VD^1Q` @[ YB @ @ @ @@c"Jw"T̥Bx,  @ @ @ @ P-;z1FWk @ Aum@ @ @ @ @jUPJ/N^ͥJT @ @ @ @Ȳ,>*:"^LT/rU`j @RDu}@ @ @ @ @j7?#z* @T @ @ @ @O~z5QK#"ѣy Y @ీ@ @ @ @ @j2޽ҏV'$IիT  @& @ @ @ @ | ꉉu^ @0Q] @ @ @ @ @`F|~Ot^)'꛵T @k @ @ @ @l/DJ?ڭ$"|:W6)';un @ @ @ @/EgNDo~󛗓@-,#@.MɥQ" @ @ @ @ʁ?_ H$Aot @ _:/$@ @ @ @ @D ˲~Gw܍Hz*mr|nx/Sw @ @ @ @ ?jzJ#@v@@P}- @ @ @ @ ~)~?hڑ҈|Wm @O|N @ @ @ @@@e3\իWw l'>'@ @ @ @ @@To%A'N9M^TM,}r @!d7] @ @ @ @ ʀzq;FHIIS/dGGGyx˻맾Y) o  @|& @ @ @ @s IDATMEa{o|&u8: K|8tP\\Х E,34~--:`{M8'd8ß? >9?)f ㌧7m^+^U9*~T˜6&*l @|O@ @ @ @ @mo wѴTz&k>dN^߼v`+3 pE ) @ @ @ @BEx~/~>;hCHQaLϘz^k ?xoϚxO\.T l68Noxe @p>ū @ @ @ @_"ԟi|1rG3j;E}hOz=|ʀzۡnIENDB`django-import-export-4.0.9/docs/_static/images/select-for-export.png000066400000000000000000000414551463433610200255430ustar00rootroot00000000000000PNG  IHDRQ@ iCCPICC ProfileHTSϽ!B5&H'ZFHB%@##02X * bA@ 6,03oY'[;YfIl( M%pȇ؜L#44 6nh߲WpyP4O )G$UWfaE12 ·?cӜ0˟gr"˜SIlIӲ9|iVB@nii\#lOOKj&Hk|)Ϟe^LQ*{yR%s=EJ!^) CXɟ$_s2qse{Hq%Ŋc^wäL}%)x%=ق9L aJbIt~si9%ݛ'=;{~~1_33F:=)eyJ{RCT_i<3;\7 y J0:ǀ l ɚ>3]J,'eţ4+;)c螏%poJ|ɑ[@1D=COa9Ԁ6&<72g`9$`%X6PԀ@+8 ΃ˠ#9A8 Q!5H2!AP BBh *JJhT CW^4CO0 &l/0#e0΀s|x+\‡< ÃsxP2(e.EG1Q!8T"JZ*DjQMvTjES4퇎Dsubt%݂BObM9`L9 $3ybXG6]-6c;a$SÙ\q!86. Wۍ;;Í>e:x>/ >(~ O0$8B\*B p0B"RDWb1XAl"^">$ѓqY,# S!sT̐GɌ$-%IH[IH{7d2وA#gȏd,Yz*>ٗr9C9r\rr7^luUORkJ%RLi\) .( SQT}*ʡn^(bYɊEG{'씢r( *Yʩ%ǔ(RRaT4WPP6~RymWkU{V7S_R}%.Bc5aM30՚5kNjikjvk]z]}V{\#)9DcRi ]M]?]>)=cH>};0~~XV=kR@x@e@@q`{#aa05Bv< 5e1vqOìքuSW7(xi)쌒ZU>+4z0faژXXAl[..*`%;,_Z2e9ˮ.W_ 1 !Zd+:a?F\f㚡Au_~dč)ͳ+{)zS{V|k,-첹{{nٽk!ZUQybNĭ=%%{a R[:#hGK;ە"hm{ϕIUU՚[뱷Fӏk5-ߏݟ遨]??~CCuau4JFI᥇o:dѴY(8*9 8y~ԓ-P˪֤ضS:]ObˡӺ()9K<۹s;Wt>s{.\r.F׹+WN_uzZkCwu'dCO m7n.=w׭˷Y{Dw`^WO=ǚk3ya̐'O s:c6c}o>[lԋ?(T4yyO?OLڛCovNN>~n}u>EZ_~KMg Yp"^ &%ZzƠY?C?ޞ17-}I 7 AH 9;ѧ-+̘(/%?lVez 7/ hbeXIfMM*i&PASCIIScreenshotł)=iTXtXML:com.adobe.xmp 197 Screenshot 421 1 E5IDATxEڇ_rH ""x虑C3ܩwg>:.:҅nV\$9L;2Nd Xy ȋ>?چ}~c-LJ>"& ]E @8sx L-͑;w͛7/Y|7|3;wڤIlȐ!6yXt<1QF￟E҆ >={R>sCmf|m޼9i*l2c';h"cBCb .6Dwߵ?ܭ苕CsIv+أ>/^l5nؚ4i>Y|qkffͲ^x]Ɉ_~-B˞y8qb8;G"-/#>|=ڭرcʡܮ 7&_4н{;XFbKt$//)Eꡇ6mXٲe8J.lf>h~d>3fp۹α:ٰhk޼i|vZqxS$Ɖ]vYz2-+Wt}99H:x<+AX5laִidV'L0Uᄈ J9M7ws;c9:Ɯ cƌqf{"D)魷2S?y&/ 0 TaVZb1=־}{_~%A}13(B5D} '<, 2@~ / cQX^K1_~%_nG}櫯r%/ %8_+p#|3+4h`_nF\OU\ܑ_jˣB dPQ:u` 8=4>7O?ć?v/ʨUVviƜ2es 2bꪫܨ!obŊ#p8сN:CxqN->σYܞK֣G`<9gp/W֭]^z;m4L'kqV}ٮm}oaX(:t;ΟJu) x}E>#^;ӱe?9˟N]vg\'{Q`k C|t|.kH _4seQ>>'=k&n2~]婧r);.8{:qсg%s!IJF]]xByFr=^8e :;Ymzhkap/ܓU.lJ*aӻwo[ntu8aUbHa`"4cz:… ;8cb0ns}c=𡡱Ȏ?xב1!W8 p`Iˆ bKȼg+kLpĸhѢNp\^X>t?Ɲ@GX>oi@Fz~"E81A!2sXqzr9,V(tZ=sNTx}]2fΜܿaa#LE8x}gڙgupR &X ̕RwޗKg3W7pEWKyeǠ V`E[HS}"+n1R# tX>Fx`EXxvP֬YsɃු(ˠ.#óڜ0%}//gPG8+ '(+}_L-U.m ?!aIADL4tF˵

donqᨣrixhK(Q<\>0ZAxqqСCmǎCc$ y, <oK_:PF|~D螀 ,KD$-Fhs_~9[I3avⲈ'J5I+WvmPoDNxSg:x5 p*LjX֫O&b|Զm{ʼn8ߙ q;$t=;X~y/Fe(*ȰڧoZ0G ?B׼#V9矩 ?0bph;fV}~}\l &"~6~nw6 X 4'~`hGa>>BSrz u5 wԍNw ."9ѩ0Osx[ Q= 5 py@P"^P- {rqx % |V>>H}Cum1bA"C)UcPĈOv󁼃 ,H|lļ#d0 ~Mp!i0c'{d0A .n}5&`~::uoqa2>%=ұſ7>VO\ؐˎ-Ϡ e= k ȸ<#u%/yit8tNakxFotf}GO;ˋ IWDgIvg5:0XS *% @:Wy~w˒9)|MNtpc4s`ti 2 ׁ}؄?Ǿ=xxq2G3ťE™ʥl@,<9d %F @d>'Ȁ//Ir^NF^v:>ҢLtL4С6NOpѩR-}?u/3_:uC’ȸu^ԏ x2VeH'[+6j:Fv /A ~}#Ni  *eyl@:OGLJ}y%۫JB:\D\Q`"Kt `m :xh`: ѹщzKkx.r&bW/&/?:rzBM1xHy뙀b^,*sԛ/c,p@FйgP+y"!=q[X2_ڪo߾ԍ@|Q[.2b=Y/&|-[? }S{,_u6qQʍcY}tX >hFk#Vp#3܂3NV;ptJ+Vytlah| \\à =usp]/x}9;#X(q~PY ŊR :>.tR4){ q̵::ҴJb&HeAz\jqfi6V]ck2Lxy;k V#C|+\SK?fKnzj?BL?+XAw7xD  ӏ^^Smzm& Q" ]R5*#" D)^D@D)CM@_w/" IE@T͡ʈ@& Q" QJPeD@D (݋@R(%Us2" " dYoD@D@D Q23Cgd " " "(r%0RD(%0RD(%0RD(%0 }y6^چn .{IGVJi@D@D oHȗg dmڴ.]ĥ7vX:u/nZ%BJ t鱨v3D@D@ Qmhׯ_oim͚5o߾vk* SJ7n;RB WRJ &؇~h۷ow5kִ믿ʔ)3\{5-ٷo_+P2c'xm޼>+[q.W_)S]we+WvC Ξ|I{?SV`ʸvE]Ih"{ǬvvmOITZՕӾ$#d[l 8Fr.Zha'OaÆ<|:{YSH+D>I"3gΌ{+m̘1Xlԑ}|ݻ>gq;?" "w:t`ZruCꫯp|VbEWX1O BFVxb!ܾٳy7mϟ o>d$EEk޼Rhs'̙vfp!@f֧A4|<[kq$|O_G}z-R8ԫWʗ/#R_fy^XFͪ4\vXLVa}]wpqܹs =KK ͚5s?x\&1p]8wOϱW ez>-4c A$&9%:]Q #}Vl ؕW^[nVO80 .p p/]ի͞=ۉ[Æ $Dv#E c9 NiΝ;ĉ1,,`_BRv$ܓVD $gro߭[J.mg~cSH(Yt@~%kE@D 7(VSE@D (цm@n$ Qʍ:@% Qʣ H@uO" "⾋wלQȎiX gmb^SP;mƝmbH_7ͻSo ,j+M[b|t='Xۦ cWgޟk_ڞծZ2fd' 8-@ž,O탯̷` >-jk7팙&?[d3oAwk\wKmԵM~RX;k[Ebvq\rI+S,Ҥ~&L_o\zZN@H(q~w{Az}pbVxŶ|ov|VAK&+Lte||X7[7۵kVD@@BE[E"zڔ?KGjaUNlU*;1b ,Bʳ{!llwZkQta#8šlm=֨Vi.kqu>ko{*Xlz6u{즶68&NoFnyf~lU$;,t7ݾAe 8-e^A Ag/?WqɇEo϶/'N+jٴ/L5lq"6Yn!I~s}>q5Uz_ùo8V?n֢-p6;C۴mi6E|ĺlŋOǮ#-wwlV\wojX!vD@D $RXe!E %VT\9r&ظLjbMf jlCBU*{tM%ğ֩K_,Xğ:xte{jkݨ\$n9+9FOY|>nu xvi*&PQ!/Lލ DX j]{Rqٍ˷*J]"p>1"5eFw,X@e˷)T'X5DhV7EJE(R56XE " y@E PK~C2ëX3VurZR^QM9X#wlJ%\e.U_,D Ԭzpe޲ a`h1eXêW.n;[wYЊ?aԟiPD@r@BDBlZHOҤn_N$ժ"0o"]sb?b Ut[lmtk۸ w ۙk9WEyuJ8H* Yo٥Whoe'BX<R|FJ!" "M2+WVϦjH C?3sE@D }]U@\@D@D HK@dRvV9" " q H"R" Q.*GD@D . }y6nn^چn .{IGVJi@D@D oHȗg dmڴ.]ĥ7vX:u/nZ%BJ t鱨v3$ص;*y q4IY"MZ M[>mYn2\Ġ~CFM{a*K3{ߞnTL3$|IVbS*2F3u=v۩ӎ$@/f/۽{-[Vݜ7{"c[ɠ/ۄ zZŲl} JE'1|DL+b];YU(WW(W:S",2[pƭۜ nXî:-UFVbXH mis]ܹ۞|?E,[ԫa:4╯$'-wz ro`!g8km۹֬lXUlÖm>k۲ulҵMZ%!˜vvVia?/\no|>~]ʕ,n]Z5l󗯲ꮝ6`{VA .vinC;CScBכ#m꼥kR|WXbE]|]#.9(x!dWmpV.][7_I3{*a;ީq޲UOE+[Cv]\Xku# 1M=Oŋj]0w}i_8רdtna󗭵;_f7l6k6z/k;}3+t3~jW)urRaKVos\}2vKI횺k+n3kgvlz9‰X~Yc׷M~‰]/ iy'AlYyoz+Y~8lߑ_ݰ-_ĺnlnw"u.ۼm3h-cmwS;9U6SN_RbrR`!Uq9VYe߻:{B`/tN,Ze X#|jL:?9Y+`fX6=:HիVt".m͆-vvA]ʚ_ ]Wpnڶf.\kmMnزݎkNhȝ4{{uw]YDW e3X>ib%c*\ٽ2pG,@B*|Ec Ǩ@(XhXHGݰQ.nazTmr׮uX*BݖmVp¶10$8*ZGUtD@_κM[r20-X.QܖIa9p1^tr(PREX'n8_^>:2gU3ppAw2%xJTL}G eSDfpV ,’-s#U*:7ڊ@ Vb@R%m歩]zXJOYKvg\+:Kϴuoل +.‹XSw\`ݝܡYpm+ɧ֮Ц-Z9l4{o.IG !OK -HaK0S:Z:US<0?ԱICEX`.ii0GX0S'O=zn OZؼ^:;좨܇7yǷv!Jra:UpB7lV(>*`nf˔]Zڰk퐼4[a>k_}(朮y +_]{~7[5E(WAD@ $D-;~nСv >hCq[#BN :˛.8jUh`#DOw` ?թnן lg!kZ-en*p1GOF)|)6;n83Ǘ}jk?T\v"  [K)6f/KWeZ`Z(RF)@or$a+c8H@tD@D@rD)@ŋ$ Q:B{" " 9L@ E@D@(d=& QP" "  d6lHױf=YJ㦫D@D@@ C萀DRЎ@N(t |RvD@D@rD)[@勀DH"(#" "$J9*_D@D B@A& QP" "  툀4RN(EPhGD@D HrT@D)B;" " 9M@-E@D@"$Ji %Kg}f_|\2{}lѩ?ǏzHе" " D CzF4f[ڭ\ e˖Yɒ%rBz؅ S*V]|VbEwԸqUVԤIYfvwX x,_ܥWmɆx㍶zj{ݹ+VSO=euqv شi) Az' w 7`E^x . u " "mb)ko>{駭` ׫W?|շo_:uM>ݪWn?]z֦Mw~v}ڵk]ŋەW^iXd3k,'[v#+Z5iĥgIAD@D g\lY!iX+`_. This provides a convenient interface for importing and exporting Django objects. Please install and run the :ref:`example application` to become familiar with Admin integration. Integrating import-export with your application requires extra configuration. Admin integration is achieved by subclassing :class:`~import_export.admin.ImportExportModelAdmin` or one of the available mixins (:class:`~import_export.admin.ImportMixin`, :class:`~import_export.admin.ExportMixin`, :class:`~import_export.admin.ImportExportMixin`):: # app/admin.py from .models import Book from import_export.admin import ImportExportModelAdmin class BookAdmin(ImportExportModelAdmin): resource_classes = [BookResource] admin.site.register(Book, BookAdmin) Once this configuration is present (and server is restarted), 'import' and 'export' buttons will be presented to the user. Clicking each button will open a workflow where the user can select the type of import or export. You can assign multiple resources to the ``resource_classes`` attribute. These resources will be presented in a select dropdown in the UI. .. _change-screen-figure: .. figure:: _static/images/django-import-export-change.png A screenshot of the change view with Import and Export buttons. Importing --------- To enable import, subclass :class:`~import_export.admin.ImportExportModelAdmin` or use one of the available mixins, i.e. :class:`~import_export.admin.ImportMixin`, or :class:`~import_export.admin.ImportExportMixin`. Enabling import functionality means that a UI button will automatically be presented on the Admin page: .. figure:: _static/images/import-button.png :alt: The import button When clicked, the user will be directed into the import workflow. By default, import is a two step process, though it can be configured to be a single step process (see :ref:`import_export_skip_admin_confirm`). The two step process is: 1. Select the file and format for import. 2. Preview the import data and confirm import. .. _confirm-import-figure: .. figure:: _static/images/django-import-export-import.png :alt: A screenshot of the 'import' view A screenshot of the 'import' view. .. figure:: _static/images/django-import-export-import-confirm.png :alt: A screenshot of the 'confirm import' view A screenshot of the 'confirm import' view. Import confirmation ------------------- To support import confirmation, uploaded data is written to temporary storage after step 1 (:ref:`choose file`), and read back for final import after step 2 (:ref:`import confirmation`). There are three mechanisms for temporary storage. #. Temporary file storage on the host server (default). This is suitable for development only. Use of temporary filesystem storage is not recommended for production sites. #. The `Django cache `_. #. `Django storage `_. To modify which storage mechanism is used, please refer to the setting :ref:`import_export_tmp_storage_class`. Your choice of temporary storage will be influenced by the following factors: * Sensitivity of the data being imported. * Volume and frequency of uploads. * File upload size. * Use of containers or load-balanced servers. Temporary resources are removed when data is successfully imported after the confirmation step. .. warning:: If users do not complete the confirmation step of the workflow, or if there are errors during import, then temporary resources may not be deleted. This will need to be understood and managed in production settings. For example, using a cache expiration policy or cron job to clear stale resources. Customizable storage ^^^^^^^^^^^^^^^^^^^^^ If using :class:`~import_export.tmp_storages.MediaStorage` as a storage module, then you can define which storage backend implementation is used to handle create / read / delete operations on the persisted data. If using Django 4.2 or greater, use the `STORAGES `_ setting to define the backend, otherwise use :ref:`import_export_default_file_storage`. You can either supply a path to your own custom storage backend, or use pre-existing backends such as `django-storages `_. If no custom storage implementation is supplied, then the Django default handler is used. For example, if using django-storages, you can configure s3 as a temporary storage location with the following:: IMPORT_EXPORT_TMP_STORAGE_CLASS = "import_export.tmp_storages.MediaStorage" STORAGES = { "default": { "BACKEND": "django.core.files.storage.FileSystemStorage", }, "import_export": { "BACKEND": "storages.backends.s3.S3Storage", "OPTIONS": { "bucket_name": "", "region_name": "", "access_key": "", "secret_key": "" }, }, } .. _format_ui_error_messages: How to format UI error messages ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Admin UI import error messages can be formatted using the :attr:`~import_export.admin.ImportMixin.import_error_display` attribute. .. _admin_ui_exporting: Exporting --------- As with import, it is also possible to configure export functionality. To do this, subclass :class:`~import_export.admin.ImportExportModelAdmin` or use one of the available mixins, i.e. :class:`~import_export.admin.ExportMixin`, or :class:`~import_export.admin.ImportExportMixin`. Enabling export functionality means that a UI button will automatically be presented on the Admin page: .. figure:: _static/images/export-button.png :alt: The export button When clicked, the user will be directed into the export workflow. Export is a two step process. When the 'export' button is clicked, the user will be directed to a new screen, where 'resource', 'fields' and 'file format' can be selected. .. _export_confirm: .. figure:: _static/images/django-import-export-export-confirm.png :alt: the export confirm page The export 'confirm' page. Once 'submit' is clicked, the export file will be automatically downloaded to the client (usually to the 'Downloads' folder). It is possible to disable this extra step by setting the :ref:`import_export_skip_admin_export_ui` flag, or by setting :attr:`~import_export.admin.ExportMixin.skip_export_form`. .. _export_via_admin_action: Exporting via Admin action -------------------------- It's possible to configure the Admin UI so that users can select which items they want to export: .. image:: _static/images/select-for-export.png :alt: Select items for export To do this, simply declare an Admin instance which includes :class:`~import_export.admin.ExportActionMixin`:: class BookAdmin(ImportExportModelAdmin, ExportActionMixin): # additional config can be supplied if required pass Then register this Admin:: admin.site.register(Book, BookAdmin) Note that the above example refers specifically to the :ref:`example application`, you'll have to modify this to refer to your own model instances. In the example application, the 'Category' model has this functionality. When 'Go' is clicked for the selected items, the user will be directed to the :ref:`export 'confirm' page`. It is possible to disable this extra step by setting the :ref:`import_export_skip_admin_action_export_ui` or :ref:`import_export_skip_admin_export_ui` flags, or by setting :attr:`~import_export.admin.ExportMixin.skip_export_form`. .. note:: If deploying to a multi-tenant environment, you may need to use the to ensure that one set of users cannot export data belonging to another set. See :meth:`~import_export.admin.ExportMixin.get_valid_export_item_pks`. .. _export_from_model_change_form: Export from model instance change form -------------------------------------- When :ref:`export via admin action` is enabled, then it is also possible to export from a model instance change form: .. figure:: _static/images/change-form-export.png :alt: export from change form Export from model instance change form When 'Export' is clicked, the user will be directed to the :ref:`export 'confirm' page`. This button can be removed from the UI by setting the :attr:`~import_export.admin.ExportActionMixin.show_change_form_export` attribute, for example:: class CategoryAdmin(ExportActionModelAdmin): show_change_form_export = False Customize admin import forms ---------------------------- It is possible to modify default import forms used in the model admin. For example, to add an additional field in the import form, subclass and extend the :class:`~import_export.forms.ImportForm` (note that you may want to also consider :class:`~import_export.forms.ConfirmImportForm` as importing is a two-step process). To use your customized form(s), change the respective attributes on your ``ModelAdmin`` class: * :attr:`~import_export.admin.ImportMixin.import_form_class` * :attr:`~import_export.admin.ImportMixin.confirm_form_class` For example, imagine you want to import books and set each book to have the same Author, selected from a dropdown. You can extend the import forms to include ``author`` field to select the author from. .. note:: Importing an E-Book using the :ref:`example application` demonstrates this. .. figure:: _static/images/custom-import-form.png A screenshot of a customized import view. Customize forms (for example see ``tests/core/forms.py``):: class CustomImportForm(ImportForm): author = forms.ModelChoiceField( queryset=Author.objects.all(), required=True) class CustomConfirmImportForm(ConfirmImportForm): author = forms.ModelChoiceField( queryset=Author.objects.all(), required=True) Customize ``ModelAdmin`` (for example see ``tests/core/admin.py``):: class CustomBookAdmin(ImportMixin, admin.ModelAdmin): resource_classes = [BookResource] import_form_class = CustomImportForm confirm_form_class = CustomConfirmImportForm def get_confirm_form_initial(self, request, import_form): initial = super().get_confirm_form_initial(request, import_form) # Pass on the `author` value from the import form to # the confirm form (if provided) if import_form: initial['author'] = import_form.cleaned_data['author'].id return initial admin.site.register(EBook, CustomBookAdmin) In order to save the selected author along with the EBook, another couple of methods are required. Add the following to ``CustomBookAdmin`` class (in ``tests/core/admin.py``):: def get_import_data_kwargs(self, request, *args, **kwargs): """ Prepare kwargs for import_data. """ form = kwargs.get("form", None) if form and hasattr(form, "cleaned_data"): kwargs.update({"author": form.cleaned_data.get("author", None)}) return kwargs Then add the following to ``CustomBookAdmin`` class (in ``tests/core/admin.py``):: def after_init_instance(self, instance, new, row, **kwargs): if "author" in kwargs: instance.author = kwargs["author"] The selected author is now set as an attribute on the instance object. When the instance is saved, then the author is set as a foreign key relation to the instance. Further customization --------------------- To further customize the import forms, you might like to consider overriding the following :class:`~import_export.admin.ImportMixin` methods: * :meth:`~import_export.admin.ImportMixin.get_import_form_class` * :meth:`~import_export.admin.ImportMixin.get_import_form_kwargs` * :meth:`~import_export.admin.ImportMixin.get_import_form_initial` * :meth:`~import_export.admin.ImportMixin.get_confirm_form_class` * :meth:`~import_export.admin.ImportMixin.get_confirm_form_kwargs` The parameters can then be read from ``Resource`` methods, such as: * :meth:`~import_export.resources.Resource.before_import` * :meth:`~import_export.resources.Resource.before_import_row` .. seealso:: :doc:`/api_admin` available mixins and options. .. _customize_admin_export_forms: Customize admin export forms ---------------------------- It is also possible to add fields to the export form so that export data can be filtered. For example, we can filter exports by Author. .. figure:: _static/images/custom-export-form.png A screenshot of a customized export view. Customize forms (for example see ``tests/core/forms.py``):: class CustomExportForm(AuthorFormMixin, ExportForm): """Customized ExportForm, with author field required.""" author = forms.ModelChoiceField( queryset=Author.objects.all(), required=True) Customize ``ModelAdmin`` (for example see ``tests/core/admin.py``):: class CustomBookAdmin(ImportMixin, ImportExportModelAdmin): resource_classes = [EBookResource] export_form_class = CustomExportForm def get_export_resource_kwargs(self, request, **kwargs): export_form = kwargs.get("export_form") if export_form: kwargs.update(author_id=export_form.cleaned_data["author"].id) return kwargs admin.site.register(Book, CustomBookAdmin) Create a Resource subclass to apply the filter (for example see ``tests/core/admin.py``):: class EBookResource(ModelResource): def __init__(self, **kwargs): super().__init__() self.author_id = kwargs.get("author_id") def filter_export(self, queryset, *args, **kwargs): return queryset.filter(author_id=self.author_id) class Meta: model = EBook In this example, we can filter an EBook export using the author's name. 1. Create a custom form which defines 'author' as a required field. 2. Create a 'CustomBookAdmin' class which defines a :class:`~import_export.resources.Resource`, and overrides :meth:`~import_export.mixins.BaseExportMixin.get_export_resource_kwargs`. This ensures that the author id will be passed to the :class:`~import_export.resources.Resource` constructor. 3. Create a :class:`~import_export.resources.Resource` which is instantiated with the ``author_id``, and can filter the queryset as required. Using multiple resources ------------------------ It is possible to set multiple resources both to import and export `ModelAdmin` classes. The ``ImportMixin``, ``ExportMixin``, ``ImportExportMixin`` and ``ImportExportModelAdmin`` classes accepts subscriptable type (list, tuple, ...) as ``resource_classes`` parameter. The subscriptable could also be returned from one of the following: * :meth:`~import_export.mixins.BaseImportExportMixin.get_resource_classes` * :meth:`~import_export.mixins.BaseImportMixin.get_import_resource_classes` * :meth:`~import_export.mixins.BaseExportMixin.get_export_resource_classes` If there are multiple resources, the resource chooser appears in import/export admin form. The displayed name of the resource can be changed through the `name` parameter of the `Meta` class. Use multiple resources:: from import_export import resources from core.models import Book class BookResource(resources.ModelResource): class Meta: model = Book class BookNameResource(resources.ModelResource): class Meta: model = Book fields = ['id', 'name'] name = "Export/Import only book names" class CustomBookAdmin(ImportMixin, admin.ModelAdmin): resource_classes = [BookResource, BookNameResource] .. _dynamically_set_resource_values: How to dynamically set resource values -------------------------------------- There are a few use cases where it is desirable to dynamically set values in the `Resource`. For example, suppose you are importing via the Admin console and want to use a value associated with the authenticated user in import queries. Suppose the authenticated user (stored in the ``request`` object) has a property called ``publisher_id``. During import, we want to filter any books associated only with that publisher. First of all, override the ``get_import_resource_kwargs()`` method so that the request user is retained:: class BookAdmin(ImportExportMixin, admin.ModelAdmin): # attribute declarations not shown def get_import_resource_kwargs(self, request, *args, **kwargs): kwargs = super().get_resource_kwargs(request, *args, **kwargs) kwargs.update({"user": request.user}) return kwargs Now you can add a constructor to your ``Resource`` to store the user reference, then override ``get_queryset()`` to return books for the publisher:: class BookResource(ModelResource): def __init__(self, user): self.user = user def get_queryset(self): return self._meta.model.objects.filter(publisher_id=self.user.publisher_id) class Meta: model = Book .. _interoperability: Interoperability with 3rd party libraries ----------------------------------------- import-export extends the Django Admin interface. There is a possibility that clashes may occur with other 3rd party libraries which also use the admin interface. django-admin-sortable2 ^^^^^^^^^^^^^^^^^^^^^^ Issues have been raised due to conflicts with setting `change_list_template `_. There is a workaround listed `here `_. Also, refer to `this issue `_. If you want to patch your own installation to fix this, a patch is available `here `_. django-polymorphic ^^^^^^^^^^^^^^^^^^ Refer to `this issue `_. template skipped due to recursion issue ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Refer to `this issue `_. django-debug-toolbar ^^^^^^^^^^^^^^^^^^^^ If you use import-export using with `django-debug-toolbar `_. then you need to configure ``debug_toolbar=False`` or ``DEBUG=False``, It has been reported that the the import/export time will increase ~10 times. Refer to `this PR `_. .. _admin_security: Security -------- Enabling the Admin interface means that you should consider the security implications. Some or all of the following points may be relevant. Is there potential for untrusted imports? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * What is the source of your import file? * Is this coming from an external source where the data could be untrusted? * Could source data potentially contain malicious content such as script directives or Excel formulae? * Even if data comes from a trusted source, is there any content such as HTML which could cause issues when rendered in a web page? What is the potential risk for exported data? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * If there is malicious content in stored data, what is the risk of exporting this data? * Could untrusted input be executed within a spreadsheet? * Are spreadsheets sent to other parties who could inadvertently execute malicious content? * Could data be exported to other formats, such as CSV, TSV or ODS, and then opened using Excel? * Could any exported data be rendered in HTML? For example, csv is exported and then loaded into another web application. In this case, untrusted input could contain malicious code such as active script content. You should in all cases review `Django security documentation `_ before deploying a live Admin interface instance. Mitigating security risks ^^^^^^^^^^^^^^^^^^^^^^^^^ Please read the following topics carefully to understand how you can improve the security of your implementation. Sanitize exports """""""""""""""" By default, import-export does not sanitize or process imported data. Malicious content, such as script directives, can be imported into the database, and can be exported without any modification. .. note:: HTML content, if exported into 'html' format, will be sanitized to remove scriptable content. This sanitization is performed by the ``tablib`` library. You can optionally configure import-export to sanitize Excel formula data on export. See :ref:`IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT`. Enabling this setting only sanitizes data exported using the Admin Interface. If exporting data :ref:`programmatically`, then you will need to apply your own sanitization. Limit formats """"""""""""" Limiting the available import or export format types can be considered. For example, if you never need to support import or export of spreadsheet data, you can remove this format from the application. Imports and exports can be restricted using the following settings: #. :ref:`IMPORT_EXPORT_FORMATS` #. :ref:`IMPORT_FORMATS` #. :ref:`EXPORT_FORMATS` Set permissions """"""""""""""" Consider setting `permissions `_ to define which users can import and export. #. :ref:`IMPORT_EXPORT_IMPORT_PERMISSION_CODE` #. :ref:`IMPORT_EXPORT_EXPORT_PERMISSION_CODE` Raising security issues ^^^^^^^^^^^^^^^^^^^^^^^ Refer to `SECURITY.md `_ for details on how to escalate security issues you may have found in import-export. django-import-export-4.0.9/docs/advanced_usage.rst000066400000000000000000001004001463433610200222250ustar00rootroot00000000000000============== Advanced usage ============== Customize resource options ========================== By default :class:`~import_export.resources.ModelResource` introspects model fields and creates :class:`~import_export.fields.Field` attributes with an appropriate :class:`~import_export.widgets.Widget` for each field. Fields are generated automatically by introspection on the declared model class. The field defines the relationship between the resource we are importing (for example, a csv row) and the instance we want to update. Typically, the row data will map onto a single model instance. The row data will be set onto model instance attributes (including instance relations) during the import process. In a simple case, the name of the row headers will map exactly onto the names of the model attributes, and the import process will handle this mapping. In more complex cases, model attributes and row headers may differ, and we will need to declare explicitly declare this mapping. See :ref:`field_declaration` for more information. Declare import fields --------------------- You can optionally use the ``fields`` declaration to affect which fields are handled during import. To affect which model fields will be included in a resource, use the ``fields`` option to whitelist fields:: class BookResource(resources.ModelResource): class Meta: model = Book fields = ('id', 'name', 'price',) Or the ``exclude`` option to blacklist fields:: class BookResource(resources.ModelResource): class Meta: model = Book exclude = ('imported', ) If both ``fields`` and ``exclude`` are declared, the ``fields`` declaration takes precedence, and ``exclude`` is ignored. In cases where a :ref:`custom column name` is used, declare the name of the model attribute in the ``fields`` list., not the column alias. .. _field_ordering: Field ordering -------------- The precedence for the order of fields for import / export is defined as follows: * ``import_order`` or ``export_order`` (if defined) * ``fields`` (if defined) * The order derived from the underlying model instance. When importing or exporting, the ordering defined by ``fields`` is used, however an explicit order for importing or exporting fields can be set using the either the ``import_order`` or ``export_order`` options:: class BookResource(resources.ModelResource): class Meta: model = Book fields = ('id', 'name', 'author', 'price',) import_order = ('id', 'price',) export_order = ('id', 'price', 'author', 'name') Where ``import_order`` or ``export_order`` contains a subset of ``fields`` then the ``import_order`` and ``export_order`` fields will be processed first. If no ``fields``, ``import_order`` or ``export_order`` is defined then fields are created via introspection of the model class. The order of declared fields in the model instance is preserved, and any non-model fields are last in the ordering. Model relations --------------- When defining :class:`~import_export.resources.ModelResource` fields it is possible to follow model relationships:: class BookResource(resources.ModelResource): class Meta: model = Book fields = ('author__name',) This example declares that the ``Author.name`` value (which has a foreign key relation to ``Book``) will appear in the export. Note that declaring the relationship using this syntax sets ``field`` as readonly, meaning this field will be skipped when importing data. To understand how to import model relations, see :ref:`import_model_relations`. .. _field_declaration: Explicit field declaration -------------------------- We can declare fields explicitly to give us more control over the relationship between the row and the model attribute. In the example below, we use the ``attribute`` kwarg to define the model attribute, and ``column_name`` to define the column name (i.e. row header):: from import_export.fields import Field class BookResource(resources.ModelResource): published = Field(attribute='published', column_name='published_date') class Meta: model = Book The ``attribute`` parameter is optional and if not supplied then the field will be skipped during import and export. It is possible to enable export for the field by declaring a :ref:`dehydrate` method. .. seealso:: :doc:`/api_fields` Available field types and options. Custom workflow based on import values -------------------------------------- You can extend the import process to add workflow based on changes to persisted model instances. For example, suppose you are importing a list of books and you require additional workflow on the date of publication. In this example, we assume there is an existing unpublished book instance which has a null 'published' field. There will be a one-off operation to take place on the date of publication, which will be identified by the presence of the 'published' field in the import file. To achieve this, we need to test the existing value taken from the persisted instance (i.e. prior to import changes) against the incoming value on the updated instance. Both ``instance`` and ``original`` are attributes of :class:`~import_export.results.RowResult`. You can override the :meth:`~import_export.resources.Resource.after_import_row` method to check if the value changes:: class BookResource(resources.ModelResource): def after_import_row(self, row, row_result, **kwargs): if getattr(row_result.original, "published") is None \ and getattr(row_result.instance, "published") is not None: # import value is different from stored value. # exec custom workflow... class Meta: model = Book store_instance = True .. note:: * The ``original`` attribute will be null if :attr:`~import_export.options.ResourceOptions.skip_diff` is True. * The ``instance`` attribute will be null if :attr:`~import_export.options.ResourceOptions.store_instance` is False. Field widgets ============= A widget is an object associated with each field declaration. The widget has two roles: 1. Transform the raw import data into a python object which is associated with the instance (see :meth:`.clean`). 2. Export persisted data into a suitable export format (see :meth:`.render`). There are widgets associated with character data, numeric values, dates, foreign keys. You can also define your own widget and associate it with the field. A :class:`~import_export.resources.ModelResource` creates fields with a default widget for a given field type via introspection. If the widget should be initialized with different arguments, this can be done via an explicit declaration or via the widgets dict. For example, the ``published`` field is overridden to use a different date format. This format will be used both for importing and exporting resource:: class BookResource(resources.ModelResource): published = Field(attribute='published', column_name='published_date', widget=DateWidget(format='%d.%m.%Y')) class Meta: model = Book Alternatively, widget parameters can be overridden using the widgets dict declaration:: class BookResource(resources.ModelResource): class Meta: model = Book widgets = { 'published': {'format': '%d.%m.%Y'}, } Declaring fields may affect the export order of the fields. If this is an issue, you can declare the :attr:`~import_export.options.ResourceOptions.export_order` attribute. See :ref:`field_ordering`. .. _modify_render_return_type: Modify :meth:`.render` return type ---------------------------------- By default, :meth:`.render` will return a string type for export. There may be use cases where a native type is required from export (such as exporting to Excel). If so, you can use the ``coerce_to_string`` parameter if the widget supports it. By default, ``coerce_to_string`` is ``True``, but if you set this to ``False``, then the native type will be returned during export:: class BookResource(resources.ModelResource): published = Field(widget=DateWidget(coerce_to_string=False)) class Meta: model = Book If you need different export formats for different file types, then the only way to do this at present is to declare multiple Resource configurations. For example, *ExcelBookResource*, *CsvBookResource*. For each custom Resource, You would need to declare Widgets with the ``coerce_to_string`` value set as desired. .. seealso:: :doc:`/api_widgets` Available widget types and options. Validation during import ======================== The import process will include basic validation during import. This validation can be customized or extended if required. The import process distinguishes between: #. Validation errors which arise when failing to parse import data correctly. #. General exceptions which arise during processing. Errors are retained in each :class:`~import_export.results.RowResult` instance which is stored in the single :class:`~import_export.results.Result` instance which is returned from the import process. The :meth:`~import_export.resources.Resource.import_data` method takes optional parameters which can be used to customize the handling of errors. Refer to the method documentation for specific details. Validation Errors ----------------- During import of a row, each field is iterated and any `ValueError `_ errors raised by Widgets are stored in an instance of Django's `ValidationError `_. Validation errors are retained within the :attr:`~import_export.results.Result.invalid_rows` list as a :class:`~import_export.results.InvalidRow` instance. If importing programmatically, you can set the ``raise_errors`` parameter of :meth:`~import_export.resources.Resource.import_data` to ``True``, which will mean the process will exit at the first row which has errors:: rows = [ (1, 'Lord of the Rings', '1996-01-01'), (2, 'The Hobbit', '1996-01-02x'), ] dataset = tablib.Dataset(*rows, headers=['id', 'name', 'published']) resource = BookResource() self.resource.import_data(self.dataset, raise_errors=True) The above process will exit with a row number and error (formatted for clarity):: ImportError: 2: {'published': ['Value could not be parsed using defined date formats.']} (OrderedDict({'id': 2, 'name': 'The Hobbit', 'published': 'x'})) To iterate over all validation errors produced from an import, pass ``False`` to ``raise_errors``:: result = self.resource.import_data(self.dataset, raise_errors=False) for row in result.invalid_rows: print(f"--- row {row.number} ---") for field, error in row.error.error_dict.items(): print(f"{field}: {error} ({row.values})") If using the :ref:`Admin UI`, errors are presented to the user during import (see below). Generic Errors -------------- Generic errors are raised during import for cases which are not validation errors. For example, generic errors are usually raised at the point the model instance is saved, such as attempt to save a float to a int field. Because generic errors are raised from a lower point in the stack, it is not always possible to identify which field caused the error. Generic errors are retained within the :attr:`~import_export.results.Result.error_rows` list as a :class:`~import_export.results.ErrorRow` instance. The ``raise_errors`` parameter can be used during programmatic import to halt the import at the first error:: rows = [ (1, 'Lord of the Rings', '999'), (2, 'The Hobbit', 'x'), ] dataset = tablib.Dataset(*rows, headers=['id', 'name', 'price']) resource = BookResource() result = resource.import_data( dataset, raise_errors=True ) The above process will exit with a row number and error (formatted for clarity):: ImportError: 1: [] (OrderedDict({'id': 1, 'name': 'Lord of the Rings', 'price': '1x'})) To iterate over all generic errors produced from an import, pass ``False`` to ``raise_errors``:: result = self.resource.import_data(self.dataset, raise_errors=False) for row in result.error_rows: print(f"--- row {row.number} ---") for field, error in row.error.error_dict.items(): print(f"{field}: {error} ({error.row})") Field level validation ---------------------- Validation of input can be performed during import by a widget's :meth:`~import_export.widgets.Widget.clean` method by raising a `ValueError `_. Consult the :doc:`widget documentation ` for more information. You can supply your own field level validation by overriding :meth:`~import_export.widgets.Widget.clean`, for example:: class PositiveIntegerWidget(IntegerWidget): """Returns a positive integer value""" def clean(self, value, row=None, **kwargs): val = super().clean(value, row=row, **kwargs) if val < 0: raise ValueError("value must be positive") return val Field level errors will be presented in the :ref:`Admin UI`, for example: .. figure:: _static/images/date-widget-validation-error.png A screenshot showing a field specific error. Instance level validation ------------------------- You can optionally configure import-export to perform model instance validation during import by enabling the :attr:`~import_export.options.ResourceOptions.clean_model_instances` attribute. You can override the `full_clean() `_. method to provide extra validation, either at field or instance level:: class Book(models.Model): def full_clean(self, exclude=None, validate_unique=True): super().full_clean(exclude, validate_unique) # non field specific validation if self.published < date(1900, 1, 1): raise ValidationError("book is out of print") # field specific validation if self.name == "Ulysses": raise ValidationError({"name": "book has been banned"}) .. figure:: _static/images/non-field-specific-validation-error.png A screenshot showing a non field specific error. .. _import_model_relations: Importing model relations ========================= If you are importing data for a model instance which has a foreign key relationship to another model then import-export can handle the lookup and linking to the related model. Foreign Key relations --------------------- ``ForeignKeyWidget`` allows you to declare a reference to a related model. For example, if we are importing a 'book' csv file, then we can have a single field which references an author by name. :: id,title,author 1,The Hobbit, J. R. R. Tolkien We would have to declare our ``BookResource`` to use the author name as the foreign key reference:: from import_export import fields, resources from import_export.widgets import ForeignKeyWidget class BookResource(resources.ModelResource): author = fields.Field( column_name='author', attribute='author', widget=ForeignKeyWidget(Author, field='name')) class Meta: model = Book fields = ('author',) By default, ``ForeignKeyWidget`` will use 'pk' as the lookup field, hence we have to pass 'name' as the lookup field. This relies on 'name' being a unique identifier for the related model instance, meaning that a lookup on the related table using the field value will return exactly one result. This is implemented as a ``Model.objects.get()`` query, so if the instance in not uniquely identifiable based on the given arg, then the import process will raise either ``DoesNotExist`` or ``MultipleObjectsReturned`` errors. See also :ref:`advanced_usage:Creating non existent relations`. Refer to the :class:`~.ForeignKeyWidget` documentation for more detailed information. Many-to-many relations ---------------------- ``ManyToManyWidget`` allows you to import m2m references. For example, we can import associated categories with our book import. The categories refer to existing data in a ``Category`` table, and are uniquely referenced by category name. We use the pipe separator in the import file, which means we have to declare this in the ``ManyToManyWidget`` declaration. :: id,title,categories 1,The Hobbit,Fantasy|Classic|Movies :: class BookResource(resources.ModelResource): categories = fields.Field( column_name='categories', attribute='categories', widget=widgets.ManyToManyWidget(Category, field='name', separator='|') ) class Meta: model = Book Creating non existent relations ------------------------------- The examples above rely on the relation data being present prior to the import. It is a common use-case to create the data if it does not already exist. It is possible to achieve this as follows:: class BookResource(resources.ModelResource): def before_import_row(self, row, **kwargs): author_name = row["author"] Author.objects.get_or_create(name=author_name, defaults={"name": author_name}) class Meta: model = Book The code above can be adapted to handle m2m relationships. You can also achieve similar by subclassing the widget :meth:`~import_export.widgets.ForeignKeyWidget.clean` method to create the object if it does not already exist. An example for :class:`~import_export.widgets.ManyToManyWidget` is `here `_. Customize relation lookup ------------------------- The ``ForeignKeyWidget`` and ``ManyToManyWidget`` widgets will look for relations by searching the entire relation table for the imported value. This is implemented in the :meth:`~import_export.widgets.ForeignKeyWidget.get_queryset` method. For example, for an ``Author`` relation, the lookup calls ``Author.objects.all()``. In some cases, you may want to customize this behaviour, and it can be a requirement to pass dynamic values in. For example, suppose we want to look up authors associated with a certain publisher id. We can achieve this by passing the publisher id into the ``Resource`` constructor, which can then be passed to the widget:: class BookResource(resources.ModelResource): def __init__(self, publisher_id): super().__init__() self.fields["author"] = fields.Field( attribute="author", column_name="author", widget=AuthorForeignKeyWidget(publisher_id), ) The corresponding ``ForeignKeyWidget`` subclass:: class AuthorForeignKeyWidget(ForeignKeyWidget): model = Author field = 'name' def __init__(self, publisher_id, **kwargs): super().__init__(self.model, field=self.field, **kwargs) self.publisher_id = publisher_id def get_queryset(self, value, row, *args, **kwargs): return self.model.objects.filter(publisher_id=self.publisher_id) Then if the import was being called from another module, we would pass the ``publisher_id`` into the Resource:: >>> resource = BookResource(publisher_id=1) If you need to pass dynamic values to the Resource from an `Admin integration`_, refer to See :ref:`dynamically_set_resource_values`. Django Natural Keys ------------------- The ``ForeignKeyWidget`` also supports using Django's natural key functions. A manager class with the ``get_by_natural_key`` function is required for importing foreign key relationships by the field model's natural key, and the model must have a ``natural_key`` function that can be serialized as a JSON list in order to export data. The primary utility for natural key functionality is to enable exporting data that can be imported into other Django environments with different numerical primary key sequences. The natural key functionality enables handling more complex data than specifying either a single field or the PK. The example below illustrates how to create a field on the ``BookResource`` that imports and exports its author relationships using the natural key functions on the ``Author`` model and modelmanager. The resource _meta option ``use_natural_foreign_keys`` enables this setting for all Models that support it. :: from import_export.fields import Field from import_export.widgets import ForeignKeyWidget class AuthorManager(models.Manager): def get_by_natural_key(self, name): return self.get(name=name) class Author(models.Model): objects = AuthorManager() name = models.CharField(max_length=100) birthday = models.DateTimeField(auto_now_add=True) def natural_key(self): return (self.name,) # Only the author field uses natural foreign keys. class BookResource(resources.ModelResource): author = Field( column_name = "author", attribute = "author", widget = ForeignKeyWidget(Author, use_natural_foreign_keys=True) ) class Meta: model = Book # All widgets with foreign key functions use them. class BookResource(resources.ModelResource): class Meta: model = Book use_natural_foreign_keys = True Read more at `Django Serialization `_. Create or update model instances ================================ When you are importing a file using import-export, the file is processed row by row. For each row, the import process is going to test whether the row corresponds to an existing stored instance, or whether a new instance is to be created. If an existing instance is found, then the instance is going to be *updated* with the values from the imported row, otherwise a new row will be created. In order to test whether the instance already exists, import-export needs to use a field (or a combination of fields) in the row being imported. The idea is that the field (or fields) will uniquely identify a single instance of the model type you are importing. To define which fields identify an instance, use the ``import_id_fields`` meta attribute. You can use this declaration to indicate which field (or fields) should be used to uniquely identify the row. If you don't declare ``import_id_fields``, then a default declaration is used, in which there is only one field: 'id'. For example, you can use the 'isbn' number instead of 'id' to uniquely identify a Book as follows:: class BookResource(resources.ModelResource): class Meta: model = Book import_id_fields = ('isbn',) fields = ('isbn', 'name', 'author', 'price',) .. note:: If setting ``import_id_fields``, you must ensure that the data can uniquely identify a single row. If the chosen field(s) select more than one row, then a ``MultipleObjectsReturned`` exception will be raised. If no row is identified, then ``DoesNotExist`` exception will be raised. .. _dynamic_fields: Using 'dynamic fields' to identify existing instances ----------------------------------------------------- There are some use-cases where a field defined in ``import_id_fields`` is not present in the dataset. An example of this would be dynamic fields, where a field is generated from other data and then used as an identifier. For example:: class BookResource(resources.ModelResource): def before_import_row(self, row, **kwargs): # generate a value for an existing field, based on another field row["hash_id"] = hashlib.sha256(row["name"].encode()).hexdigest() class Meta: model = Book # A 'dynamic field' - i.e. is used to identify existing rows # but is not present in the dataset import_id_fields = ("hash_id",) In the above example, a dynamic field called *hash_id* is generated and added to the dataset. In this example, an error will be raised because *hash_id* is not present in the dataset. To resolve this, update the dataset before import to add the dynamic field as a header:: class BookResource(resources.ModelResource): def before_import(self, dataset, **kwargs): # mimic a 'dynamic field' - i.e. append field which exists on # Book model, but not in dataset dataset.headers.append("hash_id") super().before_import(dataset, **kwargs) def before_import_row(self, row, **kwargs): row["hash_id"] = hashlib.sha256(row["name"].encode()).hexdigest() class Meta: model = Book # A 'dynamic field' - i.e. is used to identify existing rows # but is not present in the dataset import_id_fields = ("hash_id",) Access instances after import ============================= Access instance summary data ---------------------------- The instance pk and representation (i.e. output from ``repr()``) can be accessed after import:: rows = [ (1, 'Lord of the Rings'), ] dataset = tablib.Dataset(*rows, headers=['id', 'name']) resource = BookResource() result = resource.import_data(dataset) for row_result in result: print("%d: %s" % (row_result.object_id, row_result.object_repr)) Access full instance data ------------------------- All 'new', 'updated' and 'deleted' instances can be accessed after import if the :attr:`~import_export.options.ResourceOptions.store_instance` meta attribute is set. For example, this snippet shows how you can retrieve persisted row data from a result:: class BookResourceWithStoreInstance(resources.ModelResource): class Meta: model = Book store_instance = True rows = [ (1, 'Lord of the Rings'), ] dataset = tablib.Dataset(*rows, headers=['id', 'name']) resource = BookResourceWithStoreInstance() result = resource.import_data(dataset) for row_result in result: print(row_result.instance.pk) Handling duplicate data ======================= If an existing instance is identified during import, then the existing instance will be updated, regardless of whether the data in the import row is the same as the persisted data or not. You can configure the import process to skip the row if it is duplicate by using setting :attr:`~import_export.options.ResourceOptions.skip_unchanged`. If :attr:`~import_export.options.ResourceOptions.skip_unchanged` is enabled, then the import process will check each ns defined import field and perform a simple comparison with the existing instance, and if all comparisons are equal, then the row is skipped. Skipped rows are recorded in the row :class:`~import_export.results.RowResult` object. You can override the :meth:`~.skip_row` method to have full control over the skip row implementation. Also, the :attr:`~import_export.options.ResourceOptions.report_skipped` option controls whether skipped records appear in the import :class:`~import_export.results.RowResult` object, and whether skipped records will show in the import preview page in the Admin UI:: class BookResource(resources.ModelResource): class Meta: model = Book skip_unchanged = True report_skipped = False fields = ('id', 'name', 'price',) .. seealso:: :doc:`/api_resources` How to set a value on all imported instances prior to persisting ================================================================ You may have a use-case where you need to set the same value on each instance created during import. For example, it might be that you need to set a value read at runtime on all instances during import. You can define your resource to take the associated instance as a param, and then set it on each import instance:: class BookResource(ModelResource): def __init__(self, publisher_id): self.publisher_id = publisher_id def before_save_instance(self, instance, row, **kwargs): instance.publisher_id = self.publisher_id class Meta: model = Book See :ref:`dynamically_set_resource_values`. .. _advanced_data_manipulation_on_export: Advanced data manipulation on export ==================================== Not all data can be easily extracted from an object/model attribute. In order to turn complicated data model into a (generally simpler) processed data structure on export, ``dehydrate_`` method should be defined:: from import_export.fields import Field class BookResource(resources.ModelResource): full_title = Field() class Meta: model = Book def dehydrate_full_title(self, book): book_name = getattr(book, "name", "unknown") author_name = getattr(book.author, "name", "unknown") return '%s by %s' % (book_name, author_name) In this case, the export looks like this: >>> from app.admin import BookResource >>> dataset = BookResource().export() >>> print(dataset.csv) full_title,id,name,author,author_email,imported,published,price,categories Some book by 1,2,Some book,1,,0,2012-12-05,8.85,1 It is also possible to pass a method name in to the :meth:`~import_export.fields.Field` constructor. If this method name is supplied, then that method will be called as the 'dehydrate' method. Filtering querysets during export ================================= You can use :meth:`~import_export.resources.Resource.filter_export` to filter querysets during export. See also :ref:`customize_admin_export_forms`. Signals ======= To hook in the import-export workflow, you can connect to ``post_import``, ``post_export`` signals:: from django.dispatch import receiver from import_export.signals import post_import, post_export @receiver(post_import, dispatch_uid='balabala...') def _post_import(model, **kwargs): # model is the actual model instance which after import pass @receiver(post_export, dispatch_uid='balabala...') def _post_export(model, **kwargs): # model is the actual model instance which after export pass .. _concurrent-writes: Concurrent writes ================= There is specific consideration required if your application allows concurrent writes to data during imports. For example, consider this scenario: #. An import process is run to import new books identified by title. #. The :meth:`~import_export.resources.Resource.get_or_init_instance` is called and identifies that there is no existing book with this title, hence the import process will create it as a new record. #. At that exact moment, another process inserts a book with the same title. #. As the row import process completes, :meth:`~import_export.resources.Resource.save` is called and an error is thrown because the book already exists in the database. By default, import-export does not prevent this situation from occurring, therefore you need to consider what processes might be modifying shared tables during imports, and how you can mitigate risks. If your database enforces integrity, then you may get errors raised, if not then you may get duplicate data. Potential solutions are: * Use one of the :doc:`import workflow` methods to lock a table during import if the database supports it. * This should only be done in exceptional cases because there will be a performance impact. * You will need to release the lock both in normal workflow and if there are errors. * Override :meth:`~import_export.resources.Resource.do_instance_save` to perform a `update_or_create() `_. This can ensure that data integrity is maintained if there is concurrent access. * Modify working practices so that there is no risk of concurrent writes. For example, you could schedule imports to only run at night. This issue may be more prevalent if using :doc:`bulk imports`. This is because instances are held in memory for longer before being written in bulk, therefore there is potentially more risk of another process modifying an instance before it has been persisted. .. _import-process: django-import-export-4.0.9/docs/api_admin.rst000066400000000000000000000002641463433610200212240ustar00rootroot00000000000000===== Admin ===== For instructions on how to use the models and mixins in this module, please refer to :ref:`admin-integration`. .. automodule:: import_export.admin :members: django-import-export-4.0.9/docs/api_exceptions.rst000066400000000000000000000005561463433610200223210ustar00rootroot00000000000000========== Exceptions ========== .. currentmodule:: import_export.exceptions ImportExportError ----------------- .. autoclass:: import_export.exceptions.ImportExportError :members: FieldError ---------- .. autoclass:: import_export.exceptions.FieldError :members: ImportError ----------- .. autoclass:: import_export.exceptions.ImportError :members: django-import-export-4.0.9/docs/api_fields.rst000066400000000000000000000001151463433610200213750ustar00rootroot00000000000000====== Fields ====== .. autoclass:: import_export.fields.Field :members: django-import-export-4.0.9/docs/api_forms.rst000066400000000000000000000003331463433610200212570ustar00rootroot00000000000000===== Forms ===== .. module:: import_export.forms .. autoclass:: ImportExportFormBase .. autoclass:: ImportForm .. autoclass:: ConfirmImportForm .. autoclass:: ExportForm .. autoclass:: SelectableFieldsExportForm django-import-export-4.0.9/docs/api_instance_loaders.rst000066400000000000000000000003131463433610200234440ustar00rootroot00000000000000================ Instance loaders ================ .. module:: import_export.instance_loaders .. autoclass:: BaseInstanceLoader .. autoclass:: ModelInstanceLoader .. autoclass:: CachedInstanceLoader django-import-export-4.0.9/docs/api_mixins.rst000066400000000000000000000011131463433610200214350ustar00rootroot00000000000000====== Mixins ====== .. currentmodule:: import_export.mixins BaseImportExportMixin --------------------- .. autoclass:: import_export.mixins.BaseImportExportMixin :members: BaseImportMixin --------------- .. autoclass:: import_export.mixins.BaseImportMixin :members: BaseExportMixin --------------- .. autoclass:: import_export.mixins.BaseExportMixin :members: ExportViewMixin --------------- .. autoclass:: import_export.mixins.ExportViewMixin :members: ExportViewFormMixin ------------------- .. autoclass:: import_export.mixins.ExportViewFormMixin :members: django-import-export-4.0.9/docs/api_resources.rst000066400000000000000000000006561463433610200221530ustar00rootroot00000000000000========= Resources ========= Resource -------- .. autoclass:: import_export.resources.Resource :members: ModelResource ------------- .. autoclass:: import_export.resources.ModelResource :members: ResourceOptions (Meta) ---------------------- .. autoclass:: import_export.options.ResourceOptions :members: modelresource_factory --------------------- .. automethod:: import_export.resources.modelresource_factory django-import-export-4.0.9/docs/api_results.rst000066400000000000000000000004611463433610200216340ustar00rootroot00000000000000======= Results ======= .. currentmodule:: import_export.results Result ------ .. autoclass:: import_export.results.Result :members: RowResult --------- .. autoclass:: import_export.results.RowResult :members: InvalidRow --------- .. autoclass:: import_export.results.InvalidRow :members: django-import-export-4.0.9/docs/api_tmp_storages.rst000066400000000000000000000006311463433610200226410ustar00rootroot00000000000000================== Temporary storages ================== .. currentmodule:: import_export.tmp_storages TempFolderStorage ----------------- .. autoclass:: import_export.tmp_storages.TempFolderStorage :members: CacheStorage ------------ .. autoclass:: import_export.tmp_storages.CacheStorage :members: MediaStorage ------------ .. autoclass:: import_export.tmp_storages.MediaStorage :members: django-import-export-4.0.9/docs/api_widgets.rst000066400000000000000000000015301463433610200215770ustar00rootroot00000000000000======= Widgets ======= .. autoclass:: import_export.widgets.Widget :members: .. autoclass:: import_export.widgets.NumberWidget :members: .. autoclass:: import_export.widgets.IntegerWidget :members: .. autoclass:: import_export.widgets.DecimalWidget :members: .. autoclass:: import_export.widgets.CharWidget :members: .. autoclass:: import_export.widgets.BooleanWidget :members: .. autoclass:: import_export.widgets.DateWidget :members: .. autoclass:: import_export.widgets.TimeWidget :members: .. autoclass:: import_export.widgets.DateTimeWidget :members: .. autoclass:: import_export.widgets.DurationWidget :members: .. autoclass:: import_export.widgets.JSONWidget :members: .. autoclass:: import_export.widgets.ForeignKeyWidget :members: .. autoclass:: import_export.widgets.ManyToManyWidget :members: django-import-export-4.0.9/docs/bulk_import.rst000066400000000000000000000065351463433610200216410ustar00rootroot00000000000000============= Bulk imports ============= import-export provides a 'bulk mode' to improve the performance of importing large datasets. In normal operation, import-export will call ``instance.save()`` as each row in a dataset is processed. Bulk mode means that ``instance.save()`` is not called, and instances are instead added to temporary lists. Once the number of rows processed matches the ``batch_size`` value, then either ``bulk_create()`` or ``bulk_update()`` is called. If ``batch_size`` is set to ``None``, then ``bulk_create()`` / ``bulk_update()`` is only called once all rows have been processed. Bulk deletes are also supported, by applying a ``filter()`` to the temporary object list, and calling ``delete()`` on the resulting query set. Caveats ======= * The model's ``save()`` method will not be called, and ``pre_save`` and ``post_save`` signals will not be sent. * ``bulk_update()`` is only supported in Django 2.2 upwards. * Bulk operations do not work with many-to-many relationships. * Take care to ensure that instances are validated before bulk operations are called. This means ensuring that resource fields are declared appropriately with the correct widgets. If an exception is raised by a bulk operation, then that batch will fail. It's also possible that transactions can be left in a corrupted state. Other batches may be successfully persisted, meaning that you may have a partially successful import. * In bulk mode, exceptions are not linked to a row. Any exceptions raised by bulk operations are logged and returned as critical (non-validation) errors (and re-raised if ``raise_errors`` is true). * If you use :class:`~import_export.widgets.ForeignKeyWidget` then this should not affect performance during lookups, because the ``QuerySet`` cache should be used. Some more information `here `_. * If there is the potential for concurrent writes to a table during a bulk operation, then you need to consider the potential impact of this. Refer to :ref:`concurrent-writes` for more information. For more information, please read the Django documentation on `bulk_create() `_ and `bulk_update() `_. .. _performance_tuning Performance tuning ================== Consider the following if you need to improve the performance of imports. * Enable ``use_bulk`` for bulk create, update and delete operations (read `Caveats`_ first). * If your import is creating instances only (i.e. you are sure there are no updates), then set ``force_init_instance = True``. * If your import is updating or creating instances, and you have a set of existing instances which can be stored in memory, use :class:`~import_export.instance_loaders.CachedInstanceLoader` * By default, import rows are compared with the persisted representation, and the difference is stored against each row result. If you don't need this diff, then disable it with ``skip_diff = True``. * Setting ``batch_size`` to a different value is possible, but tests showed that setting this to ``None`` always resulted in worse performance in both duration and peak memory. Testing ======= Scripts are provided to enable testing and benchmarking of bulk imports. See :ref:`testing:Bulk testing`. django-import-export-4.0.9/docs/celery.rst000066400000000000000000000003411463433610200205620ustar00rootroot00000000000000.. _celery: =========== Using celery =========== You can use the 3rd party `django-import-export-celery `_ application to process long imports and exports in celery. django-import-export-4.0.9/docs/changelog.rst000066400000000000000000001715711463433610200212440ustar00rootroot00000000000000Changelog ========= .. warning:: Version 4 introduces breaking changes. Please refer to :doc:`release notes`. 4.0.9 (2024-06-18) ------------------ - docs: clarify :meth:`~import_export.resources.Resource.for_delete` documentation (`1877 `_) - fix default ``Field`` returns empty string instead of *'None'* (`1872 `_) - revert setting default value for ``attribute`` (`1875 `_) 4.0.8 (2024-06-13) ------------------ - docs: clarify widget configuration (`1865 `_) - Enable skip export confirm page (`1867 `_) 4.0.7 (2024-05-30) ------------------ - fix documentation to show correct method for reading form data on export (`1859 `_) - Admin UI: display both field name and column name on export (`1857 `_) - fix export declared field with custom column name (`1861 `_) - fix declared fields do not have correct Widget class set (`1861 `_) - docs: clarify changes to ``CharWidget`` in v4 (`1862 `_) - refactor :class:`~import_export.resources.Resource` to remove code duplication in export (`1863 `_) 4.0.6 (2024-05-27) ------------------ - Added additional test for export field order (`1848 `_) - fix crash on import when relation has custom PK (`1853 `_) - fix crash on export from action when instance has custom PK (`1854 `_) 4.0.5 (2024-05-23) ------------------ - Fix for invalid build due to malformed README.rst (`1851 `_) 4.0.4 (2024-05-23) ------------------ - Refactored ``DateWidget`` & ``DateTimeWidget`` to remove code duplication (`1839 `_) - Release note documentation updated (`1840 `_) - Added missing migration to example app (`1843 `_) - Fix admin UI display of field import order (`1849 `_) 4.0.3 (2024-05-16) ------------------ - Support widgets with CSS and JS media in ImportForm (`1807 `_) - Documentation updates (`1833 `_) - Clarified documentation when importing with ``import_id_fields`` (`1836 `_) - re-add ``resource_class`` deprecation warning (`1837 `_) - fixed Arabic translation for 'import' word (`1838 `_) 4.0.2 (2024-05-13) ------------------ - fix export with custom column name (`1821 `_) - fix allow ``column_name`` to be declared in ``fields`` list (`1822 `_) - fix clash between ``key_is_id`` and ``use_natural_foreign_keys`` (`1824 `_) - remove unreachable code (`1825 `_) - fix issue with widget assignment for custom ``ForeignKey`` subclasses (`1826 `_) - performance: select of valid pks for export restricted to action exports (`1827 `_) - fix crash on export with custom column name (`1828 `_) - remove outdated datetime formatting logic (`1830 `_) 4.0.1 (2024-05-08) ------------------ - fix crash on export when model has no ``id`` (`1802 `_) - fix Widget crash when django Field subclass is used (`1805 `_) - fix regression: allow imports when default ``import_id_field`` is not present (`1813 `_) 4.0.0 (2024-04-27) ------------------ Deprecations ############ - Removed v3 deprecations (`1629 `_) - Deprecation of ``ExportViewFormMixin`` (`1666 `_) Enhancements ############ - Refactor ordering logic (`1626 `_) - Refactor 'diff' logic to avoid calling dehydrate methods - Refactor declarations of ``fields``, ``import_order`` and ``export_order`` to fix ordering issues - refactor to export HTML / formulae escaping updates (`1638 `_) - removed unused variable ``Result.new_record`` (`1640 `_) - Refactor ``resources.py`` to standardise method args (`1641 `_) - added specific check for missing ``import_id_fields`` (`1645 `_) - Enable optional tablib dependencies (`1647 `_) - added :meth:`~import_export.widgets.ForeignKeyWidget.get_lookup_kwargs` to make it easier to override object lookup (`1651 `_) - Standardised interface of :meth:`~import_export.widgets.Widget.render` (`1657 `_) - Fix declaring existing model field(s) in ModelResource altering export order (`1663 `_) - Added :meth:`~import_export.resources.Resource.do_instance_save` helper method (`1668 `_) - Enable defining Resource model as a string (`1669 `_) - Support multiple Resources for export (`1671 `_) - Support export from model change form (`1687 `_) - Import form defaults to read-only field if only one format defined (`1690 `_) - Updated Admin UI to track deleted and skipped Imports (`1691 `_) - Added customizable ``MediaStorage`` (`1708 `_) - Added customization of Admin UI import error messages (`1727 `_) - Improve output of error messages (`1729 `_) - Added feature: selectable fields for admin export view (`1734 `_) - Added specific check for declared :attr:`~import_export.options.ResourceOptions.import_id_fields` not in dataset (`1735 `_) - added try / catch to :meth:`~import_export.results.RowResult.add_instance_info` to handle unserializable instances (`1767 `_) - Add form error if source file contains invalid header (`1780 `_) - Remove unneeded format method overrides (`1785 `_) - Support dynamic selection of Resource class based on request property (`1787 `_) Fixes ##### - dynamic widget parameters for CharField fixes 'NOT NULL constraint' error in xlsx (`1485 `_) - fix cooperation with adminsortable2 (`1633 `_) - Removed unused method ``utils.original()`` - Fix deprecated ``log_action`` method (`1673 `_) - fix multiple inheritance not setting options (`1696 `_) - Fix issue where declared Resource fields not defined in ``fields`` are still imported (`1702 `_) - Fixed handling of :attr:`~import_export.exceptions.FieldError` during Admin import (`1755 `_) - Fixed handling of django ``FieldError`` during Admin export (`1756 `_) - Add check for type to :meth:`~import_export.widgets.Widget.render` (`1757 `_) - fix: YAML export does not work with SafeString (`1762 `_) - fix: :meth:`~import_export.widgets.SimpleArrayWidget.render` crashes if value is ``None`` (`1771 `_) - fix form not being passed to ``get_import_resource_kwargs()`` (`1789 `_) - Fix: Missing default widget for ``PositiveBigIntegerField`` (`1795 `_) Development ########### - Refactor build process (`1630 `_) - Refactored ``test_admin_integration()``: split into smaller test modules (`1662 `_) - Refactored ``test_resources()``: split into smaller test modules (`1672 `_) - Updated ``docker-compose`` command with latest version syntax in ``runtests.sh`` (`1686 `_) - Refactored :mod:`~import_export.resources` into separate modules for ``declarative`` and ``options`` (`1695 `_) - Refactored tests to remove dependencies between tests (`1703 `_) - Handle python3.12 datetime deprecations (`1705 `_) - Refactor ``test_resources.py`` into smaller modules (`1733 `_) - Updated test coverage to include error row when ``collect_failed_rows`` is ``True`` (`1753 `_) - Removed support for django 3.2 (`1790 `_) - Added test for widgets generating by model fields `1795 `_) Documentation ############# - Clarified ``skip_diff`` documentation (`1655 `_) - Improved documentation relating to validation on import (`1665 `_) - Added FAQ entry for exporting large datasets (`1706 `_) - Relocated admin integration section from advanced_usage.rst into new file (`1713 `_) - Updated Admin integration documentation to clarify how to save custom form values (`1746 `_) Performance ########### - Fix slow export with ForeignKey id (`1717 `_) i18n #### - updated translations for release-4 (`1775 `_) 3.3.9 (2024-04-28) ------------------ - Update translations for Russian language (`1797 `_) 3.3.8 (2024-04-08) ------------------ - Add additional django template block for extending import page (`1776 `_) 3.3.7 (2024-02-03) ------------------ - Pass :meth:`~import_export.mixins.BaseExportMixin.get_export_resource_kwargs` to Resource constructor :meth:`~import_export.admin.ExportMixin.export_action` (`1739 `_) - Fix issue with model class passed to Resource constructor crashing on export (`1745 `_) - Fix indentation for skip_row docstring (`1743 `_) - Return ``kwargs`` by default from :meth:`~import_export.mixins.BaseImportExportMixin.get_resource_kwargs` (`1748 `_) 3.3.6 (2024-01-10) ------------------ - Fix issue with highlight when using 'light' color scheme (`1728 `_) 3.3.5 (2023-12-19) ------------------ - Remove unnecessary ChangeList queries to speed up export via Admin UI (`1715 `_) - Respect color scheme override (`1720 `_) - Update FAQ to cover skipping rows with validation errors (`1721 `_) 3.3.4 (2023-12-09) ------------------ - Added support for django5 (`1634 `_) - Show list of exported fields in Admin UI (`1685 `_) - Added `CONTRIBUTING.md` - Added support for python 3.12 (`1698 `_) - Update Finnish translations (`1701 `_) 3.3.3 (2023-11-11) ------------------ - :meth:`~import_export.admin.ExportActionMixin.export_admin_action` can be overridden by subclassing it in the ``ModelAdmin`` (`1681 `_) 3.3.2 (2023-11-09) ------------------ - Updated Spanish translations (`1639 `_) - Added documentation and tests for retrieving instance information after import (`1643 `_) - :meth:`~import_export.widgets.NumberWidget.render` returns ``None`` as empty string if ``coerce_to_string`` is True (`1650 `_) - Updated documentation to describe how to select for export in Admin UI (`1670 `_) - Added catch for django5 deprecation warning (`1676 `_) - Updated and compiled message files (`1678 `_) 3.3.1 (2023-09-14) ------------------ - Added `.readthedocs.yaml` (`1625 `_) 3.3.0 (2023-09-14) ------------------ Deprecations ############ - Remove 'escape output' deprecation (`1618 `_) - Removal of deprecated :ref:`IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT`. - Deprecation of :ref:`IMPORT_EXPORT_ESCAPE_HTML_ON_EXPORT`. Refer to :ref:`installation` docs. Enhancements ############ - Refactoring and fix to support filtering exports (`1579 `_) - Store ``instance`` and ``original`` object in :class:`~import_export.results.RowResult` (`1584 `_) - Add customizable blocks in import.html (`1598 `_) - Include 'allowed formats' settings (`1606 `_) - Add kwargs to enable CharWidget to return values as strings (`1623 `_) Internationalization #################### - Add Finnish translation (`1588 `_) - Updated ru translation (`1604 `_) - Fixed badly formatted translation string (`1622 `_) - Remove 'escape output' deprecation (`1618 `_) Fixes ##### - Do not decode bytes when writing to MediaStorage (`1615 `_) - Fix for cache entries not removed (`1621 `_) Development ########### - Added support for Django 4.2 (`1570 `_) - Add automatic formatting and linting (`1571 `_) - removed duplicate admin integration tests (`1616 `_) - Removed support for python3.7 and django4.0 (past EOL) (`1618 `_) Documentation ############# - Updated documentation for interoperability with third party libraries (`1614 `_) 3.2.0 (2023-04-12) ------------------ - Escape formulae on export to XLSX (`1568 `_) - This includes deprecation of :ref:`IMPORT_EXPORT_ESCAPE_OUTPUT_ON_EXPORT`. Refer to :ref:`installation` for alternatives. - :meth:`import_export.formats.TablibFormat.export()`: ``escape_output`` flag now deprecated in favour of ``escape_html`` and ``escape_formulae``. - Refactor methods so that ``args`` are declared correctly (`1566 `_) - This includes deprecations to be aware of if you have overridden :meth:`~import_export.resources.Resource.export` or :class:`~import_export.forms.ImportExportFormBase`. - ``export()``: If passing ``queryset`` as the first arg, ensure this is passed as a named parameter. - ``ImportExportFormBase``: If passing ``resources`` to ``__init__`` as the first arg, ensure this is passed as a named parameter. - Updated ``setup.py`` (`1564 `_) - Added ``SECURITY.md`` (`1563 `_) - Updated FAQ to include workaround for `RelatedObjectDoesNotExist` exception (`1562 `_) - Prevent error comparing m2m field of the new objects (`1560 `_) - Add documentation for passing data from admin form to Resource (`1555 `_) - Added new translations to Spanish and Spanish (Argentina) (`1552 `_) - Pass kwargs to import_set function (`1448 `_) 3.1.0 (2023-02-21) ------------------ - Float and Decimal widgets use LANGUAGE_CODE on export (`1501 `_) - Add optional dehydrate method param (`1536 `_) - ``exceptions`` module has been undeprecated - Updated DE translation (`1537 `_) - Add option for single step import via Admin Site (`1540 `_) - Add support for m2m add (`1545 `_) - collect errors on bulk operations (`1541 `_) - this change causes bulk import errors to be logged at DEBUG level not EXCEPTION. - Improve bulk import performance (`1539 `_) - ``raise_errors`` has been deprecated as a kwarg in ``import_row()`` - Reduce memory footprint during import (`1542 `_) - documentation updates (`1533 `_) - add detailed format parameter docstrings to ``DateWidget`` and ``TimeWidget`` (`1532 `_) - tox updates (`1534 `_) - fix xss vulnerability in html export (`1546 `_) 3.0.2 (2022-12-13) ------------------ - Support Python 3.11 (`1508 `_) - use ``get_list_select_related`` in ``ExportMixin`` (`1511 `_) - bugfix: handle crash on start-up when ``change_list_template`` is a property (`1523 `_) - bugfix: include instance info in row result when row is skipped (`1526 `_) - bugfix: add ``**kwargs`` param to ``Resource`` constructor (`1527 `_) 3.0.1 (2022-10-18) ------------------ - Updated ``django-import-export-ci.yml`` to fix node.js deprecation - bugfix: ``DateTimeWidget.clean()`` handles tz aware datetime (`1499 `_) - Updated translations for v3.0.0 release (`1500 `_) 3.0.0 (2022-10-18) ------------------ Breaking changes ################ This release makes some minor changes to the public API. If you have overridden any methods from the ``resources`` or ``widgets`` modules, you may need to update your implementation to accommodate these changes. - Check value of ``ManyToManyField`` in ``skip_row()`` (`1271 `_) - This fixes an issue where ManyToMany fields are not checked correctly in ``skip_row()``. This means that ``skip_row()`` now takes ``row`` as a mandatory arg. If you have overridden ``skip_row()`` in your own implementation, you will need to add ``row`` as an arg. - Bug fix: validation errors were being ignored when ``skip_unchanged`` is set (`1378 `_) - If you have overridden ``skip_row()`` you can choose whether or not to skip rows if validation errors are present. The default behavior is to not to skip rows if there are validation errors during import. - Use 'create' flag instead of instance.pk (`1362 `_) - ``import_export.resources.save_instance()`` now takes an additional mandatory argument: ``is_create``. If you have overridden ``save_instance()`` in your own code, you will need to add this new argument. - ``widgets``: Unused ``*args`` params have been removed from method definitions. (`1413 `_) - If you have overridden ``clean()`` then you should update your method definition to reflect this change. - ``widgets.ForeignKeyWidget`` / ``widgets.ManyToManyWidget``: The unused ``*args`` param has been removed from ``__init__()``. If you have overridden ``ForeignKeyWidget`` or ``ManyToManyWidget`` you may need to update your implementation to reflect this change. - Admin interface: Modified handling of import errors (`1306 `_) - Exceptions raised during the import process are now presented as form errors, instead of being wrapped in a \ tag in the response. If you have any custom logic which uses the error written directly into the response, then this may need to be changed. - ImportForm: improve compatibility with previous signature (`1434 `_) - Previous ``ImportForm`` implementation was based on Django's ``forms.Form``, if you have any custom ImportForm you now need to inherit from ``import_export.forms.ImportExportFormBase``. - Allow custom ``change_list_template`` in admin views using mixins (`1483 `_) - If you are using admin mixins from this library in conjunction with code that overrides ``change_list_template`` (typically admin mixins from other libraries such as django-admin-sortable2 or reversion), object tools in the admin change list views may render differently now. - If you have created a custom template which extends any import_export template, then this may now cause a recursion error (see `1415 `_) - ``import.html``: Added blocks to import template (`1488 `_) - If you have made customizations to the import template then you may need to refactor these after the addition of block declarations. Deprecations ############ This release adds some deprecations which will be removed in a future release. - Add support for multiple resources in ModelAdmin. (`1223 `_) - The ``*Mixin.resource_class`` accepting single resource has been deprecated and the new ``*Mixin.resource_classes`` accepting subscriptable type (list, tuple, ...) has been added. - Same applies to all of the ``get_resource_class``, ``get_import_resource_class`` and ``get_export_resource_class`` methods. - Deprecated ``exceptions.py`` (`1372 `_) - Refactored form-related methods on ``ImportMixin`` / ``ExportMixin`` (`1147 `_) - The following are deprecated: - ``get_import_form()`` - ``get_confirm_import_form()`` - ``get_form_kwargs()`` - ``get_export_form()`` Enhancements ############ - Default format selections set correctly for export action (`1389 `_) - Added option to store raw row values in each row's ``RowResult`` (`1393 `_) - Add natural key support to ``ForeignKeyWidget`` (`1371 `_) - Optimised default instantiation of ``CharWidget`` (`1414 `_) - Allow custom ``change_list_template`` in admin views using mixins (`1483 `_) - Added blocks to import template (`1488 `_) - improve compatibility with previous ImportForm signature (`1434 `_) - Refactored form-related methods on ``ImportMixin`` / ``ExportMixin`` (`1147 `_) - Include custom form media in templates (`1038 `_) - Remove unnecessary files generated when running tox locally (`1426 `_) Fixes ##### - Fixed Makefile coverage: added ``coverage combine`` - Fixed handling of LF character when using ``CacheStorage`` (`1417 `_) - bugfix: ``skip_row()`` handles M2M field when UUID pk used - Fix broken link to tablib formats page (`1418 `_) - Fix broken image ref in ``README.rst`` - bugfix: ``skip_row()`` fix crash when model has m2m field and none is provided in upload (`1439 `_) - Fix deprecation in example application: Added support for transitional form renderer (`1451 `_) Development ########### - Increased test coverage, refactored CI build to use tox (`1372 `_) Documentation ############# - Clarified issues around the usage of temporary storage (`1306 `_) 2.9.0 (2022-09-14) ------------------ - Fix deprecation in example application: Added support for transitional form renderer (`1451 `_) - Escape HTML output when rendering decoding errors (`1469 `_) - Apply make_aware when the original file contains actual datetimes (`1478 `_) - Automatically guess the format of the file when importing (`1460 `_) 2.8.0 (2022-03-31) ------------------ - Updated import.css to support dark mode (`1318 `_) - Fix crash when import_data() called with empty Dataset and ``collect_failed_rows=True`` (`1381 `_) - Improve Korean translation (`1402 `_) - Update example subclass widget code (`1407 `_) - Drop support for python3.6, django 2.2, 3.0, 3.1 (`1408 `_) - Add get_export_form() to ExportMixin (`1409 `_) 2.7.1 (2021-12-23) ------------------ - Removed ``django_extensions`` from example app settings (`1356 `_) - Added support for Django 4.0 (`1357 `_) 2.7.0 (2021-12-07) ------------------ - Big integer support for Integer widget (`788 `_) - Run compilemessages command to keep .mo files in sync (`1299 `_) - Added ``skip_html_diff`` meta attribute (`1329 `_) - Added python3.10 to tox and CI environment list (`1336 `_) - Add ability to rollback the import on validation error (`1339 `_) - Fix missing migration on example app (`1346 `_) - Fix crash when deleting via admin site (`1347 `_) - Use Github secret in CI script instead of hard-coded password (`1348 `_) - Documentation: correct error in example application which leads to crash (`1353 `_) 2.6.1 (2021-09-30) ------------------ - Revert 'dark mode' css: causes issues in django2.2 (`1330 `_) 2.6.0 (2021-09-15) ------------------ - Added guard for null 'options' to fix crash (`1325 `_) - Updated import.css to support dark mode (`1323 `_) - Fixed regression where overridden mixin methods are not called (`1315 `_) - Fix xls/xlsx import of Time fields (`1314 `_) - Added support for 'to_encoding' attribute (`1311 `_) - Removed travis and replaced with github actions for CI (`1307 `_) - Increased test coverage (`1286 `_) - Fix minor date formatting issue for date with years < 1000 (`1285 `_) - Translate the zh_Hans missing part (`1279 `_) - Remove code duplication from mixins.py and admin.py (`1277 `_) - Fix example in BooleanWidget docs (`1276 `_) - Better support for Django main (`1272 `_) - don't test Django main branch with python36,37 (`1269 `_) - Support Django 3.2 (`1265 `_) - Correct typo in Readme (`1258 `_) - Rephrase logical clauses in docstrings (`1255 `_) - Support multiple databases (`1254 `_) - Update django master to django main (`1251 `_) - Add Farsi translated messages in the locale (`1249 `_) - Update Russian translations (`1244 `_) - Append export admin action using ModelAdmin.get_actions (`1241 `_) - Fix minor mistake in makemigrations command (`1233 `_) - Remove EOL Python 3.5 from CI (`1228 `_) - CachedInstanceLoader defaults to empty when import_id is missing (`1225 `_) - Add kwargs to import_row, import_object and import_field (`1190 `_) - Call load_workbook() with data_only flag (`1095 `_) 2.5.0 (2020-12-30) ------------------ - Changed the default value for ``IMPORT_EXPORT_CHUNK_SIZE`` to 100. (`1196 `_) - Add translation for Korean (`1218 `_) - Update linting, CI, and docs. 2.4.0 (2020-10-05) ------------------ - Fix deprecated Django 3.1 ``Signal(providing_args=...)`` usage. - Fix deprecated Django 3.1 ``django.conf.urls.url()`` usage. 2.3.0 (2020-07-12) ------------------ - Add missing translation keys for all languages (`1144 `_) - Added missing Portuguese translations (`1145 `_) - Add kazakh translations (`1161 `_) - Add bulk operations (`1149 `_) 2.2.0 (2020-06-01) ------------------ - Deal with importing a BooleanField that actually has ``True``, ``False``, and ``None`` values. (`1071 `_) - Add row_number parameter to before_import_row, after_import_row and after_import_instance (`1040 `_) - Paginate queryset if Queryset.prefetch_related is used (`1050 `_) 2.1.0 (2020-05-02) ------------------ - Fix DurationWidget handling of zero value (`1117 `_) - Make import diff view only show headers for user visible fields (`1109 `_) - Make confirm_form accessible in get_import_resource_kwargs and get_import_data_kwargs (`994 `_, `1108 `_) - Initialize Decimal with text value, fix #1035 (`1039 `_) - Adds meta flag 'skip_diff' to enable skipping of diff operations (`1045 `_) - Update docs (`1097 `_, `1114 `_, `1122 `_, `969 `_, `1083 `_, `1093 `_) 2.0.2 (2020-02-16) ------------------ - Add support for tablib >= 1.0 (`1061 `_) - Add ability to install a subset of tablib supported formats and save some automatic dependency installations (needs tablib >= 1.0) - Use column_name when checking row for fields (`1056 `_) 2.0.1 (2020-01-15) ------------------ - Fix deprecated Django 3.0 function usage (`1054 `_) - Pin tablib version to not use new major version (`1063 `_) - Format field is always shown on Django 2.2 (`1007 `_) 2.0 (2019-12-03) ---------------- - Removed support for Django < 2.0 - Removed support for Python < 3.5 - feat: Support for Postgres JSONb Field (`904 `_) 1.2.0 (2019-01-10) ------------------ - feat: Better surfacing of validation errors in UI / optional model instance validation (`852 `_) - chore: Use modern setuptools in setup.py (`862 `_) - chore: Update URLs to use https:// (`863 `_) - chore: remove outdated workarounds - chore: Run SQLite tests with in-memory database - fix: Change logging level (`832 `_) - fix: Changed ``get_instance()`` return val (`842 `_) 1.1.0 (2018-10-02) ------------------ - fix: Django2.1 ImportExportModelAdmin export (`797 `_, `819 `_) - setup: add django2.1 to test matrix - JSONWidget for jsonb fields (`803 `_) - Add ExportActionMixin (`809 `_) - Add Import Export Permissioning #608 (`804 `_) - write_to_tmp_storage() for import_action() (`781 `_) - follow relationships on ForeignKeyWidget (`798 `_) - Update all pypi.python.org URLs to pypi.org - added test for tsv import - added unicode support for TSV for python 2 - Added ExportViewMixin (`692 `_) 1.0.1 (2018-05-17) ------------------ - Make deep copy of fields from class attr to instance attr (`550 `_) - Fix #612: NumberWidget.is_empty() should strip the value if string type (`613 `_) - Fix #713: last day isn't included in results qs (`779 `_) - use Python3 compatible MySql driver in development (`706 `_) - fix: warning U mode is deprecated in python 3 (`776 `_) - refactor: easier overriding widgets and default field (`769 `_) - Updated documentation regarding declaring fields (`735 `_) - custom js for action form also handles grappelli (`719 `_) - Use 'verbose_name' in breadcrumbs to match Django default (`732 `_) - Add Resource.get_diff_class() (`745 `_) - Fix and add polish translation (`747 `_) - Restore raise_errors to before_import (`749 `_) 1.0.0 (2018-02-13) ------------------ - Switch to semver versioning (`687 `_) - Require Django>=1.8 (`685 `_) - upgrade tox configuration (`737 `_) 0.7.0 (2018-01-17) ------------------ - skip_row override example (`702 `_) - Testing against Django 2.0 should not fail (`709 `_) - Refactor transaction handling (`690 `_) - Resolves #703 fields shadowed (`703 `_) - discourage installation as a zipped egg (`548 `_) - Fixed middleware settings in test app for Django 2.x (`696 `_) 0.6.1 (2017-12-04) ------------------ - Refactors and optimizations (`686 `_, `632 `_, `684 `_, `636 `_, `631 `_, `629 `_, `635 `_, `683 `_) - Travis tests for Django 2.0.x (`691 `_) 0.6.0 (2017-11-23) ------------------ - Refactor import_row call by using keyword arguments (`585 `_) - Added {{ block.super }} call in block bodyclass in admin/base_site.html (`582 `_) - Add support for the Django DurationField with DurationWidget (`575 `_) - GitHub bmihelac -> django-import-export Account Update (`574 `_) - Add intersphinx links to documentation (`572 `_) - Add Resource.get_import_fields() (`569 `_) - Fixed readme mistake (`568 `_) - Bugfix/fix m2m widget clean (`515 `_) - Allow injection of context data for template rendered by import_action() and export_action() (`544 `_) - Bugfix/fix exception in generate_log_entries() (`543 `_) - Process import dataset and result in separate methods (`542 `_) - Bugfix/fix error in converting exceptions to strings (`526 `_) - Fix admin integration tests for the new "Import finished..." message, update Czech translations to 100% coverage. (`596 `_) - Make import form type easier to override (`604 `_) - Add saves_null_values attribute to Field to control whether null values are saved on the object (`611 `_) - Add Bulgarian translations (`656 `_) - Add django 1.11 to TravisCI (`621 `_) - Make Signals code example format correctly in documentation (`553 `_) - Add Django as requirement to setup.py (`634 `_) - Update import of reverse for django 2.x (`620 `_) - Add Django-version classifiers to setup.py’s CLASSIFIERS (`616 `_) - Some fixes for Django 2.0 (`672 `_) - Strip whitespace when looking up ManyToMany fields (`668 `_) - Fix all ResourceWarnings during tests in Python 3.x (`637 `_) - Remove downloads count badge from README since shields.io no longer supports it for PyPi (`677 `_) - Add coveralls support and README badge (`678 `_) 0.5.1 (2016-09-29) ------------------ - French locale not in pypi (`524 `_) - Bugfix/fix undefined template variables (`519 `_) 0.5.0 (2016-09-01) ------------------ - Hide default value in diff when importing a new instance (`458 `_) - Append rows to Result object via function call to allow overriding (`462 `_) - Add get_resource_kwargs to allow passing request to resource (`457 `_) - Expose Django user to get_export_data() and export() (`447 `_) - Add before_export and after_export hooks (`449 `_) - fire events post_import, post_export events (`440 `_) - add **kwargs to export_data / create_dataset - Add before_import_row() and after_import_row() (`452 `_) - Add get_export_fields() to Resource to control what fields are exported (`461 `_) - Control user-visible fields (`466 `_) - Fix diff for models using ManyRelatedManager - Handle already cleaned objects (`484 `_) - Add after_import_instance hook (`489 `_) - Use optimized xlsx reader (`482 `_) - Adds resource_class of BookResource (re-adds) in admin docs (`481 `_) - Require POST method for process_import() (`478 `_) - Add SimpleArrayWidget to support use of django.contrib.postgres.fields.ArrayField (`472 `_) - Add new Diff class (`477 `_) - Fix #375: add row to widget.clean(), obj to widget.render() (`479 `_) - Restore transactions for data import (`480 `_) - Refactor the import-export templates (`496 `_) - Update doc links to the stable version, update rtfd to .io (`507 `_) - Fixed typo in the Czech translation (`495 `_) 0.4.5 (2016-04-06) ------------------ - Add FloatWidget, use with model fields models.FloatField (`433 `_) - Fix default values in fields (`431 `_, `364 `_) Field constructor ``default`` argument is NOT_PROVIDED instead of None Field clean method checks value against ``Field.empty_values`` [None, ''] 0.4.4 (2016-03-22) ------------------ - FIX: No static/ when installed via pip (`427 `_) - Add total # of imports and total # of updates to import success msg 0.4.3 (2016-03-08) ------------------ - fix MediaStorage does not respect the read_mode parameter (`416 `_) - Reset SQL sequences when new objects are imported (`59 `_) - Let Resource rollback if import throws exception (`377 `_) - Fixes error when a single value is stored in m2m relation field (`177 `_) - Add support for django.db.models.TimeField (`381 `_) 0.4.2 (2015-12-18) ------------------ - add xlsx import support 0.4.1 (2015-12-11) ------------------ - fix for fields with a dyanmic default callable (`360 `_) 0.4.0 (2015-12-02) ------------------ - Add Django 1.9 support - Django 1.4 is not supported (`348 `_) 0.3.1 (2015-11-20) ------------------ - FIX: importing csv in python 3 0.3 (2015-11-20) ---------------- - FIX: importing csv UnicodeEncodeError introduced in 0.2.9 (`347 `_) 0.2.9 (2015-11-12) ------------------ - Allow Field.save() relation following (`344 `_) - Support default values on fields (and models) (`345 `_) - m2m widget: allow trailing comma (`343 `_) - Open csv files as text and not binary (`127 `_) 0.2.8 (2015-07-29) ------------------ - use the IntegerWidget for database-fields of type BigIntegerField (`302 `_) - make datetime timezone aware if USE_TZ is True (`283 `_). - Fix 0 is interpreted as None in number widgets (`274 `_) - add possibility to override tmp storage class (`133 `_, `251 `_) - better error reporting (`259 `_) 0.2.7 (2015-05-04) ------------------ - Django 1.8 compatibility - add attribute inheritance to Resource (`140 `_) - make the filename and user available to import_data (`237 `_) - Add to_encoding functionality (`244 `_) - Call before_import before creating the instance_loader - fixes (`193 `_) 0.2.6 (2014-10-09) ------------------ - added use of get_diff_headers method into import.html template (`158 `_) - Try to use OrderedDict instead of SortedDict, which is deprecated in Django 1.7 (`157 `_) - fixed #105 unicode import - remove invalid form action "form_url" (`154 `_) 0.2.5 (2014-10-04) ------------------ - Do not convert numeric types to string (`149 `_) - implement export as an admin action (`124 `_) 0.2.4 (2014-09-18) ------------------ - fix: get_value raised attribute error on model method call - Fixed XLS import on python 3. Optimized loop - Fixed properly skipping row marked as skipped when importing data from the admin interface. - Allow Resource.export to accept iterables as well as querysets - Improve error messages - FIX: Properly handle NullBoleanField (`115 `_) - Backward Incompatible Change previously None values were handled as false 0.2.3 (2014-07-01) ------------------ - Add separator and field keyword arguments to ManyToManyWidget - FIX: No support for dates before 1900 (`93 `_) 0.2.2 (2014-04-18) ------------------ - RowResult now stores exception object rather than it's repr - Admin integration - add EntryLog object for each added/updated/deleted instance 0.2.1 (2014-02-20) ------------------ - FIX import_file_name form field can be use to access the filesystem (`65 `_) 0.2.0 (2014-01-30) ------------------ - Python 3 support 0.1.6 (2014-01-21) ------------------ * Additional hooks for customizing the workflow (`61 `_) 0.1.5 (2013-11-29) ------------------ * Prevent queryset caching when exporting (`44 `_) * Allow unchanged rows to be skipped when importing (`30 `_) * Update tests for Django 1.6 (`57 `_) * Allow different ``ResourceClass`` to be used in ``ImportExportModelAdmin`` (`49 `_) 0.1.4 ----- * Use ``field_name`` instead of ``column_name`` for field dehydration, FIX (`36 `_) * Handle OneToOneField, FIX (`17 `_) - Exception when attempting access something on the related_name. * export filter not working (`23 `_) 0.1.3 ----- * Fix packaging * DB transactions support for importing data 0.1.2 ----- * support for deleting objects during import * bug fixes * Allowing a field to be 'dehydrated' with a custom method * added documentation 0.1.1 ----- * added ExportForm to admin integration for choosing export file format * refactor admin integration to allow better handling of specific formats supported features and better handling of reading text files * include all available formats in Admin integration * bugfixes 0.1.0 ----- * Refactor api django-import-export-4.0.9/docs/conf.py000066400000000000000000000071441463433610200200540ustar00rootroot00000000000000import os import sys from importlib.metadata import version import django # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.append(os.path.abspath(".")) sys.path.append(os.path.abspath("..")) sys.path.append(os.path.abspath("../tests")) os.environ["DJANGO_SETTINGS_MODULE"] = "settings" django.setup() # -- General configuration ----------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.intersphinx", "sphinx.ext.autosectionlabel", ] autoclass_content = "both" autosectionlabel_prefix_document = True # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix of source filenames. source_suffix = ".rst" # The master toctree document. master_doc = "index" # General information about the project. project = "django-import-export" copyright = "2012–2024, Bojan Mihelac and others." # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. release = version("django-import-export") # for example take major/minor version = ".".join(release.split(".")[:2]) # The name of the Pygments (syntax highlighting) style to use. pygments_style = "sphinx" # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = "sphinx_rtd_theme" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] # Output file base name for HTML help builder. htmlhelp_basename = "django-import-export" # -- 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", "django-import-export.tex", "django-import-export Documentation", "Bojan Mihelac", "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", "django-import-export", "django-import-export Documentation", ["Bojan Mihelac"], 1, ) ] # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( "index", "django-import-export", "django-import-export Documentation", "Bojan Mihelac", "django-import-export", "Import/export data for Django", "Miscellaneous", ), ] # Documents to append as an appendix to all manuals. texinfo_appendices = [] # intersphinx documentation intersphinx_mapping = {"tablib": ("https://tablib.readthedocs.io/en/stable/", None)} exclude_patterns = ["image_src"] django-import-export-4.0.9/docs/contributing.rst000066400000000000000000000142141463433610200220120ustar00rootroot00000000000000.. _contributing: ############ Contributing ############ django-import-export is open-source and, as such, grows (or shrinks) & improves in part due to the community. Below are some guidelines on how to help with the project. By contributing you agree to abide by the `Code of Conduct `_. Philosophy ---------- * django-import-export is BSD-licensed. All contributed code must be either * the original work of the author, contributed under the BSD, or... * work taken from another project released under a BSD-compatible license. * GPL'd (or similar) works are not eligible for inclusion. * django-import-export's git main branch should always be stable, production-ready & passing all tests. .. _question: Questions --------- Please check the :ref:`common issues ` section of the :doc:`FAQ ` to see if your question already has an answer. For general questions about usage, we recommend posting to Stack Overflow, using the `django-import-export `_ tag. Please search existing answers to see if any match your problem. If not, post a new question including as much relevant detail as you can. See `how to ask `_ for more details. For questions about the internals of the library, please raise an `issue `_ and use the 'question' workflow. * First check to see if there is an existing issue which answers your question. * Remember to include as much detail as you can so that your question is answered in a timely manner. Guidelines For Reporting An Issue/Feature ----------------------------------------- So you've found a bug or have a great idea for a feature. Here are the steps you should take to help get it added/fixed in django-import-export: * First, check to see if there's an existing `issue `_ or `pull request `_ for the bug/feature. * If there isn't one there, please file an issue. The ideal report includes: * A description of the problem/suggestion. * How to recreate the bug. * If relevant, including the versions of your: * Python interpreter * Django * tablib version * django-import-export * Optionally any of the other dependencies involved * Ideally, creating a pull request with a (failing) test case demonstrating what's wrong. This makes it easy for us to reproduce and fix the problem. Guidelines For Contributing Code -------------------------------- If you're ready to take the plunge and contribute back some code or documentation please consider the following: * Search existing issues and PRs to see if there are already any similar proposals. * For substantial changes, we recommend raising a question_ first so that we can offer any advice or pointers based on previous experience. The process should look like: * Fork the project on GitHub into your own account. * Clone your copy of django-import-export. * Make a new branch in git & commit your changes there. * Push your new branch up to GitHub. * Again, ensure there isn't already an issue or pull request out there on it. * If there is and you feel you have a better fix, please take note of the issue number and mention it in your pull request. * Create a new pull request (based on your branch), including what the problem/feature is, versions of your software and referencing any related issues/pull requests. * We recommend setting up your editor to automatically indicate non-conforming styles (see `Development`_). In order to be merged into django-import-export, contributions must have the following: * A solid patch that: * is clear. * works across all supported versions of Python/Django. * follows the existing style of the code base (mostly PEP-8). * comments included as needed to explain why the code functions as it does * A test case that demonstrates the previous flaw that now passes with the included patch. * If it adds/changes a public API, it must also include documentation for those changes. * Must be appropriately licensed (see `Philosophy`_). * Adds yourself to the `AUTHORS`_ file. If your contribution lacks any of these things, they will have to be added by a core contributor before being merged into django-import-export proper, which may take substantial time for the all-volunteer team to get to. .. _`AUTHORS`: https://github.com/django-import-export/django-import-export/blob/main/AUTHORS Development ----------- Formatting ^^^^^^^^^^ * All files should be formatted using the black auto-formatter. This will be run by pre-commit if configured. * The project repository includes an ``.editorconfig`` file. We recommend using a text editor with EditorConfig support to avoid indentation and whitespace issues. * We allow up to 88 characters as this is the line length used by black. This check is included when you run flake8. Documentation, comments, and docstrings should be wrapped at 79 characters, even though PEP 8 suggests 72. * To install pre-commit:: python -m pip install pre-commit Then run:: pre-commit install * If using ``git blame``, you can ignore commits which made large changes to the code base, such as reformatting. Run this command from the base project directory:: git config blame.ignoreRevsFile .git-blame-ignore-revs .. _create_venv: Create virtual environment ^^^^^^^^^^^^^^^^^^^^^^^^^^ Once you have cloned and checked out the repository, you can install a new development environment as follows:: python -m venv django-import-export-venv source django-import-export-venv/bin/activate pip install -r requirements/base.txt -r requirements/test.txt Run tests ^^^^^^^^^ You can run the test suite with:: make clean test Build documentation ^^^^^^^^^^^^^^^^^^^ To build a local version of the documentation:: pip install -r requirements/docs.txt make build-html-doc The documentation will be present in ``docs/_build/html/index.html``. django-import-export-4.0.9/docs/export_workflow.rst000066400000000000000000000044311463433610200225560ustar00rootroot00000000000000==================== Export workflow ==================== This document describes the export data workflow in detail, with hooks that enable customization of the export process. Methods highlighted in yellow in the sequence diagram indicate public methods which can be overridden. .. image:: _static/images/export_workflow.svg :alt: Export workflow sequence diagram :scale: 75% The :meth:`~import_export.resources.Resource.export` method retrieves a ``QuerySet`` from the database and formats into a :class:`tablib.Dataset`. Various hook methods are defined to allow you to customize the export data. This is what happens when the method is invoked: #. The :meth:`~import_export.resources.Resource.export` method is passed an optional queryset parameter. The ``kwargs`` dict can hold additional information used to create the export, for example if called from the Admin UI. #. The :meth:`~import_export.resources.Resource.before_export` hook is called. #. If no ``QuerySet`` has been passed, then :meth:`~import_export.resources.Resource.get_queryset` method is called. #. The :meth:`~import_export.resources.Resource.filter_export` hook is called. You can override this method to modify the queryset for export. #. For each instance in the ``QuerySet``, :meth:`~import_export.resources.Resource.export_resource` is called (with the instance passed as a parameter). #. For each field defined in :attr:`~import_export.options.ResourceOptions.fields`: * :meth:`~import_export.resources.Resource.export_field` is called with the field and instance as parameters. * If a :ref:`dehydrate` method is defined on the ``Resource``, then this method is called to extract the field value, Otherwise :meth:`~import_export.fields.Field.export` is called for each defined field, with the instance passed as a parameter. * :meth:`~import_export.fields.Field.get_value` is called with the instance to retrieve the export value from the instance.export * The field's widget :meth:`~import_export.widgets.Widget.render` method is called to retrieve the export value. #. Each value is appended to a :class:`tablib.Dataset`. #. The :class:`tablib.Dataset` is returned from :meth:`~import_export.resources.Resource.export`. django-import-export-4.0.9/docs/faq.rst000077500000000000000000000260251463433610200200600ustar00rootroot00000000000000========================== Frequently Asked Questions ========================== What's the best way to communicate a problem, question, or suggestion? ====================================================================== To submit a feature, to report a bug, or to ask a question, please refer our :doc:`contributing guidelines `. How can I help? =============== We welcome contributions from the community. You can help in the following ways: * Reporting bugs or issues. * Answering questions which arise on `Stack Overflow `_ or as Github issues. * Providing translations for UI text. * Suggesting features or changes. We encourage you to read the :doc:`contributing guidelines `. .. _common_issues: Common issues ============= .. _import_id_fields_error_on_import: ``import_id_fields`` error on import ------------------------------------ The following error message can be seen on import: *The following fields are declared in 'import_id_fields' but are not present in the resource* This indicates that the Resource has not been configured correctly, and the import logic fails. Specifically, the import process is attempting to use either the defined or default values for :attr:`~import_export.options.ResourceOptions.import_id_fields` and no matching field has been detected in the resource fields. See :ref:`advanced_usage:Create or update model instances`. In cases where you are deliberately using generated fields in ``import_id_fields`` and these fields are not present in the dataset, then you need to modify the resource definition to accommodate this. See :ref:`dynamic_fields`. How to handle double-save from Signals -------------------------------------- This issue can apply if you have implemented post-save :ref:`advanced_usage:signals`, and you are using the import workflow in the Admin interface. You will find that the post-save signal is called twice for each instance. The reason for this is that the model ``save()`` method is called twice: once for the 'confirm' step and once for the 'import' step. The call to ``save()`` during the 'confirm' step is necessary to prove that the object will be saved successfully, or to report any exceptions in the Admin UI if save failed. After the 'confirm' step, the database transaction is rolled back so that no changes are persisted. Therefore there is no way at present to stop ``save()`` being called twice, and there will always be two signal calls. There is a workaround, which is to set a temporary flag on the instance being saved:: class BookResource(resources.ModelResource): def before_save_instance(self, instance, row, **kwargs): # during 'confirm' step, dry_run is True instance.dry_run = kwargs.get("dry_run", False) class Meta: model = Book fields = ('id', 'name') Your signal receiver can then include conditional logic to handle this flag:: @receiver(post_save, sender=Book) def my_callback(sender, **kwargs): instance = kwargs["instance"] if getattr(instance, "dry_run"): # no-op if this is the 'confirm' step return else: # your custom logic here # this will be executed only on the 'import' step pass Further discussion `here `_ and `here `_. How to dynamically set resource values -------------------------------------- There can be use cases where you need a runtime or user supplied value to be passed to a Resource. See :ref:`dynamically_set_resource_values`. How to set a value on all imported instances prior to persisting ---------------------------------------------------------------- If you need to set the same value on each instance created during import then refer to :ref:`advanced_usage:How to set a value on all imported instances prior to persisting`. How to export from more than one table -------------------------------------- In the usual configuration, a ``Resource`` maps to a single model. If you want to export data associated with relations to that model, then these values can be defined in the ``fields`` declaration. See :ref:`advanced_usage:Model relations`. How to import imagefield in excel cell -------------------------------------- Please refer to `this issue `_. How to hide stack trace in UI error messages -------------------------------------------- Please refer to :ref:`format_ui_error_messages`. Ids incremented twice during import ----------------------------------- When importing using the Admin site, it can be that the ids of the imported instances are different from those show in the preview step. This occurs because the rows are imported during 'confirm', and then the transaction is rolled back prior to the confirm step. Database implementations mean that sequence numbers may not be reused. Consider enabling :ref:`import_export_skip_admin_confirm` as a workaround. See `this issue `_ for more detailed discussion. Not Null constraint fails when importing blank CharField -------------------------------------------------------- This was an issue in v3 which is resolved in v4. The issue arises when importing from Excel because empty cells are converted to ``None`` during import. If the import process attempted to save a null value then a 'NOT NULL' exception was raised. In v4, initialization checks to see if the Django ``CharField`` has `blank `_ set to ``True``. If it does, then null values or empty strings are persisted as empty strings. If it is necessary to persist ``None`` instead of an empty string, then the ``allow_blank`` widget parameter can be set:: class BookResource(resources.ModelResource): name = Field(widget=CharWidget(allow_blank=False)) class Meta: model = Book See `this issue `_. Foreign key is null when importing ---------------------------------- It is possible to reference model relations by defining a field with the double underscore syntax. For example:: fields = ("author__name") This means that during export, the relation will be followed and the referenced field will be added correctly to the export. This does not work during import because the reference may not be enough to identify the correct relation instance. :class:`~import_export.widgets.ForeignKeyWidget` should be used during import. See the documentation explaining :ref:`advanced_usage:Foreign Key relations`. How to customize export data ---------------------------- See the following responses on StackOverflow: * https://stackoverflow.com/a/55046474/39296 * https://stackoverflow.com/questions/74802453/export-only-the-data-registered-by-the-user-django-import-export How to set export file encoding ------------------------------- If export produces garbled or unexpected output, you may need to set the export encoding. See `this issue `_. How to create relation during import if it does not exist --------------------------------------------------------- See :ref:`advanced_usage:Creating non existent relations`. How to handle large file uploads --------------------------------- If uploading large files, you may encounter time-outs. See :ref:`Using celery` and :ref:`bulk_import:Bulk imports`. How to use field other than `id` in Foreign Key lookup ------------------------------------------------------ See :ref:`advanced_usage:Foreign key relations`. ``RelatedObjectDoesNotExist`` exception during import ----------------------------------------------------- This can occur if a model defines a ``__str__()`` method which references a primary key or foreign key relation, and which is ``None`` during import. There is a workaround to deal with this issue. Refer to `this comment `_. 'failed to assign change_list_template attribute' warning in logs ----------------------------------------------------------------- This indicates that the change_list_template attribute could not be set, most likely due to a clash with a third party library. Refer to :ref:`interoperability`. How to skip rows with validation errors during import ----------------------------------------------------- Refer to `this comment `_. ``FileNotFoundError`` during Admin import 'confirm' step -------------------------------------------------------- You may receive an error during import such as:: FileNotFoundError [Errno 2] No such file or directory: '/tmp/tmp5abcdef' This usually happens because you are running the Admin site in a multi server or container environment. During import, the import file has to be stored temporarily and then retrieved for storage after confirmation. Therefore ``FileNotFoundError`` error can occur because the temp storage is not available to the server process after confirmation. To resolve this, you should avoid using temporary file system storage in multi server environments. Refer to :ref:`import process` for more information. How to export large datasets ---------------------------- Large datasets can be exported in a number of ways, depending on data size and preferences. #. You can write custom scripts or `Admin commands `_ to handle the export. Output can be written to a local filesystem, cloud bucket, network storage etc. Refer to the documentation on exporting :ref:`programmatically`. #. You can use the third party library :doc:`django-import-export-celery ` to handle long-running exports. #. You can enable :ref:`export via admin action` and then select items for export page by page in the Admin UI. This will work if you have a relatively small number of pages and can handle export to multiple files. This method is suitable as a one-off or as a simple way to export large datasets via the Admin UI. How to change column names on export ------------------------------------ If you want to modify the names of the columns on export, you can do so by overriding :meth:`~import_export.resources.Resource.get_export_headers`:: class BookResource(ModelResource): def get_export_headers(self, fields=None): headers = super().get_export_headers(fields=fields) for i, h in enumerate(headers): if h == 'name': headers[i] = "NEW COLUMN NAME" return headers class Meta: model = Book How to configure logging ------------------------ Refer to :ref:`logging configuration` for more information. django-import-export-4.0.9/docs/getting_started.rst000066400000000000000000000114631463433610200224750ustar00rootroot00000000000000=============== Getting started =============== Introduction ============ This section describes how to get started with import-export. We'll use the :ref:`example application` as a guide. import-export can be used programmatically as described here, or it can be integrated with the :ref:`Django Admin interface`. Test data ========= There are sample files which can be used to test importing data in the `tests/core/exports` directory. The test models =============== For example purposes, we'll use a simplified book app. Here is our ``models.py``:: # app/models.py class Author(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Category(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Book(models.Model): name = models.CharField('Book name', max_length=100) author = models.ForeignKey(Author, blank=True, null=True) author_email = models.EmailField('Author email', max_length=75, blank=True) imported = models.BooleanField(default=False) published = models.DateField('Published', blank=True, null=True) price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) categories = models.ManyToManyField(Category, blank=True) def __str__(self): return self.name .. _base-modelresource: Creating a resource =============================== To integrate import-export with our ``Book`` model, we will create a :class:`~import_export.resources.ModelResource` class in ``admin.py`` that will describe how this resource can be imported or exported:: # app/admin.py from import_export import resources from core.models import Book class BookResource(resources.ModelResource): class Meta: model = Book # or 'core.Book' Importing data ============== Let's import some data! .. code-block:: python :linenos: :emphasize-lines: 4,5 >>> import tablib >>> from import_export import resources >>> from core.models import Book >>> book_resource = resources.modelresource_factory(model=Book)() >>> dataset = tablib.Dataset(['', 'New book'], headers=['id', 'name']) >>> result = book_resource.import_data(dataset, dry_run=True) >>> print(result.has_errors()) False >>> result = book_resource.import_data(dataset, dry_run=False) In the fourth line we use :func:`~import_export.resources.modelresource_factory` to create a default :class:`~import_export.resources.ModelResource`. The ``ModelResource`` class created this way is equal to the one shown in the example in section :ref:`base-modelresource`. In fifth line a :class:`~tablib.Dataset` with columns ``id`` and ``name``, and one book entry, are created. A field (or combination of fields) which uniquely identifies an instance always needs to be present. This is so that the import process can manage creates / updates. In this case, we use ``id``. For more information, see :ref:`advanced_usage:Create or update model instances`. In the rest of the code we first pretend to import data using :meth:`~import_export.resources.Resource.import_data` and ``dry_run`` set, then check for any errors and actually import data this time. .. seealso:: :doc:`/import_workflow` for a detailed description of the import workflow and its customization options. Deleting data ------------- To delete objects during import, implement the :meth:`~import_export.resources.Resource.for_delete` method on your :class:`~import_export.resources.Resource` class. You should add custom logic which will signify which rows are to be deleted. For example, suppose you would like to have a field in the import dataset to indicate which rows should be deleted. You could include a field called *delete* which has either a 1 or 0 value. In this case, declare the resource as follows:: class BookResource(resources.ModelResource): def for_delete(self, row, instance): return row["delete"] == "1" class Meta: model = Book If the delete flag is set on a *'new'* instance (i.e. the row does not already exist in the db) then the row will be skipped. .. _exporting_data: Exporting data ============== Now that we have defined a :class:`~import_export.resources.ModelResource` class, we can export books:: >>> from core.admin import BookResource >>> dataset = BookResource().export() >>> print(dataset.csv) id,name,author,author_email,imported,published,price,categories 2,Some book,1,,0,2012-12-05,8.85,1 .. warning:: Data exported programmatically is not sanitized for malicious content. You will need to understand the implications of this and handle accordingly. See :ref:`admin_security`. django-import-export-4.0.9/docs/image_src/000077500000000000000000000000001463433610200205005ustar00rootroot00000000000000django-import-export-4.0.9/docs/image_src/export_workflow.txt000066400000000000000000000032031463433610200245120ustar00rootroot00000000000000# see import_workflow.txt participant Resource participant Field participant Widget participant tablib.Dataset Resource->Resource:""export(queryset=None, \*\*kwargs)"" activate Resource Resource->Resource:""before_export(queryset=None, \*\*kwargs)"" note over Resource: A Queryset instance can be passed into export().\nIf no Queryset is passed, get_queryset() is called. Resource->Resource:""get_queryset()"" activate Resource #lightblue Resource<--Resource:""Queryset"" deactivate Resource Resource->Resource:""filter_export(queryset, \*\*kwargs)"" activate Resource #lightblue Resource<--Resource:""Queryset"" deactivate Resource loop #pink each row in Queryset Resource->Resource:""export_resource(instance)"" activate Resource #lightblue loop #green each field in export field list Resource->Resource:""export_field(field, instance)"" activate Resource #lightpink Resource->Field:""export(instance)"" activate Field #lightblue note over Field: An optional callable can be defined instead of export().\n See 'dehydrate' methods in docs. Field->Field:""get_value(instance)"" activate Field #lightpink note over Field: Get the field's value from the instance. Field<--Field:""<>"" Field->Widget:""render(value, instance)"" activate Widget note over Widget: Format field value into a\nstring or value as required. Field<--Widget:""<> deactivate Widget deactivate Field Resource<--Field:""<>"" deactivate Field deactivate Resource end deactivate Resource Resource->tablib.Dataset:""append()"" end Resource<--Resource:""<>"" deactivate Resource django-import-export-4.0.9/docs/image_src/import_workflow.txt000066400000000000000000000056721463433610200245170ustar00rootroot00000000000000# Source for import workflow sequence diagram. # This source can be loaded into sequencediagram.org (web app). # If this source is changed, then the svg image in 'images/' dir should be regenerated # by exporting from the web app. participant Resource participant Result participant RowResult participant InstanceLoader participant Field participant Widget Resource->Resource:""import_data(data, \*\*kwargs)"" activate Resource Resource->Result:""__init__()"" activate Result Resource<--Result:""Result"" deactivate Result Resource->Resource:""before_import(dataset, \*\*kwargs)"" loop #pink each row in dataset Resource->Resource:""import_row(row, instance_loader, \*\*kwargs)"" activate Resource #lightblue Resource->RowResult:""__init__()"" activate RowResult Resource<--RowResult:""RowResult"" deactivate RowResult Resource->Resource:""before_import_row(row, \*\*kwargs)"" Resource->Resource:""get_or_init_instance(instance_loader, \n row)"" activate Resource #lightgrey Resource->Resource:""get_instance(instance_loader, row)"" activate Resource #lightgreen Resource->InstanceLoader:""get_instance(row)"" activate InstanceLoader note over InstanceLoader: Existing Instance is returned if exists,\n otherwise a new Instance is created. Resource<--InstanceLoader:""Instance"" deactivate InstanceLoader Resource-->Resource:""Instance"" deactivate Resource Resource-->Resource:""Instance, bool"" deactivate Resource Resource->Resource:""after_init_instance(instance, new, row \n \*\*kwargs)"" Resource->Resource:""for_delete(row, instance)"" activate Resource #lightgrey note over Resource: If True, row is deleted. Resource-->Resource:""bool"" deactivate Resource Resource->Resource:""import_instance(instance, row, \*\*kwargs)"" activate Resource #lightgrey loop #green each field in row Resource->Field:""save(instance, row, is_m2m, \*\*kwargs)"" note over Field: save logic determines the correct value\nand sets attribute on instance. Field->Field:""clean(row, \*\*kwargs)"" activate Field Field->Widget:""clean(value, row, \*\*kwargs)"" activate Widget Field<--Widget:""value"" deactivate Widget deactivate Field end deactivate Resource Resource->Resource:""skip_row(instance, original, row, \n import_validation_errors)"" activate Resource #lightgrey note over Resource: If True, row is skipped. Resource-->Resource:""bool"" deactivate Resource Resource->Resource:""validate_instance(instance, \n import_validation_errors)"" Resource->Resource:""save_instance(instance, row, new, \n \*\*kwargs)"" Resource->Resource:""save_m2m(instance, row, \*\*kwargs)"" Resource->Resource:""after_import_row(row, row_result, \n \*\*kwargs)"" Resource-->Resource:""RowResult"" deactivate Resource end Resource<--Resource:""Result"" deactivate Resource django-import-export-4.0.9/docs/import_workflow.rst000066400000000000000000000131211463433610200225430ustar00rootroot00000000000000==================== Import workflow ==================== This document describes the import data workflow in detail, with hooks that enable customization of the import process. Methods highlighted in yellow in the sequence diagram indicate public methods which can be overridden. .. image:: _static/images/import_workflow.svg :alt: Import workflow sequence diagram :scale: 75% The :meth:`~import_export.resources.Resource.import_data` method of :class:`~import_export.resources.Resource` is responsible for importing data from a given dataset. Refer to the method documentation for parameters to this method. This is what happens when the method is invoked: #. First, a new :class:`~import_export.results.Result` instance, which holds errors and other information gathered during the import, is initialized. Then, an :class:`~import_export.instance_loaders.BaseInstanceLoader` responsible for loading existing instances is initialized. A different :class:`~import_export.instance_loaders.BaseInstanceLoader` can be specified via :class:`~import_export.options.ResourceOptions`'s ``instance_loader_class`` attribute. A :class:`~import_export.instance_loaders.CachedInstanceLoader` can be used to reduce number of database queries. See the :mod:`~import_export.instance_loaders` for available implementations. #. The :meth:`~import_export.resources.Resource.before_import` hook is called. By implementing this method in your resource, you can customize the import process. #. Each row of the to-be-imported dataset is processed according to the following steps: * The :meth:`~import_export.resources.Resource.before_import_row` hook is called to allow for row data to be modified before it is imported. * :meth:`~import_export.resources.Resource.get_or_init_instance` is called with current :class:`~import_export.instance_loaders.BaseInstanceLoader` and current row of the dataset, returning an object and a Boolean declaring if the object is newly created or not. If no object can be found for the current row, :meth:`~import_export.resources.Resource.init_instance` is invoked to initialize an object. As always, you can override the implementation of :meth:`~import_export.resources.Resource.init_instance` to customize how the new object is created (i.e. set default values). * :meth:`~import_export.resources.Resource.for_delete` is called to determine if the passed ``instance`` should be deleted. In this case, the import process for the current row is stopped at this point. * If the instance was not deleted in the previous step, :meth:`~import_export.resources.Resource.import_row` is called with the ``instance`` as current object instance, ``row`` as current row. :meth:`~import_export.resources.Resource.import_field` is called for each field in :class:`~import_export.resources.Resource` skipping many- to-many fields. Many-to-many fields are skipped because they require instances to have a primary key and therefore assignment is postponed to when the object has already been saved. :meth:`~import_export.resources.Resource.import_field` in turn calls :meth:`~import_export.fields.Field.save`, if ``Field.attribute`` is set and ``Field.column_name`` exists in the given row. * It then is determined whether the newly imported object is different from the already present object and if therefore the given row should be skipped or not. This is handled by calling :meth:`~import_export.resources.Resource.skip_row` with ``original`` as the original object and ``instance`` as the current object from the dataset. If the current row is to be skipped, ``row_result.import_type`` is set to ``IMPORT_TYPE_SKIP``. * If the current row is not to be skipped, :meth:`~import_export.resources.Resource.save_instance` is called and actually saves the instance when ``dry_run`` is not set. There are two hook methods (that by default do nothing) giving you the option to customize the import process: * :meth:`~import_export.resources.Resource.before_save_instance` * :meth:`~import_export.resources.Resource.after_save_instance` * :meth:`~import_export.resources.Resource.save_m2m` is called to save many to many fields. * :class:`~import_export.results.RowResult` is assigned with a diff between the original and the imported object fields, as well as and ``import_type`` attribute which states whether the row is new, updated, skipped or deleted. If an exception is raised during row processing and :meth:`~import_export.resources.Resource.import_row` was invoked with ``raise_errors=False`` (which is the default) the particular traceback is appended to :class:`~import_export.results.RowResult` as well. If either the row was not skipped or the :class:`~import_export.resources.Resource` is configured to report skipped rows, the :class:`~import_export.results.RowResult` is appended to the :class:`~import_export.results.Result` * The :meth:`~import_export.resources.Resource.after_import_row` hook is called #. The :class:`~import_export.results.Result` is returned. Transaction support ------------------- If transaction support is enabled, whole import process is wrapped inside transaction and rolled back or committed respectively. All methods called from inside of :meth:`~import_export.resources.Resource.import_data` (create / delete / update) receive ``False`` for ``dry_run`` argument. .. _Dataset: https://tablib.readthedocs.io/en/stable/api/#dataset-object django-import-export-4.0.9/docs/index.rst000066400000000000000000000025531463433610200204150ustar00rootroot00000000000000====================== Django import / export ====================== django-import-export is a Django application and library for importing and exporting data with included admin integration. **Features:** * Import from / Export to multiple file formats * Manage import / export of object relations, data types * Handle create / update / delete / skip during imports * Extensible API * Support multiple formats (Excel, CSV, JSON, ... and everything else that `tablib`_ supports) * Bulk import * Admin integration for importing / exporting * Preview import changes * Export data respecting admin filters .. figure:: _static/images/django-import-export-change.png A screenshot of the change view with Import and Export buttons. .. toctree:: :maxdepth: 2 :caption: User Guide installation getting_started advanced_usage admin_integration import_workflow export_workflow bulk_import celery testing faq screenshots release_notes changelog .. toctree:: :maxdepth: 2 :caption: API documentation api_admin api_resources api_widgets api_fields api_instance_loaders api_mixins api_tmp_storages api_results api_forms api_exceptions .. toctree:: :maxdepth: 2 :caption: Developers contributing .. _`tablib`: https://github.com/jazzband/tablib django-import-export-4.0.9/docs/installation.rst000066400000000000000000000217621463433610200220120ustar00rootroot00000000000000============================== Installation and configuration ============================== import-export is available on the Python Package Index (PyPI), so it can be installed with standard Python tools like ``pip`` or ``easy_install``:: pip install django-import-export This will automatically install the default formats supported by tablib. If you need additional formats you should install the extra dependencies as required appropriate tablib dependencies (e.g. ``pip install django-import-export[xlsx]``). To install all available formats, use ``pip install django-import-export[all]``. For all formats, see the `tablib documentation `_. Alternatively, you can install the git repository directly to obtain the development version:: pip install -e git+https://github.com/django-import-export/django-import-export.git#egg=django-import-export Now, you're good to go, unless you want to use import-export from the admin as well. In this case, you need to add it to your ``INSTALLED_APPS`` and let Django collect its static files. .. code-block:: python # settings.py INSTALLED_APPS = ( ... 'import_export', ) .. code-block:: shell $ python manage.py collectstatic All prerequisites are set up! See :doc:`getting_started` to learn how to use import-export in your project. Settings ======== You can configure the following in your settings file: ``IMPORT_EXPORT_USE_TRANSACTIONS`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Controls if resource importing should use database transactions. Defaults to ``True``. Using transactions makes imports safer as a failure during import won’t import only part of the data set. Can be overridden on a ``Resource`` class by setting the ``use_transactions`` class attribute. ``IMPORT_EXPORT_SKIP_ADMIN_LOG`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If set to ``True``, skips the creation of admin log entries when importing via the :ref:`Admin UI`. Defaults to ``False``. This can speed up importing large data sets, at the cost of losing an audit trail. Can be overridden on a ``ModelAdmin`` class inheriting from ``ImportMixin`` by setting the ``skip_admin_log`` class attribute. .. _import_export_tmp_storage_class: ``IMPORT_EXPORT_TMP_STORAGE_CLASS`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A string path to the preferred temporary storage module. Controls which storage class to use for storing the temporary uploaded file during imports. Defaults to ``import_export.tmp_storages.TempFolderStorage``. Can be overridden on a ``ModelAdmin`` class inheriting from ``ImportMixin`` by setting the ``tmp_storage_class`` class attribute. .. _import_export_default_file_storage: ``IMPORT_EXPORT_DEFAULT_FILE_STORAGE`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A string path to a customized storage implementation. This setting is deprecated and only applies if using Django with a version less than 4.2, and will be removed in a future release. .. _import_export_import_permission_code: ``IMPORT_EXPORT_IMPORT_PERMISSION_CODE`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If set, lists the permission code that is required for users to perform the 'import' action. Defaults to ``None``, which means all users can perform imports. Django’s built-in permissions have the codes ``add``, ``change``, ``delete``, and ``view``. You can also add your own permissions. For example, if you set this value to 'import', then you can define an explicit permission for import in the example app with: .. code-block:: python from core.models import Book from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType content_type = ContentType.objects.get_for_model(Book) permission = Permission.objects.create( codename="import_book", name="Can import book", content_type=content_type, ) Now only users who are assigned 'import_book' permission will be able to perform imports. For more information refer to the `Django auth `_ documentation. .. _import_export_export_permission_code: ``IMPORT_EXPORT_EXPORT_PERMISSION_CODE`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Defines the same behaviour as :ref:`IMPORT_EXPORT_IMPORT_PERMISSION_CODE`, but for export. ``IMPORT_EXPORT_CHUNK_SIZE`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ An integer that defines the size of chunks when iterating a QuerySet for data exports. Defaults to ``100``. You may be able to save memory usage by decreasing it, or speed up exports by increasing it. Can be overridden on a ``Resource`` class by setting the ``chunk_size`` class attribute. .. _import_export_skip_admin_confirm: ``IMPORT_EXPORT_SKIP_ADMIN_CONFIRM`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If ``True``, no import confirmation page will be presented to the user in the Admin UI. The file will be imported in a single step. By default, the import will occur in a transaction. If the import causes any runtime errors (including validation errors), then the errors are presented to the user and then entire transaction is rolled back. Note that if you disable transaction support via configuration (or if your database does not support transactions), then validation errors will still be presented to the user but valid rows will have imported. This flag can be enabled for the model admin using the :attr:`~import_export.mixins.BaseImportMixin.skip_import_confirm` flag. .. _import_export_skip_admin_export_ui: ``IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A boolean value which will skip the :ref:`export form` in the Admin UI, when the export is initiated from the :ref:`change list page`. The file will be exported in a single step. If enabled: * the first element in the :attr:`~import_export.mixins.BaseImportExportMixin.resource_classes` list will be used. * the first element in the :ref:`export_formats` list will be used. This flag can be enabled for the model admin using the :attr:`~import_export.mixins.BaseExportMixin.skip_export_form` flag. .. _import_export_skip_admin_action_export_ui: ``IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A boolean value which will skip the :ref:`export form` in the Admin UI, but only when the export is requested from an :ref:`Admin UI action`, or from the 'Export' button on the :ref:`change form `. .. _import_export_escape_formulae_on_export: ``IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If set to ``True``, strings will be sanitized by removing any leading '=' character. This is to prevent execution of Excel formulae. By default this is ``False``. .. _import_export_formats: ``IMPORT_EXPORT_FORMATS`` ~~~~~~~~~~~~~~~~~~~~~~~~~ A list that defines which file formats will be allowed during imports and exports. Defaults to ``import_export.formats.base_formats.DEFAULT_FORMATS``. The values must be those provided in ``import_export.formats.base_formats`` e.g .. code-block:: python # settings.py from import_export.formats.base_formats import XLSX IMPORT_EXPORT_FORMATS = [XLSX] .. _import_formats: ``IMPORT_FORMATS`` ~~~~~~~~~~~~~~~~~~ A list that defines which file formats will be allowed during imports. Defaults to ``IMPORT_EXPORT_FORMATS``. The values must be those provided in ``import_export.formats.base_formats`` e.g .. code-block:: python # settings.py from import_export.formats.base_formats import CSV, XLSX IMPORT_FORMATS = [CSV, XLSX] .. _export_formats: ``EXPORT_FORMATS`` ~~~~~~~~~~~~~~~~~~ A list that defines which file formats will be allowed during exports. Defaults to ``IMPORT_EXPORT_FORMATS``. The values must be those provided in ``import_export.formats.base_formats`` e.g .. code-block:: python # settings.py from import_export.formats.base_formats import XLSX EXPORT_FORMATS = [XLSX] .. _exampleapp: Example app =========== There's an example application that showcases what import_export can do. Before starting, set up a virtual environment ("venv") using :ref:`these instructions`. You can initialize and run the example application as follows:: cd tests ./manage.py makemigrations ./manage.py migrate ./manage.py createsuperuser ./manage.py loaddata author.json category.json book.json ./manage.py runserver Go to http://127.0.0.1:8000 For example import files, see :ref:`getting_started:Test data`. .. _logging: Configure logging ================= You can adjust the log level to see output as required. This is an example configuration to be placed in your application settings:: LOGGING = { "handlers": { "console": {"level": "DEBUG", "class": "logging.StreamHandler"}, }, "loggers": { "django.db.backends": {"level": "INFO", "handlers": ["console"]}, "import_export": { "handlers": ["console"], "level": "INFO", }, }, } django-import-export-4.0.9/docs/make.bat000066400000000000000000000120061463433610200201530ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) 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. texinfo to make Texinfo files echo. gettext to make PO message catalogs 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\django-shop-discounts.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\django-shop-discounts.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" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. 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 django-import-export-4.0.9/docs/release_notes.rst000066400000000000000000000377551463433610200221520ustar00rootroot00000000000000============= Release Notes ============= v4 == v4 introduces significant updates to import-export. We have taken the opportunity to introduce breaking changes in order to fix some long-standing issues. Refer to the :doc:`changelog` for more information. Please ensure you test thoroughly before deploying v4 to production. This guide describes the major changes and how to upgrade. Installation ============ We have modified installation methods to allow for optional dependencies. This means that you have to explicitly declare dependencies when installing import-export. If you are not sure, or want to preserve the pre-v4 behaviour, then ensure that import-export is installed as follows (either in your requirements file or during installation):: django-import-export[all] Functional changes ================== CharWidget ---------- Constructor arguments are dynamically set during instantiation based on the properties of the underlying Django db CharField. If the db field has `blank `_ set to True, then incoming values of empty strings or null are stored as empty strings. See :class:`~import_export.widgets.CharWidget`. :meth:`~import_export.widgets.CharWidget.clean` will now return a string type as the default. The ``coerce_to_string`` option introduced in v3 is no longer used in this method. Validation error messages ------------------------- The following widgets have had validation error messages updated: * :class:`~import_export.widgets.DateWidget` * :class:`~import_export.widgets.TimeWidget` * :class:`~import_export.widgets.DateTimeWidget` * :class:`~import_export.widgets.DurationWidget` Export format ------------- We have standardized the export output which is returned from :meth:`~import_export.widgets.Widget.render`. Prior to v4, the export format returned from ``render()`` varied between Widget implementations. In v4, return values are rendered as strings by default (where applicable), with ``None`` values returned as empty strings. Widget params can modify this behavior. This causes a change when exporting to Excel. In v3, certain fields, such as numeric values, were rendered as their native type. In v4, all fields are now rendered as strings. To preserve the v3 behavior when exporting to Excel, set the ``coerce_to_string`` param to ``False``. See :ref:`documentation`. :doc:`Widget API documentation`. Export field order ------------------ The ordering rules for exported fields has been standardized. See :ref:`documentation`. Error output ------------ If the ``raise_errors`` parameter of :meth:`~import_export.resources.Resource.import_data` is ``True``, then an instance of :class:`~import_export.exceptions.ImportError` is raised. This exception wraps the underlying exception. See `this PR `_. Check ``import_id_fields`` -------------------------- Prior to v4 we had numerous issues where users were confused when imports failed due to declared ``import_id_fields`` not being present in the dataset. We added functionality in v4 to check for this and to raise a clearer error message. In some use-cases, it is a requirement that ``import_id_fields`` are not in the dataset, and are generated dynamically. If this affects your implementation, start with the documentation :ref:`here`. Deprecations ============ * The ``obj`` param passed to :meth:`~import_export.widgets.Widget.render` is deprecated. The :meth:`~import_export.widgets.Widget.render` method should not need to have a reference to model instance. The call to :meth:`~import_export.widgets.Widget.render` from :meth:`~import_export.fields.Field.export` has been removed. * Use of ``ExportViewFormMixin`` is deprecated. See `this issue `_. * See :ref:`renamed_methods`. * In the Admin UI, the declaration of ``resource_class`` is replaced by ``resource_classes``:: class BookAdmin(ImportExportModelAdmin): # remove this line # resource_class = BookResource # replace with this resource_classes = [BookResource] Admin UI ======== LogEntry -------- ``LogEntry`` instances are created during import for creates, updates and deletes. The functionality to store ``LogEntry`` has changed in v4 in order to address a deprecation in Django 5. For this to work correctly, deleted instances are now always copied and retained in each :class:`~import_export.results.RowResult` so that they can be recorded in each ``LogEntry``. This only occurs for delete operations initiated from the Admin UI. Export action ------------- The export action has been updated to include the export workflow. Prior to v4, it was possible to select export selected items using an export admin action. However this meant that the export workflow was skipped and it was not possible to select the export resource. This has been fixed in v4 so that export workflow is now present when exporting via the Admin UI action. For more information see :ref:`export documentation`. Export selected fields ---------------------- The :ref:`export 'confirm' page` now includes selectable fields for export. If you wish to revert to the previous (v3) version of the export confirm screen, add a :attr:`~import_export.admin.ExportMixin.export_form_class` declaration to your Admin class subclass, for example:: class BookAdmin(ImportExportModelAdmin): export_form_class = ExportForm Success message --------------- The success message shown on successful import has been updated to include the number of 'deleted' and 'skipped' rows. See `this PR `_. Import error messages --------------------- The default error message for import errors has been modified to simplify the format. Error messages now contain the error message only by default. The row and traceback are not presented. The original format can be restored by setting :attr:`~import_export.admin.ImportMixin.import_error_display` on the Admin class definition. For example:: class BookAdmin(ImportExportModelAdmin): import_error_display = ("message", "row", "traceback") See `this issue `_. API changes =========== v4 of import-export contains a number of changes to the API. These changes are summarized in the table below. Refer to `this PR `_ for detailed information. If you have customized import-export by overriding methods, then you may have to modify your installation before working with v4. If you have not overridden any methods then you should not be affected by these changes and no changes to your code should be necessary. The API changes include changes to method arguments, although some method names have changed. Methods which process row data have been updated so that method args are standardized. This has been done to resolve inconsistency issues where the parameters differed between method calls, and to allow easier extensibility. :class:`import_export.resources.Resource` ----------------------------------------- .. _renamed_methods: Renamed methods ^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``import_obj(self, obj, data, dry_run, **kwargs)`` - ``import_instance(self, instance, row, **kwargs)`` - * ``obj`` param renamed to ``instance`` * ``data`` param renamed to ``row`` * ``dry_run`` param now in ``kwargs`` * - ``after_import_instance(self, instance, new, row_number=None, **kwargs)`` - ``after_init_instance(self, instance, new, row, **kwargs)`` - * ``row`` added as mandatory arg * ``row_number`` now in ``kwargs`` Parameter changes ^^^^^^^^^^^^^^^^^ This section describes methods in which the parameters have changed. .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``before_import(self, dataset, using_transactions, dry_run, **kwargs)`` - ``before_import(self, dataset, **kwargs)`` - * ``using_transactions`` param now in ``kwargs`` * ``dry_run`` param now in ``kwargs`` * - ``after_import(self, dataset, result, using_transactions, dry_run, **kwargs)`` - ``after_import(self, dataset, result, **kwargs)`` - * ``using_transactions`` param now in ``kwargs`` * ``dry_run`` param now in ``kwargs`` * - ``before_import_row(self, row, row_number=None, **kwargs)`` - ``before_import_row(self, row, **kwargs)`` - * ``row_number`` now in ``kwargs`` * - ``after_import_row(self, row, row_result, row_number=None, **kwargs)`` - ``after_import_row(self, row, row_result, **kwargs)`` - * ``row_number`` now in ``kwargs`` * - ``import_row(self, row, instance_loader, using_transactions=True, dry_run=False, **kwargs)`` - ``import_row(self, row, instance_loader, **kwargs)`` - * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``save_instance(self, instance, is_create, using_transactions=True, dry_run=False)`` - ``save_instance(self, instance, is_create, row, ***kwargs)`` - * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * ``row`` added as mandatory arg * - ``save_m2m(self, obj, data, using_transactions, dry_run)`` - ``save_m2m(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``obj`` renamed to ``instance`` * ``data`` renamed to ``row`` * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``before_save_instance(self, instance, using_transactions, dry_run)`` - ``before_save_instance(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``after_save_instance(self, instance, using_transactions, dry_run)`` - ``after_save_instance(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``delete_instance(self, instance, using_transactions=True, dry_run=False)`` - ``delete_instance(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``before_delete_instance(self, instance, dry_run)`` - ``before_delete_instance(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``after_delete_instance(self, instance, dry_run)`` - ``after_delete_instance(self, instance, row, **kwargs)`` - * ``row`` added as mandatory arg * ``dry_run`` param now in ``kwargs`` * ``using_transactions`` param now in ``kwargs`` * - ``import_field(self, field, obj, data, is_m2m=False, **kwargs)`` - ``import_field(self, field, instance, row, is_m2m=False, **kwargs):`` - * ``obj`` renamed to ``instance`` * ``data`` renamed to ``row`` * - ``before_export(self, queryset, *args, **kwargs)`` - ``before_export(self, queryset, **kwargs)`` - * unused ``*args`` list removed * - ``after_export(self, queryset, data, *args, **kwargs)`` - ``after_export(self, queryset, dataset, **kwargs)`` - * unused ``*args`` list removed * ``data`` renamed to ``dataset`` * - ``filter_export(self, queryset, *args, **kwargs)`` - ``filter_export(self, queryset, **kwargs)`` - * unused ``*args`` list removed * - ``export_field(self, field, obj)`` - ``export_field(self, field, instance)`` - * ``obj`` renamed to ``instance`` * - ``export_resource(self, obj)`` - ``export_resource(self, instance, fields=None)`` - * ``obj`` renamed to ``instance`` * ``fields`` passed as kwarg * - ``export(self, *args, queryset=None, **kwargs)`` - ``export(self, queryset=None, **kwargs)`` - * unused ``*args`` list removed * - ``get_export_headers(self)`` - ``get_export_headers(self, fields=None)`` - * ``fields`` passed as kwarg :class:`import_export.mixins.BaseImportExportMixin` --------------------------------------------- Parameter changes ^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``get_resource_classes(self)`` - ``get_resource_classes(self, request)`` - * Added ``request`` param * - ``get_resource_kwargs(self, request, *args, **kwargs)`` - ``get_resource_kwargs(self, request, **kwargs)`` - * unused ``*args`` list removed :class:`import_export.mixins.BaseImportMixin` --------------------------------------------- Parameter changes ^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``get_import_resource_kwargs(self, request, *args, **kwargs)`` - ``get_import_resource_kwargs(self, request, **kwargs)`` - * unused ``*args`` list removed * - ``get_import_resource_classes(self)`` - ``get_import_resource_classes(self, request)`` - * Added ``request`` param * - ``choose_import_resource_class(self, form)`` - ``choose_import_resource_class(self, form, request)`` - * Added ``request`` param :class:`import_export.mixins.BaseExportMixin` --------------------------------------------- Parameter changes ^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``get_export_resource_classes(self)`` - ``get_export_resource_classes(self, request)`` - * Added ``request`` param * - ``get_export_resource_kwargs(self, request, *args, **kwargs)`` - ``get_export_resource_kwargs(self, request, **kwargs)`` - * unused ``*args`` list removed * - ``get_data_for_export(self, request, queryset, *args, **kwargs)`` - ``get_data_for_export(self, request, queryset, **kwargs)`` - * unused ``*args`` list removed * - ``choose_export_resource_class(self, form)`` - ``choose_export_resource_class(self, form, request)`` - * Added ``request`` param :class:`import_export.fields.Field` ----------------------------------- Parameter changes ^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``clean(self, data, **kwargs)`` - ``clean(self, row, **kwargs)`` - * ``data`` renamed to ``row`` * - ``get_value(self, instance)`` - ``get_value(self, obj)`` - * ``obj`` renamed to ``instance`` * - ``save(self, obj, data, is_m2m=False, **kwargs)`` - ``save(self, instance, row, is_m2m=False, **kwargs)`` - * ``obj`` renamed to ``instance`` * ``data`` renamed to ``row`` * - ``export(self, obj)`` - ``export(self, instance)`` - * ``obj`` renamed to ``instance`` :class:`import_export.forms.ImportExportFormBase` ------------------------------------------------- If you have subclassed one of the :mod:`~import_export.forms` then you may need to modify the parameters passed to constructors. The ``input_format`` field of :class:`~import_export.forms.ImportForm` has been moved to the parent class (:class:`~import_export.forms.ImportExportFormBase`) and renamed to ``format``. The ``file_format`` field of :class:`~import_export.forms.ExportForm` has been removed and is now replaced by :attr:`~import_export.forms.ImportExportFormBase.format`. Parameter changes ^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 * - Previous - New - Summary * - ``__init__(self, *args, resources=None, **kwargs)`` - ``__init__(self, formats, resources, **kwargs)`` - * ``formats`` added as a mandatory arg * ``resources`` added as a mandatory arg * unused ``*args`` list removed django-import-export-4.0.9/docs/screenshots.rst000066400000000000000000000032661463433610200216500ustar00rootroot00000000000000=========== Screenshots =========== .. |import-form| image:: _static/images/screenshots/import-form.png :width: 600 :alt: screenshot of the import form in django-import-export .. |confirm-import| image:: _static/images/screenshots/confirm-import.png :width: 600 :alt: screenshot of the import confirm page in django-import-export .. |import-complete| image:: _static/images/screenshots/import-complete.png :width: 600 :alt: screenshot of the import completed page in django-import-export .. |import-update-with-authors| image:: _static/images/screenshots/import-update-with-authors.png :width: 600 :alt: screenshot of import update with author information in django-import-export .. |export-selected-action| image:: _static/images/screenshots/export-selected-action.png :width: 600 :alt: screenshot of selecting existing records for export in django-import-export .. |export-form| image:: _static/images/screenshots/export-selected-action.png :width: 600 :alt: screenshot of selecting existing records for export in django-import-export These are some screenshots for the Admin UI of the :ref:`example application`. |import-form| Shows the initial import form with fields for selecting the resource, file and format. |confirm-import| Shows the confirmation page which appears prior to committing the import to the database. |import-complete| Shows the confirmation page on successful import. |import-update-with-authors| Shows the preview page for updating existing records with author details. |export-selected-action| Shows selecting records for export. |export-form| Shows the export form with fields for selecting the resource, fields and format. django-import-export-4.0.9/docs/testing.rst000066400000000000000000000051521463433610200207610ustar00rootroot00000000000000Testing ======= All tests can be run using `tox `_ simply by running the `tox` command. By default, tests are run against a local sqlite2 instance. `pyenv `_ can be used to manage multiple python installations. MySql / Postgres tests ###################### By using Docker, you can also run tests against either a MySQL db and/or Postgres. The ``IMPORT_EXPORT_TEST_TYPE`` must be set according to the type of tests you wish to run. Set to 'postgres' for postgres tests, and 'mysql-innodb' for mysql tests. If this environment variable is blank (or is any other value) then the default sqlite2 db will be used. This process is scripted in ``runtests.sh``. Assuming that you have docker installed on your system, running ``runtests.sh`` will run tox against sqlite2, mysql and postgres. You can edit this script to customise testing as you wish. Note that this is the process which is undertaken by CI builds. Coverage ######## Coverage data is written in parallel mode by default (defined in ``pyproject.toml``). A simple coverage report can be obtained with .. code-block:: bash make coverage However this may omit lines which are db specific. A full coverage report can be obtained by running tox. After a tox run, you can view coverage data as follows: .. code-block:: bash # combine all coverage data generated by tox into one file coverage combine # produce an HTML coverage report coverage html Check the output of the above commands to locate the coverage HTML file. Bulk testing ############ There is a helper script available to generate and profile bulk loads. See ``scripts/bulk_import.py``. You can use this script by configuring environment variables as defined above, and then installing and running the test application. In order to run the helper script, you will need to install ``requirements/test.txt``, and then add `django-extensions` to `settings.py` (`INSTALLED_APPS`). You can then run the script as follows: .. code-block:: bash # run creates, updates, and deletes ./manage.py runscript bulk_import # pass 'create', 'update' or 'delete' to run the single test ./manage.py runscript bulk_import --script-args create Enable logging ^^^^^^^^^^^^^^ You can see console SQL debug logging by updating the ``LOGGING`` block in `settings.py`:: LOGGING = { "version": 1, "handlers": {"console": {"class": "logging.StreamHandler"}}, "root": { "handlers": ["console"], }, "loggers": { "django.db.backends": {"level": "DEBUG", "handlers": ["console"]}, } } django-import-export-4.0.9/import_export/000077500000000000000000000000001463433610200205325ustar00rootroot00000000000000django-import-export-4.0.9/import_export/__init__.py000066400000000000000000000006321463433610200226440ustar00rootroot00000000000000try: # import from _version.py generated by setuptools_scm during release from ._version import version as __version__ except ImportError: # return a valid version if running in a context where no # version available (e.g. local build) from os import path as _path from setuptools_scm import get_version as _gv __version__ = _gv(_path.join(_path.dirname(__file__), _path.pardir)) django-import-export-4.0.9/import_export/admin.py000066400000000000000000001053731463433610200222050ustar00rootroot00000000000000import logging import warnings import django from django.conf import settings from django.contrib import admin, messages from django.contrib.admin.models import ADDITION, CHANGE, DELETION, LogEntry from django.contrib.auth import get_permission_codename from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldError, PermissionDenied from django.forms import MultipleChoiceField, MultipleHiddenInput from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render from django.template.response import TemplateResponse from django.urls import path, reverse from django.utils.decorators import method_decorator from django.utils.module_loading import import_string from django.utils.translation import gettext_lazy as _ from django.views.decorators.http import require_POST from .forms import ConfirmImportForm, ImportForm, SelectableFieldsExportForm from .mixins import BaseExportMixin, BaseImportMixin from .results import RowResult from .signals import post_export, post_import from .tmp_storages import TempFolderStorage logger = logging.getLogger(__name__) class ImportExportMixinBase: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.init_change_list_template() def init_change_list_template(self): # Store already set change_list_template to allow users to independently # customize the change list object tools. This treats the cases where # `self.change_list_template` is `None` (the default in `ModelAdmin`) or # where `self.import_export_change_list_template` is `None` as falling # back on the default templates. if getattr(self, "change_list_template", None): self.ie_base_change_list_template = self.change_list_template else: self.ie_base_change_list_template = "admin/change_list.html" try: self.change_list_template = getattr( self, "import_export_change_list_template", None ) except AttributeError: logger.warning("failed to assign change_list_template attribute") if self.change_list_template is None: self.change_list_template = self.ie_base_change_list_template def get_model_info(self): app_label = self.model._meta.app_label return (app_label, self.model._meta.model_name) def changelist_view(self, request, extra_context=None): extra_context = extra_context or {} extra_context[ "ie_base_change_list_template" ] = self.ie_base_change_list_template return super().changelist_view(request, extra_context) class ImportMixin(BaseImportMixin, ImportExportMixinBase): """ Import mixin. This is intended to be mixed with django.contrib.admin.ModelAdmin https://docs.djangoproject.com/en/dev/ref/contrib/admin/ """ #: template for change_list view import_export_change_list_template = "admin/import_export/change_list_import.html" #: template for import view import_template_name = "admin/import_export/import.html" #: form class to use for the initial import step import_form_class = ImportForm #: form class to use for the confirm import step confirm_form_class = ConfirmImportForm #: import data encoding from_encoding = "utf-8-sig" #: control which UI elements appear when import errors are displayed. #: Available options: 'message', 'row', 'traceback' import_error_display = ("message",) skip_admin_log = None # storage class for saving temporary files tmp_storage_class = None def get_skip_admin_log(self): if self.skip_admin_log is None: return getattr(settings, "IMPORT_EXPORT_SKIP_ADMIN_LOG", False) else: return self.skip_admin_log def get_tmp_storage_class(self): if self.tmp_storage_class is None: tmp_storage_class = getattr( settings, "IMPORT_EXPORT_TMP_STORAGE_CLASS", TempFolderStorage, ) else: tmp_storage_class = self.tmp_storage_class if isinstance(tmp_storage_class, str): tmp_storage_class = import_string(tmp_storage_class) return tmp_storage_class def get_tmp_storage_class_kwargs(self): """Override this method to provide additional kwargs to temp storage class.""" return {} def has_import_permission(self, request): """ Returns whether a request has import permission. """ IMPORT_PERMISSION_CODE = getattr( settings, "IMPORT_EXPORT_IMPORT_PERMISSION_CODE", None ) if IMPORT_PERMISSION_CODE is None: return True opts = self.opts codename = get_permission_codename(IMPORT_PERMISSION_CODE, opts) return request.user.has_perm("%s.%s" % (opts.app_label, codename)) def get_urls(self): urls = super().get_urls() info = self.get_model_info() my_urls = [ path( "process_import/", self.admin_site.admin_view(self.process_import), name="%s_%s_process_import" % info, ), path( "import/", self.admin_site.admin_view(self.import_action), name="%s_%s_import" % info, ), ] return my_urls + urls @method_decorator(require_POST) def process_import(self, request, **kwargs): """ Perform the actual import action (after the user has confirmed the import) """ if not self.has_import_permission(request): raise PermissionDenied confirm_form = self.create_confirm_form(request) if confirm_form.is_valid(): import_formats = self.get_import_formats() input_format = import_formats[int(confirm_form.cleaned_data["format"])]( encoding=self.from_encoding ) encoding = None if input_format.is_binary() else self.from_encoding tmp_storage_cls = self.get_tmp_storage_class() tmp_storage = tmp_storage_cls( name=confirm_form.cleaned_data["import_file_name"], encoding=encoding, read_mode=input_format.get_read_mode(), **self.get_tmp_storage_class_kwargs(), ) data = tmp_storage.read() dataset = input_format.create_dataset(data) result = self.process_dataset(dataset, confirm_form, request, **kwargs) tmp_storage.remove() return self.process_result(result, request) def process_dataset( self, dataset, form, request, **kwargs, ): res_kwargs = self.get_import_resource_kwargs(request, form=form, **kwargs) resource = self.choose_import_resource_class(form, request)(**res_kwargs) imp_kwargs = self.get_import_data_kwargs(request=request, form=form, **kwargs) imp_kwargs["retain_instance_in_row_result"] = True return resource.import_data( dataset, dry_run=False, file_name=form.cleaned_data.get("original_file_name"), user=request.user, **imp_kwargs, ) def process_result(self, result, request): self.generate_log_entries(result, request) self.add_success_message(result, request) post_import.send(sender=None, model=self.model) url = reverse( "admin:%s_%s_changelist" % self.get_model_info(), current_app=self.admin_site.name, ) return HttpResponseRedirect(url) def generate_log_entries(self, result, request): if not self.get_skip_admin_log(): # Add imported objects to LogEntry if django.VERSION >= (5, 1): self._log_actions(result, request) else: logentry_map = { RowResult.IMPORT_TYPE_NEW: ADDITION, RowResult.IMPORT_TYPE_UPDATE: CHANGE, RowResult.IMPORT_TYPE_DELETE: DELETION, } content_type_id = ContentType.objects.get_for_model(self.model).pk for row in result: if ( row.import_type != row.IMPORT_TYPE_ERROR and row.import_type != row.IMPORT_TYPE_SKIP ): with warnings.catch_warnings(): warnings.filterwarnings( "ignore", category=PendingDeprecationWarning ) LogEntry.objects.log_action( user_id=request.user.pk, content_type_id=content_type_id, object_id=row.object_id, object_repr=row.object_repr, action_flag=logentry_map[row.import_type], change_message=_( "%s through import_export" % row.import_type ), ) def add_success_message(self, result, request): opts = self.model._meta success_message = _( "Import finished: {} new, {} updated, {} deleted and {} skipped {}." ).format( result.totals[RowResult.IMPORT_TYPE_NEW], result.totals[RowResult.IMPORT_TYPE_UPDATE], result.totals[RowResult.IMPORT_TYPE_DELETE], result.totals[RowResult.IMPORT_TYPE_SKIP], opts.verbose_name_plural, ) messages.success(request, success_message) def get_import_context_data(self, **kwargs): return self.get_context_data(**kwargs) def get_context_data(self, **kwargs): return {} def create_import_form(self, request): """ .. versionadded:: 3.0 Return a form instance to use for the 'initial' import step. This method can be extended to make dynamic form updates to the form after it has been instantiated. You might also look to override the following: * :meth:`~import_export.admin.ImportMixin.get_import_form_class` * :meth:`~import_export.admin.ImportMixin.get_import_form_kwargs` * :meth:`~import_export.admin.ImportMixin.get_import_form_initial` * :meth:`~import_export.mixins.BaseImportMixin.get_import_resource_classes` """ formats = self.get_import_formats() form_class = self.get_import_form_class(request) kwargs = self.get_import_form_kwargs(request) return form_class(formats, self.get_import_resource_classes(request), **kwargs) def get_import_form_class(self, request): """ .. versionadded:: 3.0 Return the form class to use for the 'import' step. If you only have a single custom form class, you can set the ``import_form_class`` attribute to change this for your subclass. """ return self.import_form_class def get_import_form_kwargs(self, request): """ .. versionadded:: 3.0 Return a dictionary of values with which to initialize the 'import' form (including the initial values returned by :meth:`~import_export.admin.ImportMixin.get_import_form_initial`). """ return { "data": request.POST or None, "files": request.FILES or None, "initial": self.get_import_form_initial(request), } def get_import_form_initial(self, request): """ .. versionadded:: 3.0 Return a dictionary of initial field values to be provided to the 'import' form. """ return {} def create_confirm_form(self, request, import_form=None): """ .. versionadded:: 3.0 Return a form instance to use for the 'confirm' import step. This method can be extended to make dynamic form updates to the form after it has been instantiated. You might also look to override the following: * :meth:`~import_export.admin.ImportMixin.get_confirm_form_class` * :meth:`~import_export.admin.ImportMixin.get_confirm_form_kwargs` * :meth:`~import_export.admin.ImportMixin.get_confirm_form_initial` """ form_class = self.get_confirm_form_class(request) kwargs = self.get_confirm_form_kwargs(request, import_form) return form_class(**kwargs) def get_confirm_form_class(self, request): """ .. versionadded:: 3.0 Return the form class to use for the 'confirm' import step. If you only have a single custom form class, you can set the ``confirm_form_class`` attribute to change this for your subclass. """ return self.confirm_form_class def get_confirm_form_kwargs(self, request, import_form=None): """ .. versionadded:: 3.0 Return a dictionary of values with which to initialize the 'confirm' form (including the initial values returned by :meth:`~import_export.admin.ImportMixin.get_confirm_form_initial`). """ if import_form: # When initiated from `import_action()`, the 'posted' data # is for the 'import' form, not this one. data = None files = None else: data = request.POST or None files = request.FILES or None return { "data": data, "files": files, "initial": self.get_confirm_form_initial(request, import_form), } def get_confirm_form_initial(self, request, import_form): """ .. versionadded:: 3.0 Return a dictionary of initial field values to be provided to the 'confirm' form. """ if import_form is None: return {} return { "import_file_name": import_form.cleaned_data[ "import_file" ].tmp_storage_name, "original_file_name": import_form.cleaned_data["import_file"].name, "format": import_form.cleaned_data["format"], "resource": import_form.cleaned_data.get("resource", ""), } def get_import_data_kwargs(self, **kwargs): """ Prepare kwargs for import_data. """ form = kwargs.get("form") if form: kwargs.pop("form") return kwargs return kwargs def write_to_tmp_storage(self, import_file, input_format): encoding = None if not input_format.is_binary(): encoding = self.from_encoding tmp_storage_cls = self.get_tmp_storage_class() tmp_storage = tmp_storage_cls( encoding=encoding, read_mode=input_format.get_read_mode(), **self.get_tmp_storage_class_kwargs(), ) data = bytes() for chunk in import_file.chunks(): data += chunk tmp_storage.save(data) return tmp_storage def add_data_read_fail_error_to_form(self, form, e): exc_name = repr(type(e).__name__) msg = _( "%(exc_name)s encountered while trying to read file. " "Ensure you have chosen the correct format for the file." ) % {"exc_name": exc_name} form.add_error("import_file", msg) def import_action(self, request, **kwargs): """ Perform a dry_run of the import to make sure the import will not result in errors. If there are no errors, save the user uploaded file to a local temp file that will be used by 'process_import' for the actual import. """ if not self.has_import_permission(request): raise PermissionDenied context = self.get_import_context_data() import_formats = self.get_import_formats() import_form = self.create_import_form(request) resources = list() if request.POST and import_form.is_valid(): input_format = import_formats[int(import_form.cleaned_data["format"])]() if not input_format.is_binary(): input_format.encoding = self.from_encoding import_file = import_form.cleaned_data["import_file"] if self.is_skip_import_confirm_enabled(): # This setting means we are going to skip the import confirmation step. # Go ahead and process the file for import in a transaction # If there are any errors, we roll back the transaction. # rollback_on_validation_errors is set to True so that we rollback on # validation errors. If this is not done validation errors would be # silently skipped. data = bytes() for chunk in import_file.chunks(): data += chunk try: dataset = input_format.create_dataset(data) except Exception as e: self.add_data_read_fail_error_to_form(import_form, e) if not import_form.errors: result = self.process_dataset( dataset, import_form, request, raise_errors=False, rollback_on_validation_errors=True, **kwargs, ) if not result.has_errors() and not result.has_validation_errors(): return self.process_result(result, request) else: context["result"] = result else: # first always write the uploaded file to disk as it may be a # memory file or else based on settings upload handlers tmp_storage = self.write_to_tmp_storage(import_file, input_format) # allows get_confirm_form_initial() to include both the # original and saved file names from form.cleaned_data import_file.tmp_storage_name = tmp_storage.name try: # then read the file, using the proper format-specific mode # warning, big files may exceed memory data = tmp_storage.read() dataset = input_format.create_dataset(data) except Exception as e: self.add_data_read_fail_error_to_form(import_form, e) else: if len(dataset) == 0: import_form.add_error( "import_file", _( "No valid data to import. Ensure your file " "has the correct headers or data for import." ), ) if not import_form.errors: # prepare kwargs for import data, if needed res_kwargs = self.get_import_resource_kwargs( request, form=import_form, **kwargs ) resource = self.choose_import_resource_class(import_form, request)( **res_kwargs ) resources = [resource] # prepare additional kwargs for import_data, if needed imp_kwargs = self.get_import_data_kwargs( request=request, form=import_form, **kwargs ) result = resource.import_data( dataset, dry_run=True, raise_errors=False, file_name=import_file.name, user=request.user, **imp_kwargs, ) context["result"] = result if not result.has_errors() and not result.has_validation_errors(): context["confirm_form"] = self.create_confirm_form( request, import_form=import_form ) else: res_kwargs = self.get_import_resource_kwargs( request=request, form=import_form, **kwargs ) resource_classes = self.get_import_resource_classes(request) resources = [ resource_class(**res_kwargs) for resource_class in resource_classes ] context.update(self.admin_site.each_context(request)) context["title"] = _("Import") context["form"] = import_form context["opts"] = self.model._meta context["media"] = self.media + import_form.media context["fields_list"] = [ ( resource.get_display_name(), [f.column_name for f in resource.get_user_visible_fields()], ) for resource in resources ] context["import_error_display"] = self.import_error_display request.current_app = self.admin_site.name return TemplateResponse(request, [self.import_template_name], context) def changelist_view(self, request, extra_context=None): if extra_context is None: extra_context = {} extra_context["has_import_permission"] = self.has_import_permission(request) return super().changelist_view(request, extra_context) def _log_actions(self, result, request): """ Create appropriate LogEntry instances for the result. """ rows = dict() for row in result: rows.setdefault(row.import_type, list()) rows[row.import_type].append(row.instance) self._create_log_entries(request.user.pk, rows) def _create_log_entries(self, user_pk, rows): logentry_map = { RowResult.IMPORT_TYPE_NEW: ADDITION, RowResult.IMPORT_TYPE_UPDATE: CHANGE, RowResult.IMPORT_TYPE_DELETE: DELETION, } for import_type, instances in rows.items(): action_flag = logentry_map[import_type] self._create_log_entry(user_pk, rows[import_type], import_type, action_flag) def _create_log_entry(self, user_pk, rows, import_type, action_flag): if len(rows) > 0: LogEntry.objects.log_actions( user_pk, rows, action_flag, change_message=_("%s through import_export" % import_type), single_object=len(rows) == 1, ) class ExportMixin(BaseExportMixin, ImportExportMixinBase): """ Export mixin. This is intended to be mixed with `ModelAdmin `_. """ #: template for change_list view import_export_change_list_template = "admin/import_export/change_list_export.html" #: template for export view export_template_name = "admin/import_export/export.html" #: export data encoding to_encoding = None #: Form class to use for the initial export step. #: Assign to :class:`~import_export.forms.ExportForm` if you would #: like to disable selectable fields feature. export_form_class = SelectableFieldsExportForm def get_urls(self): urls = super().get_urls() my_urls = [ path( "export/", self.admin_site.admin_view(self.export_action), name="%s_%s_export" % self.get_model_info(), ), ] return my_urls + urls def has_export_permission(self, request): """ Returns whether a request has export permission. """ EXPORT_PERMISSION_CODE = getattr( settings, "IMPORT_EXPORT_EXPORT_PERMISSION_CODE", None ) if EXPORT_PERMISSION_CODE is None: return True opts = self.opts codename = get_permission_codename(EXPORT_PERMISSION_CODE, opts) return request.user.has_perm("%s.%s" % (opts.app_label, codename)) def get_export_queryset(self, request): """ Returns export queryset. Default implementation respects applied search and filters. """ list_display = self.get_list_display(request) list_display_links = self.get_list_display_links(request, list_display) list_select_related = self.get_list_select_related(request) list_filter = self.get_list_filter(request) search_fields = self.get_search_fields(request) if self.get_actions(request): list_display = ["action_checkbox"] + list(list_display) ChangeList = self.get_changelist(request) changelist_kwargs = { "request": request, "model": self.model, "list_display": list_display, "list_display_links": list_display_links, "list_filter": list_filter, "date_hierarchy": self.date_hierarchy, "search_fields": search_fields, "list_select_related": list_select_related, "list_per_page": self.list_per_page, "list_max_show_all": self.list_max_show_all, "list_editable": self.list_editable, "model_admin": self, "sortable_by": self.sortable_by, } changelist_kwargs["search_help_text"] = self.search_help_text class ExportChangeList(ChangeList): def get_results(self, request): """ Overrides ChangeList.get_results() to bypass default operations like pagination and result counting, which are not needed for export. This prevents executing unnecessary COUNT queries during ChangeList initialization. """ pass cl = ExportChangeList(**changelist_kwargs) # get_queryset() is already called during initialization, # it is enough to get its results if hasattr(cl, "queryset"): return cl.queryset # Fallback in case the ChangeList doesn't have queryset attribute set return cl.get_queryset(request) def get_export_data(self, file_format, request, queryset, **kwargs): """ Returns file_format representation for given queryset. """ if not self.has_export_permission(request): raise PermissionDenied data = self.get_data_for_export( request, queryset, **kwargs, ) export_data = file_format.export_data(data) encoding = kwargs.get("encoding") if not file_format.is_binary() and encoding: export_data = export_data.encode(encoding) return export_data def get_export_context_data(self, **kwargs): return self.get_context_data(**kwargs) def get_context_data(self, **kwargs): return {} def get_export_form_class(self): """ Get the form class used to read the export format. """ return self.export_form_class def export_action(self, request): """ Handles the default workflow for both the export form and the export of data to file. """ if not self.has_export_permission(request): raise PermissionDenied form_type = self.get_export_form_class() formats = self.get_export_formats() if self.is_skip_export_form_enabled(): return self._do_file_export(formats[0](), request, None) form = form_type( formats, self.get_export_resource_classes(request), data=request.POST or None, ) if request.POST and "export_items" in request.POST: # this field is instantiated if the export is POSTed from the # 'action' drop down form.fields["export_items"] = MultipleChoiceField( widget=MultipleHiddenInput, required=False, choices=[(pk, pk) for pk in self.get_valid_export_item_pks(request)], ) if form.is_valid(): file_format = formats[int(form.cleaned_data["format"])]() if "export_items" in form.changed_data: # this request has arisen from an Admin UI action # export item pks are stored in form data # so generate the queryset from the stored pks queryset = self.model.objects.filter( pk__in=form.cleaned_data["export_items"] ) else: queryset = self.get_export_queryset(request) try: return self._do_file_export( file_format, request, queryset, export_form=form ) except FieldError as e: messages.error(request, str(e)) context = self.init_request_context_data(request, form) request.current_app = self.admin_site.name return TemplateResponse(request, [self.export_template_name], context=context) def get_valid_export_item_pks(self, request): """ Returns a list of valid pks for export. This is used to validate which objects can be exported when exports are triggered from the Admin UI 'action' dropdown. This can be overridden to filter returned pks for performance and/or security reasons. :param request: The request object. :returns: a list of valid pks (by default is all pks in table). """ return self.model.objects.all().values_list("pk", flat=True) def changelist_view(self, request, extra_context=None): if extra_context is None: extra_context = {} extra_context["has_export_permission"] = self.has_export_permission(request) return super().changelist_view(request, extra_context) def get_export_filename(self, request, queryset, file_format): return super().get_export_filename(file_format) def init_request_context_data(self, request, form): context = self.get_export_context_data() context.update(self.admin_site.each_context(request)) context["title"] = _("Export") context["form"] = form context["opts"] = self.model._meta context["fields_list"] = [ ( res.get_display_name(), [ field.column_name for field in res( **self.get_export_resource_kwargs(request) ).get_user_visible_fields() ], ) for res in self.get_export_resource_classes(request) ] return context def _do_file_export(self, file_format, request, queryset, export_form=None): export_data = self.get_export_data( file_format, request, queryset, encoding=self.to_encoding, export_form=export_form, ) content_type = file_format.get_content_type() response = HttpResponse(export_data, content_type=content_type) response["Content-Disposition"] = 'attachment; filename="%s"' % ( self.get_export_filename(request, queryset, file_format), ) post_export.send(sender=None, model=self.model) return response class ImportExportMixin(ImportMixin, ExportMixin): """ Import and export mixin. """ #: template for change_list view import_export_change_list_template = ( "admin/import_export/change_list_import_export.html" ) class ImportExportModelAdmin(ImportExportMixin, admin.ModelAdmin): """ Subclass of ModelAdmin with import/export functionality. """ class ExportActionMixin(ExportMixin): """ Mixin with export functionality implemented as an admin action. """ #: template for change form change_form_template = "admin/import_export/change_form.html" #: Flag to indicate whether to show 'export' button on change form show_change_form_export = True # This action will receive a selection of items as a queryset, # store them in the context, and then render the 'export' admin form page, # so that users can select file format and resource def change_view(self, request, object_id, form_url="", extra_context=None): extra_context = extra_context or {} extra_context["show_change_form_export"] = self.show_change_form_export return super().change_view( request, object_id, form_url, extra_context=extra_context, ) def response_change(self, request, obj): # called if the export is triggered from the instance detail page. if "_export-item" in request.POST: return self.export_admin_action( request, self.model.objects.filter(pk=obj.pk) ) return super().response_change(request, obj) def export_admin_action(self, request, queryset): """ Action runs on POST from instance action menu (if enabled). """ formats = self.get_export_formats() if self.is_skip_export_form_from_action_enabled(): file_format = formats[0]() return self._do_file_export(file_format, request, queryset) form_type = self.get_export_form_class() formats = self.get_export_formats() export_items = list(queryset.values_list("pk", flat=True)) form = form_type( formats=formats, resources=self.get_export_resource_classes(request), initial={"export_items": export_items}, ) # selected items are to be stored as a hidden input on the form form.fields["export_items"] = MultipleChoiceField( widget=MultipleHiddenInput, required=False, choices=export_items ) context = self.init_request_context_data(request, form) # this is necessary to render the FORM action correctly # i.e. so the POST goes to the correct URL export_url = reverse( "%s:%s_%s_export" % ( self.admin_site.name, self.model._meta.app_label, self.model._meta.model_name, ) ) context["export_url"] = export_url return render(request, "admin/import_export/export.html", context=context) def get_actions(self, request): """ Adds the export action to the list of available actions. """ actions = super().get_actions(request) actions.update( export_admin_action=( type(self).export_admin_action, "export_admin_action", _("Export selected %(verbose_name_plural)s"), ) ) return actions class ExportActionModelAdmin(ExportActionMixin, admin.ModelAdmin): """ Subclass of ModelAdmin with export functionality implemented as an admin action. """ class ImportExportActionModelAdmin(ImportMixin, ExportActionModelAdmin): """ Subclass of ExportActionModelAdmin with import/export functionality. Export functionality is implemented as an admin action. """ django-import-export-4.0.9/import_export/declarative.py000066400000000000000000000145031463433610200233720ustar00rootroot00000000000000import logging from collections import OrderedDict from django.apps import apps from django.core.exceptions import FieldDoesNotExist from django.db.models.fields.related import ForeignObjectRel from import_export.options import ResourceOptions from .fields import Field from .instance_loaders import ModelInstanceLoader from .utils import get_related_model logger = logging.getLogger(__name__) class DeclarativeMetaclass(type): def __new__(cls, name, bases, attrs): def _load_meta_options(base_, meta_): options = getattr(base_, "Meta", None) for option in [ option for option in dir(options) if not option.startswith("_") and hasattr(options, option) ]: option_value = getattr(options, option) if option == "model" and isinstance(option_value, str): option_value = apps.get_model(option_value) setattr(meta_, option, option_value) declared_fields = [] meta = ResourceOptions() # If this class is subclassing another Resource, add that Resource's # fields. Note that we loop over the bases in *reverse*. This is # necessary in order to preserve the correct order of fields. for base in bases[::-1]: if hasattr(base, "fields"): declared_fields = list(base.fields.items()) + declared_fields # Collect the Meta options # #1363 If there are any parent classes, set those options first for parent in base.__bases__: _load_meta_options(parent, meta) _load_meta_options(base, meta) # Add direct fields for field_name, obj in attrs.copy().items(): if isinstance(obj, Field): field = attrs.pop(field_name) if not field.column_name: field.column_name = field_name declared_fields.append((field_name, field)) attrs["fields"] = OrderedDict(declared_fields) new_class = super().__new__(cls, name, bases, attrs) # add direct fields _load_meta_options(new_class, meta) new_class._meta = meta return new_class class ModelDeclarativeMetaclass(DeclarativeMetaclass): def __new__(cls, name, bases, attrs): new_class = super().__new__(cls, name, bases, attrs) opts = new_class._meta if not opts.instance_loader_class: opts.instance_loader_class = ModelInstanceLoader if opts.model: model_opts = opts.model._meta # #1693 check the fields explicitly declared as attributes of the Resource # class. # if 'fields' property is defined, declared fields can only be included # if they appear in the 'fields' iterable. declared_fields = dict() for field_name, field in new_class.fields.items(): column_name = field.column_name if ( opts.fields is not None and field_name not in opts.fields and column_name not in opts.fields ): continue declared_fields[field_name] = field field_list = [] for f in sorted(model_opts.fields + model_opts.many_to_many): if opts.fields is not None and f.name not in opts.fields: continue if opts.exclude and f.name in opts.exclude: continue if f.name in set(declared_fields.keys()): # If model field is declared in `ModelResource`, # remove it from `declared_fields` # to keep exact order of model fields field = declared_fields.pop(f.name) else: field = new_class.field_from_django_field(f.name, f, readonly=False) field_list.append( ( f.name, field, ) ) # Order as model fields first then declared fields by default new_class.fields = OrderedDict([*field_list, *declared_fields.items()]) # add fields that follow relationships if opts.fields is not None: field_list = [] for field_name in opts.fields: if field_name in declared_fields: continue if field_name.find("__") == -1: continue model = opts.model attrs = field_name.split("__") for i, attr in enumerate(attrs): verbose_path = ".".join( [opts.model.__name__] + attrs[0 : i + 1] ) try: f = model._meta.get_field(attr) except FieldDoesNotExist as e: logger.debug(e, exc_info=e) raise FieldDoesNotExist( "%s: %s has no field named '%s'" % (verbose_path, model.__name__, attr) ) if i < len(attrs) - 1: # We're not at the last attribute yet, so check # that we're looking at a relation, and move on to # the next model. if isinstance(f, ForeignObjectRel): model = get_related_model(f) else: if get_related_model(f) is None: raise KeyError( "%s is not a relation" % verbose_path ) model = get_related_model(f) if isinstance(f, ForeignObjectRel): f = f.field field = new_class.field_from_django_field( field_name, f, readonly=True ) field_list.append((field_name, field)) new_class.fields.update(OrderedDict(field_list)) return new_class django-import-export-4.0.9/import_export/exceptions.py000066400000000000000000000017521463433610200232720ustar00rootroot00000000000000class ImportExportError(Exception): """A generic exception for all others to extend.""" pass class FieldError(ImportExportError): """Raised when a field encounters an error.""" pass class WidgetError(ImportExportError): """Raised when there is a misconfiguration with a Widget.""" pass class ImportError(ImportExportError): def __init__(self, error, number=None, row=None): """A wrapper for errors thrown from the import process. :param error: The underlying error that occurred. :param number: The row number of the row containing the error (if obtainable). :param row: The row containing the error (if obtainable). """ self.error = error self.number = number self.row = row def __str__(self): s = "" if self.number is not None: s += f"{self.number}: " s += f"{self.error}" if self.row is not None: s += f" ({self.row})" return s django-import-export-4.0.9/import_export/fields.py000066400000000000000000000130131463433610200223500ustar00rootroot00000000000000from django.core.exceptions import ObjectDoesNotExist from django.db.models.fields import NOT_PROVIDED from django.db.models.manager import Manager from . import widgets from .exceptions import FieldError class Field: """ ``Field`` represents a mapping between an ``instance`` field and a representation of the field's data. :param attribute: A string of either an instance attribute or callable of the instance. :param column_name: An optional column name for the column that represents this field in the export. :param widget: Defines a widget that will be used to represent this field's data in the export, or transform the value during import. :param readonly: A Boolean which defines if this field will be ignored during import. :param default: This value will be returned by :meth:`~import_export.fields.Field.clean` if this field's widget returned a value defined in :attr:`~import_export.fields.empty_values`. :param saves_null_values: Controls whether null values are saved on the instance. This can be used if the widget returns null, but there is a default instance value which should not be overwritten. :param dehydrate_method: Lets you choose your own method for dehydration rather than using `dehydrate_{field_name}` syntax. :param m2m_add: changes save of this field to add the values, if they do not exist, to a ManyToMany field instead of setting all values. Only useful if field is a ManyToMany field. """ empty_values = [None, ""] def __init__( self, attribute=None, column_name=None, widget=None, default=NOT_PROVIDED, readonly=False, saves_null_values=True, dehydrate_method=None, m2m_add=False, ): self.attribute = attribute self.default = default self.column_name = column_name if not widget: widget = widgets.Widget() self.widget = widget self.readonly = readonly self.saves_null_values = saves_null_values self.dehydrate_method = dehydrate_method self.m2m_add = m2m_add def __repr__(self): """ Displays the module, class and name of the field. """ path = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) column_name = getattr(self, "column_name", None) if column_name is not None: return "<%s: %s>" % (path, column_name) return "<%s>" % path def clean(self, row, **kwargs): """ Translates the value stored in the imported datasource to an appropriate Python object and returns it. """ try: value = row[self.column_name] except KeyError: raise KeyError( "Column '%s' not found in dataset. Available " "columns are: %s" % (self.column_name, list(row)) ) value = self.widget.clean(value, row=row, **kwargs) if value in self.empty_values and self.default != NOT_PROVIDED: if callable(self.default): return self.default() return self.default return value def get_value(self, instance): """ Returns the value of the instance's attribute. """ if self.attribute is None: return None attrs = self.attribute.split("__") value = instance for attr in attrs: try: value = getattr(value, attr, None) except (ValueError, ObjectDoesNotExist): # needs to have a primary key value before a many-to-many # relationship can be used. return None if value is None: return None # RelatedManager and ManyRelatedManager classes are callable in # Django >= 1.7 but we don't want to call them if callable(value) and not isinstance(value, Manager): value = value() return value def save(self, instance, row, is_m2m=False, **kwargs): """ If this field is not declared readonly, the instance's attribute will be set to the value returned by :meth:`~import_export.fields.Field.clean`. """ if not self.readonly: attrs = self.attribute.split("__") for attr in attrs[:-1]: instance = getattr(instance, attr, None) cleaned = self.clean(row, **kwargs) if cleaned is not None or self.saves_null_values: if not is_m2m: setattr(instance, attrs[-1], cleaned) else: if self.m2m_add: getattr(instance, attrs[-1]).add(*cleaned) else: getattr(instance, attrs[-1]).set(cleaned) def export(self, instance): """ Returns value from the provided instance converted to export representation. """ value = self.get_value(instance) return self.widget.render(value) def get_dehydrate_method(self, field_name=None): """ Returns method name to be used for dehydration of the field. Defaults to `dehydrate_{field_name}` """ DEFAULT_DEHYDRATE_METHOD_PREFIX = "dehydrate_" if not self.dehydrate_method and not field_name: raise FieldError("Both dehydrate_method and field_name are not supplied.") return self.dehydrate_method or DEFAULT_DEHYDRATE_METHOD_PREFIX + field_name django-import-export-4.0.9/import_export/formats/000077500000000000000000000000001463433610200222055ustar00rootroot00000000000000django-import-export-4.0.9/import_export/formats/__init__.py000066400000000000000000000000001463433610200243040ustar00rootroot00000000000000django-import-export-4.0.9/import_export/formats/base_formats.py000066400000000000000000000136021463433610200252260ustar00rootroot00000000000000import warnings import tablib from django.conf import settings from tablib.formats import registry class Format: def get_title(self): return type(self) def create_dataset(self, in_stream): """ Create dataset from given string. """ raise NotImplementedError() def export_data(self, dataset, **kwargs): """ Returns format representation for given dataset. """ raise NotImplementedError() def is_binary(self): """ Returns if this format is binary. """ return True def get_read_mode(self): """ Returns mode for opening files. """ return "rb" def get_extension(self): """ Returns extension for this format files. """ return "" def get_content_type(self): # For content types see # https://www.iana.org/assignments/media-types/media-types.xhtml return "application/octet-stream" @classmethod def is_available(cls): return True def can_import(self): return False def can_export(self): return False class TablibFormat(Format): TABLIB_MODULE = None CONTENT_TYPE = "application/octet-stream" def __init__(self, encoding=None): self.encoding = encoding def get_format(self): """ Import and returns tablib module. """ if not self.TABLIB_MODULE: raise AttributeError("TABLIB_MODULE must be defined") key = self.TABLIB_MODULE.split(".")[-1].replace("_", "") return registry.get_format(key) @classmethod def is_available(cls): try: cls().get_format() except (tablib.core.UnsupportedFormat, ImportError): return False return True def get_title(self): return self.get_format().title def create_dataset(self, in_stream, **kwargs): return tablib.import_set(in_stream, format=self.get_title(), **kwargs) def export_data(self, dataset, **kwargs): if getattr(settings, "IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT", False) is True: self._escape_formulae(dataset) return dataset.export(self.get_title(), **kwargs) def get_extension(self): return self.get_format().extensions[0] def get_content_type(self): return self.CONTENT_TYPE def can_import(self): return hasattr(self.get_format(), "import_set") def can_export(self): return hasattr(self.get_format(), "export_set") def _escape_formulae(self, dataset): def _do_escape(s): return s.replace("=", "", 1) if s.startswith("=") else s for _ in dataset: row = dataset.lpop() row = [_do_escape(str(cell)) for cell in row] dataset.append(row) class TextFormat(TablibFormat): def create_dataset(self, in_stream, **kwargs): if isinstance(in_stream, bytes) and self.encoding: in_stream = in_stream.decode(self.encoding) return super().create_dataset(in_stream, **kwargs) def get_read_mode(self): return "r" def is_binary(self): return False class CSV(TextFormat): TABLIB_MODULE = "tablib.formats._csv" CONTENT_TYPE = "text/csv" class JSON(TextFormat): TABLIB_MODULE = "tablib.formats._json" CONTENT_TYPE = "application/json" class YAML(TextFormat): TABLIB_MODULE = "tablib.formats._yaml" # See https://stackoverflow.com/questions/332129/yaml-mime-type CONTENT_TYPE = "text/yaml" class TSV(TextFormat): TABLIB_MODULE = "tablib.formats._tsv" CONTENT_TYPE = "text/tab-separated-values" class ODS(TextFormat): TABLIB_MODULE = "tablib.formats._ods" CONTENT_TYPE = "application/vnd.oasis.opendocument.spreadsheet" class HTML(TextFormat): TABLIB_MODULE = "tablib.formats._html" CONTENT_TYPE = "text/html" class XLS(TablibFormat): TABLIB_MODULE = "tablib.formats._xls" CONTENT_TYPE = "application/vnd.ms-excel" def create_dataset(self, in_stream): """ Create dataset from first sheet. """ import xlrd xls_book = xlrd.open_workbook(file_contents=in_stream) dataset = tablib.Dataset() sheet = xls_book.sheets()[0] dataset.headers = sheet.row_values(0) for i in range(1, sheet.nrows): dataset.append(sheet.row_values(i)) return dataset class XLSX(TablibFormat): TABLIB_MODULE = "tablib.formats._xlsx" CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" def create_dataset(self, in_stream): """ Create dataset from first sheet. """ from io import BytesIO import openpyxl # 'data_only' means values are read from formula cells, not the formula itself xlsx_book = openpyxl.load_workbook( BytesIO(in_stream), read_only=True, data_only=True ) dataset = tablib.Dataset() sheet = xlsx_book.active # obtain generator rows = sheet.rows dataset.headers = [cell.value for cell in next(rows)] for row in rows: row_values = [cell.value for cell in row] dataset.append(row_values) return dataset def export_data(self, dataset, **kwargs): # #1698 temporary catch for deprecation warning in openpyxl # this catch block must be removed when openpyxl updated with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) return super().export_data(dataset, **kwargs) #: These are the default formats for import and export. Whether they can be #: used or not is depending on their implementation in the tablib library. DEFAULT_FORMATS = [ fmt for fmt in ( CSV, XLS, XLSX, TSV, ODS, JSON, YAML, HTML, ) if fmt.is_available() ] django-import-export-4.0.9/import_export/forms.py000066400000000000000000000233571463433610200222440ustar00rootroot00000000000000import os.path from copy import deepcopy from itertools import chain from typing import Iterable from django import forms from django.conf import settings from django.utils.translation import gettext_lazy as _ from .resources import ModelResource class ImportExportFormBase(forms.Form): resource = forms.ChoiceField( label=_("Resource"), choices=(), required=False, ) format = forms.ChoiceField( label=_("Format"), choices=(), ) def __init__(self, formats, resources, **kwargs): super().__init__(**kwargs) self._init_resources(resources) self._init_formats(formats) def _init_resources(self, resources): if not resources: raise ValueError("no defined resources") if len(resources) == 1: self.fields["resource"].value = resources[0].get_display_name() self.fields["resource"].widget.attrs["readonly"] = True if len(resources) > 1: resource_choices = [] for i, resource in enumerate(resources): resource_choices.append((i, resource.get_display_name())) self.fields["resource"].choices = resource_choices def _init_formats(self, formats): if not formats: raise ValueError("invalid formats list") choices = [(str(i), f().get_title()) for i, f in enumerate(formats)] if len(formats) == 1: field = self.fields["format"] field.value = formats[0]().get_title() field.initial = 0 field.widget.attrs["readonly"] = True if len(formats) > 1: choices.insert(0, ("", "---")) self.fields["format"].choices = choices class ImportForm(ImportExportFormBase): import_file = forms.FileField(label=_("File to import")) # field ordered for usability: # ensure that the 'file' select appears before 'format' # so that the 'guess_format' js logic makes sense field_order = ["resource", "import_file", "format"] def __init__(self, formats, resources, **kwargs): super().__init__(formats, resources, **kwargs) if len(formats) > 1: self.fields["import_file"].widget.attrs["class"] = "guess_format" self.fields["format"].widget.attrs["class"] = "guess_format" @property def media(self): media = super().media extra = "" if settings.DEBUG else ".min" return media + forms.Media( js=( f"admin/js/vendor/jquery/jquery{extra}.js", "admin/js/jquery.init.js", "import_export/guess_format.js", ) ) class ConfirmImportForm(forms.Form): import_file_name = forms.CharField(widget=forms.HiddenInput()) original_file_name = forms.CharField(widget=forms.HiddenInput()) format = forms.CharField(widget=forms.HiddenInput()) resource = forms.CharField(widget=forms.HiddenInput(), required=False) def clean_import_file_name(self): data = self.cleaned_data["import_file_name"] data = os.path.basename(data) return data class ExportForm(ImportExportFormBase): export_items = forms.MultipleChoiceField( widget=forms.MultipleHiddenInput(), required=False ) class SelectableFieldsExportForm(ExportForm): def __init__(self, formats, resources, **kwargs): super().__init__(formats, resources, **kwargs) self._init_selectable_fields(resources) @property def media(self): media = super().media return media + forms.Media( js=("import_export/export_selectable_fields.js",), css={ "all": ["import_export/export.css"], }, ) def _init_selectable_fields(self, resources: Iterable[ModelResource]) -> None: """ Create `BooleanField(s)` for resource fields """ self.resources = resources self.is_selectable_fields_form = True self.resource_fields = {resource.__name__: list() for resource in resources} for index, resource in enumerate(resources): boolean_fields = self._create_boolean_fields(resource, index) self.resource_fields[resource.__name__] = boolean_fields # Order fields by resource select then boolean fields ordered_fields = [ "resource", # flatten resource fields lists *chain(*[fields for fields in self.resource_fields.values()]), ] self.order_fields(ordered_fields) def _get_field_label(self, resource: ModelResource, field_name: str) -> str: title = field_name.replace("_", " ").title() field = resource.fields.get(field_name) if field and field.column_name != field_name: title = f"{title} ({field.column_name})" return title def _create_boolean_fields(self, resource: ModelResource, index: int) -> None: # Initiate resource to get ordered export fields fields = resource().get_export_order() boolean_fields = [] # will be used for ordering the fields is_initial_field = False for field in fields: field_name = self.create_boolean_field_name(resource, field) boolean_field = forms.BooleanField( label=self._get_field_label(resource, field), initial=True, required=False, ) # These attributes will be used for rendering in template boolean_field.is_selectable_field = True boolean_field.resource_name = resource.__name__ boolean_field.resource_index = index boolean_field.widget.attrs["resource-id"] = index if is_initial_field is False: boolean_field.initial_field = is_initial_field = True self.fields[field_name] = boolean_field boolean_fields.append(field_name) return boolean_fields @staticmethod def create_boolean_field_name(resource: ModelResource, field_name: str) -> str: """ Create field name by combining `resource_name` + `field_name` to prevent conflict between resource fields with same name Example: BookResource + name -> bookresource_name BookResourceWithNames + name -> bookresourcewithnames_name """ return resource.__name__.lower() + "_" + field_name def clean(self): selected_resource = self.get_selected_resource() if selected_resource: # Remove fields for not selected resources self._remove_unselected_resource_fields(selected_resource) # Normalize resource field names self._normalize_resource_fields(selected_resource) # Validate at least one field is selected for selected resource self._validate_any_field_selected(selected_resource) return self.cleaned_data def _remove_unselected_resource_fields( self, selected_resource: ModelResource ) -> None: """ Remove boolean fields except the fields for selected resource """ _cleaned_data = deepcopy(self.cleaned_data) for resource_name, fields in self.resource_fields.items(): if selected_resource.__name__ == resource_name: # Skip selected resource continue for field in fields: del _cleaned_data[field] self.cleaned_data = _cleaned_data def get_selected_resource(self): if not getattr(self, "cleaned_data", None): raise forms.ValidationError( _("Form is not validated, call `is_valid` first") ) # Return selected resource by index resource_index = 0 if "resource" in self.cleaned_data: try: resource_index = int(self.cleaned_data["resource"]) except ValueError: pass return self.resources[resource_index] def _normalize_resource_fields(self, selected_resource: ModelResource) -> None: """ Field names are combination of resource_name + field_name, normalize field names by removing resource name """ selected_resource_name = selected_resource.__name__.lower() + "_" _cleaned_data = {} self._selected_resource_fields = [] for k, v in self.cleaned_data.items(): if selected_resource_name in k: field_name = k.replace(selected_resource_name, "") _cleaned_data[field_name] = v if v is True: # Add to _selected_resource_fields to determine what # fields were selected for export self._selected_resource_fields.append(field_name) continue _cleaned_data[k] = v self.cleaned_data = _cleaned_data def get_selected_resource_export_fields(self): selected_resource = self.get_selected_resource() # Initialize resource to use `get_export_order` method resource_fields = selected_resource().get_export_order() return [ field for field, value in self.cleaned_data.items() if field in resource_fields and value is True ] def _validate_any_field_selected(self, resource) -> None: """ Validate if any field for resource was selected in form data """ resource_fields = [field for field in resource().get_export_order()] if not any([v for k, v in self.cleaned_data.items() if k in resource_fields]): raise forms.ValidationError( _("""Select at least 1 field for "%(resource_name)s" to export"""), code="invalid", params={ "resource_name": resource.get_display_name(), }, ) django-import-export-4.0.9/import_export/instance_loaders.py000066400000000000000000000040511463433610200244210ustar00rootroot00000000000000class BaseInstanceLoader: """ Base abstract implementation of instance loader. """ def __init__(self, resource, dataset=None): self.resource = resource self.dataset = dataset def get_instance(self, row): raise NotImplementedError class ModelInstanceLoader(BaseInstanceLoader): """ Instance loader for Django model. Lookup for model instance by ``import_id_fields``. """ def get_queryset(self): return self.resource.get_queryset() def get_instance(self, row): try: params = {} for key in self.resource.get_import_id_fields(): field = self.resource.fields[key] params[field.attribute] = field.clean(row) if params: return self.get_queryset().get(**params) else: return None except self.resource._meta.model.DoesNotExist: return None class CachedInstanceLoader(ModelInstanceLoader): """ Loads all possible model instances in dataset avoid hitting database for every ``get_instance`` call. This instance loader work only when there is one ``import_id_fields`` field. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) pk_field_name = self.resource.get_import_id_fields()[0] self.pk_field = self.resource.fields[pk_field_name] # If the pk field is missing, all instances in dataset are new # and cache is empty. self.all_instances = {} if self.dataset.dict and self.pk_field.column_name in self.dataset.dict[0]: ids = [self.pk_field.clean(row) for row in self.dataset.dict] qs = self.get_queryset().filter(**{"%s__in" % self.pk_field.attribute: ids}) self.all_instances = { self.pk_field.get_value(instance): instance for instance in qs } def get_instance(self, row): if self.all_instances: return self.all_instances.get(self.pk_field.clean(row)) return None django-import-export-4.0.9/import_export/locale/000077500000000000000000000000001463433610200217715ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ar/000077500000000000000000000000001463433610200223735ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ar/LC_MESSAGES/000077500000000000000000000000001463433610200241605ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ar/LC_MESSAGES/django.mo000066400000000000000000000031671463433610200257660ustar00rootroot00000000000000<h)07'>fu| 0}1O V a1l    J! l    Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5; فيما يلي إستعراض للبيانات التي سيتم إستيرادها. إذا كنت راضيا عن النتائج, انقر على 'تأكيد الإستيراد'تأكيد الإستيرادحذفأخطاءتصديرتصدير %(verbose_name_plural)s المحددةملف للإستيرادتنسيقالرئيسيةإستيرادرقم الصطرجديدمعاينةتجاهلإرسالهذا المستورد سوف يستورد الحقول التالية : تحديثdjango-import-export-4.0.9/import_export/locale/ar/LC_MESSAGES/django.po000066400000000000000000000124221463433610200257630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "إستيراد" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "تصدير" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "تصدير %(verbose_name_plural)s المحددة" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "تنسيق" #: forms.py:58 msgid "File to import" msgstr "ملف للإستيراد" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "الرئيسية" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "هذا المستورد سوف يستورد الحقول التالية : " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "إرسال" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "فيما يلي إستعراض للبيانات التي سيتم إستيرادها. إذا كنت راضيا عن النتائج, " "انقر على 'تأكيد الإستيراد'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "تأكيد الإستيراد" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "أخطاء" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "رقم الصطر" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "معاينة" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "جديد" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "تجاهل" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "حذف" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "تحديث" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "هذا المستورد سوف يستورد الحقول التالية : " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "يجب تحديد تنسيق التصدير." django-import-export-4.0.9/import_export/locale/bg/000077500000000000000000000000001463433610200223615ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/bg/LC_MESSAGES/000077500000000000000000000000001463433610200241465ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/bg/LC_MESSAGES/django.mo000066400000000000000000000033711463433610200257510ustar00rootroot00000000000000LhCRY`'g 0 Xi+T  H$ ! .;RkrF    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Hristo Gatsinski Language-Team: LANGUAGE Language: Bulgarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %s чрез import_exportОтдолу виждате преглед на данните за импортиране. Ако сте доволни от резултата, изберете 'Потвърди импортирането'Потвърди импортиранетоИзтритГрешкиЕкспортиранеЕкспортиране на избраните %(verbose_name_plural)sФайл за импортиранеФорматНачалоИмпортиранеНомер на редаНовПрегледПропуснатИзпълниЩе бъдат импортирани следните полета: Обновенdjango-import-export-4.0.9/import_export/locale/bg/LC_MESSAGES/django.po000066400000000000000000000127721463433610200257610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Hristo Gatsinski , 2017. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Hristo Gatsinski \n" "Language-Team: LANGUAGE \n" "Language: Bulgarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s чрез import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Импортирането е завършено, с {} нови и {} обновени {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Импортиране" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Експортиране" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Експортиране на избраните %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Формат" #: forms.py:58 msgid "File to import" msgstr "Файл за импортиране" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Начало" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Ще бъдат импортирани следните полета: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Изпълни" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Отдолу виждате преглед на данните за импортиране. Ако сте доволни от " "резултата, изберете 'Потвърди импортирането'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Потвърди импортирането" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Грешки" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Номер на реда" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Преглед" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Нов" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Пропуснат" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Изтрит" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Обновен" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Ще бъдат импортирани следните полета: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Трябва да изберете формат за експортиране." django-import-export-4.0.9/import_export/locale/ca/000077500000000000000000000000001463433610200223545ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ca/LC_MESSAGES/000077500000000000000000000000001463433610200241415ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ca/LC_MESSAGES/django.mo000066400000000000000000000026571463433610200257520ustar00rootroot00000000000000<h)07'>fu| 0B*-)06?Q Uci2p     Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); A continuació podeu veure una vista prèvia de les dades que s'importaran. Si esteu satisfets amb els resultats, premeu 'Confirmar importació'Confirmar importacióEsborrarErrorsExportarExportar %(verbose_name_plural)s seleccionatsArxiu a importarFormatIniciImportarNúmero de líniaNouVista prèviaOmèsEnviarAquest importador importarà els següents camps: Actualitzardjango-import-export-4.0.9/import_export/locale/ca/LC_MESSAGES/django.po000066400000000000000000000117751463433610200257560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Manel Clos , 2016. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importar" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportar" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exportar %(verbose_name_plural)s seleccionats" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Format" #: forms.py:58 msgid "File to import" msgstr "Arxiu a importar" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Inici" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Aquest importador importarà els següents camps: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Enviar" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "A continuació podeu veure una vista prèvia de les dades que s'importaran. Si " "esteu satisfets amb els resultats, premeu 'Confirmar importació'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Confirmar importació" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Errors" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Número de línia" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Vista prèvia" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nou" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Omès" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Esborrar" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Actualitzar" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Aquest importador importarà els següents camps: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Heu de seleccionar un format d'exportació" django-import-export-4.0.9/import_export/locale/cs/000077500000000000000000000000001463433610200223765ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/cs/LC_MESSAGES/000077500000000000000000000000001463433610200241635ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/cs/LC_MESSAGES/django.mo000066400000000000000000000026671463433610200257750ustar00rootroot00000000000000LhCRY`'g 0 =Nud &(9AGN^d lz(     %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2017-05-02 19:17+0200 Last-Translator: Language-Team: Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; X-Generator: Poedit 2.0.1 %s skrz import_exportNíže je zobrazen náhled importovaných dat. Pokud je vše v pořádku, stiskněte tlačítko „Provést import”Provést importSmazáníChybyExportVybrán export %(verbose_name_plural)sSoubor k importuFormátDomůImportČíslo řádkuNovéNáhledPřeskočenéOdeslatBudou importována následující pole: Aktualizacedjango-import-export-4.0.9/import_export/locale/cs/LC_MESSAGES/django.po000066400000000000000000000121031463433610200257620ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2017-05-02 19:17+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Poedit 2.0.1\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s skrz import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Import dokončen, {} nové a {} aktualizované {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Import" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Export" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Vybrán export %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Formát" #: forms.py:58 msgid "File to import" msgstr "Soubor k importu" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Domů" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Budou importována následující pole: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Odeslat" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Níže je zobrazen náhled importovaných dat. Pokud je vše v pořádku, stiskněte " "tlačítko „Provést import”" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Provést import" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Chyby" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Číslo řádku" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Náhled" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nové" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Přeskočené" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Smazání" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Aktualizace" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Budou importována následující pole: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Musíte vybrat formát pro export." django-import-export-4.0.9/import_export/locale/de/000077500000000000000000000000001463433610200223615ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/de/LC_MESSAGES/000077500000000000000000000000001463433610200241465ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/de/LC_MESSAGES/django.mo000066400000000000000000000043351463433610200257520ustar00rootroot00000000000000%@kAh/>EL'S{ _ (15=Z0aJt*3 :0Fw   |O Xb h*v+     %(exc_name)s encountered while trying to read file. Ensure you have chosen the correct format for the file.%s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewResourceRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2022-10-17 17:42+0200 Last-Translator: Jannes Blobel Language-Team: Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 3.1.1 %(exc_name)s beim Versuch, die Datei zu lesen ist aufgetretten. Stellen Sie sicher, dass du das richtige Format für deine Datei gewählt hast%s durch import_exportUnten befindet sich eine Vorschau der zu importierenden Daten. Wenn die Ergebnisse zufriedenstellend sind, klicke auf "Import bestätigen".Import bestätigenLöschenFehlerExportierenAusgewählte %(verbose_name_plural)s exportierenZu importierende DateiDateiformatStartImportierenZeilennummerNeuNicht feldspezifischBitte korrigiere falls möglich diese Fehler in deiner Datei und lade sie anschließend erneut mit dem obigen Formular hoch.VorschauRessourceZeileÜbersprungenDie Validierung einiger Zeilen schlug fehlAbsendenEs werden die folgenden Felder importiert: Updatedjango-import-export-4.0.9/import_export/locale/de/LC_MESSAGES/django.po000066400000000000000000000127631463433610200257610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2022-10-17 17:42+0200\n" "Last-Translator: Jannes Blobel \n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s durch import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Import fertiggestellt, mit {} neuen und {} aktualisierten {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" "%(exc_name)s beim Versuch, die Datei zu lesen ist aufgetretten. Stellen Sie " "sicher, dass du das richtige Format für deine Datei gewählt hast" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importieren" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportieren" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Ausgewählte %(verbose_name_plural)s exportieren" #: forms.py:15 msgid "Resource" msgstr "Ressource" #: forms.py:20 msgid "Format" msgstr "Dateiformat" #: forms.py:58 msgid "File to import" msgstr "Zu importierende Datei" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Start" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Es werden die folgenden Felder importiert: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Absenden" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Unten befindet sich eine Vorschau der zu importierenden Daten. Wenn die " "Ergebnisse zufriedenstellend sind, klicke auf \"Import bestätigen\"." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Import bestätigen" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Fehler" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Zeilennummer" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Die Validierung einiger Zeilen schlug fehl" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Bitte korrigiere falls möglich diese Fehler in deiner Datei und lade sie " "anschließend erneut mit dem obigen Formular hoch." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Zeile" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Nicht feldspezifisch" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Vorschau" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Neu" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Übersprungen" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Löschen" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Update" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Es werden die folgenden Felder importiert: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Es muss ein Exportformat ausgewählt werden." django-import-export-4.0.9/import_export/locale/es/000077500000000000000000000000001463433610200224005ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/es/LC_MESSAGES/000077500000000000000000000000001463433610200241655ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/es/LC_MESSAGES/django.mo000066400000000000000000000042771463433610200257760ustar00rootroot00000000000000%0k1h#'*Rahm t_ 108iKp=..AIPYkq 2?GL&T{1      %(exc_name)s encountered while trying to read file. Ensure you have chosen the correct format for the file.Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewResourceRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: 2023-09-22 11:53-0300 Last-Translator: Santiago Muñoz Language-Team: Spanish Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Se encontró %(exc_name)s mientras se intentaba leer el archivo. Asegúrese que seleccionó el formato correcto para el archivo.A continuación se muestra una vista previa de los datos a importar. Si estás satisfecho con los resultados, haz clic en 'Confirmar importación'Confirmar importaciónBorrarErroresExportarExportar %(verbose_name_plural)s seleccionadosFichero a importarFormatoInicioImportarNúmero de líneaNuevoNo específico del campoPor favor corrija los siguientes errores en la información ingresada donde sea posible, luego vuelva a subir el archivo utilizando el formulario de la parte superior.Vista previaRecursoFilaOmitidoFalló la validación de algunas filasEnviarEste importador importará los siguientes campos:Actualizardjango-import-export-4.0.9/import_export/locale/es/LC_MESSAGES/django.po000066400000000000000000000131141463433610200257670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # David Díaz , 2015. # Santiago Muñoz , 2023. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2023-09-22 11:53-0300\n" "Last-Translator: Santiago Muñoz \n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Proceso de importación finalizado, con {} nuevos y {} actualizados" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" "Se encontró %(exc_name)s mientras se intentaba leer el archivo. Asegúrese " "que seleccionó el formato correcto para el archivo." #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importar" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportar" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exportar %(verbose_name_plural)s seleccionados" #: forms.py:15 msgid "Resource" msgstr "Recurso" #: forms.py:20 msgid "Format" msgstr "Formato" #: forms.py:58 msgid "File to import" msgstr "Fichero a importar" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Inicio" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Este importador importará los siguientes campos:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Enviar" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "A continuación se muestra una vista previa de los datos a importar. Si estás " "satisfecho con los resultados, haz clic en 'Confirmar importación'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Confirmar importación" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Errores" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Número de línea" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Falló la validación de algunas filas" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Por favor corrija los siguientes errores en la información ingresada donde " "sea posible, luego vuelva a subir el archivo utilizando el formulario de la " "parte superior." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Fila" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "No específico del campo" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Vista previa" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nuevo" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Omitido" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Borrar" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Actualizar" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Este importador importará los siguientes campos:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Debes seleccionar un formato de exportación." django-import-export-4.0.9/import_export/locale/es_AR/000077500000000000000000000000001463433610200227625ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/es_AR/LC_MESSAGES/000077500000000000000000000000001463433610200245475ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/es_AR/LC_MESSAGES/django.mo000066400000000000000000000043321463433610200263500ustar00rootroot00000000000000%0k1h#'*Rahm t_ 108ifpX .I\dkt MZbg&o1      %(exc_name)s encountered while trying to read file. Ensure you have chosen the correct format for the file.Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewResourceRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2023-09-22 11:53-0300 Last-Translator: Santiago Muñoz Language-Team: Spanish (Argentina) Language: es_AR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.6.10 Se encontró %(exc_name)s mientras se intentaba leer el archivo. Asegúrese que seleccionó el formato correcto para el archivo.A continuación se muestra una vista previa de los datos a importar. Si está satisfecho con los resultados, haga clic en 'Confirmar importación'Confirmar importaciónBorrarErroresExportarExportar %(verbose_name_plural)s seleccionadosArchivo a importarFormatoInicioImportarNúmero de líneaNuevoNo específico del campoPor favor corrija los siguientes errores en la información ingresada donde sea posible, luego vuelva a subir el archivo utilizando el formulario de la parte superior.Vista previaRecursoFilaOmitidoFalló la validación de algunas filasEnviarEste importador importará los siguientes campos:Actualizardjango-import-export-4.0.9/import_export/locale/es_AR/LC_MESSAGES/django.po000066400000000000000000000131201463433610200263460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Gonzalo Bustos, 2015. # Santiago Muñoz , 2023. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2023-09-22 11:53-0300\n" "Last-Translator: Santiago Muñoz \n" "Language-Team: Spanish (Argentina)\n" "Language: es_AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.6.10\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Proceso de importación finalizado, con {} nuevos y {} actualizados" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" "Se encontró %(exc_name)s mientras se intentaba leer el archivo. Asegúrese " "que seleccionó el formato correcto para el archivo." #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importar" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportar" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exportar %(verbose_name_plural)s seleccionados" #: forms.py:15 msgid "Resource" msgstr "Recurso" #: forms.py:20 msgid "Format" msgstr "Formato" #: forms.py:58 msgid "File to import" msgstr "Archivo a importar" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Inicio" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Este importador importará los siguientes campos:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Enviar" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "A continuación se muestra una vista previa de los datos a importar. Si está " "satisfecho con los resultados, haga clic en 'Confirmar importación'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Confirmar importación" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Errores" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Número de línea" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Falló la validación de algunas filas" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Por favor corrija los siguientes errores en la información ingresada donde " "sea posible, luego vuelva a subir el archivo utilizando el formulario de la " "parte superior." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Fila" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "No específico del campo" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Vista previa" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nuevo" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Omitido" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Borrar" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Actualizar" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Este importador importará los siguientes campos:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Debe seleccionar un formato de exportación." django-import-export-4.0.9/import_export/locale/fa/000077500000000000000000000000001463433610200223575ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fa/LC_MESSAGES/000077500000000000000000000000001463433610200241445ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fa/LC_MESSAGES/django.mo000066400000000000000000000041531463433610200257460ustar00rootroot00000000000000 h"'  _|0z(g[w ~ 6"!'*jR  3 ?X    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: 0.0.1 Report-Msgid-Bugs-To: PO-Revision-Date: 2021-03-09 00:29+0030 Last-Translator: Yazdan Ranjbar Language-Team: Persain/Farsi Language: Farsi/Persian MIME-Version: 0.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.5.4 %s یه وسیله ورودی-خروجیپایین یک پیش‌نمایش از دیتا‌هایی است که بارگذاری خواهند شد اگر این موارد درست هستروی 'تایید بارگذاری' گلیگ گنیدتایید بارگذاریحذفخطاهاخروجیخروجی %(verbose_name_plural)s انتخاب شدهقایل برای بارگذاریفرمتخانهبارگذاریشماره خطجدیدفیلد‌های غیر اختصاصیلطفا این خطا را تصحیح کنید و سپس مجدد فایل را بارگذاری کنیدنمایشسظردر شدبرخی از سطر‌ها معتبر نبودندارسالاین بارگذاری شامل این فیلد‌ها هست:بروزرسانیdjango-import-export-4.0.9/import_export/locale/fa/LC_MESSAGES/django.po000066400000000000000000000131361463433610200257520ustar00rootroot00000000000000# Copyright (C) 2021 THE django-import-export # This file is distributed under the same license as the django-import-export package. # # Yazdan Ranjbar , 2021. msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2021-03-09 00:29+0030\n" "Last-Translator: Yazdan Ranjbar \n" "Language-Team: Persain/Farsi \n" "Language: Farsi/Persian\n" "MIME-Version: 0.1\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s یه وسیله ورودی-خروجی" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "بارگذاری تمام شد، با {} مورد جدید و {} مورد به روز شده." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "بارگذاری" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "خروجی" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "خروجی %(verbose_name_plural)s انتخاب شده" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "فرمت" #: forms.py:58 msgid "File to import" msgstr "قایل برای بارگذاری" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "خانه" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "این بارگذاری شامل این فیلد‌ها هست:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "ارسال" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "پایین یک پیش‌نمایش از دیتا‌هایی است که بارگذاری خواهند شد اگر این موارد درست " "هستروی 'تایید بارگذاری' گلیگ گنید" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "تایید بارگذاری" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "خطاها" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "شماره خط" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "برخی از سطر‌ها معتبر نبودند" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "لطفا این خطا را تصحیح کنید و سپس مجدد فایل را بارگذاری کنید" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "سظر" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "فیلد‌های غیر اختصاصی" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "نمایش" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "جدید" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "در شد" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "حذف" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "بروزرسانی" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "این بارگذاری شامل این فیلد‌ها هست:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "شما باید یک فرمت خروجی انتخاب کنید" django-import-export-4.0.9/import_export/locale/fi/000077500000000000000000000000001463433610200223675ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fi/LC_MESSAGES/000077500000000000000000000000001463433610200241545ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fi/LC_MESSAGES/django.mo000066400000000000000000000042021463433610200257510ustar00rootroot00000000000000%PkQh?NU\'c _08AEMj0q0.` jX#&7FN R]bZ ##%,%R x     %(exc_name)s encountered while trying to read file. Ensure you have chosen the correct format for the file.%s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewResourceRowSkippedSome rows failed to validateSubmitThis exporter will export the following fields: This importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2023-05-10 15:23+0300 Last-Translator: Lauri Virtanen Language-Team: Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Kohdattiin %(exc_name)s tiedostoa lukiessa. Varmista, että olet valinnut oikean tiedostotyypin.%s käyttäen import_exportAlla on esikatselu tuotavista tiedoista. Jos olet tyytyväinen, paina 'Vahvista tuonti'.Vahvista tuontiPoistoVirheetVieVie valitut %(verbose_name_plural)sTuotava tiedostoTiedostotyyppiEtusivuTuoRivinumeroUusiEi liity mihinkään kenttäänKorjaa nämä virheet tiedoissasi ja lähetä uudelleen käyttäen yllä olevaa lomaketta.EsikatseluResurssiRiviOhitettuJoitakin rivejä ei voitu vahvistaaLähetäTämä vienti vie seuraavat kentät: Tämä tuonti tuo seuraavat kentät: Päivitysdjango-import-export-4.0.9/import_export/locale/fi/LC_MESSAGES/django.po000066400000000000000000000120241463433610200257550ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2023-05-10 15:23+0300\n" "Last-Translator: Lauri Virtanen \n" "Language-Team: \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s käyttäen import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Tuonti valmis. Lisätty {} ja päivitetty {} kohteita {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" "Kohdattiin %(exc_name)s tiedostoa lukiessa. Varmista, että olet valinnut " "oikean tiedostotyypin." #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Tuo" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Vie" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Vie valitut %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "Resurssi" #: forms.py:20 msgid "Format" msgstr "Tiedostotyyppi" #: forms.py:58 msgid "File to import" msgstr "Tuotava tiedosto" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Etusivu" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 msgid "This exporter will export the following fields: " msgstr "Tämä vienti vie seuraavat kentät: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Lähetä" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Alla on esikatselu tuotavista tiedoista. Jos olet tyytyväinen, paina " "'Vahvista tuonti'." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Vahvista tuonti" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Virheet" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Rivinumero" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Joitakin rivejä ei voitu vahvistaa" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Korjaa nämä virheet tiedoissasi ja lähetä uudelleen käyttäen yllä olevaa " "lomaketta." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Rivi" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Ei liity mihinkään kenttään" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Esikatselu" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Uusi" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Ohitettu" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Poisto" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Päivitys" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Tämä tuonti tuo seuraavat kentät: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Sinun täytyy valita tiedostotyyppi." django-import-export-4.0.9/import_export/locale/fr/000077500000000000000000000000001463433610200224005ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fr/LC_MESSAGES/000077500000000000000000000000001463433610200241655ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/fr/LC_MESSAGES/django.mo000066400000000000000000000026441463433610200257720ustar00rootroot00000000000000<h)07'>fu| 0Ax) .'0AIQ Y1c    Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); Voici un aperçu des données à importer. Si vous êtes satisfait des résultats, cliquez sur 'Confirmer l'importation'Confirmer l'importationSupprimerErreursExporterExporter %(verbose_name_plural)s selectionnésFichier à importerFormatAccueilImporterNuméro de ligneNouveauAperçuIgnoréSoumettreCet importateur va importer les champs suivants: Mettre à jourdjango-import-export-4.0.9/import_export/locale/fr/LC_MESSAGES/django.po000066400000000000000000000117641463433610200260000ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importer" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exporter" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exporter %(verbose_name_plural)s selectionnés" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Format" #: forms.py:58 msgid "File to import" msgstr "Fichier à importer" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Accueil" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Cet importateur va importer les champs suivants: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Soumettre" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Voici un aperçu des données à importer. Si vous êtes satisfait des " "résultats, cliquez sur 'Confirmer l'importation'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Confirmer l'importation" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Erreurs" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Numéro de ligne" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Aperçu" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nouveau" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Ignoré" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Supprimer" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Mettre à jour" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Cet importateur va importer les champs suivants: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Vous devez sélectionner un format d'exportation." django-import-export-4.0.9/import_export/locale/it/000077500000000000000000000000001463433610200224055ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/it/LC_MESSAGES/000077500000000000000000000000001463433610200241725ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/it/LC_MESSAGES/django.mo000066400000000000000000000026421463433610200257750ustar00rootroot00000000000000<h)07'>fu| 0evM + 2: ? IV \fl$t    Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2015-08-30 20:32+0100 Last-Translator: Christian Galeffi Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.5.4 Questa è un'anteprima dei dati che saranno importati. Se il risultato è soddisfacente, premi 'Conferma importazione'Conferma importazioneCancellaErroriEsportareEsporta selezionati %(verbose_name_plural)sFile da importareFormatoHomeImportareNumero lineaNuovoAnteprimaSaltaInviareVerranno importati i seguenti campi:Aggiornadjango-import-export-4.0.9/import_export/locale/it/LC_MESSAGES/django.po000066400000000000000000000117131463433610200257770ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Christian Galeffi , 2015. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2015-08-30 20:32+0100\n" "Last-Translator: Christian Galeffi \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importare" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Esportare" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Esporta selezionati %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Formato" #: forms.py:58 msgid "File to import" msgstr "File da importare" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Home" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Verranno importati i seguenti campi:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Inviare" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Questa è un'anteprima dei dati che saranno importati. Se il risultato è " "soddisfacente, premi 'Conferma importazione'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Conferma importazione" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Errori" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Numero linea" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Anteprima" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nuovo" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Salta" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Cancella" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Aggiorna" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Verranno importati i seguenti campi:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Devi selezionare un formato di esportazione." django-import-export-4.0.9/import_export/locale/ja/000077500000000000000000000000001463433610200223635ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ja/LC_MESSAGES/000077500000000000000000000000001463433610200241505ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ja/LC_MESSAGES/django.mo000066400000000000000000000027751463433610200257620ustar00rootroot00000000000000<h)07'>fu| 0;# : !Gi |  *    Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; インポートされるデータのプレビューを表示しています。この内容で問題なければ「インポート実行」をクリックしてください。インポート実行削除エラーエクスポート選択した %(verbose_name_plural)s をエクスポートインポートするファイルフォーマットホームインポート行番号新規プレビュースキップ確定以下の列をインポートします。更新django-import-export-4.0.9/import_export/locale/ja/LC_MESSAGES/django.po000066400000000000000000000121121463433610200257470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "インポート" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "エクスポート" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "選択した %(verbose_name_plural)s をエクスポート" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "フォーマット" #: forms.py:58 msgid "File to import" msgstr "インポートするファイル" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "ホーム" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "以下の列をインポートします。" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "確定" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "インポートされるデータのプレビューを表示しています。この内容で問題なければ" "「インポート実行」をクリックしてください。" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "インポート実行" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "エラー" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "行番号" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "プレビュー" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "新規" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "スキップ" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "削除" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "更新" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "以下の列をインポートします。" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "エクスポートフォーマットを選択してください。" django-import-export-4.0.9/import_export/locale/ko/000077500000000000000000000000001463433610200224025ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ko/LC_MESSAGES/000077500000000000000000000000001463433610200241675ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ko/LC_MESSAGES/django.mo000066400000000000000000000034441463433610200257730ustar00rootroot00000000000000lhcry' _OW_|0J=D . ' . ;FM@e  2%    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Yeongkwang Yang Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; %s은(는) django-import-export를 통해 가져왔습니다.다음은 불러올 데이터의 미리보기 입니다.데이터에 문제가 없다면 확인을 눌러 가져오기를 진행하세요.확인삭제에러내보내기선택한 %(verbose_name_plural)s 내보내기파일형식가져오기행 번호생성지정된 필드 없음에러를 수정한 후 파일을 다시 업로드 해주세요.미리보기넘어감유효성 검증에 실패한 행이 있습니다.제출다음의 필드를 가져옵니다: 갱신django-import-export-4.0.9/import_export/locale/ko/LC_MESSAGES/django.po000066400000000000000000000123731463433610200257770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Jinmyeong Cho , 2020. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Yeongkwang Yang \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s은(는) django-import-export를 통해 가져왔습니다." #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "가져오기 성공, {} 행 추가, {} 행 업데이트" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "가져오기" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "내보내기" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "선택한 %(verbose_name_plural)s 내보내기" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "형식" #: forms.py:58 msgid "File to import" msgstr "파일" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "다음의 필드를 가져옵니다: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "제출" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "다음은 불러올 데이터의 미리보기 입니다.데이터에 문제가 없다면 확인을 눌러 가" "져오기를 진행하세요." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "확인" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "에러" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "행 번호" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "유효성 검증에 실패한 행이 있습니다." #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "에러를 수정한 후 파일을 다시 업로드 해주세요." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "지정된 필드 없음" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "미리보기" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "생성" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "넘어감" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "삭제" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "갱신" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "다음의 필드를 가져옵니다: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "내보낼 형식을 선택해주세요." django-import-export-4.0.9/import_export/locale/kz/000077500000000000000000000000001463433610200224155ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/kz/LC_MESSAGES/000077500000000000000000000000001463433610200242025ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/kz/LC_MESSAGES/django.mo000066400000000000000000000044031463433610200260020ustar00rootroot00000000000000 h"'  _|00;1OVeCt0  )$2W" ?J2] V    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Muslim Beibytuly Language-Team: LANGUAGE Language: Kazakh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s арқылы import_exportТөменде импортталатын деректерді алдын ала қарау берілген. Егер сіз нәтижелерге қанағаттансаңыз, 'Импортты растау' түймесін басыңыз.Импортты растауЖоюҚателерЭкспортТаңдалған %(verbose_name_plural)s экспорттаңызИмпорттауға арналған файлФорматБасты бетИмпортЖол нөміріЖаңаӨріске қатысты емесМүмкіндігінше деректеріңіздегі қателерді түзетіңіз, содан кейін жоғарыдағы пішінді қолданып қайта жүктеңіз.Алдын-ала қарауҚатарӨткізілдіКейбір жолдар тексерілмедіЖіберуБұл импорттаушы келесі өрістерді импорттайды: Жаңартуdjango-import-export-4.0.9/import_export/locale/kz/LC_MESSAGES/django.po000066400000000000000000000134311463433610200260060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Muslim Beibytuly \n" "Language-Team: LANGUAGE \n" "Language: Kazakh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s арқылы import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Импорт аяқталды, {} жаңа және {} жаңартылды {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Импорт" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Экспорт" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Таңдалған %(verbose_name_plural)s экспорттаңыз" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Формат" #: forms.py:58 msgid "File to import" msgstr "Импорттауға арналған файл" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Басты бет" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Бұл импорттаушы келесі өрістерді импорттайды: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Жіберу" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Төменде импортталатын деректерді алдын ала қарау берілген. Егер сіз " "нәтижелерге қанағаттансаңыз, 'Импортты растау' түймесін басыңыз." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Импортты растау" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Қателер" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Жол нөмірі" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Кейбір жолдар тексерілмеді" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Мүмкіндігінше деректеріңіздегі қателерді түзетіңіз, содан кейін жоғарыдағы " "пішінді қолданып қайта жүктеңіз." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Қатар" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Өріске қатысты емес" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Алдын-ала қарау" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Жаңа" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Өткізілді" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Жою" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Жаңарту" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Бұл импорттаушы келесі өрістерді импорттайды: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Сіз экспорт форматын таңдауыңыз керек." django-import-export-4.0.9/import_export/locale/nl/000077500000000000000000000000001463433610200224025ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/nl/LC_MESSAGES/000077500000000000000000000000001463433610200241675ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/nl/LC_MESSAGES/django.mo000066400000000000000000000036321463433610200257720ustar00rootroot00000000000000 h"'  _|0B/E  / :S[ a ly|" ($5Z,c     %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); %s door import_exportHieronder is een voorvertoning van de data die geïmporteerd zal worden. Als u tevreden bent met het resultaat, klik dan op 'Accepteer de import'.Accepteer de importVerwijderenFoutenExporterenExporteer geselecteerde %(verbose_name_plural)sBestand om te importerenFormaatTerugImporterenRegel nummerNieuwNiet veld specifiekVerander alstublieft de volgende fouten in uw data waar mogelijk. Upload het bestand daarna nogmaals met het veld hierboven.VoorbeeldweergaveRegelOvergeslagenSommige regels zijn niet goedgekeurdIndienenDeze import zal de volgende velden toevoegenBijwerkendjango-import-export-4.0.9/import_export/locale/nl/LC_MESSAGES/django.po000066400000000000000000000125201463433610200257710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Bram Janssen , 2019. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s door import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Import is klaar met {} nieuwe en {} geupdate {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importeren" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exporteren" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exporteer geselecteerde %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Formaat" #: forms.py:58 msgid "File to import" msgstr "Bestand om te importeren" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Terug" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Deze import zal de volgende velden toevoegen" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Indienen" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Hieronder is een voorvertoning van de data die geïmporteerd zal worden. Als " "u tevreden bent met het resultaat, klik dan op 'Accepteer de import'." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Accepteer de import" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Fouten" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Regel nummer" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Sommige regels zijn niet goedgekeurd" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Verander alstublieft de volgende fouten in uw data waar mogelijk. Upload het " "bestand daarna nogmaals met het veld hierboven." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Regel" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Niet veld specifiek" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Voorbeeldweergave" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nieuw" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Overgeslagen" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Verwijderen" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Bijwerken" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Deze import zal de volgende velden toevoegen" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "U moet een export formaat kiezen." django-import-export-4.0.9/import_export/locale/pl/000077500000000000000000000000001463433610200224045ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/pl/LC_MESSAGES/000077500000000000000000000000001463433610200241715ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/pl/LC_MESSAGES/django.mo000066400000000000000000000030001463433610200257610ustar00rootroot00000000000000LhCRY`'g 0 |{ 28@)Hr  +    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); %s przez import_exportPoniżej znajdują się przykładowe dane do zaimportowania. Jeśli satysfakcjonuje Cię wynik, kliknij 'Potwierdź import'Potwierdź importUsuńBłędyEksportEksportuj wybrane %(verbose_name_plural)sPlik do importuFormatPowrótImportNumer liniiNowyPodglądPominiętyWyślijZostaną zaimportowane następujące pola: Zaktualizowanydjango-import-export-4.0.9/import_export/locale/pl/LC_MESSAGES/django.po000066400000000000000000000122401463433610200257720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Ludwik Trammer , 2015. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s przez import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "Import zakończony, z {} nowymi i {} zaktualizowanymi {}." #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Import" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Eksport" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Eksportuj wybrane %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Format" #: forms.py:58 msgid "File to import" msgstr "Plik do importu" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Powrót" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Zostaną zaimportowane następujące pola: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Wyślij" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Poniżej znajdują się przykładowe dane do zaimportowania. Jeśli " "satysfakcjonuje Cię wynik, kliknij 'Potwierdź import'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Potwierdź import" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Błędy" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Numer linii" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Podgląd" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nowy" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Pominięty" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Usuń" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Zaktualizowany" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Zostaną zaimportowane następujące pola: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Musisz wybrać format eksportu." django-import-export-4.0.9/import_export/locale/pt_BR/000077500000000000000000000000001463433610200227775ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001463433610200245645ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/pt_BR/LC_MESSAGES/django.mo000066400000000000000000000035611463433610200263700ustar00rootroot00000000000000 h"'  _|0G4O-/GOW`qv_ # .15 g    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2020-06-06 10:30-0500 Last-Translator: Daniel Pluth Language-Team: Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Lokalize 20.04.1 %s através import_export Ver abaixo uma prévia dos dados a serem importados. Se você esta satisfeito com os resultados, clique em 'Confirmar importação'Confirmar importaçãoRemoverErrosExportarExportar %(verbose_name_plural)s selecionadosArquivo a ser importadoFormatoInícioImportarNúmero da linhaNovoCampo não é específicoPor favor corrigir os erros nos dados onde possível e recarregar os dados com o formato acima.PréviaLinhaNão usadosAlgumas linhas não foram validadasEnviarEste importador vai importar os seguintes campos:Atualizardjango-import-export-4.0.9/import_export/locale/pt_BR/LC_MESSAGES/django.po000066400000000000000000000124351463433610200263730ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Dan , 2020. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: 2020-06-06 10:30-0500\n" "Last-Translator: Daniel Pluth \n" "Language-Team: \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Lokalize 20.04.1\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s através import_export " #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "A importação foi completada com {} novas e {} atualizadas {}" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importar" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportar" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exportar %(verbose_name_plural)s selecionados" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Formato" #: forms.py:58 msgid "File to import" msgstr "Arquivo a ser importado" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Início" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Este importador vai importar os seguintes campos:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Enviar" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Ver abaixo uma prévia dos dados a serem importados. Se você esta satisfeito " "com os resultados, clique em 'Confirmar importação'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Confirmar importação" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Erros" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Número da linha" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Algumas linhas não foram validadas" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Por favor corrigir os erros nos dados onde possível e recarregar os dados " "com o formato acima." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Linha" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Campo não é específico" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Prévia" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Novo" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Não usados" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Remover" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Atualizar" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Este importador vai importar os seguintes campos:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Você tem que selecionar um formato de exportação." django-import-export-4.0.9/import_export/locale/ru/000077500000000000000000000000001463433610200224175ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ru/LC_MESSAGES/000077500000000000000000000000001463433610200242045ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/ru/LC_MESSAGES/django.mo000066400000000000000000000121161463433610200260040ustar00rootroot00000000000000&L5|P^Qkh5',&-2B9 |U_U]f9jcf40059:5t*l] q  : #  ) 6 GE  b  +s8>  \D#h{~E}C8JS>/@   $#  " & !% Export %(len)s selected item. Export %(len)s selected items. %(exc_name)s encountered while trying to read file. Ensure you have chosen the correct format for the file.%s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importForm is not validated, call `is_valid` firstFormatHomeImportImport finished: {} new, {} updated, {} deleted and {} skipped {}.Line numberNewNo valid data to import. Ensure your file has the correct headers or data for import.Non field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewResourceRowSelect at least 1 field for "%(resource_name)s" to exportSkippedSome rows failed to validateSubmitThe following fields are declared in 'import_id_fields' but are not present in the file headers: %sThe following fields are declared in 'import_id_fields' but are not present in the resource fields: %sThis exporter will export the following fields: This importer will import the following fields: UpdateValue could not be parsed using defined date formats.Value could not be parsed using defined datetime formats.Value could not be parsed using defined time formats.Value could not be parsed.call to force_str() on instance failed: %sProject-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2024-04-26 20:55+0700 Last-Translator: Language-Team: Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: Poedit 3.0.1 Экспортировать %(len)s выбранный элемент. Экспортировать %(len)s выбранных элемента. Экспортировать %(len)s выбранных элементов. При чтении файла возникла ошибка %(exc_name)s. Убедитесь, что используется подходящий формат файла.%s через import_exportНиже показано то, что будет импортировано. Нажмите 'Подтвердить импорт', если Вас устраивает результатПодтвердить импортУдаленоОшибкиЭкспортЭкспортировать выбранные %(verbose_name_plural)sФайл для импортаНеобходимо сначала вызвать `is_valid` для валидации формыФорматГлавнаяИмпортИмпорт завершен: {} новых, {} обновлено, {} удалено и {} пропущено {}.Номер строкиДобавленоНекорректные данные для импорта. Убедитесь, что файл содержит корректные заголовок и данные.Не относящиеся к конкретному полюПо возможности исправьте эти ошибки в своих данных, а затем повторно загрузите их, используя форму выше.ПредпросмотрРесурсСтрокаВыберите хотя бы одно поле для экспорта "%(resource_name)s"ПропущеноНекоторые строки не прошли валидациюОтправитьСледующие поля указаны в 'import_id_fields', но отсутствуют в заголовке файла: %sСледующие поля указаны в 'import_id_fields', но отсутствуют в полях ресурса: %sБудут экспортированы следующие поля: Будут импортированы следующие поля: ОбновленоОшибка парсинга значения даты.Ошибка парсинга значения даты и времени.Ошибка парсинга значения времени.Ошибка парсинга значения.вызов 'force_str()' завершился ошибкой: %sdjango-import-export-4.0.9/import_export/locale/ru/LC_MESSAGES/django.po000066400000000000000000000163471463433610200260210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-04-26 20:01+0700\n" "PO-Revision-Date: 2024-04-26 20:55+0700\n" "Last-Translator: \n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" #: admin.py:241 admin.py:591 #, python-format msgid "%s through import_export" msgstr "%s через import_export" #: admin.py:249 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" "Импорт завершен: {} новых, {} обновлено, {} удалено и {} пропущено {}." #: admin.py:418 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" "При чтении файла возникла ошибка %(exc_name)s. Убедитесь, что используется " "подходящий формат файла." #: admin.py:491 msgid "" "No valid data to import. Ensure your file has the correct headers or data " "for import." msgstr "" "Некорректные данные для импорта. Убедитесь, что файл содержит корректные " "заголовок и данные." #: admin.py:542 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Импорт" #: admin.py:786 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Экспорт" #: admin.py:912 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Экспортировать выбранные %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "Ресурс" #: forms.py:20 msgid "Format" msgstr "Формат" #: forms.py:58 msgid "File to import" msgstr "Файл для импорта" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "Необходимо сначала вызвать `is_valid` для валидации формы" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "Выберите хотя бы одно поле для экспорта \"%(resource_name)s\"" #: resources.py:1131 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" "Следующие поля указаны в 'import_id_fields', но отсутствуют в полях " "ресурса: %s" #: resources.py:1146 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" "Следующие поля указаны в 'import_id_fields', но отсутствуют в заголовке " "файла: %s" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "вызов 'force_str()' завершился ошибкой: %s" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Главная" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" "\n" " Экспортировать %(len)s выбранный элемент.\n" " " msgstr[1] "" "\n" " Экспортировать %(len)s выбранных элемента.\n" " " msgstr[2] "" "\n" " Экспортировать %(len)s выбранных элементов.\n" " " #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 msgid "This exporter will export the following fields: " msgstr "Будут экспортированы следующие поля: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:70 msgid "Submit" msgstr "Отправить" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Ниже показано то, что будет импортировано. Нажмите 'Подтвердить импорт', " "если Вас устраивает результат" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Подтвердить импорт" #: templates/admin/import_export/import.html:81 #: templates/admin/import_export/import.html:122 msgid "Errors" msgstr "Ошибки" #: templates/admin/import_export/import.html:95 msgid "Line number" msgstr "Номер строки" #: templates/admin/import_export/import.html:114 msgid "Some rows failed to validate" msgstr "Некоторые строки не прошли валидацию" #: templates/admin/import_export/import.html:116 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "По возможности исправьте эти ошибки в своих данных, а затем повторно " "загрузите их, используя форму выше." #: templates/admin/import_export/import.html:121 msgid "Row" msgstr "Строка" #: templates/admin/import_export/import.html:148 msgid "Non field specific" msgstr "Не относящиеся к конкретному полю" #: templates/admin/import_export/import.html:171 msgid "Preview" msgstr "Предпросмотр" #: templates/admin/import_export/import.html:186 msgid "New" msgstr "Добавлено" #: templates/admin/import_export/import.html:188 msgid "Skipped" msgstr "Пропущено" #: templates/admin/import_export/import.html:190 msgid "Delete" msgstr "Удалено" #: templates/admin/import_export/import.html:192 msgid "Update" msgstr "Обновлено" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Будут импортированы следующие поля: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "Ошибка парсинга значения даты." #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "Ошибка парсинга значения даты и времени." #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "Ошибка парсинга значения времени." #: widgets.py:374 msgid "Value could not be parsed." msgstr "Ошибка парсинга значения." #~ msgid "You must select an export format." #~ msgstr "Необходимо выбрать формат экспорта" django-import-export-4.0.9/import_export/locale/sk/000077500000000000000000000000001463433610200224065ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/sk/LC_MESSAGES/000077500000000000000000000000001463433610200241735ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/sk/LC_MESSAGES/django.mo000066400000000000000000000026571463433610200260040ustar00rootroot00000000000000<h)07'>fu| 0]wE  ,*2 8DSY bo'x    Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewPreviewSkippedSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; Nižšie je zobrazený náhľad importovaných dát. Ak je všetko v poriadku, kliknite na tlačidlo 'Potvrdiť import'Potvrdiť importVymazanýChybyExportovaťExportovať vybrané %(verbose_name_plural)sImportovať súborFormátDomovImportovaťČíslo riadkuNovýNáhľadPreskočenýOdoslaťBudú importované nasledujúce polia: Aktualizovanýdjango-import-export-4.0.9/import_export/locale/sk/LC_MESSAGES/django.po000066400000000000000000000117711463433610200260040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Juraj Bubniak , 2015. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "" #: admin.py:254 msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "Importovať" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Exportovať" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Exportovať vybrané %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Formát" #: forms.py:58 msgid "File to import" msgstr "Importovať súbor" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Domov" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" msgstr[2] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Budú importované nasledujúce polia: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Odoslať" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Nižšie je zobrazený náhľad importovaných dát. Ak je všetko v poriadku, " "kliknite na tlačidlo 'Potvrdiť import'" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "Potvrdiť import" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Chyby" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Číslo riadku" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Náhľad" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Nový" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Preskočený" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Vymazaný" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Aktualizovaný" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Budú importované nasledujúce polia: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Je potrebné vybrať formát exportu." django-import-export-4.0.9/import_export/locale/tr/000077500000000000000000000000001463433610200224165ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/tr/LC_MESSAGES/000077500000000000000000000000001463433610200242035ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/tr/LC_MESSAGES/django.mo000066400000000000000000000036321463433610200260060ustar00rootroot00000000000000 h"'  _|0A.M 36 L Z dps !*J>Q     %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatHomeImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); %s vasıtasıyla import_exportAşağıda içe aktarılacak verilerin önizlemesi verilmiştir. Sonuçlardan memnunsanız 'İçe aktarmayı onayla'yı tıklayın.İçe aktarmayı onaylaSilHatalarDışa aktarSeçililenleri dışa aktar %(verbose_name_plural)sİçe alınacak dosyaDosya biçimiAna sayfaİçe aktarSatır numarasıYeniAlan olmayana özgüLütfen verilerinizdeki bu hataları olabildiğince düzeltin, sonra yukarıdaki formu kullanarak tekrar yükleyin.Ön izlemeSatırAtlandıBazı satırlar doğrulanamadıKaydetBu içe aktarıcı aşağıdaki alanları içe aktaracaktır: Güncelledjango-import-export-4.0.9/import_export/locale/tr/LC_MESSAGES/django.po000066400000000000000000000125311463433610200260070ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s vasıtasıyla import_export" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "{} yeni ve {} güncellenen {} ile içe aktarma bitti" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "İçe aktar" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "Dışa aktar" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "Seçililenleri dışa aktar %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "Dosya biçimi" #: forms.py:58 msgid "File to import" msgstr "İçe alınacak dosya" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "Ana sayfa" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" msgstr[1] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "Bu içe aktarıcı aşağıdaki alanları içe aktaracaktır: " #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "Kaydet" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "" "Aşağıda içe aktarılacak verilerin önizlemesi verilmiştir. Sonuçlardan " "memnunsanız 'İçe aktarmayı onayla'yı tıklayın." #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "İçe aktarmayı onayla" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "Hatalar" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "Satır numarası" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "Bazı satırlar doğrulanamadı" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "" "Lütfen verilerinizdeki bu hataları olabildiğince düzeltin, sonra yukarıdaki " "formu kullanarak tekrar yükleyin." #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "Satır" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "Alan olmayana özgü" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "Ön izleme" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "Yeni" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "Atlandı" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "Sil" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "Güncelle" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "Bu içe aktarıcı aşağıdaki alanları içe aktaracaktır: " #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "Bir dosya biçimi seçmelisiniz" django-import-export-4.0.9/import_export/locale/zh_Hans/000077500000000000000000000000001463433610200233635ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/zh_Hans/LC_MESSAGES/000077500000000000000000000000001463433610200251505ustar00rootroot00000000000000django-import-export-4.0.9/import_export/locale/zh_Hans/LC_MESSAGES/django.mo000066400000000000000000000033121463433610200267460ustar00rootroot00000000000000|h s' __gks0=$ a2 ' Qovz    %s through import_exportBelow is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'Confirm importDeleteErrorsExportExport selected %(verbose_name_plural)sFile to importFormatImportLine numberNewNon field specificPlease correct these errors in your data where possible, then reupload it using the form above.PreviewRowSkippedSome rows failed to validateSubmitThis importer will import the following fields: UpdateProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: hao wang <173300430@qq.com> Language-Team: LANGUAGE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; %s 通过 django-import-export导入以下是导入数据的预览。如果确认结果没有问题,可以点击 “确认导入”确认导入删除错误导出导出选中的 %(verbose_name_plural)s导入文件格式导入行号新增没有指定的字段请使用上面的表单,纠正这些提示有错误的数据,并重新上传预览行忽略某些行验数据证失败提交此次将导入以下字段:更新django-import-export-4.0.9/import_export/locale/zh_Hans/LC_MESSAGES/django.po000066400000000000000000000121661463433610200267600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-03-15 13:54+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: hao wang <173300430@qq.com>\n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: admin.py:246 admin.py:588 #, python-format msgid "%s through import_export" msgstr "%s 通过 django-import-export导入" #: admin.py:254 #, fuzzy #| msgid "Import finished, with {} new and {} updated {}." msgid "Import finished: {} new, {} updated, {} deleted and {} skipped {}." msgstr "导入成功,新增{}条记录,更新{}条记录。" #: admin.py:423 #, python-format msgid "" "%(exc_name)s encountered while trying to read file. Ensure you have chosen " "the correct format for the file." msgstr "" #: admin.py:539 templates/admin/import_export/change_list_import_item.html:5 #: templates/admin/import_export/import.html:19 msgid "Import" msgstr "导入" #: admin.py:785 templates/admin/import_export/change_form.html:8 #: templates/admin/import_export/change_list_export_item.html:5 #: templates/admin/import_export/export.html:12 msgid "Export" msgstr "导出" #: admin.py:911 #, python-format msgid "Export selected %(verbose_name_plural)s" msgstr "导出选中的 %(verbose_name_plural)s" #: forms.py:15 msgid "Resource" msgstr "" #: forms.py:20 msgid "Format" msgstr "格式" #: forms.py:58 msgid "File to import" msgstr "导入文件" #: forms.py:209 msgid "Form is not validated, call `is_valid` first" msgstr "" #: forms.py:261 #, python-format msgid "Select at least 1 field for \"%(resource_name)s\" to export" msgstr "" #: resources.py:1137 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the resource fields: %s" msgstr "" #: resources.py:1152 #, python-format msgid "" "The following fields are declared in 'import_id_fields' but are not present " "in the file headers: %s" msgstr "" #: results.py:120 #, python-format msgid "call to force_str() on instance failed: %s" msgstr "" #: templates/admin/import_export/base.html:11 msgid "Home" msgstr "" #: templates/admin/import_export/export.html:21 #, python-format msgid "" "\n" " Export %(len)s selected item.\n" " " msgid_plural "" "\n" " Export %(len)s selected items.\n" " " msgstr[0] "" #: templates/admin/import_export/export.html:48 #: templates/admin/import_export/resource_fields_list.html:5 #, fuzzy #| msgid "This importer will import the following fields: " msgid "This exporter will export the following fields: " msgstr "此次将导入以下字段:" #: templates/admin/import_export/export.html:76 #: templates/admin/import_export/import.html:69 msgid "Submit" msgstr "提交" #: templates/admin/import_export/import.html:30 msgid "" "Below is a preview of data to be imported. If you are satisfied with the " "results, click 'Confirm import'" msgstr "以下是导入数据的预览。如果确认结果没有问题,可以点击 “确认导入”" #: templates/admin/import_export/import.html:33 msgid "Confirm import" msgstr "确认导入" #: templates/admin/import_export/import.html:80 #: templates/admin/import_export/import.html:121 msgid "Errors" msgstr "错误" #: templates/admin/import_export/import.html:94 msgid "Line number" msgstr "行号" #: templates/admin/import_export/import.html:113 msgid "Some rows failed to validate" msgstr "某些行验数据证失败" #: templates/admin/import_export/import.html:115 msgid "" "Please correct these errors in your data where possible, then reupload it " "using the form above." msgstr "请使用上面的表单,纠正这些提示有错误的数据,并重新上传" #: templates/admin/import_export/import.html:120 msgid "Row" msgstr "行" #: templates/admin/import_export/import.html:147 msgid "Non field specific" msgstr "没有指定的字段" #: templates/admin/import_export/import.html:170 msgid "Preview" msgstr "预览" #: templates/admin/import_export/import.html:185 msgid "New" msgstr "新增" #: templates/admin/import_export/import.html:187 msgid "Skipped" msgstr "忽略" #: templates/admin/import_export/import.html:189 msgid "Delete" msgstr "删除" #: templates/admin/import_export/import.html:191 msgid "Update" msgstr "更新" #: templates/admin/import_export/resource_fields_list.html:7 msgid "This importer will import the following fields: " msgstr "此次将导入以下字段:" #: widgets.py:250 msgid "Value could not be parsed using defined date formats." msgstr "" #: widgets.py:300 msgid "Value could not be parsed using defined datetime formats." msgstr "" #: widgets.py:346 msgid "Value could not be parsed using defined time formats." msgstr "" #: widgets.py:374 msgid "Value could not be parsed." msgstr "" #~ msgid "You must select an export format." #~ msgstr "您必须选择一个导出格式。" django-import-export-4.0.9/import_export/mixins.py000066400000000000000000000251741463433610200224240ustar00rootroot00000000000000import logging import warnings from warnings import warn from django.conf import settings from django.http import HttpResponse from django.utils.timezone import now from django.views.generic.edit import FormView from .formats import base_formats from .forms import SelectableFieldsExportForm from .resources import modelresource_factory from .signals import post_export logger = logging.getLogger(__name__) class BaseImportExportMixin: """ Base mixin for functionality related to importing and exporting via the Admin interface. """ resource_class = None resource_classes = [] @property def formats(self): return getattr(settings, "IMPORT_EXPORT_FORMATS", base_formats.DEFAULT_FORMATS) @property def export_formats(self): return getattr(settings, "EXPORT_FORMATS", self.formats) @property def import_formats(self): return getattr(settings, "IMPORT_FORMATS", self.formats) def check_resource_classes(self, resource_classes): if resource_classes and not hasattr(resource_classes, "__getitem__"): raise Exception( "The resource_classes field type must be " "subscriptable (list, tuple, ...)" ) def get_resource_classes(self, request): """ Return subscriptable type (list, tuple, ...) containing resource classes :param request: The request object. :returns: The Resource classes. """ if self.resource_classes and self.resource_class: raise Exception( "Only one of 'resource_class' and 'resource_classes' can be set" ) if hasattr(self, "get_resource_class"): warnings.warn( "The 'get_resource_class()' method has been deprecated. " "Please implement the new 'get_resource_classes()' method", DeprecationWarning, ) return [self.get_resource_class()] if self.resource_class: warnings.warn( "The 'resource_class' field has been deprecated. " "Please implement the new 'resource_classes' field", DeprecationWarning, ) if not self.resource_classes and not self.resource_class: return [modelresource_factory(self.model)] if self.resource_classes: return self.resource_classes return [self.resource_class] def get_resource_kwargs(self, request, *args, **kwargs): """ Return the kwargs which are to be passed to the Resource constructor. Can be overridden to provide additional kwarg params. :param request: The request object. :param kwargs: Keyword arguments. :returns: The Resource kwargs (by default, is the kwargs passed). """ return kwargs def get_resource_index(self, form): """ Return the index of the resource class defined in the form. :param form: The form object. :returns: The index of the resource as an int. """ resource_index = 0 if form and "resource" in form.cleaned_data: try: resource_index = int(form.cleaned_data["resource"]) except ValueError: pass return resource_index class BaseImportMixin(BaseImportExportMixin): #: If enabled, the import workflow skips the import confirm page #: and imports the data directly. #: See :ref:`import_export_skip_admin_confirm`. skip_import_confirm = False def get_import_resource_classes(self, request): """ :param request: The request object. Returns ResourceClass subscriptable (list, tuple, ...) to use for import. """ if hasattr(self, "get_import_resource_class"): warnings.warn( "The 'get_import_resource_class()' method has been deprecated. " "Please implement the new 'get_import_resource_classes()' method", DeprecationWarning, ) return [self.get_import_resource_class()] resource_classes = self.get_resource_classes(request) self.check_resource_classes(resource_classes) return resource_classes def get_import_formats(self): """ Returns available import formats. """ return [f for f in self.import_formats if f().can_import()] def get_import_resource_kwargs(self, request, **kwargs): """ Returns kwargs which will be passed to the Resource constructor. :param request: The request object. :param kwargs: Keyword arguments. :returns: The kwargs (dict) """ return self.get_resource_kwargs(request, **kwargs) def choose_import_resource_class(self, form, request): """ Identify which class should be used for import :param form: The form object. :param request: The request object. :returns: The export Resource class. """ resource_index = self.get_resource_index(form) return self.get_import_resource_classes(request)[resource_index] def is_skip_import_confirm_enabled(self): return ( getattr(settings, "IMPORT_EXPORT_SKIP_ADMIN_CONFIRM", False) or self.skip_import_confirm is True ) class BaseExportMixin(BaseImportExportMixin): model = None #: If enabled, the export workflow skips the export form and #: exports the data directly. #: See :ref:`import_export_skip_admin_export_ui`. skip_export_form = False #: If enabled, the export workflow from Admin UI action menu #: skips the export form and exports the data directly. #: See :ref:`import_export_skip_admin_action_export_ui`. skip_export_form_from_action = False def get_export_formats(self): """ Returns available export formats. """ return [f for f in self.export_formats if f().can_export()] def get_export_resource_classes(self, request): """ Returns ResourceClass subscriptable (list, tuple, ...) to use for export. :param request: The request object. :returns: The Resource classes. """ if hasattr(self, "get_export_resource_class"): warnings.warn( "The 'get_export_resource_class()' method has been deprecated. " "Please implement the new 'get_export_resource_classes()' method", DeprecationWarning, ) return [self.get_export_resource_class()] resource_classes = self.get_resource_classes(request) self.check_resource_classes(resource_classes) return resource_classes def choose_export_resource_class(self, form, request): """ Identify which class should be used for export :param request: The request object. :param form: The form object. :returns: The export Resource class. """ resource_index = self.get_resource_index(form) return self.get_export_resource_classes(request)[resource_index] def get_export_resource_kwargs(self, request, **kwargs): """ Returns kwargs which will be passed to the Resource constructor. :param request: The request object. :param kwargs: Keyword arguments. :returns: The kwargs (dict) """ return self.get_resource_kwargs(request, **kwargs) def get_export_resource_fields_from_form(self, form): if isinstance(form, SelectableFieldsExportForm): export_fields = form.get_selected_resource_export_fields() if export_fields: return export_fields return def get_data_for_export(self, request, queryset, **kwargs): export_form = kwargs.get("export_form") export_class = self.choose_export_resource_class(export_form, request) export_resource_kwargs = self.get_export_resource_kwargs(request, **kwargs) export_fields = self.get_export_resource_fields_from_form(export_form) cls = export_class(**export_resource_kwargs) export_data = cls.export( queryset=queryset, export_fields=export_fields, **kwargs ) return export_data def get_export_filename(self, file_format): date_str = now().strftime("%Y-%m-%d") filename = "%s-%s.%s" % ( self.model.__name__, date_str, file_format.get_extension(), ) return filename def is_skip_export_form_enabled(self): return ( getattr(settings, "IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI", False) or self.skip_export_form is True ) def is_skip_export_form_from_action_enabled(self): return ( getattr(settings, "IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI", False) or self.skip_export_form_from_action is True ) class ExportViewMixin(BaseExportMixin): form_class = SelectableFieldsExportForm def get_export_data(self, file_format, queryset, **kwargs): """ Returns file_format representation for given queryset. """ data = self.get_data_for_export(self.request, queryset, **kwargs) export_data = file_format.export_data(data) return export_data def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) return context def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs["formats"] = self.get_export_formats() kwargs["resources"] = self.get_export_resource_classes(self.request) return kwargs class ExportViewFormMixin(ExportViewMixin, FormView): def form_valid(self, form): warn( "ExportViewFormMixin is deprecated and will be removed " "in a future release", DeprecationWarning, stacklevel=2, ) formats = self.get_export_formats() file_format = formats[int(form.cleaned_data["format"])]() if hasattr(self, "get_filterset"): queryset = self.get_filterset(self.get_filterset_class()).qs else: queryset = self.get_queryset() export_data = self.get_export_data(file_format, queryset) content_type = file_format.get_content_type() # Django 1.7 uses the content_type kwarg instead of mimetype try: response = HttpResponse(export_data, content_type=content_type) except TypeError: response = HttpResponse(export_data, mimetype=content_type) response["Content-Disposition"] = 'attachment; filename="%s"' % ( self.get_export_filename(file_format), ) post_export.send(sender=None, model=self.model) return response django-import-export-4.0.9/import_export/options.py000066400000000000000000000146171463433610200226100ustar00rootroot00000000000000class ResourceOptions: """ The inner Meta class allows for class-level configuration of how the Resource should behave. The following options are available: """ model = None """ Django Model class or full application label string. It is used to introspect available fields. """ fields = None """ Controls what introspected fields the Resource should include. A whitelist of fields. """ exclude = None """ Controls what introspected fields the Resource should NOT include. A blacklist of fields. """ instance_loader_class = None """ Controls which class instance will take care of loading existing objects. """ import_id_fields = ["id"] """ Controls which object fields will be used to identify existing instances. """ import_order = None """ Controls import order for columns. """ export_order = None """ Controls export order for columns. """ widgets = None """ This dictionary defines widget kwargs for fields. """ use_transactions = None """ Controls if import should use database transactions. Default value is ``None`` meaning ``settings.IMPORT_EXPORT_USE_TRANSACTIONS`` will be evaluated. """ skip_unchanged = False """ Controls if the import should skip unchanged records. If ``True``, then each existing instance is compared with the instance to be imported, and if there are no changes detected, the row is recorded as skipped, and no database update takes place. The advantages of enabling this option are: #. Avoids unnecessary database operations which can result in performance improvements for large datasets. #. Skipped records are recorded in each :class:`~import_export.results.RowResult`. #. Skipped records are clearly visible in the :ref:`import confirmation page`. For the default ``skip_unchanged`` logic to work, the :attr:`~import_export.resources.ResourceOptions.skip_diff` must also be ``False`` (which is the default): Default value is ``False``. """ report_skipped = True """ Controls if the result reports skipped rows. Default value is ``True``. """ clean_model_instances = False """ Controls whether ``instance.full_clean()`` is called during the import process to identify potential validation errors for each (non skipped) row. The default value is ``False``. """ chunk_size = None """ Controls the chunk_size argument of Queryset.iterator or, if prefetch_related is used, the per_page attribute of Paginator. """ skip_diff = False """ Controls whether or not an instance should be diffed following import. By default, an instance is copied prior to insert, update or delete. After each row is processed, the instance's copy is diffed against the original, and the value stored in each :class:`~import_export.results.RowResult`. If diffing is not required, then disabling the diff operation by setting this value to ``True`` improves performance, because the copy and comparison operations are skipped for each row. If enabled, then :meth:`~import_export.resources.Resource.skip_row` checks do not execute, because 'skip' logic requires comparison between the stored and imported versions of a row. If enabled, then HTML row reports are also not generated, meaning that the :attr:`~import_export.resources.ResourceOptions.skip_html_diff` value is ignored. The default value is ``False``. """ skip_html_diff = False """ Controls whether or not a HTML report is generated after each row. By default, the difference between a stored copy and an imported instance is generated in HTML form and stored in each :class:`~import_export.results.RowResult`. The HTML report is used to present changes in the :ref:`import confirmation page` in the admin site, hence when this value is ``True``, then changes will not be presented on the confirmation screen. If the HTML report is not required, then setting this value to ``True`` improves performance, because the HTML generation is skipped for each row. This is a useful optimization when importing large datasets. The default value is ``False``. """ use_bulk = False """ Controls whether import operations should be performed in bulk. By default, an object's save() method is called for each row in a data set. When bulk is enabled, objects are saved using bulk operations. """ batch_size = 1000 """ The batch_size parameter controls how many objects are created in a single query. The default is to create objects in batches of 1000. See `bulk_create() `_. This parameter is only used if ``use_bulk`` is ``True``. """ force_init_instance = False """ If ``True``, this parameter will prevent imports from checking the database for existing instances. Enabling this parameter is a performance enhancement if your import dataset is guaranteed to contain new instances. """ using_db = None """ DB Connection name to use for db transactions. If not provided, ``router.db_for_write(model)`` will be evaluated and if it's missing, ``DEFAULT_DB_ALIAS`` constant ("default") is used. """ store_row_values = False """ If True, each row's raw data will be stored in each :class:`~import_export.results.RowResult`. Enabling this parameter will increase the memory usage during import which should be considered when importing large datasets. """ store_instance = False """ If True, the row instance will be stored in each :class:`~import_export.results.RowResult`. Enabling this parameter will increase the memory usage during import which should be considered when importing large datasets. This value will always be set to ``True`` when importing via the Admin UI. This is so that appropriate ``LogEntry`` instances can be created. """ use_natural_foreign_keys = False """ If ``True``, this value will be passed to all foreign key widget fields whose models support natural foreign keys. That is, the model has a natural_key function and the manager has a ``get_by_natural_key()`` function. """ django-import-export-4.0.9/import_export/resources.py000066400000000000000000001436261463433610200231320ustar00rootroot00000000000000import functools import inspect import logging import traceback from collections import OrderedDict from copy import deepcopy from html import escape from warnings import warn import tablib from diff_match_patch import diff_match_patch from django.conf import settings from django.core.exceptions import ImproperlyConfigured, ValidationError from django.core.management.color import no_style from django.core.paginator import Paginator from django.db import connections, router from django.db.models import fields from django.db.models.fields.related import ForeignKey from django.db.models.query import QuerySet from django.db.transaction import TransactionManagementError, set_rollback from django.utils.encoding import force_str from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from . import exceptions, widgets from .declarative import DeclarativeMetaclass, ModelDeclarativeMetaclass from .fields import Field from .results import Error, Result, RowResult from .utils import atomic_if_using_transaction, get_related_model logger = logging.getLogger(__name__) # Set default logging handler to avoid "No handler found" warnings. logger.addHandler(logging.NullHandler()) def has_natural_foreign_key(model): """ Determine if a model has natural foreign key functions """ return hasattr(model, "natural_key") and hasattr( model.objects, "get_by_natural_key" ) class Diff: def __init__(self, resource, instance, new): self.left = Diff._read_field_values(resource, instance) self.right = [] self.new = new def compare_with(self, resource, instance): self.right = Diff._read_field_values(resource, instance) def as_html(self): data = [] dmp = diff_match_patch() for v1, v2 in zip(self.left, self.right): if v1 != v2 and self.new: v1 = "" diff = dmp.diff_main(force_str(v1), force_str(v2)) dmp.diff_cleanupSemantic(diff) html = dmp.diff_prettyHtml(diff) html = mark_safe(html) data.append(html) return data @classmethod def _read_field_values(cls, resource, instance): return [f.export(instance) for f in resource.get_import_fields()] class Resource(metaclass=DeclarativeMetaclass): """ Resource defines how objects are mapped to their import and export representations and handle importing and exporting data. """ def __init__(self, **kwargs): """ kwargs: An optional dict of kwargs. Subclasses can use kwargs to pass dynamic values to enhance import / exports. """ # The fields class attribute is the *class-wide* definition of # fields. Because a particular *instance* of the class might want to # alter self.fields, we create self.fields here by copying cls.fields. # Instances should always modify self.fields; they should not modify # cls.fields. self.fields = deepcopy(self.fields) # lists to hold model instances in memory when bulk operations are enabled self.create_instances = list() self.update_instances = list() self.delete_instances = list() @classmethod def get_result_class(self): """ Returns the class used to store the result of an import. """ return Result @classmethod def get_row_result_class(self): """ Returns the class used to store the result of a row import. """ return RowResult @classmethod def get_error_result_class(self): """ Returns the class used to store an error resulting from an import. """ return Error @classmethod def get_diff_class(self): """ Returns the class used to display the diff for an imported instance. """ return Diff @classmethod def get_db_connection_name(self): if self._meta.using_db is None: return router.db_for_write(self._meta.model) else: return self._meta.using_db def get_use_transactions(self): if self._meta.use_transactions is None: return getattr(settings, "IMPORT_EXPORT_USE_TRANSACTIONS", True) else: return self._meta.use_transactions def get_chunk_size(self): if self._meta.chunk_size is None: return getattr(settings, "IMPORT_EXPORT_CHUNK_SIZE", 100) else: return self._meta.chunk_size def get_fields(self, **kwargs): """ Returns list of fields (unordered). """ return list(self.fields.values()) def get_field_name(self, field): """ Returns the field name for a given field. """ for field_name, f in self.fields.items(): if f == field: return field_name raise AttributeError( "Field %s does not exists in %s resource" % (field, self.__class__) ) def init_instance(self, row=None): """ Initializes an object. Implemented in :meth:`import_export.resources.ModelResource.init_instance`. """ raise NotImplementedError() def get_instance(self, instance_loader, row): """ Calls the :doc:`InstanceLoader `. """ import_id_fields = [self.fields[f] for f in self.get_import_id_fields()] for field in import_id_fields: if field.column_name not in row: # if there is an 'import id field' which is not defined in the # row, then it is not possible to return an existing instance, # so no need to proceed any further return return instance_loader.get_instance(row) def get_or_init_instance(self, instance_loader, row): """ Either fetches an already existing instance or initializes a new one. """ if not self._meta.force_init_instance: instance = self.get_instance(instance_loader, row) if instance: return instance, False return self.init_instance(row), True def get_import_id_fields(self): """ """ return self._meta.import_id_fields def get_bulk_update_fields(self): """ Returns the fields to be included in calls to bulk_update(). ``import_id_fields`` are removed because `id` fields cannot be supplied to bulk_update(). """ return [f for f in self.fields if f not in self._meta.import_id_fields] def bulk_create( self, using_transactions, dry_run, raise_errors, batch_size=None, result=None ): """ Creates objects by calling ``bulk_create``. """ try: if len(self.create_instances) > 0: if not using_transactions and dry_run: pass else: self._meta.model.objects.bulk_create( self.create_instances, batch_size=batch_size ) except Exception as e: self.handle_import_error(result, e, raise_errors) finally: self.create_instances.clear() def bulk_update( self, using_transactions, dry_run, raise_errors, batch_size=None, result=None ): """ Updates objects by calling ``bulk_update``. """ try: if len(self.update_instances) > 0: if not using_transactions and dry_run: pass else: self._meta.model.objects.bulk_update( self.update_instances, self.get_bulk_update_fields(), batch_size=batch_size, ) except Exception as e: self.handle_import_error(result, e, raise_errors) finally: self.update_instances.clear() def bulk_delete(self, using_transactions, dry_run, raise_errors, result=None): """ Deletes objects by filtering on a list of instances to be deleted, then calling ``delete()`` on the entire queryset. """ try: if len(self.delete_instances) > 0: if not using_transactions and dry_run: pass else: delete_ids = [o.pk for o in self.delete_instances] self._meta.model.objects.filter(pk__in=delete_ids).delete() except Exception as e: self.handle_import_error(result, e, raise_errors) finally: self.delete_instances.clear() def validate_instance( self, instance, import_validation_errors=None, validate_unique=True ): """ Takes any validation errors that were raised by :meth:`~import_export.resources.Resource.import_instance`, and combines them with validation errors raised by the instance's ``full_clean()`` method. The combined errors are then re-raised as single, multi-field ValidationError. If the ``clean_model_instances`` option is False, the instances's ``full_clean()`` method is not called, and only the errors raised by ``import_instance()`` are re-raised. """ if import_validation_errors is None: errors = {} else: errors = import_validation_errors.copy() if self._meta.clean_model_instances: try: instance.full_clean( exclude=errors.keys(), validate_unique=validate_unique, ) except ValidationError as e: errors = e.update_error_dict(errors) if errors: raise ValidationError(errors) def save_instance(self, instance, is_create, row, **kwargs): r""" Takes care of saving the object to the database. Objects can be created in bulk if ``use_bulk`` is enabled. :param instance: The instance of the object to be persisted. :param is_create: A boolean flag to indicate whether this is a new object to be created, or an existing object to be updated. :param row: A dict representing the import row. :param \**kwargs: See :meth:`import_row """ self.before_save_instance(instance, row, **kwargs) if self._meta.use_bulk: if is_create: self.create_instances.append(instance) else: self.update_instances.append(instance) else: if not self._is_using_transactions(kwargs) and self._is_dry_run(kwargs): # we don't have transactions and we want to do a dry_run pass else: self.do_instance_save(instance, is_create) self.after_save_instance(instance, row, **kwargs) def do_instance_save(self, instance, is_create): """ A method specifically to provide a single overridable hook for the instance save operation. For example, this can be overridden to implement update_or_create(). :param instance: The model instance to be saved. :param is_create: A boolean flag to indicate whether this is a new object to be created, or an existing object to be updated. """ instance.save() def before_save_instance(self, instance, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def after_save_instance(self, instance, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def delete_instance(self, instance, row, **kwargs): r""" Calls :meth:`instance.delete` as long as ``dry_run`` is not set. If ``use_bulk`` then instances are appended to a list for bulk import. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ self.before_delete_instance(instance, row, **kwargs) if self._meta.use_bulk: self.delete_instances.append(instance) else: if not self._is_using_transactions(kwargs) and self._is_dry_run(kwargs): # we don't have transactions and we want to do a dry_run pass else: instance.delete() self.after_delete_instance(instance, row, **kwargs) def before_delete_instance(self, instance, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def after_delete_instance(self, instance, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def import_field(self, field, instance, row, is_m2m=False, **kwargs): r""" Handles persistence of the field data. :param field: A :class:`import_export.fields.Field` instance. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param is_m2m: A boolean value indicating whether or not this is a many-to-many field. :param \**kwargs: See :meth:`import_row` """ if not field.attribute: logger.debug(f"skipping field '{field}' - field attribute is not defined") return if field.column_name not in row: logger.debug( f"skipping field '{field}' " f"- column name '{field.column_name}' is not present in row" ) return field.save(instance, row, is_m2m, **kwargs) def get_import_fields(self): import_fields = [] for field_name in self.get_import_order(): if field_name in self.fields: import_fields.append(self.fields[field_name]) continue # issue 1815 # allow for fields to be referenced by column_name in `fields` list for field in self.fields.values(): if field.column_name == field_name: import_fields.append(field) continue return import_fields def import_obj(self, obj, data, dry_run, **kwargs): warn( "The 'import_obj' method is deprecated and will be replaced " "with 'import_instance(self, instance, row, **kwargs)' " "in a future release. Refer to Release Notes for details.", DeprecationWarning, stacklevel=2, ) if dry_run is True: kwargs.update({"dry_run": dry_run}) self.import_instance(obj, data, **kwargs) def import_instance(self, instance, row, **kwargs): r""" Traverses every field in this Resource and calls :meth:`~import_export.resources.Resource.import_field`. If ``import_field()`` results in a ``ValueError`` being raised for one of more fields, those errors are captured and reraised as a single, multi-field ValidationError. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ errors = {} for field in self.get_import_fields(): if isinstance(field.widget, widgets.ManyToManyWidget): continue try: self.import_field(field, instance, row, **kwargs) except ValueError as e: errors[field.attribute] = ValidationError(force_str(e), code="invalid") if errors: raise ValidationError(errors) def save_m2m(self, instance, row, **kwargs): r""" Saves m2m fields. Model instance need to have a primary key value before a many-to-many relationship can be used. :param instance: A new or existing model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ using_transactions = self._is_using_transactions(kwargs) dry_run = self._is_dry_run(kwargs) if (not using_transactions and dry_run) or self._meta.use_bulk: # we don't have transactions and we want to do a dry_run # OR use_bulk is enabled (m2m operations are not supported # for bulk operations) pass else: for field in self.get_import_fields(): if not isinstance(field.widget, widgets.ManyToManyWidget): continue self.import_field(field, instance, row, True) def for_delete(self, row, instance): """ Returns ``True`` if ``row`` importing should delete instance. Default implementation returns ``False``. Override this method to handle deletion. :param row: A ``dict`` containing key / value data for the row to be imported. :param instance: A new or existing model instance. """ return False def skip_row(self, instance, original, row, import_validation_errors=None): """ Returns ``True`` if ``row`` importing should be skipped. Default implementation returns ``False`` unless skip_unchanged == True and skip_diff == False. If skip_diff is True, then no comparisons can be made because ``original`` will be None. When left unspecified, skip_diff and skip_unchanged both default to ``False``, and rows are never skipped. By default, rows are not skipped if validation errors have been detected during import. You can change this behavior and choose to ignore validation errors by overriding this method. Override this method to handle skipping rows meeting certain conditions. Use ``super`` if you want to preserve default handling while overriding :: class YourResource(ModelResource): def skip_row(self, instance, original, row, import_validation_errors=None): # Add code here return super().skip_row(instance, original, row, import_validation_errors=import_validation_errors) :param instance: A new or updated model instance. :param original: The original persisted model instance. :param row: A ``dict`` containing key / value data for the row to be imported. :param import_validation_errors: A ``dict`` containing key / value data for any identified validation errors. """ if ( not self._meta.skip_unchanged or self._meta.skip_diff or import_validation_errors ): return False for field in self.get_import_fields(): # For fields that are models.fields.related.ManyRelatedManager # we need to compare the results if isinstance(field.widget, widgets.ManyToManyWidget): # #1437 - handle m2m field not present in import file if field.column_name not in row.keys(): continue # m2m instance values are taken from the 'row' because they # have not been written to the 'instance' at this point instance_values = list(field.clean(row)) original_values = ( list() if original.pk is None else list(field.get_value(original).all()) ) if len(instance_values) != len(original_values): return False if sorted(v.pk for v in instance_values) != sorted( v.pk for v in original_values ): return False else: if field.get_value(instance) != field.get_value(original): return False return True def get_diff_headers(self): """ Diff representation headers. """ return [force_str(field.column_name) for field in self.get_import_fields()] def before_import(self, dataset, **kwargs): r""" Override to add additional logic. Does nothing by default. :param dataset: A ``tablib.Dataset``. :param \**kwargs: See :meth:`import_row` """ pass def after_import(self, dataset, result, **kwargs): r""" Override to add additional logic. Does nothing by default. :param dataset: A ``tablib.Dataset``. :param result: A :class:`import_export.results.Result` implementation containing a summary of the import. :param \**kwargs: See :meth:`import_row` """ pass def before_import_row(self, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def after_import_row(self, row, row_result, **kwargs): r""" Override to add additional logic. Does nothing by default. :param row: A ``dict`` containing key / value data for the row to be imported. :param row_result: A ``RowResult`` instance. References the persisted ``instance`` as an attribute. :param \**kwargs: See :meth:`import_row` """ pass def after_import_instance(self, instance, new, row_number=None, **kwargs): warn( "The 'after_import_instance' method is deprecated and will be replaced " "with 'after_init_instance(self, instance, new, row, **kwargs)' " "in a future release. Refer to Release Notes for details.", DeprecationWarning, stacklevel=2, ) if row_number is not None: kwargs.update({"row_number": row_number}) self.after_init_instance(instance, new, None, **kwargs) def after_init_instance(self, instance, new, row, **kwargs): r""" Override to add additional logic. Does nothing by default. :param instance: A new or existing model instance. :param new: a boolean flag indicating whether instance is new or existing. :param row: A ``dict`` containing key / value data for the row to be imported. :param \**kwargs: See :meth:`import_row` """ pass def handle_import_error(self, result, error, raise_errors=False): logger.debug(error, exc_info=error) if result: tb_info = traceback.format_exc() result.append_base_error( self.get_error_result_class()(error, traceback=tb_info) ) if raise_errors: raise exceptions.ImportError(error) def import_row(self, row, instance_loader, **kwargs): r""" Imports data from ``tablib.Dataset``. Refer to :doc:`import_workflow` for a more complete description of the whole import process. :param row: A ``dict`` of the 'row' to import. A row is a dict of data fields so can be a csv line, a JSON object, a YAML object etc. :param instance_loader: The instance loader to be used to load the model instance associated with the row (if there is one). :param \**kwargs: See below. :Keyword Arguments: * dry_run (``boolean``) -- A True value means that no data should be persisted. * use_transactions (``boolean``) -- A True value means that transactions will be rolled back. * row_number (``int``) -- The index of the row being imported. """ skip_diff = self._meta.skip_diff if not self._meta.store_instance: self._meta.store_instance = kwargs.get( "retain_instance_in_row_result", False ) row_result = self.get_row_result_class()() if self._meta.store_row_values: row_result.row_values = row original = None try: self.before_import_row(row, **kwargs) instance, new = self.get_or_init_instance(instance_loader, row) self.after_init_instance(instance, new, row, **kwargs) if new: row_result.import_type = RowResult.IMPORT_TYPE_NEW else: row_result.import_type = RowResult.IMPORT_TYPE_UPDATE if not skip_diff: original = deepcopy(instance) diff = self.get_diff_class()(self, original, new) if self.for_delete(row, instance): if new: row_result.import_type = RowResult.IMPORT_TYPE_SKIP if not skip_diff: diff.compare_with(self, None) else: row_result.import_type = RowResult.IMPORT_TYPE_DELETE row_result.add_instance_info(instance) if self._meta.store_instance: # create a copy before deletion so id fields are retained row_result.instance = deepcopy(instance) self.delete_instance(instance, row, **kwargs) if not skip_diff: diff.compare_with(self, None) else: import_validation_errors = {} try: self.import_instance(instance, row, **kwargs) except ValidationError as e: # Validation errors are passed on to validate_instance(), # where they can be combined with model instance validation # errors if necessary import_validation_errors = e.update_error_dict( import_validation_errors ) if self.skip_row(instance, original, row, import_validation_errors): row_result.import_type = RowResult.IMPORT_TYPE_SKIP else: self.validate_instance(instance, import_validation_errors) self.save_instance(instance, new, row, **kwargs) self.save_m2m(instance, row, **kwargs) row_result.add_instance_info(instance) if self._meta.store_instance: row_result.instance = instance if not skip_diff: diff.compare_with(self, instance) if not new: row_result.original = original if not skip_diff and not self._meta.skip_html_diff: row_result.diff = diff.as_html() self.after_import_row(row, row_result, **kwargs) except ValidationError as e: row_result.import_type = RowResult.IMPORT_TYPE_INVALID row_result.validation_error = e except Exception as e: row_result.import_type = RowResult.IMPORT_TYPE_ERROR # There is no point logging a transaction error for each row # when only the original error is likely to be relevant if not isinstance(e, TransactionManagementError): logger.debug(e, exc_info=e) tb_info = traceback.format_exc() row_result.errors.append( self.get_error_result_class()( e, traceback=tb_info, row=row, number=kwargs["row_number"] ) ) return row_result def import_data( self, dataset, dry_run=False, raise_errors=False, use_transactions=None, collect_failed_rows=False, rollback_on_validation_errors=False, **kwargs, ): r""" Imports data from ``tablib.Dataset``. Refer to :doc:`import_workflow` for a more complete description of the whole import process. :param dataset: A ``tablib.Dataset``. :param raise_errors: Whether errors should be printed to the end user or raised regularly. :param use_transactions: If ``True`` the import process will be processed inside a transaction. :param collect_failed_rows: If ``True`` the import process will create a new dataset object comprising failed rows and errors. This can be useful for debugging purposes but will cause higher memory usage for larger datasets. See :attr:`~import_export.results.Result.failed_dataset`. :param rollback_on_validation_errors: If both ``use_transactions`` and ``rollback_on_validation_errors`` are set to ``True``, the import process will be rolled back in case of ValidationError. :param dry_run: If ``dry_run`` is set, or an error occurs, if a transaction is being used, it will be rolled back. :param \**kwargs: Metadata which may be associated with the import. """ if use_transactions is None: use_transactions = self.get_use_transactions() db_connection = self.get_db_connection_name() connection = connections[db_connection] supports_transactions = getattr( connection.features, "supports_transactions", False ) if use_transactions and not supports_transactions: raise ImproperlyConfigured using_transactions = (use_transactions or dry_run) and supports_transactions if self._meta.batch_size is not None and ( not isinstance(self._meta.batch_size, int) or self._meta.batch_size < 0 ): raise ValueError("Batch size must be a positive integer") with atomic_if_using_transaction(using_transactions, using=db_connection): result = self.import_data_inner( dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs, ) if using_transactions and ( dry_run or result.has_errors() or (rollback_on_validation_errors and result.has_validation_errors()) ): set_rollback(True, using=db_connection) return result def import_data_inner( self, dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs, ): result = self.get_result_class()() result.diff_headers = self.get_diff_headers() result.total_rows = len(dataset) db_connection = self.get_db_connection_name() try: with atomic_if_using_transaction(using_transactions, using=db_connection): self.before_import(dataset, **kwargs) self._check_import_id_fields(dataset.headers) except Exception as e: self.handle_import_error(result, e, raise_errors) instance_loader = self._meta.instance_loader_class(self, dataset) # Update the total in case the dataset was altered by before_import() result.total_rows = len(dataset) if collect_failed_rows: result.add_dataset_headers(dataset.headers) for i, data_row in enumerate(dataset, 1): row = OrderedDict(zip(dataset.headers, data_row)) with atomic_if_using_transaction( using_transactions and not self._meta.use_bulk, using=db_connection ): kwargs.update( { "dry_run": dry_run, "using_transactions": using_transactions, "row_number": i, } ) row_result = self.import_row( row, instance_loader, **kwargs, ) if self._meta.use_bulk: # persist a batch of rows # because this is a batch, any exceptions are logged and not associated # with a specific row if len(self.create_instances) == self._meta.batch_size: with atomic_if_using_transaction( using_transactions, using=db_connection ): self.bulk_create( using_transactions, dry_run, raise_errors, batch_size=self._meta.batch_size, result=result, ) if len(self.update_instances) == self._meta.batch_size: with atomic_if_using_transaction( using_transactions, using=db_connection ): self.bulk_update( using_transactions, dry_run, raise_errors, batch_size=self._meta.batch_size, result=result, ) if len(self.delete_instances) == self._meta.batch_size: with atomic_if_using_transaction( using_transactions, using=db_connection ): self.bulk_delete( using_transactions, dry_run, raise_errors, result=result ) result.increment_row_result_total(row_result) if row_result.errors: result.append_error_row(i, row, row_result.errors) if collect_failed_rows: result.append_failed_row(row, row_result.errors[0]) if raise_errors: raise exceptions.ImportError( row_result.errors[-1].error, number=i, row=row ) elif row_result.validation_error: result.append_invalid_row(i, row, row_result.validation_error) if collect_failed_rows: result.append_failed_row(row, row_result.validation_error) if raise_errors: raise exceptions.ImportError( row_result.validation_error, number=i, row=row ) if ( row_result.import_type != RowResult.IMPORT_TYPE_SKIP or self._meta.report_skipped ): result.append_row_result(row_result) if self._meta.use_bulk: # bulk persist any instances which are still pending with atomic_if_using_transaction(using_transactions, using=db_connection): self.bulk_create( using_transactions, dry_run, raise_errors, result=result ) self.bulk_update( using_transactions, dry_run, raise_errors, result=result ) self.bulk_delete( using_transactions, dry_run, raise_errors, result=result ) try: with atomic_if_using_transaction(using_transactions, using=db_connection): self.after_import(dataset, result, **kwargs) except Exception as e: self.handle_import_error(result, e, raise_errors) return result def get_import_order(self): return self._get_ordered_field_names("import_order") def get_export_order(self): return self._get_ordered_field_names("export_order") def before_export(self, queryset, **kwargs): r""" Override to add additional logic. Does nothing by default. :param queryset: The queryset for export. :param \**kwargs: Metadata which may be associated with the export. """ pass def after_export(self, queryset, dataset, **kwargs): r""" Override to add additional logic. Does nothing by default. :param queryset: The queryset for export. :param dataset: A ``tablib.Dataset``. :param \**kwargs: Metadata which may be associated with the export. """ pass def filter_export(self, queryset, **kwargs): r""" Override to filter an export queryset. :param queryset: The queryset for export (optional). :param \**kwargs: Metadata which may be associated with the export. :returns: The filtered queryset. """ return queryset def export_field(self, field, instance): field_name = self.get_field_name(field) dehydrate_method = field.get_dehydrate_method(field_name) method = getattr(self, dehydrate_method, None) if method is not None: return method(instance) return field.export(instance) def get_export_fields(self): export_fields = [] for field_name in self.get_export_order(): if field_name in self.fields: export_fields.append(self.fields[field_name]) continue # issue 1828 # allow for fields to be referenced by column_name in `fields` list for field in self.fields.values(): if field.column_name == field_name: export_fields.append(field) continue return export_fields def export_resource(self, instance, fields=None): export_fields = self._get_enabled_export_fields(fields) return [self.export_field(field, instance) for field in export_fields] def get_export_headers(self, fields=None): export_fields = self._get_enabled_export_fields(fields) return [force_str(field.column_name) for field in export_fields] def get_user_visible_fields(self): return self.get_import_fields() def iter_queryset(self, queryset): if not isinstance(queryset, QuerySet): yield from queryset elif queryset._prefetch_related_lookups: # Django's queryset.iterator ignores prefetch_related which might result # in an excessive amount of db calls. Therefore we use pagination # as a work-around if not queryset.query.order_by: # Paginator() throws a warning if there is no sorting # attached to the queryset queryset = queryset.order_by("pk") paginator = Paginator(queryset, self.get_chunk_size()) for index in range(paginator.num_pages): yield from paginator.get_page(index + 1) else: yield from queryset.iterator(chunk_size=self.get_chunk_size()) def export(self, queryset=None, **kwargs): """ Exports a resource. :param queryset: The queryset for export (optional). :returns: A ``tablib.Dataset``. """ self.before_export(queryset, **kwargs) if queryset is None: queryset = self.get_queryset() queryset = self.filter_export(queryset, **kwargs) export_fields = kwargs.get("export_fields", None) headers = self.get_export_headers(fields=export_fields) dataset = tablib.Dataset(headers=headers) for obj in self.iter_queryset(queryset): r = self.export_resource(obj, fields=export_fields) dataset.append(r) self.after_export(queryset, dataset, **kwargs) return dataset def _get_ordered_field_names(self, order_field): """ Return a list of field names, respecting any defined ordering. """ # get any declared 'order' fields order_fields = getattr(self._meta, order_field) or () # get any defined fields defined_fields = order_fields + tuple(getattr(self._meta, "fields") or ()) order = list() [order.append(f) for f in defined_fields if f not in order] declared_fields = [] for field_name, field in self.fields.items(): if field_name not in order and field.column_name not in order: declared_fields.append(field_name) return tuple(order) + tuple(declared_fields) def _is_using_transactions(self, kwargs): return kwargs.get("using_transactions", False) def _is_dry_run(self, kwargs): return kwargs.get("dry_run", False) def _check_import_id_fields(self, headers): """ Provides a safety check with a meaningful error message for cases where the ``import_id_fields`` declaration contains a field which is not in the dataset. For most use-cases this is an error, so we detect and raise. There are conditions, such as 'dynamic fields' where this does not apply. See issue 1834 for more information. """ import_id_fields = list() missing_fields = list() missing_headers = list() if self.get_import_id_fields() == ["id"]: # this is the default case, so ok if not present return for field_name in self.get_import_id_fields(): if field_name not in self.fields: missing_fields.append(field_name) else: import_id_fields.append(self.fields[field_name]) if missing_fields: raise exceptions.FieldError( _( "The following fields are declared in 'import_id_fields' but " "are not present in the resource fields: %s" % ", ".join(missing_fields) ) ) for field in import_id_fields: if not headers or field.column_name not in headers: # escape to be safe (exception could end up in logs) col = escape(field.column_name) missing_headers.append(col) if missing_headers: raise exceptions.FieldError( _( "The following fields are declared in 'import_id_fields' but " "are not present in the file headers: %s" % ", ".join(missing_headers) ) ) def _get_enabled_export_fields(self, fields_): export_fields = self.get_export_fields() if isinstance(fields_, list) and fields_: return [ field for field in export_fields if field.attribute in fields_ or field.column_name in fields_ ] return export_fields class ModelResource(Resource, metaclass=ModelDeclarativeMetaclass): """ ModelResource is Resource subclass for handling Django models. """ DEFAULT_RESOURCE_FIELD = Field WIDGETS_MAP = { "ManyToManyField": "get_m2m_widget", "OneToOneField": "get_fk_widget", "ForeignKey": "get_fk_widget", "CharField": widgets.CharWidget, "DecimalField": widgets.DecimalWidget, "DateTimeField": widgets.DateTimeWidget, "DateField": widgets.DateWidget, "TimeField": widgets.TimeWidget, "DurationField": widgets.DurationWidget, "FloatField": widgets.FloatWidget, "IntegerField": widgets.IntegerWidget, "PositiveIntegerField": widgets.IntegerWidget, "BigIntegerField": widgets.IntegerWidget, "PositiveBigIntegerField": widgets.IntegerWidget, "PositiveSmallIntegerField": widgets.IntegerWidget, "SmallIntegerField": widgets.IntegerWidget, "SmallAutoField": widgets.IntegerWidget, "AutoField": widgets.IntegerWidget, "BigAutoField": widgets.IntegerWidget, "NullBooleanField": widgets.BooleanWidget, "BooleanField": widgets.BooleanWidget, "JSONField": widgets.JSONWidget, } @classmethod def get_m2m_widget(cls, field): """ Prepare widget for m2m field """ return functools.partial( widgets.ManyToManyWidget, model=get_related_model(field) ) @classmethod def get_fk_widget(cls, field): """ Prepare widget for fk and o2o fields """ model = get_related_model(field) use_natural_foreign_keys = ( has_natural_foreign_key(model) and cls._meta.use_natural_foreign_keys ) return functools.partial( widgets.ForeignKeyWidget, model=model, use_natural_foreign_keys=use_natural_foreign_keys, ) @classmethod def widget_from_django_field(cls, f, default=widgets.Widget): """ Returns the widget that would likely be associated with each Django type. Includes mapping of Postgres Array field. In the case that psycopg2 is not installed, we consume the error and process the field regardless. """ result = default internal_type = "" if callable(getattr(f, "get_internal_type", None)): internal_type = f.get_internal_type() if internal_type in cls.WIDGETS_MAP: result = cls.WIDGETS_MAP[internal_type] if isinstance(result, str): result = getattr(cls, result)(f) else: # issue 1804 # The field class may be in a third party library as a subclass # of a standard field class. # iterate base classes to determine the correct widget class to use. for base_class in inspect.getmro(f.__class__): if base_class.__name__ in cls.WIDGETS_MAP: result = cls.WIDGETS_MAP[base_class.__name__] if isinstance(result, str): result = getattr(cls, result)(f) break try: from django.contrib.postgres.fields import ArrayField except ImportError: # ImportError: No module named psycopg2.extras class ArrayField: pass if isinstance(f, ArrayField): return widgets.SimpleArrayWidget return result @classmethod def widget_kwargs_for_field(cls, field_name, django_field): """ Returns widget kwargs for given field_name. """ widget_kwargs = {} if cls._meta.widgets: cls_kwargs = cls._meta.widgets.get(field_name, {}) widget_kwargs.update(cls_kwargs) if ( issubclass(django_field.__class__, fields.CharField) and django_field.blank is True ): widget_kwargs.update({"coerce_to_string": True, "allow_blank": True}) return widget_kwargs @classmethod def field_from_django_field(cls, field_name, django_field, readonly): """ Returns a Resource Field instance for the given Django model field. """ FieldWidget = cls.widget_from_django_field(django_field) widget_kwargs = cls.widget_kwargs_for_field(field_name, django_field) attribute = field_name column_name = field_name # To solve #974 if ( isinstance(django_field, ForeignKey) and "__" not in column_name and not cls._meta.use_natural_foreign_keys ): attribute += "_id" widget_kwargs["key_is_id"] = True field = cls.DEFAULT_RESOURCE_FIELD( attribute=attribute, column_name=column_name, widget=FieldWidget(**widget_kwargs), readonly=readonly, default=django_field.default, ) return field def get_queryset(self): """ Returns a queryset of all objects for this model. Override this if you want to limit the returned queryset. """ return self._meta.model.objects.all() def init_instance(self, row=None): """ Initializes a new Django model. """ return self._meta.model() def after_import(self, dataset, result, **kwargs): """ Reset the SQL sequences after new objects are imported """ # Adapted from django's loaddata dry_run = self._is_dry_run(kwargs) if not dry_run and any( r.import_type == RowResult.IMPORT_TYPE_NEW for r in result.rows ): db_connection = self.get_db_connection_name() connection = connections[db_connection] sequence_sql = connection.ops.sequence_reset_sql( no_style(), [self._meta.model] ) if sequence_sql: cursor = connection.cursor() try: for line in sequence_sql: cursor.execute(line) finally: cursor.close() @classmethod def get_display_name(cls): if hasattr(cls._meta, "name"): return cls._meta.name return cls.__name__ def modelresource_factory(model, resource_class=ModelResource): """ Factory for creating ``ModelResource`` class for given Django model. """ attrs = {"model": model} Meta = type(str("Meta"), (object,), attrs) class_name = model.__name__ + str("Resource") class_attrs = { "Meta": Meta, } metaclass = ModelDeclarativeMetaclass return metaclass(class_name, (resource_class,), class_attrs) django-import-export-4.0.9/import_export/results.py000066400000000000000000000176171463433610200226210ustar00rootroot00000000000000import logging from collections import OrderedDict from django.core.exceptions import NON_FIELD_ERRORS from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ from tablib import Dataset logger = logging.getLogger(__name__) class Error: def __init__(self, error, traceback=None, row=None, number=None): self.error = error self.traceback = traceback self.row = row self.number = number class RowResult: """Container for values relating to a row import.""" IMPORT_TYPE_UPDATE = "update" IMPORT_TYPE_NEW = "new" IMPORT_TYPE_DELETE = "delete" IMPORT_TYPE_SKIP = "skip" IMPORT_TYPE_ERROR = "error" IMPORT_TYPE_INVALID = "invalid" valid_import_types = frozenset( [ IMPORT_TYPE_NEW, IMPORT_TYPE_UPDATE, IMPORT_TYPE_DELETE, IMPORT_TYPE_SKIP, ] ) def __init__(self): #: An instance of :class:`~import_export.results.Error` which may have been #: raised during import. self.errors = [] #: Contains any ValidationErrors which may have been raised during import. self.validation_error = None #: A HTML representation of the difference between the 'original' and #: 'updated' model instance. self.diff = None #: A string identifier which identifies what type of import was performed. self.import_type = None #: Retain the raw values associated with each imported row. self.row_values = {} #: The instance id (used in Admin UI) self.object_id = None #: The object representation (used in Admin UI) self.object_repr = None #: A reference to the model instance which was created, updated or deleted. self.instance = None #: A reference to the model instance before updates were applied. #: This value is only set for updates. self.original = None def is_update(self): """ :return: ``True`` if import type is 'update', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_UPDATE def is_new(self): """ :return: ``True`` if import type is 'new', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_NEW def is_delete(self): """ :return: ``True`` if import type is 'delete', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_DELETE def is_skip(self): """ :return: ``True`` if import type is 'skip', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_SKIP def is_error(self): """ :return: ``True`` if import type is 'error', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_ERROR def is_invalid(self): """ :return: ``True`` if import type is 'invalid', otherwise ``False``. """ return self.import_type == RowResult.IMPORT_TYPE_INVALID def is_valid(self): """ :return: ``True`` if import type is not 'error' or 'invalid', otherwise ``False``. """ return self.import_type in self.valid_import_types def add_instance_info(self, instance): if instance is not None: # Add object info to RowResult (e.g. for LogEntry) self.object_id = getattr(instance, "pk", None) try: self.object_repr = force_str(instance) except Exception as e: logger.debug(_("call to force_str() on instance failed: %s" % str(e))) class InvalidRow: """A row that resulted in one or more ``ValidationError`` being raised during import.""" def __init__(self, number, validation_error, values): self.number = number self.error = validation_error self.values = values try: self.error_dict = validation_error.message_dict except AttributeError: self.error_dict = {NON_FIELD_ERRORS: validation_error.messages} @property def field_specific_errors(self): """Returns a dictionary of field-specific validation errors for this row.""" return { key: value for key, value in self.error_dict.items() if key != NON_FIELD_ERRORS } @property def non_field_specific_errors(self): """Returns a list of non field-specific validation errors for this row.""" return self.error_dict.get(NON_FIELD_ERRORS, []) @property def error_count(self): """Returns the total number of validation errors for this row.""" count = 0 for error_list in self.error_dict.values(): count += len(error_list) return count class ErrorRow: """A row that resulted in one or more errors being raised during import.""" def __init__(self, number, errors): #: The row number self.number = number #: A list of errors associated with the row self.errors = errors class Result: def __init__(self, *args, **kwargs): super().__init__() self.base_errors = [] self.diff_headers = [] #: The rows associated with the result. self.rows = [] #: The collection of rows which had validation errors. self.invalid_rows = [] #: The collection of rows which had generic errors. self.error_rows = [] #: A custom Dataset containing only failed rows and associated errors. self.failed_dataset = Dataset() self.totals = OrderedDict( [ (RowResult.IMPORT_TYPE_NEW, 0), (RowResult.IMPORT_TYPE_UPDATE, 0), (RowResult.IMPORT_TYPE_DELETE, 0), (RowResult.IMPORT_TYPE_SKIP, 0), (RowResult.IMPORT_TYPE_ERROR, 0), (RowResult.IMPORT_TYPE_INVALID, 0), ] ) self.total_rows = 0 def valid_rows(self): return [r for r in self.rows if r.import_type in RowResult.valid_import_types] def append_row_result(self, row_result): self.rows.append(row_result) def append_base_error(self, error): self.base_errors.append(error) def add_dataset_headers(self, headers): headers = list() if not headers else headers self.failed_dataset.headers = headers + ["Error"] def append_failed_row(self, row, error): row_values = [v for (k, v) in row.items()] try: row_values.append(str(error.error)) except AttributeError: row_values.append(str(error)) self.failed_dataset.append(row_values) def append_invalid_row(self, number, row, validation_error): # NOTE: value order must match diff_headers order, so that row # values and column headers match in the UI when displayed values = tuple(row.get(col, "---") for col in self.diff_headers) self.invalid_rows.append( InvalidRow(number=number, validation_error=validation_error, values=values) ) def append_error_row(self, number, row, errors): self.error_rows.append(ErrorRow(number=number, errors=errors)) def increment_row_result_total(self, row_result): if row_result.import_type: self.totals[row_result.import_type] += 1 def row_errors(self): return [(i + 1, row.errors) for i, row in enumerate(self.rows) if row.errors] def has_errors(self): """Returns a boolean indicating whether the import process resulted in any critical (non-validation) errors for this result.""" return bool(self.base_errors or self.row_errors()) def has_validation_errors(self): """Returns a boolean indicating whether the import process resulted in any validation errors for this result.""" return bool(self.invalid_rows) def __iter__(self): return iter(self.rows) django-import-export-4.0.9/import_export/signals.py000066400000000000000000000001561463433610200225460ustar00rootroot00000000000000from django.dispatch import Signal # Args: model post_export = Signal() # Args: model post_import = Signal() django-import-export-4.0.9/import_export/static/000077500000000000000000000000001463433610200220215ustar00rootroot00000000000000django-import-export-4.0.9/import_export/static/import_export/000077500000000000000000000000001463433610200247345ustar00rootroot00000000000000django-import-export-4.0.9/import_export/static/import_export/export.css000066400000000000000000000000701463433610200267640ustar00rootroot00000000000000.selectable-field-export-row { padding-left: 10px; }django-import-export-4.0.9/import_export/static/import_export/export_selectable_fields.js000066400000000000000000000025641463433610200323330ustar00rootroot00000000000000function hideUnselectedResourceFields(selectedResourceIndex) { const fields = document.querySelectorAll("[resource-index]"); fields.forEach((field) => { if (field.getAttribute("resource-index") !== selectedResourceIndex.toString()) { // field is wrapped by div, change visibility on wrapper field.style.display = "none"; } }); } function showSelectedResourceFields(resourceIndex) { const fields = document.querySelectorAll(`[resource-index="${resourceIndex}"]`); fields.forEach((field) => { // field is wrapped by div, change visibility on wrapper field.style.display = "block"; }); } function onResourceSelected(e) { const resourceIndex = e.target.value; showSelectedResourceFields(resourceIndex); hideUnselectedResourceFields(resourceIndex); } document.addEventListener("DOMContentLoaded", () => { const resourceSelector = document.querySelector("#id_resource"); if (!resourceSelector) { console.error("resource select input not found"); return; } // If selector is actually select input, get selected option. // else selected resource index is 0 const selectedResourceIndex = resourceSelector.tagName === "SELECT" ? resourceSelector.value : 0; resourceSelector.addEventListener("input", onResourceSelected); // initially hide unselected resource fields hideUnselectedResourceFields(selectedResourceIndex); }); django-import-export-4.0.9/import_export/static/import_export/guess_format.js000066400000000000000000000013071463433610200277710ustar00rootroot00000000000000(function($) { $().ready(function () { $('input.guess_format[type="file"]').change(function () { var files = this.files; var dropdowns = $(this.form).find('select.guess_format'); if(files.length > 0) { var extension = files[0].name.split('.').pop().trim().toLowerCase(); for(var i = 0; i < dropdowns.length; i++) { var dropdown = dropdowns[i]; dropdown.selectedIndex = 0; for(var j = 0; j < dropdown.options.length; j++) { if(extension === dropdown.options[j].text.trim().toLowerCase()) { dropdown.selectedIndex = j; break; } } } } }); }); })(django.jQuery); django-import-export-4.0.9/import_export/static/import_export/import.css000066400000000000000000000064161463433610200267670ustar00rootroot00000000000000.import-preview .errors { position: relative; } .validation-error-count { display: inline-block; background-color: #e40000; border-radius: 6px; color: white; font-size: 0.9em; position: relative; font-weight: bold; margin-top: -2px; padding: 0.2em 0.4em; } .validation-error-container { position: absolute; opacity: 0; pointer-events: none; background-color: #ffc1c1; padding: 14px 15px 10px; top: 25px; margin: 0 0 20px 0; width: 200px; z-index: 2; } html[data-theme="light"] .validation-error-container { background-color: #ffc1c1; } table.import-preview tr.skip, html[data-theme="light"] table.import-preview tr.skip { background-color: #d2d2d2; } table.import-preview tr.new, html[data-theme="light"] table.import-preview tr.new { background-color: #bdd8b2; } table.import-preview tr.delete, html[data-theme="light"] table.import-preview tr.delete { background-color: #f9bebf; } table.import-preview tr.update, html[data-theme="light"] table.import-preview tr.update { background-color: #fdfdcf; } table.import-preview td ins, html[data-theme="light"] table.import-preview td ins { background-color: #e6ffe6 !important; } html[data-theme="light"] table.import-preview td del { background-color: #ffe6e6 !important; } .import-preview td:hover .validation-error-count { z-index: 3; } .import-preview td:hover .validation-error-container { opacity: 1; pointer-events: auto; } .validation-error-list { margin: 0; padding: 0; } .validation-error-list li { list-style: none; margin: 0; } .validation-error-list > li > ul { margin: 8px 0; padding: 0; } .validation-error-list > li > ul > li { padding: 0; margin: 0 0 10px; line-height: 1.28em; } .validation-error-field-label { display: block; border-bottom: 1px solid #e40000; color: #e40000; text-transform: uppercase; font-weight: bold; font-size: 0.85em; } @media (prefers-color-scheme: dark) { table.import-preview tr.skip { background-color: #2d2d2d; } table.import-preview tr.new { background-color: #42274d; } table.import-preview tr.delete { background-color: #064140; } table.import-preview tr.update { background-color: #020230; } .validation-error-container { background-color: #003e3e; } /* these declarations are necessary to forcibly override the formatting applied by the diff-match-patch python library */ table.import-preview td ins { background-color: #190019 !important; } table.import-preview td del { background-color: #001919 !important; } } html[data-theme="dark"] table.import-preview tr.skip { background-color: #2d2d2d; } html[data-theme="dark"] table.import-preview tr.new { background-color: #42274d; } html[data-theme="dark"] table.import-preview tr.delete { background-color: #064140; } html[data-theme="dark"] table.import-preview tr.update { background-color: #020230; } html[data-theme="dark"] .validation-error-container { background-color: #003e3e; } /* these declarations are necessary to forcibly override the formatting applied by the diff-match-patch python library */ html[data-theme="dark"] table.import-preview td ins { background-color: #190019 !important; } html[data-theme="dark"] table.import-preview td del { background-color: #001919 !important; } django-import-export-4.0.9/import_export/templates/000077500000000000000000000000001463433610200225305ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templates/admin/000077500000000000000000000000001463433610200236205ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templates/admin/import_export/000077500000000000000000000000001463433610200265335ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templates/admin/import_export/base.html000066400000000000000000000014311463433610200303320ustar00rootroot00000000000000{% extends "admin/base_site.html" %} {% load i18n admin_modify %} {% load admin_urls %} {% load static %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} {% if not is_popup %} {% block breadcrumbs %}

{% endblock %} {% endif %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_form.html000066400000000000000000000004611463433610200316720ustar00rootroot00000000000000{% extends 'admin/change_form.html' %} {% load i18n %} {% block submit_buttons_bottom %} {{ block.super }} {% if show_change_form_export %}
{% endif %} {% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_list.html000066400000000000000000000006541463433610200317060ustar00rootroot00000000000000{% extends ie_base_change_list_template|default:"admin/change_list.html" %} {# Original template renders object-tools only when has_add_permission is True. #} {# This hack allows sub templates to add to object-tools #} {% block object-tools %}
    {% block object-tools-items %} {% if has_add_permission %} {{ block.super }} {% endif %} {% endblock %}
{% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_list_export.html000066400000000000000000000002731463433610200333040ustar00rootroot00000000000000{% extends "admin/import_export/change_list.html" %} {% block object-tools-items %} {% include "admin/import_export/change_list_export_item.html" %} {{ block.super }} {% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_list_export_item.html000066400000000000000000000003231463433610200343160ustar00rootroot00000000000000{% load i18n %} {% load admin_urls %} {% if has_export_permission %}
  • {% translate "Export" %}
  • {% endif %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_list_import.html000066400000000000000000000002731463433610200332750ustar00rootroot00000000000000{% extends "admin/import_export/change_list.html" %} {% block object-tools-items %} {% include "admin/import_export/change_list_import_item.html" %} {{ block.super }} {% endblock %} change_list_import_export.html000066400000000000000000000003761463433610200346230ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templates/admin/import_export{% extends "admin/import_export/change_list.html" %} {% block object-tools-items %} {% include "admin/import_export/change_list_import_item.html" %} {% include "admin/import_export/change_list_export_item.html" %} {{ block.super }} {% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/change_list_import_item.html000066400000000000000000000002741463433610200343140ustar00rootroot00000000000000{% load i18n %} {% load admin_urls %} {% if has_import_permission %}
  • {% translate "Import" %}
  • {% endif %} django-import-export-4.0.9/import_export/templates/admin/import_export/export.html000066400000000000000000000044651463433610200307530ustar00rootroot00000000000000{% extends "admin/import_export/base.html" %} {% load i18n %} {% load admin_urls %} {% load import_export_tags %} {% block extrahead %}{{ block.super }} {{ form.media }} {% endblock %} {% block breadcrumbs_last %} {% translate "Export" %} {% endblock %} {% block content %} {% if form.errors %} {{ form.errors }} {% endif %}
    {% csrf_token %} {# export request has originated from an Admin UI action #} {% if form.initial.export_items %}

    {% blocktranslate count len=form.initial.export_items|length %} Export {{ len }} selected item. {% plural %} Export {{ len }} selected items. {% endblocktranslate %}

    {% endif %} {# fields list is not required with selectable fields form #} {% if not form.is_selectable_fields_form %} {% include "admin/import_export/resource_fields_list.html" with import_or_export="export" %} {% endif %}
    {% for field in form.visible_fields %}
    {% if field.field.initial_field %}

    {% translate "This exporter will export the following fields: " %}

    {% endif %} {{ field.errors }} {{ field.label_tag }} {% if field.field.widget.attrs.readonly %} {{ field.field.value }} {{ field.as_hidden }} {% else %} {{ field }} {% endif %} {% if field.field.help_text %}

    {{ field.field.help_text|safe }}

    {% endif %}
    {% endfor %} {% for field in form.hidden_fields %} {{ field }} {% endfor %}
    {{ form.non_field_errors }}
    {% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/import.html000066400000000000000000000150361463433610200307400ustar00rootroot00000000000000{% extends "admin/import_export/base.html" %} {% load i18n %} {% load admin_urls %} {% load import_export_tags %} {% load static %} {% block extrastyle %}{{ block.super }}{% endblock %} {% block extrahead %}{{ block.super }} {% if confirm_form %} {{ confirm_form.media }} {% else %} {{ form.media }} {% endif %} {% endblock %} {% block breadcrumbs_last %} {% translate "Import" %} {% endblock %} {% block content %} {% if confirm_form %} {% block confirm_import_form %}
    {% csrf_token %} {{ confirm_form.as_p }}

    {% translate "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %}

    {% endblock %} {% else %} {% block import_form %}
    {% csrf_token %} {% include "admin/import_export/resource_fields_list.html" with import_or_export="import" %} {% block import_form_additional_info %}{% endblock %} {% block form_detail %}
    {% for field in form %}
    {{ field.errors }} {{ field.label_tag }} {% if field.field.widget.attrs.readonly %} {{ field.field.value }} {{ field.as_hidden }} {% else %} {{ field }} {% endif %} {% if field.field.help_text %}

    {{ field.field.help_text|safe }}

    {% endif %}
    {% endfor %}
    {% endblock %} {% block form_submit_button %}
    {% endblock %}
    {% endblock %} {% endif %} {% if result %} {% if result.has_errors %} {% block errors %}

    {% translate "Errors" %}

      {% for error in result.base_errors %}
    • {{ error.error }}
      {{ error.traceback|linebreaks }}
    • {% endfor %} {% block import_error_list %} {% for line, errors in result.row_errors %} {% for error in errors %} {% block import_error_list_item %}
    • {% if "message" in import_error_display %}
      {% translate "Line number" %}: {{ line }} - {{ error.error }}
      {% endif %} {% if "row" in import_error_display %}
      {{ error.row.values|join:", " }}
      {% endif %} {% if "traceback" in import_error_display %}
      {{ error.traceback|linebreaks }}
      {% endif %}
    • {% endblock %} {% endfor %} {% endfor %} {% endblock %}
    {% endblock %} {% elif result.has_validation_errors %} {% block validation_errors %}

    {% translate "Some rows failed to validate" %}

    {% translate "Please correct these errors in your data where possible, then reupload it using the form above." %}

    {% for field in result.diff_headers %} {% endfor %} {% for row in result.invalid_rows %} {% for field in row.values %} {% endfor %} {% endfor %}
    {% translate "Row" %} {% translate "Errors" %}{{ field }}
    {{ row.number }} {{ row.error_count }}
      {% for field_name, error_list in row.field_specific_errors.items %}
    • {{ field_name }}
        {% for error in error_list %}
      • {{ error }}
      • {% endfor %}
    • {% endfor %} {% if row.non_field_specific_errors %}
    • {% translate "Non field specific" %}
        {% for error in row.non_field_specific_errors %}
      • {{ error }}
      • {% endfor %}
    • {% endif %}
    {{ field }}
    {% endblock %} {% else %} {% block preview %}

    {% translate "Preview" %}

    {% for field in result.diff_headers %} {% endfor %} {% for row in result.valid_rows %} {% for field in row.diff %} {% endfor %} {% endfor %}
    {{ field }}
    {% if row.import_type == 'new' %} {% translate "New" %} {% elif row.import_type == 'skip' %} {% translate "Skipped" %} {% elif row.import_type == 'delete' %} {% translate "Delete" %} {% elif row.import_type == 'update' %} {% translate "Update" %} {% endif %} {{ field }}
    {% endblock %} {% endif %} {% endif %} {% endblock %} django-import-export-4.0.9/import_export/templates/admin/import_export/resource_fields_list.html000066400000000000000000000011671463433610200336360ustar00rootroot00000000000000{% load i18n %} {% block fields_help %}

    {% if import_or_export == "export" %} {% translate "This exporter will export the following fields: " %} {% elif import_or_export == "import" %} {% translate "This importer will import the following fields: " %} {% endif %} {% if fields_list|length <= 1 %} {{ fields_list.0.1|join:", " }} {% else %}

    {% for resource, fields in fields_list %}
    {{ resource }}
    {{ fields|join:", " }}
    {% endfor %}
    {% endif %}

    {% endblock %} django-import-export-4.0.9/import_export/templatetags/000077500000000000000000000000001463433610200232245ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templatetags/__init__.py000066400000000000000000000000001463433610200253230ustar00rootroot00000000000000django-import-export-4.0.9/import_export/templatetags/import_export_tags.py000066400000000000000000000005021463433610200275240ustar00rootroot00000000000000from diff_match_patch import diff_match_patch from django import template register = template.Library() @register.simple_tag def compare_values(value1, value2): dmp = diff_match_patch() diff = dmp.diff_main(value1, value2) dmp.diff_cleanupSemantic(diff) html = dmp.diff_prettyHtml(diff) return html django-import-export-4.0.9/import_export/tmp_storages.py000066400000000000000000000063311463433610200236160ustar00rootroot00000000000000import os import tempfile from uuid import uuid4 import django from django.conf import settings from django.core.cache import cache from django.core.files.base import ContentFile class BaseStorage: def __init__(self, **kwargs): self.name = kwargs.get("name", None) self.read_mode = kwargs.get("read_mode", "r") self.encoding = kwargs.get("encoding", None) def save(self, data): raise NotImplementedError def read(self): raise NotImplementedError def remove(self): raise NotImplementedError class TempFolderStorage(BaseStorage): def save(self, data): with self._open(mode="w") as file: file.write(data) def read(self): with self._open(mode=self.read_mode) as file: return file.read() def remove(self): os.remove(self.get_full_path()) def get_full_path(self): return os.path.join(tempfile.gettempdir(), self.name) def _open(self, mode="r"): if self.name: return open(self.get_full_path(), mode, encoding=self.encoding) else: tmp_file = tempfile.NamedTemporaryFile(delete=False) self.name = tmp_file.name return tmp_file class CacheStorage(BaseStorage): """ By default memcache maximum size per key is 1MB, be careful with large files. """ CACHE_LIFETIME = 86400 CACHE_PREFIX = "django-import-export-" def save(self, data): if not self.name: self.name = uuid4().hex cache.set(self.CACHE_PREFIX + self.name, data, self.CACHE_LIFETIME) def read(self): return cache.get(self.CACHE_PREFIX + self.name) def remove(self): cache.delete(self.CACHE_PREFIX + self.name) class MediaStorage(BaseStorage): _storage = None def __init__(self, **kwargs): super().__init__(**kwargs) if django.VERSION[:2] > (4, 2): self._configure_storage() else: self._configure_storage_legacy() self.MEDIA_FOLDER = kwargs.get("MEDIA_FOLDER", "django-import-export") # issue 1589 - Ensure that for MediaStorage, we read in binary mode kwargs.update({"read_mode": "rb"}) super().__init__(**kwargs) def _configure_storage(self): from django.core.files.storage import StorageHandler sh = StorageHandler() self._storage = ( sh["import_export"] if "import_export" in sh.backends else sh["default"] ) def _configure_storage_legacy(self): from django.core.files.storage import default_storage storage_class = getattr(settings, "IMPORT_EXPORT_DEFAULT_FILE_STORAGE", None) self._storage = storage_class() if storage_class else default_storage def save(self, data): if not self.name: self.name = uuid4().hex self._storage.save(self.get_full_path(), ContentFile(data)) def read(self): with self._storage.open(self.get_full_path(), mode=self.read_mode) as f: return f.read() def remove(self): self._storage.delete(self.get_full_path()) def get_full_path(self): if self.MEDIA_FOLDER is not None: return os.path.join(self.MEDIA_FOLDER, self.name) return self.name django-import-export-4.0.9/import_export/utils.py000066400000000000000000000015111463433610200222420ustar00rootroot00000000000000from django.db import transaction class atomic_if_using_transaction: """Context manager wraps `atomic` if `using_transactions`. Replaces code:: if using_transactions: with transaction.atomic(using=using): return something() return something() """ def __init__(self, using_transactions, using): self.using_transactions = using_transactions if using_transactions: self.context_manager = transaction.atomic(using=using) def __enter__(self): if self.using_transactions: self.context_manager.__enter__() def __exit__(self, *args): if self.using_transactions: self.context_manager.__exit__(*args) def get_related_model(field): if hasattr(field, "related_model"): return field.related_model django-import-export-4.0.9/import_export/widgets.py000066400000000000000000000511571463433610200225630ustar00rootroot00000000000000import json import logging import numbers from datetime import date, datetime, time, timedelta from decimal import Decimal from warnings import warn import django from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.utils import timezone from django.utils.dateparse import parse_duration from django.utils.encoding import force_str, smart_str from django.utils.formats import number_format from django.utils.translation import gettext_lazy as _ from import_export.exceptions import WidgetError logger = logging.getLogger(__name__) def format_datetime(value, datetime_format): # handle correct formatting of dates # see https://code.djangoproject.com/ticket/32738 format_ = django.utils.formats.sanitize_strftime_format(datetime_format) return value.strftime(format_) class _ParseDateTimeMixin(object): """Internal Mixin for shared logic with date and datetime conversions.""" def __init__( self, format=None, input_formats=None, default_format="%Y-%m-%d", coerce_to_string=True, ): super().__init__(coerce_to_string=coerce_to_string) self.formats = (format,) if format else (input_formats or (default_format,)) def _parse_value(self, value, value_type): """Attempt to parse the value using the provided formats. Raise ValueError if parsing fails.""" if not value: return None if isinstance(value, value_type): return value for format_ in self.formats: try: parsed_date = datetime.strptime(value, format_) if value_type is date: return parsed_date.date() if value_type is time: return parsed_date.time() return parsed_date except (ValueError, TypeError) as e: logger.debug(str(e)) raise ValueError("Value could not be parsed using defined formats.") class Widget: """ A Widget handles converting between import and export representations. """ def __init__(self, coerce_to_string=True): """ :param coerce_to_string: If True, :meth:`~import_export.widgets.Widget.render` will return a string representation of the value, otherwise the value is returned. """ self.coerce_to_string = coerce_to_string def clean(self, value, row=None, **kwargs): """ Returns an appropriate python object for an imported value. For example, a date string will be converted to a python datetime instance. :param value: The value to be converted to a native type. :param row: A dict containing row key/value pairs. :param **kwargs: Optional kwargs. """ return value def render(self, value, obj=None): """ Returns an export representation of a python value. :param value: The python value to be rendered. :param obj: The model instance from which the value is taken. This parameter is deprecated and will be removed in a future release. :return: By default, this value will be a string, with ``None`` values returned as empty strings. """ return force_str(value) if value is not None else "" def _obj_deprecation_warning(self, obj): if obj is not None: warn( "The 'obj' parameter is deprecated and will be removed " "in a future release", DeprecationWarning, stacklevel=2, ) class NumberWidget(Widget): """ Widget for converting numeric fields. """ def is_empty(self, value): if isinstance(value, str): value = value.strip() # 0 is not empty return value is None or value == "" def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string: return ( "" if value is None or not isinstance(value, numbers.Number) else "" + number_format(value) ) return value class FloatWidget(NumberWidget): """ Widget for converting float fields. """ def clean(self, value, row=None, **kwargs): if self.is_empty(value): return None return float(value) class IntegerWidget(NumberWidget): """ Widget for converting integer fields. """ def clean(self, value, row=None, **kwargs): if self.is_empty(value): return None return int(Decimal(value)) class DecimalWidget(NumberWidget): """ Widget for converting decimal fields. """ def clean(self, value, row=None, **kwargs): if self.is_empty(value): return None return Decimal(force_str(value)) class CharWidget(Widget): """ Widget for converting text fields. :param allow_blank: If True, then :meth:`~import_export.widgets.Widget.clean` will return null values as empty strings, otherwise as ``None``. """ def __init__(self, coerce_to_string=True, allow_blank=True): """ """ self.coerce_to_string = coerce_to_string self.allow_blank = allow_blank def clean(self, value, row=None, **kwargs): val = super().clean(value, row, **kwargs) if val is None: return "" if self.allow_blank is True else None return force_str(val) def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string: return "" if value is None else force_str(value) return value class BooleanWidget(Widget): """ Widget for converting boolean fields. The widget assumes that ``True``, ``False``, and ``None`` are all valid values, as to match Django's `BooleanField `_. That said, whether the database/Django will actually accept NULL values will depend on if you have set ``null=True`` on that Django field. While the BooleanWidget is set up to accept as input common variations of "True" and "False" (and "None"), you may need to munge less common values to ``True``/``False``/``None``. Probably the easiest way to do this is to override the :func:`~import_export.resources.Resource.before_import_row` function of your Resource class. A short example:: from import_export import fields, resources, widgets class BooleanExample(resources.ModelResource): warn = fields.Field(widget=widgets.BooleanWidget()) def before_import_row(self, row, **kwargs): if "warn" in row.keys(): # munge "warn" to "True" if row["warn"] in ["warn", "WARN"]: row["warn"] = True return super().before_import_row(row, **kwargs) """ TRUE_VALUES = ["1", 1, True, "true", "TRUE", "True"] FALSE_VALUES = ["0", 0, False, "false", "FALSE", "False"] NULL_VALUES = ["", None, "null", "NULL", "none", "NONE", "None"] def __init__(self, coerce_to_string=True): """ """ self.coerce_to_string = coerce_to_string def clean(self, value, row=None, **kwargs): if value in self.NULL_VALUES: return None return True if value in self.TRUE_VALUES else False def render(self, value, obj=None): """ :return: ``True`` is represented as ``1``, ``False`` as ``0``, and ``None``/NULL as an empty string. If ``coerce_to_string`` is ``False``, the python Boolean type is returned (may be ``None``). """ self._obj_deprecation_warning(obj) if self.coerce_to_string is False: return value if value in self.NULL_VALUES or not type(value) is bool: return "" return self.TRUE_VALUES[0] if value else self.FALSE_VALUES[0] class DateWidget(_ParseDateTimeMixin, Widget): """ Widget for converting date fields to Python date instances. Takes optional ``format`` parameter. If none is set, either ``settings.DATE_INPUT_FORMATS`` or ``"%Y-%m-%d"`` is used. """ def __init__(self, format=None, coerce_to_string=True): super().__init__( format, settings.DATE_INPUT_FORMATS, "%Y-%m-%d", coerce_to_string ) def clean(self, value, row=None, **kwargs): """ :returns: A python date instance. :raises: ValueError if the value cannot be parsed using defined formats. """ return self._parse_value(value, date) def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string is False: return value if not value or not type(value) is date: return "" return format_datetime(value, self.formats[0]) class DateTimeWidget(_ParseDateTimeMixin, Widget): """ Widget for converting datetime fields to Python datetime instances. Takes optional ``format`` parameter. If none is set, either ``settings.DATETIME_INPUT_FORMATS`` or ``"%Y-%m-%d %H:%M:%S"`` is used. """ def __init__(self, format=None, coerce_to_string=True): super().__init__( format, settings.DATETIME_INPUT_FORMATS, "%Y-%m-%d %H:%M:%S", coerce_to_string, ) def clean(self, value, row=None, **kwargs): """ :returns: A python datetime instance. :raises: ValueError if the value cannot be parsed using defined formats. """ dt = self._parse_value(value, datetime) if dt is None: return None if settings.USE_TZ and timezone.is_naive(dt): return timezone.make_aware(dt) return dt def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string is False: return value if not value or not type(value) is datetime: return "" if settings.USE_TZ: value = timezone.localtime(value) return format_datetime(value, self.formats[0]) class TimeWidget(_ParseDateTimeMixin, Widget): """ Widget for converting time fields. Takes optional ``format`` parameter. If none is set, either ``settings.DATETIME_INPUT_FORMATS`` or ``"%H:%M:%S"`` is used. """ def __init__(self, format=None, coerce_to_string=True): super().__init__( format, settings.TIME_INPUT_FORMATS, "%H:%M:%S", coerce_to_string ) def clean(self, value, row=None, **kwargs): """ :returns: A python time instance. :raises: ValueError if the value cannot be parsed using defined formats. """ return self._parse_value(value, time) def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string is False: return value if not value or not type(value) is time: return "" return value.strftime(self.formats[0]) class DurationWidget(Widget): """ Widget for converting time duration fields. """ def clean(self, value, row=None, **kwargs): """ :returns: A python duration instance. :raises: ValueError if the value cannot be parsed. """ if not value: return None try: return parse_duration(value) except (ValueError, TypeError) as e: logger.debug(str(e)) raise ValueError(_("Value could not be parsed.")) def render(self, value, obj=None): self._obj_deprecation_warning(obj) if self.coerce_to_string is False: return value if value is None or not type(value) is timedelta: return "" return str(value) class SimpleArrayWidget(Widget): """ Widget for an Array field. Can be used for Postgres' Array field. :param separator: Defaults to ``','`` """ def __init__(self, separator=None, coerce_to_string=True): if separator is None: separator = "," self.separator = separator super().__init__(coerce_to_string=coerce_to_string) def clean(self, value, row=None, **kwargs): return value.split(self.separator) if value else [] def render(self, value, obj=None): """ :return: A string with values separated by ``separator``. If ``coerce_to_string`` is ``False``, the native array will be returned. If ``value`` is None, None will be returned if ``coerce_to_string`` is ``False``, otherwise an empty string will be returned. """ self._obj_deprecation_warning(obj) if value is None: return "" if self.coerce_to_string is True else None if not self.coerce_to_string: return value return self.separator.join(str(v) for v in value) class JSONWidget(Widget): """ Widget for a JSON object (especially required for jsonb fields in PostgreSQL database.) :param value: Defaults to JSON format. The widget covers two cases: Proper JSON string with double quotes, else it tries to use single quotes and then convert it to proper JSON. """ def clean(self, value, row=None, **kwargs): val = super().clean(value) if val: try: return json.loads(val) except json.decoder.JSONDecodeError: return json.loads(val.replace("'", '"')) def render(self, value, obj=None): """ :return: A JSON formatted string derived from ``value``. ``coerce_to_string`` has no effect on the return value. """ self._obj_deprecation_warning(obj) if value: return json.dumps(value) return None class ForeignKeyWidget(Widget): """ Widget for a ``ForeignKey`` field which looks up a related model using either the PK or a user specified field that uniquely identifies the instance in both export and import. The lookup field defaults to using the primary key (``pk``) as lookup criterion but can be customized to use any field on the related model. Unlike specifying a related field in your resource like so… :: class Meta: fields = ('author__name',) …using a :class:`~import_export.widgets.ForeignKeyWidget` has the advantage that it can not only be used for exporting, but also importing data with foreign key relationships. Here's an example on how to use :class:`~import_export.widgets.ForeignKeyWidget` to lookup related objects using ``Author.name`` instead of ``Author.pk``:: from import_export import fields, resources from import_export.widgets import ForeignKeyWidget class BookResource(resources.ModelResource): author = fields.Field( column_name='author', attribute='author', widget=ForeignKeyWidget(Author, 'name')) class Meta: fields = ('author',) :param model: The Model the ForeignKey refers to (required). :param field: A field on the related model used for looking up a particular object. :param use_natural_foreign_keys: Use natural key functions to identify related object, default to False """ def __init__( self, model, field="pk", use_natural_foreign_keys=False, key_is_id=False, **kwargs, ): self.model = model self.field = field self.key_is_id = key_is_id self.use_natural_foreign_keys = use_natural_foreign_keys if use_natural_foreign_keys is True and key_is_id is True: raise WidgetError( _("use_natural_foreign_keys and key_is_id cannot both be True") ) super().__init__(**kwargs) def get_queryset(self, value, row, *args, **kwargs): """ Returns a queryset of all objects for this Model. Overwrite this method if you want to limit the pool of objects from which the related object is retrieved. :param value: The field's value in the dataset. :param row: The dataset's current row. :param \\*args: Optional args. :param \\**kwargs: Optional kwargs. As an example; if you'd like to have ForeignKeyWidget look up a Person by their pre- **and** lastname column, you could subclass the widget like so:: class FullNameForeignKeyWidget(ForeignKeyWidget): def get_queryset(self, value, row, *args, **kwargs): return self.model.objects.filter( first_name__iexact=row["first_name"], last_name__iexact=row["last_name"] ) """ return self.model.objects.all() def clean(self, value, row=None, **kwargs): """ :return: a single Foreign Key instance derived from the args. ``None`` can be returned if the value passed is a null value. :param value: The field's value in the dataset. :param row: The dataset's current row. :param \\**kwargs: Optional kwargs. :raises: ``ObjectDoesNotExist`` if no valid instance can be found. """ val = super().clean(value) if val: if self.use_natural_foreign_keys: # natural keys will always be a tuple, which ends up as a json list. value = json.loads(value) return self.model.objects.get_by_natural_key(*value) else: lookup_kwargs = self.get_lookup_kwargs(value, row, **kwargs) obj = self.get_queryset(value, row, **kwargs).get(**lookup_kwargs) if self.key_is_id: return obj.pk return obj else: return None def get_lookup_kwargs(self, value, row, **kwargs): """ :return: the key value pairs used to identify a model instance. Override this to customize instance lookup. :param value: The field's value in the dataset. :param row: The dataset's current row. :param \\**kwargs: Optional kwargs. """ return {self.field: value} def render(self, value, obj=None): """ :return: A string representation of the related value. If ``use_natural_foreign_keys``, the value's natural key is returned. ``coerce_to_string`` has no effect on the return value. """ self._obj_deprecation_warning(obj) if self.key_is_id: return value or "" if value is None: return "" attrs = self.field.split("__") for attr in attrs: try: if self.use_natural_foreign_keys: # inbound natural keys must be a json list. return json.dumps(value.natural_key()) else: value = getattr(value, attr, None) except (ValueError, ObjectDoesNotExist): # needs to have a primary key value before a many-to-many # relationship can be used. return None if value is None: return None return value class ManyToManyWidget(Widget): """ Widget that converts between representations of a ManyToMany relationships as a list and an actual ManyToMany field. :param model: The model the ManyToMany field refers to (required). :param separator: Defaults to ``','``. :param field: A field on the related model. Default is ``pk``. """ def __init__(self, model, separator=None, field=None, **kwargs): if separator is None: separator = "," if field is None: field = "pk" self.model = model self.separator = separator self.field = field super().__init__(**kwargs) def clean(self, value, row=None, **kwargs): if not value: return self.model.objects.none() if isinstance(value, (float, int)): ids = [int(value)] else: ids = value.split(self.separator) ids = filter(None, [i.strip() for i in ids]) return self.model.objects.filter(**{"%s__in" % self.field: ids}) def render(self, value, obj=None): """ :return: A string with values separated by ``separator``. ``None`` values are returned as empty strings. ``coerce_to_string`` has no effect on the return value. """ self._obj_deprecation_warning(obj) if value is not None: ids = [smart_str(getattr(obj, self.field)) for obj in value.all()] return self.separator.join(ids) return "" django-import-export-4.0.9/pyproject.toml000066400000000000000000000040151463433610200205330ustar00rootroot00000000000000[build-system] requires = ["setuptools>=60", "setuptools-scm>=7.1.0"] build-backend = "setuptools.build_meta" [project] name = "django-import-export" authors = [ {name = "Bojan Mihelač", email = "djangoimportexport@gmail.com"}, ] maintainers = [ {name = "Matthew Hegarty", email = "djangoimportexport@gmail.com"}, ] description = "Django application and library for importing and exporting data with included admin integration." keywords = ["django", "import", "export"] license = {file = "LICENSE"} requires-python = ">=3.8" readme = "README.rst" dynamic = ["version"] classifiers = [ "Framework :: Django", "Framework :: Django :: 4.2", "Framework :: Django :: 5.0", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development", ] # tablib temporarily using master before v4 dependencies = [ "diff-match-patch", "Django>=3.2", "tablib==3.5.0" ] [project.optional-dependencies] all = [ "tablib[all]==3.5.0" ] cli = ["tablib[cli]"] ods = ["tablib[ods]"] pandas = ["tablib[pandas]"] xls = ["tablib[xls]==3.5.0"] xlsx = ["tablib[xlsx]==3.5.0"] yaml = ["tablib[yaml]==3.5.0"] [project.urls] Documentation = "https://django-import-export.readthedocs.io/en/stable/" Repository = "https://github.com/django-import-export/django-import-export" Changelog = "https://github.com/django-import-export/django-import-export/blob/main/docs/changelog.rst" [tool.setuptools] platforms = ["OS Independent"] license-files = ["LICENSE", "AUTHORS"] [tool.setuptools_scm] write_to = "import_export/_version.py" local_scheme = "no-local-version" [tool.isort] profile = "black" django-import-export-4.0.9/requirements/000077500000000000000000000000001463433610200203425ustar00rootroot00000000000000django-import-export-4.0.9/requirements/base.txt000066400000000000000000000001371463433610200220160ustar00rootroot00000000000000Django>=3.2 # # tablib temporarily pinned before v4 - see #1627 tablib==3.5.0 diff-match-patch django-import-export-4.0.9/requirements/docs.txt000066400000000000000000000000771463433610200220370ustar00rootroot00000000000000-r base.txt sphinx==7.2.6 sphinx-rtd-theme==1.3.0 --editable . django-import-export-4.0.9/requirements/test.txt000066400000000000000000000002601463433610200220600ustar00rootroot00000000000000psycopg2-binary==2.9.9 mysqlclient==2.2.0 chardet==5.2.0 pytz==2023.3 memory-profiler==0.61.0 django-extensions==3.2.3 coverage==7.3.2 tablib[all]==3.5.0 setuptools-scm==8.0.4 django-import-export-4.0.9/runtests.py000066400000000000000000000012441463433610200200610ustar00rootroot00000000000000""" Helper script to generate coverage data only if running in CI. This script is called from tox (see tox.ini). Coverage files are generated only if a `COVERAGE` environment variable is present. This is necessary to prevent unwanted coverage files when running locally (issue #1424) """ import os def main(): coverage_args = "-m coverage run" if os.environ.get("COVERAGE") else "" retval = os.system( "python -W error::DeprecationWarning -W error::PendingDeprecationWarning " f"{coverage_args} " "./tests/manage.py test core --settings=settings" ) if retval != 0: exit(1) exit(0) if __name__ == "__main__": main() django-import-export-4.0.9/runtests.sh000077500000000000000000000015641463433610200200530ustar00rootroot00000000000000#!/usr/bin/env sh # run tests against all supported databases using tox # postgres / mysql run via docker # sqlite (default) runs against local database file (database.db) # use pyenv or similar to install multiple python instances export DJANGO_SETTINGS_MODULE=settings export IMPORT_EXPORT_POSTGRESQL_USER=pguser export IMPORT_EXPORT_POSTGRESQL_PASSWORD=pguserpass export IMPORT_EXPORT_MYSQL_USER=mysqluser export IMPORT_EXPORT_MYSQL_PASSWORD=mysqluserpass echo "starting local database instances" docker compose -f tests/docker-compose.yml up -d echo "waiting for db initialization" sleep 45 echo "running tests (sqlite)" tox echo "running tests (mysql)" export IMPORT_EXPORT_TEST_TYPE=mysql-innodb tox echo "running tests (postgres)" export IMPORT_EXPORT_TEST_TYPE=postgres tox echo "removing local database instances" docker compose -f tests/docker-compose.yml down -v django-import-export-4.0.9/setup.py000066400000000000000000000000461463433610200173310ustar00rootroot00000000000000from setuptools import setup setup() django-import-export-4.0.9/tests/000077500000000000000000000000001463433610200167615ustar00rootroot00000000000000django-import-export-4.0.9/tests/books-sample.csv000066400000000000000000000003331463433610200220710ustar00rootroot00000000000000id,name,author,author_email,imported,published,published_time,price,added,categories 12,Triangles,5,geo@met.ry,,2020-01-12,,12,,1 13,Rectangles,5,geo@met.ry,,2020-04-20,,20,,2 3,Rhombus,5,geo@met.ry,,2019-10-25,,5.5,,1 django-import-export-4.0.9/tests/core/000077500000000000000000000000001463433610200177115ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/__init__.py000066400000000000000000000000001463433610200220100ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/admin.py000066400000000000000000000072521463433610200213610ustar00rootroot00000000000000from django.contrib import admin from import_export.admin import ( ExportActionModelAdmin, ImportExportModelAdmin, ImportMixin, ) from import_export.fields import Field from import_export.resources import ModelResource from .forms import CustomConfirmImportForm, CustomExportForm, CustomImportForm from .models import Author, Book, Category, Child, EBook, UUIDBook, UUIDCategory class ChildAdmin(ImportMixin, admin.ModelAdmin): pass class BookResource(ModelResource): class Meta: model = Book def for_delete(self, row, instance): return self.fields["name"].clean(row) == "" class BookNameResource(ModelResource): class Meta: model = Book fields = ["id", "name"] name = "Export/Import only book names" class BookAdmin(ImportExportModelAdmin): list_display = ("name", "author", "added") list_filter = ["categories", "author"] resource_classes = [BookResource, BookNameResource] change_list_template = "core/admin/change_list.html" class CategoryAdmin(ExportActionModelAdmin): pass class UUIDBookAdmin(ImportExportModelAdmin): pass class UUIDCategoryAdmin(ExportActionModelAdmin): pass class AuthorAdmin(ImportMixin, admin.ModelAdmin): pass class UUIDBookResource(ModelResource): class Meta: model = UUIDBook class EBookResource(ModelResource): published = Field(attribute="published", column_name="published_date") author_email = Field(attribute="author_email", column_name="Email of the author") def __init__(self, **kwargs): super().__init__() self.author_id = kwargs.get("author_id") def filter_export(self, queryset, **kwargs): return queryset.filter(author_id=self.author_id) class Meta: model = EBook fields = ("id", "author_email", "name", "published") class CustomBookAdmin(ExportActionModelAdmin, ImportExportModelAdmin): """Example usage of custom import / export forms""" resource_classes = [EBookResource] import_form_class = CustomImportForm confirm_form_class = CustomConfirmImportForm export_form_class = CustomExportForm def get_confirm_form_initial(self, request, import_form): initial = super().get_confirm_form_initial(request, import_form) # Pass on the `author` value from the import form to # the confirm form (if provided) if import_form: initial["author"] = import_form.cleaned_data["author"].id return initial def get_import_resource_kwargs(self, request, **kwargs): # update resource kwargs so that the Resource is passed the authenticated user # This is included as an example of how dynamic values # can be passed to resources if "form" not in kwargs: # test for #1789 raise ValueError("'form' param was expected in kwargs") kwargs = super().get_resource_kwargs(request, **kwargs) kwargs.update({"user": request.user}) return kwargs def get_export_resource_kwargs(self, request, **kwargs): # this is overridden to demonstrate that custom form fields can be used # to override the export query. # The dict returned here will be passed as kwargs to EBookResource export_form = kwargs.get("export_form") if export_form: kwargs.update(author_id=export_form.cleaned_data["author"].id) return kwargs admin.site.register(Book, BookAdmin) admin.site.register(Category, CategoryAdmin) admin.site.register(Author, AuthorAdmin) admin.site.register(Child, ChildAdmin) admin.site.register(EBook, CustomBookAdmin) admin.site.register(UUIDCategory, UUIDCategoryAdmin) admin.site.register(UUIDBook, UUIDBookAdmin) django-import-export-4.0.9/tests/core/exports/000077500000000000000000000000001463433610200214155ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/exports/authors.csv000066400000000000000000000000331463433610200236130ustar00rootroot00000000000000id,name 1,J. R. R. Tolkien django-import-export-4.0.9/tests/core/exports/books-ISO-8859-1.csv000066400000000000000000000000641463433610200244500ustar00rootroot00000000000000id,name,author_email 1,Merci toi,test@example.com django-import-export-4.0.9/tests/core/exports/books-dos.csv000066400000000000000000000000641463433610200240320ustar00rootroot00000000000000id,name,author_email 1,Some book,test@example.com django-import-export-4.0.9/tests/core/exports/books-empty-author-email.xlsx000066400000000000000000000226621463433610200272030ustar00rootroot00000000000000PK!bh^[Content_Types].xml (N0EHC-Jܲ@5*Q>ēƪc[iiBj7{2hnmƻR U^7/%rZY@1__fqR4DAJh>Vƹ Z9NV8ʩji){^-I"{v^P!XS)bRrKs(3`c07M4ZƐk+|\|z(P6h_-[@!Pk2n}?L %ddN"m,ǞDO97*~ɸ8Oc|nEB!$};{[2PK!U0#L _rels/.rels (MO0 HݐBKwAH!T~I$ݿ'TG~xl/_rels/workbook.xml.rels (RMK0 0wvt/"Uɴ)&!3~*]XK/oyv5+zl;obG s>,8(%"D҆4j0u2jsMY˴S쭂 )fCy I< y!+EfMyk K5=|t G)s墙UtB),fPK!,Gxl/workbook.xmlVQo8~?;5@*YtUfۻ'x 8gLC~cfs:Qbx7&ןڲ0^BD,d*!J 2jEb!zc54뽐/k!^ J4g%ĎU n;hV猩eyB=B / OBM*ՃHVPL/+|ivf*@y[2 nt]@-qV׃``lRb'&$y.Ca^ᑕ>;by`e4@>hz{k3-u dVqB4[g'f /`XxOrF6) <=AQbsQ)!_\=(X.4 b]TF#/5R*g{|/Wg_i&/wB*z 2PTH{K0=!a`HLO9I +iJ@_p 72sʀ<}B,'2rL+%fDg>v9!!Ζh;+hxNuzi־پ~W5'^ebE6\=o-2$tXnk Rgdf9m#[lLw8,汛H]6<&{Q@=&Ѹ l=X.t(ޒ9yqnuwmz~J.ufrhZ[M('5,JXd3{7xiG1 ]s\3dBb<j^% bX9N<@[AU{k , Y]d9lv_C$ s^8dFYQb+Лʀ\Ͷ;420KJFJnSuvd%HeNϴd9f8֟l߇3KvS->ǧPU0M8U؏窚'wZW(b8SjKDicYtF{umxgd -mgo5R?*kR >]e!1^q9Њ1,ǟwZ*T~PK!N xl/theme/theme1.xmlY͋7? sw5%l$dQV32%9R(Bo=@ $'#$lJZv G~ztҽzG ’_P=ؘ$Ӗk8(4|OHe n ,K۟~rmDlI9*f8&H#ޘ+R#^bP{}2!# J{O1B (W%òBR!a1;{(~h%/V&DYCn2L`|Xsj Z{_\Zҧh4:na PաWU_]נT E A)>\Çfgנ_[K^PkPDIr.jwd A)Q RSLX"7Z2>R$I O(9%o&`T) JU>#02]`XRxbL+7 /={=_*Kn%SSՏ__7'Ŀ˗:/}}O!c&a?0BĒ@v^[ uXsXa3W"`J+U`ek)r+emgoqx(ߤDJ]8TzM5)0IYgz|]p+~o`_=|j QkekZAj|&O3!ŻBw}ь0Q'j"5,ܔ#-q&?'2ڏ ZCeLTx3&cu+ЭNxNg x)\CJZ=ޭ~TwY(aLfQuQ_B^g^ٙXtXPꗡZFq 0mxEAAfc ΙFz3Pb/3 tSٺqyjuiE-#t00,;͖Yƺ2Obr3kE"'&&S;nj*#4kx#[SvInwaD:\N1{-_- 4m+W>Z@+qt;x2#iQNSp$½:7XX/+r1w`h׼9#:Pvd5O+Oٚ.<O7sig*t; CԲ*nN-rk.yJ}0-2MYNÊQ۴3, O6muF8='?ȝZu@,JܼfwQ6vygcx D(c~\h@M[Z۟pa:ursP| })eY{>>#%0MVTP gq2ÿ 8RY^3L A E2R 4H""IZo-Uj\!G޹Й`w73xZNX3ƶGu6k6zNє8؝T%$BSq+ꬠ )Fb^gyRw6L=ߩD2eE[_Otn0EŚ=MJZ.ZU` 0^S)Q69oq0q*kP9lC`1M`_GT>2%Om M0T)D%8,aUdk'6r2J$I{[\*x(R1%;uq)/TA²N옫vsPfpw̢#d옃HXz0<9Ús`n*˷>-^k*PK!:4docProps/app.xml (Sn0 ?7rYnaΪLBdIY#WAwڍ||xx|w[.JVӾ1n[wV )(TȮOb}HH+;.إIc(q} ^?_=kGA6)_CHVHOeI %؈!XHѣoW8?sHKm@?GCY >oF+ 7ɏlE;P92h5& 4/)KV<)Erɴk;BarΝ\Td$ -ֆ,v"rx0O WKn8?=w PK!{FdocProps/core.xml (RAN0#I *hfMkHlR{VpfglWFOI>HZjJtB\K SO.ӓRX&g,8T=vJֈQZGXr [Q;_-삶\rLHR v( Zi>9` w6̴{-EOvmFc5UJJ)*l*3 pѸH)aC=x{hyXY@v\ g1k% Yzp%MvCu?X74^ܐȊqi>^+&l } o{Q<[9;@[ fpڄK@ЊiPK-!bh^[Content_Types].xmlPK-!U0#L _rels/.relsPK-!>xl/_rels/workbook.xml.relsPK-!,Gxl/workbook.xmlPK-!s2 xl/sharedStrings.xmlPK-!aX)' xl/styles.xmlPK-!!LD#xl/worksheets/_rels/sheet1.xml.relsPK-!N &xl/theme/theme1.xmlPK-! _xl/worksheets/sheet1.xmlPK-!:4:docProps/app.xmlPK-!{F docProps/core.xmlPK "django-import-export-4.0.9/tests/core/exports/books-for-delete.csv000066400000000000000000000000511463433610200252670ustar00rootroot00000000000000id,name,author_email 1,,test@example.com django-import-export-4.0.9/tests/core/exports/books-invalid-date.csv000066400000000000000000000000741463433610200256070ustar00rootroot00000000000000id,name,published 1,book,1996-01-01 2,Some book,1996x-01-01 django-import-export-4.0.9/tests/core/exports/books-mac.csv000066400000000000000000000000621463433610200240030ustar00rootroot00000000000000id,name,author_email 1,Some book,test@example.com django-import-export-4.0.9/tests/core/exports/books-mac.tsv000066400000000000000000000000621463433610200240240ustar00rootroot00000000000000id name author_email 1 Some book test@example.com django-import-export-4.0.9/tests/core/exports/books-no-headers.csv000066400000000000000000000000041463433610200252640ustar00rootroot00000000000000abc django-import-export-4.0.9/tests/core/exports/books-unicode.csv000066400000000000000000000000641463433610200246730ustar00rootroot00000000000000id,name,author_email 1,Some bookš,test@example.com django-import-export-4.0.9/tests/core/exports/books-unicode.tsv000066400000000000000000000000641463433610200247140ustar00rootroot00000000000000id name author_email 1 Some bookš test@example.com django-import-export-4.0.9/tests/core/exports/books.csv000066400000000000000000000000621463433610200232450ustar00rootroot00000000000000id,name,author_email 1,Some book,test@example.com django-import-export-4.0.9/tests/core/exports/books.json000066400000000000000000000013531463433610200234270ustar00rootroot00000000000000[ { "id": 11, "name": "A Game of Thrones", "author": 11, "author_email": "martin@got.com", "imported": "0", "published": "1996-08-01", "published_time": "21:00:00", "price": "25.00", "added": "", "categories": "1" }, { "id": 6, "name": "Circles", "author": 11, "author_email": "geo@met.ry", "imported": "0", "published": "2020-08-01", "published_time": "21:00:00", "price": "15.00", "added": "", "categories": "2" }, { "id": 5, "name": "Squares", "author": 5, "author_email": "geo@met.ry", "imported": "0", "published": "1999-08-01", "published_time": "21:00:00", "price": "5.00", "added": "", "categories": "2" } ]django-import-export-4.0.9/tests/core/exports/books.xls000066400000000000000000000130001463433610200232540ustar00rootroot00000000000000ࡱ;  Root Entry  !#  \pCalc Ba==@ 8@"1Arial1Arial1Arial1Arial1Cambria General                + ) , *    ` books,,TZR3  @@  Bidname author_email Some booktest@example.com y cc   d-C6?_%;*+&?'?('}'}?)'}'}?" d,, ` `? ` `?U } r;;   ~   PH0(  >@gg  FMicrosoft Excel 97-TabelleBiff8Oh+'0|8 @ L X d p0@@@@՜.+,D՜.+,\Root EntryF WorkbookCompObjIOle SummaryInformation(DocumentSummaryInformation8"tdjango-import-export-4.0.9/tests/core/exports/books.xlsx000066400000000000000000000114261463433610200234560ustar00rootroot00000000000000PKyS _rels/.relsJ1}{wDdЛH}a70u}{ZI~7CfGFoZ+{kW#VJ$cʪl n0\QX^:`dd{m]_dhVFw^F9W-(F/3ODSUNl/w{N([qTuŌVtys>(NGq0fp1yv*fXtE N5z ۖ) *dyVd+"أP9_ OQd X58 [\8G{UtKMRd:8)1hD~Fd6: p;|'t4dӟ$+'[4Cjϝ\;f>%woGPK+uPKyS xl/styles.xmlX]o0}߯B4m'BubTTiڃNw ~lmTJ^l9pmCtQm3<:12U _ϓ'KdFtkjY!2"PfKkOA`Ғ bTE%\ɕP4%q$qNAq$"֠T-|-p:] |jqGA+G#82p ]xHN9XA}عf^8'ڃZmঽZgx.kw>/X4nB݄"R-?+U 4q.4Gi B uIyeJ~]pN{܂fEZXt+wHRί7w*e3缷]HU:QN%mM:笐> 6[㈬Q4{i7EA~1te(K xפɬI LuLUgqlmdP{*TpSѶuj}>.TWj ޏ f[{3{3{3{3{3ۘ?dSn&;fKnN|9~c*3l{;*ZЮ[e">Gޫbɸeҏ %YǏ g#M鳤Tu9p& r x.Na:l 7PKj3PKySxl/worksheets/sheet1.xmlVMs8p4{6Ą2L%LUfZ2;U{U^II~ rZNrwkB{5#ADR`BfRŨgq[rlrm . M\']PzRsB( *3,)_BZ\:ZorQ6O|LA\֞.0WTR(h]NIE`UyKln+/#'>7dBZùdT'Γ[87]WBѸ oNͫEz#^QI8`eBdkUl}&R+gwIҮGࠞr5-.H j*PȅΞp(` (ܳl*Uѵܲ3r:iGvP #Q|LdUY_5cZ#<5.댵[gwgPKh<62 PKySxl/_rels/workbook.xml.relsMk0 FIc8AQ6ֵ~.[ eГH4C vV͢h%؀I/Z8Y.b;]JNɺQ/IӜS[n+Psc _{0 r3Rb+/2m=?"#ʯR6w _fz o ۭP~$E|PKOz%PKySxl/sharedStrings.xmlJ1D~E軓"K&+ziw&1ݳoě̱WUMåds&iayNth9d&ʉV պV%_޹]0̲ jvwD`">V|Ib/53Y~#` nê }ʛ - 7&ZQ/ԌCg}oPKHPKySdocProps/core.xmlmRo0~_A i,˖uݠ4)߯2|G]M:$QLТJWy[-Œn5ʻ\&Z /5`Q |vLl ԉ 4EޡnmC[Qq< 9C3&SczB ht4Ey`P.ƒֳ8NƮn2X|~F W%LX2ʠ_Q"<~?%i>XF|.gN`͉ 8Yz<<L4 ,īdg}뀡JMGmAqpSPKSPKySdocProps/app.xmlOk0 8 !-q;C6v ۠y7==n8ALڻW5)I;mx.7H(;;}R .&y+RmG+0x~'/g iS)Peq{B?2l03z- _Es"|?#]VYcӍ][ /Hz8kʆ[7PK<)zPKyS[Content_Types].xmlT;O0+"(vˀJځ(32%1{)TU )ɲラOv6ۨ&YL$ #rK/l:[ >^sR`E {j,h)p*fyF! L( w'/J[Ȃ,Xe88r~8l{|-?^H@,w#^-tCb̹ \a{I8OҦao-_YkP3e) X)PopkڮTqOmޒ y ]&icp!wϝ7;SD^[ j2~wPK6YWPKySf; _rels/.relsPKyS+uxl/workbook.xmlPKySj3 Txl/styles.xmlPKySh<62 Exl/worksheets/sheet1.xmlPKySOz%B xl/_rels/workbook.xml.relsPKySH\ xl/sharedStrings.xmlPKySSm docProps/core.xmlPKyS<)z docProps/app.xmlPKyS6YW'[Content_Types].xmlPK ?django-import-export-4.0.9/tests/core/exports/child.csv000066400000000000000000000000331463433610200232110ustar00rootroot00000000000000id,parent,name 1,1234,Some django-import-export-4.0.9/tests/core/exports/ebooks.csv000066400000000000000000000000711463433610200234120ustar00rootroot00000000000000id,name,Email of the author 1,Some book,test@example.com django-import-export-4.0.9/tests/core/fixtures/000077500000000000000000000000001463433610200215625ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/fixtures/author.json000066400000000000000000000005241463433610200237600ustar00rootroot00000000000000[ { "model": "core.author", "pk": 11, "fields": { "name": "George R. R. Martin", "birthday": "1948-09-20" } }, { "model": "core.author", "pk": 5, "fields": { "name": "Ian Fleming", "birthday": "1908-05-28" } } ] django-import-export-4.0.9/tests/core/fixtures/book.json000066400000000000000000000021221463433610200234040ustar00rootroot00000000000000[ { "model": "core.book", "pk": 11, "fields": { "name": "A Game of Thrones", "author": 11, "author_email": "martin@got.com", "imported": false, "published": "1996-08-01", "published_time": "21:00", "price": 25.0, "categories": [1] } }, { "model": "core.book", "pk": 5, "fields": { "name": "The Man with the Golden Gun", "author": 5, "author_email": "ian@example.com", "imported": false, "published": "1965-04-01", "published_time": "21:00", "price": 5.0, "categories": [2] } }, { "model": "core.book", "pk": 6, "fields": { "name": "Circles", "author": 11, "author_email": "geo@met.ry", "imported": false, "published": "2020-08-01", "published_time": "21:00", "price": 15.0, "categories": [2] } } ] django-import-export-4.0.9/tests/core/fixtures/category.json000066400000000000000000000004011463433610200242650ustar00rootroot00000000000000[ { "model": "core.category", "pk": 1, "fields": { "name": "Category 1" } }, { "model": "core.category", "pk": 2, "fields": { "name": "Category 2" } } ] django-import-export-4.0.9/tests/core/forms.py000066400000000000000000000013761463433610200214200ustar00rootroot00000000000000from django import forms from import_export.forms import ( ConfirmImportForm, ImportForm, SelectableFieldsExportForm, ) from .models import Author class AuthorFormMixin(forms.Form): author = forms.ModelChoiceField(queryset=Author.objects.all(), required=True) class CustomImportForm(AuthorFormMixin, ImportForm): """Customized ImportForm, with author field required""" pass class CustomConfirmImportForm(AuthorFormMixin, ConfirmImportForm): """Customized ConfirmImportForm, with author field required""" pass class CustomExportForm(AuthorFormMixin, SelectableFieldsExportForm): """Customized ExportForm, with author field required.""" author = forms.ModelChoiceField(queryset=Author.objects.all(), required=True) django-import-export-4.0.9/tests/core/migrations/000077500000000000000000000000001463433610200220655ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/migrations/0001_initial.py000066400000000000000000000130361463433610200245330ustar00rootroot00000000000000import core.models import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="Author", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ("birthday", models.DateTimeField(auto_now_add=True)), ], ), migrations.CreateModel( name="Book", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100, verbose_name="Book name")), ( "author_email", models.EmailField( blank=True, max_length=75, verbose_name="Author email" ), ), ("imported", models.BooleanField(default=False)), ( "published", models.DateField(blank=True, null=True, verbose_name="Published"), ), ( "price", models.DecimalField( blank=True, decimal_places=2, max_digits=10, null=True ), ), ( "author", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="core.Author", ), ), ], ), migrations.CreateModel( name="Category", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ], ), migrations.CreateModel( name="Entry", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, ), ), ], ), migrations.CreateModel( name="Profile", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("is_private", models.BooleanField(default=True)), ( "user", models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, ), ), ], ), migrations.CreateModel( name="WithDefault", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "name", models.CharField( blank=True, default="foo_bar", max_length=75, verbose_name="Default", ), ), ], ), migrations.CreateModel( name="WithDynamicDefault", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "name", models.CharField( default=core.models.random_name, max_length=100, verbose_name="Dyn Default", ), ), ], ), migrations.AddField( model_name="book", name="categories", field=models.ManyToManyField(blank=True, to="core.Category"), ), ] django-import-export-4.0.9/tests/core/migrations/0002_book_published_time.py000066400000000000000000000006131463433610200271070ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0001_initial"), ] operations = [ migrations.AddField( model_name="book", name="published_time", field=models.TimeField( blank=True, null=True, verbose_name="Time published" ), ), ] django-import-export-4.0.9/tests/core/migrations/0003_withfloatfield.py000066400000000000000000000012151463433610200261050ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0002_book_published_time"), ] operations = [ migrations.CreateModel( name="WithFloatField", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("f", models.FloatField(blank=True, null=True)), ], ), ] django-import-export-4.0.9/tests/core/migrations/0004_bookwithchapters.py000066400000000000000000000030701463433610200264620ustar00rootroot00000000000000from django.db import migrations, models can_use_postgres_fields = False # Dummy fields chapters_field = models.Field() data_field = models.Field() try: from django.contrib.postgres.fields import ArrayField, JSONField chapters_field = ArrayField( base_field=models.CharField(max_length=100), default=list, size=None ) data_field = JSONField(null=True) can_use_postgres_fields = True except ImportError: # We can't use ArrayField if psycopg2 is not installed - issue #1125 pass class Migration(migrations.Migration): dependencies = [ ("core", "0003_withfloatfield"), ] operations = [] pg_only_operations = [ migrations.CreateModel( name="BookWithChapters", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100, verbose_name="Book name")), ("chapters", chapters_field), ("data", data_field), ], ), ] def apply(self, project_state, schema_editor, collect_sql=False): if can_use_postgres_fields and schema_editor.connection.vendor.startswith( "postgres" ): self.operations = self.operations + self.pg_only_operations return super().apply(project_state, schema_editor, collect_sql) django-import-export-4.0.9/tests/core/migrations/0005_addparentchild.py000066400000000000000000000025151463433610200260540ustar00rootroot00000000000000import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0004_bookwithchapters"), ] operations = [ migrations.CreateModel( name="Child", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ], ), migrations.CreateModel( name="Parent", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100)), ], ), migrations.AddField( model_name="child", name="parent", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="core.Parent" ), ), ] django-import-export-4.0.9/tests/core/migrations/0006_auto_20171130_0147.py000066400000000000000000000005271463433610200255110ustar00rootroot00000000000000from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0005_addparentchild"), ] operations = [ migrations.AlterField( model_name="category", name="name", field=models.CharField(max_length=100, unique=True), ), ] django-import-export-4.0.9/tests/core/migrations/0007_auto_20180628_0411.py000066400000000000000000000031261463433610200255160ustar00rootroot00000000000000import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ("core", "0006_auto_20171130_0147"), ] operations = [ migrations.CreateModel( name="Person", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ], ), migrations.CreateModel( name="Role", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "user", models.OneToOneField( null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, ), ), ], ), migrations.AddField( model_name="person", name="role", field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to="core.Role" ), ), ] django-import-export-4.0.9/tests/core/migrations/0008_auto_20190409_0846.py000066400000000000000000000011461463433610200255310ustar00rootroot00000000000000# Generated by Django 2.1.5 on 2019-04-09 06:46 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0007_auto_20180628_0411"), ] operations = [ migrations.CreateModel( name="EBook", fields=[], options={ "proxy": True, "indexes": [], }, bases=("core.book",), ), migrations.AddField( model_name="book", name="added", field=models.DateTimeField(blank=True, null=True), ), ] django-import-export-4.0.9/tests/core/migrations/0009_auto_20211111_0807.py000066400000000000000000000060731463433610200255130ustar00rootroot00000000000000# Generated by Django 3.2.9 on 2021-11-11 08:07 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0008_auto_20190409_0846"), ] operations = [ migrations.AlterField( model_name="author", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="book", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="category", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="child", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="entry", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="parent", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="person", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="profile", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="role", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="withdefault", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="withdynamicdefault", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), migrations.AlterField( model_name="withfloatfield", name="id", field=models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID" ), ), ] django-import-export-4.0.9/tests/core/migrations/0010_uuidbook.py000066400000000000000000000011741463433610200247230ustar00rootroot00000000000000# Generated by Django 2.2.7 on 2021-05-02 07:46 import uuid from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0009_auto_20211111_0807"), ] operations = [ migrations.CreateModel( name="UUIDBook", fields=[ ( "id", models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False ), ), ("name", models.CharField(max_length=100, verbose_name="Book name")), ], ), ] 0011_uuidcategory_legacybook_alter_uuidbook_id_and_more.py000066400000000000000000000025471463433610200353440ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/migrations# Generated by Django 4.0.4 on 2022-05-12 12:39 import uuid from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0010_uuidbook"), ] operations = [ migrations.CreateModel( name="UUIDCategory", fields=[ ( "catid", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ("name", models.CharField(max_length=32)), ], ), migrations.CreateModel( name="LegacyBook", fields=[], options={ "proxy": True, "indexes": [], "constraints": [], }, bases=("core.book",), ), migrations.AlterField( model_name="uuidbook", name="id", field=models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False ), ), migrations.AddField( model_name="uuidbook", name="categories", field=models.ManyToManyField(blank=True, to="core.uuidcategory"), ), ] django-import-export-4.0.9/tests/core/migrations/0012_delete_legacybook.py000066400000000000000000000005071463433610200265440ustar00rootroot00000000000000# Generated by Django 4.2.3 on 2023-09-15 08:20 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("core", "0011_uuidcategory_legacybook_alter_uuidbook_id_and_more"), ] operations = [ migrations.DeleteModel( name="LegacyBook", ), ] django-import-export-4.0.9/tests/core/migrations/0013_alter_author_birthday.py000066400000000000000000000006641463433610200274670ustar00rootroot00000000000000# Generated by Django 4.2.3 on 2023-10-11 03:54 import django.utils.timezone from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0012_delete_legacybook"), ] operations = [ migrations.AlterField( model_name="author", name="birthday", field=models.DateTimeField(default=django.utils.timezone.now), ), ] django-import-export-4.0.9/tests/core/migrations/0014_bookwithchapternumbers.py000066400000000000000000000027601463433610200277010ustar00rootroot00000000000000from django.db import migrations, models can_use_postgres_fields = False # Dummy fields chapter_numbers_field = models.Field() try: from django.contrib.postgres.fields import ArrayField chapter_numbers_field = ArrayField( base_field=models.PositiveSmallIntegerField(), default=list, size=None ) can_use_postgres_fields = True except ImportError: # We can't use ArrayField if psycopg2 is not installed - issue #1125 pass class Migration(migrations.Migration): dependencies = [ ("core", "0013_alter_author_birthday"), ] operations = [] pg_only_operations = [ migrations.CreateModel( name="BookWithChapterNumbers", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("name", models.CharField(max_length=100, verbose_name="Book name")), ("chapter_numbers", chapter_numbers_field), ], ), ] def apply(self, project_state, schema_editor, collect_sql=False): if can_use_postgres_fields and schema_editor.connection.vendor.startswith( "postgres" ): self.operations = self.operations + self.pg_only_operations return super().apply(project_state, schema_editor, collect_sql) django-import-export-4.0.9/tests/core/migrations/0015_withpositiveintegerfields.py000066400000000000000000000014321463433610200304070ustar00rootroot00000000000000# Generated by Django 5.0.4 on 2024-04-23 22:46 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0014_bookwithchapternumbers"), ] operations = [ migrations.CreateModel( name="WithPositiveIntegerFields", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("big", models.PositiveBigIntegerField(null=True)), ("small", models.PositiveSmallIntegerField(null=True)), ], ), ] 0016_alter_category_options_alter_uuidcategory_options.py000066400000000000000000000007771463433610200353460ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/migrations# Generated by Django 5.0.4 on 2024-05-18 07:17 from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("core", "0015_withpositiveintegerfields"), ] operations = [ migrations.AlterModelOptions( name="category", options={"verbose_name_plural": "categories"}, ), migrations.AlterModelOptions( name="uuidcategory", options={"verbose_name_plural": "UUID categories"}, ), ] django-import-export-4.0.9/tests/core/migrations/0017_namedauthor_uuidbook_author.py000066400000000000000000000015431463433610200307030ustar00rootroot00000000000000# Generated by Django 5.0.4 on 2024-05-24 04:10 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("core", "0016_alter_category_options_alter_uuidcategory_options"), ] operations = [ migrations.CreateModel( name="NamedAuthor", fields=[ ( "name", models.CharField(max_length=256, primary_key=True, serialize=False), ), ], ), migrations.AddField( model_name="uuidbook", name="author", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="core.namedauthor", ), ), ] django-import-export-4.0.9/tests/core/migrations/__init__.py000066400000000000000000000000001463433610200241640ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/models.py000066400000000000000000000125061463433610200215520ustar00rootroot00000000000000import random import string import uuid from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone class AuthorManager(models.Manager): """ Used to enable the get_by_natural_key method. NOTE: Manager classes are only required to enable using the natural key functionality of ForeignKeyWidget """ def get_by_natural_key(self, name): """ Django pattern function for finding an author by its name """ return self.get(name=name) class Author(models.Model): objects = AuthorManager() name = models.CharField(max_length=100) birthday = models.DateTimeField(default=timezone.now) def natural_key(self): """ Django pattern function for serializing a model by its natural key Used only by the ForeignKeyWidget using use_natural_foreign_keys. """ return (self.name,) def __str__(self): return self.name def full_clean(self, exclude=None, validate_unique=True): super().full_clean(exclude, validate_unique) if exclude is None: exclude = [] else: exclude = list(exclude) if "name" not in exclude and self.name == "123": raise ValidationError({"name": "'123' is not a valid value"}) class Category(models.Model): name = models.CharField( max_length=100, unique=True, ) def __str__(self): return self.name class Meta: verbose_name_plural = "categories" class BookManager(models.Manager): """ Added to enable get_by_natural_key method NOTE: Manager classes are only required to enable using the natural key functionality of ForeignKeyWidget """ def get_by_natural_key(self, name, author): """ Django pattern function for returning a book by its natural key """ return self.get(name=name, author=Author.objects.get_by_natural_key(author)) class Book(models.Model): objects = BookManager() name = models.CharField("Book name", max_length=100) author = models.ForeignKey(Author, blank=True, null=True, on_delete=models.CASCADE) author_email = models.EmailField("Author email", max_length=75, blank=True) imported = models.BooleanField(default=False) published = models.DateField("Published", blank=True, null=True) published_time = models.TimeField("Time published", blank=True, null=True) price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) added = models.DateTimeField(blank=True, null=True) categories = models.ManyToManyField(Category, blank=True) def natural_key(self): """ Django pattern function for serializing a book by its natural key. Used only by the ForeignKeyWidget using use_natural_foreign_keys. """ return (self.name,) + self.author.natural_key() natural_key.dependencies = ["core.Author"] def __str__(self): return self.name class Parent(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Child(models.Model): parent = models.ForeignKey(Parent, on_delete=models.CASCADE) name = models.CharField(max_length=100) def __str__(self): return "%s - child of %s" % (self.name, self.parent.name) class Profile(models.Model): user = models.OneToOneField("auth.User", on_delete=models.CASCADE) is_private = models.BooleanField(default=True) class Entry(models.Model): user = models.ForeignKey("auth.User", on_delete=models.CASCADE) class Role(models.Model): user = models.OneToOneField("auth.User", on_delete=models.CASCADE, null=True) class Person(models.Model): role = models.ForeignKey(Role, on_delete=models.CASCADE) class WithDefault(models.Model): name = models.CharField("Default", max_length=75, blank=True, default="foo_bar") def random_name(): chars = string.ascii_lowercase return "".join(random.SystemRandom().choice(chars) for _ in range(100)) class WithDynamicDefault(models.Model): name = models.CharField("Dyn Default", max_length=100, default=random_name) class WithFloatField(models.Model): f = models.FloatField(blank=True, null=True) class EBook(Book): """Book proxy model to have a separate admin url access and name""" class Meta: proxy = True class NamedAuthor(models.Model): """Class with a named primary key""" name = models.CharField(max_length=256, primary_key=True) class UUIDCategory(models.Model): catid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=32) def __str__(self): return self.name class Meta: verbose_name_plural = "UUID categories" class UUIDBook(models.Model): """A model which uses a UUID pk (issue 1274)""" id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField("Book name", max_length=100) author = models.ForeignKey( NamedAuthor, blank=True, null=True, on_delete=models.CASCADE ) categories = models.ManyToManyField(UUIDCategory, blank=True) def __str__(self): return self.name class WithPositiveIntegerFields(models.Model): big = models.PositiveBigIntegerField(null=True) small = models.PositiveSmallIntegerField(null=True) django-import-export-4.0.9/tests/core/templates/000077500000000000000000000000001463433610200217075ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/templates/core/000077500000000000000000000000001463433610200226375ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/templates/core/admin/000077500000000000000000000000001463433610200237275ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/templates/core/admin/change_list.html000066400000000000000000000004051463433610200270740ustar00rootroot00000000000000{% extends "admin/change_list.html" %} {% comment %} A template used for testing customizations to the change_list view (See #1483). {% endcomment %} {% block object-tools-items %} {{ block.super }} {% endblock %} django-import-export-4.0.9/tests/core/templates/core/category_list.html000066400000000000000000000001011463433610200263650ustar00rootroot00000000000000{{ form }} {% for obj in object_list %} {{ obj }} {% endfor %} django-import-export-4.0.9/tests/core/tests/000077500000000000000000000000001463433610200210535ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/__init__.py000066400000000000000000000000001463433610200231520ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/admin_integration/000077500000000000000000000000001463433610200245465ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/admin_integration/__init__.py000066400000000000000000000000001463433610200266450ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/admin_integration/mixins.py000066400000000000000000000072441463433610200264360ustar00rootroot00000000000000import os from datetime import datetime from core.admin import BookAdmin from django.contrib.auth.models import User from import_export.formats.base_formats import DEFAULT_FORMATS class AdminTestMixin(object): category_change_url = "/admin/core/category/" uuid_category_change_url = "/admin/core/uuidcategory/" category_export_url = "/admin/core/category/export/" uuid_category_export_url = "/admin/core/uuidcategory/export/" book_import_url = "/admin/core/book/import/" book_export_url = "/admin/core/book/export/" ebook_import_url = "/admin/core/ebook/import/" ebook_export_url = "/admin/core/ebook/export/" book_process_import_url = "/admin/core/book/process_import/" legacybook_import_url = "/admin/core/legacybook/import/" legacybook_process_import_url = "/admin/core/legacybook/process_import/" child_import_url = "/admin/core/child/import/" child_process_import_url = "/admin/core/child/process_import/" def setUp(self): super().setUp() self.user = User.objects.create_user("admin", "admin@example.com", "password") self.user.is_staff = True self.user.is_superuser = True self.user.save() self.client.login(username="admin", password="password") def _do_import_post( self, url, filename, input_format=0, encoding=None, resource=None, follow=False, data=None, ): input_format = input_format filename = os.path.join( os.path.dirname(__file__), os.path.pardir, os.path.pardir, "exports", filename, ) with open(filename, "rb") as f: if data is None: data = dict() data.update( { "format": str(input_format), "import_file": f, } ) if encoding: BookAdmin.from_encoding = encoding if resource: data.update({"resource": resource}) response = self.client.post(url, data, follow=follow) return response def _assert_string_in_response( self, url, filename, input_format, encoding=None, str_in_response=None, follow=False, status_code=200, ): response = self._do_import_post( url, filename, input_format, encoding=encoding, follow=follow ) self.assertEqual(response.status_code, status_code) self.assertIn("result", response.context) self.assertFalse(response.context["result"].has_errors()) if str_in_response is not None: self.assertContains(response, str_in_response) def _get_input_format_index(self, format): for i, f in enumerate(DEFAULT_FORMATS): if f().get_title() == format: xlsx_index = i break else: raise Exception( "Unable to find %s format. DEFAULT_FORMATS: %r" % (format, DEFAULT_FORMATS) ) return xlsx_index def _check_export_file_response( self, response, target_file_contents, file_prefix="Book" ): date_str = datetime.now().strftime("%Y-%m-%d") self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="{}-{}.csv"'.format(file_prefix, date_str), ) self.assertEqual(target_file_contents.encode(), response.content) django-import-export-4.0.9/tests/core/tests/admin_integration/test_action_export.py000066400000000000000000000322531463433610200310420ustar00rootroot00000000000000from datetime import datetime from unittest import mock from unittest.mock import MagicMock, PropertyMock, patch from core.admin import CategoryAdmin from core.models import Book, Category, UUIDCategory from core.tests.admin_integration.mixins import AdminTestMixin from django.contrib import admin from django.contrib.admin import AdminSite from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied from django.http import HttpRequest from django.test import RequestFactory from django.test.testcases import TestCase from django.test.utils import override_settings from django.urls import reverse from import_export.admin import ExportMixin class ExportActionAdminIntegrationTest(AdminTestMixin, TestCase): def setUp(self): super().setUp() self.cat1 = Category.objects.create(name="Cat 1") self.cat2 = Category.objects.create(name="Cat 2") # fields payload for `CategoryResource` - # to export using `SelectableFieldsExportForm` self.resource_fields_payload = { "categoryresource_id": True, "categoryresource_name": True, } def _check_export_response(self, response): self.assertContains(response, self.cat1.name, status_code=200) self.assertNotContains(response, self.cat2.name, status_code=200) self.assertTrue(response.has_header("Content-Disposition")) date_str = datetime.now().strftime("%Y-%m-%d") self.assertEqual( response["Content-Disposition"], 'attachment; filename="Category-{}.csv"'.format(date_str), ) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI=True) def test_export_skips_export_ui_page(self): data = { "action": ["export_admin_action"], "_selected_action": [str(self.cat1.id)], } response = self.client.post(self.category_change_url, data) self._check_export_response(response) def test_export_displays_ui_select_page(self): data = { "action": ["export_admin_action"], "_selected_action": [str(self.cat1.id)], } response = self.client.post(self.category_change_url, data) self.assertEqual(response.status_code, 200) self.assertIn("form", response.context) export_form = response.context["form"] data = export_form.initial self.assertEqual([self.cat1.id], data["export_items"]) self.assertIn("Export 1 selected item.", str(response.content)) def test_export_displays_ui_select_page_multiple_items(self): data = { "action": ["export_admin_action"], "_selected_action": [str(self.cat1.id), str(self.cat2.id)], } response = self.client.post(self.category_change_url, data) self.assertEqual(response.status_code, 200) self.assertIn("form", response.context) export_form = response.context["form"] data = export_form.initial self.assertEqual( sorted([self.cat1.id, self.cat2.id]), sorted(data["export_items"]) ) self.assertIn("Export 2 selected items.", str(response.content)) def test_action_export_model_with_custom_PK(self): # issue 1800 cat = UUIDCategory.objects.create(name="UUIDCategory") data = { "action": ["export_admin_action"], "_selected_action": [str(cat.pk)], } response = self.client.post(self.uuid_category_change_url, data) self.assertEqual(response.status_code, 200) self.assertIn("form", response.context) export_form = response.context["form"] data = export_form.initial self.assertEqual([cat.pk], data["export_items"]) self.assertIn("Export 1 selected item.", str(response.content)) def test_export_post(self): # create a POST request with data selected from the 'action' export data = { "format": "0", "export_items": [str(self.cat1.id)], **self.resource_fields_payload, } date_str = datetime.now().strftime("%Y-%m-%d") response = self.client.post(self.category_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="Category-{}.csv"'.format(date_str), ) target_str = f"id,name\r\n{self.cat1.id},Cat 1\r\n" self.assertEqual(target_str.encode(), response.content) def test_export_admin_action(self): with mock.patch( "core.admin.CategoryAdmin.export_admin_action" ) as mock_export_admin_action: response = self.client.post( self.category_change_url, { "action": "export_admin_action", "index": "0", "selected_across": "0", "_selected_action": "0", }, ) self.assertTrue(200 <= response.status_code <= 399) mock_export_admin_action.assert_called() def test_export_admin_action_with_restricted_pks(self): data = { "format": "0", "export_items": [str(self.cat1.id)], **self.resource_fields_payload, } # mock returning a set of pks which is not in the submitted range with mock.patch( "import_export.admin.ExportMixin.get_valid_export_item_pks" ) as mock_valid_pks: mock_valid_pks.return_value = [999] response = self.client.post(self.category_export_url, data) self.assertEqual(response.status_code, 200) self.assertIn( "Select a valid choice. " f"{self.cat1.id} is not one of the available choices.", str(response.content), ) def test_get_export_data_raises_PermissionDenied_when_no_export_permission_assigned( self, ): request = MagicMock(spec=HttpRequest) class TestMixin(ExportMixin): model = Book def has_export_permission(self, request): return False m = TestMixin() with self.assertRaises(PermissionDenied): m.get_export_data("0", request, Book.objects.none()) class TestExportButtonOnChangeForm(AdminTestMixin, TestCase): def setUp(self): super().setUp() self.cat1 = Category.objects.create(name="Cat 1") self.change_url = reverse( "%s:%s_%s_change" % ( "admin", "core", "category", ), args=[self.cat1.id], ) self.target_str = ( '' ) def test_export_button_on_change_form(self): response = self.client.get(self.change_url) self.assertIn( self.target_str, str(response.content), ) response = self.client.post( self.change_url, data={"_export-item": "Export", "name": self.cat1.name} ) self.assertIn("Export 1 selected item", str(response.content)) def test_export_button_on_change_form_for_custom_pk(self): self.cat1 = UUIDCategory.objects.create(name="Cat 1") self.change_url = reverse( "%s:%s_%s_change" % ( "admin", "core", "uuidcategory", ), args=[self.cat1.pk], ) response = self.client.get(self.change_url) self.assertIn( self.target_str, str(response.content), ) response = self.client.post( self.change_url, data={"_export-item": "Export", "name": self.cat1.name} ) self.assertIn("Export 1 selected item", str(response.content)) def test_save_button_on_change_form(self): # test default behavior is retained when saving an instance ChangeForm response = self.client.post( self.change_url, data={"_save": "Save", "name": self.cat1.name}, follow=True ) target_str = f"The category.*{self.cat1.name}.*was changed successfully." self.assertRegex(str(response.content), target_str) def test_export_button_on_change_form_disabled(self): class MockCategoryAdmin(CategoryAdmin): show_change_form_export = True factory = RequestFactory() category_admin = MockCategoryAdmin(Category, admin.site) request = factory.get(self.change_url) request.user = self.user response = category_admin.change_view(request, str(self.cat1.id)) response.render() self.assertIn(self.target_str, str(response.content)) category_admin.show_change_form_export = False response = category_admin.change_view(request, str(self.cat1.id)) response.render() self.assertNotIn(self.target_str, str(response.content)) class TestSkipExportFormFromAction(AdminTestMixin, TestCase): """ Test config values when export is initiated from the 'Export' action in the action menu. """ def setUp(self): super().setUp() self.cat1 = Category.objects.create(name="Cat 1") self.queryset = Category.objects.all() self.model_admin = CategoryAdmin(Category, AdminSite()) factory = RequestFactory() data = { "action": ["export_admin_action"], "_selected_action": [str(self.cat1.id)], } self.request = factory.post(self.category_change_url, data=data) self.request.user = User.objects.create_user("admin1") def test_skip_export_form_from_action_enabled(self): self.model_admin.skip_export_form_from_action = True response = self.model_admin.export_admin_action(self.request, self.queryset) target_file_contents = "id,name\r\n" f"{self.cat1.id},Cat 1\r\n" self.assertEqual(target_file_contents.encode(), response.content) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI=True) def test_skip_export_form_from_action_setting_enabled(self): response = self.model_admin.export_admin_action(self.request, self.queryset) target_file_contents = "id,name\r\n" f"{self.cat1.id},Cat 1\r\n" self.assertEqual(target_file_contents.encode(), response.content) class TestSkipExportFormFromChangeForm(AdminTestMixin, TestCase): """ Test config values when export is initiated from the 'Export' button on the Change form. """ def setUp(self): super().setUp() self.cat1 = Category.objects.create(name="Cat 1") self.queryset = Category.objects.all() self.model_admin = CategoryAdmin(Category, AdminSite()) self.change_url = reverse( "%s:%s_%s_change" % ( "admin", "core", "category", ), args=[self.cat1.id], ) factory = RequestFactory() self.request = factory.post( self.change_url, data={"_export-item": "Export", "name": self.cat1.name} ) self.request.user = User.objects.create_user("admin1") def test_export_button_on_change_form_skip_export_form_from_action_enabled(self): self.model_admin.skip_export_form_from_action = True response = self.model_admin.export_admin_action(self.request, self.queryset) target_file_contents = "id,name\r\n" f"{self.cat1.id},Cat 1\r\n" self.assertEqual(target_file_contents.encode(), response.content) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI=True) def test_export_button_on_change_form_skip_export_form_from_action_setting_enabled( self, ): self.model_admin.skip_export_form_from_action = True response = self.model_admin.export_admin_action(self.request, self.queryset) target_file_contents = "id,name\r\n" f"{self.cat1.id},Cat 1\r\n" self.assertEqual(target_file_contents.encode(), response.content) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI=True) def test_export_button_on_change_form_skip_export_setting_enabled(self): # this property has no effect - IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI # should be set instead response = self.client.post( self.change_url, data={"_export-item": "Export", "name": self.cat1.name} ) target_re = r"This exporter will export the following fields:" self.assertRegex(str(response.content), target_re) def test_export_button_on_change_form_skip_export_form_enabled(self): # this property has no effect - skip_export_form_from_action # should be set instead with patch( "core.admin.CategoryAdmin.skip_export_form", new_callable=PropertyMock, return_value=True, ): response = self.client.post( self.change_url, data={"_export-item": "Export", "name": self.cat1.name} ) target_re = r"This exporter will export the following fields:" self.assertRegex(str(response.content), target_re) django-import-export-4.0.9/tests/core/tests/admin_integration/test_export.py000066400000000000000000000575131463433610200275130ustar00rootroot00000000000000from datetime import date, datetime from io import BytesIO from unittest import mock from unittest.mock import MagicMock, PropertyMock, patch import chardet import tablib from core.admin import BookAdmin, BookResource, EBookResource from core.models import Author, Book, EBook, UUIDCategory from core.tests.admin_integration.mixins import AdminTestMixin from core.tests.utils import ignore_utcnow_deprecation_warning from django.contrib.admin.sites import AdminSite from django.contrib.admin.views.main import ChangeList from django.contrib.auth.models import User from django.core.exceptions import FieldError from django.http import HttpRequest from django.test import RequestFactory from django.test.testcases import TestCase from django.test.utils import override_settings from openpyxl.reader.excel import load_workbook from tablib import Dataset from import_export import formats from import_export.admin import ExportActionMixin, ExportMixin from import_export.formats.base_formats import XLSX class ExportAdminIntegrationTest(AdminTestMixin, TestCase): def setUp(self) -> None: super().setUp() self.bookresource_export_fields_payload = { "bookresource_id": True, "bookresource_name": True, "bookresource_author_email": True, "bookresource_categories": True, } def test_export(self): response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) self.assertNotIn("Export 0 selected items.", str(response.content)) form = response.context["form"] self.assertEqual(2, len(form.fields["resource"].choices)) data = {"format": "0", **self.bookresource_export_fields_payload} date_str = datetime.now().strftime("%Y-%m-%d") # Should not contain COUNT queries from ModelAdmin.get_results() with self.assertNumQueries(5): response = self.client.post(self.book_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="Book-{}.csv"'.format(date_str), ) self.assertEqual( b"id,name,author_email,categories\r\n", response.content, ) def test_export_with_skip_export_form_from_action(self): # setting should have no effect with patch( "core.admin.BookAdmin.skip_export_form_from_action", new_callable=PropertyMock, return_value=True, ): response = self.client.get(self.book_export_url) target_re = r"This exporter will export the following fields:" self.assertRegex(str(response.content), target_re) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI=True) def test_export_with_skip_export_form_from_action_setting(self): # setting should have no effect response = self.client.get(self.book_export_url) target_re = r"This exporter will export the following fields:" self.assertRegex(str(response.content), target_re) @mock.patch("core.admin.BookAdmin.get_export_resource_kwargs") def test_export_passes_export_resource_kwargs( self, mock_get_export_resource_kwargs ): # issue 1738 mock_get_export_resource_kwargs.return_value = {"a": 1} response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) self.assertEqual(2, mock_get_export_resource_kwargs.call_count) def book_resource_init(self, **kwargs): # stub call to the resource constructor pass @mock.patch.object(BookResource, "__init__", book_resource_init) def test_export_passes_no_resource_constructor_params(self): # issue 1716 # assert that the export call with a no-arg constructor # does not crash response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) def test_get_export_queryset(self): model_admin = BookAdmin(Book, AdminSite()) factory = RequestFactory() request = factory.get(self.book_export_url) request.user = User.objects.create_user("admin1") call_number = 0 class MyChangeList(ChangeList): def get_queryset(self, request): nonlocal call_number call_number += 1 return super().get_queryset(request) model_admin.get_changelist = lambda request: MyChangeList with patch.object(model_admin, "get_paginator") as mock_get_paginator: with self.assertNumQueries(4): queryset = model_admin.get_export_queryset(request) mock_get_paginator.assert_not_called() self.assertEqual(call_number, 1) self.assertEqual(queryset.count(), Book.objects.count()) def test_get_export_queryset_no_queryset_init(self): """Test if user has own ChangeList which doesn't store queryset during init""" model_admin = BookAdmin(Book, AdminSite()) factory = RequestFactory() request = factory.get(self.book_export_url) request.user = User.objects.create_user("admin1") call_number = 0 class MyChangeList(ChangeList): def __init__(self, *args, **kwargs): self.filter_params = {} self.model_admin = kwargs.pop("model_admin") self.list_filter = kwargs.pop("list_filter") self.model = kwargs.pop("model") self.date_hierarchy = kwargs.pop("date_hierarchy") self.root_queryset = self.model_admin.get_queryset(request) self.list_select_related = kwargs.pop("list_select_related") self.list_display = kwargs.pop("list_display") self.lookup_opts = self.model._meta self.params = {} self.query = "" def get_queryset(self, request): nonlocal call_number call_number += 1 return super().get_queryset(request) model_admin.get_changelist = lambda request: MyChangeList with patch.object(model_admin, "get_paginator") as mock_get_paginator: with self.assertNumQueries(4): queryset = model_admin.get_export_queryset(request) mock_get_paginator.assert_not_called() self.assertEqual(call_number, 1) self.assertEqual(queryset.count(), Book.objects.count()) def test_get_export_form_single_resource(self): response = self.client.get("/admin/core/category/export/") self.assertEqual(response.status_code, 200) self.assertNotIn("Export 0 selected items.", str(response.content)) form = response.context["form"] self.assertEqual(0, len(form.fields["resource"].choices)) self.assertTrue(form.fields["resource"].widget.attrs["readonly"]) self.assertIn("CategoryResource", str(response.content)) self.assertNotIn('select name="resource"', str(response.content)) def test_get_export_FieldError(self): # issue 1723 with mock.patch("import_export.resources.Resource.export") as mock_export: mock_export.side_effect = FieldError("some unknown error") data = { "format": "0", "resource": 1, "booknameresource_id": True, "booknameresource_name": True, } response = self.client.post(self.book_export_url, data) self.assertEqual(response.status_code, 200) target_msg = "Some unknown error" self.assertIn(target_msg, str(response.content)) def test_export_second_resource(self): response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) self.assertContains(response, "Export/Import only book names") data = { "format": "0", "resource": 1, # Second resource is `BookNameResource` "booknameresource_id": True, "booknameresource_name": True, } date_str = datetime.now().strftime("%Y-%m-%d") response = self.client.post(self.book_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="Book-{}.csv"'.format(date_str), ) self.assertEqual(b"id,name\r\n", response.content) def test_export_displays_resources_fields(self): response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) self.assertEqual( response.context["fields_list"], [ ( "BookResource", [ "id", "name", "author", "author_email", "imported", "published", "published_time", "price", "added", "categories", ], ), ("Export/Import only book names", ["id", "name"]), ], ) @override_settings(EXPORT_FORMATS=[XLSX]) def test_get_export_form_single_format(self): response = self.client.get("/admin/core/category/export/") form = response.context["form"] self.assertEqual(1, len(form.fields["format"].choices)) self.assertTrue(form.fields["format"].widget.attrs["readonly"]) self.assertIn("xlsx", str(response.content)) self.assertNotIn('select name="format"', str(response.content)) @override_settings(EXPORT_FORMATS=[]) def test_export_empty_export_formats(self): with self.assertRaisesRegex(ValueError, "invalid formats list"): self.client.get("/admin/core/category/export/") def test_returns_xlsx_export(self): response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) xlsx_index = self._get_input_format_index("xlsx") data = {"format": str(xlsx_index), **self.bookresource_export_fields_payload} response = self.client.post(self.book_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual( response["Content-Type"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ) @ignore_utcnow_deprecation_warning @override_settings(IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT=True) def test_export_escape_formulae(self): Book.objects.create(id=1, name="=SUM(1+1)") Book.objects.create(id=2, name="") response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) xlsx_index = self._get_input_format_index("xlsx") data = {"format": str(xlsx_index), **self.bookresource_export_fields_payload} response = self.client.post(self.book_export_url, data) self.assertEqual(response.status_code, 200) content = response.content wb = load_workbook(filename=BytesIO(content)) self.assertEqual("", wb.active["B2"].value) self.assertEqual("SUM(1+1)", wb.active["B3"].value) @override_settings(IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT=True) def test_export_escape_formulae_csv(self): b1 = Book.objects.create(id=1, name="=SUM(1+1)") response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) index = self._get_input_format_index("csv") data = { "format": str(index), "bookresource_id": True, "bookresource_name": True, } response = self.client.post(self.book_export_url, data) self.assertIn( f"{b1.id},SUM(1+1)\r\n".encode(), response.content, ) @override_settings(IMPORT_EXPORT_ESCAPE_FORMULAE_ON_EXPORT=False) def test_export_escape_formulae_csv_false(self): b1 = Book.objects.create(id=1, name="=SUM(1+1)") response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) index = self._get_input_format_index("csv") data = { "format": str(index), "bookresource_id": True, "bookresource_name": True, } response = self.client.post(self.book_export_url, data) self.assertIn( f"{b1.id},=SUM(1+1)\r\n".encode(), response.content, ) def test_export_model_with_custom_PK(self): # issue 1800 UUIDCategory.objects.create(name="UUIDCategory") response = self.client.get(self.uuid_category_export_url) self.assertEqual(response.status_code, 200) self.assertContains(response, "UUIDCategoryResource") def test_export_get(self): """ Test export view get method. Test that field checkboxes are displayed with names as discussed under #1846 """ response = self.client.get(self.ebook_export_url) self.assertContains( response, '", html=True, ) self.assertContains( response, '', html=True, ) def test_export_with_custom_field(self): # issue 1808 a = Author.objects.create(id=11, name="Ian Fleming") data = { "format": "0", "author": a.id, "resource": "", "ebookresource_id": True, "ebookresource_author_email": True, "ebookresource_name": True, "ebookresource_published": True, } date_str = datetime.now().strftime("%Y-%m-%d") response = self.client.post(self.ebook_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="EBook-{}.csv"'.format(date_str), ) self.assertEqual( b"id,Email of the author,name,published_date\r\n", response.content ) class FilteredExportAdminIntegrationTest(AdminTestMixin, TestCase): fixtures = ["category", "book", "author"] def test_export_filters_by_form_param(self): # issue 1578 author = Author.objects.get(name="Ian Fleming") data = { "format": "0", "author": str(author.id), "ebookresource_id": True, "ebookresource_author_email": True, "ebookresource_name": True, "ebookresource_published": True, } date_str = datetime.now().strftime("%Y-%m-%d") response = self.client.post(self.ebook_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="EBook-{}.csv"'.format(date_str), ) self.assertEqual( b"id,Email of the author,name,published_date\r\n" b"5,ian@example.com,The Man with the Golden Gun,1965-04-01\r\n", response.content, ) class TestExportEncoding(TestCase): mock_request = MagicMock(spec=HttpRequest) mock_request.POST = {"format": 0, "bookresource_id": True} class TestMixin(ExportMixin): model = Book def __init__(self, test_str=None): self.test_str = test_str def get_data_for_export(self, request, queryset, **kwargs): dataset = Dataset(headers=["id", "name"]) dataset.append([1, self.test_str]) return dataset def get_export_queryset(self, request): return list() def get_export_filename(self, request, queryset, file_format): return "f" def setUp(self): self.file_format = formats.base_formats.CSV() self.export_mixin = self.TestMixin(test_str="teststr") def test_to_encoding_not_set_default_encoding_is_utf8(self): self.export_mixin = self.TestMixin(test_str="teststr") data = self.export_mixin.get_export_data( self.file_format, self.mock_request, list() ) csv_dataset = tablib.import_set(data) self.assertEqual("teststr", csv_dataset.dict[0]["name"]) def test_to_encoding_set(self): self.export_mixin = self.TestMixin(test_str="ハローワールド") data = self.export_mixin.get_export_data( self.file_format, self.mock_request, list(), encoding="shift-jis" ) encoding = chardet.detect(bytes(data))["encoding"] self.assertEqual("SHIFT_JIS", encoding) def test_to_encoding_set_incorrect(self): self.export_mixin = self.TestMixin() with self.assertRaises(LookupError): self.export_mixin.get_export_data( self.file_format, self.mock_request, list(), encoding="bad-encoding", ) @ignore_utcnow_deprecation_warning def test_to_encoding_not_set_for_binary_file(self): self.export_mixin = self.TestMixin(test_str="teststr") self.file_format = formats.base_formats.XLSX() data = self.export_mixin.get_export_data( self.file_format, self.mock_request, list(), ) binary_dataset = tablib.import_set(data) self.assertEqual("teststr", binary_dataset.dict[0]["name"]) def test_export_action_to_encoding(self): self.export_mixin.to_encoding = "utf-8" with mock.patch( "import_export.admin.ExportMixin.get_export_data" ) as mock_get_export_data: self.export_mixin.export_action(self.mock_request) encoding_kwarg = mock_get_export_data.call_args_list[0][1]["encoding"] self.assertEqual("utf-8", encoding_kwarg) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_ACTION_EXPORT_UI=True) def test_export_admin_action_to_encoding(self): class TestExportActionMixin(ExportActionMixin): def get_export_filename(self, request, queryset, file_format): return "f" self.export_mixin = TestExportActionMixin() self.export_mixin.to_encoding = "utf-8" with mock.patch( "import_export.admin.ExportMixin.get_export_data" ) as mock_get_export_data: self.export_mixin.export_admin_action(self.mock_request, list()) encoding_kwarg = mock_get_export_data.call_args_list[0][1]["encoding"] self.assertEqual("utf-8", encoding_kwarg) class TestSelectableFieldsExportPage(AdminTestMixin, TestCase): def test_selectable_fields_rendered_with_resource_index_attribute(self) -> None: response = self.client.get(self.book_export_url) self.assertEqual(response.status_code, 200) form_resources = response.context["form"].resources response_content = str(response.content) for index, resource in enumerate(form_resources): resource_fields = resource().get_export_order() self.assertEqual( response_content.count(f'resource-index="{index}"'), len(resource_fields), ) class CustomColumnNameExportTest(AdminTestMixin, TestCase): """Test export ok when column name is defined in fields list (issue 1828).""" def setUp(self): super().setUp() EBookResource._meta.fields = ("id", "author_email", "name", "published_date") def tearDown(self): super().tearDown() EBookResource._meta.fields = ("id", "author_email", "name", "published") def test_export_with_custom_field(self): a = Author.objects.create(id=11, name="Ian Fleming") book = Book.objects.create( name="Moonraker", author=a, published=date(1955, 4, 5) ) data = { "format": "0", "author": a.id, "resource": "", "ebookresource_id": True, "ebookresource_author_email": True, "ebookresource_name": True, "ebookresource_published_date": True, } date_str = datetime.now().strftime("%Y-%m-%d") response = self.client.post(self.ebook_export_url, data) self.assertEqual(response.status_code, 200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") self.assertEqual( response["Content-Disposition"], 'attachment; filename="EBook-{}.csv"'.format(date_str), ) s = ( "id,Email of the author,name,published_date\r\n" f"{book.id},,Moonraker,1955-04-05\r\n" ) self.assertEqual(str.encode(s), response.content) class FilteredExportTest(AdminTestMixin, TestCase): """ Tests that exports can be filtered by a custom form field. This process is demonstrated in the documentation. """ def test_filtered_export(self): a1 = Author.objects.create(id=11, name="Ian Fleming") a2 = Author.objects.create(id=12, name="James Joyce") b1 = Book.objects.create(name="Moonraker", author=a1) b2 = Book.objects.create(name="Ulysses", author=a2) response = self.client.get(self.ebook_export_url) self.assertEqual(response.status_code, 200) data = { "format": "0", "author": a1.id, "resource": "", "ebookresource_id": True, "ebookresource_name": True, } response = self.client.post(self.ebook_export_url, data) self.assertEqual(response.status_code, 200) s = "id,name\r\n" f"{b1.id},Moonraker\r\n" self.assertEqual(str.encode(s), response.content) data["author"] = a2.id response = self.client.post(self.ebook_export_url, data) self.assertEqual(response.status_code, 200) s = "id,name\r\n" f"{b2.id},Ulysses\r\n" self.assertEqual(str.encode(s), response.content) class SkipExportFormResourceConfigTest(AdminTestMixin, TestCase): def setUp(self): super().setUp() self.model_admin = BookAdmin(EBook, AdminSite()) book = Book.objects.create(name="Moonraker", published=date(1955, 4, 5)) self.target_file_contents = ( "id,name,author,author_email,imported,published," "published_time,price,added,categories\r\n" f"{book.id},Moonraker,,,0,1955-04-05,,,,\r\n" ) factory = RequestFactory() self.request = factory.get(self.book_export_url, follow=True) self.request.user = User.objects.create_user("admin1") def test_export_skips_export_form(self): self.model_admin.skip_export_form = True response = self.model_admin.export_action(self.request) self._check_export_file_response( response, self.target_file_contents, file_prefix="EBook" ) @override_settings(IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI=True) def test_export_skips_export_form_setting_enabled(self): response = self.model_admin.export_action(self.request) self._check_export_file_response( response, self.target_file_contents, file_prefix="EBook" ) django-import-export-4.0.9/tests/core/tests/admin_integration/test_import.py000066400000000000000000001241071463433610200274760ustar00rootroot00000000000000import os import warnings from io import StringIO from unittest import mock from unittest.mock import PropertyMock, patch from core.admin import ( AuthorAdmin, BookAdmin, CustomBookAdmin, EBookResource, ImportMixin, ) from core.models import Author, Book, EBook, Parent from core.tests.admin_integration.mixins import AdminTestMixin from django.contrib.admin.models import DELETION, LogEntry from django.contrib.admin.sites import AdminSite from django.contrib.auth.models import User from django.test import RequestFactory from django.test.testcases import TestCase, TransactionTestCase from django.test.utils import override_settings from django.utils.translation import gettext_lazy as _ from import_export.admin import ExportMixin from import_export.exceptions import FieldError from import_export.formats import base_formats from import_export.formats.base_formats import XLSX from import_export.resources import ModelResource class ImportAdminIntegrationTest(AdminTestMixin, TestCase): def test_import_export_template(self): response = self.client.get("/admin/core/book/") self.assertEqual(response.status_code, 200) self.assertTemplateUsed( response, "admin/import_export/change_list_import_export.html" ) self.assertTemplateUsed(response, "admin/change_list.html") self.assertTemplateUsed(response, "core/admin/change_list.html") self.assertContains(response, _("Import")) self.assertContains(response, _("Export")) self.assertContains(response, "Custom change list item") @override_settings(TEMPLATE_STRING_IF_INVALID="INVALID_VARIABLE") def test_import(self): # GET the import form response = self.client.get(self.book_import_url) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "admin/import_export/import.html") self.assertContains(response, 'form action=""') response = self._do_import_post(self.book_import_url, "books.csv") self.assertEqual(response.status_code, 200) self.assertIn("result", response.context) self.assertFalse(response.context["result"].has_errors()) self.assertIn("confirm_form", response.context) confirm_form = response.context["confirm_form"] data = confirm_form.initial self.assertEqual(data["original_file_name"], "books.csv") response = self.client.post(self.book_process_import_url, data, follow=True) self.assertEqual(response.status_code, 200) self.assertContains( response, _( "Import finished: {} new, {} updated, {} deleted and {} skipped {}." ).format(1, 0, 0, 0, Book._meta.verbose_name_plural), ) @patch( "core.admin.BookAdmin.skip_import_confirm", new_callable=PropertyMock, return_value=True, ) def test_import_skips_confirm_page(self, mock_skip_import_confirm): response = self._do_import_post(self.book_import_url, "books.csv", follow=True) self.assertEqual(response.status_code, 200) self.assertContains( response, _( "Import finished: {} new, {} updated, {} deleted and {} skipped {}." ).format(1, 0, 0, 0, Book._meta.verbose_name_plural), ) @override_settings(DEBUG=True) def test_correct_scripts_declared_when_debug_is_true(self): # GET the import form response = self.client.get(self.book_import_url) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "admin/import_export/import.html") self.assertContains(response, 'form action=""') self.assertContains( response, '', ) ) # TODO removed pending tablib v4 - see #1627 # def test_export_html_escape(self): # res = self.format.export_data(self.dataset) # self.assertIn( # ( # "1" # "good_user" # "John Doe" # "2" # "evil_user" # '<script>alert("I want to steal your credit card data")' # "</script>" # ), # res, # ) class YAMLFormatTest(TestCase): def test_numeric_widget_export(self): dataset = tablib.Dataset(headers=["id", "username"]) dataset.append((NumberWidget().render(1), "x")) res = base_formats.YAML().export_data(dataset) self.assertEqual("- {id: '1', username: x}\n", res) django-import-export-4.0.9/tests/core/tests/test_declarative.py000066400000000000000000000071721463433610200247560ustar00rootroot00000000000000from django.test import TestCase from import_export import fields from import_export.resources import Resource from .resources import MyResource class TestInheritance(TestCase): # Issue 140 Attributes aren't inherited by subclasses def test_inheritance(self): class A(MyResource): inherited = fields.Field() class Meta: import_id_fields = ("email",) class B(A): local = fields.Field() class Meta: export_order = ("email", "extra") resource = B() self.assertIn("name", resource.fields) self.assertIn("inherited", resource.fields) self.assertIn("local", resource.fields) self.assertEqual( resource.get_export_headers(), ["email", "extra", "name", "inherited", "local"], ) self.assertEqual(resource._meta.import_id_fields, ("email",)) def test_inheritance_with_custom_attributes(self): class A(MyResource): inherited = fields.Field() class Meta: import_id_fields = ("email",) custom_attribute = True class B(A): local = fields.Field() resource = B() self.assertEqual(resource._meta.custom_attribute, True) class TestMultiInheritance(TestCase): def test_meta_inheritance_3_levels(self): # issue 1363 class GrandparentResource(Resource): class Meta: batch_size = 666 class ParentResource(GrandparentResource): class Meta: pass class ChildResource(ParentResource): class Meta: pass parent_resource = ParentResource() child_resource = ChildResource() self.assertEqual(666, parent_resource._meta.batch_size) self.assertEqual(666, child_resource._meta.batch_size) def test_meta_inheritance_2_levels(self): class GrandparentResource(Resource): class Meta: batch_size = 666 class ParentResource(GrandparentResource): class Meta: batch_size = 333 class ChildResource(ParentResource): class Meta: pass parent_resource = ParentResource() child_resource = ChildResource() self.assertEqual(333, parent_resource._meta.batch_size) self.assertEqual(333, child_resource._meta.batch_size) def test_meta_inheritance_1_level(self): class GrandparentResource(Resource): class Meta: batch_size = 666 class ParentResource(GrandparentResource): class Meta: batch_size = 333 class ChildResource(ParentResource): class Meta: batch_size = 111 parent_resource = ParentResource() child_resource = ChildResource() self.assertEqual(333, parent_resource._meta.batch_size) self.assertEqual(111, child_resource._meta.batch_size) def test_meta_inheritance_default(self): class GrandparentResource(Resource): class Meta: pass class ParentResource(GrandparentResource): class Meta: pass class ChildResource(ParentResource): class Meta: pass grandparent_resource = GrandparentResource() parent_resource = ParentResource() child_resource = ChildResource() self.assertEqual(1000, grandparent_resource._meta.batch_size) self.assertEqual(1000, parent_resource._meta.batch_size) self.assertEqual(1000, child_resource._meta.batch_size) django-import-export-4.0.9/tests/core/tests/test_fields.py000066400000000000000000000127411463433610200237370ustar00rootroot00000000000000from datetime import date from unittest import mock from django.test import TestCase from import_export import fields from import_export.exceptions import FieldError class Obj: def __init__(self, name, date=None): self.name = name self.date = date class FieldTest(TestCase): def setUp(self): self.field = fields.Field(column_name="name", attribute="name") self.row = { "name": "Foo", } self.obj = Obj(name="Foo", date=date(2012, 8, 13)) def test_clean(self): self.assertEqual(self.field.clean(self.row), self.row["name"]) def test_clean_raises_KeyError(self): self.field.column_name = "x" with self.assertRaisesRegex( KeyError, "Column 'x' not found in dataset. Available columns are: \\['name'\\]", ): self.field.clean(self.row) def test_export(self): self.assertEqual(self.field.export(self.obj), self.row["name"]) def test_export_none(self): # 1872 instance = Obj(name=None) self.assertEqual("", self.field.export(instance)) def test_save(self): self.row["name"] = "foo" self.field.save(self.obj, self.row) self.assertEqual(self.obj.name, "foo") def test_save_follow(self): class Test: class name: class follow: me = "bar" test = Test() field = fields.Field(column_name="name", attribute="name__follow__me") row = {"name": "foo"} field.save(test, row) self.assertEqual(test.name.follow.me, "foo") def test_following_attribute(self): field = fields.Field(attribute="other_obj__name") obj2 = Obj(name="bar") self.obj.other_obj = obj2 self.assertEqual(field.export(self.obj), "bar") def test_default(self): field = fields.Field(default=1, column_name="name") self.assertEqual(field.clean({"name": None}), 1) def test_default_falsy_values(self): field = fields.Field(default=1, column_name="name") self.assertEqual(field.clean({"name": 0}), 0) def test_default_falsy_values_without_default(self): field = fields.Field(column_name="name") self.assertEqual(field.clean({"name": 0}), 0) def test_saves_null_values(self): field = fields.Field( column_name="name", attribute="name", saves_null_values=False ) row = { "name": None, } field.save(self.obj, row) self.assertEqual(self.obj.name, "Foo") self.field.save(self.obj, row) self.assertIsNone(self.obj.name) def test_repr(self): self.assertEqual(repr(self.field), "") self.field.column_name = None self.assertEqual(repr(self.field), "") def testget_dehydrate_method_default(self): field = fields.Field(attribute="foo", column_name="bar") # `field_name` is the variable name defined in `Resource` resource_field_name = "field" method_name = field.get_dehydrate_method(resource_field_name) self.assertEqual(f"dehydrate_{resource_field_name}", method_name) def testget_dehydrate_method_with_custom_method_name(self): custom_dehydrate_method = "custom_method_name" field = fields.Field( attribute="foo", column_name="bar", dehydrate_method=custom_dehydrate_method ) resource_field_name = "field" method_name = field.get_dehydrate_method(resource_field_name) self.assertEqual(method_name, custom_dehydrate_method) def testget_dehydrate_method_without_params_raises_attribute_error(self): field = fields.Field(attribute="foo", column_name="bar") self.assertRaises(FieldError, field.get_dehydrate_method) def test_m2m_add_true(self): m2m_related_manager = mock.Mock(spec=["add", "set", "all"]) m2m_related_manager.all.return_value = [] self.obj.aliases = m2m_related_manager field = fields.Field(column_name="aliases", attribute="aliases", m2m_add=True) row = { "aliases": ["Foo", "Bar"], } field.save(self.obj, row, is_m2m=True) self.assertEqual(m2m_related_manager.add.call_count, 1) self.assertEqual(m2m_related_manager.set.call_count, 0) m2m_related_manager.add.assert_called_once_with("Foo", "Bar") row = { "aliases": ["apple"], } field.save(self.obj, row, is_m2m=True) m2m_related_manager.add.assert_called_with("apple") def test_m2m_add_False(self): m2m_related_manager = mock.Mock(spec=["add", "set", "all"]) self.obj.aliases = m2m_related_manager field = fields.Field(column_name="aliases", attribute="aliases") row = { "aliases": ["Foo", "Bar"], } field.save(self.obj, row, is_m2m=True) self.assertEqual(m2m_related_manager.add.call_count, 0) self.assertEqual(m2m_related_manager.set.call_count, 1) m2m_related_manager.set.assert_called_once_with(["Foo", "Bar"]) def test_get_value_with_callable(self): class CallableValue: def __call__(self): return "some val" self.obj.name = CallableValue() val = self.field.get_value(self.obj) self.assertEqual("some val", val) def test_get_value_with_no_attribute(self): self.field.attribute = None self.assertIsNone(self.field.get_value(self.obj)) django-import-export-4.0.9/tests/core/tests/test_forms.py000066400000000000000000000220751463433610200236200ustar00rootroot00000000000000import django.forms from core.models import Author from django.test import TestCase from import_export import forms, resources from import_export.formats.base_formats import CSV from .resources import BookResource, BookResourceWithStoreInstance class MyResource(resources.ModelResource): class Meta: name = "My super resource" class FormTest(TestCase): def test_formbase_init_blank_resources(self): with self.assertRaises(ValueError): forms.ImportExportFormBase(["format1"], []) def test_formbase_init_one_resource(self): resource_list = [resources.ModelResource] form = forms.ImportExportFormBase([CSV], resource_list) self.assertTrue("resource" in form.fields) self.assertEqual("ModelResource", form.fields["resource"].value) self.assertTrue(form.fields["resource"].widget.attrs["readonly"]) def test_formbase_init_two_resources(self): resource_list = [resources.ModelResource, MyResource] form = forms.ImportExportFormBase([CSV], resource_list) self.assertEqual( form.fields["resource"].choices, [(0, "ModelResource"), (1, "My super resource")], ) class ImportFormMediaTest(TestCase): def test_import_form_media(self): form = forms.ImportForm([CSV], [MyResource]) media = form.media self.assertEqual( media._css, {}, ) self.assertEqual( media._js, [ "admin/js/vendor/jquery/jquery.min.js", "admin/js/jquery.init.js", "import_export/guess_format.js", ], ) def test_import_form_and_custom_widget_media(self): class TestMediaWidget(django.forms.TextInput): """Dummy test widget with associated CSS and JS media.""" class Media: css = { "all": ["test.css"], } js = ["test.js"] class CustomImportForm(forms.ImportForm): """Dummy custom import form with a custom widget.""" author = django.forms.ModelChoiceField( queryset=Author.objects.none(), required=True, widget=TestMediaWidget, ) form = CustomImportForm([CSV], [MyResource]) media = form.media self.assertEqual( media._css, {"all": ["test.css"]}, ) self.assertEqual( media._js, [ "test.js", "admin/js/vendor/jquery/jquery.min.js", "admin/js/jquery.init.js", "import_export/guess_format.js", ], ) class SelectableFieldsExportFormTest(TestCase): @classmethod def setUpTestData(cls) -> None: cls.resources = (BookResource, BookResourceWithStoreInstance) cls.form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=cls.resources, ) def test_create_boolean_fields(self) -> None: form_fields = self.form.fields for resource in self.resources: fields = resource().get_export_order() for field in fields: field_name = forms.SelectableFieldsExportForm.create_boolean_field_name( resource, field ) self.assertIn(field_name, form_fields) form_field = form_fields[field_name] self.assertIsInstance(form_field, django.forms.BooleanField) def test_form_raises_validation_error_when_no_resource_fields_are_selected( self, ) -> None: data = {"resource": "0", "format": "0", "bookresource_id": False} form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=self.resources, data=data ) self.assertFalse(form.is_valid()) self.assertTrue("Select at least 1 field for" in form.errors.as_text()) def test_remove_unselected_resource_fields_on_validation(self): data = {"resource": "0", "format": "0"} # Add all field values to form data for validation for resource in self.resources: for field in resource().get_export_order(): data[ forms.SelectableFieldsExportForm.create_boolean_field_name( resource, field ) ] = True form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=self.resources, data=data ) self.assertTrue(form.is_valid()) selected_resource = self.resources[0] selected_resource_fields = selected_resource().get_export_order() not_selected_resource = self.resources[1] # resource on index 0 was selected for field in not_selected_resource().get_export_order(): # Only assert fields which doesn't exist in selected resource's fields if field not in selected_resource_fields: self.assertNotIn(field, form.cleaned_data) def test_normalize_resource_field_names(self) -> None: """ Field names are combination of resource's name and field name. After validation, fields that belong to unselected resources are removed and resource name is removed from field names """ data = {"resource": "0", "format": "0"} # Add all field values to form data for validation for resource in self.resources: for field in resource().get_export_order(): data[ forms.SelectableFieldsExportForm.create_boolean_field_name( resource, field ) ] = "on" form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=self.resources, data=data ) self.assertTrue(form.is_valid()) selected_resource = self.resources[0] for field in selected_resource().get_export_order(): self.assertIn(field, form.cleaned_data) def test_get_selected_resource_fields_without_validation_raises_validation_error( self, ) -> None: self.assertRaises( django.forms.ValidationError, self.form.get_selected_resource_export_fields ) def test_get_field_label(self): """test SelectableFieldsExportForm._get_field_label""" form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=(BookResource,) ) resource = BookResource() self.assertEqual( form._get_field_label(resource, "bookresource_id"), "Bookresource Id", ) self.assertEqual( form._get_field_label(resource, "published"), "Published (published_date)" ) def test_get_selected_resrource_fields(self) -> None: data = {"resource": "0", "format": "0"} form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=self.resources, data=data ) for resource in self.resources: for field in resource().get_export_order(): data[ forms.SelectableFieldsExportForm.create_boolean_field_name( resource, field ) ] = "on" self.assertTrue(form.is_valid()) selected_resource = self.resources[0]() self.assertEqual( form.get_selected_resource_export_fields(), list(selected_resource.get_export_order()), ) def test_fields_order(self) -> None: form = forms.SelectableFieldsExportForm( formats=(CSV,), resources=(BookResource,) ) self.assertEqual( list(form.fields.keys()), [ "resource", "bookresource_id", "bookresource_name", "bookresource_author", "bookresource_author_email", "bookresource_published", "bookresource_published_time", "bookresource_price", "bookresource_added", "bookresource_categories", "format", "export_items", ], ) def test_resource_boolean_field_attributes(self) -> None: for resource_index, resource in enumerate(self.resources): resource_fields = resource().get_export_order() initial_field_checked = False for resource_field in resource_fields: field_name = forms.SelectableFieldsExportForm.create_boolean_field_name( resource, resource_field ) form_field = self.form.fields[field_name] if not initial_field_checked: self.assertTrue(form_field.initial_field) initial_field_checked = True self.assertTrue(form_field.is_selectable_field) self.assertEqual(form_field.resource_name, resource.__name__) self.assertEqual(form_field.resource_index, resource_index) self.assertEqual(form_field.widget.attrs["resource-id"], resource_index) django-import-export-4.0.9/tests/core/tests/test_import_export_tags.py000066400000000000000000000005611463433610200264170ustar00rootroot00000000000000from unittest import TestCase from import_export.templatetags import import_export_tags class TagsTest(TestCase): def test_compare_values(self): target = ( 'a' 'b' ) self.assertEqual(target, import_export_tags.compare_values("a", "b")) django-import-export-4.0.9/tests/core/tests/test_instance_loaders.py000066400000000000000000000053101463433610200260000ustar00rootroot00000000000000import tablib from core.models import Book from django.test import TestCase from import_export import instance_loaders, resources class BaseInstanceLoaderTest(TestCase): def test_get_instance(self): instance_loader = instance_loaders.BaseInstanceLoader(None) with self.assertRaises(NotImplementedError): instance_loader.get_instance(None) class ModelInstanceLoaderTest(TestCase): def setUp(self): self.resource = resources.modelresource_factory(Book)() def test_get_instance_returns_None_when_params_is_empty(self): # setting an empty array of import_id_fields will mean # that 'params' is never set self.resource._meta.import_id_fields = [] instance_loader = instance_loaders.ModelInstanceLoader(self.resource) self.assertIsNone(instance_loader.get_instance([])) class CachedInstanceLoaderTest(TestCase): def setUp(self): self.resource = resources.modelresource_factory(Book)() self.dataset = tablib.Dataset(headers=["id", "name", "author_email"]) self.book = Book.objects.create(name="Some book") self.book2 = Book.objects.create(name="Some other book") row = [str(self.book.pk), "Some book", "test@example.com"] self.dataset.append(row) self.instance_loader = instance_loaders.CachedInstanceLoader( self.resource, self.dataset ) def test_all_instances(self): self.assertTrue(self.instance_loader.all_instances) self.assertEqual(len(self.instance_loader.all_instances), 1) self.assertEqual(list(self.instance_loader.all_instances), [self.book.pk]) def test_get_instance(self): obj = self.instance_loader.get_instance(self.dataset.dict[0]) self.assertEqual(obj, self.book) class CachedInstanceLoaderWithAbsentImportIdFieldTest(TestCase): """Ensure that the cache is empty when the PK field is absent in the inbound dataset. """ def setUp(self): self.resource = resources.modelresource_factory(Book)() self.dataset = tablib.Dataset(headers=["name", "author_email"]) self.book = Book.objects.create(name="Some book") self.book2 = Book.objects.create(name="Some other book") row = ["Some book", "test@example.com"] self.dataset.append(row) self.instance_loader = instance_loaders.CachedInstanceLoader( self.resource, self.dataset ) def test_all_instances(self): self.assertEqual(self.instance_loader.all_instances, {}) self.assertEqual(len(self.instance_loader.all_instances), 0) def test_get_instance(self): obj = self.instance_loader.get_instance(self.dataset.dict[0]) self.assertEqual(obj, None) django-import-export-4.0.9/tests/core/tests/test_invalidrow.py000066400000000000000000000035731463433610200246520ustar00rootroot00000000000000from django.core.exceptions import NON_FIELD_ERRORS, ValidationError from django.test import TestCase from import_export.results import InvalidRow class InvalidRowTest(TestCase): def setUp(self): # Create a ValidationError with a mix of field-specific # and non-field-specific errors self.non_field_errors = ValidationError(["Error 1", "Error 2", "Error 3"]) self.field_errors = ValidationError( { "name": ["Error 4", "Error 5"], "birthday": ["Error 6", "Error 7"], } ) combined_error_dict = self.non_field_errors.update_error_dict( self.field_errors.error_dict.copy() ) e = ValidationError(combined_error_dict) # Create an InvalidRow instance to use in tests self.obj = InvalidRow(number=1, validation_error=e, values=["ABC", "123"]) def test_error_count(self): self.assertEqual(self.obj.error_count, 7) def test_non_field_specific_errors(self): result = self.obj.non_field_specific_errors self.assertIsInstance(result, list) self.assertEqual(result, ["Error 1", "Error 2", "Error 3"]) def test_field_specific_errors(self): result = self.obj.field_specific_errors self.assertIsInstance(result, dict) self.assertEqual(len(result), 2) self.assertEqual(result["name"], ["Error 4", "Error 5"]) self.assertEqual(result["birthday"], ["Error 6", "Error 7"]) def test_creates_error_dict_from_error_list_if_validation_error_only_has_error_list( self, ): obj = InvalidRow(number=1, validation_error=self.non_field_errors, values=[]) self.assertIsInstance(obj.error_dict, dict) self.assertIn(NON_FIELD_ERRORS, obj.error_dict) self.assertEqual( obj.error_dict[NON_FIELD_ERRORS], ["Error 1", "Error 2", "Error 3"] ) django-import-export-4.0.9/tests/core/tests/test_mixins.py000066400000000000000000000352251463433610200240020ustar00rootroot00000000000000import warnings from unittest import mock from unittest.mock import MagicMock from core.models import Book, Category from django.http import HttpRequest from django.test.testcases import TestCase from django.urls import reverse from import_export import admin, formats, forms, mixins, resources from import_export.resources import modelresource_factory class ExportViewMixinTest(TestCase): class TestExportForm(forms.ExportForm): cleaned_data = dict() def setUp(self): self.url = reverse("export-category") self.cat1 = Category.objects.create(name="Cat 1") self.cat2 = Category.objects.create(name="Cat 2") self.resource = modelresource_factory(Category) self.form = ExportViewMixinTest.TestExportForm( formats=formats.base_formats.DEFAULT_FORMATS, resources=[self.resource], ) self.form.cleaned_data["format"] = "0" def test_get(self): response = self.client.get(self.url) self.assertContains(response, self.cat1.name, status_code=200) self.assertEqual(response["Content-Type"], "text/html; charset=utf-8") def test_post(self): data = {"format": "0", "categoryresource_id": True} with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) response = self.client.post(self.url, data) self.assertContains(response, self.cat1.name, status_code=200) self.assertTrue(response.has_header("Content-Disposition")) self.assertEqual(response["Content-Type"], "text/csv") def test_get_response_raises_TypeError_when_content_type_kwarg_used(self): """ Test that HttpResponse is instantiated using the correct kwarg. """ content_type = "text/csv" class TestMixin(mixins.ExportViewFormMixin): def __init__(self): self.model = MagicMock() self.request = MagicMock(spec=HttpRequest) self.model.__name__ = "mockModel" def get_queryset(self): return MagicMock() m = TestMixin() with mock.patch("import_export.mixins.HttpResponse") as mock_http_response: # on first instantiation, raise TypeError, on second, return mock mock_http_response.side_effect = [TypeError(), mock_http_response] with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) m.form_valid(self.form) self.assertEqual( content_type, mock_http_response.call_args_list[0][1]["content_type"] ) self.assertEqual( content_type, mock_http_response.call_args_list[1][1]["mimetype"] ) def test_implements_get_filterset(self): """ test that if the class-under-test defines a get_filterset() method, then this is called as required. """ class TestMixin(mixins.ExportViewFormMixin): mock_get_filterset_call_count = 0 mock_get_filterset_class_call_count = 0 def __init__(self): self.model = MagicMock() self.request = MagicMock(spec=HttpRequest) self.model.__name__ = "mockModel" def get_filterset(self, filterset_class): self.mock_get_filterset_call_count += 1 return MagicMock() def get_filterset_class(self): self.mock_get_filterset_class_call_count += 1 return MagicMock() m = TestMixin() with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) res = m.form_valid(self.form) self.assertEqual(200, res.status_code) self.assertEqual(1, m.mock_get_filterset_call_count) self.assertEqual(1, m.mock_get_filterset_class_call_count) class BaseImportMixinTest(TestCase): def test_get_import_formats(self): class Format(object): def __init__(self, id, can_import): self.id = id self.val = can_import def can_import(self): return self.val class CanImportFormat(Format): def __init__(self): super().__init__(1, True) class CannotImportFormat(Format): def __init__(self): super().__init__(2, False) class TestBaseImportMixin(mixins.BaseImportMixin): @property def import_formats(self): return [CanImportFormat, CannotImportFormat] m = TestBaseImportMixin() formats = m.get_import_formats() self.assertEqual(1, len(formats)) self.assertEqual("CanImportFormat", formats[0].__name__) class FooResource(resources.Resource): pass class MixinModelAdminTest(TestCase): """ Tests for regression where methods in ModelAdmin with BaseImportMixin / BaseExportMixin do not get called. see #1315. """ request = MagicMock(spec=HttpRequest) class BaseImportModelAdminTest(mixins.BaseImportMixin): call_count = 0 def get_resource_classes(self, request, **kwargs): self.call_count += 1 def get_resource_kwargs(self, request, **kwargs): self.call_count += 1 class BaseExportModelAdminTest(mixins.BaseExportMixin): call_count = 0 def get_resource_classes(self, request, **kwargs): self.call_count += 1 def get_export_resource_kwargs(self, request, **kwargs): self.call_count += 1 def test_get_import_resource_class_calls_self_get_resource_class(self): admin = self.BaseImportModelAdminTest() admin.get_import_resource_classes(self.request) self.assertEqual(1, admin.call_count) def test_get_import_resource_kwargs_calls_self_get_resource_kwargs(self): admin = self.BaseImportModelAdminTest() admin.get_import_resource_kwargs(self.request) self.assertEqual(1, admin.call_count) def test_get_export_resource_class_calls_self_get_resource_class(self): admin = self.BaseExportModelAdminTest() admin.get_export_resource_classes(self.request) self.assertEqual(1, admin.call_count) def test_get_export_resource_kwargs_calls_self_get_resource_kwargs(self): admin = self.BaseExportModelAdminTest() admin.get_export_resource_kwargs(self.request) self.assertEqual(1, admin.call_count) class BaseModelResourceClassTest(mixins.BaseImportMixin, mixins.BaseExportMixin): resource_class = resources.Resource export_call_count = 0 import_call_count = 0 def get_export_resource_class(self): self.export_call_count += 1 def get_import_resource_class(self): self.import_call_count += 1 def test_deprecated_resource_class_raises_warning(self): """Test that the mixin throws error if user didn't migrate to resource_classes""" admin = self.BaseModelResourceClassTest() with self.assertWarnsRegex( DeprecationWarning, r"^The 'get_export_resource_class\(\)' method has been deprecated. " r"Please implement the new 'get_export_resource_classes\(\)' method$", ): admin.get_export_resource_classes(self.request) with self.assertWarnsRegex( DeprecationWarning, r"^The 'get_import_resource_class\(\)' method has been deprecated. " r"Please implement the new 'get_import_resource_classes\(\)' method$", ): admin.get_import_resource_classes(self.request) with self.assertWarnsRegex( DeprecationWarning, r"^The 'resource_class' field has been deprecated. " r"Please implement the new 'resource_classes' field$", ): self.assertEqual( admin.get_resource_classes(self.request), [resources.Resource] ) self.assertEqual(1, admin.export_call_count) self.assertEqual(1, admin.import_call_count) class BaseModelGetExportResourceClassTest(mixins.BaseExportMixin): def get_resource_class(self): pass def test_deprecated_get_resource_class_raises_warning(self): """Test that the mixin throws error if user didn't migrate to resource_classes""" admin = self.BaseModelGetExportResourceClassTest() with self.assertWarnsRegex( DeprecationWarning, r"^The 'get_resource_class\(\)' method has been deprecated. " r"Please implement the new 'get_resource_classes\(\)' method$", ): admin.get_resource_classes(self.request) class BaseModelAdminFaultyResourceClassesTest(mixins.BaseExportMixin): resource_classes = resources.Resource def test_faulty_resource_class_raises_exception(self): """Test fallback mechanism to old get_export_resource_class() method""" admin = self.BaseModelAdminFaultyResourceClassesTest() with self.assertRaisesRegex( Exception, r"^The resource_classes field type must be subscriptable" ): admin.get_export_resource_classes(self.request) class BaseModelAdminBothResourceTest(mixins.BaseExportMixin): call_count = 0 resource_class = resources.Resource resource_classes = [resources.Resource] def test_both_resource_class_raises_exception(self): """Test fallback mechanism to old get_export_resource_class() method""" admin = self.BaseModelAdminBothResourceTest() with self.assertRaisesRegex( Exception, "Only one of 'resource_class' and 'resource_classes' can be set" ): admin.get_export_resource_classes(self.request) class BaseModelExportChooseTest(mixins.BaseExportMixin): resource_classes = [resources.Resource, FooResource] @mock.patch("import_export.admin.SelectableFieldsExportForm") def test_choose_export_resource_class(self, form): """Test choose_export_resource_class() method""" admin = self.BaseModelExportChooseTest() self.assertEqual( admin.choose_export_resource_class(form, self.request), resources.Resource ) form.cleaned_data = {"resource": 1} self.assertEqual( admin.choose_export_resource_class(form, self.request), FooResource ) class BaseModelImportChooseTest(mixins.BaseImportMixin): resource_classes = [resources.Resource, FooResource] @mock.patch("import_export.admin.ImportForm") def test_choose_import_resource_class(self, form): """Test choose_import_resource_class() method""" admin = self.BaseModelImportChooseTest() request = MagicMock(spec=HttpRequest) self.assertEqual( admin.choose_import_resource_class(form, request), resources.Resource, ) form.cleaned_data = {"resource": 1} self.assertEqual(admin.choose_import_resource_class(form, request), FooResource) class BaseModelResourceClassOldTest(mixins.BaseImportMixin, mixins.BaseExportMixin): def get_resource_class(self): return FooResource def test_get_resource_class_old(self): """ Test that if only the old get_resource_class() method is defined, the get_export_resource_classes() and get_import_resource_classes() still return list of resources. """ admin = self.BaseModelResourceClassOldTest() with self.assertWarnsRegex( DeprecationWarning, r"^The 'get_resource_class\(\)' method has been deprecated. " r"Please implement the new 'get_resource_classes\(\)' method$", ): self.assertEqual( admin.get_export_resource_classes(self.request), [FooResource] ) with self.assertWarnsRegex( DeprecationWarning, r"^The 'get_resource_class\(\)' method has been deprecated. " r"Please implement the new 'get_resource_classes\(\)' method$", ): self.assertEqual( admin.get_import_resource_classes(self.request), [FooResource] ) class BaseExportMixinTest(TestCase): class TestBaseExportMixin(mixins.BaseExportMixin): def get_export_resource_kwargs(self, request, **kwargs): self.kwargs = kwargs return super().get_resource_kwargs(request, **kwargs) def test_get_data_for_export_sets_kwargs(self): """ issue 1268 Ensure that get_export_resource_kwargs() handles the args and kwargs arguments. """ request = MagicMock(spec=HttpRequest) m = self.TestBaseExportMixin() m.model = Book target_kwargs = {"a": 1} m.get_data_for_export(request, Book.objects.none(), **target_kwargs) self.assertEqual(m.kwargs, target_kwargs) def test_get_export_formats(self): class Format(object): def __init__(self, can_export): self.val = can_export def can_export(self): return self.val class CanExportFormat(Format): def __init__(self): super().__init__(True) class CannotExportFormat(Format): def __init__(self): super().__init__(False) class TestBaseExportMixin(mixins.BaseExportMixin): @property def export_formats(self): return [CanExportFormat, CannotExportFormat] m = TestBaseExportMixin() formats = m.get_export_formats() self.assertEqual(1, len(formats)) self.assertEqual("CanExportFormat", formats[0].__name__) class ExportMixinTest(TestCase): class TestExportMixin(admin.ExportMixin): def __init__(self, export_form) -> None: super().__init__() self.export_form = export_form def get_export_form(self): return self.export_form class TestExportForm(forms.ExportForm): pass def test_get_export_form(self): m = admin.ExportMixin() self.assertEqual(admin.ExportMixin.export_form_class, m.get_export_form_class()) def test_get_export_form_with_custom_form(self): m = self.TestExportMixin(self.TestExportForm) self.assertEqual(self.TestExportForm, m.get_export_form()) class BaseExportImportMixinTest(TestCase): class TestMixin(mixins.BaseImportExportMixin): pass def test_get_resource_kwargs(self): mixin_instance = self.TestMixin() test_kwargs = {"key1": "value1", "key2": "value2"} mock_request = MagicMock(spec=HttpRequest) result = mixin_instance.get_resource_kwargs(mock_request, **test_kwargs) self.assertEqual(result, test_kwargs) django-import-export-4.0.9/tests/core/tests/test_model_resource_fields_generate_widgets.py000066400000000000000000000177051463433610200324330ustar00rootroot00000000000000from unittest import TestCase import django from core.models import WithPositiveIntegerFields from django.contrib.contenttypes import fields as contenttype_fields from django.contrib.postgres import fields as postgres from django.contrib.postgres import search as postgres_search from django.contrib.postgres.fields import ranges as postgres_ranges from django.db import models from django.db.models.fields.related import ForeignKey, RelatedField from import_export import widgets from import_export.resources import ModelResource from import_export.widgets import ForeignKeyWidget class ExampleResource(ModelResource): class Meta: model = WithPositiveIntegerFields class TestFieldWidgetMapping(TestCase): def test_field_has_correct_widget(self): resource = ExampleResource() with self.subTest("PositiveBigIntegerField"): self.assertIsInstance(resource.fields["big"].widget, widgets.IntegerWidget) with self.subTest("PositiveSmallIntegerField"): self.assertIsInstance( resource.fields["small"].widget, widgets.IntegerWidget, ) def test_all_db_fields_has_widgets(self): all_django_fields_classes = self._get_all_django_model_field_subclasses() expected_has_default_widget = self._get_fields_with_expected_default_widget() expected_not_presented_fields = ( self._get_expected_not_presented_in_test_field_subclasses() ) all_fields = self._get_django_fields_for_check_widget() field_instance_by_field_cls = {field.__class__: field for field in all_fields} for field_cls, field in field_instance_by_field_cls.items(): with self.subTest(msg=field_cls.__name__): resource_field = ModelResource.field_from_django_field( "test", field, False ) widget = resource_field.widget if field_cls in expected_has_default_widget: self.assertEqual( widget.__class__, widgets.Widget, msg=( f"{field_cls.__name__} " "expected default widget " f"actual {widget.__class__}" ), ) else: self.assertNotEqual( widget.__class__, widgets.Widget, msg=f"{field_cls.__name__} has default widget class", ) # if in new version django will be added new field subclass # this subtest should fail for field_cls in all_django_fields_classes: if field_cls in expected_not_presented_fields: continue with self.subTest(msg=field_cls.__name__): self.assertIn( field_cls, field_instance_by_field_cls, msg=f"{field_cls.__name__} not presented in test fields", ) def _get_fields_with_expected_default_widget(self): """ Returns set of django.db.models.field.Field subclasses which expected has default Widget in ModelResource """ expected_has_default_widget = { models.BinaryField, models.FileField, models.FilePathField, models.GenericIPAddressField, models.ImageField, models.IPAddressField, models.TextField, models.UUIDField, postgres.BigIntegerRangeField, postgres.CITextField, postgres.DateRangeField, postgres.DateTimeRangeField, postgres.DecimalRangeField, postgres.HStoreField, postgres.IntegerRangeField, postgres.RangeField, } return expected_has_default_widget def _get_expected_not_presented_in_test_field_subclasses(self): """ Return set of django.db.models.field.Field subclasses which expected NOT presented in this test in _get_django_fields_for_check_widget """ expected_not_presented_fields = { contenttype_fields.GenericRelation, models.ForeignObject, postgres_search.SearchQueryField, postgres_search.SearchVectorField, RelatedField, postgres_ranges.ContinuousRangeField, } if django.VERSION >= (4, 2): expected_not_presented_fields |= {postgres_search._Float4Field} if django.VERSION >= (5, 0): expected_not_presented_fields |= {models.GeneratedField} if django.VERSION >= (5, 1): expected_not_presented_fields |= {contenttype_fields.GenericForeignKey} return expected_not_presented_fields def _get_all_django_model_field_subclasses(self): """ returns list of classes - all subclasses for django.db.models.field.Field """ return self._collect_all_clas_children(models.Field) def _collect_all_clas_children(self, clas): children = [] for child_clas in clas.__subclasses__(): children.append(child_clas) children.extend(self._collect_all_clas_children(child_clas)) return children def _get_django_fields_for_check_widget(self): """ Return list of field instances for all checking field classes """ fields = [ models.AutoField(), models.BigAutoField(), models.BigIntegerField(), models.BinaryField(), models.BooleanField(), models.CharField(), models.CommaSeparatedIntegerField(), models.DateField(), models.DateTimeField(), models.DecimalField(), models.DurationField(), models.EmailField(), models.FileField(), models.FilePathField(), models.FloatField(), models.ForeignKey(WithPositiveIntegerFields, on_delete=models.PROTECT), models.GenericIPAddressField(), models.ImageField(), models.IntegerField(), models.IPAddressField(), models.JSONField(), models.ManyToManyField(WithPositiveIntegerFields), models.NullBooleanField(), models.OneToOneField(WithPositiveIntegerFields, on_delete=models.PROTECT), models.OrderWrt(), models.PositiveBigIntegerField(), models.PositiveIntegerField(), models.PositiveSmallIntegerField(), models.SlugField(), models.SmallAutoField(), models.SmallIntegerField(), models.TextField(), models.TimeField(), models.URLField(), models.UUIDField(), postgres.ArrayField(models.CharField), postgres.BigIntegerRangeField(), postgres.CICharField(), postgres.CIEmailField(), postgres.CITextField(), postgres.DateRangeField(), postgres.DateTimeRangeField(), postgres.DecimalRangeField(), postgres.HStoreField(), postgres.IntegerRangeField(), postgres.JSONField(), postgres.RangeField(), ] return fields def test_custom_fk_field(self): # issue 1817 - if a 'custom' foreign key field is provided, then this should # be handled when widgets are defined class CustomForeignKey(ForeignKey): def __init__( self, to, on_delete, **kwargs, ): super().__init__(to, on_delete, **kwargs) resource_field = ModelResource.field_from_django_field( "custom_fk", CustomForeignKey(WithPositiveIntegerFields, on_delete=models.SET_NULL), False, ) self.assertEqual(ForeignKeyWidget, resource_field.widget.__class__) django-import-export-4.0.9/tests/core/tests/test_permissions.py000066400000000000000000000110161463433610200250360ustar00rootroot00000000000000import os.path from core.models import Category from django.contrib.auth.models import Permission, User from django.test.testcases import TestCase from django.test.utils import override_settings class ImportExportPermissionTest(TestCase): def setUp(self): user = User.objects.create_user("admin", "admin@example.com", "password") user.is_staff = True user.is_superuser = False user.save() self.user = user self.client.login(username="admin", password="password") def set_user_model_permission(self, action, model_name): permission = Permission.objects.get(codename="%s_%s" % (action, model_name)) self.user.user_permissions.add(permission) @override_settings(IMPORT_EXPORT_IMPORT_PERMISSION_CODE="change") def test_import(self): # user has no permission to import response = self.client.get("/admin/core/book/import/") self.assertEqual(response.status_code, 403) # POST the import form input_format = "0" filename = os.path.join( os.path.dirname(__file__), os.path.pardir, "exports", "books.csv" ) with open(filename, "rb") as f: data = { "format": input_format, "import_file": f, } response = self.client.post("/admin/core/book/import/", data) self.assertEqual(response.status_code, 403) response = self.client.post("/admin/core/book/process_import/", {}) self.assertEqual(response.status_code, 403) # user has sufficient permission to import self.set_user_model_permission("change", "book") response = self.client.get("/admin/core/book/import/") self.assertEqual(response.status_code, 200) # POST the import form input_format = "0" filename = os.path.join( os.path.dirname(__file__), os.path.pardir, "exports", "books.csv" ) with open(filename, "rb") as f: data = { "format": input_format, "import_file": f, } response = self.client.post("/admin/core/book/import/", data) self.assertEqual(response.status_code, 200) confirm_form = response.context["confirm_form"] data = confirm_form.initial response = self.client.post("/admin/core/book/process_import/", data) self.assertEqual(response.status_code, 302) @override_settings(IMPORT_EXPORT_EXPORT_PERMISSION_CODE="change") def test_export_with_permission_set(self): response = self.client.get("/admin/core/book/export/") self.assertEqual(response.status_code, 403) data = {"format": "0"} response = self.client.post("/admin/core/book/export/", data) self.assertEqual(response.status_code, 403) self.set_user_model_permission("change", "book") response = self.client.get("/admin/core/book/export/") self.assertEqual(response.status_code, 200) data = {"format": "0"} response = self.client.post("/admin/core/book/export/", data) self.assertEqual(response.status_code, 200) @override_settings(IMPORT_EXPORT_EXPORT_PERMISSION_CODE="change") def test_export_action_with_permission_set(self): self.cat1 = Category.objects.create(name="Cat 1") data = { "action": ["export_admin_action"], "_selected_action": [str(self.cat1.id)], } response = self.client.post("/admin/core/category/", data) self.assertEqual(response.status_code, 403) self.set_user_model_permission("change", "category") response = self.client.post("/admin/core/category/", data) self.assertEqual(response.status_code, 200) @override_settings(IMPORT_EXPORT_EXPORT_PERMISSION_CODE="add") def test_check_export_button(self): self.set_user_model_permission("change", "book") response = self.client.get("/admin/core/book/") widget = "import_link" self.assertIn(widget, response.content.decode()) widget = "export_link" self.assertNotIn(widget, response.content.decode()) @override_settings(IMPORT_EXPORT_IMPORT_PERMISSION_CODE="add") def test_check_import_button(self): self.set_user_model_permission("change", "book") response = self.client.get("/admin/core/book/") widget = "import_link" self.assertNotIn(widget, response.content.decode()) widget = "export_link" self.assertIn(widget, response.content.decode()) django-import-export-4.0.9/tests/core/tests/test_resources/000077500000000000000000000000001463433610200241245ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/__init__.py000066400000000000000000000000001463433610200262230ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_bulk_operations.py000066400000000000000000000531621463433610200307440ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Book, UUIDBook from django.core.exceptions import ValidationError from django.test import TestCase from import_export import exceptions, fields, resources, widgets from import_export.instance_loaders import ModelInstanceLoader class BulkTest(TestCase): def setUp(self): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True self.resource = _BookResource() rows = [(i + 1, "book_name") for i in range(10)] self.dataset = tablib.Dataset(*rows, headers=["id", "name"]) def init_update_test_data(self, model=Book): [model.objects.create(name="book_name") for _ in range(10)] self.assertEqual(10, model.objects.count()) rows = model.objects.all().values_list("id", "name") updated_rows = [(r[0], "UPDATED") for r in rows] self.dataset = tablib.Dataset(*updated_rows, headers=["id", "name"]) class BulkCreateTest(BulkTest): @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_does_not_call_object_save(self, mock_bulk_create): with mock.patch("core.models.Book.save") as mock_obj_save: self.resource.import_data(self.dataset) mock_obj_save.assert_not_called() mock_bulk_create.assert_called_with(mock.ANY, batch_size=None) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_batch_size_of_5(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 5 resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(2, mock_bulk_create.call_count) mock_bulk_create.assert_called_with(mock.ANY, batch_size=5) self.assertEqual(10, result.total_rows) @mock.patch("core.models.UUIDBook.objects.bulk_create") def test_bulk_create_uuid_model(self, mock_bulk_create): """Test create of a Model which defines uuid not pk (issue #1274)""" class _UUIDBookResource(resources.ModelResource): class Meta: model = UUIDBook use_bulk = True batch_size = 5 fields = ( "id", "name", ) resource = _UUIDBookResource() result = resource.import_data(self.dataset) self.assertEqual(2, mock_bulk_create.call_count) mock_bulk_create.assert_called_with(mock.ANY, batch_size=5) self.assertEqual(10, result.total_rows) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_no_batch_size(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = None resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(1, mock_bulk_create.call_count) mock_bulk_create.assert_called_with(mock.ANY, batch_size=None) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["new"]) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_called_dry_run(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = None resource = _BookResource() result = resource.import_data(self.dataset, dry_run=True) self.assertEqual(1, mock_bulk_create.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["new"]) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_not_called_when_not_using_transactions(self, mock_bulk_create): class _BookResource(resources.ModelResource): def import_data( self, dataset, dry_run=False, raise_errors=False, use_transactions=None, collect_failed_rows=False, **kwargs, ): # override so that we can enforce not using_transactions using_transactions = False return self.import_data_inner( dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs, ) class Meta: model = Book use_bulk = True resource = _BookResource() resource.import_data(self.dataset, dry_run=True) mock_bulk_create.assert_not_called() @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_batch_size_of_4(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 4 resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(3, mock_bulk_create.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["new"]) def test_no_changes_for_errors_if_use_transactions_enabled(self): with mock.patch("import_export.results.Result.has_errors") as mock_has_errors: mock_has_errors.return_val = True self.resource.import_data(self.dataset) self.assertEqual(0, Book.objects.count()) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_use_bulk_disabled(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = False resource = _BookResource() result = resource.import_data(self.dataset) mock_bulk_create.assert_not_called() self.assertEqual(10, Book.objects.count()) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["new"]) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_bad_batch_size_value(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = "a" resource = _BookResource() with self.assertRaises(ValueError): resource.import_data(self.dataset) mock_bulk_create.assert_not_called() @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_negative_batch_size_value(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = -1 resource = _BookResource() with self.assertRaises(ValueError): resource.import_data(self.dataset) mock_bulk_create.assert_not_called() @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_oversized_batch_size_value(self, mock_bulk_create): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 100 resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(1, mock_bulk_create.call_count) mock_bulk_create.assert_called_with(mock.ANY, batch_size=None) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["new"]) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_logs_exception(self, mock_bulk_create): e = ValidationError("invalid field") mock_bulk_create.side_effect = e class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 100 resource = _BookResource() with mock.patch("logging.Logger.debug") as mock_exception: resource.import_data(self.dataset) mock_exception.assert_called_with(e, exc_info=e) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_raises_exception(self, mock_bulk_create): mock_bulk_create.side_effect = ValidationError("invalid field") class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 100 resource = _BookResource() with self.assertRaises(exceptions.ImportError): resource.import_data(self.dataset, raise_errors=True) @mock.patch("core.models.Book.objects.bulk_create") def test_bulk_create_exception_gathered_on_dry_run(self, mock_bulk_create): mock_bulk_create.side_effect = ValidationError("invalid field") class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 100 resource = _BookResource() result = resource.import_data(self.dataset, dry_run=True, raise_errors=False) self.assertTrue(result.has_errors()) def test_m2m_not_called_for_bulk(self): mock_m2m_widget = mock.Mock(spec=widgets.ManyToManyWidget) class BookM2MResource(resources.ModelResource): categories = fields.Field(attribute="categories", widget=mock_m2m_widget) class Meta: model = Book use_bulk = True resource = BookM2MResource() self.dataset.append_col(["Cat 1|Cat 2"] * 10, header="categories") resource.import_data(self.dataset, raise_errors=True) mock_m2m_widget.assert_not_called() def test_force_init_instance(self): class _BookResource(resources.ModelResource): def get_instance(self, instance_loader, row): raise AssertionError("should not be called") class Meta: model = Book force_init_instance = True resource = _BookResource() self.assertIsNotNone( resource.get_or_init_instance( ModelInstanceLoader(resource), self.dataset[0] ) ) @mock.patch("import_export.resources.atomic_if_using_transaction") def test_no_sub_transaction_on_row_for_bulk(self, mock_atomic_if_using_transaction): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True resource = _BookResource() resource.import_data(self.dataset) self.assertIn( False, [x[0][0] for x in mock_atomic_if_using_transaction.call_args_list] ) class BulkUpdateTest(BulkTest): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True fields = ("id", "name") import_id_fields = ("id",) def setUp(self): super().setUp() self.init_update_test_data() self.resource = self._BookResource() def test_bulk_update(self): result = self.resource.import_data(self.dataset) [self.assertEqual("UPDATED", b.name) for b in Book.objects.all()] self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_batch_size_of_4(self, mock_bulk_update): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 4 resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(3, mock_bulk_update.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_batch_size_of_5(self, mock_bulk_update): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = 5 resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(2, mock_bulk_update.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_no_batch_size(self, mock_bulk_update): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True batch_size = None resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(1, mock_bulk_update.call_count) mock_bulk_update.assert_called_with(mock.ANY, mock.ANY, batch_size=None) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_not_called_when_not_using_transactions(self, mock_bulk_update): class _BookResource(resources.ModelResource): def import_data( self, dataset, dry_run=False, raise_errors=False, use_transactions=None, collect_failed_rows=False, **kwargs, ): # override so that we can enforce not using_transactions using_transactions = False return self.import_data_inner( dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs, ) class Meta: model = Book use_bulk = True resource = _BookResource() resource.import_data(self.dataset, dry_run=True) mock_bulk_update.assert_not_called() @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_called_for_dry_run(self, mock_bulk_update): self.resource.import_data(self.dataset, dry_run=True) self.assertEqual(1, mock_bulk_update.call_count) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_not_called_when_use_bulk_disabled(self, mock_bulk_update): class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = False resource = _BookResource() result = resource.import_data(self.dataset) self.assertEqual(10, Book.objects.count()) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) mock_bulk_update.assert_not_called() @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_logs_exception(self, mock_bulk_update): e = ValidationError("invalid field") mock_bulk_update.side_effect = e class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True resource = _BookResource() with mock.patch("logging.Logger.debug") as mock_exception: resource.import_data(self.dataset) mock_exception.assert_called_with(e, exc_info=e) @mock.patch("core.models.Book.objects.bulk_update") def test_bulk_update_raises_exception(self, mock_bulk_update): e = ValidationError("invalid field") mock_bulk_update.side_effect = e class _BookResource(resources.ModelResource): class Meta: model = Book use_bulk = True resource = _BookResource() with self.assertRaises(exceptions.ImportError) as raised_exc: resource.import_data(self.dataset, raise_errors=True) self.assertEqual(e, raised_exc) class BulkUUIDBookUpdateTest(BulkTest): def setUp(self): super().setUp() self.init_update_test_data(model=UUIDBook) @mock.patch("core.models.UUIDBook.objects.bulk_update") def test_bulk_update_uuid_model(self, mock_bulk_update): """Test update of a Model which defines uuid not pk (issue #1274)""" class _UUIDBookResource(resources.ModelResource): class Meta: model = UUIDBook use_bulk = True batch_size = 5 fields = ( "id", "name", ) resource = _UUIDBookResource() result = resource.import_data(self.dataset) self.assertEqual(2, mock_bulk_update.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["update"]) class BulkDeleteTest(BulkTest): class DeleteBookResource(resources.ModelResource): def for_delete(self, row, instance): return True class Meta: model = Book use_bulk = True # there are errors when diffing with mocks # therefore disable diff with this flag skip_diff = True def setUp(self): super().setUp() self.resource = self.DeleteBookResource() self.resource._meta.batch_size = 1000 self.resource._meta.use_bulk = True self.init_update_test_data() @mock.patch("core.models.Book.delete") def test_bulk_delete_use_bulk_is_false(self, mock_obj_delete): self.resource._meta.use_bulk = False self.resource.import_data(self.dataset) self.assertEqual(10, mock_obj_delete.call_count) @mock.patch("core.models.Book.objects") def test_bulk_delete_batch_size_of_4(self, mock_obj_manager): self.resource._meta.batch_size = 4 result = self.resource.import_data(self.dataset) self.assertEqual(3, mock_obj_manager.filter.return_value.delete.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["delete"]) @mock.patch("core.models.Book.objects") def test_bulk_delete_batch_size_of_5(self, mock_obj_manager): self.resource._meta.batch_size = 5 result = self.resource.import_data(self.dataset) self.assertEqual(2, mock_obj_manager.filter.return_value.delete.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["delete"]) @mock.patch("core.models.Book.objects") def test_bulk_delete_batch_size_is_none(self, mock_obj_manager): self.resource._meta.batch_size = None result = self.resource.import_data(self.dataset) self.assertEqual(1, mock_obj_manager.filter.return_value.delete.call_count) self.assertEqual(10, result.total_rows) self.assertEqual(10, result.totals["delete"]) @mock.patch("core.models.Book.objects") def test_bulk_delete_not_called_when_not_using_transactions(self, mock_obj_manager): class _BookResource(self.DeleteBookResource): def import_data( self, dataset, dry_run=False, raise_errors=False, use_transactions=None, collect_failed_rows=False, **kwargs, ): # override so that we can enforce not using_transactions using_transactions = False return self.import_data_inner( dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs, ) resource = _BookResource() resource.import_data(self.dataset, dry_run=True) self.assertEqual(0, mock_obj_manager.filter.return_value.delete.call_count) @mock.patch("core.models.Book.objects") def test_bulk_delete_called_for_dry_run(self, mock_obj_manager): self.resource.import_data(self.dataset, dry_run=True) self.assertEqual(1, mock_obj_manager.filter.return_value.delete.call_count) @mock.patch("core.models.Book.objects") def test_bulk_delete_logs_exception(self, mock_obj_manager): e = Exception("invalid") mock_obj_manager.filter.return_value.delete.side_effect = e with mock.patch("logging.Logger.debug") as mock_exception: self.resource.import_data(self.dataset) mock_exception.assert_called_with(e, exc_info=mock.ANY) self.assertEqual(1, mock_exception.call_count) @mock.patch("core.models.Book.objects") def test_bulk_delete_raises_exception(self, mock_obj_manager): e = Exception("invalid") mock_obj_manager.filter.return_value.delete.side_effect = e with self.assertRaises(Exception) as raised_exc: self.resource.import_data(self.dataset, raise_errors=True) self.assertEqual(e, raised_exc) class BulkUUIDBookDeleteTest(BulkTest): class DeleteBookResource(resources.ModelResource): def for_delete(self, row, instance): return True class Meta: model = UUIDBook use_bulk = True batch_size = 5 def setUp(self): super().setUp() self.resource = self.DeleteBookResource() self.init_update_test_data(model=UUIDBook) def test_bulk_delete_batch_size_of_5(self): self.assertEqual(10, UUIDBook.objects.count()) self.resource.import_data(self.dataset) self.assertEqual(0, UUIDBook.objects.count()) django-import-export-4.0.9/tests/core/tests/test_resources/test_diffs.py000066400000000000000000000103071463433610200266310ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Book from django.test import TestCase from import_export import resources @mock.patch("import_export.resources.Diff", spec=True) class SkipDiffTest(TestCase): """ Tests that the meta attribute 'skip_diff' means that no diff operations are called. 'copy.deepcopy' cannot be patched at class level because it causes interferes with ``resources.Resource.__init__()``. """ def setUp(self): class _BookResource(resources.ModelResource): class Meta: model = Book skip_diff = True self.resource = _BookResource() self.dataset = tablib.Dataset(headers=["id", "name", "birthday"]) self.dataset.append(["", "A.A.Milne", "1882test-01-18"]) def test_skip_diff(self, mock_diff): with mock.patch("import_export.resources.deepcopy") as mock_deep_copy: self.resource.import_data(self.dataset) mock_diff.return_value.compare_with.assert_not_called() mock_diff.return_value.as_html.assert_not_called() mock_deep_copy.assert_not_called() def test_skip_diff_for_delete_new_resource(self, mock_diff): class BookResource(resources.ModelResource): class Meta: model = Book skip_diff = True def for_delete(self, row, instance): return True resource = BookResource() with mock.patch("import_export.resources.deepcopy") as mock_deep_copy: resource.import_data(self.dataset) mock_diff.return_value.compare_with.assert_not_called() mock_diff.return_value.as_html.assert_not_called() mock_deep_copy.assert_not_called() def test_skip_diff_for_delete_existing_resource(self, mock_diff): book = Book.objects.create() class BookResource(resources.ModelResource): class Meta: model = Book skip_diff = True def get_or_init_instance(self, instance_loader, row): return book, False def for_delete(self, row, instance): return True resource = BookResource() with mock.patch("import_export.resources.deepcopy") as mock_deep_copy: resource.import_data(self.dataset, dry_run=True) mock_diff.return_value.compare_with.assert_not_called() mock_diff.return_value.as_html.assert_not_called() mock_deep_copy.assert_not_called() def test_skip_diff_for_delete_skip_row_not_enabled_new_object(self, mock_diff): class BookResource(resources.ModelResource): class Meta: model = Book skip_diff = False def for_delete(self, row, instance): return True resource = BookResource() with mock.patch("import_export.resources.deepcopy") as mock_deep_copy: resource.import_data(self.dataset, dry_run=True) self.assertEqual(1, mock_diff.return_value.compare_with.call_count) self.assertEqual(1, mock_deep_copy.call_count) def test_skip_row_returns_false_when_skip_diff_is_true(self, mock_diff): class BookResource(resources.ModelResource): class Meta: model = Book skip_unchanged = True skip_diff = True resource = BookResource() with mock.patch( "import_export.resources.Resource.get_import_fields" ) as mock_get_import_fields: resource.import_data(self.dataset, dry_run=True) self.assertEqual(3, mock_get_import_fields.call_count) class SkipHtmlDiffTest(TestCase): def test_skip_html_diff(self): class BookResource(resources.ModelResource): class Meta: model = Book skip_html_diff = True resource = BookResource() self.dataset = tablib.Dataset(headers=["id", "name", "birthday"]) self.dataset.append(["", "A.A.Milne", "1882test-01-18"]) with mock.patch("import_export.resources.Diff.as_html") as mock_as_html: resource.import_data(self.dataset, dry_run=True) mock_as_html.assert_not_called() django-import-export-4.0.9/tests/core/tests/test_resources/test_import_export.py000066400000000000000000000457131463433610200304620ustar00rootroot00000000000000from datetime import date from unittest.mock import patch import tablib from core.admin import UUIDBookResource from core.models import Author, Book, Category, EBook, NamedAuthor, UUIDBook from core.tests.resources import AuthorResource, BookResource from django.test import TestCase from import_export import exceptions, fields, resources, widgets from import_export.fields import Field from import_export.resources import ModelResource class AfterImportComparisonTest(TestCase): class BookResource(resources.ModelResource): is_published = False def after_import_row(self, row, row_result, **kwargs): if ( getattr(row_result.original, "published") is None and getattr(row_result.instance, "published") is not None ): self.is_published = True class Meta: model = Book store_instance = True def setUp(self): super().setUp() self.resource = AfterImportComparisonTest.BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "published"]) row = [self.book.pk, "Some book", "2023-05-09"] self.dataset.append(row) def test_after_import_row_check_for_change(self): # issue 1583 - assert that `original` object is available to after_import_row() self.resource.import_data(self.dataset, raise_errors=True) self.assertTrue(self.resource.is_published) class ImportExportFieldOrderTest(TestCase): class BaseBookResource(resources.ModelResource): def __init__(self): self.field_names = list() def get_queryset(self): return Book.objects.all().order_by("id") def import_field(self, field, obj, data, is_m2m=False, **kwargs): # mock out import_field() so that we can see the order # fields were called self.field_names.append(field.column_name) class UnorderedBookResource(BaseBookResource): class Meta: fields = ("price", "id", "name") model = Book class OrderedBookResource(BaseBookResource): class Meta: fields = ("price", "id", "name") import_order = ("price", "name", "id") export_order = ("price", "name", "id") model = Book class SubsetOrderedBookResource(BaseBookResource): class Meta: fields = ("price", "id", "name", "published") import_order = ("name",) export_order = ("published",) model = Book class DuplicateFieldsBookResource(BaseBookResource): class Meta: fields = ("id", "price", "name", "price") model = Book class FieldsAsListBookResource(BaseBookResource): class Meta: fields = ["id", "price", "name"] model = Book class DeclaredModelFieldBookResource(BaseBookResource): # Non-model field, should come after model fields by default author_full_name = fields.Field( attribute="author", column_name="author full name", ) # Order of declared fields in `ModelResource` shouldn't change export order categories = fields.Field( attribute="categories", column_name="categories", widget=widgets.ManyToManyWidget(model=Category, field="name"), ) published = fields.Field( attribute="published", column_name="published", widget=widgets.DateWidget("%d.%m.%Y"), ) author = fields.Field(attribute="author__name", column_name="author") class Meta: model = Book def dehydrate_author_full_name(self, obj): if obj.author: return f"{obj.author.name} Bar" return "" def setUp(self): super().setUp() self.pk = Book.objects.create(name="Ulysses", price="1.99").pk self.dataset = tablib.Dataset(headers=["id", "name", "price"]) row = [self.pk, "Some book", "19.99"] self.dataset.append(row) def test_defined_import_order(self): self.resource = ImportExportFieldOrderTest.OrderedBookResource() self.resource.import_data(self.dataset) self.assertEqual(["price", "name", "id"], self.resource.field_names) def test_undefined_import_order(self): self.resource = ImportExportFieldOrderTest.UnorderedBookResource() self.resource.import_data(self.dataset) self.assertEqual(["price", "id", "name"], self.resource.field_names) def test_defined_export_order(self): self.resource = ImportExportFieldOrderTest.OrderedBookResource() data = self.resource.export() target = f"price,name,id\r\n1.99,Ulysses,{self.pk}\r\n" self.assertEqual(target, data.csv) def test_undefined_export_order(self): # When export order is not defined, # exported order should correspond with 'fields' definition self.resource = ImportExportFieldOrderTest.UnorderedBookResource() data = self.resource.export() target = f"price,id,name\r\n1.99,{self.pk},Ulysses\r\n" self.assertEqual(target, data.csv) def test_subset_import_order(self): self.resource = ImportExportFieldOrderTest.SubsetOrderedBookResource() self.resource.import_data(self.dataset) self.assertEqual( ["name", "price", "id", "published"], self.resource.field_names ) def test_subset_export_order(self): self.resource = ImportExportFieldOrderTest.SubsetOrderedBookResource() data = self.resource.export() target = f"published,price,id,name\r\n,1.99,{self.pk},Ulysses\r\n" self.assertEqual(target, data.csv) def test_duplicate_import_order(self): self.resource = ImportExportFieldOrderTest.DuplicateFieldsBookResource() self.resource.import_data(self.dataset) self.assertEqual(["id", "price", "name"], self.resource.field_names) def test_duplicate_export_order(self): self.resource = ImportExportFieldOrderTest.DuplicateFieldsBookResource() data = self.resource.export() target = f"id,price,name\r\n{self.pk},1.99,Ulysses\r\n" self.assertEqual(target, data.csv) def test_fields_as_list_import_order(self): self.resource = ImportExportFieldOrderTest.FieldsAsListBookResource() self.resource.import_data(self.dataset) self.assertEqual(["id", "price", "name"], self.resource.field_names) def test_fields_as_list_export_order(self): self.resource = ImportExportFieldOrderTest.FieldsAsListBookResource() data = self.resource.export() target = f"id,price,name\r\n{self.pk},1.99,Ulysses\r\n" self.assertEqual(target, data.csv) def test_declared_model_fields_not_alter_export_order(self): # Issue (#1663) categories = [ Category.objects.create(name="sci-fi"), Category.objects.create(name="romance"), ] author = Author.objects.create(name="Foo") book = Book.objects.create( name="The Lord Of The Rings", author=author, published=date(2022, 2, 2) ) book.categories.set(categories) self.resource = ImportExportFieldOrderTest.DeclaredModelFieldBookResource() declared_field_names = ( "published", "author", # FK "categories", # M2M ) export_order = self.resource.get_export_order() model_fields_names = [ field.name for field in self.resource._meta.model._meta.get_fields() ] for declared_field_name in declared_field_names: self.assertEqual( model_fields_names.index(declared_field_name), export_order.index(declared_field_name), ) # Validate non-model field is exported last unless specified self.assertEqual(export_order[-1], "author_full_name") def test_meta_fields_not_alter_export_order(self): class DeclaredModelFieldBookResource( ImportExportFieldOrderTest.BaseBookResource ): # Non-model field, should come after model fields by default author_full_name = fields.Field( attribute="author", column_name="author full name", ) # Order of declared fields in `ModelResource` shouldn't change export order categories = fields.Field( attribute="categories", column_name="categories", widget=widgets.ManyToManyWidget(model=Category, field="name"), ) published = fields.Field( attribute="published", column_name="published", widget=widgets.DateWidget("%d.%m.%Y"), ) author = fields.Field(attribute="author__name", column_name="author") class Meta: model = Book fields = ( "id", "author__name", "author", "author_full_name", "categories", "published", ) def dehydrate_author_full_name(self, obj): if obj.author: return f"{obj.author.name} Bar" return "" self.resource = DeclaredModelFieldBookResource() self.assertEqual(self.resource.get_export_order(), self.resource._meta.fields) def test_declared_field_export_order(self): # issue 1848 class DeclaredModelFieldBookResource( ImportExportFieldOrderTest.BaseBookResource ): published = fields.Field( attribute="published", column_name="date published", widget=widgets.DateWidget("%d.%m.%Y"), ) class Meta: model = Book fields = ( "id", "author", "published", ) export_order = ( "published", "id", "author", ) self.resource = DeclaredModelFieldBookResource() data = self.resource.export() target = f"date published,id,author\r\n,{self.pk},\r\n" self.assertEqual(target, data.csv) def test_export_fields_column_name(self): """Test export with declared export_fields and custom column_name""" # issue 1846 class DeclaredModelFieldBookResource(resources.ModelResource): published = fields.Field( attribute="published", column_name="datePublished", widget=widgets.DateWidget("%d.%m.%Y"), ) author = fields.Field(column_name="AuthorFooName") class Meta: model = Book fields = ( "id", "author", "published", ) export_order = ( "published", "id", "author", ) def dehydrate_author(self, obj): return obj.author self.resource = DeclaredModelFieldBookResource() data = self.resource.export() target = f"datePublished,id,AuthorFooName\r\n,{self.pk},\r\n" self.assertEqual(target, data.csv) class ImportIdFieldsTestCase(TestCase): class BookResource(resources.ModelResource): name = fields.Field(attribute="name", column_name="book_name") class Meta: model = Book import_id_fields = ["name"] def setUp(self): super().setUp() self.book = Book.objects.create(name="The Hobbit") self.resource = ImportIdFieldsTestCase.BookResource() def test_custom_column_name_warns_if_not_present(self): dataset = tablib.Dataset( *[(self.book.pk, "Some book")], headers=["id", "wrong_name"] ) with self.assertRaises(exceptions.ImportError) as e: self.resource.import_data(dataset, raise_errors=True) self.assertEqual( "The following fields are declared in 'import_id_fields' " "but are not present in the file headers: book_name", str(e.exception), ) def test_custom_column_name_warns_if_not_present_as_error_in_result(self): dataset = tablib.Dataset( *[(self.book.pk, "Some book")], headers=["id", "wrong_name"] ) res = self.resource.import_data(dataset, raise_errors=False) target = ( "The following fields are declared in 'import_id_fields' " "but are not present in the file headers: book_name" ) self.assertEqual(target, str(res.base_errors[0].error)) def test_missing_import_id_field_raises_exception(self): class TestBookResource(resources.ModelResource): class Meta: model = Book import_id_fields = ("id", "a", "b") resource = TestBookResource() book = Book.objects.create(name="Some book") row = [book.pk, "Some book"] dataset = tablib.Dataset(*[row], headers=["id", "name"]) dataset.append(row) with self.assertRaises(exceptions.ImportError) as e: resource.import_data(dataset, raise_errors=True) self.assertEqual( "The following fields are declared in 'import_id_fields' " "but are not present in the resource fields: a, b", str(e.exception), ) def test_multiple_import_id_fields(self): class BookResource(resources.ModelResource): class Meta: model = Book import_id_fields = ("id", "name", "author_email") self.resource = BookResource() dataset = tablib.Dataset( *[(self.book.pk, "Goldeneye", "ian.fleming@example.com")], headers=["A", "name", "B"], ) with self.assertRaises(exceptions.ImportError) as e: self.resource.import_data(dataset, raise_errors=True) self.assertEqual( "The following fields are declared in 'import_id_fields' " "but are not present in the file headers: id, author_email", str(e.exception), ) def test_dynamic_import_id_fields(self): # issue 1834 class BookResource(resources.ModelResource): def before_import(self, dataset, **kwargs): # mimic a 'dynamic field' - i.e. append field which exists on # Book model, but not in dataset dataset.headers.append("price") super().before_import(dataset, **kwargs) class Meta: model = Book import_id_fields = ("price",) self.resource = BookResource() dataset = tablib.Dataset( *[(self.book.pk, "Goldeneye", "ian.fleming@example.com")], headers=["id", "name", "author_email"], ) self.resource.import_data(dataset, raise_errors=True) self.assertEqual("Goldeneye", Book.objects.latest("id").name) class ImportWithMissingFields(TestCase): # issue 1517 @patch("import_export.resources.logger") @patch("import_export.fields.Field.save") def test_import_with_missing_field_in_row(self, mock_field_save, mock_logger): dataset = tablib.Dataset(*[(1, "Some book")], headers=["id", "name"]) self.resource = BookResource() result = self.resource.import_data(dataset) self.assertFalse(result.has_errors()) mock_logger.debug.assert_any_call( "skipping field '' " "- column name 'author_email' is not present in row" ) self.assertEqual(2, mock_field_save.call_count) def test_import_row_with_no_defined_id_field(self): """Ensure a row with no id field can be imported (issue 1812).""" self.assertEqual(0, Author.objects.count()) dataset = tablib.Dataset(*[("J. R. R. Tolkien",)], headers=["name"]) self.resource = AuthorResource() self.resource.import_data(dataset) self.assertEqual(1, Author.objects.count()) class CustomColumnNameImportTest(TestCase): """ If a custom field is declared, import should work if either the Field's attribute name or column name is referenced in the ``fields`` list (issue 1815). """ fixtures = ["author"] class _EBookResource(ModelResource): published = Field(attribute="published", column_name="published_date") class Meta: model = EBook fields = ("id", "name", "published_date") def setUp(self): super().setUp() self.resource = CustomColumnNameImportTest._EBookResource() def test_import_with_column_alias_in_fields_list(self): self.assertEqual(0, EBook.objects.count()) dataset = tablib.Dataset( *[(1, "Moonraker", "1955-04-05")], headers=["id", "name", "published_date"] ) self.resource.import_data(dataset, raise_errors=True) self.assertEqual(1, EBook.objects.count()) self.assertEqual(date(1955, 4, 5), EBook.objects.first().published) class CustomPrimaryKeyRelationImportTest(TestCase): """ Test issue 1852. Ensure import works when a relation has a custom primary key. """ def setUp(self): super().setUp() # The name for this object is the PK self.named_author = NamedAuthor.objects.create(name="Ian Fleming") self.resource = UUIDBookResource() def test_custom_column_name_warns_if_not_present(self): dataset = tablib.Dataset( *[("Moonraker", "Ian Fleming")], headers=["name", "author"] ) self.assertEqual(0, UUIDBook.objects.count()) self.resource.import_data(dataset, raise_errors=True) self.assertEqual(1, UUIDBook.objects.count()) class DeclaredFieldWithNoAttributeTestCase(TestCase): """ If a custom field is declared, import should skip setting an attribute if the Field declaration has no attribute name. # 1874 """ class _EBookResource(ModelResource): published = Field(column_name="published") class Meta: model = EBook fields = ("id", "name", "published") def setUp(self): super().setUp() self.resource = DeclaredFieldWithNoAttributeTestCase._EBookResource() @patch("import_export.resources.logger") def test_import_with_no_attribute(self, mock_logger): self.assertEqual(0, EBook.objects.count()) dataset = tablib.Dataset( *[(1, "Moonraker", "1955-04-05")], headers=["id", "name", "published"] ) self.resource.import_data(dataset, raise_errors=True) self.assertEqual(1, EBook.objects.count()) self.assertIsNone(EBook.objects.first().published) mock_logger.debug.assert_any_call( "skipping field '' " "- field attribute is not defined" ) django-import-export-4.0.9/tests/core/tests/test_resources/test_misc.py000066400000000000000000000033351463433610200264740ustar00rootroot00000000000000import tablib from core.models import Author, Book, Category from django.test import TestCase from import_export import resources, results class RawValueTest(TestCase): def setUp(self): class _BookResource(resources.ModelResource): class Meta: model = Book store_row_values = True self.resource = _BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_import_data(self): result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.assertTrue(result.rows[0].diff) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertEqual(result.rows[0].row_values.get("name"), "Some book") self.assertEqual( result.rows[0].row_values.get("author_email"), "test@example.com" ) self.assertEqual(result.rows[0].row_values.get("price"), "10.25") class ResourcesHelperFunctionsTest(TestCase): """ Test the helper functions in resources. """ def test_has_natural_foreign_key(self): """ Ensure that resources.has_natural_foreign_key detects correctly whether a model has a natural foreign key """ cases = {Book: True, Author: True, Category: False} for model, expected_result in cases.items(): self.assertEqual(resources.has_natural_foreign_key(model), expected_result) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/000077500000000000000000000000001463433610200300335ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/__init__.py000066400000000000000000000000001463433610200321320ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_data_deletion.py000066400000000000000000000142341463433610200342440ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Book from core.tests.resources import BookResource from django.test import TestCase from import_export import fields, results, widgets class DataDeletionDryRunTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_import_data_delete(self): class B(BookResource): delete = fields.Field(widget=widgets.BooleanWidget()) def for_delete(self, row, instance): return self.fields["delete"].clean(row) row = [self.book.pk, self.book.name, "1"] dataset = tablib.Dataset(*[row], headers=["id", "name", "delete"]) result = B().import_data(dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_DELETE ) self.assertFalse(Book.objects.filter(pk=self.book.pk)) self.assertIsNone(result.rows[0].instance) self.assertIsNone(result.rows[0].original) def test_import_data_delete_store_instance(self): class B(BookResource): delete = fields.Field(widget=widgets.BooleanWidget()) def for_delete(self, row, instance): return self.fields["delete"].clean(row) class Meta: store_instance = True row = [self.book.pk, self.book.name, "1"] dataset = tablib.Dataset(*[row], headers=["id", "name", "delete"]) result = B().import_data(dataset, raise_errors=True) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_DELETE ) self.assertIsNotNone(result.rows[0].instance) def test_save_instance_with_dry_run_flag(self): class B(BookResource): def before_save_instance(self, instance, row, **kwargs): super().before_save_instance(instance, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.before_save_instance_dry_run = True else: self.before_save_instance_dry_run = False def save_instance(self, instance, new, row, **kwargs): super().save_instance(instance, new, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.save_instance_dry_run = True else: self.save_instance_dry_run = False def after_save_instance(self, instance, row, **kwargs): super().after_save_instance(instance, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.after_save_instance_dry_run = True else: self.after_save_instance_dry_run = False resource = B() resource.import_data(self.dataset, dry_run=True, raise_errors=True) self.assertTrue(resource.before_save_instance_dry_run) self.assertTrue(resource.save_instance_dry_run) self.assertTrue(resource.after_save_instance_dry_run) resource.import_data(self.dataset, dry_run=False, raise_errors=True) self.assertFalse(resource.before_save_instance_dry_run) self.assertFalse(resource.save_instance_dry_run) self.assertFalse(resource.after_save_instance_dry_run) @mock.patch("core.models.Book.save") def test_save_instance_noop(self, mock_book): book = Book.objects.first() self.resource.save_instance( book, False, None, using_transactions=False, dry_run=True ) self.assertEqual(0, mock_book.call_count) @mock.patch("core.models.Book.save") def test_delete_instance_noop(self, mock_book): book = Book.objects.first() self.resource.delete_instance( book, None, using_transactions=False, dry_run=True ) self.assertEqual(0, mock_book.call_count) def test_delete_instance_with_dry_run_flag(self): class B(BookResource): delete = fields.Field(widget=widgets.BooleanWidget()) def for_delete(self, row, instance): return self.fields["delete"].clean(row) def before_delete_instance(self, instance, row, **kwargs): super().before_delete_instance(instance, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.before_delete_instance_dry_run = True else: self.before_delete_instance_dry_run = False def delete_instance(self, instance, row, **kwargs): super().delete_instance(instance, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.delete_instance_dry_run = True else: self.delete_instance_dry_run = False def after_delete_instance(self, instance, row, **kwargs): super().after_delete_instance(instance, row, **kwargs) dry_run = kwargs.get("dry_run", False) if dry_run: self.after_delete_instance_dry_run = True else: self.after_delete_instance_dry_run = False resource = B() row = [self.book.pk, self.book.name, "1"] dataset = tablib.Dataset(*[row], headers=["id", "name", "delete"]) resource.import_data(dataset, dry_run=True, raise_errors=True) self.assertTrue(resource.before_delete_instance_dry_run) self.assertTrue(resource.delete_instance_dry_run) self.assertTrue(resource.after_delete_instance_dry_run) resource.import_data(dataset, dry_run=False, raise_errors=True) self.assertFalse(resource.before_delete_instance_dry_run) self.assertFalse(resource.delete_instance_dry_run) self.assertFalse(resource.after_delete_instance_dry_run) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_data_handling.py000066400000000000000000000110221463433610200342150ustar00rootroot00000000000000from decimal import InvalidOperation import tablib from core.models import Author, Book from core.tests.resources import AuthorResourceWithCustomWidget, BookResource from django.test import TestCase from import_export import resources, results class DataHandlingTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_import_data_handles_widget_valueerrors_with_unicode_messages(self): resource = AuthorResourceWithCustomWidget() dataset = tablib.Dataset(headers=["id", "name", "birthday"]) dataset.append(["", "A.A.Milne", "1882-01-18"]) result = resource.import_data(dataset, raise_errors=False) self.assertTrue(result.has_validation_errors()) self.assertIs(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_INVALID) self.assertEqual( result.invalid_rows[0].field_specific_errors["name"], ["Ова вриједност је страшна!"], ) def test_model_validation_errors_not_raised_when_clean_model_instances_is_false( self, ): class TestResource(resources.ModelResource): class Meta: model = Author clean_model_instances = False resource = TestResource() dataset = tablib.Dataset(headers=["id", "name"]) dataset.append(["", "123"]) result = resource.import_data(dataset, raise_errors=False) self.assertFalse(result.has_validation_errors()) self.assertEqual(len(result.invalid_rows), 0) def test_model_validation_errors_raised_when_clean_model_instances_is_true(self): class TestResource(resources.ModelResource): class Meta: model = Author clean_model_instances = True export_order = ["id", "name", "birthday"] # create test dataset # NOTE: column order is deliberately strange dataset = tablib.Dataset(headers=["name", "id"]) dataset.append(["123", "1"]) # run import_data() resource = TestResource() result = resource.import_data(dataset, raise_errors=False) # check has_validation_errors() self.assertTrue(result.has_validation_errors()) # check the invalid row itself invalid_row = result.invalid_rows[0] self.assertEqual(invalid_row.error_count, 1) self.assertEqual( invalid_row.field_specific_errors, {"name": ["'123' is not a valid value"]} ) # diff_header and invalid_row.values should match too self.assertEqual(result.diff_headers, ["id", "name", "birthday"]) self.assertEqual(invalid_row.values, ("1", "123", "---")) def test_known_invalid_fields_are_excluded_from_model_instance_cleaning(self): # The custom widget on the parent class should complain about # 'name' first, preventing Author.full_clean() from raising the # error as it does in the previous test class TestResource(AuthorResourceWithCustomWidget): class Meta: model = Author clean_model_instances = True resource = TestResource() dataset = tablib.Dataset(headers=["id", "name"]) dataset.append(["", "123"]) result = resource.import_data(dataset, raise_errors=False) self.assertTrue(result.has_validation_errors()) self.assertEqual(result.invalid_rows[0].error_count, 1) self.assertEqual( result.invalid_rows[0].field_specific_errors, {"name": ["Ова вриједност је страшна!"]}, ) def test_import_data_error_saving_model(self): row = list(self.dataset.pop()) # set pk to something that would yield error row[0] = "foo" self.dataset.append(row) result = self.resource.import_data(self.dataset, raise_errors=False) self.assertTrue(result.has_errors()) self.assertTrue(result.rows[0].errors) actual = result.rows[0].errors[0].error self.assertIsInstance(actual, (ValueError, InvalidOperation)) self.assertIn( str(actual), { "could not convert string to float", "[]", "Invalid literal for Decimal: 'foo'", }, ) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_data_import.py000066400000000000000000000131021463433610200337440ustar00rootroot00000000000000from decimal import Decimal from unittest import mock import tablib from core.models import Book from core.tests.resources import BookResource, BookResourceWithStoreInstance from django.test import TestCase, skipUnlessDBFeature from import_export import results from import_export.resources import Diff class DataImportTests(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_get_diff(self): diff = Diff(self.resource, self.book, False) book2 = Book(name="Some other book") diff.compare_with(self.resource, book2) html = diff.as_html() headers = self.resource.get_export_headers() self.assertEqual( html[headers.index("name")], 'Some ' "other book", ) self.assertFalse(html[headers.index("author_email")]) def test_import_data_update(self): result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.assertTrue(result.rows[0].diff) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertEqual(result.rows[0].row_values.get("name"), None) self.assertEqual(result.rows[0].row_values.get("author_email"), None) self.assertIsNone(result.rows[0].instance) self.assertIsNotNone(result.rows[0].original) instance = Book.objects.get(pk=self.book.pk) self.assertEqual(instance.author_email, "test@example.com") self.assertEqual(instance.price, Decimal("10.25")) def test_import_data_new(self): Book.objects.all().delete() self.assertEqual(0, Book.objects.count()) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.assertTrue(result.rows[0].diff) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_NEW) self.assertEqual(result.rows[0].row_values.get("name"), None) self.assertEqual(result.rows[0].row_values.get("author_email"), None) self.assertIsNone(result.rows[0].instance) self.assertIsNone(result.rows[0].original) self.assertEqual(1, Book.objects.count()) instance = Book.objects.first() self.assertEqual(instance.author_email, "test@example.com") self.assertEqual(instance.price, Decimal("10.25")) def test_import_data_new_store_instance(self): self.resource = BookResourceWithStoreInstance() Book.objects.all().delete() self.assertEqual(0, Book.objects.count()) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_NEW) self.assertIsNotNone(result.rows[0].instance) self.assertIsNone(result.rows[0].original) self.assertEqual(1, Book.objects.count()) book = Book.objects.first() self.assertEqual(book.pk, result.rows[0].instance.pk) def test_import_data_update_store_instance(self): self.resource = BookResourceWithStoreInstance() result = self.resource.import_data(self.dataset, raise_errors=True) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertIsNotNone(result.rows[0].instance) self.assertIsNotNone(result.rows[0].original) self.assertEqual(1, Book.objects.count()) book = Book.objects.first() self.assertEqual(book.pk, result.rows[0].instance.pk) @skipUnlessDBFeature("supports_transactions") @mock.patch("import_export.resources.connections") def test_import_data_no_transaction(self, mock_db_connections): class Features: supports_transactions = False class DummyConnection: features = Features() dummy_connection = DummyConnection() mock_db_connections.__getitem__.return_value = dummy_connection result = self.resource.import_data( self.dataset, dry_run=True, use_transactions=False, raise_errors=True ) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.assertTrue(result.rows[0].diff) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertEqual(result.rows[0].row_values.get("name"), None) self.assertEqual(result.rows[0].row_values.get("author_email"), None) def test_import_data_new_override_do_instance_save(self): class CustomDoInstanceSave(BookResource): is_create = False def do_instance_save(self, instance, is_create): self.is_create = is_create super().do_instance_save(instance, is_create) Book.objects.all().delete() self.assertEqual(0, Book.objects.count()) self.resource = CustomDoInstanceSave() self.assertFalse(self.resource.is_create) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(1, Book.objects.count()) self.assertTrue(self.resource.is_create) test_deprecated_fields.py000066400000000000000000000040541463433610200350160ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourceimport warnings import tablib from core.models import Book from core.tests.resources import BookResource from django.test import TestCase from import_export import resources class DeprecatedMethodTest(TestCase): """ These tests relate to renamed methods in v4. The tests can be removed when the deprecated methods are removed. """ def setUp(self): rows = [ ["1", "Ulysses"], ] self.dataset = tablib.Dataset(*rows, headers=["id", "name"]) self.obj = Book.objects.create(id=1, name="Ulysses") def test_import_obj_renamed(self): resource = BookResource() with self.assertWarns( DeprecationWarning, ): resource.import_obj(self.obj, self.dataset, dry_run=True) def test_import_obj_passes_params(self): class MyBookResource(resources.ModelResource): def import_instance(self, instance, row, **kwargs): self.kwargs = kwargs class Meta: model = Book resource = MyBookResource() with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) resource.import_obj(self.obj, self.dataset, True) self.assertTrue(resource.kwargs["dry_run"]) def test_after_import_instance_renamed(self): resource = BookResource() with self.assertWarns( DeprecationWarning, ): resource.after_import_instance(self.obj, True, row_number=1) def test_after_import_instance_passes_params(self): class MyBookResource(resources.ModelResource): def after_init_instance(self, instance, new, row, **kwargs): self.kwargs = kwargs class Meta: model = Book resource = MyBookResource() with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) resource.after_import_instance(self.obj, True, row_number=1) self.assertEqual(1, resource.kwargs["row_number"]) test_dynamic_customization.py000066400000000000000000000321761463433610200360120ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourceimport tablib from core.models import ( Book, Category, Entry, Profile, WithDynamicDefault, WithFloatField, ) from core.tests.resources import BookResource, CategoryResource from django.contrib.auth.models import User from django.core.exceptions import FieldDoesNotExist from django.db.models import Count from django.db.utils import ConnectionDoesNotExist from django.test import TestCase from import_export import exceptions, fields, resources, results class DynamicBehaviorCustomizationTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_related_one_to_one(self): # issue #17 - Exception when attempting access something on the # related_name user = User.objects.create(username="foo") profile = Profile.objects.create(user=user) Entry.objects.create(user=user) Entry.objects.create(user=User.objects.create(username="bar")) class EntryResource(resources.ModelResource): class Meta: model = Entry fields = ("user__profile", "user__profile__is_private") resource = EntryResource() dataset = resource.export(Entry.objects.all()) self.assertEqual(dataset.dict[0]["user__profile"], profile.pk) self.assertEqual(dataset.dict[0]["user__profile__is_private"], "1") self.assertEqual(dataset.dict[1]["user__profile"], "") self.assertEqual(dataset.dict[1]["user__profile__is_private"], "") def test_empty_get_queryset(self): # issue #25 - Overriding queryset on export() fails when passed # queryset has zero elements dataset = self.resource.export(queryset=Book.objects.none()) self.assertEqual(len(dataset), 0) def test_import_data_skip_unchanged(self): class MyBookResource(resources.ModelResource): save_count = 0 def save_instance(self, instance, is_create, row, **kwargs): self.save_count += 1 class Meta: skip_unchanged = True model = Book # Make sure we test with ManyToMany related objects cat1 = Category.objects.create(name="Cat 1") cat2 = Category.objects.create(name="Cat 2") self.book.categories.add(cat1) self.book.categories.add(cat2) dataset = self.resource.export() # Create a new resource that attempts to reimport the data currently # in the database while skipping unchanged rows (i.e. all of them) resource = MyBookResource() result = resource.import_data(dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), len(dataset)) self.assertTrue(result.rows[0].diff) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) self.assertEqual(result.rows[0].object_id, self.book.pk) if resource.save_count > 0: self.fail("Resource attempted to save instead of skipping") # Test that we can suppress reporting of skipped rows resource._meta.report_skipped = False result = resource.import_data(dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 0) def test_before_import_access_to_kwargs(self): class B(BookResource): def before_import(self, dataset, **kwargs): if "extra_arg" in kwargs: dataset.headers[dataset.headers.index("author_email")] = "old_email" dataset.insert_col( 0, lambda row: kwargs["extra_arg"], header="author_email" ) resource = B() result = resource.import_data( self.dataset, raise_errors=True, extra_arg="extra@example.com" ) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) instance = Book.objects.get(pk=self.book.pk) self.assertEqual(instance.author_email, "extra@example.com") def test_before_import_raises_error(self): class B(BookResource): def before_import(self, dataset, **kwargs): raise Exception("This is an invalid dataset") resource = B() with self.assertRaises(exceptions.ImportError) as cm: resource.import_data(self.dataset, raise_errors=True) self.assertEqual("This is an invalid dataset", cm.exception.error.args[0]) def test_after_import_raises_error(self): class B(BookResource): def after_import(self, dataset, result, **kwargs): raise Exception("This is an invalid dataset") resource = B() with self.assertRaises(exceptions.ImportError) as cm: resource.import_data(self.dataset, raise_errors=True) self.assertEqual("This is an invalid dataset", cm.exception.error.args[0]) def test_link_to_nonexistent_field(self): with self.assertRaises(FieldDoesNotExist) as cm: class BrokenBook1(resources.ModelResource): class Meta: model = Book fields = ("nonexistent__invalid",) self.assertEqual( "Book.nonexistent: Book has no field named 'nonexistent'", cm.exception.args[0], ) with self.assertRaises(FieldDoesNotExist) as cm: class BrokenBook2(resources.ModelResource): class Meta: model = Book fields = ("author__nonexistent",) self.assertEqual( "Book.author.nonexistent: Author has no field named " "'nonexistent'", cm.exception.args[0], ) def test_link_to_nonrelation_field(self): with self.assertRaises(KeyError) as cm: class BrokenBook1(resources.ModelResource): class Meta: model = Book fields = ("published__invalid",) self.assertEqual("Book.published is not a relation", cm.exception.args[0]) with self.assertRaises(KeyError) as cm: class BrokenBook2(resources.ModelResource): class Meta: model = Book fields = ("author__name__invalid",) self.assertEqual("Book.author.name is not a relation", cm.exception.args[0]) def test_override_field_construction_in_resource(self): class B(resources.ModelResource): class Meta: model = Book fields = ("published",) @classmethod def field_from_django_field(self, field_name, django_field, readonly): if field_name == "published": return {"sound": "quack"} B() self.assertEqual({"sound": "quack"}, B.fields["published"]) def test_readonly_annotated_field_import_and_export(self): class B(resources.ModelResource): total_categories = fields.Field("total_categories", readonly=True) class Meta: model = Book skip_unchanged = True cat1 = Category.objects.create(name="Cat 1") self.book.categories.add(cat1) resource = B() # Verify that the annotated field is correctly exported dataset = resource.export( queryset=Book.objects.annotate(total_categories=Count("categories")) ) self.assertEqual(int(dataset.dict[0]["total_categories"]), 1) # Verify that importing the annotated field raises no errors and that # the rows are skipped result = resource.import_data(dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), len(dataset)) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) def test_follow_relationship_for_modelresource(self): class EntryResource(resources.ModelResource): username = fields.Field(attribute="user__username", readonly=False) class Meta: model = Entry fields = ("id", "username") def after_save_instance(self, instance, row_, **kwargs): using_transactions = kwargs.get("using_transactions", False) dry_run = kwargs.get("dry_run", False) if not using_transactions and dry_run: # we don't have transactions and we want to do a dry_run pass else: instance.user.save() user = User.objects.create(username="foo") entry = Entry.objects.create(user=user) row = [ entry.pk, "bar", ] self.dataset = tablib.Dataset(headers=["id", "username"]) self.dataset.append(row) result = EntryResource().import_data( self.dataset, raise_errors=True, dry_run=False ) self.assertFalse(result.has_errors()) self.assertEqual(User.objects.get(pk=user.pk).username, "bar") def test_import_data_dynamic_default_callable(self): class DynamicDefaultResource(resources.ModelResource): class Meta: model = WithDynamicDefault fields = ( "id", "name", ) self.assertTrue(callable(DynamicDefaultResource.fields["name"].default)) resource = DynamicDefaultResource() dataset = tablib.Dataset( headers=[ "id", "name", ] ) dataset.append([1, None]) dataset.append([2, None]) resource.import_data(dataset, raise_errors=False) objs = WithDynamicDefault.objects.all() self.assertNotEqual(objs[0].name, objs[1].name) def test_float_field(self): # 433 class R(resources.ModelResource): class Meta: model = WithFloatField resource = R() dataset = tablib.Dataset( headers=[ "id", "f", ] ) dataset.append([None, None]) dataset.append([None, ""]) resource.import_data(dataset, raise_errors=True) self.assertEqual(WithFloatField.objects.all()[0].f, None) self.assertEqual(WithFloatField.objects.all()[1].f, None) def test_get_db_connection_name(self): class BookResource(resources.ModelResource): class Meta: using_db = "other_db" self.assertEqual(BookResource().get_db_connection_name(), "other_db") self.assertEqual(CategoryResource().get_db_connection_name(), "default") def test_import_data_raises_field_for_wrong_db(self): class BookResource(resources.ModelResource): class Meta: using_db = "wrong_db" with self.assertRaises(ConnectionDoesNotExist): BookResource().import_data(self.dataset) def test_natural_foreign_key_detection(self): """ Test that when the _meta option for use_natural_foreign_keys is set on a resource that foreign key widgets are created with that flag, and when it's off they are not. """ # For future proof testing, we have one resource with natural # foreign keys on, and one off. If the default ever changes # this should still work. class _BookResource_Unfk(resources.ModelResource): class Meta: use_natural_foreign_keys = True model = Book class _BookResource(resources.ModelResource): class Meta: use_natural_foreign_keys = False model = Book resource_with_nfks = _BookResource_Unfk() author_field_widget = resource_with_nfks.fields["author"].widget self.assertTrue(author_field_widget.use_natural_foreign_keys) resource_without_nfks = _BookResource() author_field_widget = resource_without_nfks.fields["author"].widget self.assertFalse(author_field_widget.use_natural_foreign_keys) def test_natural_foreign_key_false_positives(self): """ Ensure that if the field's model does not have natural foreign key functions, it is not set to use natural foreign keys. """ from django.db import models class RelatedModel(models.Model): name = models.CharField() class Meta: app_label = "Test" class TestModel(models.Model): related_field = models.ForeignKey(RelatedModel, on_delete=models.PROTECT) class Meta: app_label = "Test" class TestModelResource(resources.ModelResource): class Meta: model = TestModel fields = ("id", "related_field") use_natural_foreign_keys = True resource = TestModelResource() related_field_widget = resource.fields["related_field"].widget self.assertFalse(related_field_widget.use_natural_foreign_keys) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_error_handling.py000066400000000000000000000150761463433610200344520ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Author, Book from core.tests.resources import ( AuthorResource, BookResource, BookResourceWithLineNumberLogger, ProfileResource, ) from django.core.exceptions import ImproperlyConfigured, ValidationError from django.test import TestCase from import_export import exceptions, resources, results class ErrorHandlingTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) @mock.patch("import_export.resources.connections") def test_ImproperlyConfigured_if_use_transactions_set_when_not_supported( self, mock_db_connections ): class Features(object): supports_transactions = False class DummyConnection(object): features = Features() dummy_connection = DummyConnection() mock_db_connections.__getitem__.return_value = dummy_connection with self.assertRaises(ImproperlyConfigured): self.resource.import_data( self.dataset, use_transactions=True, ) def test_importing_with_line_number_logging(self): resource = BookResourceWithLineNumberLogger() resource.import_data(self.dataset, raise_errors=True) self.assertEqual(resource.before_lines, [1]) self.assertEqual(resource.after_lines, [1]) def test_import_data_raises_field_specific_validation_errors(self): resource = AuthorResource() dataset = tablib.Dataset(headers=["name", "birthday"]) dataset.append(["A.A.Milne", "1882test-01-18"]) result = resource.import_data(dataset, raise_errors=False) self.assertTrue(result.has_validation_errors()) self.assertIs(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_INVALID) self.assertIn("birthday", result.invalid_rows[0].field_specific_errors) def test_import_data_raises_field_specific_validation_errors_with_skip_unchanged( self, ): resource = AuthorResource() author = Author.objects.create(name="Some author") dataset = tablib.Dataset(headers=["id", "birthday"]) dataset.append([author.id, "1882test-01-18"]) result = resource.import_data(dataset, raise_errors=False) self.assertTrue(result.has_validation_errors()) self.assertIs(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_INVALID) self.assertIn("birthday", result.invalid_rows[0].field_specific_errors) def test_import_data_empty_dataset_with_collect_failed_rows(self): class _AuthorResource(resources.ModelResource): class Meta: model = Author import_id_fields = ["non_existent_field"] resource = _AuthorResource() with self.assertRaises(exceptions.ImportError) as e: resource.import_data( tablib.Dataset(), collect_failed_rows=True, raise_errors=True ) self.assertEqual( "The following fields are declared in 'import_id_fields' " "but are not present in the resource fields: non_existent_field", str(e.exception), ) def test_collect_failed_rows(self): resource = ProfileResource() headers = ["id", "user"] # 'user' is a required field, the database will raise an error. row = [None, None] dataset = tablib.Dataset(row, headers=headers) result = resource.import_data( dataset, dry_run=True, use_transactions=True, collect_failed_rows=True, ) self.assertEqual(result.failed_dataset.headers, ["id", "user", "Error"]) self.assertEqual(len(result.failed_dataset), 1) # We can't check the error message because it's package- and version-dependent def test_row_result_raise_errors(self): resource = ProfileResource() headers = ["id", "user"] # 'user' is a required field, the database will raise an error. row = [None, None] dataset = tablib.Dataset(row, headers=headers) with self.assertRaises(exceptions.ImportError) as exc: resource.import_data( dataset, dry_run=True, use_transactions=True, raise_errors=True, ) row_error = exc.exception self.assertEqual(1, row_error.number) self.assertEqual({"id": None, "user": None}, row_error.row) def test_collect_failed_rows_validation_error(self): resource = ProfileResource() row = ["1"] dataset = tablib.Dataset(row, headers=["id"]) with mock.patch( "import_export.resources.Field.save", side_effect=Exception("fail!") ): result = resource.import_data( dataset, dry_run=True, use_transactions=True, collect_failed_rows=True, ) self.assertEqual(result.failed_dataset.headers, ["id", "Error"]) self.assertEqual( 1, len(result.failed_dataset), ) self.assertEqual("1", result.failed_dataset.dict[0]["id"]) self.assertEqual("fail!", result.failed_dataset.dict[0]["Error"]) def test_row_result_raise_ValidationError(self): resource = ProfileResource() row = ["1"] dataset = tablib.Dataset(row, headers=["id"]) with mock.patch( "import_export.resources.Field.save", side_effect=ValidationError("fail!") ): with self.assertRaisesRegex( exceptions.ImportError, "{'__all__': \\['fail!'\\]}" ): resource.import_data( dataset, dry_run=True, use_transactions=True, raise_errors=True, ) def test_row_result_raise_ValidationError_collect_failed_rows(self): # 1752 resource = ProfileResource() row = ["1"] dataset = tablib.Dataset(row, headers=["id"]) with mock.patch( "import_export.resources.Field.save", side_effect=ValidationError("fail!") ): res = resource.import_data( dataset, use_transactions=True, collect_failed_rows=True ) self.assertEqual( res.failed_dataset.dict[0], {"id": "1", "Error": "{'__all__': ['fail!']}"} ) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_export.py000066400000000000000000000066261463433610200327770ustar00rootroot00000000000000from datetime import date import tablib from core.admin import BookResource from core.models import Author, Book, EBook from django.test import TestCase from import_export.fields import Field from import_export.resources import ModelResource class ExportFunctionalityTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_get_export_headers(self): headers = self.resource.get_export_headers() self.assertEqual( headers, [ "id", "name", "author", "author_email", "imported", "published", "published_time", "price", "added", "categories", ], ) def test_export(self): with self.assertNumQueries(2): dataset = self.resource.export(queryset=Book.objects.all()) self.assertEqual(len(dataset), 1) def test_export_with_foreign_keys(self): """ Test that export() containing foreign keys doesn't generate extra query for every row. Fixes #974 """ author = Author.objects.create() self.book.author = author self.book.save() Book.objects.create(name="Second book", author=Author.objects.create()) Book.objects.create(name="Third book", author=Author.objects.create()) with self.assertNumQueries(3): dataset = self.resource.export(Book.objects.prefetch_related("categories")) self.assertEqual(dataset.dict[0]["author"], author.pk) self.assertEqual(len(dataset), 3) def test_export_iterable(self): with self.assertNumQueries(2): dataset = self.resource.export(queryset=list(Book.objects.all())) self.assertEqual(len(dataset), 1) def test_export_prefetch_related(self): with self.assertNumQueries(3): dataset = self.resource.export( queryset=Book.objects.prefetch_related("categories").all() ) self.assertEqual(len(dataset), 1) def test_export_handles_named_queryset_parameter(self): class _BookResource(BookResource): def before_export(self, queryset, **kwargs): self.qs = queryset self.kwargs_ = kwargs self.resource = _BookResource() # when queryset is supplied, it should be passed to before_export() self.resource.export(queryset=Book.objects.all(), **{"a": 1}) self.assertEqual(Book.objects.count(), len(self.resource.qs)) self.assertEqual(dict(a=1), self.resource.kwargs_) def test_export_declared_field(self): # test that declared fields with no attribute return empty value # see 1874 class EBookResource(ModelResource): published = Field(column_name="published") class Meta: model = EBook fields = ("id", "published") resource = EBookResource() self.book.published = date(1955, 4, 5) self.book.save() dataset = resource.export() self.assertEqual("", dataset.dict[0]["published"]) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_fields.py000066400000000000000000000035271463433610200327210ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Book from core.tests.resources import BookResource from django.test import TestCase from import_export import fields, resources, widgets class FieldHandlingTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_get_instance(self): instance_loader = self.resource._meta.instance_loader_class(self.resource) self.resource._meta.import_id_fields = ["id"] instance = self.resource.get_instance(instance_loader, self.dataset.dict[0]) self.assertEqual(instance, self.book) def test_get_instance_import_id_fields(self): class BookResource(resources.ModelResource): name = fields.Field(attribute="name", widget=widgets.CharWidget()) class Meta: model = Book import_id_fields = ["name"] resource = BookResource() instance_loader = resource._meta.instance_loader_class(resource) instance = resource.get_instance(instance_loader, self.dataset.dict[0]) self.assertEqual(instance, self.book) def test_get_instance_usually_defers_to_instance_loader(self): self.resource._meta.import_id_fields = ["id"] instance_loader = self.resource._meta.instance_loader_class(self.resource) with mock.patch.object(instance_loader, "get_instance") as mocked_method: row = self.dataset.dict[0] self.resource.get_instance(instance_loader, row) # instance_loader.get_instance() should have been called mocked_method.assert_called_once_with(row) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_m2m.py000066400000000000000000000127341463433610200321460ustar00rootroot00000000000000import tablib from core.models import Author, Book, Category from core.tests.resources import BookResource from django.test import TestCase from import_export import fields, resources, widgets class ForeignKeyM2MTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_foreign_keys_export(self): author1 = Author.objects.create(name="Foo") self.book.author = author1 self.book.save() dataset = self.resource.export(Book.objects.all()) self.assertEqual(dataset.dict[0]["author"], author1.pk) def test_foreign_keys_import(self): author2 = Author.objects.create(name="Bar") headers = ["id", "name", "author"] row = [None, "FooBook", author2.pk] dataset = tablib.Dataset(row, headers=headers) self.resource.import_data(dataset, raise_errors=True) book = Book.objects.get(name="FooBook") self.assertEqual(book.author, author2) def test_m2m_export(self): cat1 = Category.objects.create(name="Cat 1") cat2 = Category.objects.create(name="Cat 2") self.book.categories.add(cat1) self.book.categories.add(cat2) dataset = self.resource.export(Book.objects.all()) self.assertEqual(dataset.dict[0]["categories"], "%d,%d" % (cat1.pk, cat2.pk)) def test_m2m_import(self): cat1 = Category.objects.create(name="Cat 1") headers = ["id", "name", "categories"] row = [None, "FooBook", str(cat1.pk)] dataset = tablib.Dataset(row, headers=headers) self.resource.import_data(dataset, raise_errors=True) book = Book.objects.get(name="FooBook") self.assertIn(cat1, book.categories.all()) def test_m2m_options_import(self): cat1 = Category.objects.create(name="Cat 1") cat2 = Category.objects.create(name="Cat 2") headers = ["id", "name", "categories"] row = [None, "FooBook", "Cat 1|Cat 2"] dataset = tablib.Dataset(row, headers=headers) class BookM2MResource(resources.ModelResource): categories = fields.Field( attribute="categories", widget=widgets.ManyToManyWidget(Category, field="name", separator="|"), ) class Meta: model = Book resource = BookM2MResource() resource.import_data(dataset, raise_errors=True) book = Book.objects.get(name="FooBook") self.assertIn(cat1, book.categories.all()) self.assertIn(cat2, book.categories.all()) def test_import_null_django_CharField_saved_as_empty_string(self): # issue 1485 resource = BookResource() self.assertTrue(resource._meta.model.author_email.field.blank) self.assertFalse(resource._meta.model.author_email.field.null) headers = ["id", "author_email"] row = [1, None] dataset = tablib.Dataset(row, headers=headers) resource.import_data(dataset, raise_errors=True) book = Book.objects.get(id=1) self.assertEqual("", book.author_email) def test_import_empty_django_CharField_saved_as_empty_string(self): resource = BookResource() self.assertTrue(resource._meta.model.author_email.field.blank) self.assertFalse(resource._meta.model.author_email.field.null) headers = ["id", "author_email"] row = [1, ""] dataset = tablib.Dataset(row, headers=headers) resource.import_data(dataset, raise_errors=True) book = Book.objects.get(id=1) self.assertEqual("", book.author_email) def test_m2m_add(self): cat1 = Category.objects.create(name="Cat 1") cat2 = Category.objects.create(name="Cat 2") cat3 = Category.objects.create(name="Cat 3") cat4 = Category.objects.create(name="Cat 4") headers = ["id", "name", "categories"] row = [None, "FooBook", "Cat 1|Cat 2"] dataset = tablib.Dataset(row, headers=headers) class BookM2MResource(resources.ModelResource): categories = fields.Field( attribute="categories", m2m_add=True, widget=widgets.ManyToManyWidget(Category, field="name", separator="|"), ) class Meta: model = Book resource = BookM2MResource() resource.import_data(dataset, raise_errors=True) book = Book.objects.get(name="FooBook") self.assertIn(cat1, book.categories.all()) self.assertIn(cat2, book.categories.all()) self.assertNotIn(cat3, book.categories.all()) self.assertNotIn(cat4, book.categories.all()) row1 = [ book.id, "FooBook", "Cat 1|Cat 2", ] # This should have no effect, since Cat 1 and Cat 2 already exist row2 = [book.id, "FooBook", "Cat 3|Cat 4"] dataset = tablib.Dataset(row1, row2, headers=headers) resource.import_data(dataset, raise_errors=True) book2 = Book.objects.get(name="FooBook") self.assertEqual(book.id, book2.id) self.assertEqual(book.categories.count(), 4) self.assertIn(cat1, book2.categories.all()) self.assertIn(cat2, book2.categories.all()) self.assertIn(cat3, book2.categories.all()) self.assertIn(cat4, book2.categories.all()) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_queryset.py000066400000000000000000000037451463433610200333360ustar00rootroot00000000000000from unittest import mock import tablib from core.models import Book from core.tests.resources import BookResource from django.core.paginator import Paginator from django.test import TestCase class QuerysetHandlingTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_iter_queryset(self): qs = Book.objects.all() with mock.patch.object(qs, "iterator") as mocked_method: list(self.resource.iter_queryset(qs)) mocked_method.assert_called_once_with(chunk_size=100) def test_iter_queryset_prefetch_unordered(self): qsu = Book.objects.prefetch_related("categories").all() qso = qsu.order_by("pk").all() with mock.patch.object(qsu, "order_by") as mocked_method: mocked_method.return_value = qso list(self.resource.iter_queryset(qsu)) mocked_method.assert_called_once_with("pk") def test_iter_queryset_prefetch_ordered(self): qs = Book.objects.prefetch_related("categories").order_by("pk").all() with mock.patch("import_export.resources.Paginator", autospec=True) as p: p.return_value = Paginator(qs, 100) list(self.resource.iter_queryset(qs)) p.assert_called_once_with(qs, 100) def test_iter_queryset_prefetch_chunk_size(self): class B(BookResource): class Meta: chunk_size = 1000 paginator = "import_export.resources.Paginator" qs = Book.objects.prefetch_related("categories").order_by("pk").all() with mock.patch(paginator, autospec=True) as mocked_obj: mocked_obj.return_value = Paginator(qs, 1000) list(B().iter_queryset(qs)) mocked_obj.assert_called_once_with(qs, 1000) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_relationship.py000066400000000000000000000074511463433610200341540ustar00rootroot00000000000000from datetime import date import tablib from core.models import Author, Book from core.tests.resources import BookResource from django.test import TestCase from import_export import fields, resources class RelationshipFieldTest(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_relationships_fields(self): class B(resources.ModelResource): class Meta: model = Book fields = ("author__name",) author = Author.objects.create(name="Author") self.book.author = author resource = B() result = resource.fields["author__name"].export(self.book) self.assertEqual(result, author.name) def test_dehydrating_fields(self): class B(resources.ModelResource): full_title = fields.Field(column_name="Full title") class Meta: model = Book fields = ("author__name", "full_title") def dehydrate_full_title(self, obj): return "%s by %s" % (obj.name, obj.author.name) author = Author.objects.create(name="Author") self.book.author = author resource = B() full_title = resource.export_field(resource.get_fields()[0], self.book) self.assertEqual( full_title, "%s by %s" % (self.book.name, self.book.author.name) ) def test_dehydrate_field_using_custom_dehydrate_field_method(self): class B(resources.ModelResource): full_title = fields.Field( column_name="Full title", dehydrate_method="foo_dehydrate_full_title" ) class Meta: model = Book fields = "full_title" def foo_dehydrate_full_title(self, obj): return f"{obj.name} by {obj.author.name}" author = Author.objects.create(name="Author") self.book.author = author resource = B() full_title = resource.export_field(resource.get_fields()[0], self.book) self.assertEqual(full_title, f"{self.book.name} by {self.book.author.name}") def test_invalid_relation_field_name(self): class B(resources.ModelResource): full_title = fields.Field(column_name="Full title") class Meta: model = Book # author_name is not a valid field or relation, # so should be ignored fields = ("author_name", "full_title") resource = B() self.assertEqual(1, len(resource.fields)) self.assertEqual("full_title", list(resource.fields.keys())[0]) def test_widget_format_in_fk_field(self): class B(resources.ModelResource): class Meta: model = Book fields = ("author__birthday",) widgets = { "author__birthday": {"format": "%Y-%m-%d"}, } author = Author.objects.create(name="Author") self.book.author = author resource = B() result = resource.fields["author__birthday"].export(self.book) self.assertEqual(result, str(date.today())) def test_widget_kwargs_for_field(self): class B(resources.ModelResource): class Meta: model = Book fields = ("published",) widgets = { "published": {"format": "%d.%m.%Y"}, } resource = B() self.book.published = date(2012, 8, 13) result = resource.fields["published"].export(self.book) self.assertEqual(result, "13.08.2012") django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_resource.py000066400000000000000000000071151463433610200332770ustar00rootroot00000000000000from collections import OrderedDict from unittest import mock from unittest.mock import patch import tablib from core.models import Book from core.tests.resources import MyResource from django.test import TestCase from import_export import fields, results from import_export.options import ResourceOptions class ResourceTestCase(TestCase): def setUp(self): self.my_resource = MyResource() def test_fields(self): """Check that fields were determined correctly""" # check that our fields were determined self.assertIn("name", self.my_resource.fields) # check that resource instance fields attr isn't link to resource cls # fields self.assertFalse(MyResource.fields is self.my_resource.fields) # dynamically add new resource field into resource instance self.my_resource.fields.update( OrderedDict( [ ("new_field", fields.Field()), ] ) ) # check that new field in resource instance fields self.assertIn("new_field", self.my_resource.fields) # check that new field not in resource cls fields self.assertNotIn("new_field", MyResource.fields) def test_kwargs(self): target_kwargs = {"a": 1} my_resource = MyResource(**target_kwargs) self.assertEqual(my_resource.kwargs, target_kwargs) def test_field_column_name(self): field = self.my_resource.fields["name"] self.assertIn(field.column_name, "name") def test_meta(self): self.assertIsInstance(self.my_resource._meta, ResourceOptions) @mock.patch("builtins.dir") def test_new_handles_null_options(self, mock_dir): # #1163 - simulates a call to dir() returning additional attributes mock_dir.return_value = ["attrs"] class A(MyResource): pass A() def test_get_export_headers_order(self): self.assertEqual( self.my_resource.get_export_headers(), ["email", "name", "extra"] ) def test_default_after_import(self): self.assertIsNone( self.my_resource.after_import( tablib.Dataset(), results.Result(), ) ) def test_get_use_transactions_defined_in_resource(self): class A(MyResource): class Meta: use_transactions = True resource = A() self.assertTrue(resource.get_use_transactions()) def test_get_field_name_raises_AttributeError(self): err = ( "Field x does not exists in resource" ) with self.assertRaisesRegex(AttributeError, err): self.my_resource.get_field_name("x") def test_init_instance_raises_NotImplementedError(self): with self.assertRaises(NotImplementedError): self.my_resource.init_instance([]) @patch("core.models.Book.full_clean") def test_validate_instance_called_with_import_validation_errors_as_None( self, full_clean_mock ): # validate_instance() import_validation_errors is an optional kwarg # If not provided, it defaults to an empty dict # this tests that scenario by ensuring that an empty dict is passed # to the model instance full_clean() method. book = Book() self.my_resource._meta.clean_model_instances = True self.my_resource.validate_instance(book) target = dict() full_clean_mock.assert_called_once_with( exclude=target.keys(), validate_unique=True ) test_resource_factory.py000066400000000000000000000005211463433610200347410ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourcefrom core.models import Book from django.test import TestCase from import_export import resources class ModelResourceFactoryTest(TestCase): def test_create(self): BookResource = resources.modelresource_factory(Book) self.assertIn("id", BookResource.fields) self.assertEqual(BookResource._meta.model, Book) test_resource_fields.py000066400000000000000000000137031463433610200345460ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourceimport tablib from core.models import Book from django.test import TestCase from import_export import fields, resources class ModelResourceFieldDeclarations(TestCase): class MyBookResource(resources.ModelResource): author_email = fields.Field( attribute="author_email", column_name="author_email" ) class Meta: model = Book fields = ("id", "price") def setUp(self): self.book = Book.objects.create(name="Moonraker", price=".99") self.resource = ModelResourceFieldDeclarations.MyBookResource() def test_declared_field_not_imported(self): self.assertEqual("", self.book.author_email) rows = [ (self.book.id, "12.99", "jj@example.com"), ] dataset = tablib.Dataset(*rows, headers=["id", "price", "author_email"]) self.resource.import_data(dataset, raise_errors=True) self.book.refresh_from_db() # email should not be updated self.assertEqual("", self.book.author_email) def test_declared_field_not_exported(self): self.assertEqual("", self.book.author_email) data = self.resource.export() self.assertFalse("author_email" in data.dict[0]) class ModelResourceNoFieldDeclarations(TestCase): # No `fields` declaration so all fields should be included class MyBookResource(resources.ModelResource): author_email = fields.Field( attribute="author_email", column_name="author_email" ) class Meta: model = Book def setUp(self): self.book = Book.objects.create(name="Moonraker", price=".99") self.resource = ModelResourceNoFieldDeclarations.MyBookResource() def test_declared_field_imported(self): self.assertEqual("", self.book.author_email) rows = [ (self.book.id, "12.99", "jj@example.com"), ] dataset = tablib.Dataset(*rows, headers=["id", "price", "author_email"]) self.resource.import_data(dataset, raise_errors=True) self.book.refresh_from_db() # email should be updated self.assertEqual("jj@example.com", self.book.author_email) def test_declared_field_not_exported(self): self.assertEqual("", self.book.author_email) data = self.resource.export() self.assertTrue("author_email" in data.dict[0]) class ModelResourceExcludeDeclarations(TestCase): class MyBookResource(resources.ModelResource): author_email = fields.Field( attribute="author_email", column_name="author_email" ) class Meta: model = Book fields = ("id", "price") exclude = ("author_email",) def setUp(self): self.book = Book.objects.create(name="Moonraker", price=".99") self.resource = ModelResourceExcludeDeclarations.MyBookResource() def test_excluded_field_not_imported(self): self.assertEqual("", self.book.author_email) rows = [ (self.book.id, "12.99", "jj@example.com"), ] dataset = tablib.Dataset(*rows, headers=["id", "price", "author_email"]) self.resource.import_data(dataset, raise_errors=True) self.book.refresh_from_db() # email should not be updated self.assertEqual("", self.book.author_email) def test_declared_field_not_exported(self): self.assertEqual("", self.book.author_email) data = self.resource.export() self.assertFalse("author_email" in data.dict[0]) class ModelResourceFieldsAndExcludeDeclarations(TestCase): # Include the same field in both `fields` and `exclude`. # `fields` should take precedence. class MyBookResource(resources.ModelResource): author_email = fields.Field( attribute="author_email", column_name="author_email" ) class Meta: model = Book fields = ("id", "price", "author_email") exclude = ("author_email",) def setUp(self): self.book = Book.objects.create(name="Moonraker", price=".99") self.resource = ModelResourceFieldsAndExcludeDeclarations.MyBookResource() def test_excluded_field_not_imported(self): self.assertEqual("", self.book.author_email) rows = [ (self.book.id, "12.99", "jj@example.com"), ] dataset = tablib.Dataset(*rows, headers=["id", "price", "author_email"]) self.resource.import_data(dataset, raise_errors=True) self.book.refresh_from_db() # email should be updated self.assertEqual("jj@example.com", self.book.author_email) def test_declared_field_not_exported(self): self.assertEqual("", self.book.author_email) data = self.resource.export() self.assertTrue("author_email" in data.dict[0]) class ModelResourceDeclarationsNotInImportTest(TestCase): # issue 1697 # Add a declared field to the Resource, which is not present in the import file. # The import should succeed without issue. class MyBookResource(resources.ModelResource): author_email = fields.Field( attribute="author_email", column_name="author_email" ) class Meta: model = Book fields = ( "id", "price", ) def setUp(self): self.resource = ModelResourceDeclarationsNotInImportTest.MyBookResource() def test_excluded_field_not_imported(self): rows = [ ("1", "12.99"), ] dataset = tablib.Dataset(*rows, headers=["id", "price"]) result = self.resource.import_data(dataset, raise_errors=True) book = Book.objects.first() self.assertEqual("", book.author_email) self.assertEqual(1, result.totals["new"]) def test_excluded_field_not_exported(self): self.book = Book.objects.create(name="Moonraker", price=".99") self.assertEqual("", self.book.author_email) data = self.resource.export() self.assertFalse("author_email" in data.dict[0]) test_resource_postgres.py000066400000000000000000000162621463433610200351510ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourceimport json import sys from unittest import skipUnless import tablib from core.models import Book from core.tests.resources import BookResource from django.conf import settings from django.db import IntegrityError from django.db.models import CharField from django.test import TestCase, TransactionTestCase from import_export import fields, resources, widgets class ModelResourcePostgresModuleLoadTest(TestCase): pg_module_name = "django.contrib.postgres.fields" class ImportRaiser: def find_spec(self, fullname, path, target=None): if fullname == ModelResourcePostgresModuleLoadTest.pg_module_name: # we get here if the module is not loaded and not in sys.modules raise ImportError() def setUp(self): super().setUp() self.resource = BookResource() if self.pg_module_name in sys.modules: self.pg_modules = sys.modules[self.pg_module_name] del sys.modules[self.pg_module_name] def tearDown(self): super().tearDown() sys.modules[self.pg_module_name] = self.pg_modules def test_widget_from_django_field_cannot_import_postgres(self): # test that default widget is returned if postgres extensions # are not present sys.meta_path.insert(0, self.ImportRaiser()) f = fields.Field() res = self.resource.widget_from_django_field(f) self.assertEqual(widgets.Widget, res) @skipUnless( "postgresql" in settings.DATABASES["default"]["ENGINE"], "Run only against Postgres" ) class PostgresTests(TransactionTestCase): # Make sure to start the sequences back at 1 reset_sequences = True def test_create_object_after_importing_dataset_with_id(self): dataset = tablib.Dataset(headers=["id", "name"]) dataset.append([1, "Some book"]) resource = BookResource() result = resource.import_data(dataset) self.assertFalse(result.has_errors()) try: Book.objects.create(name="Some other book") except IntegrityError: self.fail("IntegrityError was raised.") def test_widget_from_django_field_for_ArrayField_returns_SimpleArrayWidget(self): f = ArrayField(CharField) resource = BookResource() res = resource.widget_from_django_field(f) self.assertEqual(widgets.SimpleArrayWidget, res) if "postgresql" in settings.DATABASES["default"]["ENGINE"]: from django.contrib.postgres.fields import ArrayField from django.db import models class BookWithChapters(models.Model): name = models.CharField("Book name", max_length=100) chapters = ArrayField(models.CharField(max_length=100), default=list) data = models.JSONField(null=True) class BookWithChapterNumbers(models.Model): name = models.CharField("Book name", max_length=100) chapter_numbers = ArrayField(models.PositiveSmallIntegerField(), default=list) class BookWithChaptersResource(resources.ModelResource): class Meta: model = BookWithChapters fields = ( "id", "name", "chapters", "data", ) class BookWithChapterNumbersResource(resources.ModelResource): class Meta: model = BookWithChapterNumbers fields = ( "id", "name", "chapter_numbers", ) class TestExportArrayField(TestCase): def test_exports_array_field(self): dataset_headers = ["id", "name", "chapters"] chapters = ["Introduction", "Middle Chapter", "Ending"] dataset_row = ["1", "Book With Chapters", ",".join(chapters)] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_with_chapters_resource = resources.modelresource_factory( model=BookWithChapters )() result = book_with_chapters_resource.import_data(dataset, dry_run=False) self.assertFalse(result.has_errors()) book_with_chapters = list(BookWithChapters.objects.all())[0] self.assertListEqual(book_with_chapters.chapters, chapters) class TestImportArrayField(TestCase): def setUp(self): self.resource = BookWithChaptersResource() self.chapters = ["Introduction", "Middle Chapter", "Ending"] self.book = BookWithChapters.objects.create(name="foo") self.dataset = tablib.Dataset(headers=["id", "name", "chapters"]) row = [self.book.id, "Some book", ",".join(self.chapters)] self.dataset.append(row) def test_import_of_data_with_array(self): self.assertListEqual(self.book.chapters, []) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.book.refresh_from_db() self.assertEqual(self.book.chapters, self.chapters) class TestImportIntArrayField(TestCase): def setUp(self): self.resource = BookWithChapterNumbersResource() self.chapter_numbers = [1, 2, 3] self.book = BookWithChapterNumbers.objects.create( name="foo", chapter_numbers=[] ) self.dataset = tablib.Dataset( *[(1, "some book", "1,2,3")], headers=["id", "name", "chapter_numbers"] ) def test_import_of_data_with_int_array(self): # issue #1495 self.assertListEqual(self.book.chapter_numbers, []) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.book.refresh_from_db() self.assertEqual(self.book.chapter_numbers, self.chapter_numbers) class TestExportJsonField(TestCase): def setUp(self): self.json_data = {"some_key": "some_value"} self.book = BookWithChapters.objects.create(name="foo", data=self.json_data) def test_export_field_with_appropriate_format(self): resource = resources.modelresource_factory(model=BookWithChapters)() result = resource.export(BookWithChapters.objects.all()) self.assertEqual(result[0][3], json.dumps(self.json_data)) class TestImportJsonField(TestCase): def setUp(self): self.resource = BookWithChaptersResource() self.data = {"some_key": "some_value"} self.json_data = json.dumps(self.data) self.book = BookWithChapters.objects.create(name="foo") self.dataset = tablib.Dataset(headers=["id", "name", "data"]) row = [self.book.id, "Some book", self.json_data] self.dataset.append(row) def test_sets_json_data_when_model_field_is_empty(self): self.assertIsNone(self.book.data) result = self.resource.import_data(self.dataset, raise_errors=True) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.book.refresh_from_db() self.assertEqual(self.book.data, self.data) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_resource_setup.py000066400000000000000000000042201463433610200345110ustar00rootroot00000000000000import tablib from core.models import Author, Book from core.tests.resources import BookResource, WithDefaultResource from django.test import TestCase from import_export import resources, widgets from import_export.instance_loaders import ModelInstanceLoader class TestResourceSetup(TestCase): def setUp(self): self.resource = BookResource() self.book = Book.objects.create(name="Some book") self.dataset = tablib.Dataset(headers=["id", "name", "author_email", "price"]) row = [self.book.pk, "Some book", "test@example.com", "10.25"] self.dataset.append(row) def test_default_instance_loader_class(self): self.assertIs(self.resource._meta.instance_loader_class, ModelInstanceLoader) def test_fields(self): fields = self.resource.fields self.assertIn("id", fields) self.assertIn("name", fields) self.assertIn("author_email", fields) self.assertIn("price", fields) def test_fields_foreign_key(self): fields = self.resource.fields self.assertIn("author", fields) widget = fields["author"].widget self.assertIsInstance(widget, widgets.ForeignKeyWidget) self.assertEqual(widget.model, Author) def test_get_display_name(self): display_name = self.resource.get_display_name() self.assertEqual(display_name, "BookResource") class BookResource(resources.ModelResource): class Meta: name = "Foo Name" model = Book import_id_fields = ["name"] resource = BookResource() display_name = resource.get_display_name() self.assertEqual(display_name, "Foo Name") def test_fields_m2m(self): fields = self.resource.fields self.assertIn("categories", fields) def test_excluded_fields(self): self.assertNotIn("imported", self.resource.fields) def test_init_instance(self): instance = self.resource.init_instance() self.assertIsInstance(instance, Book) def test_default(self): self.assertEqual( WithDefaultResource.fields["name"].clean({"name": ""}), "foo_bar" ) test_resource_transactions.py000066400000000000000000000107661463433610200360160ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourceimport tablib from core.models import Author, Book, Category, Profile from core.tests.resources import ( AuthorResource, BookResource, CategoryResource, ProfileResource, ) from django.test import TransactionTestCase, skipUnlessDBFeature from django.utils.encoding import force_str from django.utils.html import strip_tags class ModelResourceTransactionTest(TransactionTestCase): @skipUnlessDBFeature("supports_transactions") def test_m2m_import_with_transactions(self): resource = BookResource() cat1 = Category.objects.create(name="Cat 1") headers = ["id", "name", "categories"] row = [None, "FooBook", str(cat1.pk)] dataset = tablib.Dataset(row, headers=headers) result = resource.import_data(dataset, dry_run=True, use_transactions=True) row_diff = result.rows[0].diff fields = resource.get_fields() id_field = resource.fields["id"] id_diff = row_diff[fields.index(id_field)] # id diff should exist because in rollbacked transaction # FooBook has been saved self.assertTrue(id_diff) category_field = resource.fields["categories"] categories_diff = row_diff[fields.index(category_field)] self.assertEqual(strip_tags(categories_diff), force_str(cat1.pk)) # check that it is really rollbacked self.assertFalse(Book.objects.filter(name="FooBook")) @skipUnlessDBFeature("supports_transactions") def test_m2m_import_with_transactions_error(self): resource = ProfileResource() headers = ["id", "user"] # 'user' is a required field, the database will raise an error. row = [None, None] dataset = tablib.Dataset(row, headers=headers) result = resource.import_data(dataset, dry_run=True, use_transactions=True) # Ensure the error raised by the database has been saved. self.assertTrue(result.has_errors()) # Ensure the rollback has worked properly. self.assertEqual(Profile.objects.count(), 0) @skipUnlessDBFeature("supports_transactions") def test_integrity_error_rollback_on_savem2m(self): # savepoint_rollback() after an IntegrityError gives # TransactionManagementError (#399) class CategoryResourceRaisesIntegrityError(CategoryResource): def save_m2m(self, instance, *args, **kwargs): # force raising IntegrityError Category.objects.create(name=instance.name) resource = CategoryResourceRaisesIntegrityError() headers = ["id", "name"] rows = [ [None, "foo"], ] dataset = tablib.Dataset(*rows, headers=headers) result = resource.import_data( dataset, use_transactions=True, ) self.assertTrue(result.has_errors()) def test_rollback_on_validation_errors_false(self): """Should create only one instance as the second one raises a ``ValidationError``""" resource = AuthorResource() headers = ["id", "name", "birthday"] rows = [ ["", "A.A.Milne", ""], ["", "123", "1992test-01-18"], # raises ValidationError ] dataset = tablib.Dataset(*rows, headers=headers) result = resource.import_data( dataset, use_transactions=True, rollback_on_validation_errors=False, ) # Ensure the validation error raised by the database has been saved. self.assertTrue(result.has_validation_errors()) # Ensure that valid row resulted in an instance created. self.assertEqual(Author.objects.count(), 1) def test_rollback_on_validation_errors_true(self): """ Should not create any instances as the second one raises a ``ValidationError`` and ``rollback_on_validation_errors`` flag is set """ resource = AuthorResource() headers = ["id", "name", "birthday"] rows = [ ["", "A.A.Milne", ""], ["", "123", "1992test-01-18"], # raises ValidationError ] dataset = tablib.Dataset(*rows, headers=headers) result = resource.import_data( dataset, use_transactions=True, rollback_on_validation_errors=True, ) # Ensure the validation error raised by the database has been saved. self.assertTrue(result.has_validation_errors()) # Ensure the rollback has worked properly, no instances were created. self.assertFalse(Author.objects.exists()) test_string_resource.py000066400000000000000000000007311463433610200346030ustar00rootroot00000000000000django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresourcefrom core.models import Book from django.test import TestCase from import_export import resources class BookResourceWithStringModelTest(TestCase): def setUp(self): class BookResourceWithStringModel(resources.ModelResource): class Meta: model = "core.Book" self.resource = BookResourceWithStringModel() def test_resource_gets_correct_model_from_string(self): self.assertEqual(self.resource._meta.model, Book) django-import-export-4.0.9/tests/core/tests/test_resources/test_modelresource/test_widget.py000066400000000000000000000012551463433610200327320ustar00rootroot00000000000000from core.tests.resources import BookResource from django.db.models import CharField, SlugField from django.test import TestCase from import_export import widgets class WidgetFromDjangoFieldTest(TestCase): def test_widget_from_django_field_for_CharField_returns_CharWidget(self): f = CharField() resource = BookResource() w = resource.widget_from_django_field(f) self.assertEqual(widgets.CharWidget, w) def test_widget_from_django_field_for_CharField_subclass_returns_CharWidget(self): f = SlugField() resource = BookResource() w = resource.widget_from_django_field(f) self.assertEqual(widgets.CharWidget, w) django-import-export-4.0.9/tests/core/tests/test_resources/test_natural_foreign_key.py000066400000000000000000000041021463433610200315610ustar00rootroot00000000000000import tablib from core.models import Author, Book from django.test import TestCase from import_export import fields, resources, widgets class BookUsingNaturalKeys(resources.ModelResource): class Meta: model = Book fields = ["name", "author"] use_natural_foreign_keys = True class BookUsingAuthorNaturalKey(resources.ModelResource): class Meta: model = Book fields = ["name", "author"] author = fields.Field( attribute="author", column_name="author", widget=widgets.ForeignKeyWidget( Author, use_natural_foreign_keys=True, ), ) class TestNaturalKeys(TestCase): """Tests for issue 1816.""" def setUp(self) -> None: author = Author.objects.create(name="J. R. R. Tolkien") Book.objects.create(author=author, name="The Hobbit") self.expected_dataset = tablib.Dataset(headers=["name", "author"]) row = ["The Hobbit", '["J. R. R. Tolkien"]'] self.expected_dataset.append(row) def test_resource_use_natural_keys(self): """ test with ModelResource.Meta.use_natural_foreign_keys=True Reproduces this problem """ resource = BookUsingNaturalKeys() exported_dataset = resource.export(Book.objects.all()) self.assertDatasetEqual(self.expected_dataset, exported_dataset) def test_field_use_natural_keys(self): """ test with ModelResource.field.widget.use_natural_foreign_keys=True Example of correct behaviour """ resource = BookUsingAuthorNaturalKey() exported_dataset = resource.export(Book.objects.all()) self.assertDatasetEqual(self.expected_dataset, exported_dataset) def assertDatasetEqual(self, expected_dataset, actual_dataset, message=None): """ Util for comparing datasets """ self.assertEqual(len(expected_dataset), len(actual_dataset), message) for expected_row, actual_row in zip(expected_dataset, actual_dataset): self.assertEqual(expected_row, actual_row, message) django-import-export-4.0.9/tests/core/tests/test_resources/test_relationships.py000066400000000000000000000227171463433610200304320ustar00rootroot00000000000000import tablib from core.models import Book, Category, Person, Role, UUIDBook, UUIDCategory from core.tests.resources import BookResource from django.contrib.auth.models import User from django.test import TestCase from import_export import fields, resources, results, widgets class ForeignKeyWidgetFollowRelationship(TestCase): def setUp(self): self.user = User.objects.create(username="foo") self.role = Role.objects.create(user=self.user) self.person = Person.objects.create(role=self.role) def test_export(self): class MyPersonResource(resources.ModelResource): role = fields.Field( column_name="role", attribute="role", widget=widgets.ForeignKeyWidget(Role, field="user__username"), ) class Meta: model = Person fields = ["id", "role"] resource = MyPersonResource() dataset = resource.export(Person.objects.all()) self.assertEqual(len(dataset), 1) self.assertEqual("1", dataset[0][0]) self.assertEqual("foo", dataset[0][1]) self.role.user = None self.role.save() resource = MyPersonResource() dataset = resource.export(Person.objects.all()) self.assertEqual(len(dataset), 1) self.assertEqual("1", dataset[0][0]) self.assertEqual(None, dataset[0][1]) class ManyRelatedManagerDiffTest(TestCase): fixtures = ["category", "book", "author"] def setUp(self): pass def test_related_manager_diff(self): dataset_headers = ["id", "name", "categories"] dataset_row = ["1", "Test Book", "1"] original_dataset = tablib.Dataset(headers=dataset_headers) original_dataset.append(dataset_row) dataset_row[2] = "2" changed_dataset = tablib.Dataset(headers=dataset_headers) changed_dataset.append(dataset_row) book_resource = BookResource() export_headers = book_resource.get_export_headers() add_result = book_resource.import_data(original_dataset, dry_run=False) expected_value = '1' self.check_value(add_result, export_headers, expected_value) change_result = book_resource.import_data(changed_dataset, dry_run=False) expected_value = ( '1' '2' ) self.check_value(change_result, export_headers, expected_value) def check_value(self, result, export_headers, expected_value): self.assertEqual(len(result.rows), 1) diff = result.rows[0].diff self.assertEqual(diff[export_headers.index("categories")], expected_value) class ManyToManyWidgetDiffTest(TestCase): # issue #1270 - ensure ManyToMany fields are correctly checked for # changes when skip_unchanged=True fixtures = ["category", "book", "author"] def setUp(self): pass def test_many_to_many_widget_create(self): # the book is associated with 0 categories # when we import a book with category 1, the book # should be updated, not skipped book = Book.objects.first() book.categories.clear() dataset_headers = ["id", "name", "categories"] dataset_row = [book.id, book.name, "1"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_resource = BookResource() book_resource._meta.skip_unchanged = True self.assertEqual(0, book.categories.count()) result = book_resource.import_data(dataset, dry_run=False) book.refresh_from_db() self.assertEqual(1, book.categories.count()) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertEqual(Category.objects.first(), book.categories.first()) def test_many_to_many_widget_create_with_m2m_being_compared(self): # issue 1558 - when the object is a new instance and m2m is # evaluated for differences dataset_headers = ["id", "categories"] dataset_row = ["1", "1"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_resource = BookResource() book_resource._meta.skip_unchanged = True result = book_resource.import_data(dataset, dry_run=False) self.assertFalse(result.has_errors()) self.assertEqual(len(result.rows), 1) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_NEW) def test_many_to_many_widget_update(self): # the book is associated with 1 category ('Category 2') # when we import a book with category 1, the book # should be updated, not skipped, so that Category 2 is replaced by Category 1 book = Book.objects.first() dataset_headers = ["id", "name", "categories"] dataset_row = [book.id, book.name, "1"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_resource = BookResource() book_resource._meta.skip_unchanged = True self.assertEqual(1, book.categories.count()) result = book_resource.import_data(dataset, dry_run=False) self.assertEqual( result.rows[0].import_type, results.RowResult.IMPORT_TYPE_UPDATE ) self.assertEqual(1, book.categories.count()) self.assertEqual(Category.objects.first(), book.categories.first()) def test_many_to_many_widget_no_changes(self): # the book is associated with 1 category ('Category 2') # when we import a row with a book with category 1, the book # should be skipped, because there is no change book = Book.objects.first() dataset_headers = ["id", "name", "categories"] dataset_row = [book.id, book.name, book.categories.first().id] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_resource = BookResource() book_resource._meta.skip_unchanged = True self.assertEqual(1, book.categories.count()) result = book_resource.import_data(dataset, dry_run=False) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) self.assertEqual(1, book.categories.count()) def test_many_to_many_widget_handles_ordering(self): # the book is associated with 2 categories ('Category 1', 'Category 2') # when we import a row with a book with both categories (in any order), the book # should be skipped, because there is no change book = Book.objects.first() self.assertEqual(1, book.categories.count()) cat1 = Category.objects.get(name="Category 1") cat2 = Category.objects.get(name="Category 2") book.categories.add(cat1) book.save() self.assertEqual(2, book.categories.count()) dataset_headers = ["id", "name", "categories"] book_resource = BookResource() book_resource._meta.skip_unchanged = True # import with natural order dataset_row = [book.id, book.name, f"{cat1.id},{cat2.id}"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) result = book_resource.import_data(dataset, dry_run=False) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) # import with reverse order dataset_row = [book.id, book.name, f"{cat2.id},{cat1.id}"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) result = book_resource.import_data(dataset, dry_run=False) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) self.assertEqual(2, book.categories.count()) def test_many_to_many_widget_handles_uuid(self): # Test for #1435 - skip_row() handles M2M field when UUID pk used class _UUIDBookResource(resources.ModelResource): class Meta: model = UUIDBook uuid_resource = _UUIDBookResource() uuid_resource._meta.skip_unchanged = True cat1 = UUIDCategory.objects.create(name="Category 1") cat2 = UUIDCategory.objects.create(name="Category 2") uuid_book = UUIDBook.objects.create(name="uuid book") uuid_book.categories.add(cat1, cat2) uuid_book.save() dataset_headers = ["id", "name", "categories"] dataset_row = [uuid_book.id, uuid_book.name, f"{cat1.catid},{cat2.catid}"] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) result = uuid_resource.import_data(dataset, dry_run=False) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) def test_skip_row_no_m2m_data_supplied(self): # issue #1437 # test skip_row() when the model defines a m2m field # but it is not present in the dataset book = Book.objects.first() dataset_headers = ["id", "name"] dataset_row = [book.id, book.name] dataset = tablib.Dataset(headers=dataset_headers) dataset.append(dataset_row) book_resource = BookResource() book_resource._meta.skip_unchanged = True self.assertEqual(1, book.categories.count()) result = book_resource.import_data(dataset, dry_run=False) self.assertEqual(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_SKIP) self.assertEqual(1, book.categories.count()) django-import-export-4.0.9/tests/core/tests/test_results.py000066400000000000000000000110531463433610200241650ustar00rootroot00000000000000from unittest.mock import patch from core.models import Book from django.core.exceptions import ValidationError from django.test.testcases import TestCase from tablib import Dataset from import_export.results import Error, Result, RowResult class ResultTest(TestCase): def setUp(self): self.result = Result() headers = ["id", "book_name"] rows = [(1, "Some book")] self.dataset = Dataset(*rows, headers=headers) def test_add_dataset_headers(self): target = ["some_header", "Error"] self.result.add_dataset_headers(["some_header"]) self.assertEqual(target, self.result.failed_dataset.headers) def test_add_dataset_headers_empty_list(self): target = ["Error"] self.result.add_dataset_headers([]) self.assertEqual(target, self.result.failed_dataset.headers) def test_add_dataset_headers_None(self): target = ["Error"] self.result.add_dataset_headers(None) self.assertEqual(target, self.result.failed_dataset.headers) def test_result_append_failed_row_with_ValidationError(self): target = [[1, "Some book", "['some error']"]] self.result.append_failed_row( self.dataset.dict[0], ValidationError("some error") ) self.assertEqual(target, self.result.failed_dataset.dict) def test_result_append_failed_row_with_wrapped_error(self): target = [[1, "Some book", "['some error']"]] row_result = RowResult() error = Error(ValidationError("some error")) row_result.errors = [error] self.result.append_failed_row(self.dataset.dict[0], row_result.errors[0]) self.assertEqual(target, self.result.failed_dataset.dict) def test_add_instance_info_null_instance(self): row_result = RowResult() row_result.add_instance_info(None) self.assertEqual(None, row_result.object_id) self.assertEqual(None, row_result.object_repr) def test_add_instance_info_no_instance_pk(self): row_result = RowResult() row_result.add_instance_info(Book()) self.assertEqual(None, row_result.object_id) self.assertEqual("", row_result.object_repr) def test_add_instance_info(self): row_result = RowResult() row_result.add_instance_info(Book(pk=1, name="some book")) self.assertEqual(1, row_result.object_id) self.assertEqual("some book", row_result.object_repr) @patch("import_export.results.logger") def test_add_instance_info_instance_unserializable(self, mock_logger): # issue 1763 class UnserializableBook(object): # will raise TypeError def __str__(self): return None row_result = RowResult() row_result.add_instance_info(UnserializableBook()) mock_logger.debug.assert_called_with( "call to force_str() on instance failed: " "__str__ returned non-string (type NoneType)" ) self.assertEqual(None, row_result.object_repr) def test_is_new(self): row_result = RowResult() self.assertFalse(row_result.is_new()) row_result.import_type = RowResult.IMPORT_TYPE_NEW self.assertTrue(row_result.is_new()) self.assertTrue(row_result.is_valid()) def test_is_update(self): row_result = RowResult() self.assertFalse(row_result.is_update()) row_result.import_type = RowResult.IMPORT_TYPE_UPDATE self.assertTrue(row_result.is_update()) self.assertTrue(row_result.is_valid()) def test_is_skip(self): row_result = RowResult() self.assertFalse(row_result.is_skip()) row_result.import_type = RowResult.IMPORT_TYPE_SKIP self.assertTrue(row_result.is_skip()) self.assertTrue(row_result.is_valid()) def test_is_delete(self): row_result = RowResult() self.assertFalse(row_result.is_delete()) row_result.import_type = RowResult.IMPORT_TYPE_DELETE self.assertTrue(row_result.is_delete()) self.assertTrue(row_result.is_valid()) def test_is_error(self): row_result = RowResult() self.assertFalse(row_result.is_error()) row_result.import_type = RowResult.IMPORT_TYPE_ERROR self.assertTrue(row_result.is_error()) self.assertFalse(row_result.is_valid()) def test_is_invalid(self): row_result = RowResult() self.assertFalse(row_result.is_invalid()) row_result.import_type = RowResult.IMPORT_TYPE_INVALID self.assertTrue(row_result.is_invalid()) self.assertFalse(row_result.is_valid()) django-import-export-4.0.9/tests/core/tests/test_tmp_storages.py000066400000000000000000000133651463433610200252030ustar00rootroot00000000000000import io import os from unittest import skipUnless from unittest.mock import mock_open, patch import django from django.core.cache import cache from django.core.files.storage import FileSystemStorage, default_storage from django.test import TestCase from django.test.utils import override_settings from import_export.tmp_storages import ( BaseStorage, CacheStorage, MediaStorage, TempFolderStorage, ) class TestBaseStorage(TestCase): def setUp(self): self.storage = BaseStorage() def test_save(self): with self.assertRaises(NotImplementedError): self.storage.save(None) def test_read(self): with self.assertRaises(NotImplementedError): self.storage.read() def test_remove(self): with self.assertRaises(NotImplementedError): self.storage.remove() class TestTempFolderStorage(TempFolderStorage): def get_full_path(self): return "/tmp/f" class TestMediaStorage(MediaStorage): def get_full_path(self): return "f" class TempStoragesTest(TestCase): def setUp(self): self.test_string = b""" id,name,author,author_email,imported,published,price,categories 2,Bar,1,,0,,, 1,Foo,,,0,,, """ def test_temp_folder_storage(self): tmp_storage = TempFolderStorage() tmp_storage.save(self.test_string) name = tmp_storage.name tmp_storage = TempFolderStorage(name=name) self.assertEqual(self.test_string.decode(), tmp_storage.read()) self.assertTrue(os.path.isfile(tmp_storage.get_full_path())) tmp_storage.remove() self.assertFalse(os.path.isfile(tmp_storage.get_full_path())) def test_temp_folder_storage_read_with_encoding(self): tmp_storage = TestTempFolderStorage(encoding="utf-8") tmp_storage.name = "f" with patch("builtins.open", mock_open(read_data="data")) as mock_file: tmp_storage.read() mock_file.assert_called_with("/tmp/f", "r", encoding="utf-8") def test_cache_storage(self): tmp_storage = CacheStorage() tmp_storage.save(self.test_string) name = tmp_storage.name tmp_storage = CacheStorage(name=name) self.assertEqual(self.test_string, tmp_storage.read()) self.assertIsNotNone(cache.get(tmp_storage.CACHE_PREFIX + tmp_storage.name)) tmp_storage.remove() self.assertIsNone(cache.get(tmp_storage.CACHE_PREFIX + tmp_storage.name)) def test_cache_storage_read_with_encoding(self): tmp_storage = CacheStorage() tmp_storage.name = "f" cache.set("django-import-export-f", 101) res = tmp_storage.read() self.assertEqual(101, res) def test_cache_storage_read_with_encoding_unicode_chars(self): tmp_storage = CacheStorage() tmp_storage.name = "f" tmp_storage.save("àèìòùçñ") res = tmp_storage.read() self.assertEqual("àèìòùçñ", res) def test_media_storage(self): tmp_storage = MediaStorage() tmp_storage.save(self.test_string) name = tmp_storage.name tmp_storage = MediaStorage(name=name) self.assertEqual(self.test_string, tmp_storage.read()) self.assertTrue(default_storage.exists(tmp_storage.get_full_path())) tmp_storage.remove() self.assertFalse(default_storage.exists(tmp_storage.get_full_path())) def test_media_storage_read_with_encoding(self): tmp_storage = TestMediaStorage() tmp_storage.name = "f" with patch.object(FileSystemStorage, "open") as mock_open: tmp_storage.read() mock_open.assert_called_with("f", mode="rb") class CustomizedStorage(object): save_count = 0 open_count = 0 delete_count = 0 def __init__(self, **kwargs): pass def save(self, path, data): self.save_count += 1 def open(self, path, mode=None): self.open_count += 1 return io.StringIO("a") def delete(self, path): self.delete_count += 1 @skipUnless(django.VERSION <= (4, 2), "Django 4.2") class CustomizedMediaStorageTestDjango42(TestCase): @override_settings(IMPORT_EXPORT_DEFAULT_FILE_STORAGE=CustomizedStorage) def test_MediaStorage_uses_custom_storage_implementation(self): tmp_storage = TestMediaStorage() tmp_storage.save(b"a") self.assertEqual(1, tmp_storage._storage.save_count) tmp_storage.read() self.assertEqual(1, tmp_storage._storage.open_count) tmp_storage.remove() self.assertEqual(1, tmp_storage._storage.delete_count) @skipUnless(django.VERSION >= (5, 0), "Django 5.0") class CustomizedMediaStorageTestDjango50(TestCase): @override_settings( STORAGES={ "import_export": { "BACKEND": "tests.core.tests.test_tmp_storages.CustomizedStorage" } } ) def test_MediaStorage_uses_custom_storage_implementation(self): tmp_storage = TestMediaStorage() tmp_storage.save(b"a") self.assertEqual(1, tmp_storage._storage.save_count) tmp_storage.read() self.assertEqual(1, tmp_storage._storage.open_count) tmp_storage.remove() self.assertEqual(1, tmp_storage._storage.delete_count) @override_settings( STORAGES={ "import_export": { "BACKEND": "tests.core.tests.test_tmp_storages.CustomizedStorage" } } ) def test_disable_media_folder(self): tmp_storage = MediaStorage(MEDIA_FOLDER=None) tmp_storage.name = "TESTNAME" self.assertIsNone(tmp_storage.MEDIA_FOLDER) self.assertEqual("TESTNAME", tmp_storage.get_full_path()) def test_media_folder(self): tmp_storage = MediaStorage() self.assertEqual("django-import-export", tmp_storage.MEDIA_FOLDER) django-import-export-4.0.9/tests/core/tests/test_widgets.py000066400000000000000000000640561463433610200241450ustar00rootroot00000000000000import json from datetime import date, datetime, time, timedelta from decimal import Decimal from unittest import mock from unittest.mock import patch import django from core.models import Author, Book, Category from core.tests.utils import ignore_utcnow_deprecation_warning from django.test import TestCase from django.test.utils import override_settings from django.utils import timezone from import_export import widgets from import_export.exceptions import WidgetError class WidgetTest(TestCase): def setUp(self): self.widget = widgets.Widget() def test_clean(self): self.assertEqual("a", self.widget.clean("a")) def test_render(self): self.assertEqual("1", self.widget.render(1)) class RowDeprecationTestMixin(object): def test_render_row_deprecation(self): with self.assertWarnsRegex( DeprecationWarning, r"^The 'obj' parameter is deprecated and " "will be removed in a future release$", ): self.widget.render(Book.objects.none(), obj={"a": 1}) class CharWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.widget = widgets.CharWidget() def test_clean(self): self.assertEqual("a", self.widget.clean("a")) def test_render(self): self.assertEqual("1", self.widget.render(1)) def test_render_no_coerce_to_string(self): self.widget = widgets.CharWidget(coerce_to_string=False) self.assertEqual(1, self.widget.render(1)) def test_clean_with_allow_blank_is_False(self): self.widget = widgets.CharWidget(allow_blank=False) self.assertIsNone(self.widget.clean(None)) def test_clean_with_allow_blank_is_True(self): self.widget = widgets.CharWidget(allow_blank=True) self.assertEqual("", self.widget.clean(None)) class BooleanWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.widget = widgets.BooleanWidget() def test_clean(self): self.assertTrue(self.widget.clean("1")) self.assertTrue(self.widget.clean(1)) self.assertTrue(self.widget.clean("TRUE")) self.assertTrue(self.widget.clean("True")) self.assertTrue(self.widget.clean("true")) self.assertFalse(self.widget.clean("0")) self.assertFalse(self.widget.clean(0)) self.assertFalse(self.widget.clean("FALSE")) self.assertFalse(self.widget.clean("False")) self.assertFalse(self.widget.clean("false")) self.assertEqual(self.widget.clean(""), None) self.assertEqual(self.widget.clean("NONE"), None) self.assertEqual(self.widget.clean("None"), None) self.assertEqual(self.widget.clean("none"), None) self.assertEqual(self.widget.clean("NULL"), None) self.assertEqual(self.widget.clean("null"), None) def test_render(self): self.assertEqual(self.widget.render(True), "1") self.assertEqual(self.widget.render(False), "0") self.assertEqual(self.widget.render(None), "") def test_render_coerce_to_string_is_False(self): self.widget = widgets.BooleanWidget(coerce_to_string=False) self.assertTrue(self.widget.render(True)) self.assertFalse(self.widget.render(False)) self.assertIsNone(self.widget.render(None)) def test_render_invalid_type(self): self.assertEqual(self.widget.render("a"), "") class FormatDatetimeTest(TestCase): date = date(10, 8, 2) target_dt = "02.08.0010" format = "%d.%m.%Y" def test_format_datetime_gte_django4(self): self.assertEqual( self.target_dt, widgets.format_datetime(self.date, self.format) ) class DateWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.date = date(2012, 8, 13) self.widget = widgets.DateWidget("%d.%m.%Y") def test_render(self): self.assertEqual(self.widget.render(self.date), "13.08.2012") def test_render_none(self): self.assertEqual(self.widget.render(None), "") def test_render_invalid_type(self): self.assertEqual(self.widget.render(int(1)), "") def test_render_coerce_to_string_is_False(self): self.widget = widgets.DateWidget(coerce_to_string=False) self.assertEqual(self.date, self.widget.render(self.date)) def test_render_datetime_safe(self): """datetime_safe is supposed to be used to support dates older than 1000""" self.date = date(10, 8, 2) self.assertEqual(self.widget.render(self.date), "02.08.0010") def test_clean(self): self.assertEqual(self.widget.clean("13.08.2012"), self.date) def test_clean_returns_None_for_empty_value(self): self.assertIsNone(self.widget.clean(None)) def test_clean_returns_date_when_date_passed(self): self.assertEqual(self.date, self.widget.clean(self.date)) @patch("import_export.widgets.logger") def test_clean_raises_ValueError(self, mock_logger): self.widget = widgets.DateWidget("x") with self.assertRaisesRegex( ValueError, "Value could not be parsed using defined formats." ): self.widget.clean("2021-05-01") mock_logger.debug.assert_called_with( "time data '2021-05-01' does not match format 'x'" ) @override_settings(USE_TZ=True) def test_use_tz(self): self.assertEqual(self.widget.render(self.date), "13.08.2012") self.assertEqual(self.widget.clean("13.08.2012"), self.date) @override_settings(DATE_INPUT_FORMATS=None) def test_default_format(self): self.widget = widgets.DateWidget() self.assertEqual(("%Y-%m-%d",), self.widget.formats) class DateTimeWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.datetime = datetime(2012, 8, 13, 18, 0, 0) self.widget = widgets.DateTimeWidget("%d.%m.%Y %H:%M:%S") def test_render(self): self.assertEqual(self.widget.render(self.datetime), "13.08.2012 18:00:00") def test_render_none(self): self.assertEqual(self.widget.render(None), "") def test_render_invalid_type(self): self.assertEqual(self.widget.render(int(1)), "") def test_render_coerce_to_string_is_False(self): self.widget = widgets.DateTimeWidget(coerce_to_string=False) self.assertEqual(self.datetime, self.widget.render(self.datetime)) def test_clean(self): self.assertEqual(self.widget.clean("13.08.2012 18:00:00"), self.datetime) @patch("import_export.widgets.logger") def test_clean_raises_ValueError(self, mock_logger): self.widget = widgets.DateTimeWidget("x") with self.assertRaisesRegex( ValueError, "Value could not be parsed using defined formats." ): self.widget.clean("2021-05-01") mock_logger.debug.assert_called_with( "time data '2021-05-01' does not match format 'x'" ) @ignore_utcnow_deprecation_warning @override_settings(USE_TZ=True, TIME_ZONE="Europe/Ljubljana") def test_use_tz(self): import pytz utc_dt = timezone.make_aware(self.datetime, pytz.UTC) self.assertEqual(self.widget.render(utc_dt), "13.08.2012 20:00:00") self.assertEqual(self.widget.clean("13.08.2012 20:00:00"), utc_dt) @ignore_utcnow_deprecation_warning @override_settings(USE_TZ=True, TIME_ZONE="Europe/Ljubljana") def test_clean_returns_tz_aware_datetime_when_naive_datetime_passed(self): import pytz # issue 1165 if django.VERSION >= (5, 0): from zoneinfo import ZoneInfo tz = ZoneInfo("Europe/Ljubljana") else: tz = pytz.timezone("Europe/Ljubljana") target_dt = timezone.make_aware(self.datetime, tz) self.assertEqual(target_dt, self.widget.clean(self.datetime)) @ignore_utcnow_deprecation_warning @override_settings(USE_TZ=True, TIME_ZONE="Europe/Ljubljana") def test_clean_handles_tz_aware_datetime(self): import pytz self.datetime = datetime(2012, 8, 13, 18, 0, 0, tzinfo=pytz.timezone("UTC")) self.assertEqual(self.datetime, self.widget.clean(self.datetime)) @override_settings(DATETIME_INPUT_FORMATS=None) def test_default_format(self): self.widget = widgets.DateTimeWidget() self.assertEqual(("%Y-%m-%d %H:%M:%S",), self.widget.formats) def test_clean_returns_datetime_when_datetime_passed(self): self.assertEqual(self.datetime, self.widget.clean(self.datetime)) def test_render_datetime_safe(self): """datetime_safe is supposed to be used to support dates older than 1000""" self.datetime = datetime(10, 8, 2) self.assertEqual(self.widget.render(self.datetime), "02.08.0010 00:00:00") class DateWidgetBefore1900Test(TestCase): """https://github.com/django-import-export/django-import-export/pull/94""" def setUp(self): self.date = date(1868, 8, 13) self.widget = widgets.DateWidget("%d.%m.%Y") def test_render(self): self.assertEqual(self.widget.render(self.date), "13.08.1868") def test_clean(self): self.assertEqual(self.widget.clean("13.08.1868"), self.date) class DateTimeWidgetBefore1900Test(TestCase): def setUp(self): self.datetime = datetime(1868, 8, 13) self.widget = widgets.DateTimeWidget("%d.%m.%Y") def test_render(self): self.assertEqual("13.08.1868", self.widget.render(self.datetime)) def test_clean(self): self.assertEqual(self.datetime, self.widget.clean("13.08.1868")) class TimeWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.time = time(20, 15, 0) self.widget = widgets.TimeWidget("%H:%M:%S") def test_render(self): self.assertEqual(self.widget.render(self.time), "20:15:00") def test_render_none(self): self.assertEqual(self.widget.render(None), "") def test_render_invalid_type(self): self.assertEqual(self.widget.render(int(1)), "") def test_render_coerce_to_string_is_False(self): self.widget = widgets.TimeWidget(coerce_to_string=False) self.assertEqual(self.time, self.widget.render(self.time)) def test_clean(self): self.assertEqual(self.widget.clean("20:15:00"), self.time) @override_settings(TIME_INPUT_FORMATS=None) def test_default_format(self): self.widget = widgets.TimeWidget() self.assertEqual(("%H:%M:%S",), self.widget.formats) @patch("import_export.widgets.logger") def test_clean_raises_ValueError(self, mock_logger): self.widget = widgets.TimeWidget("x") with self.assertRaisesRegex( ValueError, "Value could not be parsed using defined formats." ): self.widget.clean("20:15:00") mock_logger.debug.assert_called_with( "time data '20:15:00' does not match format 'x'" ) def test_clean_returns_time_when_time_passed(self): self.assertEqual(self.time, self.widget.clean(self.time)) class DurationWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.duration = timedelta(hours=1, minutes=57, seconds=0) self.widget = widgets.DurationWidget() def test_render(self): self.assertEqual(self.widget.render(self.duration), "1:57:00") def test_render_none(self): self.assertEqual(self.widget.render(None), "") def test_render_zero(self): self.assertEqual(self.widget.render(timedelta(0)), "0:00:00") def test_render_coerce_to_string_is_False(self): self.widget = widgets.DurationWidget(coerce_to_string=False) self.assertEqual(self.duration, self.widget.render(self.duration)) def test_render_invalid_type(self): self.assertEqual(self.widget.render(int(1)), "") def test_clean(self): self.assertEqual(self.widget.clean("1:57:00"), self.duration) def test_clean_none(self): self.assertEqual(self.widget.clean(""), None) def test_clean_zero(self): self.assertEqual(self.widget.clean("0:00:00"), timedelta(0)) @patch("import_export.widgets.parse_duration", side_effect=ValueError("err")) @patch("import_export.widgets.logger") def test_clean_raises_ValueError(self, mock_logger, _): with self.assertRaisesRegex(ValueError, "Value could not be parsed."): self.widget.clean("x") mock_logger.debug.assert_called_with("err") class NumberWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = 11.111 self.widget = widgets.NumberWidget() self.widget_coerce_to_string = widgets.NumberWidget(coerce_to_string=True) def test_is_empty_value_is_none(self): self.assertTrue(self.widget.is_empty(None)) def test_is_empty_value_is_empty_string(self): self.assertTrue(self.widget.is_empty("")) def test_is_empty_value_is_whitespace(self): self.assertTrue(self.widget.is_empty(" ")) def test_is_empty_value_is_zero(self): self.assertFalse(self.widget.is_empty(0)) def test_render(self): self.assertEqual("11.111", self.widget.render(self.value)) def test_render_None_coerce_to_string_False(self): self.assertEqual("", self.widget.render(None)) def test_render_invalid_type(self): self.assertEqual(self.widget.render("a"), "") @override_settings(LANGUAGE_CODE="fr-fr") def test_locale_render_coerce_to_string_gte4(self): self.assertEqual("11,111", self.widget_coerce_to_string.render(self.value)) def test_coerce_to_string_value_is_None(self): self.assertEqual("", self.widget_coerce_to_string.render(None)) class FloatWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = 11.111 self.widget = widgets.FloatWidget() self.widget_coerce_to_string = widgets.FloatWidget(coerce_to_string=True) def test_clean(self): self.assertEqual(self.widget.clean(11.111), self.value) def test_render(self): self.assertEqual(self.widget.render(self.value), "11.111") def test_render_invalid_type(self): self.assertEqual(self.widget.render("a"), "") def test_clean_string_zero(self): self.assertEqual(self.widget.clean("0"), 0.0) self.assertEqual(self.widget.clean("0.0"), 0.0) def test_clean_empty_string(self): self.assertEqual(self.widget.clean(""), None) self.assertEqual(self.widget.clean(" "), None) self.assertEqual(self.widget.clean("\r\n\t"), None) @override_settings(LANGUAGE_CODE="fr-fr") def test_locale_render_coerce_to_string_gte4(self): self.assertEqual(self.widget_coerce_to_string.render(self.value), "11,111") class DecimalWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = Decimal("11.111") self.widget = widgets.DecimalWidget() def test_clean(self): self.assertEqual(self.widget.clean("11.111"), self.value) self.assertEqual(self.widget.clean(11.111), self.value) def test_render_coerce_to_string_is_False(self): self.widget = widgets.DecimalWidget(coerce_to_string=False) self.assertEqual(self.widget.render(self.value), self.value) def test_render(self): self.assertEqual(self.widget.render(self.value), "11.111") def test_render_invalid_type(self): self.assertEqual(self.widget.render("1"), "") def test_clean_string_zero(self): self.assertEqual(self.widget.clean("0"), Decimal("0")) self.assertEqual(self.widget.clean("0.0"), Decimal("0")) def test_clean_empty_string(self): self.assertEqual(self.widget.clean(""), None) self.assertEqual(self.widget.clean(" "), None) self.assertEqual(self.widget.clean("\r\n\t"), None) @override_settings(LANGUAGE_CODE="fr-fr") def test_locale_render_coerce_to_string_gte4(self): self.assertEqual(self.widget.render(self.value), "11,111") class IntegerWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = 0 self.widget = widgets.IntegerWidget() self.bigintvalue = 163371428940853127 self.widget_coerce_to_string = widgets.IntegerWidget(coerce_to_string=True) def test_clean_integer_zero(self): self.assertEqual(self.widget.clean(0), self.value) def test_clean_big_integer(self): self.assertEqual(self.widget.clean(163371428940853127), self.bigintvalue) def test_clean_string_zero(self): self.assertEqual(self.widget.clean("0"), self.value) self.assertEqual(self.widget.clean("0.0"), self.value) def test_clean_empty_string(self): self.assertEqual(self.widget.clean(""), None) self.assertEqual(self.widget.clean(" "), None) self.assertEqual(self.widget.clean("\n\t\r"), None) def test_render_invalid_type(self): self.assertEqual(self.widget.render("a"), "") @override_settings(LANGUAGE_CODE="fr-fr") def test_locale_render_gte_django4(self): self.assertEqual(self.widget_coerce_to_string.render(self.value), "0") class ForeignKeyWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.widget = widgets.ForeignKeyWidget(Author) self.natural_key_author_widget = widgets.ForeignKeyWidget( Author, use_natural_foreign_keys=True ) self.natural_key_book_widget = widgets.ForeignKeyWidget( Book, use_natural_foreign_keys=True ) self.author = Author.objects.create(name="Foo") self.book = Book.objects.create(name="Bar", author=self.author) def test_clean(self): self.assertEqual(self.widget.clean(self.author.id), self.author) def test_clean_empty(self): self.assertEqual(self.widget.clean(""), None) def test_render(self): self.assertEqual(self.widget.render(self.author), self.author.pk) def test_render_empty(self): self.assertEqual(self.widget.render(None), "") def test_clean_multi_column(self): class BirthdayWidget(widgets.ForeignKeyWidget): def get_queryset(self, value, row, *args, **kwargs): return self.model.objects.filter(birthday=row["birthday"]) author2 = Author.objects.create(name="Foo") author2.birthday = "2016-01-01" author2.save() birthday_widget = BirthdayWidget(Author, "name") row_dict = {"name": "Foo", "birthday": author2.birthday} self.assertEqual(birthday_widget.clean("Foo", row=row_dict), author2) def test_invalid_get_queryset(self): class BirthdayWidget(widgets.ForeignKeyWidget): def get_queryset(self, value, row): return self.model.objects.filter(birthday=row["birthday"]) birthday_widget = BirthdayWidget(Author, "name") row_dict = {"name": "Foo", "age": 38} with self.assertRaises(TypeError): birthday_widget.clean("Foo", row=row_dict, row_number=1) def test_lookup_multiple_columns(self): # issue 1516 - override the values used to lookup an entry class BirthdayWidget(widgets.ForeignKeyWidget): def get_lookup_kwargs(self, value, row, *args, **kwargs): return {"name": row["name"], "birthday": row["birthday"]} target_author = Author.objects.create(name="James Joyce", birthday="1882-02-02") row_dict = {"name": "James Joyce", "birthday": "1882-02-02"} birthday_widget = BirthdayWidget(Author, "name") # prove that the overridden kwargs identify a row res = birthday_widget.clean("non-existent name", row=row_dict) self.assertEqual(target_author, res) def test_render_handles_value_error(self): class TestObj(object): @property def attr(self): raise ValueError("some error") t = TestObj() self.widget = widgets.ForeignKeyWidget(mock.Mock(), "attr") self.assertIsNone(self.widget.render(t)) def test_author_natural_key_clean(self): """ Ensure that we can import an author by its natural key. Note that this will always need to be an iterable. Generally this will be rendered as a list. """ self.assertEqual( self.natural_key_author_widget.clean(json.dumps(self.author.natural_key())), self.author, ) def test_author_natural_key_render(self): """ Ensure we can render an author by its natural key. Natural keys will always be tuples. """ self.assertEqual( self.natural_key_author_widget.render(self.author), json.dumps(self.author.natural_key()), ) def test_book_natural_key_clean(self): """ Use the book case to validate a composite natural key of book name and author can be cleaned. """ self.assertEqual( self.natural_key_book_widget.clean(json.dumps(self.book.natural_key())), self.book, ) def test_book_natural_key_render(self): """ Use the book case to validate a composite natural key of book name and author can be rendered """ self.assertEqual( self.natural_key_book_widget.render(self.book), json.dumps(self.book.natural_key()), ) def test_natural_foreign_key_with_key_is_id(self): with self.assertRaises(WidgetError) as e: widgets.ForeignKeyWidget( Author, use_natural_foreign_keys=True, key_is_id=True ) self.assertEqual( "use_natural_foreign_keys and key_is_id " "cannot both be True", str(e.exception), ) class ManyToManyWidget(TestCase, RowDeprecationTestMixin): def setUp(self): self.widget = widgets.ManyToManyWidget(Category) self.widget_name = widgets.ManyToManyWidget(Category, field="name") self.cat1 = Category.objects.create(name="Cat úňíčóďě") self.cat2 = Category.objects.create(name="Cat 2") def test_clean(self): value = "%s,%s" % (self.cat1.pk, self.cat2.pk) cleaned_data = self.widget.clean(value) self.assertEqual(len(cleaned_data), 2) self.assertIn(self.cat1, cleaned_data) self.assertIn(self.cat2, cleaned_data) def test_clean_field(self): value = "%s,%s" % (self.cat1.name, self.cat2.name) cleaned_data = self.widget_name.clean(value) self.assertEqual(len(cleaned_data), 2) self.assertIn(self.cat1, cleaned_data) self.assertIn(self.cat2, cleaned_data) def test_clean_field_spaces(self): value = "%s, %s" % (self.cat1.name, self.cat2.name) cleaned_data = self.widget_name.clean(value) self.assertEqual(len(cleaned_data), 2) self.assertIn(self.cat1, cleaned_data) self.assertIn(self.cat2, cleaned_data) def test_clean_typo(self): value = "%s," % self.cat1.pk cleaned_data = self.widget.clean(value) self.assertEqual(len(cleaned_data), 1) self.assertIn(self.cat1, cleaned_data) @mock.patch("core.models.Category.objects.none") def test_clean_handles_None_value(self, mock_none): self.widget.clean(None) self.assertEqual(1, mock_none.call_count) def test_int(self): value = self.cat1.pk cleaned_data = self.widget.clean(value) self.assertEqual(len(cleaned_data), 1) self.assertIn(self.cat1, cleaned_data) def test_float(self): value = float(self.cat1.pk) cleaned_data = self.widget.clean(value) self.assertEqual(len(cleaned_data), 1) self.assertIn(self.cat1, cleaned_data) def test_render(self): self.assertEqual( self.widget.render(Category.objects.order_by("id")), "%s,%s" % (self.cat1.pk, self.cat2.pk), ) self.assertEqual( self.widget_name.render(Category.objects.order_by("id")), "%s,%s" % (self.cat1.name, self.cat2.name), ) def test_render_value_none_as_blank(self): self.assertEqual("", self.widget.render(None)) class JSONWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = {"value": 23} self.widget = widgets.JSONWidget() def test_clean(self): self.assertEqual(self.widget.clean('{"value": 23}'), self.value) def test_render(self): self.assertEqual(self.widget.render(self.value), '{"value": 23}') def test_clean_single_quoted_string(self): self.assertEqual(self.widget.clean("{'value': 23}"), self.value) self.assertEqual(self.widget.clean("{'value': null}"), {"value": None}) def test_clean_none(self): self.assertEqual(self.widget.clean(None), None) self.assertEqual(self.widget.clean('{"value": null}'), {"value": None}) def test_render_none(self): self.assertEqual(self.widget.render(None), None) self.assertEqual(self.widget.render(dict()), None) self.assertEqual(self.widget.render({"value": None}), '{"value": null}') class SimpleArrayWidgetTest(TestCase, RowDeprecationTestMixin): def setUp(self): self.value = {"value": 23} self.widget = widgets.SimpleArrayWidget() def test_default_separator(self): self.assertEqual(",", self.widget.separator) def test_arg_separator(self): self.widget = widgets.SimpleArrayWidget("|") self.assertEqual("|", self.widget.separator) def test_clean_splits_str(self): s = "a,b,c" self.assertEqual(["a", "b", "c"], self.widget.clean(s)) def test_clean_returns_empty_list_for_empty_arg(self): s = "" self.assertEqual([], self.widget.clean(s)) def test_render(self): v = ["a", "b", "c"] s = "a,b,c" self.assertEqual(s, self.widget.render(v)) def test_render_no_coerce_to_string(self): v = [1, 2, 3] self.widget = widgets.SimpleArrayWidget(coerce_to_string=False) self.assertEqual(v, self.widget.render(v)) def test_render_none_coerce_to_string_is_True(self): self.widget = widgets.SimpleArrayWidget() self.assertTrue(self.widget.coerce_to_string) self.assertEqual("", self.widget.render(None)) def test_render_none_coerce_to_string_is_False(self): self.widget = widgets.SimpleArrayWidget(coerce_to_string=False) self.assertFalse(self.widget.coerce_to_string) self.assertIsNone(self.widget.render(None)) django-import-export-4.0.9/tests/core/tests/utils.py000066400000000000000000000007021463433610200225640ustar00rootroot00000000000000import functools import warnings def ignore_utcnow_deprecation_warning(fn): """ Ignore the specific deprecation warning occurring due to openpyxl and python3.12. """ @functools.wraps(fn) def inner(*args, **kwargs): with warnings.catch_warnings(): warnings.filterwarnings( "ignore", category=DeprecationWarning, ) fn(*args, **kwargs) return inner django-import-export-4.0.9/tests/core/tests/widget.py000066400000000000000000000003261463433610200227110ustar00rootroot00000000000000from import_export import widgets class HarshRussianWidget(widgets.CharWidget): def clean(self, value, row=None, *args, **kwargs): raise ValueError("Ова вриједност је страшна!") django-import-export-4.0.9/tests/core/views.py000066400000000000000000000003051463433610200214160ustar00rootroot00000000000000from django.views.generic.list import ListView from import_export import mixins from . import models class CategoryExportView(mixins.ExportViewFormMixin, ListView): model = models.Category django-import-export-4.0.9/tests/docker-compose.yml000066400000000000000000000024341463433610200224210ustar00rootroot00000000000000version: '3.3' services: postgresdb: container_name: importexport_pgdb environment: DB_HOST: db DB_PORT: 5432 DB_NAME: import_export IMPORT_EXPORT_POSTGRESQL_USER: ${IMPORT_EXPORT_POSTGRESQL_USER} IMPORT_EXPORT_POSTGRESQL_PASSWORD: ${IMPORT_EXPORT_POSTGRESQL_PASSWORD} POSTGRES_PASSWORD: ${IMPORT_EXPORT_POSTGRESQL_PASSWORD} image: postgres:13 restart: "no" ports: - "${IMPORT_EXPORT_POSTGRESQL_PORT:-5432}:5432" volumes: - ./docker/db/init-postgres-db.sh/:/docker-entrypoint-initdb.d/init-postgres-db.sh - postgres-db-data:/var/lib/postgresql/data mysqldb: container_name: importexport_mysqldb image: mysql:8.0 platform: linux/x86_64 restart: "no" environment: MYSQL_DATABASE: import_export MYSQL_USER: ${IMPORT_EXPORT_MYSQL_USER} MYSQL_PASSWORD: ${IMPORT_EXPORT_MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD: ${IMPORT_EXPORT_MYSQL_PASSWORD} MYSQL_PORT: ports: - "${IMPORT_EXPORT_MYSQL_PORT:-3306}:3306" expose: - '${IMPORT_EXPORT_MYSQL_PORT:-3306}' volumes: - ./docker/db/init-mysql-db.sh:/docker-entrypoint-initdb.d/init-mysql-db.sh - mysql-db-data:/var/lib/mysql volumes: postgres-db-data: driver: local mysql-db-data: driver: local django-import-export-4.0.9/tests/docker/000077500000000000000000000000001463433610200202305ustar00rootroot00000000000000django-import-export-4.0.9/tests/docker/db/000077500000000000000000000000001463433610200206155ustar00rootroot00000000000000django-import-export-4.0.9/tests/docker/db/init-mysql-db.sh000077500000000000000000000002221463433610200236410ustar00rootroot00000000000000#!/usr/bin/env bash set -e mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<-EOSQL GRANT ALL PRIVILEGES ON test_import_export.* to '$MYSQL_USER'; EOSQLdjango-import-export-4.0.9/tests/docker/db/init-postgres-db.sh000077500000000000000000000006211463433610200243450ustar00rootroot00000000000000#!/usr/bin/env bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE USER $IMPORT_EXPORT_POSTGRESQL_USER WITH PASSWORD '$IMPORT_EXPORT_POSTGRESQL_PASSWORD'; CREATE DATABASE $DB_NAME ENCODING 'utf-8'; GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $IMPORT_EXPORT_POSTGRESQL_USER; ALTER USER $IMPORT_EXPORT_POSTGRESQL_USER CREATEDB; EOSQLdjango-import-export-4.0.9/tests/manage.py000077500000000000000000000005001463433610200205610ustar00rootroot00000000000000#!/usr/bin/env python3 import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir)) if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) django-import-export-4.0.9/tests/scripts/000077500000000000000000000000001463433610200204505ustar00rootroot00000000000000django-import-export-4.0.9/tests/scripts/__init__.py000066400000000000000000000000001463433610200225470ustar00rootroot00000000000000django-import-export-4.0.9/tests/scripts/bulk_import.py000066400000000000000000000123351463433610200233550ustar00rootroot00000000000000""" Helper module for testing bulk imports. See testing.rst """ import time from functools import wraps import tablib from memory_profiler import memory_usage from import_export import resources from import_export.instance_loaders import CachedInstanceLoader from core.models import Book # isort:skip # The number of rows to be created on each profile run. # Increase this value for greater load testing. NUM_ROWS = 10000 class _BookResource(resources.ModelResource): class Meta: model = Book fields = ("id", "name", "author_email", "price") use_bulk = True batch_size = 1000 skip_unchanged = True # skip_diff = True # This flag can speed up imports # Cannot be used when performing updates # force_init_instance = True instance_loader_class = CachedInstanceLoader def profile_duration(fn): @wraps(fn) def inner(*args, **kwargs): # Measure duration t = time.perf_counter() fn(*args, **kwargs) elapsed = time.perf_counter() - t print(f"Time {elapsed: 0.4}") return inner def profile_mem(fn): @wraps(fn) def inner(*args, **kwargs): # Measure memory mem, retval = memory_usage( (fn, args, kwargs), retval=True, timeout=200, interval=1e-7 ) print(f"Memory {max(mem) - min(mem)}") return retval return inner @profile_duration def do_import_duration(resource, dataset): resource.import_data(dataset) @profile_mem def do_import_mem(resource, dataset): resource.import_data(dataset) def do_create(): class _BookResource(resources.ModelResource): class Meta: model = Book fields = ("id", "name", "author_email", "price") use_bulk = True batch_size = 1000 skip_unchanged = True skip_diff = True force_init_instance = True print("\ndo_create()") # clearing down existing objects books = Book.objects.all() books._raw_delete(books.db) rows = [("", "Some new book", "email@example.com", "10.25")] * NUM_ROWS dataset = tablib.Dataset(*rows, headers=["id", "name", "author_email", "price"]) book_resource = _BookResource() do_import_duration(book_resource, dataset) do_import_mem(book_resource, dataset) # Book objects are created once for the 'duration' run, # and once for the 'memory' run assert Book.objects.count() == NUM_ROWS * 2 books._raw_delete(books.db) def do_update(): print("\ndo_update()") # clearing down existing objects books = Book.objects.all() books._raw_delete(books.db) rows = [("", "Some new book", "email@example.com", "10.25")] * NUM_ROWS books = [Book(name=r[1], author_email=r[2], price=r[3]) for r in rows] # run 'update' - there must be existing rows in the DB... # i.e. so they can be updated Book.objects.bulk_create(books) assert NUM_ROWS == Book.objects.count() # find the ids, so that we can perform the update all_books = Book.objects.all() rows = [(b.id, b.name, b.author_email, b.price) for b in all_books] dataset = tablib.Dataset(*rows, headers=["id", "name", "author_email", "price"]) book_resource = _BookResource() do_import_duration(book_resource, dataset) do_import_mem(book_resource, dataset) assert NUM_ROWS == Book.objects.count() books = Book.objects.all() books._raw_delete(books.db) def do_delete(): class _BookResource(resources.ModelResource): def for_delete(self, row, instance): return True class Meta: model = Book fields = ("id", "name", "author_email", "price") use_bulk = True batch_size = 1000 skip_diff = True instance_loader_class = CachedInstanceLoader print("\ndo_delete()") # clearing down existing objects books = Book.objects.all() books._raw_delete(books.db) rows = [("", "Some new book", "email@example.com", "10.25")] * NUM_ROWS books = [Book(name=r[1], author_email=r[2], price=r[3]) for r in rows] # deletes - there must be existing rows in the DB... # i.e. so they can be deleted Book.objects.bulk_create(books) assert NUM_ROWS == Book.objects.count() all_books = Book.objects.all() rows = [(b.id, b.name, b.author_email, b.price) for b in all_books] dataset = tablib.Dataset(*rows, headers=["id", "name", "author_email", "price"]) book_resource = _BookResource() do_import_duration(book_resource, dataset) assert 0 == Book.objects.count() # recreate rows which have just been deleted Book.objects.bulk_create(books) assert NUM_ROWS == Book.objects.count() all_books = Book.objects.all() rows = [(b.id, b.name, b.author_email, b.price) for b in all_books] dataset = tablib.Dataset(*rows, headers=["id", "name", "author_email", "price"]) do_import_mem(book_resource, dataset) assert 0 == Book.objects.count() def run(*args): if len(args) > 0: arg = args[0].lower() if arg == "create": do_create() if arg == "update": do_update() if arg == "delete": do_delete() else: do_create() do_update() do_delete() django-import-export-4.0.9/tests/settings.py000066400000000000000000000060331463433610200211750ustar00rootroot00000000000000import os import sys import django INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.sites", "import_export", "core", ] SITE_ID = 1 ROOT_URLCONF = "urls" DEBUG = True STATIC_URL = "/static/" SECRET_KEY = "2n6)=vnp8@bu0om9d05vwf7@=5vpn%)97-!d*t4zq1mku%0-@j" MIDDLEWARE = ( "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ) TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [], "APP_DIRS": True, "OPTIONS": { "context_processors": ( "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", "django.template.context_processors.request", ), }, }, ] DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" if os.environ.get("IMPORT_EXPORT_TEST_TYPE") == "mysql-innodb": IMPORT_EXPORT_USE_TRANSACTIONS = True DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "import_export", "USER": os.environ.get("IMPORT_EXPORT_MYSQL_USER"), "PASSWORD": os.environ.get("IMPORT_EXPORT_MYSQL_PASSWORD"), "HOST": "127.0.0.1", "PORT": os.environ.get("IMPORT_EXPORT_MYSQL_PORT", "3306"), "TEST": { "CHARSET": "utf8", "COLLATION": "utf8_general_ci", "NAME": "test_import_export", }, } } elif os.environ.get("IMPORT_EXPORT_TEST_TYPE") == "postgres": IMPORT_EXPORT_USE_TRANSACTIONS = True DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": "import_export", "USER": os.environ.get("IMPORT_EXPORT_POSTGRESQL_USER"), "PASSWORD": os.environ.get("IMPORT_EXPORT_POSTGRESQL_PASSWORD"), "HOST": "localhost", "PORT": os.environ.get("IMPORT_EXPORT_POSTGRESQL_PORT", "5432"), } } else: if "test" in sys.argv: database_name = "" else: database_name = os.path.join(os.path.dirname(__file__), "database.db") DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": database_name, } } LOGGING = { "version": 1, "disable_existing_loggers": True, "handlers": {"console": {"class": "logging.NullHandler"}}, "root": { "handlers": ["console"], }, } USE_TZ = False if django.VERSION >= (4, 1): FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer" if django.VERSION >= (5, 0): FORM_RENDERER = "django.forms.renderers.DjangoTemplates" django-import-export-4.0.9/tests/urls.py000066400000000000000000000007551463433610200203270ustar00rootroot00000000000000from core import views from django.contrib import admin from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.urls import path from django.views.generic import RedirectView admin.autodiscover() urlpatterns = [ path("", RedirectView.as_view(url="/admin/"), name="admin-site"), path("admin/", admin.site.urls), path( "export/category/", views.CategoryExportView.as_view(), name="export-category" ), ] urlpatterns += staticfiles_urlpatterns() django-import-export-4.0.9/tox.ini000066400000000000000000000017311463433610200171340ustar00rootroot00000000000000[tox] min_version = 4.0 envlist = {py38,py39}-{django42} {py310,py311,py312}-{django42,django50,djangomain} # tablib dev temporarily removed - see issue #1602 # py311-djangomain-tablibdev [gh-actions] python = 3.8: py38 3.9: py39 3.10: py310 3.11: py311 3.12: py312 [testenv] setenv = PYTHONPATH = {toxinidir}/tests commands = python ./runtests.py deps = tablibdev: -egit+https://github.com/jazzband/tablib.git@master\#egg=tablib django42: Django>=4.2,<5.0 django50: Django>=5.0,<6.0 djangomain: https://github.com/django/django/archive/main.tar.gz -rrequirements/test.txt # if postgres / mysql environment variables exist, we can go ahead and run db specific tests passenv = COVERAGE IMPORT_EXPORT_POSTGRESQL_USER IMPORT_EXPORT_POSTGRESQL_PASSWORD IMPORT_EXPORT_POSTGRESQL_PORT IMPORT_EXPORT_MYSQL_USER IMPORT_EXPORT_MYSQL_PASSWORD IMPORT_EXPORT_MYSQL_PORT IMPORT_EXPORT_TEST_TYPE