pax_global_header00006660000000000000000000000064125664673510014531gustar00rootroot0000000000000052 comment=efe6744eda590f97ef5fb5a767b5c9232fb6c62a vcrpy-1.7.3/000077500000000000000000000000001256646735100127045ustar00rootroot00000000000000vcrpy-1.7.3/.gitignore000066400000000000000000000001171256646735100146730ustar00rootroot00000000000000*.pyc .tox build/ dist/ *.egg/ .coverage *.egg-info/ pytestdebug.log fixtures/vcrpy-1.7.3/.travis.yml000066400000000000000000000040201256646735100150110ustar00rootroot00000000000000language: python before_install: openssl version env: global: - secure: AifoKzwhjV94cmcQZrdQmqRu/9rkZZvWpwBv1daeAQpLOKFPGsOm3D+x2cSw9+iCfkgDZDfqQVv1kCaFVxTll8v8jTq5SJdqEY0NmGWbj/UkNtShh609oRDsuzLxAEwtVKYjf/h8K2BRea+bl1tGkwZ2vtmYS6dxNlAijjWOfds= - secure: LBSEg/gMj4u4Hrpo3zs6Y/1mTpd2RtcN49mZIFgTdbJ9IhpiNPqcEt647Lz94F9Eses2x2WbNuKqZKZZReY7QLbEzU1m0nN5jlaKrjcG5NR5clNABfFFyhgc0jBikyS4abAG8jc2efeaTrFuQwdoF4sE8YiVrkiVj2X5Xoi6sBk= matrix: - WITH_LIB="requests2.2" - WITH_LIB="requests2.3" - WITH_LIB="requests2.4" - WITH_LIB="requests2.5" - WITH_LIB="requests2.7" - WITH_LIB="requests1.x" - WITH_LIB="httplib2" - WITH_LIB="boto" - WITH_LIB="urllib31.7" - WITH_LIB="urllib31.9" - WITH_LIB="urllib31.10" - WITH_LIB="tornado" matrix: allow_failures: - env: WITH_LIB="boto" exclude: - env: WITH_LIB="boto" python: 3.3 - env: WITH_LIB="boto" python: 3.4 - env: WITH_LIB="requests1.x" python: 3.4 python: - 2.6 - 2.7 - 3.3 - 3.4 - pypy install: - pip install . - if [ $WITH_LIB = "requests1.x" ] ; then pip install requests==1.2.3; fi - if [ $WITH_LIB = "requests2.2" ] ; then pip install requests==2.2.1; fi - if [ $WITH_LIB = "requests2.3" ] ; then pip install requests==2.3.0; fi - if [ $WITH_LIB = "requests2.4" ] ; then pip install requests==2.4.0; fi - if [ $WITH_LIB = "requests2.5" ] ; then pip install requests==2.5.0; fi - if [ $WITH_LIB = "requests2.7" ] ; then pip install requests==2.7.0; fi - if [ $WITH_LIB = "httplib2" ] ; then pip install httplib2; fi - if [ $WITH_LIB = "boto" ] ; then pip install boto; fi - if [ $WITH_LIB = "urllib31.7" ] ; then pip install certifi urllib3==1.7.1; fi - if [ $WITH_LIB = "urllib31.9" ] ; then pip install certifi urllib3==1.9.1; fi - if [ $WITH_LIB = "urllib31.10" ] ; then pip install certifi urllib3==1.10.2; fi - if [ $WITH_LIB = "tornado" ] ; then pip install tornado==4.2 pytest-tornado; fi - if [ $WITH_LIB = "tornado" -a $TRAVIS_PYTHON_VERSION != "pypy" ] ; then pip install pycurl; fi script: python setup.py test vcrpy-1.7.3/LICENSE.txt000066400000000000000000000020471256646735100145320ustar00rootroot00000000000000Copyright (c) 2012-2015 Kevin McCarthy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. vcrpy-1.7.3/MANIFEST.in000066400000000000000000000001211256646735100144340ustar00rootroot00000000000000include README.rst include LICENSE.txt include tox.ini recursive-include tests * vcrpy-1.7.3/README.rst000066400000000000000000000664361256646735100144120ustar00rootroot00000000000000VCR.py ====== .. figure:: https://raw.github.com/kevin1024/vcrpy/master/vcr.png :alt: vcr.py vcr.py This is a Python version of `Ruby's VCR library `__. |Build Status| |Stories in Ready| What it does ------------ VCR.py simplifies and speeds up tests that make HTTP requests. The first time you run code that is inside a VCR.py context manager or decorated function, VCR.py records all HTTP interactions that take place through the libraries it supports and serializes and writes them to a flat file (in yaml format by default). This flat file is called a cassette. When the relevant peice of code is executed again, VCR.py will read the serialized requests and responses from the aforementioned cassette file, and intercept any HTTP requests that it recognizes from the original test run and return the responses that corresponded to those requests. This means that the requests will not actually result in HTTP traffic, which confers several benefits including: - The ability to work offline - Completely deterministic tests - Increased test execution speed If the server you are testing against ever changes its API, all you need to do is delete your existing cassette files, and run your tests again. VCR.py will detect the absence of a cassette file and once again record all HTTP interactions, which will update them to correspond to the new API. Compatibility Notes ------------------- VCR.py supports Python 2.6 and 2.7, 3.3, 3.4, and `pypy `__. The following http libraries are supported: - urllib2 - urllib3 - http.client (python3) - requests (both 1.x and 2.x versions) - httplib2 - boto - Tornado's AsyncHTTPClient Usage ----- .. code:: python import vcr import urllib2 with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'): response = urllib2.urlopen('http://www.iana.org/domains/reserved').read() assert 'Example domains' in response Run this test once, and VCR.py will record the HTTP request to ``fixtures/vcr_cassettes/synopsis.yml``. Run it again, and VCR.py will replay the response from iana.org when the http request is made. This test is now fast (no real HTTP requests are made anymore), deterministic (the test will continue to pass, even if you are offline, or iana.org goes down for maintenance) and accurate (the response will contain the same headers and body you get from a real request). You can also use VCR.py as a decorator. The same request above would look like this: .. code:: python @vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml') def test_iana(): response = urllib2.urlopen('http://www.iana.org/domains/reserved').read() assert 'Example domains' in response When using the decorator version of ``use_cassette``, it is possible to omit the path to the cassette file. .. code:: python @vcr.use_cassette() def test_iana(): response = urllib2.urlopen('http://www.iana.org/domains/reserved').read() assert 'Example domains' in response In this case, the cassette file will be given the same name as the test function, and it will be placed in the same directory as the file in which the test is defined. See the Automatic Test Naming section below for more details. Configuration ------------- If you don't like VCR's defaults, you can set options by instantiating a ``VCR`` class and setting the options on it. .. code:: python import vcr my_vcr = vcr.VCR( serializer='json', cassette_library_dir='fixtures/cassettes', record_mode='once', match_on=['uri', 'method'], ) with my_vcr.use_cassette('test.json'): # your http code here Otherwise, you can override options each time you use a cassette. .. code:: python with vcr.use_cassette('test.yml', serializer='json', record_mode='once'): # your http code here Note: Per-cassette overrides take precedence over the global config. Request matching ---------------- Request matching is configurable and allows you to change which requests VCR considers identical. The default behavior is ``['method', 'scheme', 'host', 'port', 'path', 'query']`` which means that requests with both the same URL and method (ie POST or GET) are considered identical. This can be configured by changing the ``match_on`` setting. The following options are available : - method (for example, POST or GET) - uri (the full URI.) - host (the hostname of the server receiving the request) - port (the port of the server receiving the request) - path (the path of the request) - query (the query string of the request) - raw\_body (the entire request body as is) - body (the entire request body unmarshalled by content-type i.e. xmlrpc, json, form-urlencoded, falling back on raw\_body) - headers (the headers of the request) Backwards compatible matchers: - url (the ``uri`` alias) If these options don't work for you, you can also register your own request matcher. This is described in the Advanced section of this README. Record Modes ------------ VCR supports 4 record modes (with the same behavior as Ruby's VCR): once ~~~~ - Replay previously recorded interactions. - Record new interactions if there is no cassette file. - Cause an error to be raised for new requests if there is a cassette file. It is similar to the new\_episodes record mode, but will prevent new, unexpected requests from being made (i.e. because the request URI changed). once is the default record mode, used when you do not set one. new\_episodes ~~~~~~~~~~~~~ - Record new interactions. - Replay previously recorded interactions. It is similar to the once record mode, but will always record new interactions, even if you have an existing recorded one that is similar, but not identical. This was the default behavior in versions < 0.3.0 none ~~~~ - Replay previously recorded interactions. - Cause an error to be raised for any new requests. This is useful when your code makes potentially dangerous HTTP requests. The none record mode guarantees that no new HTTP requests will be made. all ~~~ - Record new interactions. - Never replay previously recorded interactions. This can be temporarily used to force VCR to re-record a cassette (i.e. to ensure the responses are not out of date) or can be used when you simply want to log all HTTP requests. Advanced Features ----------------- If you want, VCR.py can return information about the cassette it is using to record your requests and responses. This will let you record your requests and responses and make assertions on them, to make sure that your code under test is generating the expected requests and responses. This feature is not present in Ruby's VCR, but I think it is a nice addition. Here's an example: .. code:: python import vcr import urllib2 with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml') as cass: response = urllib2.urlopen('http://www.zombo.com/').read() # cass should have 1 request inside it assert len(cass) == 1 # the request uri should have been http://www.zombo.com/ assert cass.requests[0].uri == 'http://www.zombo.com/' The ``Cassette`` object exposes the following properties which I consider part of the API. The fields are as follows: - ``requests``: A list of vcr.Request objects corresponding to the http requests that were made during the recording of the cassette. The requests appear in the order that they were originally processed. - ``responses``: A list of the responses made. - ``play_count``: The number of times this cassette has played back a response. - ``all_played``: A boolean indicating whether all the responses have been played back. - ``responses_of(request)``: Access the responses that match a given request The ``Request`` object has the following properties: - ``uri``: The full uri of the request. Example: "https://google.com/?q=vcrpy" - ``scheme``: The scheme used to make the request (http or https) - ``host``: The host of the request, for example "www.google.com" - ``port``: The port the request was made on - ``path``: The path of the request. For example "/" or "/home.html" - ``query``: The parsed query string of the request. Sorted list of name, value pairs. - ``method`` : The method used to make the request, for example "GET" or "POST" - ``body``: The body of the request, usually empty except for POST / PUT / etc Backwards compatible properties: - ``url``: The ``uri`` alias - ``protocol``: The ``scheme`` alias Register your own serializer ---------------------------- Don't like JSON or YAML? That's OK, VCR.py can serialize to any format you would like. Create your own module or class instance with 2 methods: - ``def deserialize(cassette_string)`` - ``def serialize(cassette_dict)`` Finally, register your class with VCR to use your new serializer. .. code:: python import vcr class BogoSerializer(object): """ Must implement serialize() and deserialize() methods """ pass my_vcr = vcr.VCR() my_vcr.register_serializer('bogo', BogoSerializer()) with my_vcr.use_cassette('test.bogo', serializer='bogo'): # your http here # After you register, you can set the default serializer to your new serializer my_vcr.serializer = 'bogo' with my_vcr.use_cassette('test.bogo'): # your http here Register your own request matcher --------------------------------- Create your own method with the following signature .. code:: python def my_matcher(r1, r2): Your method receives the two requests and must return ``True`` if they match, ``False`` if they don't. Finally, register your method with VCR to use your new request matcher. .. code:: python import vcr def jurassic_matcher(r1, r2): return r1.uri == r2.uri and 'JURASSIC PARK' in r1.body my_vcr = vcr.VCR() my_vcr.register_matcher('jurassic', jurassic_matcher) with my_vcr.use_cassette('test.yml', match_on=['jurassic']): # your http here # After you register, you can set the default match_on to use your new matcher my_vcr.match_on = ['jurassic'] with my_vcr.use_cassette('test.yml'): # your http here Filter sensitive data from the request -------------------------------------- If you are checking your cassettes into source control, and are using some form of authentication in your tests, you can filter out that information so it won't appear in your cassette files. There are a few ways to do this: Filter information from HTTP Headers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Use the ``filter_headers`` configuration option with a list of headers to filter. .. code:: python with my_vcr.use_cassette('test.yml', filter_headers=['authorization']): # sensitive HTTP request goes here Filter information from HTTP querystring ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Use the ``filter_query_parameters`` configuration option with a list of query parameters to filter. .. code:: python with my_vcr.use_cassette('test.yml', filter_query_parameters=['api_key']): requests.get('http://api.com/getdata?api_key=secretstring') Filter information from HTTP post data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Use the ``filter_post_data_parameters`` configuration option with a list of post data parameters to filter. .. code:: python with my_vcr.use_cassette('test.yml', filter_post_data_parameters=['client_secret']): requests.post('http://api.com/postdata', data={'api_key': 'secretstring'}) Custom Request filtering ~~~~~~~~~~~~~~~~~~~~~~~~ If none of these covers your request filtering needs, you can register a callback that will manipulate the HTTP request before adding it to the cassette. Use the ``before_record`` configuration option to so this. Here is an example that will never record requests to the /login endpoint. .. code:: python def before_record_cb(request): if request.path != '/login': return request my_vcr = vcr.VCR( before_record = before_record_cb, ) with my_vcr.use_cassette('test.yml'): # your http code here You can also mutate the response using this callback. For example, you could remove all query parameters from any requests to the ``'/login'`` path. .. code:: python def scrub_login_request(request): if request.path == '/login': request.uri, _ = urllib.splitquery(response.uri) return request my_vcr = vcr.VCR( before_record=scrub_login_request, ) with my_vcr.use_cassette('test.yml'): # your http code here Custom Response Filtering ~~~~~~~~~~~~~~~~~~~~~~~~~ VCR.py also suports response filtering with the ``before_record_response`` keyword argument. It's usage is similar to that of ``before_record``: .. code:: python def scrub_string(string, replacement=''): def before_record_response(response): response['body']['string'] = response['body']['string'].replace(string, replacement) return response return before_record_response my_vcr = vcr.VCR( before_record_response=scrub_string(settings.USERNAME, 'username'), ) with my_vcr.use_cassette('test.yml'): # your http code here Ignore requests --------------- If you would like to completely ignore certain requests, you can do it in a few ways: - Set the ``ignore_localhost`` option equal to True. This will not record any requests sent to (or responses from) localhost, 127.0.0.1, or 0.0.0.0. - Set the ``ignore_hosts`` configuration option to a list of hosts to ignore - Add a ``before_record`` callback that returns None for requests you want to ignore Requests that are ignored by VCR will not be saved in a cassette, nor played back from a cassette. VCR will completely ignore those requests as if it didn't notice them at all, and they will continue to hit the server as if VCR were not there. Custom Patches -------------- If you use a custom ``HTTPConnection`` class, or otherwise make http requests in a way that requires additional patching, you can use the ``custom_patches`` keyword argument of the ``VCR`` and ``Cassette`` objects to patch those objects whenever a cassette's context is entered. To patch a custom version of ``HTTPConnection`` you can do something like this: :: import where_the_custom_https_connection_lives from vcr.stubs import VCRHTTPSConnection my_vcr = config.VCR(custom_patches=((where_the_custom_https_connection_lives, 'CustomHTTPSConnection', VCRHTTPSConnection),)) @my_vcr.use_cassette(...) Automatic Cassette Naming ------------------------- VCR.py now allows the omission of the path argument to the use\_cassette function. Both of the following are now legal/should work .. code:: python @my_vcr.use_cassette def my_test_function(): ... .. code:: python @my_vcr.use_cassette() def my_test_function(): ... In both cases, VCR.py will use a path that is generated from the provided test function's name. If no ``cassette_library_dir`` has been set, the cassette will be in a file with the name of the test function in directory of the file in which the test function is declared. If a ``cassette_library_dir`` has been set, the cassette will appear in that directory in a file with the name of the decorated function. It is possible to control the path produced by the automatic naming machinery by customizing the ``path_transformer`` and ``func_path_generator`` vcr variables. To add an extension to all cassette names, use ``VCR.ensure_suffix`` as follows: .. code:: python my_vcr = VCR(path_transformer=VCR.ensure_suffix('.yaml')) @my_vcr.use_cassette def my_test_function(): Installation ------------ VCR.py is a package on PyPI, so you can ``pip install vcrpy`` (first you may need to ``brew install libyaml`` [`Homebrew `__\ ]) Ruby VCR compatibility ---------------------- VCR.py does not aim to match the format of the Ruby VCR YAML files. Cassettes generated by Ruby's VCR are not compatible with VCR.py. Running VCR's test suite ------------------------ The tests are all run automatically on `Travis CI `__, but you can also run them yourself using `py.test `__ and `Tox `__. Tox will automatically run them in all environments VCR.py supports. The test suite is pretty big and slow, but you can tell tox to only run specific tests like this: ``tox -e py27requests -- -v -k "'test_status_code or test_gzip'"`` This will run only tests that look like ``test_status_code`` or ``test_gzip`` in the test suite, and only in the python 2.7 environment that has ``requests`` installed. Also, in order for the boto tests to run, you will need an AWS key. Refer to the `boto documentation `__ for how to set this up. I have marked the boto tests as optional in Travis so you don't have to worry about them failing if you submit a pull request. Logging ------- VCR.py has a few log messages you can turn on to help you figure out if HTTP requests are hitting a real server or not. You can turn them on like this: .. code:: python import vcr import requests import logging logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from vcrpy vcr_log = logging.getLogger("vcr") vcr_log.setLevel(logging.INFO) with vcr.use_cassette('headers.yml'): requests.get('http://httpbin.org/headers') The first time you run this, you will see: :: INFO:vcr.stubs: not in cassette, sending to real server The second time, you will see: :: INFO:vcr.stubs:Playing response for from cassette If you set the loglevel to DEBUG, you will also get information about which matchers didn't match. This can help you with debugging custom matchers. Upgrade ------- New Cassette Format ~~~~~~~~~~~~~~~~~~~ The cassette format has changed in *VCR.py 1.x*, the *VCR.py 0.x* cassettes cannot be used with *VCR.py 1.x*. The easiest way to upgrade is to simply delete your cassettes and re-record all of them. VCR.py also provides a migration script that attempts to upgrade your 0.x cassettes to the new 1.x format. To use it, run the following command: :: python -m vcr.migration PATH The PATH can be either a path to the directory with cassettes or the path to a single cassette. *Note*: Back up your cassettes files before migration. The migration *should* only modify cassettes using the old 0.x format. New serializer / deserializer API --------------------------------- If you made a custom serializer, you will need to update it to match the new API in version 1.0.x - Serializers now take dicts and return strings. - Deserializers take strings and return dicts (instead of requests, responses pair) Changelog --------- - 1.7.3 [#188] ``additional_matchers`` kwarg on ``use_casstte``. [#191] Actually support passing multiple before_record_request functions (thanks @agriffis). - 1.7.2 [#186] Get effective_url in tornado (thanks @mvschaik), [#187] Set request_time on Response object in tornado (thanks @abhinav). - 1.7.1 [#183] Patch ``fetch_impl`` instead of the entire HTTPClient class for Tornado (thanks @abhinav). - 1.7.0 [#177] Properly support coroutine/generator decoration. [#178] Support distribute (thanks @graingert). [#163] Make compatibility between python2 and python3 recorded cassettes more robust (thanks @gward). - 1.6.1 [#169] Support conditional requirements in old versions of pip, Fix RST parse errors generated by pandoc, [Tornado] Fix unsupported features exception not being raised, [#166] content-aware body matcher. - 1.6.0 [#120] Tornado support (thanks @abhinav), [#147] packaging fixes (thanks @graingert), [#158] allow filtering post params in requests (thanks @MrJohz), [#140] add xmlrpclib support (thanks @Diaoul). - 1.5.2 Fix crash when cassette path contains cassette library directory (thanks @gazpachoking). - 1.5.0 Automatic cassette naming and 'application/json' post data filtering (thanks @marco-santamaria). - 1.4.2 Fix a bug caused by requests 2.7 and chunked transfer encoding - 1.4.1 Include README, tests, LICENSE in package. Thanks @ralphbean. - 1.4.0 Filter post data parameters (thanks @eadmundo), support for posting files through requests, inject\_cassette kwarg to access cassette from ``use_cassette`` decorated function, ``with_current_defaults`` actually works (thanks @samstav). - 1.3.0 Fix/add support for urllib3 (thanks @aisch), fix default port for https (thanks @abhinav). - 1.2.0 Add custom\_patches argument to VCR/Cassette objects to allow users to stub custom classes when cassettes become active. - 1.1.4 Add force reset around calls to actual connection from stubs, to ensure compatibility with the version of httplib/urlib2 in python 2.7.9. - 1.1.3 Fix python3 headers field (thanks @rtaboada), fix boto test (thanks @telaviv), fix new\_episodes record mode (thanks @jashugan), fix Windows connectionpool stub bug (thanks @gazpachoking), add support for requests 2.5 - 1.1.2 Add urllib==1.7.1 support. Make json serialize error handling correct Improve logging of match failures. - 1.1.1 Use function signature preserving ``wrapt.decorator`` to write the decorator version of use\_cassette in order to ensure compatibility with py.test fixtures and python 2. Move all request filtering into the ``before_record_callable``. - 1.1.0 Add ``before_record_response``. Fix several bugs related to the context management of cassettes. - 1.0.3: Fix an issue with requests 2.4 and make sure case sensitivity is consistent across python versions - 1.0.2: Fix an issue with requests 2.3 - 1.0.1: Fix a bug with the new ignore requests feature and the once record mode - 1.0.0: *BACKWARDS INCOMPATIBLE*: Please see the 'upgrade' section in the README. Take a look at the matcher section as well, you might want to update your ``match_on`` settings. Add support for filtering sensitive data from requests, matching query strings after the order changes and improving the built-in matchers, (thanks to @mshytikov), support for ignoring requests to certain hosts, bump supported Python3 version to 3.4, fix some bugs with Boto support (thanks @marusich), fix error with URL field capitalization in README (thanks @simon-weber), added some log messages to help with debugging, added ``all_played`` property on cassette (thanks @mshytikov) - 0.7.0: VCR.py now supports Python 3! (thanks @asundg) Also I refactored the stub connections quite a bit to add support for the putrequest and putheader calls. This version also adds support for httplib2 (thanks @nilp0inter). I have added a couple tests for boto since it is an http client in its own right. Finally, this version includes a fix for a bug where requests wasn't being patched properly (thanks @msabramo). - 0.6.0: Store response headers as a list since a HTTP response can have the same header twice (happens with set-cookie sometimes). This has the added benefit of preserving the order of headers. Thanks @smallcode for the bug report leading to this change. I have made an effort to ensure backwards compatibility with the old cassettes' header storage mechanism, but if you want to upgrade to the new header storage, you should delete your cassettes and re-record them. Also this release adds better error messages (thanks @msabramo) and adds support for using VCR as a decorator (thanks @smallcode for the motivation) - 0.5.0: Change the ``response_of`` method to ``responses_of`` since cassettes can now contain more than one response for a request. Since this changes the API, I'm bumping the version. Also includes 2 bugfixes: a better error message when attempting to overwrite a cassette file, and a fix for a bug with requests sessions (thanks @msabramo) - 0.4.0: Change default request recording behavior for multiple requests. If you make the same request multiple times to the same URL, the response might be different each time (maybe the response has a timestamp in it or something), so this will make the same request multiple times and save them all. Then, when you are replaying the cassette, the responses will be played back in the same order in which they were received. If you were making multiple requests to the same URL in a cassette before version 0.4.0, you might need to regenerate your cassette files. Also, removes support for the cassette.play\_count counter API, since individual requests aren't unique anymore. A cassette might contain the same request several times. Also removes secure overwrite feature since that was breaking overwriting files in Windows, and fixes a bug preventing request's automatic body decompression from working. - 0.3.5: Fix compatibility with requests 2.x - 0.3.4: Bugfix: close file before renaming it. This fixes an issue on Windows. Thanks @smallcode for the fix. - 0.3.3: Bugfix for error message when an unreigstered custom matcher was used - 0.3.2: Fix issue with new config syntax and the ``match_on`` parameter. Thanks, @chromy! - 0.3.1: Fix issue causing full paths to be sent on the HTTP request line. - 0.3.0: *Backwards incompatible release* - Added support for record modes, and changed the default recording behavior to the "once" record mode. Please see the documentation on record modes for more. Added support for custom request matching, and changed the default request matching behavior to match only on the URL and method. Also, improved the httplib mocking to add support for the ``HTTPConnection.send()`` method. This means that requests won't actually be sent until the response is read, since I need to record the entire request in order to match up the appropriate response. I don't think this should cause any issues unless you are sending requests without ever loading the response (which none of the standard httplib wrappers do, as far as I know. Thanks to @fatuhoku for some of the ideas and the motivation behind this release. - 0.2.1: Fixed missing modules in setup.py - 0.2.0: Added configuration API, which lets you configure some settings on VCR (see the README). Also, VCR no longer saves cassettes if they haven't changed at all and supports JSON as well as YAML (thanks @sirpengi). Added amazing new skeumorphic logo, thanks @hairarrow. - 0.1.0: *backwards incompatible release - delete your old cassette files*: This release adds the ability to access the cassette to make assertions on it, as well as a major code refactor thanks to @dlecocq. It also fixes a couple longstanding bugs with redirects and HTTPS. [#3 and #4] - 0.0.4: If you have libyaml installed, vcrpy will use the c bindings instead. Speed up your tests! Thanks @dlecocq - 0.0.3: Add support for requests 1.2.3. Support for older versions of requests dropped (thanks @vitormazzi and @bryanhelmig) - 0.0.2: Add support for requests / urllib3 - 0.0.1: Initial Release License ======= This library uses the MIT license. See `LICENSE.txt `__ for more details .. |Build Status| image:: https://secure.travis-ci.org/kevin1024/vcrpy.png?branch=master :target: http://travis-ci.org/kevin1024/vcrpy .. |Stories in Ready| image:: https://badge.waffle.io/kevin1024/vcrpy.png?label=ready&title=Ready :target: https://waffle.io/kevin1024/vcrpy vcrpy-1.7.3/setup.cfg000066400000000000000000000000321256646735100145200ustar00rootroot00000000000000[bdist_wheel] universal=1 vcrpy-1.7.3/setup.py000066400000000000000000000043251256646735100144220ustar00rootroot00000000000000#!/usr/bin/env python import sys import logging from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand import pkg_resources long_description = open('README.rst', 'r').read() class PyTest(TestCommand): def finalize_options(self): TestCommand.finalize_options(self) self.test_args = [] self.test_suite = True def run_tests(self): # import here, cause outside the eggs aren't loaded import pytest errno = pytest.main(self.test_args) sys.exit(errno) install_requires = ['PyYAML', 'wrapt', 'six>=1.5'] extras_require = { ':python_version in "2.4, 2.5, 2.6"': ['contextlib2', 'backport_collections', 'mock'], ':python_version in "2.7, 3.1, 3.2"': ['contextlib2', 'mock'], } try: if 'bdist_wheel' not in sys.argv: for key, value in extras_require.items(): if key.startswith(':') and pkg_resources.evaluate_marker(key[1:]): install_requires.extend(value) except Exception: logging.getLogger(__name__).exception( 'Something went wrong calculating platform specific dependencies, so ' "you're getting them all!" ) for key, value in extras_require.items(): if key.startswith(':'): install_requires.extend(value) setup( name='vcrpy', version='1.7.3', description=( "Automatically mock your HTTP interactions to simplify and " "speed up testing" ), long_description=long_description, author='Kevin McCarthy', author_email='me@kevinmccarthy.org', url='https://github.com/kevin1024/vcrpy', packages=find_packages(exclude=("tests*",)), install_requires=install_requires, extras_require=extras_require, license='MIT', tests_require=['pytest', 'mock', 'pytest-localserver'], cmdclass={'test': PyTest}, classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: Console', 'Intended Audience :: Developers', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Topic :: Software Development :: Testing', 'Topic :: Internet :: WWW/HTTP', 'License :: OSI Approved :: MIT License', ] ) vcrpy-1.7.3/tests/000077500000000000000000000000001256646735100140465ustar00rootroot00000000000000vcrpy-1.7.3/tests/assertions.py000066400000000000000000000005421256646735100166130ustar00rootroot00000000000000import json def assert_cassette_empty(cass): assert len(cass) == 0 assert cass.play_count == 0 def assert_cassette_has_one_response(cass): assert len(cass) == 1 assert cass.play_count == 1 def assert_is_json(a_string): try: json.loads(a_string.decode('utf-8')) except Exception: assert False assert True vcrpy-1.7.3/tests/fixtures/000077500000000000000000000000001256646735100157175ustar00rootroot00000000000000vcrpy-1.7.3/tests/fixtures/migration/000077500000000000000000000000001256646735100177105ustar00rootroot00000000000000vcrpy-1.7.3/tests/fixtures/migration/new_cassette.json000066400000000000000000000021331256646735100232660ustar00rootroot00000000000000{ "version": 1, "interactions": [ { "request": { "body": null, "headers": { "accept": ["*/*"], "accept-encoding": ["gzip, deflate, compress"], "user-agent": ["python-requests/2.2.1 CPython/2.6.1 Darwin/10.8.0"] }, "method": "GET", "uri": "http://httpbin.org/ip" }, "response": { "status": { "message": "OK", "code": 200 }, "headers": { "access-control-allow-origin": ["*"], "content-type": ["application/json"], "date": ["Mon, 21 Apr 2014 23:13:40 GMT"], "server": ["gunicorn/0.17.4"], "content-length": ["32"], "connection": ["keep-alive"] }, "body": { "string": "{\n \"origin\": \"217.122.164.194\"\n}" } } } ] } vcrpy-1.7.3/tests/fixtures/migration/new_cassette.yaml000066400000000000000000000011501256646735100232550ustar00rootroot00000000000000version: 1 interactions: - request: body: null headers: accept: ['*/*'] accept-encoding: ['gzip, deflate, compress'] user-agent: ['python-requests/2.2.1 CPython/2.6.1 Darwin/10.8.0'] method: GET uri: http://httpbin.org/ip response: body: {string: !!python/unicode "{\n \"origin\": \"217.122.164.194\"\n}"} headers: access-control-allow-origin: ['*'] content-type: [application/json] date: ['Mon, 21 Apr 2014 23:06:09 GMT'] server: [gunicorn/0.17.4] content-length: ['32'] connection: [keep-alive] status: {code: 200, message: OK} vcrpy-1.7.3/tests/fixtures/migration/not_cassette.txt000066400000000000000000000000271256646735100231430ustar00rootroot00000000000000This is not a cassette vcrpy-1.7.3/tests/fixtures/migration/old_cassette.json000066400000000000000000000020071256646735100232530ustar00rootroot00000000000000[ { "request": { "body": null, "protocol": "http", "method": "GET", "headers": { "accept-encoding": "gzip, deflate, compress", "accept": "*/*", "user-agent": "python-requests/2.2.1 CPython/2.6.1 Darwin/10.8.0" }, "host": "httpbin.org", "path": "/ip", "port": 80 }, "response": { "status": { "message": "OK", "code": 200 }, "headers": [ "access-control-allow-origin: *\r\n", "content-type: application/json\r\n", "date: Mon, 21 Apr 2014 23:13:40 GMT\r\n", "server: gunicorn/0.17.4\r\n", "content-length: 32\r\n", "connection: keep-alive\r\n" ], "body": { "string": "{\n \"origin\": \"217.122.164.194\"\n}" } } } ] vcrpy-1.7.3/tests/fixtures/migration/old_cassette.yaml000066400000000000000000000015451256646735100232520ustar00rootroot00000000000000- request: !!python/object:vcr.request.Request body: null headers: !!python/object/apply:__builtin__.frozenset - - !!python/tuple [accept-encoding, 'gzip, deflate, compress'] - !!python/tuple [user-agent, python-requests/2.2.1 CPython/2.6.1 Darwin/10.8.0] - !!python/tuple [accept, '*/*'] host: httpbin.org method: GET path: /ip port: 80 protocol: http response: body: {string: !!python/unicode "{\n \"origin\": \"217.122.164.194\"\n}"} headers: [!!python/unicode "access-control-allow-origin: *\r\n", !!python/unicode "content-type: application/json\r\n", !!python/unicode "date: Mon, 21 Apr 2014 23:06:09 GMT\r\n", !!python/unicode "server: gunicorn/0.17.4\r\n", !!python/unicode "content-length: 32\r\n", !!python/unicode "connection: keep-alive\r\n"] status: {code: 200, message: OK} vcrpy-1.7.3/tests/fixtures/wild/000077500000000000000000000000001256646735100166565ustar00rootroot00000000000000vcrpy-1.7.3/tests/fixtures/wild/domain_redirect.yaml000066400000000000000000000227511256646735100227010ustar00rootroot00000000000000version: 1 interactions: - request: body: null headers: Accept: ['*/*'] Accept-Encoding: ['gzip, deflate, compress'] User-Agent: ['vcrpy-test'] method: GET uri: http://seomoz.org/ response: body: {string: ''} headers: Location: ['http://moz.com/'] Server: ['BigIP'] Connection: ['Keep-Alive'] Content-Length: ['0'] status: {code: 301, message: Moved Permanently} - request: body: null headers: Accept: ['*/*'] Accept-Encoding: ['gzip, deflate, compress'] User-Agent: ['vcrpy-test'] method: GET uri: http://moz.com/ response: body: string: !!binary | H4sIAAAAAAAAA+08a3PbOJKfV78Co7nETo1I8SlKjuWUXxlnzpl4EieZuVTKBZKgyJgiGZKSbM9O 1f2N+3v3S64bIClQkh3ntXu1tUlskiDQ3Wj0G2B2fzh6cXj+x9kxCctpvNfZ/UFR3kUBiUvy7Jg4 7/fILr4gXkyLYtxNUuVDAS+ViI3EZSguTpfENJmMuyzpwpgf3rHEj4L3irIEWcGDP58CeS9Yw0/A +jSQSVnBwYZNE10BoShtMCGj/l4HSCijMmZ7r45fTNMbEhUkSRfkeXqjkldpUC5ozghNfHKYTqez JCqvSZDm5ICVJcvJc5pfsjJKJipRcMxuXwDrdDq7U1ZS4oU0L1g57s7KQBl296rmsCwzhX2cRfNx 93fl9b4C0DNaRm7MusRLk5IlMObZ8Zj5E9bzwjydsrG+cfih6K2cX2fy2JJdlX1kyeOGBkEC6QOU OEouSc7icZfGMI+EljC2BAjQkGVx5AEtadLPi+Knq2kMr3BW4+7LV6+IoWpdEuYsGHeRjJ1+P2DM L1T87c7yhOWql077wEs3TicCHSc6oTCH7jxiiyzNS4nUReSX4Vg3NA0miAsidfdZ4eVRhtRII96y GHAwUqZiod4y4uUMJkFgFUlRLVuPTOvlgRWk8XUZeQWMSeOix5eUxjG5jBK/IGlQA0eYIYszcp3O SMxonpAocdMZdJ8uF/st20KxiAvoXBFShowsmLtVkGlalGQeuTkFcF4jNoAjTYDxrALE8kLl7EFh EbMkRe6Nu/2+7w1DPymmNzSbT1UvTmd+kAN9asLKPgg4K4u+GFEAo31YwOgmVz8UT1zfGHjGcDhy mD/Qh5pv6czTKdNt2wsM3eqSC89PQDryGevu7VZAgARJIoryOmZFyFhZr/M9CeLj+pL8qF5RPPFH pu/pTmDpph4wx3YcNhwarm0OXMv0NKOWOy6wMKBFomCPLK4AnSllOvNCJYIlU7KcAYuztGB+lxTR DQPtt50r2/k84qMpnQDxAZ0jVJRepbpXbEfNkskTx7RsatsWBbIHTqC5emBZ2tA1zKFv6o62plj3 odQxrhzjm1HqGJxSag9HI5caI83wDVcfjthgRH3NtzWdaiPD+yJKdd260lGAvhGtAIsTO3R9NkKy KPOCkRkEOrVNyzNHwcDQTPaFxFpArPUNibUEsSPNZgPHd6ipGcwOLAbSQIPBgALVQ88X8to2YHnq pmUh2a4kTf1MCDb0XE7Mo0magOLEK9YV6ECD2oyQbSnLo+BamesyeEOP02j+84nd/+OP/YkbXv4e /TYNWf/t4mrm9G+Cm7OTydPzjx9ibbyB3EmaToC/RVQyhYOvVFnCEFyEbywrWZx55dHHP8wwu05s 46k/O4eJ/WdwOYt+ObGHw99+O3z1egOCaTGnceSDrVY1me7B/mCo7ZsD0x5ZT48OrQNjdKTp1qFh a/bAPDwS8xeQsjzNWF5eg5FYROiHd6jngYkuLyJfAqnbAxsUU5N80HJk4O5ksN7tEUNrODLMgWHZ Fbq+CBI6u27qX9fBBbf4+EsB38GuiEu9y0mOLgL4FgPX5JYkjQowtcgFP5qTyEeRSNH9NZFKCkOC OF3wXhgSAU4AUnWQYLnxjCkgJ3MKToYWJXZUkHgKXiVfIqlGNm+azjUGqVPe4JUoBMedNhQWGU1M 4gGDKhxVZ1prl9QIzcV8QoRH74JLB2Fm0SQE3prAUwg2xl3w2BjIQLgTkiCKQfR/DIIA3AD4ywJi qymgBDVg2/qjLgHIQM9zXTNUs2cY6vAUgPYs1TgZmurAUzTV6WmKDi81dcCv8BNrPVMdHjpDdQQ3 Ts/BwVpvYKmDnuYpuoZDhtA2UC1FH6nDHhgjh0/iDYAOlYFqQjfVhn4GwAAkiom9VOcUaLB6MMY+ 1TVV79nqCHrCX0ABI3g/vJ5oc8MBUI5qeZxGpAuoHfAr/ISaB2QAAoTCfwv8ugP060i1bld3Cr8D CDB9HITgBKD6B9G8MTSgGonGmdWT6jXT83QdMfWgm644MCt+A+hsjthDLg6ADhOmYMB1qFjqMNQH p0OcsamrVqhDg2nhjHrNX/ke57R5rnPAaJ7wVbwhz/lCGAPVEJgVm3Na1wDzCC9DoFZD9LDQNj71 qkbeER5gVUd4gbZDhwPDFXaQlQi21yC4EbrfB6GUJLdPG4nvg8g3Dwmdy0KvGy3JrjrNlkkGdIcf BS1LWwfiqO4DdnRKVsA0mtO28H0wTv7MQ2dRUpebFlCh7t5Z1SyRLUiPo2+AlIe4/YKlMlaY+Cm2 fx+UTUgsozS7e02G9X3QinRkidHq7h1A03fiK4WcoZTR2d29fWy7E91ufxZvkDnJXtcCp0C4nIND m8WxkqOFFea/JZ0inepsmMXS5Nfk/9jY+zKdYAiQpdkskycwgIRhCQScC+Gx0ccZKzBCwKQGmHMC udNuP9qTlQzJz1NMIKcsmTWIOAbCfys85aI5eCOI7TLZzUhznzI/WtE06S1nRcyCcnWFWkQreTph OceHCVB7qWVrsBG5gnHAKvxsb7coIZqc7N0mDALbOWSIyB5yMnORPWCWxDCikGOIAa7LEFNVTDwT SKYxqbzEWgQXJZ7o7vazO+hdfQzz5ZJmGoE4tEynuszbCv9v1RIWhEsoeVYlvE1140lD6nJsW1BB vvbeRBA28jz4ThXcg5kQ1DzkAS+mTGYR5PmQk+eQocesys5TgJS3U2ZkT86KdJZ7rFA3aOo9aGis T/9jd++3h3SaPd7nlDxN89kUmZ5DpEQ+NjyBEDMEgooFJOwEsoYpAYWYAT+uCbvCaHKVElmJpTVZ dlo1KQXYWi/8Ep10NuukAAja+IrffIE+VhA2aiTGaDxMFIFq1VfB5rZyRkkG0iTS+2qOVRYgni4g ooTEJoupx8I0BljjrqBYVdWGLA5FKaY0jlciTRYzr1yBKKpgd4/ko1NeVCKQjcyw6oVd9uMYqzS8 jidef2KU0OulTt9r0Ecqyd36CFA1Pq9WmzsD3U2alEA8iQvPCur7aq4/p7t90SJLJS7QnXLZqFHb VdwaOqSTKOluJqp6t5TUIYQU6QRMi7B8S5RCW9qBWB+cV01c1V7diIyM5dXbAhgVSYzZnCtVcsrA qEhpzOZUaRHCpCtbabdSu1nizvKi3JxDkXLBIPVrp1JSLDkAwQoKVpqyIoVW0wVTbcCWIAmCRoLe gBQpJMtglDK7okn7jGinD9m8715DOs9SLGeAuMapAnfL3C7mld808eLIuxx3Lyb0o5rNinD73dYF xBfeJTimpNzqkS1MeDFjxnus1REsXVRShm1o1feTBHjlsSmOef/o8Qqt6yX2ltxTWVhDS2aU3hhC ZIpYI49mRc0Uwj0cZ9aKjQDeN3m7IXh6yfKE+dwf5wypocQV5fwFhdgTh+yByuUyIHALfrr0QjKh ukyo2SK0pBPuvYA6vZapFn1/gCsjHjgTYC54F/CCLJ8DTWWLM5XvfcuWlWkgBjptcMv90Nyc3KwI pJzb7EbTyeeUnqtKGUpEX4RThqbxApnrB7rtW66js5FlDjzdG7mO5Y4CPfCCkW9VJYCXOAgFwJUq IRwSsgp61QUE01wWEPSRs1obXpvnurmoLATcygzwcsaSIkzLlkH4CjYsIYpisT1yLIu5zNYdwx26 I50GZjDQ6Wik+4FvLkshoDP1zsSrBsaSAZruSCUUy1jlQD3PjbZMnhsIvyyZjTF5lpQ8v8TQqkUO CFdoiKFWa6iwVahwEMpt2GCpt19QZ6bQPGF8o+UaRb3eSmEBOCMeOAk931yRWpVZa82ILotQXsi8 Swhe+wEwscwjrKPWDClp7ZYmyGGgAoAo3IiBmfQuP98ALs3e0xrdxcmZMHnn9BJmTPAFMTXliF6T c+zQGDhZXldmuIzOd0Ob8B0VCNJoDs4Uo7Ad3c6uAMWLHBhnfxKatYFPyyLDP4I7FS/OYe3b/Nnn beRFQDArqjda11nU6LG43O7vq8orNx+3e/dWFVPuMocMJG0xv+WZW35jvQT6I3pXAYL4FJLzaQAh NFoS+U0FMc1YIiJ5hVf/v9AHCyb3OWx8foM3DZMl297KfnnZuposTwtkN7egJcT8uC7gkPLrxo1g wLYmbusWtrO2PquMlwMZe22ZeBiVZrV271bpoCzRS++5aV58a5cg6xQ/XSSt/F5G5KYbiva31ByQ 4nZI0bakIM+QCCLPGluIPD1HUhoT2ozN9rh9vWGNJUQRwE1pYR9x36VH/KjwcFOAhMAR3l5vTkOw UoSgKBAShkD8JARr64FtIbw6IfLmaQq2lyetOBLNodjzVslq+aD1dHsoyUffai++yjwg5EZmj6+y GGlHsvmbtVKZRPBKwiBFAJXYfKkQ1QvzjxYjXnCtSy8oQsuzJRvEaHnioS6ecKUuJBHAMwmMgkJj vLh2hoH3u2RMhJOzDHfkfIIFhLq44bM5i9MMY/lirfJ0T9GRqsvfQXxe1qWgjSLUvP2niBHcgDQU fPP0Hy5Lv6SYfIQMxehQImSTJNV9IVbRepqm/QS2ZOpiNrIIU2548ghYzuUJ2bp2sEWInDgqs7E8 Bg18ZFX0wJLfbPqlEiVtHnwHiWq2IDZK1O0bFJ8rURucZ7P5uh4xYDQRQkt7G3kRFWVEL5jlz3Xz CtKupn/9BpbR73aqKJJnFDvD4QgiSJFQ7NiaxsNJAbJkU9wer2Mh3gB+KGP8TlTxOtVqFBBuT6ma 5pM+jzteuB9gIgCJ77IvQWFtTtpfxwSjsnBbRecVBhk8iVkZ5c/y1UMHZ+f6c9t+1fTuLHuX4Wzq JjSKX+exNKIhVdQ+IGtSBV+4GPksjvB8A+RvbODrrmk41Hb9geEPjYFmasw0PNt2zGDoeSa81Ea+ 6oJqddaprTC+fnn6JdgHhsVMXXPdINCGmh5YvuMHpmvRge1Sm3mew4JRYHi3YeeL/Dm4A5CRsM+H XWQxvWb5xdxQNbVYBE8MTTcVzVE08yGdlekZvB4HNC7YQ1Gaqh64UQD/jMV2N2YvktOU+mNMSR+K WsZhCjozdlxnNKAPWeJzGTlgIZ1H0O6zgM7i8mEwi2ORNx9FBQVAFYzQh5V8YB9ABvLAPhoH8bxp EoKLrY6hNa0om9gW+nLfGf6GRmDGA3P/gfEU/m1kCbQvFwQffGvowmroA2pbTuDbvslMy6POyPNc wzRdDSTE04e4JA02rl6ITzeG2kMejh1VYjzWdVvVHiKzD7ilqfgmZgv5/uKsedVuc2m+bHiTxrNp PaiMYpT39uz4ot4xsXtL+ods8sB8yusbFx6I2UXO8GSV/8A8AgNyBXbjIVZDg4BBKPqKsctKMLjl WCPrXkz/Wj2YgZmm/hFPpRpNEPJsK4Z+bug7mrljDf+Lm5CU26vORjN6geFKh5tSfO/FcNk5MpzD o4PBsbJ/PDhSdN0LlNHgYKhYlmXbJjAFPGdjaiF+x8Xe4elz29hmKYT4IBM7OYO0D6b/WLbLYEAz mtNppzorlc4jmE61b/At1BrjD46hjYjGcbpYqmODsj4mKg8h0hBxfJR6EGQV3U6zlbKg18Utw9yJ h7ahwfCjxv/cQtcCD7c2fdOMfryVHj7/Oc0lOv4FLVjnFm3q/IvYsM66EVub2j/Fit3G+K8yY0tJ 5pPu8IrRt9DyzopC1/XiNaVttJVUijmuFLLT6NO/FenfivT/XZFqd7HmyvEDmLvdsq5pD271yvxl t7P+YcyVAovgXS7onClcU7od7qtkJ8X5D1cRa+ztJmn1kYeU6Ehft+CxmE6THBGeHO3260HVRo/8 uykL1GeKLwL4hVWD1RqtnDXWfUROKp7qvLF6giz6+vYa+n3OEG/cgyCtI8MrNRM8cawIxPz4RfvA yl0bmc6Go8nLU3AxiIRSRNMsZvyspnTb4kQ98r5nH/iZrD5nCua9h+KGvC5Wjzd8HlhRat17yarz N00Z9MtBgocpYdkA6ll195Xwqg2kPs2i7t7+2bOvnDHLp4WS5dGcerD45/hIeKGInInGdfjtU5K7 mVQYMzYek6h30E/T9BJrn3jobFkJhVUswAm1zrmtbP9j4cJPWZH873//T4lfEaBpkwb2sAJF8DzB Fh4nQKnDk0T3OITGv16ZgmPEnSXpAetrIN2RKF/yWpyf/iCxINvEger8z2GaXfNDoQQcdHb9mEBs YFXHL3rkWeKpBM86vcQuBRZK8dSBL5fk7lQ5s9qHbZ0lzJalzOqcYcN1VgJXXEYCsO2JX/yw5HJr Fusnq4WKKmKP464j1p84FHPnF4qrpkhgU/ICFfHVqxVbJJjziRNTdxJTfbNS03Ab/qobqIS4+eZ0 LBYLNaAec0EpPkVM3a+797S6+y7k4GYYBEsJJwdL4VnxhFvaMbcIE3BgxsgZWNqIP5f55ZgmrLyY TS4meQZqeRv9NeDu3im/w2No35L+AiaQxbNCFd9Pcfp13bAtS3NszdIse6BZw4E56IqPvbKZCzYi 5M56I8ECDoLE03x4/9M353gWod9kRVmvfvhx3TFX9DR9wY3Ut58k6NaDsKtbyELPVyKWr/kk9gY/ hmWWMRyZ1PXoIDCCoRMYrm1rBmVDI9BHrnPbx7A1ZvH1OP8u9QOdU9GKZ+qfcyueBNFExS2Eop7v mLzD6v2FKKC/fyx39FmGdj3xwKLzjrQUGysQ+1146JdYt1edqG2GzvIcK8tgnskSx59/Pe50/mMb O0TgQh41TxCAzkD2JtHNNIVW6ete6Qtj6WPb9qQIgWyP4I4J4OCXv/+dvANKCGltowCn98XXdrhh 8npf0YeONnBGio4bJht6H6VTCBx/hQgdB1Qe8Ja++5igchXNoTMuzB399hMvTKV+/FOHDZ0PeSL6 hmJXu7eF7ORfy2/1tuZ4XJzDMASiTvW9xAoU6vvPJkkK6c1LFuA0RA6DGyA4kzWsa/2laX+q8xYe EMGDAExsPeU1ltVxfEPrDAQQv6kXHaoZdHA5t4NZwjeXth+RP/mkcIEnFJbXT70Z7uuqYg/5OOYn Nre3hDRsAY0TqqKkQN+tFVnZ4i9pcZ148BZZ/5gDh0ZQVWja3hIWcYuMJUyQc4ktSLDSZeqlMXlC tmrTWRTxFtkRz8IVbD0iP5GtypwqzeEy4RgoaPfW42ZKhTyjCSur6RQH1+d0gnK3nNg77f1jUoDW ol79Cgmbiqed8vKAQUjItie0RwrO6L8ebaNitXWIG69P6BEh1M/TOIZVnV9EPpDW/fW1MzgxT8+P D35+cXZ4+vSZ9fZkcNx9vOybRVdV36OjZ788O31+evzm6OD8xcnv9rOfX5sG79usJ6kWFOeexn6a YOUbBi+ixE8XqnjGEa0G6LAUCCEP5OKiIgA7VDUXwVfBWC+/XVi61ZQfSQNC/J8PQAK2K6fYvVsE HoEMNO6zUAUt4mPnHVJ7KSq318gAt4pmoLKhsMJcIPnZZJjDltyvkuO1tZJBccHl1P9Euv0Pfb4L D7AzkLS64/b2J4QMjTfILZrNZBbH71Ha4KmyJ/eXUEk8H6k0Q79xGEaxvw196olFwXaz9I/+bG63 H/31Fxff7Ue851J+//Y3HMaNw24fv2LiZ+n5fxrT+T8T/YhcRkYAAA== headers: Server: [nginx] Content-Type: [text/html] Vary: [Accept-Encoding] Cache-Control: [no-cache] must-revalidate: ['s-maxage=3600'] Expires: ['Fri 15 Oct 2004 12:00:00 GMT'] Server-Name: ['dalmozwww01.dal.moz.com'] Content-Encoding: [gzip] Content-Length: ['5683'] Accept-Ranges: [bytes] Date: ['Sat, 11 Jan 2014 18:45:11 GMT'] X-Varnish: [918768771 918700396] Age: ['3479'] Via: ['1.1 varnish'] Connection: [keep-alive] status: {code: 200, message: OK} vcrpy-1.7.3/tests/integration/000077500000000000000000000000001256646735100163715ustar00rootroot00000000000000vcrpy-1.7.3/tests/integration/__init__.py000066400000000000000000000000001256646735100204700ustar00rootroot00000000000000vcrpy-1.7.3/tests/integration/test_basic.py000066400000000000000000000060531256646735100210670ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Basic tests for cassettes''' # External imports import os from six.moves.urllib.request import urlopen # Internal imports import vcr def test_nonexistent_directory(tmpdir): '''If we load a cassette in a nonexistent directory, it can save ok''' # Check to make sure directory doesnt exist assert not os.path.exists(str(tmpdir.join('nonexistent'))) # Run VCR to create dir and cassette file with vcr.use_cassette(str(tmpdir.join('nonexistent', 'cassette.yml'))): urlopen('http://httpbin.org/').read() # This should have made the file and the directory assert os.path.exists(str(tmpdir.join('nonexistent', 'cassette.yml'))) def test_unpatch(tmpdir): '''Ensure that our cassette gets unpatched when we're done''' with vcr.use_cassette(str(tmpdir.join('unpatch.yaml'))) as cass: urlopen('http://httpbin.org/').read() # Make the same request, and assert that we haven't served any more # requests out of cache urlopen('http://httpbin.org/').read() assert cass.play_count == 0 def test_basic_use(tmpdir): ''' Copied from the docs ''' with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'): response = urlopen( 'http://www.iana.org/domains/reserved' ).read() assert b'Example domains' in response def test_basic_json_use(tmpdir): ''' Ensure you can load a json serialized cassette ''' test_fixture = 'fixtures/vcr_cassettes/synopsis.json' with vcr.use_cassette(test_fixture, serializer='json'): response = urlopen('http://httpbin.org/').read() assert b'difficult sometimes' in response def test_patched_content(tmpdir): ''' Ensure that what you pull from a cassette is what came from the request ''' with vcr.use_cassette(str(tmpdir.join('synopsis.yaml'))) as cass: response = urlopen('http://httpbin.org/').read() assert cass.play_count == 0 with vcr.use_cassette(str(tmpdir.join('synopsis.yaml'))) as cass: response2 = urlopen('http://httpbin.org/').read() assert cass.play_count == 1 cass._save(force=True) with vcr.use_cassette(str(tmpdir.join('synopsis.yaml'))) as cass: response3 = urlopen('http://httpbin.org/').read() assert cass.play_count == 1 assert response == response2 assert response2 == response3 def test_patched_content_json(tmpdir): ''' Ensure that what you pull from a json cassette is what came from the request ''' testfile = str(tmpdir.join('synopsis.json')) with vcr.use_cassette(testfile) as cass: response = urlopen('http://httpbin.org/').read() assert cass.play_count == 0 with vcr.use_cassette(testfile) as cass: response2 = urlopen('http://httpbin.org/').read() assert cass.play_count == 1 cass._save(force=True) with vcr.use_cassette(testfile) as cass: response3 = urlopen('http://httpbin.org/').read() assert cass.play_count == 1 assert response == response2 assert response2 == response3 vcrpy-1.7.3/tests/integration/test_boto.py000066400000000000000000000055711256646735100207550ustar00rootroot00000000000000import pytest boto = pytest.importorskip("boto") import boto import boto.iam from boto.s3.connection import S3Connection from boto.s3.key import Key from ConfigParser import DuplicateSectionError import vcr def test_boto_stubs(tmpdir): with vcr.use_cassette(str(tmpdir.join('boto-stubs.yml'))): # Perform the imports within the patched context so that # CertValidatingHTTPSConnection refers to the patched version. from boto.https_connection import CertValidatingHTTPSConnection from vcr.stubs.boto_stubs import VCRCertValidatingHTTPSConnection # Prove that the class was patched by the stub and that we can instantiate it. assert issubclass(CertValidatingHTTPSConnection, VCRCertValidatingHTTPSConnection) CertValidatingHTTPSConnection('hostname.does.not.matter') def test_boto_without_vcr(): s3_conn = S3Connection() s3_bucket = s3_conn.get_bucket('boto-demo-1394171994') # a bucket you can access k = Key(s3_bucket) k.key = 'test.txt' k.set_contents_from_string('hello world i am a string') def test_boto_medium_difficulty(tmpdir): s3_conn = S3Connection() s3_bucket = s3_conn.get_bucket('boto-demo-1394171994') # a bucket you can access with vcr.use_cassette(str(tmpdir.join('boto-medium.yml'))) as cass: k = Key(s3_bucket) k.key = 'test.txt' k.set_contents_from_string('hello world i am a string') with vcr.use_cassette(str(tmpdir.join('boto-medium.yml'))) as cass: k = Key(s3_bucket) k.key = 'test.txt' k.set_contents_from_string('hello world i am a string') def test_boto_hardcore_mode(tmpdir): with vcr.use_cassette(str(tmpdir.join('boto-hardcore.yml'))) as cass: s3_conn = S3Connection() s3_bucket = s3_conn.get_bucket('boto-demo-1394171994') # a bucket you can access k = Key(s3_bucket) k.key = 'test.txt' k.set_contents_from_string('hello world i am a string') with vcr.use_cassette(str(tmpdir.join('boto-hardcore.yml'))) as cass: s3_conn = S3Connection() s3_bucket = s3_conn.get_bucket('boto-demo-1394171994') # a bucket you can access k = Key(s3_bucket) k.key = 'test.txt' k.set_contents_from_string('hello world i am a string') def test_boto_iam(tmpdir): try: boto.config.add_section('Boto') except DuplicateSectionError: pass # Ensure that boto uses HTTPS boto.config.set('Boto', 'is_secure', 'true') # Ensure that boto uses CertValidatingHTTPSConnection boto.config.set('Boto', 'https_validate_certificates', 'true') with vcr.use_cassette(str(tmpdir.join('boto-iam.yml'))) as cass: iam_conn = boto.iam.connect_to_region('universal') iam_conn.get_all_users() with vcr.use_cassette(str(tmpdir.join('boto-iam.yml'))) as cass: iam_conn = boto.iam.connect_to_region('universal') iam_conn.get_all_users() vcrpy-1.7.3/tests/integration/test_config.py000066400000000000000000000032431256646735100212510ustar00rootroot00000000000000import os import json import pytest import vcr from six.moves.urllib.request import urlopen def test_set_serializer_default_config(tmpdir): my_vcr = vcr.VCR(serializer='json') with my_vcr.use_cassette(str(tmpdir.join('test.json'))): assert my_vcr.serializer == 'json' urlopen('http://httpbin.org/get') with open(str(tmpdir.join('test.json'))) as f: assert json.loads(f.read()) def test_default_set_cassette_library_dir(tmpdir): my_vcr = vcr.VCR(cassette_library_dir=str(tmpdir.join('subdir'))) with my_vcr.use_cassette('test.json'): urlopen('http://httpbin.org/get') assert os.path.exists(str(tmpdir.join('subdir').join('test.json'))) def test_override_set_cassette_library_dir(tmpdir): my_vcr = vcr.VCR(cassette_library_dir=str(tmpdir.join('subdir'))) cld = str(tmpdir.join('subdir2')) with my_vcr.use_cassette('test.json', cassette_library_dir=cld): urlopen('http://httpbin.org/get') assert os.path.exists(str(tmpdir.join('subdir2').join('test.json'))) assert not os.path.exists(str(tmpdir.join('subdir').join('test.json'))) def test_override_match_on(tmpdir): my_vcr = vcr.VCR(match_on=['method']) with my_vcr.use_cassette(str(tmpdir.join('test.json'))): urlopen('http://httpbin.org/') with my_vcr.use_cassette(str(tmpdir.join('test.json'))) as cass: urlopen('http://httpbin.org/get') assert len(cass) == 1 assert cass.play_count == 1 def test_missing_matcher(): my_vcr = vcr.VCR() my_vcr.register_matcher("awesome", object) with pytest.raises(KeyError): with my_vcr.use_cassette("test.yaml", match_on=['notawesome']): pass vcrpy-1.7.3/tests/integration/test_disksaver.py000066400000000000000000000030711256646735100217760ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Basic tests about save behavior''' # External imports import os import time from six.moves.urllib.request import urlopen # Internal imports import vcr def test_disk_saver_nowrite(tmpdir): ''' Ensure that when you close a cassette without changing it it doesn't rewrite the file ''' fname = str(tmpdir.join('synopsis.yaml')) with vcr.use_cassette(fname) as cass: urlopen('http://www.iana.org/domains/reserved').read() assert cass.play_count == 0 last_mod = os.path.getmtime(fname) with vcr.use_cassette(fname) as cass: urlopen('http://www.iana.org/domains/reserved').read() assert cass.play_count == 1 assert cass.dirty is False last_mod2 = os.path.getmtime(fname) assert last_mod == last_mod2 def test_disk_saver_write(tmpdir): ''' Ensure that when you close a cassette after changing it it does rewrite the file ''' fname = str(tmpdir.join('synopsis.yaml')) with vcr.use_cassette(fname) as cass: urlopen('http://www.iana.org/domains/reserved').read() assert cass.play_count == 0 last_mod = os.path.getmtime(fname) # Make sure at least 1 second passes, otherwise sometimes # the mtime doesn't change time.sleep(1) with vcr.use_cassette(fname, record_mode='any') as cass: urlopen('http://www.iana.org/domains/reserved').read() urlopen('http://httpbin.org/').read() assert cass.play_count == 1 assert cass.dirty last_mod2 = os.path.getmtime(fname) assert last_mod != last_mod2 vcrpy-1.7.3/tests/integration/test_filter.py000066400000000000000000000072771256646735100213040ustar00rootroot00000000000000import base64 import pytest from six.moves.urllib.request import urlopen, Request from six.moves.urllib.parse import urlencode from six.moves.urllib.error import HTTPError import vcr import json def _request_with_auth(url, username, password): request = Request(url) base64string = base64.b64encode( username.encode('ascii') + b':' + password.encode('ascii') ) request.add_header(b"Authorization", b"Basic " + base64string) return urlopen(request) def _find_header(cassette, header): for request in cassette.requests: for k in request.headers: if header.lower() == k.lower(): return True return False def test_filter_basic_auth(tmpdir): url = 'http://httpbin.org/basic-auth/user/passwd' cass_file = str(tmpdir.join('basic_auth_filter.yaml')) my_vcr = vcr.VCR(match_on=['uri', 'method', 'headers']) # 2 requests, one with auth failure and one with auth success with my_vcr.use_cassette(cass_file, filter_headers=['authorization']): with pytest.raises(HTTPError): resp = _request_with_auth(url, 'user', 'wrongpasswd') assert resp.getcode() == 401 resp = _request_with_auth(url, 'user', 'passwd') assert resp.getcode() == 200 # make same 2 requests, this time both served from cassette. with my_vcr.use_cassette(cass_file, filter_headers=['authorization']) as cass: with pytest.raises(HTTPError): resp = _request_with_auth(url, 'user', 'wrongpasswd') assert resp.getcode() == 401 resp = _request_with_auth(url, 'user', 'passwd') assert resp.getcode() == 200 # authorization header should not have been recorded assert not _find_header(cass, 'authorization') assert len(cass) == 2 def test_filter_querystring(tmpdir): url = 'http://httpbin.org/?foo=bar' cass_file = str(tmpdir.join('filter_qs.yaml')) with vcr.use_cassette(cass_file, filter_query_parameters=['foo']): urlopen(url) with vcr.use_cassette(cass_file, filter_query_parameters=['foo']) as cass: urlopen(url) assert 'foo' not in cass.requests[0].url def test_filter_post_data(tmpdir): url = 'http://httpbin.org/post' data = urlencode({'id': 'secret', 'foo': 'bar'}).encode('utf-8') cass_file = str(tmpdir.join('filter_pd.yaml')) with vcr.use_cassette(cass_file, filter_post_data_parameters=['id']): urlopen(url, data) with vcr.use_cassette(cass_file, filter_post_data_parameters=['id']) as cass: assert b'id=secret' not in cass.requests[0].body def test_filter_json_post_data(tmpdir): data = json.dumps({'id': 'secret', 'foo': 'bar'}).encode('utf-8') request = Request('http://httpbin.org/post', data=data) request.add_header('Content-Type', 'application/json') cass_file = str(tmpdir.join('filter_jpd.yaml')) with vcr.use_cassette(cass_file, filter_post_data_parameters=['id']): urlopen(request) with vcr.use_cassette(cass_file, filter_post_data_parameters=['id']) as cass: assert b'"id": "secret"' not in cass.requests[0].body def test_filter_callback(tmpdir): url = 'http://httpbin.org/get' cass_file = str(tmpdir.join('basic_auth_filter.yaml')) def before_record_cb(request): if request.path != '/get': return request # Test the legacy keyword. my_vcr = vcr.VCR(before_record=before_record_cb) with my_vcr.use_cassette(cass_file, filter_headers=['authorization']) as cass: urlopen(url) assert len(cass) == 0 my_vcr = vcr.VCR(before_record_request=before_record_cb) with my_vcr.use_cassette(cass_file, filter_headers=['authorization']) as cass: urlopen(url) assert len(cass) == 0 vcrpy-1.7.3/tests/integration/test_httplib2.py000066400000000000000000000121531256646735100215340ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Integration tests with httplib2''' # External imports from six.moves.urllib_parse import urlencode import pytest # Internal imports import vcr from assertions import assert_cassette_has_one_response httplib2 = pytest.importorskip("httplib2") @pytest.fixture(params=["https", "http"]) def scheme(request): """ Fixture that returns both http and https """ return request.param def test_response_code(scheme, tmpdir): '''Ensure we can read a response code from a fetch''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('atts.yaml'))) as cass: resp, _ = httplib2.Http().request(url) code = resp.status with vcr.use_cassette(str(tmpdir.join('atts.yaml'))) as cass: resp, _ = httplib2.Http().request(url) assert code == resp.status def test_random_body(scheme, tmpdir): '''Ensure we can read the content, and that it's served from cache''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('body.yaml'))) as cass: _, content = httplib2.Http().request(url) body = content with vcr.use_cassette(str(tmpdir.join('body.yaml'))) as cass: _, content = httplib2.Http().request(url) assert body == content def test_response_headers(scheme, tmpdir): '''Ensure we can get information from the response''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: resp, _ = httplib2.Http().request(url) headers = resp.items() with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: resp, _ = httplib2.Http().request(url) assert set(headers) == set(resp.items()) def test_effective_url(scheme, tmpdir): '''Ensure that the effective_url is captured''' url = scheme + '://httpbin.org/redirect-to?url=/html' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: resp, _ = httplib2.Http().request(url) effective_url = resp['content-location'] assert effective_url == scheme + '://httpbin.org/html' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: resp, _ = httplib2.Http().request(url) assert effective_url == resp['content-location'] def test_multiple_requests(scheme, tmpdir): '''Ensure that we can cache multiple requests''' urls = [ scheme + '://httpbin.org/', scheme + '://httpbin.org/', scheme + '://httpbin.org/get', scheme + '://httpbin.org/bytes/1024' ] with vcr.use_cassette(str(tmpdir.join('multiple.yaml'))) as cass: [httplib2.Http().request(url) for url in urls] assert len(cass) == len(urls) def test_get_data(scheme, tmpdir): '''Ensure that it works with query data''' data = urlencode({'some': 1, 'data': 'here'}) url = scheme + '://httpbin.org/get?' + data with vcr.use_cassette(str(tmpdir.join('get_data.yaml'))) as cass: _, res1 = httplib2.Http().request(url) with vcr.use_cassette(str(tmpdir.join('get_data.yaml'))) as cass: _, res2 = httplib2.Http().request(url) assert res1 == res2 def test_post_data(scheme, tmpdir): '''Ensure that it works when posting data''' data = urlencode({'some': 1, 'data': 'here'}) url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: _, res1 = httplib2.Http().request(url, "POST", data) with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: _, res2 = httplib2.Http().request(url, "POST", data) assert res1 == res2 assert_cassette_has_one_response(cass) def test_post_unicode_data(scheme, tmpdir): '''Ensure that it works when posting unicode data''' data = urlencode({'snowman': u'☃'.encode('utf-8')}) url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: _, res1 = httplib2.Http().request(url, "POST", data) with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: _, res2 = httplib2.Http().request(url, "POST", data) assert res1 == res2 assert_cassette_has_one_response(cass) def test_cross_scheme(tmpdir): '''Ensure that requests between schemes are treated separately''' # First fetch a url under https, and then again under https and then # ensure that we haven't served anything out of cache, and we have two # requests / response pairs in the cassette with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: httplib2.Http().request('https://httpbin.org/') httplib2.Http().request('http://httpbin.org/') assert len(cass) == 2 assert cass.play_count == 0 def test_decorator(scheme, tmpdir): '''Test the decorator version of VCR.py''' url = scheme + '://httpbin.org/' @vcr.use_cassette(str(tmpdir.join('atts.yaml'))) def inner1(): resp, _ = httplib2.Http().request(url) return resp['status'] @vcr.use_cassette(str(tmpdir.join('atts.yaml'))) def inner2(): resp, _ = httplib2.Http().request(url) return resp['status'] assert inner1() == inner2() vcrpy-1.7.3/tests/integration/test_ignore.py000066400000000000000000000033431256646735100212700ustar00rootroot00000000000000import base64 import pytest from six.moves.urllib.request import urlopen, Request from six.moves.urllib.error import HTTPError import vcr def test_ignore_localhost(tmpdir, httpserver): httpserver.serve_content('Hello!') cass_file = str(tmpdir.join('filter_qs.yaml')) with vcr.use_cassette(cass_file, ignore_localhost=True) as cass: urlopen(httpserver.url) assert len(cass) == 0 urlopen('http://httpbin.org') assert len(cass) == 1 def test_ignore_httpbin(tmpdir, httpserver): httpserver.serve_content('Hello!') cass_file = str(tmpdir.join('filter_qs.yaml')) with vcr.use_cassette( cass_file, ignore_hosts=['httpbin.org'] ) as cass: urlopen('http://httpbin.org') assert len(cass) == 0 urlopen(httpserver.url) assert len(cass) == 1 def test_ignore_localhost_and_httpbin(tmpdir, httpserver): httpserver.serve_content('Hello!') cass_file = str(tmpdir.join('filter_qs.yaml')) with vcr.use_cassette( cass_file, ignore_hosts=['httpbin.org'], ignore_localhost=True ) as cass: urlopen('http://httpbin.org') urlopen(httpserver.url) assert len(cass) == 0 def test_ignore_localhost_twice(tmpdir, httpserver): httpserver.serve_content('Hello!') cass_file = str(tmpdir.join('filter_qs.yaml')) with vcr.use_cassette(cass_file, ignore_localhost=True) as cass: urlopen(httpserver.url) assert len(cass) == 0 urlopen('http://httpbin.org') assert len(cass) == 1 with vcr.use_cassette(cass_file, ignore_localhost=True) as cass: assert len(cass) == 1 urlopen(httpserver.url) urlopen('http://httpbin.org') assert len(cass) == 1 vcrpy-1.7.3/tests/integration/test_matchers.py000066400000000000000000000062771256646735100216240ustar00rootroot00000000000000import vcr import pytest from six.moves.urllib.request import urlopen DEFAULT_URI = 'http://httpbin.org/get?p1=q1&p2=q2' # base uri for testing @pytest.fixture def cassette(tmpdir): """ Helper fixture used to prepare the cassete returns path to the recorded cassette """ cassette_path = str(tmpdir.join('test.yml')) with vcr.use_cassette(cassette_path, record_mode='all'): urlopen(DEFAULT_URI) return cassette_path @pytest.mark.parametrize("matcher, matching_uri, not_matching_uri", [ ('uri', 'http://httpbin.org/get?p1=q1&p2=q2', 'http://httpbin.org/get?p2=q2&p1=q1'), ('scheme', 'http://google.com/post?a=b', 'https://httpbin.org/get?p1=q1&p2=q2'), ('host', 'https://httpbin.org/post?a=b', 'http://google.com/get?p1=q1&p2=q2'), ('port', 'https://google.com:80/post?a=b', 'http://httpbin.org:5000/get?p1=q1&p2=q2'), ('path', 'https://google.com/get?a=b', 'http://httpbin.org/post?p1=q1&p2=q2'), ('query', 'https://google.com/get?p2=q2&p1=q1', 'http://httpbin.org/get?p1=q1&a=b') ]) def test_matchers(cassette, matcher, matching_uri, not_matching_uri): # play cassette with default uri with vcr.use_cassette(cassette, match_on=[matcher]) as cass: urlopen(DEFAULT_URI) assert cass.play_count == 1 # play cassette with matching on uri with vcr.use_cassette(cassette, match_on=[matcher]) as cass: urlopen(matching_uri) assert cass.play_count == 1 # play cassette with not matching on uri, it should fail with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette(cassette, match_on=[matcher]) as cass: urlopen(not_matching_uri) def test_method_matcher(cassette): # play cassette with matching on method with vcr.use_cassette(cassette, match_on=['method']) as cass: urlopen('https://google.com/get?a=b') assert cass.play_count == 1 # should fail if method does not match with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette(cassette, match_on=['method']) as cass: # is a POST request urlopen(DEFAULT_URI, data=b'') @pytest.mark.parametrize("uri", [ DEFAULT_URI, 'http://httpbin.org/get?p2=q2&p1=q1', 'http://httpbin.org/get?p2=q2&p1=q1', ]) def test_default_matcher_matches(cassette, uri): with vcr.use_cassette(cassette) as cass: urlopen(uri) assert cass.play_count == 1 @pytest.mark.parametrize("uri", [ 'https://httpbin.org/get?p1=q1&p2=q2', 'http://google.com/get?p1=q1&p2=q2', 'http://httpbin.org:5000/get?p1=q1&p2=q2', 'http://httpbin.org/post?p1=q1&p2=q2', 'http://httpbin.org/get?p1=q1&a=b' ]) def test_default_matcher_does_not_match(cassette, uri): with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette(cassette): urlopen(uri) def test_default_matcher_does_not_match_on_method(cassette): with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette(cassette): # is a POST request urlopen(DEFAULT_URI, data=b'') vcrpy-1.7.3/tests/integration/test_multiple.py000066400000000000000000000016011256646735100216330ustar00rootroot00000000000000import pytest import vcr from six.moves.urllib.request import urlopen def test_making_extra_request_raises_exception(tmpdir): # make two requests in the first request that are considered # identical (since the match is based on method) with vcr.use_cassette(str(tmpdir.join('test.json')), match_on=['method']): urlopen('http://httpbin.org/status/200') urlopen('http://httpbin.org/status/201') # Now, try to make three requests. The first two should return the # correct status codes in order, and the third should raise an # exception. with vcr.use_cassette(str(tmpdir.join('test.json')), match_on=['method']): assert urlopen('http://httpbin.org/status/200').getcode() == 200 assert urlopen('http://httpbin.org/status/201').getcode() == 201 with pytest.raises(Exception): urlopen('http://httpbin.org/status/200') vcrpy-1.7.3/tests/integration/test_record_mode.py000066400000000000000000000124611256646735100222700ustar00rootroot00000000000000import os import pytest import vcr from six.moves.urllib.request import urlopen def test_once_record_mode(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="once"): # cassette file doesn't exist, so create. response = urlopen('http://httpbin.org/').read() with vcr.use_cassette(testfile, record_mode="once") as cass: # make the same request again response = urlopen('http://httpbin.org/').read() # the first time, it's played from the cassette. # but, try to access something else from the same cassette, and an # exception is raised. with pytest.raises(Exception): response = urlopen('http://httpbin.org/get').read() def test_once_record_mode_two_times(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="once"): # get two of the same file response1 = urlopen('http://httpbin.org/').read() response2 = urlopen('http://httpbin.org/').read() with vcr.use_cassette(testfile, record_mode="once") as cass: # do it again response = urlopen('http://httpbin.org/').read() response = urlopen('http://httpbin.org/').read() def test_once_mode_three_times(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="once"): # get three of the same file response1 = urlopen('http://httpbin.org/').read() response2 = urlopen('http://httpbin.org/').read() response2 = urlopen('http://httpbin.org/').read() def test_new_episodes_record_mode(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="new_episodes"): # cassette file doesn't exist, so create. response = urlopen('http://httpbin.org/').read() with vcr.use_cassette(testfile, record_mode="new_episodes") as cass: # make the same request again response = urlopen('http://httpbin.org/').read() # all responses have been played assert cass.all_played # in the "new_episodes" record mode, we can add more requests to # a cassette without repurcussions. response = urlopen('http://httpbin.org/get').read() # one of the responses has been played assert cass.play_count == 1 # not all responses have been played assert not cass.all_played with vcr.use_cassette(testfile, record_mode="new_episodes") as cass: # the cassette should now have 2 responses assert len(cass.responses) == 2 def test_new_episodes_record_mode_two_times(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) url = 'http://httpbin.org/bytes/1024' with vcr.use_cassette(testfile, record_mode="new_episodes"): # cassette file doesn't exist, so create. original_first_response = urlopen(url).read() with vcr.use_cassette(testfile, record_mode="new_episodes"): # make the same request again assert urlopen(url).read() == original_first_response # in the "new_episodes" record mode, we can add the same request # to the cassette without repercussions original_second_response = urlopen(url).read() with vcr.use_cassette(testfile, record_mode="once"): # make the same request again assert urlopen(url).read() == original_first_response assert urlopen(url).read() == original_second_response # now that we are back in once mode, this should raise # an error. with pytest.raises(Exception): urlopen(url).read() def test_all_record_mode(tmpdir): testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="all"): # cassette file doesn't exist, so create. response = urlopen('http://httpbin.org/').read() with vcr.use_cassette(testfile, record_mode="all") as cass: # make the same request again response = urlopen('http://httpbin.org/').read() # in the "all" record mode, we can add more requests to # a cassette without repurcussions. response = urlopen('http://httpbin.org/get').read() # The cassette was never actually played, even though it existed. # that's because, in "all" mode, the requests all go directly to # the source and bypass the cassette. assert cass.play_count == 0 def test_none_record_mode(tmpdir): # Cassette file doesn't exist, yet we are trying to make a request. # raise hell. testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="none"): with pytest.raises(Exception): response = urlopen('http://httpbin.org/').read() def test_none_record_mode_with_existing_cassette(tmpdir): # create a cassette file testfile = str(tmpdir.join('recordmode.yml')) with vcr.use_cassette(testfile, record_mode="all"): response = urlopen('http://httpbin.org/').read() # play from cassette file with vcr.use_cassette(testfile, record_mode="none") as cass: response = urlopen('http://httpbin.org/').read() assert cass.play_count == 1 # but if I try to hit the net, raise an exception. with pytest.raises(Exception): response = urlopen('http://httpbin.org/get').read() vcrpy-1.7.3/tests/integration/test_register_matcher.py000066400000000000000000000022071256646735100233320ustar00rootroot00000000000000import vcr from six.moves.urllib.request import urlopen def true_matcher(r1, r2): return True def false_matcher(r1, r2): return False def test_registered_true_matcher(tmpdir): my_vcr = vcr.VCR() my_vcr.register_matcher('true', true_matcher) testfile = str(tmpdir.join('test.yml')) with my_vcr.use_cassette(testfile, match_on=['true']) as cass: # These 2 different urls are stored as the same request urlopen('http://httpbin.org/') urlopen('https://httpbin.org/get') with my_vcr.use_cassette(testfile, match_on=['true']) as cass: # I can get the response twice even though I only asked for it once urlopen('http://httpbin.org/get') urlopen('https://httpbin.org/get') def test_registered_false_matcher(tmpdir): my_vcr = vcr.VCR() my_vcr.register_matcher('false', false_matcher) testfile = str(tmpdir.join('test.yml')) with my_vcr.use_cassette(testfile, match_on=['false']) as cass: # These 2 different urls are stored as different requests urlopen('http://httpbin.org/') urlopen('https://httpbin.org/get') assert len(cass) == 2 vcrpy-1.7.3/tests/integration/test_register_serializer.py000066400000000000000000000017111256646735100240570ustar00rootroot00000000000000import vcr class MockSerializer(object): def __init__(self): self.serialize_count = 0 self.deserialize_count = 0 self.load_args = None def deserialize(self, cassette_string): self.serialize_count += 1 self.cassette_string = cassette_string return {'interactions':[]} def serialize(self, cassette_dict): self.deserialize_count += 1 return "" def test_registered_serializer(tmpdir): ms = MockSerializer() my_vcr = vcr.VCR() my_vcr.register_serializer('mock', ms) tmpdir.join('test.mock').write('test_data') with my_vcr.use_cassette(str(tmpdir.join('test.mock')), serializer='mock'): # Serializer deserialized once assert ms.serialize_count == 1 # and serialized the test data string assert ms.cassette_string == 'test_data' # and hasn't serialized yet assert ms.deserialize_count == 0 assert ms.serialize_count == 1 vcrpy-1.7.3/tests/integration/test_request.py000066400000000000000000000014421256646735100214730ustar00rootroot00000000000000import vcr from six.moves.urllib.request import urlopen def test_recorded_request_uri_with_redirected_request(tmpdir): with vcr.use_cassette(str(tmpdir.join('test.yml'))) as cass: assert len(cass) == 0 urlopen('http://httpbin.org/redirect/3') assert cass.requests[0].uri == 'http://httpbin.org/redirect/3' assert cass.requests[3].uri == 'http://httpbin.org/get' assert len(cass) == 4 def test_records_multiple_header_values(tmpdir, httpserver): httpserver.serve_content('Hello!', headers=[('foo', 'bar'), ('foo', 'baz')]) with vcr.use_cassette(str(tmpdir.join('test.yml'))) as cass: assert len(cass) == 0 urlopen(httpserver.url) assert len(cass) == 1 assert cass.responses[0]['headers']['foo'] == ['bar', 'baz'] vcrpy-1.7.3/tests/integration/test_requests.py000066400000000000000000000225141256646735100216610ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Test requests' interaction with vcr''' import pytest import vcr from assertions import assert_cassette_empty, assert_is_json requests = pytest.importorskip("requests") @pytest.fixture(params=["https", "http"]) def scheme(request): '''Fixture that returns both http and https.''' return request.param def test_status_code(scheme, tmpdir): '''Ensure that we can read the status code''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('atts.yaml'))): status_code = requests.get(url).status_code with vcr.use_cassette(str(tmpdir.join('atts.yaml'))): assert status_code == requests.get(url).status_code def test_headers(scheme, tmpdir): '''Ensure that we can read the headers back''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): headers = requests.get(url).headers with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): assert headers == requests.get(url).headers def test_body(tmpdir, scheme): '''Ensure the responses are all identical enough''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('body.yaml'))): content = requests.get(url).content with vcr.use_cassette(str(tmpdir.join('body.yaml'))): assert content == requests.get(url).content def test_effective_url(scheme, tmpdir): '''Ensure that the effective_url is captured''' url = scheme + '://httpbin.org/redirect-to?url=/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))): effective_url = requests.get(url).url assert effective_url == scheme + '://httpbin.org/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))): assert effective_url == requests.get(url).url def test_auth(tmpdir, scheme): '''Ensure that we can handle basic auth''' auth = ('user', 'passwd') url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth.yaml'))): one = requests.get(url, auth=auth) with vcr.use_cassette(str(tmpdir.join('auth.yaml'))): two = requests.get(url, auth=auth) assert one.content == two.content assert one.status_code == two.status_code def test_auth_failed(tmpdir, scheme): '''Ensure that we can save failed auth statuses''' auth = ('user', 'wrongwrongwrong') url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth-failed.yaml'))) as cass: # Ensure that this is empty to begin with assert_cassette_empty(cass) one = requests.get(url, auth=auth) two = requests.get(url, auth=auth) assert one.content == two.content assert one.status_code == two.status_code == 401 def test_post(tmpdir, scheme): '''Ensure that we can post and cache the results''' data = {'key1': 'value1', 'key2': 'value2'} url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('requests.yaml'))): req1 = requests.post(url, data).content with vcr.use_cassette(str(tmpdir.join('requests.yaml'))): req2 = requests.post(url, data).content assert req1 == req2 def test_redirects(tmpdir, scheme): '''Ensure that we can handle redirects''' url = scheme + '://httpbin.org/redirect-to?url=bytes/1024' with vcr.use_cassette(str(tmpdir.join('requests.yaml'))): content = requests.get(url).content with vcr.use_cassette(str(tmpdir.join('requests.yaml'))) as cass: assert content == requests.get(url).content # Ensure that we've now cached *two* responses. One for the redirect # and one for the final fetch assert len(cass) == 2 assert cass.play_count == 2 def test_cross_scheme(tmpdir, scheme): '''Ensure that requests between schemes are treated separately''' # First fetch a url under http, and then again under https and then # ensure that we haven't served anything out of cache, and we have two # requests / response pairs in the cassette with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: requests.get('https://httpbin.org/') requests.get('http://httpbin.org/') assert cass.play_count == 0 assert len(cass) == 2 def test_gzip(tmpdir, scheme): ''' Ensure that requests (actually urllib3) is able to automatically decompress the response body ''' url = scheme + '://httpbin.org/gzip' response = requests.get(url) with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))): response = requests.get(url) assert_is_json(response.content) with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))): assert_is_json(response.content) def test_session_and_connection_close(tmpdir, scheme): ''' This tests the issue in https://github.com/kevin1024/vcrpy/issues/48 If you use a requests.session and the connection is closed, then an exception is raised in the urllib3 module vendored into requests: `AttributeError: 'NoneType' object has no attribute 'settimeout'` ''' with vcr.use_cassette(str(tmpdir.join('session_connection_closed.yaml'))): session = requests.session() session.get('http://httpbin.org/get', headers={'Connection': 'close'}) session.get('http://httpbin.org/get', headers={'Connection': 'close'}) def test_https_with_cert_validation_disabled(tmpdir): with vcr.use_cassette(str(tmpdir.join('cert_validation_disabled.yaml'))): requests.get('https://httpbin.org', verify=False) def test_session_can_make_requests_after_requests_unpatched(tmpdir): with vcr.use_cassette(str(tmpdir.join('test_session_after_unpatched.yaml'))): session = requests.session() session.get('http://httpbin.org/get') with vcr.use_cassette(str(tmpdir.join('test_session_after_unpatched.yaml'))): session = requests.session() session.get('http://httpbin.org/get') session.get('http://httpbin.org/status/200') def test_session_created_before_use_cassette_is_patched(tmpdir, scheme): url = scheme + '://httpbin.org/bytes/1024' # Record arbitrary, random data to the cassette with vcr.use_cassette(str(tmpdir.join('session_created_outside.yaml'))): session = requests.session() body = session.get(url).content # Create a session outside of any cassette context manager session = requests.session() # Make a request to make sure that a connectionpool is instantiated session.get(scheme + '://httpbin.org/get') with vcr.use_cassette(str(tmpdir.join('session_created_outside.yaml'))): # These should only be the same if the patching succeeded. assert session.get(url).content == body def test_nested_cassettes_with_session_created_before_nesting(scheme, tmpdir): ''' This tests ensures that a session that was created while one cassette was active is patched to the use the responses of a second cassette when it is enabled. ''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('first_nested.yaml'))): session = requests.session() first_body = session.get(url).content with vcr.use_cassette(str(tmpdir.join('second_nested.yaml'))): second_body = session.get(url).content third_body = requests.get(url).content with vcr.use_cassette(str(tmpdir.join('second_nested.yaml'))): session = requests.session() assert session.get(url).content == second_body with vcr.use_cassette(str(tmpdir.join('first_nested.yaml'))): assert session.get(url).content == first_body assert session.get(url).content == third_body # Make sure that the session can now get content normally. session.get('http://www.reddit.com') def test_post_file(tmpdir, scheme): '''Ensure that we handle posting a file.''' url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('post_file.yaml'))) as cass: # Don't use 2.7+ only style ',' separated with here because we support python 2.6 with open('tox.ini') as f: original_response = requests.post(url, f).content # This also tests that we do the right thing with matching the body when they are files. with vcr.use_cassette(str(tmpdir.join('post_file.yaml')), match_on=('method', 'scheme', 'host', 'port', 'path', 'query', 'body')) as cass: with open('tox.ini', 'rb') as f: tox_content = f.read() assert cass.requests[0].body.read() == tox_content with open('tox.ini', 'rb') as f: new_response = requests.post(url, f).content assert original_response == new_response def test_filter_post_params(tmpdir, scheme): ''' This tests the issue in https://github.com/kevin1024/vcrpy/issues/158 Ensure that a post request made through requests can still be filtered. with vcr.use_cassette(cass_file, filter_post_data_parameters=['id']) as cass: assert b'id=secret' not in cass.requests[0].body ''' url = scheme + '://httpbin.org/post' cass_loc = str(tmpdir.join('filter_post_params.yaml')) with vcr.use_cassette(cass_loc, filter_post_data_parameters=['key']) as cass: requests.post(url, data={'key': 'value'}) with vcr.use_cassette(cass_loc, filter_post_data_parameters=['key']) as cass: assert b'key=value' not in cass.requests[0].body vcrpy-1.7.3/tests/integration/test_stubs.py000066400000000000000000000031031256646735100211370ustar00rootroot00000000000000import vcr import six.moves.http_client as httplib def _headers_are_case_insensitive(): conn = httplib.HTTPConnection('httpbin.org') conn.request('GET', "/cookies/set?k1=v1") r1 = conn.getresponse() cookie_data1 = r1.getheader('set-cookie') conn = httplib.HTTPConnection('httpbin.org') conn.request('GET', "/cookies/set?k1=v1") r2 = conn.getresponse() cookie_data2 = r2.getheader('Set-Cookie') return cookie_data1 == cookie_data2 def test_case_insensitivity(tmpdir): testfile = str(tmpdir.join('case_insensitivity.yml')) # check if headers are case insensitive outside of vcrpy outside = _headers_are_case_insensitive() with vcr.use_cassette(testfile): # check if headers are case insensitive inside of vcrpy inside = _headers_are_case_insensitive() # check if headers are case insensitive after vcrpy deserializes headers inside2 = _headers_are_case_insensitive() # behavior should be the same both inside and outside assert outside == inside == inside2 def _multiple_header_value(httpserver): conn = httplib.HTTPConnection('%s:%s' % httpserver.server_address) conn.request('GET', "/") r = conn.getresponse() return r.getheader('foo') def test_multiple_headers(tmpdir, httpserver): testfile = str(tmpdir.join('multiple_headers.yaml')) httpserver.serve_content('Hello!', headers=[('foo', 'bar'), ('foo', 'baz')]) outside = _multiple_header_value(httpserver) with vcr.use_cassette(testfile): inside = _multiple_header_value(httpserver) assert outside == inside vcrpy-1.7.3/tests/integration/test_tornado.py000066400000000000000000000276671256646735100214720ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Test requests' interaction with vcr''' import json import pytest import vcr from vcr.errors import CannotOverwriteExistingCassetteException from assertions import assert_cassette_empty, assert_is_json http = pytest.importorskip("tornado.httpclient") @pytest.fixture(params=['simple', 'curl', 'default']) def get_client(request): if request.param == 'simple': from tornado import simple_httpclient as simple return (lambda: simple.SimpleAsyncHTTPClient()) elif request.param == 'curl': curl = pytest.importorskip("tornado.curl_httpclient") return (lambda: curl.CurlAsyncHTTPClient()) else: return (lambda: http.AsyncHTTPClient()) def get(client, url, **kwargs): raise_error = kwargs.pop('raise_error', True) return client.fetch( http.HTTPRequest(url, method='GET', **kwargs), raise_error=raise_error, ) def post(client, url, data=None, **kwargs): if data: kwargs['body'] = json.dumps(data) return client.fetch(http.HTTPRequest(url, method='POST', **kwargs)) @pytest.fixture(params=["https", "http"]) def scheme(request): '''Fixture that returns both http and https.''' return request.param @pytest.mark.gen_test def test_status_code(get_client, scheme, tmpdir): '''Ensure that we can read the status code''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('atts.yaml'))): status_code = (yield get(get_client(), url)).code with vcr.use_cassette(str(tmpdir.join('atts.yaml'))) as cass: assert status_code == (yield get(get_client(), url)).code assert 1 == cass.play_count @pytest.mark.gen_test def test_headers(get_client, scheme, tmpdir): '''Ensure that we can read the headers back''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): headers = (yield get(get_client(), url)).headers with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: assert headers == (yield get(get_client(), url)).headers assert 1 == cass.play_count @pytest.mark.gen_test def test_body(get_client, tmpdir, scheme): '''Ensure the responses are all identical enough''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('body.yaml'))): content = (yield get(get_client(), url)).body with vcr.use_cassette(str(tmpdir.join('body.yaml'))) as cass: assert content == (yield get(get_client(), url)).body assert 1 == cass.play_count @pytest.mark.gen_test def test_effective_url(get_client, scheme, tmpdir): '''Ensure that the effective_url is captured''' url = scheme + '://httpbin.org/redirect-to?url=/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))): effective_url = (yield get(get_client(), url)).effective_url assert effective_url == scheme + '://httpbin.org/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))) as cass: assert effective_url == (yield get(get_client(), url)).effective_url assert 1 == cass.play_count @pytest.mark.gen_test def test_auth(get_client, tmpdir, scheme): '''Ensure that we can handle basic auth''' auth = ('user', 'passwd') url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth.yaml'))): one = yield get( get_client(), url, auth_username=auth[0], auth_password=auth[1] ) with vcr.use_cassette(str(tmpdir.join('auth.yaml'))) as cass: two = yield get( get_client(), url, auth_username=auth[0], auth_password=auth[1] ) assert one.body == two.body assert one.code == two.code assert 1 == cass.play_count @pytest.mark.gen_test def test_auth_failed(get_client, tmpdir, scheme): '''Ensure that we can save failed auth statuses''' auth = ('user', 'wrongwrongwrong') url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth-failed.yaml'))) as cass: # Ensure that this is empty to begin with assert_cassette_empty(cass) one = yield get( get_client(), url, auth_username=auth[0], auth_password=auth[1], raise_error=False ) with vcr.use_cassette(str(tmpdir.join('auth-failed.yaml'))) as cass: two = yield get( get_client(), url, auth_username=auth[0], auth_password=auth[1], raise_error=False ) assert one.body == two.body assert one.code == two.code == 401 assert 1 == cass.play_count @pytest.mark.gen_test def test_post(get_client, tmpdir, scheme): '''Ensure that we can post and cache the results''' data = {'key1': 'value1', 'key2': 'value2'} url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('requests.yaml'))): req1 = (yield post(get_client(), url, data)).body with vcr.use_cassette(str(tmpdir.join('requests.yaml'))) as cass: req2 = (yield post(get_client(), url, data)).body assert req1 == req2 assert 1 == cass.play_count @pytest.mark.gen_test def test_redirects(get_client, tmpdir, scheme): '''Ensure that we can handle redirects''' url = scheme + '://httpbin.org/redirect-to?url=bytes/1024' with vcr.use_cassette(str(tmpdir.join('requests.yaml'))): content = (yield get(get_client(), url)).body with vcr.use_cassette(str(tmpdir.join('requests.yaml'))) as cass: assert content == (yield get(get_client(), url)).body assert cass.play_count == 1 @pytest.mark.gen_test def test_cross_scheme(get_client, tmpdir, scheme): '''Ensure that requests between schemes are treated separately''' # First fetch a url under http, and then again under https and then # ensure that we haven't served anything out of cache, and we have two # requests / response pairs in the cassette with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: yield get(get_client(), 'https://httpbin.org/') yield get(get_client(), 'http://httpbin.org/') assert cass.play_count == 0 assert len(cass) == 2 # Then repeat the same requests and ensure both were replayed. with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: yield get(get_client(), 'https://httpbin.org/') yield get(get_client(), 'http://httpbin.org/') assert cass.play_count == 2 @pytest.mark.gen_test def test_gzip(get_client, tmpdir, scheme): ''' Ensure that httpclient is able to automatically decompress the response body ''' url = scheme + '://httpbin.org/gzip' with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))): response = yield get(get_client(), url, decompress_response=True) assert_is_json(response.body) with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))) as cass: response = yield get(get_client(), url, decompress_response=True) assert_is_json(response.body) assert 1 == cass.play_count @pytest.mark.gen_test def test_https_with_cert_validation_disabled(get_client, tmpdir): cass_path = str(tmpdir.join('cert_validation_disabled.yaml')) with vcr.use_cassette(cass_path): yield get(get_client(), 'https://httpbin.org', validate_cert=False) with vcr.use_cassette(cass_path) as cass: yield get(get_client(), 'https://httpbin.org', validate_cert=False) assert 1 == cass.play_count @pytest.mark.gen_test def test_unsupported_features_raises_in_future(get_client, tmpdir): '''Ensure that the exception for an AsyncHTTPClient feature not being supported is raised inside the future.''' def callback(chunk): assert False, "Did not expect to be called." with vcr.use_cassette(str(tmpdir.join('invalid.yaml'))): future = get( get_client(), 'http://httpbin.org', streaming_callback=callback ) with pytest.raises(Exception) as excinfo: yield future assert "not yet supported by VCR" in str(excinfo) @pytest.mark.gen_test def test_unsupported_features_raise_error_disabled(get_client, tmpdir): '''Ensure that the exception for an AsyncHTTPClient feature not being supported is not raised if raise_error=False.''' def callback(chunk): assert False, "Did not expect to be called." with vcr.use_cassette(str(tmpdir.join('invalid.yaml'))): response = yield get( get_client(), 'http://httpbin.org', streaming_callback=callback, raise_error=False, ) assert "not yet supported by VCR" in str(response.error) @pytest.mark.gen_test def test_cannot_overwrite_cassette_raises_in_future(get_client, tmpdir): '''Ensure that CannotOverwriteExistingCassetteException is raised inside the future.''' with vcr.use_cassette(str(tmpdir.join('overwrite.yaml'))): yield get(get_client(), 'http://httpbin.org/get') with vcr.use_cassette(str(tmpdir.join('overwrite.yaml'))): future = get(get_client(), 'http://httpbin.org/headers') with pytest.raises(CannotOverwriteExistingCassetteException): yield future @pytest.mark.gen_test def test_cannot_overwrite_cassette_raise_error_disabled(get_client, tmpdir): '''Ensure that CannotOverwriteExistingCassetteException is not raised if raise_error=False in the fetch() call.''' with vcr.use_cassette(str(tmpdir.join('overwrite.yaml'))): yield get( get_client(), 'http://httpbin.org/get', raise_error=False ) with vcr.use_cassette(str(tmpdir.join('overwrite.yaml'))): response = yield get( get_client(), 'http://httpbin.org/headers', raise_error=False ) assert isinstance(response.error, CannotOverwriteExistingCassetteException) @pytest.mark.gen_test @vcr.use_cassette(path_transformer=vcr.default_vcr.ensure_suffix('.yaml')) def test_tornado_with_decorator_use_cassette(get_client): response = yield get_client().fetch( http.HTTPRequest('http://www.google.com/', method='GET') ) assert response.body.decode('utf-8') == "not actually google" @pytest.mark.gen_test @vcr.use_cassette(path_transformer=vcr.default_vcr.ensure_suffix('.yaml')) def test_tornado_exception_can_be_caught(get_client): try: yield get(get_client(), 'http://httpbin.org/status/500') except http.HTTPError as e: assert e.code == 500 try: yield get(get_client(), 'http://httpbin.org/status/404') except http.HTTPError as e: assert e.code == 404 @pytest.mark.gen_test def test_existing_references_get_patched(tmpdir): from tornado.httpclient import AsyncHTTPClient with vcr.use_cassette(str(tmpdir.join('data.yaml'))): client = AsyncHTTPClient() yield get(client, 'http://httpbin.org/get') with vcr.use_cassette(str(tmpdir.join('data.yaml'))) as cass: yield get(client, 'http://httpbin.org/get') assert cass.play_count == 1 @pytest.mark.gen_test def test_existing_instances_get_patched(get_client, tmpdir): '''Ensure that existing instances of AsyncHTTPClient get patched upon entering VCR context.''' client = get_client() with vcr.use_cassette(str(tmpdir.join('data.yaml'))): yield get(client, 'http://httpbin.org/get') with vcr.use_cassette(str(tmpdir.join('data.yaml'))) as cass: yield get(client, 'http://httpbin.org/get') assert cass.play_count == 1 @pytest.mark.gen_test def test_request_time_is_set(get_client, tmpdir): '''Ensures that the request_time on HTTPResponses is set.''' with vcr.use_cassette(str(tmpdir.join('data.yaml'))): client = get_client() response = yield get(client, 'http://httpbin.org/get') assert response.request_time is not None with vcr.use_cassette(str(tmpdir.join('data.yaml'))) as cass: client = get_client() response = yield get(client, 'http://httpbin.org/get') assert response.request_time is not None assert cass.play_count == 1 vcrpy-1.7.3/tests/integration/test_tornado_exception_can_be_caught.yaml000066400000000000000000000025531256646735100266670ustar00rootroot00000000000000interactions: - request: body: null headers: {} method: GET uri: http://httpbin.org/status/500 response: body: {string: !!python/unicode ''} headers: - !!python/tuple - Content-Length - ['0'] - !!python/tuple - Server - [nginx] - !!python/tuple - Connection - [close] - !!python/tuple - Access-Control-Allow-Credentials - ['true'] - !!python/tuple - Date - ['Thu, 30 Jul 2015 17:32:39 GMT'] - !!python/tuple - Access-Control-Allow-Origin - ['*'] - !!python/tuple - Content-Type - [text/html; charset=utf-8] status: {code: 500, message: INTERNAL SERVER ERROR} - request: body: null headers: {} method: GET uri: http://httpbin.org/status/404 response: body: {string: !!python/unicode ''} headers: - !!python/tuple - Content-Length - ['0'] - !!python/tuple - Server - [nginx] - !!python/tuple - Connection - [close] - !!python/tuple - Access-Control-Allow-Credentials - ['true'] - !!python/tuple - Date - ['Thu, 30 Jul 2015 17:32:39 GMT'] - !!python/tuple - Access-Control-Allow-Origin - ['*'] - !!python/tuple - Content-Type - [text/html; charset=utf-8] status: {code: 404, message: NOT FOUND} version: 1 vcrpy-1.7.3/tests/integration/test_tornado_with_decorator_use_cassette.yaml000066400000000000000000000030361256646735100276300ustar00rootroot00000000000000interactions: - request: body: null headers: {} method: GET uri: http://www.google.com/ response: body: {string: !!python/unicode 'not actually google'} headers: - !!python/tuple - Expires - ['-1'] - !!python/tuple - Connection - [close] - !!python/tuple - P3p - ['CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."'] - !!python/tuple - Alternate-Protocol - ['80:quic,p=0'] - !!python/tuple - Accept-Ranges - [none] - !!python/tuple - X-Xss-Protection - [1; mode=block] - !!python/tuple - Vary - [Accept-Encoding] - !!python/tuple - Date - ['Thu, 30 Jul 2015 08:41:40 GMT'] - !!python/tuple - Cache-Control - ['private, max-age=0'] - !!python/tuple - Content-Type - [text/html; charset=ISO-8859-1] - !!python/tuple - Set-Cookie - ['PREF=ID=1111111111111111:FF=0:TM=1438245700:LM=1438245700:V=1:S=GAzVO0ALebSpC_cJ; expires=Sat, 29-Jul-2017 08:41:40 GMT; path=/; domain=.google.com', 'NID=69=Br7oRAwgmKoK__HC6FEnuxglTFDmFxqP6Md63lKhzW1w6WkDbp3U90CDxnUKvDP6wJH8yxY5Lk5ZnFf66Q1B0d4OsYoKgq0vjfBAYXuCIAWtOuGZEOsFXanXs7pt2Mjx; expires=Fri, 29-Jan-2016 08:41:40 GMT; path=/; domain=.google.com; HttpOnly'] - !!python/tuple - X-Frame-Options - [SAMEORIGIN] - !!python/tuple - Server - [gws] status: {code: 200, message: OK} version: 1 vcrpy-1.7.3/tests/integration/test_urllib2.py000066400000000000000000000111571256646735100213620ustar00rootroot00000000000000# -*- coding: utf-8 -*- '''Integration tests with urllib2''' import pytest from six.moves.urllib.request import urlopen from six.moves.urllib_parse import urlencode # Internal imports import vcr from assertions import assert_cassette_has_one_response @pytest.fixture(params=["https", "http"]) def scheme(request): """ Fixture that returns both http and https """ return request.param def test_response_code(scheme, tmpdir): '''Ensure we can read a response code from a fetch''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('atts.yaml'))) as cass: code = urlopen(url).getcode() with vcr.use_cassette(str(tmpdir.join('atts.yaml'))) as cass: assert code == urlopen(url).getcode() def test_random_body(scheme, tmpdir): '''Ensure we can read the content, and that it's served from cache''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('body.yaml'))) as cass: body = urlopen(url).read() with vcr.use_cassette(str(tmpdir.join('body.yaml'))) as cass: assert body == urlopen(url).read() def test_response_headers(scheme, tmpdir): '''Ensure we can get information from the response''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: open1 = urlopen(url).info().items() with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: open2 = urlopen(url).info().items() assert sorted(open1) == sorted(open2) def test_effective_url(scheme, tmpdir): '''Ensure that the effective_url is captured''' url = scheme + '://httpbin.org/redirect-to?url=/html' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: effective_url = urlopen(url).geturl() assert effective_url == scheme + '://httpbin.org/html' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: assert effective_url == urlopen(url).geturl() def test_multiple_requests(scheme, tmpdir): '''Ensure that we can cache multiple requests''' urls = [ scheme + '://httpbin.org/', scheme + '://httpbin.org/', scheme + '://httpbin.org/get', scheme + '://httpbin.org/bytes/1024' ] with vcr.use_cassette(str(tmpdir.join('multiple.yaml'))) as cass: [urlopen(url) for url in urls] assert len(cass) == len(urls) def test_get_data(scheme, tmpdir): '''Ensure that it works with query data''' data = urlencode({'some': 1, 'data': 'here'}) url = scheme + '://httpbin.org/get?' + data with vcr.use_cassette(str(tmpdir.join('get_data.yaml'))) as cass: res1 = urlopen(url).read() with vcr.use_cassette(str(tmpdir.join('get_data.yaml'))) as cass: res2 = urlopen(url).read() assert res1 == res2 def test_post_data(scheme, tmpdir): '''Ensure that it works when posting data''' data = urlencode({'some': 1, 'data': 'here'}).encode('utf-8') url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: res1 = urlopen(url, data).read() with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: res2 = urlopen(url, data).read() assert res1 == res2 assert_cassette_has_one_response(cass) def test_post_unicode_data(scheme, tmpdir): '''Ensure that it works when posting unicode data''' data = urlencode({'snowman': u'☃'.encode('utf-8')}).encode('utf-8') url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: res1 = urlopen(url, data).read() with vcr.use_cassette(str(tmpdir.join('post_data.yaml'))) as cass: res2 = urlopen(url, data).read() assert res1 == res2 assert_cassette_has_one_response(cass) def test_cross_scheme(tmpdir): '''Ensure that requests between schemes are treated separately''' # First fetch a url under https, and then again under https and then # ensure that we haven't served anything out of cache, and we have two # requests / response pairs in the cassette with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: urlopen('https://httpbin.org/') urlopen('http://httpbin.org/') assert len(cass) == 2 assert cass.play_count == 0 def test_decorator(scheme, tmpdir): '''Test the decorator version of VCR.py''' url = scheme + '://httpbin.org/' @vcr.use_cassette(str(tmpdir.join('atts.yaml'))) def inner1(): return urlopen(url).getcode() @vcr.use_cassette(str(tmpdir.join('atts.yaml'))) def inner2(): return urlopen(url).getcode() assert inner1() == inner2() vcrpy-1.7.3/tests/integration/test_urllib3.py000066400000000000000000000125571256646735100213700ustar00rootroot00000000000000'''Integration tests with urllib3''' # coding=utf-8 import pytest import vcr from assertions import assert_cassette_empty, assert_is_json certifi = pytest.importorskip("certifi") urllib3 = pytest.importorskip("urllib3") @pytest.fixture(params=["https", "http"]) def scheme(request): """ Fixture that returns both http and https """ return request.param @pytest.fixture(scope='module') def verify_pool_mgr(): return urllib3.PoolManager( cert_reqs='CERT_REQUIRED', # Force certificate check. ca_certs=certifi.where() ) @pytest.fixture(scope='module') def pool_mgr(): return urllib3.PoolManager() def test_status_code(scheme, tmpdir, verify_pool_mgr): '''Ensure that we can read the status code''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('atts.yaml'))): status_code = verify_pool_mgr.request('GET', url).status with vcr.use_cassette(str(tmpdir.join('atts.yaml'))): assert status_code == verify_pool_mgr.request('GET', url).status def test_headers(scheme, tmpdir, verify_pool_mgr): '''Ensure that we can read the headers back''' url = scheme + '://httpbin.org/' with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): headers = verify_pool_mgr.request('GET', url).headers with vcr.use_cassette(str(tmpdir.join('headers.yaml'))): assert headers == verify_pool_mgr.request('GET', url).headers def test_body(tmpdir, scheme, verify_pool_mgr): '''Ensure the responses are all identical enough''' url = scheme + '://httpbin.org/bytes/1024' with vcr.use_cassette(str(tmpdir.join('body.yaml'))): content = verify_pool_mgr.request('GET', url).data with vcr.use_cassette(str(tmpdir.join('body.yaml'))): assert content == verify_pool_mgr.request('GET', url).data def test_auth(tmpdir, scheme, verify_pool_mgr): '''Ensure that we can handle basic auth''' auth = ('user', 'passwd') headers = urllib3.util.make_headers(basic_auth='{0}:{1}'.format(*auth)) url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth.yaml'))): one = verify_pool_mgr.request('GET', url, headers=headers) with vcr.use_cassette(str(tmpdir.join('auth.yaml'))): two = verify_pool_mgr.request('GET', url, headers=headers) assert one.data == two.data assert one.status == two.status def test_auth_failed(tmpdir, scheme, verify_pool_mgr): '''Ensure that we can save failed auth statuses''' auth = ('user', 'wrongwrongwrong') headers = urllib3.util.make_headers(basic_auth='{0}:{1}'.format(*auth)) url = scheme + '://httpbin.org/basic-auth/user/passwd' with vcr.use_cassette(str(tmpdir.join('auth-failed.yaml'))) as cass: # Ensure that this is empty to begin with assert_cassette_empty(cass) one = verify_pool_mgr.request('GET', url, headers=headers) two = verify_pool_mgr.request('GET', url, headers=headers) assert one.data == two.data assert one.status == two.status == 401 def test_post(tmpdir, scheme, verify_pool_mgr): '''Ensure that we can post and cache the results''' data = {'key1': 'value1', 'key2': 'value2'} url = scheme + '://httpbin.org/post' with vcr.use_cassette(str(tmpdir.join('verify_pool_mgr.yaml'))): req1 = verify_pool_mgr.request('POST', url, data).data with vcr.use_cassette(str(tmpdir.join('verify_pool_mgr.yaml'))): req2 = verify_pool_mgr.request('POST', url, data).data assert req1 == req2 def test_redirects(tmpdir, scheme, verify_pool_mgr): '''Ensure that we can handle redirects''' url = scheme + '://httpbin.org/redirect-to?url=bytes/1024' with vcr.use_cassette(str(tmpdir.join('verify_pool_mgr.yaml'))): content = verify_pool_mgr.request('GET', url).data with vcr.use_cassette(str(tmpdir.join('verify_pool_mgr.yaml'))) as cass: assert content == verify_pool_mgr.request('GET', url).data # Ensure that we've now cached *two* responses. One for the redirect # and one for the final fetch assert len(cass) == 2 assert cass.play_count == 2 def test_cross_scheme(tmpdir, scheme, verify_pool_mgr): '''Ensure that requests between schemes are treated separately''' # First fetch a url under http, and then again under https and then # ensure that we haven't served anything out of cache, and we have two # requests / response pairs in the cassette with vcr.use_cassette(str(tmpdir.join('cross_scheme.yaml'))) as cass: verify_pool_mgr.request('GET', 'https://httpbin.org/') verify_pool_mgr.request('GET', 'http://httpbin.org/') assert cass.play_count == 0 assert len(cass) == 2 def test_gzip(tmpdir, scheme, verify_pool_mgr): ''' Ensure that requests (actually urllib3) is able to automatically decompress the response body ''' url = scheme + '://httpbin.org/gzip' response = verify_pool_mgr.request('GET', url) with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))): response = verify_pool_mgr.request('GET', url) assert_is_json(response.data) with vcr.use_cassette(str(tmpdir.join('gzip.yaml'))): assert_is_json(response.data) def test_https_with_cert_validation_disabled(tmpdir, pool_mgr): with vcr.use_cassette(str(tmpdir.join('cert_validation_disabled.yaml'))): pool_mgr.request('GET', 'https://httpbin.org') vcrpy-1.7.3/tests/integration/test_wild.py000066400000000000000000000056341256646735100207510ustar00rootroot00000000000000import pytest from six.moves import xmlrpc_client requests = pytest.importorskip("requests") import vcr try: import httplib except ImportError: import http.client as httplib def test_domain_redirect(): '''Ensure that redirects across domains are considered unique''' # In this example, seomoz.org redirects to moz.com, and if those # requests are considered identical, then we'll be stuck in a redirect # loop. url = 'http://seomoz.org/' with vcr.use_cassette('tests/fixtures/wild/domain_redirect.yaml') as cass: requests.get(url, headers={'User-Agent': 'vcrpy-test'}) # Ensure that we've now served two responses. One for the original # redirect, and a second for the actual fetch assert len(cass) == 2 def test_flickr_multipart_upload(): """ The python-flickr-api project does a multipart upload that confuses vcrpy """ def _pretend_to_be_flickr_library(): content_type, body = "text/plain", "HELLO WORLD" h = httplib.HTTPConnection("httpbin.org") headers = { "Content-Type": content_type, "content-length": str(len(body)) } h.request("POST", "/post/", headers=headers) h.send(body) r = h.getresponse() data = r.read() h.close() with vcr.use_cassette('fixtures/vcr_cassettes/flickr.yaml') as cass: _pretend_to_be_flickr_library() assert len(cass) == 1 with vcr.use_cassette('fixtures/vcr_cassettes/flickr.yaml') as cass: assert len(cass) == 1 _pretend_to_be_flickr_library() assert cass.play_count == 1 def test_flickr_should_respond_with_200(tmpdir): testfile = str(tmpdir.join('flickr.yml')) with vcr.use_cassette(testfile): r = requests.post("http://api.flickr.com/services/upload") assert r.status_code == 200 def test_cookies(tmpdir): testfile = str(tmpdir.join('cookies.yml')) with vcr.use_cassette(testfile): s = requests.Session() r1 = s.get("http://httpbin.org/cookies/set?k1=v1&k2=v2") r2 = s.get("http://httpbin.org/cookies") assert len(r2.json()['cookies']) == 2 def test_amazon_doctype(tmpdir): # amazon gzips its homepage. For some reason, in requests 2.7, it's not # getting gunzipped. with vcr.use_cassette(str(tmpdir.join('amz.yml'))): r = requests.get('http://www.amazon.com') assert 'html' in r.text def test_xmlrpclib(tmpdir): with vcr.use_cassette(str(tmpdir.join('xmlrpcvideo.yaml'))): roundup_server = xmlrpc_client.ServerProxy('http://bugs.python.org/xmlrpc', allow_none=True) original_schema = roundup_server.schema() with vcr.use_cassette(str(tmpdir.join('xmlrpcvideo.yaml'))) as cassette: roundup_server = xmlrpc_client.ServerProxy('http://bugs.python.org/xmlrpc', allow_none=True) second_schema = roundup_server.schema() assert original_schema == second_schema vcrpy-1.7.3/tests/unit/000077500000000000000000000000001256646735100150255ustar00rootroot00000000000000vcrpy-1.7.3/tests/unit/test_cassettes.py000066400000000000000000000232311256646735100204350ustar00rootroot00000000000000import copy import inspect import os from six.moves import http_client as httplib import pytest import yaml from vcr.compat import mock, contextlib from vcr.cassette import Cassette from vcr.errors import UnhandledHTTPRequestError from vcr.patch import force_reset from vcr.stubs import VCRHTTPSConnection def test_cassette_load(tmpdir): a_file = tmpdir.join('test_cassette.yml') a_file.write(yaml.dump({'interactions': [ {'request': {'body': '', 'uri': 'foo', 'method': 'GET', 'headers': {}}, 'response': 'bar'} ]})) a_cassette = Cassette.load(path=str(a_file)) assert len(a_cassette) == 1 def test_cassette_not_played(): a = Cassette('test') assert not a.play_count def test_cassette_append(): a = Cassette('test') a.append('foo', 'bar') assert a.requests == ['foo'] assert a.responses == ['bar'] def test_cassette_len(): a = Cassette('test') a.append('foo', 'bar') a.append('foo2', 'bar2') assert len(a) == 2 def _mock_requests_match(request1, request2, matchers): return request1 == request2 @mock.patch('vcr.cassette.requests_match', _mock_requests_match) def test_cassette_contains(): a = Cassette('test') a.append('foo', 'bar') assert 'foo' in a @mock.patch('vcr.cassette.requests_match', _mock_requests_match) def test_cassette_responses_of(): a = Cassette('test') a.append('foo', 'bar') assert a.responses_of('foo') == ['bar'] @mock.patch('vcr.cassette.requests_match', _mock_requests_match) def test_cassette_get_missing_response(): a = Cassette('test') with pytest.raises(UnhandledHTTPRequestError): a.responses_of('foo') @mock.patch('vcr.cassette.requests_match', _mock_requests_match) def test_cassette_cant_read_same_request_twice(): a = Cassette('test') a.append('foo', 'bar') a.play_response('foo') with pytest.raises(UnhandledHTTPRequestError): a.play_response('foo') def make_get_request(): conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") return conn.getresponse() @mock.patch('vcr.cassette.requests_match', return_value=True) @mock.patch('vcr.cassette.load_cassette', lambda *args, **kwargs: (('foo',), (mock.MagicMock(),))) @mock.patch('vcr.cassette.Cassette.can_play_response_for', return_value=True) @mock.patch('vcr.stubs.VCRHTTPResponse') def test_function_decorated_with_use_cassette_can_be_invoked_multiple_times(*args): decorated_function = Cassette.use(path='test')(make_get_request) for i in range(4): decorated_function() def test_arg_getter_functionality(): arg_getter = mock.Mock(return_value={'path': 'test'}) context_decorator = Cassette.use_arg_getter(arg_getter) with context_decorator as cassette: assert cassette._path == 'test' arg_getter.return_value = {'path': 'other'} with context_decorator as cassette: assert cassette._path == 'other' arg_getter.return_value = {'path': 'other', 'filter_headers': ('header_name',)} @context_decorator def function(): pass with mock.patch.object( Cassette, 'load', return_value=mock.MagicMock(inject=False) ) as cassette_load: function() cassette_load.assert_called_once_with(**arg_getter.return_value) def test_cassette_not_all_played(): a = Cassette('test') a.append('foo', 'bar') assert not a.all_played @mock.patch('vcr.cassette.requests_match', _mock_requests_match) def test_cassette_all_played(): a = Cassette('test') a.append('foo', 'bar') a.play_response('foo') assert a.all_played def test_before_record_response(): before_record_response = mock.Mock(return_value='mutated') cassette = Cassette('test', before_record_response=before_record_response) cassette.append('req', 'res') before_record_response.assert_called_once_with('res') assert cassette.responses[0] == 'mutated' def assert_get_response_body_is(value): conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") assert conn.getresponse().read().decode('utf8') == value @mock.patch('vcr.cassette.requests_match', _mock_requests_match) @mock.patch('vcr.cassette.Cassette.can_play_response_for', return_value=True) @mock.patch('vcr.cassette.Cassette._save', return_value=True) def test_nesting_cassette_context_managers(*args): first_response = {'body': {'string': b'first_response'}, 'headers': {}, 'status': {'message': 'm', 'code': 200}} second_response = copy.deepcopy(first_response) second_response['body']['string'] = b'second_response' with contextlib.ExitStack() as exit_stack: first_cassette = exit_stack.enter_context(Cassette.use(path='test')) exit_stack.enter_context(mock.patch.object(first_cassette, 'play_response', return_value=first_response)) assert_get_response_body_is('first_response') # Make sure a second cassette can supercede the first with Cassette.use(path='test') as second_cassette: with mock.patch.object(second_cassette, 'play_response', return_value=second_response): assert_get_response_body_is('second_response') # Now the first cassette should be back in effect assert_get_response_body_is('first_response') def test_nesting_context_managers_by_checking_references_of_http_connection(): original = httplib.HTTPConnection with Cassette.use(path='test'): first_cassette_HTTPConnection = httplib.HTTPConnection with Cassette.use(path='test'): second_cassette_HTTPConnection = httplib.HTTPConnection assert second_cassette_HTTPConnection is not first_cassette_HTTPConnection with Cassette.use(path='test'): assert httplib.HTTPConnection is not second_cassette_HTTPConnection with force_reset(): assert httplib.HTTPConnection is original assert httplib.HTTPConnection is second_cassette_HTTPConnection assert httplib.HTTPConnection is first_cassette_HTTPConnection def test_custom_patchers(): class Test(object): attribute = None with Cassette.use(path='custom_patches', custom_patches=((Test, 'attribute', VCRHTTPSConnection),)): assert issubclass(Test.attribute, VCRHTTPSConnection) assert VCRHTTPSConnection is not Test.attribute old_attribute = Test.attribute with Cassette.use(path='custom_patches', custom_patches=((Test, 'attribute', VCRHTTPSConnection),)): assert issubclass(Test.attribute, VCRHTTPSConnection) assert VCRHTTPSConnection is not Test.attribute assert Test.attribute is not old_attribute assert issubclass(Test.attribute, VCRHTTPSConnection) assert VCRHTTPSConnection is not Test.attribute assert Test.attribute is old_attribute def test_decorated_functions_are_reentrant(): info = {"second": False} original_conn = httplib.HTTPConnection @Cassette.use(path='whatever', inject=True) def test_function(cassette): if info['second']: assert httplib.HTTPConnection is not info['first_conn'] else: info['first_conn'] = httplib.HTTPConnection info['second'] = True test_function() assert httplib.HTTPConnection is info['first_conn'] test_function() assert httplib.HTTPConnection is original_conn def test_cassette_use_called_without_path_uses_function_to_generate_path(): @Cassette.use(inject=True) def function_name(cassette): assert cassette._path == 'function_name' function_name() def test_path_transformer_with_function_path(): path_transformer = lambda path: os.path.join('a', path) @Cassette.use(inject=True, path_transformer=path_transformer) def function_name(cassette): assert cassette._path == os.path.join('a', 'function_name') function_name() def test_path_transformer_with_context_manager(): with Cassette.use( path='b', path_transformer=lambda *args: 'a' ) as cassette: assert cassette._path == 'a' def test_func_path_generator(): def generator(function): return os.path.join(os.path.dirname(inspect.getfile(function)), function.__name__) @Cassette.use(inject=True, func_path_generator=generator) def function_name(cassette): assert cassette._path == os.path.join(os.path.dirname(__file__), 'function_name') function_name() def test_use_as_decorator_on_coroutine(): original_http_connetion = httplib.HTTPConnection @Cassette.use(inject=True) def test_function(cassette): assert httplib.HTTPConnection.cassette is cassette assert httplib.HTTPConnection is not original_http_connetion value = yield 1 assert value == 1 assert httplib.HTTPConnection.cassette is cassette assert httplib.HTTPConnection is not original_http_connetion value = yield 2 assert value == 2 coroutine = test_function() value = next(coroutine) while True: try: value = coroutine.send(value) except StopIteration: break def test_use_as_decorator_on_generator(): original_http_connetion = httplib.HTTPConnection @Cassette.use(inject=True) def test_function(cassette): assert httplib.HTTPConnection.cassette is cassette assert httplib.HTTPConnection is not original_http_connetion yield 1 assert httplib.HTTPConnection.cassette is cassette assert httplib.HTTPConnection is not original_http_connetion yield 2 assert list(test_function()) == [1, 2] vcrpy-1.7.3/tests/unit/test_filters.py000066400000000000000000000062161256646735100201130ustar00rootroot00000000000000from vcr.filters import ( remove_headers, remove_query_parameters, remove_post_data_parameters ) from vcr.request import Request import json def test_remove_headers(): headers = {'hello': ['goodbye'], 'secret': ['header']} request = Request('GET', 'http://google.com', '', headers) remove_headers(request, ['secret']) assert request.headers == {'hello': 'goodbye'} def test_remove_headers_empty(): headers = {'hello': 'goodbye', 'secret': 'header'} request = Request('GET', 'http://google.com', '', headers) remove_headers(request, []) assert request.headers == headers def test_remove_query_parameters(): uri = 'http://g.com/?q=cowboys&w=1' request = Request('GET', uri, '', {}) remove_query_parameters(request, ['w']) assert request.uri == 'http://g.com/?q=cowboys' def test_remove_all_query_parameters(): uri = 'http://g.com/?q=cowboys&w=1' request = Request('GET', uri, '', {}) remove_query_parameters(request, ['w', 'q']) assert request.uri == 'http://g.com/' def test_remove_nonexistent_query_parameters(): uri = 'http://g.com/' request = Request('GET', uri, '', {}) remove_query_parameters(request, ['w', 'q']) assert request.uri == 'http://g.com/' def test_remove_post_data_parameters(): body = b'id=secret&foo=bar' request = Request('POST', 'http://google.com', body, {}) remove_post_data_parameters(request, ['id']) assert request.body == b'foo=bar' def test_preserve_multiple_post_data_parameters(): body = b'id=secret&foo=bar&foo=baz' request = Request('POST', 'http://google.com', body, {}) remove_post_data_parameters(request, ['id']) assert request.body == b'foo=bar&foo=baz' def test_remove_all_post_data_parameters(): body = b'id=secret&foo=bar' request = Request('POST', 'http://google.com', body, {}) remove_post_data_parameters(request, ['id', 'foo']) assert request.body == b'' def test_remove_nonexistent_post_data_parameters(): body = b'' request = Request('POST', 'http://google.com', body, {}) remove_post_data_parameters(request, ['id']) assert request.body == b'' def test_remove_json_post_data_parameters(): body = b'{"id": "secret", "foo": "bar", "baz": "qux"}' request = Request('POST', 'http://google.com', body, {}) request.add_header('Content-Type', 'application/json') remove_post_data_parameters(request, ['id']) request_body_json = json.loads(request.body.decode('utf-8')) expected_json = json.loads(b'{"foo": "bar", "baz": "qux"}'.decode('utf-8')) assert request_body_json == expected_json def test_remove_all_json_post_data_parameters(): body = b'{"id": "secret", "foo": "bar"}' request = Request('POST', 'http://google.com', body, {}) request.add_header('Content-Type', 'application/json') remove_post_data_parameters(request, ['id', 'foo']) assert request.body == b'{}' def test_remove_nonexistent_json_post_data_parameters(): body = b'{}' request = Request('POST', 'http://google.com', body, {}) request.add_header('Content-Type', 'application/json') remove_post_data_parameters(request, ['id']) assert request.body == b'{}' vcrpy-1.7.3/tests/unit/test_json_serializer.py000066400000000000000000000011451256646735100216410ustar00rootroot00000000000000import pytest from vcr.serializers.jsonserializer import serialize from vcr.request import Request def test_serialize_binary(): request = Request( method='GET', uri='http://localhost/', body='', headers={}, ) cassette = {'requests': [request], 'responses': [{'body': b'\x8c'}]} with pytest.raises(Exception) as e: serialize(cassette) assert e.message == "Error serializing cassette to JSON. Does this \ HTTP interaction contain binary data? If so, use a different \ serializer (like the yaml serializer) for this request" vcrpy-1.7.3/tests/unit/test_matchers.py000066400000000000000000000127541256646735100202550ustar00rootroot00000000000000import itertools import pytest from vcr import matchers from vcr import request # the dict contains requests with corresponding to its key difference # with 'base' request. REQUESTS = { 'base': request.Request('GET', 'http://host.com/p?a=b', '', {}), 'method': request.Request('POST', 'http://host.com/p?a=b', '', {}), 'scheme': request.Request('GET', 'https://host.com:80/p?a=b', '', {}), 'host': request.Request('GET', 'http://another-host.com/p?a=b', '', {}), 'port': request.Request('GET', 'http://host.com:90/p?a=b', '', {}), 'path': request.Request('GET', 'http://host.com/x?a=b', '', {}), 'query': request.Request('GET', 'http://host.com/p?c=d', '', {}), } def assert_matcher(matcher_name): matcher = getattr(matchers, matcher_name) for k1, k2 in itertools.permutations(REQUESTS, 2): matched = matcher(REQUESTS[k1], REQUESTS[k2]) if matcher_name in set((k1, k2)): assert not matched else: assert matched def test_uri_matcher(): for k1, k2 in itertools.permutations(REQUESTS, 2): matched = matchers.uri(REQUESTS[k1], REQUESTS[k2]) if set((k1, k2)) != set(('base', 'method')): assert not matched else: assert matched req1_body = (b"test" b"" b"a1" b"b2" b"") req2_body = (b"test" b"" b"b2" b"a1" b"") @pytest.mark.parametrize("r1, r2", [ ( request.Request('POST', 'http://host.com/', '123', {}), request.Request('POST', 'http://another-host.com/', '123', {'Some-Header': 'value'}) ), ( request.Request('POST', 'http://host.com/', 'a=1&b=2', {'Content-Type': 'application/x-www-form-urlencoded'}), request.Request('POST', 'http://host.com/', 'b=2&a=1', {'Content-Type': 'application/x-www-form-urlencoded'}) ), ( request.Request('POST', 'http://host.com/', '123', {}), request.Request('POST', 'http://another-host.com/', '123', {'Some-Header': 'value'}) ), ( request.Request( 'POST', 'http://host.com/', 'a=1&b=2', {'Content-Type': 'application/x-www-form-urlencoded'} ), request.Request( 'POST', 'http://host.com/', 'b=2&a=1', {'Content-Type': 'application/x-www-form-urlencoded'} ) ), ( request.Request( 'POST', 'http://host.com/', '{"a": 1, "b": 2}', {'Content-Type': 'application/json'} ), request.Request( 'POST', 'http://host.com/', '{"b": 2, "a": 1}', {'content-type': 'application/json'} ) ), ( request.Request( 'POST', 'http://host.com/', req1_body, {'User-Agent': 'xmlrpclib', 'Content-Type': 'text/xml'} ), request.Request( 'POST', 'http://host.com/', req2_body, {'user-agent': 'somexmlrpc', 'content-type': 'text/xml'} ) ), ( request.Request( 'POST', 'http://host.com/', '{"a": 1, "b": 2}', {'Content-Type': 'application/json'} ), request.Request( 'POST', 'http://host.com/', '{"b": 2, "a": 1}', {'content-type': 'application/json'} ) ) ]) def test_body_matcher_does_match(r1, r2): assert matchers.body(r1, r2) @pytest.mark.parametrize("r1, r2", [ ( request.Request('POST', 'http://host.com/', '{"a": 1, "b": 2}', {}), request.Request('POST', 'http://host.com/', '{"b": 2, "a": 1}', {}), ), ( request.Request( 'POST', 'http://host.com/', '{"a": 1, "b": 3}', {'Content-Type': 'application/json'} ), request.Request( 'POST', 'http://host.com/', '{"b": 2, "a": 1}', {'content-type': 'application/json'} ) ), ( request.Request( 'POST', 'http://host.com/', req1_body, {'Content-Type': 'text/xml'} ), request.Request( 'POST', 'http://host.com/', req2_body, {'content-type': 'text/xml'} ) ) ]) def test_body_match_does_not_match(r1, r2): assert not matchers.body(r1, r2) def test_query_matcher(): req1 = request.Request('GET', 'http://host.com/?a=b&c=d', '', {}) req2 = request.Request('GET', 'http://host.com/?c=d&a=b', '', {}) assert matchers.query(req1, req2) req1 = request.Request('GET', 'http://host.com/?a=b&a=b&c=d', '', {}) req2 = request.Request('GET', 'http://host.com/?a=b&c=d&a=b', '', {}) req3 = request.Request('GET', 'http://host.com/?c=d&a=b&a=b', '', {}) assert matchers.query(req1, req2) assert matchers.query(req1, req3) def test_metchers(): assert_matcher('method') assert_matcher('scheme') assert_matcher('host') assert_matcher('port') assert_matcher('path') assert_matcher('query') vcrpy-1.7.3/tests/unit/test_migration.py000066400000000000000000000026201256646735100204270ustar00rootroot00000000000000import filecmp import json import shutil import yaml import vcr.migration def test_try_migrate_with_json(tmpdir): cassette = tmpdir.join('cassette.json').strpath shutil.copy('tests/fixtures/migration/old_cassette.json', cassette) assert vcr.migration.try_migrate(cassette) with open('tests/fixtures/migration/new_cassette.json', 'r') as f: expected_json = json.load(f) with open(cassette, 'r') as f: actual_json = json.load(f) assert actual_json == expected_json def test_try_migrate_with_yaml(tmpdir): cassette = tmpdir.join('cassette.yaml').strpath shutil.copy('tests/fixtures/migration/old_cassette.yaml', cassette) assert vcr.migration.try_migrate(cassette) with open('tests/fixtures/migration/new_cassette.yaml', 'r') as f: expected_yaml = yaml.load(f) with open(cassette, 'r') as f: actual_yaml = yaml.load(f) assert actual_yaml == expected_yaml def test_try_migrate_with_invalid_or_new_cassettes(tmpdir): cassette = tmpdir.join('cassette').strpath files = [ 'tests/fixtures/migration/not_cassette.txt', 'tests/fixtures/migration/new_cassette.yaml', 'tests/fixtures/migration/new_cassette.json', ] for file_path in files: shutil.copy(file_path, cassette) assert not vcr.migration.try_migrate(cassette) assert filecmp.cmp(cassette, file_path) # shold not change file vcrpy-1.7.3/tests/unit/test_persist.py000066400000000000000000000017061256646735100201330ustar00rootroot00000000000000import pytest import vcr.persist from vcr.serializers import jsonserializer, yamlserializer @pytest.mark.parametrize("cassette_path, serializer", [ ('tests/fixtures/migration/old_cassette.json', jsonserializer), ('tests/fixtures/migration/old_cassette.yaml', yamlserializer), ]) def test_load_cassette_with_old_cassettes(cassette_path, serializer): with pytest.raises(ValueError) as excinfo: vcr.persist.load_cassette(cassette_path, serializer) assert "run the migration script" in excinfo.exconly() @pytest.mark.parametrize("cassette_path, serializer", [ ('tests/fixtures/migration/not_cassette.txt', jsonserializer), ('tests/fixtures/migration/not_cassette.txt', yamlserializer), ]) def test_load_cassette_with_invalid_cassettes(cassette_path, serializer): with pytest.raises(Exception) as excinfo: vcr.persist.load_cassette(cassette_path, serializer) assert "run the migration script" not in excinfo.exconly() vcrpy-1.7.3/tests/unit/test_request.py000066400000000000000000000020351256646735100201260ustar00rootroot00000000000000import pytest from vcr.request import Request def test_str(): req = Request('GET', 'http://www.google.com/', '', {}) str(req) == '' def test_headers(): headers = {'X-Header1': ['h1'], 'X-Header2': 'h2'} req = Request('GET', 'http://go.com/', '', headers) assert req.headers == {'X-Header1': 'h1', 'X-Header2': 'h2'} req.add_header('X-Header1', 'h11') assert req.headers == {'X-Header1': 'h11', 'X-Header2': 'h2'} @pytest.mark.parametrize("uri, expected_port", [ ('http://go.com/', 80), ('http://go.com:80/', 80), ('http://go.com:3000/', 3000), ('https://go.com/', 443), ('https://go.com:443/', 443), ('https://go.com:3000/', 3000), ]) def test_port(uri, expected_port): req = Request('GET', uri, '', {}) assert req.port == expected_port def test_uri(): req = Request('GET', 'http://go.com/', '', {}) assert req.uri == 'http://go.com/' req = Request('GET', 'http://go.com:80/', '', {}) assert req.uri == 'http://go.com:80/' vcrpy-1.7.3/tests/unit/test_response.py000066400000000000000000000035021256646735100202740ustar00rootroot00000000000000# coding: UTF-8 from vcr.stubs import VCRHTTPResponse def test_response_should_have_headers_field(): recorded_response = { "status": { "message": "OK", "code": 200 }, "headers": { "content-length": ["0"], "server": ["gunicorn/18.0"], "connection": ["Close"], "access-control-allow-credentials": ["true"], "date": ["Fri, 24 Oct 2014 18:35:37 GMT"], "access-control-allow-origin": ["*"], "content-type": ["text/html; charset=utf-8"], }, "body": { "string": b"" } } response = VCRHTTPResponse(recorded_response) assert response.headers is not None def test_response_headers_should_be_equal_to_msg(): recorded_response = { "status": { "message": b"OK", "code": 200 }, "headers": { "content-length": ["0"], "server": ["gunicorn/18.0"], "connection": ["Close"], "content-type": ["text/html; charset=utf-8"], }, "body": { "string": b"" } } response = VCRHTTPResponse(recorded_response) assert response.headers == response.msg def test_response_headers_should_have_correct_values(): recorded_response = { "status": { "message": "OK", "code": 200 }, "headers": { "content-length": ["10806"], "date": ["Fri, 24 Oct 2014 18:35:37 GMT"], "content-type": ["text/html; charset=utf-8"], }, "body": { "string": b"" } } response = VCRHTTPResponse(recorded_response) assert response.headers.get('content-length') == "10806" assert response.headers.get('date') == "Fri, 24 Oct 2014 18:35:37 GMT" vcrpy-1.7.3/tests/unit/test_serialize.py000066400000000000000000000057321256646735100204340ustar00rootroot00000000000000# -*- encoding: utf-8 -*- import pytest from vcr.compat import mock from vcr.serialize import deserialize from vcr.serializers import yamlserializer, jsonserializer def test_deserialize_old_yaml_cassette(): with open('tests/fixtures/migration/old_cassette.yaml', 'r') as f: with pytest.raises(ValueError): deserialize(f.read(), yamlserializer) def test_deserialize_old_json_cassette(): with open('tests/fixtures/migration/old_cassette.json', 'r') as f: with pytest.raises(ValueError): deserialize(f.read(), jsonserializer) def test_deserialize_new_yaml_cassette(): with open('tests/fixtures/migration/new_cassette.yaml', 'r') as f: deserialize(f.read(), yamlserializer) def test_deserialize_new_json_cassette(): with open('tests/fixtures/migration/new_cassette.json', 'r') as f: deserialize(f.read(), jsonserializer) REQBODY_TEMPLATE = u'''\ interactions: - request: body: {req_body} headers: Content-Type: [application/x-www-form-urlencoded] Host: [httpbin.org] method: POST uri: http://httpbin.org/post response: body: {{string: ""}} headers: content-length: ['0'] content-type: [application/json] status: {{code: 200, message: OK}} ''' # A cassette generated under Python 2 stores the request body as a string, # but the same cassette generated under Python 3 stores it as "!!binary". # Make sure we accept both forms, regardless of whether we're running under # Python 2 or 3. @pytest.mark.parametrize("req_body, expect", [ # Cassette written under Python 2 (pure ASCII body) ('x=5&y=2', b'x=5&y=2'), # Cassette written under Python 3 (pure ASCII body) ('!!binary |\n eD01Jnk9Mg==', b'x=5&y=2'), # Request body has non-ASCII chars (x=föo&y=2), encoded in UTF-8. ('!!python/str "x=f\\xF6o&y=2"', b'x=f\xc3\xb6o&y=2'), ('!!binary |\n eD1mw7ZvJnk9Mg==', b'x=f\xc3\xb6o&y=2'), # Same request body, this time encoded in UTF-16. In this case, we # write the same YAML file under both Python 2 and 3, so there's only # one test case here. ('!!binary |\n //54AD0AZgD2AG8AJgB5AD0AMgA=', b'\xff\xfex\x00=\x00f\x00\xf6\x00o\x00&\x00y\x00=\x002\x00'), # Same again, this time encoded in ISO-8859-1. ('!!binary |\n eD1m9m8meT0y', b'x=f\xf6o&y=2'), ]) def test_deserialize_py2py3_yaml_cassette(tmpdir, req_body, expect): cfile = tmpdir.join('test_cassette.yaml') cfile.write(REQBODY_TEMPLATE.format(req_body=req_body)) with open(str(cfile)) as f: (requests, responses) = deserialize(f.read(), yamlserializer) assert requests[0].body == expect @mock.patch.object(jsonserializer.json, 'dumps', side_effect=UnicodeDecodeError('utf-8', b'unicode error in serialization', 0, 10, 'blew up')) def test_serialize_constructs_UnicodeDecodeError(mock_dumps): with pytest.raises(UnicodeDecodeError): jsonserializer.serialize({}) vcrpy-1.7.3/tests/unit/test_vcr.py000066400000000000000000000217231256646735100172350ustar00rootroot00000000000000import os import pytest from vcr import VCR, use_cassette from vcr.compat import mock from vcr.request import Request from vcr.stubs import VCRHTTPSConnection def test_vcr_use_cassette(): record_mode = mock.Mock() test_vcr = VCR(record_mode=record_mode) with mock.patch( 'vcr.cassette.Cassette.load', return_value=mock.MagicMock(inject=False) ) as mock_cassette_load: @test_vcr.use_cassette('test') def function(): pass assert mock_cassette_load.call_count == 0 function() assert mock_cassette_load.call_args[1]['record_mode'] is record_mode # Make sure that calls to function now use cassettes with the # new filter_header_settings test_vcr.record_mode = mock.Mock() function() assert mock_cassette_load.call_args[1]['record_mode'] == test_vcr.record_mode # Ensure that explicitly provided arguments still supercede # those on the vcr. new_record_mode = mock.Mock() with test_vcr.use_cassette('test', record_mode=new_record_mode) as cassette: assert cassette.record_mode == new_record_mode def test_vcr_before_record_request_params(): base_path = 'http://httpbin.org/' def before_record_cb(request): if request.path != '/get': return request test_vcr = VCR(filter_headers=('cookie',), before_record_request=before_record_cb, ignore_hosts=('www.test.com',), ignore_localhost=True, filter_query_parameters=('foo',)) with test_vcr.use_cassette('test') as cassette: assert cassette.filter_request(Request('GET', base_path + 'get', '', {})) is None assert cassette.filter_request(Request('GET', base_path + 'get2', '', {})) is not None assert cassette.filter_request(Request('GET', base_path + '?foo=bar', '', {})).query == [] assert cassette.filter_request( Request('GET', base_path + '?foo=bar', '', {'cookie': 'test', 'other': 'fun'})).headers == {'other': 'fun'} assert cassette.filter_request( Request( 'GET', base_path + '?foo=bar', '', {'cookie': 'test', 'other': 'fun'} ) ).headers == {'other': 'fun'} assert cassette.filter_request(Request('GET', 'http://www.test.com' + '?foo=bar', '', {'cookie': 'test', 'other': 'fun'})) is None with test_vcr.use_cassette('test', before_record_request=None) as cassette: # Test that before_record can be overwritten with assert cassette.filter_request(Request('GET', base_path + 'get', '', {})) is not None def test_vcr_before_record_response_iterable(): # Regression test for #191 request = Request('GET', '/', '', {}) response = object() # just can't be None # Prevent actually saving the cassette with mock.patch('vcr.cassette.save_cassette'): # Baseline: non-iterable before_record_response should work mock_filter = mock.Mock() vcr = VCR(before_record_response=mock_filter) with vcr.use_cassette('test') as cassette: assert mock_filter.call_count == 0 cassette.append(request, response) assert mock_filter.call_count == 1 # Regression test: iterable before_record_response should work too mock_filter = mock.Mock() vcr = VCR(before_record_response=(mock_filter,)) with vcr.use_cassette('test') as cassette: assert mock_filter.call_count == 0 cassette.append(request, response) assert mock_filter.call_count == 1 @pytest.fixture def random_fixture(): return 1 @use_cassette('test') def test_fixtures_with_use_cassette(random_fixture): # Applying a decorator to a test function that requests features can cause # problems if the decorator does not preserve the signature of the original # test function. # This test ensures that use_cassette preserves the signature of # the original test function, and thus that use_cassette is # compatible with py.test fixtures. It is admittedly a bit strange # because the test would never even run if the relevant feature # were broken. pass def test_custom_patchers(): class Test(object): attribute = None attribute2 = None test_vcr = VCR(custom_patches=((Test, 'attribute', VCRHTTPSConnection),)) with test_vcr.use_cassette('custom_patches'): assert issubclass(Test.attribute, VCRHTTPSConnection) assert VCRHTTPSConnection is not Test.attribute with test_vcr.use_cassette( 'custom_patches', custom_patches=((Test, 'attribute2', VCRHTTPSConnection),) ): assert issubclass(Test.attribute, VCRHTTPSConnection) assert VCRHTTPSConnection is not Test.attribute assert Test.attribute is Test.attribute2 def test_inject_cassette(): vcr = VCR(inject_cassette=True) @vcr.use_cassette('test', record_mode='once') def with_cassette_injected(cassette): assert cassette.record_mode == 'once' @vcr.use_cassette('test', record_mode='once', inject_cassette=False) def without_cassette_injected(): pass with_cassette_injected() without_cassette_injected() def test_with_current_defaults(): vcr = VCR(inject_cassette=True, record_mode='once') @vcr.use_cassette('test', with_current_defaults=False) def changing_defaults(cassette, checks): checks(cassette) @vcr.use_cassette('test', with_current_defaults=True) def current_defaults(cassette, checks): checks(cassette) def assert_record_mode_once(cassette): assert cassette.record_mode == 'once' def assert_record_mode_all(cassette): assert cassette.record_mode == 'all' changing_defaults(assert_record_mode_once) current_defaults(assert_record_mode_once) vcr.record_mode = 'all' changing_defaults(assert_record_mode_all) current_defaults(assert_record_mode_once) def test_cassette_library_dir_with_decoration_and_no_explicit_path(): library_dir = '/libary_dir' vcr = VCR(inject_cassette=True, cassette_library_dir=library_dir) @vcr.use_cassette() def function_name(cassette): assert cassette._path == os.path.join(library_dir, 'function_name') function_name() def test_cassette_library_dir_with_decoration_and_explicit_path(): library_dir = '/libary_dir' vcr = VCR(inject_cassette=True, cassette_library_dir=library_dir) @vcr.use_cassette(path='custom_name') def function_name(cassette): assert cassette._path == os.path.join(library_dir, 'custom_name') function_name() def test_cassette_library_dir_with_decoration_and_super_explicit_path(): library_dir = '/libary_dir' vcr = VCR(inject_cassette=True, cassette_library_dir=library_dir) @vcr.use_cassette(path=os.path.join(library_dir, 'custom_name')) def function_name(cassette): assert cassette._path == os.path.join(library_dir, 'custom_name') function_name() def test_cassette_library_dir_with_path_transformer(): library_dir = '/libary_dir' vcr = VCR(inject_cassette=True, cassette_library_dir=library_dir, path_transformer=lambda path: path + '.json') @vcr.use_cassette() def function_name(cassette): assert cassette._path == os.path.join(library_dir, 'function_name.json') function_name() def test_use_cassette_with_no_extra_invocation(): vcr = VCR(inject_cassette=True, cassette_library_dir='/') @vcr.use_cassette def function_name(cassette): assert cassette._path == os.path.join('/', 'function_name') function_name() def test_path_transformer(): vcr = VCR(inject_cassette=True, cassette_library_dir='/', path_transformer=lambda x: x + '_test') @vcr.use_cassette def function_name(cassette): assert cassette._path == os.path.join('/', 'function_name_test') function_name() def test_cassette_name_generator_defaults_to_using_module_function_defined_in(): vcr = VCR(inject_cassette=True) @vcr.use_cassette def function_name(cassette): assert cassette._path == os.path.join(os.path.dirname(__file__), 'function_name') function_name() def test_ensure_suffix(): vcr = VCR(inject_cassette=True, path_transformer=VCR.ensure_suffix('.yaml')) @vcr.use_cassette def function_name(cassette): assert cassette._path == os.path.join(os.path.dirname(__file__), 'function_name.yaml') function_name() def test_additional_matchers(): vcr = VCR(match_on=('uri',), inject_cassette=True) @vcr.use_cassette def function_defaults(cassette): assert set(cassette._match_on) == set([vcr.matchers['uri']]) @vcr.use_cassette(additional_matchers=('body',)) def function_additional(cassette): assert set(cassette._match_on) == set([vcr.matchers['uri'], vcr.matchers['body']]) function_defaults() function_additional() vcrpy-1.7.3/tox.ini000066400000000000000000000015651256646735100142260ustar00rootroot00000000000000[tox] envlist = {py26,py27,py33,py34,pypy}-{requests27,requests26,requests25,requests24,requests23,requests22,requests1,httplib2,urllib317,urllib319,urllib3110,tornado,boto} [testenv] commands = py.test {posargs} basepython = py26: python2.6 py27: python2.7 py33: python3.3 py34: python3.4 pypy: pypy deps = mock pytest pytest-localserver PyYAML requests1: requests==1.2.3 requests27: requests==2.7.0 requests26: requests==2.6.0 requests25: requests==2.5.0 requests24: requests==2.4.0 requests23: requests==2.3.0 requests22: requests==2.2.1 httplib2: httplib2 urllib317: urllib3==1.7.1 urllib319: urllib3==1.9.1 urllib3110: urllib3==1.10.2 {py26,py27,py33,py34,pypy}-tornado: tornado {py26,py27,py33,py34,pypy}-tornado: pytest-tornado {py26,py27,py33,py34}-tornado: pycurl boto: boto vcrpy-1.7.3/vcr.png000066400000000000000000007400701256646735100142140ustar00rootroot00000000000000‰PNG  IHDR Á‘÷ßf$iCCPICC Profile8…UßoÛT>‰oR¤? XG‡ŠÅ¯US[¹­ÆI“¥íJ¥éØ*$ä:7‰©Û鶪O{7ü@ÙH§kk?ì<Ê»øÎí¾kktüqóÝ‹mÇ6°nÆ¶ÂøØ¯±-ümR;`zŠ–¡Êðv x#=\Ó% ëoàYÐÚRÚ±£¥êùÐ#&Á?È>ÌÒ¹áЪþ¢þ©n¨_¨Ôß;j„;¦$}*}+ý(}'}/ýLŠtYº"ý$]•¾‘.9»ï½Ÿ%Ø{¯_aÝŠ]hÕkŸ5'SNÊ{äå”ü¼ü²<°¹_“§ä½ðì öÍ ý½t ³jMµ{-ñ4%ׯTÅ„«tYÛŸ“¦R6ÈÆØô#§v\œå–Šx:žŠ'H‰ï‹OÄÇâ3·ž¼ø^ø&°¦õþ“0::àm,L%È3â:qVEô t›ÐÍ]~ߢI«vÖ6ÊWÙ¯ª¯) |ʸ2]ÕG‡Í4Ïå(6w¸½Â‹£$¾ƒ"ŽèAÞû¾EvÝ mî[D‡ÿÂ;ëVh[¨}íõ¿Ú†ðN|æ3¢‹õº½âç£Hä‘S:°ßûéKâÝt·Ñx€÷UÏ'D;7ÿ®7;_"ÿÑeó?Yqxl+ pHYs  šœ@IDATxì½i°nÙ}Ö·ïÐãínõ°\{íµ´—^~yùÞïù¾åÅ_ìõǸ÷M¶—ff"0˜L&[œ:}J[¯NnÕnOé$wݵ×-GÎë›ÈÌÒD`"08NŸ:½<ôë-O>öäòô<øæ—»ï¹{¹ãŽ;–_ùw¿²<öùÇ—o¼qyÛÛÞº|Í×|õòu_ÿþå?ûÏ¿/~øSËÓO?}žc~öQë{ÿ×íòŽw¾ÃúÐÉ߇~ä'–òÿÉò¹Ïn9½ãý¿OâÓË'>ú‰å›ß7/èBäÖ[o]þÙÿý3Ë?ø{ÿ`yäóŸíÛwï{ã}Ë|rô³b"0˜L Þó8yòd?qTýöñ¬ß9¹ÜvëmË‘#»îmKÌòD`"0˜¼NŸÑÈÃ[>þéO,ïýÊ÷.¿ë›¾ÑêùÌ#Ë÷ÿµЗ„œ]nГé믿~¹]OK¾ý;¿mùò÷|ùò ßð;—¯{ÿû—~ð;—‡ú؆ ŸüÑåŸý¿ÿÜOMþÜ_ø—Ûn¿­Óã¡ß\>ö©OôòvæáG>µ|úsŸY^Öž¼|ÿ_þkË?ýgÿÏòâË/m³Î—ÐÏCdVL&‰@G€'œä’xRò¬Þ™i"0˜L¾pp£è³|¶dñÿôÉg–gŸvyôÉÇ. þ݇yùŸþìŸ_þÕÏþkóÝxâÆå¯üÕ¿¼Ü|óÍ]®2èû%ñÿàÿúCßtøÁ~[±ìyü–oùO–»î¾kù©ýÔòÿéÿµóâáù¬|O'a"0˜\Ý<ÿÂóË˯¼|Q ¼¨¯ç}ñ¥uŸïE Oæ‰ÀD`"0¸$¸è¨´×7>òèg—¿ÿüŸÅ¶ÜyçËW}ÕWöò˜AÇÏèIÈ?üûÿ¨W¿ç+Þ½ü¾ß÷-½¼¹óÎ;—oÿàY~ñçqùÑÿq}iÉÞÿ+j^€l£7ˉÀD`"°ðÏ/õÛ­ž}îÙ}O<Þ‰ÀD`"0¸¼œ[òõèÒúoñ–—^\·D½ï½ïÝS„ ˆþΌ|ô#í<ßù\î½÷Þ^3âOüËYmûúë?øCzú²ÿ·#Îw@Fä^gy¾­à%í»c?6ßPC§¸îºë%מ{á¹å¦oºì/b—»¦\=Ÿ¸ñ„íñUÔÝt⦠”ùgflïÀÇâÝ`8ä>rןyQëJHøÄ?{¯o¸ñ²·Ï#¶è#c⛌hí»Ø×¿æ‚‹JdY¸Ò¿öJ¼¤Œ®í;ëG]Ž?¾;vl/ÑË^Oü,²Áù i÷²r™Ò~zé|?“àÊ{#¼r%¾”Îþäš ÷‹ƒyk{ûÙ±£Ç<Ÿ^Ê{.àâùæ¬æõ¹«1ÕœÃÇx¿áú6` mΞ[çpfl?vüÀïÕ9ˆy†sßÅ&]´mt1í<ú~Dß!D+ùjw|á‚èG$ð Ÿa“ÞuûË3ªcüÜvËmæEß·Þ±Üw÷½*_k,8¿Ï4¸îãýËM7¯7ƒ?ò‘\PÍ/þò¿ó;ÅøÞ÷½wá]J'NœXø Þ_Ö7oýÔßýéóÆuñÇy2¢ñ:Ê¿¢Ið-ù6ƒ'ž~ry“.BÆEÖÙ³ç–7ÞûFÝiºü‹~îôlÿ?îÝqÛís— ûŸ{ìóòïºùÂwG¾FÎ_z- h‘sjÒ«=Ù[É>žxæI?}â Ô“ºÓQ6Éߤºu‡’<íóàýhðÊòÔɧNÒÜÁ$ÿ¼N†Ð¸+Ç…Ä ]€œÔàtÛÿÉSø®½æÚå 7ÝâñÓZäR¾Vw(¡ÑgËÛ¿D »—|÷q—ÛœÀ_|éÒO¼Ûò |ÿ=÷õ˜wÙ¼ÚêòÞǺ—øÕÄÏ,ú®¤Ä¢ïØñcZ\r§°nÒÐïŸQŸå). A…ô§ %ì½ÒÞ£9#þzÂx!¹+‘¾=~.ÅGp|Ixpnzðö'¥ëáz↞K˜žÑ´|øW>ÜYþèýŽåž{îq™uøéøe }å7´]‰8η´ø±êOh» ‚í-)èÃ'W\Ütâfmï{¾÷ŸÑÞ ZÐݤ§^$lúèOù¬˜é§$îo'ø9éâhõxª ÀaLÔƒ3mCü{ÉÓ/á«4b·«ïÀW˜o÷«ÒñZ=ïå¾`àN2ãÿJHôÒƒ÷=pàý:)²Æ'Y?½£/Ö|c¤/ñ訞5^k¤_Õ7#> G[ìêÓðï';ê¡2^92íÔ§yÃc¤Ï9Ñà1Í<¢zÚ›»Æßh¯ò»üGz°ÅcŽyW:7lÁ‚Îâ›èÀë’|aWsm•Gðb#‰#|üU‡ß$. žÖBäÆ¿çç­¹fäñ§‹Ôí-¬È¾A7gêëHу]nüŒO ©ûü.< !míÒºnìŸÉÜ_Ç£ý™Ÿì‡ÀûßÿµËw~×wt–ŸøÑŸX>ñÉOôò~ÞéøÁïÿ¡åùçsS‰­XæÏ|ïòž÷¼{ùÀïý=ËO~è'—_û_ÛOÅm^€lÀñú)Ü«»ºLpO=ý”DÆÄHb‡Æ6‚ÚŸÊv(.Xj‘Íäù”ƒ™¨™ˆÙˆ,“4'"¶i¼Èc`Õ=óŒ¾îmíœÀØÞƒ/$ö¾òú¬ô° Œ<'îz=)›‘|ÖB€§ø[‹½:¹ƒÁ½wÞÓÿãt[çlxÅ=ðªGð<¥À'ÚÎ6tb®-"n;µõºW>l(»ˆ‹€Âp—þðƒ“÷~i?:ý’ÄEÌv"nb=¢-[´ýÀðfñs‚g;X’¨¿]OÝn½ùV-vrGt[ÌÆq@ûP¦¿óô†ò„¿¥“#ýž»àl3cÌзÁÿµžˆ»ú‡‘ú´à0l:iSÆÞ9Ýg ]ʘðXÕX ?²—Ÿm>Ì[<õ#y¡¬4Û(©»V|Ìc·ÿ©øŒú*ã…>üŒúÛ’*171÷Ý­yþͶDlVž~Í<ÄM&æä3%_GbcÜ¿¤ÿ<Ìbÿ”ú6e¶ç’ÐG»°-ò.ÍmÏ>ûìò yºXã‚ñÀS|`;èöø)[ãq/ÿyÚy«žbÀ…v8hb®Çž< ØóWs~mï—11gqn#ÏÒÃMmF<$|cŽài/‰ÿ™À»#ã?Zã\‡{ϽfÞú3¶_Õ¹³È\H—Ï•hìís´Í®¹YΧÌsœöâ)óxõ"píu×êéÄÝË­·Ýª:ø ¿éê¿ÿcß½ü/áÏ»o3&øšÜù±ÛèçBìWýÃËßú‘u6¶bý¥¿ü—_ÿµ__>ô·ÿÎEíª¹ü/t·f拉“ÛW|é»—_è7õȧ—7¿éÍ^t²…ê—Eç.9'Û1±ÅéVm»yèỚ§ÏéÑ2 ÉÊC ÏEÛyêÅDELÒg^9ÇIƒ°ÃÝ#¶ñ0 ÎÝtÎ'6·È&{9QýÚoþûî'ÞYàäD"æZÌw¦–áÄÏ Ì6¤‡w!ðo¿øñ™—ûk›‡vž-oÐI÷”œøÐ¶ÏèîÑ?.Lˆ•öÂO=ƒZØšt—|b»Ç®D{ñ¨³lg`±SeNL|Áfà“bÙ/ËöBšE}°÷“}54ìÒ/±Mßù’·¿Ë ¦mÜå¤ï‚kµ ·7 G0cÿõG?ñ/DØ.Æ‚‹“;ý÷n-¸{³-Ïöì#'}.H¹»sûnÕâò:/L>ü‘_ó–¸#ÇŽ¸¸cIÿ¢ÿ!—…O⮌»üÛ¸¤Lß8Ì‹Úý\8ÒÖ_¬ä…Ì¿ E<úÜiæ"â >=¯Å9q0þ¸}ûƒo[yìsÞREŸ`ÌÑgÀ’­6<9yEwªªOÓŸ×B¾[Oßñ¦·x»ÍuZ(œÔâŸD¿ÂGèÏh^£2v™7nÖ“Cà|&s,hkÜ—î:‚5ã÷&íÍF–yøózê]7¢è÷è÷–(Ío}à->_d¼Üå›%lcÁÍõÉG>oü”­:îçÿ‘4Æ…é]œU¬û%p Ï€9>ý¶ßòeÂø?)GÏµ×æFŒõ nöŒO©ç}µëå;ü£6tòG=7Ø&JûsÑF<…'1ó7&Ê/¾¬‹9ñü+û‰ì¤í?ŠvŠÌÊ+î±Øfþ™Ï?âÅ'wîÉŸ8}Â'•ƒÄôpA¡,'§3çr²ô㦈­7ÜebrÇ´`æD@ œ÷;)paË/ýq·‘íøW{¬Gˆ‚x8y“^ÐÝÈÄǺ`óDf†áã Ú:ÁÜ]?¥—!këÀŠÍ?ƒQÊùub±§Ot'õÕŠ­ž'R.(XÈÔ‰mûä:¸sÙÕ?ð¹Ð7}q’¬EUY÷¿WÍå?â%/l^lÂ_þX<ÔÐXˆPÏ·¿± `ÀB“;œ›ÐCr_Qþ„úÁszBÂB‚¾ÎBs}_çbµ_üô»í»­‡åc…×A]—Óú Oë"Ÿ›)< þƒøó¼.tǽú£oŒW„\Ìxžáéçx=·ÅQÌùÌ?™Xt³Õ‡›=•¸0ßk±Pý³x/td^EÆó¤¾è‚§Æ<¡!q÷Ÿ- ëÂVãHq]LºXÿ/¤ûSŸý´ž:ß·üæ'>êíV¼ˆ^óö…d¡þód@ÏM‡õñsR]]£í@|¡‚Ÿ¢J üŒ]¾†–/5Ñu¡…3sDõkæ1¶‹‘¸`¢\s>Ü:¼“€î¢Y@Ûã§êëx!ÿ ï:–Üö‘ö€§øžÔW…¿ã­o÷xf¾#1g;ññ¢ÂEGÚ¸¶»lôcSúàv2®˜˜»è+¼C–'™»Ý£ÏÃë9³±ðO÷˜[_ÌA,Œé“'u³AUË º‘Reìór<7)xoÛ¼pÎE4c ÝŒ)d鿌-dvùŽy¶s1Ïsƒâ˜.Þ¨:Ê]æ%ÆÛýš~äSîÿŒ ú7Û!‰ƒ~Ï9ƒ9´pÇ·-‰¶öòÌslóK^¨.½£æ?ž0÷#Ÿ/Žúæçæ7pDö~ëÇÔw«1×1ÿƒ[·8ÿ1§£ïN/>'Çþp³ASÉFýèOå™ï˜ó9ñ™{‰i¿„\¨ð¿–èoÛ‰%à…^Μ;ñ•ÿŸÐùƒ¹…yŒþKÜgZÿþ¹+OY¨ß…ã¶­Y~ý#ð­è.ßþßæ@?ú‘.ÿåõßZÐßô»×ò§õ¼$¶ÂÃïüÝeë}_ù¾e^€\d¯fîè°`âB€©• ¹‹K&´J\p\3Ü•ää9Þ¥äÎÿ9ÝgK}ÖÊ“~ªrW˜žs‡†“f]P°¿™çøõƒLª£}&Ýññt¨ÎŸ®ËãõX'{d8‰[V'ÖšYT1Y3‰}¸Üùâä[/b² ábm× ôúý áY/–¢¯ø‘!ñ´DJ½øNM>9ép±À‰r´‰‡Èp‡ÌY0І{%üf»' 5ÜÅ/̸á„KŒàÏ"b¯†câäNÚ®§Ýð—ØÇþoɯDœ¼ÇS‰EOÝQÝîƒðìÒQ²ã‘¾Í?Ò¬3‹^8ç¯îƒ ø]§Å¸cÿåǹ  _Ô3ソøé;øÇÓ–·è›ßü%Š ~îÖ²PÛrô÷Jϳhã¿,K¥_ýÏ*¿šãoÑ·šÝ¬‹~ Z¸ãýÕè>ˆ,ã¿Þ­¢Ï0*íÏܱíÛ©øâ‰JlÝÜkLÒ÷nÐEpõË’áÈ8ô;š‡˜OHØcL¬åud~ä& O/ß$úyÍÓ™Wów Ó.»õÕ±Øg•]O©Äâ°Sñc¿æÌíùy?¥cû¸Ëÿíy¼v=Um£ŸÀŠÄ¼ƒžj+|äK,<ªÀs‡œ‹ÐÇ ‹]ø ûŽ7Üî›(6°Ï}Áøï˜Ó÷³Ï…ë^|`Jß!6汚¯·çPðª9ní×<Á^·\ïecÖ¿þøÃßú­Ë·}ð¿u ‡}òßóMË÷üé?e[—z²Î¬¯ÿ¶¹ª"äŽ.i××¢1Ao/öÎl-Pϧ¯'mô2ñsçˆIýôó›‹ä,öÖ»©ð³¨Ó¶~h¾+¦…7º|ã¾8ÊìÊzêÃIhLã‚£ê©ã±7Iú«zç½¥»Àp¯ø‹g×É‹ðZˆ/G.j±Aùìéýï®±.þí9'hþÆ OtîJ#†#}¯zôîEåç²Ùо«íBÇêÛÅÇûÜ ؀ߩÓç¿4ÊoDZÝOÏ 'vî`³à[hê¥eú‹X'Û²£?WržÅ _P1¦q7Ö_Jþ¤ÞçzJwó¿XÉ ]-vw¥íößæábc¯ ŽâeaL0oñžÕö\‹ÊJÛóÑv>.öù“ßsÚš§k1:òyüBŽ'{¥]sĶíQv?cý˜ßåÿAçýlo/äé§}ÜÑÆœ‹Æ›øˆ 7Xì³Àç©ØAÒAúÂ.=Û>ïâÓ]¸î7‡îׯwÙ˜u¯]î¿ÿ¾åÿáo]žzê©åGìÇ—õmV»Ò‰Ù¶íÝÀ8Ìt“v TâÝbæ¿‹=oÌ BpŒßY]|°U…8û[k[Õì`¼[y™œíBÛ߯´ƒý‹VuXñ_®€x9¿¶iVðIör龺õœ[Þó[ßí¯µæ‰û»ù2ô‡í­{W7NWWô¼SÁ;÷èÈ\)‰¹™vžÚdÚ•âÛÓJŒ[æFÞ¿c ìL+ïþîÿnùZýsï ýøh§»o~Ë›{ýwò?p®÷;²½ò2fÞú¶·vm\Ì¿EÿwäãŸød¯;HæØ÷¾éÏ„qòL îøò4x—‚ýÅÜá¹Ø+ßÒµy<§…óÍ ßzR[‰6éWFéðâ¿<ñq!Çÿ{K¾j×ÙËcéêÓ“¶,±ÿš îïºsùZG†meÄw9ýðòÌ—Û˯ƒí¦lqº”¯’¾üÞ¬ù†8Þÿk¯É?Å[©WwŽöâB¤þ?ÊÕÆŒþJGà¿çËýo¼Ïnþû_ý÷Ë¿ý…_è.s“á«¿ú«–ÿô÷Ëòßø ~²ñ¸¶Í¿ûÝ¿MOgµšR_òÉüï .x ™»ï¾kyßûÞ·|àß´üÞoþÀƶÝ÷é?¢³½ý„þñ)Oj¶wel›»OñÌ' Û¨Ìòà‚£þá™/‚!Ë¿x[5êêaÅPûâã…ù™¶³ì·¥åð,OÍW"sriÖM&‰ÀD`"0˜L&¯s¾ü=ï^î¹ïž‹Žò’/@¾ý¿þ¶å¹ž_øÎß™&‰ÀD`"0˜L&«3gÎ,àüåÏý¥ÿù¢ƒ¾ä ,½÷˾b¹ûŽ».Úè˜L&‰ÀD`"0˜L^»üë_ü¹Kv~¾rÉÐMÁ‰ÀD`"0˜L&‰ÀDàb˜ ‹ØäŸL&‰ÀD`"0˜L.yrÉÐMÁ‰ÀD`"0˜L&‰ÀDàb˜ ‹ØäŸL&‰ÀD`"0˜L.Wõú.«OŸ|zù죟ÛEšu‰ÀD`"0˜L&‰ÀkãÇŽ-ï|ë;/«Ç—ýäÔ©SËÉçæÿ¹¬­4•M&‰ÀD`"0˜L¾?vÙ/–¹ë‹ÐÓäD`"0˜L&‰ÀDàjEàò_Ò HYŽ,×\sͲœk•íž;wnѯSýCx+AªzdÅ-jè¦ÁXì­‚"YÒÑv]…¶Pz+¦4aøŠ×zôAyüG‹V…-ÛTaÞ²}v9Ûë o'û5TâGÙÂ.¿å·d‹o÷IÙò‘àÜðÛò›¶cK–EÙïH¯<ÇÄÌJ×6üƒîò­è½-TQ~Ð/[˜ŒqùAQ§ŠG…]íè¶nA[Õ6ÿPÞÆ›rÚBZ”·.'¡lH±CEëgbpÜgÓí }¿4b8òUŸ¨¶AϨ :)}‚ÜfŸ ]TÂ+²£ßH$äô)Ø $ÆBRÞ*nÇ$ÉÂOœåBáÜä‡7¶Î-gǦoÑ¿º®æŠå%üt`8ÞShaÞЭª®«s¿¡Ø³+ÖÑå@;è¢70èðW?ØÆþl‹9Æšþnyw¦t™:ÀY~ºª|Ú£-VÍåhU öS²G¤cùn;ew?—7U¯mƒ¬hØ*]>®NË&o|#Ž&®%W~wƒl¯k™âÝ–­òÈo¬[¬»è#ï®ü.ü6ø?«a§úgùj™Æë|a@¡ùD=UÉ韴âöªO¹;R•‰—²ãoü¥«ó•>Û¶K—xª-ËÞfÿbGÏ6&öÁ ñ±ô”o£¬}įògð±ü0Y¶bn„ˆòÉX ²áÐè> ~RfΗ2]mÙ+`|¡ØSL¥¨|âíTg ó¢Uy“k•-Œ6è;t[OùÕ襻»Õ‚Âvµ zW_Ü] Y¥Ü³C¡ÕmÛ^yɵ¶|ñëø–ŽŽyðsÅÎ;ÄØç¦ocÅç~ã¹>q2^Ê-ôP@üðf<™"Ÿš Ѥ«®.šë¨ÝN0láA mÇ@Ýé3§·\¶òá^€­k_ Œv¸‚;{®$kéàÀSÝ…:ÅÒEK˜\@–,í„ý¬rF= “Uj«Ù’…A|øyDºÌR¶J˜²~ÒQ`ÏÅKù]1V\çÐÅO“?#¿ìµƒÏù‹®â­˜[÷’­àGœFÖ1ÅKÊÐ; ý®ºÌ LÀHš£À¾©Âq˜·íN9ÆX;/E—•­ø‹÷|¼«XÂzüÑÁÏ`‹/ð‰Þ¶*þÈ÷¼}Ué,í¬ ˆ£éVE8‘ÕßÞŶe‘uå®[ ñ’ªÏÙm;@ÝìG•‘µ„>V¿¨!¦òs-W/RäW?«­‘©Î:-¶íg“ÅÕÂDô^T5~{áÞè%_ 7ãh17 ¬Èª£û€Ê•zŸêºk>€?ا"!¿ ÿ”ŒIõ"¼>ª¾\åcWÔu ˆÃ}MúcÜÞ©|ÇDåmÙ®G²ÇÚ¸SÖÉ}R1Øë@°Ñ–0A ©1„[1dn‰&ù%Û5×Å„OÖÕÚ΃nÙ&tYmSf]T8NèðQeý&¨vÌbÆ ²)7~è´Š9Q¦dÛdTîA²Ù¦KRn™fÜx!C¹Ùq±9Z~P+M!­¦³òc¥jÓf‚´Ï„!m«ßŽÙqä¼-뱟¸ùRN1µpêgKÖü’-_⃃@™$£²nq4æè*I³oÙB¶èk\Éá·hU‘ó…Vá\è6+¦Õ·óuEÎ^âvü@•’ý´^›RyìÏ-ưöOû†¬ º)k~”›+=¢ØcÆ6cÖ}Pù ~ÂpˆôÁ¼My—£9Ÿ;Ç¿D#]I›lÅü5RÞöÓ,n«ÈâØQÖ"M”’$|-?\޲xÝc\¹áYñlzâFS?ú=ÐTêíÞtc{(²ð3N”-ꜚ-÷±0ô¸ª­å'c©²a«F7‰d^tµÔËa7ÝÎ@ïºW~ª{\{Ùz‹×}l¯S¨Ï¼¬¸¿éhL¬#Ž%Yn~öó]+ž#Ú:&Ž!5£ß…5|±O)Ã/ÍS­h]Ž Å-.;?¡wfr¦­ºVìE4/G¥Ö¬S_³ æì}n‚ÐpJ ¦5P[Íö$Aƒ¸Æ0Ðì“Á¹€êN„Ú4á¨i®Jƒªzˆ•< Þ~·Ö†ÁS¾Ó&šdG]’Yeµðé“"¶Y¬½#5UNîe£¸Û" [æ’_Á0"M°û ­:mqœkTE¥Ë~aß¿’Þlc]x×`¢ll»"ÄÑHŒµ€Œ5l‡—2F %¸WìÁÓP+†²M@ÙÒWqU¹4—|ÉÅ3G;nl袭;Fáæ4EB7Yã¯|Ê«lÁî襟PëvåèYQUá»êæÖ‡Réªf·TÇ ‡c ¡ÕSVmYN­°OfóH\¨“šñRuéxÆ †Ö?Uö²>[‰:œløËñŽ,î€Ã:È«ÖxƒŸù¡5Ïñ‹§#”Îú¢aÃÔrÄó†ˆÍn-˜‡ªë4B™9†š$”®v ¡-z?b¡/âeŒ¯~{[ ªÖ>‹d‘C^zÁ€Ô4Y_áM=Ô¾P-^ÉâS‡‘5¯ê<×4Ýð8 ¾(ÔAs}â4Âô”}1#¶hQÙx§-2îà‰/QZªã[Nr‰ì\ëŸèB6º£¹æUZP®˜éî™j3?7|ßÁ¹1Ä>å9Іr—ÝV¡QWôâåH:?Õá—çoÙ®ÄOÞýDíK‚Jü…Oé¶9?Ê`\GËŽcTú-kL`€WÌe1ê|l’hŽºõ¯;¾Q°Bt@²ûà‚« m#P~™’’6©I`Ù?}žŠ/æåþé£.î›Þ®‹xÀž?Ø[|_•ƒaIˆiÛïÑ6üÂ{”OGhÎ cS`'_vqj$Ÿª¢UÛT*ó3³}%Óšòð«`r"a^Á´Ø^1¡íós9-o4”¥vlÁ×cîúÃWqRŠ&ܲc­œ|¸ÓŽ]›l1[~p&þm ¦Rt™Ž‡ú¤| Hk°ÇtGòØÑc&Có‡/דx ò‰ž´•à§Ó²¾ V#Tÿƒž“¾†GUZe§Š®MªFY-¶œµX)¾Šã¨÷+§_±¬­K!'Óê`¾ó:èF>‹ªÄÈ"Š“Zù\â°Põ?ÄRÏU°N5Ÿ–¥ê×øêÄPºjÁÀQbJ²ÃOaâºÈA¯zœš-û)ý\w¿¥ƒOZ–…9bª¤µÜîM“GT†?µ# Ñ7ÇnÓÔ â’5]2eÀ¼eKµ¤\ãi5¡ZÄBã%4Â/{9¢ tÔ¯$ª¡ýËÏòÅý·Švñè½ä-ÛîÂc~æõPÑ]þdr-ß(Á†' "ùI¯âd|Ž9fßU´oÆ%†—³gd§¨‘ߨB¡’bóEù^وǖ`@EOŒ!âŠFJú ‘ÆF±«KþLÖàq°bŽ,èEô\÷‹zÜŒÝÃŒ›º€iêS¸£ËáMO?¯¹¥Úõ<Ý=ÇôM6®š´SäˆYÆ;2•‹¤s¢I» ïv ÓÇi|ÇGb8¦vK ®ýƇõáÏÊO>Ý+BÐöã3Ÿép%Qv/iO~®„ƒcŒJ”¡”“¶Í¿¦ñ6 †Ýÿ/ò«T¤]gº¬é"kÆêøñ”Э \Ìå§þÑ–51nLG ù’fb}j†bªEhy·½2é7ƒÿòÌ"Õ¼vÜå­x[Üñ^ÑtÐÌí¸°IÝ86°ÁOm}´ßp5]ƨå«M¬ÔºôAö#v¿h:Ö|^^Ú7èÅ(ÙØJ›W?+þ•­@$vý¬E[ƒÿ*%*ISÕê™_+žµˆ.¶Üˆ,iD¢yTÔ"À¶Mmצð+ó)Ôš‡±»Žkæ¼è³kÓëü@{Kwó]ÆöÜi×Ë”ýˆo6l^Ú3>–w¡y~ŸkÅOWúØÈÒÖP2 óê£øšPW€RµÙ p¤³aÄF¥õœ’šÈ&ßçÃL*mœ»×þ)Æ9Á*ÚxB¥ð‡X쉟¨'%Δ׶¡>s¬™Ú‡%šœç®|¤ýù £:ÙiÃh­n,p*Éý ·šŸÔÅ«|Z©²ô'ËÁ \@EÅÀ“,x(§07År¶#þÈXZbN9”³ížq#®†/uh‰¿¥«|®2üètâÐdœU±ÆDâ_É¢›vÿž$ŒóUÂ(Í|™C¾iƒ]‹sqO Ç­£‚±i…†^èP…T¶a´œ=êfí íÉ_Æ Ì{Cô,]¤êL.PV5¤4}¨ì'/h<~F?Ùn6Æ8æñÓf=âXÑ£:´/fšAö¡S‘i[]êCã1¼)…Þu#{lžp¯‰ }æoxuY®6Ð`tÊEDYcð _ ÌÐEg&²F@—êÜÁ#áÏÂOcY“=˜ _¾¨±ãÐvn?‚V2†Ve†Ñ¾Ö¢À“ªõ‡y[±•ŽÛ“!qúdÑGÛ-ò¶h£Ö]³aó­.b)âKùévf‘T1{òæú)L?òGY “Qâ¤oÎ&¶î ›ïõSº-‘Ó¾µÉyú:Émi?(5íÕ*s‘ƒÕèJ»çG$˳à‰}´{êæŒé’¬ õ:1É ÿ'½JEé6Žk}‚ȵ½"O?cÇ$3¬åèêeQ• /µ…iå¶tqâI†œÃLïëU““Rµ]âDoÑ‘);ngÍ‘#­úàmÚ+åÕï*[¿…?¶¤²ueóÕüúˆmÑ£y<Žñ I[e%©-_3¦]•“:ía|#EÆp%Ï­ì9SWªÑMí9õOŽÑ”ãzQ¡þÄ\ñš.C™J[ŽP­Kq‘Êo*³¢RfjyH½¿„²Ñ'„Zõ ß~>C¯* s褲ëØ$»Î“pB§Ï’ÖqB‰~“)AÝM‡¡eèTP’îxçêËí^¶½Myç-}eÛñJe•)ûTm‡½”‚Ívoç~ÑKWtú¨ÅE¨¹žq¤\¶8–.üBƒCÒ¡ÚŽ' X0ð œ Ž¦°s²ÈYA£) ‹îØBO~"kI˜¤Û礦üÀÏÞ–­=h§ê…·ñS?¶Óxñ¨ÚÑq7:õÛ¼e Z%ûÑü,þ¢ñD¢ú¯²Jp`OþkŒQª8J†²ëE_ã uô_j„Îqkª«¶†—sT%ë©ùU•Í«´•xáï˜XÈΗxÇ>’ÛΔ.ÐNyàͺ2"b;:Ê ûa]]6í tÆÿy©ª ;&³¦ÿйâKRÍèÒr­ÓC‹2|Ö-0y‘>ðGµ`ÔˆÐãCIìÐ;ò‹wl;챫ç0Ó!_€Tt@¥Ä‡°H¾‘ ´ 2§êûd Cƒò%"KC@Íláe¢¡¥+Í$>;†¶&‰m+_ëÜ(ƒ|ùiÙ8‚ihô:ÊÃdh[f ï(“jã´J`+5>0ÆÏ²EÉêÔµ¸†SÅ«h•M\e¨ùÛŠVÒý>Ÿæ?zÍŸO7 ³ªï²±­%Ín“*Q´4 ª"F„7kÍÛj™@HÈð×MQ¹3Eœ£%„³«lmj3O0Ò¹!gÔ”^U˜±;g5&seÅc–!×x èªÌyX\gNË"âùG%LÆ'j#»*J·Örµ3äÕ§Ó5Þ&ˆ~ýõ>Ü|…jJˆ)n}:RÓC m9tE z¢#×ñƒÊï“*,cRèE.”öiM|ßÂΔܖÒÝÛ * ?`^3]êë&Fí”°"óãËÆÈ¢‘Ô<‰ñTAk¢áBWH–ìäF•,çB—ìocVMå˜{I•=ONs‰{Ó†ìêJËù€›ý¼+©žZ:÷¤8V.åò+rj«w~ªÝ¡õ½f…µ“»ÞN#®Di¹]±­Ò—%wÈ º {†w@¸b$ʤܱoR™¬·}i]lWÇ*yKŸùkzA<=ÓŠ–År$»ƒ,p#ÝÓ@[íH2¿R«+öæóù²CGÓãÈ7Í*ކ®» iruAm™!!¹¾,«¼*ŒßàðÚ¼b@wÈ4Âà´¶JD+‘[}A¿µ˜L>´ÒŽä* çQŸÈcÛΕÉB/äM³Úè¦müRž%DÕ/ûuá³^tI7åîcØTš',ìv¿nüåW4†Ð>ñ©ÞY@Öwu¿ŠÖßp{ö3º©"•‰NKuãTAŒwðÕþ€Õúä}-IWÙV—åð­Æ<ÖUÙŽxt½ƒZ}#Û^w VP«WTƒ?Oíz2(­¤êÒM ¸»œûŠ¡¶'Á3>å1èë(µþ;Ä}¶î¼˜ I¾c4ŠªÚ}¿ëjŒ=¬Íþì~ÒxãÇ&ž€Rc|z^j‘eÜ5àlh¤ƒY‡âÃGpô¡ÅèƒsªÔÞQа Pº(ƒåµ_™ ΖŠyôPWb [Êyª†>k±­u®ACi+º*V;u»Ò~7N_Ç• Ƥ8Ê !©¯¶»ÑæhvÈ}óþèÚ«Ÿq´Ç È{Ž’½‰ ýcõÅü`P}ëú=ã'†¶Ô¤ÝT—rËBëÆ?jè fîuˆaZè‘j²”&¶L[­WÐÖåzK£r3Ùpc´­²cNÇ@ ~X¥cR©m«>ÙíˆÙáˆyÔUòå›å6öF¯üæÅó†ú´‰­{Ö=ñmTdáHÔ´`rèí(ÆPŠžHWæD°úÑø%²¤Ò´Q#dW­\Jž?®F=e«Ö%U¶þfž|b\Þ´,m[ö=/YÀŽÚW$Kwæê4˜±£(\''ìÍ! dG]é.êxmƒ®zÒÞcÚÐ+eõ$Ÿ)Ç9|b^[ÀLåw£ãK´4]CyG¢Aü@7²ü:E¼éZ«Õ²Õ~Z:¢.w΄¡¢U–Ÿåw¬®1Ãeß"Ðý*ùF,ÛÕ¦Xs»JÇO¼;çl§[®Ùl £»\¨›²U}X;œtè ,<nÝ—M‰í!Zhê$AÛy?–„D¨, ¸iÀáÐ@IDATÓ¨²*jq˜ {,$Wöc£œÑ › •}H¥-1¯óHkMC§zøé•ÆÖO.Òs±}¿uù¤AÆÅWï¦Í¬íËïøRK¶Ä?la9ª½è]·ìÖ£:xØ_ƬVXÓ6òà'³îhUV©'è,`K·õª\~Qî1Û é·Î•/*À‡?Ò/ñqáD}d°ƒîxËKv¹° ù!ImŒ´ ÚjÇÄWú¹Ôü7¦MŸŒÚ6|Ä´}@}ù‰È±#Çé©l»Bõ…eÄxû 1맬áE޾ž˜Õn}{\xá9~[›²˜êÝ¿•·nûEšø©´á#•‚9ï„X[Z¥–‹îò YpIÈjö(UœÆ Ùfv®>ã»i—üå'º¤C¿<$>ªçÈßöÛ8•Jo #ÎÖ/Yûý'´1Úò»^¤D6ø„ y##[ŽÁžSÿ”IõW©Ú >¸½%Àþ:ó–ogtQÌmI4x„KÛ6êôa}eÊ4Ñ+‘-š½Q!s¥4ÀF[¢ÄLÍžÊèwâ`A•O-¶!FK›•ûÔÞ´_â@6x&Ü­­÷nVÖjëzd5­µb\z ÑDMm©B£fû…“ŽKlG½.Tu1ÙLÞúº¸yAŒ­Ý9ð#öðÒ_ÑzÆaäJ—1Šú؇Œˆ?0aNUYø/Àe ¿z;@el049¡ðæ7mæ²U—ŸvÎãfŧéÚêÛ½Ý,&ýåJ¦µƒc |+ý„c_!(ü‰M ã±áEGÚVœî?Ô¢/º÷‚ ~šž@âJ1[Àþã7²æ ô£žZ6ì⩲øù1o¯d¾a&û)E—¦t›.ãÝ\EPã²tÙ`‘Ç9Ì~*_q *ˆŸJ.Ã/?::µc•‹¯$­¥Ù<_Q.¼È“ðË6š^úŸý6-ý¤#œwË×Äïd‰2%>TjN"ÄRÛ}Êu¤±Œßå;tæ´æïºU’QΕ%oYúp‹ÍºÛyÉ‹.ŸßâoÅnYé¤ &¨ ôÒFÍ Ê*>å˜çKGa_7ÉX—F—doMXºÒW[¥Õ¦×èX6FEŧaÕØ°}¨Ž˜j,c4LÒÔb">°*üº¯èkºÍCÑøpqWÆ2þSÆÛÖšâ#²p™2{(ÇC½±û-`å§Eæ—=),¯pI:./ƒ*œï5Ü\ö‰K´Ö‚цˆ‘O p’sƒÊ¶r× •¥›TâÆ¦ªÙê>›ËÝ©)"k_ˆKüµ¥¥t¡Ÿ] ;LÁg»ò„—«s úLq½&|¨mÑ*º‡xÓ¥ª8æ œÒÛ5¾à#qÅnüÆJ£¿¨ZÁÃL-F¤ÑU¶KXÇ:¡6}páT1Âß/NDóÜâÅZS  …ÈIi |G»ê:Æ×Ù1Âð×OäsñDg LSY ´ÀǶ€Ï¶íF|QÍ ‹ô  »VÀâGIä\È®²T› OlúϨC“¡¡A¿ÝÏSÕs¤w:&ìNlÕV Ò&ž¯Íú‚‘Âgé F9‰{á¶R!Uè›´É&%_øYÚ®&ì0•nøÅ«û-à•ö§Ê5¶m«é¯¶c_¨Ø·õî·«„iñ礕~BˆêÝ.ÆïåªÊ7ûŒv÷ wDÀO6{R°OÜø¡“© äã]hÈ$fתH xÏøH«‹R'SÕÇfæäè+–"žõÄŒÉÑïàƒn,Œºð¬i?iÒŸ½[Óm‘Aväm²a±M 'º 'NXâkë¿ØÀ˜ÒêWµeêí7RÍërAÒëùÜñ‡¿æ1Jïm£œvCQyÑüpQ€ÍÉ\5ïT{‡Û™£¥4% >‘$µ˜áSµT¦…Ç ;tÛ(Ùè†Çv|÷ªñ«‚ýÞ´W%¡`F¤9ØÛV8XlÇ>œP Ìó™b;xKOëw+ÞÍZÙÕ‘¬¦Šn+ÚWÝ¥«Iº·dÂNG‡m¹¢’]Š_fsÿÎÈà센ÃÀ—6–Vqüˆ> ˜¯Ø\9Ö¾P~†èö|`å9¬ª™W¤«3&”Ûû'••­ŠK6ê¿_|-OÌl¶’/YûÜû«¨`¢üŽyåñ©¦)±@K\òa£‰Èš¾ajùj«8ilñj34×ëj¾-<Ëg«k¡Ä™þ©*Šf¿ttŸpÛÙ%•³.AšDüõåFË}ÂÊ­'<9ïBÏú ô`LjhIìº^~{k°[>wÁlõô¿’f4”[5t·ƒ*Þ1®µ®tÅGü*|“Ç"Îv¿¬3u‘Ñ}µ…ᥠ˜` ±²¥¬uº,Ù´ \§ùm9tóN=‹ž´qiµ˜¾`¨KùrêàúG1<{Ÿ: ¹JŽÓX¥~RäP>(K›Ï˜­üÕR Ý~«lž5bñp\;Hto6HµÇ*¯8¬³+¶²ÐQ7xÑbNÍ}q¸¦ÔH®8ªÞ =t?‹óëÃüñµ0ërø`lÑÀÕÅÏF§¥ºÑ˦Á…ý­3Ãv^Cî»Ù H‘~у<¸í{`5á@˜O·©t'•|<¨Ï8†.¸d«ñCGµ5 ¥)œ|6{î: ¬~¢U’ú-]nwx ëŽvÛ…YÍ„Ñб¶¡xž.–\ó­U9¦Ørä+2$ǘ‡Y¿V£".HáG‹“ Py;ˆ¿VŽ”Eh.;ÏÇê²q¼t´¢ý45Üv(¼––©ßä{\–•_2Ké!«¶nÒqâQõ$\–ªÆHIªâ7:lÇtåË/l!**' ŽkJ>µúl¤µÎò>yxÐç7žVΙæ–ã„¿ëQÄùM ]ËZßªŠ³NqÝ7ÑaAã½ôUÏI®ïê‹«há°"xá«–-y˜Bˆ_*4ì]oÙÁS‘7/¤›}j¾Y]SÚlrH©€JÙÍN¾œ¢jÖ>áê ¢mÅ…’Ù ¥¸a·Ó‹Øø{_W=bX&cUj£°Q!&u[.JÖÂ¥!ºÒça`<ÓÓ­½én2¢†ÛûTn0Ä•[Å:께VêºR\Ëô:G·Jx[+&(ŒïpF79õ‹âo¢:(5JU 9øˆÞ+Z¾üõ±‘ÓÜェ²º'¢°VBv£OEÈ£“-¯ZÈi×ÄDy#æ&‰øŠ}¬mËÆ“Y>Ñî±V5¡£!}bó|G=œ‰C™Ö¿)t»ò%Zù”Þq,À®ZÒÊSá©ÊÕ³ùüú°=³» ÓâV,ļ©Ñ–­j¬;¢›ºzià–nëE??Íù>N`7¡¼†/gÇUS· sªËñöõS#Á€ž*+^×7SØÔûEãsYù MŸYz'm®7ö6e G)Gbæ—>B|*­ÒEO½I={X™C½ÁéÓ¼" ΰ߹EÁ`©-YTm?f‚9ð SÓ¯lUDWÒé¦@»Þ-hY´¢jí­^ùUií¢£ {ê e{Å$SD¯(̇VÞ ­÷ªð[o« ΠPOb"ëO>œà%å³î°£mëɶ›ÚV£8Ùg5¾A¡&²b¶Þæ'‡ÕNÅ•:«â\ýÌtžrÝa* š>éMX…“døŒ-{ìN¨»: EŸm_ñj»q~¹F¬¹óÃ~ Tí#†ŠûñË®²´Mî´Eð²£–td#Æ©í·£âw釭ú§4ÄÖËŒ›1¾¬$¤ám˜˜·4Û Ë˜G9üLª£(ÜR%ý5žp¬ËøØ4EÀø•µèŽÞæF»T~Q©M•ì06À?4.¹ÅJRŨªøÑˆ.¥|’«ÍŒÔ€OùÍ}¡‹¶>SÓÓHæC¾ßͳ~4­cœªñŽ1w€Ê–mcÕ9P Ÿ|ôþJ¾xBizܸé#ðŒºÇ¾m»LS6ÌV;vLVƒ^Óìdù^…·ÝÙ¥·6ú®øS=üÕNˆÞòÔ¬}Lü‚š2*â'Æã$²Mƒð±LuȱíÑ©ùB>3ñZá[l­vÝgì’ñqm‹±­DmqÆ7øI¥‹³Á@—­U:KwdÅÕJ›–£?Üù,íÁ 2ù¥ c–TºZ1eUÖ6Óu>Ùâ£Tés ÏSù¼«­”6Ëp¥Æ˜‰¥ôã³ûTÕ˜¹ûÌ5’TÙZJ¹µÖxG»)†58ƒÌ‘åh[héÊL¶âPE6öm!É$çýüÕV*³-_±ÿâƒÞ#ã=†!–ë½ òæ‘È‚…1àè1‡VýÄmÓpB:}MZä ûÎ#fü@‡þ*nóRƒE•ÔƒœO­°ozë¥Û~èC.ˆù[|…/Ú$Þô’gRH;ÛVù,bC®ð†·yÚÙÛú¾59¬¶¢£9"<Ñ àx” q0 Š©G+œHð >höS4m²Ê§tCÀ_ -ÞlÝ />³8éwÓP-þq{–ûÚ…ÖX;bƒ»6ŒF•áLY*¨¯TmEy¬§lŒl)ýSÒd>Çè>'šê|C*N‹Ñøƒ4ùå6ˆ°åí§©Áˆ¬½’,íÖÔXÎò¢ÚW1Áçê0Ù$”C ƒuµ¼I®µùæöR*Æ„_Õ“)ã#M@Gÿ4]ÈCê©ëæÐ†Eñ _¶Ð›…Ôèî*”!üØ5nK8j¾ 50¤Á«êUt¹Æ¬E$Sçsú‚æ Œ`Ç~ Á€EõÁŠÙº£ÈüÖ%aÄÐA\Œ±Zl—<ºk¡…·«>¢F®Æ‚ Æ„8H­uE'VR\\AÃÂ3ô•†Sn;U¥VŸª³ÖF«6/Ùf6%ù¥>YiÕmÄÇ@|{þÆqGœ¥ïܱä£<¤½e<ê‚PÆÐ©dÓ®Á_Òo4ß4yøÀ@¨™·È*¡›_Þ)C/²ð—¬cR=eû!ºí[L¼ªçýH+-[JÄc=ªÕûx¶Ýt#~t`x´Uq”m˜È‡¿él1íò öm_’Å/e®SÙ³$õ„˜Þ–•8Ë6:Ó?‰•RóÉDúí·ËÕ×ñ¡â´QÉ`­øHRïíu8Êx­›Ëð’¶cÌÞÄM‡…š÷G‡Û Ä–í“ò•l«ùj†˜¶íЉcùb-¿v–Pg1Õõ;¡*/ú‰e &؆¿æ—‰™JxªAT Ê¥kĹâ圾âoŠíB—JûAm¥QOùXº°Eêe;†khên¶ydØ&œÖBë!"êò‰@JËãv ˆÚL÷šÂÈ’7_ÂG[ØkûìS¡%›þáü”~+°ØëkØ.ÙægŠ©çFMèøH?hvÍ$JwFsë)Žiì7ëR.ºš*뵺¨¶\‹¤<‹µ¤Öæ“…Œ°á®¥e\ZI} ï|ø(XÆBès…ë¶:7Æ­µr“oúP¨Tó¾µãضß^÷¿n&òÛ­çF 4^d›÷Ò–J>zš.ØD°–ç²Ú®Ï-ñ346Öj½óªzµ1Æ´“È…ïf[¹¶¸tDs0ì~v#ªï®‘g¼Š‹–¶-©‚.¢{eÀì…ñ®Yw(þ°uñ‹î6ð°ï¹¡Ù°W¯q]è ˨˵­¾bˆ7‘ŠÁ›|«õ!44°ë_¢lSW&uzdª-K7°”¼ªÁÊo¾!Íô¸ásq5ö»Ž¨¸ìŸ‡zB §NçñM-t ˆd¸"¬«\­Å"?•]'J]|ð^I£sEËBMH`Ö¬dûUokl<Å›;€ñ#èÞäô#~ß ieV]¢¯{êiÃ4û‘¶y/eßÚdдVtKƱ¢y½sEÞq4·jK’¢»zÌ&KaStŽ|=+t4äýYc-ÝÈ2oq)1ꘫäî Äñ=˜2‚Idt¦]Ú×Y Äh‡3 ¯âó] ”#'&ÀIÑQíÁÄôxG*b$qhØ»¨rãO+w T†QØåoí³¹+ Ùz9¶˜kë]½¦ÉOºÚ¢Á}MºÆä>kÆ ØàçO_%M"F_¤¶þM¾o¦ê sI¾¾“Ý2T¤®‡6®˜­º©sü†^¶Óhº|È×Õ6}VŽš—+~¡­ž¹ŽM3Üe±Y夞bÂn_ûOW BÆŽ3;¸,[|t,5ã¢]HZ,xG6>ód¶®"3ƹâ’+ÿ/m¡Çë… ÜÈ–-ÑDãt§vÎó&Øè¶„%—¡¹5æW«íê㓵ÂÎ.ô´¾ß&bSìÃú¶…ç tá—ôàQ½³Dù¬æj›jô<éζ Þõƒ#i>H{Ûó×*5Ãh¡ŸP“Ó§yʬ¤hŒKhÄLœgÏ®»Óñ‘û«ðû•ªÿUU•ƒ—Ä4ØVé®Â@³;ê »:+ùéHzMeSxõ)»±ÌØH)W[ÂE§¾Ø–ô5I‹èñüí½åK÷ÊO™±¦ä¡ÄTâµ>çùˆòÕÖj/’5÷ŠC¼üžÊ6_Gå±Q.q¤+«ÜåŦú€úÉvZç„&©Cé8ÊDï #Ù ¶ðeÀeôÊz¾*Þ²®Þ7€)j#ƒâJm>»î"‚z‹wPE•^–ï©Éçf?€_+ñqÝ’¥·[ù¡mæÞsÚ̲Ö¾”ó‰íšëŠJ]Ú Í(9ecºðïdŒ§e•‡#zjíWínT¯xtÞöºäÜéÈø3 ܯ”%Îô±ÔŒøÄ;>£7íþ¢…?tüÖ!6‹–%ꔚ*høÛ!u ,ŠpâD¨Ä¢À­c« ¯û:NT¿i°À]öà;¬t¸ ìÚã×4åk`s"ÎŒ@T{Q³&ý35ó¸~¨üT!Ôc#xÖÆ]´Ù§&µÆÑJ[¼h1$ýëÅ£ji€,.cÞ•ŒzáSjX»´üØÜ%K eÓ Šñ˜ñSÈí¯œ«82Ø©Ed×%?Š•µ°)°U¼¡±íŒeغà1Nnù­‹°Ä $áux/îc~êK.†V²4R0Qiݳ…gy¡|À^êÖ¢ÛF7?Zƒ÷ísƈ¾Ñ õæ¨1n~Š<àßÀG¥Âš1kºˆÉqrULÂ1’Aφ,“BÃ0œ‰î£zô‹Ún[¶HnÕc§ôW½i*@£ýª ?“ˆ5íÜrâÏä´™È>rñ‚\µ[-ä‘=uf}iO §_4ÇÚÑãZ `Pš‘_u…gõ;¶ËsûmRƒ>{–@Ôª”1̯ÚQv ïÂ#¶‰ƒ/¬ÐÉ¢ðçXœæÓØÅ¯øt”‹ZÆE‹Óö 6šËÑ_¤]—qh¼ÎÛ°Íú>•V…giáÅ6Ì´Õ{O8é¿Ø’°ô–,Ç꟫¥ÖOíx‚‹«Ce×Ü=EmT¿(?à/yð€ô§bÞíšTï }ªä)g>hÆÌ÷ETÖoÍU¦êÃôR:qw7°uåZ‡ŸÞæÚâZí‚ Imã2°Õý4ÕLþ/À)5çjŸ;UƤi5‹lÚž˜±Vþ†7s yDÊ—õîîÛÒOÆÀ6WþŠ;q¤O‘§o10&7ç¡OôIÀÿ A™ô ì–¡ð¦>>•/…¡}–<¶ø¡<â'í®åÉ#_¼ð ç,×¶)ÓЬJ¶ïåG5mÍwÛ†Á¶£ 9ô¹­ ‘ðÓóThTuŒÐ-Œì‡yí–)õTü®©èn›ÎýöKuR-?²šƒÍñÝú£mõSºP³a§ÊKÿcVôpÍQ±ïO"O²VéõR¿­ÛJìFæx’´èóúJ«6c&–f«é"6Ρ¦¼¦@"åK—ËÔtÇÔ„‰Åº¤=~G!ÿÊ.ЧÀ’?ýô¸¥Z%êá7—x™kœšmè祒^u!Ï/ºJŸ«¤³ôY—èb°_¶šï«æU7u¯˜14Ø1M,ØÁkð¦a1©ü¢d]­ž¼ÈuÞ3ÒŒƒÓÆ$¸ÂO=sÄkú® êÆ˜F‹Ž47hÚR‰£H|†6¡»…Á$¤rjAç¿)€UhÜ"½êr'£üCÉS6XYË㎥#°ÒN2¿²°ó×tR ;@¶Ÿí¨Ct Gê*•Õ²g¥è¬XÌ€Vþp ,"UqùD2œlâ·=‰ºv.5ø]Í}ëm*±²s,”—m' %ÚJ°š·lúí «ôÒv¢ëV‰ÑolV™¼ÇN‹ —ËY«€ÐÕAOkw d?6“Ê]8~š>²5ÝÁþÒÞä‡~²…‡ä‰]˜»pê: Jüí.®¬–+L¬­¹}e­«Ë79pJÂÏ,¼);Ê"•4}¬Ò†ÝVIm²Ð‘¯Ípso*iÇA˜˜÷Ÿõ­ØvÓ]Btòc@-ƒþl‡Rð¬#ü«V—¤Çº)3¤ØTyì!†$¼.â]q)íKÙ\&`¥%g[ÛQ_^Û v c/óÑõ$äêfå‘3Œµ¦rOUÄBdÃk%H=)—nW!PlpaG=ŽF|ˆÐÃOa蘑oŽ¢ÜÀ´'Ñø!Õ®R…õuºJª w4D·lváð˜ZŒ>« –òÓ€6‚}*ù&†/cªÒÊ»%3±÷NdkTö2g®šˆ‹qæK1ºZº8ú¯å1ƒB·SÓ\˜÷ØÌ„’(UN Õ\nÝn‹0ÂçøLd}Š‘¦h8 q˜­1#‹mºš]‹Žzš]õx‘Â;¨o6cÛ¥®’㢜Ô«›Í/Ì séÃ)‹ŽfÁÄ6g–ɈÚçá>:®ºhX¡PM”;ж7 ñÁÁg~ØC+꘬Ûz" Å—…¶š²hé´WVÖÅ5FLÅvË£Ñ'V_+’æ{:j¥Ã¶bÌ1RÕ¢&>z/{3M÷{,S0"Óp5aá^º(·[îF¢ËlÝü4Ýï~w t†kåmqŒ8EWr0 fãäa_"ŒßØ­ï¬èã„‘Å øU_˜&Aœ«E10=µ óÉœ½ìÊÆ GqyƒÔU¾¶w9*Ƀ)©ûáÒX†»n“^­(Ï«Š>>ǘ!†mëÿI±'Â3>cÞøwæVOYYhÕÌ‹oª‹ñÊs„Z¶ñ©íô³kaà¾^ ÁÆï’H}*¥…/¾ˆß®â›lVüÁ=¥|Ž‹Ã+EO È$Pçš=h —^€/™_°HâÓ>à÷ cšý‚)¼p;ׄWp‚ßw®Ú #òâWÛà:ìKΪÂP^JOµ3ü•bƒOý5~ÛRÇ1êô{‘"ïk0 ËÇUĘwy¨Ã¯ª‹.ß_ÀœÉh/©ðóÙ¨ÉuLR[suù9HËXs00V]Ø2Dô úÞJ¯òîW!š'ó£éºŒ/Û§ÈZdH¢Aö¼ØÊÉ~©íFŒ,‡¨ÛJzõ¤=¢]kÓ_h5¿ñ%Œ¿hî è+ºÈqJ‡ŒªÒ_#¾ð¬¨*Fðnž =ƒÑ OçS=]RÌÖmùxÛXH•Èfêcþp¯~ÆÓò·šNoG’&üôoS5åškKÎmã¾o©Oì9ÚoU:6)p®P8¤Žt<6>±T:{HÑh>²±eŽQuõ®µXÒ¬9•§é%ÛcPÔÁ/ë’tn88:ÓQµò¡1 ‘³ŒX™î)sžŒéæ€k#oƒ=,½TsÎ k}•ÃÛz kÛûcÓÓ<QRaª*Dô×SâèªÏÖtœâw”¦´i[AtM英^âkûèbhn)''ºñ{³]£ßufå|Øü’V¯Í‡f<°®‚X|“§ð-™Îœ†<1ég•)®Ë{<ä =æõûÔj ‚ñŸb¨í„ÃduF{îöJ¾cß=I²RÕ°‚«Û«Q•w«4ÖØ·XjÜ)7:±v»lÊÕÑBÙCnQÐÀ´nlf€Ä2ŸÕQð7)WGñö Kƺý´÷ÕùÐZÊü„›êxéheŒV}mâPÄP»œÓ{ñ=%«Å˜IwÔmÛ±ñЦå—õQâÏLÙÞ霴Z?Pøñ»YqJrÄÑø³XaúoVµæèQp ²æ¶_\/îˆZí¨L";à˜K.}.~!f¡›ú¶ôÚ+øÒ“&•;¾#©ÅÙx¶¶ O(d™èðƒú¤Ñ·õ¤:-³ÁK[{â }ìƒhËŒv|b8;nÑÚˆCÂRyN{î]ÝhžüÀUäò ;à<⟞B”NӹĈ¾µÁâ÷Ot”>=—øBVeÚfoÝ×$+_d̶›âEü¢`uÄONÖcò¶•VE|¹€Æ‹ôçoŒuÝpø7Gt:fìÈòü‘R’,ïG´òاÒWéËMN1'5kò»µD«O¥`;îuY°Ù6ðTüæ·S­½”§è±Q‰­d42Ö­“iÚ%¸#3 ’k›#㪾½ÔX«rcL#S‹2”JMÑÍ]´%÷1ô*Œ·Ëµ¼Ç‰)íCbçά²ˆU ÝÁ¸j"ÓT·þ”¯:.•å>О|áÒèJÜÄUî9qÈ×cÇVŪ>U}Äÿ±˜ˆ‚Oé…—m´‡íëèÿ­Ô„áw»ˆÏ?Äe…089èíO]Úæý2 Æóר’¨çŸS(T’Ý!¬F-¹ß´<žø¦a¯H¦O•Tb€T6¨IJ4Ê7;©ÏgÑ(§Cl‚i·²±àÑêÆ—C>ÑWe\)ÈlǪ¢ÏêÊ:¹X¨ú²¸TvÌm¯QE¦täé5.Á¯yîLÆQp!®fWÇîcé–ª·`Àì±ãÌ|‹+êS~ÿAº¬'uÆËE -s:Rc«¢ÓÕò‰Ú‘?çN«–GI6w8Dsªês­mrb´HÃ+zA[Ìøð;y°<Æ$Îfܨ8Ÿ Ç(öÂwÕ+yéåG‹™.oçÚè(Þ~žh¾a¹buÜÈè3ö¡ª&•F?ø#&ÈÁPyë®–Š~n²ZŸµ•nÄv–àV ²Rñ‘/¿«}©;Œt¨ tüø5F“¤öN ÄÜ÷Ъ0É@ÌD·†ËI§7 nO ˜™É í¾‹¯ªôy;‡¤Ð›Å ­“·YѼ&wÚÖØÔòÝó•ìòØÒeâè“„íBY;qÉ ƒï5éhØåu¿¹$E.ð±f:!B¶EÌÑàwFZì‚aa2Úꓽ…ãKéF[] TÔeB ¯å›-ëÅ¡r$ÞQ˜RbjÙ匰‹/«ÝjgxŒ'²ú%þuO7ØáG°Goâ Þ(7½¶Y¿ëâ&ý€—c±‹»L’ZðºlæFƒ.ÝÜ)u\.jìª?Ò'›üÚîXáEû#hĈ ´ù{è &¦­×ý“ YlÈÈåD½2Ë]~FÝ’tߎKëd¶ýžQù).ùƒAô[¯²ÐXDõq¤ 0káŠ*z+Ë@Ú‘¬kT™½ÄI+Ý×E! ›HKðö²ò±]´>YÌ:ºýJ~5o›ãxGÄȵ@ʧRUý-˜Äçà%ÛjŸô›LðÈx¯4ý¦¥³åƒÊè.Y»ÔÊÅ›ž‚^âj8Ÿ¹>û!~ñW{¾í·ÄÔŒ71Z_“—ñ˜Aµ’ñtŸÕ{Iñ½Ùjìp¿€WÇ›­¨Ä©Ÿž†,u5fñ×¼ö+ÜUF~› ö[GÚ‚ºÂÏtÊÝ6ã½½C»ã¨¬ñyÌ«4ÚBû›ê È»,ÌËé“P’*fÚG{ÿ¥+ú3#Yz9Íõ=Ž`F]XËîí: žòEÊåÍŠ%´õ¢¬éˆÙö(k[†7 ß­QÖ¤XÃχªÞ\I“âç/˜D¶5âä|¥ÍcŒ¾ŽT(! =yx ƒ´ÕzƒŽø±zÝP°é ’·5޶ÝðöÙÑ4~";–a#ùœÀ@¼*¯~£?ð‘BS”²7ïï˜9-þÔDf»¿ZÒ Ÿ‘×q¡[4â&!O™? ü¥»x oäR—l+ÂÒ#º8¦O”|ìá{ùµþ_tÙv¨Îã¶ÀÀna¦R pÉtåŠ é¨Þˆ¨qVzËï*#ÝÕ‡¤¡a@}ñ‹†?2ÔÍókÃŒ‰:vÊVñ‡CŒþ /㎖¹‰eEÖÑuA§ ~!Ó£þÿ©;·×mdÉ·ÝçüÿïNû2±â@ÚžyH™™AR¢ªðUßéÏv~á±:|-¿æ¢s˜ã”ìð^BÕ‡lùôq—÷MG@ÿáòSo@H–GÒ9÷Pß %¥I ÚS«ž yYåØgà°HQ›ŸZÁôµço¤+X QùXlOWfX€VÑ€ ëÃmðPX<ö+u˶úh>Í8üÚÎ7º›H³Ãrâ[Y={mÛaû¾sE}Åu«ÑbÞ>A9µé·Öá_‘»j3kÜQ">JXª¯n†…Ì9ÔQôåËæŸ³¡j…œl^ж½o8ÂÔóñ£l—ÃxÛ6ü‚…㱓%un (Ý­:«jVîìJ…9uf\óƒ%ÊÀ´Z´õëîÈ’£;Öc5ðsá¹9g C`\ºò„ÒÞ8Úf6_ß¨Ü ™€ê¾˜ñ2 µpflN<©Ó•b°ú^ŸÔQ@W†©Þ-rB ËGÿ•ÈH6¸/ªÕztÚqþoá2Ï”Õw{ÒÂ.ùCuÚä:¸ñü–­À_¿G@Û´²OB¯œ4ÄsåØY¬ÞúÞ>I7öŸ[ôg+I9Ì·£^=ûñuG@pA·÷«´ì:›ËÐ^±G5¤Pzœ¯P'× ´NÌg%Q¿p*“»¦ÏpÕq./Î…ê Ó¹^0G–ý"Fžy}¤o[Ö·`g ³Ë“•1ز ¸üPعݽ‘,¾:ÖkŸõ’”`„:.«¨Ûëƒ@šØGuš‡ƒ¡ïWi‚ã>í}Ž½Æø5"áòâ§WCw³ÉÃ7¨ ‹”—1è”Ú©b^Û›ã“Ïù6Ô䔸Jc'l5®N8\‹[3D›ŽG'n!€ìhâ"˜Õ?qFë•ý‘±Cw½Ë‰¬‘ ­”³›Cë«´ëä[âð okŸüG6„ M³e›“Cúú înìf“9Ô¿‹oþ|5Œ÷ÉÇzü{nìú»o˦ÍdäÒ1ÏâYቫÿèî§Þ€Àtw>Ùªí°Ï±ä'­³‰ÁóJaS™Šö‘¶ Z2àå—´}RÕ»·›¸þ´ÀGIõ5 [Æ™ïð*»¨æ ’m&‹düT¥;,³ÖÅw0©Ù0:´=뇶KT-óÁÁ›«¿s9A ¯5ôÆ[2Û«oÝ[`ð³Iê:¢ì]•-¡ve1OUÀ²íy¤ÅÝgÂG7wüÓ‡˜¹Øžúò^dæ^ù·?_òÚqô!‹•[5DL;ï´%ÙnF"UŒ›dÎïôò.›Y0Œ$ÁMoò©DÚã)U~ÒùìxWø-Ìǽ“@<ÎÙw>9yÕwA á^m¬.g~ã±ÍãñÆ­×sò£þ—Šd~ÇO%jÞ±ò%‰u—y„½ñ¬+fŠÉ_Ü{|óé’ÇRüòN ô›¤Oj‹¿r†¸ãT…´á½íϨJ—ceß7AÅùS\q>'Ì‹M~¡x;×£›¸¨«SfïwnP£V²±7>.ÈÁúÉ)8Ú˜×GÂé¯dY,ŸüòØßò‡-c“µ%þ3öÅnîíK½<[½‚½' 8z%†rSOôSì }ê[µèðXDÛë¥tßiDKòä><ÍU¾(öÃÞ­¯Íq%¦®ËŸüøÝ?9À&qÀñ©J~Ìl6·X§4;8n,±êXÍÔà¹#èn,¨{íàSôôò§)®©âO|Á@ãýpÁ•qñoy¸™B\»ÊS;)ÒÞ«K[E––ÛãÔQ®-^×ÎÍ9fžG´ö¸òµ/¶;Ø„èòù‹Ö 'h¸ÈŒë‰5Ì{-ÍÏÅÔ®6º ’ü$æì:,à‘˜Øg,ÜAÓvÙ1Ž7f£É4Qàçæ×ú8iY-žÒ¹õNoL³Q÷GYœöëGœT^y\;à `Çcõ}/Æù"/Õ0…âÏÙ‘?1Ú‘lý×.Ó¨/£äš,Ï“x†Çõ'?æD%ÿá<ñιr¹1-Ê¿[bTþ<Ö¶£ÞÔö¹¡1Ðý—>éšÇJNÞ|WÕñ¢yÏW×÷ÕÑQ”œqÇ?¹%8¾sƒd¼*5‡3,—I óÆH®¹¢€K ÑF—˜Ïy>Jÿøö§ß€ÉÉ…ü ™G2ò\<&>.Þ’Ô¨ï?C"傌䜂U÷cB1õÖ¹àG?$‘Ù%ñ÷±¦€µI삞ôJ-“\:pÆÓrõû9ºÊЉ%µÏbê:òúÀ‘9ë`KFßß”€SŠPnõèù¤æþØW™èGàP®¯D&…Æókïœ]_äÚ9šÁoò¸5¸Ý;2š[öòCnœ IJa¼2~ä‚üž/ùøEñTr|‚õë¯|ìI-¸Óéß¿þÛ6ÔùH”9³sz÷F2ˆyò@,$ãµýñ7ü¯xŽöyxÍ(†‘ ¬Î[³v¹JŒñÌÇÛÑÅàs^ˆ‰lÀc‘ HÆ+¶6Oî† V.ªð’¹¶b_Æ—îyÏ\äϰÚL@œ…—ó-~ìß›2ÔîF[Ç´oâ ¦]ï]ŒhýóÝ ¯šCc½€§_Úç28hÛûfÊR5e›õ%ÐÉ_êÄr`7lò«­ë›¯mÒi›ùß±€]âF39ñ»K43 ?ܤÂÿ»xdeÎ~œ×ú~Æccµu6Ätæño|™#ð2oâ—þÞiÅ>™5‘f-Aòb¿s(7´oÌRŒâG\~×ÿâpëIJ,%ãµñÀÄß7RÒ&lƒ{|åV)rtñë6¿ï±` &$±@™8”Ÿß­}±^^¶‰6êáÞçàm¯ iOѱÀ|µæ8‡It¤(ÿæ£òg>ÃWß¾ºB¼á*晜aK99¬müs “8ÝU‹Œ%ŒÃ±XÈpâ{`dí?ê’íÿ¿Ø‚æ,âðØ9…w>C~3Oˆ'9á¦,>ñª:ŠÆÃ`²p‚ËÆÃöÚxT?¢›ã%yšüñ›m«6¥»4ÆÅ‚W¿VÒI,ŠK¾Ëª6È”ƒ8ðr yó¢:O‡uó|àl*ÓÆø–¤|œ“ºA?~]“MŠ‘ ÖÆZˆÚ¿2Îÿ‡9ÈŸž¯_q²?þáí¶ô9ζ6aëóÀ“£ÅÇ <Ý^»í'çà“3ÉÐ͘šŒc§ýaó¾Qè¸tŒ*™OÕñk¶æ»WÕ/+9sœ¼ ›pì^ûÈ›Ÿüß5ÃXÇ1(nðGÌñ©.ù:eø½1Z?بq,&·(®Üc‹žáF#ùÞpÈó}Wç¹! •7ôÿéòSo@HÓozöMK®ÿ½<ä½ )á Œ4&5~V]M²¹'˜t”Vg„wE,ï€3ürfOаO½Ø?=RšM&ç|ÙwåL4°ß@¾6.Áfþ‚è8Lò†sêhÌvöLŒI‘ñÊEÚ*Ö²Ù"ö$‚yêâì•ÍzÚvVÎ4sÀ¨¢OâpKó.9Û¹¼iÖó¬ób¥ ®í– ¼r`âçð:wœi‹Ôt)‰ÉÂÊnN‡õ·¨&^Uò] ¢ v¾…¤ˆñw¦Ö¹1•,7×WØÜ-1ž±j°/ÏÉ-HŒžœJß9•x‘xcÑožÏeÑ6rFMŠq\ˆ\ÿ6¿RñM’Ôí[*ònÝôUÁ¯yK÷Ï_åWûÄ‘í¹UL~ׂ˅°’?G`6Gaz7>Nd¹E¼œtd¯ÜÀ“ùSLw“Iåb§}ç”´õ“cÁU낽ñðß6πǘ±ˆ3·ßãäl×Ç]¬žéH¹IõØ©‡±!7™s؆[U-ÏxaK~s¼ sfºóÓ©Òrtå—²± ¾¹Žåû‰8ræ?^`P5Á7œñû_x {c ~WUƒ¥½ú±ó8[ãîÎìCr@þHÓÕ7GÆÍ<’ncc,¹Äs˜v¸·å²Ûøà›‚ûø q˜ì‡±1O9m õ`Ñ…ÇUž¿âitõ}Ï1ë—ÇwîW<ˆ'ÏØ Ÿ²¾ä0Ôs¦¯yðB:ºs­>nä—ê`«C…IÁ/£…߇7:ãAݶ߭åÃôdŒl(ÛËØöƒ0XÃvJdÄÿµ¡>¼Ù3(´©#OOêà]ËÇt“ƒc+ [Þ Û_Vr'}åécVí¬¡‘‚1_ôŒë™#ŽY<¸†.e¶W_Úi¿è w\>mïñŽÜ~Šñâ:fuHÛ>†µO ܶ¼1øxÒÖœqyd7 `c;ìñvŠíùÇe΃eÊÇc"äçž³ø£Iê§tÖ-µí»ùvKuû…q‚žé7–qWMíä{<Áâg¾¸îåû©;æ†7’4Áû–ý!kËåËÌ$Þ­Óû§÷?õ„ðŒ8y^Ù©¹1ßXÔçO!Ø“4½VÖö»+ž¯‘ù_|¯fû›Ä ¤R¸øè¦…?íwÉÌ‘¯âÃ<¨ÆÔØj¹„ã#TשׁÀM{¨ÅïS²säì}È-©ðìâƒåŶ›HË ꌦ««äî«8¶T{s9ýÑ'BŠä êgÂm¯ïØ×—489¬Ä¶ºðP±o#M‡»½ëzJi\ð^­¦:^³¥2cú(èëg¾Cä)Ž£dÌ#†µŽ-Ú?ÞèÆ6:J€~µ·Zºb¥rYß]pˆccqýôD0îOè²ôtü¨d!ÐY*éU£öàoäP w,ã¯Sª^Ó·ø‚”!ø¸›#4ê³`Ç‚¶ã•Ûp°mƒÝùÔhëwc«*s%‚dåöØ›»l Fܰ®œüà ¬£þ]ܧîhRÞ<ôí ô/Ó›¥Hæw-bXÒêù@¨ízFêrwüÐaé’IÈ›Óçöõq?ŸPÇÆ–ªì†á‡°Ð0¸Amq6t•ÓéCŸ¹ÆŽ‚Ž ý© ¶“]~3ìO[Wr^õ(Z&Iƒž/ëhÛjºM°ÖÆßT¥pl˦|+'^]œöi¦;Mm‹v@ÁB˜3ر=j§bF<,Íâõl9y|cuúï:!Èem[oFÐ<÷Ë :‰C™QÕ¶u¢C™ݨýœ9_4J¨^|ÃÁ8VÎùÿÆ%]û –§z¼]\áM~ùÔ­­$ûs ÆRûŠ^hTбWŒ’ÚgÌbä-ÌÌLØmÿʨSŠkÝ·ãµ±§tÆV–c¾dÛ>˜%M™»çln™3àêEë°YdÕ·$B$P6ދ㨂!XKõ³k»Ø?ën¤HQ¡úb‹h×wPå¸UOôµEí×Ó.g; çz¥2<1¨>ùE#[Ú7ã¬Ì*†‚<%Ó?±?X¶·-~%z)õXùz·ŸøNþf:Ï€ÒÇ)glðïê éÝÝúž©ðÄQ€¹‹k zî]àèÍäÁ™T’3DNÉÂYò¤db’4ü½` ¿IKî‚—ÁFƪïß3ÿÔ5§Ž2-à=ÊÍl@UP£>_™díD~x %k>?›±z(>ØR=xîWkX> ‚“pyíÎÖt¯‚=»œ eaÛp‰<Õdk\w2~`W†þ:ÛñåwÅßçeŒáM?-9méš¼«m×åiÑŽ®wPi›üñºïdñøå—þ1HÈØ´¾ÈïÚ¬‡¸ÿb£‚ KëÛ×+­måļ|c{Æš¬û°µ1•êòP.óõý¸×ÕqϺµ}h«Š,ÌÑñüÙç1eŸÏ»)Íçâ€Wþ~»Œ*¬ç“5æœLì *Îgˆ%#^>÷â›08Ö3ŠŽÞå[öÎÉEv …-ÒZµ>ï.+^Ï|DcmêY1ûº¼‚ûÑæ£uŠø9à´¯ŒÓŠæÏ=¦£ä±ð_ÊC6ÃìÑõ¼XD§]¹0/õIþÆ¡–óm’}Ϲ›[™¢‹ŸÆ`]§€xè§QR5£3ÇàEÁ¶º¬–ׯÅlV·îOH;ÎA*Éi{-© ¯Eø;®ÞÆ#f]£/½`÷XOëE…ªiS¶¼iØ Bõ{-QljÙÄ"¸ó”úâ;«rî©=®èûz  ‹¶ÙÂæÁòÀyŽÇ êÊ`æq;ÄFvù™˜Ò¶ØGÑ$Ø ýæo:I~äÀÐG7j§‰Yú!gç°ºÙÁg·+‘ã'Ú˜bßV9mÎBåêí–ÔX§R‹¶s"÷½Ä1_²Uçø7útþ=‹Éhš_qt´¶jÑïý€õÄ‹†ç7ÉÈvª“ê>o¶ŽÔ!”G´¯.íïq l€“[Î^`ö×ÞΞþ:£æz³˜¶=©j,k‡Nc›î∜ªÝÆ ë`*²¾Íj‹tË-Œý÷×{a„E=ØŸÛóI©ÚæFU¯åﺠN?ØŽMm?"§<†¶ MùÈ0$Ù"ØîçϾqSZ/\ _‡Ë ²8Ëÿ0øU•û¥v…ñ¯ßÌ<ßI¸Êª6ÿ¥gžv€¡ Àɽ›±›o.tα/x?sŽÌQÀ¥ã>/ß”9Á´?mŒ­-:¯oˤIäÓçéÓž¾¯/õX!<ìY¢Ž’ÛÀàÓsÕÜšóú²¼õW/d;=u|ËÍKX%¦X,hógŠY£¹hÆ"X[LËåÿæ›üñ=_ð šÅž_¹/}Ü9J-L¾ÁB*õå7Ô•¹ÌpGΜÄ/¼éóEAeôÙ§*Ist%ú<޹ˆW.¨…‡/â6÷X§çdóÈ i’]ßrJ‘=˜ûûñÈÿóÇ,Z\á­FQø0ýÎWzd™¸xæ|es™¶ýX@9AL›CêÓmàðÖÆ }zÈ ~(Äe}Õ½†õÆ úw úæÁ¸–H[ùÊìF-ýËù´søÄþ¨î¹aü..ø-÷ä=°éKÁ'`ž¬×íű㰮ýºv|›—ºð³²:=˜$C\/‚Ì#çp<}Üb'Ký8ŽúEo6à‹ï¦FÅ®,b­ï—eNì8 æxHC•å/õlÉó°Ø˜Ú—d»Ž Ç ù¼È¦€~°¼’£½(ž]äÂ…¢™|Åœ¾åü/'§®*È~áO‰‚«eçŽûüàËù—®ç»Q2Gè?ó„S9ØçBW’íClvΙ>~|n”*çòƒ–KÆyzñŒ{"ŠŸ“ù¢ž5üåWæ ºŠ‰<Æ‘ÜX„‚Ú+øú~£kúò,©&˜L°Åì=¦‡Áþ“‡H¿ß9q.C¯Î÷ŽSd/1z<´§Ùœ<çY[Ñá>xòË–—™HÆëŒ…j“b‡.¾Ü§¶ï œ¢Xاx`^Î ñ@›uÅ7r’R6/e¬b™\Ê‹}F÷Çýµ٪²üÀí^.’`°En†_Ø[/À†7bðù]Á6?`Ô7{Âmqµ±%¶èdìrýT‰sç/Ì£K?J(DWµúŽí¸'ç>^A¥Ÿ–s'€þÌòSo@â·_ûa‚“@Og’DqRMj›uíx'„¶l.¯*šD$H›6`/yd“בyT]µáÀ;XÓ8Xòk^âˤ3m°9ÉÕØï©~åúVlÇÌE‡±ˆ«g·ÚgAè` ›rc–•ºÖF÷_¿æÆÌàe‹mrÐ'óMuŠojUå8Áçç\§Ïjg7véýŒËogÔ€q§<1'‚}sðb½9³p–Ï¿¶‘ùœCE%Qd›žÄ½9ˆ-¯ålX¶}dáÉÚý9¶ô‡gÇF<‡\2ŽSõñ˜Ÿp{üÂBþ¶F¢Ç!l’œ9³œø]nn”Zˆ!éˆÃé¦çñ%?”ac+ª±'fär ÅòÖ‡}šàp@¹c¸ÌÁŒ+7‡~í㣉ÝGÕµôQ#ŸÜ´>P®§s+ŰÈÛý;W>óéyиí·8¥æ®±k åÁƒ\E|BV?)ìYl6îóz}a6[ÖO±È¶ð\ ÎŽ“‚`I9<Þ×uQÇèÕ1k) bËõX´ÔãN{†¶šÄLéVvó–f=ô™#¼ù©~×€¡0¨&*™¬æ‰mx7ŽòHŽ®í›Ï“‡’ƒÃïþoaWÿŸ®=§ÛZx Ú'R* fq²]F3¨ªMÜ‘6”ì1NûX¹kÒ#ŒRe9ªdqÄáåHÚ‰è]Œ€g^n±¹<ÜJG`íl“0¾¾í„•˰r“‡Â"ÉâL›ùgZÏØz=–ÌrÅs·ú¶*¶wÍXte>²"–WT1ìOqhŸòÚGwóÿU‚¹ãα`½è¶U¼»?nU‰^¹yâb™Þ›/úì«<ßzôA”ð‘û/ÆÕ.9ñÖê7¿àaÇ]Øe†çY?Œ§Í3ŽÖ?~ƒælíK­Ì•öz‡R²ZsŸ<êŒwØ“O!aê—¨<¾_[üî ¤õÛ-Æõ”qVãéBä¦qk¡~6ÞgoœX b­ÍÏÃñe?¢Æ´¸þÈG}wz¾êñ¥¾a[Là-Tãa}ÛK¡²£ëü÷&¹~á’Øç‡¡Î¾y!'< .´ çfÛøgW?;Ò¶8mG†´×G.Ll.©ünŽ-BÄAÒöØ÷r¹šÈvÃlÚ3ó4êÛùD¦ïØJý‡céŲ~-¿Ì*ã × Š|xLî™T~ôq> ¦ÉCV-éà%eûÛœ~Ô*—oÇšN)«ãáSë «ŽøA Ú;KÐc?ùÑ1Ì#Æê3oÜyŒ'áß"1çóÏØ ˜‚¯·µþq£ù)? ’_/àG¿›Ñ&×½Ù‘>ûr=îK÷xCœîüØ\„êJÚÓFìÿÎèáÿ­ñSo@É4(ð÷‚Å¡z†ãM¡ì„”C))\Lo²võ&ö” œú¹ßÆD‹`?*³¢Ú{÷°`Gbc,Ÿ_yZ÷Sg-ãŸÓ¡´7x ¼ðw·éˆé£„‹¢èÉ79a¢ENÞ½:ʲ@åôò§òŒå|J–³²$HåÝÕ‡WeäÏ šøºÆX"=¾œ¿ßøÃQÆèÊÏ›ÿÅiåÂ#|ÞJ)G‡do–M•å2-_,ì9Œ<0G}è591#¿MŸÄñI˜Ô-Û³rr iذ­ûš#Õ)¯~zîöÈÊ5<ìØJA¾ú®•è©qÿù>>ùé‚DŽÂ«Ô¶XEv¥óp£HÏ7{æ¤Íù²<èþïZGÞ­‰kŽã¼[­ØÊëF)›|‰sº¹‚íø«‚¹ÔãË\ÔÇ'ŽÔ^ér™ã, NFæ9F¿ýä±@¡}ÇÒuû½¥p©Wï9ÅXpÌ©ÝO;¶ Šseœ7ßùhñž‡fR&ñQþõ_û_ä/¼+Î#j\Î̉˓ÅÇïhìÌÖ9éB)ìï-ð½.YŸd$þh¸Éú~fv}b nSCSÆv–.0ØòÅ(PÿMÿ¯DZÖ16صlAÚGöIåO…æ8®¢—Pú3?ƒ×1–§\äã&~ÎüôØ(¯WÏæ{DqÄôüSÇàaq¯)3ÇT¸¡ Öå^]7k¿nñ¸[5F ¦d„±0j]tãÇÛóÿ^ÀúE“Îó—±b~YªMæ¤ãRë?òŒ=€ä„± .fqз¹A®/_y€JAæ9'ùr‰…æÄãžá®|Ê/¸äÈ‘Š ãö;Â&áúÙ#sb"z}Θ°\à)½œtäIX¾°”~tUqL4ÁöqªyÊ‹‚ëimu,Ù¼ÓX3›ÍoZ»ƒ0¼Û0¸‹Å–¦\ç]ù±Ð¥xKÄýMãgöö»lY¡”æQÐh˜+Rl&`8?²õE³ÆlÇ“ãˆ/nÒÆTûÙ£%Ø;ææ€8ùîÖ >™Ã{u¼çÊŒ½À<~ö%{M#cå9D6PËÜÆ×â°}ÿ¦ïö9 8êuÞ³¢æD.}$½Ì!Éô‚7{2ENÎÔŽm%ÜEú‰±yÄÖ®ˆ‰‚úêé9Ûø‰‡cgiúv‘E×åˆû>ÒFþ…íù¬êÁûòǸE·²wüÛ‹ú†Í¸€u¦¤l°›Üû°†ƒ 1úÝxYÛ:XN~ ®yä'‘ƒ‡Ÿ³ÞJ?â…·üpèë….þôãº+{þÃG‚s‚¸Ìárpuó~xÁÎüÎÏß>Z¬­½/^DäŸá îâ¯'Ö‡eç #‚KtìNøç‹uÉç<Ä21oµØ&A>~Qq›Jsøgî ñh¼uÀ‹ð=ÞGŠð’šJfuF‘y0 Ò7æ·™Õ…ã<¨ÉXßùˆþ-¾¾ÇnþÌÉñƒ'¬òþg”ŸzB‚˜0$âMƒO’6|·íìk£dmQ £,ô$kI% > <±l”ÁKæ4B‚P7MéepÛa»ˆÜ/Å—[­¼cñymÍÓtö9‰Ñ:»FÑŽ­„øÐ¯c(±œÀ°,¯¯Ç’êR? „'È‘ú. ìbÂ?ùÔëSð„Ã.reÞøæ†Ëß­¸Åé$æïÍà‡¾5–„–ÇN2õ-ÇÈì©áÆ r)I]òsó†fJâ¾ýíîÄ÷N4 £}q"Z-œ³±?ú73°–’™#'O)Å<Ú¶R9ÿàp~LI}‡‡óîlÝþRb9€OÁ¯÷Ëq3Ô…WµpC_¯ðcDÃ™à”Ÿ|ãWc¢/ÊžyœyÁX©ø»'`5fü.‡ÈƒS^ðõ¯%êx,×øwd¥GŽè †¶fˆý[¾Û;¾á¸?š€þ¯äS”'ß<ÊHdAGoè»`?ºÉ :à’ƒðb}úí—ß;'¤27ž¿À-›-Âä×YÅcûÄÇØÇré —ÁžHÇ»Š§×Ŷ…—3²áÉ oåéÇr‰,`·ÇóÄè{gn©Ë¸¬{e6ÖÆB¹`-–»”N#vl߯-sä˜ak{‹&ñb’ˆ¦Æ1\_sÝCaÆÞ)9‡„ ¸vÿð~ÇjS±yA·hÚY_ sþo ²y»sŒÜeÝŒÌ1…ÒÙbk=”œ7Ÿ9F‡û¸ ‹Êv¼à½:àwúðË›RÃ>2óNÖ¢ä,úÉ71šèÊ©‘=—iÇ£¿ïWrÀÅ 1ÉBfÖ±5þô /í}L·-±z‘#¥ÆT&ÐôÛ×dÈ×vŸôhSð!t6Ö·¥y# 6»{Üè;ªèÒ g½7óc4T„upäáÍ?7'þ+Ió'¹£úuN…øÆ¡ÞeGNx‚aRÈX( «x ²oã™,ë€LüjMµkƒËõWæH¢D߸ÝÜ´:q€‹™°9§¾Ç‚ÿJR˜+jÁ_¯ÎѪ˜ãrh?`‚<ùÅQš® ßGü86dóëÉQÐáµ±E<°,U{¼ãK9¯ß8|Çb’©onã¸ÄoêóE0ot§¶lÍñò*^`Ž/`(àð¢8¿Ëõ3ßä€s—¯ƒ«Ø—r/xñkì4wnÒ¬÷Ïo~ê Èè2¼*9q4nòÚ¤IpVHÎÚÒ` o¶žÄ©ÊdÐË“À¸FÌÆ9Nb—pNL/ÀI¸{Ãm`z’µcNÓ(lH·?mŽ%wƒ=Q­„óµ[ŒC\ÈèÑ7[‡ ž½[ Þ¿ëç¥~°eº±'¿·øÙ`û."q~‘Ôæ†ú_ YîŽÔTµÔœµÊÔéZtàn+ðÀÍïÞ•{ãÅø£¹üùùNªöИ·ø‰´jÏîd$ØÆ´øoÛÌBÊÍ\u³“àd`—Ø00N '@æ\mÍ•8Æ8û ©öx±?7pqá£æ[ƒJùeŠfËñœùºcO-+E“íNÖÔÉCH~ÚÔØ¤Ž®BÇ€„±’BMÌ’æ9΢eeoÂËzíd,6®^üÚƒ™Åõ….½‰3uÒ•‰ÇE—ÚJ)vj/’Ûîh‚ëŽ%Nl…o¾à€±W™ÌLJò2ÛìK ªÝ gK·~¹XÌý}:ÿò†âGF±wíñߺ$A B[»c›>¶)ã:¬õ+‡ÂÕÍÅ mbãwëõ‰_î+¿ælcVOHåOÙ¶¯]^[OÌê´›ë‹8—¸ø¢Ù¶8ÁC zÔÉPú²ÍÚ¦>ω*wçX‚:ßœžöxÊü%Û1e˃æ‹û¢¬'ó,iúÏÑohmò_ÈË]²0 |협²~Äæ…´À9mÉ}'N xmívKºÃ²|Z}YØW: KŸ^oÁ$N¯Œ.~ÏØDéØ:Ÿ˜©M¨øªóׇ±$;z6ÒÏE²ñDs:©¤5'G†Oó!®OöÑ¡k¨9öÆNnË ß…ºL wƒtÌ9éi]k…£«¶} õÅÜ3L¾-Mw1c¦m¯ýæ8¡îay3 ô€HÙ~WUÃ>Umë3‘­·ŠÅ÷‡b•à¢q¸f”‹ã¦†å>ÁýÍ!Ta¼9˜|nŽ3ΉÚ>ßu©>O£þ¬‡Á2o°åÿð›XWüPšOLéyåĵ±M~jW¿èzleŠD^?xnŽâ|ñÂû,—1²ãù%¸‚öŽ=¦…w#‘íæ¾Õ±0¯ë‹þä:q˜½ˆø¯AU×y,ãY²aíFÓ*¡â܆dâRò,¼Ø£¾qÄα=Ø™?H¤˜£ÉQÇJ Ë=ùÀ÷Úä7ß!‹3úñº•[ –ë8Ô´"qÈà=ö·oø/ôçÂQ$sNÔçÜižAó+fù¸©ŸÄžÓ¸o¼äq?R3m…Å£$¼ï¨.°8NÇcxì‰É—f’|åïI” }ð›©×õñbnû8òG}I•>kƒ~qíÀ5º|ð(oâHÌȰ`@ôx¬޼ #9v/·ÔA7l‡eÝÆdLmŽmq×ÏÙbÀ—ÿ°Ißùk=õ宨ò߯óãü–÷|9¿/ò[7V!—gtWàæà¤®H:VUÂ.çYænòy±¢_UïÀ9r°dï9.W;ÞávY²rm¿w“·~´¢/¶‡{òBÈóõúŸX³EzËòƒ­}ŸsÇOøwòX_רÞy¼ð7fÄå<<æû̓ i5½éÞç(9ÁÜXMîø »õ?üÎÛÒö£ä²!f^ËμP ^[$O¯h/>ZàÇ4_^o‡%w¸—ØÃPÅE"V¬Ã›ÎÄuÿs #c„Ä{lýéFT‡Eåé~ògλTø÷û¿:UùGw?õ˜:¯âÁQ&af°œ·Ñ9B7Ô$sü:1±2f-¤390w¦U‘*ý´£_@&N .?àvòÊæ-¾HhƒruõL¢ðLÞeâ¾<ÞãËŽ+ØG£|øÍ*ã–vツ”ÌÏ&0ú‹yØs Næ zø1èãKaܸ¨6?Û›Û©. `Þô0K=øá*­4½ã ±?sá€'¼¸ˆ?uÍÈ5¡š¸øähÇÈý:'êßÜ´§Ä}lÓb)½¶žš±pšþ¡~âÛ9v}„?úw6%`'s91Kœ-[(±wÎê¾»P–"±zÎT`]0xG:?á'œ<.r ì¾åKM¼¡ ¥`ûX-)û=‚kŽšb{ÆN™ ¨>$pU°}ìã%8„½² ™è«ÎI}c™Å;‰…‡«·8'âuâ*t¬j^wTÌ /º®ÝÍ…Gg3C½àÀ›YŽ«}âwñyvKÕH6d£ùâm¬JÇÅ7û Eïn™´¶¶…'Ç%¾È­^þdLbdøCfÝÖ£ýz£GÚZ¬ ûÆZ߉H†³w™¥Ä…ê8ɱæÆ ¥3sˆz.0q¬páÚÍ»o.6ÌÄùò­>øEvlø_ñØš'T¥eû€í<Ïm ¯ó…¤æ‘j4”äô6éç1£4Ï)·¨Â\¶ßÔgƒièÍ:·ÏÒ=>Šåg NËÑmÛ4æ½ña—&‚ø!˜õ”°mubɤ.‹£¾þéÝO¿! /ÖCß%KMF2Œ.¹ò RêçÀkfN»£êDb`¬,˲,™zñÎ]u|í†bÇs†ÄóHpÁ|/Jì;¦å,Ý\k³=2]C¶æma”B?àTO}ùB¼¦Ñã`Ò¤qÚæåv•ܧò2¬Ë€>Y5húAÑéÞÆ‡WûâVÉ~ y†²q@¨¼¿mw|}¿ÈÈŸ‘ï¹ …C–ƒ{ØÓöb…|:-óâÅ[Ы¤ö #þ¬‡UJþÏŠ™œw¤Œ&çôšDuoŽÆ[š^n;LlxLî8 tðRIÌW–y’œÐ‹é=Üs•‘ëµùŽ,TW…¾Éϱ✕wuCqÇZdئh|Zi|oqsÆ’´ãÜ&ícœ>ž¡¥¿ ÛÍâöå lœuD²ùŠƒÈæìåE_øÆAæH­L GO)—ÄІIG ]ÒTˆZé©íñj¯O°“›DFu°ùmŒ›àOÀÚ)û~‚Eï¶îŒ>2^çôj ¾Jl]s;}¬¡irì$·—À‰Q*›“ÖÖšó¯e ¢ ïk‡Î Z ‰UXJ×ãá¼ÁBË£õ´¥‚>šü6$×ßxáÈŸ•þëÜL7lì¹<Ó¦ïsG~ûè§`›72Hhì<‘xï¬r;já©|†µwàÖWIS}j[2¹t);v´ÉïÉIßP«4²sÎ¥k–ß[˜3ùA Ú‰+&Œ—©!9êÖ¥Z”#OW$>4’Ÿh¿±1ÀW3а“:âhþnO!¯j’J}Ÿ4œ˜e|ÏA%þì|,`ëß'6¼Ë6daó÷îñy9:©å¶°(.׋½<´\鎧)GŽ0¥àmõ´>,¬óƒh7Ѝ×Ãñe.߸†1Ÿ›Oú†$Ÿ®²éu@qb9ML`»j:¿ôýµ?Ÿ/ Ç_c ¸Â!2,}ÎW%ÇB°& Ԭ̶n¯Ö’æ9f«Ù†5åïÊÑmÂ&]}Æb¸°û¶Ë±àEo#ù-%ciO¾cÎÖ5ˬ?QpÌ8 }!üâ0‘`óÓo@x”ƒÅþ÷'&†ß9& œÉðÞéæÄœè“@ø"-þi“) ôçrQZ²ön ÖùÇYöw‡Œs'ÁñÈ{´Àû‹gŒÜOF¨cfì}€Îïû»`L›zʬAJ¯ýÉ×$Ζþ–6÷ÈZÄtÖÏÑ_Û"ůåƒD¶ߺøÐá®|ž¿å/5äÑæÂ$¼ˆ#Ç=’ñ’LºKÀ%‹¡=Msq¬½æ.ØV÷ã`Âïû#ׯôÌ;®öŽ;Ö|Å÷î¾þš‚–Ì ¢hqe­vŒ£{s”6óפqc‰56G· ‘Ç—‘‹‡g·ÿÔ|m¹s´òpŒå†Ã–[»=œ¤”cD©¦ÀñŽˆ‹0¿óm}ëJ¦ü±˜{<®3þáµÇ .x"L>À2¿ÆÊñ¼qçøß<*çruS@O>³ Óç< TÇç³#iôw{°¤H(®ag?B¡±œ·÷),ðÓ›Ú4c?•kõ±eèƒ%[Š™;ÖÉÓÏœIÍZåïÇ7$@ÄšÖnè«„{jwKb«Ú’Ë÷Ûù¬–uç;ôb+MrÛîãŸc2c™9”±––~èßÚÝptí«¥fNÿKÿChîaÍ1¼øv¼c8cvÖg÷ÀŒ‚òÁs;›9&yUÁ7Í<ÿóG.ôc\ÿU=lǦ2¿íš9ñƽsÀŸ·œ¶r¼-œóo{´éÍ»%9¯õ|ÖÑ?{¶ÉQ:Ì3^¬äð±®:ÈŸyà_ögu˶>¨;¹¬>óà;ÿ(Œçê3qyZÉ1Ù2ÍäÅ¢Ì1ÅhßaZÞÕÕ:湩yÁ›™c"ÃØƒð”b³Ë'µÈs\C./Â'X”h§V(÷[·ÂÄ•nÌh#"ŽÀÄ5$Ø|ßÄ‹ÇFzm˜.õª¢þé£ç̺ûr¥×ãhŒÛ?]ìÆ‡:e#D}\/É‘m\¿å޽™j3« 5zˆAýô9·ªàÇí2›~r cGo´²Ç^2uÝ¢+E•ð±•æŽ{ìPúê<ת{Õ£³1`¹¸ÁÞœ†¯= &Ž*ôEÉ;rÄZìye®æñÆ ƒŸ;MKh‘Îáƒ+®øúX) òűôÿX†«iØ~¸ÁZT‰{ÿüþ§Þ€øÿüûœ£Ma@6¸´œµ7©=ñ< ‘M¾çÁ·pzR:Ñ>¾gjgcøá"Kòøät»ž<8;ž§Û¢1ÉÆ9¾2˜¿÷ÂÒ¸ö÷X2'˜´Ÿ9È 4¹ÑÅŽNb”›ƒGž 69ûqa’ŒºBpZÍ?ƒtCÞùNpôù¾É)ŒEß tF-’QßqêQpÔÒs¢Üò)ÃbFÉçÁL™r£™‘%¿ÖL7AÜHªÐã=Ï“ ŒÖ„;´è'ÄÎ<ð…’zÁŠ\û'´c«ÎÙã'öÉ!u|ú64k‡úæ ¶ø×9—ñ€ol6.Çwç…ÉK92bÁ…sB˾3÷Á†ÖænâŒ>¼jï…nHÕ÷³Ô(©Œ‹ëÚàscq9~tÍæÆáQj>&ß÷S3ú‚ÃæË×ÃEÜìÅî÷ýO 3 HõêQúáÅ÷8‚MžâÕúRŽ«[œ¿Hd«7|SFôpÝ—³©ç»RÃÚ:E›×rbCércŸÙ‰ßðxŸ·=·trµø¾“CcÕÛàã¿ã¦zXlžøfêYÇÀæ5.ª¸>ŸpÛtý®kƒß“#d<¤w,Ã;óºkÜÁVÿÉ™lãì\€dnÿ~lá똜 ÙúÓ‘rUoŒ J¶`ƒ¯à²ÀÁó€>8ýeõñDoçˆñ† 9£Ð¿Ü;“ÂÁŽ_ ‰‰ƃvæ÷•gÜisiNø»>È—yJp°­›1€ &óÅ|ÌÂs ¸ŽYMc™kßÛ­ï7æ³î€\>Ãb?ÝáWT?ÿ¶Ï1HÈÆþ;ý="åèï qX‚\u^ïy•82>±‚t)Þ;Ùê¼pr€|ûÆþ3gô â€1½ÿüNSÆÇRçûÒ6‡ë‹P‚³Jáäsø–…–}n‡÷z`¸è\)ã6¯Å Æt\—Ì<“åÈä33[fwæØ#уæ s?ß`Ý2_ÎçÇXUœ ,¬ÅíÃúâP º:Î46ì(–ùÆÝ`î3oç£úE_?Î'ún¾qݺ¹8æÅ Ÿ/Oêà ʼ’£úª½[Í3ÌfØàr~û>މröªã ?‰;ó{­ N,2Kä×úá<ÞèR†IÛoX ON´™.zã„þæÀ±u޵–‰ûïð‡¤~Nù©7 PÎbLíŸ)ɲDÕ u€>¥GI¡Ù}ÜHý¤Ÿ‹%Ô¬ ´v@£­ÄÛz2اަ»Þ ÑÜdlŒ[W5ú1/®7W6ˆXð‚ÒxÞEÃ*­P•ÇsΗY8D&ô‹õžͤZlïÁŒ¦tw‘‹9\¾‘9®4#r{S–ìÉ6¾\0+~¾¨t ŠCï˜W ö‹ëÀ¸8ýæ‹úû•ü=Pàl¬˜9.… _ÉÔ?šÔÝ籊ÁòOßæÃ,ðpp†MÀê,2*kœù´.çº ûq®xŒ‚ºˆC¿¬´Ê‡k×&Æ=ZÞql d=NÈ~ÇP±}YÓYCBê óP'ŠÒxßy¹çLA '‡wã˜yhðxQÏ|¿'ÎñËqÛùe>E OuïX ‹m¶ÉKlɇßüF¨YêfNV—|ªÏÿS…ÿµðIPx­‡=".Ä(à:Â@äÞT‚›^‹Ô®i5ß±Š~ïmãü€]ßùrw}Û‡ûëÓ®3\"yüFly…_œñÏX·S{YÈØ†(²†íå»Þ æNYK2Qq&Ü•õa9´îü£)ÓùM[ŸVå<â†Ú\f¬ä¡ àÌ)Ç÷à"÷,é|õñ›€mç˜<)/6|ŒËNöÛÞsXìg‘t| y~“Ã8Ĩ‘·\ze]JT´Í­ºØG7øKÍkEœÈR,Õ^¾Ö_*‡\X-&tß±©Kï€$¤=n Œçõžç ú–36Ñ4X ÀϾ%CÞQÖE{kHîó•~ _ÖÁzeéNn«R9»ä~#æÆ!7Ø—'8ËwÑmfTâÔ«ÆÞµñA{Ÿüº.Å"ÛäpD—ïb ã›ä‡=}w-¶àTjupÜ5sµ3VäëÇb¿(êÒ„úÛeÆ­1#‡ØIA´ç ûä3 «¼ñ²j±˜WÒ+=QA¹MY†ü šÇÚݼèÁÆÇ%u56§|X'áQ²n¼©êBŒ«(ÛÞÿ²]jÄ”œd¶cà8EìÊä»ëÇú–_)B,öË¡…Õ‰ÌÇægT~ê ȰýLf„ƒ}ŸÞö˜9ÉI ÛE©g”jÞš¥öûÏTÝ®8ƒ™‰EW&$Ëhy©ï—¨5ùØ1á»ò¹?xØŠI_uÚŽ ºÑ¾BÕ2I#AÀ¤DzÁ ³mhZ7Q¨CF,T›ôóÆâÎxå¢5}…Á­åî½TÂÛÒÚ#³«1Ë¢:ìé’éÇb|äÆv[<{Åuó›aŸœÁK¿þ_&+’C§ÇÊ*‘Yß2wůòb l]#Ï¥i.$¯^.U$øÊ#0pÙÉÁœéô;7ÈŠ]¨Ð¦ïƾŠcJ•–ÛÖ,_õ¨O–½ðq*ÀIåäsæò®º?ø¸¶vÁB+}ìðËÒ;Ññ'o?·0v™7w¥ KËöŽoFl·…¼>Ž#“Fðí²9ôVͪ:þèAõ¬V ƒ£KÅš;ξç¬Áñ~o.ƒÏ?C˜ñ±ädw°ð÷Üöd‚÷ÅÓ:'OŸOW<ðií‰ùEÉ–®ª~±¨\žqæµ IŠ‚‚Ù׎¥Þ¶OD^Grá¬0ÉeÔõõäŸN©f„Äœò¸^Ô®ÖY}XòFIóâ:Npð!-íŽ+už!ª±´Éÿ6¡Õ¢cr¹!'þ : ª³”,p8j–µx-uÂÉÇIÀÌñŸyíyF 5s×>ëAó×êT,S°®r`q_)BõÕ9>=wè…‡~s˜FûÅ,·Ð~áþT~2ö”ãksÒº8Œ1»ü÷îÛfÜ^_›cxæ/¯‰ðš$ÆÞyÑQ¹&øÖž—§/жy9ÝÍO°øi×»—#íÝñm6HÐýœéÍvqÀÂþÄì®ÛŠý²– KÌ̓wXSÉÀ£žôœ615~Z\α°Ð×&îyG^jæ§Cª3 ¶Æü}þà˜w B`RÕ ¥ûJûÄüéšãì±Ez–Ê:~Q„ÅÒíu·É­ªåqס:Ðî“GtÓ>žSªf\psy²^¬àbçÿõáØ*¶ß¹RðÔkçÆBÚ ßȶþ +s;$®{ÎÅÏ=‚¿Ozíë+HŸ7ŒÌë” €ÝÒ*2V5‹'û ûŸz_?–¤ÄÞG.^ÃÕÌ )é^5søžÇPdo¹¶–d š†;?þd‹¹°3Й¿¼Kž¥‹ÓÐÏÇÁNºàåÇ® `ú÷±½á´È~Œê?˜”ÞÇ»Î1«~ØøûP~¤.ùØ 8búÃÿ¨±`ÃÅ Døí|ƒ/1ìs[|)αkâ![çQ팶üÕçQ?ÜHɶ“Ù—zíOæÆ”"ñlËcÚ¨fe >„ã:1Y39f~Ç>mŽK>æ'$ò÷Ÿßõx’õã›<Ð?¾Ëqò·|&7Ç ùW¹`Á&áj¼m«þ:šþ:àˆ¿xf¬bSZΜó¸²<>ä\Å‹uâ8U C€o-É~ï›ëõŸî®ÌŸ$”(6gláÈåëì‰ÎnÊžcª8wPcnêðstYÕpvÁOú`ªª¢LWsÈÖ’ 'ÇNC‹Û”ÚŸf}¸-°=îE?”½ké'þ9åÂÓü¥šó̄ĥz L†qóIŒÚKD.ÝYdM2Æö®ƒ×vómŠó#‡»> ¦ŒM@©' kßëR:=¬Pàã—=/Vö­ƒøc­Èy!x|‡µ‰0‚wüÝbŽ‹w§å¼üÐIÌ(e;d±ŒÏËG )kÄ|£ë¹¡ŠÙ²æ)n^È,7ŸRÝïc:ºw~ƒvÏ¥xŒ-t8®þ«š‡KÖA4ìù½®S%sîá&]Šc¬mx8÷ˆejyÇ1r3³5¾ÌeöÐR=ÈÖVýÐÎæ¸9o.2É¥šqÇGÎ9'c’¹܂ƤøogmR?Åù¨><ì»1‘^+>÷ÑG»ÂÆ—1Ø€ÉF[ûKüøµM·‰!Ç]㈩Ñá@Ce¬-Ïg½•‹ç{îÕ?»ý©7 ñïßô,³"~ÿGƒŸÉ£`”L W Óäá$Î}L,UVš šà ûH£KÐ þÑœè‡/ê“3åPœùEÆ×«‹þÁÒÛm^T¹zÊ‘Wwí 6mp˜8;@HÂâz âK±u\n ^¦‰ ±'—öæ-Iyy«ïÿÓ„aÃw<¿l+¤MO[Øß<üS8QøÿÄÐÕ— Ó.oé.÷i|-XóƒãPÉœƒQýÈT–{ZÿŒTN)MlçDxÔ·Xü¸[܃ý—¹/ íÈ_˜ [öηÙÞͰ¯ì׆ÛêhãÁs·ãqrO¡xnþ2è#ŽeLRcØ@} Úý|}G‹hº`½7Ó`ý¦¾•ñ×-„ÃB^³À;´‰ïÀÃr)Ç<à‡mæ 8ù^FbÁ/åðTÝ9üõ7cq!ÉXLŽÌó#ÙòBº¤¯¶ÅÚØ·ì)Øú9xz¨À|x »"Ëßœ“ecÏp·r,Ø:nuÈiK79‘’åÉg4Ó÷³G~ž2™ñëw¾QÅwÅhú´Èí\`Ó#Mý,gß9›q:r*Ô)û_4a ~a'GêY¾´§ëCÆ+<¦õrxÅ»íË]Ûbç_¶á Frñ²Þ“¿ú]YШÝ:èàŽ³õ¥HØÑTNvÌÞ.œIlkU¹]‰ö,‡­nËm*ÎÄüòbK;±Rç÷ä?-iížœ®ñ¶XŽ¥¹? ä.v¿±k?ù›²êüÏ¢7îÔcgÞA³_ªá8M_¼l“À˜s~“þ¯ªÅ°94ŠÁʹ¯¯ž‰›³W×ë˜rnÝÆIýäWÎvœÀmÙ Ïl?b|ÆIÌäuëþÑ—îw6狘ysim`±3OÕ=N"Ãpx¤ÇʱåLêטÎ8¤âcÚÞe€ôÌËMÖ’äÀʳ91Èõñ}—‡ù›çÁç>õ¡÷ë_üÑ“‘‚¢,þ(0',§5^¶ nÒ&¨Æ¤=8ÄlÞ‹W¶—wæˆÏw’§_æo´Oæœ.ð”|çJô9ÎêÆ>Óÿï¯=Åa.å†î 8ãµµÙ9’‚õ„Ïwåþóÿëw@HIÒgZŽÝÿ˜jrêpç]}ַűŎG0tŸ†G±üL<:𻋆hYÇÚÑgY  {ýÒwß1j¦ T‚œ6$2¡¢Á–‰ë–”5Ü ‡,þêS,ÁÒV‹!úhp±sm…#˜qñ—t¼‡äıI7ßùøÛ-ó^Æ’/,Ã,¢YÛ‘©f”ñ·ýú¿h|ò¦çÅb‚s’ì\܃¬ä>mÿؾ<®Õ­þÍÑÍ5³]þð ×<öèŸq·,VXnõü,ÖSr,€‹ÇcZ™'ÉTO qc™yoåïÌ1Cyìpc¯øç›b39ût²¯Ü#Fú}|qAn{j‘³1OtËá3¿è'f´íÁ®Üà’KQaéëâ]²Á{Ï5 2ûJ“‘sûŽ¥täEwú6¬ûnö+Ô‰ |zç'ÙŒÖ{±CÏæQ)×ÌióäŸ4s10l;ÍÉÁ*äìÎâfŽù8•¸›#ó}ò‡wé×j¼ù´þÞ™D±ÈìÝ›† Q+zWHån~Zß~§[qÏÚ¤­ˆÿi¢à»Îðã¸ê=ëXü|nƒ¥/< `Î\ )[€ª8ëªÞuî1A‚™Ù`Þ7O:Ñ¥T_»ùJŽ‚óŒ#ÚÃËmAPè;qX!súpÎXòˆ<, ÓÚ#úŠŠ*áÕ†;ð+¢1¢ ˆêcº8w$Ö¬6[?òL~ÀϹ·ˆ ÷ËÛ|e·–/AêëzN;ãÀñ‚‹Ò¶ê:qR‡‹¶XRöý`žîUuÇ/1`ôéòøòêÄ¿²¾ºq÷ç÷óÂÄŽ$ «r’sŽšSÔý@[yÇÝñs”ÅerÖ˜‹UþËx†~^oØ0FŸ13Îq†þ3ùÿKßÝÛ{‹½!¿AMYc@°Å÷}CBºùˆ~tñðP±>û•íÆîm×JÈý^ØõWXÇL=aÐ~}¢CcWAu×v ÐPYf ƒ¢òÎGd™#H×s¡77´-5“ÚΚÚÈ}¸kOËs†œb«_û³vä6°&íØ%Çn(à2?³†ªÝ¿åÛ~­9kü]ž³7Vã8<ÍëÎc©oc_ל6–Ƴ_ÏzÇèñpßÝ`íR\,…Ú7™R:¶’IÆþhØï9ù-rrd¬ôìÒÉIþŽqúvõYŽy<+ëe晥KËÓöä8ñH¶éN‹íæý´‡èºzÚ jöfQâGEÞ¾sVʲBô5àÁ§œŒû؃…Ÿïq¤½Kmlã¿$bêþÙgò—<$“Ùú:†ü6NÜï¼:TÇtIà T]f똖I°_|QöŸ]›ƒÙ"·~yÃÅ·FÚ°Ñ=qØ^2,‰ëœ;‹}0©<%~0 ;[ÓÙ2?0šìýѸLŒãa · žŠ=\{º9·‰˜//z¥¢OáÒpèKñy\UD¹Æœ¤û˜ºqãŠoÓ0~tGÛÞéºóç^æqbn¼2àæ&ñÓÕ|kÿ/ýI ÚÖ!P·£æºÍr T«ü”ÍO½a0ød°$= SŠ9'Ó¯  ¥iwrÆ=˜ÄœºtõÊÂçi~r·|Gn+[:¾(pý•±h›ü8—´%[¾&w¦ä€Úq½s†´í GÕ6~ìmY¼í€KŒå<³]p=N5 Ïø3¶6ù2lZ΄0Ã;ìfmnv¢ëk1È.ˆª‘9&^’ùSŸú“_ú)~wîØÂü.ªîV~37$“MÐãέâ‚Å8f,³(Î2_Èt^8_ø‘>0•áGã¥ç½ù£½ªevÐF]#힘¦,áâìœIƒŸ¯̓/t˜GÕÉÉù ^-<¦ó‡Ÿ]ÏÜÅ™ˆt²®ã€¹c”®|—°Íñ<]å°šlÜØ;/³…–€’ë8qÄNÄ2üùuæÞpuéwX‡uÉce¿««êtߘàÄëÚCíL‘ðËëvøøÁ…ôl %s!õ+ˆ7]P1 ÇÍšºâc©rpÿö‘°–¬Mi$‚ÊdK¾Èëɧã‰Üãê¹z±X'ÿú^cϵàá^Ç//jDK¶’åX ÎOt™}³Gîy"{—â±²ãl¾|ÎcƒÀˆbò³Ù£Ú– €*œ)>æúÂõY9^gÉMôaƒ-ù¥½ã¼œW¢–×*»÷&ñ PqTå–¶ó¬ù(¬ˆ §oî a^ã›Ì¡6ÅN¯$Ž޲l'ÞÀ9Xjç:&7ªôgî† §yÊyÉùaçà¸b®è(Óñ"ᨪ™ìëÆ?ž7›Aý§ËO½!ÿæ; ¤ÉO!i,.ìILÆ´¥ì@˜>’L,¦”±pÝó'ÀþÄì0ä.ÁÖ -¾ŒE¢û;öøö`Õr§¢ðÀæ@:ruj:H?ˆÆò–6“}1Ó“©R¦¦y}ïR¬_ôn åŠ'¦“à°èÞ‹›i- ßqÉš ´•æçÄÑ8 „¬í"ub"÷>é žæ.à,—>'rLŒ‹Qð½Á&) Aãcnéø^$Ñs¥wO³ê¸½9øËߘ7ÀRä ]yèò›ÂJÿÚô‘çH2ˉAG+Ï’NÎÞ9r´±·Éƒ…Jó^±-C&¾áðÉ%\'74º¼åãÆP9V¦›²rãB.qÙ|£+S—ä@U: ¡2,êñ}ü¢8ÛÑE^ vüI„óexbÖØäDB•‹£wÎ k\þäDÛ3ùƒ‡¿Wd¤Œ¥y•,­ü¾Ø51—°V¾ô"°Ì•ô.RŽƒw\‰{Ø«¿íáßþfþ1š¯cû´Áõ¯ú6Öˆ=Ÿ;ûß&³Çoâ²tù‡É,’Ìs_È5ØŒGðÚ¶‘U¥}°oM®T˜gó;žË—½ ‹†ÊòîÚì·6,¿Ïq'!>~åæäËW1°§ìÿT€½ïE’­ó§(Î\wþ³ÄøhòÎýò‹ôêK†\<6oþìEañgÊ—ƒ ÇFPü?èƒ žgêÈÛRYâ–HÅ›“o«¦y±ÔöÑWx²^ Im|m-ŸþçØ%>³Ìdèî|¦ÎÃÕ¼ÕvÎwèR`±ó‚g\ÙÁ|™}¹G=Gî,ÍÉ/ç'Eÿቱʫ»zæAçœ4ªè8.¦û]§<Äí-‹‹wš“ÛŽ…”¨Ýܵ{øþ÷oÿMUåsŽÑ“9_Þ:'»¬®ÎgıÜcC×ku½ˆ“)utø¥ø;1:»®L•<Û«ƒW²=ö’…g¬ÑÃÆ9‘I솬öÀÛ5}¸ùk9ú®Þ[®×‹µ±CÏÞù¦­GOä÷ÜùÚEXAf{y†—¹áü»´‹›‚=]n‹!OOõÔ¨¼D;8Ùò¢(,Îa]KVoެ8X°w€Ùž Ó;f/"¶n4çËrÂ*Uxö=Nõ$F»+™7fº>dí𨛌6~;:èŽKUŸp@Ç¿'?ª·8î¯8|v”1Ê`v{Ó,XåR<ã:?`Ö*³>¨þ-C>ŽÔ)¢¥ “,l9m:ºŸszɵ*ÕWz¨ƒ³qOŸÑ©ºÄ—ÔâÕ6ŸW$ <Œ7ÃDšéJ ŒïØÅCOÃöÖôÔZÏ܇‘×!ŠCXÐ1¶&fÅÙЦN$zâasn"s‘½míÉn>Ût¡cemÔxõ‘å¢?¼ó¿øC4izPÝ¡A}sÊõŽ9úàòãG¡ëÉðÅ\'³ m;´Ô#…,SУ6ºÑwû,üI›Ÿ~²wÈÏóâMÔ’BÉÊ'®3Ñ’5ô)ž(,‹ÑÐot“d°Ò훚µ„Z?t›Úì¿&‹Žr뙼>X‚Ñ–O¦RmS9Í¡Åë´h=Ô4ËÙ¶á-éõ½¶ÝY]~ÁÎ$S¥à,V›xX8&Éün êaÁ5/ç[9ñA`a7åuftûe‹ïgˆó¢8öýtfþÐ¥lqž­ÇʶË_éÄiëÄ• «£Îö®¶Ûêþ»Æ–åݦ`³`Ô/üÀ{ ­±‚7 ΰÑ}åŸ-@î;cñE\)ÎÇ·ºŸºkó‘ú;® D´#÷»/È¢1l·›'‹>¼ë“I¸ ç˜ÊÝ­ã[úÙM*ú焹\ã;ç Ôœ˜ß|º?)iQý¸‰µ›p€T„‹´°·=¹¤<ÑSí躑,aËÿB@ÃóQx¼ÛG?<8^[úÞüîPù‹Xc+ë`{Ž£³‡'ËÃWN±\è"”oàÁ e¦Kí.^’“žØå;ÇY¹È®‹$çà9M?^¤kG'wÓZŽòî]zl+ý¶ì{è¿ØÀzHÛX $ób1ËEÉXÏñ^ïßq˜›%åt†OLYœcšãÑE»ä¥~ñ÷äÖ€—§Áà^ŒaÇ—]r€$Fµ±åcoìáXÂÉb˃øw7xXc Þϱˆ‡ù>À1´}݇gmßµhª{ëX¯ÒÒ©¹]1D£FaëON[XÀ+Çìü˜”ÛÞøÜ5×F]Nªñsò+¿A›’–åªÒ:['¨páQi4¢åX¥½‹MzOÎ\uσ÷ãÆ6Züsâ2MŽs¡‰ÜH¿1¯}ÇC²ÀY·!ž|[_øãÍv_úMûŠî &”.ÎvNû?9&ñ|¹•ä™Z¡ÌW7Ÿjè猴åC;mÚhÕ<ÀµPª²ö˜ts,# ‚Í©º¤ïÖ©ȹV+óSzš <‘ò¸±Ä­^ýøOøLMôãµ];äËIÆ]ùñù1^vCM  Ö0÷fÖqÛS±-týÖQSÒ·75>HýƒŸzBøÿ£÷¯èÇ›~äߎw"òQí÷"â $'y0H?z©å`áÝ(ÿ}cõRøF²‰/ ϲl»H,Ù¯<'H 4~•½3ƒåÁ`P väžÜûØRLÁvŸÔˆ‡ç2m¡Ì#ñÞ÷<ú¬ŸDŽB>qKΘFÄl>Ž7Ëá:XU8hc«|éû3,Û‹ Ûð¢ìÞ€A>×§¦ ýî?'qÒAüÛoúhÓïçòŸü-yc™±Š.¹3/ùÁ–ú¿Õ#z-<ïh­7ûä=‰ò›Â!˜w“‘ó\;uÊ»n‘“¬S‘9·ŽͬcÔ(Àþ¢ÇÕ£C@aû=ãìœh̳fu.Hwþ°¥äшøñ˜–§{È—ýÞ¸œ dn’T9ªòËQtýDŽ~dsì¥óÖ›†Óç±ÂÆ/ðî‰ýÅw]ÀšoK:nm2î D'5,Ëó±%?èçxH¶hcÆôøÑÚŒíùEߟq­êœ70Nñ ó&ã–6ciî’§?ÜÐF}cK§ã«„~ÉeXq¾~üV¼ÞïÔpS)Ö?Äå,àH<Žˆ…O„¼¾ë_üO dŽOôÐŽ¹Ö/é¯s-‰ç¿ÚÌ{¸:‡•ÁòÿîÎ>}Q¨ ãÏ÷k6>>ŸàŸ¬Ÿr(@²Î8òXoækÆ ŽHà¥5ÍçÍ´é#FÌ{gpls¡F¾ÀÊ-®Âyg$bR‹ñ¤ ·Ü{ŒÝ EÏ ·üKÛ¸™© ø4Ò+$}„&Üýkc?s(·  H<‹«:9  6¶y'˜ôRÞù¯ä  œ·Þ±r'¶ägßB–5‡òõ¬ëè|ý†KÉ"ó}ye\z.µ \ˆÂÁ˜3ë{æèÍöômý޶¬œ„ð‚Îxaኚæ߾:‘ XùÀ}Ã09ÿ7mçjý–]õsï÷Ý[e•‰•ˆ©”±¥`*>PÁGÔž#bC%>">»âAlˆ¨ ¶U‚ØE1ølˆbÏ®IJ4éjG$IÕµò݇ã7Æs­}¾[zoåÞuÎùïµÖœsÌ1çzüÿ{ïÿÞ‡Ÿic[t¸pAê %é ásÝÈÐc;OØÓ¡[™Z i]¥X5Á)'ÊÑ”Üñ‚/œÛ?ÚXqï´f¦ä±É‡ž0D(DÝ»êªêSîÌ7ê>¾$Ÿ(QädoîªsßõÉAT8Z@Žãà¶-ŸhÚÒ}ЗéÜ÷ ^OZõõB¼û¿dl Þä }Æã÷žˆ‘uŽÁÏþ#p“]äfD:Ô•{ÿÎÎúí˜xÎÉ‹íT#í¶"’jæ‰8Dµϰ)‹ÙŠ¥Ó¹ ¶åpSż\*'Õ#zŽÑšpç³ç¤_¬D«vO.x©œ±§€ÛWisvûêÉ%s–‰'xi#59^SÒOج¸¥$ÖŒê+°ÜæšûeLTœ.Nà®üèÈp>ŒÕæ*’cý §ã ^}9'Òe=ŸÏàûäĺ÷:>Ž.²}[¼°Jaì$À±w~'Ü>‰åÕ£Ýù[[ ©óWîGwláfÞ8DI£7n_[W`åЦ¹@+˜AÖ‘ šÁÔÂÖ¹Ç/¿½0 ÔxRÞ‰—zóë1(1ù±¿i“ŸŽ‡D®óˆ¿Õm<¬'>ûµ.'ßnk•³dÎÒå»ùlŒp¥à—j×¶çA{¨úªv}[ïÚ³hãW Ïqå wÏÆý…Ç+ùKÞðE/–2ßû³V:EpÉKÈ„gò…Bböü—È“to°;÷é>‘£ (cy‘Kï-ŠmÌmQ9þÑD"?ÎÕ¥»kAV¬ãb£«ì)FGŸ¹ísà`ÚÑuÈz§CFÒñÕ#\ |¨ùb 5~V¢•‚1ÚfŸÓmÉÈ Ö)|î-9¥Ë¦#Ã}ŸØamR¸÷ÎwΗt{k¥ÛÏ?Ô<¼å‹~\ <|Ûí0³ sKrã^H7Ø&·gî2g˜³èW/Xé‹§ñט¥Ð=><‡˜ú7Ũ¨ÂØý½˜&aüï âÙŶ² ¼4á<¶Í×Z €FÑ :¸ü`/™³1*æ‰\ñƒ í;'Œû›\W©xþéÑc'L"Ü:àyà|ãT}ü¯<#ã ý«Ø7R¦˜‹Ôt¢ÿa3k7úñÚ™Íh÷מ'. >¿FJœPNœ ~zE{È»úﻼ‚ýi¨3 }æÙPÈ»fúºt°*÷õ¢5dw‰®x:«Ëj(«¯fLe?–¡çÛ&èŽ [Flé™-ÀöÔ³)Ì€ÜãGlöÚÃiù$oi ÎâF›œðZ‹õÕÇæ ÊÆáz&òÍÓvcŽn'%ý7+r@›|·ÇCU<sÛ“Óú€0©GF×t[ÎØý#o:¥[žÆÂ†"™Œ¿ó–ãncî/0 r1•“_7uE=¼®)&oú¬ÔÏ‚‹s(ÏDXœ±˜Í_r ;?޾q'ŒbŸ9„~'6tò†·…VÝø¦‹Ë¶iK¼0’³¹ådtæ 6-æ5á+™xF#Çç¾.ëèM‡q‰{ÀÁö«ÄW»¾Ñ¡žSÔ‚À¤§±l¾P‰î‰KÆÂ2Ûe:’ ï-›Œâ®o°.ÎUö$;€fþã÷Á·û¼:lùܺ'ø~–¬ÎÀÛ7X”WÖÝ䃋„æÅc+ú¬qú°Íá´ÕA£¶3/ÊüzýÜk™at¶ùu¶FOÝ.¼Êæ[æÔŸu§îÙ0ÈÁ=?‰äùX;Q†Àv#œä<íØÂm­QÇ”VÂK–‘&o¡42­Á`,ð½çB Íå¨êUw½å9ˆL ØW›(¨ÒáGêÔ$»× Gb?è„w¬*ž:}ܺ{ðïü®Œg{Æàè¶?¾Aʼà±ëˆ¥BAê¸RsßáÌîw€Sã¡’^àœ‘ÊaßEA×ÅxD6ˆ‘XªŽæÛØQ@5¦XEqlácž˜hß{dmraÅEi¦àø¸±¥Á‘é³ö‡(ÇŽ³ëzž߈ˆþÍÃ8;÷a%‹ñ¼7O[Ä}_Ÿù¬ðÖL_ó½XÈw½£Ž>T껼Õã.|{e‡³ÝAœþènÐçâƒ9ê-àÞÈs­¡ÚúºÏtš‚<îšÇHï$F.ü’à džDYTnßú×E:Y“Ø«%ÈÝï ù >~ó¾ùéå×~êkŸÚ‚à–œ3©: 3vž™I\7ÕL”N§ÁƒéI>cÀíû$‰yP¹íé$ÒþxqújëNl=‘˜ˆ$]¾Ç“ˆ6úÀ›ûö ž7õwÀ‹…ªo ¡¢*2cº- ÝŠblåd÷*ëqüÆú´Y8)AÃ÷®cÎK(Àæm¨ÈÍ|bÐ<$ “Ÿú“¶û+C^R¢¨ ”ä×Õ×ýš7E?¼¢Ø( —\¼ŽàÇ!S[è‘q»¹Çu^%ƒU6ˆ‹·ò«ô ›q§5ñÄ˶;>îÖ¡¾‚X»à8þ™tææÀ~X;˜ŠBQU®æÓ£ó*•Ñ•¨ÅÇ\!èñQ¬Í¸úóê(öÊåµJé–ãã¾²ïÅ-[ {æ+ÝØWbÀîæÝøío°°ï…"]ØòªO 1÷4Ò>Á€ñíU¾jû″Jûh¡cÀ·ó=äðy»VÄÙW Eׯ‚MŽK·È„Nºü Ùx¬/,`¼VOMû^?t¨ ^ËÍJb»%ŒåœK+—~L>Ìð¬ÿê4@×"nN‹ðáD-²×¯.«/m%/sêà8ÿ‹$¼: ôc¼í³þi€Ë¸p{Ò]Ót!§œq›¶"òœ‚Û(a’q¢6³¿Ä,ãfÌøÎèÑî¸ùàSmö}¾°×ø´CÉqQ¬¢')–T#"t©ápâI{Å’»Çæ9mêáZyÚÇ2<‹éë F¹u†A±Ž5~W׾ௗãZ+©ˆ>u²wƒ‡<ûsw}bâúÒ—¾¤' _ûÚÓç?÷ùO ø9›!÷­&#÷¢$“1ÁvPHÙO/u/žß˜V_S;ƒIe<éÚ#0‰•BÚ‘³¹E‚ ~râëûš~°:>È\èTõÆ¥^纷×É\#H†­s‹°²ž…d¬›OF¦]m.¯Œ™ {Bƒ=ÑË1|Î…y¼Е“Ê~V£øzħ¤–ùåÈÜWž\8ßãæüòjST-ÝÖú`¡îÿpåß¾Jy¡ôûÆ}ñ)F¼«°qK^NVönr¨¯Þžh_´-;ò®!ÀHòö½Ï¾€›Ž­zœ]Åûö›Ÿ©hç|°wç>™ïp@VÎÍa';ü¨tÜÛ&ÞWa«g_;'úÌA§t^„QæMÖ]8žÍ[XXçð3g*j™³€Ð7{§çŒ=ºôƒo[îÅçÇúd×MŠÚYc›Å’¸‹rì“O왃Ì) v䨟_¯QúÅV·% ¤¿¤×uìë‰WQçÎàNþ1ðo¸`HWCâƒ}Kù³­tšß¶‘чä,’¶~³i(ëB¹ë˜xøq^Ý—èÛQ‘3éºß« §ô…6ó¢­¿ø:ú ò{ë:k“]»Ü@¸×»×·$‹K}4'øõ¾8¼ÔÔ†:û¾e<½z÷ÕæBÉÖ\ Çæ#ùQÞɯäoõBUmgÔ~3‡ïX@BNäóΩ“?‘U(Àí“VÇÄ>ÎÏÅͶ:À³°ÈñÃgïùûîû|.†ùzJ±Ú“ì%¦öõÑ2|ƒöÏÆ¨ñËèFy±;¶#ÑÃ$ÃÃæ"EÕùvŸòG!Î5ë *pjÝR¸Íº³‚•ЦçUðcY}çŒt=vzÄŽ‚ vn¹ß7hðÌÅŽóÎ#Ë @ªøò9|ìÔŸ½Ôg/Z»òÀé[̸`ëÜã[ㄸb¹s&ÝÉ‚ù§~rOðø‰>c{rPÌŠõ¥{?ªŸÿârÈ#×HP”_Ö>õG!–Ö±Ù×Yι•°úέlù¹‹u§ãÆv¾ì?~9¾¡ëpÖÏ+ý|Ò…7>Þzû­§—ßò³¿åéÕO½ò}hŸ´ðš¼{)æžâ$™$DÏGÝ×– Úög\HnÃàzlf€†ú0гƒ-Ñå—·|µ[Þƒpo>¼mÉvæbýÇÁ_hx`‡{µn­{`Gá-nu›z_$Ý$z’ÚH§xè{ÇçQXÀuâO—ù1‘—§uXDâ>3xh`"1˜|Oõã[2u&jé 4^´¡¹kɸŽÄâ6ªj÷ƒÏñ—H‹ ®fß/ÖãÐÜö–Ë)›Qã,:Yذ1 Gîán~.'t”£ Œš„ú²ð¥êú%‚Êb‹†,í"ú9Ò¯"%â%V7t$°(É…ìÕN à‡/¾»ý:DWÄH ÏÌ©ælo„Æ …y° • & mÛ'ÖµÚbœ9'ùí‹ ŽO\çã‡['.ìÇgæ‹øÓ–~žä68bËØÄ­ìýÎ-~±5©ØâåK£i¹Ë6Š'iò~ä]žÏƒÍÔéºqŽV=Tn´òJôp#1²/²Õ5E§¯}¤p‰ŽÝK‰åß"ë›h LÖI¾ødâ–®çIÏÖ ^.ŽšEúüQ„Î|çwzóà~U}1eù<_•àåÐ!lˆ¼EÄìótÜ9p Jr÷0lá;û›vðxNNê'6ŽI¶ìÙ>ÏÞ=Ì`bެ¾¯'®|£áu½!O¬609¡N™±U»îC‘IJžà”ƒó›üó™ý¤æÏ¨‘û|æ\,—GßéE-xPhŒ_šø‘Bç$]-æCÃÞØF1N_,ŠÍ‰íøÃ-åž¾ž%…wcÄž<…+-¨ú¼¡ŠÆŽµ×¹^P“_Ûa€™Ì4¦gêi¡Î3¾ó‹NbÿX¤_"c_œ·¨Ïÿ|ý8FŒF…x¯çÚ“û³eÕE¾60„ó÷žãõ-õ"Œ(r™ítpwbad:ë­,BÁlÛ£ ˆ6§2 ìÉ)M•¾¸AŒì5ž» …áNõ“.ï¼óÎÓ¿ý‹O/¿û7þ†§õÏÿåÓ¾ù Ÿ´ã‘ð?uPUmõ1Á"Rý~Z‡2&“¤c@Å 7Ÿ$¶í‰X€fqh€9nôóÜ×øÅìø>èý%îŸ^œ±MÄQ¶ÏªÉø`©í¨Œâø¡u¹ÎLÇËvšX"ïBââ…'mõ¸s$0ýv™«=¯çü1¾ç¼ÁÀÒ¨ë' ”ôV†mzϦî¥:c›hÕ¡_žÀÄJ84'­Gmó¹i°3µ$ŸÃ.¼¶ÉÓ-·ªûàÌBûÊ…¢ÑÔî"¦M`ÑtKõk~ªeó,lF÷ÂBozý@¼‰ùÄÊ@YæW‰Æð‘…ÕŸ¯ü 0X;6µñd®Ÿxç¡Ø„2¦‚)Ež°l)»gúG-œx‘~ØzO¢É1·<¢Í·!iÏ[0ùÒ¹°Ð™ˆÓƒþÎ9áÜO”wº?ØV:\`$«í!dª‡R¯Ô‘ç‘#Ý×°…’/^TaNvþƒ ÅÆB˜ó ¸ØÎÿÌ1)w¡“œ<ç¶cSÎÆ Gªž“¶UNôµðº±ÛXܾæRµöÏül~-0îÉ_æIú£ƒï•Ë6zhœšçÕ][¬XÖË$%ÍË^†Æ=ãŽfòP.$=r‡2Þ_áä,ë;xç:ó‹Îœ9xÙ×iés®~xŒîGIqTÁ+q.è¶Oø•¢ÒµAÝ™—^噟´§‡AõÄùØWk[2¦‹ãnxtNDÞãÂy8ó7sÆwø…qÈÀ ÒÅ…ž4:MŸ7n3¦®½¶]ƒmÙ`P“Æa7ä“Üò§ºyéÛVox gîLx~Ívü~c5|þøOþøÓ¯üÕ¿êéç|ÛÏÑ; ¿é7<}û—¾ýéþÿùô­_øÖOôéûö[oç6øÎ 1‘Ý›Ì^¬Híùgx9›62’rnÇA·x &ß³ï[T§Ÿét¬œ6l¶lœ›X´ù£øÄ²#â®`«J"ùÛÛxl¹¯òúžô˜n¼4±í…}±€Ä¿Èüì£kn™V̯‰ú9‚¾Æõá9úh| ÏÔøÄ"U|ë°1“—”ð Î­aCËßdÒü¤o°¤§sËÀüï¯%¹hþš2übÛüßë ÉW¼¢[Îp…ñŽ;޼ñØ^J´Ë +ì²È@ÁÍíñð¾¿e%>1p NW˜Cbâ‚#y°âžÇÜÿŽm>ps>liÞŒs/ºœùíHÜc¼sDtú¥îöð|à`ÝÇùHL\À¡î éë§–„(OÍ?¸\¬.àjtNfœ…2<Ðõ…©:bË>7³hòoeò%ä/ë0~°¡_ê|½5:t÷3aåÖµ` ) ×yæh¹˜ÿŽßÄ4ù“«¯6Pÿš• Ý/Ê­~w.ËIò™5‰ 1ðÓyC_‹eæçe›Æˆï-z¤NÌžsN89™Ù»Ž ú´ùƒ¿Q wت”›9«ÍW•r†’ºeøê­¹6Ð8úä'ãL¨ƒ_°)ôQ:V`£àu³Ê5'[°íXŽºsß:ëèý¸P'çÝŽ pl~KºÌ‹rC—6@è \ìd çàIó›¯\ÇX%óÌ\0÷7¿Q16Uæ/ É¡©»N²®qç×¼NþÒLL`µM=į9§â 1ËOKcnÛYšqˆï™sêÊyÓ|ÂÚóѹëæÓ>dÐ1UEÚgÎ@š5‰^×õæžÿ[uÚª+öËLx¡«¿Œqx¬”-Û{òø £#/n±æ/äAô¶q³Îȶ”Î7änëPù-c~î¾)ŸÕ_?‰¤´]›˜MKàñ%¢ÃA$<>Õe¬ ÿ-f§~~‡#C7ë_"Ë36Òýæ,ìœ/é:ÄBiNÜ ­ÛÂCzçDíêš‹uƒÇ:çkïX÷§{ÀÇOüäO<ñÍ»¿ûû~áô9çOäÿѧ¿òÿòÓÿúßÿëég~þg>ýŒÏþŒ+!߸[BÜÍAA²”¶×O ½¼!Bu’Ð$bïM¨o©2úÛÍT6#>“lÔË´`—i¸¥ã û.¼bñ¨NÆŽ CËî!‡Ââf"ªÀ¹\ÛÆ§sh›j)A¾[|Û‘r„Ë8·íÔ—Í[£e”ükÔUtK•zbÌ‚—~Ž÷8YY‡2À0\F²cszoîä~çÀ=Î=<†‰oª§–ºS?Þ¶6âêE—,]ýEpÚâÓùG‡y'nœÀK³‰ H±K9£Aÿ”Ši>tóZ&úóý%'›à ™ ÷À8÷Ì›y‹Õùr ãpš]rëxñHÅïD)íøá˜<¶}¡„ÌœU|´’¿“ë /<…±+ÎϼÉ3’h¸!LÆüœ,É'ïX4£RºV}Xë8O1±Em÷0íÅc'ᔌUçÀ]ôÑ۾㠗ÆCl¬Ø¹œöQóåÅ‹ZrÖ=ßÖ³@à;aEA^²áý)¿­ûÑðªóÍFï‹[t˱¡_晿¼‚OÉ+p‘yNÈÖÜРׂý•ýÁÑÞ‚¯ìÚ«Ë:á®:môÈ-)Ø!æužVõ˜7·±½×d c JÀÛE¡lG–²ÎŠ—w ¤Ù°>yÅ:X÷ü¤/½©%wñ•þÄdßÒ¬Ÿ´u,-8ÌÍæñÊlß ìÁí>óø©Ä@2âÚî9(ß›KÇ'#/žà IøtïI×̽<ù¢ ,¯P=·¾ÃþFÆ€ßDÍ1:ñ„}ŸpÒyìñIZ,+ñM3ÆÇèÛ0Rðv_JóãÝyÝã¶ÞÁË 1ñócer4½6ºÚŽJW,Í§ÑÆIw*P¸p5bÒIÌzè]îrO8µ1€dzäÝ.øá—?Pe=ìm<`å—à _.úٌóøšdòdú3Ÿcå£T%tü:„-æ“)6ÙÇå ä'kö°¯–§Nz{ìã*KÃn8HhoQrnâ*5þ|:ú±‹Æ›š|ɃÌi=¢°…^äEÀí{ŒeýÙñ±ÁÜû›AðW4G±XíýFyÒÁ;Ü~Å·_}ïïø^Cù+~ßüýOÿðïÿƒ§ýï?êg(_ýêWŸ>÷¹Ï}OD qÜÃÞIe…O°I£E·¦&gê£Ó ¨¯ZxË…7² HöU1:'ÀLœˆe­Š/4Çgì1*{1ÌÊ\ÜêƒQ-,X<œðÊ„>ß«gkOÿ)ëX]y• ‘%G-9K_DQ¿hÖ»eÈ!1ÎßX;o½Ç“>žøØÖî'¨‡G,[ߋ󯆨ºŠ¬@wÅw63:ÙÈhž'ækíÖ iÙ7N³QºÓ‘Q»ò'•œˆÕ§'º–n\á}‹Ö¶sJª~â.ÎÒäD§ÇÜ¢b6/D;ÈGž €6D`'^3Ÿïœ Ϧ\ÞÍß`ËW2˜þŽÏP1ÏÌýøÚ5†_•ÌVê’›‡gì ­±%VÖ°Jüôį~Âà€ù%'&a³¼“§è>ð’íygbäØÚœØ° ÁJ›5׋AzÊ:è¦=1TD”Ó>±¢ 9³Wc06`Y=ýÔù±½E#TßÎkÈ4ÆæêÂØ-ôαAóCæI¿óW¾)=š\¦·m7}‡ú•%ìtt“Ãô«Ãcãù‹œ|°?Œ.™Ž±PûLõèoT`ñâR …+,yòÉ»ùƒOK_„ C޵*v4±½ -il—Ÿ3Ýý µïÃS*£g°ÕŽ‹ái¨à{¡_h{.~ôOºe3xÖ_Þ [òíœP׿{¸^_²å§sŠÀ€£¯Ø«ÙKFr|9ÃûÎaëY—†“꼚¾_EO?GâÛPèÐ:Lgø0Žú˜+ó†i¡17æ( W¼»þÕÇžøž(>'¢Iðá=“²¹àUç€<4ê¢j˜`ù q·…­+rÛŽêó½W;ÓÃÑAÆÁædŠÎ:—šæ¶pó—ÝØAšö8 ˜çc«@Gzç7ùA¼I›£Ú;¿—m®Àdÿr&Õ ,×–¶{Õ—ÄÁÖ:‡‡ôŒ¥c}ƒJéÜ·sè§Ú¡‡Ý‡h¨ ¶[û‚7ú¥­:¾)¥f¸±Ÿè£c™uÕçÒ<$RgöV¡‡’Gº‰»}9‡çœ’8T°¿Ú™©´Ú×”D¹Vlûȃqƒ”ÄñíFYÉû7®€|}FùcyÂñ•w¾òÄ·í¶ü¹¿ðçŸÞ~ûm7ý„Æ_ÿ[óé÷üÎßõô?þ~u·J~ò+?éÏ…|×Ïú®Ú~¼G”[Î$$H/Tý“€ O'I<ƒ“Ô¾¤)9¯¾Õy^iO ¬èžÉ€Ä-OvgÕcB2áÓ¤2)|±¢Çν÷•°ò2ŽO¶ã˃µ3Å“ŠûOéSysÀˆu-ÕxcþχÅ:¯†˜Å ¼(Þ÷õ¹Œ´Ø’âQÁS°ãœ\°¥íWúÄ«øw<Ø»ÿæ(0Nëâà­ôn,–.VTœ³ôy%ê¼5 >„£«D‡c<æ³*®ëÐïß1},)æ¥Gô޽!VQt¥Á¼Gä€[\ˆIæÕÁQm6%‰ëä?|…2¥ìÃáÈN.Èû­"v-0rxÆ5´‡˜j}• IdlŽEt'QÙ¤1»w`"“Üq©³¦êb~§9G?è _ÖMóÉ‚ÝwíÈP}Å2·{L”;éê¶7»®VÜ«+ØÓÝ'ègNáËÖ6@í4ÁVkŒ%nxù¢lò•åÖÍžò¾xчEÆøÄB>:ÇÀëÞrò«Î^ìP.?`uÛ2üJXyó)uÛñ¸EºÌòê¿¢ ˜ú­¹_[¤ø²§ð’RÄÆË¬Föšˆék.±ÁÊß±¾Ð”"Ó½ÍÊŒÔÇx­/l•Cø¶ØWÛ€SÇ„ÙÞ9ù`ÖQ•ˆ¹XÖ}Ö®{lþ‹á±´_èž5Wü¹þuü°;s¾2l 8›¬_ËXÇÆ~QHwT‰_…¯¯¤êl“”ŒÁõ4|.T½XFža«@1¼+ËØ¸5À>`±§É.}Ç4ã¸bXŸÛân4ð 7ûš~Þa èÏç0kcùª*øè+S—ÇUç Fn~i$W9Ï ;IØ9ݬ+ÄŸÿRõ±4Šg®úÈ—ç3BÕ“ã+ŽÚÄ2~ ,çƒp@¸C°Ò°}Z2rèý`°áQ®Î)€sŽÇëÈ~È7Bþ(ÄaË4é¡­?ò¿‘».³\C©…ÜDe4ã…/0)ŒÍ»òOÑ5‘£SßfÖò23·2NåPé?x÷:™q*Œº¹„ɳX-ßXU+þ  ë=Eó»mçaZ`$¦` aÐy gúˆ×=îC×XêŽu5fCA]‚‡¦m$åãÝÙ|âlÙ8=v~yrú-2ÚìÕc-¡÷òÙÊúÃt¯”ódP%ÿ¿Ög>󙧯|õ+OÿçkÿÇ·[Ýúßÿ‡¾ÿé{¾÷{¶k¿Tù~ç/|úÁùOŸþÌŸøÓOÿñG¾l È—¾ãKkð±*ÊÔÛº'A¹NPÏOÄ,¾«£~;ÀÜNÂ×@öþÒðÍÃw•LhR«ßL.·MßÂfRØÞŽÄ[v>9@jŠO–m_¼É‡'ßcrû鉦X‘³Ï„tÅChûÖºš×ÅH¬‘[ë'¾‘Á¡÷,o[½·oQÎIˆRç6¿ ³cG¼|Þ »ÊóDn¿ìû`xCL’™·„•ÓgÎê!ó‚y•sVPz̼jÌôz±e0áÙs%\›'ùóš•uÏé§k0BÜúÂ%GæÇZu4à‡ï]Âbýcß‚þÎ1lgE^¾dª¿ó.Oí=_-¿x¢<¥qÌ„êû޹º÷#¾Ñå8Âõ×LK‰½¹/9’9ð@>à{ÇÔ>™¹4.ÁŸ5¯6Ø«|b± ë¿~½`aW×ã*ƒ¼HÀ~ëß±&ÐÌÖ<Õü3"òmf:ofŽšº± Gú'ù|Ï_0¼ÀÖq˜|Ú~øä®ÁøB™½^¾íW½È˜é´;¿°¡8nb²òøw H üÍkgäØš×œƒl!ý£=¼à$søéÔ'&Ð¥ðÀMú¹5Rë¡ù2gÙìüTÝ×èÙƒx‹úøäš‡“5ã ƪšêX¿a.UòÅš@˜WË[c•±N¾±gÎxlÀzXƒHÉ?ó q4§‰|Ö‹ÚG/_ø–/øÍ‹ÛⳟýìÓŸü³Ê÷¸û÷ ?ÿüü§ò/~ðéßþëóôãžþÓ—ÿã­û Ô“PmRytÛ›¿'v ‰{,§M­$ùdÝZÆ~=µÍcŸE·6¶9!LRDå‘S&t,΂êÄh¡Ÿ°D.}û†;žR>ð«Ñ¥ÿ’(-´&HÕØ¤ÛF7·‚ ˜ójŽ{Ôl ´í“</^ö-Vó‘ï‰Ù>4Qm' Æf^IŸi…ˆæ"Û ªC$’ÁÄÈÃŒEñ›¿XbÃ’J1ïqî>Ò±íDc89ÊX12/â-˜Lî[•,XæV¹â¹¶Õg”+íº#®ð…L9;ºî<óWMr’xÑ×拓" ꘱Y^é–ŽÁĘ|ÊÞúM¾Ô1qxÝ=J =T8¨fŸÀÑ!ax_”†š üN föŠ>sÔ:¨"¿iÆ~[«”»:(ƈÈb«9©Ÿ£G} Äu»Ožx$+Û1žxÀÜ KjiÔ¾ gÄqÁAm'”líâôã­0‰IËÚeבZÑbŽ ubŸŒP¿Þ5·;ÑÙ‹v¾a Ž~+·r áî¹AÃ^”ƒ&ኵR¸—Dzr“;3)7Faó[ßij9U»Õ³`‡‹ý©¯/@YêüØÂúûÒò@ÌÉu{ºÖMxìm©Ã‹GÜä¹u¬SÌÂÕ›÷§øŠûq$Æ]hƒ”‡È<ì"~RM=ûï` ³þG?Ér¼N°À™—HÉ£M!]Œk¯'ÐÍ:J\ŽsÖBqüµÓÆ®3ß­;#Y?;®¦•µjá°r3•Òú2“º'q”ú†¢>º´É©D.Tïµ@ç^O!c[]laÓ‚L'$7‰Éº±àds¤“RýØž…ŒB¸³£’!@IDATX-isŸ_)¹ljó•á2XÆS|9ÿpY¦‰¡²èÎÉÁ‹Í®ÍËq;ÔÛἎ Y"W 9&x/gOF½Ø—‰ûâm>†§ÛNQòd?cŒï\8¦ƒ¹°rÉhÍ,ñœ±L´(ÕíG÷{ƒÌعcòF8÷¦ëMÒùM è¾aÿi¿ ðúšñ!A.à·v⤇˜(÷XÓáŒ3Àè7OïâÌöæ%¹°ªeT°ý„-›rð46C”vÖXð»fm‹7ǧŒZ<|†/:a ŠŠyØûᵟŠÂ˜Çø?Æ›ü/Ü‚íýcò䃽 MÉç––Úªô4D¼äFW­Ð}5 ‡Îý@rL¼JÐŽ ¼½Æ¯ÈáØ{Ó¿â&@~¥oÿ=Âcl+ë¼)6tSη- à *ä 9®qf9~2ׇô鑟òÀ}'c§'Éw~Úõä¨*iG=ºWk±T³J ¾ÁâQżG¾aàóVPÌ Öeµèþêjy%FÀKeü}à/i y{23åÑWÕ{êG€b‹u÷vúÂñøz_ß4¨^ýÉÎåA¾§MÝZWÛbõâµ<›™½¡in©®W×ðFØHwݹ#½WÕ8ÐÀú™Ågy§'zážÔÏxšýÚRA¶9!în’êÅŸåö-m³PÍÄ]9öòNá‚¶¹#=Ûr¨ªŒ›ß‰p¬'Ç£f[ê.މèS&øÆŸÃ¢náT] ™ QÔœšý"¶‰!âÖ=z£éÍ6 ™Gö‹ï+±FXŒlºíŸ±u[²û1ueŸ¤Ý¥ù±BŒ3‡ÈoyÅÀc¡ªå‚©4ó#:+Uý% ë®Ø²SÕÐ’1ûкoÐè@}ˆ•~4úí‘.’òr]}ÜþÊ»÷šØü&­N¡­nЂx >B•/¶ú5¿î×úƒæßóÛÛÓ7}Ó7}]«×ž€Üš¿ìWü²'þ¾á¢ ülM)yéI)¤éãmì–$YRç„P#ÍI7ÝùæõP~&i´ëÃàBá6+Ší¥ÇÓЙ8 S§øDí ‚!S¯~ßðæ4Z>±ÀIm–ý¢ª>.®ûv7íw}ŸëÁÂ?ïrØZr(¿á—DÊùäl?Y{~@¢pRâˆ}ÛOò„O&FNŸ[¼¢£Ûæû—/t › ð+,ò)x7Ú\\¿zÿÕ-~›N-ó’~ c \ÏÅ û$þyòØÀkLlj`šwƒPãè³]Á™û^ý®º¶ÅkùäíF|Rö¢ªºô?ØÀ?NçáaÃñ×55.êN9cŸù0²ñµO&ÑŸ2Ó:¾!õþ»Þ¾-36k¥-xó6ªÚÄÖÛ•¦:â–ŒQu~LôäÑP:øí^ùc0íáŽ'ÔÇD©1޾©")Ú1 þ¿Ï¾ü)Dü6Ÿ 8eê£0îïí½ÿñ›¼ ³’^âϺrV¦Ïs =AÚ÷ÄŒ-%{€äèëÏî‰X¬&Hþ~øeþ‚"žs;^u‘ßsª¾1NÖǟΰ¼„Ÿjö²rÃÿ_ù«ù·êƒ¬`;ü•§|yïz7ÁƒMŸ<3!è=_›5©ÈÂWùŒŒƒ×±yj,Xwýâßïk_‹'ðù|ÁÓû–t[ø ¹ ó#UUø ·/Å›qFGÒLi¼™¯ÓiÀ<¡'¼4Cj¤>p­†œýLN¾ùÁÆU”Çðò°ýÑ)#xöEcš«¤è«8ŽÃMëö6ÔÊ‹E;·ùʼnuÆ$˜š×øÖD“ûô¸ú¡ºíîí¤Þî‘<e‚·»^ÑðL eä&¹Ócuï}‹Ûr¸ 2c—5ŠM÷¾Ê™€Ç^Î\_¼É{×0ýáBî©Nº3Ž~’eVƒ“üàƒµÃõšœ“qt°Kµœ«³ýÚŽµ2öpm>[ò¢<RÇfËC•óe ¤zç„Uqf,„‘Ý{óù]o¸áµçAézÝÛwê†ë8u_0®Hô3ŠdÃs†“žäHK°­¹(÷Þ_ðúî`§!¡1FëæJ'бö+1㈠žÒÆ2æ…yªNéÜK+(±Jsjh;†" ^íú¸/P¨ÃóMÇÉ<Μƒ&|X©¢ÏÊýHÖæ”üÊl,)˜î9ˆ¶:ðÙ3T_ÐG÷”Xsdî÷z?Æê¹W`™+ƒÉ>-lçmæù rçÏ8G©ö?ï;žþÞ?úûI÷ÿùä#!ü?”HÜgßþ¬t’•!ÊîÄIðβ2UÕsŠþâEg¦‘ó—Ls­:vÅjNãF¸ƒSó b0s¾”ßèà+reSs’’“Ví%¬ú.^âN<àðÈF×ö$u~ÌÛuÔé¡<êºGÏ–ì˜eÓ[‚"ᘱ–ÈåÌ‹ØÑi])ðårm›K“mýÜùÌüód³›ƒæßBË¥3óÕú<ËkÌ ÓÔ£e4”£umaýXEÁÞù“ºÛÇ~7xÙÂ^HÃ3zñ¥ãŒí¬…ø’v~‡7ñc¹RÀŸB¾¶¡®ólè ׆›aŒÌÛ‰sôhU|Jxdˆ¾óýO£qQ±ÚÎ?”ègOœH$gáÎ:`ÏÜwŸÆú}¿Û}¢’ƒMÆÑÄG²J‘¾;ÆÚÞÇ"Œ†ê;î¶i¬™ë2ò°o© 6†kmB ˜¹¤\,ÂëæÖ˜Æ@:ÝçÌÆÂðB‘K§ÝÑU_y'ž€kæo…÷º“F"$&ÕYÿã ëÅŽóyÛJ1<ã[‚8¿a~æãŽp[n,:C‰¨mùa–±¸‰i¢”Ã÷8 ÄñkXôǔܥtßBÀOÖ¬jR•0£VÇšVŠÇNUSK•;gnÓÚ'¶à[Wrdôï^žcIÝhwsôgìlkå/ {~;Òá(Ñy¢šüîøà¬1·í´±&G~%lòÀm>‰a€ÂðÀ¼¹¾ç ýá>š–sýÎõmàˆeKFU&ÅNŒ®2c‡¬\.éVë§¼hwMãÆóBÚæÚš''{Æ_4âCi俉NÐÜ‹pp°¢'àšÛ…íüÎXV6ÐÒ’>¯|>{2Ú<:¦JÁv¤n±ÉÙ8}ÝËÔ»8Ô)Äx_x’_÷ë`\æ `ƒ×µŽ¾ÅB-U¼Öª¸ßx‘ñ0îÀÎ]‚a³°³Ûƒß|ÝìæÎ/VâV:ÚÞ¤i³vîÝwr³×¦9ÃÑc/;~øu{ÐíG‘žyP/Þ{1R!ŸùFÚìaÝÇŒm­¢A›üùýMñ!ï’Þ\M.æ>šÛ¶5v²3.2$‡´‹o)’õ¼Ò1ÝÏ Þí÷ºfµtó#,ïÏ>Ö¿øÐøè‘¸yJäµ^ãÎzÐæ¹ë ]ÓŽÌmp;ÏøÜº¼NvòKÝØÆ¥žµðÃ2s,¶ñ:1œbÊX{ˆ9¯…àÑ1«2}áA\™×¶TRo¿À3F†É«æ£ªžäC¯÷耂¹÷?:\‹p+ø¤ßú9/ ¯}±úî±’ÄqÝ.`VÛÕu"À‹<•ëÑ”®v÷pßÝoàRŒy¬.x”õ%Ý=OLRš[ôàÖ=¯º·DþˆE_ìEH¿ŒmGNÈn{¢ W|a BŠÇC}î4ÏŒ56”ùëV£Oƫطø6~æ,2¸h}§¦ëëéS«9uü Ϲ¦²¹z‰I?& Æþ´Ÿúb#­á$ŠpÌ##8Ò$‚©Â] ‹„Sœ<Ÿ “¦}›©Î’FÛeaKàßÜ¿xàÅkF¹ˆð ß¾TŸ­i% ÏlLïpƒcß‚¿œÍPºì/ŽK'#;ò^$dB‹Ãøv[„õoê…”Éâ{ÿìØà™ 3Ë÷ä'Æ&–? ´…ÐÜ,¹»õŽ~^awÒF¯2|ñ–*Öä–ÿpi A2ªí¾Þ~e¬e#Ñ„7Aè¡q¢K/ñ‚Onx¥³'ß`õ$“oûD_¾ïzâÆþ=}¶¢ññ¸uÙ>n(z«Rrû6ÏØm<¼êнã ÇDò˦X[‚ÌWÒžJžÐ­âÔfÜ{yÝ1qXæ WÍ?õó$¬y‘‰ ²·_¾mÐy¢˜¡x£ßé}86É-ã%m~õ× ‰‘âKGlÐ£ì ‹ÆtöâÅ]ÛŸ5C3ÕpÌ[Ãö`J¹á‚X[kdéצ©8ÕtɨÀ7`ò9[ žoé3P5ð¼b3/@è±¹S×3¶ÙP«c2ù›Ÿ7b f¥XÜOë;†@¿~™Áá*Æ0GNyå¿xylv©Czækï„—K¹ÎþÙñ…¹è é´Ü¿©(îº*óh@±·‘Qhð<Û ôP}ëÅ[~TÕ/Ny­Ø+R9è…Bã§»Qõv2ú؇f¤ÌµŽˆÄkRr ¶| ŸßÁ¹óz6ŽC|'³²àä<'ýÉÃDeLÆÑüd[æ”ù1ÜÕ!#äÌ JTÝÞ÷f/C—±ŽkæïYÿØs{›¿Ÿ\¡}ª³•¸ÜÖÄÉ8Æ9y©¯Å·LÊ^ é¯kóιqdCþ27mêƒçºü’/ÐC!Ñ¥1uÃgOô¹XmÖ¤ÏÙ1rŽðëXO>|nT…ãî7’Á¿ù±Š9À“XÊ' Øî[Hâ'ó`éÃIUìH<³€V×@.z£d;¤jOó5ŽtMWpmc#ÕÚ'OsM{‹œëÄO;˜¿xã¥ñdÜÍo|Ö¾_qYFOF¬]"£¨å9Ù8Ò ßÜ2ÅØ7ŸžΫ„ÀØ%˱ÊgS©ƒŽNpXüžÏ8¡ F¹jfÏ~1¦F¨¾/ùhq¢Ëç60.9ù;xuî÷š§ãƒ‡Ú‹µÅHƒ=˜“Küׂ\°âÚd6Æ­"ýÄïé¤í!«¿›×ŽeÀý9tPu\]Ïêa,´CHˆ ±Wf>¶ÈÉq5ý(Ýüœœ£Ÿ/iô¸ðþb/ŸÎáåÿ‡~úO?œÿûq»hðí{Þöf^á×y$>M‚î„{@5Y\Ìÿ Ø¢öºåpRDHzíá1³À&È»9iŒ-ò`£æ?Ž‚Œo&Æ ¥ØnJuàâ.<:ÁmxÙš–PiÌm³ Â3›ÙÙ@ÐÅŸ9mý÷;;¦DòÀ«Ÿùnõƒßú›ò2§ÁQ˜á‘ÅGWãj¾¨Þd(_ Ýrß/_¾ŒípOôHc­ˆýÄÀí¹ÀªŒgòÍÇD±yûy­EmcvìrÌ£ãì…æ\ÈQ,ê³™CDyÇ€¶†ù`«ý†NÚÞ€Éx?nÜèæIðÅY\î\ÀO¼m‹¿´úÄ•~NôŽmÆRÁÏý?62÷úÇï“î×ôÍêØb'ûä&¾øŒÿˆô²t~¼‡5ãLžÆoOÏ_­(Odf:a…µoc”–Fž¬×Þq^Îèï|«' xÇá }*rÖÎBÆNƒ—ëÎé‘[á•ßì+¯7_hÎ^„m|E…+ˆ>ɵëæsÏœJGÖà”Ç9å}.mÂëÎAì ¶çóg´áE>;^èÞ¶è[6ðÈn¹ÛÒ@8g¨œŠ[×Êät í³FÉ{NÆf"_þ‡†ø¬¾yž°§‡ òâ@èWÞ?;/² ¹÷ë©=Ó2s€Y¨GÃĽtô<k# ´¹—™<š*c`±Oµ#¿³eÞjá`bž÷^¾y—šÇÎEÃôʇdü$#ÙOx"•5Î8#}=Pß½ÚÄ þŸÛ eTaŸq6å‘‹·Ü.ìŽy¹uNt¬“«e¢tb!=º j¾=gÔã¦F†}äÉ_ÖX}kló‡óF_ »V2/î±²íäԬпJcnxmœwî©ó‹,ÑUѰ·Î´éô\Fߨ¥m7¦}°’QTýDÛÕ{ÐÇç|Í[Æàe­ Od3§ÀfÍ/–àavóÎüÄYöêú"ŸÅÌdÈõ}r‡nm­«ˆýQÊýè=ýÝ¿ýwVõ9/åy×^þµ¿ôWŸ~è‡èéí·ò¯Ñá#T:1¿ž* HиL’Ñu¿N(-IA.Ñ»ZFÎŒ1°%$å JÓÎFÐÄe€PÈ€vðë²¶ÓN¯ÇϨyéB¼ø•æ‡Hõçiƒªu‘ß<³Ÿ©F›À´mþñmdávb5½ðB“¾Û‚F(2LjÞè–În9 Á4ìÙFº®Csýô– Ÿ¸Í3nNTõe x‘/ƒŠ“:'½îâû­÷– ö*ðj>ÜM»›•¹pab¦rsÆýä çò—vyÂ&qü^ãilæ_Á§îßÎ é$VFäW6¸êŽIqdÏËó^ÚG nyìÕ#¼ÖÁÛ¡êÃ?CÍO^¦ÍÿXy °3/¨û˜zÌÏ™¯œHðÔL¯½ùÄõ{l¢?ºq¦®cKÌ}õÏ—ÃØë€e>NÝóæØò$­A’‹â`º¹¬ò©‡F€7û“§Œ¬`@¹$÷éCü¸®žÏO|°Ím}7Å*wrpl…!…^&+𓆒dš®^ÑÁ.5?½ìX‚mU<`O#Y‰_ÕG7ñJ*U´Xÿ~?zÚ8Ï.Æ‹CR06¸)¹±Àq9ù¨_„9éÛÈmæ¶ü߬Ð},‰ƒ(â6k>Zñ«¸§cçE” c÷ b ì£/šúò—¿ì¿f!-ùzGÿäÜ/jþÜ/~éé—|ç/þȶG‘WþIì¦Gû„¼È„í !ÛÁ5Ï I[7è&*›èy•È688;§ªI8²ç·o w†/fÀ XŸ}iìUö3ï ‹ …}¾±èWñÄ*G·Ï¤³}³Qâé\øC`³ögâÔÖAÅU˜Ùll¥´úlæṳ̈ïbg˜ú«„‹çi9¸ëk¨Ó퓃•cGòoÅnû1¼}ÑEÛ9’Q3 O³@ȺrJBŠëÒu[cEXß#´ì‡Nþ_›¹=îèK–ÜÉB}£?5L›[ë0-;Ís£‰þ½gsxšûÌÅw_Í–KŸf-K’È·¿Ò7ÄÔºædBY¬Æ€¥ÕuèŽÚhºã¿ú­›Óð<E#ÌùðbMòUÆÍ¶­Û—c8(ÔŠ4žOúQµÌO Ô1÷9þyb‚.?Õ×WÁé`Æ0º]ïØæüu)Ó9hÆrË>˜ŠkØ$ÆæÀq8Á‘¡{ÎWð@™!ð³ùe6Žd|=ôœžŽÌçGÞmÅJÇ1G펙\ØoUflª~|ÄÏâT@¾á=vímÉTcJc¨ßã­9ruumÀ+ë°zø™úpeëµHýÃÛjðRvƼ³ŒÈˆFËå (Ð ïbºODÝ;xÒ[ÿS§g>Ih¬Œæíg-w~¨4ojcݱ íV:x‡‰ Ô±…,òk$Ο”ìF8á¶âµÂéw>ÝÙÖCf?W{c.Ø'[b;_O‰Lÿ„±ãu £…l’¡ÈðQ,Gê6ïë«%^¾%Ž žŸýŠc™ë‡¸üÙù!GÜwþê½WÆDÜÆ5Lj¦ì(|7ÅM¿Ñ÷q’Ÿ·uKöÄöJOÐs<ú`0’Ç v/ÌX%þŠSÄêç– ²(d'¿›{ä~òŸ\ØVsÀr›åäßçÖ2Ø U²Æin¡…0“ĉƒ¼U7â5<Î`é‡_°Œ'v¼’dmð¥Ç¸û–£Ñ·¥í#'ÿ²Ès€û„=OeïõåWï¬!è+g2ñØ*1g¬Ïü„KÇkt¡äýCd»·õ ŽÎ”ñ|À AJ{u¸/ýgÍÇ·ml‘µÕ²N“›høV1Å"JúÓÌ'‡ˆèPáVWlÉ+1QðXûÏPº²…gÇÆk‡.úÇLäõc] ­c<æs\£kcÛ‹‰°$ÙÕ—q}8X(ñÃ|Ÿï&#NØS‡ß”êY2<ᇒyC~hk¬áâ¹.Æ’Ìú³gbwx§ŸkKKxÒsßÜb_Âzm,46ÜöÐsØÝçðk¡{2ˆ‰¡<ê×Vò…îýn`ã·fqტJÖ>õa.Ž>³ŸF×úòQžÄÑÿ©ŒÛ} xç,°ÆóŽQþ˜ƒåAþý™P )zXîªû³hŒKÂ56šä¶¥¼éº_<‚§¹Œ"ü½7Èg~"Øý†¦e<$ïò䖺ǒó†ôîÒµìø‹³:‚ôbç¬Ixw/FìEŸ w¯yrÕõ4q­ïÔÅÙÊÆ¿ç;†"Dq½yÛ¸, Fã bÍw|7–œ£;?AÏÜÏ>$+Û5Nüœõ ™íœ2^ñé¯LVÌtù&ÄÛ/ýÞ—ôxú­ìœ4xPÐáÏ~¥áu»óJàãwÔô‰© üÚ§læ˜\_ßñëÙu89@)ò;œŒµ…3ùe­P®“^½ûøá‚üÉŸßÖýÉ  tò5áMI"A (º’MÛôÕþ'bäèbA½›A¥’ !©G½L"tó•€èØœ¸ANpX¸˜Ú¯Žxd`fsoÔýsñ8®ñî~ÛªÊ"ÐRÐÀ.LƒŽ6>ßÔç+²ò³N\WG°}OèPÁ·c¦]ÜnVL2}»š±×½.tt8gcßzOB`qYD 'Gÿ“,ÅTבMKŒeszçÏz²êxá ÄŽµÛl‹|Æ òAü”Ûn²4+k`óÃýÌwxl_¶ŽÞîÜþ—Â|“Ïzì¿s&ÝÝŒ$s²-æÀ¸‚àƒŽy„‹/ô#DA9*iòM2g>xz{þ÷A‘°±ÿã˯³VPf3·Q,c…u|äve³ôäóõßù츲²!:ûŒ@ÆUD¨w Ëžsêຎøè:A_ˆŒE>Ô4|QûÔ‹ƒ9)|¡Ðàýbxê¥iý´ãœr£®Ø¶Ö èà£sXSÞÔý¶çÁæ¤d܈=n•ƒ÷ #é pŠþtê‘Â#Æ ù–Ø<ð¥Fã—°–¶ žHŠß,âÄePÛuÑdíÇîËðæ/9@[?ÊKÛ˜o=.Üfݲ8tÁŽý$¤¹ uÔ!­çþj1¶£ï93úæ!mdå ›ú†ub6G[ôá™sPa,îùÚùi|%–›jøÞ¾œ“áÉ{‰ÎöÍ`3ž å9cɤ"E $‰8,™ú$N½$ÀÚ(Misâz>ñ #™-¤Ûdef°íL{ÀQÏÛÈõ{sCž'CáÁ3QdòLV xCӹđUš"­X(~.†ŒóžAvLý™/sÃBŸðX€–Ž´ìÌ8pîóùØ?XÄÌ)‚-ðØ,¨ZÆA9ÒÄ-.èx6ƒÿèÇVÍÁ!ö€]–Öד0>Ã@Ýe+ðÀþê ‡Ûv×ÚbW÷2‰,Y ÖÆÕ1ÖiC4¹Ëè¢{r ³è—]ù–‰‘@ÍÈ誶6‚ÔçÑ-÷äÕÀq`äJ8s¬2÷«w^A×<ÒäGõŦ-˜‘YD£.üÄÁc˜ ?õÄ×XeãBÖud[Ìrœâ2§Z°µ:DTh7ß§m‘sj7Nó¹êÙø,ókÜ3æÆ—˜.û™£7—ä!mp£`–Tzöƒ®KÙóãþ‘6f¬é q ‹zƃn €e|Ê£+¾øa]ë7g±E'Ÿw’µêž2£HŽƒMÎÆn|ßsJfû¤»úø¥ óþ; w§‘Q æ0 » õü%=4¦&®óè¶Jˆs3›µñ´óÕ&:×èfΑp0ðžÕ`1‡hŸù×–"6–Žá6Ýq02lf^LNÂ ÛøÆj÷¥ÁÊ|G'N2Sð3cWñ«úÙæ2ŽˆCÅ5ÄiuœÑñ¸Îdh^»±‡!%XfžŽé+ïvÞ¼ñÙ[‚Ì" ÂÒê+ºÑå‡â{ý87ŽëÝ5GÓêªË6gá4¿¯Xã¯cGÛòñK×U•±SÃÀ”6¸#ææŽI‡9ÈVYÔço:Û „· ÐóP¡z¬”s²Ñ­«Úð*næÔA”ÎŽª%=hõ‚}ÎøÇ“dv„ƒ`Z7–¹\óo÷Ûì5}Ûªc$fñã àÊL2606ۘȽ \_5ŠÏêšpÄä%c{%IL~Ò›ö5¤–‰üá«Å:êÕPÛH³ZO²Cô ~ {)Â;Ò, ôrÔ¢˜¼èÝœÆØ9Á¯º‘€ý†ruŠ˜ ¯h„k da§Ë»)D’²¼mÏD:¨(¡Wlt©wRoîÇwŸ(„æ›öâÔúŠCdûŠœuµešL˜âëÝJ$â^ê2Péþ;>ê;1 –qÑ'—ðÑèÙ|äv&ëÜ>€­'4=ú#«Åfdèæ5ÔC%¼†Ã8†h~m]މ u.’Zój’_9L›c‹ç›ÌÏ;$†-)9Gq‚[÷”í*¥ÛRú¸_·%áùèšóÄ qÅ€„zæLôÉÏù~Œ‰q€Á¹mw<êX`ÅÊÙÙ|6 Õȉb𖉌m”×øÍí„ð>ùÊq—ódYØšƒŠÙ[¶Ce;Ð,çè6_!ÐÖÚ€cÙƒó›>}Z.üé졨oÁ˜«¼³HªÌa.GN4}5/=¤‹ËCaú·ã3]&ÒU¢ªŽðŒó9.Œ77r1{ATÏÆ(9”“]åDë?QËõ#•ìÞÕî»…âœØbµR®ÂvLõÀò 7¾‰72¥ó9ÎQ A±Ôuû-Äï•_ ë ?½ØÁºzøK|:‡8¦ø]F#ç˜å) Ý èø&DPõBÁWÓeúB~ð&û/Ïôá»»¾Á/.5¿ò:sŽ~¿ 1®}NGI3ºóôPÔ»€ÔÓ{sOOç’á%eçÓ6ä.’ ƾºñ$ý˶¸F dèH@œ¾§üÊ·rw®ý&?]ƒøðùÉOxM¹4Ïv¿ØÁZÑøöÜŸÚâÃEŠþ™€J.v/ƒƒŒ=­»GÖ¶_0;_qÆOÚ“ƒ¡Ç3:±µ•ô<M2šÆšöyh²ƒ‚/3Ô8†kùÀóX9Œm†y ÄÞÇÕ0úe¯= XwFiÌÂr[~Û{ Ïµ"Ä^*'*ò—'xXƒHi0Ï|­¬þOX{â@¾ce¸ã¸,<ö7³•I¹¾’þ’Mjö‹×AŸbùºO@¸ßó¿ü·ÿò±]¿Òÿ…h!¾]«¯¶ñ­®â¶o™3®üÝÜ6&̉yo à³>¹€%øßxeFÒwǽÈYgp½}U7ã ¸ôCöyËOæDƒõ?8÷XÀ_æ3r¼ÏæŠ%ù¬9àÛ^F¿\°{—tÔWú}{úñƒ½8QŸ÷Tñ17»×qZ?=è êA—ûn|¸Ð1É.|æ‹8)áròY®Íaæ¯U÷ÐüÐ>-d¿9à&ÔÆÜ±Í1Ü£ck0/~òK-¸Ù_ïΡúŸØ•ùº3hdáWŽlq剱 4ןçK6üÂï.ø [æàHʤi÷÷¹Wc‘Û8€£ø6=‚Ã|o.Àæø{ì¸uÔ#)pô¶Ìóký\/šH lüæóÌ?ùò°&“_|Ÿ¡åö„lšÏæ1X}U· aŸtþ &@×s=]¦»¼QP!G;ã´c-{æ¨JO³Ý/Ñc©±#.Ùwl}4¢»”p3/xÑ káV¡n^REî1 ¸üÑŽ}ÆÐúò}Ïå[÷Æ“š~GÊó6}z zžŸÃ‹~ú+b"1Ì>ÓHžþ<£eÏyõÃåóP}nÿ0­å-匰tY+2"?÷õù%9ºŽE¼š3ò|ÏíäN˜ÝßòæAÇÇ6j“ƒ7ì§Çêza!÷íßŰ.édÝF9ØŸåaš:h~0#wN¿Úòèøíå‘'~»þÁ àï|í·¹6ùÏÿõ?»þqßò…o}úŽ/þÜ5ùºO@ü+ï|õC>NçC‚…ÙŸLŒ q’qbý ‰Ï&NŠø»  ,ð0O`%ضC¢Âd¥_Å\¨O»ƒYyO¤÷` ƒà /zFvÛ$\“"nôcËBc4 ;Žâô|Âûq‰àiB|ج”ÃòaçÓNþÈ!þè¢}ѱ,ä‘â^ç¤UQÜѲÖÝqà‚o{Tä$ùްãI¼5þ ÌsâÂÓѵpbHÆw5œÀ)V8‡‡qa#\N a/]ŸôƒÅóOli N sâŒñv˜ƒ)+õ×7 Ç{X.l‘Ócg:†3ý«óU<©¨”ùp1-0Ó.Åþ†+ùµš&SÆ Áb©qÙ‡—ŽÞS¤Ô±•IþG[ü ç'$ ué 2_ÚÑ}×uH]…&bª­QCç² —H#}-ÑOÛG:TzLß`¬¶<ú b}!—jÔð{ žœ+Bæ3{€p´®½Ûºô·ï!Ÿê'†AR«>]34s¦ùõ»Yìp³6s '™X¨íéÎÑšùj…{~ãK(u®*ùN‡’ÙrWt]ÌX'Ëk깿ùôW¬­ÃÃúñhí¯`'›¦'žŸø¶Õ•ï è8œ­ƒïWûµÿrPÂí‰ýs²½µÇ׳8ÐÏ~Ïè°/„}òÃÞ¥r×ÓÆöšûQˆ.à]c³õÔÑ׃þ¡ŒÜvþŒ7~Õ_{xÞ¼š(™/ËA ”Î m磤'úÚº1Ø_lÍaãRcÆÕzêí ÐÇ·2+xóÅ#Â?kÃ~9x÷ÀX¤(¶5ÊXÙ"Zƒ ¶4ƒÉ´h# §­ö½´â«/rãµÊp§36›õà·|[‡ü¢›ØHÌ3;½ý`=¾ƒÕ¢TC;‡èÃYVÑãHßæC4á üyÚ¸ÏÝ#£´ÍO¸öôÑj'ay£‚l°áí–U9LÄÛlÚ1KÇä úƒ7ª!>ýŒÉ%íѵýuíž“c¥™2‰³¶\uî[a$VÅ@=ÜÙ¡;í;ëa?eåµÒc  é^:ijݱLœôeçüÔq]d¯G‘ð“[vFí.òå~ü¦¿já3}zø¿ì½  fGYç]}oïÝI:îNÒ}Ka!è€2" ²9®Ÿû‡~.ãà7#Î8î+ó錈ŠŽ Ž""‹ðá ŒÈ @Ⱦw¶NïÝ·»ïüÿ§ž:ç}ï{»_’NÒœº÷=§ªžý©³€¢ƒ·/F]{†‘•7 ‚oµ]övl­¯VÐ@?lQ¦‚ÖÓ(R[oÙâ¶^SÉ:«ÂÈQcØ¥ï#Q¡r·Ùâå/d±ç8ˆ§ÓØ£Ÿ§˜MÅTž$d(±?éû6C‹¬v.•ñƒ\póN+©·ü°–hÓ·ÆW9Ž™Ð‹|<9¬Ü î(Ðc´Ñ’©¢Ð-1Á«h $e…oñ_\C)ëw »†â…¸/ZE} x”Û‚k¡§š™B)æsJÝ wjCÑÜeAÙÓ+ÎΩZš¨3t²ªðþqyáWCzg²|Nš“ÚF|  ‚%Ò\N_®y¡‹~A#:Ô á§\xšoBB‡å@bèĉ5"Ol…;¸IK çzðest)ô§¬T£VÔÃ3hûÖ…ÚðBºB)tm÷ô!zu×öJTe%_ ªu'Æ]Îm5ï`q-F®—Ôw0jûɾH½…†^cÅõ¦» Iz§ÿÛ±2F›ð¾ŒñüÔæùñ- Œ1…ȹ¬ºTDYýFÖÆMóÕ X^T³¡…íi‰ßW¼Ñfk©ï¨ì PÇ +ƒ2xÁ§A6fá(éˆsó½õT17=ÊäãàÏbo^üá#iG_ðΡ>KÛ¤Yo®º½”´}úý~³8Hê™OËQŽf橌o Bá2ï°IuR£é ²y+c;°Oôð€'0~}ßë,²¾$ýûÐõ'ѧ€“:›¬þH»ûbFÃ(á{14š¤Ë=¸Ø›ºz}ƒN°„£‹ƒGῼhT=U™äÐöU´vÉÏ ‡pk Ìvš+àŠ+#ʼnî’6w‚=Çgÿ8é_ðâ/ƒIäØßnçàЃç÷òKh³¹jÐÊ’5"_ü„ly}gêg‡‡û_2œ¨×Sôê§Ô=I)×6U^†žþà 9dŸø¦—ØÔ5|R˨Óã…ÿ€'.ü½ž§eq=Ðñ- ±#u¨¹v¤ðõ: R®ùšÍÇ”€èóØÑäHæ%˜ý§ê€UfBÉcxÚ‘úÁÁ:ª‚k¥ý­ýƒž¾ùöìÈîk¤è©AšÛC9'U¡§!èÉ:—€¢c ±…')Ïo˜£e`øÃr!r9ð›®•ÞL´›í#•÷åg]Ì.xQGJ]¢Ûððw?…nðS’ä€O XvjÁ -ÀÁ®€;2ºè QLÁ07ë’6‚bþÚ¹týóyV Kß'~Ú‘eÈó˜‰ã±[;NÒ£¾é¯aâ',|>Ôº¼ªêÒµUè ªmFsN9ÚvôøEFÒ¦ÞèÕù<0"<ìàºþŽ2ZšdAZ‡ÍF(Ѩ /ßßÉëÞ¸\d ‹dÿ#»µ3×¹ðð´£ùH¸üYŒWò1e„൱/}èÆõ†úÝÓgé8§òOÜ8êp#°ö$tþDc½jÚ[GdG÷áÐß%Ô~!MZöÐÚ ÒÏ>¦R)$t9ôhúƒ…¦Ò­H†™Ù6YXœÙ&P¡ –)ÜTÉŽ¦WÂ>ÍøqAÀ‡Ž>Æ8fÍvÝù¯’mòÞØäÄ¿wÎrˆÆ1„ÂÆ õ}­‘ªaÀ¥ÖŰdØ‚Ìæ/ÃWÚ‰L|‹¢5‚§ë+¥Û²ê•õyþP–Ð.¡óØW>¼(#ß´Š`Õùøì3ìóNZ[_ü|)iÒd7"d)UJ½Ã~êÑ?弩>£ \dd2ÒÃ>ZÍ.j\†¹Rä5~]9¯Ýøìˆ}¢­Ü>µunm$Gø<Ìï¿•(ms¯þK£C§ÐŸã*µèÕ?ÑÛØBæo´, h\BŽh¸Î¨œºPŸ“šœ&>ªícÐÑr\Çñ7®—bI*†LpI¦ )„ ÕÓÖø8Rs­}[uy³Ýµ\ «l ^°å|5¶êB]»çS ¯¬$»í\7‰·ùÂ;t„Þ#i¬¤w(cìôCÿ^çã¿ÒUÌ;ÿV Ö©“:“¼ ^{ëýåjBvêÙÕ‡nKøôFá’xì¡uNQ¦ˆÞ®…‡s=|ábƒÛCpöþ™cÄD||‹¶ñ®"r'5$Këµ;J2~¶ÙV¤î ²?«~¢±Âì‘ó*Ž¿àe±U¦QÍÁ¼¿5nõMè`Å:Ì@Ö@œ*Oðì=3GWÊØ“œ+Q07¯ñkSâ‚bßšK¥ƒYM>oÆø¶¶¬xi$ùR H¬í…¶õÞ‘|·ÿ: Q•ƒ!ù~"äÎz•Si4­ÄMÉpC=-\z/ V™§e£#ÓNl¼…oÙ­Â%Ä8¡³‚ZX›=w †Š\šÛfO^GGí«6Wbئn°«”«Ý!Øê&«^ЭTlbfÊF­°ÄIÏhÈàÞtQ1ò‚³*Ùàà‘¬}q¯*Úør¡•DoUȇmJ6-àžr€u0jÍõE˜Ie›vÁGD·ñ@ ÒÊÁŒò¸„{Æ4Mw_A¨´œ@ôÖxqq dèðx¿mƒcà'OJÖCøíätžú>/Z3zuç˜ä¨"Z½ÃOÚ¤IÊ›\)­ÌP´Ú‡Þy¾À[•ñà­ Ó. ¯$ÐZ2­«ë&}*¥Šlÿ;1¯?¾C.E󷬔”w6ŽmäõS^ˆ¨Ç·P>[t~ãtyü&»  ÎÆÓ…ºøG9+íeŒj[‚Úªª@µËð׺æu«š ÌסJ‡Ñ6&I{(ìE¸‡/“bêÎr³µÚJÓÄc¯oæÒ¦Tßuâåã9=€ùŠ–¹º5-~ÐïÐ+†C͇ peÍË¥+æDÞ™Èû@KzÊØdlí±'a!û`=NÂ5œÃ=¸±£l–Ðþ±†K~œÓi—°ó:ד:S%þsà¢Bm\óJpò+çQeë}=ìµ»}bæ¡—xÔÙŠµÜuÐ`Ü'£u´GMâçJð¦6\Þɲýö·¡X'¤ÄW¾^àÙü` !%Ú*h£‹ m´s࣭ƒÆn(Ÿ`0Û"ð;\øË¶îôNö­ŽßàÔ 1®èçó!y˶¥Õ¿µÆ"Uß3ßÜš*‚ÙÁ=òaÕ¶[[:U.ÕºÈS@f…‘3¯漩bÓðÝ´á­zïU}ä 2×vDq|Á[†$ŸÎû¡À’ šÇ¬ï®mxEÀàQ bS}Ô×Û˜5¨ï·¥ÅT§Z-Îë*ÛlCŒõàŒŸñST*ÜåZmY03–öþ§WoôêëfÄÞÆz¨œR tXù˜ Ròòߨ‰­‰«`ºõìk6˜Él•ï•Þ}YÆGQpT(8kâà¥-—­p‡2È”³M+¯pðBÓîØíü×é_IKM¬ñà†YtºŒ”%ÃືUä+cËÓ&ƒ&xwç’´¨~Yœo'ÂxÂdL6Æqƪè8p'+»cÄ¥ wSg;ÁcÃõé€ÖX7• ’”þí躺À`›øÆR¦(…½Ú'3è˜Ò"iìÃÀsÉeR\€ëOÇA»>4~ÇöÚ²© Å)çžêjŒ9RxLñI8klj»ºJ·JÛ‘´¢âž4"ªÊPºöGPŒWOôÏ7¤û>W}¶€Âa8výè­ïÃÇM•;j+Ps0ôòAŽ ×ö°¶ÕŽ±Ô“ÖŒyy •Nö üõ'ÚÊ*dZg1²ËªÿŒ£¾oƒ)8ÇêÈ9[ë‘ o¿þºêŒÌ”+á“dDZ nLÕƒeè)"îÓ¦Eç˜vež‚ðê×ö-*1æúm†žššÈˆ&,ঠ:ò©Úi(K4<Ž ì†Î?A …y5>µ²Wn² yÕ”Å:ëBѺÀÆ©ï߸~VÝZZãÒúÓUHöp}‰+W¸ÅÒGøõy;ß쪟¡ÄL:YÄÌÇ(\¨{¾ ‹¨Šˆ ¹ ðÎJÈ•7œƒ¡&·– ØÕ ÛôK÷Ot&/Ê|g)*@€SX1ˆkŸ¥ ëFn‘%6ا |[ÛX˜ê‘oF`´¸wQï{"¢UŸÉzײy5ÝÂŽÀ!tÎã4ä§–›DµŽ¡ä"hrÃŽ°P\ììËŠdW¼×GÚ9ìK\´jô•Öö‡â‡ÝNÝY¾t¹oäpKÙà¼V3•7Z°"¡ ¸AÚӄ’´©t85<•4à€‘\V6/¸‰í¦ ¸üåœC“ ¸¯¬¨¬³hzœn.âÇÛ®;^œÊz§³àpŒKHUÏ|âÓônÞˆ•õE2;b`Y1Ÿ´úˆwëàˆ@ _ÒOé› ¦…B‹Wø†Žbnêàbpø^‚ÙÿÒ›|òŠ`¾“…\ôN|—Ùˆ.nô²‰›Ÿ«Âð O‰C<}O9ÚÇ9ó&‡.ÖSºôíO¹áÃìô?xŽó†W&ûKLãR­òn¯Š`ÞºIåñ,Åðóñ[}ä„„"W¨Nö¡jò)@¾B9ÚŠ©eAÀ…?e#³¶ ^¤ .mè¨9Žt.TI1aÕcÙNÜåð[ð-ºø<ÉJñÈW="‡_ߟ^L—O²E›ç Žêôq3Û†‹')o¼äm•u£i䘆m†±ò^»‚ÿ]µþÁjiešÿÌc‚cv¤ ʶ@2×ÄhÛÐÓÇ’¢ˆ¨€[vVãѺ ¼øþKø”c YàÆy“ç¸M1Îë±-ZÚ ‚€‘© ;hãäm‘ö­êõß?†Üv’]]oûM_¢>¼ ©ˆ•B6º†Ï²ã<ýØð3 œ‚R[—<® í¤É.ÎTLxùÚn†•w…‡Îˆ `ÒÒ^©bÑÊVð%ùP+Ù¸D}¾f›rèÕñÏM%XòF.:ôõ°¤Æ3„QÌ\…?Up0¡«Sÿþ¿´‰<8]§.ÊÙ>Ð!3ËèîsƒÄß°f´hyýu-Ûvµ`ªŒ~ÝýÀ5¾u¥ÓøÈA¯ ­Û±»Ÿï0¤>¾¥Vø¢f`¡²C>pd¦\P‚ÌH¶QµP˜Öº„6”IyŒEnñ_ŸäĽ Z%h%,Ï5_oë8®‹k`w M}ƒ<®à¢×·M5 m2®$¬«Þ3ƒPÔ‚C§¤'Ʊ\QJ8øxø2HƒWàÒé#ùüW{¥Ô¡Gecz×Q¡”×%´Iÿ¢R5Œs.õCpô¨¸Q ]à£cêIMÚ„þqŒÜ ¤BhÑo¾ŸAçߨÞ*À²¤W=i}žIhëh;Ë®ÜÇÏw—Åú Ý:|Ž9ÛÆ>A!Õg; K¢Á‡H{„O5,ýY‹ºÔã¢qÿbôÙ‘·­à4>A€©·Á”+Ò¡}ºoë{¤4uĸ„¡8F¹TˆZýs Q œªj¨N™Âéáø&e Ö&L÷8£†-NŽøéÈÓc€Á,eȪ´¡\sZêrÀ‰Õ±E5y±ÿ@åaY‚ç8 &”V’ že“ÐÙÇ·³‡®nû‡MÊg[Ó6ýüãÁÝ>¨È¸¸ÛÇüåÁõk€7qlú‹ëI¦àþ+ü\¤tx.«:dvâŠ/¯é‘uçYðËv÷ñh1¬Ñs‡c%`d¦¿`Ïy¥«wˆœkGŶ^ÝVí°Nb؉}èL‡8Ï"ÛYëA)d#aÔßÀÂO‡¿gš6ðW}g†±]¡ú Ëc.øØ/¾®A‹ÜÀ 9Ý–|Ý é´_ƒÊLjÒ™22{póh›fM^Y¾dÞç@®ÏÕ§ ;FpÅÇ~ð¦]ëä±]]d›žêøräñ|R*œàåût49‘7Üѱ¶} ²jãxÞ¸´2RÙ/óG”ð¿i§ÏwiâF1¯ÐYÙ¦vwèAM»,8b‘Ê»"BN÷¢l˜™U=9àËñÜp¡aædFÞ JŠ ãxÙ8nz6ëb®ôN­ÒbÕˆ0xPȶ ùAÁñbBйT© ûŠÍ®¥Œ0Yª Žl xBFûXd’¼´¯ÍjÞTÏûM_ÚóWù5Áæ¥èÍô•w(aü†ß@2EÖwuq,óêíHÈêüÜ<¦,J¼rÝ1ÔI6U}ÒŽô‘y›„áóÈåñëjoòZœcˆ ¦®ž6ÖwtYê5Aˆ>G{A¾Ëã×>B×êO4âØíëþ‚«íð…&|‰æEF>a—Çk¨èŸßVÔ®t`ƒ<ãUÚô†wp—^¨¦_½¶úޏšbákCêÅ}ÔLÐŒà¼) 5)Î71"Uœª³õÀÎPË(n‹Ä̼-+ŽükÞÀhh#TáõÏ#øÃ/ÙÇñ%ΫÐÐÌÍ ý ¯<‚ÝÖ;Ô5A("8þ„k¸J"æ<¢ÎR¤gçOj€‡âæërç#û¥©¿°ºÄ'?žú0·0zè:˜²;|C]DŒ}aô1d§€á=êÑ;¼aýšN¡h“-"ÃÍ jÊèm˜¼ÀI½Btø2çh[Xgµ} 4ª#ß°¥jZŽð®rÁøV߯Uù³Oï„¡kÒ =_¸@8•õˆM†…aÆJž-ЫµQ®F¢CÍF›¤Ï,|b›+ï&ÂѤ2 œIdã AëÚ–Ñ-ÎSá‰á¤¶qè!~ áUžvÍFr.‡oÚ1àúŠŸºÉ.M@t^IÉ84ú%nk?U÷óè—íD›pí6<Œvwm‡:ù§zÚƒX-NŒIŒã_;·|kǰ+´5Ï Ïz·3Ç[^[p€ye[„ŽgU;ùÚ1jâ:R‡ÙMÝY¾Lk@tAA¤o bš;BÊäüQʤ¾áíB©zwVzp.”}^<ñÉ Ñ -á §6º¸W0£Üà´HH>nðZÑKïf±³Áç`VMzYùÔ“J.6É þ¤¸9Hª„䶤 ô ½"—+ü… ö¯@©'u>*íTÞ¦êc¢sø«Ú,XxÈŸõÛ²ÂË "!ãÛî ×’ö\(à†çSO HÝTíä¾õ¤§"|‚Þ´³NL%»Ú)èNˆ´ÉvŠ(ýioÉ}YF.8éò¾Áú‚nSBŒ|F²Ê›?¸=ZÛ-Û%ýÅ{ìíïJÛ:/•V@™mˆMMofä_û¿ÊF>ؤÐ|­Ù´ éaš€£-ÁLó›I–]åVVq’÷t DË™H›”ƒ?â!AhFY¤ÕåUÒ좜þ^wa ÎÀ¬wå“þ gn¾m^,7SÙ–º€cßã)Ý–¥ú8Gm¿é¥<7çð™-lÝÙÇÍ•ú.ïzÌuÕb6¢—uæ|ŸpÌõI:=Âg}›ÀÃ.¤‡ñCW–‚¯¡2ßô”õ—¼œ÷~¶th€ló•Þ¤Ô…|¯a£ùpØ@^yÇ51ué®§ÙnÉ‹· QGŠmm+ׄŸ­ /¯ÝIÏ“@òU´©òZDÛrƒÅ¾HÝZê|üŠ–”:XoÕqŒxpõ'X>Ž”Ï`­“‹~¸Â@zÌa%xÙ6¨ÆMݺ؊ðCw¼‚ãð…(moÿÞõýk½;êâO²œ¥àºØä¢:rMëëR©„,xh—ÇreŒzÛÖÖ=6_3VîHé r¤4u„“'(‰áJíä&.ªšr?¡ùD´»øÒ›®Ò÷/ÄÐ$£®ƒeY˜ºÉ‘jMs*XåpšµREØ%²¼xÕ§yp¤ÞÉ1˜[[ÙN€/ ßM£éÆE—j§~ðÁ_Ñ̦ÅCbe¨*̽ǂ,z°Ï‹¬²Â“1n˜UC1I[Àñ¤ò ­U™¼j€ª„†ªprÂË2nAþ O²ôÔ†ªS@â­¡äâ„=ónèä ^Ò Yyö€ 'D´ öáø´éè–…ÌŽ—KöÊFží”¬ÄÅ/wƦãeBój¸Q¸la¨œ‘"i=½ÓÿAoé[å ,yuÛ¥OP\•o$U‘feA ´ÔǵÁÀ:ÔXÃ[0šÎYŠJ©K¿ægá{¶IÑñ–ªCvZÊ'vj³´Ä^Ù•ÚÔö¨`ï?uM=ûÊ##¤ŽQöˆCç^…Pó˜KÞPƒ1A îLË5>áSñƒYP$9UUE2:ùZ™äØ*«Yî¨q)åÂTi!fÔn…å‡hÉQX)Ë—//û÷ï¯nåвÓ›³”°älÈ(P¸qŒÁÐøÕ)AÛÙÐàò…äëU”FÜGdF¾ï_[T‘²È¤ ó\ŠÄHjh:½Óæ¨ ‰‰iÊþA¥Š MÍTîé®>pV›àÛ´‹¼SÏNµY xwÞ$µPœ¬Œùd {|ÐS¡:5+D¥”Ì}•D9rlÚ׫BGÁ–߯•RÔøO‰Nå„>–evÁŠÌÙ=XÖƒ@¾ßîÜÐÓ¸˜åÀ<‰S/•ã˜êsH´È¹ínðHµ¡Þÿ+и ]  QG@›ùq¹ð ›•«r,[ö±Î0ïñ¡Aàéžî‡²Ø \0™“:ï|!`Œ—5KÑÁþƒ¥eþÃXñ'#ÛÀQ¥€ )¨á¤}|ÿL´Â¥Úp8'ŽÐø¾ -IeÞb™q^PöÊ•:z2 ÚÄ7ÐUÒ“‹OÍÛÿ)˵BëI»ÖïªM"§V߃_õ‰íjÌj:Áñ4²›N" „¿/ù§uï]øÿôSCìIÉ?dEÍH[ëÈ›©; ÝjVK(*f`ß‚ñ‰F€({öä¹eÙ|ĨëGÖ“ÚR”e;À°R‚Wô)ÁÛ(†à|HCSœGãåœÚtj`ÁI Õ/Ú»pyìÀ7/àuôH–ì:ôI>*ôF'1­.Wú ðá­J–”eË—–ËWø·lÙ²²\¿eú½¿ú¬^2½àôQ ÛÁƒ<¼à5¤Áƒ< ®âá8¯b?pà §îî×W¸çô`„¯qó€dßþ})†Ì ][ŒF¾»¥_ç?wû„vŽñ"ì'¢k&åáÃÆ…™O½à×äZ„â[f°L*5¦ÌˆTehbJèöÕ¸Såèøé§H«ÊÑq‚?ª’·¶?,LÝ’C–C8p’Ž•>ñÛOÝOÙ#†Ž¹¾ Øe@Íð”‡s­»ÔFs[…-¡P*KuôâBÝ Ä£dõÝ©@&);'ð¤gÖŸÚ„S“θÕpd!gN&ÃA(ƒ¦ Ù•Ü!éÑЙ¡³…i$ëlsBއ¿l›¥î`Ñ ¯°+hy^iÑS£ ==Ã?ᤤx%AŒjÉdæÁ7?7Häi l¦{éÜž4V‡„²§ýˆ¯çNš÷’²r%UeÍê5eµ:}Í`Ø <0x`ðÀàÁƒ<(ƒ­ÖC^~ë×l^<„Þµ›ÎÈníéìi22‡ØŠ‰ÛØe`æü0`4èC÷ £L!3 Z\ÇÖð«cTÀ³£cLëÏàˆn1‹ ô—€‡,œ$ÿ1‚Ä UÇËZ7ôà]Y™Wöáë?€#›ÈћիW—מXNX»ÖS©’ǰ<0x`ðÀàÁƒ xx<ÀC_b1~$¦míØ¹£lß±£ìܽ³)AGpéØÐq#ňu)bYÊÛÁ'˜Ï”ߢl*¡&t„Võ–µàWºÁ][=èfýJ`F-ÀÀÔ-¢a—ƒ>C_S¨¾šD±ò‡ áÀ_h†^Ôã·ÎŽÜÈõ'AÑaÓÔ÷ŽêǬZTÖ¨™½ÐEëÐOÅñ»Ÿ}¿‘C_aª”9À4(a§,$T„önøÆ»f²œNËrz '©'”=Hƒ½°%p·„TüètU&U÷¾Žø¸ÇÚˆïù²rÕÊròI'—u'žT–.ÚÕUà°<ð¥{ Ï—Å(ç å$]$qŽ´ÔËfݼ«Ì\¥žHhœ€<x•×½ ô gHµft7B9ïK‚§¯zD½,ŠtÂk¶W3 ¯˜TÁ3ý(“/^euêu »lUÊ  ŠíÚhz®£É(ö£Å^©f{5£ÜޝbzªdMÝÇÎlF„ŒFÕ]ˆ< ‡å˜ÀQnSÀC­ØŠ×úȘ¸MGOP¹âTzJ…ôàÉuÞ ÇpÀÇx- ¯xݽ3 G÷G‚b¥ÁÓ{€·¼žrò)þ͘+÷o¿¿lÛ¾­ìÒ ×Aß×z?‹õ„ôö ©ýøÖZäÉ«kfÇœ1©yÀ‡_¥ÁY9A£IP‚1¥+RƧ”‘E\½“ƒœà”‘äôcTøê~+§|Œ¯€—¸@CV>¼ŽúiCèœxÐ6ðɺà?i;uDÍŒ¥æÆ#„¤J¤E²òÚ§Ûì4!c †Økʹ¬ú|9 L¥>œDŽup iÈZ:Û­6ê;ÉÔn32¤£&Šp.Ú*:B]}ÑûÇÃs@7¢åÏŽ<:@ѯôúSÊI'®“¾I`.Sm°cï¾½îqïÙ³§ìÞ·Ç‹¦òƒlS1 <0x`ðÀcÔŽ/°½ô]ÑàÜ¿»BeÈ?J<@‡d•^èÃK~V¯\­5·«Ý1Éxo3W®XQNßtz9u鹿Üsß=íÕãɇحŸbÚ=±¢þ¯’ˆa½WŒ ~–1¯sBWO!ô£É”i\Aè·¸ó"¼q^Ĩèุu Þ gg&x½å f9èRõ†×!Å¿”‘ßLÐ8NÎ  ¸ÕNÊLÝA½ºÅcäÄèßPÐ?õDž”x¬Åhe#$„EÙ8S‚—™¸Tsú •ap£«Ad™k– Xßn\: 5Ò†¼Ä7LxðŒ„~ ­z!·ÂcJVÏ&V®\S6ž²¡¬]³6-YaìÝZøÄ¼Ã»vzÞaNc;é<0x`ðÀàÁƒ XÄÌÙq`§ã«DaFËÚ5kÊ kNÐú¼0=a‡Ûij€Ù-¬¹ëÞ»üÀâÇ ¸#–¤"¸e9cVÇœGg h`6ü#טÓüƒ•·³Ö‚øˆ°â6XVY1: Ô8Z¹nm¶¢Ý*~з˜=‡ PÄàì[Yä$žÐú¼ ™&MÝazQ¿ÇäRØe¥ÛëĨª¤jªqè˜y”r™ý cøÉã"0\ÈìÓO”Í_Ö÷G^<-IÈ}±ƒF…„·>g0³‡Gž†Ó×OȆ²"C.i…zÖ§o:­œt‰.O³A·í;·»'}ÿŽížþ5 Ý€3x`ðÀàÁƒ <ðÀ=À[S‰½ø‘˜nE Ç:]^4:°Pð“N<±œx æqûÖÛý‘ÀŒ€“‰ñD‰+fœ¡#ÕÈø7âYÓ«:qÙgÕ©ƒd\±0µé#ÈMríc=ucDˆÆ6A¢ŠSU¯†¹¢Ì‡ýUnÛÕL’jzƒ~_¡‡² ;u¤}â²Àè~àŸ=!ÀF ŸŽ#ðÎ|³q\–ãí¯>L63 ÁÜ>sD¸Ñ»ƒK$¾ ¯t®÷ =nÃJâ£ÒЖêuÃà¤out;¤nÀ™_¸iÃF÷žûõÀ&%lÙ®QŽ{5!¼‡b”=l“ÛžCò‘kÛ®ºF®nku»Øm’e8±ã:±ÜX¡„(ñi—úåôÄ>Ȧ-µÜ?v`ÜÐL3V†Í¨ð‘²±{ õ¸¬Vî)¦ºÄ·ë¢ –²ÙŠÈ-xYBë\åLàsÛ·i^ê6ã=\Žc¦ÒKúçÔÃ%3x`ðÀ±ë®[¾/ëޜ׳‡KÛõ$ûŒÓÏhâ¸VÜÿ¹%*µúšR»–s‰:ç+þ‚¼8›_½ :oî°‹T3¶N­¬RÊÈe«.ΆòIÞì誛Ð*~‘rc[ácåV›~H‰G*WE=v¤„^­îÈeß@…OÌ6î¿TëKݳ¦önM«âÇè#ëõâ #Íhá§ÓBç…{ñwÝkDÆî×èi˪ÐÅí^ˆØB€Ì•t\tIL};ᓱt°S2ÁOæÓÅ·ðÈx"iUÑêúðˆƒã<|ã—ç2¸Ž]›°›øÈ7bi=¸×ÚåõI[&í§î€„ã¤=(a~tuk„þ¦§tV§aÁ/{YŨ„çÁfÞ8˜þOÊ}«³Š&Ñ@*C«¿ætð\Ó¤Pc¸X'wp°}6h‹“úh&%ç=§Åã&ñaÂø­ÐÐáÚÂ+}—Î.³M,hš&¥?ÁmùêÓg>÷(ë!O-¾¯þ–¢©«¿]0q‘ÁT¯eóv¾Öƒ¥ ŽÂ0^‡«²Nê¡õzèüS’‚h ÖéÇxñ¶¶„-¾÷:¥*'_L€–«Lòr]l¬á ÉÇM-&¬|È»ÎÆUýû°R>ýŸÖ‚¸{AxÈÇý>-ÂÛ£õH|QvHƒ 8’X¼RÔeïëÛ‘$œ‡‚gŸuv¹üŠËÍ)ƒ'n⧸¤Œã`äI÷}šòe=-ƒõñòGÉ7È#à ¾Áÿî˦«ò&ç ¤«ª3´ýg^¨ÕáóÃW㦇¼abO®M-‡ŽðŠzˆ¬[d±^ÎÁ?ǾʣÀ_üïqµ¡öù$«VéCM !ëd=³°È>nÏiªÕ½­jÇÎzaÏÞøè ÖÓNãϚ¶Ï˜5½ê[±%Y,q|35‹ŽÈÖ{îò‘ÄM¸Ì­]É^Ór„Ùºèœ ô ûƒæycü 4uò` ºÊ‰'C<0x`ðÀ´àÚÁ7 ©*têtҺ˟þŻʽëÝ‘àè«jž‡?-ßBÅC¡¬gx„'Ê/†·¯Ž>äóàʼu‘ß§ïå¹ß/Ä«º$ÞDœ*'õNê¢LÍ/‚£·€ZdžÇ”+ÍDû¥OꂼNÊL~#¶ôðš_ ¯'>þ‰å’‹.Yô0éÇ5¬íðƒ±Ý{Ê.­ŸÝ¾}GÙvß}åî»î.·ÞrK¹ûî»ËÁ°›)ï÷é V;õ±A^ò3mÚ§n·Þy{¹më9uÃ&/f_ŒžÑ?¦ä3‚rë·ùKëŽ" AMÖ “ÀRñ«ú‹NŽg‰Q{ |Ç©ªËx°Ñ*®ZǰÄkä–—%º¬ ÙÊ%•oÈMñ”rõtWWqªNÐw°”S÷ÍÄ ƒN,NÝa •]R5ÈÞNŠá™‘Nߪ£ùg‹¹q†+`+ùA¼4õ©Â £§Ÿ¨p@Q¨´12’0M°«¼,A½öá¶µ¤,?5ùô}ã(W¼L“b䑪8ÇÙÔQ&.OŒVîÞ–ÓÀÆ„Á‹mp"7Kƒ:)MÝYªÀ˜'$ ”£Ü»•PŒoL`M!y¨1TªÕéÄÀ7´Ì‹vf sI^7A€aîqÃ@ÿt|R›’™KÈÂÁ–%<ì*Yét†à §Ì+Û¶œ¾åˆOoÔè)Ó™6ÑÉ`tcËéUYº¼œzÚ©åÉO}J¹ð¢ Ëé›7‡~Ó2ðS='޾éÛµ8oÞÎ6)]öe—•W¼ê•åŠç\ái€“p†ºÁƒ[Ø¡ŽÈ‡>ð¡ò‡ðŽòy{ã)GRéˆ iðÀbøöïýŽréÅ—”‹.¸h1”©ëW­ZUÎ;ÿ<ÿžýÜç˜îŽÛïPgùšòŸúÇrëÍ·hïrëí±žršÏ0šÂÅ›õjÞÕ‹tª Ô7²Ñxðç~ÊjVbÓñà<ãWâÓ\gá°U¸¬i6œ¿ÂæŒaÙG­xVœ‰É)#›?Ã-©µ,øx ½ˆ›S/°#ÁŠ,çÔó&[FÊ(£wß.–Õ5 âŽD§\¼{¯ôÅOÕ˜4…e ù>d¨Áù¾5¢©œe–˜h˜Š*p)ãÿLÙIÈp74J˜M‚ZTö:×öñ#O§#pU–@p£ ÷ø*ÝøŽ5·Üqë—4Õ*Ëmñ;©åøªg<½\úøÇ}I#ãz åÁGËt¦'u>6nÚX~ü?^òB~´ä | 8þ=À4«—|ýKü{ï_¼·üÂÏü|Ù¶mô%»55™‘ÒÅ‚¶ãß ƒÖŒN¼òõ¯*ù«{zùƒå7NÚé§~—_ñ,cí󟻺üýÿüx¹îºëdØO[:VöŒž€f¼ÛÇÇ?WF< ž“‚냎£ìÙB=bj3¾%âO1›¨_Û8»Òk_EåÁyÅʽÑøØ¡÷•7²øŸ$ˈc›©G@P+ýŽS¥úÉæ¡lv&B7U°@Š¿pæ!u0\®G"ªæhfާS1®uÌG”På‚·Î:‘š27®—Ëæ;™éižµùL'íøùwÞ½µÜ¡·ô{|ãxY¦×Hg†•5W<çÙåÉ_þÏMœa?x`Zä©5-þ´x,2Ÿ4}ò/ÿÆ/—7Nd5¿ww)7\Uæ·Þ\ÊM?|¨œ(}¨<0xàañ€îceõ eÉig—rÎãË’Eæ^ùµW–ËžtYùþïþþrÃuרÆH zs½âp( ®þÂÕå»~ðÿ*ðÛo{HýÁKžôä/óo÷îÝå3ŸþßåÃü°:Î÷9¶#¾cšááÓ²¶mßæ.öÀšŽÆéšÆ¿ZÓ¶n¹ýVů3Ǹ…¸ë~É_کЯÆË‚9§ª|øX©Å³˜‹2ÎW×Bq1XÑñI8Œ©U2©‰U ²æ³Êp@ðT1½y •rÄø£¤*1MßáM "x7ã{"rMUÙÃ#ßF, @au(0CåYÊs½^`ŽXØ.pA³S`)­¯¹¦¤Äú H<ÃÍ‹WFo6ÐñX­¯ežsæ9‡rÅân½iªÅL˵(|s]?rþ”ç=ÿyåü /ÁÃvðÀô@»|"çCËãéÉOyrùõßúÂpöx:ô¿?Ræÿæeþªÿ©G#‡¿PÓåÁƒŽc,_Y–<ù¹eæk^]–\ð¤†l9cKùÝÿö»åÛ_ÿmåšÏ_3§²þäõ#uCað@ßï|ϻʯ¼ùWË~Ïô«²\®úç«Ê6½^÷æÛoé}çc¡ Œ 0†7SžsÆÙ‹.TgÚ#"×Ýt]ñ[QùжV¾Gä¼¹óGôê?âã&VãgE²^Ð/ìŒu#òõÐÙáXÿûOžOPnl‘ãÐ\u£|ó ¤èqÀ/¨ NÄûÄÑ0FI©u?u„õ,üI…P u‡DBG: ‚òOžë6PÅé$d'…½óR\ˆ¤gDMʲ\Âù! !È%6âá9sª™äÜ•œ.S£6k„Â|wíçý&¬Ó6œÚbÛ>þJ½­ô¢ó.*7ßzs›êœñhÆ¿,  .ãY: ¯Ïö; äùëÇÝ”3VžU,­O-J—œ!Dìo<Ïq;”'A—çP“ScêÀ(úþ[/E¶þHMnÅ?0ß 3ð0›©; (‹s2e‰2yT'rr ÍÄp SÅB7©JYŠ£t%°ñä³GÈøÉrØ»­hTÈþI8 >BÄ‹Nj>îÔÆ[¸'¸N#§5œ¤Ë=ÁÙµ7]ߘ¬ßÓyÙ¢Wõžºq“† ŸT®üº—“O½(Ó åÁÇ‚&­ûø?÷ËúSFŸTÎîåà¯ÿ`)»Ž– v : <ððz`þ“ï/oø\™}Û˒Íç߬78¾ñ§~²üðüÐH=×›‡¢Ò‚¦iCáxô}ÿõw[ùć?^NÖw6îħ¾á_V^ð¯)ýWï+ŸTGäžûî-7Þ¦p‹¼šžãï6½ˆ¹œ{湚M³ðû!Kµêì3ÏÒ«zowÇšybeýµzjSÍS¡¨ÛpÂ[ÊÄ·‰KpÌ_[ìpñ(pÙ3Ú¢ÉôL·XÛ€„Yð` „,R–õÈÞ<ÌɺW¾Ú9&¢i¦ÙLß‘™K¡Lõ„¹wÊ…cºÞÆ`B¾K–NG$:*1|£²XÌÖ^Yosd"7êI«`;Æ2¢Â¸ ]+÷Ô®¤…w;ó[,1¿žo¿ã5 ÷d}9óü³Î-çž^y™ÚúVÇàüÿÈàó_ðüò½•­Ÿ]õñrè¿kñéVš^NÒHŸ.°C<0xàQæžþnÓ+nõQÒé®[ÊÁ7½ºÌþäÛË’ÓÏ?÷ùÏ-O}ÚSË?|²1å¡×|08B0TÜzÛ­åû~ø´ä÷1Ÿ¬=amyÙËÿeyîW?¯üw¿§¬¿êªr£bB^³»Xâ›#ŸûâÕꄜãÙ5ãxŒBœ©7¬ò1»î¹{Áyà˜UñªãT'~`^ƒÖŒw+°7Š”ñsJQ3±q/N]ÜqQŒÎ>Sà*†w¬õAJ¼e:;äÄÖ1y£[}ôÝeþC4z=Ø­–þÊ÷•Ùÿ÷e #z‰)-ý÷Wž"3]ùh¦¡Cs4½ylðzç{ÞYþà_X^ýÊo~Db6Ëk¾åuåúë®/ÿýí¨ÞU>Ý5‹ÎŒáµ¾×ÜðE¿®—NJ|Üš —W;æ%8VŠð•È6båüâ{öüÝ+Ïò¹ udèHÀƒ”S²\¢N¸ì¿3Å«âÈ×ðBç™CõåP”Áϸ™2øŒÐd‚?ßÏ#!¿K¡OW^<7õCg²Ó`4;­: ö3zKF”çËì¡™ì'Ùr,Ü>¾{[xFɆ6çÇT.;Y° ¥“OVÁ%åÅ& '\°„÷&‹nêô#Ë[©NÛtj9Ek4&%†þ®¿ù†²mG7ouo=8{ËYåYϾ¢|Í•/<êÓI2‡ºÁGÛãÃÉgœyfyâeOsð¿þ„¦]|Y™ý¾_)KÖMþÔƒ¡0x`ðÀ£ÂKÎy\™Õoþù¯p‡£hMXKwÜP½ãçËì·þT«"óôg>½¬[·näÕ¼hG»’±Àˆð¡pÜ{à ?þCå™_õŒrî9ç>âqaïp@IDAT¶œ{Þ¹åGþÍ–|øo˲¿ü+O¹âaõbé¶­·—½ñ;G±bƬ}\„ózê{î½ÇÕy wˆ~`”Ég1\ÃEFü›òĶã ÜŒ‘Ä£zRv(øþ8Àbé„Ñ™¡ ‰mðЏ{Ï>•LgäÞfêC/íÀbŽb(¯u*s ÖÍjw=©Cuîp;©*‚#³ çÁ…]æÆš²$ÖŸ0šb›ñЭË2ú §t<÷4õFë|ðÚµ/ÞxmÙ¥w–/––é©ÍÅç_\6i­Çkõ¤˜€mHƒŽWŒ_$¾òé_9bÊ¡Oxá‚ó Ÿ\fô-eɲå#¸CaðÀàdžXï1ûÆÿVþ»W–r÷­Íèù¾«Ì_ùz­9¯ÕÑÑ`ÖÞÿV—ÁS«8 ™Œ!Ž«Å1ä^ÿ-ßý­åþ~ë´j¬÷}Îóž[ÿ„Ç—ßëïë»q<åjŸ^®0)ñ†,Þ|Å4}:ãÉ3q›nÕt,¢g1²÷ÚÕß15Ö9 Xù Jªjú“G{P]Bkrl[L_ˬG1ÄÁÁøµl˜6yþæô.º6ŽÊûð)z‡Ç1”@…§ü˜ÆÄHÄÁúÆgî÷ØïÓ:ÀÉŸqUæË“üÀÏÓµ2ï½x‚ÏÛ­¼ü é žÖAC¸<½…†õ$ñƒ?uKxò§ã±qýä'¶ÌK½úº/¶óqšµå²K/+—_~¹{ÁCçcŠg@9®µtfiY6»¬,ÕD‡*:UÚªëäáöª|§»[…Ǹ§ƒõ®3LÄk‚áχŽè¡6~µG·No»Zl./èà`¿X‚öÒ .)¯zõ«Ê7¾âåG}øx1¹Cýà‡Ó›z/P˜×´«y->ï§­ùX²nx­tß'C~ðÀcÕLÉZò•WŽ˜?ÿÉ¿)SØtÚ© êŽvÅ0r´=zlñû™_üOå _üÂ1¥±æ‹ôñÍýíßZ.¹àbOË_LAÞþFœ9iÝ%4gn>£œ¨ï…DÌëèØ£¼9+â[ÅÄ’G\LLMžÑ¢æîOåŒUKGÀë6ý–M=–*¯c|ˆ«G^%|:1Ù¡‰Á‚e™©ñ<:åòˆèÐLÛù@‘©§`YQ)IB _¤n+“ñû†]Ó ¹8CÇÁã3l½^$: ÌÃJ†Ã˜f¦x2ýJ‹(1«[ãA%=2óV¢§ƒ^P„CÖ®^ëÆMžÕ;†Í¾pýõŽç…‹qA€æÂs/(glÞR¾í;¿£ð}„! x´z`åêó×|Z§Ðè¼Ñ%—¿ôÑjú`×àÁÀ\æ?þ—åý÷”ù;ny1_žÒàãÞÖø=oø¾ò×öW->|0üŽ&íE_\~øÇ~¤¼å·~»¬ÕLނňÀxb=ñæEŠ)yXÞOÄš|Ìð†›oYÜÞ[óá;á-±rÆ¿íF]â{•âá,{ùB_ òÀ?à—àK ½´2¦ïB6yÁ;(UËÂuƒT{9t\¦IS€xH(‡X<ŒCOh±_N£Ê!ž®g•ìÑæÐÍÁƒL·ª´ìÛ¯ýHn!yúW«>8 xôÔ2:äžãzåY:®ï>,Ct±Ì0_ï =®\zñ¥jû¡¡óÑwÞTzÀ£´ìöë3û ›Ë’[Fë†ÒàÁi,¹äi 쟿ýº‘ºI÷ß„£PˆØâ(0X³øØÇ?V~çmo=&õãE ßÿ†(OÒwà.»ä‰ :©ôÞ}{Ý ™4ÂhÄ™[Îð¨ñlü"ΦAÙ±xžå™:p‰‡ 嫚Œ“¸Ñ‰éøšÞ|påÐ]È Ù‰O'(-=ò~êæ€Í«ƒ@B8Bº‹J”s¡8 >Ÿ). µ+U+s! EQG/Ìy60Bª!‘zj¤àÕYeƒêF£)q!Ayæ–É ˜SwÍ ×.Úù wú„‹§7]V^õšo¦\Uï»ÇŽæwn5öä‡~ŨÀ¡4x`ðÀ±î¿Œâ}´tǽª;ÇÞš×A²\>øúoý–ògï|·§H]õ…Ïú-XãzÒ ¹öÆëü:ýDìyæ–3¿Ö/wÒû® Ψ·ÿ6YêZd]ãæ|ˆH\)0mOçLâÓ1éâi!VYho¦ØšN¸pŽóN\Tp^¤td¦ISw@`Ü: HUb^Zi =1°„£lÂáôÎðNY; Ñ%Fœ„=<û ’¼Ùo>msY½²›RB ×Þt]á ˜”8ˆ.Ó¢¢g\þÌò’¯i³aîP7xàQë±o„,Ñw?†4x`ðÀààÚÐ];à?޾ËcË|iü ?ö†ò޷޽ åQ“Ø–¯¨¯_¿¾,ùË%åŸ?¯NÈ„X“·­^Ë å<}5=ãä4aíê5åŒÓ¶”Û·Þ‘UŽ[3¶¦’˜ý-.¯utˆ¨Y(‰€=Þž•q7çÊA *À…ÄÖñ:9ýGuä}n‚9}“ùø":Q¼ãqÕ§—MÁÒø¬›¦î€h™ŠŒ5pì†g\h ëztÑ@AR8Y8a2î@ÔÅæe,•ÑÁ±:®®?Áiè¼jO+؃\%•ròº“}+Á·ÞTvèÕn“Òru>x£ÁÏyvùÚñu“P†ºÁƒ <0xàò@ÆÇJƒ*‘þì/ÞSþêoÞW^ôÕ/|ˆ$PšX?8u);ÑáˆxÝ<‚-[e&8©ËÑâðˆÛƒWŸgÇ}rnêˆ sç Œ´’Z|¢ƒ93ä2j„™9´“nƒåM䪩í,«ZzRi`ÊÍ÷OêY¶|å¢_9¿ã®;Ë=z/ó¤Ä7>žpñã˳®¸bè|LrÐP7x`ðÀàÁƒ x„=ð£oü±òüg?¯0cåXM—_qyŒD(®ý§Ï_5ñM«[﹫¬ÒL >Ž}º>TÈH Ÿ¹ Öο脴à¹3¿ £[Ì܉»#Ò̓} òÃ;Îβ“'.q}Õ%ñ¾×˜=ѦÙOÝaU»;½Žïs´SoïÍU¶ë¤FuDƒ šêß kÆPSà´Ïͺ‚º"v’Y©Lÿ½² ÎM½êFa¨‰Ämûj%øt>žñÌg–¯{é¿H’a?x`ðÀàÁƒãp|rŒë8¨wôœ˜MÃt&…ªå3ŸûLt&ÆäÜtÛÍeͪÕîˆôA¼‰Nˆ×ƒ춤Ð?ÃkÕ9F‚cáôq²®ãavªnU¥œ£'ÙÁ ÞP¼{ë­ µ^hæÑŸ*FÝbiêë=fõË„’(„`~˵p¥Ñƒ ¢¸Ë¨²u”gKûƇÀ9× Tw^Ä#ñ1‚2;Û­aE:Và}Èv˜è˜zµZ 9žxãÀu7ß0^í2´¼íꉗ=±¼ôe_?g¨<0x`ðÀàÁƒŽM886U´zˆ<ðþgÊ¿úÆW–SÖŸòI8:lŸó¼ç–m÷mS(|¨|ú³ŸqÌÛçL }íM×—KÏ¿xÁ×ÒO\{B9méåÞm÷¹wâîè°ö‚X[o»zukœ…Æ5ƒ <0x`ðÀàÁÇ‚¶Ý¿­¼égúXPåˆ:¼ä^Z.¾äÐz2¾ñ¶›& _J_¾|yÄÉÂ`ÿ$EÊ­žJÿ).çÛ13?AëZbtbpb蘒/êÌ”à_e¿èd˜\bzcÂ/bÿZ<ânêH¨ÓSªuP :Ñá'¢}Õ,ê²,œFßçÜ«Oƒ½ïwRàÑáaºËÚo>íô‰ˆ»î½»lß¹c¢3Nݰ©l9}sùöïúÎáU»=4T<0x`ðÀàÁƒŽ=üöï½¥|öêÏ{Šiăú×¾þuå¬3Ï\ô‹é÷©Cuï„5ÊО¾é´ûGLÜuˆƒyëT÷ãä¬üˆ×û<ú¸Owûˆ¹MË ey›kµ²‹Ã¥È˜å‹»9U‹ãÃ;îw5þ™04„»»¥^–'K©÷e5´ñÐŽ{]BV™‹3¦\íÌ©FËÓé¹e2Mëò+ÃBNLÏ'å/àa!Ïx¢Wyë·W»¼F¯:;ûŒ³Ê·}×w”ÕkNÛšH4T<0x`ðÀàÁÇ”˜†ôØó±é¿ý©7–w¾ýOyã—-_V¾í;¿£üÂÏþ\áuÂ÷mûÖ–,¸éö[Ê šv5þ¥t¾°NÌzÿŽøÆ‡»"à”]Æã¹Çà0òáÄéá|tTjmà*˜—FNœ!´9e ÒèàDÜÝh›t0"AG›L“¦î€,›]Vf¼ƒD(6«×ò¢NŽ€¤á”™—–ßç ÇŒ?Œ£CÒO}eq >9O‚–-0h—jaNÎ5ƒ|¾ù1ž¸ ñÊÝäч/Õ¯.½à’òßôòrÚiÇÞmúºùÁƒ <0x`qdü±8Æy´z€Wò~â>Y¾â©O;æMeâäX#±4ðÀ‹2¨yÞÀ/bt:ænÚäqteNÀ—‹4b|É#¿{ßá(E炞sÆx3Öœ~ä{-yýj!:p~Q¯5"ШÃ@'üöÑù‡ õp’¸Îk|¬£Ó‘|€op˜Z~?õf|Ñ1ˆôˆ¿0œºî7ŠK}uXÛw¸0KZ›8ℱðá–¿ûøß7¿àE_SÎ8ãŒrææ…!Ĉ›õBúñÄ÷B˜Á“qwì#¾7beÅÔüÕx;;t0x Ï cyã+°6®ð{ÓdYûàç­i#G¿èØïNô9\šz –­ò‡ƒ=ªy^³…îJLƒòð #4ÊÉ’¦05®ó>rØÇUÚð*ÝÄÉNF¢Wp ”ð—EŸ¹ùÌ6„düº¹mëí…¡¬ñ´|ÙòrΙg—W¿îµÇôlÆõʃ <0x`ðÀd7 é±íÿŸÞTÞ÷î÷N f~õk_S¶þœ>Ž}ï=e÷Þ=#zÏÍÍ>œ½Yßé'èxˆÎ4­LÙ9 ÷”)Gß‚öÎ ¿±VS¤Ú ‚pb™„#ë`EV§ü2åyÕÅ÷ É=2 Íët¬¬žb?udv†ï€ÔN†óMTecÍG ¨Ð3"YaíéaNâcýîl¨w…SªñÙA‰^V¬9Þ9aIY¹be9鄃®·Ý£†äÍW“Ò¥\\žyùå嬳Ϛê <0x`ðÀàãÌ3gjêE|ôï>Z>üÑ—ç<ë9G‘ëCÇjÃÆ åʯ{±cäOýó§÷¥Ýq÷~Á¯àí'¾wÇös{ÓeÈ¥ Ù ¶æœ 6ÏX;ëØûW™›ƒ;.,GLRfâöcøìèdpo9"×S±÷)Õ¨ÿHh0Íï{Ôyc Í0ìÂHG]³1¾æƒ¹`9§¬lãbˆŠœæuRØ4½aàÞ©²øÈa!möñ•O~ê7V›¾âU¯,[NݼàÕ»ÁbtfõŒ§5ûgvélíPðâ§/+~އöÑ ‰G<ìØ¼Â‰ÇOG,Ÿ18<ˆçãEPÑÁa{Ô·X>éÀõ/ðéèÐyoš4u„Ã3³¼W{†[xn¼wF ‡à9 ?$%BÑj¨: B=?;Š}þùèýpCJNÕМ“Î9X6éÍW“ÒíZû1)sÆÙå‹.,è7¤Áƒ <0xàÑãiƒžGŃ%‹yàWÿó¯-:&ëOß|zùò¯xZ¹ðÜ &êwûÖ;Ô“·ôŠ›YDž„œ.E™ŽñvŒx+O»ªS´´3ŸœÅDœ=£Oa,ÕR‹eúç'ߨGlŸJÁ‹©_mWްŸz ÊÀÜóË´%<±LÛ™™ù²bv¥aÈË΂×k¨œ¯åÊ2Æ9ÖbCÙß©A†,0çU.Bž™ŸÕÚåD}¨e<1úÁo<­\¾¢œròúòÒù ã ¡zS1ÓÁˆ@cöZöÔ.çcªÖ´ŽŸz%˜©;ÙÕ‡R§‡W|EïJýŸê€Äu}ÝΖÄ‹^—²¦Å!-Q§.‡Ë`»R‘—jÎÛºOj¸™Ù½g÷ÄÑzŒ'¬][žûÕÏKÔa?x`ðÀÃà;ïÚYîßÎW[ã\¹jÕR½=ÎåIúøwnݼêuÀbÛùròºUeㆵLôùôó©×Ö»v”/\{W¹ûž]m=TN:qe9ÿÜ åœ³ºGÒ/ùr­ú¥7 ÌÍñ)ÿUÝT8÷¼MpFòVéåkË.Ý\.<ÿÔxÛà”Os}­•ÌÙù¿+Kæïñµ4¸§Œº¯m6'OÀ2Åà¸"wuÎÕkv>7K¨nõ Y'£^Ý…¢·–e2pÖ•ù%›ÊÌì–²dfuŒ¤ó$®þ¿‘™™¿JÔ;ã^2Â'uËÊZV1uŇ :>î¨ê”‰=í¯êL›icîÕQµ «ZÖãÄ4ºgϬ|±Úkê0á‘0µÉœömCæQíß}ûø‘Sִó+ŸþUåoþúýžá³}玽·idßþ}úöÝŠ‘ú“eß­zñR\ÛÓèÞ>ås¢w¾ûzŸ÷–v®;®‡ŽãU$o~º<'ÅùeÆ@RÿêÑ âÛï+˜x‘ÍÔW„³î#˹^(Aò4+ F!¶àBc¸öñ£J9 ­÷.Ušg #*¢4ØöÏ? ㋦RÒ¦g<¶[﹫_lùó5úñìç>§¬ZµªÕ ™ÁƒzüÁÿsù“÷\­½^¦´‹+DȾäü“Ëoþâ•þ¨kËò׌k›ßò÷å}ú¢®:¾@jϵ䵯xRùö×>ͼrúæ8Ÿ,C·wß\y矦¼û/®*7ÜÄg㚯ä»a½žH½à’òêozš:8«ãzÂ"‰ÑZ>€ú®?ÿtÙ»÷€±ÒÞ  I¬q«×½×®(/zÁÊË¿áiå¼s6N¼Ö%={tEæ²ÙÏ–åËyû_ÞÅCž(“OÕ»z`U'ñ¦J_õ úÔ;ôEoä.ÑÔ[þŽò¶§G ÜF¯j.òü¦r \TÍ<¥Ì,}¢Q®éH‹/9¡Ë¼:+fþ´6¥êeýj[#©ýUHø¼¦öÞ¿çÊÒe¦:†*£crǽôÀÜö2³ççtêÄ`eØk›e{ß5r‰shöŠR–¿XÇhóàáM´é¤víÚUÞò{¿S~èûßUÇüž ¾èÅW–]»w—OýÓ?.ЗÏKœqÚ–‘zÖi¬×T¬ûîßÖÎÓ‘sA§E\ç ÓÙ]ÏãÄ ¯Â£K‘gבH,‰ˆ5à”¡›Ÿ. .•Àñ~½N°h}dTÔ iê)XËf—•ËVè·Ò{ŒfÝ7{~À—-ßRåùN¿™^`‘ 6½­{tR 5õî–/]î^==Öo +¼zl¬L@/®©·˜šoŠÂMøJÕnˆ¬;H-¨<×dèÉôRuu«M¹ù°1-.ˆÀcéÌVu>ZVÎÿJY¶ÿ»ËÁ]¿Zöí¹ÚúÓÎÍ=ÙGÊB³wÿešO:­O>:¤þÁ+´júYÕƒeÉÁ÷úXÄ—D#éùpÀÑýìùÓ2£N™ßë/[4}‘m“­   nßÿ’²ÿþ#‡]ÓÈÈëÁ4¸Îcÿýûo9îÎe£¯]³¦œ´vá7îîÖ »ŽA׆ÖotüíØYÛ&–&¦Î¸™˜œqóËX}¸Š±¾:@t‚ˆÝ©[µb•~+“ïÃ/øÆ ¨2î_ZeùEUÂ[¢Ë4iêH·ž#æ…ᄘkÃ-QŽ9fþAxÜ}SòòJM¤sõÚÝaô#½1ì<|à|\½Ši8J¾=qV8´sç>/ Û³gÏÄ‹*¤†tmرkŸƒ(U´@ XSºØ£`}ç¢äó«¿ù·å'~ú}šnµîVK‡yUyH°Ê5RÛ½w®üúùXù‰7ý¹ÔÝõm" ¯7Ð{÷î ^剧;òë‘!7:q­3ØöqM/ïø“O–ïúÁß×Wr·Ö?È›z‹‹dó—¢c["‹­ á˨§àŠFk>ªÍdÛ$šJŸàÐ3µËS je`™Îw¶.Y²·,ŸùDYyðß•C»~²ìÛõ‰ÖÉëðSƒÃïjtå®ûžj+Ø8‘=6¢>ÇMv–*®êO\ýÙ²cû݆øôxKØ…ÞûöÜY–Ïÿuó=vÐR>&„Cóá‹l|žé|q÷ý_¡…°kû`.C ŸÿÝ}w¦W1…‹Î{àÍggÚiòÁe‘º—wXüròðãí»€6…«×Ö€/c¼!¡íVŠÒ+â/ºš+n Vì‚%áÈgðj Ì›ååòØ=]ë`8ý£†Aóš+”G¡#ÚÉ <õÐ4…‚X+òá~¸Þ¹îh`]kÀÞ›^½7z¡‡ô"3IÎuüµUßF ›Ç´[Ž™Esÿ¸°4d`ÈwR 'œ½pŽêò‘>9=oùà±Äv”ð]j€0oµìôÀLMͦú/ÿ°„7žœ>Ì`†Œ);[Ìd¨¼³ U‡ý׿ú½tüÄ™Ö •1XÃê¼?æõÉ6míM>´9=òžñôлÆÒ®–mä3ÐuÂÐï²FÏädë©jÆ£ñªe)nQˆRÒˆûµÅ)åìÂyuî3˜å¡kc±(W–l‡ŒÓ)[‰žd4ã^ôsx(î÷þ¨ çÒàâÿ§Ñ_Ns³V|6(O°ÈÀ€¶ß§Å˜ÛMN œñ¬ˆ  Úþ,•ºvúÛ7ËÖµjd:ÅõuD¿ð»iá×Å£p.&÷Ò”šo`©“ ÿâJ™J§'?¬ÙciH x§*Ðë6ÏØºe°ÃØ Ñïůü‡_¹!´¯…èûìixpØÖdÔñ4­y¦Á@'=k7hD˜ï¬÷ŸÙKÌXÂ"ÄšÒ'—?._ÿ ^xÝ@y¯#Üß·²2¤ñ‡M!Í)Ì’ª¶Ë=úÅŒ”qæL9£÷yfΤ1cUØÌ¨á€e]3Ïly9Ÿ‡VÌW3ŹòÆF—xÇåÜ…sË8f§¬Ý{v§½·ß¾,¯“ÐÑÀzÑ/~O¿è42†Õ[±u lJý›µèkT‹È†Õ12G´,ÿÛ\ܵdÕŽNñÎ륯°äqœÎiíµRãƒBØ‹éiY瀬á³Ñ–¢s$î·ÿ¹tLÛø–!xc8×:³­,5.¡¡¬Hg4æ×>ó}[ »&`Æ+>ÆqƒÿöÛÓOþøþô§~âžô§òÞôWÿâÛÓòñݬÁ‰Éèå&µæôºé*ÈTÏQ }—!8.S ~ ý¹S^¤WÊ×K»óêø£x ã|Zqñœ @'ÞØ©–Òè ØÒ)¤J­_ëCºfþŽzõ_ö7œe:ªNžy¼TÎCf!_…¼<ƒ¥ƒî[ÆN¤Å…m˜Qd¡.œŸ}% lúž ZÞ` U¤ªÿšVCÊëGžH£c;Ò¨ê[Ö[6uúux¸¤]Ù:¡£& ü«÷oš’×uÚf}ßãþwÜŸnÛ¹gŸìx6¬š9¦iX¾ÎÃ?›oD¸ «›sã\¼=ŽSq]xšAyÜ`+~¾Jƒo8¹ÎiUžVŠ·½ /s¼lHÚj PzËÇ«e*m¯È_šÚ¹êhàÆk »WmþMzÖÕæôžïÏÕÚp0®Þ] ö~›U‹{·§¦Ë5EF%Âû?£Eà¶0 ±.ð%`/ø¦#Ÿu‡‰y°O~ýURþ ž¸rtêñíN½gDNWwzö…ÉtðMÍ¡Ïøƒ¼DøÆÓÒ/ü-¢npÒÜfAIAÄàÖ‹:=vÙ¹c‡îÿ }`•]À>ôþôÝgN§“§g³Œ*g6Ôiâ`~ótáˆ{c ¸ñ³Ë%ZD5 ‡eEè‰r‘. ‹G9®[%cªŽúÃGµ†ÞgünëÜ˼ÿeýÈöX# 9ßýtlDN2E(ë#%–X¹53¤ÁZ[¡€hi»âsÀä5å€!cÈ… 3êºÆ º3àð0 ù.›ÎYJ˜'¿¸VY`- Hð¹ùRqžÅ±iŠ2îÝïy ìÄ:¸èêÑó.Ç–_Ó.nuÖXä|öì¹töÜ9MšRïÿ´õ¶/,\ÔˆÁt|Ý^h‡Q3F¼Ë¼ü¼÷ñ~ërfvåéW7‘ ›õ ¸l„º|èS›NÎ'S5„cöü‹'Ì(’sÆÜ;;¶ö¤?ÿS»Õë«ánáxô¡‹éW~ã`zéõIcÙ*¬{!Ê9zAóŠÏ¦am—ˆ½Y2rø³0£üÎ;­—i€°ñ€¦Ý¥ÅG•ËI V~nvÎzº`ùÑ)PP? YIϬ›î"–‚Óà<þ,]…¬‘I!¿]güv 1<¯F]HO¥"Ûx üEyž”í-‡z=Úºwqöï¥Ùô÷Vl„n¹'gN¿Oߌ:"6r]b •¨ =l}K!ÓiÚQc#gÓ[gŸÑ»÷!ÃÙTÿPêFôk£ÓœF{Ÿ71L¿’/î¿ œžàšÈH}ý襱ñ­ö\²£N<ïÊÚ!dÛÌv˜¼îøõÏ}zÃ5@î¾÷Û’wL[òžŸ8¿Dggôé‰z„)V[ǶØwDX(î6Ž·ÝCË×f¿=n>º[~Kàý¯úøŒ¬à×G(í>{ØÏŸQ=vIõ½\¨×œ-áy¹!zÎTDñÂ{÷k}´P pÌRö’>ó#$`eêƒÍC«o”hߨÀÈðòÑz6Ïkz=ìÚ±3½çÁœ‚:d纣µÕ@wŸÖ/õj¤c¨õH ŒÃo¼‘~3;~Üщ‰É–ŒÝµ}ùplKà˜aÆK=&cúÈÙ ê™4ÃÁÛOp+‚-›Ö”ÙŒlĦø¹˜^~ý¥ÌöËas‚‘Ø{ÛNkTVéW!‹_Þy¥ _?ÇIÓ<{ÎÛ÷ÆÝø«oº§õ=U{jò!äÊÌbYMÀWé-D#þ‰`dÃòã‚/•Ÿ´\¾Ï àžOñ YòFšRC?IIk¨”oü+þ7u¿¥FÈÿšæºþG¹Þª:·2:ÐP`d`ðötâä¾´{ÇkNÊ»Ì^ޏ×XÞÈ‚d·d£¹{ëwÓ‘3Ú3Aãv=6BÐ Ïk_ú´« ôh¢Jô§¿,©Ë,&(â÷ÿüÄö4sñÑ´MÏ$ïÀFý@’'žø`Ú¹k·ÙÞ§)5ìÏž=›Ž?–:d[~× ·¦>ûùϦø?ýïëò=^éŽ<öÄãÚ\ãD:ÿòR÷Œ¾Œ~ç¥;–É3¤Í8ñFï~؆ÎÇÙX3 …~HÔœC~U§”</n_³åRZ=lß>œ¶mÛf£ƒšÅÔé3š •^Êt¡©r0])?99cómƒ·ÀköÌœtàiH¸í¾¼ã ‡–3£b62J2ŠÜBc¤—ó45ʹCiDÚxÉ@…\r€ßJ»Œ”×ô)Çg€¹tœ–k`ƒ'§b{^¥%h ­’í(åXüHa²šÊDÇà2¤26uÔUÿgšëù[Ë}` £ ÜÇÓÙ~ñ€œiux-áUô…;KB!•¬¤‰$x†'RïÙo«‘ü'ŠÝ ªÏ—¼d #îâì·µóÕë&ì(9ËfR9‡¨SzET{–‹;à÷ÿÀ±¦ññÍvô!áÇÎÝ.oÃñ’¦­LOO©“çxzåå—Ó~ð}lí$Ý„8®Qæo|ëéÃüð†’î¡÷>œ¾òå'­~«Nm"NCcsíóc#£éèñ£zÏÝþ†µÅj.’d/íYWÁUa"?l¦ÃáõK(ŽÛR ÊŠbÚ m7@¶*|©3î-+æk3ŽÜÈWK8ôyÛ]gÆM6ÏÚ߉#ÊÆ¹iôƒ‘’þþ¾t÷=wXçÜÑÀuÓÀJ ӧϤ<óGéÙç~”ÎijUSÀ¹±Þ[õ@âÒ3Ž3Å/ìKgù€ÞÆÈ3ªˆ;<âY×ÖÃlìë-—˜™ez¦Ç[I5eŒf-à°*‰ì?h†“þEÙ-28쓲=ThöK×,º·Þ_ £yt‚‚Á?EKÛ*7]¸ FYœ2½(G)ÿæ‡Ó×Ñ@ƒÏà9Ò±wjB§PR.è4D(ëBB•²vœ8ÉY"—ñžSryôWEáX9 ðÂY4ª¤ÀÌ §s)ß++TT„JF@æ•|?)Íp¸<ý]ßQÏöçô>üé¢QàÐå~x†‡w§c'ïK·ïú‘ñYP´d:Kôé¿{ÛÒá¬ËQt?§-9û»>«$ˆ±¯ƒ¿kèOY¦g)ÔÍ¥àß:w{ºÔýžâù¯7ä½Ôú?–w´™×nMOÖT–ýüî~[úÄ'?•f¦µÞëÀôÔS_KGŽhÊ^'ÜÔøßü̆k€ìÚµ+mÛ¾-m_¶ì€uÐõ~C·¦}ÏÍ.ÈNzˆ}µ)Y؇lß0¹Ä­RœÚÀÞ¡ò`Üà X.¦lÃl}ùè×Nh»Â^À&†aŒ™L…}€»ó=fÂQ`î˜ ‘%'nFNg‡ÈèÚZU9_')w §%ú´üêa×öé½ÚbI-m7@ª ÀY*ˆóÅÄKKª ^ žë [÷¡òT¼˜ÿŒ¢¨º]i| ©&5Œ ?õ°EC° WuBG×KÝr~û´Ýl¼ Ðå}x^;W|í©oh¡òÉ%¬àà2÷Ÿõ4:ªå–Þ$ãÚN“Ä?ƒfÁ-›*}YµÑ A- K¶½å¼$·C-¦`¼•¼Ñ eq’óp$q/øa”½3ň­ø•áòhñÊ+<ú5eE·ŠuIaex^8è‘[Åi g ›ß\ò 5»‚~F€ƒÓ‹Ã%Xã5ÓϰÎq)G©ÈB+ެ¹<0Þ/\Š£k‡6¤"?Jj Êpe9oÆn”§®˜O½óÿ\=|ÿÀvkz‡Hcqxd[:~êtÇžïgÞµ“u= ·d$VÒ'o÷öj¶¾Lœ×FðßèÀû2;3™º«Ð•q.&î©kú.«7=uoêé»Ïlò™CBæ |£,î ©¦€Þh\°ñÃÄÄD1‹çePß\xô±'Ò#ÈÙ{ãpúßù|gT¤I‰8>õͧÒÇ>ü± %Ń=”¾ð;¿g~²¯ípöÙùmF£ ýK×™kÈÉS'“¾õ+[à9a›ÍÄ©8¶.ÖiƒÍ¶¡¯¼ú¼±²‹±åÞ1ãö\¸s=êÜ\ù±ù-mÀÁVA²móa榖T äWò–TK—™ÌìØõ%ûJ]± iš~5¤OÖó!–;ﺳB©íh`m4À¨G÷šòW J_øý/éCuÚy©hllݺÕ*z*ù[!`ø>7Ýœ!³a | –õ–0Éò–k悾Q/ ,¦_É r —Øœ²@v¶TNÀfq :ÁYËkxͰaÚ–†œPO^d™%¸KÙ²Í[RÀ/&`½|µ\C‘"ɸ…7ä°³²TW8µÌKβB$Ùµ"&XƒôuiÅÀŒëÈGv<¯¼Ÿº¶@U)©†däùh¸³è×–Så-—ãä´ 8<±Þž—µmìÓ¦^™hº8£¬99ù¨º?R%=ãô³Ü¡ªB_b*ÒІSÕøž¹4ÒÿM5„wX£æF;é<ôð§yÉ¿éŒ ý”úG¿mÊ+òKýcQÞÉ‘SKÛµí.Œ©žèw#D¾\àÞň3;Ña{Ο?o‹ÕihÈÜ~ç]é¯üâ_Oo8–>÷ÙϤ7ß|ór¨;ùDŸýüç6\dËÖ-6º7ªéƒõoß1 R÷“‡å›UÈï>vÔ.²j4DÓ¬Õ5^H–Ö;ât2óaöB0² VÔåuà#Ãc¸ÊÄ–±ö ¬BUUµˆÈƒqVÛÛ®.âa¢brù‚}î⥅%¸m _•§W¯XÀ_ߎŒ4F?î{ÇýðäwBG«¥n-2ï•c]mHУöÅ/?™~øÃg—amü­xwÇ4 ãç&»€ÂH± ¯€TíGUO¤ONh!¹…Òn˜]ÀéŸÃä5Ù ·Ga—8c‘‚«g•.qÇUÚ=ËÏžËS/Q½vI1úŹuIãJ:ê (x5!‹06J;-S²Ù`¯.Šôj1%¢>hH}—³Ð÷L£¦%Ú: ]9/:‘§F£o„’uœ!¥å£),y”=²DÛ² V|sV¢Ñ˨,óo¼V2LRíó°øi|D½ÞãEÏ7å"@—QÑÑÍZ òPÚ·÷iS ùÆSæÇùs¬”uSųkëÒkG_£ 8ͳ³çÒ`÷ïfyÄ0wŠÞHx~iZ²7Ï®‘Ïuèù]éàñwi[ã»–Œ~„Ì·Ê™Fê–-[ìÇt­Ó§O§S§NYÄçbç®=é¿ü«-:øZúÕ_ù•ÎÔ¬›àÁøý?øâ†”â÷¼'ÒÈܲˆvƒÝ¹mÇ™ðMXÛ8©5N¨!x¦™e&Wö ¶Ù3áFÃb¾ÌÂSÉQfe[®²àâÏóòµKjëÐv¤¯GŸv×Ë)P2yº4ëfÉÁ öYöÌŒWjj¼ÈHV_¸¤éV®;³—1¡¾Ç1i|€…)Xõ°{Ç®ôÎw½³žÜ¹îh`õ4 ç·KÎnÿp9ÜÉsû¿÷ýôäW¾fó‹ƒÓ¬hxÐ{+‡1MÁ*íBvPC!²³s>•=† ˆì8ONk H¶³:\[L‘§"ÛTmFYÎJ?—4À®•‚óSƒ1úæÖ­P”2^F]‡b¸º†2!¼š."1ã).[F²6\T3ËÆÖ—ñ?híþ iÓÀ[b½–ŒÅK³š–{4]š=ÍÏ<“f¾-㯭$3O®˜RƯ„3äQ°ºŠªÏù§£öœÑ®X¿•ú¦qê°<L-š˜xX;¢=«N-Ö §Êó\:ç8eõÆPwÏ¥4:øu‚ì¶îà X+pðM¤kîwÒ¦¾)q¬ 4%ÿ´ð,Ù&'’¹þ4‚r±'?ûÑ´ç¶Íf£xn„<™ñU9…®ë¾Xð»C ¥!òÖ[oÙHz¹kß=éoýí_Jßxê«éÉ'Ÿ¼Zrë@‡åÄ¿ðÒ éþ·ß¿¸iŸ¾ŠþͯcY “ÚrWAõúÿy~a^}DÑh0˧òn_9›Ÿž1‹Êu-$Ôm‚ûí>šRÚ÷齎qû‰ŸÞ´LÂVm7@ñpÜVÜF@ÌXcèĬâe6ìËZï] ¼÷¨9'(¯b½ÉàÀò^ãÉ©²EezèÁþ·Ý÷öHêœ;XU ðšn}Ó¢ºµ.ßðøÜoþ¶š¿ZТÇuïÞ½¶¸¼H¼E#¯Xb~6AFÂÌ…t‚y˜™Í Öj6 T†­˜Ìk@¬vÆ‘™=ÁÎ ù.aucYÅáq7ªÄ±Ufž2.ϯ7HcÚ®tIïýÊF¥¼–à8ʸŽjDTÖìl‹rÆ›xEÐâ/sn:‡(åˆôœÑãµ'wu÷kdj_êéÝ—z‡>&úZ<ýTš=ÿÒE5J¼€–œgîŸË¨ãUyèVtP’Å­œ%ê;˜ùIMÚ¼¤ƒ,¸§RƱUe|ìԣ鞡¯82h‚ÛI¸ó :W÷dÇÖ—ÓkoL³yºRµC®º¦Qý˜y+ oú£ƒJNý*thW$¨É)H.‘åàчÓð¨Û)v «;/”ÚhÁD]¦ÑÅöíÛmÊì™3gô‘ãÖèëQÇèG>ö'´ÑÍ£éßþ›mßlZr7@_|òK®²ïîý¦©½¯3ÚL!S«ø@13†ªe —´$|m· @ð¦¸Õ ϯ°¹ÕÒ¤ëcaО ËÍf+Ým&ÀÂ]Ò²„–‡¶'£C˜† ;‹‚óƒÃñ ÿÒŠ²Ÿ®iX,ù弋:³3p†ËÒ3žÀ§ó z®êaRN_=Œj'¡­ÚÇŸé.ÐÑÀjk KŽëí]Òø8tøô/ÿïÿ·h|ð¢Ò{ö¶·½­Óø¨Ü€±q¡cÈp|p0ÉÔ»®?.fçÔÉvÂ숆0b,B'˜-T¾—u,˜ÇQ}q=zpÃ`Z|(ÓܘVéWá–ÇwÃý¹K@IDAT*Œ¾ñ¸°–"ã |N5¾‰»ÊZ!ƒw¥K(ŒýÊÁ+ èƒ „ÎA‰4¦WPUt½2ÞÕÉíêÒš)5DFvý³4¸ùU1úú “+‹bÛ³’ÉæGÆeⱉ{"þ{ºÔû§ XÏK[JÛa®çÝš¾°Õà ¿áZªkcƒC0<V;[¦-£_·…Ë+Ñ«Ó_­käƒn÷ÂojÖœ¾“ןc_ÚŠ|ÀЙ=Â13;NM|ȶÝejh¼;«ÅçÍ‚‡ç†ïÝwß}Ö ¹FÇ6§ÿê¯ÿ7éø@$uÎL_Rd£ÖhíÛ¿OõÝr?·:Õ*äbö…ùë1¥ã¢ðµ³Ï(Å‚FHæ9+Øðá©“tXÐò~”µº K"‚_OštPu0]däC¸ZÙâà-Îm7@X!ïD/Ù°Öm“FøaÀ¢ãg†RŒÌI¸¹…9c2F0…øÂS¦\ öéëµ}©¿‡…­5+á&Eo–Ax÷ï¶rCG«©îÞî´iLÛ²ö铿9üá·žNÿæßþ»tá‚oMâ½÷ÞkS®â=Ø[ùŒc4®ÂÂa £d'Š‘±`Þ°+‘_Õi“SÞÛcù*ã—»WGô­ôÞJ÷”Ã.ᆠú9Õ‚WYÞ;žpä‹(Ñ‹¨œ€¡]Ð\ÎL«â`°2`e2®ÌSAPÂi¡kÅœ× ægÓ]͹n·–i4DúGÿTÝùOäHóá8çÕu劮k÷h ë ™{¿`Û­R¾)ð\Py³åõ[gž¨·-\g†ËµgÏG+ë-#Þ6®™—Õã¨Pª¢½žÁG?ޤÁÞoY8ƒÍRî,¿”„$ä‡,þÌ+MyŽ>¦ÎºÚ b¤XT=åX+ZÍwÿÚ©áß0ª}Ï=÷XCŒ|_á“?þéç~þç[Úk§ÜÁ°VøÆ·ØZ{ãmµü®H;jë=ÐÑDCÇ<~5>µÕ¶&›µ’òÙ•ÞÛ#ŸF?Ï ëÀ€‚|rüòðÓu¦~æÇt®Ù¹Ù4;?[4H€°† ;RÙ?–ÇÿÚ¹wm7@6é%ĈoÒNS}½ÞãÈ|°ø•‚I¸ Ã"\3 ηDúˆKð"®kp¸¹t–QÐXC+CÛ4²mËÖ´?Oµ#t¦£v4ÐÝ§ÅæZÃÀsOàùc‡«/ÿÁWŠJŸŒ4>èaí„å“^¤7¬“;Ù8YKҵŗ—”©iíø£€ód°:•q×pÑ ì\³R€ƒW9ûƒ¦#P¹-BÐ4þqì8¬À³Ë™yÌ1çR &œÅô=j©M‡Ît]dIÔuí×ejÀ]ßsOß~†üãÔ½éNSiUnã?ر{Åͪ=+¸þžÃZcòŠ=o8‘¼£›úÞ¦ýñ÷dÌðÃgðj²ØMõt‹sùYŸœNç¦ÞŸÆôÑMzHo¦Ñ,bH¼êgF‹h„0*BÀyテóoýíΨ÷ªk{mò=˜¯i;Þöí¿K›®,_WÚ´4ÙF´û&¾9ï9><ñ¢A¢ç×|süuóÍÝ_·mëkiòõ9÷’¯8þU™RŵŒ20ö“‘´3#(vÙYð6œ£!kM ®O#"õ@ë‹üj@™TwÞuW5¹ïhàš4Эmv7èEÒô+½Ÿùìo¦ï|÷?Ú5•þí·ßn?{-µs¨jmV„3>$v x º^Ðë|Qz\šœ9Ò¦¦5Ë8®ìxÛÓ? Ê´ºî˜à®‰¾Ñͧ‚Ÿ•\—ìÌeþ½8i…$P›c¨ˆêlò‚Š–”&=ÃÁkfÖôgéK€—\8Zh)qýãëœ\Æ“s”‘scÎÝ=[Õùßôžmw‰ƒÕ¬7¿gY&¤«+½ê¯káë+Ž‚PŽ ’-XOžÂT„~ ?ú‚n¡³Ð:á^ûó úÝ<~,]œ{Ö6hzf)µÚ:ó³¯kôÃíøí^#ü+Ø1«ª©"”`^?úAmç¹M»ÓZ§à2}¦Î¡•°1·Ýv[ºóÎ; {3<2šþÛ¿ñßÙâõVå:éëOO~uãm&°GÏï}Í?æ{ ŒPÔC¿áoÇTgl‰ùíœÍçæÚg$¹¾ ÍC4%Ë|ù<*¢8vÆì¥ˆXŒëœNûàRöñIk7´ß£>¥jÞæ†!„Í!»¨kÍK- ¡$€§ùy^p(ˆóÍâ‡cgx5¬Joíû 4Ѱýއ5”<2:Ү̸ŽVÔ@—&{÷¨ñA¯žÇ_ýµÿžûÑóvM%´ÿ~ÛºÑ:‡–Pã ¯7{wÙeÊÞŸÊà%[dsêÙª"dÄ]¬2Õ ¡Ê j}ŽîÇJ=¹Þ™¡plp塎=’•NÞœ"|NÎP-On°)Iy…_Ö!»;…8½™P~½ ®3…’–Á,'4Ê{Ѐì:'u÷lKÃÛÿž„è UKWðÞŠ¥›N¡:Öv»]ß]±‚H¼·L—ÜŸÞ:}IVÖhe[bäÔÉÓÉšÞ¾ù6Û°Öîtz/ýFV‹?~Ï«zЧ ¦9“­+›Ø–¦-¶Ý]é)õЉ5i`\#H¬÷cÓBŸ½_ükÿuº«ÓÚ¤®u™ö­ï|k]òµS¼³»vïZ¶àœ2M³ƒ°wî§ã£/äõ¬ùðu懛_îùÑHñuÚøî¾¦_;‡-òƆûÿøïžGƒÅa G›¶ · õ ¦áþ!;»s&ƒgÿÞK¦o€0ÔóÌÂTÙøÙžýRXØw¾:L¥Kƒ§B©XO5l¿ËÊÿ}û÷‘Ý  \³l·« /öú´+^º_ÿôgÓk¯0Üô¢Þ}÷ÝÖ“zÍÄn|ŒwÚÞnœ¡üâ›»¤ë©i_´VwäÌØIÿ,BÇ6H#jø„`@ßdÁ±tû É€íK±ÆÊ¨Z¸àiÅàÄŒžCë¨4C×¢ ñX0^¹=§Ù¢`Æ=H†‚ƒ~ภ§VÚiYI§v5Ë]è=9X+f®kú¦þûÓÀøÏø}Î÷Ð}“(ËîõŒÝ³Ìè³wÓiJ¼¸bcÙy™Jsnòucê¯?O® WHè¨ò¨¸.”àÜ$M>­¡»ïÛ9_¬ÿ¸ûž{êÉ뎮J]ÃÚ©'÷jQ¹ÿÖç§ØéŠJ»Zá\[¬ÆmDÛóÞÌé!Zñ¦g4䫆FS üp41ÄŸ¶àe„¹­y´ª ‡Á†7‰=j3‹A’f²¡oø¢a‘ŸaÅà¯H ´sð *â—ãÜK¬Ÿ€]×Ð7ÒÆ¤ñm¼eR–º>ã?›ºò¢t8r]™²ìôüWxu1=ô}kd…ݰŒQÁ¡½éø©·YYGYÑ‘U[Ëž€*oç–?L&ÎÛèD«ç×\Ã^|ôãÓ¦ƒx&¸°xGñf÷Xé¡?”vòì­yÀv¾¢W4í×ÀÚº+ZWÅõ`0:¤Øà€€úÙ¿ðs¶#âõ ß¡qõ aÿ½g¾wõnPÉ;ïºSÓ@7/£Þäã_ãÏð¾Û;_œÕÀ>8Ï-ùá3õÜÊ(=ÖŽ0°€aÄ®¸mÉ6HœðîÙ4èh¬XÏ•¬·Ý¡WŽÆÖ\6äbs¿’ÑÜmâú³ÚAÆóÎ|™ÏﮦٮZ†#éd<À°¨¥)L74@Ø-‹Ò  \«ºäÌö”kXlþÇùËæ¼ û÷ï/'×JëV)¡bÄVBvÂ<…p¨ÙÃwuõjä眪ôä:(”©tiuVùW9IßÔõ¼5@Vb›²8ôZO̼_ë´»ÝÛ?•Ñö[¥ 'éwÀè+:þÑ´yóf¹½G?²jnÈ Û³oŸ¶GÍŸàùú…¿ò‹6Õí†0Ô!Ú¶¾õ§Û†]/€¬wnZäÝäÃ3ï;$øÖ¶Ö_[ë5°UŸÜ¦Ve?¼ðÏ)geñŒËÊ*»ÙRœökSYm7@Ø+xV ]l®9ßZ7Öx0,ⱘ…9fóêâGœíxç4•ÞoÈäyhÌE˰ô^ï«lyrN~5ЂCQ»w³•c't4põèÖTž‘rw‰ïÿ™ô­§õåf*˜ýû÷Ûüñ«§pë• GÉ>FèÞœù²P…2ˆNkG«žë õÄ¡R ðªÌÀyжëÖWЭ§F÷¨uÈe2ž—¡+yYVøÌ+ç¥ô—A Q†„ˆçÂ,ÀËH¦…Œ¦;y’$A7Î%ðÒ˜ÃÀ£1 •ô&1ë0ô \÷s§ø7mK[™Ï%ºPZ!ŒË t÷ËiAk C×­Äãya`hxg:zêNËÔæ´ u¦/BbЧàk÷Öïè+ëgÓœêÄËÑ-µ¡âŸÞ¾ÅÏäÁŸ¨+¼„®‚×È£|=ywêÚôöbíòÇ»Ù&+¬¼Sן]ôÉÂt¦÷ØDç¯é[!1š~ý9êPlGOoÀÈæ-þÑÕú2|ó&ÄFøß³æ‡³`¿Ý¢ûšìr6k¶Í/Ç7Ç÷Î×EšùöyM7뺵V¤øF )Ì@µqVªµ—÷a˜r®5ÎL›bk]ºQË߇p|ýe˜[ÆÏ·ûò|z“)Û¿)oé¥üØÅ†–ÝPÃÐg´ïz=0¿¾¯aÁz¶sÝÑ@+ °è|ÓPùãÇO¤ßûý/8 cžo+ôf  ¿F@Ì¡ÃeR°86Ê]†¾¢8בæ€ZX7Ysì„ÂQ)"ø! ²'Ðá×ÌYó<ŽU§µ¬löhpâŠBÐ(èd€eKpËŸF“¢ °ERE‚ʹ Y¡y-ÎΫSqVk•˜s[`¸±Éö±Â±Ÿ4&àÓ¸%‚³(žæq8ww«ská õØ‚ÔAÔÓóO¨ñࣞF†2™ŽÏt‚eç÷õM¥¾î¯Û(H«F´ã¹²#Ϧ~Ì}]3Žæ÷"S-î¡pÖ¸{pÈ:—7O~¤øè ½ó4@nÆàwäÆI†^÷íÛWtT j}ê_þ…_¸q u(_VO÷ÛËêœËZÛ·o³oåUYÁfЩf ÙúMÇк Öb³v£[ [bë;äw³V„uñÃG7¿]åð÷©_½Î\4bkKðýùi} 0ñkYט»"KÄ¡ÐȰù`†LFQŒ™i4#Í‚é…d.{ôpùGEi·¤4à¼â ™Þ†)XMóÛhîÔŽÐÑÀµh KNlÏ&ßñŠžÌOÿÆg­ò'£k1¿÷ZhÜÊeÇùžCÀvæè¥ÌAš©LÁª6 ˆOÔ¦`yqp™±‘‰áË6d­‚²ÀWüQ>Û¢VEŒGË4ëæÆ—rO«rpAYäÍ~ª}g»UQ¡ö2Á«SÎÎ$8[rÖ@ o?rø!®)Áå j©ëïÐ7ü cÞ9×A, YøÎ×:!“]EÒÂëÖA+«s45adxK:vòÁLÃ5ȱ,/jÂå yPv×Ö¤ çOØ(Èj­ÆüÜtêïú-ßé#»B–ÍžOä/dT$ ØÃÇïK}ûlôƒQ{ÀÑ k¢˜ªKC°{Ïí铟üäšÐê ½v œ=w6½üêË׎è:cØ«OÐ_­üdžKlVAÝ}…ÍÀØ/Öwg„n?*g‚£¼56h¨ÁR”5›SÚåE®Û WÔqˆ ?¸êü±`ãhqœ"^–!fûk觘&ؘ…ç£&õ0£ÇÔ‹Õo¿ãözr纣¶5Ð= ¯2–ë>~ûw¿NÖ7 ccciûöímãê.×FjŒóÖÜÁ*b؈™Y·ÄëajJ# ù¯ÈNs´”0S°Hk„W¸³Ì>š®Ì>Éá¿\08UHÿMEK)¼€_‡ÛT"ÒÀêe*¤2Ÿ%Ö€^v¦`¡G]£”t¢ù:§zÞ::ölÚzúßn™>‚Î5Þ9d‘2pê^?æ“ñ=楱FÜ _[\BP1ÔÃÌÜò)Xc£cÚm¢³þ£®«Îu{`ËÝêÔ«^|)=ûìsV˜J„ ^ÏP¼_דèu 5>Öo¦ Rn¶²Á2ß©K ß?¼©÷xbrVNŸ,`W³v 0lÚ:‡½0'Ñò›Ð%˜±´³_‡Ão™ ʹ‡óŽöÏË7»ý[žà(ÐV®UYÒUgç—Þ}ÒœnPo¢i4¬|†²ÇåºR)¥¤a(ƒ6á»Ñi›6Lþ‚é²·ßõƒ^ý/”ÜÓu¤­)X §G9ú££›Ó±Ó*%îuU5ÂÏý°Ûï…ÑŸˆuÅwmý¡¾Ž~tU>N½¹¹ ZÓò»FÚ³Ûen$ôuâl»²÷À²rèè{´Îe¯-ŽŽ¯€ºYÃzzœ5ß¹Sk™˜ò³þ/^ÖFݬ÷e½Ëõì¼Î_ï|VùÛ¹kgã_x¯|Ön„O^~Ï×\ÛújÖzÈ'Ÿ•ÿŽ¿ŽOl? tíëAr¹bˆ1|xóãßNðqÂ6 Y¯ Œ.-£¨1˜v=1f$1˜n»™VÀ4,8 æ0\„XÕ¡l ,`¯‡~U܈Nèhàª40à;(Q–Í~ÿ‹_*а 0ž÷"q"Lû:­Q—3gÎØWvùÈÕÍpòFGõ5tÞ~Ù · zçíÒ;vÁ¸aè°%ˆk@2<åÜdxdX[ürŸ ÓªÆ ‹‰²k×íOI2H<ÁSœ [—dÍ–¡(ì4¸tº‘ÑPRYÐpˆ.è6°YA’%D&$Î4²©º¡(`´Š«uÙÔÿ€ôðï+÷ª*½ëf©®¼&éNg|ô=¢‡Ëž›Me˜œ|8ML>£|õ%½®ý N_4ô,lÚt)|UxvY£f¥ç±@Ü'yšû‚¾E4!ÝWáç¶Z‘tf‘D`h ©^ÖåÜ\Ÿ¾øþciÏmã¶Ö¥Fz¦pÓžÞ|óMkŒ±[U;ÏÆµ*‚Èää¤ýú5ÿ§~êϤOúׯm§ü*kà¹ç7`¤ÅÒƒ&?™gå ø8±–#*¯5ÌzXý‹Ž%ÅaÃÜ/÷k¯I«<6› ŸÛÿÎx¯l]§¦z].´ÝYÁÀç Òhpô\[(NŠØD0O€.k©€þ™‚U5œ_”‘%°p½)Ìkä¤0À;vì¨'w®;¸¬º7i'œáråS_ÿf:wۺu«UÚ—ErôVœ8q"={¶Àtþüy›2Q$ÜÛ [Á{nEܘtssLˬŒ°f™1tŒ€`3¬8e”ÆŸ]+>rÙ‡ 5‚“P=²Ð#ºsÇhúïÿÆÒY5 Ùý/ÊÆÂ=¦îÜs×öÖ Ÿ‚NI?x®Z¥ˆÁdî,3㩨kI™ò"[at6žUY‰ƒÙ<Ýiì:<ôôÝ#¾Å9ü#‹‰„ îd“n:¤à_ žsªUF¿v•,óõ‡GFÓ‰³ïOw3ꀞÀQbð(÷’F®ôïª8ÕE[žO¯=dϬ(±\>Æ{07w& mú²Ç}ãœ~YÙ;/Îá¼~ä‘42ºÓîø€!¼EÓÓÓÖÉCG÷…©µØùµìdâ^0ŠþÒK/Ùóø®L_ûÚ×Ò[o¸EïÂúûÙ ØÙ²e‹Ù’3âFM¡_ëªæ5ÛˆŠX¤fC°#nïT52øúyvúÉ·Æ F/—sÛäV"\ów%¡íÈ™#æfõË£$[VnDg!Wd’br[£ˆ«Rà£5Õ“o9?b”ª¾BäðÈp5¹ïh - ,ö—/ÎÉ“§Š-w©Öz[gžçãǧS§NÙ{Te˜ù8F7KÈrfNª··ßy ˆlr×äր`<ª†ÍïœÌ¡"#Ãú«tŽW½|\[yÑp–s¶Y ˜‘‘¡ôÄc÷¤ .˜/lš’? ‘ZFªZm³é0m¸·§<ÕÏ&—TNO…2£víHëÅ욬Ò9FZh›ê ¹àÀ}ŽôœÑˆïF'v÷ì{LÝ›1~9 Cx79‰LwȹØÔ}Á¦{f{GÞytNO½+9ÿÓæÑã*¸TÙñ¼¸žs®%BÃaµßJÚ<ü­¹ÃvB²Ä+x¹?ŒvÍ>u÷ú”cHü¹ çÀ„ötKN=}rz(™|_Ú{ûxÑ¢üÍJ=,—»¦cÇŽ©!ð–}0†ÈZéûÀHöžçágþÜϦúOþq°Ò9¯ ¼~àu¥Þ8¾$ÏëàРêŸþ% F9š‹Çc”"òÁaϽ^«1ì¬\™ l‘ÙÛðé=ÙÌ-K ïÁ›%¢°_•Îm7@0Œ¶C‹ƒC½aÔX!/a¨833dEK áò?¹Æl48^–×òš¯¦a%¦_ ç=·U°:h[ݽý*G?þàɯÎ/‹»Ö²WŒ!ù7ÞxÃvÌib'|bbâ¦úˆ»`…¥ÀP™ („ïÒ|SŸgêyE†Ù >Dh…­÷ÂË:„Û‘áauD„!-‹6Æ€+èƒÊ‚̸⌠bZ½LÌå®7ŒÀÃÖ¿l–ÁüÚÒ–X,ÍhdBaÈMþ® `?]U*ò@J¬*®i\HFÁAÎì.Eå-ÃiEéõA]=ÛÓâÂ&:“-??ÆkŽ»Ì&°d”Ô—¦%óXÛâ@‹wäô™ÓâÎßPÙP–£”ÑA«¡¶ ½’¼müµôÚ‘—ÓÌЃÖÓÞTŸµbŒçlnö˜F?¾îô¤ÆJ¾·–¦ÄÌžNöüÅsîo¾OãíiLSZ=ŸÀÝl]´ çÎ[–…OsäÈ›úÊHïüZF[˜^ËTÛmÛw¤÷¾÷½éûßÿþZêà¼J <÷ÂÒãþT:}ám­Aëµ¼ô­ý4ÂWÞê’¾áö[—£~ú8yv—ôõ ­MBŽx/ øV8 îÅÀ€î£~|1úÞ{ï¶5Ï>û£ô¢¶ZÇ&· ,Rg$Šïx ¿Õ tpÈ£ þÈÇ: ÕTî5â:xøÐ5b¸þÅéhZF¸É_fs'ê…‹Ø*êþ04Œ*';†íýðEr°y:GÚ¢® ›h9á §¶ â]Í öÌ3/g¬ãˆygU:0Ç–_Tá]Ò.ZÁ, £Bleyñ’÷t6í‚Åœ¶zNãê!®D½åG.¿ûÝïEiÌòÌ®fà9g䃅̭ïÑ#<¬ß{­¶ÜFNGÆQ}Œð؉I{ë1f0€Ò¹6çP¥mÉéYXôg# JΠ…¸ÒG$1]ÉQcÈ¢pЄÝH¾ê³#ž¤¥t«²Uã%ƒW¡ATø²ëÏÀXèÖÐ%*OÜKÖÑÅââò‘o×) ÊN¤”e½p&Oh¡|ǯDÞFAè©>­Qí—^Õ³U©{”;øˆÛa÷«B.ƆßJ§Î?ÍÌ|Ø:ÀÝʾ0õp~ö¥4ÚûlíÉ\zÿŠ« QòÄ<öÁ4¾eÜÖ²0ú±Ò{q%zÙ0°qûÞµk—-8üñGÓÓOÇ" `–ÄØÃ‡'¶bouÏZ•])Q¦ˆÍÌÌh‡²±tϽ÷¦W5õ«n¼>x㙸B˜!AGC=Ô7l"Ÿz’]­Â^xƒÂwt ;Æë£‰VVùOC4òyÌ߯—K+ Pä«ÐÒºÏó›Žm7@úl H4(àÑ{fŒ°ŒMú‹—ÕŒ37›h%Ÿ€¦1³À£JhÚ ]Œ€0?¾:hW=ýZ/ yÂz¹þø‡þTœŽµXûÁz¦ÅÁ/ó?õ©?©í ·DÒMyæ=§B0?-Û³!8r2jSZl^_‚m Ál ]Û,Ö•æ¹SŒ²N—‚aR‰iT7 Y«¦®ä;#/YN͘uMEÞ OåzyaS mº*H?U±€Pבîºh´>Ò§Mãß%“>á_•dVHõyÈ‚KZÖ®F œvv.Þ“ŽzWºmÇ•h¤SצŸÑŸ=Ã70׋‚ݱùëéÄ…}TEŽgÔ8Ђ£Ç²oñ³vËÉ£'QÄôsœ–nWh£Bžrô­;UyÞgS¯pro¹Æ j#Ðøä'?‘ÞùÎw¤/ùÔ9Ä·V–!,Pß»wïòÌkHa„qž…O|üÈ5èr5‹:tp5Ñ]\#£#Ÿ­hò—Ù«¿·ßž»°aVdNÃÒ0¥›ãƒ ¾ ûÂóZ~CDõ‰Ù§&1Ý^]”^i¤1J¶=ÆHë©ø©áñ¼x4òÔP@øø²bœ¥UFÞÅKþåsÀ”8ü#dØ[öد‡&…2Uk°³ V]Uë4p±'÷š æ…^´ž(À×bFÖ{œ8 Ɖã§ã·§£§ZoDkIÈ·úš††~'ÎK u›òºík@lǪì$`8.Ϋ'yÞö!®2CëˆkgÆƤ1Kë \ž “Vl,\òg±¦!%Œ1;uBGmi@Lÿ`9\ùìsånRl·ºÚi81MáÞ~üÇ?YTDM07SŽð˜¾†ŽQªøSnܲã8£¯¡c3"à¬q=5ãS`¬áaåéý%,ª¢éWLÁZa–ÃÖ|ƪâ#†u­e¯Æe8›KI l¸ˆ9”¤Ó!'|f^«Êk(_È“å_‘–µfè—2Õ€éÆ'Ù|åù“âÚï•sÄM˺%K8âä]º¤ƒ¾r-1 2<¼]£ *W™ß;Ó©³byq[ µT»·<.Lœ5ç&ž‰àç{^;6õ§Ï¹œ”Ó¿ýŒD4-‰lÒ, 5>ŽÝ«Ý»öÙ6¦d”ùìV9…ZÚ”—5"?ñŸ²Ñ¦"4âV»!ǽ‰ú†…Áøà›HwÒ®³x7ßxóëLõÚÈ É¿àcÜõÐä/óKžuzp–ý _ÜýõðÙ£â##ý`“‹6€âá»s¦<>=³›üWÖåuþª×m7@ÌÔéãÆ™iTö’*N«iÞ#L¥X0A-MqpSé¶5¦_#Ùz3òÑÛ°¬˜V-À:l纣ž¾r­[2¾úÚk¦ ­>&w-Zç=÷ܳl£„ûï¿/}ä#*Þ£k¡±QÊb+ÆFq q¦d0ã§s’užžõ⪓6?¯¹ñ¬ Ne„†˜ýÖ=;+ù˜g/G Çcôq焳JÏ!®ý8¡q§é×HÐ"ýäåãéõ3:;k´,¡BßòÝþö :®õp}IÛïjû‘â^sa9ä¬\˜Ì¤“6qìšß-žW¦õaf/¾?ÍÌzGzsµ–Ï d¹Ï”‰{dg¥ßß?¡ aOÙ(Ó>«08—æ¿­ïÉ1Ä~ÿTÈn˜ Õ ºX¸ØŽœþM!¥Óã–ý¨ªÊ•wÙ#þËÇ?þÑeîý½Z£±Ssù~C„|8¢ó ÖÀ¡7Ý`®Œ|ø¿ØªjÀ®4…MyËzžy÷ßeçôù ¦Vy84,|Sðö3uK;În v_ÞíÛ@%\Àcøø$‡Úí„¶×€xcC{ŠW°"DxˆéSÌÿ‚©2×™ËÖ[+ñix0addÁÏgå›B]¡FWôZõ07áè¤ÝÚ¸Ty^{ý€õ ‘je°Úâ9å«ê¬UbQ# !?þñ®6™ Ï bÕ^|8Q¥Ç0=­N‹ì ™íîØË ö‚XîóÖÖ¾>Õã¹R¨Ò)L–¦­`B+ˆWBqÅyÐ)Å+é ‡5ÚĸO©„–¥]&£ÁV:ÆVH»Ä˜[çRÿ-Þ Œ‹s¯ä[#þ}•¹9ú°cO€é¤58—„ްq«\«uÓÕˆÀ3E'ÂÈÈætüÔ£éÎ=Ohüþ¹ŽC“~³«zG«+íÚúÝtèä¶™JÏäüüLêïþ¼Id÷K±xfÊû.œ’ߟa“ÜÖˆp ¼SS‘÷ÚÚØùÊ2:‡+ÒÀG?úaÛ"÷ÀƒÚ9k»ÙêËÙ•+"PŽN/¾W²eë6sþpü:áÆjà­“oÝX®zl³ã_õ‘h |˳–˪? MÝ‹ªGiËëBN±ÖCöm‘€¢°¾†A¬v7êïŒvÅÓÊ5w¥(Hm˜E‡rýÃ8>oÌΚ[Æü2†bl¸F°>|£¯3* %qöùfŽÇòmø†ÐD©Põh]¡¾PFÛpj±]'t4ÐŽ‰ðÊ+¯FÔ*îâb"4@Ø^÷SŸúäªé¯Ë«ŽvÜF@²#…ñÒ·†Œ˜ºÄ/LÌZ”¯[hN˜> i – õÞŸ(ÛxÎt)ËÁÉFè«NtçüNÃ¥DO ÚÍ¢Œ Ä'¦z*Я —È-û‘ÃOùΘãuv,}=fþȸ6]e=¸‘Æåád䤅K[sožiìšDÃÅY\Hj7¶Ñ‚VÜH¢sÓóJe¼önšMƒ=_5—:òvžûšFýOÙ œÜè¨Ä]$ž—Ünt²>fµ>åÄ9}¹]=êðÉ»`÷x /‹v4À½fqú;Þñ}‡iÏšÛéØòº=äÓüÚá³³v8µÊë}ÖŽÓ3zˆmi²KøÚøåšŽ¾9çr:VŒr8v‰z™é[Uxâä~~Æx {ÖÌH‘Úv„S¬øÈÉÜœ5î8Qádq‰c HÕhŸ˜ôˆ¢æs™ƒ~¥Î|[$ìÀŠŽW‰Ò2¢ïn^N^ÅSPÊ ¯hÐm$T)âùÎǶ¸¤¼gh]›^Léä)ÝpB~tJëí8?ã[dû=NK-X ‡,’ñ¯ë¹K{W­^à¹ÅFŒŽŽ§gÞoÏgAW‹‹p¨×ΰ(='þ¹»¶>“¦&ÙÆ8ssi ç÷m …TÞß“Ü1X¦¡uxŽJ;ðæCâmggô#´’õ—Wzf‰-ѯG`7®ï~à=íœo NŸYÝ ®‡(}Ú 6:äƒ^Ý_Žt|íy[Á¼]¶ÈÖ…,ñåå³çôXV1Ïzo¥‘n¿€Ïƒä1ƒuáó:·;¢×<ç)8®œæa'ÒaЛ¯ 6fŒ-§æÌ²Z*Ó­übaœ»iIióDÍ5k %Ï…Nì$ÑßIëh ªîÞrôcbb¢ø"9;Æ\°eËf­Ù~=H­[ã,BWÀöàìï÷̬zTd̈óÃvLNÎå¸ÃX¹ þ­ƒ°3ñò“9vN¯ ož6j9øµ¦8‹AIgљȋœet ÙÐÅèI÷ÑË5”B&Öø9´ –)™*Ik û2™®"aAÓ¯| Hæ¿Ð úðΨÐG!Ÿ)‘ýr—}&Úä‹.““¥ “ßO£Ã'¼¤©”ºÎ”liÆfæƒ׺ŽÊèé™OÃ} QŸñzráËê¹à0pñ¨ÆÙ4àˆìv9.­)H§'Þ—öÞÞýðR(¼¸¼šßVصk§>\˜ïóÕ i£ ëuxFy¿wïÞÓF‰ÈZk`µw<[k~ÁßÛÛ·¬Ã…gª)ð½â;{€ÈVÕ×jTí& –0PÅT,KðõßìDëu£%NÓži¡¶†‹n«›x‰´¶G@º´FÁøÁ„lщ&4•0æ­Róaàøu«CÞÓÓí ^„ Æ †Sg>HžzhRf4`ê°ëŽš4°X¶?´Ó…|æ@%p=Âþýû®™uMclÌwÁ±Âmó·¿dÙ¦`åÞ”HeÄ1·–fâO ­ìFààl6‚²]œü§£þÝlµvúЬÒoE-ìbRˆS6í­ŠäôlQE襮 J7dµâÊt=†¹‰/[.Qÿhç#?‡¤Ð¥®}õyW¨“Qõ[g¬Dþì9†?Ô ' è”x•7ËëÒwAžK“¤‰‰i¨÷I+oe ÅüžP¼¸7ŽßsÁí±×Þ|T»^mÓ÷uFŒ¿‚~؉\­öï¿«¼ŸW‹ä2åx®bô}pèút„]†¥[>ûÔÁ¯®¿ûÑ9S¿¡¬á¨úìVN¶ÇÏuh̘ûä6ã?ß®óÌ#k¸ ¤v seõWi¼–#­¥,÷økqi«ÝÍdz#B6g[gâ–_Ä#Í ©çç4áP³$0ùYÊ× m(˜Ègoð´Íz­tçòVÓÏ[„jÏÖõ˜ÅèǨ>t+Þëq :ËDè÷¼ßø_³š‚ÅÐ.C·a/X„<¡0q†ÀMÞà F@€:Xã1ûlN_¢j†<4–¼–Ä,¥Naèqr–© {Ø@cK‡-dh*di63-dWØÑÀâm‰òd,^šNs_(%Ê:p=ð¬Àµ dÏ €äñ›ßœ6õn·H!'×lDÓszzïKgÎåÓ‰ ë¯ªß"Ñ2/î‹Çº»/¥ñ¡'SÏÅ/è¹õ,kÜ ; ©5§ò͉ûùäŸM³Øµ¦ºU=0‹QµÑ†?s×]w­5¹þËhàô­ÇÚ`+óüTCÕfTÓ±01(ÀÙëY½ ŽW>½ç;Œ—ñ|/ƒÍóÁ…X^\çt·yK©7]µ=˦\e ÑØpÁ½B¡½²‹Æ„[Qê 3®:XÜ nÙ³C†µiÞX“ Ö2ÓhJ't4ÐŽØ~.‰åÐzô@EÞZœ÷ìÙ½h7Αá~J1ÍÆô÷]"`tÁofniãrB‹Ðݺ„ý %t©÷PÓ0mTÕ‡·.çp†} |œ1F‘¾ê EH‚ +FÃ)§q^1xçWñÀ×¢ ÙØP+%`þ¼¬‰i¹È D¤| œ7"yöÂç$ë„ÝãSÎÐq“Ó=]s÷왚{[êÓº z…Lñk <[Lùe3‰S§?œ¶Œýª£³ÊŒ¨ßœfý“*;èëè[4½Ì.$‡ÒŠûj÷Æ1ù3™qf9áÁê]ázý÷«ñ±ÅÖ~0:s¹go‰uµ²ÞvÛžtìØñÕ@ÕGµþ¹÷Þ·¥ƒ¶„íd¬½6â,Û†^£ÕЪN»(ãË!°;Ô)á§»Ý)‘cî¸Mã:j˜l£¸.Œ—Fž‰ó³2Š6|Ÿ¤ÊcÄKÏ,RZœmøF¾Ñ­Ü*¸IÓ:µÊBœM,®‚ ï•dÀ04dÛ|UfØZ’n†…:¡£v4P]€~úô+BŽڎJzN·mÛZO¾%¯yÿÇÔ9s~ÆäÇœe›†AH³¬Ñ9:!ˆ3BÀj¼E,–Õñi> <4ƒ’ÙH‹€Õ±ÿ .ÏYå#¼ˆ' ý²ÐŠšËÇá4nK¶U¡"Æ…Êez^:Ø@?9_ŠüåoläÒÅsiö¯!?¦EcÙu’SB˜,³ž¡‹÷§Ñ5rÈmDkAïI'ÏܶoyµÐ_è5ßmÓ­Ý»ÿ^Ï…®ÙÑ­[}®þ\¸¤–îpɱûæ÷öÔ¹mZhÿ@Ú¡/jǶ»-Ÿ{Ãs Špí23jÍÅÔÔÔµ#kûa—¶kï„«É5¼×k%v ›Q ÔMoyÐigÍ ÙF6ܸrÒ_¥œ×C`ZGÁÇÜ HÐèÚäΊݮéÙi­ã+gžP¦),m:5Aä4« E? ‰.@\-Y‰\—qàüÕç£a‡ë¡ª”2ϱ—×XGÍèêYúP=wÎ×âãƒuXи֜:Íõz†G| ¿#n5Œ_½ø³³Þø;CºMÁrË¢+Á›ÍQiÁ øÐsEÎ-C6¬aK 4§µ,s-†[ÌŠ%—Ç‘•ô[óJNUºàÿ²ÁÊQÖ•dgÒJ½8M»^IW—¥´vÓ§ÿ™FÈ&àÚt`üUœÓ]ºPýÔêºÔýû–T)óêñ NFApJÏN}¤ŨÞ_çš5þíþ¹þÉ+ïAà78dqþ=g=)Ž|Ц^1ÓýͬÍyëÖ-kƒ8c­ÖAãª+:áÆj`vÎw]¼±\\õÙ¤&{uÍl²%üaSŠ|ì‹~¬ï ÁFSñ£ÎæÇ:KŠEÝNà}Á‡‡F ŸáXºAÕ–]´Ý¡d[δ~Š?«$‹«,ÜÒk®l^¥ï[õæyd†hËC¡¨J:£å×  \NlÁ/ ó#Py¯u Ò ¥Š’¤—Ý §ÙŽKiVS°Ì&hˆÛ±»†!Œ Ê0‚Ch=@„BQ¸¸~ ò\iVæ9<ê¶0ä] À¹D7¦…k¥@nµ""^)˺=õë2u%Ì×'ovòËi~ú+™˜Ë]ð‡ ¦H¯; Ž,Ùu51½_»Jm_ÓzŠ–^ëÁ¡ÛÓ‰Sï°GÉîU~ü–é¿`T‘ ãÏ6H—ŸHüþ)9ž þu¥ã'µþ¤ç>k€0}Çœƒ\Ö!;ÇÕÔë÷Ö2`¿â™ºµ× ®¥žÛÅ͇!7Z(vµª1îv~i"&Èí¾¶ÛR_Náë@h8T¾“™ •u"Šó!q_#’}zÙgðòm;—ÏR®Úž‚e­ f¶¤\§‹º’TK…4Q3‰½îˆrfvÅ`ØM¯(ż€ÙºkyÈ–»–ÁÎZÐÑÀå4Pm€LO³ðÓÆ­ÃÈHgw“Ð1ïùèH_6 xŽ¥ÝÀ60Ë´…a\Ôw´fG,fQ’ý+èQ“Ö*XqÇ´„® W«"×˜Ž Ø=R<«1ÀŸ'ÖìårRnO7Êe#»°’â*rûL…A(m³kÀÓh˜ø5Çõf”¦Oý²Ý¡¬2¿íK亥rßÇßäÜ{Óð–k”¶óL\ÜàQS'?œ¶_|Q½† °j÷º¨IPp-Çý‹{½®}»¿†@tùK I£n\L‡Ž0mÙ6f£0ð=F¬sp…¯¢ÖÚ~s_é@áû Õi«(BÕh`~~þ  ×¨N´É ßþà~xþøabm ‡"vl¡b˰7±m¯Û'ltµ¡A"‹¦Ÿµ‚Ð ç¶½0¾ÑQ]£- À CìHCClUCÀ燙µ"ˆ3o&؇€º—³8 qDìb{ xç| k ?“h`ªÒ¹#hƒƒ×g›ßõ~wè# n½ ¶±³sn¸ Û!»11± SWúÀ j.+Q¿ËÃÀAæ U#ߘr9œ—Ë·&GANu©Á®c x§VÆÓÜJz¼^ŠëÈq¸€X.mè7ø Èu^˜}>Mœø%±ã£ÉÁ!WŒ¥dΡónòübÁ-^”×õ„j¶ó<\‹¬àgdhxW:~êÁ´wç÷œÕ%÷*?«&ÂÄÝQLpžìév‡ìV—0%åý;|ìîÔÛ¿_[ïúÚx§JØN¬¢æUQS¤¨'Øo­ I ›zÖ~D~­d¸YðÆìˆ$Ï¥Ïf“}àèóïq…ŒL£Ât…?åÜNaª^:f™4–“MõŽûôÂ¥8‰ úèáåÂr¿E ŒV™N]Ge•Ëë¬Þ4K@®þÄpYÖ¹E8õwZ>eíZ‹ó€«‡ªÀ‘G™æÑ’€èœ;È(ß—´0_¾kí¨@½¯òõõ[ý~ðÓá]ÇFÌÈéÌå‚êøyî¶AÆ‹û3•¡·ÑÊ×ð{šûüÔËÝK+«¤ÃVÓX‰Õé$¬R(d4Q3çF[·ÜÆUÉ ~ÖEÏ;'Uaëq•Cn…¡XatêŽ/÷!Ò¡t#ܦ]Mþ?Ćâ9‹ZHï÷*ó/F‘Ãù—%‡iJ2žÑG·]—5Ð/FA¦?¤­˜ú{cî¸ó —=«Y*—¶=½»dÜb¿‹Œç]ÔLƒ7N<‘öÜ6Þý0=]¿êÈùjSÛU©_m|íi`n¾h¯Ä‡bW«&+nv¦Æ^L¥*ìŒ ºÏë³¼ÙQw迊‡$tRàèv‹˜Ùº®¨Û¨Ë…+h€¨y S¯Ä½'[ªñ寖#Âxâ«R‚%ú-yШbn»¢B”Ö —Ó@TíÀUŽ´@IDATÅtÄ«/׫¨XÖšÆjó¼–øÐ_CwßÊ툛:½úÙ®LMÍ[o`\ONæ!qåSxð?¤)XôN6ŽVQAǧˆÊšE2òvÈX«®=nre~Ê´,ÃKˆÀ_Èì’b5 :梤 ¬ÜKZ–QLd–J‡tôN0:è›k/`é×ópiádš9û/ÓÜôS™¬á¿àÉó{ù7Ȩ(Ëb™œÿxÚºehM§_eŠÎ…”É(ÈððV‚<–îÜýj6J^¢ÿª¢ýþVR¹$é&¾‰îåM!º¯¿y¿X{mÛ]è†Óº”hçj-4°IßYXËuDœ×’V÷Ê؈k@.jôÌìME´VÏ’O¢‘à†Ö¦]Åv¹¹n 4n†ìhIVGÉF©oÐ4ø¨0wVϔຮ\Ò†sû V¸g1ú‚BŒ¸–°‚áØŒÎT.óËùuÀ^"ŸŠRY65*‚†Á±vâ™NäæÒ@å¥h~®®NÜ×^{mÙ0=‹Ü?ô¡\›´#´[À«_³O˜ƒ©éyýˆi]Gð"^XF@ÚnäQ8[Ê*Y7AÕ” veg쟭_ÉQ4RY@k}Ñ1R–Â3Åczz6:å[~FÃÁ¸0ÁÝ9½ëŽm+2Æ3m†ÁÄ“9µ‘SÁi9¾"ÂUμ8@üí47ù%±£™+±Wr«™¥–•™tgpeÚ¹)MMÐ÷?®Ã¶Ú¡ôLã—NN}@Ïí3Úá‚5òüù“á¾-½'ÈXf™ ÿYù´˜æzÓ±Skôc³ÑƒîjÚ.(Þ4Áô·ºÒ8p0U¿vžÇ·¿ýíÖà]=jkÀüê1wK`†o´ÀÆ-¥}tî[uÊ-hšÁ¼,¹zP9oŒØ“W<~²D9ŽM²‘9ª.=óögvÍÍ`a‹,Ÿ<&½Ýú¥ík@0~»Q¢ÒÓ•¯%ŒÄð ù\s\ô©ç†“«è©ÿªáL0´]£šNg#>,U:ñë£ê‹Ï/”Wóùaî(óx«a#Î'­ò¿ÚqÞã1¾†n/¾^~3S8gØ ¥*iZ_CcŠS>9£H6j§2ai¯âÎ{à5úá@-çˆ{ÏÆ™™}Ñ]ß9Ò gÛèô1Í>z;-¸ÞÉI“çÙç¤þÿ<™.è˨¥àpã¯+ݾw<Ýs÷î–2h¦k ffKM•2 ¾xé´ökC©ÕP–iNU~#H™¸¸8£AíIá>¦ßëiaæ™tqáM»ëè§„ô'cñ,X½hŠ\†ÔCÂÇ­üYQZÆqfê?K[w _—õU]ðì1=gtd<8ûþ´oÏ—Œ`¸ñLW…$<Åý%Ž|Ü++gg»´Ã«‡ß•FFwk? Û -4•¹W•Ì;]·í jòK®†@ñ,àu Õ@u[äÊÈg¤x†r¹VÏf¯ü÷~ùáÙÜØ3Üc£n“b‰å§áÂÜògvÍKGÜ|z3Õž¬ÏÌÍ´åc-÷øCílÌU ¥xѱ¿ñÎlÙàðŠS‹Å°úô*²QJÌG†xéWM/:¹U…pM¥¿– Ã Ñ 7‰ü5az*Ãéñ‚­†”4lêÏ.øi„0e¢ü.¡› \j°pØfÔáÝŽ{33ã:®³Ù3g8;j¡÷v!/“-n‡§W"§½å¹ïOçÅôwþþgÍΑ6;Q¤Üöá‰:q ã"÷‡ß9˜~æçþ/EÕÃ-ØymAlÁ…t ÂƒU¥ÿ¥?÷¾¢Ü›à„&„ìâ©JìÒµkTô§?›ô³r8A,)¹œÒGàÑÙà¡<·Ï8P\C);S\PG¸à‚ gOWŠ@³5óšý¤4ÃòPŠ´¤Z¾#õ ¾ËÞ±jçBYë34mdòÑ41ù]Êñ‘Ó*ŸpPá?3â"Ÿ© =PŽ£'˜J¦¦Ò[çK·ßîk? gAÆÓ9­½h€4…ÕjÆ»ç&Z´ë£¾Þ¾ëCh©0ªQïLu?{9|xŸ9„¥!h·ª<(@œg°hpdCö¦x>³}ÊÅ5“‰/kiùPÀWâm7@h ,^ÌÔu‚±b•« ¡º&sJí£öÂRÙ(\ZTO'õŽƒY„² -¦UA«*Тœ”K]°B{óJˆ]0ƒÚ;?Âj6`™nÕ4âqöì¹´k×Î yËŸ73Kîhec'­ø»­mw5åŠûÂ5Ó¯¬£Bùn'€H¿5@Â@¶T.ÞÁ‰f# M%YVÎw¨+:Â'üž??¡Ñ‹'a¤Ä+\–D¯®­Ì‚vøÒvˆA>ì¤E`õÌñS¥÷=v_Ñi’ÞèqlAËì?ä6ì¸ÑÈì©¶Ûx…¬@¬¨À‡®¬lQÞï!iAŸ/}Ó: abüsiðІ€Ó‡Œ•ªðdQƒÉ|N!Ê[ˆRlóØ“ÎÍþçiûÎQ‰hÒI.´f'ê4FíGFF5 ò¡´è·2­xV¹„ÎðN¨ÉO’éÏï5`v¥¿—=˜FǶÙÚÎGQÔõ ssó_B_Í{W«Y]_-Ý<Ô6bgáEí4U_;í¶zù}Y¨tîe£$»î¶Õlx¶ãa³Ü~»Ý²õ"Ê_bg±UÙ6g,NT¿œ…e)W4žË”+¾|È–ºÁ°cÔô«bY¹g .”/×ìAÌ[˜cÊÛˆ­3UæM¡>§ …Þ&øNZG¡=*E ·2Âj>?­†nÏœ¡Gtuƒ¿è«‹óza4ç znÈdâ0j™™Ùòc„Ú+ÒÍÖÈ‹«Öáa}SDàƒ¸’ ¦8¹v†„³€•îk 'ÃQÐ j);ý‰44ræ´×­QX­KF%Œ‡¾Óù‰Ý.¢”Ë.©$XÂÈŸÏ0’a­PÖÿ…ÉÑt~êa»ïØ-:%žÕâþ&ÃJW1œ9sº[+{ß|™Ä¨‡6â7(.#Ú†ËfÙF ììÙîÈ‚vù²:‡d£ˆÓæÇshytîkª+q|zê~Õ©ZÖq”e¾;eå¿»Å{WÚê•tÚöH¯öîµ5¾­®1V¬‚‡áÒ‘‚VYbPù3£ì¢¨ÈÌD{Ùø¬{”­ž1òÕŒXx‚“×  ´Ò@ù¬ññºA{™xvVÓàã€4…#Gަû￯)ëªÓV¹Ž½j>®´ Îk@°È÷ß,âÕ5 Q ¼Áè" ÏL:v„¢c¢}§Ì bÐ3£y-|“3ø ³âì ¿ظ¶`±‡??µ7-ôüDÚ2:zÝ×~TX³(u=âÃ##éä餱‘_3]9ïùh:rìÉz7=€®RzåÐ#úâùm]}ãFxLÀtˆÇd•x~óÍ#˜ZÙûFàÍéS]D˜ž)?’»B‘NÖj Wkº6Z`ç.üájhõuô Ä ¨‡°_Øqo˜,¢~e, ’z}ÙÕ#›œÿb7掇zèÊcÄÛaþÙPÜ®9+Íç–ù:á¥DåXxîéoùO”©î” rFqÕ^ÂZîÏ]¥×‰o\ ,V¦êñ2m7aVs˽¡¡æ>üÆÆUÜp>Ðχ¼Ã ŽmF@˜^‰qŒÙ…“›6`d u/Ã!/p¢Úٜ؜,N^”©æÕŠ]ñeÁ«JTi8í*ý e†ƒ®§þð`úûÿË肋§.´aÌ)1)"v2A Y+”“A•¸„W•79,ÿvÐEåfYyˆ8ŒÑÔETl΀òÈ¡£|Fg°Ê…Qñˆ]唜^fÌ/ô§“^#[‹Ñ¢À Šðh­WßÀýéÔÙ}\ˆtþ¬•2À&iÅsaúqæ¹}§ÏmMÓóïVd¼Ñq8Lçx}4ÐÊ~·²÷WÊUµ:îÜ•ïÀ¯²X ½Ñ©øÕÕP÷—#Ïg%ÕüïšO/þør½Á‡×rŠ0??ûôe=Ô›Ïm7@`Š‚ý´_¿Z8 \×gÿùp©72­“y:–7J<ÍÒq8ô³^iái M-: òôT§× I_´ŠT¡_ä+w9lÙ²Ùbÿv_’(ÛêÓ@êù.\HÇŽ¯'ßÒ×#š:…Þ]÷¸`1rºX,BÇFLNiG¨€“ï†û†Ÿ†g7¨¯ Û,½7ž¸¢N«®_Ð6úx{× ßÝ£¯Éò¾LÌé€<äsB€Ègù!ƒ®Ýw½Pâµ×O¦¿ùK¿’Nž&Q]HæZñ<ò›¬hY!ËmšPÒ«‡³©W£Ñ×Ï 8NNN¥7Þx³‘òˆF»V#T× ž:ùÖj ìภl¬ˆí¸(y£C>Doò—ÉÃ?·†uò¹Ïͺk~ÑØp¿^>¼¥ñ5stÀׇŽÍVùkú•U\šáÜ«µ!Q $!zóˆ3<ã SÌÌ ¶æ<(¹Õ¦iV`™šò}óÁß  ´ÒÀ¼ÆX;vìH¯¾öº=³T«1œÎsO¥t®¡ë…^H»wïjÅÚ-•ŽÝ`'¬S§õÞâ{±XÙþ\ ¶D C7¡-iyÇñqñÏ€ãHÐZ4õ:ƒï²!œ»|v|²d…ïç8/‹§ Ïw¿óŽô÷ÿΟL““•Jÿâ_=“æ«ÃâØHGÝw¼}[úñO¼ÍœÖÙÙùôª_ýæA•÷/‚ÛOH¬BÐxóèÙôOÿÅ樂ûK?mr·²‡ØgÓ“Êñg*Y—Uy૤»ráK̃®lÃAZ%€H7!hxÜiø”ék]ßз 9¿@ƒØeu¥p-àìË¡C'~<õ ?n‹²™‡ßÖýwŠk~äž°ˆµp_zëÌÛÓŽ-ÏgÝ ¥Ëá:ÖEȯs¨ÄäWÖÑ“»µ¹Ë}Åè2F½ºæBltèu•‹/¾hÏ`]¬Ç©§_Íuu‡­\ ŠN™UÔÀªn¤05íðõ©NMõƒÁ˜ýv;kršýQ=…YVŸÛc%uûÚn®#rv%Ã…í²WNß0F¸Û©“¸Ún€°øœ_5„ ÆHæÖÎÀÁh”&AÃ°Æ {À­âñ³ Å¢÷z ‘Ó™‚U×JçºQ_p×ÎÀj4@@È"á¦ÈóÏ¿˜ü1ë±-ߢÞ÷‘‘^½ý2\Ùº*ìB;‰ùô+lÀ¤¡Gç7®‡4‚í¹çÌm FêÙñ ȯð Nz¾wíÜ–F†¬CäìÙ³2ÊϘm Z˜éên#[6§Ç¹Ïẕ•=:™yèŽôþÑWÕKÅb>7ì8ߘ{äÿòW~”~ñ/ŸNwÜá_ÂÛ¹”eœv5_Õ¯‹ìx,rûEæLzQDÌ ^Ñ~+¢<ëTÊåC>ø3T.â9b÷ZékXŒhQG8Ï~_¢<òErŸøXêêû ›Bk¹”¼nB< LÏ9uò#içÖ2ÿH) BA\…ü‘fB#Êb:tä½iló˜­)Yo¬u£ìVŒø#Ô*·ít:@žyæá±ó«¢‚ x饗V mÏUj`ÛÖÕ™¦ÛQ á—W“ÀÆNEÝö8³Iʋ׼NoÖº„ xÎäcƺ»ÝÉ n‚0+…åž} h*·Öò7=t¸qe êXi[œ(%„ Ô.žB¾D± †€z7-Ý I¡ N²ðÿ³÷ðeGï‘Z-©¥Î9MwOòØžÛcpÛàÈ8cpcllÒö™ ða…] <–>KxÅ,Øà4^‡ÛƒñxÆaÇ“S眳¤V·¤÷ûVsïýI©Õ-©ûéÿ¿'Ô©ªS÷þëTÝ“EþÎUru‹²µk×qFЦªCaºÏiýp(éï~÷Þðüç?¯ {9G-è–ÒrPÊû£ó3}X˜ùÔé3n¤šn(!‰ÍÓ!„s@¢¾.Œ]þMç@ö<|`c,r¯µ&òÒ‰&es;Â’%Z`¼p¡)ðù:°zÕü°k÷ñÞ\7úá…÷Þ·5¬]»Ò=[…Ê—Ñ´tl«äiͳ"éWå‘vk Ë„`U1Ñõ¦"?«´ç 0ÅŠ:Ž vHFßãFCȯTËäT+3êãè8\[ضÿ%r>^–È@ÀÀGæ­vpNóâ|ãÛ(H÷*“EâßeIÊïƒDâdl?VÚ¾ÄFSYS2ÛèŒ_Úß÷ßÿ@ÓÙÜ©ê/x&Ò v'ª®¹´¥;s[·tÉls@ú+:·”k³öØ!¼´GûräZ›g0éWCêíí“ëvˋʪÐò^äjKz,3ä4\ÉÉø±–æ‚Í#Q1Ɖ´¥ŽÅc…Ö4ÎIŠx>ûV<5Üò(W„°ž¤Á©y¡Î™3ƒúç5 È"‡±%0\™³|ù2õàíÓéhø]»µRžçeË–…4TøÞ÷îO}êSÌèl(¼L2Ÿš‚e?vTIÔ%üúùí3 烧å€$Yʉæãt†z[š‚#"ªb´ o8Q6–éW’“ àd£Ü¶•#­ñPÐT2ÅY@ÃÂèm ^»\pÉùvž‰9zÊG—•W5¤zà"­xrxÔº–ïåcuLòFÍ„D9 qFS,Ï®7DñËèÀ5uL¾ô –8~RmRžÊ îit”ëõc¹òÏž›¶ìyyèžÿ2s>zå| kàfb€/îç\9˜©-§DL´¶¦vFiHÔ1FÎGr° 8]4 °öãž{¾Ù”ÎÏßT¦ÿ¦—UyýÇTHôüqÌ6„)X¼°¯èŽúÀbu`Ñë¦|ÑEB•š®WÜ–N Ÿ•‰º²C¤4p|ŠºçÚÛ‹¬XåiF™Û<ÖÂ$j¯8WÃ78ÚŽ·³ƒù·š!†l+L±ëS´Ü(èPp¶uo¼vÏíÒ8Ýaž>àIóÍX Ò!˜ž®yúôX[Ïj³}ÿ@_8®é9d Œ'‘sZ4%šÀhÃWX'‡wªHñ#­ ŨþâïlúlWÀ.ù(²Y·âEÙ1ZQlgâ9 ¬;uZç€DWsQ<ÊÃÁX_3y× 2áqãׯ#$8ê+LiÃÒÛj†¼p»âwÞៃOš¦„ÁZ½¤ø9ô0½ðid68þXÉû—q¥…./ …×¾KZÐ¥œ ÆôK¼VJYvœx¥T™ÔpFý ªsìóO÷- oû©ÐÑý¢°T#3ÝùHò }æÇæ›$ý0o?QêmÖMò¤®íųPÕÌ_ãJàÛ·ï¬/ºìÒLÁj` Z‚³†³Ø7pÖì23ÆÑ"ãp½q –+ÓlµÔ‹*ˆ×^d”ŸJqmÝóLÁs…íq±¬ñ—Òµ±²ç]=µ¡Ð·î­­ÖtœÊ)ú³YäW„U_Ûåí”Rõ&Ê3^ª’.o€·‰® ZF_u‡†ÚÂŽ½O›÷ýbX¼üéaÅÊ•3jÇ«ª,Ç}žË xÚéíwA™üLµwn\Ü Q¥˜ËZÈa×+F ˜N[0N§j½ ¸S¿ÃópÏ=_¯'—ÓÓ eK–MÕÉ“tÊ«8 Ü€²Z‘@ÇHék_sM逜8qbJ§Fá€pz:èmÆ ÖyíØ±S {ÂÊÊBøVx¿T`PTì‚EHºÀím¥¤µ„+ú¢O# JDHtµ¼¬·§£FñQ2j ž>¨°d¼{&Í—¡&>eÁ0;ÞˆÜéÃÿèDh#àðHÜaq¨c%£WŽÀ™šVåj[m—¡à¤|o´ kÂïôÈ7ú%#Ö%g<1—¸ªØá±Ð御XKÞ}„Å“ëÇzGŽ­ ;þPèî¹6¬^×BLóIçÆþ$¿\¶.IÓ°Xgí7ÖÛoùH‚0ÆÃaåùëBIààÁCaË–mfxmÚ´)–m±wï^{æ1ÜV­šº uOÓûûNiÇ¿SªYï$À †ÙxÏÖºõ¡™½Ì‹}^îq  ]L'Yíó㉞’¾.4S̉ºËú«åšËê $é9'2þwËóÇ`!±Z:±C+J àÜ3*;ë´ ‡š¥-¾ø£!œ’ÂÀ?9¥¹6¨na<æ%Њ†‡BÚÚ€¹¼kV¯{÷í³7Q¼q§“™ŠÀuëÖ…mÚV‘·fkÖ¬1c9á~ä‘njֲe³k¸7ñ>WôÁ¢Eó¤ ¤¦Lo%¥&¬Ê;§·ßgÏú9B§Š]°€1Ífʽ½šÂ)9ó7P5*M#©ú¤¡fò¸N}@Kc¤G ¦Ìàè#«5ì$þÛš¢š„cÕ7HDÇõ+¯Š‡®‚áŠåÄlJ¬œºÆ7)“U©›‘½éýXßÚeˆc]°X”/Qrè!"TðSX/öÚö{v˜Óy]Xºb‘þÍ‚~N¯¾a+p̆HEþ…lÅ·ÉLß…,c[ ™Ï†¶ÍP›MGi…ÕC‡v+¬ŒQÎuÙ±c‡^­4ǤZ~>ñên‰çݯÎG”SZwýÚuSŠïB#;räH”\ èF/êÃÙÕU>•Ÿ‚©õ6<SÜ~Ö‡éoÏ¢?1xÕ¡–}ÇêÔM>Ú¾Õ5 œªr³€ÆPŒ+N:ŸS–`Ùæ+Êl›]c3)ÝTJ¿ÖfÃ?ð³vzì£xSWè„ ŸæñSÎÈ@ÿ€yu-"õHsú²’ÀȺÓóÒ=ϧ]ýSÌÁ@¢C˜ÊùŸ á_sÍ5¶+R½¡÷àƒ‡ë®»VoÕVÖ›>ÛdÑÙ¸•fk@L-ð3Gù εA_¿8ÕÛšþÂy•¥! i 3D GL!ŽÕ>ÐÆàÆŸF #PñFu“ÀÏëŠBv¾u‰4Jú¦šPq±x%'ø±™Mº9ÉÕŒZ!0§£º¸"/1¥|ï8" ɹtšDψ—HŸ¼Xßb¶"¸—S=B–¼©æp»N _Ÿ¸2œxªN_–,_è,¦¹0jˆNŸÕzÝd‚óåŸäÈý.…äò±ß€$…°r˜´Në žÆ °c£Û³g_xüñ'šñ,¢Ç§ú9d„œÀïòÎ;¿dñü5ýظaãô31N8ivpµJ³—õ”Ó±ž½mîy(hw&x±Û9ÜT—òÁU…­Ö¥>:rà çB ƒ²Í㮸–1ÊWˈ)RØÀWx9¢iŠU¡Moµ .)T•ì¾­œ²´zßÙMå~Z£Õ}!Œþ¡r׫äù1 2U[ãÕ‘ÌÉKLízÞÂ7\þõ‹_²ç”7 Sé€@ƒ7¸£žFBNéàº+¯Ü8¡.ý^FÃ=Óó-d¤ä¥Æ]±,É…ó?X†#bAq”$2sÌa±®ë”WÓÕõg ¾Ä€¢Ž·iÍóȯñQKø¹zChSÜw°ׯ.¸¢kšV¨£ŒÒ´(f´¥¶F¼UY;&ÇoFX´Ôqœña_¢Ž!ñXâw—ínÓ #^uk¡dwèX u=‹Cß™Õaðܦ0·k±íüµziýVp:ñhÙ±¬p4#£vïଔ1S²V‘*¤ûï©ü=a $±¶P‘—™?¾YëHw-¬VŸj烳ËÒùe'޵©^Uz9>=X²x‰^€4®ý™nƧÊóËNjƒu‹ÐGs@Ò”ð´–Ãõwå#¤W>A‹=Œx¡×]ÝǾ«¾?”Ù_DE_E•–úfÁµì€àµÉ;Jˆq>p4ÊGø¼ 1¥ž‚ÈT£b-šçEp­ O•ß,¬é(J@ÏNXÙ)å”c£K`X»,ôºÁÅ(ŵz»õ˜v ¡C`Ovθ˜EÇŽOzÒ5Zø8ÿb’ž6Z Y„nJ åþæXÐ\U)×þþ8·5šZSœÞžNÓCI×Ó6Ô5UI OʯþD˽]ªeí+éXS@F¤i¨w:Èõ稕j0y›œ’ëfƒÈtJãªÀÙ·îr8vâIæL­±UîR†³ÈN*8 tï8㇃©lGŒÓmë¼R‡RÓªÙ™ð;&ùÛèKœ–Xר[âwÀrôU–““Ã…“ë=6oÞjÜ…£ÒóÁƒ‹‚o|ãž"ž#Ó+Wl˜^&H=Mã«ß´©ÙtPžó{#š©D_J@¿àqÄþ0õ©Õ>Ãzë3€«ô%h0é6Ïò|ê«ÖWrÔвþl˜&2"E· ‚®u5”S6. Ï46VÙ˜N_,–©ï ›yv¬9¬ù›7m‚…²Æ”Ïä™>MÃêõщg}ÿ3Í¡çwlš†çˆˆßùνaõêUZ¬¾~Ì‘“17 ùý§Ô?}‚©¬¨Súü,ßK:%ƒbÐÓ5WÓ7;Ëmx Á¸_NÍ•£p* Íú£à(ôZ“ò¤Ïê‹`Ùë•:§O¤¾F™¼‰®ÇÕ|cvôŠÞBïX m4p¾,â²d˜ã1„.m‹¾råj{‰ÓlîpÉÙäbð.烣‘>)r>—ZpÙÓ*ÉÚÄŸÚèò'eϽ+ŸG²r˜Z ðÌ>|Dk:v;PM-…ñ±ñÆ:ŽçÃÝwÝ5~¥ qQ$0Û¦_>t¨œT‘P3;™ÑwT¼oAñ{°s>’ZÔT%i)v»%˜ ³˜§¨óS†¯ªÇ«ëº‹jM"-; ÌKû ›º0§‹S ‰YÖqˆ7cHÑŸ„9XOiwj@ƒ€Úm^oɪ¡KoÊêÃÉS'î]»Â3¿ÿûê‹r:K ©ÚÎù†Â«¯¾*¬Ô®UôVŠm9d*·ZlÊÀ(™ûöí|–ë DÖ†pRöœ8:J•Y™M›æk9ç|¸fp¥‡A}0õj`àŒ£»ŽˆÚƒ‹é NAGïLhªÈ#‚ôÂÄ•'š ¼å3$— éc»gÛwÒ[ɈæZÀX˜”F_ÊLôëáI»úL:Õ18œø4|Öà¡ØÖŒG‚ÐÓŸ¥@ÀÇPðåܡӻzçks€EM/ÖàŸDY%yÕÇ'nÖT±{i‚·›`´=ƒ~ü>ø±¸=þÌš6Î8FíÙ.¹bš :•­NŸîŸöÓÆ«£÷ßÿ½’Ñ›v l¸bã´ó0öë¹>Ýwº¡J3;™YE¬ß&Ø,ýNÌQW’®F5iLÚu·wÊÁ>÷þÉìýX.K£¿T{ž¾óÜçV%º-; iÍFªhS°êfêÈ‹£BðœÆxmÊͳ2ìyÞpo)«w@ºuPa}`dǶíõÙ9%0ª†µÖ¸]Ýîà>ÿyÏ ŸøÔíÏ([æNg`G¶ëݱc»vÐZ«Ïj­OY"q¡¦«tIq4*éäw¢´ù/˜ßNê¤s‚ýâ1ŒÐýš‚uºOÓ¯Èsu€š3̼n“×䎜ˆ€ˆx@aòN²x*ÐåyâÄéðÅ;”#¤¡k¥áÐѸƺù9ÚH`åR›ZT©níž`¸kè§/¯~Ó~ã'ÊŠIw³Uàºxâ-"pfõ¨xÛ"MÚšÈs¥’>iT‚–eZG?'%à¢Ö· =¦*÷ØîÕ¬¨zsqåœñ%°O Êy!Ù×ׯ­ÐÖöá„ðRéÚk¯Á„ÔˆGZ|Ι ŸùÌZF=Q ̶)XÛe÷ž:Ýè€tw7ÚɨӨܦh*æ6¼‡B©; î*‹RdðScôOeHÐ`æ…V¬ë ­#Ö²ïÌœ9:F︭–ÌY>q×¹xçÄÞFx:x n ÄÓkÍ“©ýzc]}«P_žÓYÍ$ÐvVb|œnÐbô»îþj8¤·d ³d¬äÍðMu|°-[@ò©†Ë×T“³.Ž;~WhÛªÐ'e#Úl  ÑÍŽ ½ãêd$ô΋‡žÊhÙXFï¸eIE|£ G öî?~ï䘢ç"TN|pýãß}X²x¾ÔóU›×LŠ/]#õp$‡v=”y)§ùÕÕ¿ë^U-Ã'`P%]]Ôu"™#S,=s~ õ]È:v€"å÷ºÒïñ¤”ÅSÌÌåŽÑŽ]{v74–‘m¦?±îhºgФð½ï~Gú½ñü†Tž¯_O~ÒuŸèyPܽ{wèordEý‹{H èÙÖ!ß(¢‘xMÊÆû­ØÃYÿäZ‹rÔ‘oJ«¸ÊH§‘Úeý*°Ô™k¸TaœÐ8w`” lÉÖ·|‚_Ó¡‰6ùxZ|††½<1B‡ÎJú¤4uø¸w&ÂbzX‹dú´^}`n[ýT‡3ý¶µ*Ê%‡,V%0¤uƒg|ÿl~€/~ñ ‹ªü°kží¢äâE.åóm÷‚L§”Ò@©éSÛÚ*YôõëÞD†ÚKÊŽk·¦`ñ¦¾^´~w\‘¼³PàO8à‰7–Æ¢21íý¶J¾Ù¸½ØìyŠQŠí0"ÖÕ%¸,RMÕsRÀ‹zÂ(u­e N×D¿Ä£â„Hhè¨(sÁä%`ò÷{`÷Awƒ`òWÔŸ™xâ3â“'y¹×K~Ó©S¡èj{ÒÛoÿôå~«f\û¯Êõ3ާ±:vä¨úÊÚ3ó°‘Ó.WÕºœ£•x(³Á±¹“-Î!K"Øøåœlï³Z¬Î‡rìüsC‚UÇöÿÌ`1;WÇýNÚíø3Ê?£~?Áu^•‹æñ–G@:ut;ó·éˆSGÙÁñìêÐHseü[ç),-º#íšr¥´§pr%쌙A! °ÐйòL‘*Ûóºº{}§pNB#0nÃÆ );_³Æ—À½}Œ/Äžòäël=ÈæÍ[l„¡ò©Þ–w|†‚3~[­0‹à’ñ»ˆ°H›®Ðï»; ä´Ö‡¸ñl꤈ B[·ú4!ôEÂ7¾„ØþKgÆéC³¹ªôýÐÞy‚¢’"âÅ]ÕaàŽ×?!í’2´/M jÛŠWÄÌH3«AªM:…À6¼}š‚\2( ¥¨¼¦`MdúH#".F¥Ô£e!pu¡–¾R†€Êú „#ÏuÕŒü;]Á¢Šá?J=ÁI±Õ·tˆêÉUÒЀ.߸œœÊTDžñ OV "p¾L‰¸.YºmÅü& t“¿‹?ÊžÃ}Ëá‚I`º^ì°®0½P:tp¿v<üÎkcF<9 ̶Ñ^¸cO×÷?ÝzA_p°§ÏÉ¶ÆÆN6»p¨Ìíu®1mxFC|²Í¡Y»ýŽÍov|=/»ÐwõÕ¦[v@h,S«Œ†g`PcHŒ98î¤øðÃÃâY„Á\ÀÙ•¼Jqê6›#ÙLÀ'´{Ñ:Ë!‡, K€QXèýüçÝl)Þ.°˜q:Ó‹¦s®ò…n3†§¡›Q&bRf,'º>KC¸X9ÑPS^O«‹£n¤§šc\Ëêfæ™!nø)ˆ…£T‡*}3ƒq” –­‘Co$p.¢™9J}Ï6Ó´¬uUô²ÑyõZfÞ&b[“aëW“Ù(ôÇjQ.›˜ìž©Š9„ñþ;å »ºRŸ•ÑïîÄhgè(iɘõ|Ë–- 7n¼ »¼%kvVLkT±{>|ë‡ÆÏeÓ$fÙô+6^:~òxƒ´æ5Ù¨‰)Qè¢ÂÞÆÖ¶4vx²Ée¿'"Úè 8¸mÏT,Ê|´ï•N¾WÊ݉‰pQ§50Y—Ñò¬¢CÒœ2L8º6ÎXH5W梥…é&k€«XÒL¡°s •…Ó,xPÎü1¼ÄÁUÕÐlˆ‰õ"[·l©‚åx–@KÖV¯§9Äß¼àù7‡‡zؤ§ÎãbÛ/_¾\[ñ.7œ·v, ´9–šW‰"ð_IKÍ›±@6¢ß=6zÊõ†ëvÂ2¢ôéeïe^¦sêÓj¿ëè9N¨¸t:«gô¥å"}ãžÇP°ÐòP £IVŒ7ŠŽ2ñWòJ}/3ÌM«Ó„¢=). MÚš‚óíiÿgª“¯—@º…t‰Hàé¹i³Õœ~ôMÝ¿‰SÊ5’Ö­YÚ;ü¬l¹ä>LG@gïܹ³ }×ÿf»r92c$pýSg×úGy¤é¼Míã­S”Ý€ò¡ñŸƒÿ&ø¶~”þ®1ÎÍa¬¤Ç†ØRW|º©,À,pØjÚÓ\N!ŽqiÙa¿x?„¡e1#*iOaâ8Þ QSš†Ù?–›”ž•¹Q9ŸÏ ÊñÜj÷Á š~ÑxR5S°N?1í»\Œ!ã\4ƒ%0Ò¯‘¼Îs¡c®/n~ã4¼ç½ï³)XLÅêíí½è'¤#.:P> .¬‘Þ™ƒo>jfx‚ß:?ýdŒËÒdžÑ¨gXRZ’`Éëed‚S°Ð5I7Aßé¦+tƒ†/S²Fßa“.k¨¤ øÇk—DßÛbeM*ÒNUÁâ¼:-çÙ (lÆ«*Z[¥‹ In#–G[¼eNntœ†$MNvß¹‹D$é➤ç.I_åų’ïÅä„íµ–.^ú›Oß>¼­ËoçƒF„=»v„/~ñ_'Š&Ã_$ ̦)X<[û´¦¨þ úŠfKØl'­ÿ@ãçýŠëÖq[Ze>S©ÔA fö½h»ÃâzÍÊcß _”ñ‚ 6z";~¼ÐòkDp¤>ÜR¤õ#c~e¶îCoÝl(Fùü#Õ+Ã5iX†pÒúæ¨Ûl', úiXœðˆ’ß±}ûxmÍåYЯe¨¯\ïÁÁ„¯|Å-Ûà6›XäÈ„$€ÒZ´h^ÅÇ8ÓM°‹F¤õð-*ÍèV -1L/7ÀÕZh¦t­Ô¬¨fSúEÝTØG*Ò5qUÖs<%Hs‚ïö*XR}#o•æSŠ%ŒµÒj„O4\Ôn„I8óõ<%P<Ÿéîð8•5Ï£I__ä—PçI7WŸV °“âéxFÙþðw÷Þiå']¼ä»ñ©7Œ0ÃJì?`›4õ鹪†^½œoÖöić¸Ô!ÚñÉ~”½=w£Å/Ö‚È·5Uû>ùiH,KkC¸Úá)ú™*“Mâ-; L±‚iûDGÁœyk€1Xu*ˆ›ÓA=}`Ž9g8(vUž9+J]Ož>Ù„]Þ€ö6ä;q.—Z3áIfÔ<8ˆmó¡¾?¿ÀšÁàMO{†T9ƒY¬amÛÖ­ »_ÐÌ.Fÿð"¿°Ù+v66¹;þÂßd(³áã–½Vnv~tL°ßãÇ׋`ÛËž—ÀÚ’ÔßÔ0ß$ѲB‡Ï4©Ž9š¢-½ì$ó¨>ywÃÜ0ò;ç”{“ǧ£Ý·Î„)>àéìè4xŸÖ¥!œ“в½‡eüÕ‡ùM'OhîþCõ 9%в˜ŠUÝëÕ¯|yX»ÖýcÆv°ñŒæpþX´H‹Ð¥Š€^à—/£˜)X¬1ÃÊ x!Ò+ý2Á)XIï˜ÍmV^¤—¨°’²ìjô%ÈJ+QÆ&Tœ jékõºTmHzæTi›sok­)šê×nè™á[(ÜØE~&ZgËÚ9‹—ÄG¾N¡¢üýI+ÒöOH¼oSHþrDUû«¹ø8tèP±èœßì§>ññ†ƒd/>W™âXxî³}ã™±`fRÙòs?ÖÀÒüžù y¬£Æf™Óæë¢èwÐ;öQÑmú2írÍ4jWl|lu«o¶?ùÔ§{¡Lý¸eßÇ~ONI3£d´¼F`”ÀËœ vÕêß©\³éãz§ cÀ§†’¦b‚Ÿ«N›yçéʘt¿†™"«†fÈÉÓ§ÂmM†°rY“‘€­™;$#R?D-`|Ë›,üýû>9bCêÌëݰaCñÜN†Æå^‡ßüâEÕµ\Ý!½rnhDg±°k’re—ŒrîÎëÑ!†¦'`n°@ýâHË[`úÌé—™µ1@Êz‰×”Wò@»Ð=ìºó[¿öªpJS08ÜÉI¦zz#}¶iãjsTLªŽEOOOøÅŸ}q8xè¨ÕK\8 x»Ã ×_5¦ó¬ñª+„ù+òÔ~4+Áòbçp$`¢®ó­¸÷á"¡ÄùH§óü—/üS¸÷Þ{/õLf²x3ÙªÓRoë–mMgõªÿ¨ØÏ¼àOúÓÖîú>õiÉ^&ò€ï°dåLƒTŽÃ‘âÀné:Ô];ç¢Û˜Ê¥ŽÌâc}µì€àÙÈß§æÝ›iYú::»düÓï謄‘h8dT¸ŽJ°ÃãeãڵЦO Vkávur ✚)1œô;5_ã¦MÈ!K`‘ñ;túl˜³ÐH…oýÉ7‡¿{ßÂÉ“§ì4[FBpBÒwÂDr wIÁi”S;k¸žPP€&›¶pâ”F>]™n ^à ~û݆ÅK}\S²e<”ñÊse[…÷x‚IŽÄ‹_tS8§ÑÛf#fÀàܲÕ2Ï8Éc³ƒ›Ÿs½M×Hø#À0²ÒÝÝ]ް¤ÂxE\Ôó¶Jù“aïyJ~­ ÀQ§hwYNvS${vÀUÊ—Xí³¨ç’rî•Bý}÷ÜüݪJI·Zcjà˜v•¶Ûå~ãë_ wßu×Ô ÏX.¨n~ös/(þ©D~”Óϵ3橾Ó5h»ÔŸ0û¨>ÇË~tÁô Lú_}ÁìySEþ+JÅI'¥ÞÙÔ™@HÞ¸¡I‚G£9ÂxõÔ¨ß-; Ö™ÂxìÔXpyò~œ™ZÒ¹Þ13IXý²®7µ- …§O„5auŸpóçõ†ã§NÔäÓ°Ôƒ÷?˜©äÄD%ÀzÁ“gB—Ϊ ,Z´(üä[Þ>ðÁ[u@^¿‘“a«æanÚ´É Ç‰âÏðñ7<¿3;V»µ†F8q²Ü†7étÍ<!Td¢ÎŸ+QôŽwÀõNRš£Þ“Š ƒ>!]“žõ\ÿ†/Flq ™”wªÊp@pHÒho³zÉYIu«8«qÓžÆdÒÏUçKЇ·Šî­ÖÏñ©“€?2’¿½´s‰ƒÛóçO¡åè«,''‡‰K þD'^q’5ø²à<­ù óñÙÏ~f’sµ‹)+7]9«N@DG0ªQß?ô6™~……çÅ|’É3ÒÑÖÍ¡¤‘¼qŒaëKÐNè¬è̘þ*û·ÄõQª¬Írr4c~·ì€0tÃÿPèT'› 4¥ŠnÍÛáë<"hÈ£MÌ1£±Þ8¾MÅ›Á½!E€Lÿª†ó48 GO ÷~÷»áU¯}u4dz&,aNI?9º´XšÀÎX?ýö·…}øc“Êû42·yóæ°iÓ&{›=a—y~÷óµ–DQ4›éô ÊL3—ìjŠÆŽ l^— 'c|"b„¦)J”h‡´3Ð\L,vEëzªy _¿6ZY5\ƃ Àë%}Z…k5W&?“¤Ê ©.Cç°¬µÃd@yµ…¤s˜ ¸ìÁÄàšäìò'åO=bµÏ5r˜¹Hç|¤Ý®øMýë>îºëË3—éÌYfÛô«oë[áðÑ#5m ±°·qý‡íÜ©gr®Öl›Þœë}³â->ÔÆBr-[P™Ù÷êJب±’ڂЈ •p>¨`êKJÎõtØLª•в±ª#à]š“€!Þò° °¸2FŒI¸SÔ«v®S|M /åmLOPc‡£iZÖ®}»«Yš¶q2?v\g‚ õÖ:‡,ó‘Àð€vÆÒ_wtB8M÷gÞñ¶p«œÚ¹3O<ñDX¿~}ÃYçC÷r¨ËïœÓÐwí9nŠß9z"j7Sc–eÀš¡˜‚¥ƒ¤(n¼o)Ƥ°D›`å™R¥ºC–0ÔOÊ¥Ú¨ÙÐÚ¼å`øêWûö }§û´ö£KnoxòSÖ†nؤ©Xì6I T³!õØX¥M7Ì̘ ^Är¡Bz¾ŠgÙ§g¢~ <ûDñdï;ør0é^ 10 ^=ç{åÓŸüxø®^€æ0{$ð¢¼hÖ0{vðlصs—^¼7žV¿LFùô«¤s”ú×ÅG¿‰Ëæ–Íè»+§O@1)èb/E¬ÓóºQIY1e>Ê ˜Q_nõõ,w쯖<œöH÷ˆÁ NQ•ꓘ¡FîIKÃ3)mø¬Ô¥Òp²Þá,ιaðì ÀØÆ—Uÿk˜ê97Ïžy}‰ÿ|y‘rFNH Y°`AxÇÛß>vÛ?†í;ü )Ö„prùêÕ«'o8μ¦_PŽÐ æw¹ž%s”çz#ýôý÷#¦•œ×£Ý6¤0«/3ZcÔ“ƒF½’t%¦o¼´É7º,ò•³sVòפRMÊ7¿µ-üÕ»ÿ-lÙ¼OeZLßÝ.‡ŠÃ£œƒ»ïdThNxþ\^zËÍaéÒÅ58ÆKX i[qºlÑ>kGÄûFºõvŒÇC.¯•€KVßöÌÅ”âéy²{F+ªÞœZ<9Õšìqn tRPüŽ8P¬÷É™3ýáÖ~ÀvIœÒ\iÚ$ð²—¼lÚhO”ðf½ìdÛÜ3gjªr8w³õTh}\ìïR%×BÞ×&;=•U¯©LyÖG§„]…©¢ÀÀ‹sC¨#iy£}µì€ŒèÇg³ÉbW3· ×ýÉ"t]ù¡Ú*øH•iV±·³KFîSÃܨðQßß¶…cšZµfeí:0 rðÈ!×¾9¾ùof$ $_Ï[Œ„œ ºì™d!ðÛÞú–ðÅ»3|õk_7üì€ÂPüºuël¤ó&z #°R 5¯݂EJì’©(/%¼¬§Û§}&×Ê·+F³ôLùÔ[Ò”É1ŠWãmVp?&¼ù_ïþbø‡ø†‘w§C»ZÉñCÏ<9"šé×ÓCj$¥&3ñ¬RÃ\ßViq†™Œ$xänß…¬Ós¨\Ý#æT;ˆÝ!{><#Ï4 0ê±gÏST¾ôÜ»{gxï{ß“Ïù˜i7«~n¼þ†°fU£]ÙBÕiùη¿ÕÙ»0²h~í&M‰9ìæ¡xHwÊK]€wô©ê3H¤šp:’=î™|»nJýH_XŒr·óQ" 2Ô5$[v@q(Þ<6!Pݦçè]Ñ– £‘ä'‡ƒæÕ3;ÒNs< ÓéŠÚQ&-ÐLùÍÖìÒ›i”;Íä%0`MÈàÈ™0wÿxv_öÒ‡7„O~êvmÛo¦d1UkÕªUåÐæT0p‰á@',’Cç¿r×…ò‹¶X²ÆÌùˆíïÑS3 =4a¹¹´°ë ¢âzc„*}g-q­J¥šjŠ)ü'Ÿ ŸýÜ÷¼.vhÄ8½Š÷è œyóF´;¥mZ_w6|åß>­©«¯ ¯zj‹í¥UVok—µÏÚëm¥¯Iú`¨åp$ áz‡Ï]I—zý¨,>‡@å0y \ùaK°½î‰å¦7¸v÷]w†ý—™<³¹æ´Jà–—Þ2­ô'Bœ~äáuþ‡ìÛú€\˜ Äv¹ísý>[g-3×ÿÑðçý ÷:…Ïf)Ñ)x/åºÊã±o!êè[¬±Tü2¼^H‡‘Ã÷x¡e„7y)ÀŽuÌ3bH?ʇš-7@IDAT’9Ú ^aT¾¦#6æìíO}ó"…Š¨Ë©èK/Mäíº wAٙƦdñyðþÂMß÷ÌøœÈ8 °;ÖÙgB»Œà¹¾åݵ×\~áç6|úö;–­Û ýáÇm¡:S²/^\ü&·ö¥XwáÂy®Ô8Óv*ƒ¸Yþ–&Ò½ó´Ãë?XuO˲Iz%uÚÚ͹IÇ%úpZr£Í*+åûÙÏ~7üÛ¿Ý'烑9q´,žÆñFé;OëÚëçõŒ„Gø|X"‡vÑâñ§÷9g±=©­Beù¦vU¦| H’o„-E"‡©”€Ë9Ç>΄nR/!î»?ç¢l÷f*9¸üpÙc>EÍÆñ`k]v¸²ß¿Ý¢‘pøÐð‘ßõÎaöJà–—üЬa~ëæ-£&˜VU œñÁ¬úpRë¡ÓK}YÚŠ;ϱEuÅá ‘úQò­TƒÑ7šËûHê{®¦9%H•ÕÛì/•FðZˆÆTËÌEö KúQ’0eËô«Äc¡U=Ë`ñ¾"ÇåèH¥<òæ¸aI³À¼Þá-èB9!õÛñî—‚¸ëÎ/g$Ê3_¦NÃgõ³=1†z†B7óf.\ ³B~"<¨7Ÿÿ¿†S§N…súܵk—Í^¡´–,YRüÐ§Ž›Ùi±ô ?s~ã¦:”pÕ¡üøûGC$C­·g®C½ð™)i™²T¼¤S‹ ò^VÒw¥$Na€¨ïjkÒ†mž1>ô¡»l”ǃv1â¡óm¤ƒ3êÁèG/}ˆÊuˆ9 =r>@ßÝ}.ìÙ~gX°ðM-ލQO.m¾¤¯¡M*Éј1þ)°Br˜B бóø]ÐÕo‚§wñGÙÛx¾Ha:ÃÀÀ€9ÇŽÕ¾m>+ðŸ>÷™ð-íD”Ãì–À|íõÜgÍžuÂ_¹û+áàრBgñyr ª…8 I÷»ÞAÛ ‚È•Ž1Ýd9–ïe^NÇfgýðµp^ÁõTƒ¶r2¥ªsà1¿[v@Òšˆ¦¹«ìŒE ï¬Fh ñ rµoE¬á”¡hɧœ¸*šHTf¸(V^òÞ X_ÇOoºï’E‹#ÇŽ†Ý»v‡“2]°°qx*áÌ×,II€gö´ƒ iqºR§gúú럮шȗî¼+|ã›ß²gž·hìÏÂEªãˆ»NLŠø¥Q ™-ˆ»‹¡;H»±Fû¤”YU‚®Id¨÷º2q)@E˜£~Šj´¨›Ñƒ Ma Âêcðæ¸F«ÈèÇ—¾t¿Åt«4å x[RL·RZÎN‡•+>GdžÞP!—s[Ã@ßÐ3ìQ¢M±EðMžá€oo’Âãçpa$ž5äîÏvºCô}‘&·Åîß{ÿ¾0ü\X'+?^1ÅêÈ‘#6•¶*+¶}à¾ï…O}ê“5‡War|vIà%/|qÔþ™Úv¿búU³íw—Êþ­,W8v’é‚Þs•ªÆûÕúõØ–j(n¿#ÓK¾=¼[ó £¡6f}Œu†ÊK„(‚V¦_ 4´ì€tvtÆÈéÈÒ¶¼(Øsq |˜òZ–Æ83Ö,ñ)ûçKÕµ-~™Zë‚« uZ[V.Ô.DÕ°xáâоg§ÇMÙÙsgC__øö·¾^ô’WÁs¨yÖ@„˜%ðô¼¹ƒŸA íyÌ÷â¼d>Êg´› Ëù0j]ÎIg?øà}áŽÛo¯Yx^—Ó³O¯}åkg Ó>ð -+èÓ„ÕÀô«…M Ÿ<}*Ìëì¶>%½È·~Ö”ÔÓ—#"œ6 "XL«­¯DOž]œ¶öí•åy¹mš°xQc¦SôUè¿QÈÊ”We¡8¼¹MÈù¡wÍ⸢áM2š M·ôMs¥L¯æ(jãpîÙ¹ON[ír‚; ¾ÈÜÝp‡£'¤×¨™³ÁˆŽl±D›®…9swÙócC5ϰv¯8L®øÿÞHgÖ c—‚7}”FŒB'g·(‰Õ¥LD±âžpy’¾âé9´üñg°–$ÀËF¢q8˜^Ň «kZ"îËIͶøÖ·¾¾|çñ>¥Ò|½$ÀfF¯yå«gMSx÷ÜßÀ/³šõƒÇÙýJk¬ …ž±Eô@ú³—û®{†uÑYçkð¬ÝF7EXÅ9z£ÈQÄúdƒe‰!pxÁ%ç$V°üñ¾Zv@lÑJÕ¡«¶”‘\ 'G#’÷•hÓÄdoˆ7Îj¤Ö¨Ä…‰`¨‹Ñ›­ sškXi”I}'¼lñ’„ÝN?öìÞÖ®[›XÈ×, "¶êÔhHW{èžïkC ´\ŽÈk_ýªðÒ¿(|ï¾ûuPÕ÷Â!-R'Ðrª:Šqž,U¶ùåƒCƒûR ‹´„ߺbú½l˜ˆô‚i‚˜O– 5Z€“7 $âg N1¥˜öYæ`´ ëþT•qbµ¬Q—y°9¢iÚåꜪ°Îƒ)VŒv°FŽQ ÚóáŠÝG:!ñN‡„µ!ÝúßÝ­ë-*Oc…ÄMê.Öõiµ^j¸K˜*DŽO™Ìñ@ÎIÖþ|x¶çÛÒWq_¦Œøå‡hëŽíaçž]&Kô+S«š9UÉ ÷͘ØüÄcš6y§Ö¨çø%&zñËôÒzvT͡ڻµ–´Ùô«eu›2q›xÞ©í?Ñ3Þó•:&é#ϧ.ýåfç“6ß9«ÔW@¦(^§Ä­þIu’'PÒ¢Îè¡eGi8:6lÃJŸ˜ƒD81ÒŒ4S4~CS¬Á ް¿¶×š£á¥vN5T1Ž 8qPX ²DG50 ÅpÔ9ÍÕLøZ´ó/ÿü…ðS?ýö”¯YLöL÷kmÈY •v¶…nhB^kßüÜçØgß¾ýáÁ‡ >úxáŒÇ[s>ÕíÉç¹Ç á÷ÅgÍüÚÝà€™m6¹"ÎÑtèÁø§-þ{'BÊ‹çhKÁ®î¹&¤k¼tìï®.©8Ñó`…œ¢g$IèíÆ±ã})¼)·í€s¨-˺ü6§ÂÔmR¹(ߊ³"Zi´Å…æÇñSÇÃês«Žž_¾dYƒÂ¾É G±%ï«^3;ºRB96Û%‘3 Ô5'ð[O‹ÕSÛ/^nºééö!ã÷€öž?|øˆ½•;®i„t–}}ýVÆï/)€„c6_è0Â3g­ I— ^(K¥Ñ7óæÍѦR‘è™*0F Àá \µqix|ó!SŒ€’Ÿðƒ}ëŽãá÷þèóá‡_y}˜¿ '|é®ÇÂW¾¾Mè%ÁjÊ5y‹uig³E6:UÏNÒ¦+‡S'ŽÓ­Ò:²Ðú:aM¹‚ˆv™;¢—=¨q—Å™Áe¡]ÎH=ׄ¢]ÈG¸ø+òÄ3í!X^Œ+eyùkŠ%`¢ŽÏOê u5iÇûE»+–¯X¾çu¾ð…Ï…Ûn»í¼päÊ—®8ûcÁüÙñ2ú›ßøf`áù©º³?¸;ͦ_±Æ©,¯8¼ ¦ë#ô *)õqÈÜ&4µËöö¢²ÿ’LòQ]úOÎqD°†P€fI-ûW‡í{Bë8ªa$¦™9Æ?S³<À¼Ò|5 Þ´X³‚aÆ•ÏO –_ج˜mvW-_aýÂa,ó5$Uöìßk‹ÑoyÅËmô¦¦RNd \ hêËP¿` ôëm¸FEBG[ƒ3+¬ùX¿n}Fcí·þŸÑŠfU>oZp@:Ù(1ÿ•§ß>¿x‹+2¯[HœŠÖjCQ¼ŒÚ>÷YW†Çž8hÊ|®a„Exy RݶãXø‹¿¾ÛxIåæ|D¦ Þbí§ß¸NNѼrT82Mø\wÅáèÑbôÃO:§;ðéXäÙú!fÊUW—62“æÈù€)ÚO8{uX l¬,msži”2t©´¶”/ˆh…tÉ|™ Hþ.âR¾ÄŠgʨðöP¹ñF§ç~j¸ü°ðÛË!K`4 Ì–éWè–ìÙ·§¡)‹,Ò¬r”#:vXS¦å§ëðßAÒ‡6?tå²Z§„ºœ Þ×ß¾­srȘn 0*2¬u"Ã'Ï…#}að”vf9Õn½ÜŠm!ç¨ ±Ê•fAú W'Ðã´`Ü'¥˜ŠÇºâ€¼öU7ɨ 7'¢Â›ÎqÍ¥‚¨¼A7YŽÅú›£·%¯~ÅÓl÷2ðW¼‘·~ãu:TpNX±|ØœÛnWr:–+íÓ­õ ‹–èªþdnõè˜[bCž8µD ï7¶Üfã9µÁšcœ—HUæ9uù%DŽM‘°I›Hz†È‹¢/ï€ÇÊô1p™¡IÇ\fÍÎÍmA,<Ÿ-Ûï>öÈ£¶tàȱÆ)Ù+—¯hh-ýë£  sè‡,º0åÅ1`= kVù½té­×<94]:fƒ:V&|ƒ—u ö‘½në‡ãlh$½ÅôAe®2Ƶ½ç€s´NÂFMT,^F©ªcÖˆ.¶ÀT‰ ¼8SN Ê •¨<Í5£ÑüÍiÓ?á2!´•~–d`GÒ×/ÂY¬¬S; j1i5ìÒ®ŸÿÜçóžóìÈsµ4dz¦G#CåÈȹþÁp®ý¬mãÛÞÑ®×üéG¬µ Üs:|:œ&%3=\O Utaa<Œ8¿sS`éªöóï™:ÌODr>R}ê€ÃX³zYø±}fxÿ‡ï©€ƒœ`T+ô‹œ }ƒGxúÁç_žü¤+4‚Ñ]ðd¨Cêž-X°8,Yq]è¾ß¦aQ×v·ÒÂrÛáJp]ŠãxÌéðu"†ßpè Zâíð±çÊIé2œÊ58t|£¬’iB´ˆñÆÑ1ÝJ¹ß b9L\öàãFpMrvùǧŽ»QÞ'z2ONs*ÞûäPäZ—¨~âMo6}=šwÇíw„Ýûv»Ú¨0}»f[°¶ÃÒÂ…Ýîvyܘ„2ÁY_É:o™ÝJVt’4UT]ô6ËÉ+(N‘ÿ%z ÖJ»½ÒŒšhËȰö¶)UÆüÁŒsVÄ㜫’™Tž†cRÚë’6uˆpficQÌ‹e^ëÊ#;tôpÃ.ð²rÙŠ°«nØÊ¶ä•wøLøýÏ~–aÎ_Y3Nz#1¬g{ølù£å§¦$YÓ^„¾‡f…³(ÂïÕSf‘qWüìk:¡Gˆ)ϨsjÆH@‡Å‡?ùãÏß½g¸ïþÚam×] q£µˆ¹òFµQ¼nÝÂðŽ·¾À”dÊ\Ò©Wœ“å«n 'ï•ãqÀ•ùîVšn5wئZy}:t"µíË.;÷Üæv]Ó0Í ¨¦ª¦jc ”¦{°r.d  è5E’3§Bv/Mðv¼³;¥î·Àî7ºΠ>ÛSÁç%…#>ö—T›rc¦D?ýÖwL ž ä±G ´Sæ¡#3}°o›…ò‡Ù0[YæpØoA_öï}u«S£¼ÏÚÀTŸÎ#ê'Uôr¥®ôQ†Ø+6©,` ôgÆGL[æ_-OÁ)Ó¨Ža*NñQqN0·ÊÏjz§’ŸÓ§ÜÎKuäÈøG¸¢.¸·´á…†Óñ! Wù¶£‹`i»±Á³lÛ[–/YÞt”cû®áŽOß^,¢¯­•SYY[(*ۊזS7…gѤñ”Ðï•ØÓ3×Ι¨FA.\Þõ›¯ W_É6ÆQ‰êš&yµô“¢…¾ñË—õ„ßø•W†ukW‹v×j>¬¤¹0t-xa^$‡d8,Z<zç‹Ì+èZœæ:Ý»¯ ƒC7úi^ªÔ u#š’†/â$/EMJ'ð„9ã¼%ÀÄõ{ê÷Õž1»þ\+ò›ãÏÄy“β²¢¾ÿ¦ï 7^ã¬Ç'?þ‰°sï.³‰« ³îÒEµGPPÞ¯…ê'5Â2>>òàv664[Âc‹c³›ív·«ÝÆöòd§c×3í ¾t—Ox^Z î—–W8mç!õcÕ64‹·ì€ âéÐ0g§æ‹ÍÕdåôéP~Ú’Ëx,;×xYó·c/ 8ê¥i¦—``0ýj®>W´øtŠV§æª1OApXûx× vĪŒ‚°ï=_ûz}QNg d L“.ä¬7Ó¸š¡Ÿ,dÙcʰ€·€SХРÔa´bõªåáÏÿè-á%/¼¶‚ C2 W(N,óhCÿƧ¬ ø® O¾n“œ=$§f,^Ò(È’¥«BÿÐËÂÁ£ä°°Ãë=¼ÕÎDl¤%ÚÔ¡t†G·MaœÁü=A Øsü¹/üÙsdw§ÀDÏ•Êc1;¨åûQˆ)G²Î[?ý¶Ÿ>oÁƒ<:ذ£+´W.kþrã'¢1½=M?‰ íö:6»¦V±„‚-r¥ô­3ý$¥ciPºjwá@¹ÞºµVd^§KžÛmö¹õÂIσ>ƒ®Ùìtr-†–§`Á¼éQã•&£Z=ÀÊ4å´8,n-ó5 ®cm­‡²m.YB (SÚƒcwÜIIã]H#ØcšVµR»aÑÑWÃêå«ì†D,ܺs[øÜg>kÓ°0FrÈȘ>  °8£Ãíå8lËü!S2Ò($½²xq¯ã“5Î’C°bŲð[¿ö#áå/y<¼ÿ#_ >¼ß”§)fQ3¥f¤þúµ Ã^÷Œð¸ނùóçËÐhŒtÞXöá¤ôj¤dÅŠU:ñþEáÇ·‡K+–ÔÂóÚ£ŽïÕ°ûúÐwæi¢³"@‡©c­Ð¡mƒçV†#ÇõÆJoº\t’œ ©{;\Бcôá°×޹ËÌ9ƒ_>9œŸá\½,ë¼J›K êM"÷ƒ{ïè-šÒº•è¹×óz—ØsX“@}Ÿ?±ÚúR”@¯N}}Ó¼qÆ7 û–ÑfëÔ?Çè÷f›,qpñÉS§ì= 4[YºÄô¸ô ÚÜ>ÒI®ò“ Ä!›ŸTQʦ®òÓ®·ió[x4xðªïˆ®‡Ñ…ç6é/œë³ÁÛBhÙa8ÆJÜʱ°æ‰S°Î44I“•æ‹¥r\“Á3¥Ê9tX‡×TxƒI u˜Ò¹¡qö'ÀÃÚ% ~^Æyûpäñ›…:Çu´ý?kAúk^÷Úš²œÈȸ¸à÷}å¦åáYÏ\o'ÀIèÏ5„xIÊAQtÙµW¯5£œß÷dŠ£žëóŸwC¸éWép²}ážomÛ¶ Gu":6{ïüΰnÍ¢ðô¯O¹n½Mƒ¢#£.N¼'ý4/ÀŸœ–¾¾m¾1ìLëxFŽ ‡«Ô1C#LÑZ`tV-žoëGZqr  ^¨ôõßN«3bÈ骭äÀT2Ö«Œçè´‚/øÑÙÙúû)œ>cÏvêÿÆ’=+mZ[ÔmÏY+Ï×Xø.Dz,³Ëñ®Ýæý™þjúK¿z÷Wì blÚú°ºÉ‹v`iÓ Ô Ä*nP§€¤wø]$;Ú½—u»›:E¯«˜ã2¾‚™z©oªÈÁ~sŠZß-›œÜK¬xܯ–Â2äÄõQ»Š d‘&n»õÄò$€i 8l1 €ä Q»F5 12+ªÚ!ÊPU抦-ì?¸_§/µ‡öï4 ’FMRÙæ[ÃÝwÝžû¼›ÃòËSv¾f d \d ð~Æßþ÷³C9í½ª'ªì‹AŽ¡€jùDâÚàJÎÎÁušVuNo“L¿Eý´ø@xò\÷´N1ñN}ð@oðì’0tnÑ£œ2x⽉С>uié–ƒT¯óÆâ”º©Äs8 ÷C+çÄŒöL7£”îÇDî3<9/K KÀ%ðÎ_ø¿g¼(NéÅÑgïølؼ}K¯LŸZÑdñ9ýåÁ#m]‡[Õ±j2¢£:O¥ÉfOy¦› N_ê÷R9øÜ¥ðX‘6ßkãj”ºMyªRíCª‹Ý#gM/-; 6L @˜Å()Nt*·ýÅ.‹T¬ŠÃþˆVÒ3X“A}›Ÿ¦r¦ ØhKœÓ uh\‚·† 1é#G4Ü :dFAöÉA©NGßwp_¸í£ ÿî—gþƒYå=dz.% ðNÆ6oàKeÖ¼•À'ÃÌ~ÿÍÁZÊ¥~ÒWðÐ-ýý*ÀÔZB> ¼ã€àdÐÞª³“è3™äB[ªmt é:|.oMé~ðŒM&äû1©å:YµxÅË^®íÒŸ\›9SŸú?Ÿ œùQ6¬®Öô]–ÔF?ÐØå”›]-{˜ÅåE_Fy¬‹­<':©Ÿ±—Uôs9õ’î!îNDYžx¹ O¢‡­UNÒѲä->ÖWËHÉN–\ˆòøòD· ål8¬ZC½©àÒšzÁ’™G½T î"€HŽÏ…Á7sÐÄ!9 Kµðœ0ÕÀ(7©ê(QÎé’Û·n ,ø¹þ†ªUrñÔŽt=\¹îùK ߇ó—áD1ðûÍ!K Ià?ü»Ÿ¢3öºcûŽpÿ÷î Ûvnoà±K/¬V,mœ©ÃèÇÑãGÝÀ|V?FH¿Ùædv3¥JèÅ? $‹šJů¦ˆPꉈ–b8&wDT`øœ$ ­‡Z«}ŒzxCœ’è'%ú–¸xP|l.¹ðaƒUÃü-°^Ïó=M^‘ž8òÁ0ZaÒ*÷-xñ©(4•Ï6¿‡›ì™Œa³nõÚ†û‰í›ÃGoýHèëëk(ÏYY3KIÁ^h®. ÝŽŒ?Kàr”@þý^Žw½y›ŸqãÓà _ðÂæ…3$—Eäøû÷‡í»w4¼(‡Åõ«×£ U–ö©WfG[ÜŽª0@w’ÝŒ!m¶66vÕÖfÁµþ Ey²ÃÍæöz^–ìp·ÏÉã4ulq?"Ãó-Mž£÷»åßgXž“9;¼‘¬ìŠ%jþãgTƒÆsá`kB¼Œo˜Ã>º4# ÃæU9 å1lÉÙ±QÁB—çK/Õ¶ÀµÍY¦<t9Ý_ëh?y¶ñý‡ÞÞþ3ï€dYYYYYYYY³\³aôã3Ÿ¾#:|¨é¶» ç/‹.j¸ gÎø2+í[ZÑnò›]l¶³û#š’e;ÎZw(0ÐÝJ´˜©žìvÁÓíyÇo°ŽÞóPÚír%ìŸQ‚!oy#”Z‹Ý4ÿêš[n ] ÑMë2œ°³ëc.š9 0g‚ráà ô8^™…Xö¦eæiIB žFWN9ð‡ä®YµÆñÄoê\±f}xdËc5ù$6oßÌ_î¿ïþpãÓfÇ!5 ÈYYYYYYYY&uk×iëô7ÌhilÛº5|ýk_ my¼Ïd·6(cÿá:£[¯™ú>õ¯L[’h7Wírp’Ɔ·’XšslPÁ1ƒ;;-‡ðQ $ÜÔÓ¿§#ñˆýƒýaø\´ëÉ%´ì€àPX«#"3ü™Ä0Üx!eÕ…3¤E•sµº˜†2½ÊB!Ap>OÍ…Lj8îšas²† øÃÇŽ†%:)’žÕÐÛÓk‡ÒqõÕ@{¸ùÓT¬MWn ,¨çx–@–@–@–@–@–@–@–À,’À¯þò¯Ø'3•eF1˜zµeÇ6íˆ8ØÀæªe+µ£a­ Ðé¾Óá„fï†6–°ìa³£=ŒÝ}Ç‹íœlm³¾=›oêzÒmÌ4‘â÷°òª!Õñk °%Ú ®Z·Y¼å5 ÎL;ãðÏ+#nóËâܱ·« ÛÝÊÖOua™O-N[k>}(Në? ‡€”´l͈Ñ{öï1\õ_ëW¯ÓIêçœ<}ÒvÊúû¿}¯ñ^_/§³²²²²²f¾°+r¸¼%°~Ýúð33üäóðÖ°ÿÀÛùªþnáx¬Y¹º>Ûlfì[ì]·‡KÚ×fûÌ ªm]Äq&øÃ¦.ìóX?R2XÙçÅŸÑ>}À뤫át{žÑ«Ë0JFË# ç†4Rù}M;OVy1J!7ˆ5.†mð¡!ç¢ÖKs×͇…T.xc›d‘¤Šò ÜJú2î©YÄçu\‡ ÑHÈÒÅK¨U¤o\·!<¾ms‘—",Z´`aøÌíw„×¾î‡Sv¾f d d d d d Ì Tm„YÂrfsŠ%ð¿òë¶Ýù£2twÝùåððCÙFHÍnZ¿±éÂóƒZbpòôiU1‹XW·Ë4ØÜîN¿{|µJŒsÁf.Ö‡v·,ñˆZY1xÄÆ;TF> ‰Ž—ºNå8:­„–ÎÞUÙB80"')„Ž‘bÏáÔpg°Í˜O Ût.Uqf}sP —αõ#xciQÚ¶O-á„yev戀ñÀhŽEýöž µÞc¹¶ë­ŸŠ¾‡ŸxÄöç¿úê«ÃSo¸´9d d d d d d d d Ì lÚ¸)¼íÍo±œnß¶-|ööÏÈÞ|4°©S}àÌÞy=õÙݲ븉®¹æK`ÿbw§`<)á–4f³—òržOJ'x‡“­¿40€Ó0d°…-ÍÕÖNõk¯ÐrŒäƒ“ºC:'pxh|'¤eÄ¢ýS`¢/ôUdÃ;EF­ ¼!^Ÿ!$‚3K,Žz³¶XË ¯ )“-¿ Rñz\#æ²¹ pnöØÖ¯YgðÕ/¦bÐ(Iý¼»AÝàG7?nýÀ‡ÂøÕÿV®ZY­–ãYYYYYY3XØ 9\¾øÍ_ù {‘<%pâøñðwšêÏiçýý ,ÎëžÖ¬hœz S¯°k“m×àÖò”?<¢tÂ×rPfõŠùj^ßp.hž3/ ÚžðØ!-8õQ‘«7\ÙÔ«;yúTؾkGøë¿ü«pòdcÝz\9%%%%%%03$0þÛÚ™Ágæbê%pÍUׄ·üØOL=â)ÀÈ¢ówÿå»Ã®=»Ã X˜ÝsÕ›ŠY>Õò£ZRÀ±n_§õÓ\S›ÜÓnkËÖèƒÙæØÏØß»XlädËûµ‚Ëœ\ˆÓàKû;Ñ­µÙ+~ôT÷¥•в"ŽK”xGÉiHW>«†Ÿ:kœN!?KZ'7BÑÐuÍÓ‚Gp vÈ`†¬N:àÄœ Ä‘ò|ØŒº\ÉgÉQÁÝ»›îÒ£!.¶æmöÚvïÝþæ¯þ: 6îNЬNÎËÈÈÈÈÈÈȘ ¼ë¿ü·†i÷ÓÃI-U69Úµ{§8X[ê©MZŸÜl×+¦^íÚ»ËìeƒÄÆUÀÑN³€°¥±µÓËymeåeSÂ&眫-YЕ`uÅ#|V,||øZð»á¯R£Ã Á*n>Ê݈³š"~CÞÂWËS°æÎ™k? 0¦„ãŸ@ºÊ<žXZ³óò‰ ÇÁüyHæH€‹?Õ7‡\†/nËq›³a°¾æ¨>­=q\8<ÉIÙ`X×d*ÇÛŸÒˆG3otóŽ-¶ˆé}ïù»ðs¿ø•í/9d d d d d d d d Ì <ï9Ï ¯ÿá×Ï f길í# =þxxDSü›…•ËVØñõeØÄ{öíÕv²»í¥;V¯Æ%4»ˆ¿2Ìq‡CY)?9À¸­2Êù"ÄYT¼à/1ó³@WÕ9(ltÕ%niÙä)îJûGe¼P¥1&¬y=Æ®sO[|¨EÕ7ö#?6<£(ÉI°tÝþ¿p O Wé` "-c—}°ÆZ)‡¡OŠ´ÃMGO óæÍÓ®XK-]ýÚ°î ›‹×f šmñG6?j§ªèý o}ûÛ²Ò ¡œ‘%%%%%0s$à¶ÁÌá'srá%€±ý'ðÇžÐ$(|òãŸßùö·Ãƒ>Tÿ<œQǺäfáБCᄎ‰À²v‡¢´•>ËJ$;[˜ìá¶6œ€²n*®ü½”¸FŠEîd¤ºÀ 꺿‘pCË!à¹ÄMÞè¡eļ%·ó lÃÃFrÊkÞ~Kǃ…œgöðÌʺYšc>–§´šŠ²zÏi§^^_Tعww`Ÿj`ôæšMWË3}4œÕô¯j€þƒ=lŽÇ‡?ØÞò¶·f'¤* ÏÈÈÈȘA¨W3ˆ­ÌÊ”»^Ýô´g\@ “CýéO|*|õ+_ Èùh6ÐÕÙ®ÙpUá,T©0;g×¾ÝÊ’¥+3¹x®eâFY%2lW+‹_fF§J`¬ÚÕ¤ ˜ÏË|r(Kðf“S@}ÑpÝ2øRP [qaÔ·Z^R4,"MŒ‘4‡Àîk3æ´iXˆ¹hñÏ`X³!æ©çvD¤|3_O;¬ÏS¾¬± ;ñÆÆiQ"Ç4(cÖàv<)gšíz¡Ø«Áäë:ÀG0Áè:ÇÒ¾®ƒ¼IIõÈc1LÇœ.ÅJÜð`A°ðLz÷¾=iWE™C¥_µa“†ÙsÊ sîäAñäÀ Ùt¬úóEJè˸Ä$ EV #ƒgªÉÏÈÈp ÖMe®ÓCLU;ábÐË4¦Wÿù?þZX½jÕô2Q¡ÎóÇ´«¯}õk²›;ØŸWkä£Ù¢slhc³vë÷ƒÙË®SU»ºzVG"m6­`}¹‚œ‚hþ¶È>¯í­ ðfg›-uÁF/œh :Ùå­hgCˤ:€ ɶ¶zr¼Xû=^hÙÁƒbT#…!èÇ9W0n =ç‡4 9´O¿¢Ì95EAÝXnu#°•©ÚH1*á¸MhäG¯-qbðAB7 ÍøRøf[Þ}:dͪ5ÎTå{Ñ‚EaãÚ+Âö=;+¹µ‘=L<lÏûs¿ðó¡»»».gd \jhëY”t‹7íØÁK­‰¹=YYç)›ž8R‹¥gamú"¤’tHeÓ,¶Ýýå_|ç4sQ’g§×½ïáÁ´™3¤›…+uÒùÜ4 {öï §û8íœà–40vlJ'û˜±r)MÏ}QVØÒ^žê’2XpF¼6S©b‡“øëÏ©â2zÉȬ»Î7ø[ -; ³ÅÞ n#“•ñç")ÅUx ”ªRl§­Ñf^àF0I¨Ž‹boŒÅ ¡ÊKcˆ‡4<áYÜaO•'Z‰Òû]r–.ZÊš°\;cQw‡<Ðú@»Ðt,¶Eû‹ÿùçá—ÞùKaá¢Eõ`9%piI`Õµí9°#Œœ8Ú.«ÍÏ©,,ËW›ïS_\û¶³mÕ†ËW¹å\õgºº˜ù2ý¡¿¿?üí_ÿMغeKxèñGš®ù€Kœ%MlOÊ>=l6¨™º'Á“ØÑÉú¦V5¤ XÑn£óíÎIi{ Á˜œ`Ý>ÇžvÃÙó©k¿jåƒÝ^ì›­¬jy¼¬ëÄe™;©q¾[v@0ú "@’ýƒ]ÎXçމw‡€©KæP³&M“ò9k¤X«A#ë†3 3‘Àà·ýéZL{’Èw¡ PBdȨàKeœâ5 ­}™¬c®ÛÎÝ»´ÃÕܦ^è m‰F]®×è²`S,ÿôOþgøymÑ»n}óóDêëæt–Àl‘‡&¥ÐvíM)êWýFîù§ÐöC?Y›ŸSYY—­†¿ö™Ú¶÷,aÝ55ygJ½RS0…‰dL!ÊŒjJàgÞöÓá7¿`FpvèàÁð7ïþßfW>±msa×3·iÝÆ¦»±wüÄñ°ÿà~Ù±š2…àÞÙ¢¤Í)ˆW[k!8lZfak[PFzþ­>¶²þÒúŽTÆ {pR\Z¯A9³Ã£mn0Ä)£’u,Œ9«î°@+fMé,·µCÈÍy¶Å…8iXKÌÚô9žgÌ®`œÀ7¶¥Üám„¢•EyÂkB¼9'º:N?¢1á „›òr5ìÖ‰”¯ØÐ°30+—­4v}‚j-oß½#ôõ÷…¿üóÿ/¼þMoÏzγrN–À,•À‘Ç ÎÛ¯áê§…ÀΆoÿÛÐö?Úº{RV¾f d \¦9¸;ŒÜùñšÖ·ÝôbÙ µ}îáŠ^©žÂD}¿?…¨3ª"Õ+W…?øÿgFpóà„àV­ÛØvïß3*OuÐà²%GAP)W¬O®ïä§gÙ–/ÈnÆö.‚ eVCÓ®ûÕìóä4¶?Áú·Û [[•S¹¼å¡PhÈö»ñ¦,/ØJ=’¾+즬f×–G@lªÓ0Ìè\ ¬!3’X2/‹”2)³ãß½))m™€;ÃE‰gXq¥Ö`U!$!è–²¼A¨²Á”ÅÅZÖglÛµ]‹Ï¯ ]Ãx«–¯´Qœfá öhÆ ¾íÃæ'6‡7þø›šîhЬn΢Éày®†ö—üx®8 áø¡0üžß sÞùgU°ÏȸÌ$0rv0 ý¯_Õ-µ;ý´¿ôÍ ’غyKCÞTg$Û`ªñf|3Gú?þ4,Z8½Óßy þ¹;>îúò—Ãc[žÐúâM„ÝzåúMšvµ¸i9³i¶ïÚaËϰٳÑ~•5«"r¢SÉdƶn ^Ùpaƒ@´‹O˜RyQ_¶´!ÚÖØán×»ÝM=0[HHŠQI6|A$ÁrmݑХiŒûĈ9ÊEHœÐHŒ<WÁ¡¨{-Œ7”|¯0øXZ—ÔpäsϬÈÑĨÁF¼e–ß@{NÊq-WDI¦j=¾í‰pí¦kš:!Ë—,³Ã·ìØjC]Aq9-ä{ÝÎh÷Ûw„·ÿì;ª´#CÁhŽd L@ßþæ·k Ûn~uŸý»v—ŽÉÈ7¿†Þýk¡ýçþ ´i+ë²²./ Œœ:†þßÂÖjÞöŒ…6FMë·¾ù­šœd;ÔdžgâBàÆf6gDö{Í‘µ—ûÆÓ°8³Ù/ò °Æ‹Ò;½à-¶cH'°OéBHâ‡ÆÙÖ¼‚O¹RŽ'U¦Å,æPãe˜' ¸TÊÖºžK‰7~¸:jE)Q„QÔHD-×y:§›h˜+zéføL6çˆrb,–Ù¶sGؤ5!ͦcõöô†'_}]ؼ}Kè?S·×¹áa¯¶÷=¦…D8$÷Þ{oxË[ß–¯Ðüù²f¸Š *|~ôÖ„_ûÍÿ\ä´]yChÇï„á¿ý­"Ï"v†á¿þõ:µ-õúkCÛ¢åòþ[~§Q‹+§²²f®´äÈÑý!ìz<„&om/*~ùÏBÛÒÕ møÈ?Ü×Lï4M0#õó¬–ÁgÞýç5mg~?v<ÜöÑ…'{<<ºå±pªØ*·Qp½v®ÜU¡sîÜÆBå0òÁAƒ¶¶#©¥íÛh'›á/Ì\^äc>»Éë•«u!Èo ½T4ʳ³ð(TÞ É^&Çÿ­ÄÖyËö¶¥M­p<œ‘ÈCÂU¡[àJ•ƾ¶l-ØHCt ’QŸFldÁ˜E(b Fi_e›^k­—ZylºÁ!Jm+OÊDh$'CæµÁ­X»DGH¼$ü‰`”§à|©¾<‘”KÃhŒ„\¹aSÓbpLpBXräxÝ[Ÿˆœë^MÉb}ÈÞÝ{‹^òâðÒ[^–׆$áç댔okêÃÇoûxxóOþD1 Byû 4ô­ÃïûÝF„CȶÜ_ü¦êñåt–@–À%,yóCû;ÿ4´]÷} dDõóŸû|M>}û…p@ª}} Áœ˜ÕøÙŸú™ðšWh*ðEŒÜýå»Â?}æsÚ"÷Ö k½†&4gd…ŽrX¿z]áÔC±nxëÎm†£°oÍ•ý+`·Iݾu'£b¿ªÐMYʱ¼#´.Ãfv—iuÐFºú{p¬XÉn£@y=ž/N0Õ#ß`Œ•ƒ‰<ðÝñY:ÂQo¬Ð²Rm ¹%óšê¤´MÑŠ ôf:s8æÀIJz\Æ|”‹@£`œmÒˆïÏ@ôź›!k²Ãz[ ‹`€Š9ªÌpTò•o ¸}jXÛ™Ó‚¢ÇÍ YЫmë8®¼b“œ>ÚY´‹É ÐhÉ7î¹'¼áMo O½áú:l9™%03$ÀoûLå”sλùí_ÿ­ð·ïOèì,×x´ÿ v¿ÒþþCó›!Ú33¹ÈȘ> lxr˜óKÚÖ^ÕÀÃéÓ§ÃoÿÆo[^-äü†d;TóÏ7~!pž/O¹þùIàÚ«¯ ô{ÿãüL¢6›±üãÇn µÍîc[Ÿ°M‡FCÃs·aíuãfÈlÛ…ó-ëPÉƶ5;4š®ØË^æBšbE-ʰ]‹gÝM]¬YCŠý볇ŽÒéÂHÃ4"žä”ÍÈeØøn;ÇÌHÁ.Fϰ)i[Ö9J­„–®Ž®bX FÏÊ`/s”Wl­+~h@Λ›&®Ò° GH°IHEZxï(Öm¸3c7‚2á-n†ar\ŽÕÞ¬Êv£#ýt᜵:-}ñ(;°CÓ²x˜Î 6_€4 ³î×Á…xxêïO…µk׆7üØÃú+|^}d3_²f„æuÏ«q@`ŠyÛøû~ç÷§†GÞrÎùÃO‡‘/Þ†ÿõ#!hVYY—™6>%´ßòÖÐö¼×h‹P?¬*Œ—ÿö›ÿ5lÛ²µšmqôÍ…É »¸3΋/Mç}ßÿþûÐÓsñ¶|ß¿øä?~ÂdÆ 3ZÆ Ý]ÝþbzŒgú°Üw`˜«uÔ#sdñÊnM¶3¸1ò±w±…Ó3LyJk–­<½4wÛÙp• Êp¥ðVXq0(OeÄ‹A‚èWÀƒÙìÂOË ‚Ie oj<°¬bPŸñBËȹa­Ö öaÖn+ïE5JÔ…y‚Õãš8¶\Ï/Öt¨ Ç`¸˜“EsÚ4Â’†•©r¿AV±DÏ‹ºïËj§©cPVF{;¹„Øaóàxá8£iY+u0a½óÜ|9 O¹æÉ>Ú¡‡k´Àt­£³}ž÷îÝ®¾æšðê×¾:¬]·n´*9?Kà¢K€7’(ûsçâO¼à¦m±á…¤[‰@##Ç´°*-•G!Ÿ*‚ON¦dÎCkÍæ«â•rÀ ;eíØ»30m¥Y€ß}Â…'¼ùñ'•W_^ñªW„›65«’ó².ºÎ_Ž;Ò@÷ŽOßvíÜ~÷¿ÿžFðÖ7”·]ñ¤À'‡,,,¦®üWM»zô‘G„A?¼`~ãôæÀIf¸1Éʹڌ’À«nyeøOïüœ§=Z¯û…ÏÿsxøÁ‡´Îã°½,>[w®M=]š–¼qí†1Ÿe^æ±S úsé6ªó=aÕ¯‚Dt"<Š}‹*‹µ‡\}Æ­ˆª Ò—Á ¦¨ãn;;¢d'\Ž£ÌÅöuÈÄŸÛÊ ÎmñT–®^÷~2FRÁ¸×–zŽ#ñtJÂÀ¹¶BÒ<7v¹Â³C‚î ‰Iø4iAy‚sœÞx<6<3¾àÌYaÄZ Qƒ+"U˜šé[C¥³A)°>–’°‘gÕ ;|¤yüäqíz0 !¶£n©¶X‡â,èöØ>‰¦aHo’YÁ#–ƒ™–­X~è–[ÂO¿±©“ÓQÎ̸`„ãàä©“ Øïýî½áM¯{cxý›^~ü-o6nh€ÉYY—¯žÐ‹µ~è#áöOÝÞ0’š¤²pá¼)KF¾Ž*«®¼*¼÷¯ÞSg× >áF6yø‘ð/ršd%j¢“Ê•BñÆËZï.#ÐNóà [åàsÇ®zðVŽº.„’+Ö¬K/ ;÷î2¯·äáXíÙ¿×àì?ºoë Ï~îsÂÍÏ¿9oß;šàrþ—@¶ÄQfä¯> j½ÓGoý¨}®¹öšðô›ž!GäŠ0_NËœŽô{«¯•ÓYY—¢†Î …'N„íÛ¶…{¿soضuۘ͜¯—tÌ—Ï!K`, °ÞãcïûÈ9íüØÑcá_¿'|õþþ~³Õõoªü²1ÑkÖú"lÉ#:nïÁ}²)ç„îβ_t»Ò-Y`±+És#?®c6û+µÖ5[Yyàç¯xÁŽÁª¼4€=Ë'Áƒ?Ù³Ô5¼‘.ñdß*ËqƒË€Ü1"JŽp%ÚÆ·ÙÚåÌ$£m-<Èô\ÝËÇVûݲÂhóÇLÖw2 š{}ë÷s7Q¬ú‚»½a0~°-~³Ž§ CX׫8;‚¾Â%wÁƒÂï…x«öx¥×}Oyz|%ýˆ%·W½Îžv¯†nÕýY 8$nB×;úåŽ! AÚ”^¬Ï“H–@&é tàŒ-~‚Äï¶,ÜàX8|o1u`' ~¨]›õÊIz™( ä{ùƒ‡éÕa&äoþw_|Iß~Å„åêšÏô­8|=Vøa~mwb~û7ûáOõM\ÿëÿü¿èݯ>üÝÿø?zø½¿ów¾ñ7ßþ§Ç°î}÷ ü‹f€wBø}.B>4wÿE}Ýíï¸gà×3|Øœ4Þõ‚ݯgÔ÷¨~Ñ ü7ÿÕýðþËð‹š/»oë«s¹ÅŠ_.ÿ3]tð…B¦»N¾ûƒïùþ¥øž s÷oêv«¯è«u×ÅÂ;ôyÁùŸê羓’5'«X¯(½ öËK­)½üœ…;è}–{¥õÀ{ÑÂVkRÌRµYÒF®>.&°‰nÖ¯îÁ^ë[«ƒ£¿´ƒ=ÐAåb%šó,Üå;ëôêitåK½@)½wmŽ ùļ9ëkqõ˧½j#ñNLîòæ m ¡*$ƒ~ÿ{œ†ãçáe ù§úÔ?)kQW®ÕI²¸*Nþyùñ}™,²ó[R¶Ñ%KùÅ­R–$&©;i½BlL½…÷ þÉŸþ¾Pàëzßupåb‚oI໡ùú_|û›\Ì‘G>Ì?1ý–.rþXoqó“—úàÓïþ»¿ûð·ïo?üÎßú[_ûúãßÐ՜ݷ¿ž`_øU>òå/}ù[¯ø‘M¶¹øÿUx¿û¸gàž3Àyß⿪o»zW^þÞò÷t¬úÄ/äqžÎ!kê]§yøñ'?~øæ·¿õð=ݵò¡ÏvœN™³ßÐ…ë¶ËZòTš:?`ýOõ»oø`›¿¬\óyè(ú”ݵç¬9µáo5Š®hÔöVRÖžìSK®qeknª6ãŒX²ÞfìùæXþÃ(XØz½‹¾,ÍL¯éGæÏr«oë”+úd{~Ž#Kžúôä ϽüœŇ8îÚgz»‰B<»nòÒW@ÕvØjW»saóF?Sþ\7cj[ÚûÜðî¶ìÀz¥{ÖÁjÁI,7tr¤š„»‹$&Êi¿¾sYÊ|^£mðó•e‰“Yú£?ù¾®ßù’~3äÄ(¶L~;„‹.,¸ù‰~¤ðC_|oyÛ»þøŸüñÃïÿþïëÞÂÏ÷kÿæ×~çw~G_ëûoù³#_úÒ—¾øÅ|gv.ª’{çbO,H6b¢AÏE™Çm0¢ä¾ôGê‡/°}€%ÊCOJØâ8ÖíS–º‰;L|D7>eÄ­7\¶ïÈi?¶Š?µ‹a.jv>r`g\/yÂþÑ\„¶ËÏäpµ£¶ö1ídÏɃüߪÿÏÿìÏÍ÷WõÄöÇ™“¯u_§óô«"p÷sÏÀ=ÿÒg€ã$·nr¾ûë(úOþôáßÖ—cü÷?³{øô‡‘oë=ËúÀréùa}ֳޡßë¶úÇÆ}³ÃjÚª.ŒÖÙR¼xÔñÜ¿‘V=aQ–=ÖÈŠ÷JX^õÂÙ²‘/½‰ó”õÃÁ=†ƒÇY‡¿UŸsDs¬GÂyIJ(ªèÔ¦’zoawÿ,¤£¯çe³¾Ö[ý¾`ýÝçw>ÑÅ£#”;¶äœâxµý±>·ñ½ï~÷áÛßú¶ßÙà¢ã/þâÏø<¼ÐË»öÜ¥Òø ð„'Þõÿ†ÖiÜ‚¿÷°YËqÛÜ-¬Ôêû¾@ýGŸüh­—ÁWyòŸ»hp£Þ‹‚&mÇpÈw !´ë±=ßU¸Ê…|ÑW[ï–ô«r{ÁÀ³XÌ»Yb£芕4|t|ýbQgmú™\{†W².ŽÂÒ^øÏþâŸù3ßøú7¸HxW!~ÞÎãŸä[ßýö¿Ž ¿§v*þ¹¥‹Â«L¿ñ'¿ñðþàù[_ÐüÇSðœ*´ßQÞ)x‡þ;º¯T®qnYú—t«ÍL[×¥Á0ªT×=îk®«sÝ^õ—®œ_êƒOß¾ÈjŒ8þ‡C6Vi”Ms~!þ¸\½åÁ<øë(`Î ò¿wŸ÷ Ü3pÏÀ™îëÿ¿ÿèýßuFå>Ëç³÷µ/gDÙÄlŒoÛrÀ2£)YaÖl/ués´÷ºçÔ‰a|acâØR‰S÷¦ê¾%£U½÷Õ%s]ovGj»3ºÃ„F|L÷/²9Ns·æíü­øÒ&ŸèÿôgŸ<|ïûß×»?ñ¦|ò„t/@ÓÛå¿öå¯ús¸éÜöñ¾1ë§ú±iÆ…s:ôÉ‘ù±.QÒɳ#´. õºæÄG°rŽ¿Í·Ç%A=ÈÁŽ·]ϼƒWúð¶j\T*òèn^½˜´¾ì+¯o·%\<¸G¿õHÞÿüä ^±ýh>$ s]Ó^ѹ„jÁT÷ÏϯT>|vdùµß&šH´é`£xñ…ß7ÒVç ~¬mâ«¶rÁáÀ8³hßøÃÐ2á×€DêdJÞ±_;K, ßõüGüGü–·eñÃnï+ÜË?÷×ÿóï}÷á;ºšæ6—Ÿ§üôg?õ¯W÷þßÇö®{ÏÀ=÷ Ü3pÏÀ¯Cz.üuˆåÃ_}x¡˜o ýòoÉ%xŠGÖg|Ž„‹]—®/YXúOëA¯³&å¦UךS-ê«Põgú^¼g…º5×ÖØ´íu(h­tmK{ûÉJ3ú´ Ýêû äŠkY×Ï ÑObUÅ0÷!·ñ¥Ž”'_€GäyVæ´ÛÑ·<ˆoWø ñ\_[]_Ì,;i{”¾õÃÛpŸ~¦ß‰;'i—·CýÖlIÊë7ü;ŽñÌ+¼EpßöÒìG|áå[Ld×ëEìûîu†ÆXÆãâD¤øPûpÿËýåÃ?þè‰ýµ¯~íƒ÷ÀòA_nÏ⟠þÝïÏ”úE¯èáx/÷ Ü3pÏÀ=÷ Ü3pÏÀ=ÉÀo|þ ¾½ŠÛ垯ƒæâö›ºmžw\Xû±Öd}¹Ö‚‚g=šÅ{—’K—GuaNíz«bm»FžžgM™w$f±ª>ìù=–¹ªøsª±e ËÒ—5)k_¾(xà«koóÐí’ËïE§ñHkxÄa¼‡Âu‡¹›Rõ #ø‹ÍûŸŸ|òâùËÜÇ(<œœoÇ(˜‚üümˆù‚bt þ…cÒÒ%qN„*ké71 òwtSú™Ú·º`‘´¾Í´['_8ÅÎ ÈÁ&žçž8㉘¦ML£ö´Ã+2¬˜X|ÅÛ÷õYLö¯|ù+¼Áî ÚAøç”OôöÞ~ø}cð–ß¾ Í{¹gàž{î¸gàž{îx,¬ÃøòžßÒ])¿©o$å×ËžÂ-V|¦äZÇQø|ÓY²bÌýë‚Bu]¦d½«:k̬ÑÚe­!¬Èºö]r­1»Ê´†õcî)cýB/j÷ã õËúÍ7 ܬwÕ–½ë‚óRV:Õ µ†œ×ÊuÆö‘bì1à®&¿@ÿˆÞÙõä ß&5dJv^f‚çÜ$1@¦çg<Å5òOU”àçíÅlƒµt¨;ß=2ýLHMí[o—àŠÞ:¿«½spa‘Ï—p7ïhŒ-þF,¹r L&Õ¡â6rG*ÞôœOgYþmý(Íwt‹_Ùû½Ý÷EýÞÇS ß=ýùÏñÁõ¯ GèÑ-^?üñõÿ#ßóø©¾áã^î¸gàž{î¸gàžÝ3ÀÝ$_Ô~ñ _ô…*ï:ïçÉ /øòó |N÷´g½7KP¯íZgÙ§j–]ÊáþÍ;¼gmØ+×®³^›õg°X³¶½m±¢hÍ9ÎÑ|Ëè˧˜·lÓ²ÁÅÞPêÔ‰}«ë(ç–«ÈðÐB_ö÷-YY³Wö¾íÓ/@´øîg@Hš7æ6}LHWaMì~¥…yÓD??‚Xé Õ5 jòê?ßV±ï5³Aý,[_ÐÏŸŸ"Ÿv{ ‘¼ó’wK oŠÅnOÇbN\êCÁØ™(nÊØ\=¢ÃÃhúœ?8ømï_ýòWõVào­+æQy熼ð+²ü·ðÙnÙâ®Ôùˆó]óGyUj™ŽK÷#Gºàû ô{äèMn.øµ?¶7Gת^Æò@KçCrPÑYöËëUo›ìšU§¹{wíµºWå7MW§‡†óÃd|"W/¨è\äMÀÑyT¯Fð ˇè#”.~þª`¸»vvïÞ]ÃnÊáô’3oÛÓñ"’ÃVGy{Þú9å༅A×£õú¸üÀzÔ~Y“†á©mO Ýj—ªËô¦GÊ’#{Dç"¯ý¡·«»fµiîÞ]{’||õܰÇùгZ[±,O7é{DgÙ£ñ!ytUâÇX©=Wùh>âò¢·ìWÃÝXµUy‡üÒ½•w …)©G娡sÌÚîm,¨-rí‰òZ½Edì+gû–]v.«GåÖ‡äQ}ÄÇxøðþ¹§rÝldÕvc)í®];õvï®}Pú¨V^òu¹þºg}ù·W½ëçÁ÷T>Ó7©rû;Ÿüô'k÷ëqŽŽÛüg>mVK—£«<ÉÊ*¬oûípôí~Ó’A´sìîÚŸµ·^Ýåð»"êñúQ1Ø‹5xŒCk,^‰£S7@ªË+¡%X©è3Ò–Eÿ\^LnO¾!«¾…‰Û›T÷ç.ñ8T´õ}Äè‘@¾A«·;០’Ïô[`bó’ßáÞ:)Û‡zû–—wœÑÃ6)ib€Èdσϛ˜IáÂit𶓬‹›g¼ã!Œùº:’¶Ñð– )x[ã?/ô6¼Áðg^ø0½¹J_üÕ7Xü–ß͇™ü®ˆ~g+õŸ·pµÿòßx©½ÿ¼–wý{î¸gà——ߺýå!ß‘î¸gàž¿š °žû _ë«o"ýÞü@!ë@>jàëµîc½ÉZ0¬íø³|Öy|L€µ#kÈ|–˜»zX.Î:PØ1“µûÜ´OY SÉçš—oéfí‰×ÍÃÇ[AîHªù«S_èÝò¶¸r—ÛµRC}øŸ†¶×ŽÕ¦ì“§9I_¯ù¯æ¶ž|Â/—?>sÓœ‚Ã\`$ÜÒä+ RØóg ÂŽÝ Ç‹¼W|èáÛXbŒÆ”&‰á’.:è&‰ñ³¸ŒÄwpà TöÈðÕ[ªð€Ž`½¥½y„Øá(,ÅÈÔ¢Âäýø¹¾Z ùÀ<ÔT·OU¿¯¯á³"ëß~S߈Å}Š_Ð7ÝË=÷ Ü3pÏÀ=÷ Ü3pÏÀ//¬Õø¡JÖ^ü¦ß´byÆÒl­eíN½Zß±Öó:sÖxYÌ©ŸE㼡á[ô½®Ìþe5xใ•"kF/]g½èRƒ´„ttX%$ˆ#ÎÕâ8 u#Wô¿Äà€L½Fµ9#ÌzmÇdËÓ&T[ÎÏy÷Ö¼ŠïØ>ùD—þ€·ùz@>Òb¾¨J[I]覄M>[AÏÑ 6L“W¡Áä “ñ“\ íL£dÆú©.Noó,Á ÔàÁd°Ù2(Ú˜—»žÑ@ïõÌÄðÐ/¸÷*ãl_A¦_1ûƒ÷oô–ßgúÿäá›ßù–?¬î¯èÕíV|^¤;… îO÷ Ü3pÏÀ=÷ Ü3pÏÀ=OÊ·WñÙY>ÓÁ·”¾Òf]ÆÒnVz¬ï¼V»BjÅë¯)U[+C/ÓÍÂÓúZ©OËëÐ^,¬ã'-‚”u¢¹©šå#¬®Ìè6wîT¶×«EÊ“gda²1Ë.]¯6si#¡  ¿¿‡W¿6DpCödiîÖøðÓÓ/@„êsÏÛ<ü"2á¹hóœ…÷4Y\¿Ò×áö ¢½Í þüÊ3ÒAá팫¯Ølc5ì`'iF´k§…1*¼Ãaü€ê~¾š—BRÝë–ÍlÏÁJÍNíÓ6IŽŸâúñ˜;ápX}ÐÂ;|ð‚”÷{\ĉwLàί¤ó;ß´>!|“[>\ÕÛÒbt¾gàž{î¸gàž{î ¬%üã?üð'úâžþÐ_ÚãµëWÖ\k‘™|e5§õ¦×…YÕ!ɺq/ígÕ&ëÊrÖœX;é?üø‹‰0vÁ,=É,ì+Îé÷”Ç'ßsKÌe …âîëÛØV´n±·6xs‘eZ?LèÚëv­Qµ>m‘hiÒwmçãÕ}ßöÉ /uoÜÇúì…ÏU°XλËmU}×™?ËA"B[eï0AÖûÒèúÙ«Ÿ½5hçýfðg!ßábâÌû'îÒèv+ø$%ºZì;"‚mÛ 1 ÄÄdÀ g²IŒ´'šb`[{°ü¹€TÜ.®0'äì̉'ÀðÁ xl‰£EMÅ¡ß?ù™~¨ðgß}øçßý®G›Ï~ð‹çû[²>÷ð¹—Ÿ{x©[¸þª.Làõ¾B<ö}J#û®åkJßw¸O÷!<ª¥ò>·ÕozÔ¤'£ÓotpôhW;¯Öå•”èW R>Ó‚©çRªÓ‘îõìÞý¤þÓ÷®ßŽçít rtË£ˆ#²ªç6:"ŸŽw}Ô–HNèÚûUúz®—ncߥ—=8”±¥”£ÛêJïÉýîÛç$ä¾ì‹!ýÔýÝg£{>×ßÎ=Ž5ó黼ĩ‡YäOâŸ7ǬWÖ“`rü\µçë4ôâMâ £pÉ1ÝÊB„²øÅwŽÝê^(ÅY=s s@2LN¢Å¹~s[ºñļ˜÷ª×1™‹sXPG;Xä·|áC9ßFvúÆ6–aj¤!’œmiâÞzî„Tôã3~‡t° §@­¶Èx\¸¨ïŒkâ0ù€¨ËðŒoò@oÆe½Jilw›¸yùöb#Øo¸%N0Â#íå*êÖŸª7ÎÞðÀÂ9h˜p­dFøw).­Td%Qãqƒ—[:šŸHÏçïõ|žš»¾mè ÇJë9ñÑKOK}„¯Ò}Ã=qÕ#µ>Ÿ>FºXwLR÷sеºTã+χ𑎷ºP¿t¦qé: OÝ ¯S§u|P÷3ŸjöËÚòÎ_¾Ãçj?áG™ù2Õù‚ïƒÞçžéƒêÜ֞ų÷K‚'r}#3 ûMØQÏ 1¢ÈŸ²Cƺz×´èò-±ÈèçõB94­—™3×Âñ>¬9{¼P%õñ…Ex…¹™vº§È›>árÄÅ┵M>†Ž¯²BNéùM”{xÁ±zâî¹Õ›‰—‚/û^?ý”÷öšÖJ<5Kˆ®]$ýÓÏÆÙ§Ã?#ã½öÑ28Ž.“U×ô`M nS»œTp«`ô“–jO›ì ý&Á¦Lwò¤ú$\uxؤ1q^i"·˜ÕÄ€^âˆÔ –ù3]1b£Ex1©>zÑï‹FJSÌŽˆõ†ßÿPX”ò 2qääíA\öé§þ£ûíkäþ< 9iFU_'D#“ËøF­þ—'bÚS=úarÖÉa°Ç@h§Üu€¢7'P£ëˆeuFŒ8£>º-!Ú¹èœW`Ût°ÉQwž"° ¤°—ï»4lzw¾kqð$*óJƒaºd«x Ý|Ø¿xñHŒªíä™Ks€|ÞÃÒúg¨«-þ‚‚þve·³@1‹ÁOÆçñC Yã¼ÇÚÌdr‹ð¢1h¾Ì9|É7ù09FSMt¼Á>m;¶ñd¯KŸq¾•£ô\D„ã"ºlÏ[X&5ŽÀ¥,nÄ`°›'£"]=΃;/`ì|;ØrsµÅkìà 99y„מûD3ǵ±Gì9hì´Nßí×`+f'Wb`ôظ­Äð\¼/¾+äÑíœÙq½Í­û0œ÷+nI8v{ž g|6ö•çœLyçÈ0_›•Ÿ¥ ’Šžào>GØ’üL ¹ðJˆùº/¿Öä#ŽŠ½cŽ/ÚÁ¢½÷èoÝo‚‡ßp©§ðÞ?ìÔ2Ø›Kƒßy¦ç”µé˜$¢&±:ó˜Õ]ÇîÌQǶ1ƒî±?ûíÎry¢Ç-Ny&ûz˜Q!Ü2 v¾™'º Àð•mãE£[\‡ƒìÇ}tzuÜøá¶x¹±±Ì£ÇHX?­<ù²M*иpª8™"Û@í^“˜)e]T&èïÓ Ië„G_¨`±%Yª»}ÚªÞÿX>iÃm \¨sé«‹•ØZÒ5nyb›8l+^„À5%%R|¤u{‚´ÒŠ%$éÏÿ#„¬ð ˜$~ØÔË“Œ}Æ!ƒ™›cž6 SâCšâMTƒ<èéYxñŤóÎ(1ú1fNòÔk;:öÛàK¸äÃ¥\Öádù;ôç>F¼´Xý° ~¤Ž‹á±ZÒû,°cNîƒÆ89/Ê99ªå£ØÈà2ƒgë‘yLXàiì<Ç„½ìãû&‰‹¿æFJHNF>LQÄÆ2ôú²¨êÉI ’!ö‰?ù5DÜz?¢í,Ž¿ãçw$oÝ? ÄpóbG û†òØ9&pQf£~r=b·G²äçï퀽¾¥ýõøàÉQ1<þ³û4P>9„€±.s*x¶B>±›ƒìÈ=»©œ=Ò6¯=ίúɃGÓúOrìO8ž€ŽB±èh„–¿™“œ:èòе5oä6JÊ1‹E %‘n0˃-ÇÌ2ùíÇý [¶ŒrXƒ§2ù7c¹ÌÁÜ9‰<½­—mŠç¾kÌÿ›ü•ÇŠ#µµ™žh»oâ ?3=ä!äãӺ㊺ÏGÉ€hÁ‹-ÏoØO&ÿöe°’;ÑÕÿʼô8Ï1Ç!vígøhÉ^E äÿ+¡1:ް•:ºò,9Ü×ä`çÌúØK!y÷ú¹ðä(ÉQ±6'TÂã»,ÎA@fʘªž6°Œ¼ç¶¶Æé+a9NÕ@"›«­?^ ŠDñsžE<92¯©£LÛûZ[ëA˜ýÐ=ŽŸš‰[ÓhlŽ€ƒ+ìjÛOxÙú±|).=âK¼=.Ñ9Õƒ:ÀÚ s=ÎÑL¬ÃyàÖ÷“ÐÄoF±˜sE9­ã3,“ƒÊÍÛ0ÁŠ'œëïÈ}õ-;0ËWâLj?öCø Ý2 õ;Æ6i•«T©Ÿm¬W\…š­\Ùr|Å}$8È~´êpÂfJ}-æün† ‹}a·‹¬.÷7ÅXÚö\éÎy”u< FVLŸŸvÂ$±\Bm)´½.tCí·­Åbx€«¿äþÄšý M©6æq1®Â*H8ޝžc`ƒlÅX]HîÄÝ~JíÉ üøÝg¬(äb$áu"·ÝíxD–W¡”Ì«7|@;;®íUçÑBÀ) tµ¬Çä@ۈͤÛáƒv“ÆW¢5é¼ÃmeçW?†·[}ež#S.èçgï{€ä¤èà,Œ½ÃH³© ¦H2¡uAšb@IÇŽÃå$¥ö› Þë71«gœ XKjÌÓ¶'òÅvtÆ›Îɦôd —¼‚¢ r9À;F+ò.€ñ=gæÆŒÞÉŽ¶Ç…~ý­˜ä·¼›;Øõ"êøÝ_ ”Ÿºct‹e÷jâ¿[ãH—è’²b¹FSÈË9>|\2"^"åÆèƒWyh¼Bˆ0G÷|ÕÖ®f Ù”ÏGη¥+_i£ƒ×ñ®ÇËØzš@bŽoñZvC‰·£¶ð†¦ÈSÒ>©ËôŽ󻯱dlWÌñ›9 z± —CÕÕ‡¼Ÿܨ<É{̺ÿ3.»$Æp³•õxµÚž¥Û¹ôƒ/±Ët9ÃK{\- çÔØ–ì¯ x¿ã¾™;ô3?•“×]ðIÃûNt-ï± ÚéLýí9ü¤-·4æôf?Êu ä…cù‰Ý}Ú“§žPaÜá’˜gÃ^XzY5ÃI“ùOŒ[É/nŒ\·nƒ/€ñâ€æøby° ãvðrÛkêð*ü–'s‘Û1jŠn/Ré³»Z§Ý·ž‰]·³ÏáÖåÊ“9Öc~|ß´df_%NëL>c»¡ ™ž­ð@Óqð§ºç5X}5~L©{þ :ønI›c{ íó¸öz^ÑI¶Ñ)ŸpáÜšóÆH|´2žkBû8vrüè3Æj•ÿ56Û…Pâ™cfð⇸>ú(Ø Z™—ä€ùuæ÷‰T1#^úÈ7Çý3Êúñ˜c§c3ò¦-µfÜ·¬£îõ¹ää!~±>½Ä€‘|£ÏgwN1Ÿñf>>°mˆËzÚ:æó¸.µÅ[¶p[<…¶æ²÷”'_€|N?ü’ï:ÎDÇyÚI…ÀQÎ dη ªCº8˜#ó¿‚pL’×/r°7xlsÂC¦Àµâ?@i‡W¬³³ôþJºì0µ'GåF; ždúí8u`Ùñü; æšø;ìØðû&rîÁÁ׉ÝûA£Wn,¶2€“S¼€iÌr·ëjÜÞcˆ•¿@[bJîñ¢’VÌtÁå/úš‚Q§k•ê#¥¼{ÊΈˆ“;Ç~'âüeá׋0’68Í'íÞÏIB/øÍ•£âã|ù :ÄýV¤=ÅàÌ}l˜C9à`{™Ïj3Þž¡‡¯@ëàùÞÑÁ6áÌ÷Ù*Ÿ—ÂÌ£9@ ¤/©Ó‚çš¿â`®#v¾…3é2žyCL@èÒvQ{Ç•.P¢È³ÆMXÖ—¥æ˜ß0:°bµmŸ[ÿÈLÆØS]ضT¿÷9ÐÑg^§­‹"²/Š5o1ˆªäŽs¼í˜É qH×ÊØá‹ùiK=]ö©ÓŒ]ê‹›°<àe"Áƒ~(œQÀyÆ>ny:;Èxà'ûÊÍ>ivû˜H òàÁÆëº…P ð bÖoÍ÷ÐÇ6X@—†ëâÈñÁ¬d€}¹¢×\WŽ8LNÒD—‘‘ÿSR`›b㇂U¸xlèPùL'ư\îÌßèçUp«3sGcè±^]à+G’q<>¨Kš}¯ºGEBo‹Zjz΄¶Ú‡\Uô;‘ñ_^7µ×õšëV7ÚW:ÿÀžãÛ{Ñe¿ðÒñvŽkõ¬ÈÂ’¥ <©W+röqôhçb–úÊCRJ°™WÃ[ræy3OíÓør[D‹e[itl°‡³Ï•àÚoŽÇÖ%.b6/zR®q°/è!?ü?×¾@DäùJ¢AëiúNl䞉ñ[»ìVÙ:£ï}ËvÉ ¸Îú9f‰â"s¤røçÀÏ>ipôïóÉ=niwm@ŒI à¤7óÜçRõ3¼/HÕ¬…IŒ9>ıÇÞ,-w[ýì³Ô=ßå€qÙûi°š_ãÛmÙ§ãÕæ¯ÇÚèÀ mü ýøeLc»çR¤- *ìÿ`ƒ{»ËøJÑ1¿¿þ§Ï´¥.Uó¤"<{‹q¹‚í8}Ê+Ƶ¾’•Ä¶êøÆ©õ›7”ÿ}<@nMˆ©”—Ç^æÈ–u“ÃïÞ¢I¿Íü„ïð+û bªÌmd£›üȯڌ•'_€Ìyò¶3¢=“ôZ/Ë$ “‘ªÜ¤$„8`ïÁbPÓž<Ú/Xä§Iܯªipç䯹ºã•›1À~‘ðJK_œyàßR€´‡¸câ jË tç¨Ýzà°¥Ú°qå vÀ£‘Ç™|p°¤õZïŒ$ÎÊÄo.B“‰@-òúj›8µš oa6ŸXÐ vcv—ÀˆÇp íW좋—D–lÛ¸žö5}g ¿Àìs½Æ bÆ |2>áÔ|ZIOëD®:{ÜÚïgðà¥q?y9Ž‘iã¸Ø&·´OÞoËÑ¥ûL·Ù¹êÇRð‰® oÃtåÞùGÛ6 ).°â1çÅú^$`#eýí9¤ºû¶/zÀ"Fþ9ÀàÂÿgêûÌ r™ì®q¿ØÀò©\ð„ŸñG1O]Áдob!sÍV'¶IZÛú肸°%Ϥ‡Å)Ï–ªŸÐŽß\àN‡tò }™ƒÿŒ³ôáV[pТªlˆ«AU^)s"±Utϱ%³7'ı¸^îXïoa³|·/Î<˜º7zŠ\\„áWM&ÌÍC‚Äö–àOMòíwÙhˆWò,´jÞ—ÕÞcK ¦àËó]MÌ0®¼íóx`ý™ƒ£.Nó >ÉöÊ °º( –λ®„cÆR%BàVÁû´f™û’[ª Û3?QZžÇkt«äÂSõ”ÙÖz©½áŤKŒò>“°ƒ ”ö(bžœ2?ó7a–Ú•)$Ù*'yu$·76è)Û†oá¼Ælù÷¼X-öntñÃÿömÆê+.æÉZà…Œ½nƒ¥?kInžj0R޾ò_ôZ3¶“lXÔÏ nR朰çÔ0C°Í¸÷Å›}Å1 ²ù4Föß8#_ª°xtÛø{~ã9Û1; æ±ÿb†iù±ït\‰2ð"5é_9À"XEiŒ{lû7z' ÿ>ÇȵsWnœýn¡ì`¸Æù˜'åéxà=ãAª¨¶ï°áâÛÅý¯§Ú"š±Ýا<Ëc|ÉMV¤ÛqĹҪmæÍÉsc­)³È!£”GNJÄ@9Ýî`¬$³ßtีnŸ|B0™àÁ.(D€  ¡|B¨A°ÍÄ ¿`oÒÖÛM)iÇZ“!;Y±@`W™4Ø­'õØ£W(¶èY®ñd‘0m|µX[ñf7£irà–:nJbÚԦ괳ŠMþšÂ"=HÖCÕ9ÛÞ:_  ÝZÓïhÞ¹¬µbdÕ߬˜7“G¸%Ðû*õáºØÈ8ñ8¿ÆDß®‚è6; ñ/½—£ŽÄìï°¾ð"Ç‘K° ~½HгÔü$VW™‹jδ!Šø>É©Ë~µíío¦ªv.…¢OòÊÔ\<–Çg¡§…šǪ°01·á‚Žïídãüh{ÇlŒ¥­s¯-=ÌZC¸‰“y ± ÓÆT±ìÜ ²ÈéM¡OƒÛæê¥bÝ_'·ànGÈäÌ©7·t[612•,^î¾ðLe¹ã`ÿuK9ŸWग 6æa,¼‹Í5G #Üð‘ÜOØÚ³9 g9לԃ¹yÊAËÈ+& –ýèjS_»‡NZ(Ë‹†ÚÑ—“Í Zù¬jÒs[}AŠ­í­‹Žd Ë£o•8·Ý[¾‘}̓Ãÿ‹œû9^”ךÝî‹Yö­ÎUC$£Y-1G]–¨â}6TÝÙ81`sÂÄF9“Ñ&ÆâÉ%@Èè1Ó¸H{"õٶ̩óÜý¡8uiOãÆ@9?ý=—'Žuë®pH›4-=Ó›q²òvacìÅÌíàtñëA[kŒm¬¸çyÙqo*à ­ØzLÓØSNÄ}ËS~„®±k«í‘‘‘mNVÚî iwgm³›øjNÚKZ‚o¹º÷ §g±…k’`̼O«â?õèƒ~{çØ#÷qjâ¿î;AYq£÷¬2.œÀY4Œ\œsÎF7O2#ù+÷øw[Ý •âP/ËÕÆ†ÛZ`ÝÏÁ9!p¤kÛ.|9~§7<’c4–Ùªgˆ¬à³d쇧‘ÍÖHèà ÃUÔö…$#Ùþ=6î²]dÝOc[ê;®è%†½Ï/wãycö¬öÆh¾5žC)ó" ¯§6 kÄä<ÒšúR‘Ùk¯×,B!ºêïz•>J8x0z Xúî§'_€t"áØIÐö,N0“\î ô³×ºÐí$弊WërÏ÷PßY“ºo7P_|þ¤ó„”·ÐÔ«mº…Šw àǃ¿Äl¿U.½ö½Ò+ ”¤*;;æ‰ã\¸ðªb~ÏÄú@ËÇ9‘’‡øÁr`xU§yãs‡@%lÕÙ³ocv¢ämz#ʧâ\¤.Þ(¼åçƒýä¼ ?s–îs=¤}õû€aã¼eM~‘Úµö_ók¾Òñ+l{iû+G鬖꯼ GgŠÂpKx…§o+#%ß2Y…i£Oì ¢ôÉžÿe *ò”Œƒsoõä¾¼ªÇ6õäIYµ¹²ãíÒ÷|ÞÚ¼ÅﯧÃ^²O›¹Þ†d`ñH¬Î…D‚qüçÛ¢RÏ}˜–xÆïXdøí]‚_öÇFAãgâ~Å~8~˜×Ù!‹\!èvzff»æ{¿ w»$ç*¹p` [Œá͸ï>ùÓø…4Ö`ì|ÀËã©~à{p³ý¸Àªô]±vq@ðɇöLÙ§ãÌI2çäÒí)VÝ¿m?Éè\c‹-vÔo ó–äâ3#û¾Êys”úÆ'Oмú#pIŽ#f#ù†'¶3Ÿ?CÍ á Bð_jçÏ6Í‹c¶8†wÊ0iÓâ4ÎqäÝQ4­zrB‡ÁrÜOâ¿~‡®GšcŒ ŸûCßyÂç4šGŽi¾Ulâ ¦™¡½ò[\Ï2Q,¿çœäÝÆW*<óÎŒ®u±l¸1+Â>|Ÿþ PWÎ¥§¾çþø’©óœY’q‹ˆ¹o‘p37ÔT_rˆLàY Êxe¿,šìˆÉ×KÍm»õ®ˆ¤pâ–žæÈøHRî¼;…ßKIdìC='¢Ë£ïòÂ8³/E[2ëý¼{‚;Qá¼ã”«w·Sr»xjõ9IÊÅKÖŠ•ù‰Ë48¦LÆ…áãýÄ ÿä(¶>ƒsÌÔƒû¶ÒÞuãâÄÇ‚1”íœap– Ð-OÆÑ¹˜>Ç;Óà-ÞƒoZ€QB1àjbÓÜ"ô-ErHùÝ2[‹K¢S úýBÊøaãc¤*`t€RLgÈpªi«Ñ³8E¿¾6m+€¡Äcߪ4·›‰±ñ±} ™Ï>¦Npì:0¸›§à»Ïî’{ü%rÎxÜ‚uú6oÚŒ­pÖ£ó5øø=p`Ü–Îmú‰©·ÐYOœœo5Œ#(QsËò ­fò JsⶺÂâ÷>=ù„ß´ØIÖ O'}öDédè@Aaàß^0w§ÏÁ)¿("¢3X]¨#“ÁXJ7;åGŸÎ`1!µ˜ö$ýéG¹8)ð2°ÅÞ‹(d|K.Ì5פöЩÃ2’ª¿(\¤î½{Ì—¹É·{uàÏ'<[Ç/ƒÆPñ6ilÉáŠC{%š=ôÓê@WÞ-ŒM©Ë-à3±hÅìúA%ö¹Ot[.mó-JåÕWi‘9°Ô_'9øü·oø¨GÝœ8^j!@'jìÙñÓ¶mhÇ6騍 3Oæ*î×sç–;.Z‰—8Á1OÕšCrO_bö.o›¡âø«k=ÍÁŒjŒc.Ø×ÄLC%ÅÄNÏn«%Ÿ¯5ÖÍoâßc×Ç’Ÿq=÷¹öþÝuðwNœfç¿æ­éÖ±b,לc,æª1u.²&»`;Ûq àרÙé B·ó`÷5&ìoÇ*9ÆQ|gKË1Z’§èvOIŸ±c”#w~¥rúî±íϸˆ×ã,žŸêè¼AÆÜ5º-ÃS<ˆ°Qâ‡”à—…M°:gþ5¥'ƒܯó‚Ü÷3!žCìF“‰™ö9VæÕ±\š1¼ÕW1ýûÅ#Ži]PÌÀKž…¾¶(«4^ã©}~®`qS?~ðz–Ž'}Dë¼ ‹úò‡;Õ_Œ]÷Kr²æ™Pß…\êè0`–I^[°ÎB‹Øˆ+1E·q&†Düõ›Ö[ü€mÛá_ÒUP<6vô‹Ý}2ráçðq°öá9n¹_O‰yÇBÌ=‘»bWßó³1JN»¼×ñµÊÚšc]nˆã,ͧç'ú“ï5v‡ò ­/"0ÜÆÃÁ#ñc_^@Àc}ÎÐq‘Ïò™s¶:sÏ ´=·^à™÷è_¸ªï´]ó g*á¡ó°Òùǹòz,Šf´™ɉ2×üͶcf³jš4äϾfNYnR@ 爥NL´Àí¸o쌵m¤~ÎGÌÝ[¶Åj±gm§ÎŸ}Éòœ7¶Žãf 4Cø¡„WZ•Ñϱ>“ô$æÔaÙìE½aŸ½FÂÆ¹žN+÷Âkû9éÏTEû¼xP@[ù¦%[ŽMH.çYz†*Ø.ÉŠiô˃¾sü ¯^͉\» Òøª}ÛàPŒ…þä¤û­!£p+<¥ØÀþ’ð<Ǿš·Û'_€ðŽE‚—$of‘à>ê7¼8xdQðA¶}t«Þ$€æçì¢RßÞè8ä~µÓöèÊV“,îµd¨wa7Áë~Ñr÷»e±Å–å8q• 2È ÏÛ_iÆvM"ÈFX<<þêqÖûììÌ×¾ò®Püœ¾©ƒ~~UNšCäç½½Ù2í&%‡-–oç¨÷ŒÃ˯ÁÍL2&ôÑnìDlå@¶‹c,ñ}i‹§âTñj¥3|-ÓûòœÉœ¾m Ò$Ô2×C ,’dÿà9'Š“ª›½pJ÷©÷²±Ã%m¬‚í±’¯´Ôdæè= Ó-ãønždûñ5«ªbsØìmeÎ/ ”¹°_<•#§PÏeYé¾:¸æ˜sjvÛ/c¡Òoe2RÁÔÏÁÃ1¶¯ÏZež(ˆËn35ØÍX¸©5AÒNØzÏG¬—ï‚rë&®´÷øI~N_ äòËÂ_ÕɾÇë­±"¬ü<ºo™ÒÌw×Ñ÷X•Çä`ˆóɃv>ï^[¾Å±A]ìuø'Ë4Êùw™"Ãæ2çà¬?ûÁ×:æ¡Y.ÔÕš98­ôyÜCŽK+™ƒÞÔ}ð€ãÒY9HßÉ“ž³½ëѲ·sÜÁÞ9KNð¹?ï3ü€QA÷,þ&˜Åkìy¡çà}êŸuç”—j§`³†J}ë<Ù㳿‡3Ê:úIsÚªÑDõ,ù o쉇‹ ©ÆÜ9·xoW3Žéˆ|þ¶% |G¾±ÔÆŸ:ãû>œf®#¯-ªÒ¸bÑwƒÝ5Õ8ðÄ>ï¦|ÂA_êÎÙTÍ$Á¾%)£ä¶ºœ¯`¡¾òiu͵Å+ca›®“ž'¡íôи‡°ç'Õ­ •b'æ´oyÝò>÷ÙÙÅÁ2±•ëÓÜáóÛÒsax™©£6k E.1Övò) Òli7·nÚO¾@AíÚ®;jOØèf¬þx5*uüco¹É9r·%ö9øhØÈ¶`«½&‹ÐÍTº•/”Ò¾` U"4¬ï–ú#YL#wß(hƒmºð ÎÌ$iƒÕa‘ªk@¥µ~葺&tá¸Êí¯¡Óçqh~À‡çqá$s·'sT Þt£ë…9 ·U¥u’Sßž¾£Ôc0>G ƒÃC؉„´¥¼תÑ.Ø!f³düLºt.x<>éO´ÔËù˜v€l¸®vtƒ%¾õ ±HÝy® ¸(~Û¬¶*†ãŽmÔ/ò5rèMúb­6cÝBÞ¢Lþ¦†-ÝlÔÙææánGwÂ]v©Dæ‹*dŸâ±vZwzÜ"— d(ŽcªkÐ<Ï‹‡lÆJù@¬'ÿ5¶È=ekh=±çþÛp3ƒá@ö Ñð«–ڢǃ1FävXÑ“qaKÁ/úö<ðû>`. ñ³Ç†ƒ÷\cm»u‰Ýà…%äáíy;c‡ŠýXòy*x9I¹.œèÆ2Ï£C=æYx<¡_Ô F‹Ï• Ouùø×ùÈ…c»•—äï•"…ûEg%Ë+,ÊÙóÙ*±í‚{tVžTMlΣú.F|tþÚN]¯yÑÐ41†’@ONqqú”_kŽß¶ Që' *·<ã­2xîw¤Ò;26Ä2Ç3þYœ8Ý¡'ùµT­C¬ýÕäµÈ> æ:î-óÌ‚ó‰'}.6—'ù¶ßòŠ /7¯HÓV£Ž3ë}¾ñ\,q4Høà'5u‹7ÿ§oìÖᚆKX$wS§ÿ°M32×aŠÜQÒs‘6ïRHÅ…óݤ¨ÙYe,ˆöëð:ðÑÓ_ã¨(Þú…ðwåè¶æÔÌVÛuà6eçw <Ö<¨*Û÷Žrý—àzÑC^{ë³@“‹ÆïÊl¦§®§@¢ð™ÇôùóFXÆqNÕ)µØ†XókžÀ¸ÚÜ<Èaö…âï˜å©ù>l—ž*¹°Mõ‰Ë÷<=ùÄ·#  ã$o¥½NžÇAÜoµi›‹²—¬•ý;I&_]ùÌ[Ì#g¡®‰ö=C#-1¼ˆ¦^‰­ïä {ù‚·~óF_?x˜ù*W@’Pxå„)ÏãßoµÁA…IË¿‹ìûÖ8î2¡Ã9Xç‚ÌìXÏ~«¿z4¿Y £Û"žém~b¯zÿôÓŸ9ƒÈð‹Ü?˜‹|QÖÎ5}å<½Lëú¤nÓÈ&Þú_Ø·b|jìY¬8Wã_\ˆ‰Òñs žês^Ð@Í¡ ÓiÅÜ*{®AYÊ3cs–¶›³ò@y¶¡ÇyòKŸOÃÑoÃ~òGˆÆE:¾=‘9rb"Fpf«>r*µµó•‘ÖÒXòî 'cì±à$ÇÁ+%'0z%ÎGÜŽ¨zoÇá»ù±J G×ÕE.;fÄ.ÈØQ\æÀÉüq.Dœqb¿Ñ'¢2{Œ±°6\É™=«ÿÓ ê¯Ü\ì™Ï é7†4÷c|v,Œx‚¡U~óãŘܬ±Eïðã1Õñ ~Í ^*øÈíjÁî‡>‘º£¸‰3–‘õØ*XÄ…-¹õýã©Ðg{Õá߬5"G¸x£¯6cê<`c»Y,ªîWÔæB*|1º9y¨«ÅÇi0ÆÎ›8á×y—‡r<ÇÛsð¹-Ã[˜½ˆ Çs’ü’7˜ñÝÓWãÕ¶…‹Ù;&‰²¯…ƒ²š‹I„*νÇ2úä|ÿ"Iæ±á"9!œVQÕq«Ã9XA<9ÊþÃ>óïrš¥°5NýœæàU†§oÛöf@þ÷âyµ4¶!Fõó ±=ª¹åøñ*?ø`ÇËçþlšN…ô“žá™‚†ïrÇ*N–[_ZcWks1»Hî D{œÊ|¤¼¹%(ñ oœÕØ-ìæ¼±Ÿ(qï\Õò]=ðàÑ|?ŸÇ•òâ`¤t x“¤¹žxÕ˜…cH~s¾ JT#Ïxlôæº=´«³xŒO¸8#KÀx¥¶Ø1¾—2r,÷qdÖ¾À=óV]£¸`šÓÎ3¶ÎKfkˆ!ÝÑSL|ý2rö5ã¤ÇÐö 8–&Sa—q¥‡1§Mùå‘qMüȉ†þó—`lôާ'_€¼|¡ïÖ†¼'påj’%ü]»UTø¼™e_¤ôí¨’e¢œßO;Ã’`SÇX^´ß8‰ã<Æ{Š^ªµWÅ;Ró~>YuÚÞYÐÕÿ3}_r'p’˜„mW?¶õ+³ ²úÑ”T²s’gçØ“ ÞZCŸ‡GwZtˆTç¾l&Rbx¥Û˜>wÄìü­Á±º)U1j‰‹KÐçܳÚÎQvô™lö=Ú8/(«<˜]Ky[gòFsb9;©ú¶­Ð„‰Ì¸jëžôésŽLT b]tùÖ@¶æ§Ǿ~óª7Z +×Ê_Ƕ:l)ðL—…r€Udš‚äþ˜PÒ¶Šm1+cŸ“Áˉ rà•»äâõìcÉQrl[Q+úé_ù”=PüX?˜ÈvØÛ2SÃÓ.+FëïR5’ŸX¼~žj3~ç³o¥ã$îP¬Í¼õö¸â²í¢nk~‘qÐí…æœ Å¥8î""žËœP« ×õn‡¹ÀšãŒ'fÁ%÷’¼™Ü7ßÕ…9Ç8/×§­3>ØÒƒÏ›• œñëE†týbÃ!ëÉÀŽæ©¶4Ñ¡ 9Y-ÔÓÈÒùÄÜ9ƒŒBˆ‚mW¬õU?p•»Ï“Då2¤Ä c˜õæ ú«ŒI}ÑßùDÝ·ÆqXnsð½K é†…OŠ`pÌÃù[ÇH:üJµŽ¯§îuŸÝ\¼x‘Ms°.ª&æD¤®Ì€§›ñPãƒüvþ†[ÆRâp–}s͆Xýï¹>e颠⹠-¶ŽÇÓžŠ7<‹Ÿ'Æ2>ç iû5|]ÏwèQÈõöžlC¤s cM›Ò6š1ùäŒGÐòæ@~ð5ç¢<çsÇ»9(º‡òWžñ”œ• û]z:?èÚÇ…~ÆãQtNMr­c¢öY4¿êŠö×¾xDß»Êyny—Žû=qxÉ./ÛÍu×]ø1ÛTB^¯¶=Qîy´œvëhc Ô‰}Èm4mÐϼN9;>8qM¦hBN[ùá¿D¯“¨çÑ]z£k¦j6Á½w¿xŲ=µ]ýxÀ^:^MžœøÀ×—«SÉ­cõµuÛô&åfò"Œqø¤…0aɲ –´|@¯/Œ‚7sç:rû6pjøëXÒC)O†•¾¶¯X䃫:<0¬2¤¤gãP9±§åÖ‹¦µÕÞ |U†¿`æ-è$6ÏåK9eì¤Kô“#Õh 63Å"ùÝÀž±P›T.¯S_z®sÈÞy’~ö%—zy¬7\ð=X•/[b4äò.]©SÿÎÉ1Ÿé¼ÅêB¢Ø·û<28d,Yô/µÍsb …t~B<KaÕ/XØö‡í5f‚¡ÄI×õXT¹}khŽŒçcKP2ϵÇÎ ÔÍëç•?¸„gý:7¥Šñ”ÆÙü¹n±áÖÅX·ã¾Úu´2ê|ú–6°å ãŒ3ûÂ3ä®$†¡i}£.Ûn´"WŽŽc¨/”À­Âiš rÚ& +¯¡„¼¼‹µ©#»sœpÍI°oyú¢È;×AfÂÓ,°ãˆnc@°c ¡Qê™91&ŽÆ€ÍŽk|جÇr`9ò°CoA¦H†DòøIIçõ-O~|§ÅÈ>/PU8@©Ä6« ³À×ÈÁ‘Fڮž¾±¥tŸì±å<>ìüÄ— >ðôô ü±)§  ™c#FM¢W=·“ªÇwU;!ÀhŸxèó\º“''jc…ÒD€ÁîLpéÂ7ýd.m²0‡+&ɵÛ'’±¥ÝûñրؙBů íK[3«O ‹ëÌña}êÃU¦*6o.ÊkL-gÇÄ”ròr»Š[Áz<Ù/cÁBHz< ±UC =沬ḵ‰%öU%xíñ+ÃÝä©tÕŸóJ¼gNÕ_å™>ìW~¡é9X¦x§T¿Xû¤”Ðd—¨ú*{ÐãúŽK¾komÙ°%^´Ó£ËC²½àÀWÁÒ>–î–®cš¶×«ÉúÁ!0jÏÉ¢öFßab¤=;]Ð1@G©¶æ‚'ëÐCŒì¤FÁ‹dÌÁŠZàE Ø o¼µ˜FŸù=’1î9ŽÜ/<é`œy¿`’?‘1Ιƒ¨×wü^ÀLz­Þ¸hËî;9c[¯lÑä ¿~a`>`L›ây¨-íÎ úArN°Ç¶m„À)‚ Ùïu.#§¤-Ôñ{l°ÊzZ¾-0ã3*âDþííÞ­€ãƒ lòà:¨7“3¼õ»ü‘1Ö‰#¼­oÝàM4&‰Œ‘ú¹O.ÚÂ5#Œ3ØæHš ¸Y °Ô¹@†;¶"Y)-5á¹÷;wLzણãC ôµPÍ+­`" ÷ql㜸íÕ^sF~xPÛùMùæE~v+ûM,£ ö.§´ÓÏ9§Åû!¿27˜‡z+f:¼ àâß×cMÆquk”é¸\ùM΀miNÂzQ´øm_ìCø?¹³?â¡Þz´ŽhFa+=XUkFù8FEh\ÆÆ0Ä`zƦ¶üµ®m}…˜zR$Ç)0=އþé°Rž.2€êWmªôº⩪;Êg>ls,ZAÈÈm]ƒªi]¡uæ›±-KîWŒ#w Øè?…ã?ÖÌßÎIÕ—Þ<#?±@àËì]ýÏ÷nÈÎ0ÀLŒŒ³›<"šK7ûQUb¹™ ¯è”§TŸ¦õõ¼^ȳm4pOu-Mjà–iì7Ukb0Ü“7i ±í¿åƳÈþôÄŸJrWnÁÚkø!¶|QiÊ‚¦çñ[¼C9çÂæ4A.³øZÍwVž|‚ŸuÛª#;Pvtvd߇.W$ǃ'R˜ C;‹#úv˜®iGìA[‚e'§x°ú*¹Ú‘¦_Õ!<=š:íæeÝÞî%°qy¾Mü‘8óèé=¸t’`FWê·wÕI»qaÀ Q¾ÝC±‘+ø°¥P·§É}ä¢>$öŽ)ñØbdT×E~VäšÛZÖ±Sº‰£±Ýe/ Ã|qcâ¾w¾‘Óǽþ¹e.ö· ZzáÝÂÈí·¼á5À¤Ö¯ð„·Þ1Z«LŒO·Eù¢ ¸Ì}®2hþMR¸DøŒÏÁ •äñï’1u¾«Ÿºßö /4Õ‹æ6:A€g|8¯ªçCþ³rq–'á_+øÒ­wÆp¬jÒ5~Iã[ùS~NÞñŸñõRbU†îNBC¥¯Ô®Ñ~nY‰}¿«ùnDJ}Ù9 ìSì•Df¢;?ÒmŒk{W#1§…Ï“0®Y´eŽÅí”ë-…ú‹^ÜàZãBÉövùïñBBËA!Þö½Ä2øÄaokîf&¢›9.¹ø }}ÆL¾KÅØ|ËgWì ½Ñjnáè|ƒdœèdfam±šN[ßî5:Hè?\à•þÉes .¶Î ‡’ÛiRö7óÌ\û€u­ ÇÄVy—œÔÒxh³O·Ý,ÄeWÆ<A0ß²(±ÖäÇ×}ê;žâŒ‡ºŸGÒ9 JÆÆ=ÁËûÃÑÏÕ¡ÃgŽ<ãLó“_J2_ðã³<˜¼S˃çKu÷¿2í¿ÄÉù3÷ó-ÍOòŒl¼Õ¾kc´”¹_ÝäÌ Ç–Ð8.åxÁÜß¼ÌLzçW»óáëÄÏÜÞš8g¿QwYá79Nuû‰‚Ù±/P«æ\ m>ÃÑ1[:¶ÕØÒiÌ´÷-Øp!G’Ž>ç¨óx€ß|v‹c{T°òÂïäȱöoéÿ‹œäüŸhi'˜Ü6….†;s¢1"wn¥Ú{þ`¥k$êøñ‹Œø‘Ø·GèÍ ßÔùÇ‹ê9žúŒ01‘•¨Z—1¤Ãã£ZÇ/mÀPÀOÆ#m=«cù,oú0qÌ™7j]rÙéÃ¥œíkn¡´ÃˆONK$å\Œâu”y9QÌã§úkÜv /â 'ë ˆ±È#û´“f‡áo,Mª¾ˆ[p}L˜y"í#_h™ 2¶×<ä å˜7“_|™3û°¨®Ô®†û¥ç5’qÙÏ geäžSÒ§Nq̶E…}ÃÝÒ“á&ä¸h‹åô ©ÏXÄ ^ÌÝß|"àz82á㣵Gù=›'_€ðÁÃóÇ>AŽSVÈ,îJÈŒLŽ9De'†`’üÜYh(9(x"J[v'ýIBc8±èc§þ@É,úYôÒ£¾I ºÈ’Æ$ªƒòfO¿è& ¬‡›Ú­ßr{¦Å¦G/¡ãX,Å£Mì]Ùè·l1;Sâˆ&9¶’êÓåägé?ùÌÂ)<|z|b9㔋ÙU±öƒ œ^|”7í,І—F²p|’“«æË~ÇÌ1éaÕ rö; ýæ@ò&¼ê ›ø²ÚåÉ †ÐP?ó‘…U|¡˜œÆ„œ˜5ðz$ÉqÛ÷Œ%‹â°Õͼpþ-ñáÍ>ye5öäÖ”äžç…+òŽ5·f=Á‚ð§­®O…÷’£ï¸°$.ùìôè34/>ÖVÆö”; ÊÖ^YKß~”<ç–°ù±;uØVJYä¦~ òÏsqpŒ @å7úQ¾}²òÒ_yQ÷X -¬v^Tçóh3=çYð‹>¶9‰'&ã«p@ÎX°ì"Žã3 ø,æ©[2ÊXª)›çžÁƒ«­}”ÂÜ÷E„›ìCò#J¹¥NüªI:<ÑÒ<‹w rZÙá˜vÏžCcýòAüIDÆNš÷ä.É^)i3LÄœüà1R‹dùÖèÄJù2~ÐæÀ¯ž/èÃiÐ`©cH|øÏ½~’ñ¼üˆ/] ^âbì²Ù†*ÔÉ]uiÇ›ÅÖ¨Œ~#™ŸØçÂ<Õô\9æ˜ó¥þÚ¯¶pðÒø*œùLà©a¦ùÜYsÂØ‘»pÍvXC‹ùv9v€•ØÑ¢àÛ~ ‘³zÊ8oÞô/Žª3ömŸºîa½‚k.ÀX_14Ø.^î@©<‡Gã—1ó…ßrqrR=ŸáÅ#Z£‹cõ,_iÑ•0x·q Åý‚)¶±,™'dø&ä.i¦:2£è/=Uék×í~hcÜãl6¿Ã%ùÅ"¯´_õ;îEÄ«¸ ¾ÕÇ3eÇAcç…¼ëj“ú&´:6ªjÜŒ=FÈÖxc›|sLrb-—¦Ú3¸mŽðƒ_óX€‚þ&Ù'—b°fþb ó–¾ÇnGLê¼ÄÈã@;ÆÖÍâÐmÛ¹G âG±/Möž0Êó2îQ.Ì!ÙwŸ§Ñ±$¿¢w쇇«TÞèŸ~œ_ü”¢¶Í}Ö_<ÆvÇö,Œ¥ûóØÎBÍ1[„2$›î7È‹þ.ú¤¶¿’8©+'›C'*fn]¹ùômÞq —Ç|á³…oïé±¼}Ýzþš›Ñí7¼bvËßlf Q&½‡íäy`­žê»Gy¯±ÌXæ¤-9šy5O {úh{èh›èÞG-sŸóç}.¬ã—=¾Æ£ÒŒÊöEïÈf§M{H8xí£²ì3Ow ëþýb·…׿ê±)ÞÄ•ø¤­¶åæ#šÕ®c}Ëolé«eåà·Üæ'ýÍà ûÁ£Gž O’&(b¦¯sŠ }¡;1×ƦºjI^žxßLÀc)€ßbßÔ²[ªsn±œ©¿»é /U&WaBÓΗõ[0ë¢fŠ×œX†a‚…ª9¤¨6òu^FaJD£ ¾æ^7`˜tE·²17_@K[ôedc´ÄÔ2ºã`IúŒsAš‘csËÈž[ê€<ÄU®ñë×üYz~N ½Y0‡åǾÂzŒc.hKnß;_ø«·ò"f’´ó«¦±ªyå]lxÏÓ“/@ô j&"š˜Û8qÒ!J¿Iê$•Òܯ–°#Ò[ ZœÈ¹ôˆd<<nÂc'»”86Òøt"Ì TI¬B‚iÛdÓ#¿‘Y"ù>Ù¢®W µ`4¾žûjI Ò[.‰‰¶/rR_ðê„7-ûÚ¾ƒñK¼¬ü/9ùq`H=í×¾Õ{tÁådÁÿ ³u勬y¦î"Ø\Q“‘ñ]Fê‹×äÁ²ù,nsŽ(XÃX®ÓV¿÷…t _kz§ÝÙA¤•‘¿îô{áS´fqCMŽ, QAâkFî;I2Pq£¿ÆQý΄à÷Vºnç ¸h¨©¹Ë7pMB2ýä… ÀJ…çÌ“p«¿r¡¯13VœÄ¡ç«;ò”9‘Wh1¾9¨Ç•ÿÎG¦üé"—q>÷3Ÿ·ùõpâfìñ}þH\æÃANèô™“u3?i³¿S 7Omý ”9Š[j»uÎ1 ¹Rsþ† ¹î~k&ûhŽÉ€Ì…]ÜöÕ':án! R,CšÙ'K¡mµÌXIF§7ç¾Às,’£Q–~x sa÷Ç) ˜9¹¹Œßa‘Üâ"âžwá,&gÝSÆmÃO'Ïá½ÅS;0e‡öø‰‰Ô;?i„[ÐÂYºÃѺ˜Ö¹19*JA¾%MÛuÌÅ/ RˆÁ"YÛ.Ý9¸ Ž“¡e—K/ð€Øˆ\ñ +åìAqQk}Üô³4»Xiðo;ï2M ŸØ5Vø¿Ì÷–5çÚÞ†Nï WwÚ]¼Õ”í¾à %,Œ¬;í üÇSŽ…snç6ñ‘þ|6(–{ñ6™G¾<½å{§œîŒ];ÃK>à½{ñ@Û²ÁîxT_S8Æm[ûªHÛ´cmŽ5ô¦ÄïæÅH&â.Zõ·ŸXW®<)K…Jí´mÕJiâ;Z‘Ÿ9°Ú 49áÖ?ìBý<ÏbGõ$ m„SÌ‚)’4+Çvó*Æ ±´,¥cµèäzâÐçXc(©ÎÛx5¡¿õ°¸EÆq±w;”îä`FÝž `´qයܴÆH§>rZ+×Ôñ"YŽc“+z'až_ ¢m…‘m,wW_ÄÛ\£q¶=.1ós±Ý‘Ì¥ÁÊï©>ùä¼Ççëªw¢ô‘ÜÃÉAc¿Ÿ” L2qý=ßâÚØo;íÌÂ[N¨TÍ"¿½>AõÀà$+{½µ ýûö#ÒMš`„M«Içà|. ¸Ø(ðs°·…±âÄÌ]tcŸûqñÒ¾ã mïÂP²ü¹^xEWùÔ‚«'¢HÈS¦¸s ¶oO,´¯Ýˆ2ùe[]êp¡Í?1è¾4y,3óÔ [XŒ½Åj_¾ÖT¶Ð2ª¸fœ&¡|ÐÝ…‡sN¨YXcßÌ«pA:PKNÜ«´*^,\ÈŸ/5Gò»5"Gœ2È[Üœ|Ñáþü\H"ÅGc0¶Úo´ICJj^P(Xp=§ð?“ß16òøWmxˆÈújaĽ¥J je_J̶ÖXe±‡.×|–.¶GÛJ®—FŸ‹C /ÿ`‘ëFv~šä·\s¢€«ôgÑ?кhºÞ@¾:Îè|üœ[—²¿3Ž|–¨¶åî\ÑPÉX£z5v‰™ù—y®n ÷Ì¿Ô÷Ù¾”ñKŸ÷é°ŸpÒ÷¸+û\¹mžø¦nUpœÄh™7ªÎ"•Þø†‹÷Ihªð Và¡AœûR'úÈ]$|©ýmÛ¨ŸüD7ãŒ,³(&=öô˜—ñ—x^í#9QÎô#¦žÛ &}ר:?Â-?0šÃò,Ð>ûŽÄ¤þÐQ9÷÷x9NäOÅy†”}wï¿ðñï|ië±_ Sd&þ3Ÿðéšqè1Ÿ-Ήí[²/çÑŒëŠ?!™'ñ{ž¨ þêý³xî«cÉ-ŒN±;>Ím4pÉí[¿ÈY“9Ï£`ÿÒ[2ãgˆøªäkò-›žÏ°«_òß Ÿã¶ÏgYF³~áDœ®y.iPÎ?uŸ³ÅõØí±$O€M!?„ÄXòXíôVÍÛrO”nÙ?ØÒÞô4÷–ÚIôƒudaþlUAg¸EÏýS'Nr¹±‰Œ¤ÈZÏ\Ôg^zbθ×>“/#Ó–ì”_pê5.ØåÀ:‡ã§s$[Æ®%c•uµû&^ð=6øÒÔîñ׌%ã¾YªOM÷9FÕf?Úk{xôéÉ j 2Á˜ÑûÞÜJÞ"žA‚‚I açWrl¨®¼êuòÛ¶ìT{ÝZ㛓‹u"ÕÒçíTÚNè6T DéÉ®õнM­úï "“B¼Á¨Nf¤Ò‚óÐô‡ý¦ƒÝ’*­3·6pçM¯°š_ÐÁ`3¯pEo¸éyH¾ÝæÀ4¼Ê® À4#7–e3q%D>û5Ûî«kœÂÍXǸ = ò`0Z)ÙIÕ¢C òln‘–×´â> ›L~<¯ÁNï*Ö9@V©sà›s¾1ÒF7NjäÉ£@Ð.‘ËÔ;uûºc[Ê ªI‰g"–Ç=fW™ØÛ¸ó/¾Ü™Q;z]ûe5óÁãê³O³Õø˜+uÙ¡»æ3Ÿ'1¡=§,÷ @ÉuƘë¢n.–ÌOÉmÈiù@ˆ#ãÒ›*ãÌhQða¿ÚR÷µ±¤=I$ö™ È…¶í°×£]믜؞Eý\Ì\^ÁǯÕô¼ì‚ÙÜ,üÉm‹“¿uoŒ3Ç!é^¸H?3ö•‚jK,äC›UÐíÉ 'u´ðâ¹k=VÉaCæ€Éü­­sAËxÖ²o8“£g3±ÀõgdÂLÏœ0µlæ]="lœ•ûÞJ¦}#÷íöKK&ñ p(¦H?ó´okfŸN\šQ[ë`¶+Ÿã;y5~ßtþJÝ£Ô3Ç:ߘ¯!Åà>Š/c˜ˆì~y‘ÕÓh׎OeÄX9/Á‡!àKâVTž}ڨϫ¢™ã*¼(6€ÄâAo}ÕÖ>fžXgÅIôõ룇|¹Gòe+ Ž5gþlÐdÕçí[ŸÂˆgòÇ-.»`›R‡–‚ÍzÂV’’"&<,»°L]„Ä÷àíXÄ;lÇysÕÀÓ;Ãà ¸h9FU—„TÚvCOèm/ÑpL=š$Ìyì7§àÇH©ýé‹>Î{É}xîyÆGC¯K"ß ÍPO3Tß{-~8–»Ï1«&g=Ëœ‘{®š ŒNj|ühŽÕ^ä”q‚µåßûœ¤ºó2X´£k²pÌñävué[q‹v.HÐá…s]26ÄÖýµs·+Í9gÆ4²o¤*fââ}’ô‚ØÂV žŽ-i;áÍœêþ sßç(OY\Ô¶ë¨æCØ~àË/ü%zr,Ú"÷.Q@máÈqÎØÄh<4U2æR7Æ:ìßU}òˆ“$;W½ÒËÛòCÇdC*ÁE?E—ðð‹¾Þ«Ž®ÝHNqÛr7Ju®Áp T_un/¢Ø/Û@9ÁøÂ3[bÐ3-÷1(©ÅþÍñµ…œ°ðæ1é÷ GûŠ Pߖœ ç勊_Å ®àÄç+@ãݬ'0&ÆÎ~˜°{¦$Ÿ¼ñ§¾Ûϲ Væ‰{xs*IÝÏâ²êþÄ?t\bŒ†‡Ç9pþÜé˜|駱ŒUÇÁ£ù*6rë·ÀÌI/ö½*›ˆ:»ÍhíÂBkâ²ÎÉžvÇ«!PexF¸`Ùg[ǽÍq‘•ÇY#ªqlÜv‚\šOè©¶ð‚@åèâvE±dalØÙŒç ‚ìÅáXhZшèo?±¿¶é/ª ÍD†ÉØúø þäSç;œYÜPhÙÔÏñK/»Þ’îœgNì•ðÎòÐØ£?ðÞ{ ®œl9›ó('BO ê:-oæ~\ãÌYm×~Xc·ÆPžq[»ÐS\1OHD2o £v¨ ‹Zó[‚“3REVòV9­©ßΩ¹jYrû«>N©»°–ñì÷Øœ¨ÇÞÇW€è VqY'ÛÅs%ÁòÙeí£|æŒù¼”ÕãdeÅÐq‰/ä`¸&àÊ‘¹.¬Ž¿-ì3=ÎÓg¬‰Éx`ûœ4ØŒŽðA¶ðÛVoM‘Q^ñûîãnŸÀRÑ ʈÕç8F6½ë]k”””âg?$å–7æÄmlãª]O–…wŽCÂ00OáÑüž8ã™°¼¬Á‹>Ü\¤Àü<Ç.÷®ã=º`¬BLÓn΀Ú:=¶ÈB¨:®Qð^ìüGÖã~| W›š¸Ã´;ÛË´ÁÕ÷oõ¸¼+•w‹¯=2G¾V\›6«¤­} M ¦dð¶TÞl“MmÕhÞè?ãˆ^æ«$¾°7×5vÃa2ÖçáU'EgNìg NöWâ¶ßyŠ‘â3ÕÆ¥äèu¿¡§úµE‘±D77ú %·XqõlbZt™úp`"£Æ¹=%ý~]ú«}Æà~h"lõïà½Ç©¥¶äç hÖž˜‘ý—ëÆÀèGŽ<®XŽõÜn \ªRì.®Óäæ½Ûïª=ù„Û5øÐŸ ÉWñ"×„ä¾ F…@aô Ðß’…Àݯ>…Ž•¥ÝMj—ýœ„rbI`—à¤âW&m¨Eƒxú帒G%׳esâÊ5¶k¢ vã§È:á““-MÍžæë)[}®Õ—Æu- dêW$$CŒÆE=¥}â­NµôqåÅ­D±V[eÙ<Á®ÜŒ”­ßúÆž·Ïy`ß ct>Z{¡Rqñ8cqÕÛ“¸0cHÌKÛ%£Gíg½X ¹ßMÃ@–Ë·]]ž°Ôa&öI—õð³Q&aöÑWJ6›ìyþf,«ÀY¼Ø7b²²R,d—,™jÆ{ˆt–R$Èm9\Áæù` GFN³0?ÕãQ9ühŸÑ~Ä"Ì6¦±yx|:‰†K9âßòc–A¶û?utüÝò&C&¼™“@ây•lâA@ÆšVôlδ„%až “‰ñ[DÔñcžê1‹ÜZGß°¨»€M*’÷Á®_õŸ¾s¼.çãØb’€ÄSnÓ3ñø¾¾µÉal3ßÇÑòƒ=1…kŽQ‘çJö©[S°,<à ÜWofÜC'rTUg?žÒŸgzÂÁc°|b‡ù™KOü¹+X>1ÛŽ˜cñŒ¬\¥áaŨyx ›8ö UX!kÈs‚qYÈÙÛIáëù<úXÚ¾Œë੎Š1AXßuµ'bϳê_ó v%Ñ·‡‰ÑâézÎ Ö”aæÄØK™¹ì|Kæ8L$œyv ã0û b®/l¬<ЧϷ°(gÕU%·Ej óXéVŸ±ÐBz-ô!è^f¯Ã©šmvÈœƒ[cqð®¡á<±$×îÕS™˜Áp츎X¢sÿu7˜ µtÒÅy›c‹ñŠm×uã½Ãêä¶ë¹€ä¸ÅþŸ~Ž»pd¯Buµ"¯4ç£bGc´‘ ·.x¶•Èç))çlV4߯—»‡£kR|ée<ºfk¯¤œ>X¤„k[s>A\å8»Ž%^ü;b–̱[ÚÊ'Ó™Ëpj]ðÞOÔO) éãG…1ÚÏq¬vm js’í;Ž®Ê ±Ç#ójˆ‚Îá÷6_E¸Ý>ù„¯ ôýÎЗ£ Aw¦‡Ûö}~L4„Ý)˜´'Aä9@%‰$Æ'"…žOÆ\'|cMJHZŠ… w’¼ì‘3q¥ÃÿÂbbå-,ä]T–'¾Í3æŽéų—Ò$ýÚqÅ;…!“bß&üÓWŸJãÈúZ+o¥sRóÙ$ñœ|”ÇžÐ1Hî/¦ØùD£º9Ë·ß¶§­ÿõ{Ã…®ÉâtÔ>;O/dª¢¸^l¢¾|å/ãXß8C—üã·÷Ú—:^kÑNLÕOR^¹î­In¦Ó9G¡qIÓ¥/ø ê±ƹ¸DÐ%|3XÜqM>(Í7¼Û'U•ÌAjd‹»Úë^ué2î¿ÉQy÷öìÝ'à@ÏÁI10Žå¸ô¢EÓ¸ç~ûYóË­2)`ƒÆ=œ™sÄÁBÞý`Û ÇIˆ¸é§@ß¹u+óýÅÏöÂ¬Æ –Ù˜ù×@ë)¼˜'ÙOŒ¾ÿf? Þ¼ £-äžqòñA=ìæ<ºæÍg–lš˜ÜH‡,&ßà9†‰Iöp$G‰@æD¶nè©¿«@ÛsR*à.<A»s¹ö §¥ù#_p/ºçŠ*ô_ïM”Kmià‹‡e2èܽÈlÝuk‰L2O 2ìÍyÓbüF÷ÀUf_zÚ_zøm ‚=yºûÈaÔ²?óÊ<,jÊ|a~ïyÃR†ñ!BÍ|‡¹#‡-Î…ŧ<ñPFõLɳCªvœÊÛ¹ÅáQ’¿ð¨>âŽC?ÓXüZŽg/"1“Fƒ6¬{̤‡|gÞ£83Ùw:÷¬‚/y&„µÿK#ùJ>˯ÇbhWs€nß £âc˜ÝËÃ/1ìãR~“ävÇ6ùJãËyÎï•„‹öÙ~>ÏØìq&2pÌebz%®§¯Ìgý_}1VÉKcD^<¶Ö·¯É~|¬™9T€Ñ%nƪxd#Ç¥ÌOòWžÈáÿÏØ™¨7’ëJúôvçýŸv¾9½Mü±”«ºoÑvŠ$€@\2%¥dÖ4u¿kÖ¸ðËObºã â²¾tŒ¥†µÛFv£î‚nÖ3”ÿÖy7X/p/)¼óst7/²¿ÆÞ²cžûÌ yH‘CH%=›Ûηü oÇ Á)ð´tÈŸÄ‚}ú¿þîÐq—ø ¥@Lä‰{b¦îÇ9GßêØ Í Q5Î;Îä99Æmûõn™¯ãøN­ÚŒqMwç„w|°»Ü5ž=r oO<¶³-<Ѥؒûò¶Vöò{ôYÓ9Ç[9=q Oãð‘Oåà¯÷ksëãëÃ?q¦í*‚“˜œŠ+5\ìÄ_=€z Cm Õ„ØA]xlšÚEÊ8Qñª0eÁò¹Š7M*jBƒÂzN2õÇ–¾1ol(¸:V;fÒ[m6UÞ_‰ïè{Ik÷ÁcAŸTfðáÄÿ ^A—dBÙËbuMíûV&<„žjlÐæñm'îŸøáÕ #1² ÙRb=BE:€_ ܱ¨¶õý„Åäm Z füšñÐÅ}'&Øž˜É/ú| lbò&R><˜P±wRúƒ9åõ?æoûœ°‹©Ž›D{ì tÿ÷buZb‡‰ÃújÓ¢Ž-Ôµß'£ÉYlcÔw¾lËBgNu^à’¸áEê]${óï1‘`1šg7;ôÉ—¤‘÷ÕnxFî8ÔGnÅ =ÒWßÔõ12T2vfåêÖŸ ¥&Y†ÂGÛa½±ºüÕYÞ…C-<е±§IÉ™*š°Yw‹àЏböœã‰”­ð­¹¦íÀ[YœÓ”Z°¦ÈãrC=rÿ³°Úæ]KÃ9¹wfá2Êbæo~Ã+¤¢WXaQËxÜ1’SÇ-UäBG5Ѩc¹v§{ÁCª6@îºeZ“ç«ïü$;œ0ß…)ö‡GÁÐçR$ÍØ/flÉmôÐuåÌ纒ub˜ZúñŒ=­kO¿g-`[CuG_íúFu0¡~r9ÝôùìÅA,/õ ‰:ã›Gu¨uÇ=Xv\?F^àˆñ¡Ÿ•Ìý±/dÑ ×è’KÙ)¡À•öõíõ°µX‹ú?â¦,?i¦oë+rt„çö°~¡ÎØå‰m"݇°÷âÒ¢ מ£zÄ_GþÓ{^('olRwGÖ¹±é%÷}„>ó…”ç“ð„gÕÜÚŒ›œƒyktÌ’ k èû<;h°žoþÂþ] ÜõìÐ/oÒ]Þý;½œ£ÇÉ{ÞÇu ,¤gÕè¿ó×ÿlT¼"Øêš©Ï“Ãàß9ª÷í¡+™i™£Aôèf%¦ÛceÕd ÛÍ@düäý0s~g9û)ó›Â¾“Åx ,ûŸâ(,"ÌÌÝöÑ-”ó›øš>~‚KNð-;åÝÑ nÄâómý06ôñ#1~¯!â2¼’›^« [ öõâá¯in¯iØÅ§N?9QÛ¾q¦rtÔ„=Y‡–û‘m|£—À8mk-ã2oi¼Å/šÿ[ùá' ØÀ:¢Ôáá „ŽnB´„Cí\=‡ªºí$i%ŽöBqªÕöfu¬ożh.fl“r+µ¥4^‰&¬ÈxK—™ã’¶ýàCÎI2òqŽÞñp öl8P¯¶-tØ€Íöú]ã.Z>é«þ­<¶f­äÆáÂ×Ý.¶;ÏÁ&ˆöÖ'_ê^4Ùú£Ç1,ÃevÖ> éel÷ýÙˆˆ‹sPx ]öQ_ßÅ6&è²k}>wQF,/ùn&Æ–/ìð‘PiEו´¬óh¹½q½z,¾çèͯÁ9»§4 ÃËóïõ]Ýœ¹¿|l†Òö½ÑÇŸµB•|šË䋳¸É4mØÈ·7]èÅSâa<Ô5ãÚl?Ërº¾`ªL›èlZ£å <;HÛÊØXŸæ´zÆUßëëÜóŽŽþ åF˜d¬^^p;¼mMã?¾¼nB³úíîcïùœ//Á¨$öE,OŽ"çÍ‹.Áž' ÎGt9C‰‹»Ã=ž9D;è[³ë‹$ºì¹ Œ ·ß˜+¸8پ拶؛PÖe>ó:qŠç/\ôêJ‚.4Sß1Úɼêu¸œ_³W?S;Ã3´ÚªiÖV þDlÕ7¦äd9€)¾ô¾\ü”ý”xâÔäShÛü¬MWV”åluß9f‹Ã[6ú·ð‚<_Ð¥ÃØ&]i|×/:>Ù-÷wÙWºØwÅÏØJ€o†Ëck ˜`ìjÚØvÄVú_æÅ´¯­½ÉO°ï;Ýø`‰Ù^¼ûÈ' !0£}Š^¨#*uá× #¶Ö]\=öÉeµó]=Ò5ˆHƒüeX_cIÈÌÀ`! O„nq8™Ñ,;ݪ¤#rúN/ÈC!ñ½ÜañY2îgÅ+¾cdUây_<~ñÌQ^óx­ s=ûìƒOêö£Ç3»ðm¯9ä|•žq²m<Ù‡”K2&ø»r”?Ÿß,ô –˜jK¿y¤M}%náøó×¹îõí5Ýx0¬/"÷Wb?³D¼ãÌ®Á[Láb¡úÄäcq? âO»Úø/õê7´^pÎØ<&ÿPýñ' ÚŒ8:ub–g;AÅ™SÁ˜ÌTΫì’ûÕ"R!轂lUmcDÅ›ÊóŠÜ×D';ö›á=o„Mbúà¡þ¬ÿ–ÙÆOq¨ÑeÎôÀƒ¾Å@‹˜ý (Y0ä{²Œ}ÒoWŽñ hqÙmØ®'è»Ý•ä ¶,ù^Ѥ.gb+_Ü5?Ü:ÇÛ|´Ý'ý¼@„ÐãQËÃI}åœQM{'LèÇš·ÀÍXúÉÿ,à–?csn|ÚÄÐtSèç¤X§½ ýÙL†¾yz\¡êe6ÊóoG[ìª/têü4V uÈÛáÉüæú|¿Ò³LjÑÄ:‹š¯ÄM›ÚLìý¹$8ˆ·q•ðˆ'xQ;kErÞòþ,Æ;~ö™ºü® Å>cºþx°HÛêѯ¾H°W¹3ÿá™|ï&cc_€\ìÝA±v™Évß–†€oòùãwÝÛ¯:{ Zp.~¥ëæK=ðôŽøég~‡†Èw%h–›‘PecéFÉvçku•îíÏòT›¹½WyѶß%×P`MÈWÜI'§gÆ}dP¡ML`º<¿µPâ*„ÛM§ëç°N),•³F"óbówšùÝk¦²ù¹'+iß ‘ïå÷ÆuŒAB Äeû:™‘uÖ8Âxa Æ˜ñ‡®sc £¾ Ùup™›ËiÆ=ñƒ*ùõ¼$Ö>©¦^~åºzöI¿~)`¿·U6øZ¹‘™û³ÿÀ3k#\Á3ùOß»wƒ·‹V¤ÉQô1_åÚ…x˜OY á‹~²[TM5’ÿæ»sþÌCgŠ£cÈÄ·oEVlAB{7 rŒÕ»÷D'smn™©™ó¼ó¶pÙ>J›²\›« ×N´ß1À†~c[?’£D„FÊk·ødj{Ï)NÚ´•{EŸ£Ûž´Ÿ|8?órcpÀªl÷†çæ´u¨VòiòÅ£åFÈ!¶Èý`眳Ö'ïû$7È.?,| /þdF-'ú(è¾ù3wõgžbqåa•öê'f—ìßêu!ÿѯ§¡ùJö8† kœˆÉÖHlÆØävàC¬Ò¾uô)èç·LŠ}޽PÜ)ïÝÚSè{s†¯+n·½³ïÙ/±H%·ÛÙ.d\APPÉÑùäÞ{ð»M׿ò·ùIŸçɹ9È?[ÃèûFéø_ø È/º÷î·_£ŽC äù¹L0jIî…\òã/ºIþNˆèZÿã|| ³ŸbMßïç¦iåºø¶®°˜ÄK:º·U…ãá­P8Ù¦ Ž.´¹7Õ6áÌ],$ê›Ä`™Ëò£ ò <Ü&®úŽrHŽà,&¤ówòɆqã@w1Ùûâ’ \W|R– þr11VÄýéúÄ‚j'ÕÅ6¼êBõØ^.Ù|ÐG©¹êq¼æÙrÙ“ ýËaìÓ°Ã3è›GíÄʾöìÏF§Æ|ïD>?ï†^Ñô86÷ø¢œ(~¶¡dSúÄ x'û^p$®Œ+¹Ð·—ò"¾Ø’Ûæ¯ó&sŒûõck–¨‘ß¾8—úàƒ·“«:vñÄb\~ù+óeíÌüò÷÷ø$ÔÆ ì}ÎÈJ…ù+b›-ÜDÁù,Åx¢—µaš}’/”¸ó|³è|d Ò˜Tþòg@¼ûR¸;úX³x’/å—:cuó¯6ŸYÒg»à<èH‘|Ú>{]Ä©ÉS–OlŤUòƒ¤ª8ŸÃÒK¥ÖþêKz`S’ĉîžì0®Wîê¶÷µÎ©0‡w¸‘çáDûå~¾- ú·· {m©û°W¿q²G|_¬-)ÌVò)ÃÄÞ|_3Xã‰&Oz)XûøÉ%/$¡kn~¼¶át‰ź~õ´ÇcX<â×¾å{ph£»q¾ÜØóÐnyÙž¶ûn¾ÆKÝ.9'ÝñY?æ%ŸþÜ€Ùû3·3Žt¿óû[8d͆72› 9`ß’ž‰«?1E9]þðõoÅ0Q+âÅÜ5—ˆì3Ÿùr·dàÍwò™6ýæY_yâ_0=ày²’˜Qh Êú¨{Î ^Z 8¾Ð—ôn `_œñÌš„¨È‘ÀÛÄ^V@)<¤@œÛðãI`Ý8àµ5oÃ8üðm";&Ó4'jmGV$ ùtp\ 2ýùíÞš¨=lãÚ6IpÛ–m÷•åû _¶}uÏ~Ì{Îâ l3¥¼áàoši¾ñµÛP£[†©çxKÆýôžwn Íoy2 ’ÓŠWG«X6°[$ž{bç[ªÍgPh3عø°”ƒyº¢¶üQ8ªUVaÃØÆ7º¹[þÑ&D±ÁÜõåÈ`%Æ´¤4_zt¾Ö–6š§¢Ö­\Šy6ŸR5öáå&øÕ¥qÔíãá¡6ÿtnåÍ}´sëæ‚mÉIôÓºÉÉÁ’ž=8æ¥ Ä0‹ñæH76pÛX9ØÃå‘E{_œG´Ÿ9fü%†pÖÄï¬`Ÿ,næÁÿïh”jk3é º,JÏWÙ„³&#Üb#Oø™öv.°é—ÙóÏê°5r‰’O»ëZ‘¶Öì˜àûÉ7XR6/×MW1×÷ápFÏ9ˆVlÃ3ƒã¸>xyr>‡MÜŸãîÖê7÷H2ß]s€Êëá ùØâÅ àQþ,ý!%ùÎETúNÐ6O,ïàóò6ΙHŒÉÅvÕºf¾ éæGð¥Á$F; ÂqüRùy±Íóäwq ]6ªÞÿ·‡DaväÚ]€3'n)|QÂ9‡¨Õ;£…jÄœy„æGþÚŽªñsâ’…JþgçPâËø`ÜD<îdx¬Ðþ‘$á‡KåèZŸX¬+oê³µá½x6¾sl¶–W–ùßÙÄžü›xåFíp—Í_ºé¹í²¨°G×Ànc8ù[ÒÉJ¼¯Iß-œ5~4£¡cמɾót ð…N;ú°.9>àÃíô=æ?ýt_‘L/€‡×8oN†‹ÇC‹qX–!çÂ缪¨Ä ìq2–ðÓ'¿ªœ8¤·=nx{Iƒ0ÆRklÚ*àÿr°:s;b2îµ-½”0dÎ%jp=ö`½qKW朽HÿóÉ‹z­MlWÌnÂÎZxuq,çÑŸu`VJ\Ë-W•±æàÌ_ëû¿ 0ÿ ăâÐyØMqÄ÷xØ!é­=:›#Èüâ†FhÜèÛ^ã|:ÞHÙ/_nÑýŒy~IUbƒÝ¡êÜ1#VŽ:oçO}36c©@IDATwìÓ“ƒÙôt΋e];RŽâ°æ&ézSÿüC]š¯}BŒ÷­+ûQ€¯.]Ó§žOT“ßWÝ´UC§¾M° ûúŽm=Õ¢žäè[ÖXò‹7Vì=ø\¨ëæÂáå} Ýpûä i‡/¼ì3öû\¢­éß^P}ü¿¶Ó³3Æ£’s)/>—a}Ôô·Ù<9<‘çëÃ5ÿÁú(³ÆöæÀüm™Xlbǰp—ƒ„/ªóË|µ¾#sµMi_ŸÑý²f_æks,kû×ã3÷áÆ5ëñ-ݹëãÆN 5ûjD·Ãgiòh0éF>8ç²Ê‹ò^—×<ö”~—Ýû»0v‹Ð’:‡œ: AûW¾.•º‰ÑËÖ’$ùÕùÑrIWrqòoK^ªÍ&Úìã{-Ìî+Âë=oϪœzò¼×û<ÛÛ¬þ=<ʱfç¾âËûÀÉ“ bæ„°âx, °sÀ¦@ŽdðN¢{b8œ T¦ƒ‡¿åký} jy›îtÞötæ‡ûâéã‡wÁòªCâDçxÿ¼-Td°ÍSñò8_®W®Nm\ /±¼BAôA÷gΉæNTãgI˜smò}sM_¨áërÜœ#N íp¥‡:}™3õ=À’[9ÖaȈ[Áè×ãxN®¹=#k†Ž‹·ê+cÇ6K.¸uAaáßt>¾~Ò­ `¸Wz¾Ý¥ï|ƒ.¾Á¢8?qk4GÌí­²œœ+…%öñA‹B,ðº9ù”'øø-kXEj޼œé‚Ÿ_!6„X"›) *ñ“5‚׿tà¦c'NÙ.w±Ü­"™¿ñoGÛÎ52_ÏJ0¢iCúäGcÌY`®’Ú«O¿çV9sB¯¼k×Ì dÒï8Q×OOžOÆô»¨Ïs‰õƒ«âØŸ‘# ×´½fV‰­³é> __x½s0<?k›‹F#Æ€+€þeô3·±qÝCǯž!ªp¤©ªýØŽ>KÜ·lŒ°Z=ZGÝM|ÝWð /œŽ=IUñ­"v’q‚ωçÉ/ºñ—š¹€ï^æ·Î^ó™¿ë#l—SÒ˜'бÇåß}‡:·¡¡ïÐ¥¼ó7ž)ïçËŒµ$I/n³ @r。ù\¾6–ä<Ê—>(Ì[ãÛ6±}Ê |ʰÓÅZdîVIæ¹+st¹hú¬7N¶Ýå­}åÅ’pýgg¬£¬}g4’‡‰÷¼ÞæGϱCmÏQUb£ð¶Ô ð¿] pPÎ(Ïy 6zpÉ>”9Ž··ÔköÅš¢Ý¡8psŒzñ#â´÷ hoL؆ëåŸý7cH/òœ÷ëyÉ’—錨8>Ôœ5UÎx©î>3 s÷“s13îvì9Åzu¸f ·/†ÞΈz$#§ï¬CuÚ5sFbâ€uâíx_K:"gŒ‡äÁ9h|Ž·CsÏ)ñŒÛ „¾m9ê(iO¤…ŽçH¯­¿É³°x²âü`)¬¬»òd¼°æb sòŒ ]èƒùüaüÖîß~ø Èo¿üæÿ20']Pˆ!¹MÀ'uï÷éëÿè~\ˆcy2é{ìŠøoöG Ù|v?( IR& ˜èossbŒ,–<°íÛqÄß&ÃtvÑ`.‚@lи¯‹óÉ.µ”m”Fçk5QvÀ6þ‰‚ø“,—?çG-ßcLš:Af÷¶Wí]ÿ3ÎŒÿ ÝHîXÐã;áhS6Î÷¼ø!^°ø?+È^nد`¿ïvß5ÕF’ϼ;x³ãñ3‘ÏOxh®ô"!ù”1Ëã .îè0+8CÎÏm[àCЖBS÷E„ðiñ$•öô=ŸeC᪟~ºŸÀ–ùüuþž¸¸Å,”lÏ!Ÿ‡’'‰6Vò™†å˜‹˜io>¦}Á_Æ]:\°åÝÏØˆ©ì=¿‘ë‡øæC]8²­ë:,~t±µÔ౯O˜TFÛpÅ/ÝåkÞGÀ7.ö‰^†ø¦,¿nJ÷µ³Ã“8˜ 2õØÃ8ϸ¢[?9RÝq§lÍÓ1£€¥Š“5ÏtÔOm‘œ[oúä…¾ñ²´Šã|ÑIQ'kDË‘û#rõCÂçq1'.9*oðàA17¶8´>ùRal>ì%×ØÈ—“Ðbl5üär9›âüâ%‰pŸY¨ ¯ùÂnº¸ Oörj*äæMöùÆ¡vµ¬g[ãEóù¡Î­ k;_Š9댹ïà‚C¶¢;}p–ŸÍ×q;ÁYàíÿï4ýâð›Î8y¢„/°/–ÚÏ-«Æ4îæ ëðìÏ8Ë;q,F4`ôι84VèÎÞûo}a»6uʱe,`þoBdä:þëÿ¥Gìv^¥ßü¥ë}« ;¾ÈزYÆ#”‡1¨ë/¾Èg°ÃMM•é-Fdô½í ^]^è–y›áp&ÛYÄf1Kýå ÎÔÇż|¸1®l~Æó ÷7eäcK„íÏâ¡‹ÄÄH*á¯2[r )·+·Š,›|c7ä´ß:~ñ´2_Á]¾"Ïm[K³Ëã‹OõÊ”8À5ºD¿ñ•5k ug9qêgù|ý`Çzç|Õvækrzü_AYŸëÌ·$ᘘßs«Í„Áx o…œ.&äÎ7ŽTÐöô9ϲ¦?~Þ‡Í6òÇŸ¿8¶ÙþÓã?É‚ Ô( ¦äÜÝ;&wsB?¶K(NªD¼JERÐÙf8½·6Zø§ÍÏJ¾ãšD ß“[Wúò ¦£¤Ômì“à…y}£Ÿ[ÃF×1ø0Vy$‡óÍþ¬€ýJšêÃAÓX"Ñ;Þ (ÁÉoNÂIi"å]!dgr`º à­ßcë0Ü!-•/¼ÃùĪ»™ÅEïyõO‚ä(Þ–÷Gf¿}Uâ΋‹}ï–°ëØùQLyº…ÈcÉ<ÈÅõxÚÖùÊX%Žì.R<ß‹Ž>á1g”›[N>繡„F&˜í^;‡H©jlw¿8zæv.á‘ß …ˆX»/æ Ç™A9Û,âʾx7vÅŠs rõC––ûî¹Ù&ñ~cÏÅ¥H s1Œ3©ø)¾~~ô$ Xç;J[$ydœÛˆŸ„Ês_2à9d7êÚ늑Yn2Ò±ÿrVí{ÈÔÌ“cvs{iÉßð#~j`]ýHïZоTj%¹êÌm^أżÄGíÉoNb[««æÏئÃÜÑ&Np½6¨[¾Ü[tæTô¥-ÿ‰>yH$A<±r›´å¶‰þpp¶(@´@Áfã‚>åÄ[oï hØ­Dhçÿo5²ù³:ôhå½»Ü࢟˜çð㷼߄ƒm Ð̧X`íšåjœB/Òbµ5±¡ÝpÙË2¶î5áìxÌØD×íÎõQä’4n[=6êv™> º`œœÑcæÊç꙳i=¬*Èxî±\µŠÑoUŒV¡òH¡¼›‹`‘00¨bt(kƒp4ή[Æ]lÌ€§§ï{Õ~‚ñÈÛ!Á†2’ÿü¦¯Õä-.hðJ?dWî+O¢›_åˆ×Uh+Ÿ,Ô iÅ)©N >©æU3úðà „S(*l>æ)°v²>8ß8âiq,.zÃ#ú³±å–)dÐÂïÑ“oÞBõ[¬•AvØyë ;[Ûž‰²·Ôx{+·° ålÇ…n3¹'S5O "À/=Ž|ççe‡€˜á fµýˆ>Åk nú{_­³Ü>êE8~+³}~W§ßÞƒÆÉÿµï°á¸‹!j÷‚Ö £ OðäÎþ¾Pð‰(óÀ¹VÿfMÆ8#‚îû¤ìÜB¡øÈ9Ø{kcÇ• ²êÌ:/Ø`HŒ|-õÊïü~¿/^²ß4È!úêöÂËÆ!óI‚ð@Oú…ÛË…~ÚRu9ÿOlò§G¿-Šžl)¹­BðµÓ¡Ã‘ãØÖÍöÔ¡’'Ž}ǃOÑɼ€O|[á9Ð>Å:T¢ÆnâEA…ù~n½‘´>ÇÝhÅëœP½`?_Î5Ý`ð‡ÏúRÓèÖU?¹øU·ò®[>w0,ú½N!)}Î˳ŸØ™€Íí(?mëa8|x¾Š§÷BÙ˜°ŽÔø–1tòËÿÚ9N]wÍWýàéë³ÅÜ;.ähe1¹­nÆG<,žùÞKZÖ—TŒµå'02.>>É5s¾¹þ%s‚˜–øcoöÐÐÑb,ûÊ Ws“™ëêƒxæ[“üPå@¯C Ða­`ï™ GÒƒ¾Æ|1,>ˤ4:ôS–/¸§8ªÛFÇ£c}´cÖu´oþÜ’BÖ”D.š»û¼±“sãù\¢c¹¼áï½äá™ëU6ïá>]üº<òBˆ„ü›Ü“'ýxÝH)Q¡^PœºÑ¥dïæ=õÁ›q×ã õµmƒÈ~ã|8ñ+ô=VVTïY µY5^w2Ûùí˼ÐT‡††K|,–´þùx¯¢þYÇ>³ñÛ¯¿91ÃÿĈ³vH†´$"òo‚õ„nà ÂPé3h¾¨¥®‚µ\öL{I¦í u;ÏBòpáXl³h;ÉMl|±ùQh£;ìk+¹ùÙ“êðØÔàö¸\[ê™$Äí¯;ÅY ‰¿èþ~dØñCŒÔ)ž˜ÕåAOçNަ»M;<â {ófbú'q=P®^žÉÏi¼9¨€÷uó™tÑ,èï¤Nî°Ó3ëŽMs _Kê9éM|â/éoŽ—Åx}¡oO ÃØãY¸)íYT²]äïç¿yÒäa%ß2´WÝÂD÷×þœXã'›„áüù„ÜÃi¹ðŽ)«fžê 'E?ë^m ãΉb¼èó·CÛ†ãlŠ2nÞLܶŽÏ<™LùÔ¾ñk2¦™“¶žQ÷|~×,›ðò‡ùÇU3ò@ï|UÇÇØÐö“*-Ä}|‹ÜæãÆôŒ X¹ØxmÿGû”‹lwá ¡qZNˆÑ9a«•6eq"{ R0VœßîÜ~ñá}‘@Ê`Ž'9>ö[ÓFäIýÇ9ñom¡ë”Ì,ti/[²X[Bêü¡Ç?~$¦Èoœ26§!¸-¼éÂ7ŒŸ/4šó…×§ Ïõ‡·5Úº¼ >Ž‘0('¦4™Ÿ{ÆÂóèèê …Ô>b’Ìó¦ý'â´‹¨ sbÍØ¤½ã÷í…/¶ëäTªï\§ÇÿwÂòÉ ]wî#‡_Ü8FÆ"úÁÊüCì9'ýª'q€óíFÇô¸ùõò…6xà¼2|m-,s““÷á£\Œ%0^˜È8'g`Í}|léû Ÿó—8¤¼ìhoù6_`œ‚/.Y'úùE{õæ¹” ò£sJ¹{UÆûg]ÔË|»ŒM¬écü†%©ýÍOø_œ¯­Ñ dë‡=Y46‡Œ¶÷ùyŽŽó§*zÆúÀ#'xáP_’Cø¿WìK Ž«OnŒ õp••0س[k{9ólIÈÃ÷ŠçŒy"…Ç¿š7É-¿ÑìyB"°ƒ íéx¨qxØW}<²Sdð÷‡¹Óôàš–&¾x‘ >5vû°Ñ{5qá5j¶¶½}Y?x»åÐêE#>ôá™âo>§ßÉ×;ϰ%‡ì9wz­Òî‹n?kq[²åq¸æOÁ^uûRsqEtåèá#~¿ý‡Ç›e?Ïž |[~ø ˆ7ðÝôY² JÒО¨ë¼¬îÁ¼ß ¥ƒ—Rµ|¯V/a»w’Lzƒ±zƒ÷÷S_à$ÑÍ&¼ ó´ö7mz—´ùVÁ6hnèÀæ6dúп¶êpq],4£K:°'°‰k%8ôô+èïëX§{$æñryp뀉K‡Úx;&«WΉ^+‹qˆ´ßûÅ'?‘IqØÉA= ~ù{¹Ð·B\“97o~ɪèÔý å™sžü¢|yàám_{KˆI]ïÂvÿ–áÆ˜üÁ#9"gØ~bç]‡äsz—Ëç‰úµ… ù8stˆ±£Æø Û!|÷lïý¸ª«½Ó+¨€ ¸úys€Æxs¼XÑß7ì ç±(xb@—j™G΀wËKbŽ.zÈç‡vä‰ñkd2Ëkž)ñ•ÞØžïI‡‰â2öÔd´ü:drÀ^Äo:NœÛT6ºvz}oÓ¿X‘‹˜mè¼ùÝ^ä|ãËT¥¼<ìzwÛ`Xâ<ËU‡rÇ•6ùõÞ#9ØÎ‰)óõæŸ'mã¹q­kÛÜyÐüzŸ«íííA—ÍÍÉ×ÿ³d@“(/íÕ Ãì²~\MŽedWç[œ!]±aßWß½%9 ';%ך8 gœ8k~¡‚Ðr•«›UWgi¡mýœ+‘cÀœ‹n.DŸ6€*ˆñÃ>¸lŽŒ§­{óû̃Úgî/+ø¾uÆÖsÇ}Y«›óUæ²} +|{/*ú³Å†¶ß¡•Ünàúø>Ô«û±ÔwYZ—ZT‰_°ûÁ®Ex•2g“Ø‘³! VŽÎ§yF£Ù·â+1#½X Üã;RtS–“ÈÈÙµ%žRfœY6Æ+Öö1Çûe,¼3–ÉÚrÚÃľ–“ÄB\‡i´Ë[#)™#;,F$Â6üµÇ׸ qËåÁÿ6{s²xI˜Ç…Ûz¥nTq›î°vëbrò)ÇO”ñ? ‰XµÎAÿ¯®{xÇòû¾9—Ëßc7 Êwç Ý`Ÿ¿<+Wó<€a±ýxÓvôÀ>:8UÉ»ö·ÿÞ®Œa—uÖ¶$ÞmëGÒ“ïãCAñ’ã°@¾ó7×+çw6Öú×Ã?P6tñ/3XSG(i)~}")ul•ážç•ÀLB…²Iî†yN„¯'Ý9n‰úFWÐŒ%ž`™¸T»¡ðZa¿>ž'/¼Š#Þè÷€ïLõÕ¸j«žEWúØ«d°f}öj¡”b~íé¿¶£E\ûTJEÅ'¶t.×È?qCÂ3ðõñ˜]mó´çx÷ 3_}Å9¹qä' ¼•*=¼½qðJZ½ž-=+ç¢UÌÀš­cXn?’6οÉwµñû±gƒ'yÆgèc\æçûjr4†y|yîHVbޝ¼Ó¯‰O.žZà‘rÉk>Égòç@§ÇšS'£(^‡IÇë ÷7®ÌgÆ Ó¡o,·¯ôI$ÍÔ¿g‹Ü…ˆñÓV>»ÎN|özwëäh\ã^ǧ¸œyS^õx9—Xö¡cÙizÛàô†Û”Q@L>ÌS&äl–‘ª-Ú„9Áò‡ü-ÇÎ9G?Â{˱õ¼ ¿Žãýk|P£ä¼Ø´:Òü>b!Ý­·è{ò_›yÇ­¶ŠiÜÓb,ß«oðƒ¶ôɺv«q&©n²öŽº+{¡o¶y’†²“&¤ä•9óB$N´p±r÷cí5zWè³È’˜’DH\ÛVáë8¢ý½òÃO@| çD޾▜ûÝ‹' 8úÄAEåM]?|7s¨[â>mý@’|«DØÞH„½Õ.q.vµ!]Á¶ ȯ¿ö­a ù^s6C衧 ¶l‚¼e¶:î…©'øÜBp/y—h¼¹èÎ×)bìÈÒ>Hö©[ºN “è–ñó¤¤ü…üØ×½Í‡7¡wb@ÏoG»1ª·O<°'§¸ƒ ÷Ìn¬É½óï|†Ó?é+“]’t=ÖòÆðß?þ+¬L\Yÿç·ßôÕÒA›WVýNš[Â[ ^èYÆ t|{ŽÁWòòÁ=8y2„²Šf‹.VÓ.âQun…û«Ç.öæÂ)§ÄT]ùÂw2Äíä%sŒQ ¾½A$¨ÿÞ“%¾°{ÇÜûÔ,ò\8%ÊŸ?ï ›ãÿäHº½\7åêÑÆÏù’Úähc LþÆY]wþêª.üÐbZÜI“PU‘.(ž|iÆqrÀ75åõ†9sÊÔùém@ዯ }Ëû9ûÑ<¤ÏÅ 8´UÍ«õWZ·ý+_k ¯¼Öæ ŒÝïì>ÈãU²|­±:UþÔ¤z7Y>¿öᆽéÑV±5ã®÷ðѽýH’AÆe{‰/šØKlÍZÆÚÙËŸ7 s†±‹&~É-²GŽ¡“y_²×׆ ²Wx®0f6Êç£<Æ…'sÃEm±JNÔa–ê³®ZäÝå6>©ÙŽ|&$·"ÁàitáÎìṈ1·“ËØäëUe Šä‘Á4»ÖØîE–Â챬_=œÂœc.€‡-|ÞÏV€¿¯Î•¸Pûºoág|Ì“$½¾dOÁOú÷ô€÷ó_}+·ûÚû]6ˆ‡× 9Íœw\¬'¬øEßY•«¢ê|‘9'ØsK´ÚĘτ$"Îß»þ2Cé . ;.Çðæ8ÜY‡Öüù5O=.þð6ÉÈÈØ¢ëYE§»÷u÷àÂùŒµlb;Õ:œ¡šá,¿Ô}UÐ@{í˜7¨â~ö@µÉuXIÙc±8ìﮘé"¾âD½;þðǃgF!KvH‹ûç_E¶Ùø\È Á„ƒ«àfK“ß“Nü ã‡:Ÿ­°_iS6) fN7ü½ka{_8Éʸ6Íwª |儨®3)i³ù»8ð¹…º/B½X2 ñ)À*± «§íå!#1O7±Ù98Ž mÉ̳}j31=Á,µ‚Û43&'rýÁº¶Í)úÐKáâ ŽÇÆ“Ò1ÇN8ÉáH÷ÿüú?~$¢é‚ÏV3©¥G›¸½p­›œÝ±Œ-`ðv ÚÅy|?âl}O¶6øå[꯯\˜#˜ðýg^Õ³ñá„ߨað¤£fRĨºŠO¶XJÇ9@×äLøÞ”é|3ƒ%j[jméòË [§óP ø÷áh=åˆ W…ÓÞbqw ‹Ìôß:rÚpf JT±‡…û¶Á£DN›lÙ¼Š%Êmià[¿JÈâQ½™9€®ßùòņd`‘=ëÙ&,°É“°œÐ½6àjª\(rñ’~x}y’á]ÍÈxGšÍ¹]êûUŸ5áÂÓ£hšz"u.ØÂxùe2_"ˆ“Èúϼ‹/x¶ùC¯éç.ñ´'Æ‚+EWön$Mæ`Ý^ 8?¬G|ÊÎkEº9q“/Àè'D>cpx;_–^|äž9^¾Ùÿ›Ñ"¦ñc»“-p ¶þæ€>òVä ϵäY›†×´ºÀfÍ]žômþ†Íç^„ïe7¼˜ +³Íܺ~Ïÿh±R°]lS¶÷(¡.Kíûúß<äÜX@±—GEÇàl,ð‹~2%l7öäÀç‘Ú“¯`rнšO–pÆØÐâQº§~X¼1ž`†ü`%ÿu{‚ý`m|är2|³Áƒ±ïœI"–l/VF\žWâ-΢"?ûBÚ)ÉáÓ¬ïYËÂü:ÇÒÏØ“¯ð¶¥à}Ý‚gç0ÞVgXô9_R±\8ùŸLᦦJyº^?ÅeL¹tLk±E™¸Ó~¯áâìa¶œKã‰{­²‹^ï¯\+Ô0û'k>=øêРŌ r?¢¤²ÏܸO‡÷³.9AFÎôˆ'¯_®Käw,ñ3ΉæÆxÇNšÒ±çú7kÛuýÖû+øØü†ÅùjþwçRr²öbŸýŒØÞ½ÃrÙòCvV–³{­Lü±G/#ª£ú؃)ô²2ERcãíü)¾ä@¾æN:÷ç|Rë䯀qÅ0{é>þ©<ùOTøa¢ pf7?ÿôøÃO@Þ„“Š8÷`‡"ÙI› “Ж €-m?ƒ•2l2ÛHŒëâcm)Ø&Á· Ö[š–`k²ÈZ²¥ßèçmdx§˜×'T%ÑÈIN]Ò±šãˆlf|[e<£¨8­›Aú[}žDt‘¸ÅUlSy×Xjüì\Óâd@ލq³ŸÎ7U1‘ a^nG¥Ìwò>”x~Œ•]p²µüá ‘Å‘I+¥úàÁ¯hÃS¸È¿˃õa7¢•«ãÃÖù?à ܠ똥o^…õ_,çÏŠµ“1#3ŸÆžßößP<làIV(ºúIÛÍ]Ëeë ç wÓ{T7Çзn ƒ%tâB7|cµ£?‹… c¸‡ðŠ>`nyœßÏZL×–‹±ÚÆhN‚#”ÇUPm«GÏæò>ù¶½è[W~(lÚ¸ÉýÑÌGuTÇr¬¥:_»œ[ÑIv0 v—lÛåf_Èïº#×·…‚~pó÷p‘Fò«GÖEKÐŽ¹ùBïäÞ‰*¯ƒÆe‚.c‘ý[E)ïm6Õ+öbʯ‹„ËÇb^þÝÖÜôØ¢UþY—á徇«ÿ)¨ÀËRï$+óÁE/Á nýT!_ñk–>€½‚½1¬:“"ËX¹‹úÃ1œ¥Ûp¢?»âú¶‘ .®#j…‰ºOþ±¸ùBåá5´¯÷R{?ˆOò3îæQñ;lÍ<›50³1q[_ ;@8E»ÈñÍ#ü‹Æ*¨§ ¾òÔñ9Έ“»e)Š“G&¯¤Ð`ÖD3G%µžX+÷"8;"koô®ïƒ],b¦_ãY~¯j#Vòb=÷rQµ]DZp4‘è‘Ï­Cؽ~Áä¼<Ⲉc?ãÇ>±¾ÈÁ†åÔ¥³6ƒ ÷Ì6bÇžeAüÇ–¸d«Ÿ¡#Þo⪯þ3Él#õùxóÂË:'2ÀHö‘;ž]#iœóÓÝ/nða†ÕŠcr>ÍáRè>\®GæýÀi zÄÿÃ… è¼¾ÕüKðœ/”0 ì<;NXÌ9«ªn7/8âï1ëhöò•j8ËÕÔ¹ÎO_//×kKÝñ¯³çsÜæY§_t¾6ø ˆO YÛÆð Ü;“ð˜²ÄÏ&¥7B4œ¸%3TÀi÷·h‘\J°¢¨æËãÈŒ²LÚŠCNôk²¨HòMN»¶’íÙ$¾8©¼O¼àäWº ‘ jÖo%tý ·gï°ArìFoY’òŠ©•*ãD1O‰áX–¡$æÆ¤º¬T];¡æÜsr–·–¬ø¯®çb/FN 愞d¹!ÍzË]âä;¯ {n4±ÿ>š,ãŒÒ0€à\©p7˜ž“i©Iì5Æqù^¾N>ý¹A÷}q_™È¸ñĺòÁ-/ø‡+”dõ›?$äË9á$Éïly"tŽÊÑÍWžìÛ؇˜òï_p!Œ;ik¯„§¹¢.?ß‹ÉtäÃ*oé³ßGv4YO!6¿ ¢>èyΘ§ôP¥ƒŠóPŸí°Üu¤YζÅFúËÓû¤ ,~÷ ¾ˆ{†²Ý«Z@Ó?´3ŸejêÁ7cS®åéV<Rò?Û¢ÆÌ èè&B)´ny㉯gï–<½÷»Ž¯kÿÉ^#Aÿ9±ØÕ%ã9ؘ¬ç °ò[ªÁ¯åhØñOnJÓÕÕ¹±¡›½hl÷ÏéèßçUP)qûâ2$…`¢¬rrT°3vø¥Ø>Uê¨}ì™"8Uréó¸H¯nƒ%k:À4RæM»,?m°h¥;knÞrÎÉ­¾SË;Ò—Ù=''Ÿ/ŒW^ã=_õ˜qp#®– k/mÏ"åX-ýU|Æ é2‘.ØÇÚYJ £ð˜þIéi×Uqç§_C|Á ÷ü\Õüq¡8ÆFÝ|¯O®ŽŒ ¹¥×Ôc»óÝ1”Þ]S¶¥Gâù¢ï–k·¸7ÖÓq ŒE“œõ¹5 6l(p;„¯·iÚø[¶©—W„~á;`ªï³Ï9RµŸ*¨âü.1&ÈÐ #Z)ó"Îìò¤×/œl’)6pÎØHNŽ\ ñé{¸µ.µ3¦o\3,ó³.Ï ç—sOÉy‹y¥ng¦ðýÇ~ÂI(oŸ ^^×E*ß¿MÁ¡¿ÒL:Nˆ‚ñ+³õIÀ÷…št}âÙ´¨lo¿zÃxÈ;YÕ)œq6©}¡‡fbŽèbËÿdˆ_&†~zó&×'Xɘàô›o{a³Û0r»·ýà ,Ÿ X -èW ë®Æa·>ÚHÊœÔç™JpÈaz7wͬòån+g½«#c•q/Ï6ÇÚ0Óÿž0WÅþßþ_ôõtع4¾dxÙXáoó ?Š@?hÀ9¼·Îæ×¥æ\K9A¶‚ÝŸº•fHîgý–‹0˜xCR·a ©ì³·$ÜÄÞL¬V—ÜÉÑX ‰–ÏŸœŸ¬•ñ[Ü‹þÑc¾®òŧa‡ ]ë0/®ªÅš’f¹ Ÿ>ÿÈ2s?ØŽ3­]~È?<Œi3â"GCب “5;!¶üQ‹rÃÜ»äD}ÌÙ~ÑÇ.ùä|E¤R3Mqö­!Õ =ç ú™'øËp¬Q§¯C%]‰ÕG{ÑøVg€Tκ³:™SÎêðu—€¨€Ã¾•1ESZæ\Ÿ’3ÎHà¸9*ÎÇV›öl!Ézbž¡3{ä¸N;ù:q ïÌGÕùHÈøÁþçWó²­ê[wôƒm*ðàdÍs±i>[ø›ÏŽO>x÷â—ŸþçÙ«:6ÂZ6ßæØÞ‹…=Ló"ìÇÑ»a© ÂçÏБMR‡E^æ^{—1®âsºŒ\Æó;ñ÷â5‹ˆ,,~¨snÌ~yíì ž¼Ãƒnˆ»« cSßyaý¯í¸á—¿@—|,Øb—})ºðô; hK?YW(óë¦.`+ùÊ: ¶ìxu.Tqndå¯Ã·<ë—snå½y°1þ‹³ÌfíùHàY~àInÛ7ß\›œ=@ù &ÖUÙÚ]†æÚ‡KŽø]èÉ [ª 9yöHuoÏCÁÃóäu8ÄÄõ6¶\p Y¸ÇŸU ¶Ôþ±üð'…7Ç Þ.IeÎÑi—û9܉…v&º…O€€cj[FƒÂ"¨l¾6(×*pØ•‰3ºÒTŲœtT<9$õYÝV¾l²6Æç>ÁL¦-U1‘Âå#;svéW›áÿñ ½ÜïGëö Î{²òÊÑ–è麶ίqÁÏÉu83Ñ–#ÇgÁ4Ž^`¢Ÿü%2u^q3 94À§LÔüŠQã²m ¬»ÅÃÿèËl 2ÏX:—øéD—Üüîƒê>‰Ó§ñr‘̱8sÜâ0×\DmHN–;‘æ2%qÄϤô£Ï©oÅ‹šA¤Hĸmìðˆ~#{c Ëéá ¯tÒÍš_„áÏæ¸ëã°±&7×Qyò‡6b‚*!0»(`N|-œôü ^ÖÏX,¿Ó·? ‰Ûâø›ñ/=öÑWtÒÇx¢­²±£)¸Âðý J}qfŒÀǯUQ9cKä Kz%$ÿ÷Ö.Jºþ±”.§1mk´`;w&f±±,oûÅÇaàqw«¸ã‰Nð¥oY|YÕµ¬e]x1vÉWvf<¿®+ð7¢öåñ51b9ÿì¿ê‡î|Ó^,tn¬ÉßÉ™cD:â‡lqn\¬œ˜ÒöQº2_S1;,–á[7žmÕŸ d–ºÐÀÒFzŸ$ÛMâ×ñ4ìEÉXPì¢óÛð‹ O9×¥œŒÛE@Ó<%Ë^î[UfêdBâÆOc`O%íw,éÍX\(†²úœe™|ö,·z\2¿é‹e2/„rö<ò2]Æ0¬Ì\Õ´t‘ä[¸ÂcÒ&jD;ÍçŸööp®îPD†*‡çÍ·mPñd¨Òc ÿ¿z븤ÇÀ@ÕV›19æªËZmöOŠ5ô¨-ÀÛæõ@Ør~à L럪ªÛ…öî@ß:Xæ×ïøaä0„̼ܓŽùçs¦ä|Ÿu3ÈNæ¡J^T -Κ‡È(Èýø”ZÑosŸ>¢3²ÅѹòD…Ü}ݧ íƒr¯9¿‚­íêï_•2¼ÀšT’•ûI 4¼ž¥9.ÈßWDÑ[`É‘‚c¢É ƒ j/ZÔã>"Cw¾XÝàÓN–µ§º9 &±G’SµmiªD¦~*Í¢¹¬]L]¢Y_ŽýÈOÍŠ·¥füe^yWç'†±ž/Dƒ~ãTûÄŒ \éÆ[”SîVQO.š¯=u Œ²6Oˆ Þã‰Ê¼úÎŽd» Ì>X9ylõHŒr@¯þ¢»q_;¸ñ}âR³4¿Ì@°|°Ê{qxì¬Ã!'¸åà= ¿Å²þ=ñ´ƒ'Ã`g+#+_òi2lP³Š}‹ÈâvŒÍ€µ£Å+>Á¾¼ ­uW,sZ ⇠zîÿçùö8;ÉÙþ÷Áòõò‚²O(po~¶³¶¹ØtX‘9¿VNûcÝdO¯Ö‡~‡ýúAŸyóÆŒ™Ý–—yKºL»Vu{Å=hçêhdÃ_3ÉÄcO8W¹sŸ±6ÖÌû¡½äPmÈIF9·*¨iÛgìˆeÜíäxyc{n¦\æÜ‡¯'¿vfǸN®ß|F^N’§–^Žï¸›U±§ý» {÷ ˈ¹NÒù–Øv<žHI`ãÝ<Å9­‹­Z°GlÐ]\â µùmçо§K>=4ÂGîœ$óÄ9h› yœí'ùÜ·³!þÁ˜ˆÇ¹ c˜ç jg,¡§w¼(ÆI­íÁŒã¾³/£<‰"kúé+¦ôG7O/’ä|&™ÿà¦:þ¼wSç«ää‚`ï€å=¿Ó&®Í©¯mç'(ˆÞôO{²¯ÈÖÆ&u§?.ˆü¦/Z¬/ÆòèÒ7û·VjâÍ;q+“Ä£Z`ÕÖ2½Hó-¶)÷ ¤ Øm°@ ú°ÝÓüeÝEÇc!,‰lñÎOç´ýHIÀôhÚJ¬wNÞþƒ küMà“*á  Œ'Ž›­Ì<8d;ÕAó$ÅÖžs´iyžY¿­Ø:íåº~H:e-ýÍ‹¸ÂWÙ‹zµO;~§ou5’‡Úš™,­„~PÆÁºômO”F,çKxÚï¼®D•z\vŽæÇ:û.vÈd®ÇŸ{t¸9ªNžé;?Ñ¿kv,ð»ü½qÐož‹v nÏqsS #Y.Ûž11¾Rû÷ã?áDÃݦdÖĸ¼ƒmœÝÿŒN‡þ¤·ÁN“©—’e* ŸäŠÅ ÎrJzúåY+%qzLÂ-TË™v±/HbZ^êï;‡¾èûXªÈó ?|"…1§æ¯éN ÉOo]p,LпtûÇÅ­Å šŽTpøIŽ1Hâw(dðE/\›/6^ê!†NÒW?öýl‰Ë< dóyTA<¯z¨gòè6·½C‘^åT„>;÷–4mvË·då]´D¾W>7ñ=ãègø‹_Ý?ëÝ)Sƒ*13Ÿ@É—:Ÿ :òÎXRãç#?­Ú0•ïuƒÅÛçoœ‚T rjË-x\=›s¬Að˜WóV;ØñoÎuž82:RÃBÜñ"Fò91PÓÏ“ot p€¥k.j‚îo³¬zð;gzœ}.ˆµv4ám»±‹†}áÏí4a±¶[ðcuøís\ Uó±jÄË8ðrV­¯¶Ö•‘š‚=<¤éüJ6½t%—uøæ qü Åâ‘âæÑŽaÃýí‘ß¹Â_ÊÑËO=õ#XÕÏœ¥QŽçñé3'äôéÀ¾´1èaýϧëšcæ'›s añwÄCµòëyŸý$>rÁè&ë { š.pùÃsXá Ë‘´Â hëûÈd®7Ÿì¹ÇTõ³=³g,¨£ïتážçA óݼ«;}l}‹– `•ã¥hxI¿ç‰êôãþ_6ôá‹bŒÖ}>PßåYÈŸyu ÷ŽC|±xÃßt£eÿ:dŸðâ0Þ¸Mû‚Í×ö5€è[ e‹[÷ÇŠ}Jó=ï'o°Êƒ’3+óï äÝ­ ª‰ó@AOh\ß\LQµ7fx`áR5çHuš™';rt¢.çQgÍm]³°³þúxöüXøipZŠ N¬q œöÛ8p0TñÚ(1ç®y²}P|´‘dÎÉ£o|ñÇœønQ&šûÖÜÏ““ÛïÚßÎ~òoÓqÁ'Ï8âoJR~ö=Í™´÷[ÃÚx)È<'GíÜÇ×Åe9õ–†.e Ÿ/ûV?R¯#²£¯‰•}ì?o‰Ï£«~Ù÷™ ÌI5ç 3I§ J,uËËž€¸uýÜ{.ux¼xèîÿí†ìÉ ÞîËvÌ/àè.FÜ·¼<¶húlÆ·æg~“Y‘rŽ£Ûœ0¶Oލï>MÞÞÿïïÿ=TàˆÌdίŸ4GÄ5~xäÂ;ØòK‡ôÜVÝ9P‚¸¬…ÕlÍMÊl'+ØBÿ^ j#Íæ-NçBßò''’Úûi·&qåïä? î1ùüšoy’îÆ"Òµc8lZÔ™PûšØõ9Ÿ1þ_WL’‡eUÞü&Lð¦MÔ7GÔù5Àá–·3/wýelƒ~xB_¦âšÜÛþ€669^¾ÁkÖŠGX¿ñä1*·'vCwß÷§H4ß`Solj õ§_t?}¯_Ö¼T“á°‡zÞH'êè›æÏHÎ ûZ°™nb†›=ÇN fE>”ë]™ùÑíD‚”.k0ûÚ¸š‡×Êâ^n—Oìÿ£9·=J/1u:gÙ÷yK¶ûÊÕãÆB}Êb¤ y²çÈt‘Ê~Ñ.ì{z‹Ý¤Ø—ú†ÇœA§¿Îq;&×Ôu);.#^Ø¿xgäÕfæ õÅe¼îñ¥=GcHGb]dè‚é½Ü¢ôÁŸ}J"ïÛw/¢G·°êóMïX-ÇΘ7Ûä‰%ZÀÁ^Ìôß¹óžWÀºë,qá‹$Â5û+¼³áöʵ5{ù¼cM\¶—h·Gž±RŽào_ÂæÅM·‹Ýžx‘ë?žÔˆo¸Asó\ìÑ%¿ëÏ÷Yü:JÛÈÔö·|“/ zŒMò—<à×ÑŠÄ{×þ¶›Ãž}[ž¹¿lâûkYþÛð§ u~ð3ìɇ79m¼à3cŸØÙVͬI4SÀ‚øö¤6u~)È_™}WF¿cˆ¢sr|©ü±_¹ñØXŽèóWnv³À£qÀÿE£¦ç ml}^h§ÇÎúÛ^Pâj‡{V×SómlÈ%uÎ ~“pgpQ”û²x—Oç÷áõ¡ ñÔá>»:[xò‹X,/Ú²ÁOôÁN¸¢[;{ÆÖ±„ç>kKÆŽŸ8š¢ÿûÿþoö²¨þãñ‡Ÿ€à€ñÎÛÁù¦ú(§í–8ˆ¤I)`ËE,ùC“@Ó?²V:9Mö3[í Ýv£NÌð—×Òº Ÿü9ž¼î„qleÀNqxËÖ2©ãß<}ÊN.»P<¯hJÇû(þL›7‚jsD²ù~^ID[EäØU´‘ÊöTáf: }¬öÏA=0¦¯Gï×[ îG™ëÓ~ò†r™Û7Á ¯\.ãW6Ø‘Þê_LæC[ùpŒÍ|4I³YööØ×Å2€[Û:ÞëÎo°3Òèš;®\Ï úô §úç—Ú9§¨îy`râÿÖmòa‹%žP³Ô¹qÛ’HßùÇ;þ\¦*‹+-¾ æwÅœq_ž—§|F%9?~½Ÿ¦¿¹%+œÐñÚ53ÝØ"#~kªÊ9v_B—¬;­æ³íD‰QºNm[ö:þÔsãñnn`gžóΚ¡Ëê@IDATH«ÖŠGݾ5³:_Ìú¿sâ]sæyÞÕ'±Øá÷ͧëêÛ;z{’@Ü)]Wmžk c%Îå≫1¨Å>²ù·y9)øwo´ŽÚ¨™ƒiÛöà*O¾`i~…ïµd9q†”-é󸸅«ð¨®çô£ûÉÚÊlŽU ý‘?ý=cqòYW§m xÄ’&ž¸Æööî‘côô€î›+¾n±¼úТ¨/9 0¬Á’'VvR£-e0ñ_lm_Ý;⇱øÓO|(ëOæá=xø›qŠšø»¾@cMöêÁúÉïÅáÙc¸ ÏçªhÒW›¾‚"mUð›s’ÕÜ~÷5,À…1Å<ÕJƒ6¾aJ ·?ºmGû?ü$N’;Ða-\ñê¶ëŠ@Ɖ@vY€Ø‡fŽ#šÔƒÀг‡¨N—ÞÔOàí'À×7<‹}:—Ð3Úã ݧÚ÷}ì(ÉöXH¾ÍGM·Ÿu«Í$ƒ‰÷äú:]Œ‰-r½Œ r2f[™¹5†qgtwì&o1ÖgÒÊ^«4,½zú|z\â9Ç]D‚0I¿y ·wËXæÂ4ù6÷‹fã|»£ë…VÆ8£]ó²\©Œ—ëÄëîŒorU, ’=›E-ð¶ çÈ8ÿ­OÇ«`¶ÖÝ\Cû–-j©3£Žl?ñ 5‹xâ_òÕE3º1—}cæ‚Ai8}2w}Z ÔñÇ娹á1"f¥Ãî]]Ì›ÃnƒØ½y +´s´®ªç‚¾/7û—Ú» KGòÆêÑp_õÇ-ÌÛ¢ö¡ïøN°ú¼‚æã™û`Æh.1¨÷­òÞ ÊgÑòr²ñYOG×3ûæÙŽŒ˜ƒ£½©~u˜+ûp+9qh•ZûÉïpÖ#‹oK‚& =q²L½Ãö(p¡#ûôi¬¿ð¼¯l‡×|oÎðä~Œ›yÞ@ìŸq&ƒ>Éûûvû!Œ=ë”–'·ôŒð4ÜÎü±Å—6ÁüùLÏ™ÚB22ÏÌ‹UÚîwy±Š}¡Š~Öú»¿ƒÃ)äí4Šßž±‹V³€›&/á…ÆäÁ8:ã-é¾ciî/:wýãKx¬}•…ǹ ¹U¬SÅÇ×|:'ˆ1¯ë{ûÄ®+Þs§NUF· s1˜¾q£}õ©½ç…WFÕYñ˜½&DCÏÀYßõ빵ݥCiŒçáq­h­¤½ìyãß5* í[ÝdÁ1蕚·\[b$'¹XÁéËÌ´!l©š6Æ©YO¥´}¼WÇëàò-5ëëx}«/ʶÅAn+‹c› ;ÞpEÚN9˜ô,þ¢K/šàø;|@Â^ó]²òö-Æ0ˆÙµMíâ±'zn¹‹5ˆogÚ¼ášV‚x_`P¤Åî£ç ]ŽAk˜`îÉëø:[ÒŸÏ€J!ØRŸþöq$Æo‹s„aý²úÕlº(^»<”½ü8§ÒÆÜhó;ÝDU?G†¾ÍÇ£¹"5—Wøgã\–1N]GŠ÷ÔîGè:VÔþ©¯O¡ŸqÎç6è3”…ÅV}ãŠs¿“î7¶oy±‘ßÅÅÒ6P{,ÑsΉ,cÁÃÚö]lê±Å¼èùZ.G2ºue]|W}¶F"§ëŸ/=r bæTæýýFÍðàzƒB¾àës#öÓºþÐÊÞaõƒ‰çzÒÂÞ¦jmÎÄ"øÔÑççîôø…? àÓ¿®ûK hÛ‡äíØä1˜Ñ!¿ÈЂóö4óôõRýø!ã„ß•Ý €x>A£mXáAóFµñzåí  (Qu{ëÀDªÊѧ_?‹Ñö=à;ºèЀ×'U³NÄÅ6Ik«&1y½—ó{ÇH|õœ[Ó—?xø;~tÏÊIGý‚³kµiûÉ<ÆB€‹}¨“Ç`³Ù«•¿ÓªÙ€NÙpž¬…c<{àÅ‘‚qßÑî >=çÌ-\§ü8ãâ¶ä•B‰eü±¿{ó»Ùà?ü„û—íW¦’ß °Çþ7ßÂàåé¸:9à¸ë…¥ø–‘È‘˜†t¿]äøúœm^›ˆø¡,GÉG'º%XŠoÂ:¼6oœç>17òø­½°ÐEÉÝËæs¼Ðå]†\ÈFr8..û…YÇÝÅ|ž+cÆÅ¯æØiGãk›pÁ;s{1ìICbó~áÜÀk‚ˆZíñZ}mck$÷{žÑ„Eʸ¬Í£y5æÛŸÜÓ¶Ñ!Ëæui™bâZœ²‘ ÚxÚö:pNv°±.1Qò‚âÛ9*O¸Pæimnd ?aRŸ±Öð >ïËÊ8Ò3ãÊx®ý>"›œJø9mS ?làA “ÓG›ÿm]-Ÿ³]Ü QHÙ{Àt!Ž'Æä,Ú×Ï5ŠÍå¢ù»9¦„xªèmþË—0¼%‹Z;—Üo,àF®á½;y€Ûx#Å×ÚìS˜ŒçWÝ·.·_î¼àqùÀÒg˜šü^Š{Ýók™ooI.ÅÃû­úeï>]ý#‹£ïùÝ8–OéPxøåËçMØ£f;^kÇFVþ弚¯O^NOžËÉr Þä€ðàäèKîÁZ¨/pÆŸÞO;ÎáJoÊoçeiËèä kµÉ«”V6Oµ‡„~‡x@Ò°„‘þ-¢)]þ˜‰+ë™2 q[Ö¶qodØ-Μ ^ÛûÕî6Ñ!ú`ßy)öÖÍ>›Å¾²ñÃö¯þ_ >¼Èl‡á|3Vg’$Y 袩#¿'Äq¢|°b{öé'‰UŠ.o>rA›ñ|åpƒW©†Czž9ƒ8ë ?ŽCgPŽR8̱`¥o~xÄŶۋÝC~Õ ž™3YÃB°q%Ž åú.°±™#~X⃦–ÛyÄùrD P ˜<>ò±rýV†>ºå^rð) lôV>ýÆîͪ„8Û釶}Iù÷{/`N6{üƒáG9!G¸q[ê»~Bï¯ÿ§ùýe¼¬üåðìŒ_$_šò§_;k'jàMƒVx¾ëó^ßLœ=q#{¸¸&¬ñ¢?1ç]…$&BÜå¶Šƒ„$…@#_'UÄÓo~ýŒ=~±aì)èò#±¦ì¥y†7úÁZ¶Ýæ…IeؽP´%nÈJüÌ×½_´À³¹Ÿï&KßF-=ºàÆŸ÷žBš*Q¾æ7¹¹9–ΟhëÍÁ޲¤t›jë™ÕÚqðµÜd »ÌÑËÃNYŒ•2¦zæ.ù{{}x£¯36¶-’m©¿w׃LÿUNŒ·í½ÅÚ`gœ±Ã{ÿn ¾É׉I¨†éø'{^ñÜ¿ó$ú|ñ”÷NÅýò̸'0x,dl  à›b—x"ßø‰‡£€,ë>< hn6ÏJ*”1´A8œ{é49¾sœO©žØb^^Ϊ*\Ÿn~/·Ißåùá»Æè²&¹õ 9qƒæ+àø3˜•™Ú¦„„bjÑrßÁ*nÎÙ7¿]¥SFìü(¬äW<»Nñýüî(Þë8—›ªÄÎ>ºâ8Í®묎”ŽÈÕ,–ŒWÍ®wé‹Èø_£ï×~ü 'þÐØe¹¤º9 q"w =’2}È%ÕPÛÚæŽLq²q¹ö4m¹ÍÅǸ~¦«g³çzE:~!Ù‰k’h úËÌ+qp´Ä¼d!Ù¸ ûm &ýÔÐ×ÐGM–rrËUw_ÜI7>bN‡§°Ø¸9ÇH '1%~J²ÇÕç{|I!þÁ%?ü¹OíBéb©cÌ‚ëã•Ó|Š9¶JÚŠ%-͉}¯»ÌÜÔ$L7q3 Ê#¨Áïó!Gº—«H9ØžS¹ØyŸý£ež‚Ý…½/„˜Ïãîyr)?úÉ×ÈÚ˜hNaÜìÒ*ß'š'#ǯµrȘdžx°Ý-hø¤nóûÆŒÜúeck:Zn»ÎæœøYü˜Ð·ûÇófÛÄ‚ßää¶“¶¤.ØR•ƒËÕUÝI‰ë™»ê/ ñp1b3´]sUAsc{Kr¶KÜ2±+s¾Æš‚Z?qe|°AmËæ¤ØÞg0¼HË9 9fwΧOÕÌ3·EúîlDà^+Ö¸Â3¾%Qÿg=7ðsœOœ˜º¨’¶#ú‰i tL6·øåâß^Ä#áÂØÑ–¡ýäÖà\ÔÏž)Ö‰ÝÈdà=OóÀöêÎ~ªyA<ÌeÆnŠã'¯éÈí¬º¿Ç¢gÜ£ÏzrÓÉΨç æPâ±>zÙ%^ät|±1s—?éUÉõŽ2éð9ùÜ9ç+áerT3Çœƒd Öìý½¯çÖ0 Ýd6âôXfŸ:†™Ò&]9T%œãÀ²—iâ9«Ì`h]¯éƒãyá”0”ï4âKu󞰽υVW_ÿª‘ë¹12ä[öÓüÕ=ˆóK®ÃÃ÷2þ^‡æ§ÿž% ç+ê¨zޏâùV´›{¤•Рã“ùæøá‰HÇ`GNgç¡Å{@yŠÏo»¸¤$wp(ߊŽÇxCÎxÐÏþË^ãq[?Ï zÎ'.6‰ sRÝ.´ïRýÎ÷{díöÖ¯ê9‡,Ã/Aµ-dO:žù‰/ÛàtÆ*à‚¼PàPm[ 9{K®DFÙ‚à Í­î-íuN°õ­¢è„Ñò±ÕÏï~Â}¬_¿èoŽë8d½¸„]g,(t“¼“Ã`»˜c&Nòʰ?ïQöFØeToÀÂÉ¢–*]ä8=aÝ ÷£/D $¶‰cêLJä çÂ11Â#ºiÃçqoº¯º°„ÚYH´Ó»ñ÷&ÂG…÷D@? pSFhsb!L6ÿÝêámõêæÂ%x,¬™xç‚êxÁË<ïI™”ºrpâ “½¨ÅÏ}çá­œiS¡Ú˜RðKL;ž,ù‘ã=¸RgóyÍw¹J¼åƲáHÀh¾mG{yI*ÇyGŽ#9ëX;%-»ú]_p›œÁß\ÕÆ?1bcA©€9Ü€wF œ„Sžt³–è³¶þ–É¡z¤ÐÐX¾âú”Tj^óq!3æÄD»¯«ã9ãâ‹-:T>é‰ðJۼ͓qÏþPùí'Q“ó¿8œïÀøø|æ¾ Q0ònUr îÝ|Zß¹?ÜNŽ‚e.Î~ÚÄÄ` ˼åëŒ<õa‘â‹r•ÛÃΔ\Ôu-Ìž ~äŽC؉1²ä[=Ä1ó•a­~¼‡ã£;ÇwƺòyË©—+ºÄZ¿YÆIž<À¹ÎøP°mîyv[}z2Ž«øi6Á¶•´fR yq A—r¢…> ¼„ÓüÝä^‰Ã†×¡cSû·¬eÓï‰3ãƒ_rpç¾%ßø…KäÁG±ˆ¹ÿ *æ)»ä{­œ4g`:/oÀ룛8^öžÎ!ôôèwl+ûúÈ\ÄU‘{åÃË«|â|”ê3o:›ŸU‘ }ø¦4ßN6h1vþbGåä^#iuÛ †FK1m=w/!®äg挠3¶ä‚x«opxLíd8Ïç6'tŽÒüœ|6ƾ8$dæM‹s-_;O$¨ßên[àðÚü©Íy!YŒoÇä5.d ÛØNir[~›þA½¾àgùÈ¢Ûü_å’¹nÛÝëÐùOcêP?ØÂ½çMûÚ×8h36”ɧÝf¬îóåÑq"OxÀÝMÀºKí•[»¾±Ž=ÝÍ_Ǫ9ÂvÆlÕpcªìÜŽFp §ŒÚ”ì øÅ¹s.Lk0Vª—}ŽÁ¶ÁsvzDNûðÎÞà¶€ÇàøiæH¹ø:gƆé‰Ë1ž¿û^YÒlÛøç‡w¿áäû±ÿðGïÜor+†J‡ì£¨ý-X]ÝBBŽJòfìcËM©t÷ÝD‹0HêÚ©¾mÞ:’Äê…Çu(*½½^ùˆˆ ô#U|Ó–qb¡Ît ‰ŒAÃA¦^ÁF;÷ªF_LJ/ÚδdÓÜ[d—É  Ú¶/Pé€V„梎Q5·ˆ¶'6å© ¯wùÎYPÅñ °rÇO?¯ÞyÆÏ£áE?ïöºŸ…,ç [¬kEg¿¯ƒJO*o|cCÉØ…çôh.Ìfg§ùš¸Fïä ^Ç1Ÿøó{<šH:Ç«Ÿ¬œ\ÀáÖ>-Ÿ 4Æ›GizlçÝåíŸ{ŠŠinNÏ3A¶½yH¬× )ΦéÜ‹×è?l±SN¸è¨>›KtwôfìÂÙŠåMB¤Ö &?éÏzÉHâû>± Ö]Æâæé§”95{šÆÇsòùˆQ{‘ð kÙº[Ö¥Îq®Ø ¶;‡‚ÓM¯¶¸!j|&ß\…CôáN»Çagµñ{ò9¶~7zÍá é`÷BUøzŽïr¤>Üì ä¶³öÓNF‰3%ö+Áñã\X.=¦rˆ£ó‘žWži÷¼s1¾èÞµ%'ÜcÑíUµ{{Lç'û[÷±$Ƚì±5ÄàÀÃ?u<Â(ä:o¢7ê~rü] /럸XyÁN–ÖùæhøØ|Ù½×ÕÚ6Ú|—‚ÒxÖW Úʼˆ|ò—±ðô7Dp 6‡b¹‰8üë¹ÝèPݸ½ÛÁí÷#ˆ÷œé<²'sFlžhjNŒ¶ÎÇ€DÎýâÈ;Ÿ;T›±@¬º‘¼glšß†÷&<›Kð¬ø?êú)è‘mNbŒ~Köe}B¿ç¯Hâû-/âzåE$)Áå{qôÄÏë²ÀêŒçg”GÿB’œ|úv:C㛓ey!‹ï3–±—Êdû09ó·qŒ¥y ;ÐרG_ñßO,µœøÝ…œ0îØ'þ¬Ð¶_õ1ï›?ÔçÑï>V?àã5¾’#ÏߪÚOŸßýÐûM“W”–ÉÅã¤Ï`z¼ƒ’°)ÖæPc3bñ œ (¬-|ôK‡TÑ.V;‚;'Ƭ· œÁ/ëÒ¢C.í™Ïüëžg}Bè~TÏ̃Ññ“ÈØ$wŽ©mhÅ9ð( ‹.à”:-ìíȽ3.¾•DudèèH±¯]“íÇ~¸*ßÉcCòóL}²÷6‚i|C» «ä^ªó1¶Å=æ¹]|bgEu 9_ö}5<Õ¦ËëeÚ99ò;‰ƒfb\ÅPª¶ùŽêÊ®ó2vø¡€£ÇŽM:u<ùGöˆiíØwvÃ1?·o8†I9ãfç›ôÃެ µqon‡‰q£ˆ¹}•‡ñq±¼&¦iÛW(¬mtqæŸe\.÷Ÿ°Gçö…úáz}/Øâóyf÷„â"m•“7ÅÙá[$Ûý^\°ßð(H<¼_¦Óù‚ïŽ ¼.lÔ€ªoö¦®¨ôløâÆXö‡ßTàæšÚ­ç:‡0$¼Û¼ŸŒÁ}œ´˜D˜züà5 «˜öYjW…gqr=~誯æ#zsœ9ƒQ¡NÇT„¡ºÓ~ì™c`¹uÀÒ] B­%Ó>Û›í¶à‘ýôFÕØÈB [^øÓçžú^ν|±Fkú3–•9Û!gøã bº•*S¿çy™§„U¶&ö­ÌóDáÖøúÁ™˜kaÂY?’ÏÕ”‡IóU¢¹³aÎ$ù¼il6kàÜÙ›¹”Ç_{~÷ ˆ–,/D £³Åòœ( Xn!æAäâDL\談.=˜„¾x¢Ø Ôùè{ƒÓþUÿ#oä"Iâ©Åa6·\\æ; ÐÁ×<ÂÛ‚¯µâ¶Þ~ƒ‘Ðôc—>‹Ã2Y±r!d±ÎrΉñ+-b{lö#9|JwƒªC›b[ÌÔdðÛo¡»mlÁE5É/Jâä ܱ—~ï?—iÛÐ3òò“v.ðœaZ±7šÜóI˜_ˆBY¶Ëþ©+1ñô‹‡JzõC;~Ï­8ý“ÉK2íºü k}‘Ú{¡‚žÈ(ÏÍzÃWj²ÝOÜ2&ÄàÿLKhË^ZÖçàg ½)ºÎ¸Ï&f€«ÀÀóYõGîi[®ƒŠñå÷Óu› ~z„¾vúáÌöòÆÁœ5¸~$Çñ(Ýà±»9"3ä½Çv®Ÿ}ûR°“SžÑÎ<ïŸEÆŸ…æÝr®øÐÁ®ØÜVã¹0¾˜CÜ—œ“bòî|í\êiw`wÒkÐ VrÄÛ¦6‰œjîF]ùnö£#ëîí1> cgO@Lž;J°f¬ÀÕ¯ž˜Ð×CùÀ_ ØŽC`1gÐLöÂ×Á …G¿­çpr”üãƒÒ±!½ÔíǛݼjßäŸØìSúlÎÉÈàU<ƒë°s^u8ó}=È2DÜ[ ìüIÏ´ŒƒD¾È‹<|øSõ‘açd<È5¾Úæ9ëC¾ÁÅG*ÜDgžì1j3ßôçÊQr>ì;ëýØ6ƒ‡ Í_s4WÜ!lÍæ1R¼GÎ>‘¸µÚÂýõ¹%‹ÐÆšã©;’3¿w.„Õ<]±2_œÈRºøîš‹±jAæH†—ù16(Né½éô‘[Ç—íß{‰tÁñ÷ Vç¬C‘3a0%cA? zö) ÷(ªtì›+ôÅ5·¬ˆÉpE{(¡â’˜éÍœ`ŸÃ“ó¡ùÄHOmïÛÒXcåÀ3ó¼ä[v’oš 0 ÌCÂÌ2é²²<œ9¹ã’|â+ü°ñb«¶~ØÓ,Ç’rP{÷tˆàOÏÞý=JŸm†±r¶Á³™*¤Û¹P\`Ñ›X‘Ñ ÏöÅF|ÑŸbnƒëýK ö%9~{·wòCì>ÔÈÏܦ»caðC_¾‚ßÔˆÃ5x¨ Çw’:˜ó(°ímÑ2>³!öÁŠ.G³c»øÎ¤ÞeÈEFò×0“μŒÍØ{58üâ3/2oûlº(2¿\ •Þ§MŒI/H) %šä„ÖxgdÒû™ƒ•Œ1¯>9¡Þb¬á ø=vŸ~Ï÷:g*ï ­ÐwðÞŒ•þt"hÓ™Þþò¦ ·Î9°l³q?Ö%^ ñ o³mhR_,!‘oNyñ¢{Ó‰íZw`RðJîm nõ|óäÿ¹-™óEþ0Va­t~Ò‡ÞWGسÈÿ¯sȾ±·Ca‰'‹bƒ^½9ßtNÁG×;W9Ý›•„‰ÿh‡|?ÛóbfÔ9ñ´àNw~3’_‚5Ï»ÎåßuØfºÐ—6úý‘kœºó•ïøM†tù®ü²?ž5 g•žÍC¾r2ÆF^Ì­Œ¥^¬/ú’o4“Ûb!£“6\Á¡£k^åf¹cö{‘.ófFCûšœuÿ@pcE“!ÌßÄ]?ÑE.ìËKjÍ=\SOü¯ó9?wi>‘ûhdMŸU öƒ&Éð(o2B¡ô‰ÛÄD?q½–ÊË¬ÑÆ‘órzØ3Sïø¬Ôâ íú)¶w))µí O8‰¶fÑRÏ´U!?¬»® ”̃+g•úrcÙ/’)äµí^\ý¤Öíúâžæ;~Y£y£$9±/c®P‡g×Ibœ?’Á3WxZrX‹¸ÏX©:mbfÝ]9SòbßÚÊ[—Û/«ã ›¸ªyN5ó6åð;¦‰²;=D=EJ ¹gºq»¾é£­§šUæøÕßœ±zQêXá—9Y}¿Õ^Ò8š?u˜3#Fi>ñéu¦J|ßkAèR/¶ó©ÚŽW²òœkW”[¦•´Ã£¯ç» ¯Î›ú¬ÜF{ &IUõÍüU'vÆ?ˆCÛªáþýb$„}köÍíyÆŠ„ liª}¹±ÏÚZ_:å±¼ðÉc|i¡‚}ä8þyy÷ çÉ6äëdÏ»–Ýì¹T 8Nç3I…ny7|ëZ_~é8‰Sß4Q™Î`ÑÀÏrÁ™¿ÈŸITÏ&oÒìw¡Ðí4§Ã$•Z?þ&FkÂu]èâ{h„O&Mbøµ4fÚàû-Fêú LŽ–y" ‰nóuäáA;cuþž~Ú, Úů¯É˜ÌË›iº}‡Œjû¥ž±Ef4aùé¯X;¾°ËH¦f…Ñ¡’<ÎíîÅÈe}i¦Kº“5XøåI»úÉqx'{v5ã–žèb[Ô·Zw]‡±µQ[ØÑ™—[±ž±/ñ%IX2¯–)*åɈðG¼›ÿò<ÐH\¯k´Êy&‡æ!¯ç;¬kQn>ÅÆ1Z"²fì®?º`9´—·”¥zÁ)‡þØ_jÆ2ÞÌÕ㺨v.;×ïyp¸ÕÞ”‡ì_°ñ»òÔãe|a1AÜX+ÕÜœ¡!+À«œêaE¿|w?¥Õ¹Í8èS¤™CÀdØgîC¾°Øš³µŒ«Ãæ¬ùì÷÷ðëbßWmº­ë—w”6Ÿnjìàƒ^~Æw°ÙO_¿óñÈAÇn|ÝßÏ3—Í>Äcâ&.·ãYTŸë.‡'º”“kƒ½9‰aË–¹A G.ÑL{Tý„>­:=R²?k4¾ëËüS—¡vwÞç®8¬t;VLx¢ëΉӥޜ, ¾mŶù,Ç­¸x4æòÀÐù?ƒõÛ·0¸ÔR[ûbŠ%ùî~€.ãµØÞmrÐ?ƒ¾sÏÚè˯M’…Æ1âÇ“ÕâÜÞlk±}ƒ•¸ _avó4î0ç]q <’¿ÃëÎg0_éÅlñ6‹+äX¶tlÚw|‡GþdoPmãj|ŸvÑdãsŸäòË£·h'4_PXÁ3]•ۼϼ±ŽÆ2ìc±²®}K3j¸ÑÚê<«q?Ô|W„iÜóùнXºÓß±1c%é‡F^9ÚƒÁÓxZ>9!iç™ãë|Ý (…;ŸÄÙsbJä ‹·÷´“ïbES9›ó.íç¼ˆÆ ÍæóöMRöEýùó?éH&¼ÜÀ_…`ìH ¤Á8 °˜â¤ªi‚ê£}_D¡ZÛ˜HCónÜX?pñ“wŃŸ ûu6•“„ÙÑÅÃ~!4g@Ì{Y§Í«v&Ý{³·S`²OŽ-ªy·‚œÜùs¾.D³< ¦X§Ö÷»cjå +úЋæ}hèéFW ½7D7?:$Òí0–ž¬:bW†7qÕõòÒRƆïë8ŽÑñí%Ù/¤Š…tºèiÒöøšßp¡S%'ľˆ¢Yhyô‰Ì2Ùå‘ÓöEÃÈÑÛ¢ªßY6æI¸(éÐyç2M@Ëæ¸c7Ü3¿‡»Æ.þà¬÷¾ôŽ]páÖ‰]ð¥µÔîJ0ê)šàtöüìÜV?íóž}0à TYJ·o ›˜9¹“L¶Ð¯‡/c™œUZÁn‰¨-¤Èãk!wAÓ#|q“Š ¹ïKwlY wiF¬Oþùò<Ì©ƒu[sò*»ÔuÚ‰Í:†yú:~ 2òqÙu7Ðu5<ÈYìˆÉ5ÚÃs‰“ƒ¥( ($JçÄ8ÝHÜã6ªvÂS*Ö¥Û€äxx¨âö•û xªu ,›{ë=¬4ì*˜ÇäÀsFõa,}rÉŒMOå2s1·±¥£1EJÇéÁ¶>©¤u|9¡'„Zuér WsPvÖ5õC©ï$z\å›ñ±ÉòÀ äÈ`Ÿ’¶™É`Ï+U§Æc22½±Å/’ð={g¡‘•‡=Ï›&€Ô&ÝJÃó°’Æê·÷fMÜíw¤^³CÐøßuë´}M>ÂÕ=›¯XrDzÊÁ×JÍSx-¶7¶tHè=©¹*&âܸ‚Rë`a7ÆWj¸‡ç°ºC©¼#À@=x¶Ï:7è¹çwÛ«ñPeb£ÿì‰R.ž3Gèµo*°ô„æ!Ÿ‘.ty³#ùIŠö‡œ|Ñí°œG+cþÎ54³7OÎÆiZÁq—°‚[@_•ØxìÞ‚òG èÓÁóÊåM*çè±Øó²#Ö¡ú`a0˜<ßnTßq²Šâ1™ÔÁ1:òôÚLC_[§Ç$ò©^çeàlžK÷žƒ¶-ú„À‹Œ¡µü€ug°bÒp¶|â´p:TG‹cÎÿnˆböô~~|÷ ü}ö󱓮·ÇàŒ¿Iíi'¾LŒLØç'™L%—dºÅBÑí»a÷bœ ?ào³‰åZÙÊ7“¼›¼À²ñØ œðo>ptÒ䃤ñÑ ¥÷ãR‡/¿ø ƒoêæ*û•Žõ‡«ÇË=Ùì6 ùþåó/òvðÑ·î´áž… mú³°Ób!K*Ñ…X¹}7èÜŸ-ûÙpûJ9y Ó@%4þÔîÜó­Žï/î ôx ÏòÀÖXãø£7²™'‚GÞÿñ¦ä’ZbÆÖ¹UãV<ä\²‡!Q¸ýæéø C$Ç9ªÕml±3„æø²‰18d1Iʰ:ב=> $&q5w„Ä¢¾–lÎñå>ñøè|ª5jÆ~½_ÙºÂ!jäV{|èÁßÚ¤Üì÷ŠóËGÝ:£9Å„#½%lëºúªØ_Háã1–ÌMÞõ‘߉ãÔÑçcnž¥øá×oÿwÖ^ø–#¾É_±Á²­b¤Ðæ'ó ¼™ßÕ{o£2år±¹± ·ŽöØÂÛu|ᇸØp;2æšË¿sn‰ûÖ½^K¯‘Rµ£N39aM‰šæÐ#¾¿Ð½+úÏ9­‰˜ð:ïð“ÏÄÈsðÁ’1o^ðØøFŽ-}‰×i“q"óXP§©Âz¦ŠOôk‹Œ¶×±åÆHÕì_³ß™l›ü€ Ì<ô)N ~ØO)ö#éIŽ“õÈupÈßû ,½y°?):~ x[óB-ÒƒSýÐç fß»È÷â¬aá|`×y Z^ͱer`+YOȘÛÌ0ˆšïZí÷²ä§ßñj<û"cÝqi;çDúøáŽŽ k’²ÔSh'yÎz“GŒà”óùs´8‘v| ˆlƒœ9"9J,«/`÷{Hð‚¾ãGóGkûëçüáh캗 k?à§ý»ìEÖgl'®r'>l)ŒÌÖ77(‹#àêÕŒ™i» M>ÅuÍuwG•©÷å8¼‰H@”ñ=V’šKØÀÅ>æ¢ÇMõ0_ñÎÌλ࣯6¥ãÅœë€×nûüÀ8ncÇŽs4Šü$þÌÖ´ÁvFî¹.c”J*èíüœü4`¶[Îx¶r\et_c5Uî¹ÍØSÀ¢…&£™ƒJÌG®>)혪³×à~³©ƒgд©Rcâ˜9‘Æ&øX–Qãî©ÁKsϺF=Wx‘´^áigŽw¿¬œœS°¥Üc÷ç/Ï&‹~zx÷ î©ä£ÁA®ƒäNµû‹þ;=ðÉ‚7£“†ïäù¤@vƒ{0—› ø±’T˜çB4 -¶`ù"lêž“8¾„Œ<_¶2”’8/v¤Ïbcá• ÷öb §´ÃhÛÄà{@¥Š¶Ô˃4œt6ÿhÃ/E]Ž[`Î ýbožØX!_º«5ò»ÜcQøCžyq'(åÙ'-odÎ$Ežà9ÞŒèŒ?a'eýšQñÿ` س‘9Gƒ»c§6<Ã@ÊԤ߱ŠÐWÇ–E¯NÄE, æ"ÏÁB^;'Kðu:“Šç„U÷“úÁ2>é{ñƒŠÙXÆqòåÃè;Ÿ•Ñ_™™“ÚBF\X'UyaŠ+å³üzó/r‰ Ö–¹*9CBœÎ¯:}1 gLjoÖ,¶ÒñXŠ´Ñ̃ük>^üÔàDÌ)Ö–.~ÇŽÕð F3[¿@†ÿ8€ø¼Ø€†ûÕƒvaÜpið¢Qâå ðÁr,àMñí?Øëa¼2àXø>r©§O•Ê% s$~‰‘B>ÇZðœu÷… ²™8ϸ¦œúFî{–¹BTɸº‡ø ©ð‰ÿΡg¸/´r2U§t3wl?hàÓŽÍ™?õQ~8ø¨ý™66âíZp¯ó5óçóæÒÚ¨+–¦»/ZYþ’4yFöÆïâ#ÙßC~ûG_è +õáwï‰]þ@’ùõÞä(rhn2nYÓ~q*x1!}.|?/•<ÅnúèRÕ1&ùŠáäÝy“°cýœ7²8‚ Tp›ïöóŒß/þß\§·ciKiWŪx±`žt•&§Ï‹xÿåŒ-ñ12í«_ãkî:û¨u‡SlÕ®>ü²f Ú¹I=~;nICpñh}öQxR¹sKS¾ü‘EYg 'c¡Ã¸Hò\NV.Þ4Ê¥±h6[ƒyƒ lÁzø–ŸbÚ%þ¤kzæ{·•ßû¼Ô&b¡ ¨ Ä|ž·npެv'ÇgÝ€÷…kJ=›#p9Ÿw^ô^yø™˜¤GœÞ ¥ïÖä,dü ˜ïó)’÷ºG‹G…¦ã 'Zál^ ¦ÆU]XdŽÌf™€š«Žâ?*ï~â¿¢¤5wC{Îk&ë ÍEé§5pÚ”LP¦¾CQÅAò¬6]$’¾ƒÅ·I¡ú饭ì¡´ºª+þ‹n¹=\Èòn65Ù±‚;“I›Ó¡‰ìF—Eìç!b:«/Õó ‹ÕÞÄèC—mñŒ “pþD­Qíà`½ò$—«™Ç –ú¼ðfÚ±cÁÆù»ÞYÏ8'®×±é''Åï_˜êØõ¯gXÎØtCŸ]‰™~¾™[xÚ~n6wþý´[µ;Và ósª|Q:g/9á<Öѳ¾ªÍxá,°†óvl±j~<‡ìK=XÆa4–ËôѶ­ÛÒ—³;YÑæzƒbYÈÐH§Ž‡'ùUDÊI¤Âš ¶ØgŒSÆ~÷ªh /N§àÅ•Âmœž/žôqyÿæEü õÄ\4r:~“Úü\µ<7ýÞœ}OÏ,m0jë¹)˜Žsì‹*}åçæéz\™‡„ßø[ìŽÁ¥^å­ Ïî¿ÒåÑ8Hª_d_¶FöØ%åE?®6`a§µáéïJhNa¬ ¡BÌÉ@U౓*¼ „<¾klH¿Û0»:ãeôb³'ÞDŽ.; ñßóSͱŽo¼<äˆeUô›wÎùñu|NÐÄe÷A£H¦è¡Ï›<í@»~]Çc U£‘|Ö6¹=¼Î(UcŬÇÍ×ÝDW=Ä7gú =ƒýCÌ}û] ô¿ñ•Iâ˜;‡êÏ€ü6GB™ÎAüñ‚®‰F°“t¨YŽÌº±Ä75Î#<ƒíʵVzk(º€€E©nò?fêïØ¥§müÞ1H‘õ¾hÁÛ!©bóÞî>‡¨9¦œ[µ–¤ØÇ樾«/ú^^ÉÄÚq˜AmÇ+Rs‘Žý¨ãž'‘w—†ör,¾x˜—ëäÇWˆ#£B'óÍbC?ÑÇ^<˸=‘¨“wÁ>^ÿè±ü`@yýÒÓx²niÇ*ØÔcëÿ£VS• ´‘©ÓK<Í“·@C/9¶•wúÒ&ßÄ3ÓD¶jñ+¿ì@öÅJsÁ¸£^máK+χjCËØá©Ù‚k.8,¿ájð”éÜ'{F ’N¶.Š@N©çëiµ³6°ŸôCƒЍ=æ +›Å‹ç³}jðÂsÉÁJŒñ Ö)Q8sÍÞ$öèãÙ–p B\ä$Ó|ìÑ;Qý¬Yä26?b&†¬QÒ˜uyƒÝó¨`™³‘ÕÆ±3d:èc-<ß´‡ VTãŒ>éY&æyÏGx´á;‘'ÆøÞxí!ú¸¥3E|m;øÓÍwƪ ³þÙNz¿}ûudo9ƒÍíIµ†sÖxѤ!Èqå}œ˜§­ç:Ô­NzžRmŒ¢8†²brÆ€0šëÛJG7ÊRšâzüë“nvÁ°BäÅ­î¯:·šüv ÃŒ#ï´²_gö°çœ*³Û}¯<ñq燘OÁŒâ—~\vá×o|U>êåKÓõå©[¼o€ Ûrç uó–!C“Zб-êÆÆ¿ãUÊæ^zP|Ô᎑>(Á$GâP}xÚ)Ú^ÕbÓÝbDm:Äj'‡ƒ=\cÀò7K]â­¿ÕWÅ9©ST«Äó´ÓE¯ë+u:¿cÂX}ÌÌã:ß]³Ý>ûn>&û¦Ê¡ªÞuoõEö€¡:9¢î^WÓGlæaÄxWޯשH*q†)ßC²ò›Ãü JñšGøŠoåL×:ìŸÌiðS™o§ŸÁ‹Êð ·Ç<‘üäGØmc¯‡‹žz[–H°smˆnG*xÄÀ§Ä^¹æ!׎3¸q¨Ñ޲%¹Ês?¸/Õw¿(¿-$®I#,¨twÑ` ºP41áôþPxó±“&†|T–>©>A`¯‡/lœ‚ <au€ÀÚI,púùÈÐ)c!I^ÞpÛ Õm«çâ!/Ôè÷=¶j09xð afS?ÛÍ«Öæ€W¥æÕ”£2ô‰³ËÈÎor@Û1O>áD»ã­O¶ÎŸ8H¯÷^6¸Eì…‚ÃÁâ"ž=4›F´b#6ô3@üªa~ŽñîT7/r¤±Õ/¾àÉ}È2tÆNÞ·/ð;OèçaŸ²n®Úö¼hΆ:ÑãÓ&–x¸æ€Œ:á;s*s¨syò§93¸yÕ®ìµá˜Û6Ç`óñù±'G]þ¤e¸aŽßŒ½Ü)_eç|’v=鉕ä£u:™“igY­ ò'¥Ã-Ý“Áñ}T™c™ËôÕ¯s4æ«pa3c¬—˜–ÄØb×yñÆm ÖOò¹évÚoÛ1SœzLî;÷q y(‚ç€è3)DM›7jÖ´3ûEt£ÆÞÚkưãV$ÖVíìQz“mõg•X-ԽϠ+~䞎EýÌ“òç¤Î÷>’Ãø _+é¢W¿µiÌHÁbÜ|;’h|Ó^E^)Ì—Ç­^cáeö™Pœ$ïܶšu—<nÆ…v°79JY¦Íò,ïö%n+xï=ã. îËxÎyC1þúÛ¯;vü™è¯_¾¬OÖ´Ç@¼x4ßpb¦¯ú"žìðPzºÏ!ñ"`õH-·ŠhMƒ…†Ìãº~™C¶·×Œ[o«ò…ßõ?,¸ó#óÌ™ðü<ú•5ÚøÎÿÐ G¹7=)ÙÌ ¯#E9•{NÑ×¹¬Øðgþv®bì;&P¢€åù<ƒE­J”\ØÒg>9ÐâÑ~ç~gzuáÂã.wÎÈÑ9'D+Xùž¡¿OBœˆ†£í¯z|%G¶U0Íàý†36Ä}‰³î€m K“dhHügbeûâZ{øÜ·>y_³"ˆ˜+_ Ìñ;ô.˜ç+œðí½ø²E-1asû¡0ɰ­Zªnqޥ깮˜ÐÍ^ƒçøÞš\ÈéƒGÉ›àÝ;IDATqü\UáöV:¸2ŒË »ø…sæ”M­(‹ÉÉù lP­|ó?XôK;]9N|ª—{üè·ç¯pdÎWä˜`ÑošÛß´Oå<ŵª®æ;KèÿØ«'qú:›odú¡ô)p¼ŽÔ_ýàE\~—º%æE—dï0ÿqÂÞþéË~Àµú•w¿)¡/.\]¶’&DXp £Ç63yP‚L¾¦>9Ì»èNƒ5¾üN³°û1$>üøŸš'U#M9ÍE`8kTïI, 1Їû”blÍUI†jã­/ô¹dèÇ“ö­ Â<Õ°lQá!É8Bù¦uð3…cdßsqE}'¼ÄLòRL·…M™>È(‰/©Ó#§'ÞôyGµ¶ìô“ =&ß]XHݤð‹§\n¨¢DyRŽ ÒÆ\ŒÃÌ#änú2ÉÕ7ärÂ$¢a‰«oâ ž¤IôÁ·HÛw° S²“ŸÌáÒÍG¦AÒ11®kõ¯G]ýZw>EzŸŸõeñÚ#gþ§„@yÑÇ(z_>מ Ýɶ5ÍC¢^8y¾ÊÎ'z¹a\’ãØ£oÙÛ1X%œä×c,ïÄ9ºáà Pâ€ÙÌCMœÔ -¡¹×–.ú8Xœg0½ö×läÖû4mÓwZé²/JY‹Ý—¬¿ÉN:Ô}š›@èÛ¢j" OÇ ž+oµ6H±ñ_„KÅHâ£ãŠõÉ-¿·8S2õ"õ¾à³ü`zÑžtx|Ò(}þ‹:.€-5_(¡oÒØsœ+ƒ¥g¯"ŒÆÞûd«Sr)ÇL~Ù›½‡zæ6‚ìoVâØáâÆ´³¯3õ}çÅ &»žéò‹²]gs,.AçÅS^ŒÚ^(^ æšý@{æÎ:dÁîÜÂI]]C«çŸv€ÃSwÙõcW×XJÉû©°<¿å‡/p‚á5 ~îvO2U?ed^ÇçHeŸëÌ!Ôyä6àì/´åFEæËxá`œ¨VÞh²¥žc÷¢C\?Ä2Ìòæ[Qƒo7Ò¡7u4§¨Û $è£k09Š^X¢!ýaŸÝo>Át¼bìy˜Ktt,ÈÚS?4ÝÖ!ʶçÍØ‹ì§(‹~_Ë8äwç&«'N!¨{Ü c¼¾K‹~01g†jé£òdcæd˘Þã¯æ3öçèò½ø '¼âWþTñy<"ÁÜBU¿îšþƇÀû*QPíìé;XLuù:BAWЧÛ=‰óÈ’‰½þ²r üÜ9ÁÏP…ºâO u™éˆtuÔc ¬o€ÈݽçpµÕ³„<š_pySûÓõÿê·¸FÌüõŸZÇÂ<´×öoOÚopl>ŽŸ Í8O·´­|ó œ;w–£¢_êæ(“–8úƒãû_€(>.ÇŸùÉËy%ŠMª/žaaEóÓ 0ÁÀ‡±A5˜‘‰uÐM›…ûÚÙ—º|ò“R—ã]’Œ±Åo:Œlì±Å&“ƒÇëêbϽ }F“÷RQÓt¶ÕÙŸÜy½ˆF¿¼šŒz T|÷ÄA›8ÊMX©-;Ä/&0<»,§!éD[¢;ø&>´\ÄËX¦Y<‡—Ž# äæ˜E–öÓ=¡&&S¶›XÇ%@ËM]1¸Ü&?`èè°é!j“!ÇÄf4ÓD{r#`0¾m•ßÎ_S’Ÿf_Äß0çÄÌØ±áØq+xA¦-€ƒw8Ç™}yQܾ^}×6ùHTáe”¡¬±m<<‹kcêØÑÆŒïÍ`‘VY¦Í oóY¼ÐžœOÇá=RÇux*A×Ú;‹ÊßèÒëÃH´/[³Q»LÂŽÖá‰ÝÊÕÍw>ªÇœ;/þ’O1s\èÀ_ê>kØ8UéIF¹yµüY¼>#ó1“¯î¥øbÕ…‰ã‰‘ø2nµ}›Ï‚w,2ßílrï`Þò–JÞèJ®ƒÓ,ȳn{&Cá%)éEƇgÕÜ@šjjnÚžÚ‰ƒµ|40m«1ð¢‹>§Cð(u«ÿps{ØÔ¾s.é¼<¨Ã¸`HÇöÐ܈’—s ãÊùD¯¥¾·Í,/u²…u?&{HŸ¾±Ägž“ê)Í8~Pa•ñì–úîO KnôQÆã]°Ï篓ÎVÿÔäKºô„AÛ7¢æó÷¼]\JKêÃq{“ið: éŽÑàéo-$ÎGŒÄä ŒÈs"£ øÈ›­˜¼ñèF°Pt:ô»„±I_>fm\~->É‚$¼ÊÐÏZˆ%2ëOrœoÙP|Ôýaì~_DÉÎ: G"“œ>g;ºD|Oo¸8 q«+‹³/y?^¹8÷(çGϪçf†_øZÆ“{‰9ù²H½åwrŒ$û…Ù¢op0Š"Uico¥ìOÊ»_€p_Z¾KÁÉ´*8Ó¤›kÈà;Äz2y¾ØÀ~îçu` ›” ZÚ÷äAÎ œM÷>gÜ<°-&øý;é·¯[߸âDþ¸H£m9IÿÜ„c­ À÷Û&ÚèëäɉëGrø}ž `†|n![ÿ©á‘“}©ÍD ?½–‹xer[ýWùÓobL~Àë³þôgs¯f°¹™Ù«Â‰ºuÚü“7·É*wíçĆޱË}6±eÆV~†78æ2:½?ß :0îê6–¿»¦º}¢c….¶åIû”àÒ~ÍAò‡Á-ïD¡#N‰Ì U<ØÑç™á®i‰7MçÈ{?š±¹y2÷ù…?åý ߯óg|Éwd`cöŽÚw~’ ¹äÁJÃöÉžÃVèDö̉çŠô‘.®ôËþ%ãÙ9qHBt2V2Ù½nÙwäŽð2ŸáÂ2ž Ë¦tûN4=ØÝûkÖ†U}°|æ¾c´~ÖëŠ8ÀFïêñ?»ÝÂ[k²ó=•âØ®ä-É~i¹t¿iìð¿nq£Fíyö|–-Ù@—B?ØkwΡ9¢ÉÜÆÞc;¶ÕM(‰±ñyl%ÀWóJH9—a‘Ò\5CètÖWcH^s#ÊžÕ…”2':ç°*^®| Ççko?\£Mݾô Ï‹y‘ëüÖŽü£¿ÕÇ–â9÷Àª¾äQÁ‹u94FpèÍîê3Nä?[0l+¹h© W5À¦ÅÞrW9g%n[à÷Q¾Èù•w¿aòð¶p¨qQ–É„Ul‰CŽAK0È“ˆ’q° Í+n'…Ì ¸ñL~£CÂúfP™Î’ÜdÐÎf‡<~QõÿHG6…!;p£­IšÆõ†„c÷8¢rµeë8—%ëp,kòu Ýy™0Þ‹@ÜFž8MœÃN´¾[lÇ¡ÛFʉ Å'À‰c&ÿc¥ûå‡r*Ô/¤VžvâpŒ I ñ±q(Gò¥j]>7ð?N³mòƒ>ºK=O ÚOâwÐ4oÈ ÔÏŸÎÌÅK²7¼à‚˜:†¥s8ìø'“Í Ž(¼ÝÖA/>àòøD Êyý<¸ÊÓ½è-›¬Àßìæ‹½ ž8´Â¼ÓELÍW<Ä®´=+?h ÏƒBâݬŒ}rbD)8rm,ó,Öt¯8ð“R|qô ·¡jßøt‡ÑÊ„ÍÉÖ~GÚaŽÙ ï8¨ËïÜÒœÛòsæE°áÃO |îŽ4ÑÑøÎ&òžXà ¶õÚç¯8Mçµç¢}¼À#sǽŒ¿KÄžvÆvR®'ºå¶ß4“z4r‘ëÀg/#óØl_}'\ÙÓŽ/Îo-ØD^_—>ØR¨OÐA©>¿ˆ˜ÁC·¾l§A¸?7sŸni ^ŽÖTÍHF 1yóÅâÄÝ0e,È6Z¶p;/ô‘c;°Á%æé¸çut…a #©‹8òBÒ¬À&F‰­gE¤Û::Ù=Î1 ZÛð:t²ÆBcbwlRJç‘‘+›Ë LhÌTCT²Á?™±ã𠨶uUŠ*ÌÅïþÓÎnúóWü olp%…ss–¹ÀûœíÛ%¼÷Ó?[W6ã*ì³fYgäÿèÜož)xmñ|9öq±¥ÈžŸs!¼òÛüG¿Ž‘Iß1Õ¼Ž<~iGŽ.5vñ-ê€c¹lÿO*ï~â$wÑ–ÌgÞ’éSÉæŸ€hÓÛéî¶õÙA öò†àpd•Ó[I–fÛ6Ús¿(yó†ŠÅ|÷ÂIQ¿ßµÝ"Œq7I·>öÞj"KÓâ‰}UÕæÑ8¨òB(›nìa0¼iÀìt©®¬ªÎ懖}MÚä¿ûÃý°@~ú£M›Ç)áP´§~|G[¶¶:2”H@›8,ÏX€S5ØÁBŸžú ¶µ?ÚiÈžy,¤‹†/t²‹š¶´‡oÃê–O,äÌ­§‡íXšËDá:¸iK}ci½~Ûæy‹yIÃ?ÍI¥Ê—NrÅq¤çŽ ‹ÌwæL¸8ŽÑ¦Î®l= gGÎ<#&lš¯³†ßŒÕ`ôâdyM}eQ‚G$)­­¯µ9›Zü¿ää"µX‘¡ËŸWÞñS›)‘i[o›Q·u¿Gp!”'»Á^mêt ËÝ¢ï”ÆF/úcj°ZlLПç£Ï~õ¾c‡ÍyÁ ¾£F ˆ×ýÞËÍqÄn"j×#ó*aÖÂä@mç@ŠÖcêN§lÄûŽÃz$E,ã©]{À3¾ê÷÷æbã#‡ÉO˜ç5Æñc‹³]t °m²ß~¸žMÊòw|Ò@œü Š>y#·VÝȉ˜î®ÉþQü†ÇäH8K°Ðϳáu0·¸±Ü‡˜¦Ê9åηzg¤í¿ww"¯jÇØj™'kÊœ=RÁ6îáuQ“&ã3Ì…‹VÒýtHKÍúYfä@ø‹~¿³„ãä ý¶u5ûEò‡ï3ŸÍ«slé3–6S‘íèÉn¦XËõ`Ÿ±ê£¹¦?=_¹­Ãf¡œ‘UËÔ,Å´Ãï©öDlË ÎOç«ÚæfÀh‘Ëx7úz6b¥áVô—û¼‘™ÀØÆó’$¾1ÒŸènÞ6³úÎ`®¬ò 4¦±®XQlƒ›I¢ã7Þ™V¼@„ŸìUç{3-–]ë=ý™ÇVV‡Çfxt$ãWãÞkN8$,CØ:6¿êˆM˜ Êùè1WžŒ:-^Ķ›ž3VÂ$Í ôb‹?¨øp=O…Ž %•ð¢†ÅdÓXö5òå5ó`Ûþ•òþ ~隀a»M)J¥8Â{ÆÞÝw2þââK0MrŸ\ÉWC@Žu°Æ¡ß•&Ó5“+¿’5:à9óÓ'nþt…Š1TŇåaý²ˆêÑw ÜÊú}Ç#ÃE©Â¡~Ü/覆 ‘œ„9kÁß}AbgÉa“m—~tÁÅœñd¬S÷'PÕõ;1ñe,eNüÁÎ'eÇÖ‰™ÀòÂT@ð¿øÒáæNÑØgÁMSÆ0=qÛæ'º×íZêðýØ%r ú½"l7 øñsjLYòƒÜ©Å#ÇOúsƒy#€±Ô/ïta¬r>.Wcl,пÎɰ'žoóê<::µùè/•ÇwdÀÏÌ‘qÌÞ—{^€yÇ:ªx1º„{½pŒ?àx_²ãÆ[gN‡ÞÞÕë[J¾³°z{¼É}-|r«ÁâÁוڞëËÍUo– AÉ;rÁÉ1ý>bwà26•£Í¸êÙî¸u1êŽ1¹3›æYv7o:› àØO)¯³»ÿäÎ1qªž6ãÜž`õ;E±Ìù¨·d:gÊoò‘£sª9ú{4òh\ƒN.Zt ÕvT{Ð8ò]Œ+¥ÂIÜXòCˆ£1s±.}l‹M½zï4=ÝÜüöBŸ:2ž[• ¼RàH±ÌXÃûÜæ@^r¿bm99±xÚ6“jüåù¤böáÉ"e!ê¢J ¶à–ûæS<#ãa}ñú–Ñ÷xQàœ;‹ÍfNoçkãè…Û‚çDÁƒÒ”gã5fœ})ØÅìzoŒ-òÆ`ÿ®ý!YÌøóB‰oÌíY£ÒõšeJ쳯UÛ¦>tÝüK—L%Næ»»¾1zÕ…'ÜÀÂw3ýš8úû$èkùO ³·ˆ(=i¸d¿ÄÆØì%p¹ ²æ;ñܹ¼kXv·-1Úœy+ºm×]x°'f/¸slx‡ßòNΣ'#™‡Éú_ô½Nóä`} Šü¥›Öîj4_Ñʱç¬ó¦J‚KœÊ·TÁ†Uó·~Çcò‰¾tëKFâ¯nÊÝßu[ ¸Æ¦ÍØ wë©qçw¹0öþÁŽØJ è–Y’£Ð½Èbéy½b<…š_ IÙ1Êû…y²ÝmºËºÉÉÙ»,שׂž§“•ÆQ=r´k_„1Ôðøñ9H² %Fç€/^`3îØ06|ïOwç…šVá»­-Îåøü˜JvœèÞ:Å(KðÃ7©oÖJx˜ˆ™FòûWŒÛ×Êõl<µ“ßñ¼óEÜgx:@Åå%6ÈùÅŽuD›§Ê@3g™°fWßcœË ï?íŸøÅøÓþó÷?ë ¢3öVøÁáÝ/@ذ¹þNyYl3`¡1Iã]Gò¤ÂBÍ+Ñé€ò~¼Å²F—–ñŽî7þTèã¿ig°±pŠÅ­å .öaÔû´=˜`kòD2Œ4´Õ­ÚÙð9Ñý`_í=¼ùR¶‹úó·÷ÃÛ&róž„‚ÆÙpÐg@)ÇoÛJóß=a<ÂÝX¶,Õyød4Ç• d¤_ìø]â˾±°´Lœé§úéÿP5 ¨r:Twvç¶-b3“’eñ•E;dæ 8oî™ÇôÊ›½ \º)¤e"YtÖH›?AK!Ócs’hãB¨òl£<ö’wܱ¥÷4{Ï=ŽÌÙc§˜|QA‚±bh¿ð2šdˆáùœ3"Ö¬ÒÊðКºê‹)¶äËMãp¯è?$w;õÄ OŒsšŠð Þæ¥ÔÚÈô`Ž·Á=X¬ÿ;ŸY QfÎP£Cfq••γ4ŸØ¡ƒÄ^ €H{YJ‰·Ì•Ú2Îéa7‡X©8Æ]ƒv¾ùß$²nb|ú&ÇVáÅû¤´}qÃóüÚj®ÜiÃôøHjÀÌÅc¡v íï»çlçÅùWî‡.– ™Áà°ìoºò‡Ì{Nbͽè'}ÖÁG‰6?'ÿC )Žcò>åU÷m¾¢‡-¥ó»_ù®•‹8Á žüŒnyÑΧÕw°ømN;wÓÎXY1± t,ÓÊ‘YH‰oE!sëÃågtÎ:Á {f°‰#¬Úö퇃Å;Ïg ÇÖŽUÁgÏx/—HƒØü9'Š¿ÓªºD]ßì‘wF ÙJ÷mOè€m[mÚËÛy(/ â ?»¿¦ëÉKvæ)Y÷ Þ €º§' ¶u^õNË[¼x8 zCW9/^ 5F¾øtü‰EŸ>þ©3J‡ô‚M.h¹X?\iƒç „DxOL–«ß–•+*ô‰Ò9S? =b4y±hà•ƒãB?eN4ŒíýVŒg¹µ?9ˆÿž¤KädØrˉ‡9tèÏ;‡øp±1ÓtÛ •Ò3: ­‰Øëgq'8íÁèÁ ¼`¨–ÁÕ£gÇØ¢È.§å‰NšÄ”XÀœ2ó³±ZkÄDßÚØòšNÔû_R¡ˆ®:¡ªngÝ! ½ùÅž>«ÚÚqYŽõš0 ÑE™ñëÑsdé:/Öm| #žàb¢VÆ[[ÞÝÊÌœÈ …CJŸÃ¥X…°á}ë oõG'(pÆ–g°7FÈÈÜþˆ9M¯ç4ÁKÌ¥.ùe)OnÐÖoÒ³>iƒñàÈDôŒñøDïÆ‰±kÐö¶Y屫wñœû›qM9Íä ½:’=üÉqšê ȃm:ó`¼×Kq™ž=_(FŠŸhƸqtlQë-,h ÷œ‹ú9 ,ã;„.œ;6¸Ý½] fE_eYÆ8xÄì(ûøðD•Ûµö]K ðæçøné".E]i÷Ó¾°Ö¦Hº׻Oþ&xSîülôá©){ ÒÊPx›ßòõ3ù~ÍuX‚`àÐõ¼õ”þð˜#몋,Œ9Dé»Óè€ä6¸Ã›¾»ÓèX¦ÃŽû袃½y‚‡âéoŒîÖÁ¾¤ä1´íXØ–zâ(fŸ±Ç‡Ÿu`†åE•»4Ç"sd:xœlÐ'nüŒîüd^ÆL NI Í9rñ–­} †Qwsl+ÝÑ\þáÕF«|ìβ86µïSE׿íÑqöæúʱvø=üÇ-ŒF˜\¸M×eÌyµ9ëuš:œ_Œ+K —­p,{ä`ï"É2H/ŽéÛ•L…~]ãe¿íÛ§c‰_¼PvlU/ö½×øÜzí6šƒçŸÏ›±½e­þî \ð}ƒ•J'§Ÿ.z½ÈiFm&*mNÒ3(jkFõ¶•IÊ;Nk‡.‚)NÌ•<§y‘¤Ã }.Ô/? Èøp“;¼ù3{ǽ÷p7¿Së !í§ÌК">,üQ༯èÝ“ƒ½Ù(~¡`—ïÕ,âÁ–i'S¡’}±Ò 6¬¹xa:ã|üúΛ1ÿ=CO.ÊÙØ„©+!lÍÐæèÄ3ñÜ^€ ïß¾}›¥y>f¿s q•þDŒÖªûã_w}T]¼Å‡ðãã7ùùÕ~ éø‰XžÒsbrnû¯b Ó#À±í¼´áp„•õuÐ(&î_¿ô¶4ñÖ;«¹à€9¿ÊÐTuÈ‹Gñ"¯Š‘ya¾’Sz°´¥g~bŸ“'φósjØ:_s"«Vrð‘?“\K‰"M…yrö“ÌäP÷-VŽ…çŒþc+±øQ6üÈ9ö¢NYÝŽµù³H>éŸ9 ¤Šyx%lÃ[Í É:F^/²ó¼V4øòŽžÈàΚîX ã\“ù_òrrHOü¢OAÖz:t@Xg~ð⚱ċǢ •^>Þ¶È2´â“ZK|€ÑüE’7ª%¦²¿q¾ñYÔ8fï99·euòËwp’S,/“A3ÂñàÏãæ|KžÝÀbýþ>ov4·y£@BéóÁŠïi–!|²{¸`ÐBüŒµ~[Õ¥ãÿbœMƒTƒa\W‹IþO•Á68Œ |ø¡äÍ Udž¶¤âræ9}ü%¿æ#¼znêÙù°Tlÿ™ï;)ò’¾—8'FÏ7‚0¼OÍ'px1gùháVDo6ãËscè ¼Œ³,€fÂRT÷] øsÉmg{»œúÁ‚“ýb¦ºzmK-ñÞkh°¥ê9æü‡C÷y»R¼ÝißXø2®ó•œÃ£çø$—ñ…mߌöøeúñ $ý¦3ïCªZ쮬AçÏi›Ãö´ç™ºç„Ö šŒ]ÓŒrë¶mTSaMZmõÌ[>ø°ÍŒêè†ëÁ´3óxõ‰ãsòE‚†.ë¬Å:qÈ\è_E׿êoÇ8ª;çˆJãçö…¤k/¾Á z¾¢ešÅoΊL~à™ñùÆãô"jÖÒßÄŽ¾ø¦f_jnëéÈ¡‘xþaißYÞ+PÕ¯y]1ùOþlîµP¿<[†t}㇗õ8P®˜ÃÍóŒJãKþb¤]Èë }ä¦Ä¼ bîg/ÆIn——®Þãðå=Ñ£a7>^þ¨¼û/Ü'TÈÂN¥vázñGˆõ“Ô$RO÷ǃÅÙÍ}°ÛîÆ•Àâ{†$  ~ÍKЦ‚‚3+é˶m=pü?-¾:‘¨vñO@íéÓx_ÖËÁ™ÉAµ<«æMÀÜÎ…xeÄbùä¼Wþéÿ.ÞçBˆ8®ÿå!À§-'•Üû‡/Þ‰ƒdhæ…áisQösšÀ+¹'þŽüÄP?;ÚÖ3zêñG6õ¼¶pá~Ñ.Úä½9C×'×+ÿžõ=©Áã›hââÈ…U×i8­Øå„6Øwy|ÇÆ -'Ct¢+TWå`cÍ9ËÅ ºÈàe?½˜Ø8’bmŒ‹5ùcÂ¼šŽœ ßµQýäÇ”4<-³íäOΑø¿6;~þ´6ýye ’kæ>|içþñä;ÜñLÇëØæ;^ÉI¾üš±F¿ù¡Þb^âh,ùlŒä@ÞÂ{ä¹ÐϺdS½ñzq’ÜÚXòðd<¸ØÌšfÜ'rE:sâ£l笕± ïsÑÛ¸Ÿ|ÍCãëšØ/1±_Ò W~ïûsÃex#×ãðÊìŽTùd?à<1è=¹ä‰|rïoúXã®ê‹ïä!ÒÔñ%5ýf´ÿ{Âü–¶äÍ1Ǿ\ûGçX€³ ³€sLÖ;Cvb`l›?íÝf6I,ö¸bR}ø¨q)ñÅØS°äÅÉ®éò¶ó‰/=îRÎñ©5Ëy@zÌ¡Û71ÿä3VÕ{Ço_KéÌZ±ÁÈ™y OÆËhÛŽ¢¹]†´½Ã;*nœåIÿ=6Ä‘ÄWåµW0ŸÌ°ÈÃùÎXr‚.^‘3l›CÚr×ekßR¥­×ã8Éouã $æ#¶Éá='Ñÿøá\‹à¯øÆ²mçÐá6³ÕoraÔ21ÒÄž©Î3{Ab°üŠ)mòõÌ©æ`,GW$ íúË—È´v¬jZ]£·/¿ŸkµÍŸÈ8·Ã³cE,áJvãBäù+áammé†26&¢ý$ç`úyS°_« ý³ò…¿JÒWp·Aߥÿ˜)iE唢/dú˜ TNº*~‡¾‰ôMÊu¿(/aƒ?'i Òl¥]‰*×hoã*u!w¬€ëqTß‘Ûû•F‹SÓáÙ ÜœؘâIX£K›ÿÞûñÕåŒmc<¼mc­ߺîÙü&gS7NðS<Æ™úâl¢<1ÇWâjb6¶Ú“ßó½ô‰YFíŒ;ÈÁ¡@ìÄÜ øø&'RÖµ…ªÏ‹´H­áù›öä`„phhß\|¢Â¼÷ì ´ÐO¾2–ð0=ÑGþAÍpM©lš~jlź¿cƒ”d ¦ ÇûÆyò]O¬é\ÄâÛ¦Xûçuž¼¶W{b`lu잇ƒñ¤B­×ûuÓk çhj®7îÃ×dìÄœ¨{)!·[Vß›Sí)`\œSÏýjܶBk\5ÐóÓwZ ›q•—8¶m毸8 Èñ“’¾¶1Ö4ób‘6/¨Tl»4ÇÉtñüžût××k ´™³)©Ç-ÇôÃ{jéãÀ>U_Ýó7füø`Ý<^¹pô .^I‚Kî3îÁ:¶wûœïpËm>ËÛ\‚Þõ$Jjâ½¾Ìóž¿Ý_+Å·-ÛP“<ã^Hûâ®xNI\1Pßtß9B/¼¨¡À< ~㤎]¶QpéÓ|e[ê°1Ê>0á9ÈÆÖ$ùŽèKàÌijWc„ÚBàæ‰_~:ºwILæ î«øj×KØGàU=yMLxpÎišV?âa…£CCô9vêë9<ºõ3·3‡ÜœÃ‹¸¨ÕÏ›ô˜é\'†‹rNB‰SƱíÊ€4÷_3ËQÕ/çäÛ÷=Îèo#™¦KèÛm®bXG”ØâÔMQ²Ûê:¬¯æ_¶?ÂÂÖûÍA}B4T°3pŽ'GæU:°œ“ƒîü2×{NG÷ÕW¹ó|då‡|/ÑqäMêŸëÃöpžL¾¿ü³¿ýç~ý6ÿŒèÈýª‹¿zÅ-6n¹hÒªÖ¶ƒvæN]òɻ֨¼æÂÇ&ØŸoæGóæ­˜—›t½°<9˜TywÅNeÉÐOŽÎ8dø6/ᛇù†iª À2€2æ„ÄSTGÌîíß¡|½rÝ|D$_bHŒÄÊŽñÓ®3”GîÊ}È›9Qp¢—®OccKêäÇ¥BÚQCkäê°Íè÷B3ÍÌ5kºÃšg>¿íá‘*¹–'›ÅÖbUñÊ|­?ôs{‘2lNVZš!‰VÒ‡ßÑïÀëGcÏŒN0Ò{9SyÔ¥ï96¿±0=œ÷ º5w½¼Ç"d³i4¨ÀZÈ3ÿR½Ê¬CŒL½k<åL1t¶‚™ü[d<ìâùaºR’ÿ¬êèûݺOÙÞ{ mKM3îÉ79²WcyÝáßšè ëÂÞ¨£2ù„¬$ÖµiÜÑ"wæ¬È™û ²ôaPû0Ö\ v,£ž56Œ+ùöXK™ô…£@òC í ü$Ÿ©#¹¹¡ÓüÙ§ã‡úÒV{(‡ó´Ñ°Ã Oê:ÞïÌÂÓ::Â͹5>í™#^å†bŠyÅ3¦â(ý±uîàa| Ÿ1¤† Ußš²¡½ÿ˜¬je~ô×®Y:à\ÕÌuÕ‡›»/®NÛZâ9— Þé«mœ1~éµ+WÃÏü3WŠÇQÏÍmiëžcô@_`XÉæL^Àd_;šÉmçAòl_oh4ôÁãøßyñ‚Œ€Œ­<,o ‚U¿tI×hS»=Øûœ$ ºnÝ`y1"Œæ\¶ÖÄ÷`ßþò¦#êÄ“|àպyÖ ]úÀöé8_R…ƒßi¹gæ :Ü–[Ð÷F¡¾¾›?LÄš¸Þü¥Y £v.êbAŸ ëH=ëjÐ$rÈ…~»Fèó #ç —F¬³ Åù6vI 8¶ÍÅKo ¶¯ÄilFYk6±ßÏ|ŸÄ>t™Ìýpw>pOQ~ϽëªKŸyÞ~biuf¬0‡cm )yî¢r1eº¢knÑ[ô‰Ùêayæg|ÑiDpm>²ÍE>Ü$¿¼x­ÍÍÝÌQåVkŽuź•¶9gm‹w+?iPŠÑ±0õ·M,ä’6²¬™ä"ô M¾ÂÛ¾ $æLy­¯Í‹ì£&áOD˜·°¿ðÝ|Kè¡ØNAÝšêËCc,®<`^Õ©ß/b½žÆÎºÚS½ÎgoŸŽK~Èo×"1òý»~R:x-óûù“¾èyöÏÆ"?¶Žœý ÅÔèX‡ý¹%Æäx 7cCiþ©Û·÷<'ƒ®cηé$ d䫾DÄy´ç°ò½®øIÖÉ™-í‹|5ô3']ÆOÞˆ™±jLÖÓAqz­ôü”@‹o-öí6°»;Vè‘o´ÍEpË«9³¸öÊÚÏù”ŽPòˆ¾ÇBÏði1¯iš×5eAXöÁlt]Ó ó̹šÝ/ esýÌ~«±ÁïÆa‡#;€YOLjØ5´È}Ö%ü5ÎÊ¿÷÷êç4iŒÚÀ9±:2ºUTøŽ={do0eéY‰䃇öE)íá†Ö¶îß{¯6|¯b/“;s"™!çÜšmKüȹ|IŠL?øÌyØMu)‹ÄþúÍX‡Xˆ‰â¸ì×MçÙµ@ 'zÖµc?•K}ËÃùÅ.o^êò-×–„3×=9Ã-{@ý7†´O,¤ÈûøÎ‹‰KÄ ‡8¿â wò‘šÀ¨‘'=𯄬X<ŸÿˆäÇ¿ÿ—Êuüßþ_þæoþæÃÇÿö_þëïÿö_ý›ÿþ_ÿ»7¯Tþòþòá?þçÿ´àسt  ÔRmÿ5YuH‰úÿ)ÅÇoë༧}û{µ…S’œÔߺOìL†Ú7þ×öm_a{B]±#ó€JF7‹·ú7Æ]g"4·n¹Üù}•·m݉ìs}™[ZÏ<°¶‹}ñÚþƈ§,ªñ2¹xØbã ¢s|?s?~ªþn6×½õRò¯üøIÏ›¶¸×Omîgôÿ¨<âücõ…«]:Èøa µ¼áýÊë÷WYA®g_@¸ÍÆø$ýäõ2nbys¹ëÀÝíçÊ8£S|tOûÈ7p‰«‹^õ-Ê_<šÁêÖþ–«2·uÈ ðú휒õôÃKhõÓ¸¢ô<7—æ ÞônwýFhûî8èÛáŸRÊ%6òr›7 «þÔý‘—{©Ü<;>K'­ìäÕ×kûhž9Ž‘ü‘ßWùiÿÑHþŒ¶Çå"ó–çIhs‹¯×ñ\å£Ù¸±ŒR€Qgu0îØßåÄøã±,6w\¯8Èo,Ú­4Ž;†ÚWVßÿ¯½{y©"Š8þƒÌ®au½>®a¢¢ÙƒÐcѲ’¸µ·ED 鱨þ€ !F´s$- ‚VýQmŒÄ¼I¢™Á­ÕÍGUó;3¿qœ¹jnó;½sÎùÇ|îU8Μ™h¿Ú¦¦­Ì¥½c²º¥úŒÆÛ¸—ü{x[l¢MýRy›¾ÚX]Fð¢cÓ>­¾Mót³rMZYPÕ½¹8û˜\'ó¥¥âµÔõå>{?Ö—Zi¡Ÿgum\~®÷o˜ŽíømùÇœ¨ÄZÛ±ª‰d´--\*m}iÛ L"­Fûuñþ0ýcŽyh5‹÷]’ß›ð³‰ô¡»6ËÖvôÇ•pPuŸ¸Ë‹I–Ï+hbÙ¶í8,>úo_cý_{ÿ‹`u5Îöµ¾Õ³I×ù.ÿdÚÑŽc2>5áNmÆ£k35ÒÞÒ.åkËãE¤@@@' g>vnÝáÖyÄI¦ EïžxáÊ%½dÑ[ià]Syp×~©¯ÍJ[Sòt‰6 ×§‹237ë-LO.ZwB@@þo]s£ Îu͇^=UjÓ›Z=yùTr§rÒs»×Ÿ€hàƒ{÷¥ûÚu9°gŸdÒ™RuÉC@@þY@/½~ånrðlð…«ÜA¤óÌiÉ̹€3ÓÿÜ( € € €@\@'ºð|öçœ<|ü(,v—`…)oç\çYx> {·ï–¬wI € € °½ìêu~ÈM>úîôÉ¡#‡Ãê‰ ˆ–ôv÷HÿÝ~ïR¬*ÙÖÚ.•ë+Ã ì € € €¥ô¬‡.871&Ué´;óѰ¥aAhÉ ˆF¼–«/ËûÉI·¨¤®¦N6mØè-.©pó[Ð @@Xuúl0}¹>dðë÷oîV»z·«ŽnÁy)E' <š•[7nJ~dDŠÅ¢üúóÛÝËÊyG@@Õ) %,[Sæžp^ŸÍÊqoâ¡·ÚÕIÈbÛ²Å*’ € €¬Tà/迉|£G½xIEND®B`‚vcrpy-1.7.3/vcr/000077500000000000000000000000001256646735100134765ustar00rootroot00000000000000vcrpy-1.7.3/vcr/__init__.py000066400000000000000000000006071256646735100156120ustar00rootroot00000000000000import logging from .config import VCR # Set default logging handler to avoid "No handler found" warnings. try: # Python 2.7+ from logging import NullHandler except ImportError: class NullHandler(logging.Handler): def emit(self, record): pass logging.getLogger(__name__).addHandler(NullHandler()) default_vcr = VCR() use_cassette = default_vcr.use_cassette vcrpy-1.7.3/vcr/cassette.py000066400000000000000000000252441256646735100156720ustar00rootroot00000000000000import sys import inspect import logging import wrapt from .compat import contextlib, collections from .errors import UnhandledHTTPRequestError from .matchers import requests_match, uri, method from .patch import CassettePatcherBuilder from .persist import load_cassette, save_cassette from .serializers import yamlserializer from .util import partition_dict log = logging.getLogger(__name__) class CassetteContextDecorator(object): """Context manager/decorator that handles installing the cassette and removing cassettes. This class defers the creation of a new cassette instance until the point at which it is installed by context manager or decorator. The fact that a new cassette is used with each application prevents the state of any cassette from interfering with another. Instances of this class are NOT reentrant as context managers. However, functions that are decorated by ``CassetteContextDecorator`` instances ARE reentrant. See the implementation of ``__call__`` on this class for more details. There is also a guard against attempts to reenter instances of this class as a context manager in ``__exit__``. """ _non_cassette_arguments = ('path_transformer', 'func_path_generator') @classmethod def from_args(cls, cassette_class, **kwargs): return cls(cassette_class, lambda: dict(kwargs)) def __init__(self, cls, args_getter): self.cls = cls self._args_getter = args_getter self.__finish = None def _patch_generator(self, cassette): with contextlib.ExitStack() as exit_stack: for patcher in CassettePatcherBuilder(cassette).build(): exit_stack.enter_context(patcher) log_format = '{action} context for cassette at {path}.' log.debug(log_format.format( action="Entering", path=cassette._path )) yield cassette log.debug(log_format.format( action="Exiting", path=cassette._path )) # TODO(@IvanMalison): Hmmm. it kind of feels like this should be # somewhere else. cassette._save() def __enter__(self): # This assertion is here to prevent the dangerous behavior # that would result from forgetting about a __finish before # completing it. # How might this condition be met? Here is an example: # context_decorator = Cassette.use('whatever') # with context_decorator: # with context_decorator: # pass assert self.__finish is None, "Cassette already open." other_kwargs, cassette_kwargs = partition_dict( lambda key, _: key in self._non_cassette_arguments, self._args_getter() ) if 'path_transformer' in other_kwargs: transformer = other_kwargs['path_transformer'] cassette_kwargs['path'] = transformer(cassette_kwargs['path']) self.__finish = self._patch_generator(self.cls.load(**cassette_kwargs)) return next(self.__finish) def __exit__(self, *args): next(self.__finish, None) self.__finish = None @wrapt.decorator def __call__(self, function, instance, args, kwargs): # This awkward cloning thing is done to ensure that decorated # functions are reentrant. This is required for thread # safety and the correct operation of recursive functions. args_getter = self._build_args_getter_for_decorator(function) return type(self)(self.cls, args_getter)._execute_function( function, args, kwargs ) def _execute_function(self, function, args, kwargs): if inspect.isgeneratorfunction(function): handler = self._handle_coroutine else: handler = self._handle_function return handler(function, args, kwargs) def _handle_coroutine(self, function, args, kwargs): """Wraps a coroutine so that we're inside the cassette context for the duration of the coroutine. """ with self as cassette: coroutine = self.__handle_function(cassette, function, args, kwargs) # We don't need to catch StopIteration. The caller (Tornado's # gen.coroutine, for example) will handle that. to_yield = next(coroutine) while True: try: to_send = yield to_yield except Exception: to_yield = coroutine.throw(*sys.exc_info()) else: to_yield = coroutine.send(to_send) def __handle_function(self, cassette, function, args, kwargs): if cassette.inject: return function(cassette, *args, **kwargs) else: return function(*args, **kwargs) def _handle_function(self, function, args, kwargs): with self as cassette: self.__handle_function(cassette, function, args, kwargs) @staticmethod def get_function_name(function): return function.__name__ def _build_args_getter_for_decorator(self, function): def new_args_getter(): kwargs = self._args_getter() if 'path' not in kwargs: name_generator = (kwargs.get('func_path_generator') or self.get_function_name) path = name_generator(function) kwargs['path'] = path return kwargs return new_args_getter class Cassette(object): """A container for recorded requests and responses""" @classmethod def load(cls, **kwargs): """Instantiate and load the cassette stored at the specified path.""" new_cassette = cls(**kwargs) new_cassette._load() return new_cassette @classmethod def use_arg_getter(cls, arg_getter): return CassetteContextDecorator(cls, arg_getter) @classmethod def use(cls, **kwargs): return CassetteContextDecorator.from_args(cls, **kwargs) def __init__(self, path, serializer=yamlserializer, record_mode='once', match_on=(uri, method), before_record_request=None, before_record_response=None, custom_patches=(), inject=False): self._path = path self._serializer = serializer self._match_on = match_on self._before_record_request = before_record_request or (lambda x: x) self._before_record_response = before_record_response or (lambda x: x) self.inject = inject self.record_mode = record_mode self.custom_patches = custom_patches # self.data is the list of (req, resp) tuples self.data = [] self.play_counts = collections.Counter() self.dirty = False self.rewound = False @property def play_count(self): return sum(self.play_counts.values()) @property def all_played(self): """Returns True if all responses have been played, False otherwise.""" return self.play_count == len(self) @property def requests(self): return [request for (request, response) in self.data] @property def responses(self): return [response for (request, response) in self.data] @property def write_protected(self): return self.rewound and self.record_mode == 'once' or \ self.record_mode == 'none' def append(self, request, response): """Add a request, response pair to this cassette""" request = self._before_record_request(request) if not request: return response = self._before_record_response(response) self.data.append((request, response)) self.dirty = True def filter_request(self, request): return self._before_record_request(request) def _responses(self, request): """ internal API, returns an iterator with all responses matching the request. """ request = self._before_record_request(request) for index, (stored_request, response) in enumerate(self.data): if requests_match(request, stored_request, self._match_on): yield index, response def can_play_response_for(self, request): request = self._before_record_request(request) return request and request in self and \ self.record_mode != 'all' and \ self.rewound def play_response(self, request): """ Get the response corresponding to a request, but only if it hasn't been played back before, and mark it as played """ for index, response in self._responses(request): if self.play_counts[index] == 0: self.play_counts[index] += 1 return response # The cassette doesn't contain the request asked for. raise UnhandledHTTPRequestError( "The cassette (%r) doesn't contain the request (%r) asked for" % (self._path, request) ) def responses_of(self, request): """ Find the responses corresponding to a request. This function isn't actually used by VCR internally, but is provided as an external API. """ responses = [response for index, response in self._responses(request)] if responses: return responses # The cassette doesn't contain the request asked for. raise UnhandledHTTPRequestError( "The cassette (%r) doesn't contain the request (%r) asked for" % (self._path, request) ) def _as_dict(self): return {"requests": self.requests, "responses": self.responses} def _save(self, force=False): if force or self.dirty: save_cassette( self._path, self._as_dict(), serializer=self._serializer ) self.dirty = False def _load(self): try: requests, responses = load_cassette( self._path, serializer=self._serializer ) for request, response in zip(requests, responses): self.append(request, response) self.dirty = False self.rewound = True except IOError: pass def __str__(self): return "".format( len(self) ) def __len__(self): """Return the number of request,response pairs stored in here""" return len(self.data) def __contains__(self, request): """Return whether or not a request has been stored""" for index, response in self._responses(request): if self.play_counts[index] == 0: return True return False vcrpy-1.7.3/vcr/compat.py000066400000000000000000000006241256646735100153350ustar00rootroot00000000000000try: from unittest import mock except ImportError: import mock try: import contextlib except ImportError: import contextlib2 as contextlib else: if not hasattr(contextlib, 'ExitStack'): import contextlib2 as contextlib import collections if not hasattr(collections, 'Counter'): import backport_collections as collections __all__ = ['mock', 'contextlib', 'collections'] vcrpy-1.7.3/vcr/config.py000066400000000000000000000230731256646735100153220ustar00rootroot00000000000000import copy import functools import inspect import os import six from .compat import collections from .cassette import Cassette from .serializers import yamlserializer, jsonserializer from .util import compose from . import matchers from . import filters class VCR(object): @staticmethod def ensure_suffix(suffix): def ensure(path): if not path.endswith(suffix): return path + suffix return path return ensure def __init__(self, path_transformer=lambda x: x, before_record_request=None, custom_patches=(), filter_query_parameters=(), ignore_hosts=(), record_mode="once", ignore_localhost=False, filter_headers=(), before_record_response=None, filter_post_data_parameters=(), match_on=('method', 'scheme', 'host', 'port', 'path', 'query'), before_record=None, inject_cassette=False, serializer='yaml', cassette_library_dir=None, func_path_generator=None): self.serializer = serializer self.match_on = match_on self.cassette_library_dir = cassette_library_dir self.serializers = { 'yaml': yamlserializer, 'json': jsonserializer, } self.matchers = { 'method': matchers.method, 'uri': matchers.uri, 'url': matchers.uri, # matcher for backwards compatibility 'scheme': matchers.scheme, 'host': matchers.host, 'port': matchers.port, 'path': matchers.path, 'query': matchers.query, 'headers': matchers.headers, 'raw_body': matchers.raw_body, 'body': matchers.body, } self.record_mode = record_mode self.filter_headers = filter_headers self.filter_query_parameters = filter_query_parameters self.filter_post_data_parameters = filter_post_data_parameters self.before_record_request = before_record_request or before_record self.before_record_response = before_record_response self.ignore_hosts = ignore_hosts self.ignore_localhost = ignore_localhost self.inject_cassette = inject_cassette self.path_transformer = path_transformer self.func_path_generator = func_path_generator self._custom_patches = tuple(custom_patches) def _get_serializer(self, serializer_name): try: serializer = self.serializers[serializer_name] except KeyError: raise KeyError( "Serializer {0} doesn't exist or isn't registered".format( serializer_name ) ) return serializer def _get_matchers(self, matcher_names): matchers = [] try: for m in matcher_names: matchers.append(self.matchers[m]) except KeyError: raise KeyError( "Matcher {0} doesn't exist or isn't registered".format(m) ) return matchers def use_cassette(self, path=None, **kwargs): if path is not None and not isinstance(path, six.string_types): function = path # Assume this is an attempt to decorate a function return self._use_cassette(**kwargs)(function) return self._use_cassette(path=path, **kwargs) def _use_cassette(self, with_current_defaults=False, **kwargs): if with_current_defaults: config = self.get_merged_config(**kwargs) return Cassette.use(**config) # This is made a function that evaluates every time a cassette # is made so that changes that are made to this VCR instance # that occur AFTER the `use_cassette` decorator is applied # still affect subsequent calls to the decorated function. args_getter = functools.partial(self.get_merged_config, **kwargs) return Cassette.use_arg_getter(args_getter) def get_merged_config(self, **kwargs): serializer_name = kwargs.get('serializer', self.serializer) matcher_names = kwargs.get('match_on', self.match_on) path_transformer = kwargs.get( 'path_transformer', self.path_transformer or self.ensure_suffix('.yaml') ) func_path_generator = kwargs.get( 'func_path_generator', self.func_path_generator ) cassette_library_dir = kwargs.get( 'cassette_library_dir', self.cassette_library_dir ) additional_matchers = kwargs.get('additional_matchers', ()) if cassette_library_dir: def add_cassette_library_dir(path): if not path.startswith(cassette_library_dir): return os.path.join(cassette_library_dir, path) return path path_transformer = compose( add_cassette_library_dir, path_transformer ) elif not func_path_generator: # If we don't have a library dir, use the functions # location to build a full path for cassettes. func_path_generator = self._build_path_from_func_using_module merged_config = { 'serializer': self._get_serializer(serializer_name), 'match_on': self._get_matchers( tuple(matcher_names) + tuple(additional_matchers) ), 'record_mode': kwargs.get('record_mode', self.record_mode), 'before_record_request': self._build_before_record_request(kwargs), 'before_record_response': self._build_before_record_response(kwargs), 'custom_patches': self._custom_patches + kwargs.get( 'custom_patches', () ), 'inject': kwargs.get('inject_cassette', self.inject_cassette), 'path_transformer': path_transformer, 'func_path_generator': func_path_generator } path = kwargs.get('path') if path: merged_config['path'] = path return merged_config def _build_before_record_response(self, options): before_record_response = options.get( 'before_record_response', self.before_record_response ) filter_functions = [] if before_record_response: if not isinstance(before_record_response, collections.Iterable): before_record_response = (before_record_response,) filter_functions.extend(before_record_response) def before_record_response(response): for function in filter_functions: if response is None: break response = function(response) return response return before_record_response def _build_before_record_request(self, options): filter_functions = [] filter_headers = options.get( 'filter_headers', self.filter_headers ) filter_query_parameters = options.get( 'filter_query_parameters', self.filter_query_parameters ) filter_post_data_parameters = options.get( 'filter_post_data_parameters', self.filter_post_data_parameters ) before_record_request = options.get( "before_record_request", options.get("before_record", self.before_record_request) ) ignore_hosts = options.get( 'ignore_hosts', self.ignore_hosts ) ignore_localhost = options.get( 'ignore_localhost', self.ignore_localhost ) if filter_headers: filter_functions.append( functools.partial( filters.remove_headers, headers_to_remove=filter_headers ) ) if filter_query_parameters: filter_functions.append(functools.partial( filters.remove_query_parameters, query_parameters_to_remove=filter_query_parameters )) if filter_post_data_parameters: filter_functions.append( functools.partial( filters.remove_post_data_parameters, post_data_parameters_to_remove=filter_post_data_parameters ) ) hosts_to_ignore = set(ignore_hosts) if ignore_localhost: hosts_to_ignore.update(('localhost', '0.0.0.0', '127.0.0.1')) if hosts_to_ignore: filter_functions.append(self._build_ignore_hosts(hosts_to_ignore)) if before_record_request: if not isinstance(before_record_request, collections.Iterable): before_record_request = (before_record_request,) filter_functions.extend(before_record_request) def before_record_request(request): request = copy.copy(request) for function in filter_functions: if request is None: break request = function(request) return request return before_record_request @staticmethod def _build_ignore_hosts(hosts_to_ignore): def filter_ignored_hosts(request): if hasattr(request, 'host') and request.host in hosts_to_ignore: return return request return filter_ignored_hosts @staticmethod def _build_path_from_func_using_module(function): return os.path.join(os.path.dirname(inspect.getfile(function)), function.__name__) def register_serializer(self, name, serializer): self.serializers[name] = serializer def register_matcher(self, name, matcher): self.matchers[name] = matcher vcrpy-1.7.3/vcr/errors.py000066400000000000000000000003011256646735100153560ustar00rootroot00000000000000class CannotOverwriteExistingCassetteException(Exception): pass class UnhandledHTTPRequestError(KeyError): """Raised when a cassette does not contain the request we want.""" pass vcrpy-1.7.3/vcr/filters.py000066400000000000000000000040011256646735100155130ustar00rootroot00000000000000from six import BytesIO, text_type from six.moves.urllib.parse import urlparse, urlencode, urlunparse import copy import json from .compat import collections def remove_headers(request, headers_to_remove): headers = copy.copy(request.headers) headers_to_remove = [h.lower() for h in headers_to_remove] keys = [k for k in headers if k.lower() in headers_to_remove] if keys: for k in keys: headers.pop(k) request.headers = headers return request def remove_query_parameters(request, query_parameters_to_remove): query = request.query new_query = [(k, v) for (k, v) in query if k not in query_parameters_to_remove] if len(new_query) != len(query): uri_parts = list(urlparse(request.uri)) uri_parts[4] = urlencode(new_query) request.uri = urlunparse(uri_parts) return request def remove_post_data_parameters(request, post_data_parameters_to_remove): if request.method == 'POST' and not isinstance(request.body, BytesIO): if ('Content-Type' in request.headers and request.headers['Content-Type'] == 'application/json'): json_data = json.loads(request.body.decode('utf-8')) for k in list(json_data.keys()): if k in post_data_parameters_to_remove: del json_data[k] request.body = json.dumps(json_data).encode('utf-8') else: post_data = collections.OrderedDict() if isinstance(request.body, text_type): request.body = request.body.encode('utf-8') for k, sep, v in (p.partition(b'=') for p in request.body.split(b'&')): if k in post_data: post_data[k].append(v) elif len(k) > 0 and k.decode('utf-8') not in post_data_parameters_to_remove: post_data[k] = [v] request.body = b'&'.join( b'='.join([k, v]) for k, vals in post_data.items() for v in vals) return request vcrpy-1.7.3/vcr/matchers.py000066400000000000000000000045351256646735100156650ustar00rootroot00000000000000import json from six.moves import urllib, xmlrpc_client from .util import CaseInsensitiveDict, read_body import logging log = logging.getLogger(__name__) def method(r1, r2): return r1.method == r2.method def uri(r1, r2): return r1.uri == r2.uri def host(r1, r2): return r1.host == r2.host def scheme(r1, r2): return r1.scheme == r2.scheme def port(r1, r2): return r1.port == r2.port def path(r1, r2): return r1.path == r2.path def query(r1, r2): return r1.query == r2.query def raw_body(r1, r2): return read_body(r1) == read_body(r2) def _header_checker(value, header='Content-Type'): def checker(headers): return value in headers.get(header, '').lower() return checker def _transform_json(body): # Request body is always a byte string, but json.loads() wants a text # string. RFC 7159 says the default encoding is UTF-8 (although UTF-16 # and UTF-32 are also allowed: hmmmmm). return json.loads(body.decode('utf-8')) _xml_header_checker = _header_checker('text/xml') _xmlrpc_header_checker = _header_checker('xmlrpc', header='User-Agent') _checker_transformer_pairs = ( (_header_checker('application/x-www-form-urlencoded'), urllib.parse.parse_qs), (_header_checker('application/json'), _transform_json), (lambda request: _xml_header_checker(request) and _xmlrpc_header_checker(request), xmlrpc_client.loads), ) def _identity(x): return x def _get_transformer(request): headers = CaseInsensitiveDict(request.headers) for checker, transformer in _checker_transformer_pairs: if checker(headers): return transformer else: return _identity def body(r1, r2): transformer = _get_transformer(r1) r2_transformer = _get_transformer(r2) if transformer != r2_transformer: transformer = _identity return transformer(read_body(r1)) == transformer(read_body(r2)) def headers(r1, r2): return r1.headers == r2.headers def _log_matches(r1, r2, matches): differences = [m for m in matches if not m[0]] if differences: log.debug( "Requests {0} and {1} differ according to " "the following matchers: {2}".format(r1, r2, differences) ) def requests_match(r1, r2, matchers): matches = [(m(r1, r2), m) for m in matchers] _log_matches(r1, r2, matches) return all([m[0] for m in matches]) vcrpy-1.7.3/vcr/migration.py000066400000000000000000000113171256646735100160440ustar00rootroot00000000000000""" Migration script for old 'yaml' and 'json' cassettes .. warning:: Backup your cassettes files before migration. It merges and deletes the request obsolete keys (protocol, host, port, path) into new 'uri' key. Usage:: python -m vcr.migration PATH The PATH can be path to the directory with cassettes or cassette itself """ import json import os import shutil import sys import tempfile import yaml from .serializers import compat, yamlserializer, jsonserializer from .serialize import serialize from . import request from .stubs.compat import get_httpmessage # Use the libYAML versions if possible try: from yaml import CLoader as Loader except ImportError: from yaml import Loader def preprocess_yaml(cassette): # this is the hack that makes the whole thing work. The old version used # to deserialize to Request objects automatically using pyYaml's !!python # tag system. This made it difficult to deserialize old cassettes on new # versions. So this just strips the tags before deserializing. STRINGS_TO_NUKE = [ '!!python/object:vcr.request.Request', '!!python/object/apply:__builtin__.frozenset', '!!python/object/apply:builtins.frozenset', ] for s in STRINGS_TO_NUKE: cassette = cassette.replace(s, '') return cassette PARTS = [ 'protocol', 'host', 'port', 'path', ] def build_uri(**parts): port = parts['port'] scheme = parts['protocol'] default_port = {'https': 443, 'http': 80}[scheme] parts['port'] = ':{0}'.format(port) if port != default_port else '' return "{protocol}://{host}{port}{path}".format(**parts) def _migrate(data): interactions = [] for item in data: req = item['request'] res = item['response'] uri = dict((k, req.pop(k)) for k in PARTS) req['uri'] = build_uri(**uri) # convert headers to dict of lists headers = req['headers'] for k in headers: headers[k] = [headers[k]] response_headers = {} for k, v in get_httpmessage( b"".join(h.encode('utf-8') for h in res['headers']) ).items(): response_headers.setdefault(k, []) response_headers[k].append(v) res['headers'] = response_headers interactions.append({'request': req, 'response': res}) return { 'requests': [ request.Request._from_dict(i['request']) for i in interactions ], 'responses': [i['response'] for i in interactions], } def migrate_json(in_fp, out_fp): data = json.load(in_fp) if _already_migrated(data): return False interactions = _migrate(data) out_fp.write(serialize(interactions, jsonserializer)) return True def _list_of_tuples_to_dict(fs): return dict((k, v) for k, v in fs[0]) def _already_migrated(data): try: if data.get('version') == 1: return True except AttributeError: return False def migrate_yml(in_fp, out_fp): data = yaml.load(preprocess_yaml(in_fp.read()), Loader=Loader) if _already_migrated(data): return False for i in range(len(data)): data[i]['request']['headers'] = _list_of_tuples_to_dict( data[i]['request']['headers'] ) interactions = _migrate(data) out_fp.write(serialize(interactions, yamlserializer)) return True def migrate(file_path, migration_fn): # because we assume that original files can be reverted # we will try to copy the content. (os.rename not needed) with tempfile.TemporaryFile(mode='w+') as out_fp: with open(file_path, 'r') as in_fp: if not migration_fn(in_fp, out_fp): return False with open(file_path, 'w') as in_fp: out_fp.seek(0) shutil.copyfileobj(out_fp, in_fp) return True def try_migrate(path): if path.endswith('.json'): return migrate(path, migrate_json) elif path.endswith('.yaml') or path.endswith('.yml'): return migrate(path, migrate_yml) return False def main(): if len(sys.argv) != 2: raise SystemExit("Please provide path to cassettes directory or file. " "Usage: python -m vcr.migration PATH") path = sys.argv[1] if not os.path.isabs(path): path = os.path.abspath(path) files = [path] if os.path.isdir(path): files = (os.path.join(root, name) for (root, dirs, files) in os.walk(path) for name in files) for file_path in files: migrated = try_migrate(file_path) status = 'OK' if migrated else 'FAIL' sys.stderr.write("[{0}] {1}\n".format(status, file_path)) sys.stderr.write("Done.\n") if __name__ == '__main__': main() vcrpy-1.7.3/vcr/patch.py000066400000000000000000000370061256646735100151550ustar00rootroot00000000000000'''Utilities for patching in cassettes''' import functools import itertools from .compat import contextlib, mock from .stubs import VCRHTTPConnection, VCRHTTPSConnection from six.moves import http_client as httplib # Save some of the original types for the purposes of unpatching _HTTPConnection = httplib.HTTPConnection _HTTPSConnection = httplib.HTTPSConnection # Try to save the original types for requests try: import requests.packages.urllib3.connectionpool as cpool except ImportError: # pragma: no cover pass else: _VerifiedHTTPSConnection = cpool.VerifiedHTTPSConnection _cpoolHTTPConnection = cpool.HTTPConnection _cpoolHTTPSConnection = cpool.HTTPSConnection # Try to save the original types for urllib3 try: import urllib3 except ImportError: # pragma: no cover pass else: _VerifiedHTTPSConnection = urllib3.connectionpool.VerifiedHTTPSConnection # Try to save the original types for httplib2 try: import httplib2 except ImportError: # pragma: no cover pass else: _HTTPConnectionWithTimeout = httplib2.HTTPConnectionWithTimeout _HTTPSConnectionWithTimeout = httplib2.HTTPSConnectionWithTimeout _SCHEME_TO_CONNECTION = httplib2.SCHEME_TO_CONNECTION # Try to save the original types for boto try: import boto.https_connection except ImportError: # pragma: no cover pass else: _CertValidatingHTTPSConnection = boto.https_connection.CertValidatingHTTPSConnection # Try to save the original types for Tornado try: import tornado.simple_httpclient except ImportError: # pragma: no cover pass else: _SimpleAsyncHTTPClient_fetch_impl = \ tornado.simple_httpclient.SimpleAsyncHTTPClient.fetch_impl try: import tornado.curl_httpclient except ImportError: # pragma: no cover pass else: _CurlAsyncHTTPClient_fetch_impl = \ tornado.curl_httpclient.CurlAsyncHTTPClient.fetch_impl class CassettePatcherBuilder(object): def _build_patchers_from_mock_triples_decorator(function): @functools.wraps(function) def wrapped(self, *args, **kwargs): return self._build_patchers_from_mock_triples( function(self, *args, **kwargs) ) return wrapped def __init__(self, cassette): self._cassette = cassette self._class_to_cassette_subclass = {} def build(self): return itertools.chain( self._httplib(), self._requests(), self._urllib3(), self._httplib2(), self._boto(), self._tornado(), self._build_patchers_from_mock_triples( self._cassette.custom_patches ), ) def _build_patchers_from_mock_triples(self, mock_triples): for args in mock_triples: patcher = self._build_patcher(*args) if patcher: yield patcher def _build_patcher(self, obj, patched_attribute, replacement_class): if not hasattr(obj, patched_attribute): return return mock.patch.object(obj, patched_attribute, self._recursively_apply_get_cassette_subclass( replacement_class)) def _recursively_apply_get_cassette_subclass(self, replacement_dict_or_obj): """One of the subtleties of this class is that it does not directly replace HTTPSConnection with `VCRRequestsHTTPSConnection`, but a subclass of the aforementioned class that has the `cassette` class attribute assigned to `self._cassette`. This behavior is necessary to properly support nested cassette contexts. This function exists to ensure that we use the same class object (reference) to patch everything that replaces VCRRequestHTTP[S]Connection, but that we can talk about patching them with the raw references instead, and without worrying about exactly where the subclass with the relevant value for `cassette` is first created. The function is recursive because it looks in to dictionaries and replaces class values at any depth with the subclass described in the previous paragraph. """ if isinstance(replacement_dict_or_obj, dict): for key, replacement_obj in replacement_dict_or_obj.items(): replacement_obj = self._recursively_apply_get_cassette_subclass( replacement_obj) replacement_dict_or_obj[key] = replacement_obj return replacement_dict_or_obj if hasattr(replacement_dict_or_obj, 'cassette'): replacement_dict_or_obj = self._get_cassette_subclass( replacement_dict_or_obj) return replacement_dict_or_obj def _get_cassette_subclass(self, klass): if klass.cassette is not None: return klass if klass not in self._class_to_cassette_subclass: subclass = self._build_cassette_subclass(klass) self._class_to_cassette_subclass[klass] = subclass return self._class_to_cassette_subclass[klass] def _build_cassette_subclass(self, base_class): bases = (base_class,) if not issubclass(base_class, object): # Check for old style class bases += (object,) return type('{0}{1}'.format(base_class.__name__, self._cassette._path), bases, dict(cassette=self._cassette)) @_build_patchers_from_mock_triples_decorator def _httplib(self): yield httplib, 'HTTPConnection', VCRHTTPConnection yield httplib, 'HTTPSConnection', VCRHTTPSConnection def _requests(self): try: import requests.packages.urllib3.connectionpool as cpool except ImportError: # pragma: no cover return () from .stubs import requests_stubs return self._urllib3_patchers(cpool, requests_stubs) def _patched_get_conn(self, connection_pool_class, connection_class_getter): get_conn = connection_pool_class._get_conn @functools.wraps(get_conn) def patched_get_conn(pool, timeout=None): connection = get_conn(pool, timeout) connection_class = pool.ConnectionCls if hasattr(pool, 'ConnectionCls') \ else connection_class_getter() # We need to make sure that we are actually providing a # patched version of the connection class. This might not # always be the case because the pool keeps previously # used connections (which might actually be of a different # class) around. This while loop will terminate because # eventually the pool will run out of connections. while not isinstance(connection, connection_class): connection = get_conn(pool, timeout) return connection return patched_get_conn def _patched_new_conn(self, connection_pool_class, connection_remover): new_conn = connection_pool_class._new_conn @functools.wraps(new_conn) def patched_new_conn(pool): new_connection = new_conn(pool) connection_remover.add_connection_to_pool_entry(pool, new_connection) return new_connection return patched_new_conn def _urllib3(self): try: import urllib3.connectionpool as cpool except ImportError: # pragma: no cover return () from .stubs import urllib3_stubs return self._urllib3_patchers(cpool, urllib3_stubs) @_build_patchers_from_mock_triples_decorator def _httplib2(self): try: import httplib2 as cpool except ImportError: # pragma: no cover pass else: from .stubs.httplib2_stubs import VCRHTTPConnectionWithTimeout from .stubs.httplib2_stubs import VCRHTTPSConnectionWithTimeout yield cpool, 'HTTPConnectionWithTimeout', VCRHTTPConnectionWithTimeout yield cpool, 'HTTPSConnectionWithTimeout', VCRHTTPSConnectionWithTimeout yield cpool, 'SCHEME_TO_CONNECTION', {'http': VCRHTTPConnectionWithTimeout, 'https': VCRHTTPSConnectionWithTimeout} @_build_patchers_from_mock_triples_decorator def _boto(self): try: import boto.https_connection as cpool except ImportError: # pragma: no cover pass else: from .stubs.boto_stubs import VCRCertValidatingHTTPSConnection yield cpool, 'CertValidatingHTTPSConnection', VCRCertValidatingHTTPSConnection @_build_patchers_from_mock_triples_decorator def _tornado(self): try: import tornado.simple_httpclient as simple except ImportError: # pragma: no cover pass else: from .stubs.tornado_stubs import vcr_fetch_impl new_fetch_impl = vcr_fetch_impl( self._cassette, _SimpleAsyncHTTPClient_fetch_impl ) yield simple.SimpleAsyncHTTPClient, 'fetch_impl', new_fetch_impl try: import tornado.curl_httpclient as curl except ImportError: # pragma: no cover pass else: from .stubs.tornado_stubs import vcr_fetch_impl new_fetch_impl = vcr_fetch_impl( self._cassette, _CurlAsyncHTTPClient_fetch_impl ) yield curl.CurlAsyncHTTPClient, 'fetch_impl', new_fetch_impl def _urllib3_patchers(self, cpool, stubs): http_connection_remover = ConnectionRemover( self._get_cassette_subclass(stubs.VCRRequestsHTTPConnection) ) https_connection_remover = ConnectionRemover( self._get_cassette_subclass(stubs.VCRRequestsHTTPSConnection) ) mock_triples = ( (cpool, 'VerifiedHTTPSConnection', stubs.VCRRequestsHTTPSConnection), (cpool, 'VerifiedHTTPSConnection', stubs.VCRRequestsHTTPSConnection), (cpool, 'HTTPConnection', stubs.VCRRequestsHTTPConnection), (cpool, 'HTTPSConnection', stubs.VCRRequestsHTTPSConnection), (cpool, 'is_connection_dropped', mock.Mock(return_value=False)), # Needed on Windows only (cpool.HTTPConnectionPool, 'ConnectionCls', stubs.VCRRequestsHTTPConnection), (cpool.HTTPSConnectionPool, 'ConnectionCls', stubs.VCRRequestsHTTPSConnection), ) # These handle making sure that sessions only use the # connections of the appropriate type. mock_triples += ((cpool.HTTPConnectionPool, '_get_conn', self._patched_get_conn(cpool.HTTPConnectionPool, lambda : cpool.HTTPConnection)), (cpool.HTTPSConnectionPool, '_get_conn', self._patched_get_conn(cpool.HTTPSConnectionPool, lambda : cpool.HTTPSConnection)), (cpool.HTTPConnectionPool, '_new_conn', self._patched_new_conn(cpool.HTTPConnectionPool, http_connection_remover)), (cpool.HTTPSConnectionPool, '_new_conn', self._patched_new_conn(cpool.HTTPSConnectionPool, https_connection_remover))) return itertools.chain(self._build_patchers_from_mock_triples(mock_triples), (http_connection_remover, https_connection_remover)) class ConnectionRemover(object): def __init__(self, connection_class): self._connection_class = connection_class self._connection_pool_to_connections = {} def add_connection_to_pool_entry(self, pool, connection): if isinstance(connection, self._connection_class): self._connection_pool_to_connections.setdefault(pool, set()).add(connection) def remove_connection_to_pool_entry(self, pool, connection): if isinstance(connection, self._connection_class): self._connection_pool_to_connections[self._connection_class].remove(connection) def __enter__(self): return self def __exit__(self, *args): for pool, connections in self._connection_pool_to_connections.items(): readd_connections = [] while pool.pool and not pool.pool.empty() and connections: connection = pool.pool.get() if isinstance(connection, self._connection_class): connections.remove(connection) else: readd_connections.append(connection) for connection in readd_connections: pool._put_conn(connection) def reset_patchers(): yield mock.patch.object(httplib, 'HTTPConnection', _HTTPConnection) yield mock.patch.object(httplib, 'HTTPSConnection', _HTTPSConnection) try: import requests.packages.urllib3.connectionpool as cpool except ImportError: # pragma: no cover pass else: # unpatch requests v1.x yield mock.patch.object(cpool, 'VerifiedHTTPSConnection', _VerifiedHTTPSConnection) yield mock.patch.object(cpool, 'HTTPConnection', _cpoolHTTPConnection) # unpatch requests v2.x if hasattr(cpool.HTTPConnectionPool, 'ConnectionCls'): yield mock.patch.object(cpool.HTTPConnectionPool, 'ConnectionCls', _cpoolHTTPConnection) yield mock.patch.object(cpool.HTTPSConnectionPool, 'ConnectionCls', _cpoolHTTPSConnection) if hasattr(cpool, 'HTTPSConnection'): yield mock.patch.object(cpool, 'HTTPSConnection', _cpoolHTTPSConnection) try: import urllib3.connectionpool as cpool except ImportError: # pragma: no cover pass else: yield mock.patch.object(cpool, 'VerifiedHTTPSConnection', _VerifiedHTTPSConnection) yield mock.patch.object(cpool, 'HTTPConnection', _HTTPConnection) yield mock.patch.object(cpool, 'HTTPSConnection', _HTTPSConnection) if hasattr(cpool.HTTPConnectionPool, 'ConnectionCls'): yield mock.patch.object(cpool.HTTPConnectionPool, 'ConnectionCls', _HTTPConnection) yield mock.patch.object(cpool.HTTPSConnectionPool, 'ConnectionCls', _HTTPSConnection) try: import httplib2 as cpool except ImportError: # pragma: no cover pass else: yield mock.patch.object(cpool, 'HTTPConnectionWithTimeout', _HTTPConnectionWithTimeout) yield mock.patch.object(cpool, 'HTTPSConnectionWithTimeout', _HTTPSConnectionWithTimeout) yield mock.patch.object(cpool, 'SCHEME_TO_CONNECTION', _SCHEME_TO_CONNECTION) try: import boto.https_connection as cpool except ImportError: # pragma: no cover pass else: yield mock.patch.object(cpool, 'CertValidatingHTTPSConnection', _CertValidatingHTTPSConnection) try: import tornado.simple_httpclient as simple except ImportError: # pragma: no cover pass else: yield mock.patch.object( simple.SimpleAsyncHTTPClient, 'fetch_impl', _SimpleAsyncHTTPClient_fetch_impl, ) try: import tornado.curl_httpclient as curl except ImportError: # pragma: no cover pass else: yield mock.patch.object( curl.CurlAsyncHTTPClient, 'fetch_impl', _CurlAsyncHTTPClient_fetch_impl, ) @contextlib.contextmanager def force_reset(): with contextlib.ExitStack() as exit_stack: for patcher in reset_patchers(): exit_stack.enter_context(patcher) yield vcrpy-1.7.3/vcr/persist.py000066400000000000000000000007231256646735100155430ustar00rootroot00000000000000from .persisters.filesystem import FilesystemPersister from .serialize import serialize, deserialize def load_cassette(cassette_path, serializer): with open(cassette_path) as f: cassette_content = f.read() cassette = deserialize(cassette_content, serializer) return cassette def save_cassette(cassette_path, cassette_dict, serializer): data = serialize(cassette_dict, serializer) FilesystemPersister.write(cassette_path, data) vcrpy-1.7.3/vcr/persisters/000077500000000000000000000000001256646735100157015ustar00rootroot00000000000000vcrpy-1.7.3/vcr/persisters/__init__.py000066400000000000000000000000001256646735100200000ustar00rootroot00000000000000vcrpy-1.7.3/vcr/persisters/filesystem.py000066400000000000000000000004751256646735100204450ustar00rootroot00000000000000import os class FilesystemPersister(object): @classmethod def write(cls, cassette_path, data): dirname, filename = os.path.split(cassette_path) if dirname and not os.path.exists(dirname): os.makedirs(dirname) with open(cassette_path, 'w') as f: f.write(data) vcrpy-1.7.3/vcr/request.py000066400000000000000000000057741256646735100155550ustar00rootroot00000000000000from six import BytesIO, text_type from six.moves.urllib.parse import urlparse, parse_qsl class Request(object): """ VCR's representation of a request. There is a weird quirk in HTTP. You can send the same header twice. For this reason, headers are represented by a dict, with lists as the values. However, it appears that HTTPlib is completely incapable of sending the same header twice. This puts me in a weird position: I want to be able to accurately represent HTTP headers in cassettes, but I don't want the extra step of always having to do [0] in the general case, i.e. request.headers['key'][0] In addition, some servers sometimes send the same header more than once, and httplib *can* deal with this situation. Futhermore, I wanted to keep the request and response cassette format as similar as possible. For this reason, in cassettes I keep a dict with lists as keys, but once deserialized into VCR, I keep them as plain, naked dicts. """ def __init__(self, method, uri, body, headers): self.method = method self.uri = uri self._was_file = hasattr(body, 'read') if self._was_file: self.body = body.read() else: self.body = body self.headers = {} for key in headers: self.add_header(key, headers[key]) @property def body(self): return BytesIO(self._body) if self._was_file else self._body @body.setter def body(self, value): if isinstance(value, text_type): value = value.encode('utf-8') self._body = value def add_header(self, key, value): # see class docstring for an explanation if isinstance(value, (tuple, list)): self.headers[key] = value[0] else: self.headers[key] = value @property def scheme(self): return urlparse(self.uri).scheme @property def host(self): return urlparse(self.uri).hostname @property def port(self): parse_uri = urlparse(self.uri) port = parse_uri.port if port is None: port = {'https': 443, 'http': 80}[parse_uri.scheme] return port @property def path(self): return urlparse(self.uri).path @property def query(self): q = urlparse(self.uri).query return sorted(parse_qsl(q)) # alias for backwards compatibility @property def url(self): return self.uri # alias for backwards compatibility @property def protocol(self): return self.scheme def __str__(self): return "".format(self.method, self.uri) def __repr__(self): return self.__str__() def _to_dict(self): return { 'method': self.method, 'uri': self.uri, 'body': self.body, 'headers': dict(((k, [v]) for k, v in self.headers.items())), } @classmethod def _from_dict(cls, dct): return Request(**dct) vcrpy-1.7.3/vcr/serialize.py000066400000000000000000000041141256646735100160370ustar00rootroot00000000000000from vcr.serializers import compat from vcr.request import Request import yaml # version 1 cassettes started with VCR 1.0.x. # Before 1.0.x, there was no versioning. CASSETTE_FORMAT_VERSION = 1 """ Just a general note on the serialization philosophy here: I prefer cassettes to be human-readable if possible. Yaml serializes bytestrings to !!binary, which isn't readable, so I would like to serialize to strings and from strings, which yaml will encode as utf-8 automatically. All the internal HTTP stuff expects bytestrings, so this whole serialization process feels backwards. Serializing: bytestring -> string (yaml persists to utf-8) Deserializing: string (yaml converts from utf-8) -> bytestring """ def _looks_like_an_old_cassette(data): return isinstance(data, list) and len(data) and 'request' in data[0] def _warn_about_old_cassette_format(): raise ValueError( "Your cassette files were generated in an older version " "of VCR. Delete your cassettes or run the migration script." "See http://git.io/mHhLBg for more details." ) def deserialize(cassette_string, serializer): try: data = serializer.deserialize(cassette_string) # Old cassettes used to use yaml object thingy so I have to # check for some fairly stupid exceptions here except (ImportError, yaml.constructor.ConstructorError): _warn_about_old_cassette_format() if _looks_like_an_old_cassette(data): _warn_about_old_cassette_format() requests = [Request._from_dict(r['request']) for r in data['interactions']] responses = [ compat.convert_to_bytes(r['response']) for r in data['interactions'] ] return requests, responses def serialize(cassette_dict, serializer): interactions = ([{ 'request': request._to_dict(), 'response': compat.convert_to_unicode(response), } for request, response in zip( cassette_dict['requests'], cassette_dict['responses'], )]) data = { 'version': CASSETTE_FORMAT_VERSION, 'interactions': interactions, } return serializer.serialize(data) vcrpy-1.7.3/vcr/serializers/000077500000000000000000000000001256646735100160325ustar00rootroot00000000000000vcrpy-1.7.3/vcr/serializers/__init__.py000066400000000000000000000000001256646735100201310ustar00rootroot00000000000000vcrpy-1.7.3/vcr/serializers/compat.py000066400000000000000000000035271256646735100176760ustar00rootroot00000000000000import six def convert_to_bytes(resp): resp = convert_body_to_bytes(resp) return resp def convert_to_unicode(resp): resp = convert_body_to_unicode(resp) return resp def convert_body_to_bytes(resp): """ If the request body is a string, encode it to bytes (for python3 support) By default yaml serializes to utf-8 encoded bytestrings. When this cassette is loaded by python3, it's automatically decoded into unicode strings. This makes sure that it stays a bytestring, since that's what all the internal httplib machinery is expecting. For more info on py3 yaml: http://pyyaml.org/wiki/PyYAMLDocumentation#Python3support """ try: if not isinstance(resp['body']['string'], six.binary_type): resp['body']['string'] = resp['body']['string'].encode('utf-8') except (KeyError, TypeError, UnicodeEncodeError): # The thing we were converting either wasn't a dictionary or didn't # have the keys we were expecting. Some of the tests just serialize # and deserialize a string. # Also, sometimes the thing actually is binary, so if you can't encode # it, just give up. pass return resp def convert_body_to_unicode(resp): """ If the request body is bytes, decode it to a string (for python3 support) """ try: if not isinstance(resp['body']['string'], six.text_type): resp['body']['string'] = resp['body']['string'].decode('utf-8') except (KeyError, TypeError, UnicodeDecodeError): # The thing we were converting either wasn't a dictionary or didn't # have the keys we were expecting. Some of the tests just serialize # and deserialize a string. # Also, sometimes the thing actually is binary, so if you can't decode # it, just give up. pass return resp vcrpy-1.7.3/vcr/serializers/jsonserializer.py000066400000000000000000000012341256646735100214470ustar00rootroot00000000000000try: import simplejson as json except ImportError: import json def deserialize(cassette_string): return json.loads(cassette_string) def serialize(cassette_dict): try: return json.dumps(cassette_dict, indent=4) except UnicodeDecodeError as original: raise UnicodeDecodeError( original.encoding, b"Error serializing cassette to JSON", original.start, original.end, original.args[-1] + ("Does this HTTP interaction contain binary data? " "If so, use a different serializer (like the yaml serializer) " "for this request?") ) vcrpy-1.7.3/vcr/serializers/yamlserializer.py000066400000000000000000000005271256646735100214440ustar00rootroot00000000000000import yaml # Use the libYAML versions if possible try: from yaml import CLoader as Loader, CDumper as Dumper except ImportError: from yaml import Loader, Dumper def deserialize(cassette_string): return yaml.load(cassette_string, Loader=Loader) def serialize(cassette_dict): return yaml.dump(cassette_dict, Dumper=Dumper) vcrpy-1.7.3/vcr/stubs/000077500000000000000000000000001256646735100146365ustar00rootroot00000000000000vcrpy-1.7.3/vcr/stubs/__init__.py000066400000000000000000000252251256646735100167550ustar00rootroot00000000000000'''Stubs for patching HTTP and HTTPS requests''' try: import http.client except ImportError: pass import logging import six from six.moves.http_client import ( HTTPConnection, HTTPSConnection, HTTPMessage, HTTPResponse, ) from six import BytesIO from vcr.request import Request from vcr.errors import CannotOverwriteExistingCassetteException from . import compat log = logging.getLogger(__name__) class VCRFakeSocket(object): """ A socket that doesn't do anything! Used when playing back casssettes, when there is no actual open socket. """ def close(self): pass def settimeout(self, *args, **kwargs): pass def fileno(self): """ This is kinda crappy. requests will watch this descriptor and make sure it's not closed. Return file descriptor 0 since that's stdin. """ return 0 # wonder how bad this is.... def parse_headers(header_list): """ Convert headers from our serialized dict with lists for keys to a HTTPMessage """ header_string = b"" for key, values in header_list.items(): for v in values: header_string += \ key.encode('utf-8') + b":" + v.encode('utf-8') + b"\r\n" return compat.get_httpmessage(header_string) def serialize_headers(response): out = {} for key, values in compat.get_headers(response.msg): out.setdefault(key, []) out[key].extend(values) return out class VCRHTTPResponse(HTTPResponse): """ Stub reponse class that gets returned instead of a HTTPResponse """ def __init__(self, recorded_response): self.recorded_response = recorded_response self.reason = recorded_response['status']['message'] self.status = self.code = recorded_response['status']['code'] self.version = None self._content = BytesIO(self.recorded_response['body']['string']) self._closed = False headers = self.recorded_response['headers'] # Since we are loading a response that has already been serialized, our # response is no longer chunked. That means we don't want any # libraries trying to process a chunked response. By removing the # transfer-encoding: chunked header, this should cause the downstream # libraries to process this as a non-chunked response. te_key = [h for h in headers.keys() if h.upper() == 'TRANSFER-ENCODING'] if te_key: del headers[te_key[0]] self.headers = self.msg = parse_headers(headers) self.length = compat.get_header(self.msg, 'content-length') or None @property def closed(self): # in python3, I can't change the value of self.closed. So I' # twiddling self._closed and using this property to shadow the real # self.closed from the superclas return self._closed def read(self, *args, **kwargs): return self._content.read(*args, **kwargs) def readline(self, *args, **kwargs): return self._content.readline(*args, **kwargs) def close(self): self._closed = True return True def getcode(self): return self.status def isclosed(self): return self.closed def info(self): return parse_headers(self.recorded_response['headers']) def getheaders(self): message = parse_headers(self.recorded_response['headers']) return list(compat.get_header_items(message)) def getheader(self, header, default=None): values = [v for (k, v) in self.getheaders() if k.lower() == header.lower()] if values: return ', '.join(values) else: return default class VCRConnection(object): # A reference to the cassette that's currently being patched in cassette = None def _port_postfix(self): """ Returns empty string for the default port and ':port' otherwise """ port = self.real_connection.port default_port = {'https': 443, 'http': 80}[self._protocol] return ':{0}'.format(port) if port != default_port else '' def _uri(self, url): """Returns request absolute URI""" uri = "{0}://{1}{2}{3}".format( self._protocol, self.real_connection.host, self._port_postfix(), url, ) return uri def _url(self, uri): """Returns request selector url from absolute URI""" prefix = "{0}://{1}{2}".format( self._protocol, self.real_connection.host, self._port_postfix(), ) return uri.replace(prefix, '', 1) def request(self, method, url, body=None, headers=None): '''Persist the request metadata in self._vcr_request''' self._vcr_request = Request( method=method, uri=self._uri(url), body=body, headers=headers or {} ) log.debug('Got {0}'.format(self._vcr_request)) # Note: The request may not actually be finished at this point, so # I'm not sending the actual request until getresponse(). This # allows me to compare the entire length of the response to see if it # exists in the cassette. def putrequest(self, method, url, *args, **kwargs): """ httplib gives you more than one way to do it. This is a way to start building up a request. Usually followed by a bunch of putheader() calls. """ self._vcr_request = Request( method=method, uri=self._uri(url), body="", headers={} ) log.debug('Got {0}'.format(self._vcr_request)) def putheader(self, header, *values): for value in values: self._vcr_request.add_header(header, value) def send(self, data): ''' This method is called after request(), to add additional data to the body of the request. So if that happens, let's just append the data onto the most recent request in the cassette. ''' self._vcr_request.body = (self._vcr_request.body or '') + data def close(self): # Note: the real connection will only close if it's open, so # no need to check that here. self.real_connection.close() def endheaders(self, message_body=None): """ Normally, this would actually send the request to the server. We are not sending the request until getting the response, so bypass this part and just append the message body, if any. """ if message_body is not None: self._vcr_request.body = message_body def getresponse(self, _=False, **kwargs): '''Retrieve the response''' # Check to see if the cassette has a response for this request. If so, # then return it if self.cassette.can_play_response_for(self._vcr_request): log.info( "Playing response for {0} from cassette".format( self._vcr_request ) ) response = self.cassette.play_response(self._vcr_request) return VCRHTTPResponse(response) else: if self.cassette.write_protected and self.cassette.filter_request( self._vcr_request ): raise CannotOverwriteExistingCassetteException( "No match for the request (%r) was found. " "Can't overwrite existing cassette (%r) in " "your current record mode (%r)." % (self._vcr_request, self.cassette._path, self.cassette.record_mode) ) # Otherwise, we should send the request, then get the response # and return it. log.info( "{0} not in cassette, sending to real server".format( self._vcr_request ) ) # This is imported here to avoid circular import. # TODO(@IvanMalison): Refactor to allow normal import. from vcr.patch import force_reset with force_reset(): self.real_connection.request( method=self._vcr_request.method, url=self._url(self._vcr_request.uri), body=self._vcr_request.body, headers=self._vcr_request.headers, ) # get the response response = self.real_connection.getresponse() # put the response into the cassette response = { 'status': { 'code': response.status, 'message': response.reason }, 'headers': serialize_headers(response), 'body': {'string': response.read()}, } self.cassette.append(self._vcr_request, response) return VCRHTTPResponse(response) def set_debuglevel(self, *args, **kwargs): self.real_connection.set_debuglevel(*args, **kwargs) def connect(self, *args, **kwargs): """ httplib2 uses this. Connects to the server I'm assuming. Only pass to the baseclass if we don't have a recorded response and are not write-protected. """ if hasattr(self, '_vcr_request') and \ self.cassette.can_play_response_for(self._vcr_request): # We already have a response we are going to play, don't # actually connect return if self.cassette.write_protected: # Cassette is write-protected, don't actually connect return return self.real_connection.connect(*args, **kwargs) @property def sock(self): if self.real_connection.sock: return self.real_connection.sock return VCRFakeSocket() @sock.setter def sock(self, value): if self.real_connection.sock: self.real_connection.sock = value def __init__(self, *args, **kwargs): if six.PY3: kwargs.pop('strict', None) # apparently this is gone in py3 # need to temporarily reset here because the real connection # inherits from the thing that we are mocking out. Take out # the reset if you want to see what I mean :) from vcr.patch import force_reset with force_reset(): self.real_connection = self._baseclass(*args, **kwargs) class VCRHTTPConnection(VCRConnection): '''A Mocked class for HTTP requests''' _baseclass = HTTPConnection _protocol = 'http' class VCRHTTPSConnection(VCRConnection): '''A Mocked class for HTTPS requests''' _baseclass = HTTPSConnection _protocol = 'https' is_verified = True vcrpy-1.7.3/vcr/stubs/boto_stubs.py000066400000000000000000000003521256646735100173730ustar00rootroot00000000000000'''Stubs for boto''' from boto.https_connection import CertValidatingHTTPSConnection from ..stubs import VCRHTTPSConnection class VCRCertValidatingHTTPSConnection(VCRHTTPSConnection): _baseclass = CertValidatingHTTPSConnection vcrpy-1.7.3/vcr/stubs/compat.py000066400000000000000000000016631256646735100165010ustar00rootroot00000000000000import six from six import BytesIO from six.moves.http_client import HTTPMessage try: import http.client except ImportError: pass """ The python3 http.client api moved some stuff around, so this is an abstraction layer that tries to cope with this move. """ def get_header(message, name): if six.PY3: return message.getallmatchingheaders(name) else: return message.getheader(name) def get_header_items(message): for (key, values) in get_headers(message): for value in values: yield key, value def get_headers(message): for key in set(message.keys()): if six.PY3: yield key, message.get_all(key) else: yield key, message.getheaders(key) def get_httpmessage(headers): if six.PY3: return http.client.parse_headers(BytesIO(headers)) msg = HTTPMessage(BytesIO(headers)) msg.fp.seek(0) msg.readheaders() return msg vcrpy-1.7.3/vcr/stubs/httplib2_stubs.py000066400000000000000000000042371256646735100201660ustar00rootroot00000000000000'''Stubs for httplib2''' from httplib2 import HTTPConnectionWithTimeout, HTTPSConnectionWithTimeout from ..stubs import VCRHTTPConnection, VCRHTTPSConnection class VCRHTTPConnectionWithTimeout(VCRHTTPConnection, HTTPConnectionWithTimeout): _baseclass = HTTPConnectionWithTimeout def __init__(self, *args, **kwargs): '''I overrode the init because I need to clean kwargs before calling HTTPConnection.__init__.''' # Delete the keyword arguments that HTTPConnection would not recognize safe_keys = set( ('host', 'port', 'strict', 'timeout', 'source_address') ) unknown_keys = set(kwargs.keys()) - safe_keys safe_kwargs = kwargs.copy() for kw in unknown_keys: del safe_kwargs[kw] self.proxy_info = kwargs.pop('proxy_info', None) VCRHTTPConnection.__init__(self, *args, **safe_kwargs) self.sock = self.real_connection.sock class VCRHTTPSConnectionWithTimeout(VCRHTTPSConnection, HTTPSConnectionWithTimeout): _baseclass = HTTPSConnectionWithTimeout def __init__(self, *args, **kwargs): # Delete the keyword arguments that HTTPSConnection would not recognize safe_keys = set(( 'host', 'port', 'key_file', 'cert_file', 'strict', 'timeout', 'source_address', )) unknown_keys = set(kwargs.keys()) - safe_keys safe_kwargs = kwargs.copy() for kw in unknown_keys: del safe_kwargs[kw] self.proxy_info = kwargs.pop('proxy_info', None) if 'ca_certs' not in kwargs or kwargs['ca_certs'] is None: try: import httplib2 self.ca_certs = httplib2.CA_CERTS except ImportError: self.ca_certs = None else: self.ca_certs = kwargs['ca_certs'] self.disable_ssl_certificate_validation = kwargs.pop( 'disable_ssl_certificate_validation', None) VCRHTTPSConnection.__init__(self, *args, **safe_kwargs) self.sock = self.real_connection.sock vcrpy-1.7.3/vcr/stubs/requests_stubs.py000066400000000000000000000011011256646735100202740ustar00rootroot00000000000000'''Stubs for requests''' from requests.packages.urllib3.connectionpool import HTTPConnection, VerifiedHTTPSConnection from ..stubs import VCRHTTPConnection, VCRHTTPSConnection # urllib3 defines its own HTTPConnection classes, which requests goes ahead and assumes # you're using. It includes some polyfills for newer features missing in older pythons. class VCRRequestsHTTPConnection(VCRHTTPConnection, HTTPConnection): _baseclass = HTTPConnection class VCRRequestsHTTPSConnection(VCRHTTPSConnection, VerifiedHTTPSConnection): _baseclass = VerifiedHTTPSConnection vcrpy-1.7.3/vcr/stubs/tornado_stubs.py000066400000000000000000000074121256646735100201020ustar00rootroot00000000000000'''Stubs for tornado HTTP clients''' from __future__ import absolute_import import functools from six import BytesIO from tornado import httputil from tornado.httpclient import HTTPResponse from vcr.errors import CannotOverwriteExistingCassetteException from vcr.request import Request def vcr_fetch_impl(cassette, real_fetch_impl): @functools.wraps(real_fetch_impl) def new_fetch_impl(self, request, callback): headers = dict(request.headers) if request.user_agent: headers.setdefault('User-Agent', request.user_agent) # TODO body_producer, header_callback, and streaming_callback are not # yet supported. unsupported_call = ( request.body_producer is not None or request.header_callback is not None or request.streaming_callback is not None ) if unsupported_call: response = HTTPResponse( request, 599, error=Exception( "The request (%s) uses AsyncHTTPClient functionality " "that is not yet supported by VCR.py. Please make the " "request outside a VCR.py context." % repr(request) ), request_time=self.io_loop.time() - request.start_time, ) return callback(response) vcr_request = Request( request.method, request.url, request.body, headers, ) if cassette.can_play_response_for(vcr_request): vcr_response = cassette.play_response(vcr_request) headers = httputil.HTTPHeaders() recorded_headers = vcr_response['headers'] if isinstance(recorded_headers, dict): recorded_headers = recorded_headers.items() for k, vs in recorded_headers: for v in vs: headers.add(k, v) response = HTTPResponse( request, code=vcr_response['status']['code'], reason=vcr_response['status']['message'], headers=headers, buffer=BytesIO(vcr_response['body']['string']), effective_url=vcr_response.get('url'), request_time=self.io_loop.time() - request.start_time, ) return callback(response) else: if cassette.write_protected and cassette.filter_request( vcr_request ): response = HTTPResponse( request, 599, error=CannotOverwriteExistingCassetteException( "No match for the request (%r) was found. " "Can't overwrite existing cassette (%r) in " "your current record mode (%r)." % (vcr_request, cassette._path, cassette.record_mode) ), request_time=self.io_loop.time() - request.start_time, ) return callback(response) def new_callback(response): headers = [ (k, response.headers.get_list(k)) for k in response.headers.keys() ] vcr_response = { 'status': { 'code': response.code, 'message': response.reason, }, 'headers': headers, 'body': {'string': response.body}, 'url': response.effective_url, } cassette.append(vcr_request, vcr_response) return callback(response) real_fetch_impl(self, request, new_callback) return new_fetch_impl vcrpy-1.7.3/vcr/stubs/urllib3_stubs.py000066400000000000000000000007711256646735100200110ustar00rootroot00000000000000'''Stubs for urllib3''' from urllib3.connectionpool import HTTPConnection, VerifiedHTTPSConnection from ..stubs import VCRHTTPConnection, VCRHTTPSConnection # urllib3 defines its own HTTPConnection classes. It includes some polyfills # for newer features missing in older pythons. class VCRRequestsHTTPConnection(VCRHTTPConnection, HTTPConnection): _baseclass = HTTPConnection class VCRRequestsHTTPSConnection(VCRHTTPSConnection, VerifiedHTTPSConnection): _baseclass = VerifiedHTTPSConnection vcrpy-1.7.3/vcr/util.py000066400000000000000000000057721256646735100150400ustar00rootroot00000000000000import collections # Shamelessly stolen from https://github.com/kennethreitz/requests/blob/master/requests/structures.py class CaseInsensitiveDict(collections.MutableMapping): """ A case-insensitive ``dict``-like object. Implements all methods and operations of ``collections.MutableMapping`` as well as dict's ``copy``. Also provides ``lower_items``. All keys are expected to be strings. The structure remembers the case of the last key to be set, and ``iter(instance)``, ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` will contain case-sensitive keys. However, querying and contains testing is case insensitive:: cid = CaseInsensitiveDict() cid['Accept'] = 'application/json' cid['aCCEPT'] == 'application/json' # True list(cid) == ['Accept'] # True For example, ``headers['content-encoding']`` will return the value of a ``'Content-Encoding'`` response header, regardless of how the header name was originally stored. If the constructor, ``.update``, or equality comparison operations are given keys that have equal ``.lower()``s, the behavior is undefined. """ def __init__(self, data=None, **kwargs): self._store = dict() if data is None: data = {} self.update(data, **kwargs) def __setitem__(self, key, value): # Use the lowercased key for lookups, but store the actual # key alongside the value. self._store[key.lower()] = (key, value) def __getitem__(self, key): return self._store[key.lower()][1] def __delitem__(self, key): del self._store[key.lower()] def __iter__(self): return (casedkey for casedkey, mappedvalue in self._store.values()) def __len__(self): return len(self._store) def lower_items(self): """Like iteritems(), but with all lowercase keys.""" return ( (lowerkey, keyval[1]) for (lowerkey, keyval) in self._store.items() ) def __eq__(self, other): if isinstance(other, collections.Mapping): other = CaseInsensitiveDict(other) else: return NotImplemented # Compare insensitively return dict(self.lower_items()) == dict(other.lower_items()) # Copy is required def copy(self): return CaseInsensitiveDict(self._store.values()) def __repr__(self): return str(dict(self.items())) def partition_dict(predicate, dictionary): true_dict = {} false_dict = {} for key, value in dictionary.items(): this_dict = true_dict if predicate(key, value) else false_dict this_dict[key] = value return true_dict, false_dict def compose(*functions): def composed(incoming): res = incoming for function in functions[::-1]: res = function(res) return res return composed def read_body(request): if hasattr(request.body, 'read'): return request.body.read() return request.body